From eb22b4ef7e59311b4e0439de0b3cf7356915a4d7 Mon Sep 17 00:00:00 2001 From: yuhzheng Date: Fri, 10 Jan 2020 07:53:14 +0000 Subject: [PATCH] Introduce a port for T-HEAD CK802. A simple demo for T-HEAD CB2201 is also included. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2802 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- .../Demo/T-HEAD_CB2201_CDK/FreeRTOSConfig.h | 101 ++ .../RTOSDemo_CDK/.cdk/RTOSDemo_CDK.cdkws.cxx | 6 + .../RTOSDemo_CDK/.cdk/RTOSDemo_CDK.session | 45 + .../RTOSDemo_CDK/.cdk/RTOSDemo_CDK.tags | Bin 0 -> 2965504 bytes .../RTOSDemo_CDK/.cdk/compilation.db | Bin 0 -> 7168 bytes .../RTOSDemo_CDK/.cdk/refactoring.db | Bin 0 -> 1321984 bytes .../T-HEAD_CB2201_CDK/RTOSDemo_CDK/Makefile | 9 + .../RTOSDemo/.cdk/RTOSDemo.session | 59 + .../RTOSDemo_CDK/RTOSDemo/.cdk/RTOSDemo.tags | Bin 0 -> 1015808 bytes .../RTOSDemo_CDK/RTOSDemo/.cdk/compilation.db | Bin 0 -> 7168 bytes .../RTOSDemo_CDK/RTOSDemo/.cdk/refactoring.db | Bin 0 -> 10240 bytes .../RTOSDemo_CDK/RTOSDemo/Makefile | 9 + .../RTOSDemo_CDK/RTOSDemo/RTOSDemo.cdkproj | 381 +++++ .../RTOSDemo_CDK/RTOSDemo/RTOSDemo.cdkws | 10 + .../RTOSDemo_CDK/RTOSDemo/chip_name.c | 50 + .../RTOSDemo_CDK/RTOSDemo/chip_name.h | 45 + .../RTOSDemo_CDK/RTOSDemo/ckcpu.ld | 150 ++ .../RTOSDemo_CDK/RTOSDemo/crt0.S | 195 +++ .../RTOSDemo_CDK/RTOSDemo/flash.init | 4 + .../RTOSDemo_CDK/RTOSDemo/gdb.init | 6 + .../RTOSDemo_CDK/RTOSDemo/main.c | 123 ++ .../RTOSDemo_CDK/RTOSDemo_CDK.cdkws | 10 + .../RTOSDemo_CDK/hobbit1_2_OTP_CDK.elf | Bin 0 -> 29516 bytes FreeRTOS/Demo/T-HEAD_CB2201_CDK/Readme.txt | 19 + .../T-HEAD_CB2201_CDK/csi/csi_core/VERSION | 1 + .../csi/csi_core/ck802/core_ck802.c | 328 ++++ .../csi/csi_core/ck802/core_ck802.h | 546 ++++++ .../T-HEAD_CB2201_CDK/csi/csi_core/csi.mk | 7 + .../csi/csi_core/csi_core_dummy.c | 145 ++ .../csi/csi_core/include/csi-gcc/csi_gcc.h | 36 + .../csi/csi_core/include/csi-gcc/csi_instr.h | 436 +++++ .../csi/csi_core/include/csi-gcc/csi_reg.h | 418 +++++ .../csi/csi_core/include/csi-gcc/csi_simd.h | 1472 +++++++++++++++++ .../csi/csi_core/include/csi_core.h | 284 ++++ .../T-HEAD_CB2201_CDK/csi/csi_driver/Kconfig | 7 + .../T-HEAD_CB2201_CDK/csi/csi_driver/csi.mk | 9 + .../csi/csi_driver/csky/Kconfig | 9 + .../csi/csi_driver/csky/common/Kconfig | 0 .../csi/csi_driver/csky/common/VERSION | 1 + .../csi/csi_driver/csky/common/aes/ck_aes.c | 525 ++++++ .../csi/csi_driver/csky/common/aes/ck_aes.h | 54 + .../csi/csi_driver/csky/common/csi.mk | 52 + .../csi_driver/csky/common/eflash/ck_eflash.c | 441 +++++ .../csi_driver/csky/common/eflash/ck_eflash.h | 33 + .../csi/csi_driver/csky/common/pmu/ck_pmu.c | 366 ++++ .../csi/csi_driver/csky/common/pmu/ck_pmu.h | 57 + .../csi/csi_driver/csky/common/rsa/ck_rsa.c | 1285 ++++++++++++++ .../csi/csi_driver/csky/common/rsa/ck_rsa.h | 91 + .../csi/csi_driver/csky/common/sha/Kconfig | 20 + .../csi_driver/csky/common/sha/ck_sha_v1.c | 559 +++++++ .../csi_driver/csky/common/sha/ck_sha_v1.h | 61 + .../csi_driver/csky/common/sha/ck_sha_v2.c | 700 ++++++++ .../csi_driver/csky/common/sha/ck_sha_v2.h | 63 + .../csi/csi_driver/csky/common/trng/Kconfig | 20 + .../csi/csi_driver/csky/common/trng/ck_trng.c | 233 +++ .../csi/csi_driver/csky/common/trng/ck_trng.h | 40 + .../csi_driver/csky/common/trng/osr_trng.c | 241 +++ .../csi_driver/csky/common/trng/osr_trng.h | 44 + .../csi/csi_driver/csky/common/usart/Kconfig | 25 + .../csi_driver/csky/common/usart/ck_usart.c | 710 ++++++++ .../csi_driver/csky/common/usart/ck_usart.h | 89 + .../csi_driver/csky/common/usart/dw_usart.c | 761 +++++++++ .../csi_driver/csky/common/usart/dw_usart.h | 116 ++ .../csi/csi_driver/csky/common/wdt/Kconfig | 11 + .../csi/csi_driver/csky/common/wdt/dw_wdt.c | 259 +++ .../csi/csi_driver/csky/common/wdt/dw_wdt.h | 44 + .../csi/csi_driver/csky/csi.mk | 14 + .../csi/csi_driver/csky/hobbit1_2/Kconfig | 0 .../csi/csi_driver/csky/hobbit1_2/csi.mk | 5 + .../csi/csi_driver/csky/hobbit1_2/devices.c | 829 ++++++++++ .../csky/hobbit1_2/include/ck_sys_freq.h | 68 + .../csky/hobbit1_2/include/pin_name.h | 83 + .../csky/hobbit1_2/include/pinmux.h | 122 ++ .../csi_driver/csky/hobbit1_2/include/soc.h | 333 ++++ .../csi/csi_driver/csky/hobbit1_2/isr.c | 229 +++ .../csi/csi_driver/csky/hobbit1_2/pinmux.c | 157 ++ .../csi/csi_driver/csky/hobbit3/Kconfig | 0 .../csi/csi_driver/csky/hobbit3/csi.mk | 5 + .../csi/csi_driver/csky/hobbit3/devices.c | 804 +++++++++ .../csky/hobbit3/include/pin_name.h | 93 ++ .../csi_driver/csky/hobbit3/include/pinmux.h | 99 ++ .../csi/csi_driver/csky/hobbit3/include/soc.h | 206 +++ .../csi/csi_driver/csky/hobbit3/isr.c | 244 +++ .../csi/csi_driver/csky/hobbit3/pinmux.c | 138 ++ .../csi/csi_driver/csky/phobos/Kconfig | 0 .../csi/csi_driver/csky/phobos/csi.mk | 5 + .../csi/csi_driver/csky/phobos/devices.c | 843 ++++++++++ .../csi_driver/csky/phobos/include/pin_name.h | 88 + .../csi_driver/csky/phobos/include/pinmux.h | 221 +++ .../csi/csi_driver/csky/phobos/include/soc.h | 327 ++++ .../csi/csi_driver/csky/phobos/isr.c | 216 +++ .../csi/csi_driver/csky/phobos/pinmux.c | 150 ++ .../csi/csi_driver/include/config.h | 29 + .../csi/csi_driver/include/drv_aes.h | 189 +++ .../csi/csi_driver/include/drv_common.h | 47 + .../csi/csi_driver/include/drv_crc.h | 150 ++ .../csi/csi_driver/include/drv_dmac.h | 171 ++ .../csi/csi_driver/include/drv_eflash.h | 157 ++ .../csi/csi_driver/include/drv_errno.h | 121 ++ .../csi/csi_driver/include/drv_eth.h | 105 ++ .../csi/csi_driver/include/drv_eth_mac.h | 422 +++++ .../csi/csi_driver/include/drv_eth_phy.h | 124 ++ .../csi/csi_driver/include/drv_flash.h | 175 ++ .../csi/csi_driver/include/drv_gpio.h | 192 +++ .../csi/csi_driver/include/drv_iic.h | 288 ++++ .../csi/csi_driver/include/drv_intc.h | 163 ++ .../csi/csi_driver/include/drv_pmu.h | 125 ++ .../csi/csi_driver/include/drv_pwm.h | 94 ++ .../csi/csi_driver/include/drv_rsa.h | 223 +++ .../csi/csi_driver/include/drv_rtc.h | 161 ++ .../csi/csi_driver/include/drv_sha.h | 172 ++ .../csi/csi_driver/include/drv_spi.h | 320 ++++ .../csi/csi_driver/include/drv_tee.h | 640 +++++++ .../csi/csi_driver/include/drv_timer.h | 168 ++ .../csi/csi_driver/include/drv_trng.h | 118 ++ .../csi/csi_driver/include/drv_usart.h | 495 ++++++ .../csi/csi_driver/include/drv_wdt.h | 119 ++ .../csi/csi_driver/include/drv_wifi.h | 1051 ++++++++++++ .../csi/csi_driver/include/drv_wifi_wps.h | 101 ++ .../csi/csi_driver/include/system.c | 33 + FreeRTOS/Demo/T-HEAD_CB2201_CDK/driver/uart.c | 101 ++ FreeRTOS/Demo/T-HEAD_CB2201_CDK/driver/uart.h | 20 + .../ThirdParty/CDK/T-HEAD_CK802/port.c | 150 ++ .../ThirdParty/CDK/T-HEAD_CK802/portasm.S | 126 ++ .../ThirdParty/CDK/T-HEAD_CK802/portmacro.h | 159 ++ 125 files changed, 23809 insertions(+) create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/FreeRTOSConfig.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.cdkws.cxx create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.session create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.tags create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/compilation.db create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/refactoring.db create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/Makefile create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/RTOSDemo.session create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/RTOSDemo.tags create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/compilation.db create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/refactoring.db create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/Makefile create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/RTOSDemo.cdkproj create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/RTOSDemo.cdkws create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/chip_name.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/chip_name.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/ckcpu.ld create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/crt0.S create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/flash.init create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/gdb.init create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/main.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo_CDK.cdkws create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/hobbit1_2_OTP_CDK.elf create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/Readme.txt create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/VERSION create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/ck802/core_ck802.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/ck802/core_ck802.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/csi.mk create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/csi_core_dummy.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_gcc.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_instr.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_reg.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_simd.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi_core.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/Kconfig create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csi.mk create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/Kconfig create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/Kconfig create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/VERSION create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/aes/ck_aes.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/aes/ck_aes.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/csi.mk create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/eflash/ck_eflash.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/eflash/ck_eflash.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/pmu/ck_pmu.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/pmu/ck_pmu.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/rsa/ck_rsa.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/rsa/ck_rsa.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/Kconfig create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v1.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v1.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v2.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v2.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/Kconfig create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/ck_trng.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/ck_trng.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/osr_trng.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/osr_trng.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/Kconfig create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/ck_usart.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/ck_usart.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/dw_usart.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/dw_usart.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/Kconfig create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/dw_wdt.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/dw_wdt.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/csi.mk create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/Kconfig create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/csi.mk create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/devices.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/ck_sys_freq.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/pin_name.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/pinmux.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/soc.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/isr.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/pinmux.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/Kconfig create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/csi.mk create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/devices.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/pin_name.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/pinmux.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/soc.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/isr.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/pinmux.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/Kconfig create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/csi.mk create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/devices.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/pin_name.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/pinmux.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/soc.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/isr.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/pinmux.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/config.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_aes.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_common.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_crc.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_dmac.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eflash.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_errno.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth_mac.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth_phy.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_flash.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_gpio.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_iic.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_intc.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_pmu.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_pwm.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_rsa.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_rtc.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_sha.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_spi.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_tee.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_timer.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_trng.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_usart.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wdt.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wifi.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wifi_wps.h create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/system.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/driver/uart.c create mode 100644 FreeRTOS/Demo/T-HEAD_CB2201_CDK/driver/uart.h create mode 100644 FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/port.c create mode 100644 FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/portasm.S create mode 100644 FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/portmacro.h diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/FreeRTOSConfig.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/FreeRTOSConfig.h new file mode 100644 index 000000000..ace104cd2 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/FreeRTOSConfig.h @@ -0,0 +1,101 @@ +/* + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H +#include "stdio.h" +/*----------------------------------------------------------- + * Application specific definitions. + * + * These definitions should be adjusted for your particular hardware and + * application requirements. + * + * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE + * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. + * + * See http://www.freertos.org/a00110.html. + *----------------------------------------------------------*/ + +#define configUSE_PREEMPTION 1 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configCPU_CLOCK_HZ ( ( unsigned long ) 24000000 ) +#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) +#define configMINIMAL_STACK_SIZE ( ( unsigned short ) (256) ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) 16384 ) +#define configMAX_TASK_NAME_LEN ( 12 ) +#define configUSE_TRACE_FACILITY 0 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_CO_ROUTINES 0 +#define configUSE_MUTEXES 1 +#define configCHECK_FOR_STACK_OVERFLOW 1 +#define configUSE_RECURSIVE_MUTEXES 0 +#define configQUEUE_REGISTRY_SIZE 10 +#define configUSE_MALLOC_FAILED_HOOK 1 +#define configUSE_STATS_FORMATTING_FUNCTIONS 1 +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY 1 +#define configTIMER_QUEUE_LENGTH 36 +#define configTIMER_TASK_STACK_DEPTH 1024 +#define configUSE_TIME_SLICING 1 +#define configUSE_COUNTING_SEMAPHORES 1 + +#define portCRITICAL_NESTING_IN_TCB 0 + + + + +/*#define configGENERATE_RUN_TIME_STATS 1*/ + +#define configMAX_PRIORITIES ( 200 ) +#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) + +/* Set the following definitions to 1 to include the API function, or zero +to exclude the API function. */ + +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 + +#define configASSERT( a ) do {if ((a)==0){printf("Assert : %s %d\r\n", __FILE__, __LINE__);while(1);}}while(0) + +#define configKERNEL_INTERRUPT_PRIORITY ( ( unsigned char ) 7 << ( unsigned char ) 5 ) /* Priority 7, or 255 as only the top three bits are implemented. This is the lowest priority. */ +#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( ( unsigned char ) 5 << ( unsigned char ) 5 ) /* Priority 5, or 160 as only the top three bits are implemented. */ + +extern volatile unsigned long ulHighFrequencyTimerTicks; +/* There is already a high frequency timer running - just reset its count back +to zero. */ +/* +#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() ( ulHighFrequencyTimerTicks = 0UL ) +#define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTimerTicks +*/ +#endif /* FREERTOS_CONFIG_H */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.cdkws.cxx b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.cdkws.cxx new file mode 100644 index 000000000..26bca8d93 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.cdkws.cxx @@ -0,0 +1,6 @@ + + + + + + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.session b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.session new file mode 100644 index 000000000..06446e7cf --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.session @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.tags b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/RTOSDemo_CDK.tags new file mode 100644 index 0000000000000000000000000000000000000000..cbc38e0cc4fc10da4b7019ae6014d32edd8899c1 GIT binary patch literal 2965504 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

h4%|K`-LbDK> zjZh9kxd`PUl#kFHgyteN521q)nvc)|^8P0>Ad)_XIg|M}dpLU?XW}}zH~9j-H}rNk z#HZ$9IgctT@)LACH>CN!*7WkawS)Cy7Ew;a@yCCa)1bl9_6U4w9U<(=ULIz+|-Jei;|Y<&1P<{ z8k-Y6q%@=TDUG|zHGdv1#^rjoS|Z{!e?e)kOTMUH!8HiQ5M?l8K*hA>B+JbT?s>ZTp3-=LnFgQO`h+G#_^sVOtD?W=Cp< zEI8)o=F00Pc{NBz9<`n@LNDF$8Ik2pjTbKqc-;#vc0O4kg!tzh;!_tYDltrKV$dZd zjJ4mC28M~b1S)hPZpPta8iVFXYLv9)Jk*wxL8L713|$N6YTMlG-KtTkDWD>>KU!mg zu$;7b^ko@hizg2#tfiaZf|h)ji%Ey|JyJbP{S~=+EzI7nr<2 z?w4CYKrfK{B`d4!o`Nz*aksa98p^!ArzOTzDjxav7Ou-^`bT(NPnGd^OEJz~%DKiTe?U{F(|F8^eW)EQJ!2G|OT?gxbr?WfQ zYuS6*XV`bxFWBEXfy?CbK|=UG{y&_JTMDaw$8+a%*K?0^Z*X725?eZ~^A&*v;4YZ) zpUj`fKgPew-w5Gr{6{eB|CIlM{{$oifAIJOK8vF}hoK1BLiBVdZBw4OMLGdFHHWqv zJ)NoNNJ;eOv4<*89H2N6k$fNnuPSf(UU4EhMR{V8@`O`)qDy(=RON{)l_#E1p7=y@ zA|+ON!m2zmPkCa!@`N%UDLa%`yrewwnc@UlM9E<3bMZL6EeEIadF0V{Hr3lVd0RV+ zeQjOsp3ayT$#zBHd|6XRr=!!`0%z|r^HXGJ;mqX|;Y$>_>#ws9o<}(zR}#*9S?T zOyK8`g)`n)_7kf!EpAFfNQsC;TWZ%cV zwF9ca(c09Rc^g@d16RM0)MVr{AnK^}EGcl?g$#UU#^IzA!DW3xp2y)@8ernfED+D; z%FiA~?j_gKv#pk~2OSJ5s_dcTfL$dSs<2pFh|S|pDK#kd?iCLaL{t)cm}@Kv{wb6L2;j>i9olJ|c! zb0`CU7s2{pA=?A{dm&qZWGb*aJ~e!{UB1j=Bjfn0_|!B!^C_>W9CXK^-b5Z+Mu?)7 zz@ZXVYZ#xeAY@U)7&2Ma<`BDz5JpOdLnf@%2r`Z!w2_M4aA_+aeaXnHS#8y1T{X!u zS`Zs*jst5XsGXiXa;ho|65aYx#Y=X{_vk`(po=4%t#4colzq-x--eisL0%YFHrNYK8|;N|5AwqJ zg9m%zn!#Rp3Os~tvF0LF&-l)4zIrhAm>)BdeE;K_xeWZ>#AdU7+(hm|Uf@sXFAP5M zqsdsuChl+8+*{*QLBah{f1Y&8;VE=2^MEmc@(Pc=sI0(ULZ>g9!+-%)gByHJo4mdn zQJufRx5?x6`C7qrh~XUIeux(9sB%7QOML2LEzZT2j*4g%`QpuFWnQDU9r?Cs@jWe4 zfnnqqHO40%6Q63+DsXv)E2@v#AE~x0oz>B*?GqyMUG9t)-&4u{UktYtLXhHF%KZ(b zc0xz60WdAt3&0_MD@=Q`{8{3AUs>U*au(QJ6&|#%3|Dr6)r1OZ03YnJ2#4iysf#y? z1jL?<_VWdGL^IgiTnpLhXo*jq;h!O1S7@_&>?LlO=kVp8%C?T-b}JgDr3Kh}W2&KF znIZ4xN>_TS3tUzCdenP;$A+ynjcs*xO`Un3{7}Ev(N;gZG5rxJ?=i5+c!*SAh4xBt z9S%yWg`Prtk)zyE<)|ok<61@**Mn*lp$^mA?(^2ex3a-Q_e7dHo7!4CW;c#n2PNGE z7FP~ER;=10m)%b6jeDGSx4WR&?pab@RAhGzo>xm?jm}d?7wLdU50s}Ij96q#Z*Vaf zi-C_rh09a5veG`>#~0zNupL&m{@DH3B77wCH8Y~9PMJBGjlk%G+W6Ew>0ybD zcoP|{koLQ^VNp$2T~}*o*Q^d|7=NA5>-BZEb<{Kvo9>;n8ojj*p87g!5u?6gLybt^ z*4DbNY5nZRgfg(mc`R-ch)X500n^mE)$Q#ZF|V2Q`_DEqY$JOw()^tOa(lNibNPq) zhoRXpV03VTsJJVSLowah{=ZVGXMo*&{dF3z)}Q1xBPKaw0!lkx!j<}yyh?wPf5?Xs zR+rc6U-0YnCwaa8ByUJ$KZK9`r40OC#oWpKoq3JFCGsujP?7N3;MUG7hPr|A($qN*CxdQtX zIFdFos2U|dtGNC>1^yM|6pI2Y@{>}dNIzMDcPa2*1^yc2v5W#wQs6^Gogh0b!`d7+ zm#3hx(3O0ds1rm^J1T=``=I+C9jtjwC&LxOc(+-!9PCA#I0Yn#kOj3c-bMt_)9xmI@`QuBLP0n=2z=p|!3)D|~Zh z)-$<(m8pdeT=} zo&O2u8adb+;P9Sr$lze!f+G3)e+npHWFB|={z^ff}? zAoMLl-^r1{AcQoG1f*dkAPpk{X&4De!$?3HMgr0>5|D4bPd$6PP0*9Q7<5_Ja2BMV-qWqW=@aoXdcivWu-}&K-$P|8Q*q@Lvb4JI`C> zUwXGwV5UMR0pfI-8pRhF1i3>DXXcd5W+hn``!SXvN958NKj5-(OOafmZ1OXwGThznI8 zV(1oGu?|-)maEDZ{bC)gR;&=`P?1O^SgcyrVufxIi$%u&v)D74=vn&ESO-AXKxUQL z3y42R`PjsOM!g0!>NTKIuK|sE4QSMBK%-v6wX92;{TQx5=&uM}iO^LDU5yYJPi2b4 z`ZQb%Xh8@O>&cD%ksJs^<6nzdCA$}JlbO}P2BD5W$9SH42=rV*ZN2nX2T?p+)s0X25g!&NL zgAf{{322NapfQ?&#%KZ>qX}q?CZLr`;X1_cdW3F3=thKYLg;3MZb9f)gl<|3@KaO(xcZ8lm=t+d0 zLg;CPo7^Z`O2BJ>eL|3v6xgg!y&UkH7Q(7zG-457~v`U0W}|4&?}Frlxk34LWv z=qqbNUs)6S%9_wu)`Y&YCiImxpN8EK&orSv(}em= z6Y4WfsLwQ^KGTHyOcUxeO{mW_p+3`u`b-n*Gfk+^G@(Azg!)Vq>N8EK&orSv(}a37 z6Y9}Ss7Et>LEisF*ye-3bHN9oi@hD}`)&dIp9jMX{Yvf%?va%-{yBj?yQuF*uu$C_Go2SGw-q>GFk{$W(Kys?kUlqdy z>=#j6N3E7|Lcd!)C7Lu6`d#Fdt-?k8krTQpiTz7sn6VrM$wGf6Nhj*L1%dRW^!|z% zW+CVCEc3QDwD~+>hpDQmenUX{%3?P5my?XROM=%6dv34^XfdYtm&PzTkfZV;B6_eUu5SBvo%a89rOs$Y`6PMb5sLD-Hd^V;3FS1+{ zwOdjcCbj<%#SNrZs#c``p4xw~B8B7(QhpoXzgWQ^>V{Nu`mYoE7m-Sk)j!?GgaW1i zV(woU!(_qJwGsdB9+!Pt`p*;k7pPtjw0@eC;D06mKk)uv^riEo&p}}2wf(33 zzt|7|DgPg;iT_9C|5e|A1A1Gk5UNIK8A8huT7l3?gwQwX&;9>UD@0$tKllGb^>Q?7 zJ;xw)EJDX2bUZ>QAmm5rM1)R4=>N6-fBgQV5ze3c|DiUy6Sa}c5V{sh#U}i^o^MGt~_nhdkF1A=pP8ZkI)AQq5bhmXn%YX+8>{U_Qxlo{qad?e|!?! zAD@JFlP00vq)DHnyrBK@Noaq3651c1^cA`f?T=4F`{R?){`e%cKRyZVk7roqG&3e4 zgj<#srDY;?076*^O-5)6LI)x=6`^SeWg|2lp&1CxL}(U5vk}TcC>NnTgz^!Z^S|2v zAH?|oad}RKza#VnLQf*}6hcoU^bA7L=kP4zhxW1sw3jWQy=>tHbRXKw7SLX{fcCNl zw3jWQy=(#PWeaF8TR?l+!kdWuTL`_4&^rjB{!Kvrn}GT^0rhVJ>fZ#^zX_;+6Hxyq zp#Duj{hNULHv#o;0_xuc)V~R+e-lvuCZPUJK>eG5`ZodfZvyJy1k}F?sDBes|0baR zP53XW>mLyM5uu+D`Wc~L5c+i#eAwDpVi_{-Z1DNh%=*|Z>~ZYLuoJKicKI%6``D}5 z8^HtcJ?um5@1pFcUDR=_^p8W-Mh2z0)U<%j-vvLQ*9$`MWfcpzq$Q=$A z!j^$HVIAlaw}N-@qqq~mUf9{(1>AOS7swS{3m${}x%;?BxF@*hxR=3m@ILOJ+-Ka^ z+z;Gu;6XSMtPqa_k3t9V)4(R_T<{-$82A<{<6YoUcn#mcAIZ1#o4}L!iD0YvT>c_{ zC*Q+g2_A-T_dliIN?_LApO}pzLyngq32;bP<4B<7q+d-Fd!|qOq_wI%f zL+quykB9J{9v;HzQ9idP4(MOh16_G+QV(qC#-7uY1mRgdpbr~+M$beD-94b_JL=0G z&|Qsf>6r{+dQTOE$MqZmVSUe9c>d`<;0Z9+)6)py${r}usFQoZ;$^I>2gXUUdwO8( z6uY#S)KXb5G@IDvy@cbLy+*ilPj51W*Y}QxGbi=}uh>(14}dct_kul*Q9tx%!imY@;~;eQaS(3ri-oYM544YCkLVL1+}ua% zq%qQz5*o4+LT2EPar}IBOr|FfOZaF@y*9frE^=8GSYgXZ00B znA2AVVP2mL!u-DF5H9S4wh?!5ALKLcFMYKT9@giDa7iEJGtS=E3Sm*755kf@sL!~v zzM~+l=z|s#w{#EGXI%9jsL#0Nd!Rn!j@ScFFmCmpR0utLpg!Z)?t%J@^X`HAj9a&7 zI)oec%!aUKPdUw+_I+#!ejRw4&iZopg!YH+ynI)cgh};&(rsi zCw|r*FR)~+Y#aj?|0c0>SqHm{-3agfDPZmIR`B}$4*LW61DeSd!+U%Jytntkd-@%` znKStkcngV_uifC&`zi46Rmc1IbNH*_?RyE{w-5Ob7jibY!(-tOA^Y>h0-3FXI71S* z#;Z!mrtat;Q~1zsHZ`M7PJTC@hke<=9y&c)=_sdH|027(q+prd18zvhtdo%qZhVja ziMXK(QYf{%%I#&I@``f%m^#_D!F}b?KfpO+PcL}6d!@U|0sibtj>sq__Vj|MK_L_j z<3jGz_sKFLZNL-vQNc^A-LUa$@X2nbXXwpu$}&KtAqc@Yh*u`K*IiL&hrQoI>st8< z7o4D;>#3N75Km0_1tcD*k0@%wFMw^}oNx)0(`7I6I6F27Qv$V4gd^lhU_;q-8Sz*p zzsp@}Uruj2P&Eba5ymUYRoTm(U^*B$8P$`>U5UXKKr&I~D)ZRNO5GLJE}Na)Xu41{ zmE`g~Wokurc@^0IE~fWhs+mgey-1cN!Z&Dkk}#z{#)5^HC6T*!rt#2jsXPhIEolkF zT_w3~hejH??}EU?4$7efJ#%FgtDVg}P$1}WVM#3#2C^ehA{@6% zREVy&X`4i4SpigYwaWz(DKz7ks3#FB7nApYG;f58Iq zh<>^nEY+2m58Md|H|c4~_+~wc-J&P4TlFM%o1VmO*OS;CdJ+TaF3I3^xT%_<8M(ew zPhxlJN$hU&{?BBNmUQ106st$vtHK690_)RFK4e|A7GzmHnaPfliBaM z1a=vh%FW;o<(6~J+)3P}AR+iS7!`cM$MO?lq`rh-24nMc_+I{Q7zupJr*Y8Zd*jee&lGQ)lkd#9P`m;_=!)~iE1-HaE)cH(5W3?0(8&eT$#dx# z1hODIcM_Qv+MJaEG0A+{D5b#erlXV>W#>YIgtVFi1GSL9aMw~pJ7pU@57K6oz$>yr zR?tlhjD9Qz8C`o|RG9vj?0#`nnEryss4)Fi+128x(9k6#8xn_P#vnC-Jvvz??=Q;VFPOHRmu~qWrES(j1)F8J>#Olx#;;!5gusTHSWs~uB zWSSFTgU_V*IEpVgLR0k>w;8wMODS1s}wo#Uf0~wn77~{nVT(KI^b%TQ{{eHQ+1Y26AqCJGxLRz6Kw$D#-VLCA)xO7qEx1 zC2S?T0(Jr$*>+e3JOTWFZ-W^@53B&*%-#j-e^0P`VfAkx`w6W5{lGD>@+WZPVcl;U zmkX=d3JDuAGt9?D()v(rg7xxgX^zG$dhjqSBxG%XMc!rOM zm4xxU6;}9i`311PR{|EtSAhTUMp)b1!k+*ud)xT!u&#GCe>1ErJj6c%YkIHq`vP9X zway2+uQ;CLgwu?FqsP;YkJIBB#=q0!nZ_sR@hsz$^mw-MDSAA|_%uD9YkYG4wIEA+VC_$oc_Fuq2Q zJB_c?<7LJ-=<#ynoAlUie2X4;8Q-SI-Ntw5vB&r>J@y*kqsKnuK6>0^{0BW=VSJw+ z|7!ez9Qv3!<0&oZ<@x_<6EW) z^!T=EB0auiN~6bjP3iRbp2?EPPh%#ts~A}K+Wo4X?xmDor<7n$9@dlC zBYF~hR8L}$=}GKwdJ=n_y#HkX|NrNE{{zSdjN%QPu!n|M(D1J`ypo1j(eP>-UPHrc zX?PtCuczS+G`x|9H_`BB8s0*~TWJ_=`nORox6|+r8uruhP8!}t!@FsC4-N07;e9l` zpN0?6@Ie|rM8k(^_y`RjrQu^V{2L7)r{Uje_yi4~q~TLEe42*O(C}FrK1ajnX}Fh$ zFVOHs8oorsmudJ44PT|;d?aPN5g;6@O>J7K*JAd z_z?~NNyCq6_z4aFMZ-^N_-`71M#Il(_yrCBL&Gm=_!SMmrr|d<{Fa8_(eQg3{+EV7 z(C|kZ{zSu{Y4{5bf2HAXH2j@}W`>3=4LKU}G>oC)C>qAnFph@tG)$mjA`M5=a10F% zG&IuCL_>jwX7c_gFf9xl&$O_e?Dt$3b1(NTe<P7fwLg184Zh^}QT!FN%X ze?xrgRLPUCGcGk_Yv=;lB&X}+nky{S0Jg2IrKPPkor~jVjSnGIbwoD=e+4?`R_bJwgAt8Wzs$H+VX>c6h)S?Z(-S8OI(MpE?C+z)5pp zFWVpNPYq{ZSq59yuou5S*q?YfG@OvDV6r?&>ODfk39j-swbnOxHF)W8l&nzBZj7C{ znly6i8Lzh9*CtzP)GUZ{$rvpgR@!7MhQf02wwL9%gxZO^!|jNRsEB&_qNK1XF#ZQ6 zL76z2|hM_q@*Z_UcUU1)b@= zs58Bn61hqyn*lMO+n7h0mzWQjZ&;p9X0zBitc`WE^=t=w5_=)LhrNw`lzoZ)fc=K! zxnx)k%;FYB_5d7M4`g;1qAsgg6nXnPB(+JxX_(lbOT7f^s*lbeZMGCx1fj24e z#R`100xS5N|Ao_&Mk}ylT`p;{B3+T6Bt?Fbb}FuaM1kMNIN7McxeELj1y=YnPCi=I z*Rc5wBHKpSJ!QUz&HLaxq3&zgvPQE37_ZY#dRjYapJtLNUOQ>Bc9OQ&V3W3YUDIZ5 zg4?x|p4U$LOfyN)E|)M>`>unvlWGIw|GzQJ-`EWH81@ZrA-9A3nm?Ssg6Wcf^VQ-q z@29KcQ#1W$ail_;MPY^FoD9NDArrebEv%@HH1<^vniT#_R}y-mnMZ*8km!-`w9{5J zFMrNF`RCdEV-2Ak8s80=OD^2$le@y*28Fon%=gPehJ9`oW$^pxKr4FurrvG z)ZX-{p7T%c9Ul-D3W(nj_gKRyR3>jLuQZ zXsBuvMDa02enS_8GQFfXB_uVrRgxNW7Oe0T+RF-7>Y3+5gLzKK0$I1FR5xXmEJ za~H_>{s@vfv%xaxTF|;XpTC8Fk^dL}k?OyX`H%VkFs)4MEXC}&&}-b$NX%>6N?gDxD{+z*1OH2IYD?VH1sMNf)`Q`5I^2~T$92f3e?zI|(WGErHg#7|G( zepGlekrk%NXQXdGIy{-kz0%|}Cv86_ylAqjJIk{D*zl^O+E$dn*%{l9i(w8`RBceI zm|k&C`u5|)b3g=_Y4W-0JHYRyvRM!#tTg$&N30Gg5(`BxJ?#RIt&+%-!Y0B_e2e!GQP;N zBR0I?R0f)+U##;xL&pD!45(GsF%Pim@b2W^&03OA(~>&EV?{2g6ylW5ZzKkNQ=WF7zquhX0(PvuPPqX@QJI9g_6FnC3%;P zg@&DXt-(+VjJC4mgQ1afP>zNc=~ew|!y%_0O_DrYmGMxQUbIyPM5hMce=zg1k$Ik- z277(`VEn(0`xkHLiK!R(HN>aF>JhxpbP0kk%V;khdE!z_L!uS!ARRGFT51JCv;3)W zE`v6t!H}zP*C?0%LtELz6;fhz=OJxQ^NV`qS8XTf zD_BI&z&klZ&u`%64BN;NbfK-jk27}-$v4`^8G638w{e{0{T~g=|M0g@Mf!)x|3nly zh?uDT@@mP$yz&R9_o~kMdrfD0uj@?j4V~$|sWZK|bf)*V&h*~VncllP(|a$G|BA_H zc?P6@lGse>0S;x$VHcnobOFy~cYx;aonZCv6|ndB4Osd!gJfV1Sod>+UB3-r(eDh{ z8@LLr`27v+_k93T11!i4X234NAz-I(6<7h;3L3nZg5AA4z#iXAV2SUmK*-$0^f2c$ zCxRaDxBT10Rz|z8t+R~`xHDZCR$^Fzp%X#tAt4xw5Skgq7?xmoF@{6A*g6{BYaN53 z0Yf8(85mkI%*5~j46`ttjNudv55#aPhSM<2#&9}@GccTq;VcYiW0-?sE{1s+=3_Vq z!?_sF!|)&s=VQ14!-W_w!f-K$2V*F;H`2_kD^Y4DE>R{fQ6?@?CN5DXE>R{fQ6?@? zCN5DXE>R{fQ6`u(WK7cQ<_LWM!8~I&<7ZxH^VqZ5Pr=$>59sGt@>eqqhC}jl)|y{W8tF7cPF*>- z&e5Z~)#laJBW-ph*D7=B7Cq>y%%{)Oi>_jK;YOY4Dz_G%1~aLk|3i%a#QzM32iR=( zV)jSQ%RL1)IWA+YU?p@#Q+(DqD#I+*Uf=u8}U*?SNe0wvO;YqKCuh6Otq{RG%QwH>snpp{U60#4`JeW%=N4tEP7wbFJZvqF#RQd=QqY@ zB%xQ8(-A07X2H&s*C-RG~B*KGnG!P-#untRiw1l<@4vX#oa}wXF@!AXH!_ z5r*OJ@F&M-EY`|SZ5>EOL8j`xO`G;po|?Vc)&=mSuJY%_XB_I!>rkzy`nJ|}P3t`k zwP4z+sk3AMR9CZirZrHDgs+D%_IRyg9_YuInKDQ21Q zgxr!twiWDLC%)?+7oSm}_2k!kJ3aNa?NGbTO`T2N{Z_--RuG^|{Kmh4=IwaZS_E@+ zASKk*-sx#;^|Y;9x4)l0@b`Jh3H zc!VY(G!daRgwhd0UVY5StB)CZ^)Vx_K4#?A$BexCn6nTEF7%2)yIsy`k0YdA2agmV@6(m%*d;c8F}?FBdBY~$N*1c4`K^hSJeH1A^%@up2TAv_>YeM+ZlZhf4={soVoeW_dn?5?vMBW|AF@Z z{-N{!hTinv*ExS5=uGcJo#}m~GrfQ6Oz&fz>3yOzy?^OU?^B)W{hNIMGnjiB_yh*S>4D zcG4#8q)WAvZr4tFQ9J2hnn@|i+DX(yP~gE(8#thw1PWEvl~wMP679R1wUe~Vm2#E# zUGHiqeW#f;Hc2~ahIY~l&7_REQj%h!T98>NP$ZexYu;tPUNb3ahjx@4;cu<7wUSl;g8&*H22Yx!&G8lWPmh9x*lj(JqZv$P1$MZ`nh-um@}KFQu3zOCZhSIuJ|&* zDyXc~h`XqXY9&=l*YC2^&Xm`SqAqCdds`ctTGvOvGEUt;%>Y%1{BgiSp$JL!_?kMm zW~ZI!pBisj=%3M|@`On3bT<0Dpp4wy5Vc3O%v;}CC32DFu@dqaI-i|(PJ|{+GP=K- z^ft2opU8lVMJBcZ4tKHRzzX1tAmwv5$N(4dd-ziRH29{U4iY?%DLMisc18|gD;fd| z^N|Gm3Li?kLtU+57t{>!T4-3b>+sF4&zuX?zl$1m@b;KkuLpJc#zsJ4bata*Gf;1h z8uer0NuIDG#-FG8U`8?%4iXPnSB38aoG%)%^kzN0{Z<|OEKm9t`|NcZi0I?Q7G`X)OmfKExxLz z7O&6N2Ky9k&5IVbZ?V-jH`jq-4bcmVW^Wx-4(KHJcg(KmKdg+KaA*Y5UG<<<(%GfG zJ)|V~QFYt|M1`P_*$-C5O{gA_Y^4`I zMGcNt;sUyQU&+PWC4qr*&Hhw@}EDH)Q-8EMH>q&xo#I$w*i6w^q!5YeA-%UgFr+gyx= zWJbyaY_=*@z>+?0By5nN*@)Sw$$=)Dz!vpltRgpJMp{y#v&s7(&-~6Xzk>&$JGrso zx9c^q{@uqP$X^VeKbSQ{omWQ%M5Wl)6ME5BF>de)miKg$4IPyZuxt%oJN&29p}pEoc&*+ER5E|$3pd;#Wi2XmF|`P>@L z2m67$xZAj=xOcg4_%VDYKaY3vwR{(U2KWxSg?|}#1V2sV7jmMHYUrdbFNgqqR9p5^ zx6J|P;G)B7%k$#NIpU?@65H~s2*6*sCE!O|a@Fm$J1bl((`;mOQ0Boq=sG-YuG;yk z6>0Or&lA7iX@{wuhwB|G{=Rd`4f9nK;Ep*e36#Ym)daW$B#DU_$8-S?1qbawDErDx({8Bc3)vcE9LG zJk3NaKR}e8taOwUSKDbRva3Zm;$zmy$OherrxnSvD{~`0rcQQk(2aQ7U*zWkZp72Z z$<77ch^HCl=K^lT(~@N8f^Njq%mca+AG2P5TfmKY+E`hZWp2bRr;+!+kWFFO6qx-_ zXXk+z;8J!OTMHV%o7ofDbHM-a9*_jMn|+LZo_&-32t5D(%*BExa5^`Y%jXUOpTBPC z4Vt)4?s%{pbTMcSUI!Y%4|C6eq`>>!=b%T(^G1FGKbgoz(Q~Bexl;5zDY{LHo-ai&kfIk!(Tk<%B~o;|6x|_3 zFO#CXr08xb+9O5#r05 z)F4HTQq&|x%~CW;iY80Zu~Kxr6rCVNCrZ&YDVi=tGo+|hie^gDEGar!iXJFMr%KUj zQgpf$ogqbMCGvNHlJB_;^BD6U^AkH3EP#}PFHk>N0l$-dk^P*D=dzeT8 z#u6z>L1e79L{}JnNxm)lPcb`>R2wOJi`o4@DN83cQAO)bzE?YGuVzw;T|4O^7`BfO zm#7`2KCXgF&(N6Bea3LtKS?aO7o8%R zGK95jvSD5Y8wmrILlm4T@_D_kstWh)#+c$G;!+oG4OJ5mt9BC`2+qoC&vM8!Y@?DL zRCVdW;Nq%Cwxzwxv)NbM-cCdw8e>gR5i@WtEVmbcH_?^OB^86WNI(^cQn|+)dm) zu*&xycmn3ZD)A#BCrSxG!QS@n_Q))RAOWOHOrbYdv?J%E?i`k%ckYmCI|JXa=}z zG!jPrN>-WzcZkAD{43$-Mjb&3kp6JVR`A~J^0w51ymagOxJ2Saa7(eb6=ag?MG~V{ zlC{Y#CDil-_kj$=(pm1760kbKA3$_VNVJ`ZbaljBog&Fs_f2D=g`8H)ppR2fvpXsTDhZX z2Ftvy>pL5HIwIdfN)q!ZSqi05duzj}lgPR*MTBw8Ba~2J<(e$6Ix5Oz@1U7=I?5d$ ziQ}I(&pRh@~#Krq?p19{5*1s%1SNiTDK0Q>A*Bc zr*~9u24A3>LMpAPe$-C#{*Pi$XV}xZMD7eep7%2|_+o`Os2OXqcRyBe^+&~{R(w9U9O~$H1A4I*G`(Fom8ov)TEtsiDr_;CnYH+@J4N&Jkwt_ z?=pR=nIycXnPiqdN<}uzYqjq>PCKbvJLy&O{{P|Se}2?e=0RU-Kk1scpLM17i>}mu z)s@EaHPip2NOS?rHVVPN7^Tz2)jVJy;4`f;x{xkj!{_ilC@8i#dnSD7w7k2Cu zxzD&4xx2x}_t{)CXXmDKquI~d*V&uFM(751ImimkWGAq3%(u+D%(JkFcqMZYSP^bf znL7kdnY+PfWELm$>>}JJbc378OiuC&DBNr62FH|O6ddLUZsKZ0xF@+AJXubqXNVU> z>hDvy+t>~6FD>+JSw(rVaF?+g9A*Yi*h&gq!kx+8;9xUwU&!;R&@Xg@Th2^QT+j1# z3U`>g!JB7*Wl>p0L6va3&<*ZCGb!vSQslwYw#Tsi2qI%IpO$Y5m>fEO3{4id+>=Vii@mX?%AxaSus| zVl4~d#wpz!VwlnZKQO`?8bv8c+>q3LWDGNf>uRnfwdn11RF(^cVINn23oyM^|j5ym8R}`@%hl@FX6A_ zy6cF?O{wCGT@}l#N`xy?yK7^ZoNz9}p0w_@Qt_4L>r3tSkoyAMw={KznD-jG*TgVs zlwx^BrO=bwy;|g8ms{f$c8~9_5$kBl$|}33pv+NR?u6U%rb?Tf=jr7E*JFExu((|!GpuJqt?GAd4kZ#kdE9sRSN%$Zoy^-zDnMunLJ=rtmZK{x5UNCIDMBuU+z3@6RE^Lwgq9<;0-==%9f8m)glZ64 zjnEo|JP55ts1~6*gz6D$K*)>GI)v6E)QC_MLPsLB0ikAuS`cbQs12cZgf=4NL#P9x zPK3G;+Jw+%gtj2G6``XL!tc#7DD7B;jzj2pvi>)UDPj0U-1+Q%;0Un98d|)uPS3HD zUzNjIkn15f@F)xm4uLcN`S-6Bn0bB!3*uHDi(ww@*9W{_RKt2*rOR%2R+6loL zF)&ex4y*%#2aVZ{GpGi6&YCPx=WlBDTGe=n8O)oUBbuL9yG%^;&%1wxz|09{eGbaH zqp-~GDXFL^9cj*IYUVt|Ld>`|S1sqE%R(7ndjE1W0}gLUo%<(P40)lP+d#0;R#ssv z^^_bj(u~hm&A6OHDBsp;@UN@2qiKDsx53)n*1F!BZOxyXOMljEWvS#eLWP=g|1yCA zr#GZf#TG*jl&J`s50Rww*aB*MB_l18MNya(}hJfZ-96(I$&waj5di zQZu#KQC{G*d&)$M7xOo1BB~ zXS0~PtyV9H5Y~5s6D{(6C06;YFmo4&1EiY?*VAiVb@lHNeYk(H z2gnhy4Aqfo*XFP+RaWVqrLzaf60j7r6j=Z3WSCCoMcBOK=eB|E-$MQh*c6CQ z&BQDCfxU3@+Jd#Z`B-^luuGJnm63@THzlfdYKDT9=7r>Txy{5T^M*lL#Tl(n7s6zHKW~d%LnZkf-3Tk((O#z)VWl~^XLTX0Vhip)@Y|e8 zZNbs8G}){g;=>DB8&jA|Oa2vHwPxb|r{R)TwUuT86|78bcyPG%Vc3q{+AavZ|D_DP z?WKGnSnX)y64|TRV&+%oRu~#Y{B8A5k(t6@zb@XA>W|BlOs}tN@9L}{>K8sZJ?H}W zq5%W^*80Yo)*?rl-8y|;d$zUa@Hk5jv4ko*A0Uqs*+04bupIDAqd z-a_mSpYMsYWUoF%Mya0K!Y%f8me;lns4*z!XquJY70^=wr>6mfy4Gy|hq^e+)K$fZ zKCm7v`9Lm#Iz(i|0adkujauJUU~%diD8edK1Zuu^kUTaL$<8Q*hhMr16eq-H1d~@VYu(o2=_D2JsrS@2G=LyeTk8P1 z5ZkBtxB~hweDx~w@E1z-sWKBh7ox*6aN828g+F|F>K-!wk6|Y=p#A$AcM%Vk@1yYZ z*X`uZ3`{23OjxJ_B^L|m)DVMEBc08GN8qhySh};ZX$He-2{5^s3d@cgys%c`X=thS zGmgrx&vz^>GgRJj3gZG8ms0zO?p!7RLBm03B zo!N~O6)Qc#1+S1io@=R9wyGJPDlY3l<~M3&US_dM=gdz~&%BJGO6Fy$q0CR+=@XbK zftoL{7^c8fB3RUFcY&))=WM5_XPdH8$uK=1%IYCIJIJ!P*ht8-cQC6#Gh1%Et=eVR zIm_eJvy50uOPFdI5(_}S|8dOg4D&i`V{hZ8ahLNZ{#5=X+o_=jPF2N`$pPvElC88lO2wt)#TC@hmB*E_4;Z3pd1Vgb18N&P4*_|CtOk6N~_T z34VWX=f;5z@HfE%$S(fMMLXjKN%o*N#&6S>14b{sX7QDhK*42yy7X&FjXH<%QRgrr z>KrCUokLpGIiyFOgC*)5CPke?M$|c2$@`zhJjlS`3(Uvt7_b0r0UzKCSU20sp3e5M z_k+IA_go6t`V9C0?c*NcUgkdKeu7=XT>dby1F{LcgI&bm%s;_@7&4YJtoPqw9CCSy zbp-j)(BLB$CFEy_Y1i~OiMfT~+2w^*^xPW)pGD5OD`0~kCIHs8@)IsNv4+@5vyp8l zA)Xk5pi$_J-FCrBR4N1521*`FJmqj%k;mDwL71YRRN2;Hx{TOqkl*DlwJ)bP9jKZD z_Xy*aDsGdabO0@8Yh@7fiWgrVs>aM7E+3e&-(}kL;B$wwYQ!A>=tBT4B zz+4gBd#PqBx%VPjmI&YAk}$dPa`hx~*G^(5I#@5{E~4}VnoX474vjQ&-vxn(9o!cT zEIRlyiq+0$9wH9ubxCWZkMPKQ&6UD(xuA^pqi^)F3|R& z8K;WIfkMfX2$hQi&DP_BQH-M;#7jo4rgoKGwk4j4&%E8gg$y5Qv zzT`qc;Tadp8F~CqI)nW<{y$*I-+!_WteECRoMB`|ox|j)bC?o!4hKe^!_=sAm=<*o z*-_^(J?b201mu6OXZW?;gIo&R#$5l07yzhd!hdLQg}_YpXOIuqR*Qj%n2??=q}o5| z-Wb`$DsmA4)dljM^JT%VI6)LMMr@Q_aPF3M!C!S5{?vqWCU&>}%-(W=$qW?1VKHO| zi!j6u-GTC7tnw)dut-Q~XanIWFV1HmEtJWrz0N=;VLSt)FOo^=o1eNwv-y5-cNQk|4TLPAF)G(cRLG$oY5 z^xjf3Hl!I`92gtQ3`ppf#kq19!6^*|LV?%j&|1Ynf+ekk2hO>wCn1yM)2t*pAx4)!>LQs-2!S>PIBZg8kgRj=0neMXA89>i4+gQj4i)+uC|xTcAqF0>8^cL_{61 zVi6LhA1ME#7zO_x(6y=Lny8`_l)(;3c|nz98N@3c1JMkBk})U1yTaAQr7l&}387wC z0M4k&16hX2s;jEHGP3fBX63|e05%q|kPNC2xWN!U&gv@r3LRR@oWS@0VTP~dZsC$x zFY_?e-T$SZ-`d+rK2~XD@?9MGSV>lQ270{YyB=~ktZgN;JoKp&zf@GWMdBm>N=awM zPS&5@3%kTqA&-IO3~}H>mS?CfBb~BYs`v-+P)8s=b-LAT^R5s6F?HR<6(> zFRTg=S9#Xb@)%vZA|omMu%!#c{F3i~BC`g<(WBvTFFT&?f)PLtSp51IUlj5IKI|SL z@x~P~{=AXy8j8Iz*{c<|EvaG&;9S4<1=%@xJRxC zTV+(T@-%%0c`8C!L<|lFn^mxlc2`wYM(Z&@9@zgom*K~7ZuU^(2<(6P^Uvx%Qee^ot0gTKLt1b-2h1)G zZ)m5ow&zh9I05}>*|58kkWkyv0)7XY!8t;+7uNX>fRqE2J1KBZ96p^W^fsB9Qhx>q zD^LC$i=h-`o2d!O!lsUq`b9tkK$Vg(FSq;JI@`#UL^SB0vnIj21$M?-1I`l$$ccED z6|})RJAF-cU7cQ!$2x6VYwZSaLv}XkM~Vdun6J$#qFVOlnMj$sedz1(5V4SSUI4l(oo_TKeoFg=jLk&RK9OA^}yWR5f>^%8PJ_>@xZ z@%^Au1jGuSPf=GZDB`xY&a}2~s;u>aG6_804%qjj$^oI|;FFw=FOnW#SSiFZCvw|B z|F;mF05eyD{m&!WXSmtiHe&m0@bKtZAokLF4Ipjv2LtfN51z^5HxpDwNr%QRc|_Kc1P!z~7bZWVR31{&#`p-*aI|LdRgo#&^XN zV+<+=8Hib+yb-JLczv*ekF5jBWrC@!);M+UO9DoTG)D%58~qN*eYOVo{ZsZF74FqA z`rkigpQyoo|CBvlgM0pdX?1BE<1@1q6T!etz*bpOFl^Hm3S~msl9qKsM2>kQZ0IUe zZR^Cq`(FnBf7yeWGWJI9KzRShfnUFV*c>A(0C@HpD8GFf5ptv|A@Yfu%JeC4eQ2WU zIVcKcD34HU6=l(=wef=}>AWbEw0IDF=SP8W;UM@fhyq{xAownf0^dXBtvYD+D%g_2 zat4)D)Sqj{FDg1#5?8lfPlYFO=>gob?*je54;bbHwv4@!GjYejx_>F?{)l`3WK%1tK1Av+XswVz?Sl%`+?b{573VD&N8*f)}qYQl>{-EoJ2U|39+-JzbJ4Rx|oDywN+IiA9g{jHu;#X4ELpiW=qF zQKOs_HOjeBqnsBt%K1^FOyz%KK=6+*;?8ETq=JBvzxMkp)nBqRLttis#xX3$uJj*$ z&jDtFs0EQ(7Q-yCAW{ypc=l=!C^OljJs|`a)uL{Hz^b5&Uw2Ptm;sf_<=`$Xy5=womBki$ip5kONwM=5 zhKk+3xkaP2A|X`DgYL1CjRPAIlLFZpBFt+qaeF|0u6m^V%#l`krYqLrts$nQc+(aH z%ooe77l+bA&*z|fpt0hdJN84)4^-wn#8e~ap>#3l2m zZzdysn>dC7pUJ7&GUzT{>2c)Say?5{#HG&LDqa>6qYYXo0ex9*`>BetP)mE4XS1)i zy&d*EW;ezf=~RQPNYHXiV#tvMIR`h6kS~siGRPP1f2n7!0)i6rPzR_AwWzQHcEqPb zgB9yC)G$WKCenLm$*7J?ogX$t9+EjLu^8f159GMpu!|vagLy#KkHO?EhCV;Oo=PP6jXF zBm4Q6_8v&=PEBE<^RA~_lY#AUJ8^d?x>OvfZbDnAa^+nOT~epY9(dRmIN~nudMkIg z(M4kaNVZu|oY6bQ481$m1wC=)aCfu^QJBb^+D=;$arg;6EQCcaTbcC`5K+jhF0&qd za8Lo1?q|!qf-bY$sw!O8?8R16r&P>A7PZ32WY(N~Yi);hv)2mh2G*{QCa~Gx+32-4 zLSwdWZu2!*+t$$&2hAlmpj%)iU^ZBSmc}iFFy2O=(>s}r+-P-Gz)&r?iyja@4Y=vl zvjx}{A3>5KIWG_fm?blsrc4%}wBOg8MRxxK8owjn{U5~BCWAp=o8-%aouosWwrMhxmO?_etX(N|GMO|( zvrK0uU7&PGlSwl)$%JImg?-8@dl3;DD6O9hg8KO>AWaoP5fBk8pduL>31 zIp@9mws~*5%~Sk8llI-*bKg7Xo_p`R@7{CIaxTAvznQ;>e+2x0yes6vx!@A;0MaX5 z2GPO3C_E{=B77hgh!x-gWW6{D9zgbq4~d7wH{lnr?~AX&{~yv7Toz0bPZ1*V{?0+L zmWnraraFbcP8AnIAmE{RXMe*8cpFE*29i(W+9k`D$$u?%{p0ZPx+->mUA5~q^?n`v zmlp8XE#Plhz~8ih|H=aXYYn_csb{V0%NFqaE#MDWz#p`Lf5ig+kOlmJ1$@i`e$WE` zRSWpnEZ`4Yz`t$*f5Za*s0I8R7VvLcz#p@Kf6D^?xCQ(P3;2^3@NZkdpVGkVl<`yV z>bHOoSiqAO@ImSOe<3HHC{%#{--XBb`9G?s(<{fy(9I)l_rPrix_M-K1Ponc`HeWT z6@9jq=q$s`>($bwtrH7cquKRo?@>M)@v%}|8c1@9Qdk;*T!J=1Ht)=r8F%IiQLMhn z5AMw6jX8ey6E$5`7F%-#lWuR`J2tZr%&a6vJz!@AjG`Wb?V12fjGU@eP1pnwa=KU& zK_I8-NxIsCRTY(i*Ai1+ZPz`f`O}0?bAJ}z7H5IiuhrtKVnWz0ULf8`-~DIA zcZElUL$D@zSL9$-;3dysA@N*T8C)jb4EKCdd<5175bdvAP>s0JDVJsmFceFPr=WkO z2>DkI4kS_qjp%|aif)m_#AML}e+EGp8a;4%(94q&nN0TmG-(1puRsT!VRjb{Q+5}5 z^O8#%v?b*YX7`u-7?hN5WGv+?83rBnbo7s<<*G5>6H6^ywxby=cg0yA(PvuP5+B%- z>J?A2dOF&f=o4qp7tb+$8qep}b%KxSfi2NwINlY9&@H0(RB_$m?~cR=y2UcfTZa-` zw#0{8;@jeV4LeiuVX+)Nm1+5tnj@APf7{{vv;51}{V51P;>JhC6UDhgG~BidMVqXp zPnCOBR`@DizaGCc`2>wGi{_So54Iit&u6yc9i;43fd_ zd;G6wh)elsOG6A7v9Un^U}|SfuH~xf;$kWaf}d|)NeDiR4sGS#A@;oFCJ7)~CSgN2y`u;=wpJJh!U(IcXlYj91DaHRi(yw`Tt1)IcYjr`Ss z59H8rr^P3OAu@1zQU;f~@a29OMbOnoE*Z_NTtWmp`~faIwcrz1J2mwRn?tECt3j(^(lUzg{|xRc9Q=Ehdxv-N^Z8bO3%`rs z%OB)_%Kru80WK9{u(7~;c%fKTB zXfU_LBv}!pbN1?bm;0uw1i?ZiS$J`EXIeXj~<+1Ds#bYNrxP^jp z;vst+Z7%!aw6P+!zS^*tWj~reHdS9=CC+Er3p2)w9bCPJ7d4P-*^kS{rm4&jqhTMo z%V_fXgDqgFR`%k|vFQ$OspjeGMQBGx4H7B)N$J=Ol^Y@oo@+W<8e=5QEBk55Sc%#e zh~MANJXS`^el~k-rh{80FloD~icr~0Wn-mSN8Mda!7CC^mA!oGSeb+C(9{unBN~Y{ zwTD}MQE-mA3gYdx`N{1{*(+sZ9+hMICdZ_q12HyNMVrfhK4Z+Qwih~IQXQ+5z3Le& zcW`GYb;-~+EBnQiu~`moj$9dE1RRh=%U+u^Hrv6imVt;(WSL<=Sj0dwtf}90wQBunhwd_Po$}5a_0nT!xgrQ9gFE1Ktp6kYfjgF_u6CJ(tM- zKg!-L9yE5v^8C#%LpP6=ZznBh9w=ew(rP8BK*}!yokd zQxy)tX_7_XGep{+PhUFblC(->gFif~h{f8#?GU}%xv;v;CWbmIqtErERbFe9KcUat zM*25{^HVsNX-K5xuI)(>IL%4vymAi+1xIZjux?|7W z0&Z>^CZrh|6VgA$4rZ}&NUBtoPSO2=LsDLMGWnC0s7*zs8 zeUZ|M4F@j8X!0bshEP&y(X9#of-oI{vbN;=;Cxv_AwEscjtHL+n%>NmP{P7}4`Ck{_7Ty;=5dIFHf+m8z ze`>mKALyrIjBi{>$*P;Q;6PdZu{MN7plsm;!>phX(oBmL%1MEDE-aaMRDqxLj+RQz z9qdnvQjRFR=(x}8>+T+k59=3C3IWz?>Eu2yu0|w&J0!1zQmh9%7@lZgSf#|605w%3 z!@zMCh6#l=$0`Mdm0@p1)s6tD=Hh>IMwNT1i=&BD z-%i*OjSTj|Rwx*8+?w$|vE8!QV_%%%}M;HY!Ga!z|=;r@mV4cya z=t;!;y61Vfb@q+KX&_fr(BG*2MP=UEv%N8hFH-3}Sp$HGCYnQRhK;d?>wKl1G=Jct zqFR-ncJ&W>!8bE##*Pf8U}Hgd>Xh#_&$2%WhkOzX%R^KBce*#!E~~P$Ck-hfQU%t7 zNrPIsgd{r-NxHA@6pgCsgabr2AY=hkOIm6hY5`fSNR2FPK#u63(hKti?81Y_<_QPZ zTA+~-6S8VmavR^4iNk0VV5}11P>(Du%?#){keJCQXht-e3e_qVB6qqC`mKwCM-qf* z!6UCop_L>&dZ{!$s0gIZ(MYYGMYK(iG3mVp4he}mkd4Ox^cc#88nX2jHM2UBQ$wI6 znc3g+QBT&IsH50;>_U$*DMeNs>L50XJG>Wrad98R(><+AS_O#fhGp9IKdk=W!@V2M zMpE?YOvcpnbn|La>!=$L>TjRs zmaQ#4rtaR&v0%Go6$B_)4)-=?RcBGK9G9X9VNq0nD3^Ibj!5H5qWqF>NL%1VMJP9r)5sFiT~d8YFhqSrZQ6GT)%U`sg~}YHKu9 z5p~7{{q^nOfo)_k6BBL>@%^>nNUDuGXLfdXWq!B)tsw;m+W(xueSw32f922QZ|7eZ z>V#dwA@BjzE8Y*kkHT-OBVA(c*hn^LK<(vBzh~gL__!Wk9MQ(*$R)1AaXG~{KBw3w z2ChFXlV=A^t}GKK^O`O~C=W|ECG-g_Ll!@Hycr;SF(|xJWD)Tf{Di{dog- zrFf6{FgGOrfICP0wRnoSOpJ(I#Eak*5p}uzXcmYjy49q&H}iLB3qU{?pm64U6hsm4 z^MybiuOS?4TosV+e)nG$7qLt{18S*_!5DxLn2}~FY~l?R1XEY6DZOr{xZLnCt}vxX zKb9Gd5x%-o+0~g3qP>q)xXUa04Ok)QsD^Ah6ElivQ6S;G%%lwVOH_7MW*I8}P}!9x zWvoJ%XO`jem7crSq%0Ja%A{zYy2guy+(8$J*v_INH z7-oJ`8SuDOL8LQZQ}1kUi21?|68I(UdjMv%n)l!r5=D4LAd>5=6*z&Q06nf50BB3%bhdZNt3CHq47{!@R^c%u8*< zyv#Pt%WcDanr)a@*oOIZeE$oC8jj+7_X{5pJ}o>U{6hGLSRyWl?|4$YPW+7cE%87EX)_1N>#&Ey8AD7|#FhfR+B&h3~^m@CQ*4i@`6*V$l2DDDDt% zg?IdE@pb-B{OkO4U>*Eckq6`o}a}RaKGnX;JykwimSLjm|m2h;@iWh ztEf3Dl@5rVoyE7WQA*P1jZIZGeP&CRW+;M`cG&339SF^ha$Wmv_hV;EG%3%DXs6)18#7neGV;NZ|^P8T4jYLs})(V>7^ zRc!_F{TKQ1obVF=LrDIQ{-j&>S4wV6Kz{)u3$tMF;N}Q%&QF^MUR#BOsPf<5?en~1cXStcruv6V#j{OydT#($b%uVORm}6l{(2M7ga&*;- z_Gd%M{$M1WOXeaPpDZ0}I7Dyd!c7^jSu875;nh8A^wwhe9BTve+)}pxltON~?73w^ zsdG8Je;IBzK-afD+Mde>=rZYDoo5e;8g8^#<86Pa3oxC*gVT`QS|35mG5vX)e);X=&H1sIpwsdTnAD;G%IiVG}LxCo31 zS+oG@+|O1vwq#*Lrf$xMT&OV8Fa}FqOVv_PXS7$Fu`dfB5^-}jq%y_@?*GT}F^-S% zuYq@;x5aJ3FU2A85{}!MS6-Y>Ps%G_k!}SqaVoWtFP(>x0gO=4-V6sOL53xP2`uz{+fIa-~VzB!rlIXp9FjN#e5KEf-Cr8{$u<;{)_x~Kp%h; zW(f7*`)dHSg6{<_;9r2=?+iErY!NrZOmPF8{yiiO-NY>I{4I$VAEiuq;3ryOKju4pkKAcH`3Vg{_4Ghns5H?v0gEJ_EP0_&c>-I#@z@?+AlgGFH)HS&Gkc#!^LWjL+s-mg2MHG*v>8 zbD+)F0L_aJI?aplsT1hnPZd<-NPr_fdTgRa89pbPiH}RKG=q8?)gHuscZsI)3_|9~ zf?88;5mL-ov7m0>WL~`$)R1Ff797TqJjm|^^CHADUK+N{iaXZqcmm&lQRv}>9^pOl zLjHXzmArt6pT<3adiG%H=L1ZoYBEfvn3j?0zG`P)X?1$;bf?fG$2Y_C`@zbRTQ0~et<6H2G^*_(eQVm0S2{O6w_eXR`bGc^ z;uLyDJVuKVVwriyg?6BpT+mxF0xH`W1m24@hEw30wleR8;k?p084W-;bZ*Oe4XDxc z^3(ZwrM~psN>)PU0at_)ojG}h|!-5x++*3;M-SO zay5KaTbKCvF z-J6kcu6fi(V>H^v_wVjRlBeXjS@k4aS9O5646HKRqFZ;Li}YsOO3%L<<`6IgSv$Bp zW_N?)0u|PRQBV*jA2S2HHzCPN8yS?Bt+3O;<*0Q2w^s81bq2Tgs9*bZe2+iFQxf?6 zIyD1G@)Mg6KTcD{6jGcHg{b){kEAc1MUPySE-IL`$0zB5vC2Yjwqy#LKBd$-8{A@Q zw7qTY$1{wqYRH;0dqhg+D!&?ZI*vDw!O?=z%bBbrZzH>>8`(Why?m8XhDgU{d<+f_ z4F11BPt*1@=;cN>6{4nnDjB;}XR)SG`BX4z8729j;O7Lta3`Ggw}H0L1@s#g?-lQL ztme4!mx6>41O(&03tkK#gZbg&bggFLPMcji>6O)Jay$m`V=k@T%O?Qw3v|R~D<0b^ zPd^(M%@aTj%JwVZR%tld7mp>tOX<;aEH7KoG3|mbZ)`BHbbflmLUY`(H8|=;xemX& z2>@%wuD-36-m}s!q&PRIQdD&7ECZN3LWJL50#J2KT>By{VnOHi5<)u$oDS5%ga>-h-v;?J(nv?c|vyFfuBVdma@I@owkP+}l1E7$k zpc=A;3ygQHH3F_N0&X(`9yJ1O2lBj8#i;L}FH(*}T>Hv*;^ z0n3emun}Oahuhdd?#~(@`L+@8lC=K+HU~yIXY;pk-)3*;5v1w!_N-Esxl~0x*~a{+ zz9EgPH!}I1#im}nCu}w@l0aOa4jkB?{am@q-t*Y=jFr-;Bf#DPshc0j%7yGi78u!f zI7VzeAWs~Q5vzlKVnlP&-+W-?Fm7^e?vl+}IFY7Et3F|+N~d%jNTDGNxxw0A>YNLD zL}cnC-H2y1Hja1R7@^QWTDvs>uPF6k$yg_OMNwD(hDR7<`2DZpZsFkHXSfHs?{F`I z7hr)e<}3LXd^^7xG<$F4?*uL1hxzaEuki03&pII6oI>9`@J~@4!}B&8Nw7_k7xtc3 z{Gu}8KuNcJ4}H?uJ*(w=r0-lwFCM)~u6@DyFx(E_+a331!p6NxxT0__2e;Liqt>qH}<)(D{QjE1ahoAHht zjexHi0Y5eZ==-lhT0qMVEx^caLCAokV5<>uy%F#wBj6b$;I{@qp|L#*jrAxrwnyO( zBaZ8gfG-;Xj~M~4830qp8v!R90gXn$CL>_j2>6r{V64ZKAJP7w-^cO$gsH;y;so(J zu>HAMyjGkl4u}tO+@*QtXQVOWraF~M$J>Fmc;HAryZ!C0p_V}OXlFoF2?=O%Uw~Rg z*0jL;aR7WDAG5yTAco)ec;Ab($``*duJ&m0ovXK#6V+Orhgx!mTmywv(^vW_)RA zYgm){LiZTpX3wyo)I6fFw&p;;X@8;HCc78P3(WXpgf&dTpYlQ(qkCua#U4?Z>NwD6 zy8cJU4w8kvo!vFhj4hS4mNA*FMW$@2k1)n?|38td;>3@^vioVFUzp7QH{Ztnin|Gb zCO;c@C*gq7x%_CkWnqpbkMs+AbrB&N<9(ewI|fpTzID3?5Pfy-(Qn?}kC<2G6f+v3 z40H^J@MXh=HQwshVo?%+H^ z*WgHOXFSo@?OEy?+kp_gnS$DQmX(g}#Gp3_F|msBET1xV0fvByXm<6U(~8F~MDt{# z3Ccu@L7->Fw6Tk@Hko#Mp3{rRF2;wXq8*783x4i7W6szm7*Ph%k*iVchj0ftm(e%L z%Hpw08ChLjJ-(8I9ERqh3PI4M$hu(E-;AMMuqhj+9pqUPN%6pyR`yRlC^$^wF?kw` z4vN_P5Uj9sq%Rfg?HuUtiw}7Mg$ErDZni+0dE4NmAvxq}ntE^?B2g?}nFMCll!N2t z_&LhisHb__!3kI!rgj4Q)`33D79il=Q15;2}_3GN6_~*aB@y5=v%504cym9w@bCgK8P=TC`>7 z7am-SO@*=clpueT4=!_X+W31X9$fC=Dg|`R1ZyXZJq3Eoo{Og*JPn%^bS^+M9u<0_ ztfsEjbIH_$D>4ddYg#>*PCa;fMnPRwtLL(*2hYeXSkmfAPdT^}dk0B}AS@BO=J4#o z{l7{C*f#11}113jYf}zNbJ$&jqkEI1^%h_lPNR7sT}3 zD}GKK6Q7h~d;^mI{QRc{DApv?kPy2t@}!dM*5%^5T#qidMVIT<<#y_F7wB>q>2jCq za+m3HX!F85Jg?pA#NH}Fe1ehI&lZ{|b%dj4F#7h(bL;4kB^fr!AjgB{R4UR;!am_1 zm`@&p2*FQ6jNlg_e!!c;yTS($DL4;e2TX&xr2^swFA-OY&0+{7{tmxt0FchOD1E~*C~|#+Eqd6Tdqn<-*%l!sonU0`gsx_p#6Tn&_tbNMM9?`ouU zf-692o~wz{eAg;UC%T#`J;4>Ebdu{#N}aCNlumZFQ0j8EQd;0@qqNY~PU#d^h*Gy} z4W%c#!ju-dB9u;bMJX+Ibx=CZwU*N9u62~oaIL4b#I=FanXa=aEp?quX_;#yr5@Kg zlzLs8C@puzD4pdxm(tm;PD)R5ZKiaNtBcZ;UEP$P;)+vR;p(BZ(zS)sQ(e83&UGay zo##4_()q5flrC`fQM%C8Pid8FfYNGLlF}O2Af>gg^C_)!4N+R}8m4rSD@EyI*9fIc zT-zvJ>e?=y|KG-ea!C`P96lH)aA&<0Fho>HR+k5Mi3r;M{6~ItBczHH3~g z_Ju0?26ZDDnO2n=tRUxSYR1b!Kx`Z%P3qCCWb<&Gfk#w686q8*@v(WVf1T-4hyw%` z4@v+R8`<<5*;I(?-*F{J_6};ijf|)O(cF0O zFrgtgX#BZB)0i7Hf!v^J$_<)Txk1yM8#KY(pgA))XjbP2O-pXjwBq}J3il(9d!73; zKN&oLEP^N?o51`3Rs0?N=eZy8kMeK8PJg;E8+`w^2yuuHcq7OM$6zP_251TuiStCi zxIsJ*WP-PdpAx?Y8vn0|@89+7UPd z6)FiB7{IVG2rE%wP=6noHEfHEGtq4f-3KrYwNlg=Rp3L3&f>qqJRU8x!4oRjzvoqD4xH2EmB-)Kc8|45TJ?gzsP;S34i53 z;66AmdHe?;lm8I>O4Am~H=Vzn^d#i+CO_^Rrt}GCiqa>YBk7CoUW1|uDWq#sj^OKu zIXQ$A=dpHyx$~i3?#D(kjzY<>nNzYL&8hBa!Pu^T>0WT)WEQ?yet<&U!kx>!tsyVE z^@Sj<>dsF_0gN%Z&o1unkjg(uBFj;_1(X^B7(zDJ{Qtm&e~FU9u;Guz9R@)5tjd2w zzzYl{&?YjY4J4A9HXsSLGzK(n0As+0Hh96L4J1ldtW_Or8^9Q_Yy*iTYlDgWUEBmP z`r(_o7ljjq^Z3s~{H{Btcj({y+Mib(Ogq7Hftp>iYxg$?U;)gc@15LrUELID$#vU^XV5k@LIxY}i;3hE^I`fLF z+22D+nH>n5rg z@PaUuN)B)Aj`t@wrsns?JG*0Dn`>&Ss$*T_l-HEe*vyUrH|oldYv@kN6T!Iogu+6}j5uQ*mp^8fod@ibuze=~O5Hfw)&k!&?DS)0yWFZ>6_tN00o|(W0-qQZ1$aC+)8T*BP<$kKm{Y;m8Ny+V+vd>w_RZ3g_T_;G& zH;sOOtQoewXRfnh%f}nH{d#KpPY>m)mmJlWk9NI))C(*u^PUI#?*pk=e87D3rzg%@ zJe}A#sQ^Oc%oRM&%B>V3rwF}pk#k;dSiQ8O6=6|&ezb0h5KEk!?u zAuz;-K!yxRgHIy|lGgu~oahiH@hiDX?WbS&_b&H-&~90so`dUvG<>dB%M)!D6Bf(1 z%(g!8!&ysH0vtH6)vXeuhIYg`J_~7xo;A`J!h7PWV5p_SEA5!^BMg2$zzcqh#uO<8 z25=DLYlBx~-g+4PY*eM2_s=Wf=0LM}oO3pmI_Ee`OSOb^*#yn%`=WluA*Pn{Mb{Fp z(A=VVNwl{x9@z8g)PB%-SuA%ke5p|54cj4Lv@yyhS6fUvHiKY=cSmGj}yY25C$#%zl-Sg^8|6L_yGMk`2Qz?Or*Cn z?anJ*n4a6N^&gq;dT=Mo1m+4bsU}LDweTJ&6EeE=@1)~g%Yk!DvuhXkS!Q3N|0-zS z36o0b?^Oqh$*ruJlvkwx!5sx0_>V_6`%9f?KwLfLG0By^UEj+t?oKOa^`A>)H4e+J z@d3s(qD?0s1h;CqJOGBzr{#gZUo+V4aKO#E?dM)shb>sw+JbeREm+svf^~zm{(qGd zZsDJTmH!WQ-~4~uOuAtYNM@wiZ0YW?$%W`YgcdHKu!?emSWM$p{#Xa=5x6wjV3^}| zbajirDkZn@R4-J{I|zCw@qv^#IpiHkrgTSHIxOsMO*f7?iD&ea(ke%4l%ziDaj%W6 za(_4QDxYqv#J%2Xb+XMUWqjPSX>5|DU<_iB|AK9r2W&?`ePtkqZqRIGAf(7jn5YCb zaVd7L_d@C&=$ZMZKVC1Ih@gXoYHwsP-j(P{ba{gVDR5;xGMMtVjr4Dh4-I?GpN6g_ z?5KR;Lq(kdWhm(WKs{gC(YF^v5~CTkhKP(svC7VZMfP_OU;g){_5UO2|9>@qJ@<%s z9sORfd-X5MD+gET&LYJLSf;0{Kx24qEaVIOTEP*RA{YcLm*^f$4ypAs?MjXl3TojI zt-~>mBTdQOqQ?DYy7|Bw#Zu@T*)gLu>PeXcR2)p{5Gt%1rtH~Jq>@GI) z)5{Np6xshOX>%&SCbDvoovcXbqzgAOF{hrg*}E%ON~wPHfp$e44qGAgX=IFVVJ8Ep z8~VaXTkedS8jV=oc#pzM{6HHi|Kntuu9n2!WCjLL*vUkrfeA)aJCfwTD=Od*RxVAB z@gDD~lB7U^;~9r$Tg%{#QR)4^odbWDZT$J%?Yj5=Uzh<4z?kx0gKCE2a20Lp?6;Jg zX4VZVX>D)7K^R*9q1{!cA1U<_*5K(42R136X<%$2yd~5rzUGFQFWg|ei>zWZ*0jV` z=493^PB1m~RhWw$I7gYmfH}pyF#;b3+c`VYj5CF@$`nKfCKOO ziY1`ptxaCr*nKSPHe*afTf-VKMizj;S>|ZeJi=I$-v9SF(I;HSk8$sT?f+H$Zt(i^ zMgE)o4+RH!{+TA!3Co3m5Cyyb3xykm{}S#K9uOWAek}Y3BnB?=B=8Kif#wL4y%&I{eWkD}0In^=VbIWt zZU_aOx1&n43PXj(J5b+R1+}&}cC-YXx9D&5g@VqHB0i=WB1M%DqlM|f*a_L)Yull_ z(A7869p6Yk1$%K-86WBdS2~ipo@RLi=jKS=(oZ-RvYvyW<`dZ-2M=axB2j~*qp_D} zoirchHlRqun&WUm6pvtQ6VJkjMBJPWsZ8Nw#aO;F&%>IB=6U(7It&htY+k={#y3k( z+GNARV!$d4EFa5Lrab+kO;%sFak;?#!@T}7Wv@4L(J2?P>O1-Gb7fqDwR4_$+@AJbL|5d=z~Ad>kx$`oSy53UQV=N%%l`jh_VS!mn|MKvUq;;5GbWc-Z1s zz#x3MFMt=it#Gsty(9U3p>S;dB0Ow!bxs-GiXMpw<_p!J;;rl4!qM~88|w%bn=+cv z+*nP(O;bjDHNYwYo>MrwMSU8=Yy+8%g`+(xOnUh2!qK=EhWDK{Wwcv|5P=)qcT99} z8FSFgJ5F$LOLYvkWAJAB#yR&)xnmMyqD>L1g0y!;oufr}IMKxxHby%&3+Nz*qs}`g z-Z9z1717PkyQbdZBJWMuY#nWK?BYP9bFb@;0(50YC>uH=8=QB$?Y9dF$Mxo!FpYd?Q=X-~d=VZS-99UzTaQxsLzDWmH(z(oXX zoie&k1C-v47L@;=%yn|yh1@5(?{Yuq{tCYT7Qm^08-EVp$6vzV1ZVzZTqplH|04ef z!70oUmI>`bm#|&f4eNk!3BLe8K4q{1*eG5o-X{JJ_~>~V{PRH6p9(P|w1zs+TrA{+ zKo8;IDk;Evbto3~ul77F-w<0D_JzO)WrPj0M#(E6e8OW*!Ipsdt0TN|{NM3|-wGO{ zLp#IqEf^CgHU0obLvD=^4|i^fH;nZ3#D^4b`*+gq5WuS?F`Npf;{CDIxOAy_2Hy%+ zYJG_<1M%*duM50-4zt)gjb!Qt?@pj2hAVp#)|Ad-rg8=OI#aoVawUtBD_07`1+@Dc zWAbTC;}i^c>G7c~)lzdei7S-a4pvv=Kl08{ zy4Iz!D0tTdc)jNnxLN~LbqJS;Eb`nZ17REi5U4cz7kj=SS7Z?qBG?kof6K7NSTBMt z_1r6sis~gS;Jq|5s@grDmP?kh5~=>x?ViucB{Y&`Xd712a}Yy=hkP|v>=|eR8f{n! z&u1|F5|ma;rNAr}(ju?gvtNF+h6-DQk#=N<+OfLIbB|nFE0wmx=M0%eUaPA;pZCC` z84%YYV-QWLCelhS{a_6jiL_ODK3OK7f#vns7*rks;<&_v;%d)lr4FiD1fKXJRJ@Mb zySm0RDi+f$diLQ60i@K)h^z`L?Rh`~OC2nMp|+kcdqqFoU56y9B+l>= ztOvD_=OJAGkK-C}{lANUjOXCbqx?xPJ8-tL00Q+e+VjbB=V-It3pl6w0w^F+Hd+73 zC2akZUU}dwWoxI`;gtOU+q?jsWL|%TwzoDzY^aneJS;n~!J-E+K%&hYny5|>p`0v-(g;TnX=jXUoK+R zm-hc<99PD#6k=kJ{^j3Qwr>tiv2Jp#)TRz( zFc!vjtDdMv?twBLW-kYI(%%XTrA+-P$zlxe^%B};USh_?crF8UW~{6Ivhz5e@;r*k&fUNo=0Oxf(zQ!dg}KWtHbAMDj^u0C&G zeVMXZ_2nW~eW%y~uH@4k|GL=8uYf-qzz=Vk@HgQ{!a<1edzr8mB>yM#f8u}2f1Uq0 zKg_rAb^J__?Z3%=pBv-;i@QF(^lRYKvNr9+xowLyCoqB0wkTMlLv)XL%2IJ7z2spJ z%HxaiahOu7;rofRls@)?<&2V{cbO&LMT?=aGRd%+!|Pq5pELEfVU3rb^KcnjAW_|0 zRSP6M52EvnoK$^=+faF%`sniMlJd5s5xp85&Iintp)Kof zp{mJ_7MKn0*@kK#hMdy$6<|^|GB8Z?7cW|XfmPLF^n;KIu7@Jjgkhe0yo=|dx>QYl zy|;7Nn;hud=}q;F4bHf)DY%0oOT$DJ|B@dUP{Tv%3$7Vm5WmMN2+8IYR8t1VF z&2B`8^1pfr_QU;yck(3=^>Z;q|BmpTe3HMIzYctWeTIJkP6EHrzs&!J|BH|>6oUk? zR`7A}alhbxz&*ho0Gr{vxSK#G*eMKy$M3s@F9}b;?C}Q31*b#Q06&}^^urm#$KfpD zQ8-h8SRs-{j$)V7*>`&R$K{+3cu-rtujI%rypp?B*DfE^f;oMVw$)OFju&f^DlO zz&DsJEK|?=S=IF$0dGC#>dpCq!aGx$k(7A@4=kWNSJC z9RUo@5sXB`8)89-Ln6FtRqzWWvt}ed5{C+cj2PXC2;VmYK5GVi&J0MQV2wC`V0PyZ z&452L1HNDe{IMDEMKj<}@cl32p5u52?}ZouQSkhK6GZ!ciho@Y!M1NDLw0M*Fd3fKS z7vB(n#i7`o4z4=d@R**|UD~4|IxH&zCwY|;C|DzF_LR)Qy3%c^@K-I}coO!Nq`!pP zBoSZ4FBQyIkmBN|0fncMMokF932XcUlq|rCP?08XUCF!>(Rh+ac;FK|=>imqYmYJ8 ziR7d!GoNAZqbFUOSq3Y1>AA~LCalM&QOcNf2@0I`#Z4`~NVD|tMJUPEm(qR)KlhWa z%A^YIDLuF&^Fc6akqd`WMy$sQf)EYap-jveLx!lHZ&C(AJ1X0rS;oR3PTFQt#wwJ` zEWXlx)fQ zu9QdEw-po{dlYE{u%#$AsxzIPd>JK0#Ft81%b3g;@|LMeraq!DcFuvgA{zq6zyeHC zY$SC$Wwy4HIinFgF{dZb7zE}}Yty{b^p7YEt~tcfP6E$n2i)Ue8z-g5lh!HdtB zl2Vy9^9Z1D-|CZf?*#lN&VO%MF@Cxk2;&+@N_jH)x*2_y0ff|4ddp{{bCC3!rF#87Ye; zx?F`WSE{vQ<>u*f^L4oey4*rtu1c4y*5zt+xmsPWPM53Kmrx?G1Y zw^o;1r^~I^SYXX$ch>v9`)xpQ>6O}bo6mpfON>%{fH2+lwGW?{ZKLoDGBf~5a1 zLWuxsp&i{KYRB_=Qjs@;IFlTeAfEmJm)B+5i{Q~ zCoBm@?Iirf_Pk9j@zLKLf5$+mKg0C!NoT zMFRegSg?^4@hy2H%><}u;^MsG+35&-RudlH@==Qu_9L4yy0*rKcMivThT`YL2lYaz z!DetyK7S{xKqS!W3pHaefh|Eai~mWgh2gU`9PdxT@%Vz?@@_zU#kRcS6>1+q=TpDq zVFEZ-k6?_UR$s8~SoyT*eiww7a%>;KiK&_~r89y$R(i7f8C#T~Ung+jF_2u)i)K|5 zZv_wLrRk*#Nf6z`5$7>a3&b6x1zkITOIH_u6k?Dr=$&vrFnKBX73cZ#1C=bgN*4vLVlUmj^4*Vmg?5w=14 zDn@E@UB&m0w2EL~A~mw6aiJAgWK^*_*HwJ)h^ts_TE){cs#ullD!zNfRje|pV)@<6 zGhdjTH{-94w2r=zNjpmW|0g(co$x9C3DXzMVrI06FJs5#qf=k6yg^2X823VM%%mM1MWfRfb0*Px`C!FxXE?m`l`2cpt}zwJUMC) zMA=26r3JmSWiM_EH_3lU@|9DyWVMd(wQ$xt>ApQX(05=hUk+}dY9$R{@^sd|E)b5j zH#ON%@k*m(4IROG`omr|w{YRY)4=if_V|!D+0(NOoCbQ6gXm`j17Qs&hldk7KlM7K zjNi)#_G~XC5iNAnmBk>VJ*Cu%Yf=cF9UqDfr#ivCxD71N%jhd|y(hcf(^d8O_^0Ml z@j>XP?D$%e+vPUxhY%LayhHI+XJWvM4H2K`?FPN}u9O$Xuov}}JNvxb!CCtJkwI@9 z^&7$AAN;7)nmSrq2xM~6_TIoUZ_h|ypQigdQ{Mj09f^K$M+jZolN{>r9O#OBFZLSy zMmwO5W!R+h`nh@$>v59*@y~Mnv%(_ba^We^*&PrM+BFUQ2e17t(1p&KG49#6&Y=W` zHyP>kLu}kcS7%=vY~8a7s*lK+VnJ7FZ_9+z`m=Q;Q06ar=#F;>2cn67>uEx!lEPDh z1zloG(}dDW1F~eQ6Q$}$gQm4@Lg`W+njQX;p&@t;CGVTX47CbICzJ;C=p;Lq zZbGxJ6Iyg&3x+@*=oqw|5e-P2GumxOq^mdHJ<=B+ii`{oLM-KY_mLtyvvES{9DNP3 zY7)0cieweO{}Z{ZIQaK6=>P8Ke=YchJB2@hN3YMo?>_Mm{7Tn5#r2MK^)b74Hmn@+ zbIYVF*Z$ifzRs>1UvC%U8|*@Sqg{w^vJ3Ieb|Kzv7vfv&Li|x&|2w!nobW#X9)CLg z@uB%id-q&iz!ghd2H5l!!s7X3y;}PI-@=I}f&E_}`1Adj|G@WgT=uy(M~YDt$s4<0;cWe=fHBb6ifwsDzbV$#xo1ss z@udmNqVcKSj@H8(-e}2&5!o$SQ|@QH;rlOePjdX#+>_!Y`UPR&zu!-K`Pc--T3GKz z3Jvq^b;HE{%{cy~gI<}knHwg#h;_piBV*$WIk2wA^Udb1Q%Y2jCBiQ_I)7rr86x+er zI>BJX9DBqJduyPzJ-h)={xS!LR!n75jNK`p|JB#9frsn=B@n0s{{3@fe(wc;Kx5!7 z{DT;`fxfWfnRhMhi<=S<*kS@1ImkaB15nV2- z%aQGz((hzDr{u_XPRWt&oRTBkIVDH7b4reE=ad}T&M7&vol|mTJE!Exc23EW?VOV9 z)YW>kF4v{Yb?b6*U9Lx$+oH?$>T(HP?mS&?t1j24%k}GW1G-%DLvjB1F}sd8Y(spT zT{Zr=U5IbD3-KLxA>LybVhE05&pGy;b|JpYF2sAK{XfM2ljQ#&p7?)jMdnd-qpRVJ0vlSM*~rF> zj5GZHJA~PsFk84yoGf0=(j%7u{HrV%P3ZoAZ6Ru60t|vG`%QqK8bY%-y$LX=>mTRj zluZ&b^BI%AMGJu(935t*`*V{vjs!zFnX|GIe$tFEN+ay%_*Loqe?5Nxn?e3>jMI7K z(?AaHOm7^82=-?va@I34=ze&6`X5)?B&p5;H|3WUwffw&5z^l(+`DuI= zzY;uvZ{;uKZ{(8vUHn5}9&jW74#fVO2mXM=+$BP{kQ6Qzu7&sjpA)_Y9)eyL-W7Rq zia1-W1OLBk#Vz6v@gw3M@jmgZ;&(9?ApA;yVMM$T2$0G0ynHjdX%4lwv;-PsYhumi zYbaD(1BF|oxMmo#tR5q)MH)R{M{lYj-y$Wt85Tm$-%{myPzso~n93l!8WusO(O2ae zlfuR=iLG1R5yBv9a;UkG=YJ%GOJfb~?NJJ^hL1J*I$ENh15zkFh?9mhFcdb1DTrbR z)z}B{0OfB$C#)12G7>yX0u9TLW`u;49}UB!5MRbMB0s8)H7PX@grAIJz`*l~s|E;b z2Rvfklpu4S`-v-XZ;U)*Q7yF+gjM_+an(Qp?I_S26xLzkx`^j16p;>E01#GVOt@-% zREp?VUFX>=6%$erVY6Z>-d(-t4hrN4o_{IIUDVgm67XD%?!8eDND6%yXz^UdAfc8P zAQ5iy?3ySRLobJ;KF^&}hr^%naIAU!3|7?OxvM~&O?QD)nJ|PhEm&s+Y%>CGHUhq6 z1boK`c*g)JEHVPBjDWBaaFG#khY|2~Bj80N;5P=ql&MC*JR=}z1oRsLw-^EU8UfE6 z0e`{we;)TX2mk)YPv$-F_WSrS-^HgO67cQ(|L~9U&+)(He-GZkrwFrz8leHSgEk98 z!Y<(!VL$iJW=31s`PiSOlLS&%an2Ifz^(g^sZ z5nybu6Mt*CqiCEFFxveK$ptrmoHewhVw{#wQf)0g)Ya!O@DwqfxeNo?dC;B?q z0Gm46{88|yF@7AqLE-i@8v{)dc!N%&*DVa*Pr~4k1Oq5vuY=%BGeiXO9-3Beq%7q8 zbpOk07H@u$2tX;g$3}EN*W|JMM=TGgUs(QvCXeMmQS#FBKh@;1{AVoR+DgwqugPQi zORPE(D*myW#nNX{dX2tbh?D22X(6{ZAXVlqEdcL-h3;ofU5@^>Lu6&sG&0bImXQ!5 z_V;C?j|cx^+xp^L;<2@fWFOf~vY@XkCW$3-?11L+o2}vn{2Y7H=-dAgPVoekJir05 zm;wqVLB~8kG%Vb&Jjy^25aCZm2;&c6NQ2?j&`v2rt?&=zfpA9RDFyAhIO{WLD|ygR z$~uVwLF>#P{1E-%9#zj#-lr}UWfv+gTIWwhQArs0Q>lR_%FgP z;1T{w{t*8H{|f&m|1ST5zzKOmfiMlc2381F!V=gUGz%eNy>PD3D-1%^kjo$%(9Oc_ z!am_1SSLIrJR&?P91>oD)xw*?yTS($A1DvJ4Neoi;A^Z(Tq1sObiWxd*gq98K@^0d z>F#xu&Ty}%w8XuE(wXkFC@poLO=+2XBc&eqIh1tW(o@~Nl+JZ0D4pj%kJ9<>t&}cs_ffjg-A`$idw|kv zcaqW?_aLRU?(-?Fa}QBk?;fUfkvm1{V)qE8OWfNiUFzOW=`!~YN|(ELQhJ*E0!ml7 zFQoKz_eGSR;l7yCmF`O@^|>#lw84EDrG9ss(nj|#N(1i8DQ$9JLFp>@m6SHSuc9>Q zzM9fA-PcgM+WiqqTin-D+UmZJ(l+BWj-c4!LeG8=> z?vGNs)_p6b>)aosbiMmF7;H}#ZE$}a(npFfDf%j;dBv9&eT~w~iXNskUG#NIcNINC z>E%U_QhG(vHz>Wb=$n*YRrDC8R~LPY(rbzyr}QI5=#eL{_}Zc;DZQ@f+mv2k^c1Bx z6n%%%8;hQ%^roWkQhIaIGnDQw`W~gX6dj`Uqeb7R^wy$hDg9W{a}&kKxE{WT<9ql% zehA+BOZY4JYvH}WjlYxs1iblQ;P2P*Z5z<`~SaSCm_HKFj+WJ zm;rOZ$sir5fmz^mp;0&!=7F^kIcPJ?1Oq}!xB%vYtAy)e$8fu_SNNoGFU$uI3SSkz z0W-og!t=t5Fekh&ye+&hd?5TCb`ld|UYH8egl56aumEHV%OECUlh`7LA(q%Cv0FS( z92B>S7eQ39YakZUtsrUGCw?0AiM}L0Bt9(u+2mJS{+RfbcnI{4ek#5yzA3&V{$Bj^ zIMFGT+(g%#>AIV)x6t*YbiEa?GasevH|Y9Jx;{qNZ_)K}x;{bIC+Yfax;}+hyYbKb z4$*p=uHU8WGj#nPT@TUq`*eMluFui+dAk09u0N#fkLdaWU4Km17wP&Fy8e`|KcnkQ zbbXnwuh8}9bbXbszo6@Dbp0h=U#IIEbbXVqzoP4}>G~F3-=^zt==u&_e@oYQ>G~dB z->2*E==yuQ{(-LlOV>Zr^#i*8iLTVYGyg(=|CO$PqwC-4`VYL8a&+bCD$rG=tAnoN z=sJO}d34RE>qNSqKvySSC)3qM*Fw6w={k+BWpwq>)l1hdx^~kwPS+l~ZlP;0T@!RY zkFHzk+DF%Zx(>j*yr>Lki1B4OKa4NK*p8BDhSgZ2#4D-Kyxtn3#WC4g_Dk41+8c+ zy&Kgvt*)G{kJ2kfr=Wjts`ol_TCS;gYkOk{2rrjy?ASaqkQzBQr{yLx->7BPC5l;V zFWtfzxT0jV5MBCIqh|4y!;(uM)tnf8FdVm9u?YvQ*|dpq_uyUOg}!fVCv)jY6lB7v z9!$HCjsbb!5$~2Z9<;cnEk{E~WP_weEG>BHN)I){1|D1=K@`u;Bf~q@C(ux#y@Qae zkI)n7T_ib@@+P~w&{0UY`b@Y3Rs1l=R+7*vV1Id(kcw`WxZE7C{;kK_e0Aah- z2W758okN}d;4o;&$P?TCsnvtOh}vPcW1t0W>`1K&u(3>||69G74G)z6W%2*=-M7@bC~^7}XX!f^c7 z67r)h(ng#j>3g=Ix3KI(ip!J3dU>T1cDTlb`2p{1a*(#rkvd$p<9Tp@V4rJcH^ z&{veLxxfy1YIa>2HHd8PnFDjeERu4SGA>6+S0<}Lsd~S{-TKj@>{?Dr(Bj-P*Oiqy zg)l9(iMgz9K$QCx-r7b_Ea0l8-5~gp+X3jBmeAw3At`RJ?BgdK70+#bt2@-VGaY&}mu~ZeJH|&RMn3 zHmSCj5LCLtJHOgnsjs>A7Ny>^_OC18%AwvM#aLD9EQbbHgIMLP#%&o=i@xN*7OzT4 zyT4YUN-Y=eUt7SQF5pm2_GKIs1K z6}}`qF8l`2Q9k6JHQPsmQJ$RHC2|Wb8PzWFab17^0Gu zlSWib60DZJ^1jWP*YlzY>zBcFCza zphR%SKTvOus;0yWE19E($rT%?5MdFvO6DpcX4+74vH}9tJ*g@uC?Mu>q-4H=A8Z8V z%2jD$GR-{HkDd zObH8KGF!PBz6x@UMJ-H5nyx~CZDATu0w68$s3G7yt5Nq1aUTl;;4+W-2lV; z&eg#rgzKg6e?^vS>K>)ef5OAC6oSt$q)+^;Gy-J31q~ zG731dpy8H#&fqht3goYjp^w>~5~ejhF-E9-os8g;ge=UMZlFL3T6q1PL*44kBC%|aMdALO zM}pGXA%;IWK|1}E9t2@XFuEbu-e?2IP39b{Bz3(D877dCj_A6(z3_!jq;?vaRS_r* zUh>G9g%CDL(aFTPN!pg#(B^Lrx3{%-fHtx(0>^qee39k;tug0T>X{7s66?sYbV9gu zpsRN%IglI~_O^Bo!|9@tX$w581@Qf!$W?Rj#xE6q3|f1|{DXW4_XqBy05toFT{nIl zm!3QOSR2A35+REn84j$CT{q4S3aB-Xdg8DYI_EkEQt;%M2c!@|{F|;55r4T2_(5x) z2nco&kbp<*ePZNRR0`~E>mm&c>`j{9v_u5Mk|D0U+F*D@=7CNuJ z7)hLxYZ72!MWJi4nQ;H_&3J9PEBvdNKl9yOOS ze`~D{%~j2gbm38=iMGbKbk^4B5nX+zBVBZKi2TXE?xw^LShv*Z>U7P~v(~&MQd3*A zREOpxy76&D`Ag-&^4K0rJ^rP#sP{?0bRUccQ=t~UfhvSXMhODm24B1Wi{mO zt@cu`$)sF^QzB4qv6pgnCS|b1CCaPqrCgOs8O(=)@`YEONtEa0Ew`ngF6i)8A}HdC)RrCu*nUu84(I#cR(L>=FMk^2h=<}4id7vUoK=3j!p z?EOE6bo|Zf8F{6_v(s*;&?B2!4i0Veb$81F*)U95GzsCy#8K zuEHBlu(K5J4*YvKn#4$K^Sls;b~vRur}6IacMdf4CA+o;A*NbSVjz)<_wDpnieDjy zuID(ud>4QB*@bYXG*-3<4XKl5sn$+|wJawVEB~)p${a^Z$yU!}*JaQv!FLiq4MzEy~ z4w|$95wd2l>R8(#OA`=Dr3EgydxP2n5D$p80Bre(x8`~j+-uSTM98`Y*vAn&kG7YU z*7rh*Itn5v64;tC0Eisp9@qaL8vnmZoo`b6z4O{n;XnR=xAaNgod4thm$k%)&j0Vp zTsH^*E`@df1Kc6*O`an!K+RwYyaOx&?*Z$-7x;I<*3S!?!6C5eyA163z6iE^uYeVA z0i6A>1iQRJu*KU4_IHQCrtVkbPRM;6Z1NreO@QanjSVU&1lk&7k#)hSzZs=iw=62X44v;tv_M!J^MjB&==Zfu-fsba+yefFIo!orz{@P)t1RFN3;5+0 zaEto8p0c?ARdaa3Bnx<{1^i44_&FBvD=pxkvVecx0{*fE{C#tHp+)-_uC};8W&uxI zz%AOp@BxeaU$TJz(HuTyngx831-!`u9=CwsYyrO?*Z=tbi$5117w;9X6_a9AY!puw zrwRWMUJ||~+$Y>1>=d>LQNbs`N?91k{~m0BzYC`XpWtuexAAB5r}4A-JnmQAGu)TC z+qp|{GSUAO@AW#kg~GNF&H+0TDHe{p;ML;29xS03c6|^|(B${E;OEo!mN_`HSGnMo zX?sgq5xm^1W1&De*bcsLA_Xr`+dGpLZ3qTh8e>i2c5t&32^YLHb8m@*TS}xFgAwvS z1;J22WuPMzjTHQB+TI!Xq*O=r%c4~Br&IS%cX0FR$%t=l077lTbL*o8Kbg6A8bg_> z$yo5>w7tcwGJ3thf*()aJ5@oc(Yz~op_%;-LuVC*atTA?BV|xd<^(uI# zVDAYCQa5V_-*xSs$S6db!4+7+(}jEUkplV!V;;Z0Q?fVD!Le_Jv5TH6-aEm3uzY*! z-tkIvYJ2F(vc2OR+zP5()E8MTe|^+Z@x;`<4&_O0M?CJ@E3yjHNGkYN@m_(ECtS=W zQ^8}-y}W}fAu4U{p@MHt+Y2i7repUT)9$*I6&c3vqosFU;^3C6b!GTtp>TV&z2K4Q zcU|n@YN;Ij_e9&n>PY-5R{m!mp6)wkoA)!DOFw=Sc)!-*{eV5{EM+c~5W zm1-5l)z3YX52a`9hgshPH3cDQKoX7-+xQi?9LmO1wyYIhXb_1h==1Z3d!dC@@ugCt z)b6DHFx{Ub)h;M`mB5>n#ZGQ&SZz{6g+xBKr@oF#nNrWG`(e&6mFfv`;_(;jiOa9t zRB?ex6%l)WK3Xv7tA}t_GwJ=G&4C*D+5G+7pSal>uYWqce_SDG{+8kpNEb`0zgT;4 zs}Sml#@4lGQF}9vga)tG4k+`=qAM~yVw`aoj9BWW8#?y=ULom*2i7T*#IZhLv!|)X{;Y+_#lVrLz`g-ec zQK~+BKSbIrk*a=nsk1~LO|bYp;=y#7`mQ#qFQBie1e+cBfsfsA|ApRxLreU0HJ zrJASjhp?HIQZ+{;tymm3!M0qF8l$HdJr#Lyz*vEw#DFqdjCMzAy%Y{&`}smPM$&WC zL84!~=c>`$O&VQK2@R%nr(l&{G+^{D!~?LN#1^_c>;ogT=Ch3K=`k@D@%?vj>p0;Z z`1%*ZAG!HSFZu-Zy$7^|V9tP}H9S+nUZK6z5x1A(N&v0&G8Kj%F=;O%P(fWSjZ*J6 z^5@zYhlZO4(noLAEMv>iGps>&o$v{0hal7(>YScm>I^zdi)67t=jOh65QPInBZH~o zrlDkiw0ER`bFTO~G&qz@CGoRe0kuwadn*@i%8%~=dIM5Edo|cYUU)lGsiDN?kyJbu z^Hx+0bZ(7zS5_`p-_-1gSW{pf(r12xD*zR5YK~6Q@RnOcBgn~B1N_>g0W$g55N0fA zu%@|3%gwII`!6lzR?D5cu++Jlb#7x~*yi5-o(XfAy=z?$#_N%GuQeuZi{SZR1$Ths zzQg^P`y+n>U&dGSt>6vt0+8FWeT3@?F@N>rT!A%u_$ zB!o~BT4*VhkOT;6ga9FsLh|J!|8ws2*%?`7HX+~t3Ny3!&dfdc+%j|TDbGIplW-oYa5^pXl%f}Nl!CZDBq4iQ{zsk394J_>gIG49RO3wd3B9D=NvF*HC9*8 z2@%k8)$WG!dcwahZ>Vi*sVk>qQG+P?wpFzSd-{6G#GyVIiL?PxIx2oIOI*cQ1^2fN zbVmbSZM_}c!SHtG%4N*U{XmYmnXd{R40QxM0u_e?=LW-l3J!H+nmAt|f1o)Gz?*pn z5ggW>>xmhbR1pg1Tun7+c?!DJoEWtj%aR?D=3GmjkSs?Bcs1w4#D$dWC$ENz@|G(4 zq%3A0kGcz$O*Q4Y{~|UFnT>Ue)5u#+m#I2~EKa5f54tPp!JSN?3Rla;vrJ`?>H6YS z@~_i9AsO*6=1e3Y5Nl%oCX15@?i%iO6s92eNrJnk#E$a17H`g8M!^U>Hs^m>`|W_k zHaS4IG|>S05o?-VkPkPMBaA`awm{MP`rPlwSTT)z~`<=Ml(!%=Od*gFA z*5`hgHMyRezp=$v>CJtJ@XR4=-dVnlfyL)^vW$bl-YAyPa6e3XhH*q0Tf=<={TO5b z`Th_|`@L$W>Xi6HHU!js-1%{u|Nln(pH(xk%f&)RZ&m4Q`0bXOyZZtZ__&h=9z=o9J6Yfn6!?&G zeH+#pTmal3MoGVSq@*Ef|Nlo$+$(&Ef0g^=lxF&W-_5asagIEeC0QmU@8q#ef(e64 zchdXW6G+kaS_mi%gs`Whoq`gK=5)_N4O_xfAaDBhcgUN-mHmbrwT*ooE6QFkRz7xl zCbvOiJdm5dLFQYs#|pp{A^?Z>iU}NCrzpv-x8OaFmw;Z)CA>LgSuX#)t|Q?x!{R!yiks1;s3b}8w3*l>gPge=Ud!jh$gQgzic&*K{(mzkHVB{PU*W5{o8Om{I+inbkQ98ZAva6NN;=aKr&==C)RH<9 z+8onmDyI5t4~9acS^euu1ZoT}SOQ{8ABQTb^W3Mk4~>vq;ylyqdQZV<&1@;W`M z+VD74!Oe07)0Q!hi=f9q#Vofj9NaJewbW^CYj{NE;Iy%bG>f3!-7d`{&A7;^>X)hd z(lq&(ho*T+aUiPmJJD-PwK}LZT{9MzhN-59*4a=wRn>Ua?m(}s++`Y5kB+9k!n$mw z#x(y$DE);u`RBQZ5CO=~@8v^?{&zW|fP4&Sz+Z%=-~EXF@f_X`Zy@TA2pq6Q!l}Yq zp-k|?8h8&Zgf0{=5w1dXk6}dm`5Np99_3HrU3@a!irzwWkCzeI<6TG!GvQm5k7yoS z5XoZ~qImQpg2&Z}-Z2JA;a#v3ei{)uUPUwx-EUwMAa*1hR~c2>&r0oQ1^anq?pQ9V zC?!{(%Ow@131-Q*@u%m{!~e=OA5G-qeKZt54*iYf{1$&F%VB;TxYq;m6GzEyC8+A4F$ za@1Cd#f_7l3Gn#gU$$)(MlQZp;>XEO=BgKer{y>~bfR&>$SN&D^S^*=;}8eu8Sz^{ z0l8Wn5CdWZV(t`(*&;8zf#^Js2;TtS-xZkY+k{fg{WShh{7Z-i_9gyCyeanZmHcvk zF83z)0x$%>#*J~uxCn}r{xXJ}6+=qN^7G^KhW!@Cs~^i6_Qji*el&Atv9%a8_Wi#*XIt`Ph?~H;d#S#O4XRQ0J2~I&dlp_hPT<Rm?C`wlg5Lede_bhHEWtORqU)xMl*A%wyTZTNOi7ufZt#Lkowi6*Esrt9AYj znODyn_G&dJ{W`0|RT;xoO6yBztVib$SDI=|_8Xa3E*!2<$~IaZWPUJxxLj}F`hj`F zTa2_=2}c$VpRJT&)HP?uvWL%7STgK?GOx%PK2vGhxMhFl<@1KmP$+43R+*P&4sSNu z9ABC-T&6H8nJ{0HIlPH((oC8%FLn)YG@DXilr_8|el#7<7+$XwCym;{xx?!WahL=!>cVvUSG!W=?YuYaOjoR|87qBC+zxn!T-k%6WUUR|yUD z!UI^bnJ!i?A4wW5a$z$it(Jg@NI10;^a689cer}IX!-)`NZEYTJjI))v@~FAB`UVe z<6md(`m7_WwgWd>sI>z^BWdlxa1xwuhb+r>V5IEYL0Jn(wU?k8?CwRrz8wnV*NRFh zx^*JS|I@f9aGd=rzk+*$kMTbP#_yNKbVS+v9-qd2TmFtu72N)KMGvBjc4jFcD`a%c1pM7qF*M;}#@v2EC_ zsGOWRo}xFCJ^cfLL*cf5#C43U>6-QX_(g>|sHeH!hVE;s)HyR` zo(tLPpf4%5{Djq^aZmQAt$I%x8`Qqc+ri{HQ%B1~P&P9tp{oI3rNOBeWdXbg&topR zX=*@#wdKCn4I8%=`t){PZfKxV2BuagD##+-To#!v{B&zlEMxK=P~TKnUeVfATUoTR zT3@Ys834+woLX7F9aVmcg=cQ|c_S$6KQcX(;V&anG*w0QgfI3aVctXtKLQ(fZB~Shr`RqL_ z=~0no;d-%FzC)^PfXruc<0?<#nsqpv;@!j(RX;FW#}3f?i#13B)?bFVRf3mZ=Z;-K zt~65LI_yeg;KRz*ikeu%iE!SFCboVoL<>vCUAwlhRE8@X0S=5=D-R(94Pvcm*IT_xzXo|1LY8NgCp8^8cN_hFJACviO#q<%D{8(eVrt z3TB&}X_>@&(!*n-T3Xqyu+r1g_ILNSnG9Cg6=fvERve#8b^@$&XhX$LK-IB0Qo&M- z)vQV(jo!iJooZZptJl@4t~{PjI|o+Pnb`qN)R-j}b=A}m%m|3A1B{i`ZcuBx==dC~ zUT2C0M;f)*s-oneePR!4Y5qURiG9M)g&g?*KPWtjm|nBQa_Hx;1N!&#;-CJ5OM=Oe zj;$R%i6*}SOi~M9-at4Q35E{_JDkQR;rCf+1r+dy^(sEe2K-X1AS*C*SAnGh!HN+} z#aBD+P#QL3OCIs&d-esx1}qiJx`MVvCC?m%w1iX`0DNi5O)tUz9LO_X-wtn;)5;e9 zsJ^Oe_bM`O)dEK)yr-n7I=#wbK3^VNYt0*2c13VVyJXIL+f~Y$<{VGUZW44phf`RmXLKeO6&hCDgN)dd^30DWG0;B z_r$i1?0;^)2>TNKAKu!H^X%ill`?dVaG#IPJ(PP3blG3riR^yvK?r!CU ze?%A$y12~}J28BpHp`MNgYH|xb#jiQzgc_)EC|AaSTi>^ni0$P#>(X>+Zsz8DXkD| z8tw{p0ILhaws0OYyJO1;$ehs{9kvSmm|P1?|?@5%yCsd?=mS3!j%^8Z`G zUChCD=MC;+Ab&36SMwE+0(S9-_-ptP{toVb{vqxY{LlEmaJLC=0ii5m^%oGL!qu<| z`nvEK?EC&IW{4iKNURpau;=>@toVK^z7A_YTUXD#hvDdI?@7C4hshJPvZ=8y?+2z# zau3aW%*IFEVDqoi}~Z#$`7tXOb?vdEUvm?4}PhKUDHACYRmx(Ri2L z^iRaO?51CDcG*q;H1i*&a&#`c=_96=A@BNOhr={B1w6O5CmUw`G}SWdrTNY>bB55jFI1c{i}= z+oHh^;nPbHYE$#gRqh>RS>)6!+>|f+ZSP=Sz6}7K2!@4EtrU00-#AGAA`ybc5A}9d z_k~%RpS1P}p4BM`Y217c%1JJ@hwtZ`5cBsI{xSYdVUvJt!7p441kmS20ke4z&x=R- zeDT-fqhg6zBld_N5x*_Ic;eN7=wBw*3elc$bEpTvnti>|a9=mt2N3>9OU#I`LRNk! zwPQ5g)*h^=YpmQxD8X>7hXa(C!pF8$SL4G0hkkGE4)3fKK=}WJT8iD@)aY*x)Hh;f z%J2XJ&5gLRylOWJ^%D{Rh*vh&!(Sf=#N;Wi;DRQT!_(bM#jV1?;P!#wKu~ttSKAL5 zAAk=Pz6-rWHF3d^Gb+1-ZDAD%gh18_3k3JgtA@b&1$wbb(nR{w>BF06zJTjLRIpf$ zQYkn5EK_e(t}!KzT1_{ivZtLvj3AIgWmga}XoI~S=wDy3t>Z9-P!Qk~mU?!cSWb5| zh5On8KERr{G0egs(4Y|i3F_aW`Q1M#M_-_9dR#mpdbv6Hf8}ySf=8P?PeqZG*r0?| zE0p{!?zx&KS7e``aGlY*O?6(V>_o`PPulVy>u_{0gsrnyK#!A7tgz8x96_wU$^b}u z4|g&~*qv;_gpEW?y*FtCSp3+j;x-|Qa203?dEm0PsPCg{lW0oU{s$Zb1-op>Trk}{Gb|07%*3c5E-)w zRX2}-uh|GRgL|ay!{w)_YuRNGsR_3A)B7iqycCzdL*q(DebIs2y4OqVe;+6OT}bA) za!{De^e=YdSQok2Ns?Y5YdPp*XAtyG-Mh|mxl8>x?Io|WjEZd@>r@56JsQu3*)!=y zp}o=~QAP!QWBXkYs7ZYW_drb-56l#11?@oPeHLq3&CD8GEJd}V$;E-VIm z*V>hYu!umW(XOC}UQH3tp-{BT1I4$D$m9w3k`lFJjUna*y^1w5N{<~8$Ji!KVi_`f zCpKyJ9e17u@7B9B{dhdx8>fU8X{&;rwUnQ5#4FS@B6dA)H&bwr$-KrEHrw#wij4R%Es5^ML)jE#fyr*_i+slJE+{Xs)ltzso z-bAgHhdX=Qj1B&~Rw{V@^gGqxw?8`28*Htw*tEW+)PQa?KQ%~&ub6(}ld`8-A<6&i zIpL2&0e>C$7FR!m?|&?BypJUDIV2td9P2dQoeeUPIM~0f7H?9;+qt6;u;D?Yn9k_$ z3_ROj^3Y^eoPi_p#C0@lxpXeWTIF<^%10@dJ>Elp#H@BYKjJCj#7P1L#Tq=lpB% z08SR>2}^}S;Vhv}I2X}?4hkQH@9!PZ8@?{ihKFyp*apwuPr$2}umJxsgZIg_AEn)n ztl`jU-7>Brh(Ja2k#W$FV(@|LwL!zR!-mvFhSbG|)Fp=0rH0gHhScST)D?zQ%#b=_ zNPWPN`k*0or6G0Hkh;o{y4sNXkS?_;W7v=yF{DNfsWC0Jt}rvhkjgZqT!xg}kjgTo z=8=>G3QctQr)=7Wc?Hg^{ASU@^tz_}T zsx>o~fXu;;T%vrVp82mU_}N6&__;(C{CuJc{%N8Lej!l>|141j|2$Cz{~}QZ zzew{xjXS{M-y?hh@I2l{tiK-trRQ4l(>CjXj+C6`p>$}6pt=Ck6Ui$Tgy9L_ZLO&} z%a|BOeozD5R|&bkZJw;F3+kJ$ANHdH+{ApxzmK0TZJ33oa-4hCz+T}ZAtqcS+$7vC+>b~AzlVK5ws<;r{_WzR_+jx2 z;#Xi9@QC;vtblG6??n`V*T~|6HXu4A_Y>If$Ob19SqYK8Q{5*j@1R+&cyGBX`@+E} z%nNEG;U(@=F^eJtWG1L&>VGStMLHfl;L#Y3ZZB(+DA$T)-l&A)YHj%Qm6Qgd_jY`RODlU`k&rBvz zlQpO^l_d@PDO*{kh%UkF&3KQs7ZBkxGaRwIqWymw*Ucez#|F&gZvJ1G^W~5RcH4aY zXOP`_O~x!PRAQ0FA`=q{bz<(H4NbO`ggXmNp*UTnj)9w{pVhua6-e^J;Xchsa?V2bJIl3OpbhnuFJ*5{4cvo51Y zOF>XQ&yX^TpN*nvquAOg($6tYfzqJK2WYes9n)x*YWr3)fAb8=-Z+gu_gxE} zw2>02dKpx{A0}VzU8EC2V7PpfC%y3*Ro-5F9L{#DC8av-5m(EOC^pthQ&3ySak9sP z5j`2Gs`EXoi_G2``didm*B*!Wo!kS!LQs0Zh`!@g54>(saU&(x15H?;c*)$ZG7R%_ zShnZuqYBdM#rTlQOyGDbdH*xJhS&;?8>0!dL)^4lFk>Xd`oY;inz54O@a&UWg!{D8 zU&i&8LmXOJ6B-GD!;PA$3H6Ney3#W=|5Leq4$=GOK#RYSAL2dSXOUt0JA8CU8Wtj{ z%ThO`+cI&2^}EgbjiD0mDxtk{e&JwIOP%M8GdxNrHo*mlkG3S1cCi)hVg|Z=_-J!t zX%|`1E|O{c6HA*xPnz3Y0+~E?)F;zkmyrJUZ(w}udmCBQ+lP*BPb}s2@s!ugl$#Pu zd0jkZ2Dl2I8xu>pG@f!P<5~LtFXF_-!e0JPpnoiqCw{D8+)L_n7Wf_J(Te(bgYwlr-Y8&Vz(8X3|c-eR*g#c&01AG1HgaDtgZ>-ROv;g2r&maJJ ze9!1ZfS)m5K_5j{&7k&CG_Dey=@%>S0wbM#gj!$&iw-7xLF1ijGw&TQr*#XfzXR)* z37g!?w&2^$xDRgVz z1Cl_LoX55{)ixGUWK&6aAI{sAAueILZ-fsY$aFE#F8_J?`ogdOCYNh-L|@RYoI1=qhW;Ud7w7X4V)XPTW#1(vXTLk`OusI_hHW_jP^}(L?B>h)x za076YfxB8WYeO$2r9NMyFHqi8n|>qXL(PJSx~0yW{t@Gih!2+jDJpNPdSmnMCU5#D zMUi^6wir>IwXR&UM$R-e*y&1tzVG^%+~v@OW#sUy`p%*Em$2T)Rcg-7m@PCu0Gy-- zo?fz>e4fEQW3)Gy0CeY@8Y6F?d=G1(-rN-=fvPR`OM^O_B>A;c#Nxb_cH;4HeOvfI(n0$E zi`?Hi?(af|xSack{Pq8T|AYWJOUdPpf#4qjcq_TQ=`?p(irRjcrnk@Ge{Nbh7^x|c zH@b7tG*IwSs0YeN7BC2Qh=E|QH6Ff^xbne6t1MFk1NnhO5$Zi~LQs`VYu-+jRmhA@}V5f!=oN^?dSuC|J9< zyt&y|ThY?&4ZwR}!oM+9L%LIIK+|QV9peiEi>I4eRK61Oawici-Y^LkP1P{7Xu3QB zi>(i=BCA~1i`XOL6GSQ;-Ed`!S;=hOSIaZ~hJ#{x0#8Qu5&RR7$tubf1qu55G8^C9=7@x=d{N+Vd z@#Tf=+eBX?e5~XYeW~)77oNVni0X1#!s;S_rdeGK#OX7stC?JvzN442s^p~>INjmR zm9JBBB`h)cUrQCfS z{yojT%)JE!uuR^=7xG(R19(0Vfv(`MhegmG@c(-nQh~P+8z58g!253tP{7WYB?Dvd z{<}|j8c1Moi5%j5dc;C_4m649!*AdU@p^a=+#%ivFM^lFx772m$r>O7z+p>-VDA8M zfZC#c;k<8{(%&?t?=+?FGNotw{N1MVzGX^(+myb?l>Uw>eXl9~T~qo#Q~G{W`T&N8JJn9|v% z^g>g5ktuz$DV;;}KZmd5_&WXoeHPa*%e!ry@woFy&+Vn{3S|Bi|u7w;4w6MrGTaUluXI>HA7y$3_> zfzDtw&@Z7@1w!EqbFL(DnDJ^j)R*!n%j}#R2(!*`_o21}!GV5O)O94NQZK?_I-2r& zTvpC8LvZH6e(bb%zhFY;_sj_bwvPqDq)}oy-!UDQVUPFRB^>RljLJkd7{gl7j zUCB8@R;%hW61ok0(+tD2iFWD?-NBTqh>~*Xw4+Y5bJ*>Y_N*?hYhXS4bp+0?niM0R! zC~?t z19Ct+7GjQHVG_R>2+&wNn*CuX3gTUfC0^GECkvmKoh0irjd(2mXeXn-DRo<7Sg&mM)iECqIHnlP zZ&F* ztl6e?fhlcj|E#^H>z5nTxd%wsPAJKZ16ah*`WLOw8ECQs z1|jvk1v0!3V6L*WkQpY{)%dJuf$X8Cq{Tz(*4`-}<=b zBL@k|sgNvmrv#dKJd5D}SX0gzfY_oPi%jiEHJudv@ciR$tBOqtmvEv+w1RV_!qd{) z;Ss9!F;$rI)ehc#+@*$1g{Q0%HnqNdSD?yUSH9bk8FIGVY=&@kDhWiS)^=$uWWs*= zucgjdbM+CW`ZWL3xILVBBepl+7Fzf}^2hk)+&##e>EGUCmm~taps5`22wrkt+JEd~ zB47`_F+Dq7Mu22>f%2*0N<@5-VB#z+(F+10N#||fy2;-#v*dP&^ zHUx`}!4Gkwvzu){b||q_7%!n?2Z_oChkGSnZix{PIyR6vT6!@hXkBnDO0=BDWRdtX ziydkGe;OCyxSP1U00s6YKbv0yERa3?0RIL4Bm8|_05X8Ta0i7nVTo|2&;nUsC#(Vv zLlW>!;Td=XWk3#a7WVrWV4rXk;srl0z9PO%O6c}TC@?^3O7?>(HN(O7AT-XNGblWi zmQ89>0137YbVCX=7?6ybH*R8p)ZoC;R&jL0Q`_g+=o)m=oQ_0jVCljn(Uyvx{h7r`?S(QypYh;K?_V zkQ+X5;Xp8a*t3qDc(jKiFv{?3FcyShSiKQMtMZf?n{1$0*8)t)pp|n7m;j9UYQkG< zk4ExdQhvNgKRVhw@_s7+@NkN;M0;C%S1_QMLjWOvf2cc{I!iGwkS@!149eAH}7y*v?!kf$pVBAs~B4Die&w=jVJxtqLL8vHRJ?NS$qS zA?KqC-43btWP#F~@=v8D^|^siFA58Fq`W76|LZt$2yOOLp+^va_rC(~g1V`H{zJzi ziF--17niKPz)Q0GSeR&?nUI%1qgC11($EYg_EuT}bRWAg(d6p3`5Rk&m271bI@X`S zmMpKUtq3%G8whEvFVc0ak7%t+OiMCa{%u~i#0eeiO*C5#P_9)ITY+OeL~EJTY+>=~ zuiQoy_8#jd3Ql8lRf0l&6A@@Tc7O;t4P-_HD!hRm4B&#k|9MdP^XdFj$p3us0X_0ccNS~L89}{mEA113_SOf1BE&(3s zUBD20Q%n;Vvk0N*L4tS{-Yj3os^GWcZP`!>D)Bb}!{rR{mXlFD$Ya%vkn}2j7?n&_ z&l3^fv&sJ#efE|6^&v%*GHtK8Y_GU&uVm3@z#=lG_^{oDN9-;BfASfw!82Xy9>|QU3k{+!gF>Pp0~U3Q@aZ<*j@OU z-G!f%5^+%VXHIsT(pmKVpUo9;;;>i-48H*(i~kDWh*;p)AXEPrICg$Q-lyeFc%d@< zmB6t;;wUhjmB6vRiKD>qR07A&OB{s~>ATjNI122O5ID9caTFM`QQ+9QiKD>qi_Sl` zn@(v_VL*dTuY#x2vpO{xcG+&u5>O36Ocx_KruPVL)>#s4JzAO1be ze-P{aM??q%^?$J?V=Yp+Drm3(Y)JY)P1|70npyv6A9krsRbQnk>c0U<(@Kg1QJq>t zuL9J_D{73`rm-EQg<0n|D#&${pqu}o_1O26a)u*k!JZ)^3+N=n> zr6{+Uc7#-m4s?H^g+@>k%iOVZ z)yX4A#MKno4zym0I(d}214kspNY{wyCyth@v|G9e>|gE`j(dgwJTSeo#oWN{P*@w0 zIeg6qXeX;`$F|&COGt04c#Ppa64INDd?jO60mEv$)sqC0)oSydfN;5$1kAGIj`EU^ z9F8Dt%$oLWQ?JAm^c0uAe`^K@4g6^XJHGl#FU5-PJ%@(TDjsktmFyinAJF<}gjy&h z9B$P`X7~xhO7VC!dJ@=#&Ll&-q*Rz5iEX@hTP8pm*^p?IFd20$BDg`I=3IyCzQBG& zNc24Lys&I>>9SIPd;ot>(T+>_yz~`)EZXsWxX(pReswdfeS74<;nuFcefvVuqCjzL zh$30!X+eUOk6@@{5KuM1yGH1D38TiMD*5`mby%4ew<=63@qcFtm7Ff>U!C}QIo_Xs z8KC~YE0bG}KFv!{-KU zz6)vk55oy+G1U=9YJi3E9bV=D?A_Ju2>*vII^VA&l3zf` zzRI5o;a7j7Qv29t$2~4?vpjOK!P$(>ZQPJTFrLQdMn^c{Ua(-nFn%Rs351ZA2q-N; z^M4k%n-g0R|2u`>i=WQ?9pT4wUEJ2#a;y|`V=1}mThnuw4GhvOfk;iAA@zVJtq%9~ z0Df=M4Xj5|t_12rbtoK!I#VA=%V#lBCUujYuf!Ol#Q)u13 zoC2m#-*$Qu4A0br`jqh;+CDF*?VHZ-cS`29lc?sjt!#_NPbLuwYe;M_$&6ap&Q1=U zjd45bf!;`{vp3iwS*7d9>bKUqY-J$CJmZT9LZ3A%0=+8``almZpZp7P60K?#xSSD5 zOWO}4BU3PXc15Y9r2pH(iJud_!taF-2&eK7^6k6;U*Ij1c@gZnfvi^3r);cfmXS-g zQ;0|wC|XZZ+?eCEzwHJxS53DUGug-utV?gMt@ru@>}@L<$0L+xbIslx$XGS~Y}+w3 zT^baS&R5&K`@9>-PBneXrb-hrvAxCH;tkY!8@3VyWSi;~15(L8?^Z6@Ktq1viCZ@^#E*iu&&U_l((Zy>X=^jc?%udMMxuuu(PbE%ITfhUO(zjOBu zWH6RKWiuypFBr5p{(%TVTAg!F7I>Xt{tpui?&sSU|l*+ zL2iQ;Z37*7A0@-0U}a-HEidw}WG0V?0uqvv^k#txa9=;)sQWyS_cWDYtdtI zXl9EZQS3U^is``B7Jbifm8zh>`XE^qsdRK8VT&FhLlW~9;7%?2u7M|GJIrk|JVn%G zXtC83RU@Uy(0r_tXug!Sam=QyG?c>{T0@dcS!F0k>4uawEZYp7mB%cpJ%1$r;p`xE2lVKP=z=x0A$0LeK}T@8RSmY5l*LLo|;={6pNIxyAZ<8S{-V z&Ez&nD;TKNHptr}*$x-LCWs-?($ws?eKVQ2x06`SoMW*?iX)g`kd`*kt?VY6>he8> z=BRpc&nRo2Si?B>t82j(R%C6G{E=;(y@R2s64}m4jvDNDBTTj)N8DoT5qFQm4HLDm z9`{f}c)gr`+lU>kcHK_E&Xh5aKHL^LvBn6jN>!w`^ycIpauGrnZHOT zl#@Low~xVHGVXoAx*QE9{h7o?ad#^%7ArcAt!R-X?V5RSPsB&{WV(4$VIE`E$FUVf zr5%pvYT@C_-C|K|w$Kk$`x@&h&_aH}45GQ_9$!cz6(($yHR|+oscLMgsI%WFn!iI6 zHM^BXf>eB3T1Vdi{Hu&JOS-0xkCn%>Rgdo(h$<$kp>r|{n*XP9U7YwEVD^3m*u5VF zzVA-aD;A5Vh$jjEfW`lhgzpMpgumaV!aku&C>0g~CGa==_xaoS5AqlAyZ9o0KH>)b z3<%;kbJuc*QJBTw+>rxGT&_SpMKUGV>dcV~k~ls3m+SO}BcUX&h}~m^FLA9}Fw&L8 zt!9^`ZQWL1o%D?K;?_r|brqa4vOkI2#Ga|D^_OFG1hfTFD`8I}+$Fox+LO3ig&_I6sj^H>+V5JPF|sd-%VR~bvF|!H zd!#LiTg!3`0$7Pv!0dh$KrMSJvE-CMAOnQFqozV-mN5)j{=}ceyf08cYK> zGh?J)>1-xkb7f?W)G3durb@24^G3EMaRsbE4V}T2o-uNc@;KxozGl~)g(I~#4Rg|h zks5UnG?zovA8~Kj|=PQW|3eSie z#E+{Jndc6rW^alWDK@MWsH4iagF?tPG@cNb7beChwWek-i@B8Nb-gp`RUUgGHrEF` z+e(T{^um7ECD373^rU9j#v7@svCrUT+A#p=WQ>7muw$ksu}z>@vpY3=c`Qv~scr|F zM0(FuO`50La$oC)joS)+dVbvZaGY=ttXJp9Rw<=7?5M4@E!9RssaQ|hIPGVqN!^K?4cB@^Z8bWdf~w$|p=HC{k&R&Lu^Xi&%GtwDRO?n=#u36n}g#c^<$uZ#h> zwDg}x3}varFsSaT@*BQ(CG-8bMv`GA$=wksP`>aP+1L_ zFo%Ow{IZ!8Pu^-Bq0XMxW*80yyx!JGPg{4lo{@R`==-0(UeK?R!uaO8ATJSQuv6x!4jL?;pr z541OV{aoe%rJku%c=1iIT#p#Q0;K z#)?JUcsMtgdC23~I_{wrb)|`7ePdXvx11>xG2}lM&h0Lp9!Fck7hZwofSRQn}Lnznv3ngb4pR;Qzj_|6-Bxx%9%xB{g*n za9V_-Piw^528fIRHSOPN+b!nTyTRCde|My-Xyf|U{&19y)-_$*O{3OGB`qxv$AE7M-sbttTDV*j8v44ik&kK zYr+i@+ZQ?^JvjmMTP>K6TiVkuUW(Cvu_qD@c`h~XisSBAx!FEGhhmIMoj9Kbe`KB5 z*wWn8f(Q@0n%#2$4?>~ zD8|%ooeh+3jqcRYtg~QBzbi(!V0f-BG7H4@_bBz2=Kock=z-=h%w6>#n*OoQu>~$J zOOCJ#nS2%|Ha=*!O*XydgOF)zI{MO^|0V&OFF&F#79<_x0AiR?L|N$rY?#-eqqKM| zG&WxgCJO-~{YT$!+9*2B@0@sk867>(#*hU1E9T!SzqH@>$nn(8e6sRYX3rdhH%T7) zbknr>yH92-G&#dsGfUc(cNm{>(b2asPhkKFd4^ zU0G7<$@i_@S-|>6VMRHYmC?FYULBJDe>cC8!_I#TkiVNC&pV&*LfpSWME<)PDBzz2 z8pth(|92PAz#l;jz~}jw`B(Y3_;(QrFcq-?7XlqTAMpS;0t2K5SRuO*6|f5kVS_*m zzgoB+a>Fqoi{1fbko$lf{SDKHf%;tLTiFdy*(Hv&z(2GPZKAznZi z{0{~ZIq+)Whkp|2;N8CSW=TY}B*m=zTB0G<}Ut;Iu?w8s5Gwxrq^Jm?!u=D5KzhdXl zyMN8jH@kns&bPRK%g$eL|Bjt+b-&8aUv&SToo{o$#?D`I|AC!vcfZcgUv|I2&Ud)q zWaqEA|H#f?b-%^VUvvM7oxkpWo1MSmeutgE>Haf2-|7AfJKyF0D?8uq{u?`g%l$4p zf7|_ccD~2`4|e{J`~T4Qe-`KFgctdL@|}?2yJM~~AgyLguWWpp5Slx^%IiDFeq}wq zZ!!O4{VPv-A1UXuGDcHL#?BZ6%BuVwft_{Y&M*29@w~cmF-kJ$4v8UP7PwOkCH7GuA zx^Ej1p4`W+l0I(OZLM5u^$DkP6o!v19>acdgS4zX0wZ+NJL@F?5(-)ZObKuoSYh-XzfbG>5YE|up=wi%Cf6?p$B8e6DO&PFGeS@lGgvvalmKnrC6loXV+KMGGL{Jh zwqlrX#X_!$-h+;Faef>ZCVJ}FEo{+qV!BIZA%AR^=8o-@tf{1k>bo3X_L~j&Wh!dh%0I9}D=bFr z_sRZAuLg|sU7kvyhZ=ThG6{uQX8$YrIl&JEzmO0WE*FjoAH$mci@^82Uw9mtV6O;o zV6`rabHzpCsp4A12lZl|z6TM0E(8YPRpLj09d-+lfA19^6@MbWB)%s8#p=EBzj^;Z zX#q0JW-~BpjrMb`_Onp?S)~0e)_#^~KTEZr>$IQiwVxZbpBuHGo3x*0+Rx3}&oi{2 zXKFvs(te(;{oJDcEZ2TkXg@2ppHDPWX)BNw__j5r1>gL1P^%@-&cYF+(1-FS`g_Pi4@q4gj zdRlx|{5g=wUlrdJ|1AFFMAv7D>4GbZ9p|y*e0E&Gj@j(EkR2DXN2^u4l&$?6{E~H?d{!l@73^5aj#cdF zWyflE+{%tM>{!c==dj~8cC2H^dUkAJ$3}K+V#n?5=wnAeJ2tap3p?&$$DQoBiye2f zqdJf9ug*l`~_wzFdgI|kWtKRb4^V;4Jy*zp2(Jiw0K?AXJO zz3kY>j{WR-Av=cIF~W{fb{t^GgY0;S9S7O*Fgsqvju*4zCG2=9J6^_)m$Ty)>=%(21`S0VB+T5_eq;b_SR=)K7tj+QXgVa4HSNhc$3<8b6z!7%S5;k%ifGf&02&LofPTxY(`%JmKOA|yg*^0!#ZAB@t#Nxp>@ixkr;?u6#I z@nA4a0TP1Aw^Hzep#B4M$2jgWekJ7nzZK2~iud2J zzQ0*KuFm54AG=bs^EBJ1{yuX$9AyTb@!O?I-xv%sU@)`Ro{RwNE34NPm#otpGP#rY zz=AC=2CExs?MaGsn<`9Da=EX5L!i8QQ<1;CeuH06z$L(-EKjqLn?d;&7GJJY9WA|N zaL`cq3MX0}Z4(!gaX)O}@-(Z?X*P~bj86@Lg$~Mf_DIqng&JmWAHS-Nr z13~QKsFum%O0x{n>Mg_G1y*x4%gMscQ?+C#)m*hIrFNZ8!^F+hIv6YG8fWU%%e9=S zm+qmG4HI?BCELx@F$Y@1YMOqhh3agWrcvdmd!QJwJF!O-rrPO zQdnJDYIt9{PbT@l$o(Dmzd{~P8+0>#qMxzQa1(?36aYvGi?pKj+;t47QwlvKhZlB)7IDioc(gh07=Z-77^;L-rcp1RrwuY`#eUk{ITzb2=~Ek~A)&DK;y8Fs26 zXj~lTg1^@!o{rbgfT&5-J0){ikDY1=<-$1}7D}W!QzXEaMG!JfjY2d`ZQ#kzr(9;^OqW(l0&$i{wo}MbMC7aiSP>_*%%ZzgZu`bkT}<^& z+=g<~v%xKEABV?)FxSK`BVyt=KVRw^vgy{?mGUHh4eSDhm2j~=C*+uwps-Be|Hb@L zZYI%x#J4AURs6SKvx)Qbzwv*p0t5YT{2zJ$9S!$&Gm(Y({*V8Y#C?+N|2Ol8@#B5+ z7d!9x3YX$#A6p>-iqmS?=)h?EUY^Q|-fMap$CF_O)utfJ0Fo~Btd(E4tX97AW-lPE z&1Toe8Y?f}*jdL8t%L%u;(?V=G#U==8;Ax20jw^1 z+W^Eu;JeD2sh3_XUeyWX0zfu#N*eMiiE% z{++d+!lmZ%$evN^PV4_<&clfT=;Iba5%?hI5f5rFfmq(?<(ZsIwFcaTrG9ppINMz=!OG2{^GbQ zI^OX^ldhsw$LEe-l*whN(`N%Z-f5>6?xxAs(4q|``@c&##OXeh-^9U_{@?c(+jJau zZL4EB1WMx=ZnULDkh|XE<*7%6mfxZ5MVgjo`T**0R9>7%xZ|@3I+|5J<}`G)H4}fb zV8VbUA_0E<+rXn^y~klGw^nY0t&(LTTRoNgfx+3*P}yAD*kJpyuwA2BbN}{67suOk3HiQ$G^8&=)|GD8z?JloA@;h{7w~UJB1m||MyYC z|L@@2xkvfW!>-4tSO8D;T`&zx-E9=$hXwhufvK4L=Sh_sTQG_+WjfD$*t1il;{3az=~DEcfdvqR}~b`;Fq#{Ug7rc zPKuRGbZ<}W{JSr90TaHGfdS-7pzxA;b8*1u-7x_j#JyCYYARUVOL7lX-a~S*F>`RH z-uCW+j$mt~uYFC|F4G*-Q8jfSEVuDTod`$(W{e#U9t=fD2p=x&FEmKvb)_iX6RWu! z>&FuCxFkIt5b`7?sNCjlXsHiW)t3ia%6-j6f#zwOrB8y@j$rRVPY|BXePPLS$AbLn zI&DIH<#fCpJ^?R<0be3{X*&TgMBbhkx~lTxy?c<>0jyst<#2Zz>$SBAn3qsifC_Be zEi!d$PUMRUBQ*bKbE`RVL_7m_xP!t1*!%jpx47$&Y5v=L>;mABuUazQnPu~Zr_X1F zR|;+&A_B{tCO~1Ecd@9=fn!~XqacSd?@Sy8IgI)K#8HsLmF(@&Zs(p>4FOD0Nh(r8TosHkN!kZ1?ndR!s1z0Jyc4dwn$`Bm%`Iq0P?>d2w@P1%>shfx&Wj(6+H;2@nIwTGK8*h{D#v zu&^k0l3LpIRepr7h!{2-iVViES>pg#EZm!tU8}}ZkA~aYgY^g$L%bLRx~r-{3U&?X zY8VGM)=wY?w-IT@nd9}L5?8`BvcPESr-6x`sL7~eq?T$WOGqmdxBJj@0kq{>BL#!F zaMDDmDNXjj)KwO3r5F53(#S~@u`}%kK56Q^4h}K9-mj8ELp3*I^H^Sm&_^&Wv)3lb zJ*|YKR)A>Mbj>;qbE$JnO7=2!N(>Bcrzta`yhARJ&8;=v4ut^d?^U_Ewzrb^lj6w_` z+UB?t#z&NwbgX{-yi9JB#0>B#H_6Pz!Kf zI4?f8>YXaARbp8&^eKzsrq@mxx@9tIESmqTxf?kA`y6*S_XPJ# z?k{{Ap9@rfFTb1bfj{6!;01gSkiUL~2w`dP1w0)-LQTSc;V?XUN8ri(pztgr2mTZI z087Pn;@R*9JP+Q0H^S%kHt`AZm*Q{5cR*w_VA{1f@vfnH1jt@V8*@L~5N6!$8k&zh z`z!L@>quyxaf@qcfmXtLmiGnMP_~v=%<^t^4K392*yc9li>{$XS{~ahX58i)I$6sr zVb6ZaHI$>}vCVzP?XICyv^=&+%lNWuC|93H^}EA0v{=hy+xCpFWDMmI&^zOrJ_Z?I z%^dO&n7k|jp$C7EHME4F3 zH?iBE${bp*WJyw%jHfe)PE)dQ7d`mHjG+}&H&sBK@uRsz`Gkj0Ijpij&KxSBrzk^G zU1a=Z?$AoQM^S)eJd-uF%2<1<>9d(brz=mwJc6>G%N$y*WI?x2Rd_yQXpL3{%K2%= z&{`#@l0Ei9=1`&TF)Hb2nL|ZtmY0?E^UR@QT^8N-i_D=CB@30OtQRweO1097-b=2b zb=0E7;SR4v@#V~+^~!^&JKgrnl%WktT!wHcpjAM5h+=#5+w||_}2SgV(%vJ%byGQvNvMqPb zc$>rz)+>mxHnTujC*;RUhi(W7!ag8z;Xv~BMsc*nF+8L26Wca^zPk3hSX+A;!%;Z5 zRIxILFw!D!;zPs4b3<|L;=_8ijR(jCHIM0+R%rYf4LTj;2e6a~Hn4W@vX0>XP;Zc- zOB+e0NwCvo=1*_rKokxSGc-e``9F&bapHWTpZ^X&n+s{$|0&>q$qscBXzF9RqtN~s zEurkg22NAM`kBdELisJM$<~fSr9*0Z3mZMBF$TG@$<|c0(UY+R4F+&)M-SOnx!87K zPP1{3Pr1s)7OlKw^k60fdX`#wGj?eB)H+?)@yXVeKJ)R0g`J}V%nyjoe8lh~KOhFh z>u^0UHBEU^9y2=hLyf0M3HcAE7oIBidWd*dgb~6M7U&FCV1>glSWY7u%}DK9dk) z>kKktmDo2EL2Q#zAgvPnNrXCWkwe3zzNxOfqP3~EvbZ$R5y9DNpv+rE-~VJTj}tqD zhlFfC$bA9XqD7*)mp9@gB8y*sg?lnT!xtmEEi=J=TtR|?zy8C)Njg_N( zrEb#x|7&Fbf0+L!_cd+mzi)rVE+5}QmiLR8J*`8Q_xhmAamWtbLl&)T(4_sl4e!q$ zKbuVHSQEhLVy4c66LWuD=H8$ZFgXP>xdHa4_%mq(OgAb6FIGH$76}U$(HeWZwz)RO z2%YrYosffai|#YhLA8sFlf-ykt#$qQnWT|nwT61h0gcRrH9yCq=JD#4`~uV;+n7jC zzGrD97>aZGi+@C6NSgma4#;*zd<_>g;(r4P^po%i_&Wapym$O8C6=6$fOql0yL_gq&?xpJ2OcW5XH=uW4VV?oCuHiBQKNj4Jd_ z6dmS@81B_MQpDY;v>}t@1s^D-8Od0Lstz-9J|2jMU^^Q?2$3#k2oX*IlX;V5(p;4Z z*fig2V07ODB{Xjtqdjci5~H2{p}xfO>6s*-rkYH^rs+-tm%#^$ExJ>JX-sH$E}kTt z=BiAn;wCXq_?z&U zaI^3Mpm>)9<9inW3#NWU?zx=MO$TK>FlL>Y6< zu99YI#zGTzXSKbND8ePzk`OCA&>xka4rh+wu6>M!y0%D^bTO5E1HDn9 z2drH{;H`s|eLg_CLWLvO?lOp2-ys+w$qop{kuV2p7@$~nVjD_ZM3rIJs)F5Zhg*81 zp>9OW;8OlCy$`hu;#%aL%JQg!yFA+*vvOU13i!Seoo#M5J;4Pn?>3wutge?6kAg%6AMpm8hR zHZVwa^5X`j!6*=oY@aswXSnS+)e@jV{uVz)UhyJMcul!agw>_^W$IsMhRJqSO}^Sj zUv2Ylz`E6V@gwOPbYvRg=F0bMgCf4A*}DstdX+6uo$v4_QGMs;i+<^rrbd5rfJ{0q zjrx*4f#K$*mSN>p)HPOat8LgCfCgSNYelhMDimUHae(?X+7qs9tgkO`r~*m9w>fzQ z$h}4=zht`_zr0Q+Gx{4(6}JhIebsg4Tm57^DvizZy1Lx~92zUhyioWvNNlDt+CM0R z8pCu}JPSSjcWM+^(>8_sFoz5%$as4t8&uwVirnC&u`F+A87v;vI{Ao0mH$NKTJj+I?WfnS4H^N;OjUZ7{nKu7e zKix*C_1ZUrL{n)5_-40ijc}nh5^x*7l1?|m-PVl&N@m{Gw6X%A4wULX(E>m>63_^7 zp}^!qbl-oP|4G~e4pDy6_zn2Mr2j{9NBdn$_^cRK%5wZH7CK9Butau84mZ+DQyVGP zOlGnyU|M16WWyq{rO}>}qOzj(=Xp?;r>4BlLxDg&KxSwDxOz}bJEH2iX&CKeVPTnu zxJZgu49%^>Z82bK3#J`rLqk;#1MV>rl}8KX(WoBo>+L?gVj@+r%2CT`FGKod9Br16 zK1mntFiV4REJ-SFVnJm}=7*gum{N7#6REfr#*Umk+C$=EDV!Hx_VDU~GQTozEW`ND zVP4IOEgPy}6A`|Oyi*&>MeE86&-185IWn+s(jyt1Dy<`Z|KH$*zwvKzZy^5f3GqK< z*`Fc;l;Z!L*!~BazY_@ZY_`!EoFys6;bJPK#x5Ui&^CN{+cN=xCSP#4`?(*R#=1_F zp&#M8-xvoaEp;9W{-{~{+Q0Cn{az()|0}n}zwVVXbnp8k;%L3r1egu_CP={A=SMb8 zV88g;IE}A97?qm9a_yru11>7V{>ZG+Iv4btk|=0EQgG6Ju#lEauALqWPg^vEN=!Eb zw4d}&(8fY7zW-ogGGl=iYdsoNib_M!{GY|$#EFf<*M%g04}QK+{$gj2GZl0WeULCv z6%}-S`7XrntSjGb+e2pa1A|p;Tx5?Oa>p37TPhKc3H7sZaKHT5QfE{csgEd48(Tik z3<`6|HetK8wA4&D9jbkcs`F1%Y!ejMPLD=RukF`z)ry`z4*m497^^6(-RPCjqFFIG zRMSSarfNldBcaaTV26iP)E*s0eRXx&YJIcEVMB=U5i~M%`g9T}I8<3HNLVU9Ev+3f zZH*mI`D)cxj}NF#IRi_NiHB@`TvO7Hep-ee()|A>+5dcne-HB?Qib=$Uo0?uAd_3g z-0l~_?H*ysS%iU}{((S8Y{_V+*@_fjK-i4ExAUO3vWH+|1IJ2!ow!()|i*Vj~e9qo%m!vpP61(I&PI%YR0 zcS!U9R8Cwkg!ntTceqpIXFvQp0I<7Bf_Y4U8*1DqnS0Lan;b7?Wp)oRePDkkvy=F{ z6_#UL#sS7#B7HtOXKp+*@w@tfY28O}YLiJ!eu2b+6&t2oRUX!i!!9#N;sKhg9DK5= z*@@0vLavTl6p}4zMW~#?w&?y6-Vr}Z6*H-*wc*CM64E|S) zhdA|5yqD9i+U7VXCz}7s5c`P@!k2_h*#AC)1Q%N~4lvCE$@K{qb_H^0X-kahjWP=t zJ1Yw(jZB)dm^CiBv>VhOSv1~EYeMF%<;a@QqOQ|k6|NWu0Oks*aqzQaXzx0|P$!p$T_=888ED*((dAv57 zABmpQ0I&i&Uy}qv$3xqGs+R2e?sN;>X3+vNDHG#rvS?}=K&=H(uDu3OCaSbU?4nV) z`R2)@KrC;`$A#LVG7%cUdn{Uk5mK3s`=K8P43l8OVW1lamGLq_l`n;R^8ZWYKF#6Z z-}n~(E+JdE9LT?0#LtMM6Tb@fq~$PtTez(w)Y;S891Qp3W!D<%fjyOh&R!>4%D1D+Pv~SD0_3DvWQ=`0?*nWs&9JK# z5@sB?d7pNKfxbiC!NaZAAv)(h+e&>w5n*RAn*3F8!K*yn+1qC9fH&y-FLKcTy~DqW zlm73BFnpmDArl*b*en(yQx(AlnKc;%HJ$J;ww>?O`*P13QNa+E<-bR=+qaGPNm4;W zmGTWw%DV?xd+f6O=1T}P4zt01)8bt(QHp!VD;fHCJ#L*);e%(iFCL<0T3dUtkBjoQ zht1DUtpTucRSch`^@Y<7@KuWjkSHnq#+|35{Zke_mdZc+;z=~sMo1goq3QlEHS7LR ziqq}zl&KvwMI(sCH34N5l}t$ss_B6x-JfMk7^o_ZLGynWw~m9Q;>G-Zd=h@1_zwcX zb4Zq>ctOovmNTIfRIRD`NU{_snvn!KOfCf{sP^u7C#bkbls1TM9Iqv54r8ZnrqY}V zSqYd}VIVK@!W>B)WtK)+$!}sC#%l52*qHYAalLfTQpv_XmCp{{>-=&@DVCmWZDcH;dR9NPnpxYD&o|3TdklvH`E@>pM_A z(A!Qir329u@uq-~lEw6zuH^f%@o4Hu%~=x5)0L`18=a^$>N*twcOr<+%qL(c{aLJ+ z!RUWK6H8beczGqLsq&}PTJ<5|OjUHZT@=(W#@(yXK*`v2EzvJFr$K@?brx_TS=&+m zwfm`j-Ns@X+vl2{}Pf%IDo0*il}WcQLO#Rj7aJ zEDNGbR+9Sx5n#9W=B{By*VY4(F;J8I+R5T3zPYXb+;}OH?T`^ zm@!^yLf_3dG3U9|iaGN8U@ubU9UO=z-$#B5@vqk8`x!%M8XEjPLAWGEaQD;7^FZ*3 z4p7eH3OB5|dUMyZwE9xbY%!%Hru2=b^fyfDCrs&gjcHe=DSf&rz0;JAnbMyyrN3oL zKVwS&#h7-_Go@FV(kA}h2Ta$mF{N)drA_?1|6#nIb+Rd4Y)Wr8r7tk0P4u(wFkOGl zl>YzNdlJB?inHImNgxR>*-Z$CA!HFSgey1U5HxHy$&!=Z4Fm}+Az4TuBw@4RRCEIb zSZ;46?%H_Ns=aG#ZELI5)>f;nx7KP~t*zGksCMf7InM8hXYQYrbzH`~NsN_~SZ0fbP^t0N}eX)F)6nkV!WBVvuHou5ESZ zZ|*6bEn4(G|1>Xc0~G_4gmxI}1XZsckIUxhQmk#I_k`#cL>^OU0z^F{Za%5wgvx;o z;!l7^5f>wBk{M9tFMU}18%Y)j-rAKr9PX>9YD^Sf(K(m0HBk?#nlo!)B2mnsVcpME zF+=BtlrnpF#Z2dpV!m8X zREAcdResYC`IWZf1#QJAnu;;n7d2+S_6cgHu6Va&_Gq6tsjYZQTk(db zA}v*0k*Td%tf|PHB6Yn2<-u@~RINH?PLrzhl~2n+RHw_y6dCQ-wz`UvT&vJ;q>4Q2 z*~%wst8%RZ<04PgR^?g8OBfYHqsUsWS6yr^)vKOowd+;Sx1LWg}XkNgvI%MfB5RgUI^diPm#yJ!(fjv>haVdttRdj;=!eXaHn?-vIA_cf-x#FVMs2 zG4u?00el&~hTcXWqEC1pyaA5p$AE7jD}OG;1*HXhE0p*FeOeoA}#6YWRKFFWkpJ$UnkA0da@_$iKqB&cDll1m})8@GoY@WAQ|Y zCo~Lc@G|lpd>42kyC44= zB#uwv=kcHM-|(CGef;sMzK@6Sr{`CYs(%(_3izRhr&P)34F=Hk#f}(>rMTb((&Irr)ILw`lrpntq3--=*pIXnH42 zzfaR2(DW{v{*b13)AUC){V`2{LeqO_`cs4P-= z6-|Fl(}!sKFin3$(?@9fC{2G$)8EnbF`7P3(C-fQhNjQb^f{XTo~F;! z^ba(Bfu=9g^p7o1n|MOEI?3K?ihBBWV>1m|TGmDL((y#ZUmhDUJf zFikMx(Q&U3b5S`x&7@fxnshKm)H$Y4*ZIyv+@%oXeo$=9wq9ga%+fkfi&J#Kb^}k= z8`@T|BPKp);qh80T<}vT78Raydky%>GCGRJgy`1lAeAjM^of$1vFrvUyG$t-U8WfA zUu2txX!1Tho?7}^hTva>2Gg*f%4s@r)D|P-2x|O^lWQz z9~AA?#V|oybde4S|K-;!-;J6mu>oZLpTj-E!Os6fG!l(R*=PZH_iKd6f4k8!bOZV} z`22eu*8C6n5uh79ou3b@`zp{7xETC_hG8AQmw$|ZiGLr*!-}1S=fQfs7H@+XfH&js z<6q)u@T=S-_%?hmK zZlz=)bCp!Blq_W0q-v#PA+toPR!SB!h4&>15^^UMQ*xw=yh-zv6(CudRHUxRn>1Gf zt&}WG@{;v`8n=Rjz4E>ID|ioh^j(2-z(?Rm{PX-n{10HaeuUq}xA88x_n!sPKS!eX z;S6v;_zAiS?L@1<59kE$U62_*z}*fqL?3`6pYb7k949y-R6A0)j2s&(jpJrhAB0M+ zFw2OHkd4GeB#J#czV$8f<3dZ~xSZ(kEpg*RB?Mdaq1u9zLlFK@;qlPIPYpqk#8djj zMB_pbY*ELnriGgpf{=`r0=Ck&ZlZ)F`Mm5V4lmuU;M>#u>BJDkahy--jXr;w|1%*3 zVIT|W*BT>V^S@0Y2ppMCzk|yi^C#&c2rgMn%TZd4=6{U~K@duTF{&#@^T(+n2vnIx zee~b=6c+3p?W8&h%{GlZTAvCA(if|$356mGN zX;bzVVtzk01o1cpq>_1|`Mu;21nv}G1PzX1em6NpgL{(qP0j1f?~DmS0MKlTQMT|j zzikfDP@&|((%O2k7B;_S2|++n2-FFoL8?n^&RS1}`OVQG2t6v$ON*cM?KAI3y6tVfx&yp{>nIwnw;F@fr20@cL?s+$SadL~epGl9B- z3DgGR{;!L}t3V>3in@p&f0m!XMd3=>0u63Yhy_~2GKqo1Wvv>Xj7b)gsB>zsi(pO# zwp4={Tq`ZFqAl=bbfUZkoPvSrlm)EKh4{Dg;WE-yWUz>c`#|aXAmWg!Ao9QDUcImY z9G4YE*8+)P4y7Tn&}b6hA2NxBIwVdGgVj^2#6=QCxTMbTh{vxDl}5m=OC;DgX^EU` zG$Y>}I+1gui5zVG*Vq3WY<6HWN3mI{nP}?8GttzGXQHVW&qPx%o{6SjJQGd5cqW>9 z@k})J;@2@5Th0Ib=l|pu7A;TqGJ(3D3DgZtptdrB+QtOxMkY`z{{u`~ zevk>&AQPyEm_R+u1nLncP>(W!dW;Fw<4mBQU;_2B&%yY=f=SD-WCHanCQz?t0`(du zP_JbI^*Sa{Pcnhp&jjlAOrVCy_%B6cI5Y-jq8VWEdjV+wE=NsZ4YUpQq9f=UbR*aR z{SY+%9!1Zgzkub>zd#e%!cXM0z}{yOUjdqdYd}BH4}OD#{FUGl=yteCyqABNe;Q(n zzQKQlF&>R4;HjWhxB%O69bN^IfwzG5&VGCuz8>F-zY8`yzXJQ<7x8QO1HHO&d=ehV zQ@w6WuAI%2v-xtiK+YD**&;bRSI*9tvkT?yd2;r%#kNRByjaejFJ~{1vrFWxUCx%t z*>X8sA!i+OcB!1Ll(SWGwpz~C%GqUd)+uLQa@H+p>*Z{NoLwnrFO;*ZDw#(TLIol~`yX34-&UVXLzntxnv)knC z4mo>~oV{4i?v}H?a(0iL-79DJ$=Nt@exv9uw0V=Kdq=ltz0bR4 zPHX1w&kWNgpBbi0KQl~$&kR%VXNGCdXNGC-XNGCtXNIYd=>K8vb&mf8y$}C=F+aT{ zLup{Q0}*d#$rj9!h&O^+aXwM=8`4y#Gl9hjT#nAtn4&6BsdWzJQvPW~ydhvA`gOj3 z#2W=tQ3nzDFf#@p3R&=Bgf1T_D!JwAT>kLl00>%`0v`$o;{!!1@qr7^kolmpXwPS1 z(QeY^14X57y<8IGK`7qhAj+shJP4^jLa2YsNZ4&_1jFKeuoLv?=peIWfJzhL~{DuROMrD#sF!+g?-cB8#;-X-t1Dv6_VlPo4_ExYSA3F7v32 z{yJhf+Tz>l>DUV4%e%dP&$gyb-kvT`n{SKxtTFw|R6komp_$VAo%*;4(9xs&UBt$g z;3BrY=Cs6qH(@PQn8#*<-M>PF?cUMl zHBT7R-=Lw8&~SEI|H?RSCZ)k%0c>8nf;Kokt^Y!GJ#ZiRGcm1ymA0P1$r#<=NbnJl z@%d#{rRGV={i})5uG{9Q6Iz#P?q5URu)uiQU~6)}hde~RY0#RHW=Gj@LjZD5I^Kc6NV@F3U(0&Q0m}#&Oelx~`Yh70_Q~ z!5)4#hyTu{0_Cn9-G1+8M@O6ATnhDR@NjcyM|Wqt*V9HSZNp#x2RkA#nWOGv0`-SX zpx(^{>W`Q}{V@}$KVbs(9wtzK$^`1qm_WUk3Do<9^Z(l%{}G)3-yUpie=)x6<-*x9 z&U|yp^l7vVK;MfQMJ1o|)H(H;Z!THHhI;0kt7C!)r(%zbB2=7vr^nzy5epu~>7IKj zDs{`{l9~ra!{I?uEFMsV5)b0SSuzh)vY-Nj&FFrRsLKP2N^Z3}mtTAuF#rV_NWow- z5QaUnU{WTM)4>5uI zFcYZ1VFLA$B>WvNn|nPTJpau>rRYM`g$|+Xl3*Ygm53Ev4d&*C@g zEI135HFf)`_b6A}PVanGji=hXc`gZ&B}xlDUZ1a{6T4Gz7GG|6d+bhUtIZA;t4-Guc=Cg8`nx(ut^2u%hLZy=GuPb&c0*A2D)75sDtEAlSSyEqC1|Fs=;%}IMi{!5(VjK`m zRE-#|daM7P_q?*sZn_3z!Y@a@P4!;qL@HHXfCecmhmKJqus($Z$s*+?LOGXqEwA6! zXS^MKE(v;(@dZ~!vyNH z()s@r^wH^^|MxElO|ozq;EN^QWIF81FlA&59({-q*WhCm_lrp6+nhC#jJ2l&f)87F z(W6th-`CUZj}%BvPg{q-Am8J+R@W`C<}ZXAxcfdg#<{PU!MTt7x9+)*qM{`0Bn5e= zeeNqB?A%9@iswF%gG`h8pt}1mW*`IL{u6@_Aac=R0j*NY04ViCm4g(=k^#`RDR?k7 z1`n8cv>&O2kuAHwYsHq!J&vF!YQmkuIT{1M?Wnfyf+#4?~^< zDa(dB{_|puf7&*Y2g3Njl;fX7w{VvVQ9pSnf9q!z|Fid;FsSAg3-6#eIm1*;h9$WJ zC-<@*TfNf>*XJyH<@dC2Ll3E@f99S>uOwit(3S<(NMmC3Pd)VFTk4$|9%JDaMYxof zVOk_{$>w$fn`-N8++|fI7Tc40Bfzd8uJlz0_fkyd%y2ZVM>k49hrM6*kLSZB!VfrJT1WEC0z z@!Vw`{{mkLalW!3`(OS9EMcpe8wY(|@Q^u^uG66NV(?i4g>@V!&X0IVoWEd!pl9Q0 z>gen!oF7OIL*(!@iKuKs6m(UiY3e@(O=Pf(B$>hx1YCA6nFS=lG-EVHp}{F4le9=s zau_0ct9evaTT*H?Mb{5b5kV=E)H^9WQC?j}Dpwae$|8R98QlARJ@zahBUMZRkfpOg z&I||-6;bpeFFW!uOae1<)GL3~EFe5O=oBEM7RNui|BEgEJH=GclQ03oQkhJ=@J2jL zyfh~No{8jx4bX^($3IgygOa<;3r z$>(hpZ}b{ZFXmqIE1x5%e`P}J-m_YqI6R58prWmK^QPz-ma;H0d!aAwA23>sAqjkce|!Rs@|?yPg@v3z%H-~ zjT!8Kt3fYr*?P0W;|4w5iic+wr`wx!8KpUjs|8wmr(21{p`32ThX>u-N+JW&YKc{o z!eiwQrP}{1rArL<|99&0NrP0~p&;@^8U55(fgzuC3{d_?c??kO|KSl?x)g2o7bRIz zaEOk7G?v3n{Q2wOE3v{ z;|oN|i1>gY|69W06%gqYasLKeyRq1Yb{m7mlhX=?6sS~$D+a5Zs2>ky{OfKAbji`JJk#<2ZzfPbVFHy6t^Z*{>!&QBnmHy=5fi996R4O8)Ho(k z)HEhg z$1;IBjtSK9OrTC+0`=^{&i`au7~Y2ojnkMwoyY`g1{0{0m_W^B0@ca{>SQKR&tU>} z3KOVPnLwRJ&i`@T9FG4O{S&R`=75inYxu811fK`^C&0hwyBJ|J&ct)@B3y-6fgMV+ zta_qjhawsxu&_h9MRW0|xR19f@rvhn^8e`=)G2PpCAg=&8<(CWEf?<>1LMP^g#)W_ z_nQfp(REI^Uu1Fh>(yNSN{Fb1w0OlfSEB9Wu*pL2rHMV{7Py!O5ldYOxLma}xcWpF zYF?gKzw)*CI}pW2SHWAQL4iO5r*RWR~Y|b|MMZg z61j=>&j|1WNdLVF|NjO4fmQH`*CPMm{6FFim@zgA|BrxY;&LJX7W^Z>dk6l#3scHn z!`n9~pAIYzZIz@vE7YRDc}9z=f=WrrAY!U{tBP_9Pa*r0#DTpi)FThA9n#Q>^kJjh zuu|Kvq|qXGBu#F3s*8eKc^I*DXh8>T^An#7GjgWph=YlIDU49DCNLr7SIvE(_d=cK zvY7jhXy!f%ky`6zo=6rxu@!dP1ZDI93CSjGk5Z4zU46r*1%z^ahf{d{n2f)fwI?_9k&FLBrvQ{< z$%IbO_+NYhe*%1bEyXt>8~6db2I7H{KSTV~22eZ~m=G89CAd0!e9hj*u1=r7XcP{`mQd`T&?E2d14KL|bQjOIe%G3;I@CxXUg9 zuo*)KyToQ|%$o}?_)0-xaeaGtYu>!Mja@#!g4C+r05bJ7LDtzc(17Cu0n^Z-kw|Lp z*%fv$dbL%~%M}_trx|!y4xm;H#=;o(SVT9Id_{w_iG@ZIzkz^#Hqh7(?JbB+VGOXE zaBpIKHxi$qxpVX8&JOb8pL}iAW`Le&By{RXQUHEoCjieGHgJ&%YK}CwwsmL5+jJz>W`oCUAUbI)$lT(xmA$=9pJbF+zV(SMEm$az5~QJ>J9&h z9Kv96gu&ooAk1ksXEnwJ<_|4`VXUxTVmF1?G|IcY1*~Jq07M8$$EP;2Q z`I}Vm9Hs^zjIWUfSnBCOHNa9&2dV*FgeSJ?yGm+L$w{GohYq4hMtXb03?IkjJ@QSR1P<&3NUFRXO5i%%P z4PGU0W*RhSKHPY~n@Q{PZC%#m?eV&R=kBKAhgQ-*bqjKcS(`fbfZqqT%Y+Nk-B++ywXVsi-x164m+X5sSSy^(8Ea8Z#5HwO?>Z++VaVn*$8 zmbmQ@v@+&wUm(wx>D&2}LggS=~)Zk=u=UC`auyotP6Yqm8nH#gUsEw?E8 z=VF_L{r@qJ|2?{sI|drS=kkkqH@}JR<*(wu$v?^emH#Im1(7}+cr!kMzlQI{uf_VK zyCoQ2C3pZym+i?_9zX5q5pu032k7yUrV4D(Bndvk)JWt)ieqGQm zAYd0*Dcl%)R_e4t(`NCd0hi8>#U-`VIHS3Ahd!6oNHts<-esebO8^!w^J_|$RM`jR zk{Z3lrODw5vJ;2Im`)tvfMhhAZi~$((TM|KRq;v3ON#iY-YGDOO`;Qr7~Tm~4jdFm zLh1bf3B>>VqMrZB90X_I^|8*rOuSxaY5Rb13LVVtb>8U=mB`t5Ft^twbrh>KFycbq z7-wJVVczJ`FjtQg4HT7X2q+4L!}1@jI{OyJm?{YS1*8%mxKNAC2c`e-1{y2SXg(C` z@`0jKG+mX|iiA!P2~jB$iWLV@Xq(6bGXAr;^&Ea3KZEbb-@+#$wvP|5ft~wYd=57A z|Kk4w(SLr%-wt|#eY_WL2MYN#^genV-HEP7TTug=kJ7x8 zpL%j<9G4{k6BS^RyHif?P{AXV_>xaqxsd zSx)xIbyU`vywP&fFV|5qb8=hC$!K?2Zc_)-g2@_evnR~ z$zIFJPPvXwC&?|AlO1v$jrf_|Y&p4EuA>oQlh+aXUp(*R#;MF*+@epPg!8sJw& z2kM8y{{M9${EVyMQmoh}X8F7l+o$LVzAs5U_j} zHXqaUUOTw}hb^PxRV%Y_a0PsT}ai{O|;Ts&1b<*ql$>C%$tS z{?Tqv1$CiZ7Cqk6c`uU7^5%HBe~Ii;XGX)P*lqI zugnim5lY2_!4#nyC{nR621AD;e}V8_k=0rQR$$)k z-sT>v)NgI_`+aTedi-8%x7Y7)>(~G$ViFw5n^wczA)}akx+sdHQNZB8Fvbg~v#QZA z{CwRPPEkob(PW0_##{Bm2b2CcP^97uhkKBf^17$i0c0`@&d_5-Ngc(dVSreiciN{Q zfIG-E7{MyBf(tdsT|%`DDrPYc&e7upsN)S|9;Bkdq0NJ_Vjv3$MIMmxAJ5ftcqM-e z`T(uuYUj+!FR)shnw!1d-JsFp+uYXO4GJXP;-K!f!W^JGvR%0gz_8LM_bymsRYuit z*fDyTwQ6`ONrz(}tcJJ7(pir{6^yC@td8}oXjl#3ii{164{cG|zY^PjQL1b-7wY^V zXK(SY7m-VdRJQ+x;@5%Mp)Sdg4t8qguv1$HYC)c+mX_EmM=?}aPNi5;J=7hWL_ze< zEszuHjOhV9*Jy554V7Za19+|u$x}k0;3Y>xTm(EOcDY6qTRBu>3G!$%h4ueQj{hrq zmV0s-yZvE53JdU3dA3#VzJ(h>0~rGw+!Zn^)x^%^l)p$b2?=}Y!4COR8(g|68`{Jk z>yQr{JLLv9DYRTRalb?|ahL7L4P-d6wnED_T%ePXXtXXa?dtzeXU9XpF0fJ)cm2s& zX)7&g1aaIG4YlZvY?Qm!MScR;W7Vr|sYlV)AUXKMq@ot-|iH)s?}_S6AkAxe2|k z2Z<5%OrzaAsBzhA2&%S&+ZZ;>;q*9amV0Vzs6VT=gIn3-Dyga>?b>*dTBy%AcG&%^p{Ti7f|x1lMdfOa#B&LLXdza0@|Wv|E?wEu;hJ-{}fNeh2ZtqhmV2f z?mhTL7Q_Ban4d2Wq~I*xORRapPTB7*_xiaLGaz;>_}BsqhN@CeO|9DlTjg3Cv4eHm zm(@F*cJQWauda2jh1M*&k}g5(q774o{F>OT6=Y!dnI=T#Unlm6Lb}K zrRuSj4trH8chy-q18wm7eclZP`R=hehi~;ZbuDqYU7kAFx3%3f3MuHdd7hx6!{<#so0%b^t|&PuzJ zyGB`09k0PJp>@|z!`0IB4!6D91BM&W&e}4M;;HLIlmse8M<1VHY$aQzlM zO@d!zZ*X(hTd_^5p%664Lb?x--$H{3&EYS{|L1G`{kN(8a{Pa>#=ju{^Ktk(T*yBP z{yavY0dyYs6z5~r)0%=j5p86#+2fNPPJVfFkoY5=Ig=rdqPf-0LE@v7F_y}vgT!Si zOMc~5HytECOqt>+Uw80gf+L&VJIR|{z3$*e%#lyUDxOL7t9T~Sui}|RzlvuP{VJYG^s9I#(XZmqW+JIeX9AT;ysG#NVg2vna6c~Q z9|H+M62t+$fP0SXVYU7P+;zcGjA!Y&g_X_0B*yb+QC>dm0TS6`scZ@+5G)M$Ooi1= z!I7+SKs!dT#!3f)Kisf%Y4r!JmJ49NI%nXJ@VOrTC@0ySG$|Jyk5`%?^lep=8c=rWYUJ zOoB2?doY>cS;P*HO4+d~IGUhixLKM9nH!^bzt4-)A`2XF;aoZ4w zcZ+`v9{XBw{MJDHz9xDlnv-B>cqJO+zL*RGp=)LblJ>2mgcLBlyOxGrS$ZXkV2 zZeuwPy$!ECVRAyT;anj%#Mf+>P#3{`5y3nqVLpqNyTHaEavvY@>Hw%oCBc2kzDsE5%T74oaNHG6Pld~4 zZxCB9vR$qx6p-~l2|NJe>+u5qY2MFU&^J*v_jgbU%2EtlPjC{Mi>4Spg~RIYqP`tG z!3=g7sQVjFa3VVlv=@7V>FhAj{f8%bHaiS-`>{4SfnZ>?Pouj0YlGt%qM+*SYlGt$ zqM%+l*9ONjL_x>I+F%+(6m(Dwe*PC`fNlFa=`1xRq39H|6q7TGmkHGMOrUOH0=1P1 z)HWtiH!^{`i3!wpCQvssf!e_YYUkkN|9?XNpN&<)EGGP%%>?QkCQx&jK+RDuk1`-g(#o(Ynd0Y+IjT3&E(}gUA7P^j#R)>luFEt-VLUm6{E@A?8F%zigGl6;m6R0Ig_+2iKdz9n;#C?E9p^0cVT8wIt7b5%g z!CBxI^nLV8^n36M@(FL^&*6*s3Vs!630}gV;BVybT%i&pWce)(4 zVDMSusKE=y;{v^J@q81`;EADCepyv1o<~fiTq|9~_{v7i%i=ys#WPWz!{%`~mw9Ns z9Y=M38qSgGz!qvnNu|BMuE30^Nwwv5j@m+Hg(KgVTcoMTo12WMNI!ApyNbu+JgHn$ zTT}0{msXe9<|%(ySG%HmzVdf-w zC|6>1J8Q}-EI3O7USHyL=Q*@B`AfAm1(nK{ttfR@k+&{6euT?5+%pbJ5~1GoC`hEw>B5zlfM7x^{Gv z2%H`vgeT4=zj50fb<}$ozBmD=^2;4IoKHF|WQ6L1Q8*oulEdb#A;yd}?<#ZF%7q$d zT@s!^zo~OBOTcMpg}tQGMQHSZsiVhL;V5&*_0fR&Pw_hlL ze>eWg`F|w0h{G3Qj^Bb_MjN=tpm;XN z4M8^{VCnNx$;G0C+Ed&Nx@S`xXxozf{M*myc|QsvlrM2ZANwR{#t zNfGRbc84fH6r%Q$Sb;X_dqULCzGg~OaY7a&M$zbnZhK8NU86wQBltD}os;Z9VxOSn zRFqK861%I?zJe@}8g5X^=y&w>jOr6KzlswaEQt|fHpiew3g`@SKfyJ}}LQOURj7Zc>urwgNq1TqA#f-?lyp+X&@%W942|Mn62 z-y;55D*yX7s^#9``ow+tXYqeaFptPNW*eTN9i`FibZ3jY~H;O~IK2f#F)ffIzssfw#RT zID=Iq00-?(*-YMpeCcB1F9jp^EgbxP1GS;|;oJ^?3?1|QM7s1v7M~q`;BSmIaGn&(LLo5=DXQ8-n8OV|)d z=sSy&GA*$>&FBFr?0`Bu*0*hd9iFGT)93X=O3Krx<<7DSs}CGGIpbND>i5!^OZ{U0Km z6#g-hQXXUiHOK_&p{BTijX&K{)#7X0>h;0dXw#0y*3NYhX(i8--zWxd?e1)z)0*%E za|};1$M6($3{Nx1@CHa}YiwB@;C9$59pGS&HmsOk!)!$MV6Q1z zQbjkA?ZLSOm*J*&a>G=@m-b*0YjjGnN?WjyAtx0Q6?ki{!2*KIa0m1PCsi_%wqQQ% zW=R5&co^kd(0WMY+t7Nn33Z_!v=d?g>_rFBQFJ-F23-#x!EQz00KK5Q(a+E?(8K64 z^bC3dWQDJxx6y}iGsyD^{Ahj*e>QLB&*f+F`TRV7G58W*%GdGB`9^*n-wJnzetsu^ zDc=WLhL?et(GY(Ve;fZT{`>ro`TO_>`A7ICK>z5EaGUr#|1SR#{~sKOldu`?6({0z z@N_%}e334|7r^~u6?WnVyau=6jkpVM1<7SEK7fzH40av90d5@cz~8}lfxpuG;okAL z_$mB6{xkj?eiOfsKSpcOg~$!}n-ypYIuFf7xo8HOiYB4)CR=e{BmPv6n$o4%;xa^g>9gzy~v`?SQ0iJ0#8k zU`MM0Kp|Qk7z?Qfv}ZJ=zu7YZ(nt49h4iUCIgmcL2O!|*_W%U^!X5(Q#XV~veQD1|NMGIqo@Mac zdtuv;-`NYx4}Nbif$+gz0^!5Gxsd*IFGQcf|Jn;}i7VL)ZHaq+FSI4@#l6s$xIgX% z{>S}w?@mZx-4_Sx-}eC}af|njhxGk@pt~CP!9LJli~GmExsX1$?*d5wvu`P+pYC(R z8%f*;^u#CaYlYOb4?Nw)$L+fa(v-dtkf!zlXW}#aKn5N^xeus{pV|kjVf?hdd5~uH zErE1KUlpXY`j$gFyKgO|IepN&_`E(pq=kLEAuZaU0BQ056iDaqp9tx~{lMq=Mf;(R z@r(B_fOPu)Qb?EVuYt65e*>iD``1BQvA-SCrTe!+T6KVfwB|q(q_qdeK)UR}BuHHc zrbAkPARp4@2Y_SoD-V=Gy6Qk3q^l1=M~Yu_paoLTfeuKU4#2yMZ$1cpDSrJy=u7b% z4uT02$N5nOq;Wrh@!yVoXgk^sqd$m_!~K8%|DUlBEZ|0%POOIWP|b;YNUKi3J5E}9 z0^WC$;{?3>r1BHc50dOBpid;(PC)-iT53+()1wo%Mlj^*Ft(S2>o)z&R{pB+k?={N7xPlwIenhN(MUbJTxBO z{F{f)0SeDKGz)5eaA+>1cOSX{(w`iHF_U=LAs91>_a1^VlX&z{E2Q@yf-#f$i$ee{ z@xj9YE%Dcffe(of9R{8xK7JVZllbIe;8o&Nhk z#6KPe+7kbK7{*NE%ZFjiB))Pa0n)!7fiaW#>Jb<-iGM$GE~IZ9fiaW#<`L4;2}fYe zB))S5#!TXSM;ajg;K({iKRnV7=_g0FLi+Ec@HP`aJqlwci8~5oCW$`^Vhcx*Z52@wYS&*h2 z8w=^!V^&DV9h(8^_+y2TPB^w0(uv1lC?!og=7iLGtP#?4j;)7u%CRm;rybh~Y1Z*L zNVAWR2A*@r3IDG@4*XA=bsYGgH2XO4KPl%p@INWr^M^u0(w6#AslKZU+3^jo113;mh)ZK0pX|NDfO?EgoQz+b;Z%h6N(2GHfX zh;u;Ya6dcyOjMA;?1oFZWf!DuiW@Fjq7^`WV<{ms6X&y#s5rgNUO1yGWhy?QN+DIb zxNlrUz*fwH2A8*^MM*$6lm+Y{Q6o~dfT?dhC7>v=+-L%7h>D7>-P`1=1GEt38Dx1x zy0o>e+0#s_JzYY*r_Hy85JL$X)i;3>RFG(AN6?C)O2vQd)!>6%|}xI;A4p_^wLdlD$JigqKz*X@Cimo5uZy<9>tYpei&OcEY1k z9QRMK0C)xN19rg);12XV^hZ9P&*UBadf2_6+;P2r_ z@t^Q}s1ptp%`lrdK$EZtO+ll$cLBjY+_l^#fK09aGyxa!f^fLHq`_0?bksT>Zin5) zKQa|pD!#GRdYrZOZU>2)B|r2VqGKifoa>FHBzS2eP6O@1+G>1|s9`}4A4tOEAmf0# z{ld47THF`ORpWiaa}KP}I$#0I=)P#whpao(<{!RV@Af_sUMnm}ra%Vl@E2qfmVJDv4)AXX5V zvNC?Hh9&ZE2!nOm7~d4@EyStU1lf)RHT6A0NrlqTVp14wi`1RCA;3rVkO_LbVJN>+0FNmpz3K?DKrz!*Fe zvO@d=AlvR(Zs!ithN>$)paED7mqNIOpCTNeRxh!Ufyksm%RJPc}^gja5RE_Xyz zlgAwuXoK&aZtmEZ2hqwb{{MpvmO?N&F z3|wifW6ec8jiO8i;@N?-`g|01Ucxe?m9C=0EW<^-G7J-?L*=Y4dwbs&N=~Nn7vOXc zsH=aLmrL}|F6rx{sMCyBKO?B8Pp1S#l+Q%%Gl?irNQ2vN!L!VN@Akcea)2fN!L$!9 z>Dx^4&otia8qqVbSAfmK(kS%zR`ZHBr_90(G)BpD2!GyqmzW_qjOF00)oS6Jvn(oTpv82 zATT=8Z1haGF1VN=GFov_txvNqxQHnd>YkxFcpgDwbo>wHh=tzO99+m23vCP8|0j`P z-{)~5#G!TQez?Iqz`q8!Y`5TBh=$C{xIlrvJ_~d0gy)%K_ycncFEGdOB6AFXWRBra z%rX3#Ifj>Fj}&*U>s0ZSV`zSL`{p#qy~Paj+hqTrz!h=$5{&pmd@4GLrf|1I#bBTA zzFm<$Yo6g-XxOm`7Az5y8nU26G)LH~^z`kdSSKeGu)r$VdWveI1TEAEcz3YGE7+VV z@j{J&cRN$O)OJ;c*A~IMjU`^e23Ls}YDjy#`?gZNnF&mKRaA3@*6!--p;)IGfBus8 zio$hOv7nAE)si;v?(t7D;0IpBYvk<+e^CtAITMi{U84pzX|;jxwr?R zc&ZOvFr7mQ&q*v#H+TzAPlztB-`(o-cDHu6w}`h(-JnVC7c1dbX_j?b9=Tnb1^`HnJ}>@}f$Z z5Cb8AqpsZ`BCkj1(v9nz6nRC4>$=lE1EgqQ5uqgViiCT}#J&us?}pG2buCJ%(76=l z`UKM$R`-8EOi8mJZmY!}O9*MAHRMv3{4?RBaQ_cV1+CnB$Pc%CmtYR64FACRoWisp z!k~!ihh$7d_ru+NQzP9lkI9GtM-YDRW~Udh6TWxTq6g+OuV1jafXQ>3&wsy8R`PM{2Sm7@HkW|KHgw8kwzLFE6U?3hl6%GtOuaQ0oo1jHNh%^$7p%C$5RG6 zHpCxSOR$n4m~HT(#p5Zpm5>Nqk#=~3O9>jIeWi-(Mc^dN6Lhe^Km;GeuNCYIRtGBx z1{PN|RHCycSWe&@{jO!v&6;2tD+Gd!W=+t}3;}%wYl5Y$5C~EiBL5#n+F z_Ao*8GT821!@o;!0KUs{tYnYz$CyDr&J6MiW{@vq2KjPkkgs3{`ASxhM~r6%c>*iQ z2`@8){1+nsPa^ieSK>ncQN9QKfBy)r;y&fBrWU}P!4l#a{QE6D1{MyhyVrY!Xa|_84MXJe zZf@#o1)TxFR^8+GZm$5rqSv?b2+;%LodieXDpp%VCez>GMRS?84TvIao)K8LgTJ$Uq!SjI4;r z)YTNMC0LAB{PaLb;(Ael)Do;AIE6t@AfQN>9)t*mAUBlu#r4Y>@FLZ*ldk?bCteMi{UEkK>wQ4X-w{9<3WxuMz2)V+C^wX3JQb-ndstF=+x0`)JXMohe6otaA)8nGh7lpbkBO>Lb4lvnCd4v;Ci zBE21*UDk`$q{1T-ee-T;GIQAiecc(R>S9k-oh`p$`*u2lDZA&img}%x0H2uH(%A#UT+LzOJCVDA@dLSLZi+zQ!VJ?CAh531 z>4xwe&RS1}AruyBC{)0gNmEoxv@IOSF>_f0Z96hdSrO(DJ7H?LY6x}9Bh)1-r#cCR zb-I_zeD5{$F@ESoViwP6TZU=~Dt(CKDfF zi=x3pZcOL4CVzA1W>_G>$z@AtcjNl@?$*3{bCrWHEwhDS$}kvHSF;Mq;=ox6=>-9s zDNAfm^CoXc&t^}{<|a>z7yMdyJ>Hn@D)nyeY>XY*^fUT$U4HuhE zkoA8$w}!*7gQvXv@HasYZ~%Pjd2ls&+dCIx0>8<>z~2M0z7Fym`C2}UPeX5_$I)FV zg!ZA0Xc_hJkpj-#-r%0*e$IW1>*o$}egH^6so~T(E{i9V4z+qEejY6KW5OwMTsEy0 zd^FH%_vo-Cj?19cWahHCEMapT2a%TK1=Hd*hm+&D$@HO8y2@LYS;C{qV^p>&O#YU- z)UZiJEUg@tT66d;@?&|Gu+$`nN5yfO6kZv47;;;xM~9O{GOB88$}LsN;Y9HfR|U{w zshki_h~of)l@S-ZkrVJROMj*H`R=x?YSkh1z38*y`CDH|WgA~f};*wxR_4v_QOKxw(HxvAY!Iu+)4&LMt9ox_j^d_7(M?lNEJW_N4P=5-cZa+nia zywYK>Dzz+`7P=&ks}z1H`nJ*eWy$!^ZjmhNVx!IuXXa8*waaqB#L&fY+d|zj;^dHD zvZ*^50IlJ;6d2zBTY zN~YPwL@@sFX;?||O2nlN6zFZL$+T?8N9rZQvIg>{qt!C`XeA9~ zL#WdeTu2xa$(l=OQd22?FOn+g|NNNaevA^pGwu!Ob@1K0m;Wtz-E9SrUgY1sm2rV_ z`WC>%u5ma6+cMukSPKk9N33PuyMJAMvvQaUzBNu8yo#-a!b#!V{7?Dc@W1C@<^KUb0#os1oCDH?dYDUgftT*Dz>M-s z{2YD*<|o*brKMoud?4>rz)>EVyukSxakExx`5SRzCf2x1995RriKjR^!Ie16?P+nu zftoPifiN4q-z#O?X?4Wopzv)?xp}3kv`tkyp(@>_Dm|tuy`d~wQdOk_RjEo!}Z zK~?&Rs`R+3^ro_ua<-~8M^$pGN}a0GF;(dss?wvX(!Z6ZR8{*@=c>MIP?fq>rK76S z*HxtlRHeTvOJm|xrA$?6k*efTm3mdB0afV{Rp}LFDQ%Rhbgrs&fwGi2IjXmsmq%Cm zqpPlnuKIp-)uYi>|BR}#SfZgF)U*tZ7^?xc_ z2+_dW(52{Vi2d;ZdLF&UC-D>bT)rIQdFU!tfBIwH>hv3Rt1~Vpdn!6eiI(k%TInfJ8?Ep*bwS_pcgJtntsdbdE@|nH9UUNR zY-(@o_AY7fY~Iv8!X^E}*+gm~>@4WfB;Tc5of9;721U(?Xud}_~>oebU>PPNO#*-sZ{7pW;`BQZ{WkxE5#S-Wt-xKZb^qVtrNu;i) zs|)P9yU879cS%Q!3l!J8l5ZdUdrQvX->0G}I3l72<&U-&(A1S0C+Y|%hfe*BCHK_N zr2K=7|3vO`4*tFa(){nip8jI~CD^aufJ3Vi#zE|8lc_mj-0VOaT)vQLb2TYIB`tKy z^Nt|09@g|$VRPl>E3e`#fA;`%_80;tL+G!zl@;X|6e(MfVp>P|lWGinS6yL2ZdqaB zd=-jGMxtng8?hzrO*_3R6vbZBiV23aqOQ(Xm|Ns&XlrllP^ng=tTGr&VXhvQeQQWt zMj6r;m)lufq;5pWpzi7@aW)putITz(Uc>`rKp4dAhH%P;pd17h%a8K*)45N`v&n8>K$Vam?jDA|&YXwRN z77IIe*yV!84eZ#dZlUVF%b0e&p>x5uuB~-VzNXD!m*wjQB`JCWlfI4|wPvUv zQlA=i5QrQg>;F6m_5pwYgU&){qv;S8uM~FvYf%Tf2&{pxLAOBUzx&W{A>!Zb=wq-G z8p}_G2!9vwH4xcvBg6{s7c32s&s{_bfv0vm8x{Ls&tL2 zbgim%ovL(FRq9uju2+>ps!~{0q9S3bMPE^UM+KVFcQ>lOyGd2LSyj44Rr;!`bZZh{ z$W7sHgBX*b&C`pnL*GHaMt?>N&^aIre3yHUyN|mKM*TRxGIHwwDva|d`PVVVXX89v z0h&Tv@ezCz{tQs~9 zE#$bN7Vl@y)2~lk5u<*7jQTYF`Z52GQU7#|`up|kQ=f}b|B-(En1mShSuyIJG3vL* zsK1;9?2-BDTH$cpDjYTCBZ4<2Qj<83AcLX{N?I~?}AbM_d%-2X@H6D?ov|3yyxPwoE&`QK6wE`O5I3U29OYyIHg z^(GG3ESv*mDR3Vhn4MvANEgyV7*g?uM%FYpMx^pvo!jZe=ZJDIS+cBCZQWo93mSD^s2UBt)#+N3NpKUJYt12EZ`QYMppQqw znrh#(8kE>bvi>hbh(ieC{-%TUuLvzcwWtwp{E7tr6)N8lkm z1tI~@;^*^ayo+DUZ{~M`-rp7cSNL!6KjI$**}$J6lE5c85l;M5a4ud1GC&d|cnjDR z9>Uk)oAGz>Pw~U}S^NrqPg|xYZzMjc|16pc=9kG^lm)-CK!ce^v>}p@E5G@UvhcXF z@T8((o}egvR(Ql*u^D5;xYn26`ve2z8>{J$ZDGQe?3s)-(*C`AA%EGsl zg*%mnA1MnzRu+DvEc{kkcuHA#T3L8sS@=L%_=mFak)mKRD+^W5eeOPi+<|g4H(QvZ!8^q4$Q6#D4s{x839&8*SLw{p zN+fi4o}H(ica@Kbvu>b$pv*#b_h5Sv03#~#Do}M(W5}w)y{kjE3Jt8BtnQkm_LdLW zr5nRt@+zv9r8*LB*f#xp%zy!s?tQqcx5`tDPuM=mv`a-dXb3he2cX;UIreHLlfTw~LzyfT?b$Aur2yVd_;r;kBd_BGue;40_e}$jGFXGqm2YPkm zcoIRKzE;a&IeSFT9+k7lA|%@5tHj%Go>R?DysD z59I7!a`s1Z_Q!JeCvx_ua`tC(_C7iLb2)pzoP9vf{zA_FQqDdoXMZJUe=TPplCuxX z+26?7N963Ia`v}!_Axp8xSV}T&OR+?pOLfA%Gu}S?C<65^K$kDIs2lV{iB@y6IuV` zxd9GW^2gC5Xf9;`$36k`Kozm_G?62i!gb2&Sb1utvH3b{#gGg<#|%`G<2|KGVPSk) zX0ckL3Ur8~fQMiayLe!!nJW5$P-uY6D0CElTa} z!4TqC>(H)710>H=%X!q_i$s(4|19nf4*tFexBdb2AfL=H=db5qj@#`+-ks6BjALA8sYsL;h08C_Pi(-56>sfn1O1&9ph>Fq|wrrtJ61!=#EC%|3Agy zcK+x5WV9VTe}4f!;G<}T)D>VWMjV3@BP};|G&$TYn3mn=OI;x`lCz5bbQJC^m4=rx zZfUZbHn3cp5YF6vrIy6`5{VLpr|Y?L(m=g5AHb|Cx(Ss$$($)Si*!1#1YF0_j`W>^ zm2TouiOyJtcvRAIQ|n@t%>A;p?a-YmnFm~YC)v|+0;(l3M~90;_5W$&yd3#k3>cp=V7iR~<2MFO4>|uQfYU$j z2{aG&^Bmv8KM0mP*W#;&xDDt^7*`yarnIgEbK&B^Mo2cmKk~m|NJ^_!W|&bP7lyo) z5Och~Dnn6GKaV@BgxKCdX( z?oz$^SHYCHIFM}2`>3v~Dp}H4=dk6?D^p?_lPdRSB9o$8_B9$mAVcoM5|;czPfIso zQ=yu+o;1i}aDxi+s~c2kDtH*?iCig3Tj0Oj(Rg$Kz0I%Se~h#6m5MoF`kb7#~0ua}}LuLuJQuc55w!2EIi(PXIm87Ol05ngw5;RlJ5Dl@W zY-!uDxzP>*WB2B!_I4$*F|Z*@SiC7=oLyskU0+Ay`?@@&uVzfeBX&4Mt|eucq^X+ zQGu($;&&71`yGV%z+Z)1{s;Ic_?IA3FajSynXqeE1TlkG;f;6)_z=Gu--7SN_v6Q@ zHK33Rp8s?$ku3k#txlPsUtOqQ?a;4o*RMXIUwwyuwZ08n%BQ+dr|KJ@o9DOT~#qTSzXLg z7pv7pzq)uxU3@@Yd`?~bSXDHSQy25qMKxY?r~2EY>f#;hqMAA8S5)6x64k}I>f(j! z;udxBh`RVqb@5Sk@hw#`C0<=TM_pW`F1m^QFOzc-|NqZ|4R1ea>AFErCyoCA#`f3w zL;QvO`JnAP3jGuP9z6us!Iz^=s1D6WDPSG^EO!qV0>5D{#Xf=KW{30RxK+HMkzDVx zdx)&wQ(NbDR6AVuQV*S=UG^%w;L6@VKAacBzk7E^ICn7r?!NKioEWa|w~P(X(eb*H$}hmd^3vSt2=Vm1#?dH9Rwp8_f5UW%Ky(4Dr|M3s+0~ zv~V`@p-+WJcDG0JFYl=?aaGDr?Ke#fPbZG@x7UG`$ z@2e|ep>fngoUoM^uQ_~<=zKncvt@jEve;a;j-91>PS_g9t)|T_ak=c!1sr9HMvGvf zYB_{LD7CE13}?o1=hGiJ?GWChR7*h9)bJ!Jd_hd#SeCVu!Wm*i%Apw*j`9kK(jYg) zlM$Xsx_f%=xOkup{i)aG}@N*=<>KPB=Y|vkPx3#*WXjdR+KyF<^me%VBBE z3QvgRYU$5yRrV66qSfkGy(&FCUVcTIgM{V6iQ#c##Dp3ef6!i2>RL|T3h7RSixt&$OwsK2@Ih;mbmMnR;tgwW~X#M{$C+q(x?pzN3?&bcB=A&ciui()) z#D9#P_-o?01|LTm>Rr~bwQpj(fpQxJUElpv=W;^3O71Xh+M^H7DgVdbcK}9hWPhs| zun9)euE8e8cm|9AyR=KY zT>7Q=BmH~xv??RbE^DvI<^JC}WM#^;SZ7!1)?rvq#mGNx0>{2#}i&55IhD*k9l`~m(zJAR$Qm8%Cj zes@}8c}R^d;@33l?QxjB5P16nnGWrfGh%@mJ(((kmH|}>S%!)Nndl=j&=0Uy^c|o8 z`Yj${`FRK7Z>{^i21Xlga?6ZNP#z0u$eWs$Woer2cY1RQ`qmQ6Hf#<6DQlQ*_Bkxp zA!Au&*h?WsbJ;6PJp1h9nUw>vr5*Mk=ndJ}x5gNksm8e2rrTH>asXpoY=w|^Oac7} zV(Hji+tt+UGmf37pz}l@e2jecS#yA3HPXC5(AsF4|Bv8agEN40_|L(z?-D@qDibf) zJ_c*zlR??lEOzUk-a(n&ciSB02P317>rPFJn{@0o@Ic;%*FJpE(!zsQrW~cimhxl4gI-YQXFXMFMJy^b_ z)2AE#8#i6LX*tnw|3=>b1g@Tge^2nU0sre~p-y;I%oNYl-hDN0CE`fph_j`3Q#>tn zRmI6+h067t!d_CH*+u>F)LUUY##jcT`kC~(0JSHJx`-%_20G~0lUaUXWmT@quQL1& zXVZR%lTN55O`=Y;Vk^eF7D&3&v4*s5YxZpqty-;c#YwL_bq-LK4}O~Swr_5&rO#@9 ztS3FC;Zx%-VPHK~)z;9}-Ri3;UAAD}>^ao3e#Gb&QV8*Ri&OQ$M?EUPw{zf}Yi8(m z3mr5LtVy=gEWU41{wH#;bK*#05Jdl%{&r02+d#lw69rhg`D+o}H8YINC+ZJGn9T#X zqag&>nqe%;x|^3Zb+y#C6L%Q|j>A9~A&a=$=54j$cekk(aIt-4#pdY*i2bHIPbi0| z6y|_e>@YQEmSb!_!u(2G_R(eRNbFm$aB$X1ELZ$ZX^91z4RsjlSFGK&HMHKPbbzbE z6b8QS3wqjpbzQ#t;`(M^byExJE)|rY1;Ed|-{=|g>V_*y>mGkYUk$O(Ry)Kg`)unM zxSg@;r(W~l!7`i7|7-ai4p#n4`67_)uL0!WMmYWJ0nZ=D1OCVP;1lpl{zmZl`yl@$ zpa8$hzs-LHR=~SJS14YPg%mg&%mA+-Ie-XUBvc4%028E9Xa`*2BZcF^OUU_P5qu?} z1K%k;2D4Z@o;XK0!YCbfD@7tsG2TZy7~{p#AsFu~9g6W1 z=`f6!N{3^dD;&@5#v(nB#g_XlQAxrPQkcBIu+ynrPDC3lupOEN;(7MYUxajS4wALyh=J7 zxbq=VQE1`V+=A(ghf=moCJ3gLDzbUg=_tH%gaaTr2fryh#dR zTqj+MalO=su}=zO+#v15c(ZgF#*NbD7&l2*V0@r-CB_FyS7F>NU5#;zbPdL>(zO`3 zN!MZAE?tlD7U>3zJER*i?v!rAxJ$Yj<8J8|jJHa+V!Tbd4dWi^c8s@6cVK+5bSK7# zNOxg;sB|~Rhe`Kfe7JNk#z#o^VSJ=?KgNFP0gQJ@4`O_j^bp2JOAljwjPwY`$4ZZ4 ze4O+c#>Y#KV|;@21jZ*yPhxzM^kwnT!* z20pcPIJU4SXEFE9MGU-(1Qo8n0%qN?1rv!D@hWCTtqA)At&QYoI~MkN6>f28{K42` zacKNmXMZs_@f_C5g;f$6x$3s|$PWN@i-(N+Y%=iE$&&%gzuB{3{g)Yj1;~DWY>x@6 zdRh+-c$9d7coWRi z?{UWopNnx!MHQK?NhALkqB*m%wZmePhrt*h5e}1lbp#mh|6z2ODF2^ebTi)~*B$I^ zbTmiyI26#ndoSkQ?hN((ubmS<5hn1*a_xJ10kFf>=QF<6Fk5S1YnIAM%wOv>SYK;a zN#=RBKXdh@#h$~Xo~-RUHQHC$zjt3f+AESZ%nH?Bk&L0LW)pKa1Q{Dml{JVZR8auE zuuw1Rwae?PBfu888$QASwxBhBVy)$7MkVPIGBU}zWXNlg8PLk=?1%oD){GrW-zJ4y zuPzk)OVSe8hZYLas3*nRI__fDqZm!e8JQln$zfMR*5*gURqGV8{~yY2;o#qsfB@FR zzYKf%vxKhzwew2bw_r5`;rpe4qMuk;&Rvq?%)O>sk_?P7(|9C3Ms**(+O~t1#c-CBMjy2F ztKLzZuXtnZn#jj0J7OGBjk{Hrm(&+)wId#)JPRj_u_%UxJ3IM+%>RS9k(^iq_@A%x z@sNZ+e{0`?3Q^$z(K%>$p$^AbwnA#mAI7T;$+@}yUF>PEFU&2eDu5eElS26FbUSVA^)c}DHRzZh z0QwRW2)uO^${B+Ys-6dzNk(A7E~5b7$^0(}PjX=On@isO|NZ^12mTv-pl3*0_PVA- zL7Pl^_V4y}`ke-*{~71htzZrAC~U=wUBH2D_WZJEu!nlNYc3NV6saCf6XzVEf0BCzRk zhRt?o*c|K(n?w3BtXki&^evS`onmyDQ;ZIGiqR2HF*?#IMt-Ll?NH@^-JF;t)bsmu z-M`DX-@m4>m3UQA)hitHs$yLt?Z;Rm(I$PcMsnJr$_}ZoMd5OxZRv@n{)uUcxta%^ zDweWJtY4*W(~+BD>&4QT0Uab8c09968Pt4YSG}>G(lME6Yhbda^H1w**5!we0pnUn zdj(^(X%kEs?Wizu{f&JG5hqCM;|caB-~jgR{NKg)^BgtPdkxMzQt_kWKS;_vC}K$SmKWCJWX2mQHQ zpSL!~h*8>GDn!E`)ZtPK&_>c<(6>c>%bavfVQqD->3gGzYiysD0!la^=5U|7Noxdt zE~fUi69{m8{Ty=WVr@n-WAMz5T5w{B(wED^zBZYtnUZI2t?7}o8<)rWk;o6#n$kVN z8I3k#_hi!&3dSv3hm-aH1nyRjdx!ghm-)${0k9H$e;fr_PlGkURiO3v3jei`09t-? zVPDV!8hruK=6e+I!Q;TEM-iO)pAMRMH-dKF^PrjcB~Vw14}&+456FQd`CoOK*VELc zIa+bQ#LP~bz|KD1mTk*us;g~I^D(p2moT&4h3sr}Vr{SSPWIh+1Z%%L*7lL+B;8AZ z8jv?}F*`)jYp~qcRphH}uL5P^&cWlD*+Y`{7U!!!E^dXbUTrg(BbwV_XEWV~3cmKpX0PT9Eodt6`d z{+^_}^!Bc8@-^2hr_r=)tcA|A&|V9DEKR%PE%f2){C^K8&K3%IKX=a_o0^?x>|fTm zRYoOknD9WoAAD$qJTaL*HnDzkH$^qynF`d7Agrt80@FR(#}{Y2rG4FMD`5IK%qd&8SHG$^}aAYI2(i{a^W$yLVL_HyPnpbQpQ%e7Sd}1^?tcrMKFO ze{yb8Z&e(ZsY1O}=Z4^blyj1ME7{;KXG^{NYgNY{RnAK3t4X0W@>M_2GL?O zmsie6>n+ofh!6s3rD_nVuIrW4<=#@#1bin$(?LpaiB=XZ$xu!m-Md0Vi^(spvVzH+ zlG3}M_DfnlMmagTw^(Z|^?HNP?%pCZq|k{YdzWk2L*~`8a)Q!ZXzkkLrQQOqr_@0{ zPU_9qa?qiXa;)5&XBpyS+`Y@R;nbnNm7|CE=EiYpDyB|RZl!XRyLYK}n=$G;s^*xSy^0Ascaw7J1>r7th+|{&W$j{+md_d=w+Fw z8)a*9?`-x6BmVC&0{d|`_a;AyZ{zQ@%m1|#0PTeiBYX^#?ekSumsizPwRLyY`4B3_ zkg_u+$w&X;7#-tOjgEDS(Q!^OI^HQpCpg9EM5h>?~y|-afm;9UvFDM7&nK8*Bq!7T*)U zrl~|RO@I|iVkmCgRNK6-ay3O=Ls8dK)O8efJw@F>Q8!Z5o-g4hs=S*i>K2N+m7;E= zsM{&(4vM;yqVA%oyD91(in^Dg?xU#tDe3`=dXSJf^1l%gJ^sK+Vl35t4> zqW(-#Pf^s<6!i>6{e_~QrKsm9>UoNKfujCOQGcVT7b)r`ih7x%UZJR0DeCVO^%_OJ zPEl`A)SDFb7DfGoqTZ$`^#2*hoyv(bg!#M=693UZe^uYXXm^czhhQC`@9E8Jr&xDZ z+yk1Hh_+b|uX2boZrkcj`<=1FvfZL>uyBuG*0&vZj6}WPuNXTeocYHAJd&gbrdUh zRhSEde!&amTyoj=E?;LQ%vDXT0G~Z%C^=s0F^(sdsp47_y>MYq?$+9-W+DK>o7!vZ z0NNax40g{HYw3GSfoV&33p^4X_Ob?#oB%%Sjk17uS$E4OUq^WZ-i)W6gOhAbwVSHC z>*{=+oeka1xy^7dj5=u64o=AwSF)KJ_Y?M=gIzYxRZR!`${R{*J2v||yYxC}%^Q&= z*3q2R`>TlW8P*Syajew7?C7rRBDW9WF%w~sU=5@yDT^zHipfGxNpV&6pdI9V6q5@V zw)Ygb*86$}9Yg#(gz~!eP9h4#or8`h^8Z2HpEz-ha18$iUjWHJ#-BfX^f*BjKFDaN|kx^;(VS zJ5(KO=)YJUO0z09!BR2P`H|6MrcAwJ8~P4WH*UlZZZF)prP;;&{TtoNQmZx+_nfiQ z!3}4GZH;LsWK;hOX<8XgvR74WnZ}09|3kR~4*p%r{RUFMhlGjX-{%8ynHT_D&rCmz zhyi(MJaAN#0j52Z#=;MCV~4MXd>F$X2o&X2WzRChsVi@QS!E^-Jv>0(rFn&OXU(2V zasL{yDKlxGP6OqR-UzMWmoB$+1vG&f^|I#LgVi$>e4uAEy5@q@uuR%D!vI?l-a*3( zN6TQlY1jgQ%9%7Y@c`RFaD-{RU)LFqJfLis4L3OQfQAFee#uL^g#ySPK(`=w)_2kM z9hv_JbK^Mi0O5B2N4}nW5D4nezjtsD!KT0|0~|mTU)p4HQIF)Q@4)U}?_5?L=3Bna z2JeJ~`nGOZDjMH2t^nKRX)F&;FdCp!Xao?PxuxpQgt?w1uIbqx4mE{s3}ivRKIUWc4(J{#KUI zJ*xji?@>>XSD#5(9KwPt7XR+7J}uDKhB0_}9~b2GI<8dfXec4X-nskgbqpmuolTot z!IqgkktTCR^V-!YU+YOS|4-njau%yS5aOvCc%Vh#tMu~IH7xHtfbBQ0MsxgDfUfuK) zP&QfZ%_}dfu7pAcS$J}X-Q<~uNPSg{z!9|7kHPgEG#Uj^cKba zMw+Z&u3B4FT>vZ2+>(+(Es8jqFRbnC!aWSxP%fZyyrsUDd1MEvEz-Q8!`s>>j(3TZ z1%e`1P+3`C>CLSu9(MEyak?oB#%^Uv!LXy~8_QOf4m*+XGk!}H)rXycKdvY)&+-;m z?yv4*JJQ!{x!LC21BggrIoz8|a$8d?G4dA>w5y~)7Ln(ncvc=&)%}QawwBqN zx-N7NRq>M0J($^=>Lar4;#pN{tyhuf!v;*N;oru3yz+$3KY#ZAgV z(cIJ*#Z9jFqqr$)zi4i{mAoi=KUI{t65#tTVMY6=TN&VKnk|tYd@-&*fo+h6r^Zzh#{RjX4!jI&=fc5oy|a~9sJa&kW^EeS(vE9wYX>D7 zllc$%aGSBPrUw&Yul)u;&}|7@dl& z6A~Jl+iESRFL*_-SyFJYUNbm&(Xha9H4u9jE@0FQStld_jyNq%!F;V=Wd5JS9m;V* zu>E_IdkO4-zui^<=mK8`9>5>qpW*+`e*o(QPDm8? z7A6BycrIuIuLHjy-NFvxG~pud1Ymita20%0z5x#(i^WYK6S$Jd2guW>EH_4mK#8GAGDvl=LbwdRCuuFMJUyh<9!{sV}Ik@>Z97$p+O` zv-?|)A1kW<$U&qMl0B`gL>n){uDq;j@MyBh$8w0PaI>pVWlh*it~bg29|s0|u(R8j zZ-B&q=+A#Za5y<>#V@ztAxI$B#JGm>rKC;iaB8&3rnAAbs%Iv_Q)_72jJFe^q_^k* ztGX=BO8d(CtAmL|Z&Ym^oFi*KaqWtkvCjpSj27CNk^>)<; zhZ&`-oO=Gh zp5yN4NAZX8Z-AcPIpDct1-D+j$?_>^icellA4Repi^OjrzDh@-)&LxSr~6f>p&<6I=e;m5R`f}^^XQdJ>N^b{aQVU9ulk9SdG0^ zT_x$_m@6I;?E0x#{U3)zyZ$Oxug#G>gbwzRCx-G6+P^2p_Ov%NcQ$6{%rk4OjF?b1 zBzby^StrMg{=B;nZBuJqb9cS3rnalCrKxU4*Ap!YV)q z*aQ;6R-sEc7<>UA3mQacf;Zqxgq_0GfEIAOa4%>RJqZ%R7XdZkZQ%pqQ{ii2m+&j- z77Yapqmklh&@jpX6oENlZL}0LjY`ByKoi&?*2B4EySP<66i@|@7f%JvqYD6m@Nz&G zxEZ_z-!DE2a>nNYW#A3*9q<(Vx%jR4J!~9($mKBHLAPfg%I0VCZ3==RMis4=u4#O}J!{Hc8 z7|Iwb7`iZYW0-{D2nm8Uh7&QI zgyCciGce4=a0-S~F`S0sbPQ);I1|Gx46`wuh2d-r=U_M&!+99a$1n%O1sE>Ga1n<4 zV7M5=eKA~u;Zh89F97!vio}hhYtd>oMGbp%=rA7}k>ae;ASfAId$!yZH6t&;LV9 z0q4#hFZn~V0+=k5o9t1F#jb(MPl z-%9lVTlt6hB(8N&F8TfAg2_ZDdIT}*i%oAkjCzZq6&-`-c4lxSIq=3>#(3ZzrkXk7 zkGz}PS~q)4XWP3w^3Dv7Ahw4ii0vV)#$&WS3{&6PjO~SCh=SIK#96iFpjkJ6)K;AS z#$b{mN?&e>(y1kV?2G7nMs=woVC`Jk-C9SCey4#q9U`o4@d08n@yd=Cc>3kgDtiij z6WvgXwcgfoLAQS5ADj0t*2c)oXd(hql1(1`8Owbu7zo~_)soErSd<(}ql;V$Iw;ZEdV;{PQK1?0~XVY6_UaISEJ@PhD#m?+MIHF-U(!~^2J zu-^V6wl9aKTlOGI|e|MPtZ-|<|(GRPOtBZ=uh;Dw|fkfq=T-oZY>uT#Dwxwws33x(# z$JX5X`n&TU`fBU9qZ28im7r6HZctU}iRO8ATfVQkcDt{>q^Yw@JT^^S z9J&Wkc+~620kz&mwjNMqUZbz>AX7QQVc{+u ziO1lfUlg`=ARsp>Jh!zTn<3sEsv`2N0Owl(OQ2U#=#F^RkLURz?xYEw1PTEdRQozw znpzPeKy1Knhnv8WR(@?)ErDZDd+>Qg$q&W8 zQ2)UdD2~)HgcNWlzGNL+iRlADh9A6?%>RSA(H!{yxI!4hujTFoBJ}4^3#RF_HGHgz zmDK?CzQRl^^KH{0&VEKA=E={<)jnSSl;CLciN(1uCUvhc^_$7~$l{?+6bfHcf~oo< z0zUslYt956(62czOzq~`dXK#H#M&Va#@vVJf#IR5`~jDb@A=5oG=UurP%` zl{-Rv`+t{s$6mp4#MKgZo*#AuPPPf)CnQ)(5TsTB2dvJ&VDl7i{1diC47I!wK0FzOYRef7BD82!5dpH$7hS~m}O zVhWhUsGME^19e5erj06j|0i-CocOW$cfjVo9pve4Vl_zIGsNM-=fdAWhxasLi?Bvm zD5Ued-~`}d{tEs~{zyOyU&|Nrv-osAf%`Z20rxlV0q#mLB<$GTcOyLj3WrN@eOd{6 zo8^@SUfM$MVWsy7E13L4Nxg?N;MpHkdJnUru|FX99%=!6zkhh|Ary-HeNyki8WKIu z=gPhA-tBfg`FrHv9t)oQ-AeB^D|q}}a_?4h8+m6!o(k@C_jYUi^iEgq7~b2ZRfIf4 z%I#8br&bYs$(7q&y&ZAf#1NRg`n^$ZP3hgDfyL7rhRQ98z3pa<{+q}5w#9MFg>LkG zPJXX>;vuM+A@DHerU|{Raa_o)4I-^EZ@V$2w}q6eDt(x}dMP)g_BMz2ZE*d_-h-H) z0#rd~#ZE|mu22@XNs+DUd_cq3H<=Dk}B?Y;arVnl@I!~x9FZBXUoN{$a z?`Ey9=yO@+sOp6*v=C6$N4iAci!ETj2EmIPpyJ zVz3Ij1th{7_036~M@I5rM)G4L`H7MI z)JXomrF~`;{JD|*!bpB)B)>M2-x|q(8_8Wp@&_aNqmlgCNd96Ze>IZ7=}8x7BzYql zXCwz1$-zc)h>?spk_kp~sFB>uNDecSiAHj`k(7+2Y$O#U={AxhjO0ionQSEYHj=4E zaMBWV(^`7|C%)a=ek8U?e9R$w@|XvXRU%l9@(wnvtAgB(scUwvn7=Bxf7R zIYx4>k(^K7{{#;7|JQSm!ux+Z|2^pKJS)!5sDR#X~_hoyg6dDiDeajvx zWdW^Y>VC!fQdZ^6%_^v(#^uY+Wb`Gc9x~k`Bs-_jTu##PW>Su7*Ag<;h~+8M%b7LD zTi;nxoJSQlvyl`=!Tvc?*z8%QYp8;9$^Ji%JBt&C3HkgHkoeF4!6ES^MU(3L>kM0I z+;~O(xgb{DVMIC`7*Z2t4syPP1h7#cn@fWDR90PBnOEXj3@Vk`D@#24>=P3FsYj0p zC{($!qT0I(3{lG~!Eg@sZo$|;!*b6-*PkGBBpq?b=8)?9vKbGpOI_?Pw2< zCsvxOFnWn&R+?d+LY5D5yQw8KNJa6DMf7ZEtF>8u|5tG0JYh87$gPOs_1`fnI7Q*g zL*3^~ODqqmyGNAQIPqAlWIWsv3k5$gJyo?^ef0!Zts4OBH^UjSuLG1n=)Mkf7yUv< zEJ^EUe^xM4e@C3LUI_D8X-?wJmH@OIEFmFb4&4O$x>n~MBZC=4(;wf59Yaj6?d{%5 zofyX7N!Op&m(R#(ZR_xLb$7I8X40L)m~pk9@fQXstDkMBTu+A?%(7^#0nFBTno)oW zf5!Gv*IJ?J{}1IhaoofFME)qS|6K@L`k!-~#42&8`CHH)pPaWo9uUFPXroxmDGTEU zKrl|Djesq`i40|Bvx;o5Gp}GqEMpW2lJ%&c$0+P{8v)`ujb8fos|lJNE!#}j57w?} z^a6H3+-+96fmo{@(Mb2D)uh_g=B{7W4rinLF<^DWA)|Rc-#@->4PD)>zM9fy3+Bz9 zlVyHZl76cvyeSjie(|i4|a>yM?MhoL7{2Rj|q3J(rq=u7cN;qKzlrrRJkbBIezZU~5B=Uy?oHoU;iWOpE8SIj>=YhMQeDKk% zKh7OpxT2cTD1&84{GGAd){!+01djjPCpTT$HKEW@zh4I27p^CcZ7SQ-H=&8I>6>iF>P9kwi`!=81fJ?koa)>HPZ4{TX3&YtD5 zXDzX3t+i+M*t2f3XWeVhdd-&Q-pigf*PgZ7p5-Oz+2p|~EyyokS?XS@_deyNK5imA zU%EpBUoI^!D=sA{U1$bSReV5!yBxm3F62$H+<-`Fw^bm`jO8}m4Bs~VA=9%l{4En9 z@n*t|u_i4vUpc@`Y&R2^n~5jQ#Fr*QPBat6X2J}sChss`IoC`)W+q-T6Tg}WWvZDl z!^A1;%~y^!6Fbes!)D@jGqKA=xP}q=e>`^~2b%uzd^`UpSnu8dZ}FM%-ohu2A;1Ud zJud-q2VDzqF3djJ^vZo4 z!x+98cJAR;?BC$&54B=vY@K)WDB$FZE7eFCJIS3yE>11rV<{@C^?Y_KDU(96aV2zgJBV>Xjm^E5{Ddn1yNnZE!Z^N@ECl|5 zfByY~Gh_hL&;-oR;An&qx$MUfCfdL-h?toc6=qr0eQm$d#4i4+!RZ757+X`GmN-2m zCROK26`nWh;Ux>ZFbyeSG{js6hykZta7@gX_3AbUrx6qrRVohN`HbGTsP8#Z>CKEv z7nE5F%JB45ZENbPYpnEb=?0^hdQWCTQ-eKs>|#%QePM1%RRP>!MZ>c))!Tbua4NA; zRNL!_jbfMq`Xg8=lKFoaxc-HI-|!20KmVj40d~j5!h7OWL;o*EWuq8>PLORtx$n+D z6q~!8smHupNi=00cG-0uvV2b^K^pfhY9a)!;r&ainzo&Qhaz!GydKaV@* zKRWySCkAH`6o35mZXP&_f0*y>I>y|BXZ2Q4)r1g;KYbo##_-=B%vQMNP*H*c1t(+6 z6Vt{=)VOzIZmbM{7-Yf=fTPU{*u96*{AZjGMZ8~|6-@>B4-IB1TroC&sy`tuu~>t^ z3TsHm|OCFqP# z&-RZ(((c_dBz@+V0xRey z7@4b1>cM&5?z&Vv-O}XJGa55I`j5R`o+<4;I_b$AJnr!L^yQ3Egl}6n*sp`eMn`vh zS6*9dS4UfOv#(=!#cRdZkX=()f5%#bT@8D>c&004z4&c)Rl@eq0cbGR=#`1dP63@m^$_<4LjUkRSTTlqr)3GjUWaySEcn13FS|32k^1jN6Q z!UWL#UkV;SYJ>xY9zgax8+?P_DBKS^|E~!j3Eu;PpG))ra^F6160ioe{ks6E?{x7J zKtiW)*u@f4LnQ9~(eFNzvQQPi{R8cto4 zC`zU%g`!*(<))}4iW)&tBPlAGqEaYo6h-a*hkF0p%ys+U`>(Cjl>fc|o14{l{D1Gi z))NlB|78C^h&z=NJwgrG_+>%zKltY#6P!;l6A}rSUCfvX473=x2Co}WNGr_+0W z{hIbJ`sLs}f;NFQG@)ShOOK2!KN*!{p$!qf35<%7e7#Od!MOxA1nXpiLFzwh2%}O= zU@o=P`223_!=S>II-qI>3no`JkHtAB}#D<`IS2xuiR1G^?(o#>1 zo~g+DKbV`viS@$WLJGfudmM;}fA9t@X1xIfcA#I~zHj1SkNz!24&sAPXsg{huLZ0rLM+ zzyhcMq@ay}`ri(6fg^?Eh0_7?KOkHQ(t$gL2SHcxdEr&S`u|Ay5^w=HF&=RKQ$SLX z0a}AOfbm}h=m2ZPjbbC<`}c@P0=oa{pobIyjDQ;f+5bV19Xv0-D!vV<{$Gl_!sV+U zuOXr!DCbCj!}wh3MU2mrUc&f%>1B-nB)x+11=6b+Unu<@FBl|IJ!I_VRPua`c>_y*}SjBk`a$M`1c3yg1;zQp(z=_`zHmA=OKHt8FT zZDLEeFr{x5UpOJ@R{1t&i1G9CaExD&C5-qSt$6)+VIUVD7WDmyg%40EpPacQy`|@~< zKaeM2{GmJ%*zc`AATBcA`?BRX-m?8s@QBTSUX zoMH30Gi;u4hRu`Cu=%qyY@Tw4&C|}XdBzzwe{qJ*v(B)2&KWk(6Z@ZGoDahI^$=ap z{TsCZPvKt`CJG&Z1L6YD-Bv%K>IB=raLAAOasC7$>iq%p)WUTeSVa8h1fxfwxnlo% zkklyGZdT-a0a!`SuzCwvjdF$+7<9#tEsFCi{p)h3Lp0Y9z-+2R%-lnO*{l_D{^Wkv zER0V;cM|Yh;2^)Tz;Bs@{AK{Z75#$`!$&RDUW-RU_ab0dJ zy8o}jY*@8_3TyG5Vh}EZc~+_)_AM&@7TE)V9!wPPF}UWPOq*TlRytAq+AvzQn_gW7 zUR*&$Xs*)0ShHT|XYD4A17yx}+TfPK;$bq~odaYa?tMrFn+yP>cA$5{Jb`nZ>V6iM zQ?=dJbzuF&KyW(9Dc%g+rjwoIZ9!|g(m~!9eHr(|s{H>-POK3g6VmuD!0`P;{`rf7 z%VcheD&uZROI#9CnrA`?NBw~bBk^mZC9w(QtH&&em;tDN7VUE8-I{C})Eskl$yJR0 zg%|>%1va+;-L0KXn_EFmo*ZzPHQ>zd6-+vHdPOG$mlEGXc(4GVB{BLIV$_v|Uv0?P z(63NV6mEsw!6j;k#_k<}QOPm%p-n}foAZNyUK!n9_xpTBaGuqK#Kj=|Ica^@I}F*wT^gR{qv!2H{Tc?9MtQGl<9-$94Qj0SQ$ zSS_?0WrBjW_gB-Q&c~Vk!9bN)mn){wX{s+zQ@$j{!-* zMxh++{xbxZ!1JH*f9D_LZ{{!Lj{}t8{Q)z0Z}1oP8uuVb56KT@{p!_L>$0O6A?r0Z#-h_IFYO=^BbV4UeV#b5vkV90#teOv?hTif^X`(zKt^ z_;<=bQUas3OY}pnyrl$Etxg5rObYDHaCz{C92jNsHSoF;NU?fBcufi8MuebwA+HLyMTX|UyxGjzlUQz-sQmSd)pu9LdplI9>hW>9-K-Q|E zBGvy@4oHNPF%>B3q`q9$G&q{&4wBpnU ztHVgY{@yfY%D9 zs-%7elt+e&S8)@#%K_bkdy)Hu7x+IX{0nf}_Z#T^P6uRwb?_xP z0nYR80I%Ke1LB7paDsEiHQeRm4d6B8WbtwFU2!`n*V}yo`|kVL*)OoOe`IDS4P|E!{7Et%pQIDmyzgXZzs}BP*Lwu} zIT<4f9Vvv8W5ryERhU{} zM^_qf87yg5t=?m}>Lcrg0rO`Fv<`8QJwv8-j>GINVyy?AWp9;iJ?9{M2JHCPAZDFT zqc#p`Xm#5%E8e&Z(9@^WI3TeVz{D6EPu~AT;`Hwb!2eI+%lNb4>@Q8&1l~YD6|=#& zFP#6251AJ9da{4#a42cZtID2be#w=;{$ZH>&54@4=me9OoM7^@6HH!lg2}5+F!{R^ zOkQ(>$?HxqdBX`NZ#u!`Emi(^11C-r7V#%>H|VeTA2Z=!6Wou0(ddFg1B}M9QHy#N z66Oq`lp(0GLHZC$T5V?wxQuTG@6gRYkQ3&X<>w`UoN#_&7&)Phi6)BiPYV_kyK+t1 zuEFTjyUbYI#X<$5O90v6EJLnM7A^F3y}p}+MFc2Em76U$oEK0V%~f%3^u({o{k>1i%9y;e!Sa;K7ibvb-gz;2lJkZFvdd0to2oPB6oFR0hio zX*L`;Xs?>uQF-9Kw-}uI#yXPwhaE|+1QAi&rF&?yqh+lzv*Sld#>XbUpV$Rz!59f0b}+=^T{F0qXQ{zk9y)L;og zLc_;pwF5|KjOT`BRbyUAL)|kx)3dEli}@D4x)s3{_`$=k06aD`wXeXM;%eOkNvu6> zb!LIDIfWlho*H;=EYEyNJ{(Xjg(qfexQWMHORY`n{{L`}JDhu+p93<#_k?}Gp8r#^ zP&8u!0@!=H4)kfjK^rN8(G~7tgPmBqc_#zE3jGjNNz&;(e*Yd;vjoAqx!)(c%GGE{ z>orwv-5qs41Bj9^XYJ}YQJoRC)sY!9w)1``_%inKy-xA9Y~b&7h_7|${&y$%GPdkL z0JMBMy=Cv;(-wBGo@jl-`}@(=IWsrunV?ITPQ&gGu;Mnz{e1HN$8+y++&dukzd{%y zGz-s)^Ti9mSLY>UC1CfM&@Vf`s1Q~sfr698k)HN}$UL-N(HA6*bk<$uY7wZ$(ZP zB~D780B-Xp`zOYx`)CHt4P$gHpAAlDCYz@;KugbEaBlF%4^1sRc z^w`=$_O_tqI^UaHy&$`=a!yuOR*qQ!CqFk-7|dmHr*YiBxLy1Zek6DSn#1P-{!cCF z0v`b$050aQ%4F)jIaT{1$Pjt3#;b(ZU~5yQoFHJezNk0_wY$ut?S zlYlZ`G6Kpq{Wj@CntYBTT?f+SsWf>VP5zZ8f2BzG7@C|(lPhVmg(gp<$?IwIX_|b4 zB9jKuX1J?|l~dZTjFXR^jfZe!-2#LV5v%zd1h`zk9}8OqF^!pvRH z%x!1pp1{n#j+y%mGxrl#t}Bt5JBFD%pP9RknR^T~H{4sqdbhq{ac~bO`~Sh<<_FFt z|0Ia~7Vat9=MPx}sDJ*^!IeatF~I?gaO*+9Qe9;=27B=F!D^xeiuH?CtJYdU2X$(P z2dfBtLIT-DngB%lwO(MJrVJQ7!4<3|as#YUZ15r0Zi@vxWK3{>{c(#?dDdDjXH;jw zcWZ^N)(OHcO|8?e!W8wAAdD=!har5imjd|b0CTSXSp`O9>rbg1(fj`lj(ZF2{_h0; zK5blv@C3I*94Btm-h9r_#jhQbnz}7-m}IY0~Jr5>CaA_ zsMWi^W2?8j6VOS$fF0S^;q^ssfwt0IHfvT^wwJ6u>pGjr|K9qJrmemXy=^*Qs(EwM zA6Y#lHQC&{WwqV)k;{yt*XE4fdccs>G&A44^3n>B^~KCOYwTw0faKS9)jBdDv&S9< z-7&ez7!F@qTUS%V_T0Lzrnc6wbq@(%~i zcbs7It`kh&bArkHPB8hv2__#p!Q>++nEcBLCLcS&3qOekFK-xdDc zZN*l#0o#bVf@@ie?*Sl}Sy#ES;FgUJt|7Q(xFv`khtXQI*ijgV2UoK;QT<0@v{r4v z7>sj*tMnd=9qG+lt=!NKz;T?nq5LXtD%Zz>_0DtLTij>d&-`A10-gzwU^j7n{CYSQ zXy$hS3fT344*DAZr7*ZZQa>X3Q-u+fXlX=$M0fNrBZ>qam5EX1CeiXki*(V}9{6zn zPo7q!{C_A?!;xwXvPLzubeFmoSd=03;F{hF-*6Sz{2yPY2k_IzJ+rNV0A zA+P{EZvc}&9KV2{IP;N(P1!B#SvJz4o(nuq&Zm!G240Zn_k!taBk4RihM7+v8pmFg z)x}2A6^=G2qEpbf;HVGuCmkB3eByp^`{vf#X7jO9(sxay5Ljjzs4+Gteo;RO5s&-ZNXq3&YHz}4v!n8)YR@ML8%!vmGHv_h( zhub`W_kQ<3@y`uzl)2fkPlt!1HZ5^>Xjh=&WQ5FT`_*x_GgIzL)+)(TL`E19spU3J zKI)$n^b)09TnYP}(G;{U?pCqHyTsyD*C|u=1jER7sXO(0uL^D;Dvnrhze5K5){3)~ z0%-$OsIt?D)&2>=_4+wathm3{7CDLfJ1$s5z*BGp8~{(TR@E8k6m|Zupr*5>wwYelYRk4 zXBzdjGi<(bhRwImu=&mzHs3qL=HJe+*`==k8#%F3IDvnNPvjbRznCA$9saRFpDyPH zr>QX*r&t$4EXyF&j}9&MLDitM1uXMAw>1%C8rmudZ`2pfS;2Z4EZT6%2D=mo>^rQL zt+TB4S=Jq)b$)`)Wj)J)!=E3llexv}&I+_p7Ke6LXd-99JTfoSBCaEtr!U-xmbw#r z4^}aueurjQ)KFMA>wRAk+(fi#uC9F{jsKRApg%Z1^5D?VjlEiWL#704 z^&KOu`!(A#+K4i?pSPpB? zmqUib*7rMVvti@$s%y4CUN#w{HeT=@Z6rRmP>=#@ao|%6jr=rlwb-63?g_>#uCX>= zYwLTh-Jw@S`67a!=Jv2UO zr|XQA>$Xsnsk1;ce|?}VpI`Gm+E9`8{~y!;uWPi~8>lOdqQ+2EIz@RXYAi*Kqo_S! z!g#8@2^2Mvq9#$)WQxk5s7#8QLQzvGY8pjNr>GeeHIt&UC@PzxW>M5^ikd@Fb17;b zMa`$E9Ew^%Q41+*5k>7oQHv>RUy52nQA;T*m!g(YR31g;Q&a&(6;jl4iYlV0Vv5?2 zqE=8;2}PAsR2fB;Q&a^-?N3pa6jep${|wH{iSK}StsB7Z?^v;0^ok{5!82ZzgkOY@ zg_pr|*A2o&!eK(4Pz;{FT>Lk1Qt%M?1wWJT0862zU^A2e$N~T4Uf^!$F6NHnwg5x* zPYRT2c#H`D=#r&Csg{E}E-ooKP@K+Sg5WwaqReDX>IC2_;7NUbPl{N?>2D%Jjm|#f=Uu*1#m~O61CKseygMqhJ0y zGO$P=5;HXGFUf(0+9*=ZQhrVjEFf3Z%J(#NX?0hA8Xd^dYGPkcD?iGC`4*(pABG3! zY51Z<*GJjq4$QTqmHt}^%prXUYPy=IOyzqyFx!G)`kfS*r462nk@~F?$R$11YvS8`y61=;jVcVN0!J>8Y8^2PALG_4iH>_hon2}~u$ znzYfB&s>2iX5`%J+~N}D(~*Hpz5C5*rk^ASGT7b!acW?4`0@Ogy8l0$6O)Al0o8W~ zcXsH_{SQW% ztJ-SG?+&&&1vJm7+F&rOV*g1=d+h2K&Db0)0ywWe*e zPc{YQ4!x3@!GmyRObnkK0sF9S23Y9fX8Tgu6Gsj8;R_x}pgz<6F73|V6=E{v@y#AZ3FqXed80#TqtS-$x z4b5$}UB*I~EJN|Kww3|ETAk|ZJT);fMg#yx^@?6Sv`_&@5hW_}~niA~L{c3>< zTa13S7ylV~)Gter+un6+nGsCq=thHNi8*&_JqkzcHwfyP9HewWn_=YRe5+{c?vbrcB*81f$ zdQWE#J!l(U{i4=?Wd6_RlQ=$!Pv@tAFQ29S3Vs!!|1|U4!0zW1u>1*v?ay6c{qr2y z|GdwC$^Qg4Knhp^O$PLz#en})1qeV*fB|#_pa7i%I6&8cCE-JW1@sD_0euE|Kq4UX zi~>xcnIKav09>GTfDE(+uz`*PbfAj?ALtf92>LTv3jG6Yg}!6uB@07AJb_JhEijS` zjpQODx!6eVYb2K$$$TSOU?dBThV`<7N@6kKd1_cM|!jAV(CEH#o9MzYdKRvF1^ zBe}{*t~QcujO1D)d4Q2zXC!Nk(6z z?dq2wUHhQ3R27-mK3w!HmZ!;?aQbg z;TxJX(a$GcH*!_4*@ECUeOfxgn3nnvVHZYKvpiHiQXR9PRWHDk;i+!YMDw0ZPgYMu z=x=2SU2pv-dgUhtx9W?$7}ft7JzHp-@yRmNSQL3oXA0)Y-;}M_bZoF&Uz&ixlRThC zt7Dz|%k+wpUe;HnFyqgj*P#N);Dz<1zn;-li<;2iO*G*NZC2PQRe zx>gBTjcY+kqPQGjwbv?RBVBc!8u99fDI(MB-tb?-T#%-OyRazSg?jqJ7;y=n9aa|P zl~?9l8sqvd;$^8f;$>xA#LKSpJz`#{?9y`8Qz)E1diP(MTT)zDTu|vM-Q5ib?(PPE zr0y0^k91WEM!NdnHq5$@N$Gfc{Phd+m~a;g!(4DpH^#TBy1dfj>s97-i(Jz|sx+9H zJBpc`&&>5QbB|-?$`giihjHn|W#>ll|8)oW0Q`y{&QIlwcpt3(d-;0-_w#!|1mVv0By-hATo?<(~A_pTTa?-ZXGKN7!67PIlG#e-;X1m|NS@oAPu zKCjfFhpJDN&>rEJyYXoj>6ceTy7*wEi|EQZy7)+> ziyua~=!%PUF;Y8S`$qcZ`bZa#j&$*|NEh#nbTLvp-BN^Kx@SbXxGd7ejgc;Hk909o zJKeWL`sFK;E`B*wsNp69@CW?+mY4bQd<$sx+`+#g@WLd%NLV2pBpeJrKhFn$V7Cj8 z2`>uo3SW!7D2wUh3~@2&39S2r_elbnnPLnUv!xYfE zMnS7T+X1y}#@4W&vFSFeRI6@T$Zo73e^IDt`)h)S8h*B*ahh2YwQP!YKgnIkXdYEU zByE&%Ew(g|;-_sv{rdzDAy!w30vLr=Ve>}Vlm%mM-sSBbZC!0-pA7A2YpVBT&fI{p zttjof$x_UAk5+fW!M`AQFya6cY>TyySuQc2K<-4w7}+%^;X$;g&O`+ z*af8O@4J7=P67Qr>=(}vzK#%ox;x3E)VK$c)_RDO(N&B+lr+LXvUI7di zbzLyXIB7Rj(%sbIgGB({EDL3sMeY3bmd*<24|RYDDT5pNV)K{McB;Yi_F;bh@VkRx0I zGQ_Ke8$p_Iukf(&r0^`r6kdb#g%5;Jg|CHO!mnbSI27ayBgN6+gCGN>40AwlU@7<` zECGq*8gYYI4-$uV@JxQFxC7)4r;2BT)lvY?AFdT|1{vi2a0>AhNFrYr-+;4-kHpW# zZ^a*XcYTnUD7fk{tjExYVFQMnF>J)J3Bv<1JP5;P3|la4#jp*-b_};**n#1m=HH2> zbYa+y;Z_W{Vc3J=b_@^3@DL0S#qcl;56AEb43EUnkKqmskHYY143EL^SPYND@OTVQ z!0<#2Pr~qI3{S!ER18nU@N^8%!0=2A&%*F*49~&vTnx{{@O%vagy97kUWnmE7+#Fw zB^dT%7{KsS4Erz)Vz?8-%P_ng!z(bn62q%7yc)x6FuWGS>oB|?!y7QX5yP7>ycxq= zFuWDR+c3Nx!#gm%6T`bOyc@%NFuWJT`!Kv8!v`>Y5W|Nsd>F$=Fnkol$1r>x!zVC& z62m`Z_!NduWB3e)f5Grs44=dBc?@4r*Z;?J-0|FB0spIkzmfkD-r!S(SK;l$^}mk( z&scOYvLb+a;b}2@MdSJda&kLXrzFQXjc|<9NXIxOJH{!+F;1f#d9`b8!ql@Mq3%> z^iN!AX)A-D-q!tgil~4D+u|j#Ap)!))OjHGbT^gxwt=lWkz5km zRA>fV3@QH5cba6FrrWiqz`g4Ge=@QEox^YBPX66rdsBh_ik(9h@ZhKJ)@Q38I>=5m zWVjz|*REkaI3d=Sjh{-+hX}Un<*m)zJ!PfEM4KAChIO}hdFFcn8?tSiuYQJY2Onan zbuqLl0o$Z~1&G%XJQP!b2V!j#cO0Wpp%XZ82#1dgvvCnKEpJ1JpWY_#&UgjDob}Td zC(xW3U$w1_rdeQ``}aX3ZMHPc!cT9aZ|4vKpR6_!+%#$^UNrtgtfN=WXdzvKb(ow+ zQ;uf+AKC#h79EVNfvx}3|A3r4j@4gUK)K0Brr3n|_w7CFGru zuv<&Nnw`U$N8%KKP^@2P?r6s6nJS_G(~oTeqWJ04PtMLnf|Y^O&lZz9g9-B`*49-q z8fQk!u+Kcxv#ltY=KJ-!Z`e5ur%r9fqfMPOQd6we=lqQN(?twmbS$d_nxEdnqMdsw zT&l5CO%1K-%E~KZZq}KMW&z&;w8b=lmSzDztu18!kLRA}xaaw7{%nxxZxsFly1nNE z{{NrI(tKllGH7O)G1jREcDK!i-)H;x+8E!gCMZUf>bJmBYN(^&oVa~O43=|wPc`X|?saug?#jN?hy5&{EfX%M_89Uts z0RVd#blze`0AN;hHe)I=EZGu>$S8ZB*J@plOAG>Wr%e(5%$+VG@WKv_)#8p>(Rq50 zY8{Fa61^tuYJK zmL}UC0EPmyUb7hWLf#1pFv@hjDEtKS{%3;IFYycUbvQY{NxTs3^0&Y#`+njAagsPp z_)2(HxDPOaP6SJUQaIrs%I^XlfM@wT`JMb3U@_Rlui*>$nS2^QjQfH65S9|RaTjrZ ziyyJ%z%~t@kXk>u7Ni8Wh5@R~85!tifgQT$rv$pfz+uiy3Uu1R8eMaxKnDfZ=$a!3 zw$R{`uGzx_?HVj289Uc3DbS|<3O6RMYK&_V-0x@Ha!G;6#FfS_xJ z5;({LN$Hxd1P-*oKDwsKfhHQJ(lu2HG+IC@T~pkF&00ltOb1tHVxYkcewvXS@Ugpn zvJ|M-nx-O#PMR2~i{n&Fhq7|r^O(1)Ag{W(yv$oxP*q(F4Vjn{*c4{KCZq;x!$M8E z#*Yqc43GBd8Yc(5q~WM)ySB;KT<;p27T6F8D%Fz`Sg%!uURAi#M+Rz`&(4^Xz&hn%$D?;0%!)><00X3( ze?gcjoF;q%NFA5LrGEcyiccNuhly7ReaQ`r7fdkwvM!bY^q}JB{*o3taA5SQuluz&9sl4P+tr+gL220#XUlm8qr z0c2q;X!w;24S)rHwr~|_@Vx+fdq0UI#QEY1(FZGso#JESKg9>dcg0VMIoL>Xrm(Uq zx3bzxC=;r3(q~kLabJFJb*^_=adnkB*#<0 z%3k1Ek|a(IJvI5&-~+X!Ah$C8XJVMCK1w7LP9)QRH0~={1@pf*uevJzLu+P!UVi#V zw#=%^^iM~Lb3+`}p9920LGh}B{PbtWiUq7I-n?>zqIjN1D2z?rLdgx7F1T2SEj#DY;@Juh3c}#3y=?$uHE$a+KmMc)6ld=AIw0Py~U0Kd(D1p2?b1P-)+Wg!K0e=`6dAV*jVSYQ>x8jv71 z3hhD<==>fpoDLel0pUu}_q`MF1)l^N!>gd{`;qV^;DT{tJm~qRh#t`L%@T7!$F~U3 z!PbZy#YWKY?GcXz?cUQt5*YxDup2?M_d)Pb@Vxk{_%>+uektw>m#;2ahKPcod?8QA z_)B>P#$U-ZG5%W4!uT6G8{==~Sr~sO&&K$Bc@D<^mgi!;OP+`E5AuABf0T1D-qZYl zk{4h(Kg$a-{zYDd@vrhe82=_OCb5f?_r;i(mtZW&OEDJZT#V!7Wf%{V^DrJP=VLrX zF2FcmF2p!NUXJllxd`LExdLOiyg$ZC zawWziI89!M@ff)V<8*mF#vXYC z#$#nK#^dCT7>}20F`giA!g!)whw&u29^=Wf5918E0pm=0GsaWoMvSM*O&Cv;55#!7 zd=SPnlaItWPxfP+FYmy(Kt2lN zLiuQnm&?bX{9ncY>*imE_xJ=r|IHOIh4~ze0%QIIar}5glx>2p@7Hdiq9Sij)?DwJ zrsk$rYANk1cCLUqSy}dsVE z(hlt}jtzm2Db>uvHqYE(#*kA%_7W1J0N``)+?yo|?!OxmX63ROl_RVZ5_aQ5By;B| zt2o`XGwRoek-e+S32n}2ZU`j|xL<_R?GI9M+RhaHFeNm^2Kuc7b)9dkt6D{)5Ho(A zk*gn0jN6&4A63N;vCACkIgF9kg{}zIokGXD<&$6eeD{Br(LVXknsmfhsj{WPLW+`Rl1HPzFL0L;*vw<0HNmiaT9KKD>k>O}1;?O>^G^}f}$9UV<=9W`Nu zX7UX&^j5?shXk?K2~}CwMOv%RNzS#F6d0zJ%GGdOY_TB&Pg*t8`| zw~!(w=O3f6dIk@Z_kSpX{6CBPj<4eH23+s$!s{TEj8KmHZ^tCw{_OE*O}j?5zA{y8KYt%d8jC=sC&`Yol z;=Be@f1>g-@IHz{*=4;0-K0GhY&Dl7YDh!K(>U;kXeC&`AxRfFQT>RjEl*pe@&g#< zs(kWA+P=B9w%PoQCjE=?YWS)FTgclL^?ML$0!(QnT|YUduD88s4b7d6**Wvf4H=QC zzW=oxSIgbcC-d7u1~5Z7Nq7ga{Vo-+<~W%7Q|T`ftOG#x5vqnO4)R$ng9SklUQM|q_jIQcOzi96j`^`PW zK5G4`zQ)}4(q0o|r6azt?=c>%e)LGVSM^&EETqzlmHzZaq_O9%99NA-f{ zz)Cw6XIy8>uuQh-|2K|%gcIFh|F;7Y|9yY{MLW|8LJq2YH5sN_v`R?S-{tUotQ9x} zv^at;#N-VVoJ}TJ)UN4!wH=s$#?CQB*B`6zgkMayP@scRd9(U{f1G2k+nGi*{ISOV z$wrUU3N;S&cqgOMbRk%6i#LI6(CF~Y^whPrHZ*O<+beUc3%o@KSj`t`R{DT6?Ho;v zOVs9pPay~J7MXH|9#-oRR(53>DqTe~VOFsV3;!Q`-vQXfk^Q~JU>h)A$p#yYZP9{h z#-!5%*>lzy(v4pGxO%X-|KQUd7W-o2pMZeM>m>#+8to1+8NPWHEXG{ zX#O7s;2*K@KQy)fqgyo1(#)bsJ5IATt5d#aoaSi8sX#MMg_?1is~M+xnsJ)18K(uB zaayPur$tEqpTMkUc$O<*iy@)OpRYAAS;s62eL@##28c%ejG8E)(FnY=yy?lwfPetd zuWgN9XPW~I3?`Y(Rklfn=}Qrk0&xKrh>)+yP0=PNf}`{W^=%GJLMV6QbOCLZQ0^i@ zS2dUsX&&Dq3xd{$x2a?xjg90ex3)4cQHQN7K!x2m5+C}AsE}A^SA!OAQQ=?UNefB`|5 zh>s6UF(jB4LIrp*&?VHtx{WeeDJ2cz%r7=Y>H;+XFJ=xf@b7na6g!^HV;8a|tOc}y zTE5mYxpZ6l~2g4#|{M-bGJ1a%Za9ZgWj5Y({* zbsRzY2STgCg`iF)sM84Qbb>mApw9eLz5nDG8Tz+#=u7zD`!9LD zC!g*A-hZiI{=@G-TK^AY>KML~+X$ZjK;W;<24HF+PXLGnys843+@KK>sEep}$|4HZ z>}ZW2vF@d<WNSk=;C!ih3)<)Qx4U%2eB-V6%vp!97v z7FEcVpBOkuwkieB6OvUaw&>HK(ruJ}4q+xjHI?;rUf5oV#6jE?n5tt|h8EbcV^}Gp zWylQ*w=&eA?q*8eW7st&C!=kHWD<>Bl7?>pWBgct9&-XyWJxrbo=eClBs{tXjoV6T z99alFpSk1)mb@-iS=9fVh5Y|s54OD>Z~`zZ+84l=7Rc8|p^hp9j6F%II-m z-A%2TmiFmm1G6;K1fy1Vu$o}LiGi82s$ZPA3Dk;dgqtu!e%5P6MY=&NPf}|cLwOSE zbq+*#a$;b*teObAlhZ=qJy|cP~c^XQbuh1 zi4p8^%nar%hWUv3jn#wn|4`P(ZUz*eJDC7;79axd0UzM|!ROD<+$ga0oews?4Pf1S zBG~m_0~SLsfV}@Vu;QHp_PZ5ex$6a+-Alk)cOTg4egXb*ks<@K^6qdW8)$TnX05HM z0nlZu9VuT}?L}aXY^^YvYSM25TXfl9uL|cfcPcG+%wg2rxzyYgT5dYEwDeWfd)?IB zzfg1cP;=j>=Kc=f)O6e}GT2qJ0~wc-c|rpv?-)wn`INjHDS0na@(x7i=~5_p3n+Ou zN*<+tI!gU?_fvlR1|{#?$UJ=-C67`+{YuJxTPb;GQ}V8-b_ z9h(3rd%uBQP$A%gox`2YyoC@xRI7nMagtwyK0H0P#?CE9!0a#T=xB2`fd+uvg|f=s z?k&UafadAISlATtZc1tXWAuzw_26K7joUG0w%TR zLOrNqa|a#7S94xZW0M2SZ%sv&_Tt*oQj^6VLZ`5o7MUwdB?;d{Z7xJ?@T~~#!D2Vn z*O)DE?ObjtqepldT}@SPNM~pAaCbn;@j6?!gM7s6-~sk^#3Kk@q6>Erv)^VlveC0;*uzjM3mQ({s2j|#P6sGMxSHX>_Y-CmZb*%r1OB(6?|fHhqsMCp$T^Q4 z84cJS1`sJHmZkD)V6U{#VYFR{ZpR`-Q;*YY^foYWouyrEZNpJB?n5vexbLhEug%%+sP00w_Bw{aAWmM5D%67?TA9b))dBYuJH4Hp zpFfgGN44lFZgV$nu{w`%BqoF8`w{d&dnz5BosF9uQdy?<4)6A1yBUW4M#oR(dTJc5 zW=AtZvg+hZKwV~19&hEuL12VBdL2f0mkWl?Caa^pv7^=Pai9u0n})p(jd9_|;E|$? zDyY`5e?Vh0kYn{8`DgF|D!bq}1=IOjRkm1&#nIH|>2!8GDnZQwdIyy-{4|Ccc^HED zkRG71%j1C&iw8HxlHr5E@Bpp^%IvIbgr0V7vbn9$D(?9a?3aN53$MT(>{#|#ZY_5| z`#nDcP&Y1y>P7o=C1ornb&@G64ElhNN&I3`6*3LyfVaLpIbG+S*Y;$es!dbaB%LUr=8iX@TdN2v&+M2$PpEkt7vi z``xmbHjxF*sF;XOv_l`7t4r*a)_xZgqXRcPQ6Ui>7;ho6sf_ZdeDJ6WNfXb(_F6w| zIEq1zEekA>5843IUW0=+>VBwy2W>}6 z$82KUufw)EfyG)M?oeCc?$6;){~Yk<2Nr2-T0pIE2c^P;H7zI#EEGE#&N4OfIZdr| zHATx%RH?5)%AV?FnWSbIu1ZMUB+1jUN?~4LftKLT)CTke+Q0 z&-`lsv+Z&@S< zsdec6KZrS;0o2|{_^UxnzXNpk3;2=TKLOeIB|!MSg!6Gtfcd+Go5YP`e_=mjp93V& zYuSt0(*PsX0V{?A*1&RLKkzbhBXc&aBMuioA%Z^}0hKFSVtV^T|AYj_h-KT7Dw~8W z570h#o3U8GKHHxa3-f*5WdHaCrVR4{jV##e*MMlO%xtxpEU+)Hwp)u2nI!K0;aUES=%Dp$Qv74pi2C)J{xMPD2&z`)q+1Q470sR<}Cm4 z=p9_1=^rL_C}|(9FU$5P$U_07B6j4I1il!63twGnHtI_={5-wGO(}j({nSbXKN~g{ zjj4W^_i}Of;!lOXc+$>e6BrYxda)c>imQ6B^hFsvk3nTd2rl(2Cht5N4NTR~Bi~E? z^6Z^Q$!${GH-!JeFo3ZEPPru!6<}lLlJXW@V83NKeaWa+ zJ5T`#`2>Fm(ddt}09lp;tT4~~)-eYIszNR)QXE(*5<~_af8$iZ-^?XZQwGOA0)gY! zxGNqLgX2x|VGq3bqoHv82FM|~BnrpCdL$MO$Jj`LCT1>A<^3L=F$J2&%}4^68!?*dMJ%hc5 zeVTorONRNrm|G9_eP?pJxqa*y?k(;Bpmnd{oA@L6v-w`I<$H?%0DU3;>;6XZSzJe# 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 z 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�ia!Z#I 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 literal 0 HcmV?d00001 diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/refactoring.db b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/.cdk/refactoring.db new file mode 100644 index 0000000000000000000000000000000000000000..bda411557251b00fd97c97fa5a8a1a16c615747b GIT binary patch literal 1321984 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

)wCUyToeZ#l%` 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
-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 }CcnHVNp=+sk7ot62;6=nTK+Sv|#wlNEX6hL;p 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 N!XCn7gvSX_{1=T|F_{1W literal 0 HcmV?d00001 diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/Makefile b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/Makefile new file mode 100644 index 000000000..01560dbca --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/Makefile @@ -0,0 +1,9 @@ +.PHONY: clean All + +All: + @echo "----------Building project:[ RTOSDemo - BuildSet ]----------" + @ + @cd "RTOSDemo" && make -f "RTOSDemo.mk" MakeIntermediateDirs && make -f "RTOSDemo.mk" -j 8 +clean: + @echo "----------Cleaning project:[ RTOSDemo - BuildSet ]----------" + @cd "RTOSDemo" && make -f "RTOSDemo.mk" clean diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/RTOSDemo.session b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/RTOSDemo.session new file mode 100644 index 000000000..06a8eb6e9 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/RTOSDemo.session @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/RTOSDemo.tags b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/RTOSDemo.tags new file mode 100644 index 0000000000000000000000000000000000000000..48f59420d043e9a324c57a73714ce6309d4b617b GIT binary patch literal 1015808 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%0A=6_%yzPp9m8EH}Plq@5s&kF8&;737+c| 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
oT$J4;R?+N@2ME8CPzYZ3DAK*_R_MeL+ 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

acEM??B${S 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�rBD7UF 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 HWOw{Ox=H0h literal 0 HcmV?d00001 diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/compilation.db b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/compilation.db new file mode 100644 index 0000000000000000000000000000000000000000..ffe8a393d4d99ea31d2cb34916c02c6cecca641a GIT binary patch literal 7168 zcmeH}Pfo%>6vk(0X`>Ni!h(gHA#p(y6@isID;=N-w9ppBRRa+d5`};yy3%j~58=@~ zfD2FHw3I(}XiVJEyh%%E=C%Fa_nUd4cB?*|4aog?`q-P15)u){=!y`8kQ|)s;x~!? zib3DI;EjG%S4L-_Cn*+{a2^R0;V|)@IL04ru$yfn$(hSMp3B40-QcBcHkx`}b#&8k z9re0SU0v&zxLLVuQPrVDH#FKMT-bkzm@uT;@KiF8Y#Vy3y)+xX#ed3^4NvEqmf571bE~`x z3$NK|uLaJlxJ{V5Yo*Oaa=v9lZBV6`kTQyb-)6o3!yuewcq9ax{;L17Lsou>L%Yr? z37GjKWqyF=OrC9_sxQK2!%ZYYQe2p<(+}iUD;SK~CR+CV{Yu?RU9H-SbiCRORrPMx zC1ec*fWSWpc=eBkFT@ULKmZ8Dn!phjvT3bPI)mxca6BrWU+jB+H^1s*?H|km0U)qR tz^i{Od?R*10|G!G_5@Nwc5nR&0RR87UvMx81R@DQ{YRpK01${hfgcMW-!1?E literal 0 HcmV?d00001 diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/refactoring.db b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/.cdk/refactoring.db new file mode 100644 index 0000000000000000000000000000000000000000..bc6fc03426adbda3fdd12136b8fd77807a923f5b GIT binary patch literal 10240 zcmeHN-EPw`6tn_+7jE zB6{mLs?701-`cCO&@LYr;{v_pGRtSwcFOFS#z*8-+Uq8Sg^DeW7*Dfuh4Hm3m~lJW zA6GCJR&cC3GnyHVY;EC_QS13xH0+=8Z3~A{e;jpBuXeLj`_eypWp1I{>O|XI)A(qs zI?3npr$E|_UtzqRNmz@I6znob$!Gh_rA^naTkZ+1vJ+|re#3USTAexmHeIp^FX@rx zmJTepU=|-5OKUbN6_5F|OIccNx^aK4SF;@!IzfGpyFGQ^=wO|gCcel@C|y>uN`Aw& zo&C@&9Wai}f<#Hcx;Rb?N6hu?hC_#=LA(2kz8SPTt-(2c9i1B`MI(<*jO4vG-Qd=E z)RX;i(O76M%2W}Rw|IrspNJn&00BTC9SG=(Ld>1ron7&O$LbHn4=8{DAdm_K)>MLJ z_$%W1pLnZJh5z6rAOHvm1R(z5J^%#Li-7#V7yqi4UMRqGKp=GpK>Vj}%fVqlV2%L1 z|IeX-1|X0+1VsGj&;~*s^c8O^9p#IU0Rmc0o-E-CE)kt79@TxK`Si0-Ay_3KFTf1kpz;+%`sCyl($iEfixoU3x{Fk A(f|Me literal 0 HcmV?d00001 diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/Makefile b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/Makefile new file mode 100644 index 000000000..307c9dcc4 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/Makefile @@ -0,0 +1,9 @@ +.PHONY: clean All + +All: + @echo "----------Building project:[ RTOSDemo - BuildSet ]----------" + @ + @make -f "RTOSDemo.mk" MakeIntermediateDirs && make -f "RTOSDemo.mk" -j 8 +clean: + @echo "----------Cleaning project:[ RTOSDemo - BuildSet ]----------" + @make -f "RTOSDemo.mk" clean diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/RTOSDemo.cdkproj b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/RTOSDemo.cdkproj new file mode 100644 index 000000000..2b45bdf88 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/RTOSDemo.cdkproj @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 37 + 47 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + uxDeletedTasksWaitingCleanUp:0 + 0xe000e100;;; + ;;MHZ + + 0 + 0 + + 100:8;100:8;100:8;100:8; + + + + + + + yes + 0x60000000 + 0x4000 + + + no + + + + + no + + + + + no + + + + + no + + + + + + + no + 0x20000000 + 0x80000 + yes + + + no + 0x50000000 + 0x800000 + yes + + + yes + 0x60004000 + 0xc000 + yes + + + no + + + yes + + + no + + + yes + + + ck802 + yes + little + no + yes + no + no + + + $(ProjectName) + Executable + no + no + no + yes + no + yes + + + + no + + + + no + + + + no + + + + + + + Optimize size (-Os) + Default (-g) + $(ProjectPath);$(ProjectPath)/../../driver;$(ProjectPath)/../../csi/csi_driver/include;$(ProjectPath)/../../csi/csi_driver/csky/hobbit1_2/include;$(ProjectPath)/../../csi/csi_driver/csky/common/usart;$(ProjectPath)/../../csi/csi_core/include;$(ProjectPath)/../../csi/csi_core/include/csi-gcc;$(ProjectPath)/../../csi/csi_core/ck802;$(ProjectPath)/../../;$(ProjectPath)/../../../../Source/include;$(ProjectPath)/../../../../Source/portable/ThirdParty/CDK/T-HEAD_CK802;$(ProjectPath)/../../../../Demo/Common/include + -ffunction-sections -fdata-sections -mistack + no + no + no + no + no + no + yes + no + no + no + + + + + $(ProjectPath);$(CDKPath)/CSKY/csi/csi_core/include/;$(CDKPath)/CSKY/csi/csi_core/csi_cdk/;$(CDKPath)/CSKY/csi/csi_driver/include/ + + gdwarf2 + + + yes + $(ProjectPath)/ckcpu.ld + + + + no + + + yes + ICE + yes + main + $(ProjectPath)/gdb.init + yes + Soft Reset + 60000000 + no + no + $(ProjectPath)/$(ProjectName).cdkcore + + localhost + 1025 + 12000 + 10 + 50 + yes + no + no + Normal + soft + 0 + None + no + yes + + Local + + + + + + yes + no + no + + + + $(ProjectPath)/flash.init + Erase Sectors + hobbit1_2_OTP_CDK.elf + no + no + no + Soft Reset + + no + + + + + + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/RTOSDemo.cdkws b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/RTOSDemo.cdkws new file mode 100644 index 000000000..6c03663fe --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/RTOSDemo.cdkws @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/chip_name.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/chip_name.c new file mode 100644 index 000000000..2ce840697 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/chip_name.c @@ -0,0 +1,50 @@ +/*============================================================================ + * Name : chip_name.c + * Author : $(UserName) + * Copyright : Your copyright notice + * Description : System Initialization before main + * 1 CPU initialization + * 2 memory & IO base address initialization + * 3 flash size & address initialization + * 4 interrupt resource initialization for the soc + *============================================================================ + */ +#include "chip_name.h" +/** + * @brief initial CPU based on user config in chip_name.h + */ +static void CPUInit(void) +{ + /** + * Config CPU's Unit such as MGU, Cache... + */ + + return; +} + +/** + * @brief entry of whole chip initialization + * @Note anyone should not use any global variable in this function since this function is called + * at before data section's initialization. + * Since here SystemInit is a weak symbol, any vendor can override this symbol on its own wishes. + */ + + #define CONFIG_SYSTICK_HZ 100 + #define CONFIG_SYSTEM_FREQ 24000000 + +__attribute__((weak)) void SystemInit(void) +{ + /** + * initial CPU based on the config in chip_name.h + */ + CPUInit(); + + /** + * TODO: initial IO, memory, flash... + */ + + drv_coret_config(CONFIG_SYSTEM_FREQ / CONFIG_SYSTICK_HZ, CORET_IRQn); //10ms + csi_vic_enable_sirq(CORET_IRQn); + + return; +} \ No newline at end of file diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/chip_name.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/chip_name.h new file mode 100644 index 000000000..4f9dc236b --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/chip_name.h @@ -0,0 +1,45 @@ +/* + * Description : chip_name.h - Define the system configuration such as: + * 1 CPU base config + * 2 memory & IO base address + * 3 flash size & address + * 4 interrupt resource for the soc. + * + * Copyright (C) : Hangzhou C-SKY Microsystems Co.,LTD. + * Date: 2016-08-22 + */ + +#ifndef __INCLUDE_CHIP_NAME_H__ +#define __INCLUDE_CHIP_NAME_H__ + +typedef enum IRQn +{ +/* ---------------------- CK801CM0 Specific Interrupt Numbers --------------------- */ + CORET_IRQn = 0, +} IRQn_Type; + +/* Configuration of the CK80# Processor and Core Peripherals */ +/* ToDo: set the defines according your Device */ +/* ToDo: define the correct core revision + __CK801_REV if your device is a CK801 device + __CK802_REV if your device is a CK802 device + __CK803S_REV if your device is a CK803S device */ +#define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ +#define __MGU_PRESENT 0 /*!< MGU present or not */ + +/* Soft reset address */ +#define __RESET_CONST 0xabcd1234 + +/********************************************** + * Config CPU + * Define the attribute for your CPU + *********************************************/ +//#include "CSICORE_CK802.H" + +/******************************* + * Config IO base address + ******************************/ + + +#endif /* __INCLUDE_CHIP_NAME_H__ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/ckcpu.ld b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/ckcpu.ld new file mode 100644 index 000000000..68893e677 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/ckcpu.ld @@ -0,0 +1,150 @@ +/************************************************************* +// <<< Use Configuration Wizard in Context Menu >>> +*************************************************************/ + +/************************************************************* +// Entry Point <2> +// config start function for this application +*************************************************************/ +MEMORY +{ + ROM : ORIGIN = 0x0 , LENGTH = 0x2000 /* ROM 8KB*/ + EFLASH : ORIGIN = 0x60000000 , LENGTH = 0x4000 /* E-FLASH 252KB*/ + SRAM : ORIGIN = 0x60004000 , LENGTH = 0xC000 /* on-chip SRAM 80KB*/ +} + +__min_heap_size = 0x200; +PROVIDE (__ram_end = 0x60014000); +PROVIDE (__heap_end = __ram_end); + +REGION_ALIAS("REGION_TEXT", EFLASH); +REGION_ALIAS("REGION_RODATA", EFLASH); +REGION_ALIAS("REGION_DATA", SRAM); +REGION_ALIAS("REGION_BSS", SRAM); + +ENTRY(Reset_Handler) +SECTIONS +{ + .text : { + . = ALIGN(0x4) ; + *startup.o(*.text) + __stext = . ; + *(.text) + *(.text*) + *(.text.*) + *(.gnu.warning) + *(.stub) + *(.gnu.linkonce.t*) + *(.glue_7t) + *(.glue_7) + *(.jcr) + KEEP (*(.init)) + KEEP (*(.fini)) + . = ALIGN (4) ; + PROVIDE(__ctbp = .); + *(.call_table_data) + *(.call_table_text) + . = ALIGN(0x10) ; + __etext = . ; + } > REGION_TEXT + .eh_frame_hdr : { + *(.eh_frame_hdr) + } > REGION_TEXT + .eh_frame : ONLY_IF_RO { + KEEP (*(.eh_frame)) + } > REGION_TEXT + .gcc_except_table : ONLY_IF_RO { + *(.gcc_except_table .gcc_except_table.*) + } > REGION_TEXT + .rodata : { + . = ALIGN(0x4) ; + __srodata = .; + *(.rdata) + *(.rdata*) + *(.rdata1) + *(.rdata.*) + *(.rodata) + *(.rodata1) + *(.rodata*) + *(.rodata.*) + *(.rodata.str1.4) + . = ALIGN(0x4) ; + __ctor_start__ = .; + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + __ctor_end__ = .; + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + __dtor_end__ = .; + . = ALIGN(0x4) ; + __erodata = .; + __rodata_end__ = .; + } > REGION_RODATA + .data : { + . = ALIGN(0x4) ; + __sdata = . ; + __data_start__ = . ; + data_start = . ; + KEEP(*startup.o(.vectors)) + *(.got.plt) + *(.got) + *(.gnu.linkonce.r*) + *(.data) + *(.data*) + *(.data1) + *(.data.*) + *(.gnu.linkonce.d*) + *(.data1) + *(.gcc_except_table) + *(.gcc_except_table*) + __start_init_call = .; + *(.initcall.init) + __stop_init_call = .; + __start_cmd = .; + *(.bootloaddata.cmd) + . = ALIGN(4) ; + __stop_cmd = .; + *(.sdata) + *(.sdata.*) + *(.gnu.linkonce.s.*) + *(__libc_atexit) + *(__libc_subinit) + *(__libc_subfreeres) + *(.note.ABI-tag) + __edata = .; + __data_end__ = .; + . = ALIGN(0x4) ; + } > REGION_DATA AT > REGION_RODATA + .eh_frame : ONLY_IF_RW { + KEEP (*(.eh_frame)) + } > REGION_DATA AT > REGION_RODATA + .gcc_except_table : ONLY_IF_RW { + *(.gcc_except_table .gcc_except_table.*) + __edata = .; + __data_end__ = .; + } > REGION_DATA AT > REGION_RODATA + .bss : { + . = ALIGN(0x4) ; + __sbss = ALIGN(0x4) ; + __bss_start__ = . ; + *(.dynsbss) + *(.sbss) + *(.sbss.*) + *(.scommon) + *(.dynbss) + *(.bss) + *(.bss.*) + *(COMMON) + . = ALIGN(0x4) ; + __ebss = . ; + __bss_end__ = .; + __end = . ; + end = . ; + } > REGION_BSS AT > REGION_BSS + ._user_heap : { + . = ALIGN(0x4) ; + __heap_start = .; + . += __min_heap_size; + . = ALIGN(0x4) ; + } > REGION_BSS AT > REGION_BSS +} \ No newline at end of file diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/crt0.S b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/crt0.S new file mode 100644 index 000000000..a72543a71 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/crt0.S @@ -0,0 +1,195 @@ +/* + * crt0.S + * 1 define and initial the stack pointer + * 2 exception handler table + * 3 call SystemInit + * 4 go to __main in entry.o + * + * Copyright (C) 2016~2017 Hangzhou C-SKY Microsystems Co., Ltd + * Modify by Jiang Long on 2016-09-14 + */ +// <<< Use Configuration Wizard in Context Menu >>> + +/* + * For importing variable or functions from other c or assemble files. + */ +.import main + +/* + * default service routine + */ +.global Reset_Handler +.global Misaligned_Access_Handler +.global Access_Error_Handler +.global Divided_By_Zero_Handler +.global Illegal_Handler +.global Privlege_Violation_Handler +.global Trace_Exection_Handler +.global Breakpoint_Exception_Handler +.global Unrecoverable_Error_Handler +.global Idly4_Error_Handler +.global Auto_INT_Handler +.global Auto_FINT_Handler +.global Reserved_HAI_Handler +.global Reserved_FP_Handler +.global TLB_Ins_Empty_Handler +.global TLB_Data_Empty_Handler +.global Default_handler + +.weak Reset_Handler +.weak Misaligned_Access_Handler +.weak Access_Error_Handler +.weak Divided_By_Zero_Handler +.weak Illegal_Handler +.weak Privlege_Violation_Handler +.weak Trace_Exection_Handler +.weak Breakpoint_Exception_Handler +.weak Unrecoverable_Error_Handler +.weak Idly4_Error_Handler +.weak Auto_INT_Handler +.weak Auto_FINT_Handler +.weak Reserved_HAI_Handler +.weak Reserved_FP_Handler +.weak TLB_Ins_Empty_Handler +.weak TLB_Data_Empty_Handler +.weak Default_handler + + +.export ckcpu_vsr_table /* Vector table base address. */ +.section .exp_table,"ax",@progbits +/* Vector table space. */ +$d: +.align 10 +ckcpu_vsr_table: + .long Reset_Handler + .long Misaligned_Access_Handler + .long Access_Error_Handler + .long Divided_By_Zero_Handler + .long Illegal_Handler + .long Privlege_Violation_Handler + .long Trace_Exection_Handler + .long Breakpoint_Exception_Handler + .long Unrecoverable_Error_Handler + .long Idly4_Error_Handler + .long Auto_INT_Handler + .long Auto_FINT_Handler + .long Reserved_HAI_Handler + .long Reserved_FP_Handler + .long TLB_Ins_Empty_Handler + .long TLB_Data_Empty_Handler + +.rept 32 + .long NOVIC_IRQ_Default_Handler +.endr +$t: +/* The ckcpu startup codes. */ +.text +.align 2 + /* + * This is the codes first entry point. This is where it all begins... + */ +Reset_Handler: + /* + * Init psr value, enable exception, disable interrupt and fast interrupt. + * psr = 0x80000100 + */ + bgeni r7, 31 + bseti r7, 30 + bseti r7, 29 + bseti r7, 8 + mtcr r7, psr + + /* + * Setup initial vector base table for interrupts and exceptions + */ + lrw a3, ckcpu_vsr_table + mtcr a3, vbr + + /* Initialize the normal stack pointer from the linker definition. */ + lrw r0, g_top_irqstack + mov sp, r0 + +/* + * The ranges of copy from/to are specified by following symbols + * __etext: LMA of start of the section to copy from. Usually end of text + * __data_start__: VMA of start of the section to copy to + * __data_end__: VMA of end of the section to copy to + * + * All addresses must be aligned to 4 bytes boundary. + */ + lrw r1, __erodata + lrw r2, __data_start__ + lrw r3, __data_end__ + + subu r3, r2 + cmpnei r3, 0 + bf .L_loop0_done + +.L_loop0: + ldw r0, (r1, 0) + stw r0, (r2, 0) + addi r1, 4 + addi r2, 4 + subi r3, 4 + cmpnei r3, 0 + bt .L_loop0 + +.L_loop0_done: + +/* + * The BSS section is specified by following symbols + * __bss_start__: start of the BSS section. + * __bss_end__: end of the BSS section. + * + * Both addresses must be aligned to 4 bytes boundary. + */ + lrw r1, __bss_start__ + lrw r2, __bss_end__ + + movi r0, 0 + + subu r2, r1 + cmpnei r2, 0 + bf .L_loop1_done + +.L_loop1: + stw r0, (r1, 0) + addi r1, 4 + subi r2, 4 + cmpnei r2, 0 + bt .L_loop1 +.L_loop1_done: + + jbsr main + /* Should never get here. */ +1: + br 1b +Misaligned_Access_Handler: +Access_Error_Handler: +Divided_By_Zero_Handler: +Illegal_Handler: +Privlege_Violation_Handler: +Trace_Exection_Handler: +Breakpoint_Exception_Handler: +Unrecoverable_Error_Handler: +Idly4_Error_Handler: +Auto_INT_Handler: +Auto_FINT_Handler: +Reserved_HAI_Handler: +Reserved_FP_Handler: +TLB_Ins_Empty_Handler: +TLB_Data_Empty_Handler: +Default_handler: + br Default_handler + rte + +.section .bss + + .align 2 + .global g_intstackalloc + .global g_intstackbase + .global g_top_irqstack +g_intstackalloc: +g_intstackbase: + .space 4096 +g_top_irqstack: \ No newline at end of file diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/flash.init b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/flash.init new file mode 100644 index 000000000..6120b37d0 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/flash.init @@ -0,0 +1,4 @@ + + + + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/gdb.init b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/gdb.init new file mode 100644 index 000000000..8bc3f58ca --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/gdb.init @@ -0,0 +1,6 @@ +set *0x4000202c=0xc0206 +set *0x40002004=0x8 + +set $pc=0x60000000 +set $psr=0xe0000000 + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/main.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/main.c new file mode 100644 index 000000000..45c172810 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/main.c @@ -0,0 +1,123 @@ +/*============================================================================ + * Name : main.c + * Author : $(username) + * Version : 0.0.0 + * Copyright : Your copyright notice + * Description : Simple function in C, Ansi-style + *============================================================================ + */ + + +#include "FreeRTOS.h" +#include "task.h" +#include "queue.h" + +extern void SystemInit(void); + +#define mainQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 ) + +#define mainQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) + +#define mainQUEUE_SEND_FREQUENCY_MS ( 200 / portTICK_PERIOD_MS ) + + +/* The number of items the queue can hold. This is 1 as the receive task + +will remove items as they are added, meaning the send task should always find + +the queue empty. */ + +#define mainQUEUE_LENGTH ( 1 ) + +static QueueHandle_t xQueue = NULL; + +static void prvQueueSendTask( void *pvParameters ) +{ + TickType_t xNextWakeTime; + const unsigned long ulValueToSend = 100UL; + + + /* Initialise xNextWakeTime - this only needs to be done once. */ + + xNextWakeTime = xTaskGetTickCount(); + + for( ;; ) + + { + + /* Place this task in the blocked state until it is time to run again. + + The block time is specified in ticks, the constant used converts ticks + + to ms. While in the Blocked state this task will not consume any CPU + + time. */ + + vTaskDelayUntil( &xNextWakeTime, mainQUEUE_SEND_FREQUENCY_MS ); + + + /* Send to the queue - causing the queue receive task to unblock and + + toggle an LED. 0 is used as the block time so the sending operation + + will not block - it shouldn't need to block as the queue should always + + be empty at this point in the code. */ + + xQueueSend( xQueue, &ulValueToSend, 0 ); + + } + +} + +static void prvQueueReceiveTask( void *pvParameters ) +{ + unsigned int ulReceivedValue; + + for( ;; ) + { + + /* Wait until something arrives in the queue - this task will block + + indefinitely provided INCLUDE_vTaskSuspend is set to 1 in + + FreeRTOSConfig.h. */ + + xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY ); + + + + /* To get here something must have been received from the queue, but + + is it the expected value? If it is, toggle the green LED. */ + + if( ulReceivedValue == 100UL ) + { + printf("Recieve expected value : %d\n", ulReceivedValue); + } + else + { + printf("Recieve unexpected value : %d\n", ulReceivedValue); + } + + } + +} + +int main() +{ + SystemInit(); + + xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( unsigned long ) ); + if (xQueue != NULL) + { + xTaskCreate( prvQueueReceiveTask, "Rx", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_RECEIVE_TASK_PRIORITY, NULL ); + + xTaskCreate( prvQueueSendTask, "TX", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_SEND_TASK_PRIORITY, NULL ); + + vTaskStartScheduler(); + } + + + return 0; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo_CDK.cdkws b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo_CDK.cdkws new file mode 100644 index 000000000..382f7dd85 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo_CDK.cdkws @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/hobbit1_2_OTP_CDK.elf b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/hobbit1_2_OTP_CDK.elf new file mode 100644 index 0000000000000000000000000000000000000000..5cee76925a9e1d9d1bccfdd214d7181f24bab57c GIT binary patch literal 29516 zcmeHw4Rn;%wf1@Eog_nMl1zS-Uv>DYL<&hr5NJYm@&`dcq96j&&LlIFADAT5%mfC+ zir{Uz7Ud_cw!OKnt$z1fi~X!vu5E2=uY8sIQOmmZT5ZK*!F#>dx~!{JZ)?f-Jm+WT zofz7$>-JmgTkG;J=G|xSv(G;J?6c3$yWjJMTU%EywJb}R%Oz$DVnHFo3jixSgzyUy zSRewRSBi3Ak{d)^Vg3$G6yn}xLKKjq=uBO>E?D4#1uj_Nf(0&E;DQA%Sm1&ME?D4# z1uj_Nf(0&E;DQDIKe0d%&+i-m3%^Rg^+X`ri}3V{;!`5f&_BDP=WMxO9O*eb(I3Elsy~Q(fnU@Tdi`z44IW~; z1nG%7ZOi=2-Q)-l2Zxy(9u5yb9WC&+v2>mIVE7RslmstI*)xock_=`;q76*Qys40I z=BZtkE}v^==bHWT9^{3G?~FdaAu)R96Qf1FATu-1Zy(uJWbjy6tsN4wEl(s6rTeZawSDV7nYn!#BQvu;+|lc>T*zntjwp?>W?T zP4LKEct*xwr1#KI?3t>+$xVDJaC(EmC(g8LnVzUUP5F%R5{1zdf(_!Bop&NdPpiZ) za8O(kcqG{H18;5{W>)NatQa2h#wi!PF@n07amTnSlhg-ZX5c<>)9eH!G?TauTCxSh`LX>g%H;7@UGgXCUII!U^`&1GI3~ioV3w1O{2=51+?ecQA_EmtOp!E zOud7{yXrcd_eGy8Vd;{%n6D&GoWNY#snS=8oHo=)Nak z%sw`w^0s=WX=&P3=?ZT=xFQ}L9zFBUxm(I$x#7L&wVTWCi?7^xGjJpI?Sd!c;YXo~ ztl9R7I+xp$KJ~^6u0Zh%R$$j>Z8>(0Z_R?Q!?Ln1YQ9mkNVGY+qJ2%z**t&nt4dyY zm^97_UVnR2J3Ndjwkvq3`Fdh`{_v-MoLbdPdU!a#@rKfs8`&0RsodEk*Dq#33(QzY z+Q6;mE#l$ffjuWuk+UT=CsOSVK3I%2@65g6Dv6Jt`QoT*E$z&4H@1zrb#N3-&1orT zyXdFxOi`|B4M$IjoC~2zZSY7h{K)A$;$1t)HqjcY?QCO_KX?c2R0IqBD0Qy3^VptX zd*?ziorDnkg6GxEG_6?T+YnWAuX;{e?O! zkw+idkNjolo{R?@@-Pa@-J-4(^MDz@oaJd_+2TXt;p5TImyGWp&bi%bxyEwpW#$>C z)wtx0q5P*5K0zzC$QDi@ReF#c)@(ybmI$J5tO^*4{HYCt zb&+N-=0L9Hcjxz<6@IKH_ie`v6&&7CwyO-p`I$aB54Psa!L^UGmEv%$ zeHn^b{fsv%YnoY3VecPHT!lH7egwO6M0YkjcLBNkqHrOMXM)}xi{e09bqY6Q!g;UP_2n_x})O0eN0n8!>`c(`vP z{d2a|{xZl=DK%%#%6L9Y#y7T|y$m%Fa*S}M3LM1zwtH`iBj0$g+JQQ)OKY;0sebo- z)VSezbb^O6Xa`#ShtU&W?t#cbd=+Nm*>b#E7%^|2+k^2tQ)-Ag26E^F@r`Q5U5M2L zdPpks(8ri@r%O*EUJhQ)>}r=ldB+{{jLzfvM;%J8xJlJ^XY_gRjTxCG{!H7CG=nNv zTC8xKXP6c%vomc| zd(AhnuQ9WgnHRXP;f{hm7{DEC4(`f7CuekJt@KOIqm|@z_+_q+Tr<_W^~31PWA?bt zweoV*>wK2O+yI-|7)zt`sX@8)IrahTTrO96h*D33Je=TONRHK>uz!?p%XnQ&P$!W7)H5UcX&7adadS=t;`+GF| zyp;Q7f&D$^IX`}!2Ti}5og_88PWO3uI5GSrcGjP)CpA3WjuuHcOdkmkcgYc^a>mwy z*>qglYvewNWfH@CAp395BRl#hWRIuwN6M6+Qf>rt$JaP=Ua3Z=dbYgAABp=@35;!Jm9=N@eMgV#d(fpZ==`I;Ks z9s&H`bG*L;?nQX=R5R7zLL=3#OJ&NIx^c$DDz0@h8r4Bx($$(|M!V9FtAq{xUh;BX z6mix+P3vN6;C{8h&l9oNT7%zWW|y1grm_(y$#Ps|S-v1f`o z!TR^SOVYPT3q0Wi;jh~Pd;0CsKa?yhQJg>fDzjJV%l?W(av`1=*X`Y-wH0e4(* zm$rD&<9l8NzJywvx|exo)%SSpIlkvDP%Kcc0wp9VE>K*cTnWlLNwGn(L75B6DoJsJ z0>A8@2}+Bkn$vEtYi5Bp;xD0>n`$8Jv)$4Vuo7?fsET0rqgN**XPL79~(z3H}!h2h&O&_aP0 zil*-W^is;(C1@ci7AS8@%CA9jf#L$?-zDWNC^jfIC@)FM&r9~bVhelv3k9M^)ZA7f z#P=)g0qfYjS$EQsONxBK`a)m$HZfhyiN7eszE^Mpto~i^Z57q^7kOymj)S`o9!BJr zc8kAg1@^t@3LHLV2TJCYOyBoPiKwpsb;->7LQnXhJ;$C783EQfv;N(ZVEw6*T*>d? zpjfc}1HR^gU9Z@ImA?`q;G2h9*}f^hhfw#OnqHBi7w6DDnoeGqdr7*dab-M#Uv+)4 z2a*Ewpy51dIPXPj_>k1^x6sdnK4ShuQn%kjw_lbBQlQT%nX-_2z650jqrC`R!|(d> z+lSwS_#MOVB!0}}HHu56#=pB1*)I|Tp>QF7ar9WYu=32{L*M=OdpDnb`#axko#q>T zWc6LA)-Qavb>4eFLFh&F40Lw(rsjugL#<0!Hm+$4tzO$6YHnFEehq(pYGljen%X}h zmhnZU**s|WCm8>qW_hGNGxo*n20;Y-BH;n#@4|J#0v9ZB!2%a7@ZZJ)Tw}4+h68}y zGmc#bn2&Wr(rW;@-nMJlqv;0#1E8<9MYs}c%IkPq!j?(I^AtP@SP9%$Ai}c%Crto^ zpu>QZfUhqU;U$2_iWL9iVkIwLqU!xDAnWBteI5ty1DxbnFrncwK&?_Q+vWzEg?fy(B2YgTLstQ{DLCj;whtLE2K)znn3>h151_jX3Em>Xzp zTE4D!ZlI~QX8ywYwKWT`2rQ_&vTDAV2FYr5Rl3ru2c-E}uh99}3vuP;1*<(?q>{X= z@=tqBzHFswHuArWpOQ}*(}DGE5B0_RB7F(*bz&X8{bC-nx}u@2vB6~TK)<*eXm@CE zThmZiS8PyRC(&p!)fkNq#*#@9k%V}xzdO|o5SIXV32OKxx}pgR_a>KiY>Al~w}a9p%l7xC#D0U_ z(7&Ac|1dZtM{FUQSIE6w``|$LU`L`kGOp~PTJ{5=fSIW*WW zb5aALfmA}w%hR;Jj{e@RSTYsrjiy67^P9-*h$TZ?5}{};GPpgF68Ge5)l7BwVBalu zy*}0v6>l1>b+98D6EQSTW;XZqCKPF>A+1Ga;$dKr-Z?Ok8XV}OV$wjD;qDT{g+eTX zkuJk;Db3Lm+u9q6B_+!Y$wE&!0~^f6ud#JasI|E%)Y`99CEE!UMHVi%McZ2tDTgv0 z3rXR!*5Gb6S@!_Y8>=wBtr22&2k2iQPdaXQX3{-2TmcwaTW+P>yza_W-r7c#3z+`$d8ek`>6^1amdQfo;`m1ZiP4P!QPeBDh}V z_&!2pipIpfE zKyj#)XY()#Co7{@p3P$=K8JF7HV>JI@4;VeIg)jM{t%Xm`=*fR#4o^`Yuo2OtKzju`51GR?Bk_DOZzq4!i+{3kHB7)PeNe-J~eX zyF3LGK+E&ni(UpbzXxN>Uc3!Sksrp*{!k2ecm7Vwt7ket|2pzCFzv~o%=8kb3-b@- zZhx3%eZpSG0#_XXlIOD9%As4qPpQFj^17@Nd=SN=*GRO4CGTR16|b{|+rGAyC9Y$M z)s*O-=GFq*C5p1b{sC{-T?$URPjHNS}8gx$=uzl)^3 z`7rKWMdm*Pr@68|xZx|HITL=AJ-XaR|F2>#M<)oYEy#x1r?{i=*@HToB8u>A()EqfXsw#E^_iq4dZMJAl zvT}=Hja(0rc7GHl%9-?8yIJ@aIWba|*RWHuMt%cgkD;q7SIBAdR#nf=GHKgg3QJccgmoLsxzee!w^`lpcchdzZ?2GY=pI_sl}V!G8rcYjQmlB$VG_kvt@mmjDzLN(>r3@gbgH6% zs83j5u9VmgR3shPx`Ns~C?!+sGg9(Bl)MG(4>ILSr`P?a@@}q z7ErC(d9d7#GKWd58D$({);D6Z>O>jGo^@1VgB4g${z=O%OQAOFF@?p;R#L_{71mS6 z*~I#m!qR0NSJtGt-`}@PQSTr@^>l5WwETCes9|p=`OZxqAPu? zs<#%IQ+J~TR?2DLqYb857Q3DGuERze3p`jRO<>ce$i9XnPC891OtIAXN=%ggYjWe0 z;J-JoqHXXHKJEU5;K(^48UaJ~t(00|n1+ttgy;3!2 zp%%R9(w89W5r|@SS81l5QzAoySu{O4&bqJGW#Us3*oRp`OZ8uP@}q2jqt1;^MxYm) z7mco;yp?FPX70J{4X+5V_hBi8;*;}f>Kn8@QsPo(xS`DC`OLUU7veH`iM5Wk+@jjg zw)64C8sTFEVxdNoZtIt+?s&2S)jc4DFki#lZ6;$gH?Z(;rgQq6T} z0<;|g!Dkg-528I4L&)+ni5(2nKBnFF52;EK(;h681;uDi9!LLz0?Yq1Q1jQ}QN}7| zQrML&SoSiK?)>KV8-!KCdrqH32GNsFda-BTbjG@ zA&7KMm=B7T2WeQjH}L)oq-}8(?%HgVF@o6x$8i9B6SnncW2QEMxx2nb2pD(Qw-Fh7 z*O$B1qgG~*x89!kBcS;$cy_cWokCLNuV~#M?8$E->Ca!jPS{i4L9(Xclbn{Oa?W}} z6kz=j_B0~LL;+423HuTY%{q>@_JBx16IhQe3MpR_DNzy&MBy)ymN|uFmnnNC#ay}r zxV=Iqr$M6EO@i-95Zvw=ji40$9TX8o8$hv&K8mzU*zYp?@)^kWosyhaY$4~@B^t82Ss_TKY}@#{p~vFR_z*A zb*KEFq+Xx?rPQmPTY}FhfjcWUW5U(?R-_P*vF=e=0-eMLV!ERhgXYb`ZvQGTPMC`P5+s+SM1iIi zW1Lk9Bh|>nn6s?qzezk82o=$yE0;?TI;cPAT#hKzzFso5s zx#jgzbyk*Nlwn$oC|5xi^?HlEJ}-$LqZy_JwxrN)*~M8A-b#p=20q{Uj8z0<>4s42 zVq=n$@$BHQg7o(ryfoL~Wm!{DWcig+vx?kqxJX(O0h)_5n&r**Wjk@AmYJtIagtV3 zqmy+N8l9qLYjmpVrD=*v)###G)@2)gcG0-^PFy=-C4SU>2Z&-;DoII6pmHHd$~0JU&k4pTI6b< z>xR|n)g>z%m<(Ss0xI8?Gk#o! z$q%IwpJBXk9pFB|ivd3kcoE>e8Xng0sD@8#_^gIl0%bWY`r#6kgWRwMh&4St6%cE+ zl*d5eB;ZQ`Cju@7WPR6Y{8~WPi^7tQ2Lg%ni~;$u;7YhpLoBWme^A4J24s1jLm>Y% z8b7J=pJ^Nql`{V&4H-UxF(<MB7Gq6M!5^aHX7W@uOgcqwpfo211N2$T6O8ny#o zg8cP5f1{=|+Qf2cP2a8Q2wutZ2LS0ohc*5fAbb1?4WH5UlNx_X<8NqqPQyaPg{bc& z4KD{Q0=^WGdLbkz^BF&4eQAx~uHgX{Tdzx}QNyr?3?Y#pyMM{IPs4jPJPJtpk87M!Bl7>7hHq$iPUrjb6@Mil?GV&( zy@m-54`_(Zy_A1aV<9(7We}~5J*Z5(L ze@o-X0d2g!%X2-46ya-tGXVvHLTsTMkecUfoPnw-z?W#eUBmT&9{@eA@jEme0b~mp zWTKqontoE#f2Q%*G<;7(4`Mv5|6&bi0dh5{1*D!$fb{KabUwpNGk~W7S31< zYW#$Tj3H64*L40{nto2x^AYor^#hVGpz(zo1~vT}ji)r+4Oj;L`vIxvqkxkEp9iE~ zj3rU73t=P5bpsNw1S|(^0c5##8Zx{@-;4v2zaNnNk7)QDAnSVzkmVSPV*gYCl5dWN z3jkUEDvkF5vc9c=EO!?m>tS4t@KHdPXV_{w;AudXe^t|8)3^`OC-O}JECrkc$o9_F zbVjEx1AaXq+uy0_TQ$4`ka9n-@h(H^uv1r z=K_8iknQ2q`JdYrdT`o&cmbKC8XsHI2Iw_n=qh14?fNjX` z?*%0Ph{lfsQvPEaXE264qh~b!93c5$10)~gFw8%v^YallVg3|A<}>_4Z(jgNeV6F` zwHjxbg*%_U8b6@nqZ&T0;V}(Q08;Kt8h=YeSDBJO2avPYVnB}07C_Ec*XaD~0a<>% z#y4sBQ9$x<*7zVG`F3c07a-g92~EF4(?6~8FKGO64W9<&touA5<(>tk9B*EIcY zjpI2$)^{l&?NqDbQVln1xLLzAAa{2j{;IMgIa%X zbTWvj&Qn{$wX>wCSWM!W#>Hp1?*cX!yPNh}jYS9+W%BsEbyDVen)bSy_A`4tIc?zK z4!%nA=E`9nckzMq~TBC2|Jvw(+B33U3){IS)T=zXYm{d@47?kgj{zBfoPt!>kc_i;iU#r9q~}I zcSmgOiL%TYx8DA)flx}G18Z(-#yPOi{14TNZJ`bvJ<&ihZz?2egj<$7m z@(f$DXJ9ZD;Bl=n2i3Y`DYQ8mQ^lnvRkE+YOP-?RnL8fB>x-p2#J0iS6i&!N6P)7c zavW9*&97aYqq9bNl&vKes=acd%v}-N-kMHy^hd=IbXkmc=A77LUE55f@CH~ONW{Bz z9vK;X=8p&EXdp;u-P9+vEu)d9Mg|hSv8ad-^mhm3jTVrsojI(qaE>B9JO&sF;ZS0$ z+)#y#HQ9C^ryS_&O5&It(y_s=r})$=>e%STukT&EVJrh{m8vfwvGL zNEwQ!{&M%tglbq}($UIH-E1x`T~`ZJkAI$$+4C17JI4c+56RPz*%OJ<6O||B)G+4k zrtGO4bLx|r%KQ0(hGqI7yghV!b? z4)`Q(nT+(r1jd@92)n#9us*8L8OV z4k88|yLPCr6A@vtCe<;R5-Zh2gxap{fFYJA8zYgH-oaP|F1I4YR<`seJ38agpn1ib z)ZkDgMXGH7>O=%bgfYm}Y1B1q8`rjqR#-=tTM^q1;i83a;P5g`o_y6JTl=L%jjf5L zG%u@LzBVgDS_OOV(15H-R;pO#q`@5Yhn`DWcop?&ZEDVnP&%5npejT73j^cT-1X~RK_>0rdd5YE!)fYBW^X!1r;eciwT6+!;4di+rU#(}jRR0Mc z8z7hLGQLF5Fvwox`~FPZ`IH#O5HoL0#z}HAHtLu*`g+%s>nbeUmb|5XsmOnJJcbk0x&8xG1S?Q;h({|&oFr% zot=ZRtpe;% zVVtoQfr$!{cO0$ZMOPvpwuHBT6@CCuwZkPZK-y)qs_ zX;VKxH>&zFeB7T>p1Drq!O7Btqu2Na@&OH9OzjhQCQ&1obnz>9K z$An2UZwL7NY`nfq-Vkt;X4W0GLOfKWnH+hyInvBs)FcECub9io*bjn9Gw;AsA%2fH z!R9h~e+Pm|GjAUr4yMtV`ZA&)08Tz*mj`YX;vL=DWMv+IM>GVG*B5cP9q;xsmr0g_ z;;2SM!uTR3!kCO`SAlON8W)xJR{|Ss4r8m!N-Gk))Han z+q!1@slt`U^hbp&>(K8M?x+w1+l&Tg;=;ERDxvST^xQ1TmaTB&cpL4w5bJYbl*gyT z>}3l_2ZL-2yzh5hwkXNA5OlZr%_t=p{SiA8j0*&XY7Z^X7pzX4`C&&spYzN`dCX5Z z@>$-AGygPV900gna^6sBr4RE#4lA0f--*vfhKWP)6(;#lBKF|qf7O8pkzryFhJO;? zGdcPBM$6!o_W<6`7@Yd^eU8DeC9Y!zM&84S6PSGR^X-ShDeqxC*BiW3CFGs<;yTE9 z(u z+&s?{XMOMD86E(alK-9qe_Cb8JKOV9q-1nVQWU=ve;xFf7(LVZl)ttj7w7kXCZFwb z;!+=c59rM2_kjjye){4p&hk#21Aw0eapd9+geV05rq(Bb_HpN7;x}c$aUO#I7f=}N zm}m0D9N;*)DRJ`iYXEZvkXSVazhMj>0dD3KKgx59V&Yew62hvpoei#*dB}QvSujo%vP3%@sgm32>)>1jppB9#g&xIQ@?@ zXpiKW{5`oQ@FuIFE}k#}mJlarP(vnzP)$p*UDr=SOq)*eVHyr`#ucZX@7ot;_N@1wvZnyo&-PTeFQi!?omrI*f(pOv;cl- z;AZ`%{q_KNj*o+5`0pKq|4-mfef~G_pu=ALgC|b;KL?)euRQS|z@es$+f(0nfb*k7 zV?WEWg`mEE;QaiM#b{rg{>Z#PVEGxqo%+-P4?FrBr$aJV0I5~LO*~!NYfL`ojvW2B zkICm5TW5Vd-E44<|A&B^cL9{2c|623I-a@l*t06uCuT*(EJhLKiMC8YY`oB2Zlv=( zVJFDWK75-vf(nvkV;ETu`JkuK+=zz>sp!m{P(dg(mLuU~AAu&Ez9_YhkbW(odosB<-LNe;y#YmHihJ`}05Tj=lHD4@`#HDd@f77ZbyhF;3#$VQluF)K)AvP@6Oeprxcm_%!VqF%DgdbQNt zj+AkU?5FH4y<2;u(4c91Xk%<}z)_FtZ`yAGqRb3uJ3L^4Si2IDc{)RDUm~^LQBJ#J zD47t;^ooF(2oe~0FF}9>)t;YdjN7!tx;pR +#include +#include + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core VIC Functions + - Core CORET Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CSI_Core_FunctionInterface Functions and Instructions Reference +*/ + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CSI_Core_FunctionInterface + \defgroup CSI_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under CSKYv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +static uint32_t s_nvic_prio_bits = __NVIC_PRIO_BITS; + +/** + \brief initialize the NVIC interrupt controller + \param [in] prio_bits the priority bits of NVIC interrupt controller. + */ +void drv_nvic_init(uint32_t prio_bits) +{ + if (s_nvic_prio_bits >= 8U) { + return; + } + + s_nvic_prio_bits = prio_bits; +} + +/** + \brief Enable External Interrupt + \details Enables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +void drv_nvic_enable_irq(int32_t IRQn) +{ + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); + NVIC->ISSR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + +/** + \brief Disable External Interrupt + \details Disables a device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +void drv_nvic_disable_irq(int32_t IRQn) +{ + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + +/** + \brief Enable External Secure Interrupt + \details Enables a secure device-specific interrupt in the NVIC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +void drv_nvic_enable_sirq(int32_t IRQn) +{ + NVIC->ISSR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + +/** + \brief Get Pending Interrupt + \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +uint32_t drv_nvic_get_pending_irq(int32_t IRQn) +{ + return ((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +void drv_nvic_set_pending_irq(int32_t IRQn) +{ + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +void drv_nvic_clear_pending_irq(int32_t IRQn) +{ + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + +/** + \brief Get Wake up Interrupt + \details Reads the wake up register in the NVIC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt is not set as wake up interrupt. + \return 1 Interrupt is set as wake up interrupt. + */ +uint32_t drv_nvic_get_wakeup_irq(int32_t IRQn) +{ + return ((uint32_t)(((NVIC->IWER[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + +/** + \brief Set Wake up Interrupt + \details Sets the wake up bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +void drv_nvic_set_wakeup_irq(int32_t IRQn) +{ + NVIC->IWER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + +/** + \brief Clear Wake up Interrupt + \details Clears the wake up bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +void drv_nvic_clear_wakeup_irq(int32_t IRQn) +{ + NVIC->IWDR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); +} + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +uint32_t drv_nvic_get_active(int32_t IRQn) +{ + return ((uint32_t)(((NVIC->IABR[0] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); +} + +/** + \brief Set Threshold register + \details set the threshold register in the NVIC. + \param [in] VectThreshold specific vecter threshold. + \param [in] PrioThreshold specific priority threshold. + */ +void drv_nvic_set_threshold(uint32_t VectThreshold, uint32_t PrioThreshold) +{ + NVIC->IPTR = 0x80000000 | (((VectThreshold + 32) & 0xFF) << 8) | ((PrioThreshold & 0x3) << 6); +} + +/** + \brief Set Interrupt Priority + \details Sets the priority of an interrupt. + \note The priority cannot be set for every core interrupt. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +void drv_nvic_set_prio(int32_t IRQn, uint32_t priority) +{ + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - s_nvic_prio_bits)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); +} + +/** + \brief Get Interrupt Priority + \details Reads the priority of an interrupt. + The interrupt number can be positive to specify an external (device specific) interrupt, + or negative to specify an internal (core) interrupt. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +uint32_t drv_nvic_get_prio(int32_t IRQn) +{ + return ((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - s_nvic_prio_bits))); +} + + +/*@} end of CSI_Core_NVICFunctions */ + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CSI_Core_FunctionInterface + \defgroup CSI_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + + +/** + \brief CORE timer Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \param [in] IRQn core timer Interrupt number. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +uint32_t drv_coret_config(uint32_t ticks, int32_t IRQn) +{ + if ((ticks - 1UL) > CORET_LOAD_RELOAD_Msk) { + return (1UL); /* Reload value impossible */ + } + + CORET->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + //drv_nvic_set_prio(IRQn, (1UL << s_nvic_prio_bits) - 1UL); fix me /* set Priority for Systick Interrupt */ + CORET->VAL = 0UL; /* Load the CORET Counter Value */ + CORET->CTRL = CORET_CTRL_CLKSOURCE_Msk | + CORET_CTRL_TICKINT_Msk | + CORET_CTRL_ENABLE_Msk; /* Enable CORET IRQ and CORET Timer */ + return (0UL); /* Function successful */ +} + +/** + \brief get CORE timer reload value + \return CORE timer counter value. + */ +uint32_t drv_coret_get_load(void) +{ + return CORET->LOAD; +} + +/** + \brief get CORE timer counter value + \return CORE timer counter value. + */ +uint32_t drv_coret_get_value(void) +{ + return CORET->VAL; +} + +/*@} end of CSI_Core_SysTickFunctions */ + +#if 0 +/* ##################################### DCC function ########################################### */ +/** + \ingroup CSI_Core_FunctionInterface + \defgroup CSI_core_DebugFunctions HAD Functions + \brief Functions that access the HAD debug interface. + @{ + */ + +/** + \brief HAD Send Character + \details Transmits a character via the HAD channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +uint32_t HAD_SendChar(uint32_t ch) +{ + DCC->DERJR = (uint8_t)ch; + + return (ch); +} + + +/** + \brief HAD Receive Character + \details Inputs a character via the external variable \ref HAD_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +int32_t HAD_ReceiveChar(void) +{ + int32_t ch = -1; /* no character available */ + + if (_FLD2VAL(DCC_EHSR_JW, DCC->EHSR)) { + ch = DCC->DERJW; + } + + return (ch); +} + + +/** + \brief HAD Check Character + \details Checks whether a character is pending for reading in the variable \ref HAD_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +int32_t HAD_CheckChar(void) +{ + return _FLD2VAL(DCC_EHSR_JW, DCC->EHSR); /* no character available */ +} + +#endif + +/*@} end of CSI_core_DebugFunctions */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/ck802/core_ck802.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/ck802/core_ck802.h new file mode 100644 index 000000000..2b365d761 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/ck802/core_ck802.h @@ -0,0 +1,546 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file core_ck802.h + * @brief CSI CK802 Core Peripheral Access Layer Header File + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef __CORE_CK802_H_GENERIC +#define __CORE_CK802_H_GENERIC + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******************************************************************************* + * CSI definitions + ******************************************************************************/ +/** + \ingroup Ck802 + @{ + */ + +/* CSI CK802 definitions */ +#define __CK802_CSI_VERSION_MAIN (0x04U) /*!< [31:16] CSI HAL main version */ +#define __CK802_CSI_VERSION_SUB (0x1EU) /*!< [15:0] CSI HAL sub version */ +#define __CK802_CSI_VERSION ((__CK802_CSI_VERSION_MAIN << 16U) | \ + __CK802_CSI_VERSION_SUB ) /*!< CSI HAL version number */ +#ifndef __CK80X +#define __CK80X (0x02U) /*!< CK80X Core */ +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __GNUC__ ) +#if defined (__VFP_FP__) && !defined(__SOFTFP__) +#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" +#endif +#endif + +#include "csi_gcc.h" + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CK802_H_GENERIC */ + +#ifndef __CSI_GENERIC + +#ifndef __CORE_CK802_H_DEPENDANT +#define __CORE_CK802_H_DEPENDANT + +#ifdef __cplusplus +extern "C" { +#endif + +/* check device defines and use defaults */ +//#if defined __CHECK_DEVICE_DEFINES +#ifndef __CK802_REV +#define __CK802_REV 0x0000U +//#warning "__CK802_REV not defined in device header file; using default!" +#endif + +#ifndef __NVIC_PRIO_BITS +#define __NVIC_PRIO_BITS 2U +//#warning "__NVIC_PRIO_BITS not defined in device header file; using default!" +#endif + +#ifndef __Vendor_SysTickConfig +#define __Vendor_SysTickConfig 0U +//#warning "__Vendor_SysTickConfig not defined in device header file; using default!" +#endif + +#ifndef __GSR_GCR_PRESENT +#define __GSR_GCR_PRESENT 0U +//#warning "__GSR_GCR_PRESENT not defined in device header file; using default!" +#endif + +#ifndef __MGU_PRESENT +#define __MGU_PRESENT 0U +//#warning "__MGU_PRESENT not defined in device header file; using default!" +#endif +//#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CSI_glob_defs CSI Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus +#define __I volatile /*!< Defines 'read only' permissions */ +#else +#define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + + /* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + + /*@} end of group CK802 */ + + /******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ + /** + \defgroup CSI_core_register Defines and Type Definitions + \brief Type definitions and defines for CK80X processor based devices. + */ + + /** + \ingroup CSI_core_register + \defgroup CSI_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + + /** + \brief 访问处理器状态寄存器(PSR)的联合体定义. + */ + typedef union { + struct { + uint32_t C: 1; /*!< bit: 0 条件码/进位位 */ + uint32_t _reserved0: 5; /*!< bit: 2.. 5 保留 */ + uint32_t IE: 1; /*!< bit: 6 中断有效控制位 */ + uint32_t IC: 1; /*!< bit: 7 中断控制位 */ + uint32_t EE: 1; /*!< bit: 8 异常有效控制位 */ + uint32_t MM: 1; /*!< bit: 9 不对齐异常掩盖位 */ + uint32_t _reserved1: 6; /*!< bit: 10..15 保留 */ + uint32_t VEC: 8; /*!< bit: 16..23 异常事件向量值 */ + uint32_t _reserved2: 7; /*!< bit: 24..30 保留 */ + uint32_t S: 1; /*!< bit: 31 超级用户模式设置位 */ + } b; /*!< Structure 用来按位访问 */ + uint32_t w; /*!< Type 整个寄存器访问 */ + } PSR_Type; + + /* PSR Register Definitions */ +#define PSR_S_Pos 31U /*!< PSR: S Position */ +#define PSR_S_Msk (1UL << PSR_S_Pos) /*!< PSR: S Mask */ + +#define PSR_VEC_Pos 16U /*!< PSR: VEC Position */ +#define PSR_VEC_Msk (0x7FUL << PSR_VEC_Pos) /*!< PSR: VEC Mask */ + +#define PSR_MM_Pos 9U /*!< PSR: MM Position */ +#define PSR_MM_Msk (1UL << PSR_MM_Pos) /*!< PSR: MM Mask */ + +#define PSR_EE_Pos 8U /*!< PSR: EE Position */ +#define PSR_EE_Msk (1UL << PSR_EE_Pos) /*!< PSR: EE Mask */ + +#define PSR_IC_Pos 7U /*!< PSR: IC Position */ +#define PSR_IC_Msk (1UL << PSR_IC_Pos) /*!< PSR: IC Mask */ + +#define PSR_IE_Pos 6U /*!< PSR: IE Position */ +#define PSR_IE_Msk (1UL << PSR_IE_Pos) /*!< PSR: IE Mask */ + +#define PSR_C_Pos 0U /*!< PSR: C Position */ +#define PSR_C_Msk (1UL << PSR_C_Pos) /*!< PSR: C Mask */ + + /** + \brief 访问高速缓存配置寄存器(CCR, CR<18, 0>)的联合体定义. + */ + typedef union { + struct { + uint32_t MP: 1; /*!< bit: 0 内存保护设置位 */ + uint32_t _reserved0: 6; /*!< bit: 1.. 6 保留 */ + uint32_t BE: 1; /*!< bit: 7 Endian模式 */ + uint32_t SCK: 3; /*!< bit: 8..10 系统和处理器的时钟比 */ + uint32_t _reserved1: 2; /*!< bit: 11..12 保留 */ + uint32_t BE_V2: 1; /*!< bit: 13 V2版本大小端 */ + uint32_t _reserved2: 18; /*!< bit: 14..31 保留 */ + } b; /*!< Structure 用来按位访问 */ + uint32_t w; /*!< Type 整个寄存器访问 */ + } CCR_Type; + + /* CCR Register Definitions */ +#define CCR_BE_V2_Pos 13U /*!< CCR: BE_V2 Position */ +#define CCR_BE_V2_Msk (0x1UL << CCR_ISR_Pos) /*!< CCR: BE_V2 Mask */ + +#define CCR_SCK_Pos 8U /*!< CCR: SCK Position */ +#define CCR_SCK_Msk (0x3UL << CCR_SCK_Pos) /*!< CCR: SCK Mask */ + +#define CCR_BE_Pos 7U /*!< CCR: BE Position */ +#define CCR_BE_Msk (0x1UL << CCR_BE_Pos) /*!< CCR: BE Mask */ + +#define CCR_MP_Pos 0U /*!< CCR: MP Position */ +#define CCR_MP_Msk (0x1UL << CCR_MP_Pos) /*!< CCR: MP Mask */ + + /** + \brief 访问可高缓和访问权限配置寄存器(CAPR, CR<19,0>)的联合体定义.. + */ + typedef union { + struct { + uint32_t X0: 1; /*!< bit: 0 不可执行属性设置位 */ + uint32_t X1: 1; /*!< bit: 1 不可执行属性设置位 */ + uint32_t X2: 1; /*!< bit: 2 不可执行属性设置位 */ + uint32_t X3: 1; /*!< bit: 3 不可执行属性设置位 */ + uint32_t X4: 1; /*!< bit: 4 不可执行属性设置位 */ + uint32_t X5: 1; /*!< bit: 5 不可执行属性设置位 */ + uint32_t X6: 1; /*!< bit: 6 不可执行属性设置位 */ + uint32_t X7: 1; /*!< bit: 7 不可执行属性设置位 */ + uint32_t AP0: 2; /*!< bit: 8.. 9 访问权限设置位 */ + uint32_t AP1: 2; /*!< bit: 10..11 访问权限设置位 */ + uint32_t AP2: 2; /*!< bit: 12..13 访问权限设置位 */ + uint32_t AP3: 2; /*!< bit: 14..15 访问权限设置位 */ + uint32_t AP4: 2; /*!< bit: 16..17 访问权限设置位 */ + uint32_t AP5: 2; /*!< bit: 18..19 访问权限设置位 */ + uint32_t AP6: 2; /*!< bit: 20..21 访问权限设置位 */ + uint32_t AP7: 2; /*!< bit: 22..23 访问权限设置位 */ + uint32_t S0: 1; /*!< bit: 24 安全属性设置位 */ + uint32_t S1: 1; /*!< bit: 25 安全属性设置位 */ + uint32_t S2: 1; /*!< bit: 26 安全属性设置位 */ + uint32_t S3: 1; /*!< bit: 27 安全属性设置位 */ + uint32_t S4: 1; /*!< bit: 28 安全属性设置位 */ + uint32_t S5: 1; /*!< bit: 29 安全属性设置位 */ + uint32_t S6: 1; /*!< bit: 30 安全属性设置位 */ + uint32_t S7: 1; /*!< bit: 31 安全属性设置位 */ + } b; /*!< Structure 用来按位访问 */ + uint32_t w; /*!< Type 整个寄存器访问 */ + } CAPR_Type; + + /* CAPR Register Definitions */ +#define CAPR_S7_Pos 31U /*!< CAPR: S7 Position */ +#define CAPR_S7_Msk (1UL << CAPR_S7_Pos) /*!< CAPR: S7 Mask */ + +#define CAPR_S6_Pos 30U /*!< CAPR: S6 Position */ +#define CAPR_S6_Msk (1UL << CAPR_S6_Pos) /*!< CAPR: S6 Mask */ + +#define CAPR_S5_Pos 29U /*!< CAPR: S5 Position */ +#define CAPR_S5_Msk (1UL << CAPR_S5_Pos) /*!< CAPR: S5 Mask */ + +#define CAPR_S4_Pos 28U /*!< CAPR: S4 Position */ +#define CAPR_S4_Msk (1UL << CAPR_S4_Pos) /*!< CAPR: S4 Mask */ + +#define CAPR_S3_Pos 27U /*!< CAPR: S3 Position */ +#define CAPR_S3_Msk (1UL << CAPR_S3_Pos) /*!< CAPR: S3 Mask */ + +#define CAPR_S2_Pos 26U /*!< CAPR: S2 Position */ +#define CAPR_S2_Msk (1UL << CAPR_S2_Pos) /*!< CAPR: S2 Mask */ + +#define CAPR_S1_Pos 25U /*!< CAPR: S1 Position */ +#define CAPR_S1_Msk (1UL << CAPR_S1_Pos) /*!< CAPR: S1 Mask */ + +#define CAPR_S0_Pos 24U /*!< CAPR: S0 Position */ +#define CAPR_S0_Msk (1UL << CAPR_S0_Pos) /*!< CAPR: S0 Mask */ + +#define CAPR_AP7_Pos 22U /*!< CAPR: AP7 Position */ +#define CAPR_AP7_Msk (0x3UL << CAPR_AP7_Pos) /*!< CAPR: AP7 Mask */ + +#define CAPR_AP6_Pos 20U /*!< CAPR: AP6 Position */ +#define CAPR_AP6_Msk (0x3UL << CAPR_AP6_Pos) /*!< CAPR: AP6 Mask */ + +#define CAPR_AP5_Pos 18U /*!< CAPR: AP5 Position */ +#define CAPR_AP5_Msk (0x3UL << CAPR_AP5_Pos) /*!< CAPR: AP5 Mask */ + +#define CAPR_AP4_Pos 16U /*!< CAPR: AP4 Position */ +#define CAPR_AP4_Msk (0x3UL << CAPR_AP4_Pos) /*!< CAPR: AP4 Mask */ + +#define CAPR_AP3_Pos 14U /*!< CAPR: AP3 Position */ +#define CAPR_AP3_Msk (0x3UL << CAPR_AP3_Pos) /*!< CAPR: AP3 Mask */ + +#define CAPR_AP2_Pos 12U /*!< CAPR: AP2 Position */ +#define CAPR_AP2_Msk (0x3UL << CAPR_AP2_Pos) /*!< CAPR: AP2 Mask */ + +#define CAPR_AP1_Pos 10U /*!< CAPR: AP1 Position */ +#define CAPR_AP1_Msk (0x3UL << CAPR_AP1_Pos) /*!< CAPR: AP1 Mask */ + +#define CAPR_AP0_Pos 8U /*!< CAPR: AP0 Position */ +#define CAPR_AP0_Msk (0x3UL << CAPR_AP0_Pos) /*!< CAPR: AP0 Mask */ + +#define CAPR_X7_Pos 7U /*!< CAPR: X7 Position */ +#define CAPR_X7_Msk (0x1UL << CAPR_X7_Pos) /*!< CAPR: X7 Mask */ + +#define CAPR_X6_Pos 6U /*!< CAPR: X6 Position */ +#define CAPR_X6_Msk (0x1UL << CAPR_X6_Pos) /*!< CAPR: X6 Mask */ + +#define CAPR_X5_Pos 5U /*!< CAPR: X5 Position */ +#define CAPR_X5_Msk (0x1UL << CAPR_X5_Pos) /*!< CAPR: X5 Mask */ + +#define CAPR_X4_Pos 4U /*!< CAPR: X4 Position */ +#define CAPR_X4_Msk (0x1UL << CAPR_X4_Pos) /*!< CAPR: X4 Mask */ + +#define CAPR_X3_Pos 3U /*!< CAPR: X3 Position */ +#define CAPR_X3_Msk (0x1UL << CAPR_X3_Pos) /*!< CAPR: X3 Mask */ + +#define CAPR_X2_Pos 2U /*!< CAPR: X2 Position */ +#define CAPR_X2_Msk (0x1UL << CAPR_X2_Pos) /*!< CAPR: X2 Mask */ + +#define CAPR_X1_Pos 1U /*!< CAPR: X1 Position */ +#define CAPR_X1_Msk (0x1UL << CAPR_X1_Pos) /*!< CAPR: X1 Mask */ + +#define CAPR_X0_Pos 0U /*!< CAPR: X0 Position */ +#define CAPR_X0_Msk (0x1UL << CAPR_X0_Pos) /*!< CAPR: X0 Mask */ + + /** + \brief 访问保护区控制寄存器(PACR, CR<20,0>)的联合体定义. + */ + typedef union { + struct { + uint32_t E: 1; /*!< bit: 0 保护区有效设置 */ + uint32_t Size: 5; /*!< bit: 1.. 5 保护区大小 */ + uint32_t _reserved0: 4; /*!< bit: 6.. 9 保留 */ + uint32_t base_addr: 22; /*!< bit: 10..31 保护区地址的高位 */ + } b; /*!< Structure 用来按位访问 */ + uint32_t w; /*!< Type 整个寄存器访问 */ + } PACR_Type; + + /* PACR Register Definitions */ +#define PACR_BASE_ADDR_Pos 10U /*!< PACR: base_addr Position */ +#define PACK_BASE_ADDR_Msk (0x3FFFFFUL << PACR_BASE_ADDR_Pos) /*!< PACR: base_addr Mask */ + +#define PACR_SIZE_Pos 1U /*!< PACR: Size Position */ +#define PACK_SIZE_Msk (0x1FUL << PACR_SIZE_Pos) /*!< PACR: Size Mask */ + +#define PACR_E_Pos 0U /*!< PACR: E Position */ +#define PACK_E_Msk (0x1UL << PACR_E_Pos) /*!< PACR: E Mask */ + + /** + \brief 访问保护区选择寄存器(PRSR,CR<21,0>)的联合体定义. + */ + typedef union { + struct { + uint32_t RID: 3; /*!< bit: 0.. 2 保护区索引值 */ + uint32_t _reserved0: 30; /*!< bit: 3..31 保留 */ + } b; /*!< Structure 用来按位访问 */ + uint32_t w; /*!< Type 整个寄存器访问 */ + } PRSR_Type; + + /* PRSR Register Definitions */ +#define PRSR_RID_Pos 0U /*!< PRSR: RID Position */ +#define PRSR_RID_Msk (0x7UL << PRSR_RID_Pos) /*!< PRSR: RID Mask */ + + /*@} end of group CSI_CORE */ + + + /** + \ingroup CSI_core_register + \defgroup CSI_NVIC Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + + /** + \brief 访问矢量中断控制器的结构体. + */ + typedef struct { + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) 中断使能设置寄存器 */ + uint32_t RESERVED0[15U]; + __IOM uint32_t IWER[1U]; /*!< Offset: 0x040 (R/W) 中断低功耗唤醒设置寄存器 */ + uint32_t RESERVED1[15U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) 中断使能清除寄存器 */ + uint32_t RESERVED2[15U]; + __IOM uint32_t IWDR[1U]; /*!< Offset: 0x0c0 (R/W) 中断低功耗唤醒清除寄存器 */ + uint32_t RESERVED3[15U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) 中断等待设置寄存器 */ + uint32_t RESERVED4[15U]; + __IOM uint32_t ISSR[1U]; /*!< Offset: 0x140 (R/W) 安全中断使能设置寄存器 */ + uint32_t RESERVED5[15U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) 中断等待清除寄存器 */ + uint32_t RESERVED6[31U]; + __IOM uint32_t IABR[1U]; /*!< Offset: 0x200 (R/W) 中断响应状态寄存器 */ + uint32_t RESERVED7[63U]; + __IOM uint32_t IPR[8U]; /*!< Offset: 0x300 (R/W) 中断优先级设置寄存器 */ + uint32_t RESERVED8[504U]; + __IM uint32_t ISR; /*!< Offset: 0xB00 (R/ ) 中断状态寄存器 */ + __IOM uint32_t IPTR; /*!< Offset: 0xB04 (R/W) 中断优先级阈值寄存器 */ + } NVIC_Type; + + /*@} end of group CSI_NVIC */ + + /** + \ingroup CSI_core_register + \defgroup CSI_SysTick System Tick Timer (CORET) + \brief Type definitions for the System Timer Registers. + @{ + */ + + /** + \brief 访问系统计时器的数据结构. + */ + typedef struct { + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) 控制状态寄存器 */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) 回填值寄存器 */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) 当前值寄存器 */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) 校准寄存器 */ + } CORET_Type; + + /* CORET Control / Status Register Definitions */ +#define CORET_CTRL_COUNTFLAG_Pos 16U /*!< CORET CTRL: COUNTFLAG Position */ +#define CORET_CTRL_COUNTFLAG_Msk (1UL << CORET_CTRL_COUNTFLAG_Pos) /*!< CORET CTRL: COUNTFLAG Mask */ + +#define CORET_CTRL_CLKSOURCE_Pos 2U /*!< CORET CTRL: CLKSOURCE Position */ +#define CORET_CTRL_CLKSOURCE_Msk (1UL << CORET_CTRL_CLKSOURCE_Pos) /*!< CORET CTRL: CLKSOURCE Mask */ + +#define CORET_CTRL_TICKINT_Pos 1U /*!< CORET CTRL: TICKINT Position */ +#define CORET_CTRL_TICKINT_Msk (1UL << CORET_CTRL_TICKINT_Pos) /*!< CORET CTRL: TICKINT Mask */ + +#define CORET_CTRL_ENABLE_Pos 0U /*!< CORET CTRL: ENABLE Position */ +#define CORET_CTRL_ENABLE_Msk (1UL /*<< CORET_CTRL_ENABLE_Pos*/) /*!< CORET CTRL: ENABLE Mask */ + + /* CORET Reload Register Definitions */ +#define CORET_LOAD_RELOAD_Pos 0U /*!< CORET LOAD: RELOAD Position */ +#define CORET_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< CORET_LOAD_RELOAD_Pos*/) /*!< CORET LOAD: RELOAD Mask */ + + /* CORET Current Register Definitions */ +#define CORET_VAL_CURRENT_Pos 0U /*!< CORET VAL: CURRENT Position */ +#define CORET_VAL_CURRENT_Msk (0xFFFFFFUL /*<< CORET_VAL_CURRENT_Pos*/) /*!< CORET VAL: CURRENT Mask */ + + /* CORET Calibration Register Definitions */ +#define CORET_CALIB_NOREF_Pos 31U /*!< CORET CALIB: NOREF Position */ +#define CORET_CALIB_NOREF_Msk (1UL << CORET_CALIB_NOREF_Pos) /*!< CORET CALIB: NOREF Mask */ + +#define CORET_CALIB_SKEW_Pos 30U /*!< CORET CALIB: SKEW Position */ +#define CORET_CALIB_SKEW_Msk (1UL << CORET_CALIB_SKEW_Pos) /*!< CORET CALIB: SKEW Mask */ + +#define CORET_CALIB_TENMS_Pos 0U /*!< CORET CALIB: TENMS Position */ +#define CORET_CALIB_TENMS_Msk (0xFFFFFFUL /*<< CORET_CALIB_TENMS_Pos*/) /*!< CORET CALIB: TENMS Mask */ + + /*@} end of group CSI_SysTick */ + + /** + \ingroup CSI_core_register + \defgroup CSI_DCC + \brief Type definitions for the DCC. + @{ + */ + + /** + \brief 访问DCC的数据结构. + */ + typedef struct { + uint32_t RESERVED0[13U]; + __IOM uint32_t HCR; /*!< Offset: 0x034 (R/W) */ + __IM uint32_t EHSR; /*!< Offset: 0x03C (R/ ) */ + uint32_t RESERVED1[6U]; + union { + __IM uint32_t DERJW; /*!< Offset: 0x058 (R/ ) 数据交换寄存器 CPU读*/ + __OM uint32_t DERJR; /*!< Offset: 0x058 ( /W) 数据交换寄存器 CPU写*/ + }; + + } DCC_Type; + +#define DCC_HCR_JW_Pos 18U /*!< DCC HCR: jw_int_en Position */ +#define DCC_HCR_JW_Msk (1UL << DCC_HCR_JW_Pos) /*!< DCC HCR: jw_int_en Mask */ + +#define DCC_HCR_JR_Pos 19U /*!< DCC HCR: jr_int_en Position */ +#define DCC_HCR_JR_Msk (1UL << DCC_HCR_JR_Pos) /*!< DCC HCR: jr_int_en Mask */ + +#define DCC_EHSR_JW_Pos 1U /*!< DCC EHSR: jw_vld Position */ +#define DCC_EHSR_JW_Msk (1UL << DCC_EHSR_JW_Pos) /*!< DCC EHSR: jw_vld Mask */ + +#define DCC_EHSR_JR_Pos 2U /*!< DCC EHSR: jr_vld Position */ +#define DCC_EHSR_JR_Msk (1UL << DCC_EHSR_JR_Pos) /*!< DCC EHSR: jr_vld Mask */ + + /*@} end of group CSI_DCC */ + + + /** + \ingroup CSI_core_register + \defgroup CSI_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + + /** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. + \return Masked and shifted value. + */ +#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk) + + /** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. + \return Masked and shifted bit field value. + */ +#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos) + + /*@} end of group CSI_core_bitfield */ + + /** + \ingroup CSI_core_register + \defgroup CSI_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + + /* Memory mapping of CK802 Hardware */ +#define TCIP_BASE (0xE000E000UL) /*!< Titly Coupled IP Base Address */ +#define CORET_BASE (TCIP_BASE + 0x0010UL) /*!< CORET Base Address */ +#define NVIC_BASE (TCIP_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define DCC_BASE (0xE0011000UL) /*!< DCC Base Address */ + +#define CORET ((CORET_Type *) CORET_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define DCC ((DCC_Type *) DCC_BASE ) /*!< DCC configuration struct */ + + /*@} */ + +/** + \brief Set Wake up Interrupt + \details Sets the wake up bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +void drv_nvic_set_wakeup_irq(int32_t IRQn); +void drv_nvic_clear_wakeup_irq(int32_t IRQn); + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CK802_H_DEPENDANT */ + +#endif /* __CSI_GENERIC */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/csi.mk b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/csi.mk new file mode 100644 index 000000000..824cbc631 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/csi.mk @@ -0,0 +1,7 @@ +TEE_INC += \ + -I$(CSI_DIR)/csi_core/include \ + -I$(CSI_DIR)/csi_core/ck802 \ + -I$(CSI_DIR)/csi_core/include/csi-gcc + +TEE_SRC += \ + $(CSI_DIR)/csi_core/ck802/core_ck802.c \ No newline at end of file diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/csi_core_dummy.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/csi_core_dummy.c new file mode 100644 index 000000000..a08fac9bf --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/csi_core_dummy.c @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file csi_core_dummy.c + * @brief CSI Core Layer Source File + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#include "csi_core.h" + +#define _WEAK_ __attribute__((weak)) + +/* ################################## NVIC function ############################################ */ + + +_WEAK_ void drv_nvic_init(uint32_t prio_bits) +{ + return; +} +_WEAK_ void drv_nvic_enable_irq(int32_t irq_num) +{ + return; +} +_WEAK_ void drv_nvic_disable_irq(int32_t irq_num) +{ + return; +} + +_WEAK_ uint32_t drv_nvic_get_pending_irq(int32_t irq_num) +{ + return 0; +} +_WEAK_ void drv_nvic_set_pending_irq(int32_t irq_num) +{ + return; +} +_WEAK_ void drv_nvic_clear_pending_irq(int32_t irq_num) +{ + return; +} +_WEAK_ uint32_t drv_nvic_get_active(int32_t irq_num) +{ + return 0; +} + +_WEAK_ void drv_nvic_set_prio(int32_t irq_num, uint32_t priority) +{ + return; +} +_WEAK_ uint32_t drv_nvic_get_prio(int32_t irq_num) +{ + return 0; +} +/* ########################## Cache functions #################################### */ + +_WEAK_ void drv_icache_enable(void) +{ + return; +} +_WEAK_ void drv_icache_disable(void) +{ + return; +} +_WEAK_ void drv_icache_invalid(void) +{ + return; +} +_WEAK_ void drv_dcache_enable(void) +{ + return; +} +_WEAK_ void drv_dcache_disable(void) +{ + return; +} +_WEAK_ void drv_dcache_invalid(void) +{ + return; +} +_WEAK_ void drv_dcache_clean(void) +{ + return; +} +_WEAK_ void drv_dcache_clean_invalid(void) +{ + return; +} +_WEAK_ void drv_dcache_invalid_range(uint32_t *addr, int32_t dsize) +{ + return; +} +_WEAK_ void drv_dcache_clean_range(uint32_t *addr, int32_t dsize) +{ + return; +} +_WEAK_ void drv_dcache_clean_invalid_range(uint32_t *addr, int32_t dsize) +{ + return; +} +_WEAK_ void drv_cache_set_range(uint32_t index, uint32_t baseAddr, uint32_t size, uint32_t enable) +{ + return; +} +_WEAK_ void drv_cache_enable_profile(void) +{ + return; +} +_WEAK_ void drv_cache_disable_profile(void) +{ + return; +} +_WEAK_ void drv_cache_reset_profile(void) +{ + return; +} +_WEAK_ uint32_t drv_cache_get_access_time(void) +{ + return 0; +} +_WEAK_ uint32_t drv_cache_get_miss_time(void) +{ + return 0; +} +/* ################################## SysTick function ############################################ */ + +_WEAK_ uint32_t drv_coret_config(uint32_t ticks, int32_t irq_num) +{ + return 0; +} + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_gcc.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_gcc.h new file mode 100644 index 000000000..51d9bf694 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_gcc.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file csi_gcc.h + * @brief CSI Header File for GCC. + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_GCC_H_ +#define _CSI_GCC_H_ + +#define __ASM __asm /*!< asm keyword for GNU Compiler */ +#define __INLINE inline /*!< inline keyword for GNU Compiler */ +#define __ALWAYS_INLINE __attribute__((always_inline)) static inline + +#include +#include "csi_reg.h" +#include "csi_instr.h" +#include "csi_simd.h" + +#endif /* _CSI_GCC_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_instr.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_instr.h new file mode 100644 index 000000000..f765c2910 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_instr.h @@ -0,0 +1,436 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file csi_instr.h + * @brief CSI Header File for instruct. + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_INSTR_H_ +#define _CSI_INSTR_H_ + + +#define __CSI_GCC_OUT_REG(r) "=r" (r) +#define __CSI_GCC_USE_REG(r) "r" (r) + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +__ALWAYS_INLINE void __NOP(void) +{ + __ASM volatile("nop"); +} + + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +__ALWAYS_INLINE void __WFI(void) +{ + __ASM volatile("wait"); +} + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one interrupt occurs. + */ +__ALWAYS_INLINE void __WAIT(void) +{ + __ASM volatile("wait"); +} + +/** + \brief Doze For Interrupt + \details Doze For Interrupt is a hint instruction that suspends execution until one interrupt occurs. + */ +__ALWAYS_INLINE void __DOZE(void) +{ + __ASM volatile("doze"); +} + +/** + \brief Stop For Interrupt + \details Stop For Interrupt is a hint instruction that suspends execution until one interrupt occurs. + */ +__ALWAYS_INLINE void __STOP(void) +{ + __ASM volatile("stop"); +} + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +__ALWAYS_INLINE void __ISB(void) +{ + __ASM volatile("sync"::: "memory"); +} + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__ALWAYS_INLINE void __DSB(void) +{ + __ASM volatile("sync"::: "memory"); +} + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__ALWAYS_INLINE void __DMB(void) +{ + __ASM volatile("sync"::: "memory"); +} + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in integer value. + \param [in] value Value to reverse + \return Reversed value + */ +__ALWAYS_INLINE uint32_t __REV(uint32_t value) +{ + return __builtin_bswap32(value); +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in two unsigned short values. + \param [in] value Value to reverse + \return Reversed value + */ +__ALWAYS_INLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; +#if (__CK80X >= 2) + __ASM volatile("revh %0, %1" : __CSI_GCC_OUT_REG(result) : __CSI_GCC_USE_REG(value)); +#else + result = ((value & 0xFF000000) >> 8) | ((value & 0x00FF0000) << 8) | + ((value & 0x0000FF00) >> 8) | ((value & 0x000000FF) << 8); +#endif + return (result); +} + + +/** + \brief Reverse byte order in signed short value + \details Reverses the byte order in a signed short value with sign extension to integer. + \param [in] value Value to reverse + \return Reversed value + */ +__ALWAYS_INLINE int32_t __REVSH(int32_t value) +{ + return (short)(((value & 0xFF00) >> 8) | ((value & 0x00FF) << 8)); +} + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__ALWAYS_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + */ +__ALWAYS_INLINE void __BKPT() +{ + __ASM volatile("bkpt"); +} + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +__ALWAYS_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + +#if (__CK80X >= 0x03U) + __ASM volatile("brev %0, %1" : "=r"(result) : "r"(value)); +#else + int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + + for (value >>= 1U; value; value >>= 1U) { + result <<= 1U; + result |= value & 1U; + s--; + } + + result <<= s; /* shift when v's highest bits are zero */ +#endif + return (result); +} + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __builtin_clz +/** + \details This function saturates a signed value. + \param [in] x Value to be saturated + \param [in] y Bit position to saturate to [1..32] + \return Saturated value. + */ +__ALWAYS_INLINE int32_t __SSAT(int32_t x, uint32_t y) +{ + int32_t posMax, negMin; + uint32_t i; + + posMax = 1; + + for (i = 0; i < (y - 1); i++) { + posMax = posMax * 2; + } + + if (x > 0) { + posMax = (posMax - 1); + + if (x > posMax) { + x = posMax; + } + +// x &= (posMax * 2 + 1); + } else { + negMin = -posMax; + + if (x < negMin) { + x = negMin; + } + +// x &= (posMax * 2 - 1); + } + + return (x); +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__ALWAYS_INLINE uint32_t __USAT(uint32_t value, uint32_t sat) +{ + uint32_t result; + + if ((((0xFFFFFFFF >> sat) << sat) & value) != 0) { + result = 0xFFFFFFFF >> (32 - sat); + } else { + result = value; + } + + return (result); +} + +/** + \brief Unsigned Saturate for internal use + \details Saturates an unsigned value, should not call directly. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__ALWAYS_INLINE uint32_t __IUSAT(uint32_t value, uint32_t sat) +{ + uint32_t result; + + if (value & 0x80000000) { /* only overflow set bit-31 */ + result = 0; + } else if ((((0xFFFFFFFF >> sat) << sat) & value) != 0) { + result = 0xFFFFFFFF >> (32 - sat); + } else { + result = value; + } + + return (result); +} + +/** + \brief Rotate Right with Extend + \details This function moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \note carry input will always 0. + \param [in] op1 Value to rotate + \return Rotated value + */ +__ALWAYS_INLINE uint32_t __RRX(uint32_t op1) +{ +#if (__CK80X >= 2) + uint32_t res = 0; + __ASM volatile("bgeni t0, 31\n\t" + "lsri %0, 1\n\t" + "movt %1, t0\n\t" + "or %1, %1, %0\n\t" + : "=r"(op1), "=r"(res): "0"(op1), "1"(res): "t0"); + return res; +#else + uint32_t res = 0; + __ASM volatile("movi r7, 0\n\t" + "bseti r7, 31\n\t" + "lsri %0, 1\n\t" + "bf 1f\n\t" + "mov %1, r7\n\t" + "1:\n\t" + "or %1, %1, %0\n\t" + : "=r"(op1), "=r"(res): "0"(op1), "1"(res): "r7"); + return res; +#endif +} + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] addr Pointer to location + \return value of type uint8_t at (*ptr) + */ +__ALWAYS_INLINE uint8_t __LDRBT(volatile uint8_t *addr) +{ + uint32_t result; +//#warning "__LDRBT" + __ASM volatile("ldb %0, (%1, 0)" : "=r"(result) : "r"(addr)); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] addr Pointer to location + \return value of type uint16_t at (*ptr) + */ +__ALWAYS_INLINE uint16_t __LDRHT(volatile uint16_t *addr) +{ + uint32_t result; + +//#warning "__LDRHT" + __ASM volatile("ldh %0, (%1, 0)" : "=r"(result) : "r"(addr)); + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] addr Pointer to location + \return value of type uint32_t at (*ptr) + */ +__ALWAYS_INLINE uint32_t __LDRT(volatile uint32_t *addr) +{ + uint32_t result; + +//#warning "__LDRT" + __ASM volatile("ldw %0, (%1, 0)" : "=r"(result) : "r"(addr)); + return (result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] addr Pointer to location + */ +__ALWAYS_INLINE void __STRBT(uint8_t value, volatile uint8_t *addr) +{ +//#warning "__STRBT" + __ASM volatile("stb %1, (%0, 0)" :: "r"(addr), "r"((uint32_t)value) : "memory"); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] addr Pointer to location + */ +__ALWAYS_INLINE void __STRHT(uint16_t value, volatile uint16_t *addr) +{ +//#warning "__STRHT" + __ASM volatile("sth %1, (%0, 0)" :: "r"(addr), "r"((uint32_t)value) : "memory"); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] addr Pointer to location + */ +__ALWAYS_INLINE void __STRT(uint32_t value, volatile uint32_t *addr) +{ +//#warning "__STRT" + __ASM volatile("stw %1, (%0, 0)" :: "r"(addr), "r"(value) : "memory"); +} + +/*@}*/ /* end of group CSI_Core_InstructionInterface */ + + +/* ########################## FPU functions #################################### */ + +/** + \brief get FPU type + \details returns the FPU type, always 0. + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__ALWAYS_INLINE uint32_t __get_FPUType(void) +{ + uint32_t result; + +#ifdef __CK610 + __ASM volatile("mfcr %0, cr13" : "=r"(result)); +#else + __ASM volatile("mfcr %0, cr<13, 0>" : "=r"(result)); +#endif + return 0; +} + + +#endif /* _CSI_INSTR_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_reg.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_reg.h new file mode 100644 index 000000000..458a0f652 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_reg.h @@ -0,0 +1,418 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file csi_reg.h + * @brief CSI Header File for reg. + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_REG_H_ +#define _CSI_REG_H_ + +#include + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by setting the IE-bit in the PSR. + Can only be executed in Privileged modes. + */ +__ALWAYS_INLINE void __enable_irq(void) +{ + __ASM volatile("psrset ie"); +} + + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by clearing the IE-bit in the PSR. + Can only be executed in Privileged modes. + */ +__ALWAYS_INLINE void __disable_irq(void) +{ + __ASM volatile("psrclr ie"); +} + +/** + \brief Get PSR + \details Returns the content of the PSR Register. + \return PSR Register value + */ +__ALWAYS_INLINE uint32_t __get_PSR(void) +{ + uint32_t result; + + __ASM volatile("mfcr %0, psr" : "=r"(result)); + return (result); +} + +/** + \brief Set PSR + \details Writes the given value to the PSR Register. + \param [in] psr PSR Register value to set + */ +__ALWAYS_INLINE void __set_PSR(uint32_t psr) +{ + __ASM volatile("mtcr %0, psr" : : "r"(psr)); +} + +/** + \brief Get SP + \details Returns the content of the SP Register. + \return SP Register value + */ +__ALWAYS_INLINE uint32_t __get_SP(void) +{ + uint32_t result; + + __ASM volatile("mov %0, sp" : "=r"(result)); + return (result); +} + +/** + \brief Set SP + \details Writes the given value to the SP Register. + \param [in] sp SP Register value to set + */ +__ALWAYS_INLINE void __set_SP(uint32_t sp) +{ + __ASM volatile("mov sp, %0" : : "r"(sp): "sp"); +} + + +/** + \brief Get VBR Register + \details Returns the content of the VBR Register. + \return VBR Register value + */ +__ALWAYS_INLINE uint32_t __get_VBR(void) +{ + uint32_t result; + + __ASM volatile("mfcr %0, vbr" : "=r"(result)); + return (result); +} + +/** + \brief Set VBR + \details Writes the given value to the VBR Register. + \param [in] vbr VBR Register value to set + */ +__ALWAYS_INLINE void __set_VBR(uint32_t vbr) +{ + __ASM volatile("mtcr %0, vbr" : : "r"(vbr)); +} + +/** + \brief Get EPC Register + \details Returns the content of the EPC Register. + \return EPC Register value + */ +__ALWAYS_INLINE uint32_t __get_EPC(void) +{ + uint32_t result; + + __ASM volatile("mfcr %0, epc" : "=r"(result)); + return (result); +} + +/** + \brief Set EPC + \details Writes the given value to the EPC Register. + \param [in] epc EPC Register value to set + */ +__ALWAYS_INLINE void __set_EPC(uint32_t epc) +{ + __ASM volatile("mtcr %0, epc" : : "r"(epc)); +} + +/** + \brief Get EPSR + \details Returns the content of the EPSR Register. + \return EPSR Register value + */ +__ALWAYS_INLINE uint32_t __get_EPSR(void) +{ + uint32_t result; + + __ASM volatile("mfcr %0, epsr" : "=r"(result)); + return (result); +} + +/** + \brief Set EPSR + \details Writes the given value to the EPSR Register. + \param [in] epsr EPSR Register value to set + */ +__ALWAYS_INLINE void __set_EPSR(uint32_t epsr) +{ + __ASM volatile("mtcr %0, epsr" : : "r"(epsr)); +} + +/** + \brief Get CPUID Register + \details Returns the content of the CPUID Register. + \return CPUID Register value + */ +__ALWAYS_INLINE uint32_t __get_CPUID(void) +{ + uint32_t result; + +#ifdef __CK610 + __ASM volatile("mfcr %0, cr13" : "=r"(result)); +#else + __ASM volatile("mfcr %0, cr<13, 0>" : "=r"(result)); +#endif + return (result); +} + +#if (__SOFTRESET_PRESENT == 1U) +/** + \brief Set SRCR + \details Assigns the given value to the SRCR. + \param [in] srcr SRCR value to set + */ +__ALWAYS_INLINE void __set_SRCR(uint32_t srcr) +{ + __ASM volatile("mtcr %0, cr<31, 0>\n" : : "r"(srcr)); +} +#endif /* __SOFTRESET_PRESENT == 1U */ + +#if (__MGU_PRESENT == 1U) +/** + \brief Get CCR + \details Returns the current value of the CCR. + \return CCR Register value + */ +__ALWAYS_INLINE uint32_t __get_CCR(void) +{ + register uint32_t result; + +#ifdef __CK610 + __ASM volatile("mfcr %0, cr18\n" : "=r"(result)); +#else + __ASM volatile("mfcr %0, cr<18, 0>\n" : "=r"(result)); +#endif + return (result); +} + + +/** + \brief Set CCR + \details Assigns the given value to the CCR. + \param [in] ccr CCR value to set + */ +__ALWAYS_INLINE void __set_CCR(uint32_t ccr) +{ +#ifdef __CK610 + __ASM volatile("mtcr %0, cr18\n" : : "r"(ccr)); +#else + __ASM volatile("mtcr %0, cr<18, 0>\n" : : "r"(ccr)); +#endif +} + + +/** + \brief Get CAPR + \details Returns the current value of the CAPR. + \return CAPR Register value + */ +__ALWAYS_INLINE uint32_t __get_CAPR(void) +{ + register uint32_t result; + +#ifdef __CK610 + __ASM volatile("mfcr %0, cr19\n" : "=r"(result)); +#else + __ASM volatile("mfcr %0, cr<19, 0>\n" : "=r"(result)); +#endif + return (result); +} + +/** + \brief Set CAPR + \details Assigns the given value to the CAPR. + \param [in] capr CAPR value to set + */ +__ALWAYS_INLINE void __set_CAPR(uint32_t capr) +{ +#ifdef __CK610 + __ASM volatile("mtcr %0, cr19\n" : : "r"(capr)); +#else + __ASM volatile("mtcr %0, cr<19, 0>\n" : : "r"(capr)); +#endif +} + + +/** + \brief Set PACR + \details Assigns the given value to the PACR. + + \param [in] pacr PACR value to set + */ +__ALWAYS_INLINE void __set_PACR(uint32_t pacr) +{ +#ifdef __CK610 + __ASM volatile("mtcr %0, cr20\n" : : "r"(pacr)); +#else + __ASM volatile("mtcr %0, cr<20, 0>\n" : : "r"(pacr)); +#endif +} + + +/** + \brief Get PACR + \details Returns the current value of PACR. + \return PACR value + */ +__ALWAYS_INLINE uint32_t __get_PACR(void) +{ + uint32_t result; + +#ifdef __CK610 + __ASM volatile("mfcr %0, cr20" : "=r"(result)); +#else + __ASM volatile("mfcr %0, cr<20, 0>" : "=r"(result)); +#endif + return (result); +} + +/** + \brief Set PRSR + \details Assigns the given value to the PRSR. + + \param [in] prsr PRSR value to set + */ +__ALWAYS_INLINE void __set_PRSR(uint32_t prsr) +{ +#ifdef __CK610 + __ASM volatile("mtcr %0, cr21\n" : : "r"(prsr)); +#else + __ASM volatile("mtcr %0, cr<21, 0>\n" : : "r"(prsr)); +#endif +} + +/** + \brief Get PRSR + \details Returns the current value of PRSR. + \return PRSR value + */ +__ALWAYS_INLINE uint32_t __get_PRSR(void) +{ + uint32_t result; + +#ifdef __CK610 + __ASM volatile("mfcr %0, cr21" : "=r"(result)); +#else + __ASM volatile("mfcr %0, cr<21, 0>" : "=r"(result)); +#endif + return (result); +} +#endif /* __MGU_PRESENT == 1U */ + +/** + \brief Get user sp + \details Returns the current value of user r14. + \return UR14 value + */ +__ALWAYS_INLINE uint32_t __get_UR14(void) +{ + uint32_t result; + +#ifdef __CK610 + __ASM volatile("mov %0, sp" : "=r"(result)); +#else + __ASM volatile("mfcr %0, cr<14, 1>" : "=r"(result)); +#endif + return (result); +} + +/** + \brief Enable interrupts and exceptions + \details Enables interrupts and exceptions by setting the IE-bit and EE-bit in the PSR. + Can only be executed in Privileged modes. + */ +__ALWAYS_INLINE void __enable_excp_irq(void) +{ + __ASM volatile("psrset ee, ie"); +} + + +/** + \brief Disable interrupts and exceptions + \details Disables interrupts and exceptions by clearing the IE-bit and EE-bit in the PSR. + Can only be executed in Privileged modes. + */ +__ALWAYS_INLINE void __disable_excp_irq(void) +{ + __ASM volatile("psrclr ee, ie"); +} + +#if (__GSR_GCR_PRESENT == 1U) +/** + \brief Get GSR + \details Returns the content of the GSR Register. + \return GSR Register value + */ +__ALWAYS_INLINE uint32_t __get_GSR(void) +{ + uint32_t result; + +#ifdef __CK610 + __ASM volatile("mfcr %0, cr12" : "=r"(result)); +#else + __ASM volatile("mfcr %0, cr<12, 0>" : "=r"(result)); +#endif + return (result); +} + +/** + \brief Get GCR + \details Returns the content of the GCR Register. + \return GCR Register value + */ +__ALWAYS_INLINE uint32_t __get_GCR(void) +{ + uint32_t result; + +#ifdef __CK610 + __ASM volatile("mfcr %0, cr11" : "=r"(result)); +#else + __ASM volatile("mfcr %0, cr<11, 0>" : "=r"(result)); +#endif + return (result); +} + +/** + \brief Set GCR + \details Writes the given value to the GCR Register. + \param [in] gcr GCR Register value to set + */ +__ALWAYS_INLINE void __set_GCR(uint32_t gcr) +{ +#ifdef __CK610 + __ASM volatile("mtcr %0, cr11" : : "r"(gcr)); +#else + __ASM volatile("mtcr %0, cr<11, 0>" : : "r"(gcr)); +#endif +} + +#endif /* (__GSR_GCR_PRESENT == 1U) */ + + +#endif /* _CSI_REG_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_simd.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_simd.h new file mode 100644 index 000000000..f9dc5b205 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi-gcc/csi_simd.h @@ -0,0 +1,1472 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file csi_simd.h + * @brief CSI Single Instruction Multiple Data (SIMD) Header File for GCC. + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_SIMD_H_ +#define _CSI_SIMD_H_ + + +/** + \brief Halfword packing instruction. Combines bits[15:0] of val1 with bits[31:16] + of val2 levitated with the val3. + \details Combine a halfword from one register with a halfword from another register. + The second argument can be left-shifted before extraction of the halfword. + \param [in] val1 first 16-bit operands + \param [in] val2 second 16-bit operands + \param [in] val3 value for left-shifting val2. Value range [0..31]. + \return the combination of halfwords. + \remark + res[15:0] = val1[15:0] \n + res[31:16] = val2[31:16] << val3 + */ +__ALWAYS_INLINE uint32_t __PKHBT(uint32_t val1, uint32_t val2, uint32_t val3) +{ + return ((((int32_t)(val1) << 0) & (int32_t)0x0000FFFF) | (((int32_t)(val2) << val3) & (int32_t)0xFFFF0000)); +} + +/** + \brief Halfword packing instruction. Combines bits[31:16] of val1 with bits[15:0] + of val2 right-shifted with the val3. + \details Combine a halfword from one register with a halfword from another register. + The second argument can be right-shifted before extraction of the halfword. + \param [in] val1 first 16-bit operands + \param [in] val2 second 16-bit operands + \param [in] val3 value for right-shifting val2. Value range [1..32]. + \return the combination of halfwords. + \remark + res[15:0] = val2[15:0] >> val3 \n + res[31:16] = val1[31:16] + */ +__ALWAYS_INLINE uint32_t __PKHTB(uint32_t val1, uint32_t val2, uint32_t val3) +{ + return ((((int32_t)(val1) << 0) & (int32_t)0xFFFF0000) | (((int32_t)(val2) >> val3) & (int32_t)0x0000FFFF)); +} + +/** + \brief Dual 16-bit signed saturate. + \details This function saturates a signed value. + \param [in] x two signed 16-bit values to be saturated. + \param [in] y bit position for saturation, an integral constant expression in the range 1 to 16. + \return the sum of the absolute differences of the following bytes, added to the accumulation value:\n + the signed saturation of the low halfword in val1, saturated to the bit position specified in + val2 and returned in the low halfword of the return value.\n + the signed saturation of the high halfword in val1, saturated to the bit position specified in + val2 and returned in the high halfword of the return value. + */ +__ALWAYS_INLINE uint32_t __SSAT16(int32_t x, const uint32_t y) +{ + int32_t r = 0, s = 0; + + r = __SSAT((((int32_t)x << 16) >> 16), y) & (int32_t)0x0000FFFF; + s = __SSAT((((int32_t)x) >> 16), y) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned saturate. + \details This function enables you to saturate two signed 16-bit values to a selected unsigned range. + \param [in] x two signed 16-bit values to be saturated. + \param [in] y bit position for saturation, an integral constant expression in the range 1 to 16. + \return the saturation of the two signed 16-bit values, as non-negative values: + the saturation of the low halfword in val1, saturated to the bit position specified in + val2 and returned in the low halfword of the return value.\n + the saturation of the high halfword in val1, saturated to the bit position specified in + val2 and returned in the high halfword of the return value. + */ +__ALWAYS_INLINE uint32_t __USAT16(uint32_t x, const uint32_t y) +{ + int32_t r = 0, s = 0; + + r = __IUSAT(((x << 16) >> 16), y) & 0x0000FFFF; + s = __IUSAT(((x) >> 16), y) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Quad 8-bit saturating addition. + \details This function enables you to perform four 8-bit integer additions, + saturating the results to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1. + \param [in] x first four 8-bit summands. + \param [in] y second four 8-bit summands. + \return the saturated addition of the first byte of each operand in the first byte of the return value.\n + the saturated addition of the second byte of each operand in the second byte of the return value.\n + the saturated addition of the third byte of each operand in the third byte of the return value.\n + the saturated addition of the fourth byte of each operand in the fourth byte of the return value.\n + The returned results are saturated to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1. + \remark + res[7:0] = val1[7:0] + val2[7:0] \n + res[15:8] = val1[15:8] + val2[15:8] \n + res[23:16] = val1[23:16] + val2[23:16] \n + res[31:24] = val1[31:24] + val2[31:24] + */ +__ALWAYS_INLINE uint32_t __QADD8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = __SSAT(((((int32_t)x << 24) >> 24) + (((int32_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; + s = __SSAT(((((int32_t)x << 16) >> 24) + (((int32_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; + t = __SSAT(((((int32_t)x << 8) >> 24) + (((int32_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; + u = __SSAT(((((int32_t)x) >> 24) + (((int32_t)y) >> 24)), 8) & (int32_t)0x000000FF; + + return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r))); +} + +/** + \brief Quad 8-bit unsigned saturating addition. + \details This function enables you to perform four unsigned 8-bit integer additions, + saturating the results to the 8-bit unsigned integer range 0 < x < 2^8 - 1. + \param [in] x first four 8-bit summands. + \param [in] y second four 8-bit summands. + \return the saturated addition of the first byte of each operand in the first byte of the return value.\n + the saturated addition of the second byte of each operand in the second byte of the return value.\n + the saturated addition of the third byte of each operand in the third byte of the return value.\n + the saturated addition of the fourth byte of each operand in the fourth byte of the return value.\n + The returned results are saturated to the 8-bit signed integer range 0 <= x <= 2^8 - 1. + \remark + res[7:0] = val1[7:0] + val2[7:0] \n + res[15:8] = val1[15:8] + val2[15:8] \n + res[23:16] = val1[23:16] + val2[23:16] \n + res[31:24] = val1[31:24] + val2[31:24] + */ +__ALWAYS_INLINE uint32_t __UQADD8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = __IUSAT((((x << 24) >> 24) + ((y << 24) >> 24)), 8) & 0x000000FF; + s = __IUSAT((((x << 16) >> 24) + ((y << 16) >> 24)), 8) & 0x000000FF; + t = __IUSAT((((x << 8) >> 24) + ((y << 8) >> 24)), 8) & 0x000000FF; + u = __IUSAT((((x) >> 24) + ((y) >> 24)), 8) & 0x000000FF; + + return ((u << 24) | (t << 16) | (s << 8) | (r)); +} + +/** + \brief Quad 8-bit signed addition. + \details This function performs four 8-bit signed integer additions. + \param [in] x first four 8-bit summands. + \param [in] y second four 8-bit summands. + \return the addition of the first bytes from each operand, in the first byte of the return value.\n + the addition of the second bytes of each operand, in the second byte of the return value.\n + the addition of the third bytes of each operand, in the third byte of the return value.\n + the addition of the fourth bytes of each operand, in the fourth byte of the return value. + \remark + res[7:0] = val1[7:0] + val2[7:0] \n + res[15:8] = val1[15:8] + val2[15:8] \n + res[23:16] = val1[23:16] + val2[23:16] \n + res[31:24] = val1[31:24] + val2[31:24] + */ +__ALWAYS_INLINE uint32_t __SADD8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = ((((int32_t)x << 24) >> 24) + (((int32_t)y << 24) >> 24)) & (int32_t)0x000000FF; + s = ((((int32_t)x << 16) >> 24) + (((int32_t)y << 16) >> 24)) & (int32_t)0x000000FF; + t = ((((int32_t)x << 8) >> 24) + (((int32_t)y << 8) >> 24)) & (int32_t)0x000000FF; + u = ((((int32_t)x) >> 24) + (((int32_t)y) >> 24)) & (int32_t)0x000000FF; + + return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r))); +} + +/** + \brief Quad 8-bit unsigned addition. + \details This function performs four unsigned 8-bit integer additions. + \param [in] x first four 8-bit summands. + \param [in] y second four 8-bit summands. + \return the addition of the first bytes from each operand, in the first byte of the return value.\n + the addition of the second bytes of each operand, in the second byte of the return value.\n + the addition of the third bytes of each operand, in the third byte of the return value.\n + the addition of the fourth bytes of each operand, in the fourth byte of the return value. + \remark + res[7:0] = val1[7:0] + val2[7:0] \n + res[15:8] = val1[15:8] + val2[15:8] \n + res[23:16] = val1[23:16] + val2[23:16] \n + res[31:24] = val1[31:24] + val2[31:24] + */ +__ALWAYS_INLINE uint32_t __UADD8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = (((x << 24) >> 24) + ((y << 24) >> 24)) & 0x000000FF; + s = (((x << 16) >> 24) + ((y << 16) >> 24)) & 0x000000FF; + t = (((x << 8) >> 24) + ((y << 8) >> 24)) & 0x000000FF; + u = (((x) >> 24) + ((y) >> 24)) & 0x000000FF; + + return ((u << 24) | (t << 16) | (s << 8) | (r)); +} + +/** + \brief Quad 8-bit saturating subtract. + \details This function enables you to perform four 8-bit integer subtractions, + saturating the results to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1. + \param [in] x first four 8-bit summands. + \param [in] y second four 8-bit summands. + \return the subtraction of the first byte of each operand in the first byte of the return value.\n + the subtraction of the second byte of each operand in the second byte of the return value.\n + the subtraction of the third byte of each operand in the third byte of the return value.\n + the subtraction of the fourth byte of each operand in the fourth byte of the return value.\n + The returned results are saturated to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1. + \remark + res[7:0] = val1[7:0] - val2[7:0] \n + res[15:8] = val1[15:8] - val2[15:8] \n + res[23:16] = val1[23:16] - val2[23:16] \n + res[31:24] = val1[31:24] - val2[31:24] + */ +__ALWAYS_INLINE uint32_t __QSUB8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = __SSAT(((((int32_t)x << 24) >> 24) - (((int32_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; + s = __SSAT(((((int32_t)x << 16) >> 24) - (((int32_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; + t = __SSAT(((((int32_t)x << 8) >> 24) - (((int32_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; + u = __SSAT(((((int32_t)x) >> 24) - (((int32_t)y) >> 24)), 8) & (int32_t)0x000000FF; + + return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r))); +} + +/** + \brief Quad 8-bit unsigned saturating subtraction. + \details This function enables you to perform four unsigned 8-bit integer subtractions, + saturating the results to the 8-bit unsigned integer range 0 < x < 2^8 - 1. + \param [in] x first four 8-bit summands. + \param [in] y second four 8-bit summands. + \return the subtraction of the first byte of each operand in the first byte of the return value.\n + the subtraction of the second byte of each operand in the second byte of the return value.\n + the subtraction of the third byte of each operand in the third byte of the return value.\n + the subtraction of the fourth byte of each operand in the fourth byte of the return value.\n + The returned results are saturated to the 8-bit unsigned integer range 0 <= x <= 2^8 - 1. + \remark + res[7:0] = val1[7:0] - val2[7:0] \n + res[15:8] = val1[15:8] - val2[15:8] \n + res[23:16] = val1[23:16] - val2[23:16] \n + res[31:24] = val1[31:24] - val2[31:24] + */ +__ALWAYS_INLINE uint32_t __UQSUB8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = __IUSAT((((x << 24) >> 24) - ((y << 24) >> 24)), 8) & 0x000000FF; + s = __IUSAT((((x << 16) >> 24) - ((y << 16) >> 24)), 8) & 0x000000FF; + t = __IUSAT((((x << 8) >> 24) - ((y << 8) >> 24)), 8) & 0x000000FF; + u = __IUSAT((((x) >> 24) - ((y) >> 24)), 8) & 0x000000FF; + + return ((u << 24) | (t << 16) | (s << 8) | (r)); +} + +/** + \brief Quad 8-bit signed subtraction. + \details This function enables you to perform four 8-bit signed integer subtractions. + \param [in] x first four 8-bit operands of each subtraction. + \param [in] y second four 8-bit operands of each subtraction. + \return the subtraction of the first bytes from each operand, in the first byte of the return value.\n + the subtraction of the second bytes of each operand, in the second byte of the return value.\n + the subtraction of the third bytes of each operand, in the third byte of the return value.\n + the subtraction of the fourth bytes of each operand, in the fourth byte of the return value. + \remark + res[7:0] = val1[7:0] - val2[7:0] \n + res[15:8] = val1[15:8] - val2[15:8] \n + res[23:16] = val1[23:16] - val2[23:16] \n + res[31:24] = val1[31:24] - val2[31:24] + */ +__ALWAYS_INLINE uint32_t __SSUB8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = ((((int32_t)x << 24) >> 24) - (((int32_t)y << 24) >> 24)) & (int32_t)0x000000FF; + s = ((((int32_t)x << 16) >> 24) - (((int32_t)y << 16) >> 24)) & (int32_t)0x000000FF; + t = ((((int32_t)x << 8) >> 24) - (((int32_t)y << 8) >> 24)) & (int32_t)0x000000FF; + u = ((((int32_t)x) >> 24) - (((int32_t)y) >> 24)) & (int32_t)0x000000FF; + + return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r))); +} + +/** + \brief Quad 8-bit unsigned subtract. + \details This function enables you to perform four 8-bit unsigned integer subtractions. + \param [in] x first four 8-bit operands of each subtraction. + \param [in] y second four 8-bit operands of each subtraction. + \return the subtraction of the first bytes from each operand, in the first byte of the return value.\n + the subtraction of the second bytes of each operand, in the second byte of the return value.\n + the subtraction of the third bytes of each operand, in the third byte of the return value.\n + the subtraction of the fourth bytes of each operand, in the fourth byte of the return value. + \remark + res[7:0] = val1[7:0] - val2[7:0] \n + res[15:8] = val1[15:8] - val2[15:8] \n + res[23:16] = val1[23:16] - val2[23:16] \n + res[31:24] = val1[31:24] - val2[31:24] + */ +__ALWAYS_INLINE uint32_t __USUB8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = (((x << 24) >> 24) - ((y << 24) >> 24)) & 0x000000FF; + s = (((x << 16) >> 24) - ((y << 16) >> 24)) & 0x000000FF; + t = (((x << 8) >> 24) - ((y << 8) >> 24)) & 0x000000FF; + u = (((x) >> 24) - ((y) >> 24)) & 0x000000FF; + + return ((u << 24) | (t << 16) | (s << 8) | (r)); +} + +/** + \brief Unsigned sum of quad 8-bit unsigned absolute difference. + \details This function enables you to perform four unsigned 8-bit subtractions, and add the absolute values + of the differences together, returning the result as a single unsigned integer. + \param [in] x first four 8-bit operands of each subtraction. + \param [in] y second four 8-bit operands of each subtraction. + \return the subtraction of the first bytes from each operand, in the first byte of the return value.\n + the subtraction of the second bytes of each operand, in the second byte of the return value.\n + the subtraction of the third bytes of each operand, in the third byte of the return value.\n + the subtraction of the fourth bytes of each operand, in the fourth byte of the return value.\n + The sum is returned as a single unsigned integer. + \remark + absdiff1 = val1[7:0] - val2[7:0] \n + absdiff2 = val1[15:8] - val2[15:8] \n + absdiff3 = val1[23:16] - val2[23:16] \n + absdiff4 = val1[31:24] - val2[31:24] \n + res[31:0] = absdiff1 + absdiff2 + absdiff3 + absdiff4 + */ +__ALWAYS_INLINE uint32_t __USAD8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = (((x << 24) >> 24) - ((y << 24) >> 24)) & 0x000000FF; + s = (((x << 16) >> 24) - ((y << 16) >> 24)) & 0x000000FF; + t = (((x << 8) >> 24) - ((y << 8) >> 24)) & 0x000000FF; + u = (((x) >> 24) - ((y) >> 24)) & 0x000000FF; + + return (u + t + s + r); +} + +/** + \brief Unsigned sum of quad 8-bit unsigned absolute difference with 32-bit accumulate. + \details This function enables you to perform four unsigned 8-bit subtractions, and add the absolute values + of the differences to a 32-bit accumulate operand. + \param [in] x first four 8-bit operands of each subtraction. + \param [in] y second four 8-bit operands of each subtraction. + \param [in] sum accumulation value. + \return the sum of the absolute differences of the following bytes, added to the accumulation value: + the subtraction of the first bytes from each operand, in the first byte of the return value.\n + the subtraction of the second bytes of each operand, in the second byte of the return value.\n + the subtraction of the third bytes of each operand, in the third byte of the return value.\n + the subtraction of the fourth bytes of each operand, in the fourth byte of the return value. + \remark + absdiff1 = val1[7:0] - val2[7:0] \n + absdiff2 = val1[15:8] - val2[15:8] \n + absdiff3 = val1[23:16] - val2[23:16] \n + absdiff4 = val1[31:24] - val2[31:24] \n + sum = absdiff1 + absdiff2 + absdiff3 + absdiff4 \n + res[31:0] = sum[31:0] + val3[31:0] + */ +__ALWAYS_INLINE uint32_t __USADA8(uint32_t x, uint32_t y, uint32_t sum) +{ + int32_t r, s, t, u; + + r = (abs(((x << 24) >> 24) - ((y << 24) >> 24))) & 0x000000FF; + s = (abs(((x << 16) >> 24) - ((y << 16) >> 24))) & 0x000000FF; + t = (abs(((x << 8) >> 24) - ((y << 8) >> 24))) & 0x000000FF; + u = (abs(((x) >> 24) - ((y) >> 24))) & 0x000000FF; + + return (u + t + s + r + sum); +} + +/** + \brief Dual 16-bit saturating addition. + \details This function enables you to perform two 16-bit integer arithmetic additions in parallel, + saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1. + \param [in] x first two 16-bit summands. + \param [in] y second two 16-bit summands. + \return the saturated addition of the low halfwords, in the low halfword of the return value.\n + the saturated addition of the high halfwords, in the high halfword of the return value.\n + The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1. + \remark + res[15:0] = val1[15:0] + val2[15:0] \n + res[31:16] = val1[31:16] + val2[31:16] + */ +__ALWAYS_INLINE uint32_t __QADD16(uint32_t x, uint32_t y) +{ + int32_t r = 0, s = 0; + + r = __SSAT(((((int32_t)x << 16) >> 16) + (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((int32_t)x) >> 16) + (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned saturating addition. + \details This function enables you to perform two unsigned 16-bit integer additions, saturating + the results to the 16-bit unsigned integer range 0 < x < 2^16 - 1. + \param [in] x first two 16-bit summands. + \param [in] y second two 16-bit summands. + \return the saturated addition of the low halfwords, in the low halfword of the return value.\n + the saturated addition of the high halfwords, in the high halfword of the return value.\n + The results are saturated to the 16-bit unsigned integer range 0 < x < 2^16 - 1. + \remark + res[15:0] = val1[15:0] + val2[15:0] \n + res[31:16] = val1[31:16] + val2[31:16] + */ +__ALWAYS_INLINE uint32_t __UQADD16(uint32_t x, uint32_t y) +{ + int32_t r = 0, s = 0; + + r = __IUSAT((((x << 16) >> 16) + ((y << 16) >> 16)), 16) & 0x0000FFFF; + s = __IUSAT((((x) >> 16) + ((y) >> 16)), 16) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Dual 16-bit signed addition. + \details This function enables you to perform two 16-bit signed integer additions. + \param [in] x first two 16-bit summands. + \param [in] y second two 16-bit summands. + \return the addition of the low halfwords in the low halfword of the return value.\n + the addition of the high halfwords in the high halfword of the return value. + \remark + res[15:0] = val1[15:0] + val2[15:0] \n + res[31:16] = val1[31:16] + val2[31:16] + */ +__ALWAYS_INLINE uint32_t __SADD16(uint32_t x, uint32_t y) +{ + int32_t r = 0, s = 0; + + r = ((((int32_t)x << 16) >> 16) + (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF; + s = ((((int32_t)x) >> 16) + (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned addition + \details This function enables you to perform two 16-bit unsigned integer additions. + \param [in] x first two 16-bit summands for each addition. + \param [in] y second two 16-bit summands for each addition. + \return the addition of the low halfwords in the low halfword of the return value.\n + the addition of the high halfwords in the high halfword of the return value. + \remark + res[15:0] = val1[15:0] + val2[15:0] \n + res[31:16] = val1[31:16] + val2[31:16] + */ +__ALWAYS_INLINE uint32_t __UADD16(uint32_t x, uint32_t y) +{ + int32_t r = 0, s = 0; + + r = (((x << 16) >> 16) + ((y << 16) >> 16)) & 0x0000FFFF; + s = (((x) >> 16) + ((y) >> 16)) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + + +/** + \brief Dual 16-bit signed addition with halved results. + \details This function enables you to perform two signed 16-bit integer additions, halving the results. + \param [in] x first two 16-bit summands. + \param [in] y second two 16-bit summands. + \return the halved addition of the low halfwords, in the low halfword of the return value.\n + the halved addition of the high halfwords, in the high halfword of the return value. + \remark + res[15:0] = (val1[15:0] + val2[15:0]) >> 1 \n + res[31:16] = (val1[31:16] + val2[31:16]) >> 1 + */ +__ALWAYS_INLINE uint32_t __SHADD16(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = (((((int32_t)x << 16) >> 16) + (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((int32_t)x) >> 16) + (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned addition with halved results. + \details This function enables you to perform two unsigned 16-bit integer additions, halving the results. + \param [in] x first two 16-bit summands. + \param [in] y second two 16-bit summands. + \return the halved addition of the low halfwords, in the low halfword of the return value.\n + the halved addition of the high halfwords, in the high halfword of the return value. + \remark + res[15:0] = (val1[15:0] + val2[15:0]) >> 1 \n + res[31:16] = (val1[31:16] + val2[31:16]) >> 1 + */ +__ALWAYS_INLINE uint32_t __UHADD16(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = ((((x << 16) >> 16) + ((y << 16) >> 16)) >> 1) & 0x0000FFFF; + s = ((((x) >> 16) + ((y) >> 16)) >> 1) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Quad 8-bit signed addition with halved results. + \details This function enables you to perform four signed 8-bit integer additions, halving the results. + \param [in] x first four 8-bit summands. + \param [in] y second four 8-bit summands. + \return the halved addition of the first bytes from each operand, in the first byte of the return value.\n + the halved addition of the second bytes from each operand, in the second byte of the return value.\n + the halved addition of the third bytes from each operand, in the third byte of the return value.\n + the halved addition of the fourth bytes from each operand, in the fourth byte of the return value. + \remark + res[7:0] = (val1[7:0] + val2[7:0] ) >> 1 \n + res[15:8] = (val1[15:8] + val2[15:8] ) >> 1 \n + res[23:16] = (val1[23:16] + val2[23:16]) >> 1 \n + res[31:24] = (val1[31:24] + val2[31:24]) >> 1 + */ +__ALWAYS_INLINE uint32_t __SHADD8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = (((((int32_t)x << 24) >> 24) + (((int32_t)y << 24) >> 24)) >> 1) & (int32_t)0x000000FF; + s = (((((int32_t)x << 16) >> 24) + (((int32_t)y << 16) >> 24)) >> 1) & (int32_t)0x000000FF; + t = (((((int32_t)x << 8) >> 24) + (((int32_t)y << 8) >> 24)) >> 1) & (int32_t)0x000000FF; + u = (((((int32_t)x) >> 24) + (((int32_t)y) >> 24)) >> 1) & (int32_t)0x000000FF; + + return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r))); +} + +/** + \brief Quad 8-bit unsigned addition with halved results. + \details This function enables you to perform four unsigned 8-bit integer additions, halving the results. + \param [in] x first four 8-bit summands. + \param [in] y second four 8-bit summands. + \return the halved addition of the first bytes from each operand, in the first byte of the return value.\n + the halved addition of the second bytes from each operand, in the second byte of the return value.\n + the halved addition of the third bytes from each operand, in the third byte of the return value.\n + the halved addition of the fourth bytes from each operand, in the fourth byte of the return value. + \remark + res[7:0] = (val1[7:0] + val2[7:0] ) >> 1 \n + res[15:8] = (val1[15:8] + val2[15:8] ) >> 1 \n + res[23:16] = (val1[23:16] + val2[23:16]) >> 1 \n + res[31:24] = (val1[31:24] + val2[31:24]) >> 1 + */ +__ALWAYS_INLINE uint32_t __UHADD8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = ((((x << 24) >> 24) + ((y << 24) >> 24)) >> 1) & 0x000000FF; + s = ((((x << 16) >> 24) + ((y << 16) >> 24)) >> 1) & 0x000000FF; + t = ((((x << 8) >> 24) + ((y << 8) >> 24)) >> 1) & 0x000000FF; + u = ((((x) >> 24) + ((y) >> 24)) >> 1) & 0x000000FF; + + return ((u << 24) | (t << 16) | (s << 8) | (r)); +} + +/** + \brief Dual 16-bit saturating subtract. + \details This function enables you to perform two 16-bit integer subtractions in parallel, + saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1. + \param [in] x first two 16-bit summands. + \param [in] y second two 16-bit summands. + \return the saturated subtraction of the low halfwords, in the low halfword of the return value.\n + the saturated subtraction of the high halfwords, in the high halfword of the return value.\n + The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1. + \remark + res[15:0] = val1[15:0] - val2[15:0] \n + res[31:16] = val1[31:16] - val2[31:16] + */ +__ALWAYS_INLINE uint32_t __QSUB16(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = __SSAT(((((int32_t)x << 16) >> 16) - (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((int32_t)x) >> 16) - (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned saturating subtraction. + \details This function enables you to perform two unsigned 16-bit integer subtractions, + saturating the results to the 16-bit unsigned integer range 0 < x < 2^16 - 1. + \param [in] x first two 16-bit operands for each subtraction. + \param [in] y second two 16-bit operands for each subtraction. + \return the saturated subtraction of the low halfwords, in the low halfword of the return value.\n + the saturated subtraction of the high halfwords, in the high halfword of the return value.\n + The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1. + \remark + res[15:0] = val1[15:0] - val2[15:0] \n + res[31:16] = val1[31:16] - val2[31:16] + */ +__ALWAYS_INLINE uint32_t __UQSUB16(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = __IUSAT((((x << 16) >> 16) - ((y << 16) >> 16)), 16) & 0x0000FFFF; + s = __IUSAT((((x) >> 16) - ((y) >> 16)), 16) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Dual 16-bit signed subtraction. + \details This function enables you to perform two 16-bit signed integer subtractions. + \param [in] x first two 16-bit operands of each subtraction. + \param [in] y second two 16-bit operands of each subtraction. + \return the subtraction of the low halfword in the second operand from the low + halfword in the first operand, in the low halfword of the return value. \n + the subtraction of the high halfword in the second operand from the high + halfword in the first operand, in the high halfword of the return value. + \remark + res[15:0] = val1[15:0] - val2[15:0] \n + res[31:16] = val1[31:16] - val2[31:16] + */ +__ALWAYS_INLINE uint32_t __SSUB16(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = ((((int32_t)x << 16) >> 16) - (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF; + s = ((((int32_t)x) >> 16) - (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned subtract. + \details This function enables you to perform two 16-bit unsigned integer subtractions. + \param [in] x first two 16-bit operands of each subtraction. + \param [in] y second two 16-bit operands of each subtraction. + \return the subtraction of the low halfword in the second operand from the low + halfword in the first operand, in the low halfword of the return value. \n + the subtraction of the high halfword in the second operand from the high + halfword in the first operand, in the high halfword of the return value. + \remark + res[15:0] = val1[15:0] - val2[15:0] \n + res[31:16] = val1[31:16] - val2[31:16] + */ +__ALWAYS_INLINE uint32_t __USUB16(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = (((x << 16) >> 16) - ((y << 16) >> 16)) & 0x0000FFFF; + s = (((x) >> 16) - ((y) >> 16)) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Dual 16-bit signed subtraction with halved results. + \details This function enables you to perform two signed 16-bit integer subtractions, halving the results. + \param [in] x first two 16-bit summands. + \param [in] y second two 16-bit summands. + \return the halved subtraction of the low halfwords, in the low halfword of the return value.\n + the halved subtraction of the high halfwords, in the high halfword of the return value. + \remark + res[15:0] = (val1[15:0] - val2[15:0]) >> 1 \n + res[31:16] = (val1[31:16] - val2[31:16]) >> 1 + */ +__ALWAYS_INLINE uint32_t __SHSUB16(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = (((((int32_t)x << 16) >> 16) - (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((int32_t)x) >> 16) - (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned subtraction with halved results. + \details This function enables you to perform two unsigned 16-bit integer subtractions, halving the results. + \param [in] x first two 16-bit summands. + \param [in] y second two 16-bit summands. + \return the halved subtraction of the low halfwords, in the low halfword of the return value.\n + the halved subtraction of the high halfwords, in the high halfword of the return value. + \remark + res[15:0] = (val1[15:0] - val2[15:0]) >> 1 \n + res[31:16] = (val1[31:16] - val2[31:16]) >> 1 + */ +__ALWAYS_INLINE uint32_t __UHSUB16(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = ((((x << 16) >> 16) - ((y << 16) >> 16)) >> 1) & 0x0000FFFF; + s = ((((x) >> 16) - ((y) >> 16)) >> 1) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Quad 8-bit signed addition with halved results. + \details This function enables you to perform four signed 8-bit integer subtractions, halving the results. + \param [in] x first four 8-bit summands. + \param [in] y second four 8-bit summands. + \return the halved subtraction of the first bytes from each operand, in the first byte of the return value.\n + the halved subtraction of the second bytes from each operand, in the second byte of the return value.\n + the halved subtraction of the third bytes from each operand, in the third byte of the return value.\n + the halved subtraction of the fourth bytes from each operand, in the fourth byte of the return value. + \remark + res[7:0] = (val1[7:0] - val2[7:0] ) >> 1 \n + res[15:8] = (val1[15:8] - val2[15:8] ) >> 1 \n + res[23:16] = (val1[23:16] - val2[23:16]) >> 1 \n + res[31:24] = (val1[31:24] - val2[31:24]) >> 1 + */ +__ALWAYS_INLINE uint32_t __SHSUB8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = (((((int32_t)x << 24) >> 24) - (((int32_t)y << 24) >> 24)) >> 1) & (int32_t)0x000000FF; + s = (((((int32_t)x << 16) >> 24) - (((int32_t)y << 16) >> 24)) >> 1) & (int32_t)0x000000FF; + t = (((((int32_t)x << 8) >> 24) - (((int32_t)y << 8) >> 24)) >> 1) & (int32_t)0x000000FF; + u = (((((int32_t)x) >> 24) - (((int32_t)y) >> 24)) >> 1) & (int32_t)0x000000FF; + + return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r))); +} + +/** + \brief Quad 8-bit unsigned subtraction with halved results. + \details This function enables you to perform four unsigned 8-bit integer subtractions, halving the results. + \param [in] x first four 8-bit summands. + \param [in] y second four 8-bit summands. + \return the halved subtraction of the first bytes from each operand, in the first byte of the return value.\n + the halved subtraction of the second bytes from each operand, in the second byte of the return value.\n + the halved subtraction of the third bytes from each operand, in the third byte of the return value.\n + the halved subtraction of the fourth bytes from each operand, in the fourth byte of the return value. + \remark + res[7:0] = (val1[7:0] - val2[7:0] ) >> 1 \n + res[15:8] = (val1[15:8] - val2[15:8] ) >> 1 \n + res[23:16] = (val1[23:16] - val2[23:16]) >> 1 \n + res[31:24] = (val1[31:24] - val2[31:24]) >> 1 + */ +__ALWAYS_INLINE uint32_t __UHSUB8(uint32_t x, uint32_t y) +{ + int32_t r, s, t, u; + + r = ((((x << 24) >> 24) - ((y << 24) >> 24)) >> 1) & 0x000000FF; + s = ((((x << 16) >> 24) - ((y << 16) >> 24)) >> 1) & 0x000000FF; + t = ((((x << 8) >> 24) - ((y << 8) >> 24)) >> 1) & 0x000000FF; + u = ((((x) >> 24) - ((y) >> 24)) >> 1) & 0x000000FF; + + return ((u << 24) | (t << 16) | (s << 8) | (r)); +} + +/** + \brief Dual 16-bit add and subtract with exchange. + \details This function enables you to exchange the halfwords of the one operand, + then add the high halfwords and subtract the low halfwords, + saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1. + \param [in] x first operand for the subtraction in the low halfword, + and the first operand for the addition in the high halfword. + \param [in] y second operand for the subtraction in the high halfword, + and the second operand for the addition in the low halfword. + \return the saturated subtraction of the high halfword in the second operand from the + low halfword in the first operand, in the low halfword of the return value.\n + the saturated addition of the high halfword in the first operand and the + low halfword in the second operand, in the high halfword of the return value.\n + The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1. + \remark + res[15:0] = val1[15:0] - val2[31:16] \n + res[31:16] = val1[31:16] + val2[15:0] + */ +__ALWAYS_INLINE uint32_t __QASX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = __SSAT(((((int32_t)x << 16) >> 16) - (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((int32_t)x) >> 16) + (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned saturating addition and subtraction with exchange. + \details This function enables you to exchange the halfwords of the second operand and + perform one unsigned 16-bit integer addition and one unsigned 16-bit subtraction, + saturating the results to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1. + \param [in] x first operand for the subtraction in the low halfword, + and the first operand for the addition in the high halfword. + \param [in] y second operand for the subtraction in the high halfword, + and the second operand for the addition in the low halfword. + \return the saturated subtraction of the high halfword in the second operand from the + low halfword in the first operand, in the low halfword of the return value.\n + the saturated addition of the high halfword in the first operand and the + low halfword in the second operand, in the high halfword of the return value.\n + The returned results are saturated to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1. + \remark + res[15:0] = val1[15:0] - val2[31:16] \n + res[31:16] = val1[31:16] + val2[15:0] + */ +__ALWAYS_INLINE uint32_t __UQASX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = __IUSAT((((x << 16) >> 16) - ((y) >> 16)), 16) & 0x0000FFFF; + s = __IUSAT((((x) >> 16) + ((y << 16) >> 16)), 16) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Dual 16-bit addition and subtraction with exchange. + \details It enables you to exchange the halfwords of the second operand, add the high halfwords + and subtract the low halfwords. + \param [in] x first operand for the subtraction in the low halfword, + and the first operand for the addition in the high halfword. + \param [in] y second operand for the subtraction in the high halfword, + and the second operand for the addition in the low halfword. + \return the subtraction of the high halfword in the second operand from the + low halfword in the first operand, in the low halfword of the return value.\n + the addition of the high halfword in the first operand and the + low halfword in the second operand, in the high halfword of the return value. + \remark + res[15:0] = val1[15:0] - val2[31:16] \n + res[31:16] = val1[31:16] + val2[15:0] + */ +__ALWAYS_INLINE uint32_t __SASX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = ((((int32_t)x << 16) >> 16) - (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF; + s = ((((int32_t)x) >> 16) + (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned addition and subtraction with exchange. + \details This function enables you to exchange the two halfwords of the second operand, + add the high halfwords and subtract the low halfwords. + \param [in] x first operand for the subtraction in the low halfword, + and the first operand for the addition in the high halfword. + \param [in] y second operand for the subtraction in the high halfword, + and the second operand for the addition in the low halfword. + \return the subtraction of the high halfword in the second operand from the + low halfword in the first operand, in the low halfword of the return value.\n + the addition of the high halfword in the first operand and the + low halfword in the second operand, in the high halfword of the return value. + \remark + res[15:0] = val1[15:0] - val2[31:16] \n + res[31:16] = val1[31:16] + val2[15:0] + */ +__ALWAYS_INLINE uint32_t __UASX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = (((x << 16) >> 16) - ((y) >> 16)) & 0x0000FFFF; + s = (((x) >> 16) + ((y << 16) >> 16)) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Dual 16-bit signed addition and subtraction with halved results. + \details This function enables you to exchange the two halfwords of one operand, perform one + signed 16-bit integer addition and one signed 16-bit subtraction, and halve the results. + \param [in] x first 16-bit operands. + \param [in] y second 16-bit operands. + \return the halved subtraction of the high halfword in the second operand from the + low halfword in the first operand, in the low halfword of the return value.\n + the halved addition of the low halfword in the second operand from the high + halfword in the first operand, in the high halfword of the return value. + \remark + res[15:0] = (val1[15:0] - val2[31:16]) >> 1 \n + res[31:16] = (val1[31:16] + val2[15:0]) >> 1 + */ +__ALWAYS_INLINE uint32_t __SHASX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = (((((int32_t)x << 16) >> 16) - (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((int32_t)x) >> 16) + (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned addition and subtraction with halved results and exchange. + \details This function enables you to exchange the halfwords of the second operand, + add the high halfwords and subtract the low halfwords, halving the results. + \param [in] x first operand for the subtraction in the low halfword, and + the first operand for the addition in the high halfword. + \param [in] y second operand for the subtraction in the high halfword, and + the second operand for the addition in the low halfword. + \return the halved subtraction of the high halfword in the second operand from the + low halfword in the first operand, in the low halfword of the return value.\n + the halved addition of the low halfword in the second operand from the high + halfword in the first operand, in the high halfword of the return value. + \remark + res[15:0] = (val1[15:0] - val2[31:16]) >> 1 \n + res[31:16] = (val1[31:16] + val2[15:0]) >> 1 + */ +__ALWAYS_INLINE uint32_t __UHASX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = ((((x << 16) >> 16) - ((y) >> 16)) >> 1) & 0x0000FFFF; + s = ((((x) >> 16) + ((y << 16) >> 16)) >> 1) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Dual 16-bit subtract and add with exchange. + \details This function enables you to exchange the halfwords of one operand, + then subtract the high halfwords and add the low halfwords, + saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1. + \param [in] x first operand for the addition in the low halfword, + and the first operand for the subtraction in the high halfword. + \param [in] y second operand for the addition in the high halfword, + and the second operand for the subtraction in the low halfword. + \return the saturated addition of the low halfword of the first operand and the high + halfword of the second operand, in the low halfword of the return value.\n + the saturated subtraction of the low halfword of the second operand from the + high halfword of the first operand, in the high halfword of the return value.\n + The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1. + \remark + res[15:0] = val1[15:0] + val2[31:16] \n + res[31:16] = val1[31:16] - val2[15:0] + */ +__ALWAYS_INLINE uint32_t __QSAX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = __SSAT(((((int32_t)x << 16) >> 16) + (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((int32_t)x) >> 16) - (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned saturating subtraction and addition with exchange. + \details This function enables you to exchange the halfwords of the second operand and perform + one unsigned 16-bit integer subtraction and one unsigned 16-bit addition, saturating + the results to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1. + \param [in] x first operand for the addition in the low halfword, + and the first operand for the subtraction in the high halfword. + \param [in] y second operand for the addition in the high halfword, + and the second operand for the subtraction in the low halfword. + \return the saturated addition of the low halfword of the first operand and the high + halfword of the second operand, in the low halfword of the return value.\n + the saturated subtraction of the low halfword of the second operand from the + high halfword of the first operand, in the high halfword of the return value.\n + The returned results are saturated to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1. + \remark + res[15:0] = val1[15:0] + val2[31:16] \n + res[31:16] = val1[31:16] - val2[15:0] + */ +__ALWAYS_INLINE uint32_t __UQSAX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = __IUSAT((((x << 16) >> 16) + ((y) >> 16)), 16) & 0x0000FFFF; + s = __IUSAT((((x) >> 16) - ((y << 16) >> 16)), 16) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Dual 16-bit unsigned subtract and add with exchange. + \details This function enables you to exchange the halfwords of the second operand, + subtract the high halfwords and add the low halfwords. + \param [in] x first operand for the addition in the low halfword, + and the first operand for the subtraction in the high halfword. + \param [in] y second operand for the addition in the high halfword, + and the second operand for the subtraction in the low halfword. + \return the addition of the low halfword of the first operand and the high + halfword of the second operand, in the low halfword of the return value.\n + the subtraction of the low halfword of the second operand from the + high halfword of the first operand, in the high halfword of the return value.\n + \remark + res[15:0] = val1[15:0] + val2[31:16] \n + res[31:16] = val1[31:16] - val2[15:0] + */ +__ALWAYS_INLINE uint32_t __USAX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = (((x << 16) >> 16) + ((y) >> 16)) & 0x0000FFFF; + s = (((x) >> 16) - ((y << 16) >> 16)) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Dual 16-bit signed subtraction and addition with exchange. + \details This function enables you to exchange the two halfwords of one operand and perform one + 16-bit integer subtraction and one 16-bit addition. + \param [in] x first operand for the addition in the low halfword, and the first operand + for the subtraction in the high halfword. + \param [in] y second operand for the addition in the high halfword, and the second + operand for the subtraction in the low halfword. + \return the addition of the low halfword of the first operand and the high + halfword of the second operand, in the low halfword of the return value.\n + the subtraction of the low halfword of the second operand from the + high halfword of the first operand, in the high halfword of the return value.\n + \remark + res[15:0] = val1[15:0] + val2[31:16] \n + res[31:16] = val1[31:16] - val2[15:0] + */ +__ALWAYS_INLINE uint32_t __SSAX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = ((((int32_t)x << 16) >> 16) + (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF; + s = ((((int32_t)x) >> 16) - (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + + +/** + \brief Dual 16-bit signed subtraction and addition with halved results. + \details This function enables you to exchange the two halfwords of one operand, perform one signed + 16-bit integer subtraction and one signed 16-bit addition, and halve the results. + \param [in] x first 16-bit operands. + \param [in] y second 16-bit operands. + \return the halved addition of the low halfword in the first operand and the + high halfword in the second operand, in the low halfword of the return value.\n + the halved subtraction of the low halfword in the second operand from the + high halfword in the first operand, in the high halfword of the return value. + \remark + res[15:0] = (val1[15:0] + val2[31:16]) >> 1 \n + res[31:16] = (val1[31:16] - val2[15:0]) >> 1 + */ +__ALWAYS_INLINE uint32_t __SHSAX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = (((((int32_t)x << 16) >> 16) + (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((int32_t)x) >> 16) - (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r))); +} + +/** + \brief Dual 16-bit unsigned subtraction and addition with halved results and exchange. + \details This function enables you to exchange the halfwords of the second operand, + subtract the high halfwords and add the low halfwords, halving the results. + \param [in] x first operand for the addition in the low halfword, and + the first operand for the subtraction in the high halfword. + \param [in] y second operand for the addition in the high halfword, and + the second operand for the subtraction in the low halfword. + \return the halved addition of the low halfword in the first operand and the + high halfword in the second operand, in the low halfword of the return value.\n + the halved subtraction of the low halfword in the second operand from the + high halfword in the first operand, in the high halfword of the return value. + \remark + res[15:0] = (val1[15:0] + val2[31:16]) >> 1 \n + res[31:16] = (val1[31:16] - val2[15:0]) >> 1 + */ +__ALWAYS_INLINE uint32_t __UHSAX(uint32_t x, uint32_t y) +{ + int32_t r, s; + + r = ((((x << 16) >> 16) + ((y) >> 16)) >> 1) & 0x0000FFFF; + s = ((((x) >> 16) - ((y << 16) >> 16)) >> 1) & 0x0000FFFF; + + return ((s << 16) | (r)); +} + +/** + \brief Dual 16-bit signed multiply with exchange returning difference. + \details This function enables you to perform two 16-bit signed multiplications, subtracting + one of the products from the other. The halfwords of the second operand are exchanged + before performing the arithmetic. This produces top * bottom and bottom * top multiplication. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \return the difference of the products of the two 16-bit signed multiplications. + \remark + p1 = val1[15:0] * val2[31:16] \n + p2 = val1[31:16] * val2[15:0] \n + res[31:0] = p1 - p2 + */ +__ALWAYS_INLINE uint32_t __SMUSDX(uint32_t x, uint32_t y) +{ + return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) - + ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)))); +} + +/** + \brief Sum of dual 16-bit signed multiply with exchange. + \details This function enables you to perform two 16-bit signed multiplications with exchanged + halfwords of the second operand, adding the products together. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \return the sum of the products of the two 16-bit signed multiplications with exchanged halfwords of the second operand. + \remark + p1 = val1[15:0] * val2[31:16] \n + p2 = val1[31:16] * val2[15:0] \n + res[31:0] = p1 + p2 + */ +__ALWAYS_INLINE uint32_t __SMUADX(uint32_t x, uint32_t y) +{ + return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) + + ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)))); +} + + +/** + \brief Saturating add. + \details This function enables you to obtain the saturating add of two integers. + \param [in] x first summand of the saturating add operation. + \param [in] y second summand of the saturating add operation. + \return the saturating addition of val1 and val2. + \remark + res[31:0] = SAT(val1 + SAT(val2)) + */ +__ALWAYS_INLINE int32_t __QADD(int32_t x, int32_t y) +{ + int32_t result; + + if (y >= 0) { + if (x + y >= x) { + result = x + y; + } else { + result = 0x7FFFFFFF; + } + } else { + if (x + y < x) { + result = x + y; + } else { + result = 0x80000000; + } + } + + return result; +} + +/** + \brief Saturating subtract. + \details This function enables you to obtain the saturating add of two integers. + \param [in] x first summand of the saturating add operation. + \param [in] y second summand of the saturating add operation. + \return the saturating addition of val1 and val2. + \remark + res[31:0] = SAT(val1 + SAT(val2)) + */ +__ALWAYS_INLINE int32_t __QSUB(int32_t x, int32_t y) +{ + int64_t tmp; + int32_t result; + + tmp = (int64_t)x - (int64_t)y; + + if (tmp > 0x7fffffff) { + tmp = 0x7fffffff; + } else if (tmp < (-2147483647 - 1)) { + tmp = -2147483647 - 1; + } + + result = tmp; + return result; +} + +/** + \brief Dual 16-bit signed multiply with single 32-bit accumulator. + \details This function enables you to perform two signed 16-bit multiplications, + adding both results to a 32-bit accumulate operand. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \param [in] sum accumulate value. + \return the product of each multiplication added to the accumulate value, as a 32-bit integer. + \remark + p1 = val1[15:0] * val2[15:0] \n + p2 = val1[31:16] * val2[31:16] \n + res[31:0] = p1 + p2 + val3[31:0] + */ +__ALWAYS_INLINE uint32_t __SMLAD(uint32_t x, uint32_t y, uint32_t sum) +{ + return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) + + ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) + + (((int32_t)sum)))); +} + +/** + \brief Pre-exchanged dual 16-bit signed multiply with single 32-bit accumulator. + \details This function enables you to perform two signed 16-bit multiplications with exchanged + halfwords of the second operand, adding both results to a 32-bit accumulate operand. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \param [in] sum accumulate value. + \return the product of each multiplication with exchanged halfwords of the second + operand added to the accumulate value, as a 32-bit integer. + \remark + p1 = val1[15:0] * val2[31:16] \n + p2 = val1[31:16] * val2[15:0] \n + res[31:0] = p1 + p2 + val3[31:0] + */ +__ALWAYS_INLINE uint32_t __SMLADX(uint32_t x, uint32_t y, uint32_t sum) +{ + return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) + + ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) + + (((int32_t)sum)))); +} + +/** + \brief Dual 16-bit signed multiply with exchange subtract with 32-bit accumulate. + \details This function enables you to perform two 16-bit signed multiplications, take the + difference of the products, subtracting the high halfword product from the low + halfword product, and add the difference to a 32-bit accumulate operand. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \param [in] sum accumulate value. + \return the difference of the product of each multiplication, added to the accumulate value. + \remark + p1 = val1[15:0] * val2[15:0] \n + p2 = val1[31:16] * val2[31:16] \n + res[31:0] = p1 - p2 + val3[31:0] + */ +__ALWAYS_INLINE uint32_t __SMLSD(uint32_t x, uint32_t y, uint32_t sum) +{ + return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) - + ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) + + (((int32_t)sum)))); +} + +/** + \brief Dual 16-bit signed multiply with exchange subtract with 32-bit accumulate. + \details This function enables you to exchange the halfwords in the second operand, then perform two 16-bit + signed multiplications. The difference of the products is added to a 32-bit accumulate operand. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \param [in] sum accumulate value. + \return the difference of the product of each multiplication, added to the accumulate value. + \remark + p1 = val1[15:0] * val2[31:16] \n + p2 = val1[31:16] * val2[15:0] \n + res[31:0] = p1 - p2 + val3[31:0] + */ +__ALWAYS_INLINE uint32_t __SMLSDX(uint32_t x, uint32_t y, uint32_t sum) +{ + return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) - + ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) + + (((int32_t)sum)))); +} + +/** + \brief Dual 16-bit signed multiply with single 64-bit accumulator. + \details This function enables you to perform two signed 16-bit multiplications, adding both results + to a 64-bit accumulate operand. Overflow is only possible as a result of the 64-bit addition. + This overflow is not detected if it occurs. Instead, the result wraps around modulo2^64. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \param [in] sum accumulate value. + \return the product of each multiplication added to the accumulate value. + \remark + p1 = val1[15:0] * val2[15:0] \n + p2 = val1[31:16] * val2[31:16] \n + sum = p1 + p2 + val3[63:32][31:0] \n + res[63:32] = sum[63:32] \n + res[31:0] = sum[31:0] + */ +__ALWAYS_INLINE uint64_t __SMLALD(uint32_t x, uint32_t y, uint64_t sum) +{ + return ((uint64_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) + + ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) + + (((uint64_t)sum)))); +} + +/** + \brief Dual 16-bit signed multiply with exchange with single 64-bit accumulator. + \details This function enables you to exchange the halfwords of the second operand, and perform two + signed 16-bit multiplications, adding both results to a 64-bit accumulate operand. Overflow + is only possible as a result of the 64-bit addition. This overflow is not detected if it occurs. + Instead, the result wraps around modulo2^64. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \param [in] sum accumulate value. + \return the product of each multiplication added to the accumulate value. + \remark + p1 = val1[15:0] * val2[31:16] \n + p2 = val1[31:16] * val2[15:0] \n + sum = p1 + p2 + val3[63:32][31:0] \n + res[63:32] = sum[63:32] \n + res[31:0] = sum[31:0] + */ +__ALWAYS_INLINE uint64_t __SMLALDX(uint32_t x, uint32_t y, uint64_t sum) +{ + return ((uint64_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) + + ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) + + (((uint64_t)sum)))); +} + +/** + \brief dual 16-bit signed multiply subtract with 64-bit accumulate. + \details This function It enables you to perform two 16-bit signed multiplications, take the difference + of the products, subtracting the high halfword product from the low halfword product, and add the + difference to a 64-bit accumulate operand. Overflow cannot occur during the multiplications or the + subtraction. Overflow can occur as a result of the 64-bit addition, and this overflow is not + detected. Instead, the result wraps round to modulo2^64. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \param [in] sum accumulate value. + \return the difference of the product of each multiplication, added to the accumulate value. + \remark + p1 = val1[15:0] * val2[15:0] \n + p2 = val1[31:16] * val2[31:16] \n + res[63:0] = p1 - p2 + val3[63:0] + */ +__ALWAYS_INLINE uint64_t __SMLSLD(uint32_t x, uint32_t y, uint64_t sum) +{ + return ((uint64_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) - + ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) + + (((uint64_t)sum)))); +} + +/** + \brief Dual 16-bit signed multiply with exchange subtract with 64-bit accumulate. + \details This function enables you to exchange the halfwords of the second operand, perform two 16-bit multiplications, + adding the difference of the products to a 64-bit accumulate operand. Overflow cannot occur during the + multiplications or the subtraction. Overflow can occur as a result of the 64-bit addition, and this overflow + is not detected. Instead, the result wraps round to modulo2^64. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \param [in] sum accumulate value. + \return the difference of the product of each multiplication, added to the accumulate value. + \remark + p1 = val1[15:0] * val2[31:16] \n + p2 = val1[31:16] * val2[15:0] \n + res[63:0] = p1 - p2 + val3[63:0] + */ +__ALWAYS_INLINE uint64_t __SMLSLDX(uint32_t x, uint32_t y, uint64_t sum) +{ + return ((uint64_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) - + ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) + + (((uint64_t)sum)))); +} + +/** + \brief 32-bit signed multiply with 32-bit truncated accumulator. + \details This function enables you to perform a signed 32-bit multiplications, adding the most + significant 32 bits of the 64-bit result to a 32-bit accumulate operand. + \param [in] x first operand for multiplication. + \param [in] y second operand for multiplication. + \param [in] sum accumulate value. + \return the product of multiplication (most significant 32 bits) is added to the accumulate value, as a 32-bit integer. + \remark + p = val1 * val2 \n + res[31:0] = p[61:32] + val3[31:0] + */ +__ALWAYS_INLINE uint32_t __SMMLA(int32_t x, int32_t y, int32_t sum) +{ + return (uint32_t)((int32_t)((int64_t)((int64_t)x * (int64_t)y) >> 32) + sum); +} + +/** + \brief Sum of dual 16-bit signed multiply. + \details This function enables you to perform two 16-bit signed multiplications, adding the products together. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \return the sum of the products of the two 16-bit signed multiplications. + \remark + p1 = val1[15:0] * val2[15:0] \n + p2 = val1[31:16] * val2[31:16] \n + res[31:0] = p1 + p2 + */ +__ALWAYS_INLINE uint32_t __SMUAD(uint32_t x, uint32_t y) +{ + return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) + + ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)))); +} + +/** + \brief Dual 16-bit signed multiply returning difference. + \details This function enables you to perform two 16-bit signed multiplications, taking the difference + of the products by subtracting the high halfword product from the low halfword product. + \param [in] x first 16-bit operands for each multiplication. + \param [in] y second 16-bit operands for each multiplication. + \return the difference of the products of the two 16-bit signed multiplications. + \remark + p1 = val1[15:0] * val2[15:0] \n + p2 = val1[31:16] * val2[31:16] \n + res[31:0] = p1 - p2 + */ +__ALWAYS_INLINE uint32_t __SMUSD(uint32_t x, uint32_t y) +{ + return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) - + ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)))); +} + +/** + \brief Dual extracted 8-bit to 16-bit signed addition. + \details This function enables you to extract two 8-bit values from the second operand (at bit positions + [7:0] and [23:16]), sign-extend them to 16-bits each, and add the results to the first operand. + \param [in] x values added to the sign-extended to 16-bit values. + \param [in] y two 8-bit values to be extracted and sign-extended. + \return the addition of val1 and val2, where the 8-bit values in val2[7:0] and + val2[23:16] have been extracted and sign-extended prior to the addition. + \remark + res[15:0] = val1[15:0] + SignExtended(val2[7:0]) \n + res[31:16] = val1[31:16] + SignExtended(val2[23:16]) + */ +__ALWAYS_INLINE uint32_t __SXTAB16(uint32_t x, uint32_t y) +{ + return ((uint32_t)((((((int32_t)y << 24) >> 24) + (((int32_t)x << 16) >> 16)) & (int32_t)0x0000FFFF) | + (((((int32_t)y << 8) >> 8) + (((int32_t)x >> 16) << 16)) & (int32_t)0xFFFF0000))); +} + +/** + \brief Extracted 16-bit to 32-bit unsigned addition. + \details This function enables you to extract two 8-bit values from one operand, zero-extend + them to 16 bits each, and add the results to two 16-bit values from another operand. + \param [in] x values added to the zero-extended to 16-bit values. + \param [in] y two 8-bit values to be extracted and zero-extended. + \return the addition of val1 and val2, where the 8-bit values in val2[7:0] and + val2[23:16] have been extracted and zero-extended prior to the addition. + \remark + res[15:0] = ZeroExt(val2[7:0] to 16 bits) + val1[15:0] \n + res[31:16] = ZeroExt(val2[31:16] to 16 bits) + val1[31:16] + */ +__ALWAYS_INLINE uint32_t __UXTAB16(uint32_t x, uint32_t y) +{ + return ((uint32_t)(((((y << 24) >> 24) + ((x << 16) >> 16)) & 0x0000FFFF) | + ((((y << 8) >> 8) + ((x >> 16) << 16)) & 0xFFFF0000))); +} + +/** + \brief Dual extract 8-bits and sign extend each to 16-bits. + \details This function enables you to extract two 8-bit values from an operand and sign-extend them to 16 bits each. + \param [in] x two 8-bit values in val[7:0] and val[23:16] to be sign-extended. + \return the 8-bit values sign-extended to 16-bit values.\n + sign-extended value of val[7:0] in the low halfword of the return value.\n + sign-extended value of val[23:16] in the high halfword of the return value. + \remark + res[15:0] = SignExtended(val[7:0]) \n + res[31:16] = SignExtended(val[23:16]) + */ +__ALWAYS_INLINE uint32_t __SXTB16(uint32_t x) +{ + return ((uint32_t)(((((int32_t)x << 24) >> 24) & (int32_t)0x0000FFFF) | + ((((int32_t)x << 8) >> 8) & (int32_t)0xFFFF0000))); +} + +/** + \brief Dual extract 8-bits and zero-extend to 16-bits. + \details This function enables you to extract two 8-bit values from an operand and zero-extend them to 16 bits each. + \param [in] x two 8-bit values in val[7:0] and val[23:16] to be zero-extended. + \return the 8-bit values sign-extended to 16-bit values.\n + sign-extended value of val[7:0] in the low halfword of the return value.\n + sign-extended value of val[23:16] in the high halfword of the return value. + \remark + res[15:0] = SignExtended(val[7:0]) \n + res[31:16] = SignExtended(val[23:16]) + */ +__ALWAYS_INLINE uint32_t __UXTB16(uint32_t x) +{ + return ((uint32_t)((((x << 24) >> 24) & 0x0000FFFF) | + (((x << 8) >> 8) & 0xFFFF0000))); +} + +#endif /* _CSI_SIMD_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi_core.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi_core.h new file mode 100644 index 000000000..bf84ab166 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_core/include/csi_core.h @@ -0,0 +1,284 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file csi_core.h + * @brief CSI Core Layer Header File + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CORE_H_ +#define _CORE_H_ + +#include +#include "csi_gcc.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* ################################## NVIC function ############################################ */ + +/** + \brief initialize the NVIC interrupt controller + \param [in] prio_bits the priority bits of NVIC interrupt controller. + */ +void drv_nvic_init(uint32_t prio_bits); + +/** + \brief Enable External Interrupt + \details Enables a device-specific interrupt in the NVIC interrupt controller. + \param [in] irq_num External interrupt number. Value cannot be negative. + */ +void drv_nvic_enable_irq(int32_t irq_num); +/** + \brief Disable External Interrupt + \details Disables a device-specific interrupt in the NVIC interrupt controller. + \param [in] irq_num External interrupt number. Value cannot be negative. + */ +void drv_nvic_disable_irq(int32_t irq_num); + +/** + \brief Get Pending Interrupt + \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt. + \param [in] irq_num Interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +uint32_t drv_nvic_get_pending_irq(int32_t irq_num); + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of an external interrupt. + \param [in] irq_num Interrupt number. Value cannot be negative. + */ +void drv_nvic_set_pending_irq(int32_t irq_num); + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of an external interrupt. + \param [in] irq_num External interrupt number. Value cannot be negative. + */ +void drv_nvic_clear_pending_irq(int32_t irq_num); + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] irq_num Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note irq_num must not be negative. + */ +uint32_t drv_nvic_get_active(int32_t irq_num); + +/** + \brief Set Interrupt Priority + \details Sets the priority of an interrupt. + \note The priority cannot be set for every core interrupt. + \param [in] irq_num Interrupt number. + \param [in] priority Priority to set. +*/ +void drv_nvic_set_prio(int32_t irq_num, uint32_t priority); +/** + \brief Get Interrupt Priority + \details Reads the priority of an interrupt. + The interrupt number can be positive to specify an external (device specific) interrupt, + or negative to specify an internal (core) interrupt. + \param [in] irq_num Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +uint32_t drv_nvic_get_prio(int32_t irq_num); + +/*@} end of CSI_Core_NVICFunctions */ + + +/* ########################## Cache functions #################################### */ + +/** + \brief Enable I-Cache + \details Turns on I-Cache + */ +void drv_icache_enable(void); + +/** + \brief Disable I-Cache + \details Turns off I-Cache + */ +void drv_icache_disable(void); + +/** + \brief Invalidate I-Cache + \details Invalidates I-Cache + */ +void drv_icache_invalid(void); + +/** + \brief Enable D-Cache + \details Turns on D-Cache + \note I-Cache also turns on. + */ +void drv_dcache_enable(void); + +/** + \brief Disable D-Cache + \details Turns off D-Cache + \note I-Cache also turns off. + */ +void drv_dcache_disable(void); + +/** + \brief Invalidate D-Cache + \details Invalidates D-Cache + \note I-Cache also invalid + */ +void drv_dcache_invalid(void); + +/** + \brief Clean D-Cache + \details Cleans D-Cache + \note I-Cache also cleans + */ +void drv_dcache_clean(void); + +/** + \brief Clean & Invalidate D-Cache + \details Cleans and Invalidates D-Cache + \note I-Cache also flush. + */ +void drv_dcache_clean_invalid(void); + + +/** + \brief D-Cache Invalidate by address + \details Invalidates D-Cache for the given address + \param[in] addr address (aligned to 16-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +void drv_dcache_invalid_range(uint32_t *addr, int32_t dsize); + +/** + \brief D-Cache Clean by address + \details Cleans D-Cache for the given address + \param[in] addr address (aligned to 16-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +void drv_dcache_clean_range(uint32_t *addr, int32_t dsize); + +/** + \brief D-Cache Clean and Invalidate by address + \details Cleans and invalidates D_Cache for the given address + \param[in] addr address (aligned to 16-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +void drv_dcache_clean_invalid_range(uint32_t *addr, int32_t dsize); + +/** + \brief setup cacheable range Cache + \details setup Cache range + */ +void drv_cache_set_range(uint32_t index, uint32_t baseAddr, uint32_t size, uint32_t enable); + +/** + \brief Enable cache profile + \details Turns on Cache profile + */ +void drv_cache_enable_profile(void); + +/** + \brief Disable cache profile + \details Turns off Cache profile + */ +void drv_cache_disable_profile(void); +/** + \brief Reset cache profile + \details Reset Cache profile + */ +void drv_cache_reset_profile(void); + +/** + \brief cache access times + \details Cache access times + \note every 256 access add 1. + */ +uint32_t drv_cache_get_access_time(void); + +/** + \brief cache miss times + \details Cache miss times + \note every 256 miss add 1. + */ +uint32_t drv_cache_get_miss_time(void); + +/* ################################## SysTick function ############################################ */ + +/** + \brief CORE timer Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \param [in] irq_num core timer Interrupt number. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +uint32_t drv_coret_config(uint32_t ticks, int32_t irq_num); + +/** + \brief get CORE timer reload value + \return CORE timer counter value. + */ +uint32_t drv_coret_get_load(void); + +/** + \brief get CORE timer counter value + \return CORE timer counter value. + */ +uint32_t drv_coret_get_value(void); + +/** + \brief Save the Irq context + \details save the psr result before disable irq. + \param [in] irq_num External interrupt number. Value cannot be negative. + */ +__ALWAYS_INLINE uint32_t drv_irq_save(void) +{ + uint32_t result; + result = __get_PSR(); + __disable_irq(); + return(result); +} + +/** + \brief Restore the Irq context + \details restore saved primask state. + \param [in] irq_state psr irq state. + */ +__ALWAYS_INLINE void drv_irq_restore(uint32_t irq_state) +{ + __set_PSR(irq_state); +} + + +#ifdef __cplusplus +} +#endif + +#endif /* _CORE_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/Kconfig b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/Kconfig new file mode 100644 index 000000000..04cf34f08 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/Kconfig @@ -0,0 +1,7 @@ +if CONFIG_CSKY +source "../../csi/csi_driver/csky/Kconfig" +endif + +if CONFIG_SANECHIPS +source "../../csi/csi_driver/sanechips/Kconfig" +endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csi.mk b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csi.mk new file mode 100644 index 000000000..3c8243ac1 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csi.mk @@ -0,0 +1,9 @@ +TEE_INC += -I$(CSI_DIR)/csi_driver/include + +ifeq ($(CONFIG_CSKY), y) +include $(CSI_DIR)/csi_driver/csky/csi.mk +endif + +ifeq ($(CONFIG_SANECHIPS), y) +include $(CSI_DIR)/csi_driver/sanechips/csi.mk +endif \ No newline at end of file diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/Kconfig b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/Kconfig new file mode 100644 index 000000000..69f84e602 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/Kconfig @@ -0,0 +1,9 @@ +source "../../csi/csi_driver/csky/common/Kconfig" + +if CONFIG_PLATFORM_PHOBOS +source "../../csi/csi_driver/csky/phobos/Kconfig" +endif + +if CONFIG_PLATFORM_HOBBIT1_2 +source "../../csi/csi_driver/csky/hobbit1_2/Kconfig" +endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/Kconfig b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/Kconfig new file mode 100644 index 000000000..e69de29bb diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/VERSION b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/VERSION new file mode 100644 index 000000000..6b3126cee --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/VERSION @@ -0,0 +1 @@ +v1.0 diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/aes/ck_aes.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/aes/ck_aes.c new file mode 100644 index 000000000..f1e88973c --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/aes/ck_aes.c @@ -0,0 +1,525 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file ck_aes.c + * @brief CSI Source File for aes driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include "csi_core.h" +#include "drv_aes.h" +#include "ck_aes.h" + +#define ERR_AES(errno) (CSI_DRV_ERRNO_AES_BASE | errno) +#define AES_NULL_PARA_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_AES(EDRV_PARAMETER); \ + } \ + } while (0) +static ck_aes_reg_t *aes_reg = NULL; +volatile static uint8_t block_cal_done = 0; + +typedef struct { + uint32_t base; + uint32_t irq; + void *iv; + uint8_t *result_out; + uint32_t len; + aes_event_cb_t cb; + aes_mode_e mode; + aes_key_len_bits_e keylen; + aes_endian_mode_e endian; + aes_crypto_mode_e enc; + aes_status_t status; +} ck_aes_priv_t; + +extern int32_t target_get_aes_count(void); +extern int32_t target_get_aes(int32_t idx, uint32_t *base, uint32_t *irq); + +static ck_aes_priv_t aes_handle[CONFIG_AES_NUM]; + +/* Driver Capabilities */ +static const aes_capabilities_t driver_capabilities = { + .ecb_mode = 1, /* ECB mode */ + .cbc_mode = 1, /* CBC mode */ + .cfb_mode = 0, /* CFB mode */ + .ofb_mode = 0, /* OFB mode */ + .ctr_mode = 0, /* CTR mode */ + .bits_128 = 1, /* 128bits key length mode */ + .bits_192 = 1, /* 192bits key lenght mode */ + .bits_256 = 1 /* 256bits key length mode */ +}; + +extern int32_t target_get_aes(int32_t idx, uint32_t *base, uint32_t *irq); +extern int32_t target_get_aes_count(void); +// +// Functions +// + +static inline void aes_set_opcode(aes_crypto_mode_e opcode) +{ + aes_reg->ctrl &= ~(3 << AES_OPCODE_OFFSET); //clear bit[7:6] + aes_reg->ctrl |= (opcode << AES_OPCODE_OFFSET); //set opcode +} + +static inline void aes_set_endian(aes_endian_mode_e endian) +{ + if (endian == AES_ENDIAN_LITTLE) { + aes_reg->ctrl &= ~AES_LITTLE_ENDIAN; + } else { + aes_reg->ctrl |= AES_LITTLE_ENDIAN; + } +} + +static inline uint32_t aes_set_keylen(aes_key_len_bits_e keylength) +{ + aes_reg->ctrl &= ~(3 << AES_KEY_LEN_OFFSET); //clear bit[5:4] + aes_reg->ctrl |= (keylength << AES_KEY_LEN_OFFSET);// Set key length + + return 0; +} + +static inline void aes_set_mode(aes_mode_e mode) +{ + aes_reg->ctrl &= ~(1 << AES_MODE_OFFSET); //clear bit 3 + aes_reg->ctrl |= (mode << AES_MODE_OFFSET); //set mode +} + +static inline void aes_enable(void) +{ + aes_reg->ctrl |= (1 << AES_WORK_ENABLE_OFFSET); +} + +static inline void aes_disable(void) +{ + aes_reg->ctrl &= ~(1 << AES_WORK_ENABLE_OFFSET); +} + +static inline void aes_enable_interrupt(void) +{ + aes_reg->ctrl |= (1 << AES_INT_ENABLE_OFFSET); +} + +static inline void aes_disable_interrupt(void) +{ + aes_reg->ctrl &= ~(1 << AES_INT_ENABLE_OFFSET); +} + +static inline void aes_clear_interrupt(void) +{ + aes_reg->state = 0x0; +} + +static inline uint32_t aes_get_intstatus(uint32_t AES_IT) +{ + return (aes_reg->state & AES_IT) ? 1 : 0; +} + +static void aes_set_key(void *context, uint8_t *key, aes_key_len_bits_e keylen, uint32_t enc, uint32_t endian) +{ + uint8_t keynum = 0; + + if (keylen == AES_KEY_LEN_BITS_128) { + keynum = 4; + } else if (keylen == AES_KEY_LEN_BITS_192) { + keynum = 6; + } else if (keylen == AES_KEY_LEN_BITS_256) { + keynum = 8; + } + + uint32_t i; + uint32_t temp = 0; + /* set key according to the endian mode */ + if (endian == AES_ENDIAN_LITTLE) { + for (i = 0; i < keynum; i++) { + temp = key[3] << 24 | key[2] << 16 | key[1] << 8 | key[0]; + aes_reg->key[keynum - 1 - i] = temp; + key += 4; + } + } else if (endian == AES_ENDIAN_BIG) { + for (i = 0; i < keynum; i++) { + temp = key[3] << 24 | key[2] << 16 | key[1] << 8 | key[0]; + aes_reg->key[i] = temp; + key += 4; + } + } + + if (enc == AES_CRYPTO_MODE_DECRYPT) { + aes_set_opcode(AES_CRYPTO_KEYEXP); /* if the mode is decrypt before decrypt you have to keyexpand */ + aes_enable(); +// while(block_cal_done == 0); +// block_cal_done = 0; + + while (aes_get_intstatus(AES_IT_KEYINT)); + + aes_set_opcode(AES_CRYPTO_MODE_DECRYPT); + } else if (enc == AES_CRYPTO_MODE_ENCRYPT) { + aes_set_opcode(AES_CRYPTO_MODE_ENCRYPT); + } + + aes_disable(); +} + +static void aes_set_iv(uint32_t mode, uint32_t endian, uint8_t *iv) +{ + uint32_t temp; + uint32_t i; + /* set iv if the mode is CBC */ + if (mode == AES_MODE_CBC) { + if (endian == AES_ENDIAN_BIG) { + for (i = 0; i < 4; i++) { + temp = iv[3] << 24 | iv[2] << 16 | iv[1] << 8 | iv[0]; + aes_reg->iv[i] = temp; + iv += 4; + } + } else if (endian == AES_ENDIAN_LITTLE) { + for (i = 0; i < 4; i++) { + temp = iv[3] << 24 | iv[2] << 16 | iv[1] << 8 | iv[0]; + aes_reg->iv[3 - i] = temp; + iv += 4; + } + } + } +} + +static int aes_crypto(void *context, uint8_t *in, uint8_t *out, + uint32_t len, uint8_t *iv, uint32_t mode, uint32_t endian, uint32_t enc) +{ + + uint32_t temp[4]; + aes_set_iv(mode, endian, iv); + + uint32_t i = 0; + uint32_t j = 0; + /* set the text before aes calculating */ + for (i = 0; i < len; i = i + 16) { + for (j = 0; j < 4; j++) { + temp[j] = in[3] << 24 | in[2] << 16 | in[1] << 8 | in[0]; + if (endian == AES_ENDIAN_BIG) { + aes_reg->datain[j] = temp[j]; + } else if (endian == AES_ENDIAN_LITTLE) { + aes_reg->datain[3 - j] = temp[j]; + } + + in += 4; + } + aes_enable(); + + while(block_cal_done == 0); + block_cal_done = 0; + + if (enc == AES_CRYPTO_MODE_ENCRYPT && mode == AES_MODE_CBC) { + aes_set_iv(mode, endian, out); + memcpy(iv, out, 16); + out += 16; + } else if (enc == AES_CRYPTO_MODE_DECRYPT && mode == AES_MODE_CBC) { + aes_set_iv(mode, endian, (uint8_t *)&temp); + memcpy(iv, temp, 16); + } + } + + return 0; +} + +void ck_aes_irqhandler(int32_t idx) +{ + ck_aes_priv_t *aes_priv = &aes_handle[idx]; + + volatile uint32_t j; + uint32_t tmp = 0; + /* get the result after aes calculating*/ + if (aes_priv->result_out != NULL) { + for (j = 0; j < 4; j++) { + if (aes_priv->endian == AES_ENDIAN_BIG) { + tmp = aes_reg->dataout[j]; + } else if (aes_priv->endian == AES_ENDIAN_LITTLE) { + tmp = aes_reg->dataout[3 - j]; + } + + memcpy(aes_priv->result_out, &tmp, 4); + aes_priv->result_out += 4; + aes_priv->len -= 4; + } + } + + block_cal_done = 1; + /* disable aes and clear the aes interrupt */ + aes_disable(); + aes_clear_interrupt(); + + /* execute the callback function */ + if (aes_priv->len == 0) { + if (aes_priv->cb) { + aes_priv->cb(AES_EVENT_CRYPTO_COMPLETE); + } + } +} + +/** + \brief get aes instance count. + \return aes handle count +*/ +int32_t csi_aes_get_instance_count(void) +{ + return target_get_aes_count(); +} + +/** + \brief Initialize AES Interface. 1. Initializes the resources needed for the AES interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_aes_get_instance_count(). + \param[in] cb_event Pointer to \ref aes_event_cb_t + \return return aes handle if success +*/ +aes_handle_t csi_aes_initialize(int32_t idx, aes_event_cb_t cb_event) +{ + + if (idx < 0 || idx >= CONFIG_AES_NUM) { + return NULL; + } + + uint32_t irq = 0u; + uint32_t base = 0u; + /* obtain the aes information */ + int32_t real_idx = target_get_aes(idx, &base, &irq); + + if (real_idx != idx) { + return NULL; + } + + ck_aes_priv_t *aes_priv = &aes_handle[idx]; + + aes_priv->base = base; + aes_priv->irq = irq; + + /* initialize the aes context */ + aes_reg = (ck_aes_reg_t *)(aes_priv->base); + aes_priv->cb = cb_event; + aes_priv->iv = NULL; + aes_priv->len = 16; + aes_priv->result_out = NULL; + aes_priv->mode = AES_MODE_CBC; + aes_priv->keylen = AES_KEY_LEN_BITS_128; + aes_priv->endian = AES_ENDIAN_LITTLE; + aes_priv->status.busy = 0; + + aes_enable_interrupt(); /* enable the aes interrupt */ + + drv_nvic_enable_irq(aes_priv->irq); /* enable the aes bit in nvic */ + + return (aes_handle_t)aes_priv; +} + +/** + \brief De-initialize AES Interface. stops operation and releases the software resources used by the interface + \param[in] handle aes handle to operate. + \return error code +*/ +int32_t csi_aes_uninitialize(aes_handle_t handle) +{ + AES_NULL_PARA_CHK(handle); + + ck_aes_priv_t *aes_priv = handle; + aes_priv->cb = NULL; + + aes_disable_interrupt(); /* disable the aes interrupt */ + + drv_nvic_disable_irq(aes_priv->irq); + + return 0; +} + +/** + \brief Get driver capabilities. + \param[in] handle aes handle to operate. + \return \ref aes_capabilities_t +*/ +aes_capabilities_t csi_aes_get_capabilities(aes_handle_t handle) +{ + return driver_capabilities; +} + +/** + \brief config aes mode. + \param[in] handle aes handle to operate. + \param[in] mode \ref aes_mode_e + \param[in] keylen_bits \ref aes_key_len_bits_e + \param[in] endian \ref aes_endian_mode_e + \param[in] arg Pointer to the iv address when mode is cbc_mode + \return error code +*/ +int32_t csi_aes_config(aes_handle_t handle, aes_mode_e mode, aes_key_len_bits_e keylen_bits, aes_endian_mode_e endian, uint32_t arg) +{ + AES_NULL_PARA_CHK(handle); + + ck_aes_priv_t *aes_priv = handle; + aes_reg = (ck_aes_reg_t *)(aes_priv->base); + + /* config the aes mode */ + switch (mode) { + case AES_MODE_CBC: + aes_priv->iv = (void *)arg; + aes_priv->mode = mode; + aes_set_mode(mode); + break; + + case AES_MODE_ECB: + aes_priv->mode = mode; + aes_set_mode(mode); + break; + + case AES_MODE_CFB: + case AES_MODE_OFB: + case AES_MODE_CTR: + return ERR_AES(EDRV_UNSUPPORTED); + + default: + return ERR_AES(EDRV_PARAMETER); + } + + /* config the key length */ + switch (keylen_bits) { + case AES_KEY_LEN_BITS_128: + case AES_KEY_LEN_BITS_192: + case AES_KEY_LEN_BITS_256: + aes_priv->keylen = keylen_bits; + aes_set_keylen(keylen_bits); + break; + + default: + return ERR_AES(EDRV_PARAMETER); + } + + /* config the endian mode */ + switch (endian) { + case AES_ENDIAN_LITTLE: + aes_priv->endian = endian; + aes_set_endian(endian); + break; + + case AES_ENDIAN_BIG: + aes_priv->endian = endian; + aes_set_endian(endian); + break; + + default: + return ERR_AES(EDRV_PARAMETER); + } + + return 0; +} + +/** + \brief set crypto key. + \param[in] handle aes handle to operate. + \param[in] context aes information context(NULL when hardware implementation) + \param[in] key Pointer to the key buf + \param[in] key_len Pointer to the aes_key_len_bits_e + \param[in] enc \ref aes_crypto_mode_e + \return error code +*/ +int32_t csi_aes_set_key(aes_handle_t handle, void *context, void *key, aes_key_len_bits_e key_len, aes_crypto_mode_e enc) +{ + AES_NULL_PARA_CHK(handle); + AES_NULL_PARA_CHK(key); + if ((key_len != AES_KEY_LEN_BITS_128 && + key_len != AES_KEY_LEN_BITS_192 && + key_len != AES_KEY_LEN_BITS_256) || + (enc != AES_CRYPTO_MODE_ENCRYPT && + enc != AES_CRYPTO_MODE_DECRYPT)) { + return ERR_AES(EDRV_PARAMETER); + } + + ck_aes_priv_t *aes_priv = handle; + aes_priv->enc = enc; + aes_set_key(context, key, key_len, enc, aes_priv->endian); + + return 0; +} + +/** + \brief encrypt or decrypt + \param[in] handle aes handle to operate. + \param[in] context aes information context(NULL when hardware implementation) + \param[in] in Pointer to the Source data + \param[out] out Pointer to the Result data. + \param[in] len the Source data len. + \param[in] padding \ref aes_padding_mode_e. + \return error code +*/ +int32_t csi_aes_crypto(aes_handle_t handle, void *context, void *in, void *out, uint32_t len, aes_padding_mode_e padding) +{ + AES_NULL_PARA_CHK(handle); + AES_NULL_PARA_CHK(in); + AES_NULL_PARA_CHK(out); + AES_NULL_PARA_CHK(len); + + ck_aes_priv_t *aes_priv = handle; + + aes_priv->status.busy = 1; + + uint8_t left_len = len & 0xf; + switch (padding) { + case AES_PADDING_MODE_NO: + if (left_len) { + return ERR_AES(EDRV_PARAMETER); + } + + /* crypto in padding no mode */ + aes_priv->result_out = out; + aes_priv->len = len; + aes_crypto(context, in, out, len, aes_priv->iv, aes_priv->mode, aes_priv->endian, aes_priv->enc); + break; + + case AES_PADDING_MODE_ZERO: + if (left_len == 0) { + return ERR_AES(EDRV_PARAMETER); + } + + uint8_t i = 0; + for (i = 0; i < (16 - left_len); i++) { + *((uint8_t *)in + len + i) = 0x0; + } + + /* crypto in padding zero mode */ + aes_priv->result_out = out; + aes_priv->len = len + 16 -left_len; + aes_crypto(context, in, out, len + 16 - left_len, aes_priv->iv, aes_priv->mode, aes_priv->endian, aes_priv->enc); + break; + + case AES_PADDING_MODE_PKCS5: + return ERR_AES(EDRV_UNSUPPORTED); + + default: + return ERR_AES(EDRV_PARAMETER); + } + + aes_priv->status.busy = 0; + return 0; +} + +/** + \brief Get AES status. + \param[in] handle aes handle to operate. + \return AES status \ref aes_status_t +*/ +aes_status_t csi_aes_get_status(aes_handle_t handle) +{ + ck_aes_priv_t *aes_priv = handle; + return aes_priv->status; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/aes/ck_aes.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/aes/ck_aes.h new file mode 100644 index 000000000..976ccad61 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/aes/ck_aes.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file ck_aes.h + * @brief header file for aes driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CK_AES_H_ +#define _CK_AES_H_ + +#include +#include "drv_aes.h" +#include "soc.h" + +#define AES_LITTLE_ENDIAN 0x00000100 + +#define AES_MAX_KEY_LENGTH 32 +#define AES_IT_DATAINT 0x4 +#define AES_IT_KEYINT 0x2 +#define AES_IT_BUSY 0x1 +#define AES_IT_ALL 0x7 +#define AES_CRYPTO_KEYEXP 0x2 + +#define AES_WORK_ENABLE_OFFSET 0 +#define AES_INT_ENABLE_OFFSET 2 +#define AES_MODE_OFFSET 3 +#define AES_KEY_LEN_OFFSET 4 +#define AES_OPCODE_OFFSET 6 + +typedef struct { + __IOM uint32_t datain[4]; /* Offset: 0x000 (R/W) Data input 0~127 */ + __IOM uint32_t key[8]; /* Offset: 0x010 (R/W) Key 0~255 */ + __IOM uint32_t iv[4]; /* Offset: 0x030 (R/W) Initial Vector: 0~127 */ + __IOM uint32_t ctrl; /* Offset: 0x040 (R/W) AES Control Register */ + __IOM uint32_t state; /* Offset: 0x044 (R/W) AES State Register */ + __IOM uint32_t dataout[4]; /* Offset: 0x048 (R/W) Data Output 0~31 */ +} ck_aes_reg_t; + +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/csi.mk b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/csi.mk new file mode 100644 index 000000000..f2696dede --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/csi.mk @@ -0,0 +1,52 @@ +ifeq ($(CONFIG_SHA), y) +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/common/sha/ +ifeq ($(CONFIG_PLATFORM_PHOBOS), y) +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/sha/ck_sha_v2.c +endif +ifeq ($(CONFIG_PLATFORM_HOBBIT3), y) +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/sha/ck_sha_v2.c +endif +ifeq ($(CONFIG_PLATFORM_HOBBIT1_2), y) +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/sha/ck_sha_v1.c +endif +endif + +ifeq ($(CONFIG_TRNG), y) +ifeq ($(CONFIG_PLATFORM_HOBBIT3), y) +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/common/trng/ +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/trng/osr_trng.c +endif +ifeq ($(CONFIG_PLATFORM_PHOBOS), y) +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/common/trng/ +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/trng/ck_trng.c +endif +ifeq ($(CONFIG_PLATFORM_HOBBIT1_2), y) +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/common/trng/ +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/trng/ck_trng.c +endif +endif + +ifeq ($(CONFIG_AES), y) +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/common/aes/ +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/aes/ck_aes.c +endif + +ifeq ($(CONFIG_RSA), y) +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/common/rsa/ +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/rsa/ck_rsa.c +endif + +ifeq ($(CONFIG_USART), y) +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/common/usart/ +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/usart/dw_usart.c +endif + +ifeq ($(CONFIG_PMU), y) +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/common/pmu/ +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/pmu/ck_pmu.c +endif + +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/wdt/dw_wdt.c + +TEE_SRC += $(CSI_DIR)/csi_driver/csky/common/eflash/ck_eflash.c + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/eflash/ck_eflash.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/eflash/ck_eflash.c new file mode 100644 index 000000000..c2ed49315 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/eflash/ck_eflash.c @@ -0,0 +1,441 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file ck_eflash.c + * @brief CSI Source File for Embedded Flash Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#include +#include +#include "csi_core.h" +#include "drv_eflash.h" +#include "ck_eflash.h" + + +#define ERR_EFLASH(errno) (CSI_DRV_ERRNO_EFLASH_BASE | errno) +#define EFLASH_NULL_PARAM_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_EFLASH(EDRV_PARAMETER); \ + } \ + } while (0) + +typedef struct { + uint32_t base; + eflash_info_t eflashinfo; + eflash_event_cb_t cb; + eflash_status_t status; +} ck_eflash_priv_t; + +extern int32_t target_get_eflash_count(void); +extern int32_t target_get_eflash(int32_t idx, uint32_t *base, eflash_info_t *info); + +static ck_eflash_priv_t eflash_handle[CONFIG_EFLASH_NUM]; +/* Driver Capabilities */ +static const eflash_capabilities_t driver_capabilities = { + .event_ready = 1, /* event_ready */ + .data_width = 2, /* data_width = 0:8-bit, 1:16-bit, 2:32-bit */ + .erase_chip = 0 /* erase_chip */ +}; + +// +// Functions +// + +static int32_t eflash_program_word(eflash_handle_t handle, uint32_t dstaddr, uint32_t *srcbuf, uint32_t len) +{ + ck_eflash_priv_t *eflash_priv = handle; + uint32_t fbase = eflash_priv->base; + uint32_t i; + + for (i = 0; i < len; i++) { + *(volatile uint32_t *)(fbase + 0x04) = dstaddr; + *(volatile uint32_t *)(fbase + 0x1c) = *srcbuf; + *(volatile uint32_t *)(fbase + 0x18) = 1; + srcbuf++; + dstaddr += 4; + } + + return (i << 2); +} + + +#ifdef CONFIG_CHIP_CH2201 +static uint32_t context[EFLASH_SECTOR_SIZE >> 2] = {0x0}; +static int32_t eflash_verify(eflash_handle_t handle, uint32_t addr, const void *data, uint32_t cnt) +{ + uint32_t i; + uint8_t error_flag = 1; + + uint8_t *block_addr = (uint8_t *)(addr & ~(EFLASH_SECTOR_SIZE - 1)); + uint32_t pre_offset = addr - (uint32_t)block_addr; + uint32_t pre_count = (cnt > (EFLASH_SECTOR_SIZE - pre_offset)) ? (EFLASH_SECTOR_SIZE - pre_offset) : cnt; + + uint8_t *p = NULL; + uint8_t *dst = NULL; + + p = (uint8_t *)data; + dst = (uint8_t *)addr; + uint32_t len = cnt; + volatile uint8_t verify_count = 100; + + while (error_flag) { + for (i = 0; i < pre_count; i++) { + if (*((uint8_t *)dst + i) != *((uint8_t *)p + i)) { + *(volatile uint32_t *) 0x50004000 = 'E'; /* for debug */ + *(volatile uint32_t *) 0x50004000 = 'E'; + *(volatile uint32_t *) 0x50004000 = 'E'; + *(volatile uint32_t *) 0x50004000 = 'E'; + *(volatile uint32_t *) 0x50004000 = '\n'; + memcpy(context, block_addr, EFLASH_SECTOR_SIZE); + memcpy((uint8_t *)context + pre_offset, p, pre_count); + csi_eflash_erase_sector(handle, (uint32_t)dst); + eflash_program_word(handle, (uint32_t)block_addr, context, EFLASH_SECTOR_SIZE >> 2); + break; + } + } + + if (i == pre_count || !(verify_count--)) { + error_flag = 0; + } + } + + if (!verify_count) { + return ERR_EFLASH(EDRV_TIMEOUT); + } + verify_count = 100; + + error_flag = 1; + p += pre_count; + dst += pre_count; + len -= pre_count; + + while (len >= EFLASH_SECTOR_SIZE) { + while (error_flag) { + for (i = 0; i < EFLASH_SECTOR_SIZE; i++) { + if (*((uint8_t *)dst + i) != *((uint8_t *)p + i)) { + *(volatile uint32_t *) 0x50004000 = 'E'; /* for debug */ + *(volatile uint32_t *) 0x50004000 = 'E'; + *(volatile uint32_t *) 0x50004000 = 'E'; + *(volatile uint32_t *) 0x50004000 = 'E'; + *(volatile uint32_t *) 0x50004000 = '\n'; + memcpy((uint8_t *)context, p, EFLASH_SECTOR_SIZE); + csi_eflash_erase_sector(handle, (uint32_t)dst); + eflash_program_word(handle, (uint32_t)dst, context, EFLASH_SECTOR_SIZE >> 2); + break; + } + } + + if (i == EFLASH_SECTOR_SIZE || !(verify_count--)) { + error_flag = 0; + } + } + + if (!verify_count) { + return ERR_EFLASH(EDRV_TIMEOUT); + } + + verify_count = 100; + + error_flag = 1; + dst += EFLASH_SECTOR_SIZE; + p += EFLASH_SECTOR_SIZE; + len -= EFLASH_SECTOR_SIZE; + } + + if (len > 0) { + while (error_flag) { + for (i = 0; i < len; i++) { + if (*((uint8_t *)dst + i) != *((uint8_t *)p + i)) { + *(volatile uint32_t *) 0x50004000 = 'E'; /* for debug */ + *(volatile uint32_t *) 0x50004000 = 'E'; + *(volatile uint32_t *) 0x50004000 = 'E'; + *(volatile uint32_t *) 0x50004000 = 'E'; + *(volatile uint32_t *) 0x50004000 = '\n'; + memcpy(context, dst, EFLASH_SECTOR_SIZE); + memcpy((uint8_t *)context + i, p + i, len - i); + csi_eflash_erase_sector(handle, (uint32_t)dst); + eflash_program_word(handle, (uint32_t)dst, context, EFLASH_SECTOR_SIZE >> 2); + break; + } + } + + if (i == len || !(verify_count--)) { + error_flag = 0; + } + } + + if (!verify_count) { + return ERR_EFLASH(EDRV_TIMEOUT); + } + + verify_count = 100; + } + + return 0; +} +#endif + +/** + \brief Initialize EFLASH Interface. 1. Initializes the resources needed for the EFLASH interface 2.registers event callback function + \param[in] idx device id + \param[in] cb_event Pointer to \ref eflash_event_cb_t + \return pointer to eflash handle +*/ +eflash_handle_t csi_eflash_initialize(int32_t idx, eflash_event_cb_t cb_event) +{ + if (idx < 0 || idx >= CONFIG_EFLASH_NUM) { + return NULL; + } + + /* obtain the eflash information */ + uint32_t base = 0u; + eflash_info_t info; + int32_t real_idx = target_get_eflash(idx, &base, &info); + + if (real_idx != idx) { + return NULL; + } + + ck_eflash_priv_t *eflash_priv = &eflash_handle[idx]; + + eflash_priv->base = base; + eflash_priv->eflashinfo.start = info.start; + eflash_priv->eflashinfo.end = info.end; + eflash_priv->eflashinfo.sector_count = info.sector_count; + + /* initialize the eflash context */ + eflash_priv->cb = cb_event; + eflash_priv->status.busy = 0; + eflash_priv->status.error = 0U; + eflash_priv->eflashinfo.sector_size = EFLASH_SECTOR_SIZE; + eflash_priv->eflashinfo.page_size = EFLASH_PAGE_SIZE; + eflash_priv->eflashinfo.program_unit = EFLASH_PROGRAM_UINT; + eflash_priv->eflashinfo.erased_value = EFLASH_ERASED_VALUE; + + return (eflash_handle_t)eflash_priv; +} + +/** + \brief De-initialize EFLASH Interface. stops operation and releases the software resources used by the interface + \param[in] handle eflash handle to operate. + \return error code +*/ +int32_t csi_eflash_uninitialize(eflash_handle_t handle) +{ + EFLASH_NULL_PARAM_CHK(handle); + + ck_eflash_priv_t *eflash_priv = handle; + eflash_priv->cb = NULL; + + return 0; +} + +/** + \brief Get driver capabilities. + \param[in] idx device id + \return \ref eflash_capabilities_t +*/ +eflash_capabilities_t csi_eflash_get_capabilities(eflash_handle_t handle) +{ + return driver_capabilities; +} + +/** + \brief Read data from Flash. + \param[in] handle eflash handle to operate. + \param[in] addr Data address. + \param[out] data Pointer to a buffer storing the data read from Flash. + \param[in] cnt Number of data items to read. + \return number of data items read or error code +*/ +int32_t csi_eflash_read(eflash_handle_t handle, uint32_t addr, void *data, uint32_t cnt) +{ + EFLASH_NULL_PARAM_CHK(handle); + EFLASH_NULL_PARAM_CHK(data); + EFLASH_NULL_PARAM_CHK(cnt); + + volatile uint8_t *src_addr = (uint8_t *)addr; + ck_eflash_priv_t *eflash_priv = handle; + + if (eflash_priv->eflashinfo.start > addr || eflash_priv->eflashinfo.end < addr || eflash_priv->eflashinfo.start > (addr + cnt - 1) || eflash_priv->eflashinfo.end < (addr + cnt - 1)) { + return ERR_EFLASH(EDRV_PARAMETER); + } + + if (eflash_priv->status.busy) { + return ERR_EFLASH(EDRV_BUSY); + } + + eflash_priv->status.error = 0U; + + int i; + + for (i = 0; i < cnt; i++) { + *((uint8_t *)data + i) = *(src_addr + i); + } + + return i; +} + +/** + \brief Program data to Flash. + \param[in] handle eflash handle to operate. + \param[in] addr Data address. + \param[in] data Pointer to a buffer containing the data to be programmed to Flash.. + \param[in] cnt Number of data items to program. + \return number of data items programmed or error code +*/ +int32_t csi_eflash_program(eflash_handle_t handle, uint32_t addr, const void *data, uint32_t cnt) +{ + EFLASH_NULL_PARAM_CHK(handle); + EFLASH_NULL_PARAM_CHK(data); + EFLASH_NULL_PARAM_CHK(cnt); + + ck_eflash_priv_t *eflash_priv = handle; + + if (eflash_priv->eflashinfo.start > addr || eflash_priv->eflashinfo.end < addr || eflash_priv->eflashinfo.start > (addr + cnt - 1) || eflash_priv->eflashinfo.end < (addr + cnt - 1)) { + return ERR_EFLASH(EDRV_PARAMETER); + } + + uint32_t cur = 0; + uint32_t pad_buf; + + if (addr & 0x3) { + return ERR_EFLASH(EDRV_PARAMETER); + } + + if (eflash_priv->status.busy) { + return ERR_EFLASH(EDRV_BUSY); + } + + eflash_priv->status.busy = 1U; + eflash_priv->status.error = 0U; + + if (((uint32_t)data & 0x3) == 0) { + cur = cnt - (cnt & 0x3); + eflash_program_word(handle, addr, (uint32_t *)data, cur >> 2); + } else { + uint8_t *buffer_b = (uint8_t *)data; + + for (; cur < cnt - 3; cur += 4, buffer_b += 4) { + pad_buf = buffer_b[0] | (buffer_b[1] << 8) | (buffer_b[2] << 16) | (buffer_b[3] << 24); + eflash_program_word(handle, addr + cur, &pad_buf, 1); + } + } + + if (cur < cnt) { + pad_buf = *((volatile uint32_t *)(addr + cur)); + uint8_t *pad = (uint8_t *)&pad_buf; + uint8_t *buff = (uint8_t *)data; + uint8_t i; + + for (i = 0; i < (cnt - cur); i++) { + pad[i] = buff[cur + i]; + } + + eflash_program_word(handle, addr + cur, &pad_buf, 1); + } + + + eflash_priv->status.busy = 0U; +#ifdef CONFIG_CHIP_CH2201 + eflash_verify(handle, addr, data, cnt); +#endif + + return cnt; +} + +/** + \brief Erase Flash Sector. + \param[in] handle eflash handle to operate. + \param[in] addr Sector address + \return error code +*/ +int32_t csi_eflash_erase_sector(eflash_handle_t handle, uint32_t addr) +{ + EFLASH_NULL_PARAM_CHK(handle); + + ck_eflash_priv_t *eflash_priv = handle; + + if (eflash_priv->eflashinfo.start > addr || eflash_priv->eflashinfo.end < addr) { + return ERR_EFLASH(EDRV_PARAMETER); + } + + + addr = addr & ~(EFLASH_SECTOR_SIZE - 1); + uint32_t fbase = eflash_priv->base; + + if (eflash_priv->status.busy) { + return ERR_EFLASH(EDRV_BUSY); + } + + eflash_priv->status.busy = 1U; + eflash_priv->status.error = 0U; + *(volatile uint32_t *)(fbase + 0x4) = addr; + *(volatile uint32_t *)(fbase + 0x10) = 0x1; + eflash_priv->status.busy = 0U; + + return 0; +} + +/** + \brief Erase complete Flash. + \param[in] handle eflash handle to operate. + \return error code +*/ +int32_t csi_eflash_erase_chip(eflash_handle_t handle) +{ + EFLASH_NULL_PARAM_CHK(handle); + + return ERR_EFLASH(EDRV_UNSUPPORTED); +} + +/** + \brief Get Flash information. + \param[in] handle eflash handle to operate. + \return Pointer to Flash information \ref eflash_info_t +*/ +eflash_info_t *csi_eflash_get_info(eflash_handle_t handle) +{ + if (handle == NULL) { + return NULL; + } + + ck_eflash_priv_t *eflash_priv = handle; + eflash_info_t *eflash_info = &(eflash_priv->eflashinfo); + + return eflash_info; +} + +/** + \brief Get EFLASH status. + \param[in] handle eflash handle to operate. + \return EFLASH status \ref eflash_status_t +*/ +eflash_status_t csi_eflash_get_status(eflash_handle_t handle) +{ + if (handle == NULL) { + eflash_status_t ret; + memset(&ret, 0, sizeof(eflash_status_t)); + return ret; + } + + ck_eflash_priv_t *eflash_priv = handle; + + return eflash_priv->status; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/eflash/ck_eflash.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/eflash/ck_eflash.h new file mode 100644 index 000000000..609529354 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/eflash/ck_eflash.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file ck_eflash.h + * @brief head file for ck eflash + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CK_EFLASH_H_ +#define _CK_EFLASH_H_ + +#include "drv_eflash.h" +#include "soc.h" + +#define EFLASH_SECTOR_SIZE 0x200 +#define EFLASH_ERASED_VALUE 0xff +#define EFLASH_PROGRAM_UINT 0x4 +#define EFLASH_PAGE_SIZE 0 + +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/pmu/ck_pmu.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/pmu/ck_pmu.c new file mode 100644 index 000000000..c3e0691c4 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/pmu/ck_pmu.c @@ -0,0 +1,366 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file ck_pmu.c + * @brief CSI Source File for Embedded Flash Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#include +#include +#include "drv_pmu.h" +#include "drv_tee.h" +#include "drv_eflash.h" +#include "ck_pmu.h" + +#define ERR_PMU(errno) (CSI_DRV_ERRNO_PMU_BASE | errno) +#define PMU_NULL_PARAM_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_PMU(EDRV_PARAMETER); \ + } \ + } while (0) + +typedef struct { + uint8_t idx; + uint32_t base; + uint32_t irq; + pmu_event_cb_t cb; + pmu_action_cb_t callback[32]; +} ck_pmu_priv_t; + +extern int32_t target_get_pmu(int32_t idx, uint32_t *base, uint32_t *irq); +extern int32_t arch_do_cpu_save(void); +extern int32_t arch_do_cpu_resume(void); +extern int32_t arch_resume_context(void); + +static ck_pmu_priv_t pmu_handle[CONFIG_PMU_NUM]; +static uint32_t s_callback_count = 0; +#define CONFIG_PMU_REGISTER_NUM_SAVE 19 +static uint32_t pmu_regs_saved[CONFIG_PMU_REGISTER_NUM_SAVE]; + +#define CONFIG_CPU_REGISTER_NUM_SAVE 27 +uint32_t arch_cpu_saved[CONFIG_CPU_REGISTER_NUM_SAVE]; +/* Driver Capabilities */ +#if 0 +static const pmu_capabilities_t driver_capabilities = { + .event_ready = 1, /* event_ready */ + .data_width = 2, /* data_width = 0:8-bit, 1:16-bit, 2:32-bit */ + .erase_chip = 0 /* erase_chip */ +}; +#endif +// +// Functions +// + +static void do_prepare_sleep_action(int32_t idx) +{ + uint8_t i; + volatile ck_pmu_reg_t *pbase = (ck_pmu_reg_t *)pmu_handle[idx].base; + for (i = 0; i < sizeof(pmu_regs_saved)/4; i++) { + pmu_regs_saved[i] = *((volatile uint32_t *)pbase + i); + } +} + +static void do_wakeup_sleep_action(int32_t idx) +{ + uint8_t i; + volatile ck_pmu_reg_t *pbase = (ck_pmu_reg_t *)pmu_handle[idx].base; + *((volatile uint32_t *)pbase + 5) = pmu_regs_saved[5]; + while((*((volatile uint32_t *)pbase + 6) & 0xf) != 0xf); + *((volatile uint32_t *)pbase + 11) = pmu_regs_saved[11]; + while((*((volatile uint32_t *)pbase + 6) & 0x1f) != 0x1f); + for (i = 0; i < sizeof(pmu_regs_saved)/4; i++) { + if (i != 5 && i != 11) { + *((volatile uint32_t *)pbase + i) = pmu_regs_saved[i]; + } + } + +} + +static uint8_t s_action[CONFIG_PMU_NUM] = {0x0}; +int32_t ck_pmu_power_manager(int32_t idx) +{ + if (!(s_action[idx] % 2)) { + do_prepare_sleep_action(idx); + s_action[idx]++; + } else { + do_wakeup_sleep_action(idx); + s_action[idx]--; + } + return 0; +} + +int32_t ck_pmu_act_callback(pmu_handle_t handle, pmu_event_e event) +{ + ck_pmu_priv_t *pmu_priv = handle; + uint32_t i; + for (i = 0; i < s_callback_count; i++) { + if (pmu_priv->callback[i]) { + pmu_priv->callback[i](event); + } + } + + if (i != s_callback_count) { + return -1; + } + return 0; +} + +void resume_context_from_stop_mode(void) +{ + ck_pmu_priv_t *pmu_priv = &pmu_handle[0]; +// ck_pmu_power_manager(PMU_EVENT_SLEEP_DONE); +// ck_pmu_act_callback(pmu_priv, PMU_EVENT_SLEEP_DONE); + *((volatile uint32_t *)0x50006100) |= 0xa0000000; + if (pmu_priv->cb) { + pmu_priv->cb(pmu_priv->idx, PMU_EVENT_SLEEP_DONE, PMU_MODE_STDBY); + } + + arch_do_cpu_resume(); +} + +#define CONFIG_LPM_RESUME_ADDR 0x1003f7f0 +void set_resume_func(uint32_t *func) +{ + eflash_handle_t eflash = csi_eflash_initialize(0, NULL); + csi_eflash_erase_sector(eflash, CONFIG_LPM_RESUME_ADDR); + csi_eflash_program(eflash, CONFIG_LPM_RESUME_ADDR, &func, 4); +} + +typedef enum { + WAIT_MODE = 0, + DOZE_MODE, + STOP_MODE, + STANDBY_MODE, + SLEEP_MODE +} lpm_mode_t; + + +void soc_sleep(pmu_handle_t handle, lpm_mode_t mode) +{ +#ifdef CONFIG_TEE_CA + tee_lpm_mode_e lpm_mode = 0; + + if (mode == WAIT_MODE) { + lpm_mode = TEE_LPM_MODE_WAIT; + } else if (mode == DOZE_MODE) { + lpm_mode = TEE_LPM_MODE_DOZE; + } else if (mode == STOP_MODE) { + lpm_mode = TEE_LPM_MODE_STOP; + } else if (mode == STANDBY_MODE) { + lpm_mode = TEE_LPM_MODE_STANDBY; + } else { + lpm_mode = TEE_LPM_MODE_WAIT; + } + + csi_tee_enter_lpm(0, 0, lpm_mode); + + if (mode == STOP_MODE) { + resume_context_from_stop_mode(); + } +#else + + ck_pmu_priv_t *pmu_priv = handle; + ck_pmu_reg_t *pmu_reg = (ck_pmu_reg_t *)pmu_priv->base; + + if (mode == WAIT_MODE) { + pmu_reg->LPCR |= CONFIG_PMU_ENTER_WAIT_MODE; + __WFI(); + } else if (mode == DOZE_MODE) { + pmu_reg->LPCR |= CONFIG_PMU_ENTER_DOZE_MODE; + __DOZE(); + } else if (mode == STOP_MODE) { + pmu_reg->LPCR |= CONFIG_PMU_ENTER_STOP_MODE; + __STOP(); + } else if (mode == STANDBY_MODE) { + pmu_reg->LPCR |= CONFIG_PMU_ENTER_STANDBY_MODE; + __STOP(); + } else { + pmu_reg->LPCR |= CONFIG_PMU_ENTER_WAIT_MODE; + __WFI(); + } + +#endif +} + +/** + \brief Initialize PMU Interface. 1. Initializes the resources needed for the PMU interface 2.registers event callback function + \param[in] idx device id + \param[in] cb_event Pointer to \ref pmu_event_cb_t + \return pointer to pmu handle +*/ +pmu_handle_t drv_pmu_initialize(int32_t idx, pmu_event_cb_t cb_event) +{ + if (idx < 0 || idx >= CONFIG_PMU_NUM) { + return NULL; + } + + /* obtain the pmu information */ + uint32_t base = 0u; + uint32_t irq = 0u; + int32_t real_idx = target_get_pmu(idx, &base, &irq); + + if (real_idx != idx) { + return NULL; + } + + ck_pmu_priv_t *pmu_priv = &pmu_handle[idx]; + + /* initialize the pmu context */ + pmu_priv->idx = idx; + pmu_priv->base = base; + pmu_priv->irq = irq; + pmu_priv->cb = cb_event; + + return (pmu_handle_t)pmu_priv; +} + +/** + \brief De-initialize PMU Interface. stops operation and releases the software resources used by the interface + \param[in] handle pmu handle to operate. + \return error code +*/ +int32_t drv_pmu_uninitialize(pmu_handle_t handle) +{ + PMU_NULL_PARAM_CHK(handle); + + ck_pmu_priv_t *pmu_priv = handle; + pmu_priv->cb = NULL; + + return 0; +} + +int32_t drv_pmu_power_control(int32_t idx, csi_power_stat_e state) +{ + switch (state) { + case DRV_POWER_LOW: + break; + case DRV_POWER_FULL: + break; + case DRV_POWER_OFF: + ck_pmu_power_manager(idx); +// csi_pmu_register_module(dw_usart_power_manager); + break; + default: + break; + } + + return 0; +} + +/** + \brief Get driver capabilities. + \param[in] idx device id + \return \ref pmu_capabilities_t +*/ +#if 0 +pmu_capabilities_t csi_pmu_get_capabilities(int32_t idx) +{ + if (idx < 0 || idx >= CONFIG_PMU_NUM) { + pmu_capabilities_t ret; + memset(&ret, 0, sizeof(pmu_capabilities_t)); + return ret; + } + + return driver_capabilities; +} +#endif +/** + \brief choose the pmu mode to enter + \param[in] handle pmu handle to operate. + \param[in] mode \ref pmu_mode_e + \return error code +*/ +int32_t drv_pmu_enter_sleep(pmu_handle_t handle, pmu_mode_e mode) +{ + PMU_NULL_PARAM_CHK(handle); + + switch (mode) { + case PMU_MODE_RUN: + break; + case PMU_MODE_SLEEP: + soc_sleep(handle, WAIT_MODE); + break; + case PMU_MODE_DORMANT: +// soc_sleep(handle, DOZE_MODE); + if (arch_do_cpu_save() == 0) { + *(volatile unsigned int *)(0xe000e1c0) = 0xffffffff; // reload wakeup_IRQ + *(volatile unsigned int *)(0xe000e280) = 0xffffffff; // clear pend IRQ + soc_sleep(handle, STOP_MODE); + } + break; + case PMU_MODE_STDBY: + *(volatile unsigned int *)(0xe000e1c0) = 0xffffffff; // reload wakeup_IRQ + *(volatile unsigned int *)(0xe000e280) = 0xffffffff; // clear pend IRQ + soc_sleep(handle, STANDBY_MODE); + break; + case PMU_MODE_SHUTDOWN: + *(volatile unsigned int *)(0xe000e1c0) = 0xffffffff; // reload wakeup_IRQ + *(volatile unsigned int *)(0xe000e280) = 0xffffffff; // clear pend IRQ + soc_sleep(handle, STANDBY_MODE); + break; + default: + return ERR_PMU(EDRV_PARAMETER); + } + + return 0; +} + +/** + \brief register module to action pmu event + \param[in] handle pmu handle to operate. + \param[in] callback Pointer to \ref pmu_action_cb_t + \return error code +*/ +int32_t drv_pmu_register_module(pmu_action_cb_t callback) +{ + ck_pmu_priv_t *pmu_priv = (ck_pmu_priv_t *)&pmu_handle[0]; + + if (callback == NULL) { + return ERR_PMU(EDRV_PARAMETER); + } + pmu_priv->callback[s_callback_count] = callback; + s_callback_count++; + return 0; +} + +/** + \brief Config the wakeup source. + \param[in] handle pmu handle to operate + \param[in] type \ref pmu_wakeup_type + \param[in] pol \ref pmu_wakeup_pol + \param[in] enable flag control the wakeup source is enable or not + \return error code +*/ +int32_t drv_pmu_config_wakeup_source(pmu_handle_t handle, uint32_t irq_num, pmu_wakeup_type_e type, pmu_wakeup_pol_e pol, uint8_t enable) +{ + PMU_NULL_PARAM_CHK(handle); + + if (enable) { +// csi_vic_enable_irq(irq_num); +// csi_vic_enable_sirq(irq_num); +// csi_vic_set_wakeup_irq(irq_num); + drv_nvic_set_wakeup_irq(irq_num); + } else { +// csi_vic_disable_irq(irq_num); +// csi_vic_disable_sirq(irq_num); + drv_nvic_clear_wakeup_irq(irq_num); +// csi_vic_clear_wakeup_irq(irq_num); + } + return 0; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/pmu/ck_pmu.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/pmu/ck_pmu.h new file mode 100644 index 000000000..00478989e --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/pmu/ck_pmu.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file ck_pmu.h + * @brief head file for ck pmu + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CK_PMU_H_ +#define _CK_PMU_H_ + +#include "drv_pmu.h" +#include "soc.h" + +#define CONFIG_PMU_ENTER_WAIT_MODE 0x4 +#define CONFIG_PMU_ENTER_DOZE_MODE 0x4 +#define CONFIG_PMU_ENTER_STOP_MODE 0xc +#define CONFIG_PMU_ENTER_STANDBY_MODE 0x14 + +typedef struct { + __IOM uint32_t LPCR; /* Offset: 0x000 (R/W) low power control register */ + __IOM uint32_t MCLKSEL; /* Offset: 0x004 (R/W) MCLK select register */ + __IOM uint32_t CRCR; /* Offset: 0x008 (R/W) clock ratio control register */ + __IOM uint32_t CGCR; /* Offset: 0x00c (R/W) clock gate control register */ + __IOM uint32_t CGSR; /* Offset: 0x010 (R/W) clock gate status register */ + __IOM uint32_t CLKDSENR; /* Offset: 0x014 (R/W) clock disable register */ + __IOM uint32_t CLKSTBR; /* Offset: 0x018 (R/W) clock stable register */ + __IOM uint32_t CLKSTBST; /* Offset: 0x01c (R/W) clock stable interrupt statue register */ + __IOM uint32_t CLKSTBMK; /* Offset: 0x020 (R/W) clock stable interrupt mask register */ + __IOM uint32_t CSSCR; /* Offset: 0x024 (R/W) clock source stable counter register */ + __IOM uint32_t DFCC; /* Offset: 0x028 (R/W) dynamic frequence conversion control register */ + __IOM uint32_t PCR; /* Offset: 0x02c (R/W) pll control register */ + __IOM uint32_t PLTR; /* Offset: 0x030 (R/W) pll lock timer register */ + __IOM uint32_t SWHRC; /* Offset: 0x034 (R/W) software HRST control register */ + __IOM uint32_t SWHRD; /* Offset: 0x038 (R/W) software HRST duration register */ + __IOM uint32_t SWPRC; /* Offset: 0x03c (R/W) software PRST control register */ + __IOM uint32_t SWPRD; /* Offset: 0x040 (R/W) software PRST duration register */ + __IOM uint32_t SWRE; /* Offset: 0x044 (R/W) software reset enable register */ + __IOM uint32_t BOOTSEL; /* Offset: 0x048 (R/W) boot selection register */ + __IOM uint32_t SCGCR; /* Offset: 0x04c (R/W) security clock gate control register */ + __IOM uint32_t SCGSR; /* Offset: 0x050 (R/W) security clock gate status register */ +} ck_pmu_reg_t; + +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/rsa/ck_rsa.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/rsa/ck_rsa.c new file mode 100644 index 000000000..c7d999cdf --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/rsa/ck_rsa.c @@ -0,0 +1,1285 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file ck_rsa.c + * @brief CSI Source File for RSA Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include +#include "drv_rsa.h" +#include "ck_rsa.h" +#include "irq.h" + +#define ERR_RSA(errno) (CSI_DRV_ERRNO_RSA_BASE | errno) +#define RSA_NULL_PARAM_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_RSA(EDRV_PARAMETER); \ + } \ + } while (0) + + +typedef struct { + uint32_t base; + uint32_t irq; + rsa_event_cb_t cb; + rsa_data_bits_e data_bit; + rsa_endian_mode_e endian; + rsa_padding_t padding; + rsa_status_t status; +} ck_rsa_priv_t; + +extern int32_t target_get_rsa_count(void); +extern int32_t target_get_rsa(int32_t idx, uint32_t *base, uint32_t *irq); + +static ck_rsa_priv_t rsa_handle[CONFIG_RSA_NUM]; + +extern uint8_t modulus[]; +static ck_rsa_reg_t *rsa_reg = NULL; +/* Driver Capabilities */ +static const rsa_capabilities_t driver_capabilities = { + .bits_192 = 1, /* 192bits modular mode */ + .bits_256 = 1, /* 256bits modular mode */ + .bits_512 = 1, /* 512bits modular mode */ + .bits_1024 = 1, /* 1024bits modular mode */ + .bits_2048 = 1 /* 2048bits modular mode */ +}; + +extern int32_t target_get_rsa(int32_t idx, uint32_t *base, uint32_t *irq); +extern int32_t target_get_rsa_count(void); +// +// Functions +// + +static uint32_t sw_exptmod_2_2m(const uint32_t *modulus, uint32_t words, uint32_t *tmp_c); +static uint32_t get_valid_bits(const uint32_t *addr, uint32_t wordsize, uint32_t keywords); + +#ifdef RSA_USING_ID2KEY +static uint32_t g_acc[RSA_KEY_WORD]; +#endif + +static inline void rsa_clear_int(void) +{ + rsa_reg->rsa_isr = 0xffff; + rsa_reg->rsa_imr = 0x0000; +} + +static inline void rsa_setm_width(uint32_t width) +{ + rsa_reg->rsa_mwid = width; +} + +static inline void rsa_setd_width(uint32_t width) +{ + rsa_reg->rsa_ckid = width; +} + +static inline void rsa_setb_width(uint32_t width) +{ + rsa_reg->rsa_bwid = width; +} + +static inline void rsa_cal_q(void) +{ + rsa_reg->rsa_ctrl = RAS_CALCULATE_Q; +} + +static inline void rsa_opr_start(void) +{ + rsa_reg->rsa_ctrl = RSA_ENABLE_MODULE; +} + +static inline void rsa_opr_reset(void) +{ + rsa_reg->rsa_ctrl = RSA_ENDIAN_MODE; + rsa_reg->rsa_rst |= RSA_RESET; + + while (rsa_reg->rsa_rst); +} + +static inline uint32_t rsa_loop_cnt(void) +{ + return rsa_reg->rsa_lp_cnt; +} + +static inline uint32_t rsa_cal_q_done(void) +{ + return (rsa_reg->rsa_isr >> RSA_CAL_Q_DONE_OFFSET) & 0x1; +} + +static inline uint32_t rsa_opr_done(void) +{ + return (rsa_reg->rsa_isr) & 0x1; +} + +static inline uint32_t rsa_raise_exception(void) +{ + return (rsa_reg->rsa_isr) & 0x1E; +} + +static inline uint32_t rsa_loadm(uint32_t *data, uint32_t length) +{ + uint32_t i; + uint32_t baseaddr = (uint32_t)&rsa_reg->rsa_rfm; + + for (i = 0; i < length; i++) { + *(volatile uint32_t *)baseaddr = data[i]; + baseaddr = baseaddr + 4; + } + + return 0; +} + +static void rsa_loadd(uint32_t *data, uint32_t length) +{ + uint32_t i; + uint32_t baseaddr = (uint32_t)&rsa_reg->rsa_rfd; + + for (i = 0; i < length; i++) { + *(volatile uint32_t *)baseaddr = data[i]; + baseaddr = baseaddr + 4; + } +} + +static void rsa_loadc(uint32_t *data, uint32_t length) +{ + uint32_t i; + uint32_t baseaddr = (uint32_t)&rsa_reg->rsa_rfc; + + for (i = 1; i < length + 1; i++) { + *(volatile uint32_t *)baseaddr = data[i - 1]; + baseaddr = baseaddr + 4; + } +} + +static void rsa_loadb(uint32_t *data, uint32_t length) +{ + uint32_t i; + uint32_t baseaddr = (uint32_t)&rsa_reg->rsa_rfb; + + for (i = 0; i < length; i++) { + *(volatile uint32_t *)baseaddr = data[i]; + baseaddr = baseaddr + 4; + } +} + +static void rsa_read_r(uint32_t data[], uint32_t length) +{ + uint32_t i; + uint32_t baseaddr = (uint32_t)&rsa_reg->rsa_rfr; + + for (i = 0; i < length; i++) { + data[i] = *(uint32_t *)baseaddr; + baseaddr = baseaddr + 4; + } +} + +#if (CONFIG_PLATFORM_HOBBIT1_2 > 0) +// FIXME +// Since there is a piece of memory hole in RSA engine. we should +// jump the hold to continue run without disable interrupt +#define RSA_SP_HOLE_DOWN 0x60000900 +#define RSA_SP_HOLE_UP 0x600009FF +#define TEE_CONEXT_SIZE 128 +static uint32_t rsa_run_adjust_sp_if_need(uint32_t sp) +{ + uint32_t sp_chg; + + // if current sp is in hole, adjust new sp + if ((sp < (RSA_SP_HOLE_UP + TEE_CONEXT_SIZE)) && (sp > RSA_SP_HOLE_DOWN)) + sp_chg = 1; + else + sp_chg = 0; + + return sp_chg; +} + +static void rsa_run_by_assemble(void) +{ + __asm__ __volatile__ ( + "subi sp, 0x10 \n" + "stm r4-r7, (sp) \n" + + // update sp + "mov r4, sp \n" + "subi r4, 0x180 \n" + "mov sp, r4 \n" + + // enable rsa engine + "lrw r5, 0x4000a00c \n" + "movi r6, 3 \n" + "stw r6, (r5) \n" + // check rsa end + "__chk_loop: \n" + "lrw r5, 0x4000a020 \n" + "ldw r6, (r5) \n" + "btsti r6, 0 \n" + "bt __chk_end \n" + + "lrw r5, 0x4000a020 \n" + "ldw r6, (r5) \n" + "movi r7, 0x1e \n" + "and r6, r7 \n" + "cmpnei r6, 0 \n" + "bf __chk_loop \n" + + "lrw r5, 0x4000a014 \n" + "ldw r6, (r5) \n" + "cmplti r6, 0x40 \n" + "bt __chk_loop \n" + + "__chk_end: \n" + + // update sp + "mov r4, sp \n" + "addi r4, 0x180 \n" + "mov sp, r4 \n" + + "ldm r4-r7, (sp) \n" + "addi sp, 0x10 \n" + ); +} +#endif + +static uint32_t rsa_exptmod(const uint32_t *modulus, const uint32_t *exponent, + const uint32_t *base, uint32_t *out, uint32_t keywords, + uint32_t *tmp_c) +{ + uint32_t ret = 0; + if ((NULL == exponent) || (NULL == base) || (NULL == out)) { + return 1; + } + +#ifdef RSA_USING_ID2KEY + memcpy(tmp_c, g_acc, sizeof(g_acc)); +#endif + + /* reset for safe */ + rsa_opr_reset(); + /* clear and disable int */ + rsa_clear_int(); + /* set m */ + rsa_setm_width(keywords >> 1); + rsa_loadm((uint32_t *)modulus, keywords); + /* set d */ + rsa_setd_width(get_valid_bits(exponent, keywords, keywords) - 1); + rsa_loadd((uint32_t *)exponent, keywords); + /* set b */ + rsa_setb_width(keywords >> 1); + rsa_loadb((uint32_t *)base, keywords); + /* set c */ +#ifndef RSA_USING_ID2KEY + rsa_loadc(tmp_c, keywords); +#else + rsa_loadc(g_acc, keywords); +#endif + + rsa_cal_q(); + + while (!rsa_cal_q_done() && (!rsa_raise_exception())); + + if (!rsa_raise_exception()) { +#if (CONFIG_PLATFORM_HOBBIT1_2 > 0) + ///////////////// FIXME //////////////////////// + if (rsa_run_adjust_sp_if_need(get_old_sp())) { + rsa_run_by_assemble(); + } else { +#endif + rsa_opr_start(); + while ((!rsa_opr_done()) && (rsa_loop_cnt() < MAX_RSA_LP_CNT) && (!rsa_raise_exception())); +#if (CONFIG_PLATFORM_HOBBIT1_2 > 0) + } +#endif + if ((rsa_loop_cnt() >= MAX_RSA_LP_CNT) + || rsa_raise_exception()) { + ret = 1; + } else { + rsa_read_r(out, keywords); + } + } else { + ret = 1; + } + + rsa_opr_reset(); + + return ret; + +} + +static uint32_t get_valid_bits(const uint32_t *addr, uint32_t wordsize, uint32_t keywords) +{ + uint32_t i = 0; + uint32_t j = 0; + + for (i = wordsize; i > 0; i--) { + if (addr[i - 1]) { + break; + } + } + + for (j = keywords; j > 0; j--) { + if (addr[i - 1] & (0x1 << (j - 1))) { + break; + } + } + + return ((i - 1) << 5) + j; +} + +static uint32_t get_first_nonzero_words(uint32_t *a, uint32_t max_words) +{ + uint32_t i = 0; + + for (i = max_words; i > 0; i--) { + if (a[i - 1]) { + return i; + } + } + + return 0; +} + +static uint32_t word_array_left_shift(uint32_t *a, uint32_t words, + uint32_t shift_bits, uint32_t *r) +{ + uint32_t i = 0; + uint32_t w = shift_bits >> 5; + uint32_t b = shift_bits - (w << 5); + + for (i = 0; i < w; i++) { + r[i] = 0; + } + + uint32_t tmp = 0; + + for (i = 0; i < words; i++) { + r[w + i] = (tmp | ((a[i] << b) & (~((0x1 << b) - 1)))); + tmp = ((a[i] >> (32 - b)) & ((0x1 << b) - 1)); + } + + r[w + i] = tmp; + + return 0; +} + +/* r = a - b */ +static uint32_t _word_array_sub(uint32_t *a, uint32_t a_words, + uint32_t *b, uint32_t b_words, + uint32_t *r) +{ + uint32_t i; + uint64_t tmp = 0; + uint32_t borrow = 0; + + for (i = 0; i < b_words; i++) { + tmp = UINT32_TO_UINT64(a[i]) - UINT32_TO_UINT64(b[i]) - UINT32_TO_UINT64(borrow); + r[i] = UINT64L_TO_UINT32(tmp); + borrow = ((UINT64H_TO_UINT32(tmp) == 0) ? (0) : (0xffffffff - UINT64H_TO_UINT32(tmp) + 1)); + } + + for (i = b_words; i < a_words; i++) { + tmp = UINT32_TO_UINT64(a[i]) - UINT32_TO_UINT64(borrow); + r[i] = UINT64L_TO_UINT32(tmp); + borrow = ((UINT64H_TO_UINT32(tmp) == 0) ? (0) : (0xffffffff - UINT64H_TO_UINT32(tmp) + 1)); + } + + if (borrow) { + return -1; + } + + return 0; +} + +static uint32_t word_array_mod(uint32_t *a, uint32_t a_words, + uint32_t *b, uint32_t b_words, + uint32_t *r, uint32_t keywords) +{ + uint32_t ret; + bignum_t tmpa; + bignum_t tmpb; + + memset(&tmpa, 0, sizeof(tmpa)); + memset(&tmpb, 0, sizeof(tmpa)); + + uint32_t b_valid_bits = get_valid_bits(b, b_words, keywords); + + memcpy(tmpa.pdata, a, (a_words << 2)); + + do { + uint32_t tmpa_words = get_first_nonzero_words(tmpa.pdata, a_words); + uint32_t tmpa_valid_bits = get_valid_bits(tmpa.pdata, tmpa_words, keywords); + + if (tmpa_valid_bits > b_valid_bits + 1) { + memset(tmpb.pdata, 0, (a_words << 2)); + word_array_left_shift(b, b_words, tmpa_valid_bits - b_valid_bits - 1, + tmpb.pdata); + uint32_t tmpb_words = get_first_nonzero_words(tmpb.pdata, a_words); + ret = _word_array_sub(tmpa.pdata, tmpa_words, tmpb.pdata, tmpb_words, tmpa.pdata); + } else if (tmpa_words == b_words) { + memcpy(r, tmpa.pdata, (tmpa_words << 2)); + ret = _word_array_sub(r, tmpa_words, b, b_words, tmpa.pdata); + } else { + ret = _word_array_sub(tmpa.pdata, tmpa_words, b, b_words, tmpa.pdata); + } + } while (ret == 0); + + return 0; +} + +static uint32_t sw_exptmod_2_2m(const uint32_t *modulus, uint32_t words, uint32_t *tmp_c) +{ + bignum_t tmp; + + memset(&tmp, 0, sizeof(bignum_t)); + + uint32_t m_valid_bits = (words << 5); + + uint32_t data1 = 0x1; + word_array_left_shift(&data1, 1, (m_valid_bits << 1), tmp.pdata); + tmp.words = get_first_nonzero_words(tmp.pdata, words * 2 + 1); + + uint32_t ret = word_array_mod(tmp.pdata, tmp.words, + (uint32_t *)modulus, words, tmp_c, words); + + if (ret != 0) { + return ret; + } + + return 0; +} + +static void convert_byte_array(uint8_t *in, uint8_t *out, uint32_t len) +{ + uint32_t idx, round = len >> 1; + + for (idx = 0; idx < round; idx++) { + uint8_t tmp = *(in + idx); + *(out + idx) = *(in + len - 1 - idx); + *(out + len - 1 - idx) = tmp; + } + + if (len & 0x1) { + *(out + round) = *(in + round); + } +} + +static void convert_buf_to_bndata(const uint8_t *src, uint32_t src_bytes, + uint32_t *dst, uint32_t dst_words) +{ + memset(dst, 0, dst_words << 2); + convert_byte_array((uint8_t *)src, (uint8_t *)dst, src_bytes); +} + +static void convert_bndata_to_buf(const uint32_t *src, uint32_t src_words, + uint8_t *dst, uint32_t dst_bytes) +{ + memset(dst, 0, dst_bytes); + convert_byte_array((uint8_t *)src, (uint8_t *)dst, dst_bytes); +} + +static const uint8_t der_sha256_t[] = { + 0x30, 0x31, + 0x30, 0x0d, + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, /* id-sha256 */ + 0x05, 0x00, + 0x04, 0x20 +}; + +static const uint8_t der_sha1_t[] = { + 0x30, 0x21, + 0x30, 0x09, + 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, + 0x05, 0x00, + 0x04, 0x14 +}; + +static const uint8_t der_md5_t[] = { + 0x30, 0x20, /* type Sequence, length 0x20 (32) */ + 0x30, 0x0c, /* type Sequence, length 0x09 */ + 0x06, 0x08, /* type OID, length 0x05 */ + 0x2a, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05, /* id-md5 */ + 0x05, 0x00, /* NULL */ + 0x04, 0x10 /* Octet string, length 0x10 (16), followed by md5 hash */ +}; + +static uint32_t rsa_padding_pkcs(uint8_t *dgst, + uint8_t *out, + uint32_t type, + uint32_t keybytes) + +{ + uint32_t i; + uint8_t *p; + uint8_t *der; + uint32_t der_len; + uint32_t hashlen; + uint32_t pslen; + + if (type == MD5_PADDING) { + der = (uint8_t *)der_md5_t; + der_len = sizeof(der_md5_t); + hashlen = MD5_HASH_SZ; + } else if (type == SHA256_PADDING) { + der = (uint8_t *)der_sha256_t; + der_len = sizeof(der_sha256_t); + hashlen = SHA256_HASH_SZ; + } else { + der = (uint8_t *)der_sha1_t; + der_len = sizeof(der_sha1_t); + hashlen = SHA1_HASH_SZ; + } + + p = (uint8_t *)out; + + *(p++) = 0x00; + *(p++) = 0x01; + + /* pad out with 0xff data */ + pslen = keybytes - 3 - der_len - hashlen; + + for (i = 0; i < pslen; i++) { + p[i] = 0xff; /* PS */ + } + + p += pslen; + *(p++) = 0x0; + + for (i = 0; i < der_len; i++) { + p[i] = der[i]; + } + + p += der_len; + + for (i = 0; i < hashlen; i++) { + p[i] = dgst[i]; + } + + return 0; +} + +static uint32_t rsa_checking_pkcs(uint8_t *dgst, + uint8_t *in, + uint32_t inlen, + uint8_t *is_valid, + uint32_t type, + uint32_t keybytes) +{ + uint32_t i; + uint32_t ret; + const uint8_t *p; + uint8_t *der = NULL; + uint32_t der_len = 0; + uint32_t hashlen = 0; + uint32_t pslen; + + if (type == MD5_PADDING) { + der = (uint8_t *)der_md5_t; + der_len = sizeof(der_md5_t); + hashlen = MD5_HASH_SZ; + } else if (type == SHA1_PADDING) { + der = (uint8_t *)der_sha1_t; + der_len = sizeof(der_sha1_t); + hashlen = SHA1_HASH_SZ; + } else if (type == SHA256_PADDING) { + der = (uint8_t *)der_sha256_t; + der_len = sizeof(der_sha256_t); + hashlen = SHA256_HASH_SZ; + } + + *is_valid = 0; + + pslen = keybytes - 3 - der_len - hashlen; + p = in; + p++; + + if (*(p) != 0x01) { + ret = -1; + goto _verify_fail; + } + + p++; + + /* scan PS */ + for (i = 0; i < pslen; i++) { + if (*(p + i) != 0xff) { + ret = -2; + goto _verify_fail; + } + } + + p += pslen; + + if ((*p) != 0x00) { + ret = -1; + goto _verify_fail; + } + + p++; + + /* scan t */ + for (i = 0; i < der_len; i++) { + if (*(p + i) != der[i]) { + ret = -3; + goto _verify_fail; + } + } + + p += der_len; + + for (i = 0; i < hashlen; i++) { + if (*(p + i) != dgst[i]) { + ret = -4; + goto _verify_fail; + } + } + + *is_valid = 1; + ret = 0; + +_verify_fail: + + return ret; +} + +static uint32_t rsa_padding_es_pkcs(uint8_t *dgst, + uint32_t dgstlen, + uint8_t *out, + uint32_t padding, + uint32_t keybytes) + +{ + uint32_t i; + uint8_t *p; + uint32_t pslen; + + p = (uint8_t *)out; + + *(p++) = 0x00; + *(p++) = 0x02; + + /* pad out with 0xff data */ + pslen = keybytes - 3 - dgstlen; + + for (i = 0; i < pslen; i++) { + p[i] = 0xff; /* PS */ + } + + p += pslen; + *(p++) = 0x0; + + for (i = 0; i < dgstlen; i++) { + p[i] = dgst[i]; + } + + return 0; +} + +static uint32_t rsa_checking_es_pkcs(uint8_t *out, + uint32_t *out_size, + uint8_t *src, + uint32_t src_size, + uint32_t padding, + uint32_t keybytes) +{ + uint32_t i; + uint8_t *p; + uint8_t *p_src; + uint32_t pslen; + + p = (uint8_t *)src; + p_src = p; + *(p++) = 0x00; + + if (padding == PKCS1_PADDING) { + if (*(p++) != 0x02) { + return -1; + } + } else { + if (*(p++) != 0x01) { + return -2; + } + } + + pslen = src_size - 2; + + while (pslen--) { + if (*(p++) == 0x0) { + break; + } + } + + if (padding == PKCS1_PADDING) { + *out_size = pslen; + } else { + *out_size = keybytes; + } + + for (i = 0; i < *out_size; i++) { + if (padding == PKCS1_PADDING) { + out[i] = p[i]; + } else { + out[i] = p_src[i]; + } + } + + return 0; +} + +int rsa_encrypt(uint8_t *n, uint8_t *e, + uint8_t *src, uint32_t src_size, + uint8_t *out, uint32_t *out_size, + uint32_t padding, uint32_t keybits_len, + uint32_t *tmp_c) +{ + uint32_t ret; + uint32_t tmp_n[RSA_KEY_WORD]; + uint32_t tmp_e[RSA_KEY_WORD]; + uint32_t tmp_in_out[RSA_KEY_WORD]; + uint32_t keywords = 0, keybytes = 0; + + keywords = GET_KEY_WORD(keybits_len); + keybytes = GET_KEY_BYTE(keybits_len); + + convert_buf_to_bndata(n, keybytes, tmp_n, keywords); + convert_buf_to_bndata(e, keybytes, tmp_e, keywords); + + if (padding == PKCS1_PADDING) { + ret = rsa_padding_es_pkcs(src, + src_size, + (uint8_t *)tmp_in_out, + padding, + keybytes); + + if (ret != 0) { + return ret; + } + + convert_byte_array((uint8_t *)tmp_in_out, (uint8_t *)tmp_in_out, keybytes); + } else { + convert_byte_array((uint8_t *)src, (uint8_t *)tmp_in_out, keybytes); + } + + ret = rsa_exptmod(tmp_n, tmp_e, tmp_in_out, tmp_in_out, keywords, tmp_c); + + if (ret != 0) { + return ret; + } + + convert_bndata_to_buf(tmp_in_out, keywords, out, keybytes); + *out_size = keybytes; + return ret; +} + +int rsa_decrypt(uint8_t *n, uint8_t *d, + uint8_t *src, uint32_t src_size, + uint8_t *out, uint32_t *out_size, + uint32_t padding, uint32_t keybits_len, + uint32_t *tmp_c) +{ + uint32_t ret; + uint32_t tmp_n[RSA_KEY_WORD]; + uint32_t tmp_d[RSA_KEY_WORD]; + uint32_t tmp_in_out[RSA_KEY_WORD]; + uint32_t keywords = 0, keybytes = 0; + + keywords = GET_KEY_WORD(keybits_len); + keybytes = GET_KEY_BYTE(keybits_len); + + convert_buf_to_bndata(n, keybytes, tmp_n, keywords); + convert_buf_to_bndata(d, keybytes, tmp_d, keywords); + convert_buf_to_bndata(src, src_size, tmp_in_out, keywords); + + ret = rsa_exptmod(tmp_n, tmp_d, tmp_in_out, tmp_in_out, keywords, tmp_c); + + if (ret != 0) { + return ret; + } + + convert_byte_array((uint8_t *)tmp_in_out, (uint8_t *)tmp_in_out, keybytes); + + ret = rsa_checking_es_pkcs(out, + out_size, + (uint8_t *)tmp_in_out, + keybytes, + padding, + keybytes); + + return ret; +} + +int rsa_sign(uint8_t *n, uint8_t *d, + uint8_t *src, uint32_t src_size, + uint8_t *signature, uint32_t *sig_size, + uint32_t type, uint32_t keybits_len, + uint32_t *tmp_c) +{ + uint32_t ret; + uint32_t tmp_n[RSA_KEY_WORD]; + uint32_t tmp_d[RSA_KEY_WORD]; + uint32_t tmp_in_out[RSA_KEY_WORD]; + + uint32_t keywords = 0, keybytes = 0; + + keywords = GET_KEY_WORD(keybits_len); + keybytes = GET_KEY_BYTE(keybits_len); + + convert_buf_to_bndata(n, keybytes, tmp_n, keywords); + convert_buf_to_bndata(d, keybytes, tmp_d, keywords); + + ret = rsa_padding_pkcs(src, + (uint8_t *)tmp_in_out, + type, + keybytes); + + if (ret != 0) { + return ret; + } + + convert_byte_array((uint8_t *)tmp_in_out, (uint8_t *)tmp_in_out, keybytes); + + ret = rsa_exptmod(tmp_n, tmp_d, tmp_in_out, tmp_in_out, keywords, tmp_c); + + if (ret != 0) { + return ret; + } + + convert_bndata_to_buf(tmp_in_out, keywords, signature, keybytes); + *sig_size = keybytes; + + return 0; +} + +int rsa_verify(uint8_t *n, uint8_t *e, + uint8_t *src, uint32_t src_size, + uint8_t *signature, uint32_t sig_size, + uint32_t type, uint32_t keybits_len, + uint8_t *result, uint32_t *tmp_c) +{ + uint32_t ret; + uint32_t tmp_n[RSA_KEY_WORD]; + uint32_t tmp_e[RSA_KEY_WORD]; + uint32_t tmp_in_out[RSA_KEY_WORD]; + uint32_t keywords = 0, keybytes = 0; + + *result = 0; + + keywords = GET_KEY_WORD(keybits_len); + keybytes = GET_KEY_BYTE(keybits_len); + + convert_buf_to_bndata(n, keybytes, tmp_n, keywords); + convert_buf_to_bndata(e, keybytes, tmp_e, keywords); + convert_buf_to_bndata(signature, sig_size, tmp_in_out, keywords); + + ret = rsa_exptmod(tmp_n, tmp_e, tmp_in_out, tmp_in_out, keywords, tmp_c); + + if (ret != 0) { + return ret; + } + + convert_byte_array((uint8_t *)tmp_in_out, (uint8_t *)tmp_in_out, keybytes); + + ret = rsa_checking_pkcs(src, + (uint8_t *)tmp_in_out, + keybytes, + result, + type, + keybytes); + + return ret; +} + +static int rsa_sw_exptmod_2_2m(uint8_t *modulus, uint32_t keybits_len, uint32_t *tmp_c) +{ + uint32_t keywords = 0, keybytes = 0; + uint32_t tmp_n[RSA_KEY_WORD]; + + keywords = GET_KEY_WORD(keybits_len); + keybytes = GET_KEY_BYTE(keybits_len); + + convert_buf_to_bndata(modulus, keybytes, tmp_n, keywords); + + sw_exptmod_2_2m(tmp_n, keywords, tmp_c); + return 0; +} + +int rsa_sw_calc_modulus(uint8_t *modulus, uint32_t keybits_len) +{ +#ifdef RSA_USING_ID2KEY + static uint32_t current_keybits_len; + + if (current_keybits_len != keybits_len) { + rsa_sw_exptmod_2_2m((uint8_t *)modulus, keybits_len, g_acc); + current_keybits_len = keybits_len; + } + +#endif + return 0; +} + +/** + \brief get rsa handle count. + \return rsa handle count +*/ +int32_t csi_rsa_get_instance_count(void) +{ + return target_get_rsa_count(); +} + +/** + \brief Initialize RSA Interface. 1. Initializes the resources needed for the RSA interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_rsa_get_instance_count() + \param[in] cb_event Pointer to \ref rsa_event_cb_t + \return pointer to rsa handle +*/ +rsa_handle_t csi_rsa_initialize(int32_t idx, rsa_event_cb_t cb_event) +{ + if (idx < 0 || idx >= CONFIG_RSA_NUM) { + return NULL; + } + + /* obtain the rsa information */ + uint32_t base = 0u; + uint32_t irq; + int32_t real_idx = target_get_rsa(idx, &base, &irq); + + if (real_idx != idx) { + return NULL; + } + + ck_rsa_priv_t *rsa_priv = &rsa_handle[idx]; + + rsa_priv->base = base; + rsa_priv->irq = irq; + + /* initialize the rsa context */ + rsa_priv->cb = cb_event; + rsa_priv->data_bit = RSA_DATA_BITS_1024; + rsa_priv->endian = RSA_ENDIAN_MODE_LITTLE; + rsa_priv->padding.padding_type = RSA_PADDING_MODE_PKCS1; + rsa_priv->padding.hash_type = RSA_HASH_TYPE_SHA1; + rsa_priv->status.busy = 0; + +#ifdef RSA_USING_ID2KEY + memset(g_acc, 0x0, sizeof(g_acc)); +#endif + + return (rsa_handle_t)rsa_priv; +} + +/** + \brief De-initialize RSA Interface. stops operation and releases the software resources used by the interface + \param[in] handle rsa handle to operate. + \return error code +*/ +int32_t csi_rsa_uninitialize(rsa_handle_t handle) +{ + RSA_NULL_PARAM_CHK(handle); + + ck_rsa_priv_t *rsa_priv = handle; + rsa_priv->cb = NULL; + + return 0; +} + +/** + \brief Get driver capabilities. + \param[in] handle rsa handle to operate. + \return \ref rsa_capabilities_t +*/ +rsa_capabilities_t csi_rsa_get_capabilities(rsa_handle_t handle) +{ + return driver_capabilities; +} + +/** + \brief config rsa mode. + \param[in] handle rsa handle to operate. + \param[in] data_bits \ref rsa_data_bits_e + \param[in] endian \ref rsa_endian_mode_e + \return error code +*/ +int32_t csi_rsa_config(rsa_handle_t handle, + rsa_data_bits_e data_bits, + rsa_endian_mode_e endian, + void *arg + ) +{ + RSA_NULL_PARAM_CHK(handle); + + ck_rsa_priv_t *rsa_priv = handle; + rsa_reg = (ck_rsa_reg_t *)(rsa_priv->base); + + /* config the data bits */ + switch (data_bits) { + case RSA_DATA_BITS_192: + case RSA_DATA_BITS_256: + case RSA_DATA_BITS_512: + return ERR_RSA(EDRV_UNSUPPORTED); + + case RSA_DATA_BITS_1024: + case RSA_DATA_BITS_2048: + rsa_priv->data_bit = data_bits; + break; + + default: + return ERR_RSA(EDRV_PARAMETER); + } + + /* config the endian mode */ + if (endian == RSA_ENDIAN_MODE_LITTLE) { + rsa_priv->endian = endian; + } else if (endian == RSA_ENDIAN_MODE_BIG) { + return ERR_RSA(EDRV_UNSUPPORTED); + } else { + return ERR_RSA(EDRV_PARAMETER); + } + + if (arg != NULL) { +#ifdef RSA_USING_ID2KEY + uint32_t keybits_len = 1024; + + if (data_bits == RSA_DATA_BITS_2048) { + keybits_len = 2048; + } + + rsa_sw_calc_modulus(arg, keybits_len); +#else + //memcpy(g_acc, arg, sizeof(g_acc)); +#endif + } + + return 0; +} + +/** + \brief encrypt + \param[in] handle rsa handle to operate. + \param[in] n Pointer to the public modulus + \param[in] e Pointer to the public exponent + \param[in] src Pointer to the source data. + \param[in] src_size the source data len + \param[out] out Pointer to the result buffer + \param[out] out_size the result size + \param[in] padding \ref rsa_padding_t + \return error code +*/ +int32_t csi_rsa_encrypt(rsa_handle_t handle, void *n, void *e, void *src, int32_t src_size, void *out, uint32_t *out_size, rsa_padding_t padding) +{ +#ifndef RSA_USING_ID2KEY + uint32_t tmp_c[RSA_KEY_WORD]; +#endif + RSA_NULL_PARAM_CHK(handle); + RSA_NULL_PARAM_CHK(n); + RSA_NULL_PARAM_CHK(e); + RSA_NULL_PARAM_CHK(src); + RSA_NULL_PARAM_CHK(out); + RSA_NULL_PARAM_CHK(out_size); + + if (src_size <= 0 || (padding.padding_type != RSA_PADDING_MODE_PKCS1 && padding.padding_type != RSA_PADDING_MODE_NO)) { + return ERR_RSA(EDRV_PARAMETER); + } + + ck_rsa_priv_t *rsa_priv = handle; + rsa_priv->status.busy = 1U; + + uint32_t bit_length = 1024; + + if (rsa_priv->data_bit == RSA_DATA_BITS_2048) { + bit_length = 2048; + } + +#ifndef RSA_USING_ID2KEY + rsa_sw_exptmod_2_2m(n, bit_length, tmp_c); +#endif + + rsa_encrypt((uint8_t *)n, (uint8_t *)e, (uint8_t *)src, (uint32_t)src_size, (uint8_t *)out, (uint32_t *)out_size, (uint32_t)(padding.padding_type), bit_length, tmp_c); + rsa_priv->status.busy = 0U; + + if (rsa_priv->cb) { + rsa_priv->cb(RSA_EVENT_ENCRYPT_COMPLETE); + } + + return 0; +} + +/** + \brief decrypt + \param[in] handle rsa handle to operate. + \param[in] n Pointer to the public modulus + \param[in] d Pointer to the privte exponent + \param[in] src Pointer to the source data. + \param[in] src_size the source data len + \param[out] out Pointer to the result buffer + \param[out] out_size the result size + \param[in] padding \ref rsa_padding_t + \return error code +*/ +int32_t csi_rsa_decrypt(rsa_handle_t handle, void *n, void *d, void *src, uint32_t src_size, void *out, uint32_t *out_size, rsa_padding_t padding) +{ +#ifndef RSA_USING_ID2KEY + uint32_t tmp_c[RSA_KEY_WORD]; +#endif + RSA_NULL_PARAM_CHK(handle); + RSA_NULL_PARAM_CHK(n); + RSA_NULL_PARAM_CHK(d); + RSA_NULL_PARAM_CHK(src); + RSA_NULL_PARAM_CHK(out); + RSA_NULL_PARAM_CHK(out_size); + + if (src_size <= 0 || (padding.padding_type != RSA_PADDING_MODE_PKCS1 && padding.padding_type != RSA_PADDING_MODE_NO)) { + return ERR_RSA(EDRV_PARAMETER); + } + + ck_rsa_priv_t *rsa_priv = handle; + rsa_priv->status.busy = 1U; + + uint32_t bit_length = 1024; + + if (rsa_priv->data_bit == RSA_DATA_BITS_2048) { + bit_length = 2048; + } + +#ifndef RSA_USING_ID2KEY + rsa_sw_exptmod_2_2m(n, bit_length, tmp_c); +#endif + + rsa_decrypt((uint8_t *)n, (uint8_t *)d, (uint8_t *)src, (uint32_t)src_size, (uint8_t *)out, (uint32_t *)out_size, (uint32_t)(padding.padding_type), bit_length, tmp_c); + rsa_priv->status.busy = 0U; + + if (rsa_priv->cb) { + rsa_priv->cb(RSA_EVENT_DECRYPT_COMPLETE); + } + + return 0; +} + +/** + \brief rsa sign + \param[in] handle rsa handle to operate. + \param[in] n Pointer to the public modulus + \param[in] d Pointer to the privte exponent + \param[in] src Pointer to the source data. + \param[in] src_size the source data len + \param[out] signature Pointer to the signature + \param[out] sig_size the signature size + \param[in] padding \ref rsa_padding_t + \return error code +*/ +int32_t csi_rsa_sign(rsa_handle_t handle, void *n, void *d, void *src, uint32_t src_size, void *signature, void *sig_size, rsa_padding_t padding) +{ +#ifndef RSA_USING_ID2KEY + uint32_t tmp_c[RSA_KEY_WORD]; +#endif + RSA_NULL_PARAM_CHK(handle); + RSA_NULL_PARAM_CHK(n); + RSA_NULL_PARAM_CHK(d); + RSA_NULL_PARAM_CHK(src); + RSA_NULL_PARAM_CHK(signature); + RSA_NULL_PARAM_CHK(sig_size); + + if (src_size <= 0 || (padding.hash_type != RSA_HASH_TYPE_MD5 + && padding.hash_type != RSA_HASH_TYPE_SHA1 + && padding.hash_type != RSA_HASH_TYPE_SHA256)) { + return ERR_RSA(EDRV_PARAMETER); + } + + ck_rsa_priv_t *rsa_priv = handle; + rsa_priv->status.busy = 1U; + uint32_t bit_length = 1024; + + if (rsa_priv->data_bit == RSA_DATA_BITS_2048) { + bit_length = 2048; + } + +#ifndef RSA_USING_ID2KEY + rsa_sw_exptmod_2_2m(n, bit_length, tmp_c); +#endif + + rsa_sign((uint8_t *)n, (uint8_t *)d, (uint8_t *)src, (uint32_t)src_size, (uint8_t *)signature, (uint32_t *)sig_size, (uint32_t)(padding.hash_type), bit_length, tmp_c); + rsa_priv->status.busy = 0U; + + if (rsa_priv->cb) { + rsa_priv->cb(RSA_EVENT_SIGN_COMPLETE); + } + + return 0; +} + +/** + \brief rsa verify + \param[in] handle rsa handle to operate. + \param[in] n Pointer to the public modulus + \param[in] e Pointer to the public exponent + \param[in] src Pointer to the source data. + \param[in] src_size the source data len + \param[in] signature Pointer to the signature + \param[in] sig_size the signature size + \param[out] result Pointer to the result + \param[in] padding \ref rsa_padding_t + \return error code +*/ +int32_t csi_rsa_verify(rsa_handle_t handle, void *n, void *e, void *src, uint32_t src_size, void *signature, uint32_t sig_size, void *result, rsa_padding_t padding) +{ +#ifndef RSA_USING_ID2KEY + uint32_t tmp_c[RSA_KEY_WORD]; +#endif + RSA_NULL_PARAM_CHK(handle); + RSA_NULL_PARAM_CHK(n); + RSA_NULL_PARAM_CHK(e); + RSA_NULL_PARAM_CHK(src); + RSA_NULL_PARAM_CHK(signature); + RSA_NULL_PARAM_CHK(result); + + if (src_size <= 0 || sig_size <= 0 || (padding.hash_type != RSA_HASH_TYPE_MD5 && padding.hash_type != RSA_HASH_TYPE_SHA1 && padding.hash_type != RSA_HASH_TYPE_SHA256)) { + return ERR_RSA(EDRV_PARAMETER); + } + + ck_rsa_priv_t *rsa_priv = handle; + rsa_priv->status.busy = 1U; + + uint32_t bit_length = 1024; + + if (rsa_priv->data_bit == RSA_DATA_BITS_2048) { + bit_length = 2048; + } + +#ifndef RSA_USING_ID2KEY + rsa_sw_exptmod_2_2m(n, bit_length, tmp_c); +#endif + + rsa_verify((uint8_t *)n, (uint8_t *)e, (uint8_t *)src, (uint32_t)src_size, (uint8_t *)signature, sig_size, (uint32_t)(padding.hash_type), bit_length, (uint8_t *)result, tmp_c); + rsa_priv->status.busy = 0U; + + if (rsa_priv->cb) { + rsa_priv->cb(RSA_EVENT_VERIFY_COMPLETE); + } + + return 0; +} + +/** + \brief Get RSA status. + \param[in] handle rsa handle to operate. + \return RSA status \ref rsa_status_t +*/ +rsa_status_t csi_rsa_get_status(rsa_handle_t handle) +{ + ck_rsa_priv_t *rsa_priv = handle; + return rsa_priv->status; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/rsa/ck_rsa.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/rsa/ck_rsa.h new file mode 100644 index 000000000..1ae03c9aa --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/rsa/ck_rsa.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file ck_rsa.h + * @brief header file for rsa driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CK_RSA_H_ +#define _CK_RSA_H_ + +#include +#include "drv_rsa.h" +#include "soc.h" + +#define RSA_KEY_LEN 2048 +#define RSA_KEY_BYTE (RSA_KEY_LEN >> 3) +#define RSA_KEY_WORD (RSA_KEY_LEN >> 5) + +#define BN_MAX_BITS ((RSA_KEY_LEN << 1) + 32) +#define BN_MAX_BYTES ((BN_MAX_BITS + 7) >> 3) +#define BN_MAX_WORDS ((BN_MAX_BYTES + 3) >> 2) + +#define MAX_RSA_LP_CNT 10000 + +#define GET_KEY_BYTE(k) (k >> 3) +#define GET_KEY_WORD(k) (k >> 5) + +#define UINT32_TO_UINT64(data) ((uint64_t)(((uint64_t)(data)) & 0x00000000ffffffffU)) +#define UINT64L_TO_UINT32(data) ((uint32_t)(((uint64_t)(data)) & 0x00000000ffffffffU)) +#define UINT64H_TO_UINT32(data) ((uint32_t)((((uint64_t)(data)) >> 32) & 0x00000000ffffffffU)) + +#define PKCS1_PADDING 0x01 +#define NO_PADDING 0x02 + +#define MD5_PADDING 0x00 +#define SHA1_PADDING 0x01 +#define SHA256_PADDING 0x03 + +#define MD5_HASH_SZ 16 +#define SHA1_HASH_SZ 20 +#define SHA256_HASH_SZ 32 + +#define RAS_CALCULATE_Q 0x6 +#define RSA_ENABLE_MODULE 0x3 +#define RSA_ENDIAN_MODE 0x8 +#define RSA_RESET 0x1 +#define RSA_CAL_Q_DONE_OFFSET 0x5 + +typedef struct bignum { + uint32_t pdata[BN_MAX_WORDS]; + uint32_t words; +} bignum_t; + +typedef struct { + __IOM uint32_t rsa_mwid; /* Offset: 0x000 (R/W) Width of M register */ + __IOM uint32_t rsa_ckid; /* Offset: 0x004 (R/W) Width of D register */ + __IOM uint32_t rsa_bwid; /* Offset: 0x008 (R/W) Width of B register */ + __IOM uint32_t rsa_ctrl; /* Offset: 0x00c (R/W) RSA control register */ + __OM uint32_t rsa_rst; /* Offset: 0x010 (W) RSA reset register */ + __IM uint32_t rsa_lp_cnt; /* Offset: 0x014 (R) Loop counter for inquiry register*/ + __IM uint32_t rsa_q0; /* Offset: 0x018 (R) High-radix MM algorithm assistant register,part 1*/ + __IM uint32_t rsa_q1; /* Offset: 0x01c (R) High-radix MM algorithm assistant register,part 2*/ + __IOM uint32_t rsa_isr; /* Offset: 0x020 (W/R) Interrupt raw status register */ + __IOM uint32_t rsa_imr; /* Offset: 0x024 (W/R) Interrupt mask register */ + __IOM uint32_t rev1[54]; /* Reserve regiser */ + __IOM uint32_t rsa_rfm; /* Offset: 0x100 (W/R) Register file for modulus M */ + __IOM uint32_t rev2[63]; /* Reserve regiser */ + __IOM uint32_t rsa_rfd; /* Offset: 0x200 (W/R) Register file for exponent D */ + __IOM uint32_t rev3[63]; /* Reserve regiser */ + __IOM uint32_t rsa_rfc; /* Offset: 0x300 (W/R) Register file for hard C */ + __IOM uint32_t rev4[63]; /* Reserve regiser */ + __IOM uint32_t rsa_rfb; /* Offset: 0x400 (W/R) Register file for data B */ + __IOM uint32_t rev5[63]; /* Reserve regiser */ + __IM uint32_t rsa_rfr; /* Offset: 0x500 (R) Register file for storing the result */ +} ck_rsa_reg_t; + +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/Kconfig b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/Kconfig new file mode 100644 index 000000000..78c2a1fce --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/Kconfig @@ -0,0 +1,20 @@ +choice + prompt "select sha type " + help + select sha type +config SHA_CK_V2 + bool "csky v2 sha" + help + select the ck sha driver + +config SHA_CK_V1 + bool "csky v1 sha" + help + select the ck sha driver + +config SHA_ZX29 + bool "csky zx29 sha" + help + select the zx29 sha driver + +endchoice diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v1.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v1.c new file mode 100644 index 000000000..66fbf097e --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v1.c @@ -0,0 +1,559 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file ck_sha.c + * @brief CSI Source File for SHA Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include +#include +#include "csi_core.h" +#include "drv_sha.h" +#include "ck_sha_v1.h" + +#ifndef CONFIG_SHA_SUPPORT_MUL_THREAD +#define CONFIG_SHA_SUPPORT_MUL_THREAD 1 +#endif + +typedef struct { + uint32_t base; + uint32_t irq; + sha_event_cb_t cb; + sha_status_t status; + sha_mode_e mode; + sha_endian_mode_e endian; +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + uint32_t state[16]; + uint32_t sha_buffer[32]; + uint32_t total; + uint8_t first_cal; +#endif +} ck_sha_priv_t; + +#ifndef CONFIG_SHA_SUPPORT_MUL_THREAD +static ck_sha_priv_t sha_handle[CONFIG_SHA_NUM]; +#endif +bool finish_flag = 0; + +/* Driver Capabilities */ +static const sha_capabilities_t driver_capabilities = { + .sha1 = 1, /* sha1 mode */ + .sha224 = 1, /* sha224 mode */ + .sha256 = 1, /* sha256 mode */ + .sha384 = 1, /* sha384 mode */ + .sha512 = 1, /* sha512 mode */ + .sha512_224 = 1, /* sha512_224 mode */ + .sha512_256 = 1, /* sha512_256 mode */ + .endianmode = 1, /* endian mode */ + .interruptmode = 1 /* interrupt mode */ +}; + +#define ERR_SHA(errno) (CSI_DRV_ERRNO_SHA_BASE | errno) +#define SHA_NULL_PARAM_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_SHA(EDRV_PARAMETER); \ + } \ + } while (0) + +extern int32_t target_get_sha(int32_t idx, uint32_t *base, uint32_t *irq); +extern int32_t target_get_sha_count(void); +// +// Functions +// + +ck_sha_reg_t *sha_reg = NULL; + +#ifndef CONFIG_SHA_SUPPORT_MUL_THREAD +static uint32_t sha_buffer[32]; +static uint32_t total[2] = {0x0}; +static uint8_t first_cal = 1; +#endif +static uint8_t sha_result[64] = {0x0}; + +static int32_t sha_set_mode(sha_mode_e mode) +{ + sha_reg->SHA_MODE &= ~0x7; + sha_reg->SHA_MODE |= mode; + return 0; +} + +static void sha_set_source_message(uint32_t baseaddr) +{ + sha_reg->SHA_BASEADDR = baseaddr; +} + +static void sha_set_dest_message(uint32_t destaddr) +{ + sha_reg->SHA_DESTADDR = destaddr; +} + +static void sha_enable_without_count(void) +{ + sha_reg->SHA_MODE |= 1<<25; +} + +static void sha_disable_without_count(void) +{ + sha_reg->SHA_MODE &= ~(1<<25); +} + +static void sha_set_message_count(uint32_t count) +{ + sha_reg->SHA_COUNTER0 = count; + sha_reg->SHA_COUNTER1 = 0; +} + +static int32_t sha_enable_initial(void) +{ + sha_reg->SHA_MODE |= 1 << SHA_INIT_OFFSET; + return 0; +} + +static int32_t sha_disable_initial(void) +{ + sha_reg->SHA_MODE &= ~(1 << SHA_INIT_OFFSET); + return 0; +} + +static int32_t sha_enable_calculate(void) +{ + sha_reg->SHA_CON |= 1; + return 0; +} + +static int32_t sha_message_done(void) +{ + while(sha_reg->SHA_CON & 0x1); + return 0; +} + +static void sha_new_encode(void) +{ + sha_reg->SHA_INTSTATE = 0; + sha_reg->SHA_MODE = 0; +} + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD +static int32_t sha_restore_context(sha_handle_t handle, uint32_t *data) +{ + uint32_t *result = (uint32_t *)&sha_reg->SHA_H0L; + + uint8_t i; + for (i = 0; i < 16; i++) { + result[i] = data[i]; + } + return 0; +} + +static int32_t sha_save_context(sha_handle_t handle, uint32_t *data) +{ + uint32_t *result = (uint32_t *)&sha_reg->SHA_H0L; + + uint8_t i; + for (i = 0; i < 16; i++) { + data[i] = result[i]; + } + return 0; +} +#endif + +static inline void sha_reverse_order(uint8_t *pdata, int32_t length) +{ + uint8_t input_data[length]; + uint8_t result[length]; + uint32_t tmp = 0; + int32_t i = 0; + memcpy((void *)input_data, (void *)pdata, length); + + for (i = 0; i < length; i++) { + tmp = i >> 2; + tmp = tmp << 3; + result[i] = input_data[tmp + 3 - i]; + } + + memcpy((void *)pdata, (void *)result, length); +} + +/** + \brief get sha handle count. + \return sha handle count +*/ +int32_t csi_sha_get_instance_count(void) +{ + return target_get_sha_count(); +} + +/** + \brief Initialize SHA Interface. 1. Initializes the resources needed for the SHA interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_sha_get_instance_count() + \param[in] cb_event Pointer to \ref sha_event_cb_t + \return return sha handle if success +*/ +sha_handle_t csi_sha_initialize(sha_handle_t handle, sha_event_cb_t cb_event) +{ +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + uint32_t base = 0u; + uint32_t irq; + /* obtain the sha information */ + target_get_sha(0, &base, &irq); + ck_sha_priv_t *sha_priv = handle; + memset(sha_priv->state, 0, sizeof(sha_priv->state)); + sha_priv->total = 0; + sha_priv->first_cal = 1; + +#else + if (idx < 0 || idx >= CONFIG_SHA_NUM) { + return NULL; + } + + uint32_t base = 0u; + uint32_t irq; + /* obtain the sha information */ + int32_t real_idx = target_get_sha(idx, &base, &irq); + + if (real_idx != idx) { + return NULL; + } + ck_sha_priv_t *sha_priv = &sha_handle[idx]; +#endif + sha_priv->base = base; + sha_priv->irq = irq; + + /* initialize the sha context */ + sha_priv->cb = cb_event; + sha_priv->status.busy = 0; + + return (sha_handle_t)sha_priv; +} + +/** + \brief De-initialize SHA Interface. stops operation and releases the software resources used by the interface + \param[in] handle sha handle to operate. + \return error code +*/ +int32_t csi_sha_uninitialize(sha_handle_t handle) +{ + SHA_NULL_PARAM_CHK(handle); + + ck_sha_priv_t *sha_priv = handle; + sha_priv->cb = NULL; + + return 0; +} + +/** + \brief Get driver capabilities. + \param[in] handle sha handle to operate. + \return \ref sha_capabilities_t +*/ +sha_capabilities_t csi_sha_get_capabilities(sha_handle_t handle) +{ + return driver_capabilities; +} + +/** + \brief config sha mode. + \param[in] handle sha handle to operate. + \param[in] mode \ref sha_mode_e + \param[in] endian \ref sha_endian_mode_e + \return error code +*/ +int32_t csi_sha_config(sha_handle_t handle, sha_mode_e mode, sha_endian_mode_e endian_mode) +{ + SHA_NULL_PARAM_CHK(handle); + + ck_sha_priv_t *sha_priv = handle; + sha_reg = (ck_sha_reg_t *)(sha_priv->base); + + /* config the sha mode */ + switch (mode) { + case SHA_MODE_512_256: + case SHA_MODE_512_224: + return ERR_SHA(EDRV_UNSUPPORTED); + + case SHA_MODE_1: + case SHA_MODE_224: + case SHA_MODE_256: + case SHA_MODE_384: + case SHA_MODE_512: + sha_priv->mode = mode; + break; + + default: + return ERR_SHA(EDRV_PARAMETER); + } + + return 0; +} + +/** + \brief start the engine + \param[in] handle sha handle to operate. + \param[in] context Pointer to the sha context. + \return error code +*/ +int32_t csi_sha_starts(sha_handle_t handle, void *context) +{ + SHA_NULL_PARAM_CHK(handle); + + ck_sha_priv_t *sha_priv = handle; + sha_priv->status.busy = 1; + + sha_new_encode(); + sha_set_mode(sha_priv->mode); + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + memset(sha_priv->sha_buffer, 0, sizeof(sha_priv->sha_buffer)); + memset(sha_priv->state, 0, sizeof(sha_priv->state)); + sha_priv->first_cal = 1; + sha_priv->total = 0; +#endif + + return 0; +} + +/** + \brief updata the engine + \param[in] handle sha handle to operate. + \param[in] context Pointer to the sha context. + \param[in] input Pointer to the Source data + \param[in] len the data len + \return error code +*/ +int32_t csi_sha_update(sha_handle_t handle, void *context, const void *input, uint32_t len) +{ + SHA_NULL_PARAM_CHK(handle); + SHA_NULL_PARAM_CHK(input); + if (len <= 0) { + return ERR_SHA(EDRV_PARAMETER); + } + + ck_sha_priv_t *sha_priv = handle; + sha_reg = (ck_sha_reg_t *)(sha_priv->base); + + uint8_t total_len_num; + uint32_t block_size; + if (sha_priv->mode < 4) { + block_size = 64; + total_len_num = 2; + } else { + block_size = 128; + total_len_num = 4; + } + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + uint32_t *sha_buffer = sha_priv->sha_buffer; + uint8_t first_cal = sha_priv->first_cal; + sha_set_mode(sha_priv->mode); + uint32_t left = sha_priv->total & (block_size - 1); + uint32_t fill = block_size - left; + uint32_t total_length = sha_priv->total << 3; + uint32_t index = left >> 2; + + if (left & 0x3) { + index++; + } + sha_priv->total += len; + sha_priv->total &= 0xffffffff; +#else + uint32_t left = total[0] & (block_size - 1); + uint32_t fill = block_size - left; + uint32_t total_length = total[0] << 3; + uint32_t index = left >> 2; + + if (left & 0x3) { + index++; + } + total[0] += len; + total[0] &= 0xffffffff; +#endif + uint8_t *p = (uint8_t *)input; + /* when the text is not aligned by block and len > fill */ + if (left && len >= fill) { + if (finish_flag) { +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + memset(((uint8_t *)sha_buffer + left), 0x0, sizeof(sha_priv->sha_buffer) - left); +#else + memset(((uint8_t *)sha_buffer + left), 0x0, sizeof(sha_buffer) - left); +#endif + sha_buffer[index + total_len_num - 1] = total_length; + + sha_disable_without_count(); + sha_set_message_count(left << 3); + } else { + memcpy((void *)(((uint8_t *)sha_buffer) + left), p, fill); + p += fill; + + sha_enable_without_count(); + sha_set_message_count(block_size << 3); + } + + sha_set_source_message((uint32_t)sha_buffer); + sha_set_dest_message((uint32_t)sha_result); + if (first_cal == 0) { + sha_enable_initial(); + } else { + sha_disable_initial(); + } + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_restore_context(handle, (uint32_t *)sha_priv->state); +#endif + + sha_enable_calculate(); + sha_message_done(); + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_save_context(handle, (uint32_t *)sha_priv->state); +#endif + len -= fill; + left = 0; +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_priv->first_cal = 0; + first_cal = 0; +#else + first_cal = 0; +#endif + } + + /* calculate the hash by block */ + while (len >= block_size) { + if (finish_flag) { +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + memset(sha_buffer, 0, sizeof(sha_priv->sha_buffer)); +#else + memset(sha_buffer, 0, sizeof(sha_buffer)); +#endif + sha_buffer[total_len_num - 1] = total_length; + + sha_set_source_message((uint32_t)sha_buffer); + sha_disable_without_count(); + sha_set_message_count(0); + } else { + memcpy(sha_buffer, p, block_size); + sha_set_source_message((uint32_t)sha_buffer); + sha_enable_without_count(); + sha_set_message_count(block_size << 3); + p += block_size; + } + sha_set_dest_message((uint32_t)sha_result); + if (first_cal == 0) { + sha_enable_initial(); + } else { + sha_disable_initial(); + } +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_restore_context(handle, (uint32_t *)sha_priv->state); +#endif + + sha_enable_calculate(); + sha_message_done(); +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_save_context(handle, (uint32_t *)sha_priv->state); +#endif +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_priv->first_cal = 0; + first_cal = 0; +#else + first_cal = 0; +#endif + len -= block_size; + } + + /* when the text is not aligned by block and len < fill */ + if (len > 0) { + memcpy((void *)(((uint8_t *)sha_buffer) + left), p, len); + } + + sha_priv->status.busy = 0; + + return 0; +} + +/** + \brief finish the engine + \param[in] handle sha handle to operate. + \param[in] context Pointer to the sha context. + \param[out] output Pointer to the dest data + \return error code +*/ +int32_t csi_sha_finish(sha_handle_t handle, void *context, void *output) +{ + SHA_NULL_PARAM_CHK(handle); + SHA_NULL_PARAM_CHK(output); + + ck_sha_priv_t *sha_priv = handle; + uint32_t block_size; + if (sha_priv->mode < 4) { + block_size = 64; + } else { + block_size = 128; + } + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + uint32_t last = sha_priv->total & (block_size - 1); +#else + uint32_t last = total[0] & (block_size - 1); +#endif + uint32_t padn = block_size - last; + + finish_flag = 1; + + csi_sha_update(handle, NULL, output, padn); + + uint8_t result_len = 20; + /* convert the data endian according the sha mode */ + if (sha_priv->mode == SHA_MODE_1) { + result_len = 20; + } else if (sha_priv->mode == SHA_MODE_224) { + result_len = 28; + } else if (sha_priv->mode == SHA_MODE_256) { + result_len = 32; + } else if (sha_priv->mode == SHA_MODE_512) { + result_len = 64; + } else if (sha_priv->mode == SHA_MODE_384) { + result_len = 48; + } + sha_reverse_order(sha_result, result_len); + memcpy((uint8_t*)output, sha_result, result_len); + + finish_flag = 0; +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + memset(sha_priv->sha_buffer, 0, sizeof(sha_priv->sha_buffer)); + sha_priv->first_cal = 1; + sha_priv->total = 0; +#else + memset(sha_buffer, 0, sizeof(sha_buffer)); + first_cal = 1; + total[0] = 0; +#endif + return 0; +} + +/** + \brief Get SHA status. + \param[in] handle sha handle to operate. + \return SHA status \ref sha_status_t +*/ +sha_status_t csi_sha_get_status(sha_handle_t handle) +{ + ck_sha_priv_t *sha_priv = handle; + return sha_priv->status; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v1.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v1.h new file mode 100644 index 000000000..bb9d0ebc3 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v1.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file ck_sha.h + * @brief header file for sha driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CK_SHA_H_ +#define _CK_SHA_H_ + +#include +#include "drv_sha.h" +#include "soc.h" + +#define SHA_INIT_OFFSET 3 +#define SHA_INT_ENABLE_OFFSET 4 +#define SHA_ENDIAN_OFFSET 5 +#define SHA_CAL_OFFSET 6 +typedef struct { + __IOM uint32_t SHA_CON; /* Offset: 0x000 (R/W) Control register */ + __IOM uint32_t SHA_MODE; /* Offset: 0x004 (R/W) Mode register */ + __IOM uint32_t SHA_INTSTATE; /* Offset: 0x008 (R/W) Instatus register */ + __IOM uint32_t SHA_BASEADDR; /* Offset: 0x00c (R/W) Baseaddr register */ + __IOM uint32_t SHA_DESTADDR; /* Offset: 0x010 (R/W) Dest addr register */ + __IOM uint32_t SHA_COUNTER0; /* Offset: 0x014 (R/W) count0 register */ + __IOM uint32_t SHA_COUNTER1; /* Offset: 0x018 (R/W) count1 register */ + __IOM uint32_t SHA_COUNTER2; /* Offset: 0x01c (R/W) count2 register */ + __IOM uint32_t SHA_COUNTER3; /* Offset: 0x020 (R/W) count3 register */ + __IOM uint32_t SHA_H0L; /* Offset: 0x024 (R/W) H0L register */ + __IOM uint32_t SHA_H1L; /* Offset: 0x028 (R/W) H1L register */ + __IOM uint32_t SHA_H2L; /* Offset: 0x02c (R/W) H2L register */ + __IOM uint32_t SHA_H3L; /* Offset: 0x030 (R/W) H3L register */ + __IOM uint32_t SHA_H4L; /* Offset: 0x034 (R/W) H4L register */ + __IOM uint32_t SHA_H5L; /* Offset: 0x038 (R/W) H5L register */ + __IOM uint32_t SHA_H6L; /* Offset: 0x03c (R/W) H6L register */ + __IOM uint32_t SHA_H7L; /* Offset: 0x040 (R/W) H7L register */ + __IOM uint32_t SHA_H0H; /* Offset: 0x044 (R/W) H0H register */ + __IOM uint32_t SHA_H1H; /* Offset: 0x048 (R/W) H1H register */ + __IOM uint32_t SHA_H2H; /* Offset: 0x04c (R/W) H2H register */ + __IOM uint32_t SHA_H3H; /* Offset: 0x050 (R/W) H3H register */ + __IOM uint32_t SHA_H4H; /* Offset: 0x054 (R/W) H4H register */ + __IOM uint32_t SHA_H5H; /* Offset: 0x058 (R/W) H5H register */ + __IOM uint32_t SHA_H6H; /* Offset: 0x05c (R/W) H6H register */ + __IOM uint32_t SHA_H7H; /* Offset: 0x060 (R/W) H7H register */ +} ck_sha_reg_t; + +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v2.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v2.c new file mode 100644 index 000000000..9c8b142b8 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v2.c @@ -0,0 +1,700 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file ck_sha.c + * @brief CSI Source File for SHA Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include +#include +#include "csi_core.h" +#include "drv_sha.h" +#include "ck_sha_v2.h" + +#ifndef CONFIG_SHA_SUPPORT_MUL_THREAD +#define CONFIG_SHA_SUPPORT_MUL_THREAD 1 +#endif + +typedef struct { + uint32_t base; + uint32_t irq; + sha_event_cb_t cb; + sha_status_t status; + sha_mode_e mode; + sha_endian_mode_e endian; +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + uint8_t state[64]; + uint8_t sha_buffer[128]; + uint32_t total; + uint32_t last_left; +#endif +} ck_sha_priv_t; + +#ifndef CONFIG_SHA_SUPPORT_MUL_THREAD +static ck_sha_priv_t sha_handle[CONFIG_SHA_NUM]; +#endif +static uint32_t g_sha_context[CONFIG_SHA_NUM]; +bool finish_flag = 0; + +/* Driver Capabilities */ +static const sha_capabilities_t driver_capabilities = { + .sha1 = 1, /* sha1 mode */ + .sha224 = 1, /* sha224 mode */ + .sha256 = 1, /* sha256 mode */ + .sha384 = 1, /* sha384 mode */ + .sha512 = 1, /* sha512 mode */ + .sha512_224 = 1, /* sha512_224 mode */ + .sha512_256 = 1, /* sha512_256 mode */ + .endianmode = 1, /* endian mode */ + .interruptmode = 1 /* interrupt mode */ +}; + +#define ERR_SHA(errno) (CSI_DRV_ERRNO_SHA_BASE | errno) +#define SHA_NULL_PARAM_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_SHA(EDRV_PARAMETER); \ + } \ + } while (0) +// +// Functions +// + +ck_sha_reg_t *sha_reg = NULL; +volatile static uint8_t sha_int_flag = 1; + +extern int32_t target_get_sha_count(void); +extern int32_t target_get_sha(int32_t idx, uint32_t *base, uint32_t *irq); + +static int32_t sha_set_mode(sha_mode_e mode) +{ + sha_reg->SHA_CON &= ~0x7; + sha_reg->SHA_CON |= mode; + return 0; +} + +#ifndef CONFIG_SHA_BLOCK_MODE +static int32_t sha_enable_interrupt(void) +{ + sha_reg->SHA_CON |= 1 << SHA_INT_ENABLE_OFFSET; + return 0; +} + +#ifndef CONFIG_SHA_SUPPORT_MUL_THREAD +static int32_t sha_disable_interrupt(void) +{ + sha_reg->SHA_CON &= ~(1 << SHA_INT_ENABLE_OFFSET); + return 0; +} +#endif +#endif + +static void sha_clear_interrupt(void) +{ + sha_reg->SHA_INTSTATE = 0; +} + +static int32_t sha_enable_initial(void) +{ + sha_reg->SHA_CON |= 1 << SHA_INIT_OFFSET; + return 0; +} + +static int32_t sha_enable_calculate(void) +{ + sha_reg->SHA_CON |= 1 << SHA_CAL_OFFSET; + return 0; +} + +#ifdef CONFIG_SHA_BLOCK_MODE +static int32_t sha_message_done(void) +{ + while((sha_reg->SHA_CON & 0x40)); + return 0; +} +#endif + +static int32_t sha_select_endian_mode(sha_endian_mode_e mode) +{ + sha_reg->SHA_CON &= ~(1 << SHA_ENDIAN_OFFSET); + sha_reg->SHA_CON |= mode << SHA_ENDIAN_OFFSET; + return 0; +} + +static int32_t sha_input_data(uint32_t *data, uint32_t length) +{ + uint8_t i; + uint32_t tmp; + uint32_t *input_data = (uint32_t *) & (sha_reg->SHA_DATA1); + + for (i = 0; i < length; i++) { + memcpy(&tmp, (uint8_t *)(data+i), 4); + *(input_data + i) = tmp; + } + + return 0; +} + +static int32_t sha_get_data(sha_handle_t handle, uint32_t *data) +{ + ck_sha_priv_t *sha_priv = handle; + + uint8_t len = 0; + uint8_t i; + uint32_t temp; + uint32_t *result = (uint32_t *)&sha_reg->SHA_H0L; + /* according to different mode to obtain the hash result */ + if (sha_priv->mode == SHA_MODE_1 || sha_priv->mode == SHA_MODE_224 || sha_priv->mode == SHA_MODE_256) { + if (sha_priv->mode == SHA_MODE_1) { + len = 5; + } else if (sha_priv->mode == SHA_MODE_224) { + len = 7; + } else if (sha_priv->mode == SHA_MODE_256) { + len = 8; + } + + for (i = 0; i < len; i++) { + temp = *(result + i); + memcpy(&data[i], &temp, 4); + } + } else { + if (sha_priv->mode == SHA_MODE_384) { + len = 6; + } else if (sha_priv->mode == SHA_MODE_512) { + len = 8; + } + + uint32_t *resulth = (uint32_t *)&sha_reg->SHA_H0H; + for (i = 0; i < len; i++) { +// data[i << 1] = *(resulth + i); +// data[(i << 1) + 1] = *(result + i); + temp = *(resulth + i); + memcpy(&data[i<<1], &temp, 4); + temp = *(result + i); + memcpy(&data[(i<<1)+1], &temp, 4); + } + } + + return 0; +} + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD +static int32_t sha_set_data(sha_handle_t handle, uint32_t *data) +{ + ck_sha_priv_t *sha_priv = handle; + + uint8_t len = 0; + uint8_t i; + uint32_t *result = (uint32_t *)&sha_reg->SHA_H0L; + /* according to different mode to obtain the hash result */ + if (sha_priv->mode == SHA_MODE_1 || sha_priv->mode == SHA_MODE_224 || sha_priv->mode == SHA_MODE_256) { + if (sha_priv->mode == SHA_MODE_1) { + len = 5; + } else if (sha_priv->mode == SHA_MODE_224) { + len = 7; + } else if (sha_priv->mode == SHA_MODE_256) { + len = 8; + } + + for (i = 0; i < len; i++) { + *(result + i) = data[i]; + } + } else { + if (sha_priv->mode == SHA_MODE_384) { + len = 6; + } else if (sha_priv->mode == SHA_MODE_512) { + len = 8; + } + + uint32_t *resulth = (uint32_t *)&sha_reg->SHA_H0H; + for (i = 0; i < len; i++) { + *(resulth + i) = data[i << 1]; + *(result + i) = data[(i << 1) + 1] ; + } + } + + return 0; +} +#endif + +static inline void sha_reverse_order(uint8_t *pdata, int32_t length) +{ + uint8_t input_data[length]; + uint8_t result[length]; + uint32_t tmp = 0; + int32_t i = 0; + memcpy((void *)input_data, (void *)pdata, length); + + for (i = 0; i < length; i++) { + tmp = i >> 2; + tmp = tmp << 3; + result[i] = input_data[tmp + 3 - i]; + } + + memcpy((void *)pdata, (void *)result, length); +} + +void ck_sha_irqhandler(int32_t idx) +{ + sha_int_flag = 0; + sha_clear_interrupt(); //clear sha interrupt + +#ifndef CONFIG_SHA_SUPPORT_MUL_THREAD + ck_sha_priv_t *sha_priv = &sha_handle[idx]; +#else + ck_sha_priv_t *sha_priv = (ck_sha_priv_t *)g_sha_context[idx]; +#endif + if (finish_flag != 0) { + if (sha_priv->cb != NULL) { + sha_priv->cb(SHA_EVENT_COMPLETE); //execute the callback function + } + } +} + +/** + \brief get sha handle count. + \return sha handle count +*/ +int32_t csi_sha_get_instance_count(void) +{ + return target_get_sha_count(); +} + +/** + \brief Initialize SHA Interface. 1. Initializes the resources needed for the SHA interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_sha_get_instance_count() + \param[in] cb_event Pointer to \ref sha_event_cb_t + \return return sha handle if success +*/ +sha_handle_t csi_sha_initialize(sha_handle_t handle, sha_event_cb_t cb_event) +{ + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + uint32_t base = 0u; + uint32_t irq; + /* obtain the sha information */ + target_get_sha(0, &base, &irq); + ck_sha_priv_t *sha_priv = handle; + memset(sha_priv->state, 0, sizeof(sha_priv->state)); + sha_priv->last_left = 0; + sha_priv->total = 0; + g_sha_context[0] = (uint32_t)handle; +#else + if (idx < 0 || idx >= CONFIG_SHA_NUM) { + return NULL; + } + + uint32_t base = 0u; + uint32_t irq; + /* obtain the sha information */ + int32_t real_idx = target_get_sha(idx, &base, &irq); + + if (real_idx != idx) { + return NULL; + } + ck_sha_priv_t *sha_priv = &sha_handle[idx]; +#endif + sha_priv->base = base; + sha_priv->irq = irq; + + /* initialize the sha context */ + sha_priv->cb = cb_event; + sha_priv->status.busy = 0; + +#ifndef CONFIG_SHA_BLOCK_MODE + drv_nvic_enable_irq(sha_priv->irq); +#endif + + return (sha_handle_t)sha_priv; +} + +/** + \brief De-initialize SHA Interface. stops operation and releases the software resources used by the interface + \param[in] handle sha handle to operate. + \return error code +*/ +int32_t csi_sha_uninitialize(sha_handle_t handle) +{ + SHA_NULL_PARAM_CHK(handle); + + ck_sha_priv_t *sha_priv = handle; + sha_priv->cb = NULL; + +#ifndef CONFIG_SHA_SUPPORT_MUL_THREAD +#ifndef CONFIG_SHA_BLOCK_MODE + sha_disable_interrupt(); + drv_nvic_disable_irq(sha_priv->irq); +#endif +#endif + + return 0; +} + +/** + \brief Get driver capabilities. + \param[in] handle sha handle to operate. + \return \ref sha_capabilities_t +*/ +sha_capabilities_t csi_sha_get_capabilities(sha_handle_t handle) +{ + return driver_capabilities; +} + +/** + \brief config sha mode. + \param[in] handle sha handle to operate. + \param[in] mode \ref sha_mode_e + \param[in] endian \ref sha_endian_mode_e + \return error code +*/ +int32_t csi_sha_config(sha_handle_t handle, sha_mode_e mode, sha_endian_mode_e endian_mode) +{ + SHA_NULL_PARAM_CHK(handle); + + ck_sha_priv_t *sha_priv = handle; + sha_reg = (ck_sha_reg_t *)(sha_priv->base); + + /* config the sha mode */ + switch (mode) { + case SHA_MODE_512_256: + case SHA_MODE_512_224: + return ERR_SHA(EDRV_UNSUPPORTED); + + case SHA_MODE_1: + case SHA_MODE_224: + case SHA_MODE_256: + case SHA_MODE_384: + case SHA_MODE_512: + sha_priv->mode = mode; + break; + + default: + return ERR_SHA(EDRV_PARAMETER); + } + + sha_set_mode(mode); + + /*config the sha endian mode */ + if (endian_mode == SHA_ENDIAN_MODE_LITTLE) { + sha_priv->endian = endian_mode; + sha_select_endian_mode(endian_mode); + } else if (endian_mode == SHA_ENDIAN_MODE_BIG) { + sha_priv->endian = endian_mode; + sha_select_endian_mode(endian_mode); + } else { + return ERR_SHA(EDRV_PARAMETER); + } + +#ifndef CONFIG_SHA_BLOCK_MODE + sha_enable_interrupt(); +#endif + + return 0; +} + +/** + \brief start the engine + \param[in] handle sha handle to operate. + \param[in] context Pointer to the sha context. + \return error code +*/ +int32_t csi_sha_starts(sha_handle_t handle, void *context) +{ + SHA_NULL_PARAM_CHK(handle); + + ck_sha_priv_t *sha_priv = handle; + sha_enable_initial(); + sha_priv->status.busy = 1; + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_get_data(handle, (uint32_t *)sha_priv->state); +#endif + + return 0; +} + +/** + \brief updata the engine + \param[in] handle sha handle to operate. + \param[in] context Pointer to the sha context. + \param[in] input Pointer to the Source data + \param[in] len the data len + \return error code +*/ +#ifndef CONFIG_SHA_SUPPORT_MUL_THREAD +static uint8_t sha_buffer[128]; +static uint32_t total[2] = {0x0}; +static uint32_t last_left = 0; +#endif +int32_t csi_sha_update(sha_handle_t handle, void *context, const void *input, uint32_t len) +{ + SHA_NULL_PARAM_CHK(handle); + SHA_NULL_PARAM_CHK(input); + if (len <= 0) { + return ERR_SHA(EDRV_PARAMETER); + } + g_sha_context[0] = (uint32_t)handle; + ck_sha_priv_t *sha_priv = handle; + sha_reg = (ck_sha_reg_t *)(sha_priv->base); + + uint32_t block_size; + if (sha_priv->mode < 4) { + block_size = 64; + } else { + block_size = 128; + } + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + uint8_t *sha_buffer = sha_priv->sha_buffer; + uint32_t last_left = sha_priv->last_left; + sha_set_mode(sha_priv->mode); + uint32_t left = sha_priv->total & (block_size - 1); + uint32_t fill = block_size - left; + uint32_t total_length = sha_priv->total << 3; + + sha_priv->total += len; + sha_priv->total &= 0xffffffff; + uint32_t word_left = sha_priv->total & 0x3; +#else + uint32_t left = total[0] & (block_size - 1); + uint32_t fill = block_size - left; + uint32_t total_length = total[0] << 3; + + total[0] += len; + total[0] &= 0xffffffff; + uint32_t word_left = total[0] & 0x3; +#endif + uint8_t temp_data[4]; + uint32_t j; + if (finish_flag) { + /*calculate the final word*/ + for (j = 0; j < 4; j++) { + temp_data[j] = (total_length >> (8 * j)) & 0xff; + } + } + + uint8_t *p = (uint8_t *)input; + /* when the text is not aligned by block and len > fill */ + if (left && len >= fill) { + if (finish_flag) { + if (sha_priv->endian == SHA_ENDIAN_MODE_BIG) { + memset(&sha_buffer[left], 0x0, len); + sha_buffer[left] = 0x80; + for (j=0; j<4; j++) { + sha_buffer[left + len - 4 + j] = temp_data[3 - j]; + } + } else { + memset(&sha_buffer[left + 4 - last_left], 0x0, len - 4 + last_left); + sha_buffer[left - last_left + 3 - last_left] = 0x80; + for (j = 1; j < 4 - last_left; j++) { + sha_buffer[left - last_left + 3 - last_left - j] = 0x00; + } + for (j=0; j<4; j++) { + sha_buffer[left + len - 4 + j] = temp_data[j]; + } + } + } else { + if (last_left && sha_priv->endian == SHA_ENDIAN_MODE_LITTLE) { + uint32_t i; + for (i = 0; i < 4 - last_left; i++) { + *(sha_buffer + left + 3 - last_left - i) = *((uint8_t *)p + 3 - last_left - i); + } + + fill = fill - 4 + last_left; + p = (p + 4 - last_left); + } + else if (last_left) { + memcpy((void *)(sha_buffer + left + 4 - last_left), p, fill); + } else { + memcpy((void *)(sha_buffer + left), p, fill); + } + p += fill; + } + + /* set the input data */ +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_set_data(handle, (uint32_t *)sha_priv->state); +#endif + sha_input_data((uint32_t *)sha_buffer, block_size >> 2); + sha_enable_calculate(); + +#ifdef CONFIG_SHA_BLOCK_MODE + sha_message_done(); + +#else + while (sha_int_flag); + + sha_int_flag = 1; +#endif + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_get_data(handle, (uint32_t *)sha_priv->state); +#endif + len -= fill; + left = 0; + } else { + if (finish_flag) { +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + memset(sha_buffer, 0, sizeof(sha_priv->sha_buffer)); +#else + memset(sha_buffer, 0, sizeof(sha_buffer)); +#endif + if (sha_priv->endian == SHA_ENDIAN_MODE_BIG) { + sha_buffer[0] = 0x80; + for (j = 0; j < 4; j++) { + sha_buffer[block_size - 4 + j] = temp_data[3 - j]; + } + } else { + sha_buffer[3 - last_left] = 0x80; + for (j = 0; j < 4; j++) { + sha_buffer[block_size - 4 + j] = temp_data[j]; + } + } + } + } + + /* calculate the hash by block */ + while (len >= block_size) { +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_set_data(handle, (uint32_t *)sha_priv->state); +#endif + if (finish_flag) { + if (fill == block_size) { + sha_input_data((uint32_t *)sha_buffer, block_size >> 2); + } else { + sha_input_data((uint32_t *)&sha_buffer[block_size], block_size >> 2); + } + } + else { + sha_input_data((uint32_t *)p, block_size >> 2); + p += block_size; + } + sha_enable_calculate(); + +#ifdef CONFIG_SHA_BLOCK_MODE + sha_message_done(); + +#else + while (sha_int_flag); + + sha_int_flag = 1; +#endif + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_get_data(handle, (uint32_t *)sha_priv->state); +#endif + len -= block_size; + } + + /* when the text is not aligned by block and len < fill */ + if (len > 0) { + if (sha_priv->endian == SHA_ENDIAN_MODE_BIG || word_left == 0) { + memcpy((void *)(sha_buffer + left), p, len); + } else { + memcpy((void *)(sha_buffer + left), p, len + 4 - word_left); +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_priv->last_left = word_left; +#else + last_left = word_left; +#endif + } + } + + sha_priv->status.busy = 0; + + return 0; +} + +/** + \brief finish the engine + \param[in] handle sha handle to operate. + \param[in] context Pointer to the sha context. + \param[out] output Pointer to the dest data + \return error code +*/ +//static uint32_t total_length; +int32_t csi_sha_finish(sha_handle_t handle, void *context, void *output) +{ + SHA_NULL_PARAM_CHK(handle); + SHA_NULL_PARAM_CHK(output); + + ck_sha_priv_t *sha_priv = handle; + uint32_t block_size; + uint8_t message_len; + if (sha_priv->mode < 4) { + block_size = 64; + message_len = 8; + } else { + block_size = 128; + message_len = 16; + } + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + uint32_t last = sha_priv->total & (block_size - 1); + uint32_t padn = (last < (block_size - message_len)) ? (block_size - last) : (block_size + block_size - last); + +#else + uint32_t last = total[0] & (block_size - 1); + uint32_t padn = (last < (block_size - message_len)) ? (block_size - last) : (block_size + block_size - last); + +#endif + + finish_flag = 1; + + csi_sha_update(handle, NULL, output, padn); + + /* get the hash result */ + sha_get_data(handle, (uint32_t *)output); + + uint8_t *p = output; + /* convert the data endian according the sha mode */ + if (sha_priv->mode == SHA_MODE_1) { + sha_reverse_order(p, 20); + } else if (sha_priv->mode == SHA_MODE_224) { + sha_reverse_order(p, 28); + } else if (sha_priv->mode == SHA_MODE_256) { + sha_reverse_order(p, 32); + } else if (sha_priv->mode == SHA_MODE_512) { + sha_reverse_order(p, 64); + } else if (sha_priv->mode == SHA_MODE_384) { + sha_reverse_order(p, 48); + } + +#ifdef CONFIG_SHA_SUPPORT_MUL_THREAD + sha_priv->total = 0; + sha_priv->last_left = 0; +#else + total[0] = 0; + last_left = 0; +#endif + finish_flag = 0; + + return 0; +} + +/** + \brief Get SHA status. + \param[in] handle sha handle to operate. + \return SHA status \ref sha_status_t +*/ +sha_status_t csi_sha_get_status(sha_handle_t handle) +{ + ck_sha_priv_t *sha_priv = handle; + return sha_priv->status; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v2.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v2.h new file mode 100644 index 000000000..c6fea6438 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/sha/ck_sha_v2.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file ck_sha.h + * @brief header file for sha driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CK_SHA_H_ +#define _CK_SHA_H_ + +#include +#include "drv_sha.h" +#include "soc.h" + +#define SHA_INIT_OFFSET 3 +#define SHA_INT_ENABLE_OFFSET 4 +#define SHA_ENDIAN_OFFSET 5 +#define SHA_CAL_OFFSET 6 +typedef struct { + __IOM uint32_t SHA_CON; /* Offset: 0x000 (R/W) Control register */ + __IOM uint32_t SHA_INTSTATE; /* Offset: 0x004 (R/W) Instatus register */ + __IOM uint32_t SHA_H0L; /* Offset: 0x008 (R/W) H0L register */ + __IOM uint32_t SHA_H1L; /* Offset: 0x00c (R/W) H1L register */ + __IOM uint32_t SHA_H2L; /* Offset: 0x010 (R/W) H2L register */ + __IOM uint32_t SHA_H3L; /* Offset: 0x014 (R/W) H3L register */ + __IOM uint32_t SHA_H4L; /* Offset: 0x018 (R/W) H4L register */ + __IOM uint32_t SHA_H5L; /* Offset: 0x01c (R/W) H5L register */ + __IOM uint32_t SHA_H6L; /* Offset: 0x020 (R/W) H6L register */ + __IOM uint32_t SHA_H7L; /* Offset: 0x024 (R/W) H7L register */ + __IOM uint32_t SHA_H0H; /* Offset: 0x028 (R/W) H0H register */ + __IOM uint32_t SHA_H1H; /* Offset: 0x02c (R/W) H1H register */ + __IOM uint32_t SHA_H2H; /* Offset: 0x030 (R/W) H2H register */ + __IOM uint32_t SHA_H3H; /* Offset: 0x034 (R/W) H3H register */ + __IOM uint32_t SHA_H4H; /* Offset: 0x038 (R/W) H4H register */ + __IOM uint32_t SHA_H5H; /* Offset: 0x03c (R/W) H5H register */ + __IOM uint32_t SHA_H6H; /* Offset: 0x040 (R/W) H6H register */ + __IOM uint32_t SHA_H7H; /* Offset: 0x044 (R/W) H7H register */ + __IOM uint32_t SHA_DATA1; /* Offset: 0x048 (R/W) DATA1 register */ + uint32_t REV[15]; + __IOM uint32_t SHA_DATA2; /* Offset: 0x088 (R/W) DATA2 register */ +} ck_sha_reg_t; +#endif + +typedef enum { + SHA_STATUS_START_END = 0, /* the one time count mode */ + SHA_STATUS_START = 1, /* the first time of the cal */ + SHA_STATUS_CONTINUE = 2, /* the middle stage of the cal */ + SHA_STATUS_END = 3 /* the last time of the cal*/ +} enum_sha_status; diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/Kconfig b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/Kconfig new file mode 100644 index 000000000..b7e48231f --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/Kconfig @@ -0,0 +1,20 @@ +choice + prompt "select trng type " + help + select trng type +config TRNG_CK + bool "csky trng" + help + select the ck trng driver + +config TRNG_ZX29 + bool "zx29 trng" + help + select the zx29 trng driver + +config TRNG_XX + bool "example trng" + help + this option for test + +endchoice diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/ck_trng.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/ck_trng.c new file mode 100644 index 000000000..33be9eff1 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/ck_trng.c @@ -0,0 +1,233 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file ck_trng.c + * @brief CSI Source File for TRNG Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include +#include +#include "drv_trng.h" +#include "ck_trng.h" + + +#define ERR_TRNG(errno) (CSI_DRV_ERRNO_TRNG_BASE | errno) +#define TRNG_NULL_PARAM_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_TRNG(EDRV_PARAMETER); \ + } \ + } while (0) + +typedef struct { + uint32_t base; + trng_event_cb_t cb; + trng_status_t status; +} ck_trng_priv_t; + +extern int32_t target_get_trng_count(void); +extern int32_t target_get_trng(int32_t idx, uint32_t *base); + +static ck_trng_priv_t trng_handle[CONFIG_TRNG_NUM]; + +/* Driver Capabilities */ +static const trng_capabilities_t driver_capabilities = { + .lowper_mode = 1 /* low power mode */ +}; + +extern int32_t target_get_trng(int32_t idx, uint32_t *base); +extern int32_t target_get_trng_count(void); +// +// Functions +// + +ck_trng_reg_t *trng_reg = NULL; + +static int32_t trng_enable(void) +{ + trng_reg->TCR |= TRNG_EN; + return 0; +} + +static int32_t trng_get_data(void) +{ + int data = trng_reg->TDR; + return data; +} + +static int32_t trng_data_is_ready(void) +{ + int flag = (trng_reg->TCR & TRNG_DATA_READY); + return flag; +} + +/** + \brief get trng handle count. + \return trng handle count +*/ +int32_t csi_trng_get_instance_count(void) +{ + return target_get_trng_count(); +} + +/** + \brief Initialize TRNG Interface. 1. Initializes the resources needed for the TRNG interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_trng_get_instance_count() + \param[in] cb_event Pointer to \ref trng_event_cb_t + \return pointer to trng handle +*/ +trng_handle_t csi_trng_initialize(int32_t idx, trng_event_cb_t cb_event) +{ + + if (idx < 0 || idx >= CONFIG_TRNG_NUM) { + return NULL; + } + + /* obtain the trng information */ + uint32_t base = 0u; + int32_t real_idx = target_get_trng(idx, &base); + + if (real_idx != idx) { + return NULL; + } + + ck_trng_priv_t *trng_priv = &trng_handle[idx]; + trng_priv->base = base; + + /* initialize the trng context */ + trng_reg = (ck_trng_reg_t *)(trng_priv->base); + trng_priv->cb = cb_event; + trng_priv->status.busy = 0; + trng_priv->status.data_valid = 0; + + return (trng_handle_t)trng_priv; +} + +/** + \brief De-initialize TRNG Interface. stops operation and releases the software resources used by the interface + \param[in] handle trng handle to operate. + \return error code +*/ +int32_t csi_trng_uninitialize(trng_handle_t handle) +{ + TRNG_NULL_PARAM_CHK(handle); + + ck_trng_priv_t *trng_priv = handle; + trng_priv->cb = NULL; + + return 0; +} + +/** + \brief Get driver capabilities. + \param[in] trng handle to operate. + \return \ref trng_capabilities_t +*/ +trng_capabilities_t csi_trng_get_capabilities(trng_handle_t handle) +{ + return driver_capabilities; +} + +/** + \brief Get data from the TRNG. + \param[in] handle trng handle to operate. + \param[out] data Pointer to buffer with data get from TRNG + \param[in] num Number of data items to obtain + \return error code +*/ +int32_t csi_trng_get_data(trng_handle_t handle, void *data, uint32_t num) +{ + TRNG_NULL_PARAM_CHK(handle); + TRNG_NULL_PARAM_CHK(data); + TRNG_NULL_PARAM_CHK(num); + + ck_trng_priv_t *trng_priv = handle; + + trng_priv->status.busy = 1U; + trng_priv->status.data_valid = 0U; + + uint8_t left_len = (uint32_t)data & 0x3; + uint32_t result = 0; + + /* if the data addr is not aligned by word */ + if (left_len) { + trng_enable(); + while (!trng_data_is_ready()); + result = trng_get_data(); + /* wait the data is ready */ + while (trng_data_is_ready()); + + if (num > (4 - left_len)) { + memcpy(data, &result, 4 - left_len); + } else { + memcpy(data, &result, num); + trng_priv->status.busy = 0U; + trng_priv->status.data_valid = 1U; + + if (trng_priv->cb) { + trng_priv->cb(TRNG_EVENT_DATA_GENERATE_COMPLETE); + } + return 0; + } + num -= (4 - left_len); + data += (4 - left_len); + } + + uint32_t word_len = num >> 2; + left_len = num & 0x3; + + /* obtain the data by word */ + while (word_len--) { + trng_enable(); + while (!trng_data_is_ready()); + result = trng_get_data(); + while (trng_data_is_ready()); + *(uint32_t *)data = result; + data = (void *)((uint32_t)data + 4); + } + + /* if the num is not aligned by word */ + if (left_len) { + trng_enable(); + while (!trng_data_is_ready()); + result = trng_get_data(); + while (trng_data_is_ready()); + memcpy(data, &result, left_len); + } + + trng_priv->status.busy = 0U; + trng_priv->status.data_valid = 1U; + + if (trng_priv->cb) { + trng_priv->cb(TRNG_EVENT_DATA_GENERATE_COMPLETE); + } + + return 0; +} + +/** + \brief Get TRNG status. + \param[in] handle trng handle to operate. + \return TRNG status \ref trng_status_t +*/ +trng_status_t csi_trng_get_status(trng_handle_t handle) +{ + ck_trng_priv_t *trng_priv = handle; + return trng_priv->status; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/ck_trng.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/ck_trng.h new file mode 100644 index 000000000..4255cf262 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/ck_trng.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file ck_trng.h + * @brief header file for trng driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CK_TRNG_H_ +#define _CK_TRNG_H_ + +#include "drv_trng.h" +#include "soc.h" + +/* + * define the bits for TCR + */ +#define TRNG_EN (1UL << 1) +#define TRNG_LOWPER_MODE (1UL << 2) +#define TRNG_DATA_READY 1 + +typedef struct { + __IOM uint32_t TCR; /* Offset: 0x000 (W/R) TRNG control register */ + __IM uint32_t TDR; /* Offset: 0x004 (R) TRNG Data register */ + +} ck_trng_reg_t; +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/osr_trng.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/osr_trng.c new file mode 100644 index 000000000..5e1a65563 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/osr_trng.c @@ -0,0 +1,241 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file osr_trng.c + * @brief CSI Source File for TRNG Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#include +#include +#include +#include "drv_trng.h" +#include "osr_trng.h" + + +#define ERR_TRNG(errno) (CSI_DRV_ERRNO_TRNG_BASE | errno) +#define TRNG_NULL_PARAM_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_TRNG(EDRV_PARAMETER); \ + } \ + } while (0) + +typedef struct { + uint32_t base; + uint32_t irq; + trng_event_cb_t cb; + trng_status_t status; +} osr_trng_priv_t; + +extern int32_t target_get_trng(int32_t idx, uint32_t *base, uint32_t *irq); + +static osr_trng_priv_t trng_handle[CONFIG_TRNG_NUM]; + +/* Driver Capabilities */ +static const trng_capabilities_t driver_capabilities = { + .lowper_mode = 0 /* low power mode */ +}; + +// +// Functions +// + +osr_trng_reg_t *trng_reg = NULL; + +static int32_t trng_disable_irq(void) +{ + trng_reg->RBG_CR &= ~TRNG_IRQ_BIT; + return 0; +} + +static int32_t trng_enable(void) +{ + trng_reg->RBG_CR |= TRNG_EN; + return 0; +} + +static int32_t trng_get_data(void) +{ + int data = trng_reg->RBG_DR; + return data; +} + +static int32_t trng_data_is_ready(void) +{ + int flag = (trng_reg->RBG_FIFO_SR & TRNG_DATA_READY); + return flag; +} + +/** + \brief Initialize TRNG Interface. 1. Initializes the resources needed for the TRNG interface 2.registers event callback function + \param[in] idx device id + \param[in] cb_event Pointer to \ref trng_event_cb_t + \return pointer to trng handle +*/ +trng_handle_t csi_trng_initialize(int32_t idx, trng_event_cb_t cb_event) +{ + + if (idx < 0 || idx >= CONFIG_TRNG_NUM) { + return NULL; + } + + /* obtain the trng information */ + uint32_t base = 0u; + uint32_t irq = 0u; + int32_t real_idx = target_get_trng(idx, &base, &irq); + + if (real_idx != idx) { + return NULL; + } + + osr_trng_priv_t *trng_priv = &trng_handle[idx]; + trng_priv->base = base; + trng_priv->irq = irq; + + /* initialize the trng context */ + trng_reg = (osr_trng_reg_t *)(trng_priv->base); + trng_priv->cb = cb_event; + trng_priv->status.busy = 0; + trng_priv->status.data_valid = 0; + + trng_disable_irq(); + + return (trng_handle_t)trng_priv; +} + +/** + \brief De-initialize TRNG Interface. stops operation and releases the software resources used by the interface + \param[in] handle trng handle to operate. + \return error code +*/ +int32_t csi_trng_uninitialize(trng_handle_t handle) +{ + TRNG_NULL_PARAM_CHK(handle); + + osr_trng_priv_t *trng_priv = handle; + trng_priv->cb = NULL; + + return 0; +} + +/** + \brief Get driver capabilities. + \param[in] idx device id. + \return \ref trng_capabilities_t +*/ +//trng_capabilities_t csi_trng_get_capabilities(int32_t idx) +trng_capabilities_t csi_trng_get_capabilities(trng_handle_t handle) +{ + /* + if (idx < 0 || idx >= CONFIG_TRNG_NUM) { + trng_capabilities_t ret; + memset(&ret, 0, sizeof(trng_capabilities_t)); + return ret; + }*/ + return driver_capabilities; +} + +/** + \brief Get data from the TRNG. + \param[in] handle trng handle to operate. + \param[out] data Pointer to buffer with data get from TRNG + \param[in] num Number of data items to obtain + \return error code +*/ +int32_t csi_trng_get_data(trng_handle_t handle, void *data, uint32_t num) +{ + TRNG_NULL_PARAM_CHK(handle); + TRNG_NULL_PARAM_CHK(data); + TRNG_NULL_PARAM_CHK(num); + + osr_trng_priv_t *trng_priv = handle; + + trng_priv->status.busy = 1U; + trng_priv->status.data_valid = 0U; + + uint8_t left_len = (uint32_t)data & 0x3; + uint32_t result = 0; + + trng_enable(); + /* if the data addr is not aligned by word */ + if (left_len) { + while (!trng_data_is_ready()); + result = trng_get_data(); + + if (num > (4 - left_len)) { + memcpy(data, &result, 4 - left_len); + } else { + memcpy(data, &result, num); + trng_priv->status.busy = 0U; + trng_priv->status.data_valid = 1U; + + if (trng_priv->cb) { + //trng_priv->cb(0, TRNG_EVENT_DATA_GENERATE_COMPLETE); + trng_priv->cb(TRNG_EVENT_DATA_GENERATE_COMPLETE); + } + return 0; + } + num -= (4 - left_len); + data += (4 - left_len); + } + + uint32_t word_len = num >> 2; + left_len = num & 0x3; + + /* obtain the data by word */ + while (word_len--) { + while (!trng_data_is_ready()); + result = trng_get_data(); + *(uint32_t *)data = result; + data = (void *)((uint32_t)data + 4); + } + + /* if the num is not aligned by word */ + if (left_len) { + while (!trng_data_is_ready()); + result = trng_get_data(); + memcpy(data, &result, left_len); + } + + trng_priv->status.busy = 0U; + trng_priv->status.data_valid = 1U; + + if (trng_priv->cb) { + //trng_priv->cb(0, TRNG_EVENT_DATA_GENERATE_COMPLETE); + trng_priv->cb(TRNG_EVENT_DATA_GENERATE_COMPLETE); + } + + return 0; +} + +/** + \brief Get TRNG status. + \param[in] handle trng handle to operate. + \return TRNG status \ref trng_status_t +*/ +trng_status_t csi_trng_get_status(trng_handle_t handle) +{ + if (handle == NULL) { + trng_status_t ret; + memset(&ret, 0, sizeof(trng_status_t)); + return ret; + } + osr_trng_priv_t *trng_priv = handle; + return trng_priv->status; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/osr_trng.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/osr_trng.h new file mode 100644 index 000000000..d1fb9f956 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/trng/osr_trng.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file osr_trng.h + * @brief header file for trng driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _OSR_TRNG_H_ +#define _OSR_TRNG_H_ + +#include "drv_trng.h" +#include "soc.h" + +/* + * define the bits for TCR + */ +#define TRNG_EN (1UL << 0) +#define TRNG_DATA_READY (0xff << 16) +#define TRNG_IRQ_BIT (1UL << 24) + +typedef struct { + __IOM uint32_t RBG_CR; /* Offset: 0x000 (W/R) RBG control register */ + __IOM uint32_t RBG_RTCR; /* Offset: 0x004 (W/R) RBG mode selection register */ + __IOM uint32_t RBG_SR; /* Offset: 0x008 (W/R) RBG status register */ + __IM uint32_t RBG_DR; /* Offset: 0x00c ( /R) RBG data register */ + uint32_t Reserved[4]; + __IOM uint32_t RBG_FIFO_CR; /* Offset: 0x020 (W/R) FIFO control register */ + __IM uint32_t RBG_FIFO_SR; /* Offset: 0x024 ( /R) FIFO status register */ +} osr_trng_reg_t; +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/Kconfig b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/Kconfig new file mode 100644 index 000000000..8e3e09630 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/Kconfig @@ -0,0 +1,25 @@ +choice + prompt "select usart type " + help + select usart type +config USART_DW + bool "designware usart" + help + select the dw usart driver + +config USART_CK + bool "csky usart" + help + select the ck usart driver + +config USART_SILAN + bool "silan usart" + help + select the silan usart driver + +config USART_ZX29 + bool "zx29 usart" + help + select the zx29 usart driver +endchoice + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/ck_usart.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/ck_usart.c new file mode 100644 index 000000000..4abd8e779 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/ck_usart.c @@ -0,0 +1,710 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file ck_usart.c + * @brief CSI Source File for usart Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include "csi_core.h" +#include "drv_usart.h" +#include "ck_usart.h" +#include "soc.h" + +#define ERR_USART(errno) (CSI_DRV_ERRNO_USART_BASE | errno) + +/* + * setting config may be accessed when the USART is not + * busy(USR[0]=0) and the DLAB bit(LCR[7]) is set. + */ + +#define WAIT_USART_IDLE(addr)\ + do { \ + int32_t timecount = 0; \ + while ((addr->USR & USR_UART_BUSY) && (timecount < UART_BUSY_TIMEOUT)) {\ + timecount++;\ + }\ + if (timecount >= UART_BUSY_TIMEOUT) {\ + return ERR_USART(EDRV_TIMEOUT);\ + } \ + } while(0) + +#define USART_NULL_PARAM_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_USART(EDRV_PARAMETER); \ + } \ + } while (0) + +typedef struct { + uint32_t base; + uint32_t irq; + usart_event_cb_t cb_event; ///< Event callback + void *cb_arg; + uint32_t rx_total_num; + uint32_t tx_total_num; + uint8_t *rx_buf; + uint8_t *tx_buf; + volatile uint32_t rx_cnt; + volatile uint32_t tx_cnt; + volatile uint32_t tx_busy; + volatile uint32_t rx_busy; +} dw_usart_priv_t; + +extern int32_t target_usart_init(pin_t tx, pin_t rx, uint32_t *base, uint32_t *irq); + +static dw_usart_priv_t usart_instance[CONFIG_USART_NUM]; + +static const usart_capabilities_t usart_capabilities = { + .asynchronous = 1, /* supports USART (Asynchronous) mode */ + .synchronous_master = 0, /* supports Synchronous Master mode */ + .synchronous_slave = 0, /* supports Synchronous Slave mode */ + .single_wire = 0, /* supports USART Single-wire mode */ + .event_tx_complete = 1, /* Transmit completed event */ + .event_rx_timeout = 0, /* Signal receive character timeout event */ +}; + +/** + \brief set the bautrate of usart. + \param[in] addr usart base to operate. + \param[in] baudrate. + \param[in] apbfreq the frequence of the apb. + \return error code +*/ +static int32_t dw_usart_set_baudrate(dw_usart_reg_t *addr, uint32_t baudrate, uint32_t apbfreq) +{ + WAIT_USART_IDLE(addr); + + /* baudrate=(seriak clock freq)/(16*divisor); algorithm :rounding*/ + uint32_t divisor = ((apbfreq * 10) / baudrate) >> 4; + + if ((divisor % 10) >= 5) { + divisor = (divisor / 10) + 1; + } else { + divisor = divisor / 10; + } + + addr->LCR |= LCR_SET_DLAB; + /* DLL and DLH is lower 8-bits and higher 8-bits of divisor.*/ + addr->DLL = divisor & 0xff; + addr->DLH = (divisor >> 8) & 0xff; + /* + * The DLAB must be cleared after the baudrate is setted + * to access other registers. + */ + addr->LCR &= (~LCR_SET_DLAB); + + return 0; +} + +/** + \brief enable or disable parity. + \param[in] addr usart base to operate. + \param[in] parity ODD=8, EVEN=16, or NONE=0. + \return error code +*/ + +static int32_t dw_usart_set_parity(dw_usart_reg_t *addr, usart_parity_e parity) +{ + WAIT_USART_IDLE(addr); + + switch (parity) { + case USART_PARITY_NONE: + /*CLear the PEN bit(LCR[3]) to disable parity.*/ + addr->LCR &= (~LCR_PARITY_ENABLE); + break; + + case USART_PARITY_ODD: + /* Set PEN and clear EPS(LCR[4]) to set the ODD parity. */ + addr->LCR |= LCR_PARITY_ENABLE; + addr->LCR &= LCR_PARITY_ODD; + break; + + case USART_PARITY_EVEN: + /* Set PEN and EPS(LCR[4]) to set the EVEN parity.*/ + addr->LCR |= LCR_PARITY_ENABLE; + addr->LCR |= LCR_PARITY_EVEN; + break; + + default: + return ERR_USART(EDRV_USART_PARITY); + } + + return 0; +} + +/** + \brief set the stop bit. + \param[in] addr usart base to operate. + \param[in] stopbit two possible value: USART_STOP_BITS_1 and USART_STOP_BITS_2. + \return error code +*/ +static int32_t dw_usart_set_stopbit(dw_usart_reg_t *addr, usart_stop_bits_e stopbit) +{ + WAIT_USART_IDLE(addr); + + switch (stopbit) { + case USART_STOP_BITS_1: + /* Clear the STOP bit to set 1 stop bit*/ + addr->LCR &= LCR_STOP_BIT1; + break; + + case USART_STOP_BITS_2: + /* + * If the STOP bit is set "1",we'd gotten 1.5 stop + * bits when DLS(LCR[1:0]) is zero, else 2 stop bits. + */ + addr->LCR |= LCR_STOP_BIT2; + break; + + default: + return ERR_USART(EDRV_USART_STOP_BITS); + } + + return 0; +} + +/** + \brief the transmit data length,and we have four choices:5, 6, 7, and 8 bits. + \param[in] addr usart base to operate. + \param[in] databits the data length that user decides. + \return error code +*/ +static int32_t dw_usart_set_databit(dw_usart_reg_t *addr, usart_data_bits_e databits) +{ + WAIT_USART_IDLE(addr); + /* The word size decides by the DLS bits(LCR[1:0]), and the + * corresponding relationship between them is: + * DLS word size + * 00 -- 5 bits + * 01 -- 6 bits + * 10 -- 7 bits + * 11 -- 8 bits + */ + + switch (databits) { + case USART_DATA_BITS_5: + addr->LCR &= LCR_WORD_SIZE_5; + break; + + case USART_DATA_BITS_6: + addr->LCR &= 0xfd; + addr->LCR |= LCR_WORD_SIZE_6; + break; + + case USART_DATA_BITS_7: + addr->LCR &= 0xfe; + addr->LCR |= LCR_WORD_SIZE_7; + break; + + case USART_DATA_BITS_8: + addr->LCR |= LCR_WORD_SIZE_8; + break; + + default: + return ERR_USART(EDRV_USART_DATA_BITS); + } + + return 0; +} + +/** + \brief get character in query mode. + \param[in] instance usart instance to operate. + \param[in] the pointer to the recieve charater. + \return error code +*/ +int32_t csi_usart_getchar(usart_handle_t handle, uint8_t *ch) +{ + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + while (!(addr->LSR & LSR_DATA_READY)); + + *ch = addr->RBR; + + return 0; +} + +/** + \brief transmit character in query mode. + \param[in] instance usart instance to operate. + \param[in] ch the input charater + \return error code +*/ +int32_t csi_usart_putchar(usart_handle_t handle, uint8_t ch) +{ + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + while ((!(addr->LSR & DW_LSR_TRANS_EMPTY))); + + addr->THR = ch; + + return 0; + +} + +/** + \brief interrupt service function for transmitter holding register empty. + \param[in] usart_priv usart private to operate. +*/ +static void dw_usart_intr_threshold_empty(dw_usart_priv_t *usart_priv) +{ + if (usart_priv->tx_total_num == 0) { + return; + } + + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + addr->THR = *((uint8_t *)usart_priv->tx_buf); + usart_priv->tx_cnt++; + usart_priv->tx_buf++; + + if (usart_priv->tx_cnt >= usart_priv->tx_total_num) { + addr->IER &= (~IER_THRE_INT_ENABLE); + + while ((!(addr->LSR & DW_LSR_TEMT))); + + usart_priv->tx_cnt = 0; + usart_priv->tx_busy = 0; + usart_priv->tx_buf = NULL; + usart_priv->tx_total_num = 0; + + if (usart_priv->cb_event) { + usart_priv->cb_event(USART_EVENT_SEND_COMPLETE, usart_priv->cb_arg); + } + } + +} + +/** + \brief interrupt service function for receiver data available. + \param[in] usart_priv usart private to operate. +*/ +static void dw_usart_intr_recv_data(dw_usart_priv_t *usart_priv) +{ + if (usart_priv->cb_event && (usart_priv->rx_total_num == 0)) { + usart_priv->cb_event(USART_EVENT_RECEIVED, usart_priv->cb_arg); + return; + } + + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + uint8_t data = addr->RBR; + + if ((usart_priv->rx_total_num == 0) || (usart_priv->rx_buf == NULL)) { + return; + } + + *((uint8_t *)usart_priv->rx_buf) = data; + usart_priv->rx_cnt++; + usart_priv->rx_buf++; + + if (usart_priv->rx_cnt >= usart_priv->rx_total_num) { + usart_priv->rx_cnt = 0; + usart_priv->rx_buf = NULL; + usart_priv->rx_busy = 0; + usart_priv->rx_total_num = 0; + + if (usart_priv->cb_event) { + usart_priv->cb_event(USART_EVENT_RECEIVE_COMPLETE, usart_priv->cb_arg); + } + } + +} + +/** + \brief the interrupt service function. + \param[in] index of usart instance. +*/ +void dw_usart_irqhandler(int32_t idx) +{ + dw_usart_priv_t *usart_priv = &usart_instance[idx]; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + uint8_t intr_state = addr->IIR & 0xf; + + switch (intr_state) { + case DW_IIR_THR_EMPTY: /* interrupt source:transmitter holding register empty */ + dw_usart_intr_threshold_empty(usart_priv); + break; + + case DW_IIR_RECV_DATA: /* interrupt source:receiver data available or receiver fifo trigger level reached */ + dw_usart_intr_recv_data(usart_priv); + break; + + default: + break; + } +} + +/** + \brief Get driver capabilities. + \param[in] handle usart handle to operate. + \return \ref usart_capabilities_t +*/ +usart_capabilities_t csi_usart_get_capabilities(usart_handle_t handle) +{ + return usart_capabilities; +} + +/** + \brief Initialize USART Interface. 1. Initializes the resources needed for the USART interface 2.registers event callback function + \param[in] usart pin of tx + \param[in] usart pin of rx + \param[in] cb_event Pointer to \ref usart_event_cb_t + \return return usart handle if success +*/ +usart_handle_t csi_usart_initialize(pin_t tx, pin_t rx, usart_event_cb_t cb_event, void *cb_arg) +{ + uint32_t base = 0u; + uint32_t irq = 0u; + + int32_t idx = target_usart_init(tx, rx, &base, &irq); + + if (idx < 0 || idx >= CONFIG_USART_NUM) { + return NULL; + } + + dw_usart_priv_t *usart_priv = &usart_instance[idx]; + usart_priv->base = base; + usart_priv->irq = irq; + usart_priv->cb_event = cb_event; + usart_priv->cb_arg = cb_arg; + + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + /* enable received data available */ + addr->IER = IER_RDA_INT_ENABLE; + drv_nvic_enable_irq(usart_priv->irq); + + return usart_priv; +} + +/** + \brief De-initialize UART Interface. stops operation and releases the software resources used by the interface + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_uninitialize(usart_handle_t handle) +{ + USART_NULL_PARAM_CHK(handle); + + dw_usart_priv_t *usart_priv = handle; + + drv_nvic_disable_irq(usart_priv->irq); + usart_priv->cb_event = NULL; + + return 0; +} + +/** + \brief config usart mode. + \param[in] handle usart handle to operate. + \param[in] sysclk configured system clock. + \param[in] mode \ref usart_mode_e + \param[in] parity \ref usart_parity_e + \param[in] stopbits \ref usart_stop_bits_e + \param[in] bits \ref usart_data_bits_e + \param[in] baud configured baud + \return error code +*/ +int32_t csi_usart_config(usart_handle_t handle, + uint32_t sysclk, + uint32_t baud, + usart_mode_e mode, + usart_parity_e parity, + usart_stop_bits_e stopbits, + usart_data_bits_e bits) +{ + USART_NULL_PARAM_CHK(handle); + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + /* control the data_bit of the usart*/ + int32_t ret = dw_usart_set_baudrate(addr, baud, sysclk); + + if (ret < 0) { + return ret; + } + + /* control the parity of the usart*/ + ret = dw_usart_set_parity(addr, parity); + + if (ret < 0) { + return ret; + } + + /* control the stopbit of the usart*/ + ret = dw_usart_set_stopbit(addr, stopbits); + + if (ret < 0) { + return ret; + } + + ret = dw_usart_set_databit(addr, bits); + + if (ret < 0) { + return ret; + } + + return 0; +} +/** + \brief config usart default tx value. used in syn mode + \param[in] handle usart handle to operate. + \param[in] value default tx value + \return error code +*/ +int32_t csi_usart_set_default_tx_value(usart_handle_t handle, uint32_t value) +{ + USART_NULL_PARAM_CHK(handle); + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief Start sending data to UART transmitter,(received data is ignored). + The function is non-blocking,UART_EVENT_TRANSFER_COMPLETE is signaled when transfer completes. + csi_usart_get_status can indicates if transmission is still in progress or pending + \param[in] handle usart handle to operate. + \param[in] data Pointer to buffer with data to send to UART transmitter. data_type is : uint8_t for 1..8 data bits, uint16_t for 9..16 data bits,uint32_t for 17..32 data bits, + \param[in] num Number of data items to send + \return error code +*/ +int32_t csi_usart_send(usart_handle_t handle, const void *data, uint32_t num) +{ + USART_NULL_PARAM_CHK(handle); + USART_NULL_PARAM_CHK(data); + + if (num == 0) { + return ERR_USART(EDRV_PARAMETER); + } + + dw_usart_priv_t *usart_priv = handle; + uint8_t *source = NULL; + source = (uint8_t *)data; + + usart_priv->tx_buf = (uint8_t *)data; + usart_priv->tx_total_num = num; + usart_priv->tx_cnt = 0; + usart_priv->tx_busy = 1; + + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + /* enable the interrupt*/ + addr->IER |= IER_THRE_INT_ENABLE; + return 0; +} + +/** + \brief Abort Send data to UART transmitter + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_abort_send(usart_handle_t handle) +{ + USART_NULL_PARAM_CHK(handle); + dw_usart_priv_t *usart_priv = handle; + + usart_priv->tx_cnt = usart_priv->tx_total_num; + return 0; +} + +/** + \brief Start receiving data from UART receiver.transmits the default value as specified by csi_usart_set_default_tx_value + \param[in] handle usart handle to operate. + \param[out] data Pointer to buffer for data to receive from UART receiver + \param[in] num Number of data items to receive + \return error code +*/ +int32_t csi_usart_receive(usart_handle_t handle, void *data, uint32_t num) +{ + USART_NULL_PARAM_CHK(handle); + USART_NULL_PARAM_CHK(data); + + uint8_t *dest = NULL; + dw_usart_priv_t *usart_priv = handle; + dest = (uint8_t *)data; + + usart_priv->rx_buf = (uint8_t *)data; // Save receive buffer usart + usart_priv->rx_total_num = num; // Save number of data to be received + usart_priv->rx_cnt = 0; + usart_priv->rx_busy = 1; + + return 0; + +} + +/** + \brief query data from UART receiver FIFO. + \param[in] handle usart handle to operate. + \param[out] data Pointer to buffer for data to receive from UART receiver + \param[in] num Number of data items to receive + \return receive fifo data num +*/ +int32_t csi_usart_receive_query(usart_handle_t handle, void *data, uint32_t num) +{ + USART_NULL_PARAM_CHK(handle); + USART_NULL_PARAM_CHK(data); + + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + int32_t recv_num = 0; + + while (addr->LSR & 0x1) { + *((uint8_t *)data++) = addr->RBR; + recv_num++; + + if (recv_num >= num) { + break; + } + } + + return recv_num; + +} + +/** + \brief Abort Receive data from UART receiver + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_abort_receive(usart_handle_t handle) +{ + USART_NULL_PARAM_CHK(handle); + dw_usart_priv_t *usart_priv = handle; + + usart_priv->rx_cnt = usart_priv->rx_total_num; + return 0; +} + +/** + \brief Start sending/receiving data to/from UART transmitter/receiver. + \param[in] handle usart handle to operate. + \param[in] data_out Pointer to buffer with data to send to USART transmitter + \param[out] data_in Pointer to buffer for data to receive from USART receiver + \param[in] num Number of data items to transfer + \return error code +*/ +int32_t csi_usart_transfer(usart_handle_t handle, const void *data_out, void *data_in, uint32_t num) +{ + USART_NULL_PARAM_CHK(handle); + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief abort sending/receiving data to/from USART transmitter/receiver. + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_abort_transfer(usart_handle_t handle) +{ + USART_NULL_PARAM_CHK(handle); + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief Get USART status. + \param[in] handle usart handle to operate. + \return USART status \ref usart_status_t +*/ +usart_status_t csi_usart_get_status(usart_handle_t handle) +{ + usart_status_t usart_status; + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + uint32_t line_status_reg = addr->LSR; + + usart_status.tx_busy = usart_priv->tx_busy; + usart_status.rx_busy = usart_priv->rx_busy; + + if (line_status_reg & DW_LSR_BI) { + usart_status.rx_break = 1; + } + + if (line_status_reg & DW_LSR_FE) { + usart_status.rx_framing_error = 1; + } + + if (line_status_reg & DW_LSR_PE) { + usart_status.rx_parity_error = 1; + } + + return usart_status; +} + +/** + \brief control the transmit. + \param[in] handle usart handle to operate. + \param[in] 1 - enable the transmitter. 0 - disable the transmitter + \return error code +*/ +int32_t csi_usart_control_tx(usart_handle_t handle, uint32_t enable) +{ + USART_NULL_PARAM_CHK(handle); + return 0; +} + +/** + \brief control the receive. + \param[in] handle usart handle to operate. + \param[in] 1 - enable the receiver. 0 - disable the receiver + \return error code +*/ +int32_t csi_usart_control_rx(usart_handle_t handle, uint32_t enable) +{ + USART_NULL_PARAM_CHK(handle); + return 0; +} + +/** + \brief control the break. + \param[in] handle usart handle to operate. + \param[in] 1- Enable continuous Break transmission,0 - disable continuous Break transmission + \return error code +*/ +int32_t csi_usart_control_break(usart_handle_t handle, uint32_t enable) +{ + USART_NULL_PARAM_CHK(handle); + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief flush receive/send data. + \param[in] handle usart handle to operate. + \param[in] type \ref usart_flush_type_e. + \return error code +*/ +int32_t csi_usart_flush(usart_handle_t handle, usart_flush_type_e type) +{ + USART_NULL_PARAM_CHK(handle); + + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + if (type == USART_FLUSH_WRITE) { + while ((!(addr->LSR & DW_LSR_TEMT))); + } else if (type == USART_FLUSH_READ) { + while (addr->LSR & 0x1) { + addr->RBR; + } + } else { + return ERR_USART(EDRV_PARAMETER); + } + + return 0; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/ck_usart.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/ck_usart.h new file mode 100644 index 000000000..250da246f --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/ck_usart.h @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file dw_usart.h + * @brief header file for usart driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef __CK_USART_H +#define __CK_USART_H + +#include +#include "errno.h" +#include "soc.h" + +#define BAUDRATE_DEFAULT 19200 +#define UART_BUSY_TIMEOUT 1000000 +#define UART_RECEIVE_TIMEOUT 1000 +#define UART_TRANSMIT_TIMEOUT 1000 +#define UART_MAX_FIFO 0x10 +/* UART register bit definitions */ + +#define USR_UART_BUSY 0x01 +#define USR_UART_TFE 0x04 +#define USR_UART_RFNE 0x08 +#define LSR_DATA_READY 0x01 +#define LSR_THR_EMPTY 0x20 +#define IER_RDA_INT_ENABLE 0x01 +#define IER_THRE_INT_ENABLE 0x02 +#define IIR_NO_ISQ_PEND 0x01 + +#define LCR_SET_DLAB 0x80 /* enable r/w DLR to set the baud rate */ +#define LCR_PARITY_ENABLE 0x08 /* parity enabled */ +#define LCR_PARITY_EVEN 0x10 /* Even parity enabled */ +#define LCR_PARITY_ODD 0xef /* Odd parity enabled */ +#define LCR_WORD_SIZE_5 0xfc /* the data length is 5 bits */ +#define LCR_WORD_SIZE_6 0x01 /* the data length is 6 bits */ +#define LCR_WORD_SIZE_7 0x02 /* the data length is 7 bits */ +#define LCR_WORD_SIZE_8 0x03 /* the data length is 8 bits */ +#define LCR_STOP_BIT1 0xfb /* 1 stop bit */ +#define LCR_STOP_BIT2 0x04 /* 1.5 stop bit */ + +#define DW_LSR_PFE 0x80 +#define DW_LSR_TEMT 0x40 +#define DW_LSR_THRE 0x40 +#define DW_LSR_BI 0x10 +#define DW_LSR_FE 0x08 +#define DW_LSR_PE 0x04 +#define DW_LSR_OE 0x02 +#define DW_LSR_DR 0x01 +#define DW_LSR_TRANS_EMPTY 0x20 + +#define DW_IIR_THR_EMPTY 0x02 /* threshold empty */ +#define DW_IIR_RECV_DATA 0x04 /* received data available */ + +typedef struct { + union { + __IM uint32_t RBR; /* Offset: 0x000 (R/ ) Receive buffer register */ + __OM uint32_t THR; /* Offset: 0x000 ( /W) Transmission hold register */ + __IOM uint32_t DLL; /* Offset: 0x000 (R/W) Clock frequency division low section register */ + }; + union { + __IOM uint32_t DLH; /* Offset: 0x004 (R/W) Clock frequency division high section register */ + __IOM uint32_t IER; /* Offset: 0x004 (R/W) Interrupt enable register */ + }; + __IM uint32_t IIR; /* Offset: 0x008 (R/ ) Interrupt indicia register */ + __IOM uint32_t LCR; /* Offset: 0x00C (R/W) Transmission control register */ + uint32_t RESERVED0; + __IM uint32_t LSR; /* Offset: 0x014 (R/ ) Transmission state register */ + __IM uint32_t MSR; /* Offset: 0x018 (R/ ) Modem state register */ + uint32_t RESERVED1[24]; + __IM uint32_t USR; /* Offset: 0x07c (R/ ) UART state register */ +} dw_usart_reg_t; + +#endif /* __CK_USART_H */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/dw_usart.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/dw_usart.c new file mode 100644 index 000000000..2b9e47c75 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/dw_usart.c @@ -0,0 +1,761 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file dw_usart.c + * @brief CSI Source File for usart Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include "csi_core.h" +#include "drv_usart.h" +#include "dw_usart.h" +#include "soc.h" + +#define ERR_USART(errno) (CSI_DRV_ERRNO_USART_BASE | errno) + +/* + * setting config may be accessed when the USART is not + * busy(USR[0]=0) and the DLAB bit(LCR[7]) is set. + */ + +#define WAIT_USART_IDLE(addr)\ + do { \ + int32_t timecount = 0; \ + while ((addr->USR & USR_UART_BUSY) && (timecount < UART_BUSY_TIMEOUT)) {\ + timecount++;\ + }\ + if (timecount >= UART_BUSY_TIMEOUT) {\ + return ERR_USART(EDRV_TIMEOUT);\ + } \ + } while(0) + +#define USART_NULL_PARAM_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_USART(EDRV_PARAMETER); \ + } \ + } while (0) + +typedef struct { + uint32_t base; +} dw_usart_priv_t; + +extern int32_t target_usart_init(pin_t tx, pin_t rx, uint32_t *base, uint32_t *irq); +extern int32_t target_usart_flowctrl_init(pin_t tx_flow, pin_t rx_flow, uint32_t flag); + +static dw_usart_priv_t usart_instance[CONFIG_USART_NUM]; + +static const usart_capabilities_t usart_capabilities = { + .asynchronous = 0, /* supports USART (Asynchronous) mode */ + .synchronous_master = 0, /* supports Synchronous Master mode */ + .synchronous_slave = 0, /* supports Synchronous Slave mode */ + .single_wire = 0, /* supports USART Single-wire mode */ + .event_tx_complete = 0, /* Transmit completed event */ + .event_rx_timeout = 0, /* Signal receive character timeout event */ +}; + +/** + \brief set the baut drate of usart. + \param[in] addr usart base to operate. + \param[in] baudrate baud rate + \param[in] apbfreq the frequency of the apb. + \return error code +*/ +int32_t csi_usart_config_baudrate(usart_handle_t handle, uint32_t baudrate, uint32_t apbfreq) +{ + USART_NULL_PARAM_CHK(handle); + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + +#ifdef CONFIG_CHIP_HOBBIT1_2 + uint8_t data[16]; + csi_usart_receive_query(handle, data, 16); +#endif + + WAIT_USART_IDLE(addr); + + /* baudrate=(seriak clock freq)/(16*divisor); algorithm :rounding*/ + uint32_t divisor = ((apbfreq * 10) / baudrate) >> 4; + + if ((divisor % 10) >= 5) { + divisor = (divisor / 10) + 1; + } else { + divisor = divisor / 10; + } + + addr->LCR |= LCR_SET_DLAB; + /* DLL and DLH is lower 8-bits and higher 8-bits of divisor.*/ + addr->DLL = divisor & 0xff; + addr->DLH = (divisor >> 8) & 0xff; + /* + * The DLAB must be cleared after the baudrate is setted + * to access other registers. + */ + addr->LCR &= (~LCR_SET_DLAB); + + return 0; +} + +/** + \brief config usart mode. + \param[in] handle usart handle to operate. + \param[in] mode \ref usart_mode_e + \return error code +*/ +int32_t csi_usart_config_mode(usart_handle_t handle, usart_mode_e mode) +{ + if (mode == USART_MODE_ASYNCHRONOUS) { + return 0; + } + + return ERR_USART(EDRV_USART_MODE); +} + +/** + \brief config usart parity. + \param[in] handle usart handle to operate. + \param[in] parity \ref usart_parity_e + \return error code +*/ +int32_t csi_usart_config_parity(usart_handle_t handle, usart_parity_e parity) +{ + USART_NULL_PARAM_CHK(handle); + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + WAIT_USART_IDLE(addr); + + switch (parity) { + case USART_PARITY_NONE: + /*CLear the PEN bit(LCR[3]) to disable parity.*/ + addr->LCR &= (~LCR_PARITY_ENABLE); + break; + + case USART_PARITY_ODD: + /* Set PEN and clear EPS(LCR[4]) to set the ODD parity. */ + addr->LCR |= LCR_PARITY_ENABLE; + addr->LCR &= LCR_PARITY_ODD; + break; + + case USART_PARITY_EVEN: + /* Set PEN and EPS(LCR[4]) to set the EVEN parity.*/ + addr->LCR |= LCR_PARITY_ENABLE; + addr->LCR |= LCR_PARITY_EVEN; + break; + + default: + return ERR_USART(EDRV_USART_PARITY); + } + + return 0; +} + +/** + \brief config usart stop bit number. + \param[in] handle usart handle to operate. + \param[in] stopbits \ref usart_stop_bits_e + \return error code +*/ +int32_t dw_usart_config_stopbits(usart_handle_t handle, usart_stop_bits_e stopbit) +{ + USART_NULL_PARAM_CHK(handle); + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + WAIT_USART_IDLE(addr); + + switch (stopbit) { + case USART_STOP_BITS_1: + /* Clear the STOP bit to set 1 stop bit*/ + addr->LCR &= LCR_STOP_BIT1; + break; + + case USART_STOP_BITS_2: + /* + * If the STOP bit is set "1",we'd gotten 1.5 stop + * bits when DLS(LCR[1:0]) is zero, else 2 stop bits. + */ + addr->LCR |= LCR_STOP_BIT2; + break; + + default: + return ERR_USART(EDRV_USART_STOP_BITS); + } + + return 0; +} + +/** + \brief config usart data length. + \param[in] handle usart handle to operate. + \param[in] databits \ref usart_data_bits_e + \return error code +*/ +int32_t csi_usart_config_databits(usart_handle_t handle, usart_data_bits_e databits) +{ + USART_NULL_PARAM_CHK(handle); + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + +#ifdef CONFIG_CHIP_HOBBIT1_2 + uint8_t data[16]; + csi_usart_receive_query(handle, data, 16); +#endif + + WAIT_USART_IDLE(addr); + /* The word size decides by the DLS bits(LCR[1:0]), and the + * corresponding relationship between them is: + * DLS word size + * 00 -- 5 bits + * 01 -- 6 bits + * 10 -- 7 bits + * 11 -- 8 bits + */ + + switch (databits) { + case USART_DATA_BITS_5: + addr->LCR &= LCR_WORD_SIZE_5; + break; + + case USART_DATA_BITS_6: + addr->LCR &= 0xfd; + addr->LCR |= LCR_WORD_SIZE_6; + break; + + case USART_DATA_BITS_7: + addr->LCR &= 0xfe; + addr->LCR |= LCR_WORD_SIZE_7; + break; + + case USART_DATA_BITS_8: + addr->LCR |= LCR_WORD_SIZE_8; + break; + + default: + return ERR_USART(EDRV_USART_DATA_BITS); + } + + return 0; +} + +/** + \brief get character in query mode. + \param[in] handle usart handle to operate. + \param[in] the pointer to the received character if return 0. + \return error code +*/ +int32_t csi_usart_getchar(usart_handle_t handle, uint8_t *ch) +{ + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + while (!(addr->LSR & LSR_DATA_READY)); + + *ch = addr->RBR; + + return 0; +} + +/** + \brief transmit character in query mode. + \param[in] handle usart handle to operate. + \param[in] ch the input character + \return error code +*/ +int32_t csi_usart_putchar(usart_handle_t handle, uint8_t ch) +{ + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + while ((!(addr->LSR & DW_LSR_TRANS_EMPTY))); + + addr->THR = ch; + + return 0; +} + +/** + \brief the interrupt service function. + \param[in] index of usart instance. +*/ +void dw_usart_irqhandler(int32_t idx) +{ + (void)idx; +} + +/** + \brief Get driver capabilities. + \param[in] handle usart handle to operate. + \return \ref usart_capabilities_t +*/ +usart_capabilities_t csi_usart_get_capabilities(usart_handle_t handle) +{ + return usart_capabilities; +} + +/** + \brief Initialize USART Interface. 1. Initializes the resources needed for the USART interface 2.registers event callback function + \param[in] usart pin of tx + \param[in] usart pin of rx + \param[in] cb_event Pointer to \ref usart_event_cb_t + \return return usart handle if success +*/ +usart_handle_t csi_usart_initialize(pin_t tx, pin_t rx, usart_event_cb_t cb_event, void *cb_arg) +{ + uint32_t base = 0u; + uint32_t irq = 0u; + int32_t idx = target_usart_init(tx, rx, &base, &irq); + + if (idx < 0 || idx >= CONFIG_USART_NUM) { + return NULL; + } + + dw_usart_priv_t *usart_priv = &usart_instance[idx]; + usart_priv->base = base; + + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + /* FIFO enable */ + addr->FCR = DW_FCR_FIFOE | DW_FCR_RT_FIFO_HALF; + + return usart_priv; +} + +/** + \brief De-initialize UART Interface. stops operation and releases the software resources used by the interface + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_uninitialize(usart_handle_t handle) +{ + USART_NULL_PARAM_CHK(handle); + return 0; +} + +/** + \brief config usart mode. + \param[in] handle usart handle to operate. + \param[in] sysclk configured system clock. + \param[in] baud baud rate + \param[in] mode \ref usart_mode_e + \param[in] parity \ref usart_parity_e + \param[in] stopbits \ref usart_stop_bits_e + \param[in] bits \ref usart_data_bits_e + \return error code +*/ +int32_t csi_usart_config(usart_handle_t handle, + uint32_t sysclk, + uint32_t baud, + usart_mode_e mode, + usart_parity_e parity, + usart_stop_bits_e stopbits, + usart_data_bits_e bits) +{ + int32_t ret; + + /* control the data_bit of the usart*/ + ret = csi_usart_config_baudrate(handle, baud, sysclk); + + if (ret < 0) { + return ret; + } + + /* control mode of the usart*/ + ret = csi_usart_config_mode(handle, mode); + + if (ret < 0) { + return ret; + } + + /* control the parity of the usart*/ + ret = csi_usart_config_parity(handle, parity); + + if (ret < 0) { + return ret; + } + + /* control the stopbit of the usart*/ + ret = dw_usart_config_stopbits(handle, stopbits); + + if (ret < 0) { + return ret; + } + + ret = csi_usart_config_databits(handle, bits); + + if (ret < 0) { + return ret; + } + + return 0; +} + +/** + \brief config usart default tx value. used in syn mode + \param[in] handle usart handle to operate. + \param[in] value default tx value + \return error code +*/ +int32_t csi_usart_set_default_tx_value(usart_handle_t handle, uint32_t value) +{ + USART_NULL_PARAM_CHK(handle); + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief Start sending data to UART transmitter,(received data is ignored). + The function is non-blocking,UART_EVENT_TRANSFER_COMPLETE is signaled when transfer completes. + csi_usart_get_status can indicates if transmission is still in progress or pending + \param[in] handle usart handle to operate. + \param[in] data Pointer to buffer with data to send to UART transmitter. data_type is : uint8_t for 1..8 data bits, uint16_t for 9..16 data bits,uint32_t for 17..32 data bits, + \param[in] num Number of data items to send + \return error code +*/ +int32_t csi_usart_send(usart_handle_t handle, const void *data, uint32_t num) +{ + USART_NULL_PARAM_CHK(handle); + USART_NULL_PARAM_CHK(data); + + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief Abort Send data to UART transmitter + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_abort_send(usart_handle_t handle) +{ + USART_NULL_PARAM_CHK(handle); + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief Start receiving data from UART receiver.transmits the default value as specified by csi_usart_set_default_tx_value + \param[in] handle usart handle to operate. + \param[out] data Pointer to buffer for data to receive from UART receiver + \param[in] num Number of data items to receive + \return error code +*/ +int32_t csi_usart_receive(usart_handle_t handle, void *data, uint32_t num) +{ + return ERR_USART(EDRV_UNSUPPORTED); + +} + +/** + \brief query data from UART receiver FIFO. + \param[in] handle usart handle to operate. + \param[out] data Pointer to buffer for data to receive from UART receiver + \param[in] num Number of data items to receive + \return receive fifo data num +*/ +int32_t csi_usart_receive_query(usart_handle_t handle, void *data, uint32_t num) +{ + return ERR_USART(EDRV_UNSUPPORTED); + +} + +/** + \brief Abort Receive data from UART receiver + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_abort_receive(usart_handle_t handle) +{ + USART_NULL_PARAM_CHK(handle); + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief Start sending/receiving data to/from UART transmitter/receiver. + \param[in] handle usart handle to operate. + \param[in] data_out Pointer to buffer with data to send to USART transmitter + \param[out] data_in Pointer to buffer for data to receive from USART receiver + \param[in] num Number of data items to transfer + \return error code +*/ +int32_t csi_usart_transfer(usart_handle_t handle, const void *data_out, void *data_in, uint32_t num) +{ + USART_NULL_PARAM_CHK(handle); + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief abort sending/receiving data to/from USART transmitter/receiver. + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_abort_transfer(usart_handle_t handle) +{ + USART_NULL_PARAM_CHK(handle); + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief Get USART status. + \param[in] handle usart handle to operate. + \return USART status \ref usart_status_t +*/ +usart_status_t csi_usart_get_status(usart_handle_t handle) +{ + usart_status_t status = {0}; + return status; +} + +/** + \brief control the transmit. + \param[in] handle usart handle to operate. + \param[in] 1 - enable the transmitter. 0 - disable the transmitter + \return error code +*/ +int32_t csi_usart_control_tx(usart_handle_t handle, uint32_t enable) +{ + USART_NULL_PARAM_CHK(handle); + return 0; +} + +/** + \brief control the receive. + \param[in] handle usart handle to operate. + \param[in] 1 - enable the receiver. 0 - disable the receiver + \return error code +*/ +int32_t csi_usart_control_rx(usart_handle_t handle, uint32_t enable) +{ + USART_NULL_PARAM_CHK(handle); + return 0; +} + +/** + \brief control the break. + \param[in] handle usart handle to operate. + \param[in] 1- Enable continuous Break transmission,0 - disable continuous Break transmission + \return error code +*/ +int32_t csi_usart_control_break(usart_handle_t handle, uint32_t enable) +{ + USART_NULL_PARAM_CHK(handle); + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief flush receive/send data. + \param[in] handle usart handle to operate. + \param[in] type \ref usart_flush_type_e. + \return error code +*/ +int32_t csi_usart_flush(usart_handle_t handle, usart_flush_type_e type) +{ + USART_NULL_PARAM_CHK(handle); + + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + if (type == USART_FLUSH_WRITE) { + addr->FCR |= DW_FCR_XFIFOR; + + while (addr->FCR & DW_FCR_XFIFOR); + } else if (type == USART_FLUSH_READ) { + addr->FCR |= DW_FCR_RFIFOR; + + while (addr->FCR & DW_FCR_RFIFOR); + } else { + return ERR_USART(EDRV_PARAMETER); + } + + return 0; +} + +/** + \brief control interrupt on/off. + \param[in] handle usart handle to operate. + \param[in] type \ref usart_intr_type_e. + \param[in] flag 0-OFF, 1-ON. + \return error code +*/ +int32_t csi_usart_interrupt_on_off(usart_handle_t handle, usart_intr_type_e type, int flag) +{ + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief Get usart send data count. + \param[in] handle usart handle to operate. + \return number of data bytes transferred +*/ +uint32_t csi_usart_get_tx_count(usart_handle_t handle) +{ + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief Get usart receive data count. + \param[in] handle usart handle to operate. + \return number of data bytes transferred +*/ +uint32_t csi_usart_get_rx_count(usart_handle_t handle) +{ + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief control usart power. + \param[in] handle usart handle to operate. + \param[in] state power state.\ref csi_power_stat_e. + \return error code +*/ +int32_t csi_usart_power_control(usart_handle_t handle, csi_power_stat_e state) +{ + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief config usart flow control type. + \param[in] handle usart handle to operate. + \param[in] flowctrl_type flow control type.\ref usart_flowctrl_type_e. + \param[in] tx_flow The TX flow pin name + \param[in] rx_flow The RX flow pin name + \return error code +*/ +int32_t csi_usart_config_flowctrl(usart_handle_t handle, + usart_flowctrl_type_e flowctrl_type, + pin_t tx_flow, pin_t rx_flow) +{ + USART_NULL_PARAM_CHK(handle); + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + int32_t ret; + + switch (flowctrl_type) { + case USART_FLOWCTRL_CTS: + return ERR_USART(EDRV_UNSUPPORTED); + + case USART_FLOWCTRL_RTS: + return ERR_USART(EDRV_UNSUPPORTED); + + case USART_FLOWCTRL_CTS_RTS: + ret = target_usart_flowctrl_init(tx_flow, rx_flow, 1); + + if (ret < 0) { + return ERR_USART(EDRV_PARAMETER); + } + + WAIT_USART_IDLE(addr); + addr->MCR |= DW_MCR_AFCE | DW_MCR_RTS; + break; + + case USART_FLOWCTRL_NONE: + ret = target_usart_flowctrl_init(tx_flow, rx_flow, 0); + + if (ret < 0) { + return ERR_USART(EDRV_PARAMETER); + } + + WAIT_USART_IDLE(addr); + addr->MCR = 0; + break; + + default: + return ERR_USART(EDRV_UNSUPPORTED); + } + + return 0; +} + +/** + \brief usart modem control. + \param[in] handle usart handle to operate. + \param[in] modem_ctrl modem control action.\ref usart_modem_ctrl_e. + \return error code +*/ +int32_t csi_usart_modem_ctrl(usart_handle_t handle, usart_modem_ctrl_e modem_ctrl) +{ + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief get usart modem status. + \param[in] handle usart handle to operate. + \param[in] modem_ctrl modem control action.\ref usart_modem_ctrl_e. + \return modem status.\ref usart_modem_stat_t. +*/ +usart_modem_stat_t csi_usart_get_modem_stat(usart_handle_t handle) +{ + usart_modem_stat_t modem_stat = {0}; + return modem_stat; +} + +/** + \brief config usart clock Polarity and Phase. + \param[in] handle usart handle to operate. + \param[in] cpol Clock Polarity.\ref usart_cpol_e. + \param[in] cpha Clock Phase.\ref usart_cpha_e. + \return error code +*/ +int32_t csi_usart_config_clock(usart_handle_t handle, usart_cpol_e cpol, usart_cpha_e cpha) +{ + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief config usart guard time. + \param[in] handle usart handle to operate. + \param[in] num_of_bits guard time in number of bit periods. + \return error code +*/ +int32_t csi_usart_config_guard_time(usart_handle_t handle, uint32_t num_of_bits) +{ + return ERR_USART(EDRV_UNSUPPORTED); +} + +/** + \brief check if usart is readable(data received). + \param[in] handle usart handle to operate. + \return 1 - a character can be read, 0 if nothing to read ,negative for error code +*/ +int32_t csi_usart_readable(usart_handle_t handle) +{ + USART_NULL_PARAM_CHK(handle); + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + if (addr->LSR & LSR_DATA_READY) { + return 1; + } else { + return 0; + } +} + +/** + \brief check if usart is writable(free for data sending). + \param[in] handle usart handle to operate. + \return 1 - a character can be written, 0 - cannot be written ,negative for error code +*/ +int32_t csi_usart_writable(usart_handle_t handle) +{ + USART_NULL_PARAM_CHK(handle); + dw_usart_priv_t *usart_priv = handle; + dw_usart_reg_t *addr = (dw_usart_reg_t *)(usart_priv->base); + + if (addr->LSR & DW_LSR_TRANS_EMPTY) { + return 1; + } else { + return 0; + } +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/dw_usart.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/dw_usart.h new file mode 100644 index 000000000..04666a23c --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/usart/dw_usart.h @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file dw_usart.h + * @brief header file for usart driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef __DW_USART_H +#define __DW_USART_H + +#include +#include "errno.h" +#include "soc.h" + +#define BAUDRATE_DEFAULT 19200 +#define UART_BUSY_TIMEOUT 1000000 +#define UART_RECEIVE_TIMEOUT 1000 +#define UART_TRANSMIT_TIMEOUT 1000 +#define UART_MAX_FIFO 0x10 +/* UART register bit definitions */ + +#define USR_UART_BUSY 0x01 +#define USR_UART_TFE 0x04 +#define USR_UART_RFNE 0x08 +#define LSR_DATA_READY 0x01 +#define LSR_THR_EMPTY 0x20 +#define IER_RDA_INT_ENABLE 0x01 +#define IER_THRE_INT_ENABLE 0x02 +#define IIR_NO_ISQ_PEND 0x01 +#define IIR_RECV_LINE_ENABLE 0x04 + +#define LCR_SET_DLAB 0x80 /* enable r/w DLR to set the baud rate */ +#define LCR_PARITY_ENABLE 0x08 /* parity enabled */ +#define LCR_PARITY_EVEN 0x10 /* Even parity enabled */ +#define LCR_PARITY_ODD 0xef /* Odd parity enabled */ +#define LCR_WORD_SIZE_5 0xfc /* the data length is 5 bits */ +#define LCR_WORD_SIZE_6 0x01 /* the data length is 6 bits */ +#define LCR_WORD_SIZE_7 0x02 /* the data length is 7 bits */ +#define LCR_WORD_SIZE_8 0x03 /* the data length is 8 bits */ +#define LCR_STOP_BIT1 0xfb /* 1 stop bit */ +#define LCR_STOP_BIT2 0x04 /* 1.5 stop bit */ + +#define DW_LSR_PFE 0x80 +#define DW_LSR_TEMT 0x40 +#define DW_LSR_THRE 0x40 +#define DW_LSR_BI 0x10 +#define DW_LSR_FE 0x08 +#define DW_LSR_PE 0x04 +#define DW_LSR_OE 0x02 +#define DW_LSR_DR 0x01 +#define DW_LSR_TRANS_EMPTY 0x20 + +#define DW_FCR_FIFOE 0x01 +#define DW_FCR_RFIFOR 0x02 +#define DW_FCR_XFIFOR 0x04 +#define DW_FCR_RT_FIFO_SINGLE 0x0 << 6 /* rcvr trigger 1 character in the FIFO */ +#define DW_FCR_RT_FIFO_QUARTER 0x1 << 6 /* rcvr trigger FIFO 1/4 full */ +#define DW_FCR_RT_FIFO_HALF 0x2 << 6 /* rcvr trigger FIFO 1/2 full */ +#define DW_FCR_RT_FIFO_LESSTWO 0x3 << 6 /* rcvr trigger FIFO 2 less than full */ +#define DW_FCR_TET_FIFO_EMPTY 0x0 << 4 /* tx empty trigger FIFO empty */ +#define DW_FCR_TET_FIFO_TWO 0x1 << 4 /* tx empty trigger 2 characters in the FIFO */ +#define DW_FCR_TET_FIFO_QUARTER 0x2 << 4 /* tx empty trigger FIFO 1/4 full */ +#define DW_FCR_TET_FIFO_HALF 0x3 << 4 /* tx empty trigger FIFO 1/2 full*/ + +#define DW_IIR_THR_EMPTY 0x02 /* threshold empty */ +#define DW_IIR_RECV_DATA 0x04 /* received data available */ +#define DW_IIR_RECV_LINE 0x06 /* receiver line status */ +#define DW_IIR_CHAR_TIMEOUT 0x0c /* character timeout */ + +#define DW_MCR_AFCE 0x20 /* Auto Flow Control Enable */ +#define DW_MCR_RTS 0x02 + +typedef struct { + union { + __IM uint32_t RBR; /* Offset: 0x000 (R/ ) Receive buffer register */ + __OM uint32_t THR; /* Offset: 0x000 ( /W) Transmission hold register */ + __IOM uint32_t DLL; /* Offset: 0x000 (R/W) Clock frequency division low section register */ + }; + union { + __IOM uint32_t DLH; /* Offset: 0x004 (R/W) Clock frequency division high section register */ + __IOM uint32_t IER; /* Offset: 0x004 (R/W) Interrupt enable register */ + }; + union { + __IM uint32_t IIR; /* Offset: 0x008 (R/ ) Interrupt indicia register */ + __OM uint32_t FCR; /* Offset: 0x008 ( /W) FIFO control register */ + }; + __IOM uint32_t LCR; /* Offset: 0x00C (R/W) Transmission control register */ + __IOM uint32_t MCR; /* Offset: 0x010 (R/W) Modem control register */ + __IM uint32_t LSR; /* Offset: 0x014 (R/ ) Transmission state register */ + __IM uint32_t MSR; /* Offset: 0x018 (R/ ) Modem state register */ + uint32_t RESERVED1[21]; + __IOM uint32_t FAR; /* Offset: 0x070 (R/W) FIFO accesss register */ + __IM uint32_t TFR; /* Offset: 0x074 (R/ ) transmit FIFO read */ + __OM uint32_t RFW; /* Offset: 0x078 ( /W) receive FIFO write */ + __IM uint32_t USR; /* Offset: 0x07c (R/ ) UART state register */ + __IM uint32_t TFL; /* Offset: 0x080 (R/ ) transmit FIFO level */ + __IM uint32_t RFL; /* Offset: 0x084 (R/ ) receive FIFO level */ + +} dw_usart_reg_t; + +#endif /* __DW_USART_H */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/Kconfig b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/Kconfig new file mode 100644 index 000000000..09cf48781 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/Kconfig @@ -0,0 +1,11 @@ +choice + prompt "select wdt type " + help + select wdt type +config WDT_DW + bool "designware wdt" + help + select the dw wdt driver + +endchoice + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/dw_wdt.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/dw_wdt.c new file mode 100644 index 000000000..f0461aeb2 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/dw_wdt.c @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file dw_wdt.c + * @brief CSI Source File for WDT Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include "drv_wdt.h" +#include "dw_wdt.h" +#include "soc.h" +#include "csi_core.h" + +#define ERR_WDT(errno) (CSI_DRV_ERRNO_WDT_BASE | errno) + +static uint32_t timeout_ms[16] = {4, 7, 13, 26, 52, 105, 210, 419, 839, 1678, 3355, 6711, + 13422, 26844, 53687, 107374 + }; + +#define WDT_NULL_PARAM_CHK(para) \ + do { \ + if (para == NULL) { \ + return ERR_WDT(EDRV_PARAMETER); \ + } \ + } while (0) + +typedef struct { + uint32_t base; + uint32_t irq; + wdt_event_cb_t cb_event; +} dw_wdt_priv_t; + +extern int32_t target_get_wdt_count(void); +extern int32_t target_get_wdt(int32_t idx, uint32_t *base, uint32_t *irq); + +static dw_wdt_priv_t wdt_instance[CONFIG_WDT_NUM]; + +/* Driver Capabilities */ +static const wdt_capabilities_t wdt_capabilities = { + .interrupt = 1, ///< supports interrupt +}; + +static inline void dw_wdt_enable(dw_wdt_reg_t *addr) +{ + uint32_t value = addr->WDT_CR; + value |= 1 << 0; + addr->WDT_CR = value; +} + +static inline void dw_wdt_disable(dw_wdt_reg_t *addr) +{ + uint32_t value = addr->WDT_CR; + value &= ~(1 << 0); + addr->WDT_CR = value; +} + + +void dw_wdt_irqhandler(int32_t idx) +{ + dw_wdt_priv_t *wdt_priv = &wdt_instance[idx]; + dw_wdt_reg_t *addr = (dw_wdt_reg_t *)(wdt_priv->base); + + addr->WDT_EOI; + + if (wdt_priv->cb_event) { + wdt_priv->cb_event(WDT_EVENT_TIMEOUT); + } +} + +/** + \brief get wdt instance count. + \return wdt instance count +*/ +int32_t csi_wdt_get_instance_count(void) +{ + return target_get_wdt_count(); +} + +/** + \brief Initialize WDT Interface. 1. Initializes the resources needed for the WDT interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_wdt_get_instance_count() + \param[in] cb_event Pointer to \ref wdt_event_cb_t + \return pointer to wdt instance +*/ +wdt_handle_t csi_wdt_initialize(int32_t idx, wdt_event_cb_t cb_event) +{ + if (idx < 0 || idx >= CONFIG_WDT_NUM) { + return NULL; + } + + uint32_t base = 0u; + uint32_t irq = 0u; + + int32_t real_idx = target_get_wdt(idx, &base, &irq); + + if (real_idx != idx) { + return NULL; + } + + dw_wdt_priv_t *wdt_priv = &wdt_instance[idx]; + wdt_priv->base = base; + wdt_priv->irq = irq; + + wdt_priv->cb_event = cb_event; + drv_nvic_enable_irq(wdt_priv->irq); + + return (wdt_handle_t)wdt_priv; +} + +/** + \brief De-initialize WDT Interface. stops operation and releases the software resources used by the interface + \param[in] instance wdt instance to operate. + \return \ref execution_status +*/ +int32_t csi_wdt_uninitialize(wdt_handle_t handle) +{ + WDT_NULL_PARAM_CHK(handle); + + dw_wdt_priv_t *wdt_priv = handle; + + wdt_priv->cb_event = NULL; + drv_nvic_disable_irq(wdt_priv->irq); + return 0; +} +/** + \brief Get driver capabilities. + \param[in] wdt instance to operate. + \return \ref wdt_capabilities_t +*/ +wdt_capabilities_t csi_wdt_get_capabilities(wdt_handle_t handle) +{ + return wdt_capabilities; +} + +/** + \brief Set the WDT value. value = (2^t*0xffff * 10^6 /freq)/10^3(t: 0 ~ 15). + \param[in] handle wdt handle to operate. + \param[in] value the timeout value(ms) \ref:timeout_ms[] + \return \ref execution_status +*/ +int32_t csi_wdt_set_timeout(wdt_handle_t handle, uint32_t value) +{ + WDT_NULL_PARAM_CHK(handle); + uint32_t i = 0u; + + for (i = 0; i <= 15 ; i++) { + if (timeout_ms[i] == value) { + break; + } + + if (i == 15) { + return ERR_WDT(EDRV_PARAMETER); + } + } + + dw_wdt_priv_t *wdt_priv = handle; + dw_wdt_reg_t *addr = (dw_wdt_reg_t *)(wdt_priv->base); + + uint32_t config = addr->WDT_CR; + uint32_t en_stat = 0; /*origin wdt enable status*/ + + if ((config & 0x1) != 0) { + en_stat = 1; + } + + config = 0; + addr->WDT_CR = config; + + /*before configuration, must disable wdt first*/ + dw_wdt_disable(addr); + i += i << 4; + addr->WDT_TORR = i; + + if (en_stat == 1) { + dw_wdt_enable(addr); + csi_wdt_restart(handle); + } + + return 0; +} + +/** + \brief Start the WDT. + \param[in] handle wdt handle to operate. + \return \ref execution_status +*/ +int32_t csi_wdt_start(wdt_handle_t handle) +{ + WDT_NULL_PARAM_CHK(handle); + + dw_wdt_priv_t *wdt_priv = handle; + dw_wdt_reg_t *addr = (dw_wdt_reg_t *)(wdt_priv->base); + + dw_wdt_enable(addr); + csi_wdt_restart(handle); + return 0; +} + +/** + \brief Stop the WDT. + \param[in] handle wdt handle to operate. + \return \ref execution_status +*/ +int32_t csi_wdt_stop(wdt_handle_t handle) +{ + WDT_NULL_PARAM_CHK(handle); + + return ERR_WDT(EDRV_UNSUPPORTED); +} + +/** + \brief Restart the WDT. + \param[in] handle wdt handle to operate. + \return \ref execution_status +*/ +int32_t csi_wdt_restart(wdt_handle_t handle) +{ + WDT_NULL_PARAM_CHK(handle); + + dw_wdt_priv_t *wdt_priv = handle; + dw_wdt_reg_t *addr = (dw_wdt_reg_t *)(wdt_priv->base); + + addr->WDT_CRR = DW_WDT_CRR_RESET; + + return 0; +} + +/** + \brief Read the WDT Current value. + \param[in] handle wdt handle to operate. + \param[in] value Pointer to the Value. + \return \ref execution_status +*/ +int32_t csi_wdt_read_current_value(wdt_handle_t handle, uint32_t *value) +{ + WDT_NULL_PARAM_CHK(handle); + + dw_wdt_priv_t *wdt_priv = handle; + dw_wdt_reg_t *addr = (dw_wdt_reg_t *)(wdt_priv->base); + + *value = addr->WDT_CCVR; + return 0; +} + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/dw_wdt.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/dw_wdt.h new file mode 100644 index 000000000..47cd9bea6 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/common/wdt/dw_wdt.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file dw_wdt.h + * @brief header file for wdt driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef __DW_WDT_H +#define __DW_WDT_H + +#include +#include "soc.h" + +#define DW_WDT_CRR_RESET 0x76 +typedef struct { + __IOM uint8_t WDT_CR:5; /* Offset: 0x000 (R/W) WDT control register */ + uint8_t RESERVED0[3]; + __IOM uint8_t WDT_TORR; /* Offset: 0x004 (R/W) WDT timeout range register */ + uint8_t RESERVED1[3]; + __IM uint32_t WDT_CCVR; /* Offset: 0x008 (R/ ) WDT current counter value register */ + __OM uint8_t WDT_CRR:8; /* Offset: 0x00C ( /W) WDT count restart register */ + uint8_t RESERVED2[3]; + __IM uint8_t WDT_STAT:1; /* Offset: 0x010 (R/ ) WDT interrupt status register */ + uint8_t RESERVED3[3]; + __IM uint8_t WDT_EOI:1; /* Offset: 0x014 (R/ ) WDT interrupt clear register */ + uint8_t RESERVED4[3]; +} dw_wdt_reg_t; + +#endif /* __DW_WDT_H */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/csi.mk b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/csi.mk new file mode 100644 index 000000000..68d1a4699 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/csi.mk @@ -0,0 +1,14 @@ +ifeq ($(CONFIG_PLATFORM_PHOBOS), y) +include $(CSI_DIR)/csi_driver/csky/phobos/csi.mk +endif + +ifeq ($(CONFIG_PLATFORM_HOBBIT1_2), y) +include $(CSI_DIR)/csi_driver/csky/hobbit1_2/csi.mk +endif + +ifeq ($(CONFIG_PLATFORM_HOBBIT3), y) +include $(CSI_DIR)/csi_driver/csky/hobbit3/csi.mk +endif + +include $(CSI_DIR)/csi_driver/csky/common/csi.mk + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/Kconfig b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/Kconfig new file mode 100644 index 000000000..e69de29bb diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/csi.mk b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/csi.mk new file mode 100644 index 000000000..4371596fe --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/csi.mk @@ -0,0 +1,5 @@ +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/hobbit1_2/include +TEE_SRC += \ + $(CSI_DIR)/csi_driver/csky/hobbit1_2/devices.c \ + $(CSI_DIR)/csi_driver/csky/hobbit1_2/isr.c \ + $(CSI_DIR)/csi_driver/csky/hobbit1_2/pinmux.c diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/devices.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/devices.c new file mode 100644 index 000000000..fe5969c93 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/devices.c @@ -0,0 +1,829 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file devices.c + * @brief source file for the devices + * @version V1.0 + * @date 24. August 2017 + ******************************************************************************/ +#include "soc.h" +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "pin_name.h" +#include "pinmux.h" + +#define readl(addr) \ + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; }) + +#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b)) + + +#if CONFIG_GPIO +struct { + uint32_t base; + uint32_t irq; + uint32_t pin_num; + port_name_t port; +} +const sg_gpio_config[CONFIG_GPIO_NUM] = { + {CSKY_GPIO0_BASE, GPIOA_IRQn, 28, PORTA}, + {CSKY_GPIO1_BASE, GPIOB_IRQn, 4, PORTB}, +}; + +typedef struct { + pin_t gpio_pin; + uint32_t cfg_idx; //idx of sg_gpio_config[] +} gpio_pin_map_t; +const static gpio_pin_map_t s_gpio_pin_map[] = { + {PA0_TRIG0_ACMP1P_TCK, 0}, + {PA1_TRIG1_ACMP1N_TMS, 0}, + {PA2_TXD0_SPI0MISO, 0}, + {PA3_RXD0_SPI0MOSI, 0}, + {PA4_CTS0_PWM0_SPI0SCK_TRIG0, 0}, + {PA5_RTS0_PWM1_SPI0SSN_TRIG1, 0}, + + {PB0_SCL0_PWM2_I2SMCLK, 1}, + {PB1_SDA0_PWM3_I2SSCK, 1}, + {PB2_SPI0SCK_PWM4_I2SWS, 1}, + {PB3_SPI0MISO_PWM5_I2SSD, 1}, + + {PA6_SPI0MOSI_PWM6_SCL0, 0}, + {PA7_SPI0SSN_PWM7_SDA0, 0}, + {PA8_WKUP_ADC0_ACMP0P, 0}, + {PA9_BOOT_ADC1_PWMFAULT, 0}, + {PA10_ADC2_TXD0, 0}, + {PA11_ACMP0N_ADC3_RXD0, 0}, + {PA12_PWM8_TCK_ADC4, 0}, + {PA13_PWM9_TMS_ADC5, 0}, + {PA14_PWM10_ADC6, 0}, + {PA15_PWM11_ADC7, 0}, + {PA16_RXD1_ADC8, 0}, + {PA17_TXD1_ADC9, 0}, + {PA18_SPI1SSN0_ACMP0O, 0}, + {PA19_SPI1SSN1_ACMP1O, 0}, + {PA20_SPI1SSN2_TRIG0_RXD1, 0}, + {PA21_SPI1SCK_TRIG1_TXD1, 0}, + {PA22_SPI1MISO_PWM0_ADC10, 0}, + {PA23_SPI1MOSI_PWM1_ADC11, 0}, + {PA24_TXD2_I2SMCLK_SPI1SSN0, 0}, + {PA25_RXD2_I2SSCK_SPI1SSN1, 0}, + {PA26_CTS2_I2SWS_ADC12, 0}, + {PA27_RTS2_I2SSD_ADC13, 0} +}; + +int32_t target_gpio_port_init(port_name_t port, uint32_t *base, uint32_t *irq, uint32_t *pin_num) +{ + int i; + + for (i = 0; i < CONFIG_GPIO_NUM; i++) { + if (sg_gpio_config[i].port == port) { + *base = sg_gpio_config[i].base; + *irq = sg_gpio_config[i].irq; + *pin_num = sg_gpio_config[i].pin_num; + return i; + } + } + + return -1; +} +/** + \param[in] instance idx, must not exceed return value of target_get_gpio_count() + \brief get gpio instance. + \return pointer to gpio instance +*/ +int32_t target_gpio_pin_init(pin_t gpio_pin, uint32_t *port_idx) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_gpio_pin_map) / sizeof(gpio_pin_map_t); idx++) { + if (s_gpio_pin_map[idx].gpio_pin == gpio_pin) { + *port_idx = s_gpio_pin_map[idx].cfg_idx; + /*pinmux*/ + pin_mux(s_gpio_pin_map[idx].gpio_pin, 0xff); + if (idx >= 10) { + return idx - 4; + } else if (idx >= 6) { + return idx - 6; + } else { + return idx; + } + } + } + + return -1; +} + +#endif + +#if CONFIG_TIMER +struct { + uint32_t base; + uint32_t irq; +} +const sg_timer_config[CONFIG_TIMER_NUM] = { + {CSKY_TIM0_BASE, TIMA0_IRQn}, + {CSKY_TIM0_BASE + 0x14, TIMA1_IRQn}, + {CSKY_TIM1_BASE, TIMB0_IRQn}, + {CSKY_TIM1_BASE + 0x14, TIMB1_IRQn} + +}; + +int32_t target_get_timer_count(void) +{ + return CONFIG_TIMER_NUM; +} + +int32_t target_get_timer(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_timer_count()) { + return NULL; + } + + *base = sg_timer_config[idx].base; + *irq = sg_timer_config[idx].irq; + return idx; +} + +#endif + +#if CONFIG_PMU +struct { + uint32_t base; + uint32_t irq; +} +const sg_pmu_config[CONFIG_PMU_NUM] = { + {CSKY_CLKGEN_BASE, POWM_IRQn} +}; + +int32_t target_get_pmu(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx > CONFIG_PMU_NUM) { + return -1; + } + *base = sg_pmu_config[idx].base; + *irq = sg_pmu_config[idx].irq; + return idx; +} +#endif + +#if CONFIG_RTC +#undef CSKY_PMU_BASE +#define CSKY_PMU_BASE 0x40002000 +#define BIT1 (0x1) +struct { + uint32_t base; + uint32_t irq; +} +const sg_rtc_config[CONFIG_RTC_NUM] = { + {CSKY_RTC0_BASE, RTC_IRQn}, + {CSKY_RTC1_BASE, RTC1_IRQn} + +}; + +int32_t target_get_rtc_count(void) +{ + return CONFIG_RTC_NUM; +} + +int32_t target_get_rtc(int32_t idx, uint32_t *base, uint32_t *irq) +{ + unsigned int value; + + if (idx >= target_get_rtc_count()) { + return NULL; + } + + value = readl(CSKY_PMU_BASE); + value &= ~BIT1; + writel(value, CSKY_PMU_BASE); + + *base = sg_rtc_config[idx].base; + *irq = sg_rtc_config[idx].irq; + return idx; +} + +#endif + +#if CONFIG_TRNG +struct { + uint32_t base; +} +const sg_trng_config[CONFIG_TRNG_NUM] = { + {CSKY_TRNG_BASE} +}; + +/** + \brief get trng instance count. + \return trng instance count +*/ +int32_t target_get_trng_count(void) +{ + return CONFIG_TRNG_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_trng_count() + \brief get trng instance. + \return pointer to trng instance +*/ +int32_t target_get_trng(int32_t idx, uint32_t *base) +{ + if (idx >= target_get_trng_count()) { + return NULL; + } + + *base = sg_trng_config[idx].base; + return idx; +} + +#endif + +#if CONFIG_CRC +struct { + uint32_t base; +} +const sg_crc_config[CONFIG_CRC_NUM] = { + {CSKY_CRC_BASE} +}; + +/** + \brief get crc instance count. + \return crc instance count +*/ +int32_t target_get_crc_count(void) +{ + return CONFIG_CRC_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_crc_count() + \brief get crc instance. + \return pointer to crc instance +*/ +int32_t target_get_crc(int32_t idx, uint32_t *base) +{ + if (idx >= target_get_crc_count()) { + return NULL; + } + + *base = sg_crc_config[idx].base; + return idx; +} + +#endif + +#if CONFIG_USART +struct { + uint32_t base; + uint32_t irq; +} +const sg_usart_config[CONFIG_USART_NUM] = { + {CSKY_UART0_BASE, UART0_IRQn}, + {CSKY_UART1_BASE, UART1_IRQn}, + {CSKY_UART2_BASE, UART2_IRQn}, +}; +typedef struct { + pin_t tx; + pin_t rx; + pin_t cts; + pin_t rts; + uint16_t cfg_idx; //idx of sg_usart_config[] + uint16_t function; +} usart_pin_map_t; +const static usart_pin_map_t s_usart_pin_map[] = { + { + PA2_TXD0_SPI0MISO, + PA3_RXD0_SPI0MOSI, + -1, + -1, + 0, + 0 + }, + { + PA10_ADC2_TXD0, + PA11_ACMP0N_ADC3_RXD0, + -1, + -1, + 0, + 2 + }, + { + PA17_TXD1_ADC9, + PA16_RXD1_ADC8, + -1, + -1, + 1, + 0 + }, + { + PA21_SPI1SCK_TRIG1_TXD1, + PA20_SPI1SSN2_TRIG0_RXD1, + -1, + -1, + 1, + 2, + }, + { + PA24_TXD2_I2SMCLK_SPI1SSN0, + PA25_RXD2_I2SSCK_SPI1SSN1, + PA26_CTS2_I2SWS_ADC12, + PA27_RTS2_I2SSD_ADC13, + 2, + 0 + }, +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_usart_count() + \brief get usart instance. + \return pointer to usart instance +*/ +int32_t target_usart_init(pin_t tx, pin_t rx, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_usart_pin_map) / sizeof(usart_pin_map_t); idx++) { + if (s_usart_pin_map[idx].tx == tx && s_usart_pin_map[idx].rx == rx) { + *base = sg_usart_config[s_usart_pin_map[idx].cfg_idx].base; + *irq = sg_usart_config[s_usart_pin_map[idx].cfg_idx].irq; + /*pinmux*/ + pin_mux(s_usart_pin_map[idx].tx, s_usart_pin_map[idx].function); + pin_mux(s_usart_pin_map[idx].rx, s_usart_pin_map[idx].function); + return s_usart_pin_map[idx].cfg_idx; + } + } + + return -1; + +} +/** + \brief control usart flow. + \param[in] tx_flow The TX flow pin name + \param[in] rx_flow The RX flow pin name + \param[in] flag 0-disable, 1-enable. + \return 0 if setting ready ,negative for error code +*/ +int32_t target_usart_flowctrl_init(pin_t tx_flow, pin_t rx_flow, uint32_t flag) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_usart_pin_map) / sizeof(usart_pin_map_t); idx++) { + if ((s_usart_pin_map[idx].cts == tx_flow) &&(s_usart_pin_map[idx].rts == rx_flow)) + break; + } + + if (idx >= sizeof(s_usart_pin_map) / sizeof(usart_pin_map_t)) { + return -1; + } + + if ((s_usart_pin_map[idx].cts == tx_flow) && flag) { + pin_mux(s_usart_pin_map[idx].cts, s_usart_pin_map[idx].function); + } else if ((s_usart_pin_map[idx].cts == tx_flow) && (flag == 0)) { + pin_mux(s_usart_pin_map[idx].cts, 0xff); + } else { + return -1; + } + + if ((s_usart_pin_map[idx].rts == rx_flow) && flag) { + pin_mux(s_usart_pin_map[idx].rts, s_usart_pin_map[idx].function); + } else if ((s_usart_pin_map[idx].rts == rx_flow) && (flag == 0)) { + pin_mux(s_usart_pin_map[idx].rts, 0xff); + } else { + return -1; + } + + return 0; +} + +#endif + +#if CONFIG_SPI +struct { + uint32_t base; + uint32_t irq; +} + +const sg_spi_config[CONFIG_SPI_NUM] = { + {CSKY_SPI0_BASE, SPI0_IRQn}, + {CSKY_SPI1_BASE, SPI1_IRQn} +}; +typedef struct { + pin_t mosi; + pin_t miso; + pin_t sclk; + pin_t ssel; + uint32_t cfg_idx; //idx of sg_iic_config[] + uint16_t function; +} spi_pin_map_t; +const static spi_pin_map_t s_spi_pin_map[] = { + { + PA2_TXD0_SPI0MISO, + PA3_RXD0_SPI0MOSI, + PA4_CTS0_PWM0_SPI0SCK_TRIG0, + PA5_RTS0_PWM1_SPI0SSN_TRIG1, + 0, + 2 + }, + { + PB3_SPI0MISO_PWM5_I2SSD, + PA6_SPI0MOSI_PWM6_SCL0, + PB2_SPI0SCK_PWM4_I2SWS, + PA7_SPI0SSN_PWM7_SDA0, + 0, + 0 + }, + { + PA22_SPI1MISO_PWM0_ADC10, + PA23_SPI1MOSI_PWM1_ADC11, + PA21_SPI1SCK_TRIG1_TXD1, + PA18_SPI1SSN0_ACMP0O, + 1, + 0 + } +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_spi_count() + \brief get spi instance. + \return pointer to spi instance +*/ +int32_t target_spi_init(pin_t mosi, pin_t miso, pin_t sclk, pin_t ssel, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_spi_pin_map) / sizeof(spi_pin_map_t); idx++) { + if (s_spi_pin_map[idx].mosi == mosi && s_spi_pin_map[idx].miso == miso + && s_spi_pin_map[idx].sclk == sclk && s_spi_pin_map[idx].ssel == ssel) { + *base = sg_spi_config[s_spi_pin_map[idx].cfg_idx].base; + *irq = sg_spi_config[s_spi_pin_map[idx].cfg_idx].irq; + /*pinmux*/ + pin_mux(s_spi_pin_map[idx].mosi, s_spi_pin_map[idx].function); + pin_mux(s_spi_pin_map[idx].miso, s_spi_pin_map[idx].function); + pin_mux(s_spi_pin_map[idx].sclk, s_spi_pin_map[idx].function); + pin_mux(s_spi_pin_map[idx].ssel, s_spi_pin_map[idx].function); + + return s_spi_pin_map[idx].cfg_idx; + } + } + + return -1; + +} + +#endif + +#if CONFIG_AES +struct { + uint32_t base; + uint32_t irq; +} +const sg_aes_config[CONFIG_AES_NUM] = { + {CSKY_AES_BASE, AES_IRQn} +}; + +/** + \brief get aes instance count. + \return aes instance count +*/ +int32_t target_get_aes_count(void) +{ + return CONFIG_AES_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_aes_count() + \brief get aes instance. + \return pointer to aes instance +*/ +int32_t target_get_aes(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_aes_count()) { + return NULL; + } + + *base = sg_aes_config[idx].base; + *irq = sg_aes_config[idx].irq; + return idx; +} + +#endif + +#if CONFIG_RSA +struct { + uint32_t base; + uint32_t irq; +} +const sg_rsa_config[CONFIG_RSA_NUM] = { + {CSKY_RSA_BASE, RSA_IRQn} +}; + +/** + \brief get rsa instance count. + \return rsa instance count +*/ +int32_t target_get_rsa_count(void) +{ + return CONFIG_RSA_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_rsa_count() + \brief get rsa instance. + \return pointer to rsa instance +*/ +int32_t target_get_rsa(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_rsa_count()) { + return NULL; + } + + *base = sg_rsa_config[idx].base; + *irq = sg_rsa_config[idx].irq; + return idx; +} + +#endif + +#if CONFIG_EFLASH +struct { + uint32_t base; + eflash_info_t info; +} +const sg_eflash_config[CONFIG_EFLASH_NUM] = { + {CSKY_EFLASH_CONTROL_BASE, {0x10000000, 0x1003f800, 0x1fc}} +}; + +/** + \brief get eflash instance count. + \return eflash instance count +*/ +int32_t target_get_eflash_count(void) +{ + return CONFIG_EFLASH_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_eflash_count() + \brief get eflash instance. + \return pointer to eflash instance +*/ +int32_t target_get_eflash(int32_t idx, uint32_t *base, eflash_info_t *info) +{ + if (idx >= target_get_eflash_count()) { + return NULL; + } + + *base = sg_eflash_config[idx].base; + info->start = sg_eflash_config[idx].info.start; + info->end = sg_eflash_config[idx].info.end; + info->sector_count = sg_eflash_config[idx].info.sector_count; + return idx; +} + +#endif + +#if CONFIG_WDT +struct { + uint32_t base; + uint32_t irq; +} +const sg_wdt_config[CONFIG_WDT_NUM] = { + {CSKY_WDT_BASE, WDT_IRQn} +}; + +int32_t target_get_wdt_count(void) +{ + return CONFIG_WDT_NUM; +} + +int32_t target_get_wdt(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_wdt_count()) { + return NULL; + } + + *base = sg_wdt_config[idx].base; + *irq = sg_wdt_config[idx].irq; + return idx; +} +#endif + +#if CONFIG_DMAC +struct { + uint32_t base; + uint32_t irq; +} +const sg_dmac_config[CONFIG_DMAC_NUM] = { + {CSKY_DMAC0_BASE, SEU_DMAC_IRQn}, + {CSKY_DMAC1_BASE, NONSEU_DMAC_IRQn} +}; + +int32_t target_get_dmac_count(void) +{ + return CONFIG_DMAC_NUM; +} + +int32_t target_get_dmac(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_dmac_count()) { + return NULL; + } + + *base = sg_dmac_config[idx].base; + *irq = sg_dmac_config[idx].irq; + return idx; +} +#endif + +#if CONFIG_IIC + + +struct { + uint32_t base; + uint32_t irq; +} +const sg_iic_config[CONFIG_IIC_NUM] = { + {CSKY_I2C0_BASE, I2C0_IRQn}, + {CSKY_I2C1_BASE, I2C1_IRQn} +}; + + +typedef struct { + pin_t scl; + pin_t sda; + uint16_t cfg_idx; //idx of sg_iic_config[] + uint16_t function; +} iic_pin_map_t; +const static iic_pin_map_t s_iic_pin_map[] = { + { + PB0_SCL0_PWM2_I2SMCLK, + PB1_SDA0_PWM3_I2SSCK, + 0, + 0 + }, + { + PA6_SPI0MOSI_PWM6_SCL0, + PA7_SPI0SSN_PWM7_SDA0, + 0, + 2 + }, + { + PC0_SCL1_CTS1_PWM10_ADC14, + PC1_SDA1_RTS1_PWM11_ADC15, + 1, + 0 + } +}; + + +/** + \param[in] instance idx, must not exceed return value of target_get_iic_count() + \brief get iic instance. + \return pointer to iic instance +*/ +int32_t target_iic_init(pin_t scl, pin_t sda, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_iic_pin_map) / sizeof(iic_pin_map_t); idx++) { + if (s_iic_pin_map[idx].scl == scl && s_iic_pin_map[idx].sda == sda) { + *base = sg_iic_config[s_iic_pin_map[idx].cfg_idx].base; + *irq = sg_iic_config[s_iic_pin_map[idx].cfg_idx].irq; + /*pinmux*/ + if (s_iic_pin_map[idx].cfg_idx == 0) { + pin_mux(s_iic_pin_map[idx].scl, s_iic_pin_map[idx].function); + pin_mux(s_iic_pin_map[idx].sda, s_iic_pin_map[idx].function); + } + return s_iic_pin_map[idx].cfg_idx; + } + } + + return -1; +} + +#endif + +#if CONFIG_PWM +struct { + uint32_t base; + uint32_t irq; +} +const sg_pwm_config[CONFIG_PWM_NUM] = { + {CSKY_PWM_BASE, PWM_IRQn}, +}; + +typedef struct { + pin_t pwm_pin; + uint32_t cfg_idx; //idx of sg_pwm_config[] + uint32_t ch_num; + uint16_t function; +} pwm_pin_map_t; +const static pwm_pin_map_t s_pwm_pin_map[] = { + {PA4_CTS0_PWM0_SPI0SCK_TRIG0, 0, 0, 1}, + {PA5_RTS0_PWM1_SPI0SSN_TRIG1, 0, 0, 1}, + {PB0_SCL0_PWM2_I2SMCLK, 0, 1, 1}, + {PB1_SDA0_PWM3_I2SSCK, 0, 1, 1}, + + {PB2_SPI0SCK_PWM4_I2SWS, 0, 2, 1}, + {PB3_SPI0MISO_PWM5_I2SSD, 0, 2, 1}, + {PA6_SPI0MOSI_PWM6_SCL0, 0, 3, 1}, + {PA7_SPI0SSN_PWM7_SDA0, 0, 3, 1}, + + {PA12_PWM8_TCK_ADC4, 0, 4, 0}, + {PA13_PWM9_TMS_ADC5, 0, 4, 0}, + {PA14_PWM10_ADC6, 0, 5, 0}, + {PA15_PWM11_ADC7, 0, 5, 0}, + + {PA22_SPI1MISO_PWM0_ADC10, 0, 0, 1}, + {PA23_SPI1MOSI_PWM1_ADC11, 0, 0, 1}, + {PC0_SCL1_CTS1_PWM10_ADC14, 0, 5, 2}, + {PC1_SDA1_RTS1_PWM11_ADC15, 0, 5, 2} + +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_pwm_count() + \brief get pwm instance. + \return pointer to pwm instance +*/ +int32_t target_pwm_init(pin_t pwm_pin, uint32_t *ch_num, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_pwm_pin_map) / sizeof(pwm_pin_map_t); idx++) { + if (s_pwm_pin_map[idx].pwm_pin == pwm_pin) { + *base = sg_pwm_config[s_pwm_pin_map[idx].cfg_idx].base; + *irq = sg_pwm_config[s_pwm_pin_map[idx].cfg_idx].irq; + *ch_num = s_pwm_pin_map[idx].ch_num; + /*pinmux*/ + pin_mux(s_pwm_pin_map[idx].pwm_pin, s_pwm_pin_map[idx].function); + return s_pwm_pin_map[idx].cfg_idx; + } + } + + return -1; +} + +#endif + +#if CONFIG_SHA +struct { + uint32_t base; + uint32_t irq; +} +const sg_sha_config[CONFIG_SHA_NUM] = { + {CSKY_SHA_BASE, SHA_IRQn} +}; + +/** + \brief get sha instance count. + \return sha instance count +*/ +int32_t target_get_sha_count(void) +{ + return CONFIG_SHA_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_sha_count() + \brief get sha instance. + \return pointer to sha instance +*/ +int32_t target_get_sha(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_sha_count()) { + return NULL; + } + + *base = sg_sha_config[idx].base; + *irq = sg_sha_config[idx].irq; + return idx; +} + +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/ck_sys_freq.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/ck_sys_freq.h new file mode 100644 index 000000000..551ccd3d3 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/ck_sys_freq.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file ck_sys_freq.h + * @brief header file for setting system frequency. + * @version V1.0 + * @date 18. July 2017 + ******************************************************************************/ +#ifndef _CK_SYS_FREQ_H_ +#define _CK_SYS_FREQ_H_ + +#include +#include "soc.h" + +#define PMU_MCLK_SEL (CSKY_CLKGEN_BASE + 0x4) +#define MCLK_REG_VAL 0x8UL + +#define PMU_CLK_STABLE (CSKY_CLKGEN_BASE + 0x18) +#define PMU_PLL_CTRL (CSKY_CLKGEN_BASE + 0x2c) + +#define TRC_ADDR (CSKY_OTP_BASE + 0x20) +#define TRC_REG_VAL 0x1UL + +#define EXTERNAL_CLK_SOURCE 0x8UL +#define EXTERNAL_CLK_16M (EXTERNAL_CLK_SOURCE * 2) +#define EXTERNAL_CLK_24M (EXTERNAL_CLK_SOURCE * 3) +#define EXTERNAL_CLK_32M (EXTERNAL_CLK_SOURCE * 4) +#define EXTERNAL_CLK_40M (EXTERNAL_CLK_SOURCE * 5) +#define EXTERNAL_CLK_48M (EXTERNAL_CLK_SOURCE * 6) + +#define CLK_8M_REG_VAL 0xc0202UL +#define CLK_16M_REG_VAL 0xc0204UL +#define CLK_24M_REG_VAL 0xc0206UL +#define CLK_32M_REG_VAL 0xc0208UL +#define CLK_40M_REG_VAL 0xc020aUL +#define CLK_48M_REG_VAL 0xc020cUL + +typedef enum { + IHS_CLK = 0, //internal high speed clock + EHS_CLK = 1 //external high speed clock +} clk_gen_t; + +typedef enum { + CLK_8M = 0, + CLK_16M = 1, + CLK_24M = 2, + CLK_32M = 3, + CLK_40M = 4, + CLK_48M = 5 +} clk_val_t; + +void ck_set_sys_freq (clk_gen_t source, clk_val_t val); + +#endif /* _CK_SYS_FREQ_H_ */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/pin_name.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/pin_name.h new file mode 100644 index 000000000..6a7b0ba8c --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/pin_name.h @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file pin_name.h + * @brief header file for the pin_name + * @version V1.0 + * @date 23. August 2017 + ******************************************************************************/ +#ifndef _PINNAMES_H +#define _PINNAMES_H + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PA0_TRIG0_ACMP1P_TCK = 0, + PA1_TRIG1_ACMP1N_TMS, + PA2_TXD0_SPI0MISO, + PA3_RXD0_SPI0MOSI, + PA4_CTS0_PWM0_SPI0SCK_TRIG0, + PA5_RTS0_PWM1_SPI0SSN_TRIG1, + + PB0_SCL0_PWM2_I2SMCLK, + PB1_SDA0_PWM3_I2SSCK, + PB2_SPI0SCK_PWM4_I2SWS, + PB3_SPI0MISO_PWM5_I2SSD, + + PA6_SPI0MOSI_PWM6_SCL0, + PA7_SPI0SSN_PWM7_SDA0, + PA8_WKUP_ADC0_ACMP0P, + PA9_BOOT_ADC1_PWMFAULT, + PA10_ADC2_TXD0, + PA11_ACMP0N_ADC3_RXD0, + + PA12_PWM8_TCK_ADC4, + PA13_PWM9_TMS_ADC5, + PA14_PWM10_ADC6, + PA15_PWM11_ADC7, + PA16_RXD1_ADC8, + PA17_TXD1_ADC9, + PA18_SPI1SSN0_ACMP0O, + PA19_SPI1SSN1_ACMP1O, + PA20_SPI1SSN2_TRIG0_RXD1, + PA21_SPI1SCK_TRIG1_TXD1, + PA22_SPI1MISO_PWM0_ADC10, + PA23_SPI1MOSI_PWM1_ADC11, + PA24_TXD2_I2SMCLK_SPI1SSN0, + PA25_RXD2_I2SSCK_SPI1SSN1, + PA26_CTS2_I2SWS_ADC12, + PA27_RTS2_I2SSD_ADC13, + + PC0_SCL1_CTS1_PWM10_ADC14, + PC1_SDA1_RTS1_PWM11_ADC15, + +} +pin_name_t; + +typedef enum { + PORTA = 0, + PORTB = 1, +} port_name_t; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/pinmux.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/pinmux.h new file mode 100644 index 000000000..d937cb34b --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/pinmux.h @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file pinmux.h + * @brief Header file for the pinmux + * @version V1.0 + * @date 23. August 2017 + ******************************************************************************/ +#ifndef HOBBIT1_2_PINMUX_H +#define HOBBIT1_2_PINMUX_H + +#include +#include "pin_name.h" + +void hobbit_ioreuse_initial(void); +int32_t pin_mux(pin_name_t pin, uint16_t function); + +/*IOMUX0L function definition */ + + +/* IOMUX0H function definition */ + +#define PA16_UART1_RX 0x00010000 +#define PA17_UART1_TX 0x00020000 + + +#define PA20_UART1_RX 0x00020000 +#define PA21_UART1_TX 0x00080000 + +//use for spi eth +#define PA3_SPI0MOSI 0x00000080 +#define PA2_SPI0MISO 0x00000020 +#define PA4_SPI0SCK 0x00000200 +#define PA5_SPI0SSN 0x00000800 + +#define PA23_SPI1MOSI 0x00800000 +#define PA22_SPI1MISO 0x00400000 +#define PA21_SPI1SCK 0x00200000 +#define PA18_SPI1SSN0 0x00040000 + + + + +/* IOMUX1L function definition */ + +/* flag as identification */ +#define GPIO_SET_BIT0 0x00000001 +#define GPIO_SET_BIT1 0x00000002 +#define GPIO_SET_BIT2 0x00000004 +#define GPIO_SET_BIT3 0x00000008 +#define GPIO_SET_BIT4 0x00000010 +#define GPIO_SET_BIT5 0x00000020 +#define GPIO_SET_BIT6 0x00000040 +#define GPIO_SET_BIT7 0x00000080 +#define GPIO_SET_BIT8 0x00000100 +#define GPIO_SET_BIT9 0x00000200 +#define GPIO_SET_BIT10 0x00000400 +#define GPIO_SET_BIT11 0x00000800 +#define GPIO_SET_BIT12 0x00001000 +#define GPIO_SET_BIT13 0x00002000 +#define GPIO_SET_BIT14 0x00004000 +#define GPIO_SET_BIT15 0x00008000 +#define GPIO_SET_BIT16 0x00010000 +#define GPIO_SET_BIT17 0x00020000 +#define GPIO_SET_BIT18 0x00040000 +#define GPIO_SET_BIT19 0x00080000 +#define GPIO_SET_BIT20 0x00100000 +#define GPIO_SET_BIT21 0x00200000 +#define GPIO_SET_BIT22 0x00400000 +#define GPIO_SET_BIT23 0x00800000 +#define GPIO_SET_BIT24 0x01000000 +#define GPIO_SET_BIT25 0x02000000 +#define GPIO_SET_BIT26 0x04000000 +#define GPIO_SET_BIT27 0x08000000 +#define GPIO_SET_BIT28 0x10000000 +#define GPIO_SET_BIT29 0x20000000 +#define GPIO_SET_BIT30 0x40000000 +#define GPIO_SET_BIT31 0x80000000 + + + + +/****************************************************************************** + * hobbit1_2 gpio control and gpio reuse function + * selecting regester adddress + ******************************************************************************/ + +#define HOBBIT1_2_GIPO0_PORTCTL_REG 0x50006008 +#define HOBBIT1_2_GIPO1_PORTCTL_REG 0x50009008 +#define HOBBIT1_2_IOMUX0L_REG 0x50006100 +#define HOBBIT1_2_IOMUX0H_REG 0x50006104 +#define HOBBIT1_2_IOMUX1L_REG 0x50006108 + + +/*************basic gpio reuse v1.0******************************************** + * UART1(PA16,PA17) for bootrom + * UART1(PA20,PA21) for console + ******************************************************************************/ +#define GPIO0_REUSE_EN (0x00000000) +#define GPIO0_REUSE_DIS (GPIO_SET_BIT16 | GPIO_SET_BIT17) + +#define GPIO1_REUSE_EN (0x00000000) +#define IOMUX0L_FUNCTION_SEL (0x00000000) +#define IOMUX0H_FUNCTION_SEL (0x00000000) +#define IOMUX1L_FUNCTION_SEL (0x00000000) + +#endif /* HOBBIT_PINMUX_H */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/soc.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/soc.h new file mode 100644 index 000000000..a63d9820e --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/soc.h @@ -0,0 +1,333 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/**************************************************************************//** + * @file soc.h + * @brief CSI Core Peripheral Access Layer Header File for + * CSKYSOC Device Series + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + + +#ifndef SOC_H +#define SOC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SYSTEM_CLOCK +#define SYSTEM_CLOCK (24000000) +#endif + +#ifndef IHS_VALUE +#define IHS_VALUE (8000000) +#endif + +#ifndef EHS_VALUE +#define EHS_VALUE (8000000) +#endif +/* ------------------------- Interrupt Number Definition ------------------------ */ + +typedef enum IRQn +{ + /* ---------------------- CSKYCK801 Specific Interrupt Numbers --------------------- */ + GPIOA_IRQn = 0, /* gpio Interrupt */ + CORET_IRQn = 1, /* core Timer Interrupt */ + TIMA0_IRQn = 2, /* timerA0 Interrupt */ + TIMA1_IRQn = 3, /* timerA1 Interrupt */ + I2S_IRQn = 4, /* i2s Interrupt */ + WDT_IRQn = 5, /* wdt Interrupt */ + UART0_IRQn = 6, /* uart0 Interrupt */ + UART1_IRQn = 7, /* uart1 Interrupt */ + UART2_IRQn = 8, /* uart2 Interrupt */ + I2C0_IRQn = 9, /* i2c0 Interrupt */ + I2C1_IRQn = 10, /* i2c1 Interrupt */ + SPI1_IRQn = 11, /* spi0 Interrupt */ + SPI0_IRQn = 12, /* spi1 Interrupt */ + RTC_IRQn = 13, /* rtc Interrupt */ + EXTWAK_IRQn = 14, /* extwakeup Interrupt */ + ADC_IRQn = 15, /* adc interrupt */ + CMP_IRQn = 16, /* cmp interrupt */ + SEU_DMAC_IRQn = 17, /* seu dmac Interrupt */ + POWM_IRQn = 18, /* powm Interrupt */ + PWM_IRQn = 19, /* pwm Interrupt */ + SYS_RESET_IRQn = 20, /* system reset Interrupt */ + REV_IRQn = 21, /* rev Interrupt */ + NONSEU_DMAC_IRQn = 22, /* nonuseu dmac Interrupt */ + TIMB0_IRQn = 23, /* timerB0 Interrupt */ + TIMB1_IRQn = 24, /* timerB1 Interrupt */ + RTC1_IRQn = 25, /* rtc1 Interrupt */ + AES_IRQn = 26, /* aes Interrupt */ + GPIOB_IRQn = 27, /* trng Interrupt */ + RSA_IRQn = 28, /* rsa Interrupt */ + SHA_IRQn = 29, /* sha Interrupt */ +} +IRQn_Type; + + +/* ================================================================================ */ +/* ================ Processor and Core Peripheral Section ================ */ +/* ================================================================================ */ + +/* -------- Configuration of the CK801 Processor and Core Peripherals ------- */ +#define __CK802_REV 0x0000U /* Core revision r0p0 */ +#define __MGU_PRESENT 0 /* MGU present or not */ +#define __NVIC_PRIO_BITS 2 /* Number of Bits used for Priority Levels */ +#define __Vendor_SysTickConfig 0 /* Set to 1 if different SysTick Config is used */ + +#include "core_ck802.h" /* Processor and core peripherals */ +#include "stdint.h" + +typedef enum { + CKENUM_DMA_UART0_RX, + CKENUM_DMA_UART0_TX, + CKENUM_DMA_UART1_RX, + CKENUM_DMA_UART1_TX, + CKENUM_DMA_ADC_RX, + CKENUM_DMA_ADC_TX, + CKENUM_DMA_SPI1_RX, + CKENUM_DMA_SPI1_TX, + CKENUM_DMA_SPI0_RX, + CKENUM_DMA_SPI0_TX, + CKENUM_DMA_IIC_RX, + CKENUM_DMA_IIC_TX, + CKENUM_DMA_IIC1_RX, + CKENUM_DMA_IIC1_TX, + CKENUM_DMA_IIS_RX, + CKENUM_DMA_IIS_TX, + CKENUM_DMA_MEMORY +} ckenum_dma_device_e; + +/* ================================================================================ */ +/* ================ Device Specific Peripheral Section ================ */ +/* ================================================================================ */ +#if 0 + +/* ================================================================================ */ +/* ============== Universal Asyncronous Receiver / Transmitter (UART) ============= */ +/* ================================================================================ */ +typedef struct { + union { + __IM uint32_t RBR; /* Offset: 0x000 (R/ ) Receive buffer register */ + __OM uint32_t THR; /* Offset: 0x000 ( /W) Transmission hold register */ + __IOM uint32_t DLL; /* Offset: 0x000 (R/W) Clock frequency division low section register */ + }; + union { + __IOM uint32_t DLH; /* Offset: 0x004 (R/W) Clock frequency division high section register */ + __IOM uint32_t IER; /* Offset: 0x004 (R/W) Interrupt enable register */ + }; + __IM uint32_t IIR; /* Offset: 0x008 (R/ ) Interrupt indicia register */ + __IOM uint32_t LCR; /* Offset: 0x00C (R/W) Transmission control register */ + __IOM uint32_t MCR; /* Offset: 0x010 (R/W) Modem control register */ + __IM uint32_t LSR; /* Offset: 0x014 (R/ ) Transmission state register */ + __IM uint32_t MSR; /* Offset: 0x018 (R/ ) Modem state register */ + uint32_t RESERVED1[24]; + __IM uint32_t USR; /* Offset: 0x07c (R/ ) UART state register */ +} CSKY_UART_TypeDef; + + +/* ================================================================================ */ +/* ============== Inter-Integrated Circuit (IIC) ============= */ +/* ================================================================================ */ +typedef struct { + __IOM uint32_t IC_CON; /* Offset: 0x000 (R/W) Receive buffer register */ + __IOM uint32_t IC_TAR; /* Offset: 0x004 (R/W) Transmission hold register */ + __IOM uint32_t IC_SAR; /* Offset: 0x008 (R/W) Clock frequency division low section register */ + __IOM uint32_t IC_HS_MADDR; /* Offset: 0x00c (R/W) Clock frequency division high section register */ + __IOM uint32_t IC_DATA_CMD; /* Offset: 0x010 (R/W) Interrupt enable register */ + __IOM uint32_t IC_SS_SCL_HCNT; /* Offset: 0x014 (R/W) Interrupt indicia register */ + __IOM uint32_t IC_SS_SCL_LCNT; /* Offset: 0x018 (R/W) Transmission control register */ + __IOM uint32_t IC_FS_SCL_HCNT; /* Offset: 0x01c (R/W) Modem control register */ + __IOM uint32_t IC_FS_SCL_LCNT; /* Offset: 0x020 (R/W) Transmission state register */ + __IOM uint32_t IC_HS_SCL_HCNT; /* Offset: 0x024 (R/W) Transmission state register */ + __IOM uint32_t IC_HS_SCL_LCNT; /* Offset: 0x028 (R/W) Transmission state register */ + __IOM uint32_t IC_INTR_STAT; /* Offset: 0x02c (R) Transmission state register */ + __IOM uint32_t IC_INTR_MASK; /* Offset: 0x030 (R/W) Transmission state register */ + __IOM uint32_t IC_RAW_INTR_STAT; /* Offset: 0x034 (R) Transmission state register */ + __IOM uint32_t IC_RX_TL; /* Offset: 0x038 (R/W) Transmission state register */ + __IOM uint32_t IC_TX_TL; /* Offset: 0x03c (R/W) Transmission state register */ + __IOM uint32_t IC_CLR_INTR; /* Offset: 0x040 (R) Transmission state register */ + __IOM uint32_t IC_CLR_RX_UNDER; /* Offset: 0x044 (R) Transmission state register */ + __IOM uint32_t IC_CLR_RX_OVER; /* Offset: 0x048 (R) Transmission state register */ + __IOM uint32_t IC_CLR_TX_OVER; /* Offset: 0x04c (R) Transmission state register */ + __IOM uint32_t IC_CLR_RD_REQ; /* Offset: 0x050 (R) Transmission state register */ + __IOM uint32_t IC_CLR_TX_ABRT; /* Offset: 0x054 (R) Transmission state register */ + __IOM uint32_t IC_CLR_RX_DONE; /* Offset: 0x058 (R) Transmission state register */ + __IOM uint32_t IC_CLR_ACTIVITY; /* Offset: 0x05c (R) Transmission state register */ + __IOM uint32_t IC_CLR_STOP_DET; /* Offset: 0x060 (R) Transmission state register */ + __IOM uint32_t IC_CLR_START_DET; /* Offset: 0x064 (R) Transmission state register */ + __IOM uint32_t IC_CLR_GEN_CALL; /* Offset: 0x068 (R) Transmission state register */ + __IOM uint32_t IC_ENABLE; /* Offset: 0x06c (R/W) Transmission state register */ + __IOM uint32_t IC_STATUS; /* Offset: 0x070 (R) Transmission state register */ + __IOM uint32_t IC_TXFLR; /* Offset: 0x074 (R) Transmission state register */ + __IOM uint32_t IC_RXFLR; /* Offset: 0x078 (R) Transmission state register */ + uint32_t RESERVED; /* Offset: 0x014 (R/ ) Transmission state register */ + __IOM uint32_t IC_TX_ABRT_SOURCE; /* Offset: 0x080 (R/W) Transmission state register */ + __IOM uint32_t IC_SAR1; /* Offset: 0x084 (R/W) Transmission state register */ + __IOM uint32_t IC_DMA_CR; /* Offset: 0x088 (R/W) Transmission state register */ + __IOM uint32_t IC_DMA_TDLR; /* Offset: 0x08c (R/W) Transmission state register */ + __IOM uint32_t IC_DMA_RDLR; /* Offset: 0x090 (R/W) Transmission state register */ + __IOM uint32_t IC_SAR2; /* Offset: 0x094 (R/W) Transmission state register */ + __IOM uint32_t IC_SAR3; /* Offset: 0x098 (R/W) Transmission state register */ + __IOM uint32_t IC_MULTI_SLAVE; /* Offset: 0x09c (R/W) Transmission state register */ + __IOM uint32_t IC_GEN_CALL_EN; /* Offset: 0x0a0 (R/W) Transmission state register */ + +} CSKY_IIC_TypeDef; + + +/* ================================================================================ */ +/* ============== TIMER ============= */ +/* ================================================================================ */ +typedef struct { + __IOM uint32_t TxLoadCount; /* Offset: 0x000 (R/W) Receive buffer register */ + __IOM uint32_t TxCurrentValue; /* Offset: 0x004 (R) Transmission hold register */ + __IOM uint32_t TxControl; /* Offset: 0x008 (R/W) Clock frequency division low section register */ + __IOM uint32_t TxEOI; /* Offset: 0x00c (R) Clock frequency division high section register */ + __IOM uint32_t TxIntStatus; /* Offset: 0x010 (R) Interrupt enable register */ + +} CSKY_TIMER_TypeDef; + +/* ================================================================================ */ +/* ============== TIMER Control ============= */ +/* ================================================================================ */ +typedef struct { + __IOM uint32_t TimersIntStatus; /* Offset: 0x000 (R) Interrupt indicia register */ + __IOM uint32_t TimerEOI; /* Offset: 0x004 (R) Transmission control register */ + __IOM uint32_t TimerRawIntStatus; /* Offset: 0x008 (R) Modem control register */ + +} CSKY_TIMER_Control_TypeDef; + + +/* ================================================================================ */ +/* ============== GPIO ============= */ +/* ================================================================================ */ +typedef struct { + __IOM uint32_t SWPORT_DR; /* Offset: 0x000 (R/W) Interrupt indicia register */ + __IOM uint32_t SWPORT_DDR; /* Offset: 0x004 (R/W) Interrupt indicia register */ + __IOM uint32_t PORT_CTL; /* Offset: 0x008 (R/W) Interrupt indicia register */ +} CKStruct_GPIO, *PCKStruct_GPIO; + +typedef struct { + __IOM uint32_t SHA_CON; /* Offset: 0x000 (R/W) Control register */ + __IOM uint32_t SHA_INTSTATE; /* Offset: 0x004 (R/W) Instatus register */ + __IOM uint32_t SHA_H0L; /* Offset: 0x008 (R/W) H0L register */ + __IOM uint32_t SHA_H1L; /* Offset: 0x00c (R/W) H1L register */ + __IOM uint32_t SHA_H2L; /* Offset: 0x010 (R/W) H2L register */ + __IOM uint32_t SHA_H3L; /* Offset: 0x014 (R/W) H3L register */ + __IOM uint32_t SHA_H4L; /* Offset: 0x018 (R/W) H4L register */ + __IOM uint32_t SHA_H5L; /* Offset: 0x01c (R/W) H5L register */ + __IOM uint32_t SHA_H6L; /* Offset: 0x020 (R/W) H6L register */ + __IOM uint32_t SHA_H7L; /* Offset: 0x024 (R/W) H7L register */ + __IOM uint32_t SHA_H0H; /* Offset: 0x028 (R/W) H0H register */ + __IOM uint32_t SHA_H1H; /* Offset: 0x02c (R/W) H1H register */ + __IOM uint32_t SHA_H2H; /* Offset: 0x030 (R/W) H2H register */ + __IOM uint32_t SHA_H3H; /* Offset: 0x034 (R/W) H3H register */ + __IOM uint32_t SHA_H4H; /* Offset: 0x038 (R/W) H4H register */ + __IOM uint32_t SHA_H5H; /* Offset: 0x03c (R/W) H5H register */ + __IOM uint32_t SHA_H6H; /* Offset: 0x040 (R/W) H6H register */ + __IOM uint32_t SHA_H7H; /* Offset: 0x044 (R/W) H7H register */ + __IOM uint32_t SHA_DATA1; /* Offset: 0x048 (R/W) DATA1 register */ + uint32_t REV[15]; + __IOM uint32_t SHA_DATA2; /* Offset: 0x088 (R/W) DATA2 register */ +} CSKY_SHA_TypeDef; + + +#endif + +#define CONFIG_PMU_NUM 1 +#define CONFIG_CRC_NUM 1 +#define CONFIG_EFLASH_NUM 1 +#define CONFIG_IIC_NUM 2 +#define CONFIG_TRNG_NUM 1 +#define CONFIG_AES_NUM 1 +#define CONFIG_RSA_NUM 1 +#define CONFIG_SHA_NUM 1 +#define CONFIG_SPI_NUM 2 +#define CONFIG_PWM_NUM 6 +#define CONFIG_TIMER_NUM 4 +#define CONFIG_RTC_NUM 2 +#define CONFIG_WDT_NUM 1 +#define CONFIG_DMAC_NUM 2 +#define CONFIG_GPIO_NUM 2 +#define CONFIG_GPIO_PIN_NUM 32 +#define CONFIG_USART_NUM 3 +#define CONFIG_ETH_NUM 2 + +/* ================================================================================ */ +/* ================ Peripheral memory map ================ */ +/* ================================================================================ */ +/* -------------------------- CHIP memory map ------------------------------- */ +#define CSKY_EFLASH_BASE (0x10000000UL) +#define CSKY_SRAM_BASE (0x60000000UL) + +/* AHB */ +#define CSKY_AHB_ARB_BASE (0x40000000UL) +#define CSKY_DMAC0_BASE (0x40001000UL) +#define CSKY_CLKGEN_BASE (0x40002000UL) +#define CSKY_CRC_BASE (0x40003000UL) +#define CSKY_DMAC1_BASE (0x40004000UL) +#define CSKY_OTP_BASE (0x4003F000UL) +#define CSKY_AES_BASE (0x40006000UL) +#define CSKY_SRAM_SASC_BASE (0x40007000UL) +#define CSKY_SHA_BASE (0x40008000UL) +#define CSKY_TRNG_BASE (0x40009000UL) +#define CSKY_RSA_BASE (0x4000a000UL) +#define CSKY_EFLASH_CONTROL_BASE (0x4003f000UL) +#define CSKY_APB0_BRIDGE_BASE (0x50000000UL) +#define CSKY_APB1_BRIDGE_BASE (0x50010000UL) + +/* APB0 */ +#define CSKY_WDT_BASE (0x50001000UL) +#define CSKY_SPI0_BASE (0x50002000UL) +#define CSKY_RTC0_BASE (0x50003000UL) +#define CSKY_UART0_BASE (0x50004000UL) +#define CSKY_UART1_BASE (0x50005000UL) +#define CSKY_GPIO0_BASE (0x50006000UL) +#define CSKY_I2C0_BASE (0x50007000UL) +#define CSKY_I2S_BASE (0x50008000UL) +#define CSKY_GPIO1_BASE (0x50009000UL) +#define CSKY_SIPC_BASE (0x5000a000UL) + +/* APB1 */ +#define CSKY_TIM0_BASE (0x50011000UL) +#define CSKY_SPI1_BASE (0x50012000UL) +#define CSKY_I2C1_BASE (0x50013000UL) +#define CSKY_PWM_BASE (0x50014000UL) +#define CSKY_UART2_BASE (0x50015000UL) +#define CSKY_ADC_CTL_BASE (0x50016000UL) +#define CSKY_CMP_CTL_BASE (0x50017000UL) +#define CSKY_ETB_BASE (0x50018000UL) +#define CSKY_TIM1_BASE (0x50019000UL) +#define CSKY_RTC1_BASE (0x5001a000UL) + +#define SHA_CONTEXT_SIZE 224 + +/* ================================================================================ */ +/* ================ Peripheral declaration ================ */ +/* ================================================================================ */ +#define CSKY_UART1 (( CSKY_UART_TypeDef *) CSKY_UART1_BASE) +#define CSKY_SHA (( CSKY_SHA_TypeDef *) CSKY_SHA_BASE) + +#include + + +#ifdef __cplusplus +} +#endif + +#endif /* SOC_H */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/isr.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/isr.c new file mode 100644 index 000000000..757ede829 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/isr.c @@ -0,0 +1,229 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file isr.c + * @brief source file for the interrupt server route + * @version V1.0 + * @date 25. August 2017 + ******************************************************************************/ +#include +#include "config.h" +#include "soc.h" +#ifndef CONFIG_KERNEL_NONE +#include +#endif + +extern void dw_usart_irqhandler(int32_t idx); +extern void dw_timer_irqhandler(int32_t idx); +extern void dw_gpio_irqhandler(int32_t idx); +extern void dw_iic_irqhandler(int32_t idx); +extern void ck_rtc_irqhandler(int32_t idx); +extern void dw_spi_irqhandler(int32_t idx); +extern void dw_wdt_irqhandler(int32_t idx); +extern void ck_dma_irqhandler(int32_t idx); +extern void ck_aes_irqhandler(int32_t idx); +extern void ck_sha_irqhandler(int32_t idx); +extern void xPortSysTickHandler( void ); + +#define readl(addr) \ + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; }) + +#define ATTRIBUTE_ISR + +#ifndef CONFIG_KERNEL_NONE +#define CSI_INTRPT_ENTER() csi_kernel_intrpt_enter() +#define CSI_INTRPT_EXIT() csi_kernel_intrpt_exit() +#else +#define CSI_INTRPT_ENTER() +#define CSI_INTRPT_EXIT() +#endif + + + +ATTRIBUTE_ISR void CORET_IRQHandler(void) +{ + readl(0xE000E010); + + xPortSysTickHandler(); +} + +#if defined(CONFIG_USART) +ATTRIBUTE_ISR void USART0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USART1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(1); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USART2_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(2); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USART3_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(3); + CSI_INTRPT_EXIT(); +} + +#endif + +#if defined(CONFIG_TIMER) +ATTRIBUTE_ISR void TIMA0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void TIMA1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(1); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void TIMB0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(2); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void TIMB1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(3); + CSI_INTRPT_EXIT(); +} + +#endif + +#if defined(CONFIG_GPIO) + +ATTRIBUTE_ISR void GPIO0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_gpio_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void GPIO1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_gpio_irqhandler(1); + CSI_INTRPT_EXIT(); +} + +#endif + +#if defined(CONFIG_IIC) +ATTRIBUTE_ISR void I2C0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_iic_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void I2C1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_iic_irqhandler(1); + CSI_INTRPT_EXIT(); +} +#endif + +#if defined(CONFIG_RTC) + +ATTRIBUTE_ISR void RTC_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_rtc_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void RTC1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_rtc_irqhandler(1); + CSI_INTRPT_EXIT(); +} +#endif + +#if defined(CONFIG_AES) + +ATTRIBUTE_ISR void AES_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_aes_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +#endif + +#if defined(CONFIG_TRNG) +ATTRIBUTE_ISR void TRNG_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + + CSI_INTRPT_EXIT(); +} +#endif + +#if defined(CONFIG_RSA) +ATTRIBUTE_ISR void RSA_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + + CSI_INTRPT_EXIT(); +} +#endif + +#if defined(CONFIG_SPI) && defined(CONFIG_GPIO) +ATTRIBUTE_ISR void SPI0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_spi_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void SPI1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_spi_irqhandler(1); + CSI_INTRPT_EXIT(); +} +#endif + +#if defined(CONFIG_WDT) +ATTRIBUTE_ISR void WDT_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_wdt_irqhandler(0); + CSI_INTRPT_EXIT(); +} +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/pinmux.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/pinmux.c new file mode 100644 index 000000000..e488cf4eb --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/pinmux.c @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file pinmux.c + * @brief source file for the pinmux + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include "pinmux.h" +#include "pin_name.h" + +#define readl(addr) \ + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; }) + +#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b)) + +/******************************************************************************* + * function: hobbit_ioreuse_inital + * + * description: + * initial hobbit_pinmux + *******************************************************************************/ + +void hobbit_ioreuse_initial(void) +{ + unsigned int value; + + value = readl(HOBBIT1_2_GIPO0_PORTCTL_REG); + value &= ~(GPIO0_REUSE_DIS); + writel(value, HOBBIT1_2_GIPO0_PORTCTL_REG); +} + +int32_t pin_mux(pin_name_t pin, uint16_t function) +{ + unsigned int val = 0; + unsigned int reg_val = 0; + + uint8_t offset; + + if (function > 3) { + if (pin <= PB3_SPI0MISO_PWM5_I2SSD) { + if (pin <= PA5_RTS0_PWM1_SPI0SSN_TRIG1) { + offset = pin; + /* gpio data source select */ + val = readl(HOBBIT1_2_GIPO0_PORTCTL_REG); + val &= ~(1 << offset); + writel(val, HOBBIT1_2_GIPO0_PORTCTL_REG); + return 0; + } else if (pin >= PB0_SCL0_PWM2_I2SMCLK) { + offset = pin - 6; + /* gpio data source select */ + val = readl(HOBBIT1_2_GIPO1_PORTCTL_REG); + val &= ~(1 << offset); + writel(val, HOBBIT1_2_GIPO1_PORTCTL_REG); + return 0; + } + } + if ((pin >= PA6_SPI0MOSI_PWM6_SCL0) && (pin <= PA27_RTS2_I2SSD_ADC13)) { + offset = pin - 4; + /* gpio data source select */ + val = readl(HOBBIT1_2_GIPO0_PORTCTL_REG); + val &= ~(1 << offset); + writel(val, HOBBIT1_2_GIPO0_PORTCTL_REG); + return 0; + } + return -1; + } + + if ((pin >= PA6_SPI0MOSI_PWM6_SCL0) && (pin <= PA27_RTS2_I2SSD_ADC13)) { + offset = pin - 4; + + /* gpio data source select */ + val = readl(HOBBIT1_2_GIPO0_PORTCTL_REG); + val |= (1 << offset); + writel(val, HOBBIT1_2_GIPO0_PORTCTL_REG); + + if (pin <= PA11_ACMP0N_ADC3_RXD0) { + offset = pin; + reg_val = (0x3 << (offset * 2)); + /* reuse function select */ + val = readl(HOBBIT1_2_IOMUX0L_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, HOBBIT1_2_IOMUX0L_REG); + return 0; + } else { + offset = pin - 16; + reg_val = (0x3 << (offset * 2)); + /* reuse function select */ + val = readl(HOBBIT1_2_IOMUX0H_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, HOBBIT1_2_IOMUX0H_REG); + return 0; + } + } + + if ((pin >= PA0_TRIG0_ACMP1P_TCK) && (pin <= PB3_SPI0MISO_PWM5_I2SSD)) { + if (pin >= PB0_SCL0_PWM2_I2SMCLK) { + offset = pin - 6; + val = readl(HOBBIT1_2_GIPO1_PORTCTL_REG); + val |= (1 << offset); + writel(val, HOBBIT1_2_GIPO1_PORTCTL_REG); + + offset = pin; + reg_val = (0x3 << (offset * 2)); + /* reuse function select */ + val = readl(HOBBIT1_2_IOMUX0L_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, HOBBIT1_2_IOMUX0L_REG); + return 0; + } + + if (pin <= PA5_RTS0_PWM1_SPI0SSN_TRIG1) { + offset = pin; + /* gpio data source select */ + val = readl(HOBBIT1_2_GIPO0_PORTCTL_REG); + val |= (1 << offset); + writel(val, HOBBIT1_2_GIPO0_PORTCTL_REG); + + reg_val = (0x3 << (offset * 2)); + /* reuse function select */ + val = readl(HOBBIT1_2_IOMUX0L_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, HOBBIT1_2_IOMUX0L_REG); + return 0; + } + } + + if (pin > PA27_RTS2_I2SSD_ADC13) { + offset = pin - PC0_SCL1_CTS1_PWM10_ADC14; + reg_val = (0x3 << (offset *2)); + val = readl(HOBBIT1_2_IOMUX1L_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, HOBBIT1_2_IOMUX1L_REG); + } + + return -1; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/Kconfig b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/Kconfig new file mode 100644 index 000000000..e69de29bb diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/csi.mk b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/csi.mk new file mode 100644 index 000000000..55c64f7c1 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/csi.mk @@ -0,0 +1,5 @@ +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/hobbit3/include +TEE_SRC += \ + $(CSI_DIR)/csi_driver/csky/hobbit3/devices.c \ + $(CSI_DIR)/csi_driver/csky/hobbit3/isr.c \ + $(CSI_DIR)/csi_driver/csky/hobbit3/pinmux.c diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/devices.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/devices.c new file mode 100644 index 000000000..a2b303513 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/devices.c @@ -0,0 +1,804 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file devices.c + * @brief source file for the devices + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "pin_name.h" +#include "pinmux.h" + +//typedef int32_t int32_t; + +#define readl(addr) \ + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; }) + +#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b)) + +#if 0 +struct { + uint32_t base; + uint32_t irq; +} +const sg_usi_config[CONFIG_USI_NUM] = { + {CSKY_USI0_BASE, USI0_IRQn}, + {CSKY_USI1_BASE, USI1_IRQn}, +}; +typedef struct { + int32_t sclk; + int32_t sd0; + int32_t sd1; + int32_t nss; + uint16_t cfg_idx; //idx of sg_usi_config[] + uint16_t function; +} usi_pin_map_t; +const static usi_pin_map_t s_usi_pin_map[] = { + { + PA10_UART0CTS_USI0SCLK_SPU4_I2C0SCL, + PA11_UART0RTS_USI0SD0_SPU5_I2C0SDA, + PA12_XX_USI0SD1_XX_UART2RX, + PA13_XX_USI0NSS_XX_UART2TX, + 0, + 1 + }, + { + PA16_SPI0CS0_PWMTRIG0_XX_USI1SCLK, + PA17_SPI0MOSI_PWMTRIG1_XX_USI1SD0, + PA18_SPI0MISO_XX_SPU6_USI1SD1, + PA19_SPI0SCK_FAULT_SPU7_USI1NSS, + 1, + 3 + }, +}; + +#endif + +struct { + uint32_t base; + uint32_t irq; +} +const static sg_usart_config[CONFIG_USART_NUM] = { + {CSKY_UART0_BASE, UART0_IRQn}, + {CSKY_UART1_BASE, UART1_IRQn}, + {CSKY_UART2_BASE, UART2_IRQn}, + {CSKY_UART3_BASE, UART3_IRQn} +}; +typedef struct { + int32_t tx; + int32_t rx; +#if 0 + int32_t cts; + int32_t rts; +#endif + uint16_t cfg_idx; //idx of sg_usart_config[] + uint16_t function; +} usart_pin_map_t; +const static usart_pin_map_t s_usart_pin_map[] = { + { + PA8_UART0TX_XX_SPU2_SIROUT0, + PA9_UART0RX_XX_SPU3_SIRIN0, + 0, + 0 + }, + { + PA21_UART1TX_PWM1_SPU9_SIROUT1, + PA20_UART1RX_PWM0_SPU8_SIRIN1, + 1, + 0 + }, + { + PA0_I2C0SCL_SPI1CS1_SPU0_UART1TX, + PA1_I2C0SDA_SPI1CS2_SPU1_UART1RX, + 1, + 4, + }, + { + PB0_UART2TX_XX_XX_SIROUT2, + PB1_UART2RX_XX_XX_SIRIN2, + 2, + 0 + }, + { + PB13_UART3TX_SPI1MISO_SPU29_SIROUT3, + PB12_UART3RX_SPI1CS0_SPU28_SIRIN3, + 3, + 0 + } +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_usart_count() + \brief get usart instance. + \return pointer to usart instance +*/ + +int32_t target_usart_init(pin_t tx, pin_t rx, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_usart_pin_map) / sizeof(usart_pin_map_t); idx++) { + if (s_usart_pin_map[idx].tx == tx && s_usart_pin_map[idx].rx == rx) { + *base = sg_usart_config[s_usart_pin_map[idx].cfg_idx].base; + *irq = sg_usart_config[s_usart_pin_map[idx].cfg_idx].irq; + /*pinmux*/ + pin_mux(s_usart_pin_map[idx].tx, s_usart_pin_map[idx].function); + pin_mux(s_usart_pin_map[idx].rx, s_usart_pin_map[idx].function); + return s_usart_pin_map[idx].cfg_idx; + } + } + return -1; +} + +/** + \brief control usart flow. + \param[in] tx_flow The TX flow pin name + \param[in] rx_flow The RX flow pin name + \param[in] flag 0-disable, 1-enable. + \return 0 if setting ready ,negative for error code +*/ +int32_t target_usart_flowctrl_init(int32_t tx_flow, int32_t rx_flow, uint32_t flag) +{ +#if 0 + uint32_t idx; + + for (idx = 0; idx < sizeof(s_usart_pin_map) / sizeof(usart_pin_map_t); idx++) { + if ((s_usart_pin_map[idx].cts == tx_flow) &&(s_usart_pin_map[idx].rts == rx_flow)) + break; + } + + if (idx >= sizeof(s_usart_pin_map) / sizeof(usart_pin_map_t)) { + return -1; + } + + if ((s_usart_pin_map[idx].cts == tx_flow) && flag) { + pin_mux(s_usart_pin_map[idx].cts, s_usart_pin_map[idx].function); + } else if ((s_usart_pin_map[idx].cts == tx_flow) && (flag == 0)) { + pin_mux(s_usart_pin_map[idx].cts, 0xff); + } else { + return -1; + } + + if ((s_usart_pin_map[idx].rts == rx_flow) && flag) { + pin_mux(s_usart_pin_map[idx].rts, s_usart_pin_map[idx].function); + } else if ((s_usart_pin_map[idx].rts == rx_flow) && (flag == 0)) { + pin_mux(s_usart_pin_map[idx].rts, 0xff); + } else { + return -1; + } + return 0; +#endif + return 0; +} + + + +struct { + uint32_t base; + uint32_t irq; + uint32_t pin_num; + port_name_t port; +} +const sg_gpio_config[CONFIG_GPIO_NUM] = { + {CSKY_GPIO0_BASE, GPIOA_IRQn, 32, PORTA}, + {CSKY_GPIO1_BASE, GPIOB_IRQn, 16, PORTB} +}; + +typedef struct { + int32_t gpio_pin; + uint32_t cfg_idx; //idx of sg_gpio_config[] +} gpio_pin_map_t; +const static gpio_pin_map_t s_gpio_pin_map[] = { + {PA0_I2C0SCL_SPI1CS1_SPU0_UART1TX ,0}, + {PA1_I2C0SDA_SPI1CS2_SPU1_UART1RX,0}, + {PA2_QSPI0CLK_XX_XX_XX,0}, + {PA3_QSPI0MISO_XX_XX_XX,0}, + {PA4_QSPI0MOSI_XX_XX_XX,0}, + {PA5_QSPI0HOLD_XX_XX_XX,0}, + {PA6_QSPI0WP_XX_XX_XX,0}, + {PA7_QSPI0CS0_XX_XX_XX,0}, + {PA8_UART0TX_XX_SPU2_SIROUT0,0}, + {PA9_UART0RX_XX_SPU3_SIRIN0,0}, + {PA10_UART0CTS_USI0SCLK_SPU4_I2C0SCL,0}, + {PA11_UART0RTS_USI0SD0_SPU5_I2C0SDA,0}, + {PA12_XX_USI0SD1_XX_UART2RX,0}, + {PA13_XX_USI0NSS_XX_UART2TX,0}, + {PA14_SPI0CS2_FAULT_I2C1SDA_XX,0}, + {PA15_SPI0CS1_XX_I2C1SCL_XX,0}, + {PA16_SPI0CS0_PWMTRIG0_XX_USI1SCLK,0}, + {PA17_SPI0MOSI_PWMTRIG1_XX_USI1SD0,0}, + {PA18_SPI0MISO_XX_SPU6_USI1SD1,0}, + {PA19_SPI0SCK_FAULT_SPU7_USI1NSS,0}, + {PA20_UART1RX_PWM0_SPU8_SIRIN1,0}, + {PA21_UART1TX_PWM1_SPU9_SIROUT1,0}, + {PA22_UART1CTS_PWM2_SPU10_XX,0}, + {PA23_UART1RTS_PWM3_SPU11_XX,0}, + {PA24_USI1NSS_PWM4_SPU12_XX,0}, + {PA25_USI1SD1_PWM5_SPU13_XX,0}, + {PA26_USI1SD0_PWM6_SPU14_XX,0}, + {PA27_USI1SCLK_PWM7_SPU15_XX,0}, + {PA28_I2C1SCL_PWM8_SPU16_XX,0}, + {PA29_I2C1SDA_PWM9_SPU17_XX,0}, + {PA30_I2C0SDA_PWM10_SPU18_XX,0}, + {PA31_I2C0SCL_PWM11_SPU19_XX,0}, + {PB0_UART2TX_XX_XX_SIROUT2,1}, + {PB1_UART2RX_XX_XX_SIRIN2,1}, + {PB2_UART2RTS_XX_XX_XX,1}, + {PB3_UART2CTS_XX_XX_XX,1}, + {PB4_XX_XX_SPU20_UART3TX,1}, + {PB5_QSPI1CS1_XX_SPU21_UART3RX,1}, + {PB6_QSPI1WP_XX_SPU22_XX,1}, + {PB7_QSPI1HOLD_XX_SPU23_XX,1}, + {PB8_QSPI1CS0_PWMTRIG0_SPU24_XX,1}, + {PB9_QSPI1MOSI_PWMTRIG1_SPU25_XX,1}, + {PB10_QSPI1MISO_XX_SPU26_I2C1SDA,1}, + {PB11_QSPI1CLK_XX_SPU27_I2C1SCL,1}, + {PB12_UART3RX_SPI1CS0_SPU28_SIRIN3,1}, + {PB13_UART3TX_SPI1MISO_SPU29_SIROUT3,1}, + {PB14_UART3RTS_SPI1MOSI_SPU30_XX,1}, + {PB15_UART3CTS_SPI1SCK_SPU31_XX,1} +}; + +int32_t target_gpio_port_init(port_name_t port, uint32_t *base, uint32_t *irq, uint32_t *pin_num) +{ + int i; + + for (i = 0; i < CONFIG_GPIO_NUM; i++) { + if (sg_gpio_config[i].port == port) { + *base = sg_gpio_config[i].base; + *irq = sg_gpio_config[i].irq; + *pin_num = sg_gpio_config[i].pin_num; + return i; + } + } + + return -1; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_gpio_count() + \brief get gpio instance. + \return pointer to gpio instance +*/ +int32_t target_gpio_pin_init(int32_t gpio_pin, uint32_t *port_idx) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_gpio_pin_map) / sizeof(gpio_pin_map_t); idx++) { + if (s_gpio_pin_map[idx].gpio_pin == gpio_pin) { + *port_idx = s_gpio_pin_map[idx].cfg_idx; + /*pinmux*/ + pin_mux(s_gpio_pin_map[idx].gpio_pin, 0xff); + return idx; + } + } + + return -1; +} + +struct { + uint32_t base; + uint32_t irq; +} +const sg_timer_config[CONFIG_TIMER_NUM] = { + {CSKY_TIM0_BASE, TIMA0_IRQn}, + {CSKY_TIM0_BASE + 0x14, TIMA1_IRQn}, + {CSKY_TIM1_BASE, TIMB0_IRQn}, + {CSKY_TIM1_BASE + 0x14, TIMB1_IRQn}, + {CSKY_TIM2_BASE, TIM34567_IRQn}, + {CSKY_TIM2_BASE + 0x14, TIM34567_IRQn}, + {CSKY_TIM3_BASE, TIM34567_IRQn}, + {CSKY_TIM3_BASE + 0x14, TIM34567_IRQn}, + {CSKY_TIM4_BASE, TIM34567_IRQn}, + {CSKY_TIM4_BASE + 0x14, TIM34567_IRQn}, + {CSKY_TIM5_BASE, TIM34567_IRQn}, + {CSKY_TIM5_BASE + 0x14, TIM34567_IRQn}, + {CSKY_TIM6_BASE, TIM34567_IRQn}, + {CSKY_TIM6_BASE + 0x14, TIM34567_IRQn}, +}; + +int32_t target_get_timer_count(void) +{ + return CONFIG_TIMER_NUM; +} + +int32_t target_get_timer(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_timer_count()) { + return NULL; + } + + *base = sg_timer_config[idx].base; + *irq = sg_timer_config[idx].irq; + return idx; +} + +struct { + uint32_t base; + uint32_t irq; +} +const sg_sha_config[CONFIG_SHA_NUM] = { + {CSKY_SHA_BASE, SHA_IRQn} +}; + +/** + \brief get sha instance count. + \return sha instance count +*/ +int32_t target_get_sha_count(void) +{ + return CONFIG_SHA_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_sha_count() + \brief get sha instance. + \return pointer to sha instance +*/ +int32_t target_get_sha(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_sha_count()) { + return NULL; + } + + *base = sg_sha_config[idx].base; + *irq = sg_sha_config[idx].irq; + return idx; +} + +struct { + uint32_t base; + uint32_t irq; +} +const sg_rsa_config[CONFIG_RSA_NUM] = { + {CSKY_RSA_BASE, RSA_IRQn} +}; + +/** + \brief get rsa instance count. + \return rsa instance count +*/ +int32_t target_get_rsa_count(void) +{ + return CONFIG_RSA_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_rsa_count() + \brief get rsa instance. + \return pointer to rsa instance +*/ +int32_t target_get_rsa(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_rsa_count()) { + return NULL; + } + + *base = sg_rsa_config[idx].base; + *irq = sg_rsa_config[idx].irq; + return idx; +} + +struct { + uint32_t base; + uint32_t irq; +} +const sg_aes_config[CONFIG_AES_NUM] = { + {CSKY_AES_BASE, AES_IRQn} +}; + +/** + \brief get aes instance count. + \return aes instance count +*/ +int32_t target_get_aes_count(void) +{ + return CONFIG_AES_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_aes_count() + \brief get aes instance. + \return pointer to aes instance +*/ +int32_t target_get_aes(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_aes_count()) { + return NULL; + } + + *base = sg_aes_config[idx].base; + *irq = sg_aes_config[idx].irq; + return idx; +} + +struct { + uint32_t base; + uint32_t irq; +} +const sg_trng_config[CONFIG_TRNG_NUM] = { + {CSKY_TRNG_BASE, TRNG_IRQn} +}; + +/** + \param[in] instance idx + \brief get trng instance. + \return pointer to trng instance +*/ +int32_t target_get_trng(int32_t idx, uint32_t *base) +{ + *base = sg_trng_config[idx].base; + + return idx; +} + +struct { + uint32_t base; +} +const sg_crc_config[CONFIG_CRC_NUM] = { + {CSKY_CRC_BASE} +}; + +/** + \param[in] instance idx + \brief get crc instance. + \return pointer to crc instance +*/ +int32_t target_get_crc(int32_t idx, uint32_t *base) +{ + *base = sg_crc_config[idx].base; + return idx; +} + + +struct { + uint32_t base; + uint32_t irq; +} +const sg_iic_config[CONFIG_IIC_NUM] = { + {CSKY_I2C0_BASE, I2C0_IRQn}, + {CSKY_I2C1_BASE, I2C1_IRQn} +}; + +typedef struct { + int32_t scl; + int32_t sda; + uint16_t cfg_idx; //idx of sg_iic_config[] + uint16_t function; +} iic_pin_map_t; +const static iic_pin_map_t s_iic_pin_map[] = { + { + PA31_I2C0SCL_PWM11_SPU19_XX, + PA30_I2C0SDA_PWM10_SPU18_XX, + 0, + 0 + }, + { + PA28_I2C1SCL_PWM8_SPU16_XX, + PA29_I2C1SDA_PWM9_SPU17_XX, + 1, + 0 + } +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_iic_count() + \brief get iic instance. + \return pointer to iic instance +*/ +int32_t target_iic_init(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= sizeof(s_iic_pin_map) / sizeof(iic_pin_map_t)) { + return -1; + } + + *base = sg_iic_config[s_iic_pin_map[idx].cfg_idx].base; + *irq = sg_iic_config[s_iic_pin_map[idx].cfg_idx].irq; + /*pinmux*/ + pin_mux(s_iic_pin_map[idx].scl, s_iic_pin_map[idx].function); + pin_mux(s_iic_pin_map[idx].sda, s_iic_pin_map[idx].function); + return s_iic_pin_map[idx].cfg_idx; +} + +#define BIT1 (0x1) +struct { + uint32_t base; + uint32_t irq; +} +const sg_rtc_config[CONFIG_RTC_NUM] = { + {CSKY_RTC0_BASE, RTC_IRQn}, + +}; + +int32_t target_get_rtc_count(void) +{ + return CONFIG_RTC_NUM; +} + +int32_t target_get_rtc(int32_t idx, uint32_t *base, uint32_t *irq) +{ + unsigned int value; + + if (idx >= target_get_rtc_count()) { + return NULL; + } + + value = readl(CSKY_PMU_BASE); + value &= ~BIT1; + writel(value, CSKY_PMU_BASE); + + *base = sg_rtc_config[idx].base; + *irq = sg_rtc_config[idx].irq; + return idx; +} + +struct { + uint32_t base; + uint32_t irq; +} + +const sg_spi_config[CONFIG_SPI_NUM] = { + {CSKY_SPI0_BASE, SPI0_IRQn}, + {CSKY_SPI1_BASE, SPI1_IRQn} +}; +typedef struct { + int32_t mosi; + int32_t miso; + int32_t sclk; + int32_t ssel; + uint32_t cfg_idx; //idx of sg_iic_config[] + uint16_t function; +} spi_pin_map_t; +const static spi_pin_map_t s_spi_pin_map[] = { + { + PA18_SPI0MISO_XX_SPU6_USI1SD1, + PA17_SPI0MOSI_PWMTRIG1_XX_USI1SD0, + PA19_SPI0SCK_FAULT_SPU7_USI1NSS, + PA16_SPI0CS0_PWMTRIG0_XX_USI1SCLK, + 0, + 0 + }, + { + PB13_UART3TX_SPI1MISO_SPU29_SIROUT3, + PB14_UART3RTS_SPI1MOSI_SPU30_XX, + PB15_UART3CTS_SPI1SCK_SPU31_XX, + PB12_UART3RX_SPI1CS0_SPU28_SIRIN3, + 1, + 1 + } +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_spi_count() + \brief get spi instance. + \return pointer to spi instance +*/ +int32_t target_spi_init(int32_t idx, uint32_t *base, uint32_t *irq, uint32_t *ssel) +{ + if (idx >= sizeof(s_spi_pin_map) / sizeof(spi_pin_map_t)) { + return -1; + } + + *base = sg_spi_config[s_spi_pin_map[idx].cfg_idx].base; + *irq = sg_spi_config[s_spi_pin_map[idx].cfg_idx].irq; + *ssel = s_spi_pin_map[idx].ssel; + /*pinmux*/ + pin_mux(s_spi_pin_map[idx].mosi, s_spi_pin_map[idx].function); + pin_mux(s_spi_pin_map[idx].miso, s_spi_pin_map[idx].function); + pin_mux(s_spi_pin_map[idx].sclk, s_spi_pin_map[idx].function); + pin_mux(s_spi_pin_map[idx].ssel, s_spi_pin_map[idx].function); + + return s_spi_pin_map[idx].cfg_idx; + +} + +struct { + uint32_t base; + uint32_t irq; +} +const sg_dmac_config[CONFIG_DMAC_NUM] = { + {CSKY_DMAC0_BASE, DMAC_IRQn}, +}; + +int32_t target_get_dmac_count(void) +{ + return CONFIG_DMAC_NUM; +} + +int32_t target_get_dmac(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_dmac_count()) { + return NULL; + } + + *base = sg_dmac_config[idx].base; + *irq = sg_dmac_config[idx].irq; + return idx; +} + +struct { + uint32_t base; + uint32_t irq; +} +const sg_pwm_config[CONFIG_PWM_NUM] = { + {CSKY_PWM_BASE, PWM_IRQn}, +}; + +typedef struct { + int32_t pwm_pin; + uint32_t cfg_idx; //idx of sg_pwm_config[] + uint32_t ch_num; + uint16_t function; +} pwm_pin_map_t; +const static pwm_pin_map_t s_pwm_pin_map[] = { + {PA20_UART1RX_PWM0_SPU8_SIRIN1, 0, 0, 1}, + {PA21_UART1TX_PWM1_SPU9_SIROUT1, 0, 1, 1}, + {PA22_UART1CTS_PWM2_SPU10_XX, 0, 2, 1}, + {PA23_UART1RTS_PWM3_SPU11_XX, 0, 3, 1}, + {PA24_USI1NSS_PWM4_SPU12_XX, 0, 4, 1}, + {PA25_USI1SD1_PWM5_SPU13_XX, 0, 5, 1}, + {PA26_USI1SD0_PWM6_SPU14_XX, 0, 6, 1}, + {PA27_USI1SCLK_PWM7_SPU15_XX, 0, 7, 1}, + {PA28_I2C1SCL_PWM8_SPU16_XX, 0, 8, 1}, + {PA29_I2C1SDA_PWM9_SPU17_XX, 0, 9, 1}, + {PA30_I2C0SDA_PWM10_SPU18_XX, 0, 10, 1}, + {PA31_I2C0SCL_PWM11_SPU19_XX, 0, 11, 1} +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_pwm_count() + \brief get pwm instance. + \return pointer to pwm instance +*/ +int32_t target_pwm_init(int32_t pwm_pin, uint32_t *ch_num, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_pwm_pin_map) / sizeof(pwm_pin_map_t); idx++) { + if (s_pwm_pin_map[idx].pwm_pin == pwm_pin) { + *base = sg_pwm_config[s_pwm_pin_map[idx].cfg_idx].base; + *irq = sg_pwm_config[s_pwm_pin_map[idx].cfg_idx].irq; + *ch_num = s_pwm_pin_map[idx].ch_num; + /*pinmux*/ + pin_mux(s_pwm_pin_map[idx].pwm_pin, s_pwm_pin_map[idx].function); + return s_pwm_pin_map[idx].cfg_idx; + } + } + + return -1; +} + +struct { + uint32_t base; + uint32_t irq; +} +const sg_wdt_config[CONFIG_WDT_NUM] = { + {CSKY_WDT_BASE, WDT_IRQn} +}; + +int32_t target_get_wdt_count(void) +{ + return CONFIG_WDT_NUM; +} + +int32_t target_get_wdt(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_wdt_count()) { + return NULL; + } + + *base = sg_wdt_config[idx].base; + *irq = sg_wdt_config[idx].irq; + return idx; +} + +int32_t target_get_etb_count(void) +{ + return CONFIG_ETB_NUM; +} + +int32_t target_get_etb(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_etb_count()) { + return NULL; + } + +// *base = sg_etb_config[idx].base; +// *irq = sg_etb_config[idx].irq; + return 0; +} + +struct { + uint32_t base; + uint32_t irq; +} +const sg_qspi_config[CONFIG_QSPI_NUM] = { + {CSKY_QSPIC0_BASE, QSPIC1_IRQn}, + {CSKY_QSPIC1_BASE, QSPIC1_IRQn} +}; +typedef struct { + pin_name_t sclk; + pin_name_t miso; + pin_name_t mosi; + pin_name_t hold; + pin_name_t wp; + pin_name_t ssel; + uint32_t cfg_idx; + uint16_t function; +} qspi_pin_map_t; +const static qspi_pin_map_t s_qspi_pin_map[] = { + { + PA2_QSPI0CLK_XX_XX_XX, + PA3_QSPI0MISO_XX_XX_XX, + PA4_QSPI0MOSI_XX_XX_XX, + PA5_QSPI0HOLD_XX_XX_XX, + PA6_QSPI0WP_XX_XX_XX, + PA7_QSPI0CS0_XX_XX_XX, + 0, + 0 + }, + { + PB11_QSPI1CLK_XX_SPU27_I2C1SCL, + PB10_QSPI1MISO_XX_SPU26_I2C1SDA, + PB9_QSPI1MOSI_PWMTRIG1_SPU25_XX, + PB7_QSPI1HOLD_XX_SPU23_XX, + PB6_QSPI1WP_XX_SPU22_XX, + PB8_QSPI1CS0_PWMTRIG0_SPU24_XX, + 1, + 0 + } +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_qspi_count() + \brief get qspi instance. + \return pointer to qspi instance +*/ +int32_t target_qspi_init(pin_name_t mosi, pin_name_t miso, pin_name_t sclk, pin_name_t ssel, pin_name_t wp, pin_name_t hold, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_qspi_pin_map) / sizeof(qspi_pin_map_t); idx++) { + if (s_qspi_pin_map[idx].mosi == mosi && s_qspi_pin_map[idx].miso == miso + && s_qspi_pin_map[idx].sclk == sclk && s_qspi_pin_map[idx].ssel == ssel + && s_qspi_pin_map[idx].hold == hold && s_qspi_pin_map[idx].wp == wp) { + + pin_mux(s_qspi_pin_map[idx].mosi, s_qspi_pin_map[idx].function); + pin_mux(s_qspi_pin_map[idx].miso, s_qspi_pin_map[idx].function); + pin_mux(s_qspi_pin_map[idx].sclk, s_qspi_pin_map[idx].function); + pin_mux(s_qspi_pin_map[idx].hold, s_qspi_pin_map[idx].function); + pin_mux(s_qspi_pin_map[idx].wp, s_qspi_pin_map[idx].function); + pin_mux(s_qspi_pin_map[idx].ssel, s_qspi_pin_map[idx].function); + return s_qspi_pin_map[idx].cfg_idx; + } + } + return -1; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/pin_name.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/pin_name.h new file mode 100644 index 000000000..a06771328 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/pin_name.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file pin_name.h + * @brief header file for the pin_name + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _PINNAMES_H +#define _PINNAMES_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef enum { + PA0_I2C0SCL_SPI1CS1_SPU0_UART1TX = 0, + PA1_I2C0SDA_SPI1CS2_SPU1_UART1RX, + PA2_QSPI0CLK_XX_XX_XX, + PA3_QSPI0MISO_XX_XX_XX, + PA4_QSPI0MOSI_XX_XX_XX, + PA5_QSPI0HOLD_XX_XX_XX, + PA6_QSPI0WP_XX_XX_XX, + PA7_QSPI0CS0_XX_XX_XX, + PA8_UART0TX_XX_SPU2_SIROUT0, + PA9_UART0RX_XX_SPU3_SIRIN0, + PA10_UART0CTS_USI0SCLK_SPU4_I2C0SCL, + PA11_UART0RTS_USI0SD0_SPU5_I2C0SDA, + PA12_XX_USI0SD1_XX_UART2RX, + PA13_XX_USI0NSS_XX_UART2TX, + PA14_SPI0CS2_FAULT_I2C1SDA_XX, + PA15_SPI0CS1_XX_I2C1SCL_XX, + PA16_SPI0CS0_PWMTRIG0_XX_USI1SCLK, + PA17_SPI0MOSI_PWMTRIG1_XX_USI1SD0, + PA18_SPI0MISO_XX_SPU6_USI1SD1, + PA19_SPI0SCK_FAULT_SPU7_USI1NSS, + PA20_UART1RX_PWM0_SPU8_SIRIN1, + PA21_UART1TX_PWM1_SPU9_SIROUT1, + PA22_UART1CTS_PWM2_SPU10_XX, + PA23_UART1RTS_PWM3_SPU11_XX, + PA24_USI1NSS_PWM4_SPU12_XX, + PA25_USI1SD1_PWM5_SPU13_XX, + PA26_USI1SD0_PWM6_SPU14_XX, + PA27_USI1SCLK_PWM7_SPU15_XX, + PA28_I2C1SCL_PWM8_SPU16_XX, + PA29_I2C1SDA_PWM9_SPU17_XX, + PA30_I2C0SDA_PWM10_SPU18_XX, + PA31_I2C0SCL_PWM11_SPU19_XX, + PB0_UART2TX_XX_XX_SIROUT2, + PB1_UART2RX_XX_XX_SIRIN2, + PB2_UART2RTS_XX_XX_XX, + PB3_UART2CTS_XX_XX_XX, + PB4_XX_XX_SPU20_UART3TX, + PB5_QSPI1CS1_XX_SPU21_UART3RX, + PB6_QSPI1WP_XX_SPU22_XX, + PB7_QSPI1HOLD_XX_SPU23_XX, + PB8_QSPI1CS0_PWMTRIG0_SPU24_XX, + PB9_QSPI1MOSI_PWMTRIG1_SPU25_XX, + PB10_QSPI1MISO_XX_SPU26_I2C1SDA, + PB11_QSPI1CLK_XX_SPU27_I2C1SCL, + PB12_UART3RX_SPI1CS0_SPU28_SIRIN3, + PB13_UART3TX_SPI1MISO_SPU29_SIROUT3, + PB14_UART3RTS_SPI1MOSI_SPU30_XX, + PB15_UART3CTS_SPI1SCK_SPU31_XX, +} +pin_name_t; + +typedef enum { + PORTA = 0, + PORTB = 1 +} port_name_t; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/pinmux.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/pinmux.h new file mode 100644 index 000000000..ae7140d05 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/pinmux.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file pinmux.h + * @brief Header file for the pinmux + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef HOBBIT_PINMUX_H +#define HOBBIT_PINMUX_H + +#include +#include "pin_name.h" + +void hobbit_ioreuse_initial(void); +int32_t pin_mux(pin_name_t pin, uint16_t function); + +/*IOMUX0L function definition */ + + +/* IOMUX0H function definition */ +#define PA20_UART1_RX 0x00000000 +#define PA21_UART1_TX 0x00000000 + + +/* IOMUX1L function definition */ + +/* flag as identification */ +#define GPIO_SET_BIT0 0x00000001 +#define GPIO_SET_BIT1 0x00000002 +#define GPIO_SET_BIT2 0x00000004 +#define GPIO_SET_BIT3 0x00000008 +#define GPIO_SET_BIT4 0x00000010 +#define GPIO_SET_BIT5 0x00000020 +#define GPIO_SET_BIT6 0x00000040 +#define GPIO_SET_BIT7 0x00000080 +#define GPIO_SET_BIT8 0x00000100 +#define GPIO_SET_BIT9 0x00000200 +#define GPIO_SET_BIT10 0x00000400 +#define GPIO_SET_BIT11 0x00000800 +#define GPIO_SET_BIT12 0x00001000 +#define GPIO_SET_BIT13 0x00002000 +#define GPIO_SET_BIT14 0x00004000 +#define GPIO_SET_BIT15 0x00008000 +#define GPIO_SET_BIT16 0x00010000 +#define GPIO_SET_BIT17 0x00020000 +#define GPIO_SET_BIT18 0x00040000 +#define GPIO_SET_BIT19 0x00080000 +#define GPIO_SET_BIT20 0x00100000 +#define GPIO_SET_BIT21 0x00200000 +#define GPIO_SET_BIT22 0x00400000 +#define GPIO_SET_BIT23 0x00800000 +#define GPIO_SET_BIT24 0x01000000 +#define GPIO_SET_BIT25 0x02000000 +#define GPIO_SET_BIT26 0x04000000 +#define GPIO_SET_BIT27 0x08000000 +#define GPIO_SET_BIT28 0x10000000 +#define GPIO_SET_BIT29 0x20000000 +#define GPIO_SET_BIT30 0x40000000 +#define GPIO_SET_BIT31 0x80000000 + +/****************************************************************************** + * hobbit gpio control and gpio reuse function + * selecting regester adddress + ******************************************************************************/ + +#define HOBBIT_GIPO0_PORTCTL_REG 0x60030000 +#define HOBBIT_GIPO1_PORTCTL_REG 0x60030004 +#define HOBBIT_IOMUX0L_REG 0x60030008 +#define HOBBIT_IOMUX0H_REG 0x6003000C +#define HOBBIT_IOMUX1L_REG 0x60030010 + + +/*************basic gpio reuse v1.0******************************************** + * UART1(PA20,PA21) + ******************************************************************************/ +#define GPIO0_REUSE_EN (GPIO_SET_BIT20|GPIO_SET_BIT21) +#define GPIO1_REUSE_EN (0x00000000) +#define IOMUX0L_FUNCTION_SEL (0x00000000) +#define IOMUX0H_FUNCTION_SEL (PA20_UART1_RX|PA21_UART1_TX) +#define IOMUX1L_FUNCTION_SEL (0x00000000) + + +#endif /* HOBBIT_PINMUX_H */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/soc.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/soc.h new file mode 100644 index 000000000..ec99e14c0 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/include/soc.h @@ -0,0 +1,206 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/**************************************************************************//** + * @file soc.h + * @brief CSI Core Peripheral Access Layer Header File for + * CSKYSOC Device Series + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + + +#ifndef SOC_H +#define SOC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SYSTEM_CLOCK +#define SYSTEM_CLOCK (20000000) +#endif + +#ifndef LSP_DEFAULT_FREQ +#define LSP_DEFAULT_FREQ (20000000) +#endif + +/* ------------------------- Interrupt Number Definition ------------------------ */ + +typedef enum IRQn +{ + /* ---------------------- CSKYCK801 Specific Interrupt Numbers --------------------- */ + GPIOA_IRQn = 0, + CORET_IRQn = 1, /* core Timer Interrupt */ + TIMA0_IRQn = 2, /* timerA0 Interrupt */ + TIMA1_IRQn = 3, /* timerA1 Interrupt */ + TIM34567_IRQn = 4, /* timerC ~ timerH Interrupt */ + WDT_IRQn = 5, /* wdt Interrupt */ + UART0_IRQn = 6, /* uart0 Interrupt */ + UART1_IRQn = 7, /* uart1 Interrupt */ + UART2_IRQn = 8, /* uart2 Interrupt */ + I2C0_IRQn = 9, /* i2c0 Interrupt */ + I2C1_IRQn = 10, /* i2c1 Interrupt */ + SPI1_IRQn = 11, /* spi1 Interrupt */ + SPI0_IRQn = 12, /* spi0 Interrupt */ + RTC_IRQn = 13, /* rtc Interrupt */ + UART3_IRQn = 14, /* uart3 Interrupt */ + ADC_IRQn = 15, /* adc Interrupt */ + QSPIC1_IRQn = 16, /* qspic1 interrupt */ + DMAC_IRQn = 17, /* dmac Interrupt */ + PMU_IRQn = 18, /* pmu Interrupt */ + PWM_IRQn = 19, /* pwm Interrupt */ + USI0_IRQn = 20, /* usi0 Interrupt */ + USI1_IRQn = 21, /* usi1 Interrupt */ + SPU_IRQn = 22, /* spu Interrupt */ + TIMB0_IRQn = 23, /* timerB0 Interrupt */ + TIMB1_IRQn = 24, /* timerB1 Interrupt */ + GPIOB_IRQn = 27, /* GPIOB Interrupt */ + AES_IRQn = 26, /* aes Interrupt */ + RSA_IRQn = 28, /* rsa Interrupt */ + SHA_IRQn = 29, /* sha Interrupt */ + TRNG_IRQn = 30, /* trng Interrupt */ +} IRQn_Type; + + +/* ================================================================================ */ +/* ================ Processor and Core Peripheral Section ================ */ +/* ================================================================================ */ + +/* -------- Configuration of the CK801 Processor and Core Peripherals ------- */ +#define __CK803_REV 0x0000U /* Core revision r0p0 */ +#define __MPU_PRESENT 0 /* MGU present or not */ +#define __VIC_PRIO_BITS 2 /* Number of Bits used for Priority Levels */ +#define __Vendor_SysTickConfig 0 /* Set to 1 if different SysTick Config is used */ + +#include "core_ck802.h" /* Processor and core peripherals */ +#include "stdint.h" + +typedef enum { + CKENUM_DMA_UART0_RX, + CKENUM_DMA_UART0_TX, + CKENUM_DMA_UART1_RX, + CKENUM_DMA_UART1_TX, + CKENUM_DMA_ADC_RX, + CKENUM_DMA_ADC_TX, + CKENUM_DMA_SPI1_RX, + CKENUM_DMA_SPI1_TX, + CKENUM_DMA_SPI0_RX, + CKENUM_DMA_SPI0_TX, + CKENUM_DMA_IIC_RX, + CKENUM_DMA_IIC_TX, + CKENUM_DMA_IIC1_RX, + CKENUM_DMA_IIC1_TX, + CKENUM_DMA_IIS_RX, + CKENUM_DMA_IIS_TX, + CKENUM_DMA_MEMORY +} ckenum_dma_device_e; + +#define CONFIG_CRC_NUM 1 +#define CONFIG_IIC_NUM 2 +#define CONFIG_TRNG_NUM 1 +#define CONFIG_AES_NUM 1 +#define CONFIG_RSA_NUM 1 +#define CONFIG_SHA_NUM 1 +#define CONFIG_SPI_NUM 2 +#define CONFIG_QSPI_NUM 2 +#define CONFIG_PWM_NUM 1 +#define CONFIG_TIMER_NUM 14 +#define CONFIG_RTC_NUM 1 +#define CONFIG_WDT_NUM 1 +#define CONFIG_DMAC_NUM 1 +#define CONFIG_GPIO_NUM 2 +#define CONFIG_GPIO_PIN_NUM 43 +#define CONFIG_USART_NUM 4 +#define CONFIG_SPU_NUM 1 +#define CONFIG_EFLASH_NUM 1 +#define CONFIG_ETB_NUM 1 +#define CONFIG_USI_NUM 2 + +/* ================================================================================ */ +/* ================ Peripheral memory map ================ */ +/* ================================================================================ */ +/* -------------------------- CPU FPGA memory map ------------------------------- */ +#define CSKY_EFLASH_BASE (0x10000000UL) +#define CSKY_QSPIMEM_BASE (0x18000000UL) +#define CSKY_SRAM_BASE (0x20000000UL) +#define CSKY_PMU_BASE (0x40000000UL) +#define CSKY_DMAC0_BASE (0x40001000UL) +#define CSKY_OTP_BASE (0x40006000UL) +#define CSKY_SASC_BASE (0x40009000UL) +#define CSKY_SPU_BASE (0x40020000UL) +#define CSKY_QSPIC1_BASE (0x40030000UL) +#define CSKY_EFLASH_CONTROL_BASE (0x40005000UL) +#define CSKY_SASC_BASE (0x40009000UL) + +/* SUB0*/ +#define CSKY_AES_BASE (0x4000D000UL) +#define CSKY_SHA_BASE (0x4000E000UL) +#define CSKY_RSA_BASE (0x4000F000UL) +#define CSKY_CRC_BASE (0x40010000UL) +#define CSKY_TRNG_BASE (0x40011000UL) +/* APB0 */ +#define CSKY_TIM0_BASE (0x50000000UL) +#define CSKY_TIM1_BASE (0x50000400UL) +#define CSKY_TIM2_BASE (0x50000800UL) +#define CSKY_TIM3_BASE (0x50000C00UL) +#define CSKY_RTC0_BASE (0x50004000UL) +#define CSKY_WDT_BASE (0x50008000UL) +#define CSKY_SPI0_BASE (0x5000C000UL) +#define CSKY_UART0_BASE (0x50010000UL) +#define CSKY_UART1_BASE (0x50010400UL) +#define CSKY_I2C0_BASE (0x50014000UL) +#define CSKY_GPIO0_BASE (0x50018000UL) +#define CSKY_PWM_BASE (0x5001C000UL) +#define CSKY_ADC_BASE (0x50020000UL) +#define CSKY_USI0_BASE (0x50028000UL) +#define CSKY_QSPIC0_BASE (0x5002C000UL) +/* APB1*/ +#define CSKY_TIM4_BASE (0x60000000UL) +#define CSKY_TIM5_BASE (0x60000400UL) +#define CSKY_TIM6_BASE (0x60000800UL) +#define CSKY_TIM7_BASE (0x60000C00UL) +#define CSKY_LPWDT_BASE (0x60008000UL) +#define CSKY_SPI1_BASE (0x6000C000UL) +#define CSKY_UART2_BASE (0x60010000UL) +#define CSKY_UART3_BASE (0x60010400UL) +#define CSKY_I2C1_BASE (0x60014000UL) +#define CSKY_GPIO1_BASE (0x60018000UL) +#define CSKY_TIPC_BASE (0x6001c000UL) +#define CSKY_ETB_BASE (0x60024000UL) +#define CSKY_USI1_BASE (0x60028000UL) +#define CSKY_DAC_BASE (0x6002C000UL) +#define CSKY_IOC_BASE (0x60030000UL) + +#define SHA_CONTEXT_SIZE 224 + +/* ================================================================================ */ +/* ================ Peripheral declaration ================ */ +/* ================================================================================ */ +#define CSKY_UART1 (( CSKY_UART_TypeDef *) CSKY_UART1_BASE) +#define CSKY_SHA (( CSKY_SHA_TypeDef *) CSKY_SHA_BASE) + +#ifdef CONFIG_HAVE_VIC +#define ATTRIBUTE_ISR __attribute__((isr)) +#else +#define ATTRIBUTE_ISR +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* SOC_H */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/isr.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/isr.c new file mode 100644 index 000000000..ea35573f2 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/isr.c @@ -0,0 +1,244 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file isr.c + * @brief source file for the interrupt server route + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include +#include "soc.h" +#ifndef CONFIG_KERNEL_NONE +#include +#endif + +#ifndef CONFIG_USI +extern void dw_spi_irqhandler(int32_t idx); +extern void dw_usart_irqhandler(int32_t idx); +extern void dw_iic_irqhandler(int32_t idx); +#else +extern void ck_usi_irqhandler(int idx); +#endif +extern void ck_spu_irqhandler(int32_t idx); +extern void dw_timer_irqhandler(int32_t idx); +extern void dw_gpio_irqhandler(int32_t idx); +extern void ck_rtc_irqhandler(int32_t idx); +extern void dw_wdt_irqhandler(int32_t idx); +extern void ck_dma_irqhandler(int32_t idx); +extern void ck_aes_irqhandler(int32_t idx); +extern void ck_sha_irqhandler(int32_t idx); +#ifdef CONFIG_KERNEL_FREERTOS +extern void CoretimeIsr(void); +extern void CKPendSVIsr(void); +#endif +extern void systick_handler(void); +extern void xPortSysTickHandler(void); +extern void OSTimeTick(void); + +#define readl(addr) \ + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; }) + +#ifndef CONFIG_KERNEL_NONE +#define CSI_INTRPT_ENTER() csi_kernel_intrpt_enter() +#define CSI_INTRPT_EXIT() csi_kernel_intrpt_exit() +#else +#define CSI_INTRPT_ENTER() +#define CSI_INTRPT_EXIT() +#endif + +ATTRIBUTE_ISR void CORET_IRQHandler(void) +{ +#ifndef CONFIG_KERNEL_FREERTOS + CSI_INTRPT_ENTER(); +#endif + + readl(0xE000E010); + +#if defined(CONFIG_KERNEL_RHINO) + systick_handler(); +#elif defined(CONFIG_KERNEL_FREERTOS) + xPortSysTickHandler(); +#elif defined(CONFIG_KERNEL_UCOS) + OSTimeTick(); +#endif + +#ifndef CONFIG_KERNEL_FREERTOS + CSI_INTRPT_EXIT(); +#endif +} + +#ifdef CONFIG_SPU +ATTRIBUTE_ISR void SPU_IRQHandler(void) +{ + ck_spu_irqhandler(0); +} +#endif + +#ifndef CONFIG_USI +ATTRIBUTE_ISR void SPI0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_spi_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void SPI1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_spi_irqhandler(1); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void I2C0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_iic_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void I2C1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_iic_irqhandler(1); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USART0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USART1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(1); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USART2_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(2); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USART3_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(3); + CSI_INTRPT_EXIT(); +} +#else +ATTRIBUTE_ISR void USI0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_usi_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USI1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_usi_irqhandler(1); + CSI_INTRPT_EXIT(); +} +#endif +ATTRIBUTE_ISR void TIMA0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void TIMA1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(1); + CSI_INTRPT_EXIT(); +} +ATTRIBUTE_ISR void TIMB0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(2); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void TIMB1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(3); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void TIM34567_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(4); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void GPIOA_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_gpio_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void GPIOB_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_gpio_irqhandler(1); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void RTC_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_rtc_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void AES_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_aes_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void SHA_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_sha_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void WDT_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_wdt_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void DMAC_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_dma_irqhandler(0); + CSI_INTRPT_EXIT(); +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/pinmux.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/pinmux.c new file mode 100644 index 000000000..de87cd7c6 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/pinmux.c @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file pinmux.c + * @brief source file for the pinmux + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include "pinmux.h" +#include "pin_name.h" + +#define readl(addr) \ + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; }) + +#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b)) + +/******************************************************************************* + * function: hobbit_ioreuse_inital + * + * description: + * initial hobbit_pinmux + *******************************************************************************/ + +extern int32_t target_qspi_init(pin_name_t mosi, pin_name_t miso, pin_name_t sclk, pin_name_t ssel, pin_name_t wp, pin_name_t hold, uint32_t *base, uint32_t *irq); + +void hobbit_ioreuse_initial(void) +{ + unsigned int value; + + /* gpio data source select */ + value = readl(HOBBIT_GIPO0_PORTCTL_REG); + value |= GPIO0_REUSE_EN; + writel(value, HOBBIT_GIPO0_PORTCTL_REG); + + value = readl(HOBBIT_GIPO1_PORTCTL_REG); + value |= GPIO1_REUSE_EN; + writel(value, HOBBIT_GIPO1_PORTCTL_REG); + + /* reuse function select */ + value = readl(HOBBIT_IOMUX0L_REG); + value |= IOMUX0L_FUNCTION_SEL; + writel(value, HOBBIT_IOMUX0H_REG); + + value = readl(HOBBIT_IOMUX0H_REG); + value |= IOMUX1L_FUNCTION_SEL; + writel(value, HOBBIT_IOMUX0H_REG); + + value = readl(HOBBIT_IOMUX1L_REG); + value |= IOMUX1L_FUNCTION_SEL; + writel(value, HOBBIT_IOMUX1L_REG); + + target_qspi_init(PA4_QSPI0MOSI_XX_XX_XX, PA3_QSPI0MISO_XX_XX_XX, PA2_QSPI0CLK_XX_XX_XX, PA7_QSPI0CS0_XX_XX_XX, PA6_QSPI0WP_XX_XX_XX, PA5_QSPI0HOLD_XX_XX_XX, 0, 0); +} + +int32_t pin_mux(pin_name_t pin, uint16_t function) +{ + unsigned int val = 0; + unsigned int reg_val = 0; + + uint8_t offset; + + if (function > 3) { + if (pin < PB0_UART2TX_XX_XX_SIROUT2) { + offset = pin; + /* gpio data source select */ + val = readl(HOBBIT_GIPO0_PORTCTL_REG); + val &= ~(1 << offset); + writel(val, HOBBIT_GIPO0_PORTCTL_REG); + return 0; + } else if (pin >= PB0_UART2TX_XX_XX_SIROUT2) { + offset = pin - 32; + /* gpio data source select */ + val = readl(HOBBIT_GIPO1_PORTCTL_REG); + val &= ~(1 << offset); + writel(val, HOBBIT_GIPO1_PORTCTL_REG); + return 0; + } else { + return -1; + } + } + + if (pin >= PB0_UART2TX_XX_XX_SIROUT2) { + offset = pin - 32; + + /* gpio data source select */ + val = readl(HOBBIT_GIPO1_PORTCTL_REG); + val |= (1 << offset); + writel(val, HOBBIT_GIPO1_PORTCTL_REG); + + reg_val = (0x3 << (offset * 2)); + /* reuse function select */ + val = readl(HOBBIT_IOMUX1L_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, HOBBIT_IOMUX1L_REG); + return 0; + } + + offset = pin; + /* gpio data source select */ + val = readl(HOBBIT_GIPO0_PORTCTL_REG); + val |= (1 << offset); + writel(val, HOBBIT_GIPO0_PORTCTL_REG); + + if (pin >= PA16_SPI0CS0_PWMTRIG0_XX_USI1SCLK) { + offset = pin - 16; + reg_val = (0x3 << (offset * 2)); + /* reuse function select */ + val = readl(HOBBIT_IOMUX0H_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, HOBBIT_IOMUX0H_REG); + return 0; + } + + reg_val = (0x3 << (offset * 2)); + /* reuse function select */ + val = readl(HOBBIT_IOMUX0L_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, HOBBIT_IOMUX0L_REG); + return 0; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/Kconfig b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/Kconfig new file mode 100644 index 000000000..e69de29bb diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/csi.mk b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/csi.mk new file mode 100644 index 000000000..2c703a04e --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/csi.mk @@ -0,0 +1,5 @@ +TEE_INC += -I$(CSI_DIR)/csi_driver/csky/phobos/include +TEE_SRC += \ + $(CSI_DIR)/csi_driver/csky/phobos/devices.c \ + $(CSI_DIR)/csi_driver/csky/phobos/isr.c \ + $(CSI_DIR)/csi_driver/csky/phobos/pinmux.c \ No newline at end of file diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/devices.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/devices.c new file mode 100644 index 000000000..5e91547b9 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/devices.c @@ -0,0 +1,843 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file devices.c + * @brief source file for the devices + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include "soc.h" +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "pin_name.h" +#include "pinmux.h" + +//typedef int32_t pin_t; + + +#if CONFIG_IIC + + +struct { + uint32_t base; + uint32_t irq; +} +const sg_iic_config[CONFIG_IIC_NUM] = { + {CSKY_I2C0_BASE, I2C0_IRQn}, + {CSKY_I2C1_BASE, I2C1_IRQn} +}; + + +typedef struct { + pin_t scl; + pin_t sda; + uint16_t cfg_idx; //idx of sg_iic_config[] + uint16_t function; + //uint32_t scl_reg; + //uint32_t scl_cfg; + //uint32_t sda_reg; + //uint32_t sda_cfg; +} iic_pin_map_t; +const static iic_pin_map_t s_iic_pin_map[] = { + { + PA4_SCL0_PWM4_SPI0RX_XX, + PA5_SDA0_PWM5_SPI0CS_XX, + 0, + 0 + }, + { + PA6_SPI0CLK_PWMTRIG0_SCL0_XX, + PA7_SPI0TX_PWMTRIG1_SDA0_XX, + 0, + 2 + }, + { + PA31_I2SSDA__SCL0_PWM4_XX, + PB0_ADC0_SDA0_PWM5_XX, + 0, + 1 + }, + { + PA8_SPI0RX_TRIGFAULT_SCL1_XX, + PA9_SPI0CS_PWM0_SDA1_XX, + 1, + 2 + }, + { + PA14_SCL1_PWM5_SPI1RX_XX, + PA15_SDA1_PWMTRIG0_SPI1CS0_XX, + 1, + 0 + }, + { + PB1_ADC1_SCL1_USISCLK_XX, + PB2_ADC2_SDA1_USISD0_XX, + 1, + 1 + } +}; + + +/** + \param[in] instance idx, must not exceed return value of target_get_iic_count() + \brief get iic instance. + \return pointer to iic instance +*/ +int32_t target_iic_init(pin_t scl, pin_t sda, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_iic_pin_map) / sizeof(iic_pin_map_t); idx++) { + if (s_iic_pin_map[idx].scl == scl && s_iic_pin_map[idx].sda == sda) { + *base = sg_iic_config[s_iic_pin_map[idx].cfg_idx].base; + *irq = sg_iic_config[s_iic_pin_map[idx].cfg_idx].irq; + /*pinmux*/ + pin_mux(s_iic_pin_map[idx].scl, s_iic_pin_map[idx].function); + pin_mux(s_iic_pin_map[idx].sda, s_iic_pin_map[idx].function); + return s_iic_pin_map[idx].cfg_idx; + } + } + + return -1; +} + + +#endif + +#if CONFIG_USART +struct { + uint32_t base; + uint32_t irq; +} +const sg_usart_config[CONFIG_USART_NUM] = { + {CSKY_UART0_BASE, UART0_IRQn}, + {CSKY_UART1_BASE, UART1_IRQn}, + {CSKY_UART2_BASE, UART2_IRQn}, + {CSKY_UART3_BASE, UART3_IRQn} +}; +typedef struct { + pin_t tx; + pin_t rx; + pin_t cts; + pin_t rts; + uint16_t cfg_idx; //idx of sg_usart_config[] + uint16_t function; +} usart_pin_map_t; +const static usart_pin_map_t s_usart_pin_map[] = { + { + PA0_TXD0_PWM0_XX_SIROUT0, + PA1_RXD0_PWM1_XX_SIRIN0, + -1, + -1, + 0, + 0 + }, + { + PA10_TXD1_PWM1_XX_SIROUT1, + PA11_RXD1_PWM2_XX_SIRIN1, + -1, + -1, + 1, + 0 + }, + { + PA23_TXD2_PWM5_XX_SIROUT2, + PA22_RXD2_PWM4_XX_SIRIN2, + PA24_CTS2_PWMTRIG0_SPI1CS1_XX, + PA25_XX_PWMTRIG1_SPI1CS2_XX, + 2, + 0 + }, + { + PA26_TXD3_PWMFAULT_XX_SIROUT3, + PA27_RXD3_PWM0_XX_SIRIN3, + -1, + -1, + 3, + 0 + } +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_usart_count() + \brief get usart instance. + \return pointer to usart instance +*/ +int32_t target_usart_init(pin_t tx, pin_t rx, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_usart_pin_map) / sizeof(usart_pin_map_t); idx++) { + if (s_usart_pin_map[idx].tx == tx && s_usart_pin_map[idx].rx == rx) { + *base = sg_usart_config[s_usart_pin_map[idx].cfg_idx].base; + *irq = sg_usart_config[s_usart_pin_map[idx].cfg_idx].irq; + /*pinmux*/ + pin_mux(s_usart_pin_map[idx].tx, s_usart_pin_map[idx].function); + pin_mux(s_usart_pin_map[idx].rx, s_usart_pin_map[idx].function); + return s_usart_pin_map[idx].cfg_idx; + } + } + + return -1; + +} +/** + \brief control usart flow. + \param[in] tx_flow The TX flow pin name + \param[in] rx_flow The RX flow pin name + \param[in] flag 0-disable, 1-enable. + \return 0 if setting ready ,negative for error code +*/ +int32_t target_usart_flowctrl_init(pin_t tx_flow, pin_t rx_flow, uint32_t flag) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_usart_pin_map) / sizeof(usart_pin_map_t); idx++) { + if ((s_usart_pin_map[idx].cts == tx_flow) &&(s_usart_pin_map[idx].rts == rx_flow)) + break; + } + + if (idx >= sizeof(s_usart_pin_map) / sizeof(usart_pin_map_t)) { + return -1; + } + + if ((s_usart_pin_map[idx].cts == tx_flow) && flag) { + pin_mux(s_usart_pin_map[idx].cts, s_usart_pin_map[idx].function); + } else if ((s_usart_pin_map[idx].cts == tx_flow) && (flag == 0)) { + pin_mux(s_usart_pin_map[idx].cts, 0xff); + } else { + return -1; + } + + if ((s_usart_pin_map[idx].rts == rx_flow) && flag) { + pin_mux(s_usart_pin_map[idx].rts, s_usart_pin_map[idx].function); + } else if ((s_usart_pin_map[idx].rts == rx_flow) && (flag == 0)) { + pin_mux(s_usart_pin_map[idx].rts, 0xff); + } else { + return -1; + } + + return 0; +} + +#endif + +#if CONFIG_TRNG +struct { + uint32_t base; +} +const sg_trng_config[CONFIG_TRNG_NUM] = { + {CSKY_TRNG_BASE} +}; + +/** + \brief get trng instance count. + \return trng instance count +*/ +int32_t target_get_trng_count(void) +{ + return CONFIG_TRNG_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_trng_count() + \brief get trng instance. + \return pointer to trng instance +*/ +int32_t target_get_trng(int32_t idx, uint32_t *base) +{ + if (idx >= target_get_trng_count()) { + return NULL; + } + + *base = sg_trng_config[idx].base; + return idx; +} + +#endif + +#if CONFIG_CRC +struct { + uint32_t base; +} +const sg_crc_config[CONFIG_CRC_NUM] = { + {CSKY_CRC_BASE} +}; + +/** + \brief get crc instance count. + \return crc instance count +*/ +int32_t target_get_crc_count(void) +{ + return CONFIG_CRC_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_crc_count() + \brief get crc instance. + \return pointer to crc instance +*/ +int32_t target_get_crc(int32_t idx, uint32_t *base) +{ + if (idx >= target_get_crc_count()) { + return NULL; + } + + *base = sg_crc_config[idx].base; + return idx; +} + +#endif + + +#if CONFIG_EFLASH +struct { + uint32_t base; + eflash_info info; +} +const sg_eflash_config[CONFIG_EFLASH_NUM] = { + {CSKY_EFLASH_CONTROL_BASE, {0x10000000, 0x1003f800, 0x1fc}} +}; + +/** + \brief get eflash instance count. + \return eflash instance count +*/ +int32_t target_get_eflash_count(void) +{ + return CONFIG_EFLASH_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_eflash_count() + \brief get eflash instance. + \return pointer to eflash instance +*/ +int32_t target_get_eflash(int32_t idx, uint32_t *base, eflash_info *info) +{ + if (idx >= target_get_eflash_count()) { + return NULL; + } + + *base = sg_eflash_config[idx].base; + info->start = sg_eflash_config[idx].info.start; + info->end = sg_eflash_config[idx].info.end; + info->sector_count = sg_eflash_config[idx].info.sector_count; + return idx; +} + +#endif + +#if CONFIG_TIMER +struct { + uint32_t base; + uint32_t irq; +} +const sg_timer_config[CONFIG_TIMER_NUM] = { + {CSKY_TIMERA0_BASE, TIMA0_IRQn}, + {CSKY_TIMERA1_BASE, TIMA1_IRQn}, + {CSKY_TIMERB0_BASE, TIMB0_IRQn}, + {CSKY_TIMERB1_BASE, TIMB1_IRQn} +}; + +int32_t target_get_timer_count(void) +{ + return CONFIG_TIMER_NUM; +} + +int32_t target_get_timer(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_timer_count()) { + return NULL; + } + + *base = sg_timer_config[idx].base; + *irq = sg_timer_config[idx].irq; + return idx; +} + +#endif + +#if CONFIG_GPIO +struct { + uint32_t base; + uint32_t irq; + uint32_t pin_num; + port_name_t port; +} +const sg_gpio_config[CONFIG_GPIO_NUM] = { + {CSKY_GPIOA_BASE, GPIOA_IRQn, 32, PORTA}, + {CSKY_GPIOB_BASE, GPIOB_IRQn, 11, PORTB} +}; + +typedef struct { + pin_t gpio_pin; + uint32_t cfg_idx; //idx of sg_gpio_config[] +} gpio_pin_map_t; +const static gpio_pin_map_t s_gpio_pin_map[] = { + {PA0_TXD0_PWM0_XX_SIROUT0, 0}, + {PA1_RXD0_PWM1_XX_SIRIN0, 0}, + {PA2_CTS0_PWM2_SPI0CLK_XX, 0}, + {PA3_RTS0_PWM3_SPI0TX_XX, 0}, + {PA4_SCL0_PWM4_SPI0RX_XX, 0}, + {PA5_SDA0_PWM5_SPI0CS_XX, 0}, + {PA6_SPI0CLK_PWMTRIG0_SCL0_XX, 0}, + {PA7_SPI0TX_PWMTRIG1_SDA0_XX, 0}, + {PA8_SPI0RX_TRIGFAULT_SCL1_XX, 0}, + {PA9_SPI0CS_PWM0_SDA1_XX, 0}, + {PA10_TXD1_PWM1_XX_SIROUT1, 0}, + {PA11_RXD1_PWM2_XX_SIRIN1, 0}, + {PA12_CTS1_PWM3_SPI1CLK_XX, 0}, + {PA13_RTS1_PWM4_SPI1TX_XX, 0}, + {PA14_SCL1_PWM5_SPI1RX_XX, 0}, + {PA15_SDA1_PWMTRIG0_SPI1CS0_XX, 0}, + {PA16_SPI1CLK_PWMTRIG1_XX_XX, 0}, + {PA17_SPI1TX_PWMFAULT_XX_XX, 0}, + {PA18_SPI1RX_PWM0_XX_XX, 0}, + {PA19_SPI1CS0_PWM1_XX_XX, 0}, + {PA20_SPI1CS1_PWM2_XX_XX, 0}, + {PA21_SPI1CS2_PWM3_XX_XX, 0}, + {PA22_RXD2_PWM4_XX_SIRIN2, 0}, + {PA23_TXD2_PWM5_XX_SIROUT2, 0}, + {PA24_CTS2_PWMTRIG0_SPI1CS1_XX, 0}, + {PA25_XX_PWMTRIG1_SPI1CS2_XX, 0}, + {PA26_TXD3_PWMFAULT_XX_SIROUT3, 0}, + {PA27_RXD3_PWM0_XX_SIRIN3, 0}, + {PA28_I2SMCLK_PWM1_XX_XX, 0}, + {PA29_I2SSCLK_PWM2_XX_XX, 0}, + {PA30_I2SWSCLK_PWM3_XX_XX, 0}, + {PA31_I2SSDA__SCL0_PWM4_XX, 0}, + {PB0_ADC0_SDA0_PWM5_XX, 1}, + {PB1_ADC1_SCL1_USISCLK_XX, 1}, + {PB2_ADC2_SDA1_USISD0_XX, 1}, + {PB3_ADC3_SPI1CLK_USISD1_XX, 1}, + {PB4_ADC4_SPI1TX_USINSS_XX, 1}, + {PB5_ADC5_SPI1RX_USISCLK_XX, 1}, + {PB6_ADC6_SPI1CS0_USISD0_XX, 1}, + {PB7_ADC7_SPI1CS1_USISD1_XX, 1}, + {PB8_PWMTRIG0_SPI1CS2_USINSS_XX, 1}, + {PB9_PWMTRIG1_CTS3_XX_XX, 1}, + {PB10_PWMFAULT_RTS3_XX_XX, 1} +}; + +int32_t target_gpio_port_init(port_name_t port, uint32_t *base, uint32_t *irq, uint32_t *pin_num) +{ + int i; + + for (i = 0; i < CONFIG_GPIO_NUM; i++) { + if (sg_gpio_config[i].port == port) { + *base = sg_gpio_config[i].base; + *irq = sg_gpio_config[i].irq; + *pin_num = sg_gpio_config[i].pin_num; + return i; + } + } + + return -1; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_gpio_count() + \brief get gpio instance. + \return pointer to gpio instance +*/ +int32_t target_gpio_pin_init(pin_t gpio_pin, uint32_t *port_idx) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_gpio_pin_map) / sizeof(gpio_pin_map_t); idx++) { + if (s_gpio_pin_map[idx].gpio_pin == gpio_pin) { + *port_idx = s_gpio_pin_map[idx].cfg_idx; + /*pinmux*/ + pin_mux(s_gpio_pin_map[idx].gpio_pin, 0xff); + if (idx >= 32) { + return idx-32; + } + return idx; + } + } + + return -1; +} + +#endif + +#if CONFIG_AES +struct { + uint32_t base; + uint32_t irq; +} +const sg_aes_config[CONFIG_AES_NUM] = { + {CSKY_AES_BASE, AES_IRQn} +}; + +/** + \brief get aes instance count. + \return aes instance count +*/ +int32_t target_get_aes_count(void) +{ + return CONFIG_AES_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_aes_count() + \brief get aes instance. + \return pointer to aes instance +*/ +int32_t target_get_aes(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_aes_count()) { + return NULL; + } + + *base = sg_aes_config[idx].base; + *irq = sg_aes_config[idx].irq; + return idx; +} + +#endif + + +#if CONFIG_RSA +struct { + uint32_t base; + uint32_t irq; +} +const sg_rsa_config[CONFIG_RSA_NUM] = { + {CSKY_RSA_BASE, RSA_IRQn} +}; + +/** + \brief get rsa instance count. + \return rsa instance count +*/ +int32_t target_get_rsa_count(void) +{ + return CONFIG_RSA_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_rsa_count() + \brief get rsa instance. + \return pointer to rsa instance +*/ +int32_t target_get_rsa(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_rsa_count()) { + return NULL; + } + + *base = sg_rsa_config[idx].base; + *irq = sg_rsa_config[idx].irq; + return idx; +} + +#endif + +#if CONFIG_RTC +struct { + uint32_t base; + uint32_t irq; +} +const sg_rtc_config[CONFIG_RTC_NUM] = { + {CSKY_RTC_BASE, RTC_IRQn} +}; + +int32_t target_get_rtc_count(void) +{ + return CONFIG_RTC_NUM; +} + +int32_t target_get_rtc(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_rtc_count()) { + return NULL; + } + + *base = sg_rtc_config[idx].base; + *irq = sg_rtc_config[idx].irq; + return idx; +} + +#endif + +#if CONFIG_SPI +struct { + uint32_t base; + uint32_t irq; +} + +const sg_spi_config[CONFIG_SPI_NUM] = { + {CSKY_SPI0_BASE, SPI0_IRQn}, + {CSKY_SPI1_BASE, SPI1_IRQn} +}; +typedef struct { + pin_t mosi; + pin_t miso; + pin_t sclk; + pin_t ssel; + uint32_t cfg_idx; //idx of sg_iic_config[] + uint16_t function; +} spi_pin_map_t; +const static spi_pin_map_t s_spi_pin_map[] = { + { + PA7_SPI0TX_PWMTRIG1_SDA0_XX, + PA8_SPI0RX_TRIGFAULT_SCL1_XX, + PA6_SPI0CLK_PWMTRIG0_SCL0_XX, + PA9_SPI0CS_PWM0_SDA1_XX, + 0, + 0 + }, + { + PA17_SPI1TX_PWMFAULT_XX_XX, + PA18_SPI1RX_PWM0_XX_XX, + PA16_SPI1CLK_PWMTRIG1_XX_XX, + PA19_SPI1CS0_PWM1_XX_XX, + 1, + 0 + }, + { + PA13_RTS1_PWM4_SPI1TX_XX, + PA14_SCL1_PWM5_SPI1RX_XX, + PA12_CTS1_PWM3_SPI1CLK_XX, + PA15_SDA1_PWMTRIG0_SPI1CS0_XX, + 1, + 2 + }, + { + PB4_ADC4_SPI1TX_USINSS_XX, + PB5_ADC5_SPI1RX_USISCLK_XX, + PB3_ADC3_SPI1CLK_USISD1_XX, + PB6_ADC6_SPI1CS0_USISD0_XX, + 1, + 1 + } +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_spi_count() + \brief get spi instance. + \return pointer to spi instance +*/ +int32_t target_spi_init(pin_t mosi, pin_t miso, pin_t sclk, pin_t ssel, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_spi_pin_map) / sizeof(spi_pin_map_t); idx++) { + if (s_spi_pin_map[idx].mosi == mosi && s_spi_pin_map[idx].miso == miso + && s_spi_pin_map[idx].sclk == sclk && s_spi_pin_map[idx].ssel == ssel) { + *base = sg_spi_config[s_spi_pin_map[idx].cfg_idx].base; + *irq = sg_spi_config[s_spi_pin_map[idx].cfg_idx].irq; + /*pinmux*/ + pin_mux(s_spi_pin_map[idx].mosi, s_spi_pin_map[idx].function); + pin_mux(s_spi_pin_map[idx].miso, s_spi_pin_map[idx].function); + pin_mux(s_spi_pin_map[idx].sclk, s_spi_pin_map[idx].function); + pin_mux(s_spi_pin_map[idx].ssel, s_spi_pin_map[idx].function); + + return s_spi_pin_map[idx].cfg_idx; + } + } + + return -1; + +} + +#endif + +#if CONFIG_WDT +struct { + uint32_t base; + uint32_t irq; +} +const sg_wdt_config[CONFIG_WDT_NUM] = { + {CSKY_WDT_BASE, WDT_IRQn} +}; + +int32_t target_get_wdt_count(void) +{ + return CONFIG_WDT_NUM; +} + +int32_t target_get_wdt(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_wdt_count()) { + return NULL; + } + + *base = sg_wdt_config[idx].base; + *irq = sg_wdt_config[idx].irq; + return idx; +} +#endif + + +#if CONFIG_SHA +struct { + uint32_t base; + uint32_t irq; +} +const sg_sha_config[CONFIG_SHA_NUM] = { + {CSKY_SHA_BASE, SHA_IRQn} +}; + +/** + \brief get sha instance count. + \return sha instance count +*/ +int32_t target_get_sha_count(void) +{ + return CONFIG_SHA_NUM; +} + +/** + \param[in] instance idx, must not exceed return value of target_get_sha_count() + \brief get sha instance. + \return pointer to sha instance +*/ +int32_t target_get_sha(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_sha_count()) { + return NULL; + } + + *base = sg_sha_config[idx].base; + *irq = sg_sha_config[idx].irq; + return idx; +} + +#endif + +#if CONFIG_PWM +struct { + uint32_t base; + uint32_t irq; +} +const sg_pwm_config[CONFIG_PWM_NUM] = { + {CSKY_PWM_BASE, PWM_IRQn}, +}; + +typedef struct { + pin_t pwm_pin; + uint32_t cfg_idx; //idx of sg_pwm_config[] + uint32_t ch_num; + uint16_t function; +} pwm_pin_map_t; +const static pwm_pin_map_t s_pwm_pin_map[] = { + {PA0_TXD0_PWM0_XX_SIROUT0, 0, 0, 1}, + {PA9_SPI0CS_PWM0_SDA1_XX, 0, 0, 1}, + {PA18_SPI1RX_PWM0_XX_XX, 0, 0, 1}, + {PA27_RXD3_PWM0_XX_SIRIN3, 0, 0, 1}, + + {PA1_RXD0_PWM1_XX_SIRIN0, 0, 1, 1}, + {PA10_TXD1_PWM1_XX_SIROUT1, 0, 1, 1}, + {PA19_SPI1CS0_PWM1_XX_XX, 0, 1, 1}, + {PA28_I2SMCLK_PWM1_XX_XX, 0, 1, 1}, + + {PA2_CTS0_PWM2_SPI0CLK_XX, 0, 2, 1}, + {PA11_RXD1_PWM2_XX_SIRIN1, 0, 2, 1}, + {PA20_SPI1CS1_PWM2_XX_XX, 0, 2, 1}, + {PA29_I2SSCLK_PWM2_XX_XX, 0, 2, 1}, + + {PA3_RTS0_PWM3_SPI0TX_XX, 0, 3, 1}, + {PA12_CTS1_PWM3_SPI1CLK_XX, 0, 3, 1}, + {PA21_SPI1CS2_PWM3_XX_XX, 0, 3, 1}, + {PA30_I2SWSCLK_PWM3_XX_XX, 0, 3, 1}, + + {PA4_SCL0_PWM4_SPI0RX_XX, 0, 4, 1}, + {PA13_RTS1_PWM4_SPI1TX_XX, 0, 4, 1}, + {PA22_RXD2_PWM4_XX_SIRIN2, 0, 4, 1}, + {PA31_I2SSDA__SCL0_PWM4_XX, 0, 4, 1}, + + {PA5_SDA0_PWM5_SPI0CS_XX, 0, 5, 1}, + {PA14_SCL1_PWM5_SPI1RX_XX, 0, 5, 1}, + {PA23_TXD2_PWM5_XX_SIROUT2, 0, 5, 1}, + {PB0_ADC0_SDA0_PWM5_XX, 0, 5, 1}, +}; + +/** + \param[in] instance idx, must not exceed return value of target_get_pwm_count() + \brief get pwm instance. + \return pointer to pwm instance +*/ +int32_t target_pwm_init(pin_t pwm_pin, uint32_t *ch_num, uint32_t *base, uint32_t *irq) +{ + uint32_t idx; + + for (idx = 0; idx < sizeof(s_pwm_pin_map) / sizeof(pwm_pin_map_t); idx++) { + if (s_pwm_pin_map[idx].pwm_pin == pwm_pin) { + *base = sg_pwm_config[s_pwm_pin_map[idx].cfg_idx].base; + *irq = sg_pwm_config[s_pwm_pin_map[idx].cfg_idx].irq; + *ch_num = s_pwm_pin_map[idx].ch_num; + /*pinmux*/ + pin_mux(s_pwm_pin_map[idx].pwm_pin, s_pwm_pin_map[idx].function); + return s_pwm_pin_map[idx].cfg_idx; + } + } + + return -1; + +} + + +#endif + + +#if CONFIG_DMAC +struct { + uint32_t base; + uint32_t irq; +} +const sg_dmac_config[CONFIG_DMAC_NUM] = { + {CSKY_DMA_BASE, DMAC_IRQn}, +}; + +int32_t target_get_dmac_count(void) +{ + return CONFIG_DMAC_NUM; +} + +int32_t target_get_dmac(int32_t idx, uint32_t *base, uint32_t *irq) +{ + if (idx >= target_get_dmac_count()) { + return NULL; + } + + *base = sg_dmac_config[idx].base; + *irq = sg_dmac_config[idx].irq; + return idx; +} +#endif + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/pin_name.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/pin_name.h new file mode 100644 index 000000000..4e29fdbbc --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/pin_name.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file pn_name.h + * @brief header file for the pin_name + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _PINNAMES_H +#define _PINNAMES_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef enum { + PA0_TXD0_PWM0_XX_SIROUT0 = 0, + PA1_RXD0_PWM1_XX_SIRIN0, + PA2_CTS0_PWM2_SPI0CLK_XX, + PA3_RTS0_PWM3_SPI0TX_XX, + PA4_SCL0_PWM4_SPI0RX_XX, + PA5_SDA0_PWM5_SPI0CS_XX, + PA6_SPI0CLK_PWMTRIG0_SCL0_XX, + PA7_SPI0TX_PWMTRIG1_SDA0_XX, + PA8_SPI0RX_TRIGFAULT_SCL1_XX, + PA9_SPI0CS_PWM0_SDA1_XX, + PA10_TXD1_PWM1_XX_SIROUT1, + PA11_RXD1_PWM2_XX_SIRIN1, + PA12_CTS1_PWM3_SPI1CLK_XX, + PA13_RTS1_PWM4_SPI1TX_XX, + PA14_SCL1_PWM5_SPI1RX_XX, + PA15_SDA1_PWMTRIG0_SPI1CS0_XX, + PA16_SPI1CLK_PWMTRIG1_XX_XX, + PA17_SPI1TX_PWMFAULT_XX_XX, + PA18_SPI1RX_PWM0_XX_XX, + PA19_SPI1CS0_PWM1_XX_XX, + PA20_SPI1CS1_PWM2_XX_XX, + PA21_SPI1CS2_PWM3_XX_XX, + PA22_RXD2_PWM4_XX_SIRIN2, + PA23_TXD2_PWM5_XX_SIROUT2, + PA24_CTS2_PWMTRIG0_SPI1CS1_XX, + PA25_XX_PWMTRIG1_SPI1CS2_XX, + PA26_TXD3_PWMFAULT_XX_SIROUT3, + PA27_RXD3_PWM0_XX_SIRIN3, + PA28_I2SMCLK_PWM1_XX_XX, + PA29_I2SSCLK_PWM2_XX_XX, + PA30_I2SWSCLK_PWM3_XX_XX, + PA31_I2SSDA__SCL0_PWM4_XX, + PB0_ADC0_SDA0_PWM5_XX, + PB1_ADC1_SCL1_USISCLK_XX, + PB2_ADC2_SDA1_USISD0_XX, + PB3_ADC3_SPI1CLK_USISD1_XX, + PB4_ADC4_SPI1TX_USINSS_XX, + PB5_ADC5_SPI1RX_USISCLK_XX, + PB6_ADC6_SPI1CS0_USISD0_XX, + PB7_ADC7_SPI1CS1_USISD1_XX, + PB8_PWMTRIG0_SPI1CS2_USINSS_XX, + PB9_PWMTRIG1_CTS3_XX_XX, + PB10_PWMFAULT_RTS3_XX_XX +} +pin_name_t; + +typedef enum { + PORTA = 0, + PORTB = 1 +} port_name_t; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/pinmux.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/pinmux.h new file mode 100644 index 000000000..9e3b48dfa --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/pinmux.h @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file pinmux.h + * @brief Header file for the pinmux + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef PHOBOS_PINMUX_H +#define PHOBOS_PINMUX_H + +#include +#include "pin_name.h" + +void phobos_ioreuse_initial(void); +int32_t pin_mux(pin_name_t pin, uint16_t function); + +/* IOMUX0L function definition */ +#define PA0_UART0_TX 0x00000000 +#define PA0_PWM_CH0 0x00000001 +#define PA0_UART0_SIROUT 0x00000003 +#define PA1_UART0_RX 0x00000000 +#define PA1_PWM_CH1 0x00000004 +#define PA1_UART0_SIRIN 0x0000000C +#define PA2_UART0_CTS 0x00000000 +#define PA2_PWM_CH2 0x00000010 +#define PA2_SPI0_CLK 0x00000020 +#define PA3_UART0_TRS 0x00000000 +#define PA3_PWM_CH3 0x00000040 +#define PA3_SPI0_TX 0x00000080 +#define PA4_I2C0_SCL 0x00000000 +#define PA4_PWM_CH4 0x00000100 +#define PA4_SPI0_RX 0x00000200 +#define PA5_I2C0_SDA 0x00000000 +#define PA5_PWM_CH5 0x00000400 +#define PA5_SPI0_CS 0x00000800 +#define PA6_SPI0_CLK 0x00000000 +#define PA6_ETB_TRIG0 0x00001000 +#define PA6_I2C0_SCL 0x00002000 +#define PA7_SPI_TX 0x00000000 +#define PA7_ETB_TRIG1 0x00004000 +#define PA7_I2C0_SDA 0x00008000 +#define PA8_SPI0_TX 0x00000000 +#define PA8_PWM_FAULT 0x00010000 +#define PA8_I2C1_SCL 0x00020000 +#define PA9_SPI0_CS 0x00000000 +#define PA9_PWM_CH0 0x00040000 +#define PA9_I2C1_SDA 0x00080000 +#define PA10_UART1_TX 0x00000000 +#define PA10_PWM_CH1 0x00100000 +#define PA10_UART1_SIROUT 0x00300000 +#define PA11_UART1_RX 0x00000000 +#define PA11_PWM_CH2 0x00400000 +#define PA11_UART1_SIRIN 0x00C00000 +#define PA12_UART1_CTS 0x00000000 +#define PA12_PWM_CH3 0x01000000 +#define PA12_SPI1_CLK 0x02000000 +#define PA13_UART1_RTS 0x00000000 +#define PA13_PWM_CH4 0x04000000 +#define PA13_SPI1_TX 0x08000000 +#define PA14_I2C1_SCL 0x00000000 +#define PA14_PWM_CH5 0x10000000 +#define PA14_SPI1_RX 0x20000000 +#define PA15_I2C1_SDA 0x00000000 +#define PA15_ETB_TRIG0 0x40000000 +#define PA15_SPI1_CS0 0x80000000 + +/* IOMUX0H function definition */ +#define PA16_SPI1_CLK 0x00000000 +#define PA16_ETB_TRIG1 0x00000001 +#define PA17_SPI1_TX 0x00000000 +#define PA17_PWM_FAULT 0x00000004 +#define PA18_SPI1_RX 0x00000000 +#define PA18_PWM_CH0 0x00000010 +#define PA19_SPI1_CS0 0x00000000 +#define PA19_PWM_CH1 0x00000040 +#define PA20_UART2_RX 0x00000000 +#define PA20_PWM_CH2 0x00000100 +#define PA21_SPI1_CS2 0x00000000 +#define PA21_PWM_CH3 0x00000400 +#define PA22_UART2_RX 0x00000000 +#define PA22_PWM_CH4 0x00001000 +#define PA22_UART2_SIRI 0x00003000 +#define PA23_UART2_TX 0x00000000 +#define PA23_PWM_CH5 0x00004000 +#define PA23_UART2_SIROUT 0x0000C000 +#define PA24_UART2_CTS 0x00000000 +#define PA24_ETB_TRIG0 0x00010000 +#define PA24_SPI1_CS1 0x00020000 +#define PA25_UART2_RTS 0x00000000 +#define PA25_ETB_TRIG1 0x00040000 +#define PA25_SPI1_CS2 0x00080000 +#define PA26_UART3_TX 0x00000000 +#define PA26_PWM_FAULT 0x00100000 +#define PA26_UART3_SIROUT 0x00300000 +#define PA27_UART3_RX 0x00000000 +#define PA27_PWM_CH0 0x00400000 +#define PA27_UART3_SIRIN 0x00C00000 +#define PA28_I2S_MCLK 0x00000000 +#define PA28_PWM_CH1 0x01000000 +#define PA29_I2S_SCLK 0x00000000 +#define PA29_PWM_CH2 0x04000000 +#define PA30_I2S_WSCLK 0x00000000 +#define PA30_PWM_CH3 0x10000000 +#define PA31_I2S_SDA 0x00000000 +#define PA31_I2C0_SCL 0x40000000 +#define PA31_PWM_CH4 0x80000000 + +/* IOMUX1L function definition */ +#define PB0_ADC0 0x00000000 +#define PB0_I2C0_SDA 0x00000001 +#define PB0_PWM_CH5 0x00000002 +#define PB1_ADC1 0x00000000 +#define PB1_I2C1_SCL 0x00000004 +#define PB1_USI_SCLK 0x00000008 +#define PB2_ADC2 0x00000000 +#define PB2_I2C1_SDA 0x00000010 +#define PB2_USI_SD0 0x00000020 +#define PB3_ADC3 0x00000000 +#define PB3_SPI1_CLK 0x00000040 +#define PB3_USI_SD1 0x00000080 +#define PB4_ADC4 0x00000000 +#define PB4_SPI1_TX 0x00000100 +#define PB4_USI_NSS 0x00000200 +#define PB5_ADC5 0x00000000 +#define PB5_SPI1_RX 0x00000400 +#define PB5_USI_SCLK 0x00000800 +#define PB6_ADC6 0x00000000 +#define PB6_SPI1_CS0 0x00001000 +#define PB6_USI_SD0 0x00002000 +#define PB7_ADC7 0x00000000 +#define PB7_SPI1_CS1 0x00004000 +#define PB7_USI_SD1 0x00008000 +#define PB8_ETB_TRIG0 0x00000000 +#define PB8_SPI1_CS2 0x00010000 +#define PB8_USI_NSS 0x00020000 +#define PB9_ETB_TRIG1 0x00000000 +#define PB9_UART3_CTS 0x00040000 +#define PB10_PWM_FAULT 0x00000000 +#define PB10_UART3_RTS 0x00100000 + + +/* flag as identification */ +#define GPIO_SET_BIT0 0x00000001 +#define GPIO_SET_BIT1 0x00000002 +#define GPIO_SET_BIT2 0x00000004 +#define GPIO_SET_BIT3 0x00000008 +#define GPIO_SET_BIT4 0x00000010 +#define GPIO_SET_BIT5 0x00000020 +#define GPIO_SET_BIT6 0x00000040 +#define GPIO_SET_BIT7 0x00000080 +#define GPIO_SET_BIT8 0x00000100 +#define GPIO_SET_BIT9 0x00000200 +#define GPIO_SET_BIT10 0x00000400 +#define GPIO_SET_BIT11 0x00000800 +#define GPIO_SET_BIT12 0x00001000 +#define GPIO_SET_BIT13 0x00002000 +#define GPIO_SET_BIT14 0x00004000 +#define GPIO_SET_BIT15 0x00008000 +#define GPIO_SET_BIT16 0x00010000 +#define GPIO_SET_BIT17 0x00020000 +#define GPIO_SET_BIT18 0x00040000 +#define GPIO_SET_BIT19 0x00080000 +#define GPIO_SET_BIT20 0x00100000 +#define GPIO_SET_BIT21 0x00200000 +#define GPIO_SET_BIT22 0x00400000 +#define GPIO_SET_BIT23 0x00800000 +#define GPIO_SET_BIT24 0x01000000 +#define GPIO_SET_BIT25 0x02000000 +#define GPIO_SET_BIT26 0x04000000 +#define GPIO_SET_BIT27 0x08000000 +#define GPIO_SET_BIT28 0x10000000 +#define GPIO_SET_BIT29 0x20000000 +#define GPIO_SET_BIT30 0x40000000 +#define GPIO_SET_BIT31 0x80000000 + +/****************************************************************************** + * phobos gpio control and gpio reuse function + * selecting regester adddress + ******************************************************************************/ + +#define PHOBOS_GIPO0_PORTCTL_REG 0x50018008 +#define PHOBOS_GIPO1_PORTCTL_REG 0x60018008 +#define PHOBOS_IOMUX0L_REG 0x50018100 +#define PHOBOS_IOMUX0H_REG 0x50018104 +#define PHOBOS_IOMUX1L_REG 0x50018108 + +/*************basic gpio reuse v1.0******************************************** + * UART0(PA0,PA1) + * UART1(PA10,PA11) + * UART2(PA22,PA23) + * UART3(PA26,PA27) + * IIS(PA24,PA25,PA26,PA27) + * SPI1(PA16,PA17,PA18) + * IIC0(PA4,PA5) + ******************************************************************************/ +#define GPIO0_REUSE_EN (GPIO_SET_BIT0|GPIO_SET_BIT1|GPIO_SET_BIT4|GPIO_SET_BIT5|GPIO_SET_BIT6|GPIO_SET_BIT9|GPIO_SET_BIT10|GPIO_SET_BIT11|GPIO_SET_BIT16|GPIO_SET_BIT17|GPIO_SET_BIT18|GPIO_SET_BIT22|GPIO_SET_BIT23|GPIO_SET_BIT26|GPIO_SET_BIT27) +#define GPIO1_REUSE_EN (GPIO_SET_BIT0) +#define IOMUX0L_FUNCTION_SEL (PA0_UART0_TX|PA1_UART0_RX|PA4_I2C0_SCL|PA5_I2C0_SDA|PA6_ETB_TRIG0|PA9_PWM_CH0|PA10_UART1_TX|PA11_UART1_RX) +#define IOMUX0H_FUNCTION_SEL (PA16_SPI1_CLK|PA17_SPI1_TX|PA18_SPI1_RX|PA22_UART2_RX|PA23_UART2_TX|PA26_UART3_TX|PA27_UART3_RX) +#define IOMUX1L_FUNCTION_SEL (PB0_ADC0) + +#define PWM_GPIO0_REUSE_EN (GPIO0_REUSE_EN|GPIO_SET_BIT0|GPIO_SET_BIT1|GPIO_SET_BIT2|GPIO_SET_BIT12|GPIO_SET_BIT13|GPIO_SET_BIT14) +#define PWM_IOMUX0L_FUNCTION_SEL (IOMUX0L_FUNCTION_SEL|PA0_PWM_CH0|PA1_PWM_CH1|PA2_PWM_CH2|PA12_PWM_CH3|PA13_PWM_CH4|PA14_PWM_CH5) + +#endif /* PHOBOS_PINMUX_H */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/soc.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/soc.h new file mode 100644 index 000000000..1c0023127 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/include/soc.h @@ -0,0 +1,327 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/**************************************************************************//** + * @file soc.h + * @brief CSI Core Peripheral Access Layer Header File for + * CSKYSOC Device Series + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + + +#ifndef SOC_H +#define SOC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SYSTEM_CLOCK +#define SYSTEM_CLOCK (20000000) +#endif +/* ------------------------- Interrupt Number Definition ------------------------ */ + +typedef enum IRQn +{ + /* ---------------------- CSKYCK801 Specific Interrupt Numbers --------------------- */ + GPIOA_IRQn = 0, + CORET_IRQn = 1, /* core Timer Interrupt */ + TIMA0_IRQn = 2, /* timerA0 Interrupt */ + TIMA1_IRQn = 3, /* timerA1 Interrupt */ + WDT_IRQn = 5, /* wdt Interrupt */ + UART0_IRQn = 6, /* uart0 Interrupt */ + UART1_IRQn = 7, /* uart1 Interrupt */ + UART2_IRQn = 8, /* uart2 Interrupt */ + I2C0_IRQn = 9, /* i2c0 Interrupt */ + I2C1_IRQn = 10, /* i2c1 Interrupt */ + SPI1_IRQn = 11, /* spi0 Interrupt */ + SPI0_IRQn = 12, /* spi1 Interrupt */ + RTC_IRQn = 13, /* rtc Interrupt */ + EXTWAK_IRQn = 14, /* extwakeup Interrupt */ + DMAC_IRQn = 17, /* dmac Interrupt */ + PMU_IRQn = 18, /* pmu Interrupt */ + PWM_IRQn = 19, /* pwm Interrupt */ + UART3_IRQn = 21, /* uart3 Interrupt */ + TIMB0_IRQn = 23, /* timerB0 Interrupt */ + TIMB1_IRQn = 24, /* timerB1 Interrupt */ + GPIOB_IRQn = 27, /* GPIOB Interrupt */ + AES_IRQn = 26, /* aes Interrupt */ + RSA_IRQn = 28, /* rsa Interrupt */ + SHA_IRQn = 29, /* sha Interrupt */ + +} +IRQn_Type; + + +/* ================================================================================ */ +/* ================ Processor and Core Peripheral Section ================ */ +/* ================================================================================ */ + +/* -------- Configuration of the CK801 Processor and Core Peripherals ------- */ +#define __CK802_REV 0x0000U /* Core revision r0p0 */ +#define __MGU_PRESENT 0 /* MGU present or not */ +#define __NVIC_PRIO_BITS 2 /* Number of Bits used for Priority Levels */ +#define __Vendor_SysTickConfig 0 /* Set to 1 if different SysTick Config is used */ + +#include "core_ck802.h" /* Processor and core peripherals */ +#include "stdint.h" + +typedef enum { + CKENUM_DMA_UART0_RX, + CKENUM_DMA_UART0_TX, + CKENUM_DMA_UART1_RX, + CKENUM_DMA_UART1_TX, + CKENUM_DMA_ADC_RX, + CKENUM_DMA_ADC_TX, + CKENUM_DMA_SPI1_RX, + CKENUM_DMA_SPI1_TX, + CKENUM_DMA_SPI0_RX, + CKENUM_DMA_SPI0_TX, + CKENUM_DMA_IIC_RX, + CKENUM_DMA_IIC_TX, + CKENUM_DMA_IIC1_RX, + CKENUM_DMA_IIC1_TX, + CKENUM_DMA_IIS_RX, + CKENUM_DMA_IIS_TX, + CKENUM_DMA_MEMORY +} ckenum_dma_device_e; + +/* ================================================================================ */ +/* ================ Device Specific Peripheral Section ================ */ +/* ================================================================================ */ +#if 0 + +/* ================================================================================ */ +/* ============== Universal Asyncronous Receiver / Transmitter (UART) ============= */ +/* ================================================================================ */ +typedef struct { + union { + __IM uint32_t RBR; /* Offset: 0x000 (R/ ) Receive buffer register */ + __OM uint32_t THR; /* Offset: 0x000 ( /W) Transmission hold register */ + __IOM uint32_t DLL; /* Offset: 0x000 (R/W) Clock frequency division low section register */ + }; + union { + __IOM uint32_t DLH; /* Offset: 0x004 (R/W) Clock frequency division high section register */ + __IOM uint32_t IER; /* Offset: 0x004 (R/W) Interrupt enable register */ + }; + __IM uint32_t IIR; /* Offset: 0x008 (R/ ) Interrupt indicia register */ + __IOM uint32_t LCR; /* Offset: 0x00C (R/W) Transmission control register */ + __IOM uint32_t MCR; /* Offset: 0x010 (R/W) Modem control register */ + __IM uint32_t LSR; /* Offset: 0x014 (R/ ) Transmission state register */ + __IM uint32_t MSR; /* Offset: 0x018 (R/ ) Modem state register */ + uint32_t RESERVED1[24]; + __IM uint32_t USR; /* Offset: 0x07c (R/ ) UART state register */ +} CSKY_UART_TypeDef; + + +/* ================================================================================ */ +/* ============== Inter-Integrated Circuit (IIC) ============= */ +/* ================================================================================ */ +typedef struct { + __IOM uint32_t IC_CON; /* Offset: 0x000 (R/W) Receive buffer register */ + __IOM uint32_t IC_TAR; /* Offset: 0x004 (R/W) Transmission hold register */ + __IOM uint32_t IC_SAR; /* Offset: 0x008 (R/W) Clock frequency division low section register */ + __IOM uint32_t IC_HS_MADDR; /* Offset: 0x00c (R/W) Clock frequency division high section register */ + __IOM uint32_t IC_DATA_CMD; /* Offset: 0x010 (R/W) Interrupt enable register */ + __IOM uint32_t IC_SS_SCL_HCNT; /* Offset: 0x014 (R/W) Interrupt indicia register */ + __IOM uint32_t IC_SS_SCL_LCNT; /* Offset: 0x018 (R/W) Transmission control register */ + __IOM uint32_t IC_FS_SCL_HCNT; /* Offset: 0x01c (R/W) Modem control register */ + __IOM uint32_t IC_FS_SCL_LCNT; /* Offset: 0x020 (R/W) Transmission state register */ + __IOM uint32_t IC_HS_SCL_HCNT; /* Offset: 0x024 (R/W) Transmission state register */ + __IOM uint32_t IC_HS_SCL_LCNT; /* Offset: 0x028 (R/W) Transmission state register */ + __IOM uint32_t IC_INTR_STAT; /* Offset: 0x02c (R) Transmission state register */ + __IOM uint32_t IC_INTR_MASK; /* Offset: 0x030 (R/W) Transmission state register */ + __IOM uint32_t IC_RAW_INTR_STAT; /* Offset: 0x034 (R) Transmission state register */ + __IOM uint32_t IC_RX_TL; /* Offset: 0x038 (R/W) Transmission state register */ + __IOM uint32_t IC_TX_TL; /* Offset: 0x03c (R/W) Transmission state register */ + __IOM uint32_t IC_CLR_INTR; /* Offset: 0x040 (R) Transmission state register */ + __IOM uint32_t IC_CLR_RX_UNDER; /* Offset: 0x044 (R) Transmission state register */ + __IOM uint32_t IC_CLR_RX_OVER; /* Offset: 0x048 (R) Transmission state register */ + __IOM uint32_t IC_CLR_TX_OVER; /* Offset: 0x04c (R) Transmission state register */ + __IOM uint32_t IC_CLR_RD_REQ; /* Offset: 0x050 (R) Transmission state register */ + __IOM uint32_t IC_CLR_TX_ABRT; /* Offset: 0x054 (R) Transmission state register */ + __IOM uint32_t IC_CLR_RX_DONE; /* Offset: 0x058 (R) Transmission state register */ + __IOM uint32_t IC_CLR_ACTIVITY; /* Offset: 0x05c (R) Transmission state register */ + __IOM uint32_t IC_CLR_STOP_DET; /* Offset: 0x060 (R) Transmission state register */ + __IOM uint32_t IC_CLR_START_DET; /* Offset: 0x064 (R) Transmission state register */ + __IOM uint32_t IC_CLR_GEN_CALL; /* Offset: 0x068 (R) Transmission state register */ + __IOM uint32_t IC_ENABLE; /* Offset: 0x06c (R/W) Transmission state register */ + __IOM uint32_t IC_STATUS; /* Offset: 0x070 (R) Transmission state register */ + __IOM uint32_t IC_TXFLR; /* Offset: 0x074 (R) Transmission state register */ + __IOM uint32_t IC_RXFLR; /* Offset: 0x078 (R) Transmission state register */ + uint32_t RESERVED; /* Offset: 0x014 (R/ ) Transmission state register */ + __IOM uint32_t IC_TX_ABRT_SOURCE; /* Offset: 0x080 (R/W) Transmission state register */ + __IOM uint32_t IC_SAR1; /* Offset: 0x084 (R/W) Transmission state register */ + __IOM uint32_t IC_DMA_CR; /* Offset: 0x088 (R/W) Transmission state register */ + __IOM uint32_t IC_DMA_TDLR; /* Offset: 0x08c (R/W) Transmission state register */ + __IOM uint32_t IC_DMA_RDLR; /* Offset: 0x090 (R/W) Transmission state register */ + __IOM uint32_t IC_SAR2; /* Offset: 0x094 (R/W) Transmission state register */ + __IOM uint32_t IC_SAR3; /* Offset: 0x098 (R/W) Transmission state register */ + __IOM uint32_t IC_MULTI_SLAVE; /* Offset: 0x09c (R/W) Transmission state register */ + __IOM uint32_t IC_GEN_CALL_EN; /* Offset: 0x0a0 (R/W) Transmission state register */ + +} CSKY_IIC_TypeDef; + + +/* ================================================================================ */ +/* ============== TIMER ============= */ +/* ================================================================================ */ +typedef struct { + __IOM uint32_t TxLoadCount; /* Offset: 0x000 (R/W) Receive buffer register */ + __IOM uint32_t TxCurrentValue; /* Offset: 0x004 (R) Transmission hold register */ + __IOM uint32_t TxControl; /* Offset: 0x008 (R/W) Clock frequency division low section register */ + __IOM uint32_t TxEOI; /* Offset: 0x00c (R) Clock frequency division high section register */ + __IOM uint32_t TxIntStatus; /* Offset: 0x010 (R) Interrupt enable register */ + +} CSKY_TIMER_TypeDef; + +/* ================================================================================ */ +/* ============== TIMER Control ============= */ +/* ================================================================================ */ +typedef struct { + __IOM uint32_t TimersIntStatus; /* Offset: 0x000 (R) Interrupt indicia register */ + __IOM uint32_t TimerEOI; /* Offset: 0x004 (R) Transmission control register */ + __IOM uint32_t TimerRawIntStatus; /* Offset: 0x008 (R) Modem control register */ + +} CSKY_TIMER_Control_TypeDef; + + +/* ================================================================================ */ +/* ============== GPIO ============= */ +/* ================================================================================ */ +typedef struct { + __IOM uint32_t SWPORT_DR; /* Offset: 0x000 (R/W) Interrupt indicia register */ + __IOM uint32_t SWPORT_DDR; /* Offset: 0x004 (R/W) Interrupt indicia register */ + __IOM uint32_t PORT_CTL; /* Offset: 0x008 (R/W) Interrupt indicia register */ +} CKStruct_GPIO, *PCKStruct_GPIO; + +typedef struct { + __IOM uint32_t SHA_CON; /* Offset: 0x000 (R/W) Control register */ + __IOM uint32_t SHA_INTSTATE; /* Offset: 0x004 (R/W) Instatus register */ + __IOM uint32_t SHA_H0L; /* Offset: 0x008 (R/W) H0L register */ + __IOM uint32_t SHA_H1L; /* Offset: 0x00c (R/W) H1L register */ + __IOM uint32_t SHA_H2L; /* Offset: 0x010 (R/W) H2L register */ + __IOM uint32_t SHA_H3L; /* Offset: 0x014 (R/W) H3L register */ + __IOM uint32_t SHA_H4L; /* Offset: 0x018 (R/W) H4L register */ + __IOM uint32_t SHA_H5L; /* Offset: 0x01c (R/W) H5L register */ + __IOM uint32_t SHA_H6L; /* Offset: 0x020 (R/W) H6L register */ + __IOM uint32_t SHA_H7L; /* Offset: 0x024 (R/W) H7L register */ + __IOM uint32_t SHA_H0H; /* Offset: 0x028 (R/W) H0H register */ + __IOM uint32_t SHA_H1H; /* Offset: 0x02c (R/W) H1H register */ + __IOM uint32_t SHA_H2H; /* Offset: 0x030 (R/W) H2H register */ + __IOM uint32_t SHA_H3H; /* Offset: 0x034 (R/W) H3H register */ + __IOM uint32_t SHA_H4H; /* Offset: 0x038 (R/W) H4H register */ + __IOM uint32_t SHA_H5H; /* Offset: 0x03c (R/W) H5H register */ + __IOM uint32_t SHA_H6H; /* Offset: 0x040 (R/W) H6H register */ + __IOM uint32_t SHA_H7H; /* Offset: 0x044 (R/W) H7H register */ + __IOM uint32_t SHA_DATA1; /* Offset: 0x048 (R/W) DATA1 register */ + uint32_t REV[15]; + __IOM uint32_t SHA_DATA2; /* Offset: 0x088 (R/W) DATA2 register */ +} CSKY_SHA_TypeDef; + + +#endif + +#define CONFIG_CRC_NUM 1 +#define CONFIG_IIC_NUM 2 +#define CONFIG_TRNG_NUM 1 +#define CONFIG_EFLASH_NUM 1 +#define CONFIG_AES_NUM 1 +#define CONFIG_RSA_NUM 1 +#define CONFIG_SHA_NUM 1 +#define CONFIG_SPI_NUM 2 +#define CONFIG_PWM_NUM 1 +#define CONFIG_TIMER_NUM 4 +#define CONFIG_RTC_NUM 1 +#define CONFIG_WDT_NUM 1 +#define CONFIG_DMAC_NUM 1 +#define CONFIG_ETH_NUM 2 + +#define CSKY_I2C0_BASE (0x50014000UL) +#define CSKY_I2C1_BASE (0x60014000UL) + +#define CONFIG_USART_NUM 4 +#define CSKY_UART0_BASE (0x50010000UL) +#define CSKY_UART1_BASE (0x50010400UL) +#define CSKY_UART2_BASE (0x60010000UL) +#define CSKY_UART3_BASE (0x60010400UL) + +/* ================================================================================ */ +/* ================ Peripheral memory map ================ */ +/* ================================================================================ */ +/* -------------------------- CPU FPGA memory map ------------------------------- */ +#define CSKY_EFLASH_BASE (0x10000000UL) +#define CSKY_SRAM_BASE (0x20000000UL) + +#define CSKY_PMU_BASE (0x40000000UL) +#define CSKY_DMA_BASE (0x40001000UL) +#define CSKY_EFLASH_CONTROL_BASE (0x40005000UL) +#define CSKY_OTP_BASE (0x40006000UL) +#define CSKY_SRAM_CONTROL_BASE (0x40009000UL) +#define CSKY_AES_BASE (0x4000d000UL) +#define CSKY_SHA_BASE (0x4000e000UL) +#define CSKY_RSA_BASE (0x4000f000UL) +#define CSKY_CRC_BASE (0x40010000UL) +#define CSKY_TRNG_BASE (0x40015000UL) +#define CSKY_TIMERA0_BASE (0x50000000UL) +#define CSKY_TIMERA1_BASE (0x50000014UL) +#define CSKY_TIMERA_CONTROL_BASE (0x500000a0UL) +#define CSKY_RTC_BASE (0x50004000UL) +#define CSKY_WDT_BASE (0x50008000UL) +#define CSKY_SPI0_BASE (0x5000c000UL) + +#define SHA_CONTEXT_SIZE 224 + +#define CONFIG_GPIO_NUM 2 +#define CONFIG_GPIO_PIN_NUM 43 +#define CSKY_GPIOA_BASE (0x50018000UL) +#define CSKY_GPIOA_CONTROL_BASE (0x50018030UL) +#define CSKY_PWM_BASE (0x5001c000UL) +#define CSKY_ADC_BASE (0x50020000UL) +#define CSKY_I2S0_BASE (0x50030000UL) +#define CSKY_TIMERB0_BASE (0x60000000UL) +#define CSKY_TIMERB1_BASE (0x60000014UL) +#define CSKY_SPI1_BASE (0x6000c000UL) + +#define CSKY_GPIOB_BASE (0x60018000UL) +#define CSKY_GPIOB_CONTROL_BASE (0x60018030UL) +#define CSKY_TIMERB_CONTROL_BASE (0x600000a0UL) +#define CSKY_SIPC_BASE (0x6001c000UL) +#define CSKY_I2S1_BASE (0x60020000UL) +#define CSKY_ETB_BASE (0x60024000UL) +#define CSKY_USI_BASE (0x60028000UL) + + + +/* ================================================================================ */ +/* ================ Peripheral declaration ================ */ +/* ================================================================================ */ +#define CSKY_UART1 (( CSKY_UART_TypeDef *) CSKY_UART1_BASE) +#define CSKY_SHA (( CSKY_SHA_TypeDef *) CSKY_SHA_BASE) + +#include +#ifdef CONFIG_HAVE_VIC +#define ATTRIBUTE_ISR __attribute__((isr)) +#else +#define ATTRIBUTE_ISR +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* SOC_H */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/isr.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/isr.c new file mode 100644 index 000000000..94804eeb8 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/isr.c @@ -0,0 +1,216 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file isr.c + * @brief source file for the interrupt server route + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include "config.h" +#include "soc.h" +#ifndef CONFIG_KERNEL_NONE +#include +#endif + +extern void dw_usart_irqhandler(int32_t idx); +extern void dw_timer_irqhandler(int32_t idx); +extern void dw_gpio_irqhandler(int32_t idx); +extern void dw_iic_irqhandler(int32_t idx); +extern void ck_rtc_irqhandler(int32_t idx); +extern void dw_spi_irqhandler(int32_t idx); +extern void dw_wdt_irqhandler(int32_t idx); +extern void ck_dma_irqhandler(int32_t idx); +extern void ck_aes_irqhandler(int32_t idx); +extern void ck_sha_irqhandler(int32_t idx); + +#define readl(addr) \ + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; }) + +#ifndef CONFIG_KERNEL_NONE +#define CSI_INTRPT_ENTER() csi_kernel_intrpt_enter() +#define CSI_INTRPT_EXIT() csi_kernel_intrpt_exit() +#else +#define CSI_INTRPT_ENTER() +#define CSI_INTRPT_EXIT() +#endif + +ATTRIBUTE_ISR void CORET_IRQHandler(void) +{ + readl(0xE000E010); +} + +#if defined(CONFIG_USART) +ATTRIBUTE_ISR void USART0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USART1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(1); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USART2_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(2); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void USART3_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_usart_irqhandler(3); + CSI_INTRPT_EXIT(); +} + +#endif + +#if defined(CONFIG_TIMER) +ATTRIBUTE_ISR void TIMA0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void TIMA1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(1); + CSI_INTRPT_EXIT(); +} +ATTRIBUTE_ISR void TIMB0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(2); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void TIMB1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_timer_irqhandler(3); + CSI_INTRPT_EXIT(); +} + +#endif + +#if defined(CONFIG_GPIO) + +ATTRIBUTE_ISR void GPIOA_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_gpio_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void GPIOB_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_gpio_irqhandler(1); + CSI_INTRPT_EXIT(); +} +#endif + +#if defined(CONFIG_IIC) +ATTRIBUTE_ISR void I2C0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_iic_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void I2C1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_iic_irqhandler(1); + CSI_INTRPT_EXIT(); +} +#endif + +#if defined(CONFIG_RTC) + +ATTRIBUTE_ISR void RTC_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_rtc_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +#endif + +#if defined(CONFIG_AES) + +ATTRIBUTE_ISR void AES_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_aes_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +#endif + +#if defined(CONFIG_SHA) + +ATTRIBUTE_ISR void SHA_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_sha_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +#endif + +#if defined(CONFIG_SPI) && defined(CONFIG_GPIO) +ATTRIBUTE_ISR void SPI0_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_spi_irqhandler(0); + CSI_INTRPT_EXIT(); +} + +ATTRIBUTE_ISR void SPI1_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_spi_irqhandler(1); + CSI_INTRPT_EXIT(); +} +#endif + +#if defined(CONFIG_WDT) +ATTRIBUTE_ISR void WDT_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + dw_wdt_irqhandler(0); + CSI_INTRPT_EXIT(); +} +#endif + +#if defined(CONFIG_DMAC) +ATTRIBUTE_ISR void DMAC_IRQHandler(void) +{ + CSI_INTRPT_ENTER(); + ck_dma_irqhandler(0); + CSI_INTRPT_EXIT(); +} +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/pinmux.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/pinmux.c new file mode 100644 index 000000000..27cee1132 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/phobos/pinmux.c @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file pinmux.c + * @brief source file for the pinmux + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#include +#include "pinmux.h" +#include "pin_name.h" + +#define readl(addr) \ + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; }) + +#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b)) + +/******************************************************************************* + * function: phobos_ioreuse_inital + * + * description: + * initial phobos_pinmux + *******************************************************************************/ + +void phobos_ioreuse_initial(void) +{ + unsigned int value; + + /* gpio data source select */ + value = readl(PHOBOS_GIPO0_PORTCTL_REG); + value |= GPIO0_REUSE_EN; + writel(value, PHOBOS_GIPO0_PORTCTL_REG); + + value = readl(PHOBOS_GIPO1_PORTCTL_REG); + value |= GPIO1_REUSE_EN; + writel(value, PHOBOS_GIPO1_PORTCTL_REG); + + /* reuse function select */ + value = readl(PHOBOS_IOMUX0L_REG); + value |= IOMUX0L_FUNCTION_SEL; + writel(value, PHOBOS_IOMUX0L_REG); + + value = readl(PHOBOS_IOMUX0H_REG); + value |= IOMUX1L_FUNCTION_SEL; + writel(value, PHOBOS_IOMUX0H_REG); + + value = readl(PHOBOS_IOMUX1L_REG); + value |= IOMUX1L_FUNCTION_SEL; + writel(value, PHOBOS_IOMUX1L_REG); +} + +void phobos_pwm_ioreuse(void) +{ + unsigned int value; + + /* gpio data source select */ + value = readl(PHOBOS_GIPO0_PORTCTL_REG); + value |= PWM_GPIO0_REUSE_EN; + writel(value, PHOBOS_GIPO0_PORTCTL_REG); + + /* reuse function select */ + value = readl(PHOBOS_IOMUX0L_REG); + value |= PWM_IOMUX0L_FUNCTION_SEL; + writel(value, PHOBOS_IOMUX0L_REG); +} + + +int32_t pin_mux(pin_name_t pin, uint16_t function) +{ + unsigned int val = 0; + unsigned int reg_val = 0; + + uint8_t offset; + + if (function > 3) { + if (pin < PB0_ADC0_SDA0_PWM5_XX) { + offset = pin; + /* gpio data source select */ + val = readl(PHOBOS_GIPO0_PORTCTL_REG); + val &= ~(1 << offset); + writel(val, PHOBOS_GIPO0_PORTCTL_REG); + return 0; + } else if (pin >= PB0_ADC0_SDA0_PWM5_XX) { + offset = pin - 32; + /* gpio data source select */ + val = readl(PHOBOS_GIPO1_PORTCTL_REG); + val &= ~(1 << offset); + writel(val, PHOBOS_GIPO1_PORTCTL_REG); + return 0; + } else { + return -1; + } + } + + if (pin >= PB0_ADC0_SDA0_PWM5_XX) { + offset = pin - 32; + + /* gpio data source select */ + val = readl(PHOBOS_GIPO1_PORTCTL_REG); + val |= (1 << offset); + writel(val, PHOBOS_GIPO1_PORTCTL_REG); + + reg_val = (0x3 << (offset * 2)); + /* reuse function select */ + val = readl(PHOBOS_IOMUX1L_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, PHOBOS_IOMUX1L_REG); + return 0; + } + + offset = pin; + /* gpio data source select */ + val = readl(PHOBOS_GIPO0_PORTCTL_REG); + val |= (1 << offset); + writel(val, PHOBOS_GIPO0_PORTCTL_REG); + + if (pin >= PA16_SPI1CLK_PWMTRIG1_XX_XX) { + offset = pin - 16; + reg_val = (0x3 << (offset * 2)); + /* reuse function select */ + val = readl(PHOBOS_IOMUX0H_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, PHOBOS_IOMUX0H_REG); + return 0; + } + + reg_val = (0x3 << (offset * 2)); + /* reuse function select */ + val = readl(PHOBOS_IOMUX0L_REG); + val &= ~(reg_val); + val |= (function << (2 * offset)); + writel(val, PHOBOS_IOMUX0L_REG); + return 0; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/config.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/config.h new file mode 100644 index 000000000..b7927eeaf --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/config.h @@ -0,0 +1,29 @@ +/** + * Copyright (C) 2016 CSI Project. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define CONFIG_USART 1 + +#define CONFIG_SYSTEM_SECURE +#define CONFIG_HAVE_VIC +#define CONFIG_SHA_SUPPORT_MUL_THREAD 1 +#define CONFIG_KERNEL_NONE 1 +#define CONFIG_DISABLE_IRQ 1 + +#endif /* __CSI_WIFI_H__ */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_aes.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_aes.h new file mode 100644 index 000000000..c6fbc0cce --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_aes.h @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file drv_aes.h + * @brief Header File for AES Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CSI_AES_H_ +#define _CSI_AES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + + +/// definition for aes handle. +typedef void *aes_handle_t; + +/****** AES specific error codes *****/ +typedef enum { + AES_ERROR_MODE = (EDRV_SPECIFIC + 1) , ///< Specified Mode not supported + AES_ERROR_DATA_BITS , ///< Specified number of Data bits not supported + AES_ERROR_ENDIAN ///< Specified endian not supported +} drv_aes_error_e; + +/*----- AES Control Codes: Mode -----*/ +typedef enum { + AES_MODE_ECB = 0, ///< ECB Mode + AES_MODE_CBC , ///< CBC Mode + AES_MODE_CFB , ///< CFB Mode + AES_MODE_OFB , ///< OFB Mode + AES_MODE_CTR ///< CTR Mode +} aes_mode_e; + +/*----- AES Control Codes: Crypto Mode -----*/ +typedef enum { + AES_CRYPTO_MODE_ENCRYPT = 0, ///< encrypt Mode + AES_CRYPTO_MODE_DECRYPT , ///< decrypt Mode +} aes_crypto_mode_e; + +/*----- AES Control Codes: Padding Mode -----*/ +typedef enum { + AES_PADDING_MODE_NO = 0, ///< NO-PADDING + AES_PADDING_MODE_ZERO , ///< ZERO-PADDING + AES_PADDING_MODE_PKCS5 ///< PKCS5-PADDING +} aes_padding_mode_e; + +/*----- AES Control Codes: Mode Parameters: Key length -----*/ +typedef enum { + AES_KEY_LEN_BITS_128 = 0, ///< 128 Data bits + AES_KEY_LEN_BITS_192 , ///< 192 Data bits + AES_KEY_LEN_BITS_256 ///< 256 Data bits +} aes_key_len_bits_e; + +/*----- AES Control Codes: Mode Parameters: Endian -----*/ +typedef enum { + AES_ENDIAN_LITTLE = 0, ///< Little Endian + AES_ENDIAN_BIG ///< Big Endian +} aes_endian_mode_e; + +/** +\brief AES Status +*/ +typedef struct { + uint32_t busy : 1; ///< busy flag +} aes_status_t; + +/****** AES Event *****/ +typedef enum { + AES_EVENT_CRYPTO_COMPLETE = 0 ///< Encrypt completed +} aes_event_e; +typedef void (*aes_event_cb_t)(aes_event_e event); ///< Pointer to \ref aes_event_cb_t : AES Event call back. + + +/** +\brief AES Device Driver Capabilities. +*/ +typedef struct { + uint32_t ecb_mode : 1; ///< supports ECB mode + uint32_t cbc_mode : 1; ///< supports CBC mode + uint32_t cfb_mode : 1; ///< supports CFB mode + uint32_t ofb_mode : 1; ///< supports OFB mode + uint32_t ctr_mode : 1; ///< supports CTR mode + uint32_t bits_128 : 1; ///< supports 128bits key length + uint32_t bits_192 : 1; ///< supports 192bits key length + uint32_t bits_256 : 1; ///< supports 256bits key length +} aes_capabilities_t; + + +// Function documentation + +/** + \brief get aes instance count. + \return aes handle count +*/ +int32_t csi_aes_get_instance_count(void); + +/** + \brief Initialize AES Interface. 1. Initializes the resources needed for the AES interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_aes_get_instance_count(). + \param[in] cb_event Pointer to \ref aes_event_cb_t + \return return aes handle if success +*/ +aes_handle_t csi_aes_initialize(int32_t idx, aes_event_cb_t cb_event); + +/** + \brief De-initialize AES Interface. stops operation and releases the software resources used by the interface + \param[in] handle aes handle to operate. + \return error code +*/ +int32_t csi_aes_uninitialize(aes_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle aes handle to operate. + \return \ref aes_capabilities_t +*/ +aes_capabilities_t csi_aes_get_capabilities(aes_handle_t handle); + +/** + \brief config aes mode. + \param[in] handle aes handle to operate. + \param[in] mode \ref aes_mode_e + \param[in] keylen_bits \ref aes_key_len_bits_e + \param[in] endian \ref aes_endian_mode_e + \param[in] arg Pointer to the iv address when mode is cbc_mode + \return error code +*/ +int32_t csi_aes_config(aes_handle_t handle, + aes_mode_e mode, + aes_key_len_bits_e keylen_bits, + aes_endian_mode_e endian, + uint32_t arg + ); + +/** + \brief set crypto key. + \param[in] handle aes handle to operate. + \param[in] context aes information context(NULL when hardware implementation) + \param[in] key Pointer to the key buf + \param[in] key_len Pointer to \ref aes_key_len_bits_e + \param[in] enc \ref aes_crypto_mode_e + \return error code +*/ +int32_t csi_aes_set_key(aes_handle_t handle, void *context, void *key, aes_key_len_bits_e key_len, aes_crypto_mode_e enc); + +/** + \brief encrypt or decrypt + \param[in] handle aes handle to operate. + \param[in] context aes information context(NULL when hardware implementation) + \param[in] in Pointer to the Source data + \param[out] out Pointer to the Result data. + \param[in] len the Source data len. + \param[in] padding \ref aes_padding_mode_e. + \return error code +*/ +int32_t csi_aes_crypto(aes_handle_t handle, void *context, void *in, void *out, uint32_t len, aes_padding_mode_e padding); + +/** + \brief Get AES status. + \param[in] handle aes handle to operate. + \return AES status \ref aes_status_t +*/ +aes_status_t csi_aes_get_status(aes_handle_t handle); + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_AES_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_common.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_common.h new file mode 100644 index 000000000..fef26479e --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_common.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file drv_common.h + * @brief Header File for Common Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _DRV_COMMON_H_ +#define _DRV_COMMON_H_ + +#include +#include +#include "config.h" + +/** pin definition */ +typedef int32_t pin_t; + +/// \details driver handle +typedef void *drv_handle_t; + +/** +\brief General power states +*/ +typedef enum { + DRV_POWER_OFF, ///< Power off: no operation possible + DRV_POWER_LOW, ///< Low Power mode: retain state, detect and signal wake-up events + DRV_POWER_FULL ///< Power on: full operation at maximum performance +} csi_power_stat_e; + +#endif /* _DRV_COMMON_H */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_crc.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_crc.h new file mode 100644 index 000000000..bde0e9ed1 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_crc.h @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file drv_crc.h + * @brief Header File for CRC Driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CSI_CRC_H_ +#define _CSI_CRC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + + +/****** CRC specific error codes *****/ +#define CRC_ERROR_MODE (EDRV_SPECIFIC + 1) ///< Specified Mode not supported + +/// definition for crc handle. +typedef void *crc_handle_t; + +/*----- CRC Control Codes: Mode -----*/ +typedef enum { + CRC_MODE_CRC8 = 0, ///< Mode CRC8 + CRC_MODE_CRC16 , ///< Mode CRC16 + CRC_MODE_CRC32 ///< Mode CRC32 +} crc_mode_e; + +/*----- CRC Control Codes: Mode Parameters: Key length -----*/ +typedef enum { + CRC_STANDARD_CRC_ROHC = 0, ///< Standard CRC RHOC + CRC_STANDARD_CRC_MAXIM , ///< Standard CRC MAXIAM + CRC_STANDARD_CRC_X25 , ///< Standard CRC X25 + CRC_STANDARD_CRC_CCITT , ///< Standard CRC CCITT + CRC_STANDARD_CRC_USB , ///< Standard CRC USB + CRC_STANDARD_CRC_IBM , ///< Standard CRC IBM + CRC_STANDARD_CRC_MODBUS ///< Standard CRC MODBUS +} crc_standard_crc_e; + +/** +\brief CRC Status +*/ +typedef struct { + uint32_t busy : 1; ///< busy flag +} crc_status_t; + +/****** CRC Event *****/ +typedef enum { + CRC_EVENT_CALCULATE_COMPLETE = 0, ///< Calculate completed +} crc_event_e; + +typedef void (*crc_event_cb_t)(crc_event_e event); ///< Pointer to \ref crc_event_cb_t : CRC Event call back. + +/** +\brief CRC Device Driver Capabilities. +*/ +typedef struct { + uint32_t ROHC : 1; ///< supports ROHC mode + uint32_t MAXIM : 1; ///< supports MAXIM mode + uint32_t X25 : 1; ///< supports X25 mode + uint32_t CCITT : 1; ///< supports CCITT mode + uint32_t USB : 1; ///< supports USB mode + uint32_t IBM : 1; ///< supports IBM mode + uint32_t MODBUS : 1; ///< supports MODBUS mode +} crc_capabilities_t; + +// Function documentation + +/** + \brief get crc handle count. + \return crc handle count +*/ +int32_t csi_crc_get_instance_count(void); + +/** + \brief Initialize CRC Interface. 1. Initializes the resources needed for the CRC interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_crc_get_handle_count() + \param[in] cb_event Pointer to \ref crc_event_cb_t + \return return crc handle if success +*/ +crc_handle_t csi_crc_initialize(int32_t idx, crc_event_cb_t cb_event); + +/** + \brief De-initialize CRC Interface. stops operation and releases the software resources used by the interface + \param[in] handle crc handle to operate. + \return error code +*/ +int32_t csi_crc_uninitialize(crc_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle crc handle to operate. + \return \ref crc_capabilities_t +*/ +crc_capabilities_t csi_crc_get_capabilities(crc_handle_t handle); + +/** + \brief config crc mode. + \param[in] handle crc handle to operate. + \param[in] mode \ref crc_mode_e + \param[in] standard \ref crc_standard_crc_e + \return error code +*/ +int32_t csi_crc_config(crc_handle_t handle, + crc_mode_e mode, + crc_standard_crc_e standard + ); + +/** + \brief calculate crc. + \param[in] handle crc handle to operate. + \param[in] in Pointer to the input data + \param[out] out Pointer to the result. + \param[in] len intpu data len. + \return error code +*/ +int32_t csi_crc_calculate(crc_handle_t handle, const void *in, void *out, uint32_t len); + +/** + \brief Get CRC status. + \param[in] handle crc handle to operate. + \return CRC status \ref crc_status_t +*/ +crc_status_t csi_crc_get_status(crc_handle_t handle); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_CRC_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_dmac.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_dmac.h new file mode 100644 index 000000000..633e06169 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_dmac.h @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_dmac.h + * @brief header file for dmac driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CSI_DMA_H_ +#define _CSI_DMA_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/// definition for dmac handle. +typedef void *dmac_handle_t; + +/** +\brief DMA Driver Capabilities. +*/ +typedef struct { + uint32_t unalign_addr : 1; ///< support for unalign address transfer when memory is source +} dma_capabilities_t; + +typedef enum { + DMA_STATE_FREE = 0, ///< DMA not yet initialized or disabled + DMA_STATE_READY, ///< DMA process success and ready for use, but not start yet + DMA_STATE_BUSY, ///< DMA process is ongoing + DMA_STATE_ERROR, ///< DMA transfer error + DMA_STATE_DONE, ///< DMA transfer done +} dma_status_e; + +/****** DMA specific error codes *****/ +typedef enum { + EDRV_DMA_MODE = (EDRV_SPECIFIC + 1), ///< Specified Mode not supported +} dma_error_e; + +/****** DMA Event *****/ +typedef enum { + DMA_EVENT_TRANSFER_DONE = 0, ///< transfer complete + DMA_EVENT_TRANSFER_ERROR = 1, ///< transfer error +} dma_event_e; + +typedef enum { + DMA_ADDR_INC = 0, + DMA_ADDR_DEC, + DMA_ADDR_CONSTANT +} dma_addr_inc_e; + +typedef enum { + DMA_MEM2MEM = 0, + DMA_MEM2PERH, + DMA_PERH2MEM, + DMA_PERH2PERH, +} dma_trans_type_e; + +typedef struct { + dma_addr_inc_e src_inc; ///< source address increment + dma_addr_inc_e dst_inc; ///< destination address increment + uint8_t src_tw; ///< source transfer width in byte + uint8_t dst_tw; ///< destination transfer width in byte + uint8_t hs_if; ///< a hardware handshaking interface + dma_trans_type_e type; ///< transfer type +} dma_config_t; + +typedef void (*dma_event_cb_t)(dma_event_e event, int32_t ch); ///< Pointer to \ref dma_event_cb_t : CRC Event call back. + +/** + \brief get dma instance count. + \return dma instance count +*/ +int32_t csi_dma_get_instance_count(void); + +/** + \brief Initialize DMA Interface. 1. Initializes the resources needed for the DMA interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_dma_get_instance_count() + \return pointer to dma instances +*/ +dmac_handle_t csi_dma_initialize(int32_t idx); + +/** + \brief De-initialize DMA Interface. stops operation and releases the software resources used by the interface + \param[in] handle damc handle to operate. + \return error code +*/ +int32_t csi_dma_uninitialize(dmac_handle_t handle); +/** + \brief Get driver capabilities. + \param[in] handle damc handle to operate. + \return \ref dma_capabilities_t +*/ +dma_capabilities_t csi_dma_get_capabilities(dmac_handle_t handle); + +/** + \brief get one free dma channel + \param[in] handle damc handle to operate. + \param[in] ch channel num. if -1 then allocate a free channal in this dma + \return -1 - no channel can be used, other - channel index + */ +int32_t csi_dma_alloc_channel(dmac_handle_t handle, int32_t ch); + +/** + \brief release dma channel and related resources + \param[in] handle damc handle to operate. + \param[in] ch channel num. + \return error code + */ +int32_t csi_dma_release_channel(dmac_handle_t handle, int32_t ch); + +/** + \brief + \param[in] handle damc handle to operate. + \param[in] ch channel num. if -1 then allocate a free channal in this dma + \param[in] psrcaddr dma transfer source address + \param[in] pstdaddr dma transfer source address + \param[in] length dma transfer length + \param[in] config dma transfer configure + \param[in] cb_event Pointer to \ref dma_event_cb_t + \return error code + */ +int32_t csi_dma_config(dmac_handle_t handle, int32_t ch, + void *psrcaddr, void *pstdaddr, + uint32_t length, dma_config_t *config, dma_event_cb_t cb_event); + +/** + \brief start generate dma signal. + \param[in] handle damc handle to operate. + \param[in] ch channel num. + \return error code +*/ +int32_t csi_dma_start(dmac_handle_t handle, int32_t ch); + +/** + \brief Stop generate dma signal. + \param[in] handle damc handle to operate. + \param[in] ch channel num. + \return error code +*/ +int32_t csi_dma_stop(dmac_handle_t handle, int32_t ch); + +/** + \brief Get DMA status. + \param[in] handle damc handle to operate. + \param[in] ch channel num. + \return DMA status \ref dma_status_e +*/ +dma_status_e csi_dma_get_status(dmac_handle_t handle, int32_t ch); + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_DMA_H_ */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eflash.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eflash.h new file mode 100644 index 000000000..031a04e1c --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eflash.h @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_eflash.h + * @brief header file for eflash driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CSI_EFLASH_H_ +#define _CSI_EFLASH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + + +/// definition for eflash handle. +typedef void *eflash_handle_t; + +/** +\brief Flash information +*/ +typedef struct { + uint32_t start; ///< Chip Start address + uint32_t end; ///< Chip End address (start+size-1) + uint32_t sector_count; ///< Number of sectors + uint32_t sector_size; ///< Uniform sector size in bytes (0=sector_info used) + uint32_t page_size; ///< Optimal programming page size in bytes + uint32_t program_unit; ///< Smallest programmable unit in bytes + uint8_t erased_value; ///< Contents of erased memory (usually 0xFF) +} eflash_info_t; + +/** +\brief Flash Status +*/ +typedef struct { + uint32_t busy : 1; ///< Flash busy flag + uint32_t error : 1; ///< Read/Program/Erase error flag (cleared on start of next operation) +} eflash_status_t; + +/****** EFLASH Event *****/ +typedef enum { + EFLASH_EVENT_READY = 0, ///< Flash Ready + EFLASH_EVENT_ERROR , ///< Read/Program/Erase Error +} eflash_event_e; + +typedef void (*eflash_event_cb_t)(eflash_event_e event); ///< Pointer to \ref eflash_event_cb_t : EFLASH Event call back. + +/** +\brief Flash Driver Capabilities. +*/ +typedef struct { + uint32_t event_ready : 1; ///< Signal Flash Ready event + uint32_t data_width : 2; ///< Data width: 0=8-bit, 1=16-bit, 2=32-bit + uint32_t erase_chip : 1; ///< Supports EraseChip operation +} eflash_capabilities_t; + +// Function documentation + +/** + \brief get eflash handle count. + \return eflash handle count +*/ +int32_t csi_eflash_get_instance_count(void); + +/** + \brief Initialize EFLASH Interface. 1. Initializes the resources needed for the EFLASH interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_eflash_get_instance_count() + \param[in] cb_event Pointer to \ref eflash_event_cb_t + \return pointer to eflash handle +*/ +eflash_handle_t csi_eflash_initialize(int32_t idx, eflash_event_cb_t cb_event); + +/** + \brief De-initialize EFLASH Interface. stops operation and releases the software resources used by the interface + \param[in] handle eflash handle to operate. + \return error code +*/ +int32_t csi_eflash_uninitialize(eflash_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle eflash handle to operate. + \return \ref eflash_capabilities_t +*/ +eflash_capabilities_t csi_eflash_get_capabilities(eflash_handle_t handle); + +/** + \brief Read data from Flash. + \param[in] handle eflash handle to operate. + \param[in] addr Data address. + \param[out] data Pointer to a buffer storing the data read from Flash. + \param[in] cnt Number of data items to read. + \return number of data items read or error code +*/ +int32_t csi_eflash_read(eflash_handle_t handle, uint32_t addr, void *data, uint32_t cnt); + +/** + \brief Program data to Flash. + \param[in] handle eflash handle to operate. + \param[in] addr Data address. + \param[in] data Pointer to a buffer containing the data to be programmed to Flash.. + \param[in] cnt Number of data items to program. + \return number of data items programmed or error code +*/ +int32_t csi_eflash_program(eflash_handle_t handle, uint32_t addr, const void *data, uint32_t cnt); + +/** + \brief Erase Flash Sector. + \param[in] handle eflash handle to operate. + \param[in] addr Sector address + \return error code +*/ +int32_t csi_eflash_erase_sector(eflash_handle_t handle, uint32_t addr); + +/** + \brief Erase complete Flash. + \param[in] handle eflash handle to operate. + \return error code +*/ +int32_t csi_eflash_erase_chip(eflash_handle_t handle); + +/** + \brief Get Flash information. + \param[in] handle eflash handle to operate. + \return Pointer to Flash information \ref eflash_info +*/ +eflash_info_t *csi_eflash_get_info(eflash_handle_t handle); + +/** + \brief Get EFLASH status. + \param[in] handle eflash handle to operate. + \return EFLASH status \ref eflash_status_t +*/ +eflash_status_t csi_eflash_get_status(eflash_handle_t handle); + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_EFLASH_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_errno.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_errno.h new file mode 100644 index 000000000..fdc206d2c --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_errno.h @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_errno.h + * @brief header file for error num + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +/****************************************************************************** + * @file + * @details Error code field difination + * Error number is devided into 4 field: + * 0x8******* : 8 : means < 0 + * 0x*A****** : A : means type number: bsp(1), driver(2), hal(3), app(4)... + * 0x**AB**** : AB : means module number: timer(1), rtc(2), .... + * 0x****AB** : AB : means API number: module API's definition + * 0x******AB : AB : means sub error number + * 0 ~ 0x80 is common error such as EPERM, refer to errno.h + * 0x80 ~ 0xFF is specific error, can difine in module + * + * For example 0x81020113 means: + * 1. 0x8*******: value < 0, means error happened + * 2. 0x*1******: type number is 1, means bsp error + * 3. 0x**02****: module number is 02, means RTC error + * 4. 0x****01**: module API is 01, means RTC's init + * 5. 0x******13: specific error is 0x13=19=ENODEV, means no such device + * + * For special bsp module example, you can return: + * (BSP_ERRNO_TIMER_BASE | BSP_API_RTC_INIT | EPERM) for rtc init error + * (BSP_ERRNO_TIMER_BASE | BSP_API_RTC_SETTIME | ENXIO) for rtc settime error + * + * Here list the common sub error number (0x******AB) below(0~127 defined in errno.h as standard err code): + * Code Hex Deci Meaning + * ------------------------------------------------------- + * EPERM 0x01 1 Operation not permitted + * EIO 0x05 5 I/O error + * ENXIO 0x06 6 No such device or address + * ENOMEM 0x0C 12 Out of memory + * EACCES 0x0D 13 Permission denied + * EINVAL 0x16 22 Invalid argument + * ... + * SPEC_ERR_BASE 0x80 128 module special error number base + * ... + * ERRNO_MAX 0xFF -- Max sub error number + ******************************************************************************/ + +#ifndef _DRV_ERRNO_H_ +#define _DRV_ERRNO_H_ + + +#include + +#define ERRNO_DRV_START 0X80 + +/* drvier General return codes */ +typedef enum { + EDRV = ERRNO_DRV_START, ///< Unspecified error + EDRV_BUSY, ///< Driver is busy + EDRV_TIMEOUT, ///< Timeout occurred + EDRV_UNSUPPORTED, ///< Operation not supported + EDRV_PARAMETER, ///< Parameter error + EDRV_SPECIFIC ///< Start of driver specific errors +} drv_common_err_e; + + +/** Get error type */ +#define GET_ERROR_TYPE(errno) \ + (error & 0xFF000000 >> 24) +/** Get error module */ +#define GET_ERROR_MODULE(error) \ + (error & 0x00FF0000 >> 16) +/** Get error API */ +#define GET_ERROR_API(error) \ + (error & 0x0000FF00 >> 8) +/** Get errno */ +#define GET_ERROR_NUM(error) \ + (error & 0x000000FF) + +#ifndef CSI_DRV_ERRNO_BASE +/** means bsp errors */ +#define CSI_DRV_ERRNO_BASE 0x81000000 +#endif + +/** driver module id definition*/ +#define CSI_DRV_ERRNO_GPIO_BASE 0x81010000 +#define CSI_DRV_ERRNO_USART_BASE 0x81020000 +#define CSI_DRV_ERRNO_SPI_BASE 0x81030000 +#define CSI_DRV_ERRNO_I2C_BASE 0x81040000 +#define CSI_DRV_ERRNO_FLASH_BASE 0x81050000 +#define CSI_DRV_ERRNO_PWM_BASE 0x81060000 +#define CSI_DRV_ERRNO_RTC_BASE 0x81070000 +#define CSI_DRV_ERRNO_TIMER_BASE 0x81080000 +#define CSI_DRV_ERRNO_WDT_BASE 0x81090000 +#define CSI_DRV_ERRNO_AES_BASE 0x810A0000 +#define CSI_DRV_ERRNO_CRC_BASE 0x810B0000 +#define CSI_DRV_ERRNO_RSA_BASE 0x810C0000 +#define CSI_DRV_ERRNO_SHA_BASE 0x810D0000 +#define CSI_DRV_ERRNO_TRNG_BASE 0x810E0000 +#define CSI_DRV_ERRNO_EFLASH_BASE 0x810F0000 +#define CSI_DRV_ERRNO_DMA_BASE 0x81100000 +#define CSI_DRV_ERRNO_NORFLASH_BASE 0x81110000 +#define CSI_DRV_ERRNO_INTC_BASE 0x81120000 +#define CSI_DRV_ERRNO_SPU_BASE 0x81110000 +#define CSI_DRV_ERRNO_TEE_BASE 0x81130000 +#define CSI_DRV_ERRNO_PMU_BASE 0x81140000 + +#endif /* CSI_DRV_ERRNO_H */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth.h new file mode 100644 index 000000000..6ab39f9c1 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth.h @@ -0,0 +1,105 @@ +/** + * Copyright (C) 2016 CSI Project. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef _CSI_NET_H_ +#define _CSI_NET_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define CSI_ETH_VERSION_MAJOR_MINOR(major,minor) (((major) << 8) | (minor)) + +/** +\brief Driver Version +*/ +typedef struct csi_driver_version { + uint16_t api; ///< API version + uint16_t drv; ///< Driver version +} csi_drv_version_t; + +/* General return codes */ +#define CSI_ETH_OK 0 ///< Operation succeeded +#define CSI_ETH_ERROR CSI_DRV_ERRNO_ETH_BASE+1 ///< Unspecified error +#define CSI_ETH_ERROR_BUSY CSI_DRV_ERRNO_ETH_BASE+2 ///< Driver is busy +#define CSI_ETH_ERROR_TIMEOUT CSI_DRV_ERRNO_ETH_BASE+3 ///< Timeout occurred +#define CSI_ETH_ERROR_UNSUPPORTED CSI_DRV_ERRNO_ETH_BASE+4 ///< Operation not supported +#define CSI_ETH_ERROR_PARAMETER CSI_DRV_ERRNO_ETH_BASE+5 ///< Parameter error +#define CSI_ETH_ERROR_SPECIFIC CSI_DRV_ERRNO_ETH_BASE+6 ///< Start of driver specific errors + +/** +\brief General power states +*/ +typedef enum eth_power_state { + CSI_ETH_POWER_OFF, ///< Power off: no operation possible + CSI_ETH_POWER_LOW, ///< Low Power mode: retain state, detect and signal wake-up events + CSI_ETH_POWER_FULL ///< Power on: full operation at maximum performance +} eth_power_state_t; + +/** +\brief Ethernet Media Interface type +*/ +#define CSI_ETH_INTERFACE_MII (0) ///< Media Independent Interface (MII) +#define CSI_ETH_INTERFACE_RMII (1) ///< Reduced Media Independent Interface (RMII) +#define CSI_ETH_INTERFACE_SMII (2) ///< Serial Media Independent Interface (SMII) + +/** +\brief Ethernet link speed +*/ +#define CSI_ETH_SPEED_10M (0) ///< 10 Mbps link speed +#define CSI_ETH_SPEED_100M (1) ///< 100 Mbps link speed +#define CSI_ETH_SPEED_1G (2) ///< 1 Gpbs link speed + +/** +\brief Ethernet duplex mode +*/ +#define CSI_ETH_DUPLEX_HALF (0) ///< Half duplex link +#define CSI_ETH_DUPLEX_FULL (1) ///< Full duplex link + +/** +\brief Ethernet link state +*/ +typedef enum eth_link_state { + ETH_LINK_DOWN, ///< Link is down + ETH_LINK_UP ///< Link is up +} eth_link_state_t; + +/** +\brief Ethernet link information +*/ +typedef volatile struct eth_link_info { + uint32_t speed : 2; ///< Link speed: 0= 10 MBit, 1= 100 MBit, 2= 1 GBit + uint32_t duplex : 1; ///< Duplex mode: 0= Half, 1= Full + uint32_t Autonegotiation : 1; ///< Set the interface to Auto Negotiation mode of transmission parameters + uint32_t Loopback : 1; ///< Set the interface into a Loop-back test mode + uint32_t Isolation : 1; ///< Set to indicate electrical isolation of PHY interface from MII/RMII interface + uint32_t reserved : 26; +} eth_link_info_t; + +/** +\brief Ethernet MAC Address +*/ +typedef struct eth_mac_addr { + uint8_t b[6]; ///< MAC Address (6 bytes), MSB first +} eth_mac_addr_t; + +#ifdef __cplusplus +} +#endif + +#endif /* CSI_NET_H_ */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth_mac.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth_mac.h new file mode 100644 index 000000000..f3bda90fb --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth_mac.h @@ -0,0 +1,422 @@ +/** + * Copyright (C) 2016 CSI Project. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _CSI_ETH_H_ +#define _CSI_ETH_H_ + +#include "drv_eth.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *eth_mac_handle_t; + +#define MAX_FRAMELEN 1518 /* (note: maximum ethernet frame length would be 1518) */ + +#define CSI_ETH_MAC_API_VERSION CSI_DRIVER_VERSION_MAJOR_MINOR(2,1) /* API version */ + +#define _CSI_Driver_ETH_MAC_(n) Driver_ETH_MAC##n +#define CSI_Driver_ETH_MAC_(n) _CSI_Driver_ETH_MAC_(n) + +/****** Ethernet MAC Control Codes *****/ + +#define CSI_ETH_MAC_CONFIGURE (0x01) ///< Configure MAC; arg = configuration +#define CSI_ETH_MAC_CONTROL_TX (0x02) ///< Transmitter; arg: 0=disabled (default), 1=enabled +#define CSI_ETH_MAC_CONTROL_RX (0x03) ///< Receiver; arg: 0=disabled (default), 1=enabled +#define CSI_ETH_MAC_FLUSH (0x04) ///< Flush buffer; arg = CSI_ETH_MAC_FLUSH_... +#define CSI_ETH_MAC_SLEEP (0x05) ///< Sleep mode; arg: 1=enter and wait for Magic packet, 0=exit +#define CSI_ETH_MAC_VLAN_FILTER (0x06) ///< VLAN Filter for received frames; arg15..0: VLAN Tag; arg16: optional CSI_ETH_MAC_VLAN_FILTER_ID_ONLY; 0=disabled (default) + +/*----- Ethernet MAC Configuration -----*/ +#define CSI_ETH_MAC_SPEED_Pos 0 +#define CSI_ETH_MAC_SPEED_Msk (3UL << CSI_ETH_MAC_SPEED_Pos) +#define CSI_ETH_MAC_SPEED_10M (CSI_ETH_SPEED_10M << CSI_ETH_MAC_SPEED_Pos) ///< 10 Mbps link speed +#define CSI_ETH_MAC_SPEED_100M (CSI_ETH_SPEED_100M << CSI_ETH_MAC_SPEED_Pos) ///< 100 Mbps link speed +#define CSI_ETH_MAC_SPEED_1G (CSI_ETH_SPEED_1G << CSI_ETH_MAC_SPEED_Pos) ///< 1 Gpbs link speed +#define CSI_ETH_MAC_DUPLEX_Pos 2 +#define CSI_ETH_MAC_DUPLEX_Msk (1UL << CSI_ETH_MAC_DUPLEX_Pos) +#define CSI_ETH_MAC_DUPLEX_HALF (CSI_ETH_DUPLEX_HALF << CSI_ETH_MAC_DUPLEX_Pos) ///< Half duplex link +#define CSI_ETH_MAC_DUPLEX_FULL (CSI_ETH_DUPLEX_FULL << CSI_ETH_MAC_DUPLEX_Pos) ///< Full duplex link +#define CSI_ETH_MAC_LOOPBACK (1UL << 4) ///< Loop-back test mode +#define CSI_ETH_MAC_CHECKSUM_OFFLOAD_RX (1UL << 5) ///< Receiver Checksum offload +#define CSI_ETH_MAC_CHECKSUM_OFFLOAD_TX (1UL << 6) ///< Transmitter Checksum offload +#define CSI_ETH_MAC_ADDRESS_BROADCAST (1UL << 7) ///< Accept frames with Broadcast address +#define CSI_ETH_MAC_ADDRESS_MULTICAST (1UL << 8) ///< Accept frames with any Multicast address +#define CSI_ETH_MAC_ADDRESS_ALL (1UL << 9) ///< Accept frames with any address (Promiscuous Mode) + +/*----- Ethernet MAC Flush Flags -----*/ +#define CSI_ETH_MAC_FLUSH_RX (1UL << 0) ///< Flush Receive buffer +#define CSI_ETH_MAC_FLUSH_TX (1UL << 1) ///< Flush Transmit buffer + +/*----- Ethernet MAC VLAN Filter Flag -----*/ +#define CSI_ETH_MAC_VLAN_FILTER_ID_ONLY (1UL << 16) ///< Compare only the VLAN Identifier (12-bit) + + +/****** Ethernet MAC Frame Transmit Flags *****/ +#define CSI_ETH_MAC_TX_FRAME_FRAGMENT (1UL << 0) ///< Indicate frame fragment +#define CSI_ETH_MAC_TX_FRAME_EVENT (1UL << 1) ///< Generate event when frame is transmitted +#define CSI_ETH_MAC_TX_FRAME_TIMESTAMP (1UL << 2) ///< Capture frame time stamp + + +/****** Ethernet MAC Timer Control Codes *****/ +#define CSI_ETH_MAC_TIMER_GET_TIME (0x01) ///< Get current time +#define CSI_ETH_MAC_TIMER_SET_TIME (0x02) ///< Set new time +#define CSI_ETH_MAC_TIMER_INC_TIME (0x03) ///< Increment current time +#define CSI_ETH_MAC_TIMER_DEC_TIME (0x04) ///< Decrement current time +#define CSI_ETH_MAC_TIMER_SET_ALCSI (0x05) ///< Set alarm time +#define CSI_ETH_MAC_TIMER_ADJUST_CLOCK (0x06) ///< Adjust clock frequency; time->ns: correction factor * 2^31 + + +/** +\brief Ethernet MAC Time +*/ +typedef struct eth_mac_time { + uint32_t ns; ///< Nano seconds + uint32_t sec; ///< Seconds +} eth_mac_time_t; + + +/****** Ethernet MAC Event *****/ +#define CSI_ETH_MAC_EVENT_RX_FRAME (1UL << 0) ///< Frame Received +#define CSI_ETH_MAC_EVENT_TX_FRAME (1UL << 1) ///< Frame Transmitted +#define CSI_ETH_MAC_EVENT_WAKEUP (1UL << 2) ///< Wake-up (on Magic Packet) +#define CSI_ETH_MAC_EVENT_TIMER_ALCSI (1UL << 3) ///< Timer Alarm +#define CSI_ETH_MAC_EVENT_LINK_CHANGE (1UL << 4) ///< Link state + +typedef void (*eth_event_cb_t)(eth_mac_handle_t handle, uint32_t event); ///< Pointer to \ref eth_event_cb_t : Signal Ethernet Event. + +typedef enum +{ + FRAME_FILTER_RULE_POSITIVE_MATCHING = 0, /*!< Specifies that a filter should match a given pattern */ + FRAME_FILTER_RULE_NEGATIVE_MATCHING = 1, /*!< Specifies that a filter should NOT match a given pattern */ +} frame_filter_rule_t; + +/** +\brief Ethernet MAC Capabilities +*/ +typedef struct eth_capabilities { + uint32_t checksum_offload_rx_ip4 : 1; ///< 1 = IPv4 header checksum verified on receive + uint32_t checksum_offload_rx_ip6 : 1; ///< 1 = IPv6 checksum verification supported on receive + uint32_t checksum_offload_rx_udp : 1; ///< 1 = UDP payload checksum verified on receive + uint32_t checksum_offload_rx_tcp : 1; ///< 1 = TCP payload checksum verified on receive + uint32_t checksum_offload_rx_icmp : 1; ///< 1 = ICMP payload checksum verified on receive + uint32_t checksum_offload_tx_ip4 : 1; ///< 1 = IPv4 header checksum generated on transmit + uint32_t checksum_offload_tx_ip6 : 1; ///< 1 = IPv6 checksum generation supported on transmit + uint32_t checksum_offload_tx_udp : 1; ///< 1 = UDP payload checksum generated on transmit + uint32_t checksum_offload_tx_tcp : 1; ///< 1 = TCP payload checksum generated on transmit + uint32_t checksum_offload_tx_icmp : 1; ///< 1 = ICMP payload checksum generated on transmit + uint32_t media_interface : 2; ///< Ethernet Media Interface type + uint32_t mac_address : 1; ///< 1 = driver provides initial valid MAC address + uint32_t event_rx_frame : 1; ///< 1 = callback event generated + uint32_t event_tx_frame : 1; ///< 1 = callback event generated + uint32_t event_wakeup : 1; ///< 1 = wakeup event generated + uint32_t precision_timer : 1; ///< 1 = Precision Timer supported + uint32_t reserved : 15; ///< Reserved (must be zero) +} eth_capabilities_t; + +#if 0 +/** +\brief Ethernet Frame filter +*/ +typedef struct eth_frame_filter { + struct { + uint32_t and_or : 1; ///< 1 = AND: Packets will be rejected unless all enabled filters accept the packet; 0 = OR: Packets will be accepted unless all enabled filters reject the packet + uint32_t unicast_en : 1; ///< 1 = Packets with a destination address matching the local MAC address will be accepted + uint32_t multicast_en : 1; ///< 1 = Packets which have the Least Significant bit set in the destination address will be accepted + uint32_t broadcast_en : 1; ///< 1 = Packets which have a destination address of FF-FF-FF-FF-FF-FF will be accepted + uint32_t crc_en : 1; ///< 1 = All packets with an invalid CRC will be discarded + uint32_t patten_match_en : 1; ///< 1 = Packets which meet the Pattern Match criteria will be accepted + uint32_t magic_packet_en : 1; ///< 1 = Magic Packets for the local MAC address will be accepted + uint32_t hash_table_en : 1; ///< 1 = Packets which meet the Hash Table criteria will be accepted + } sum; ///< summary + uint32_t patten_match; ///< patten match filter + uint32_t magic_packet; ///< patten match filter + uint32_t hash_table; ///< hash table filter +} eth_frame_filter_t; +#else +/** + * Structure describing a frame filter list item + */ +typedef struct +{ + uint32_t id; /*!< Unique identifier for a packet filter item */ + frame_filter_rule_t rule; /*!< Filter matches are either POSITIVE or NEGATIVE matching */ + uint16_t offset; /*!< Offset in bytes to start filtering (referenced to the start of the ethernet packet) */ + uint16_t mask_size; /*!< Size of the mask in bytes */ + uint8_t* mask; /*!< Pattern mask bytes to be ANDed with the pattern eg. "\xff00" (must be in network byte order) */ + uint8_t* pattern; /*!< Pattern bytes used to filter eg. "\x0800" (must be in network byte order) */ + bool enabled_status; /*!< When returned from mhd_get_packet_filters, indicates if the filter is enabled */ +} eth_frame_filter_t; + +struct eth_frame_filter_list +{ + struct eth_frame_filter_list* next; +}; +typedef struct eth_frame_filter_list eth_frame_filter_list_t; +#endif + +typedef struct { + eth_event_cb_t cb_event; + eth_capabilities_t capabilities; +}eth_mac_priv_t; + +/** + \brief Get driver version. + \param[in] handle ethernet handle + \return ethernet version including chip version and driver version +*/ +csi_drv_version_t csi_eth_mac_get_version(eth_mac_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle ethernet handle + \return ethernet capabilities +*/ +eth_capabilities_t csi_eth_mac_get_capabilities(eth_mac_handle_t handle); + +/** + \brief This function is used to initialize Ethernet device and related resource, an event callback is registered. It is called when the middleware component like TCPIP starts operation. + \param[in] cb callback to handle ethernet event + \return return ethernet handle if success + */ +eth_mac_handle_t csi_eth_mac_initialize(eth_event_cb_t cb); + +/** + \brief This function is used to de-initialize Ethernet device. It is called when the middleware component stops operation and releases the software resources used by the interface. + \param[in] handle ethernet handle + \return error code + */ +int32_t csi_eth_mac_uninitialize(eth_mac_handle_t handle); + +/** + \brief Control Ethernet MAC Device Power. + \param[in] handle ethernet handle + \param[in] state Power state + \return error code +*/ +int32_t csi_eth_mac_power_control(eth_mac_handle_t handle, eth_power_state_t state); + +/** + \brief Get Ethernet MAC Address. + \param[in] handle ethernet handle + \param[in] mac Pointer to address + \return error code +*/ +int32_t csi_eth_mac_get_macaddr(eth_mac_handle_t handle, eth_mac_addr_t *mac); + +/** + \brief Set Ethernet MAC Address. + \param[in] handle ethernet handle + \param[in] mac Pointer to address + \return error code +*/ +int32_t csi_eth_mac_set_macaddr(eth_mac_handle_t handle, const eth_mac_addr_t *mac); + +/** + \brief Configure Address Filter. + \param[in] handle ethernet handle + \param[in] addr Pointer to addresses + \param[in] num_addr Number of addresses to configure + \return error code +*/ +int32_t csi_eth_mac_set_addrfilter(eth_mac_handle_t handle, const eth_mac_addr_t *addr, uint32_t num_addr); + +/** + \brief Send Ethernet frame. + \param[in] handle ethernet handle + \param[in] frame Pointer to frame buffer with data to send + \param[in] len Frame buffer length in bytes + \param[in] flags Frame transmit flags (see CSI_ETH_MAC_TX_FRAME_...) + \return error code +*/ +int32_t csi_eth_mac_send_frame(eth_mac_handle_t handle, const uint8_t *frame, uint32_t len, uint32_t flags); + +/** + \brief Read data of received Ethernet frame. + \param[in] handle ethernet handle + \param[in] frame Pointer to frame buffer for data to read into + \param[in] len Frame buffer length in bytes + \return number of data bytes read or execution status + - value >= 0: number of data bytes read + - value < 0: error occurred, value is execution status as defined with execution_status +*/ +int32_t csi_eth_mac_read_frame(eth_mac_handle_t handle, uint8_t *frame, uint32_t len); + +/** + \brief Get size of received Ethernet frame. + \param[in] handle ethernet handle + \return number of bytes in received frame +*/ +int32_t csi_eth_mac_get_rx_framesize(eth_mac_handle_t handle); + +/** + \brief Get time of received Ethernet frame. + \param[in] handle ethernet handle + \param[in] time Pointer to time structure for data to read into + \return error code +*/ +int32_t csi_eth_mac_get_rx_frametime(eth_mac_handle_t handle, eth_mac_time_t *time); + +/** + \brief Get time of transmitted Ethernet frame. + \param[in] handle ethernet handle + \param[in] time Pointer to time structure for data to read into + \return error code +*/ +int32_t csi_eth_mac_get_tx_frametime(eth_mac_handle_t handle, eth_mac_time_t *time); + +/** + \brief Control Ethernet Interface. + \param[in] handle ethernet handle + \param[in] control Operation + \param[in] arg Argument of operation (optional) + \return error code +*/ +int32_t csi_eth_mac_control(eth_mac_handle_t handle, uint32_t control, uint32_t arg); + +/** + \brief Control Precision Timer. + \param[in] handle ethernet handle + \param[in] control Operation + \param[in] time Pointer to time structure + \return error code +*/ +int32_t csi_eth_mac_control_time(eth_mac_handle_t handle, uint32_t control, eth_mac_time_t *time); + +/** + \brief Read Ethernet PHY Register through Management Interface. + \param[in] handle ethernet handle + \param[in] phy_addr 5-bit device address + \param[in] reg_addr 5-bit register address + \param[out] data Pointer where the result is written to + \return error code +*/ +int32_t csi_eth_mac_phy_read(eth_mac_handle_t handle, uint8_t phy_addr, uint8_t reg_addr, uint16_t *data); + +/** + \brief Write Ethernet PHY Register through Management Interface. + \param[in] handle ethernet handle + \param[in] phy_addr 5-bit device address + \param[in] reg_addr 5-bit register address + \param[in] data 16-bit data to write + \return error code +*/ +int32_t csi_eth_mac_phy_write(eth_mac_handle_t handle, uint8_t phy_addr, uint8_t reg_addr, uint16_t data); + +/** + \brief Callback function that signals a Ethernet Event. + \param[in] handle ethernet handle + \param[in] event event notification mask + \return none +*/ +void csi_eth_mac_signal_event(eth_mac_handle_t handle, uint32_t event); + +/** + \brief Add Frame Filter Setting with Filter ID. + \param[in] handle ethernet handle + \param[in] filter Pointer to filter setting + \return error code +*/ +int32_t csi_eth_mac_add_framefilter(eth_mac_handle_t handle, const eth_frame_filter_t *filter); + +/** + \brief Remove Frame Filter Setting. + \param[in] handle ethernet handle + \param[in] filter_id Frame Filter ID + \return error code +*/ +int32_t csi_eth_mac_remove_framefilter(eth_mac_handle_t handle, uint32_t filter_id); + +/** + \brief Enable/Disable Specified Frame Filter ID. + \param[in] handle ethernet handle + \param[in] filter_id Frame Filter ID + \param[in] en Enable or disable + \return error code +*/ +int32_t csi_eth_mac_en_framefilter(eth_mac_handle_t handle, uint32_t filter_id, bool en); + +/** + \brief Get frame filter table list. + \param[in] handle ethernet handle + \param[in] list frame filter table list + \param[in] count_out the count of filter setting added + \param[in] max_count max filter setting can be supported + \return error code +*/ +int32_t csi_eth_mac_get_framefilter(eth_mac_handle_t handle, eth_frame_filter_list_t* list, uint32_t* count_out, uint32_t max_count); + + +#ifdef CONFIG_ETH_ENC28J60_USE_PBUF +/** + \brief Begin to Send Ethernet frame. + \param[in] handle ethernet handle + \param[in] len Frame buffer length in bytes + \return error code +*/ +int32_t csi_eth_mac_ex_send_frame_begin(eth_mac_handle_t handle, uint32_t len); + +/** + * send a packet data + * @param address the packet data length + * + * @return + * - sent data length + */ +int32_t csi_eth_mac_ex_send_frame(eth_mac_handle_t handle, const uint8_t *frame, uint32_t len, uint32_t flags); + +/** + \brief End Send Ethernet frame. + \param[in] handle ethernet handle + \return error code +*/ +int32_t csi_eth_mac_ex_send_frame_end(eth_mac_handle_t handle); + +/** + \brief Read data of received Ethernet frame. + \param[in] handle ethernet handle + \param[in] frame Pointer to frame buffer for data to read into + \param[in] len Frame buffer length in bytes + \return number of data bytes read or execution status + - value >= 0: number of data bytes read + - value < 0: error occurred, value is execution status as defined with execution_status +*/ +int32_t csi_eth_mac_ex_read_frame(eth_mac_handle_t handle, uint8_t *frame, uint32_t len); + +/** + \brief Begin to Read data of received Ethernet frame. + \param[in] handle ethernet handle + \param[in] len Frame buffer length in bytes + \return >0 data byte in hardware buffer + ==0 no data + < 0 error +*/ +int32_t csi_eth_mac_ex_read_frame_begin(eth_mac_handle_t handle); + +/** + \brief Begin to Read data of received Ethernet frame. + \param[in] handle ethernet handle + \return error code +*/ +int32_t csi_eth_mac_ex_read_frame_end(eth_mac_handle_t handle); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth_phy.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth_phy.h new file mode 100644 index 000000000..adf4aa017 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_eth_phy.h @@ -0,0 +1,124 @@ +/** + * Copyright (C) 2016 CSI Project. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _CSI_ETH_PHY_H_ +#define _CSI_ETH_PHY_H_ + +#include "drv_eth.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *eth_phy_handle_t; + +#define CSI_ETH_PHY_API_VERSION CSI_ETH_VERSION_MAJOR_MINOR(2,1) /* API version */ + + +#define _CSI_Driver_ETH_PHY_(n) Driver_ETH_PHY##n +#define CSI_Driver_ETH_PHY_(n) _CSI_Driver_ETH_PHY_(n) + + +/****** Ethernet PHY Mode *****/ +#define CSI_ETH_PHY_SPEED_Pos 0 +#define CSI_ETH_PHY_SPEED_Msk (3UL << CSI_ETH_PHY_SPEED_Pos) +#define CSI_ETH_PHY_SPEED_10M (CSI_ETH_SPEED_10M << CSI_ETH_PHY_SPEED_Pos) ///< 10 Mbps link speed +#define CSI_ETH_PHY_SPEED_100M (CSI_ETH_SPEED_100M << CSI_ETH_PHY_SPEED_Pos) ///< 100 Mbps link speed +#define CSI_ETH_PHY_SPEED_1G (CSI_ETH_SPEED_1G << CSI_ETH_PHY_SPEED_Pos) ///< 1 Gpbs link speed +#define CSI_ETH_PHY_DUPLEX_Pos 2 +#define CSI_ETH_PHY_DUPLEX_Msk (1UL << CSI_ETH_PHY_DUPLEX_Pos) +#define CSI_ETH_PHY_DUPLEX_HALF (CSI_ETH_DUPLEX_HALF << CSI_ETH_PHY_DUPLEX_Pos) ///< Half duplex link +#define CSI_ETH_PHY_DUPLEX_FULL (CSI_ETH_DUPLEX_FULL << CSI_ETH_PHY_DUPLEX_Pos) ///< Full duplex link +#define CSI_ETH_PHY_AUTO_NEGOTIATE (1UL << 3) ///< Auto Negotiation mode +#define CSI_ETH_PHY_LOOPBACK (1UL << 4) ///< Loop-back test mode +#define CSI_ETH_PHY_ISOLATE (1UL << 5) ///< Isolate PHY from MII/RMII interface + +typedef int32_t (*csi_eth_phy_read_t) (uint8_t phy_addr, uint8_t reg_addr, uint16_t *data); ///< Read Ethernet PHY Register. +typedef int32_t (*csi_eth_phy_write_t) (uint8_t phy_addr, uint8_t reg_addr, uint16_t data); ///< Write Ethernet PHY Register. + +typedef struct { + csi_eth_phy_read_t phy_read; + csi_eth_phy_write_t phy_write; + eth_link_info_t link_info; +}eth_phy_priv_t; + +// Function documentation +/** + \brief Get driver version. + \param[in] handle ethernet phy handle + \return driver version +*/ +csi_drv_version_t csi_eth_phy_get_version(eth_phy_handle_t handle); + +/** + \brief Initialize Ethernet PHY Device. + \param[in] fn_read + \param[in] fn_write + \return ethernet phy handle +*/ +eth_phy_handle_t csi_eth_phy_initialize(csi_eth_phy_read_t fn_read, csi_eth_phy_write_t fn_write); + +/** + \brief De-initialize Ethernet PHY Device. + \param[in] handle ethernet phy handle + \return error code +*/ +int32_t csi_eth_phy_uninitialize(eth_phy_handle_t handle); + +/** + \brief Control Ethernet PHY Device Power. + \param[in] handle ethernet phy handle + \param[in] state Power state + \return error code +*/ +int32_t csi_eth_phy_power_control(eth_phy_handle_t handle, eth_power_state_t state); + +/** + \brief Set Ethernet Media Interface. + \param[in] handle ethernet phy handle + \param[in] interface Media Interface type + \return error code +*/ +int32_t csi_eth_phy_set_interface(eth_phy_handle_t handle, uint32_t interface); + +/** + \brief Set Ethernet PHY Device Operation mode. + \param[in] handle ethernet phy handle + \param[in] mode Operation Mode + \return error code +*/ +int32_t csi_eth_phy_set_mode(eth_phy_handle_t handle, uint32_t mode); + +/** + \brief Get Ethernet PHY Device Link state. + \param[in] handle ethernet phy handle + \return current link status \ref eth_link_state_t +*/ +eth_link_state_t csi_eth_phy_get_linkstate(eth_phy_handle_t handle); + +/** + \brief Get Ethernet PHY Device Link information. + \param[in] handle ethernet phy handle + \return current link parameters \ref eth_link_info_t +*/ +eth_link_info_t csi_eth_phy_get_linkinfo(eth_phy_handle_t handle); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_flash.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_flash.h new file mode 100644 index 000000000..7afd288a9 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_flash.h @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_flash.c + * @brief header file for flash driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_FLASH_H_ +#define _CSI_FLASH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + + +typedef struct { + uint32_t base; + void *priv; +} csi_flash_t; + +/** +\brief Flash Sector information +*/ +typedef struct { + uint32_t start; ///< Sector Start address + uint32_t end; ///< Sector End address (start+size-1) +} const flash_sector; + +/** +\brief Flash information +*/ +typedef struct { + flash_sector *sector_info; ///< Sector layout information (NULL=Uniform sectors) + uint32_t sector_count; ///< Number of sectors + uint32_t sector_size; ///< Uniform sector size in bytes (0=sector_info used) + uint32_t page_size; ///< Optimal programming page size in bytes + uint32_t program_unit; ///< Smallest programmable unit in bytes + uint8_t erased_value; ///< Contents of erased memory (usually 0xFF) +} flash_info_t; + +/** +\brief Flash Status +*/ +typedef struct { + uint32_t busy : 1; ///< Flash busy flag + uint32_t error : 1; ///< Read/Program/Erase error flag (cleared on start of next operation) +} flash_status_t; + +/****** FLASH Event *****/ +typedef enum { + FLASH_EVENT_READY = 0, ///< Flash Ready + FLASH_EVENT_ERROR , ///< Read/Program/Erase Error +} flash_event_e; + +typedef void (*flash_event_cb_t)(flash_event_e event); ///< Pointer to \ref flash_event_cb_t : FLASH Event call back. + +/** +\brief Flash Driver Capabilities. +*/ +typedef struct { + uint32_t event_ready : 1; ///< Signal Flash Ready event + uint32_t data_width : 2; ///< Data width: 0=8-bit, 1=16-bit, 2=32-bit + uint32_t erase_chip : 1; ///< Supports EraseChip operation +} flash_capabilities_t; + + + + +/** + \brief get flash instance count. + \return flash instance count +*/ +int32_t drv_flash_get_instance_count(void); + +/** + \brief get flash instance . + \param[in] idx must not exceed return value of drv_flash_get_instance_count() + \return pointer to flash instance +*/ +csi_flash_t *drv_flash_get_instance(int32_t idx); + +/** + \brief Get driver capabilities. + \param[in] instance flash instance to operate. + \return \ref flash_capabilities_t +*/ +flash_capabilities_t drv_flash_get_capabilities(const csi_flash_t *instance); + +/** + \brief Initialize FLASH Interface. 1. Initializes the resources needed for the FLASH interface 2.registers event callback function + \param[in] instance flash instance to operate. + \param[in] cb_event Pointer to \ref flash_event_cb_t + \return error code +*/ +int32_t drv_flash_initialize(const csi_flash_t *instance, flash_event_cb_t cb_event); + +/** + \brief De-initialize FLASH Interface. stops operation and releases the software resources used by the interface + \param[in] instance flash instance to operate. + \return error code +*/ +int32_t drv_flash_uninitialize(const csi_flash_t *instance); + +/** + \brief Get Flash information. + \param[in] instance flash instance to operate. + \return Pointer to Flash information \ref flash_info_t +*/ +flash_info_t *drv_flash_get_info(const csi_flash_t *instance); + +/** + \brief Read data from Flash. + \param[in] instance flash instance to operate. + \param[in] addr Data address. + \param[in] data Pointer to a buffer storing the data read from Flash. + \param[in] cnt Number of data items to read. + \return number of data items read or error code +*/ +int32_t drv_flash_read(const csi_flash_t *instance, uint32_t addr, void *data, uint32_t cnt); + +/** + \brief Program data to Flash. + \param[in] instance flash instance to operate. + \param[in] addr Data address. + \param[in] data Pointer to a buffer containing the data to be programmed to Flash.. + \param[in] cnt Number of data items to program. + \return number of data items programmed or error code +*/ +int32_t drv_flash_program(const csi_flash_t *instance, uint32_t addr, const void *data, uint32_t cnt); + +/** + \brief Erase Flash Sector. + \param[in] instance flash instance to operate. + \param[in] addr Sector address + \return error code +*/ +int32_t drv_flash_erase_sector(const csi_flash_t *instance, uint32_t addr); + +/** + \brief Erase complete Flash. + \param[in] instance flash instance to operate. + \return error code +*/ +int32_t drv_flash_erase_chip(const csi_flash_t *instance); + +/** + \brief Get FLASH status. + \param[in] instance flash instance to operate. + \return FLASH status \ref flash_status_t +*/ +flash_status_t drv_flash_get_status(const csi_flash_t *instance); + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_FLASH_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_gpio.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_gpio.h new file mode 100644 index 000000000..5ec337b9f --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_gpio.h @@ -0,0 +1,192 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_gpio.h + * @brief header file for gpio driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_GPIO_H_ +#define _CSI_GPIO_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + +/// definition for gpio port handle. +typedef void *gpio_port_handle_t; +/// definition for gpio pin handle. +typedef void *gpio_pin_handle_t; + +/****** GPIO specific error codes *****/ +typedef enum { + GPIO_ERROR_MODE = (EDRV_SPECIFIC + 1), ///< Specified Mode not suphandleed + GPIO_ERROR_DIRECTION, ///< Specified direction not suphandleed + GPIO_ERROR_IRQ_MODE, ///< Specified irq mode not suphandleed +} drv_gpio_error_e; + +/*----- GPIO Control Codes: Mode -----*/ +typedef enum { + GPIO_MODE_PULLNONE = 1, ///< pull none for input + GPIO_MODE_PULLUP = 5, ///< pull up for input + GPIO_MODE_PULLDOWM = 3, ///< pull down for input + GPIO_MODE_OPEN_DRAIN = 2, ///< open drain mode for output + GPIO_MODE_PUSH_PULL = 4 ///< push-pull mode for output +} gpio_mode_e; + +/*----- GPIO Control Codes: Mode Parameters: Data Bits -----*/ +typedef enum { + GPIO_DIRECTION_INPUT = 0, ///< gpio as input + GPIO_DIRECTION_OUTPUT , ///< gpio as output +} gpio_direction_e; + +/*----- GPIO Control Codes: Mode Parameters: Parity -----*/ +typedef enum { + GPIO_IRQ_MODE_RISING_EDGE = 0, ///< interrupt mode for rising edge + GPIO_IRQ_MODE_FALLING_EDGE , ///< interrupt mode for falling edge + GPIO_IRQ_MODE_DOUBLE_EDGE , ///< interrupt mode for double edge + GPIO_IRQ_MODE_LOW_LEVEL , ///< interrupt mode for low level + GPIO_IRQ_MODE_HIGH_LEVEL , ///< interrupt mode for high level +} gpio_irq_mode_e; + +/** +\brief GPIO Driver Capabilities. +*/ +typedef struct { + uint32_t interrupt_mode : 1; ///< suphandles GPIO interrupt mode + uint32_t pull_mode : 1; +} gpio_capabilities_t; + + +typedef void (*gpio_event_cb_t)(void *arg); ///< gpio Event call back. + +/** + \brief Initialize GPIO module. 1. Initializes the resources needed for the GPIO handle 2.registers event callback function + 3.get gpio_port_handle + \param[in] port port_name. + \return gpio_port_handle +*/ +gpio_port_handle_t csi_gpio_port_initialize(port_name_t port); + +/** + \brief De-initialize GPIO handle. stops operation and releases the software resources used by the handle + \param[in] handle gpio port handle to operate. + \return error code +*/ +int32_t csi_gpio_port_uninitialize(gpio_port_handle_t handle); + +/** + \brief Get gpio capabilities.all pins have same capabilities in one handle + \param[in] handle handle instance to operate. + \return \ref gpio_capabilities_t +*/ +gpio_capabilities_t csi_gpio_get_io_capabilities(gpio_port_handle_t handle); + +/** + \brief config multiple pin within one handle + \param[in] handle gpio port handle to operate. + \param[in] mask the bitmask to identify which bits in the handle should be included (0 - ignore) + \param[in] mode \ref gpio_mode_e + \param[in] dir \ref gpio_direction_e + \return error code +*/ +int32_t csi_gpio_port_config(gpio_port_handle_t handle, + uint32_t mask, + gpio_mode_e mode, + gpio_direction_e dir); + +/** + \brief Write value to the handle(write value to multiple pins on one handle at the same time) + \param[in] handle gpio port handle to operate. + \param[in] mask The bitmask to identify which bits in the handle should be included (0 - ignore) + \param[in] value the value to be set + \return error code +*/ +int32_t csi_gpio_port_write(gpio_port_handle_t handle, uint32_t mask, uint32_t value); + +/** + \brief Read the current value on the handle(read value of multiple pins on one handle at the same time) + \param[in] handle gpio port handle to operate. + \param[in] mask The bitmask to identify which bits in the handle should be included (0 - ignore) + \param[out] value an integer with each bit corresponding to an associated handle pin setting + \return error code +*/ +int32_t csi_gpio_port_read(gpio_port_handle_t handle, uint32_t mask, uint32_t *value); + +/** + \brief Initialize GPIO handle. + \param[in] gpio_pin Pointer to the pin_t. + \param[in] cb_event Pointer to \ref gpio_event_cb_t + \param[in] arg Pointer to \ref arg used for the callback + \return gpio_pin_handle +*/ +gpio_pin_handle_t csi_gpio_pin_initialize(pin_t gpio_pin, gpio_event_cb_t cb_event, void *arg); + +/** + \brief De-initialize GPIO pin handle.stops operation and releases the software resources used by the handle. + \param[in] handle gpio pin handle to operate. + \return error code +*/ +int32_t csi_gpio_pin_uninitialize(gpio_pin_handle_t handle); + +/** + \brief config pin + \param[in] pin gpio pin handle to operate. + \param[in] mode \ref gpio_mode_e + \param[in] dir \ref gpio_direction_e + \return error code +*/ +int32_t csi_gpio_pin_config(gpio_pin_handle_t pin, + gpio_mode_e mode, + gpio_direction_e dir); + +/** + \brief Set one or zero to the selected GPIO pin. + \param[in] pin gpio pin handle to operate. + \param[in] value the value to be set + \return error code +*/ +int32_t csi_gpio_pin_write(gpio_pin_handle_t pin, bool value); + +/** + \brief Get the value of selected GPIO pin. + \param[in] pin gpio pin handle to operate. + \param[out] value buf to store the pin value + \return error code +*/ +int32_t csi_gpio_pin_read(gpio_pin_handle_t pin, bool *value); + +/** + \brief set GPIO interrupt mode. + \param[in] pin gpio pin handle to operate. + \param[in] mode the irq mode to be set + \param[in] enable the enable flag + \return error code +*/ +int32_t csi_gpio_pin_irq_set(gpio_pin_handle_t pin, gpio_irq_mode_e mode, bool enable); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_GPIO_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_iic.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_iic.h new file mode 100644 index 000000000..b4b492f84 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_iic.h @@ -0,0 +1,288 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_iic.h + * @brief header file for iic driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_IIC_H_ +#define _CSI_IIC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +/// definition for iic handle. +typedef void *iic_handle_t; + +/*----- IIC Control Codes: Mode -----*/ +typedef enum { + IIC_MODE_MASTER, ///< IIC Master + IIC_MODE_SLAVE ///< IIC Slave +} iic_mode_e; + +/*----- IIC Control Codes: IIC Bus Speed -----*/ +typedef enum { + I2C_BUS_SPEED_STANDARD = 0, ///< Standard Speed (100kHz) + I2C_BUS_SPEED_FAST = 1, ///< Fast Speed (400kHz) + I2C_BUS_SPEED_FAST_PLUS = 2, ///< Fast+ Speed ( 1MHz) + I2C_BUS_SPEED_HIGH = 3 ///< High Speed (3.4MHz) +} iic_speed_e; + +/*----- IIC Control Codes: IIC Address Mode -----*/ +typedef enum { + I2C_ADDRESS_7BIT = 0, ///< 7-bit address mode + I2C_ADDRESS_10BIT = 1 ///< 10-bit address mode +} iic_address_mode_e; + +/** +\brief IIC Status +*/ +typedef struct { + uint32_t busy : 1; ///< Transmitter/Receiver busy flag + uint32_t mode : 1; ///< Mode: 0=Slave, 1=Master + uint32_t direction : 1; ///< Direction: 0=Transmitter, 1=Receiver + uint32_t general_call : 1; ///< General Call(address 0) indication (cleared on start of next Slave operation) + uint32_t arbitration_lost : 1; ///< Master lost arbitration(in case of multi-masters) (cleared on start of next Master operation) + uint32_t bus_error : 1; ///< Bus error detected (cleared on start of next Master/Slave operation) +} iic_status_t; + +/****** IIC Event *****/ +typedef enum { + I2C_EVENT_TRANSFER_DONE = 0, ///< Master/Slave Transmit/Receive finished + I2C_EVENT_TRANSFER_INCOMPLETE = 1, ///< Master/Slave Transmit/Receive incomplete transfer + I2C_EVENT_SLAVE_TRANSMIT = 2, ///< Slave Transmit operation requested + I2C_EVENT_SLAVE_RECEIVE = 3, ///< Slave Receive operation requested + I2C_EVENT_ADDRESS_NACK = 4, ///< Address not acknowledged from Slave + I2C_EVENT_GENERAL_CALL = 5, ///< General Call indication + I2C_EVENT_ARBITRATION_LOST = 6, ///< Master lost arbitration + I2C_EVENT_BUS_ERROR = 7, ///< Bus error detected (START/STOP at illegal position) + I2C_EVENT_BUS_CLEAR = 8 ///< Bus clear finished +} iic_event_e; + +typedef void (*iic_event_cb_t)(iic_event_e event, void *arg); ///< Pointer to \ref iic_event_cb_t : IIC Event call back. + +/** +\brief IIC Driver Capabilities. +*/ +typedef struct { + uint32_t address_10_bit : 1; ///< supports 10-bit addressing +} iic_capabilities_t; + +/** + \brief Initialize IIC Interface specified by pins. \n + 1. Initializes the resources needed for the IIC interface 2.registers event callback function + \param[in] scl scl pin of iic. + \param[in] sda sda pin of iic. + \param[in] cb_event Pointer to \ref iic_event_cb_t + \param[in] cb_arg argument for call back function + \return 0 for success, negative for error code +*/ +iic_handle_t csi_iic_initialize(pin_t scl, pin_t sda, iic_event_cb_t cb_event, void *cb_arg); + +/** + \brief De-initialize IIC Interface. stops operation and releases the software resources used by the interface + \param[in] handle iic handle to operate. + \return 0 for success, negative for error code +*/ +int32_t csi_iic_uninitialize(iic_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle iic handle to operate. + \return \ref iic_capabilities_t +*/ +iic_capabilities_t csi_iic_get_capabilities(iic_handle_t handle); + +/** + \brief config iic attributes. + \param[in] handle iic handle to operate. + \param[in] mode iic mode \ref iic_mode_e. if negative, then this attribute not changed. + \param[in] speed iic speed \ref iic_speed_e. if negative, then this attribute not changed. + \param[in] addr_mode iic address mode \ref iic_address_mode_e. if negative, then this attribute not changed. + \param[in] slave_addr iic address of slave. if negative, then this attribute not changed. + \return 0 for success, negative for error code +*/ +int32_t csi_iic_config(iic_handle_t handle, + iic_mode_e mode, + iic_speed_e speed, + iic_address_mode_e addr_mode, + int32_t slave_addr); + +/** + \brief Start transmitting data as I2C Master. + This function is non-blocking,\ref iic_event_e is signaled when transfer completes or error happens. + \ref csi_iic_get_status can indicates transmission status. + \param[in] handle iic handle to operate. + \param[in] data data to send to I2C Slave + \param[in] num Number of data items to send + \param[in] xfer_pending Transfer operation is pending - Stop condition will not be generated + \return 0 for success, negative for error code +*/ +int32_t csi_iic_master_send(iic_handle_t handle, const void *data, uint32_t num, bool xfer_pending); + +/** + \brief Start receiving data as I2C Master. + This function is non-blocking,\ref iic_event_e is signaled when transfer completes or error happens. + \ref csi_iic_get_status can indicates transmission status. + \param[in] handle iic handle to operate. + \param[out] data Pointer to buffer for data to receive from IIC receiver + \param[in] num Number of data items to receive + \param[in] xfer_pending Transfer operation is pending - Stop condition will not be generated + \return 0 for success, negative for error code +*/ +int32_t csi_iic_master_receive(iic_handle_t handle, void *data, uint32_t num, bool xfer_pending); + +/** + \brief Start transmitting data as I2C Slave. + This function is non-blocking,\ref iic_event_e is signaled when transfer completes or error happens. + \ref csi_iic_get_status can indicates transmission status. + \param[in] handle iic handle to operate. + \param[in] data Pointer to buffer with data to transmit to I2C Master + \param[in] num Number of data items to send + \return 0 for success, negative for error code +*/ +int32_t csi_iic_slave_send(iic_handle_t handle, const void *data, uint32_t num); + +/** + \brief Start receiving data as I2C Slave. + This function is non-blocking,\ref iic_event_e is signaled when transfer completes or error happens. + \ref csi_iic_get_status can indicates transmission status. + \param[in] handle iic handle to operate. + \param[out] data Pointer to buffer for data to receive from I2C Master + \param[in] num Number of data items to receive + \return 0 for success, negative for error code +*/ +int32_t csi_iic_slave_receive(iic_handle_t handle, const void *data, uint32_t num); + +/** + \brief abort transfer. + \param[in] handle iic handle to operate. + \return 0 for success, negative for error code +*/ +int32_t csi_iic_abort_transfer(iic_handle_t handle); + +/** + \brief Get IIC status. + \param[in] handle iic handle to operate. + \return IIC status \ref iic_status_t +*/ +iic_status_t csi_iic_get_status(iic_handle_t handle); + +/** + \brief control IIC power. + \param[in] handle iic handle to operate. + \param[in] state power state.\ref csi_power_stat_e. + \return error code +*/ +int32_t csi_iic_power_control(iic_handle_t handle, csi_power_stat_e state); + +/** + \brief config iic mode. + \param[in] handle iic handle to operate. + \param[in] mode \ref iic_mode_e.if negative, then this attribute not changed + \return error code +*/ +int32_t csi_iic_config_mode(iic_handle_t handle, iic_mode_e mode); + +/** + \brief config iic speed. + \param[in] handle iic handle to operate. + \param[in] speed \ref iic_speed_e.if negative, then this attribute not changed + \return error code +*/ +int32_t csi_iic_config_speed(iic_handle_t handle, iic_speed_e speed); + +/** + \brief config iic address mode. + \param[in] handle iic handle to operate. + \param[in] addr_mode \ref iic_address_mode_e.if negative, then this attribute not changed + \return error code +*/ +int32_t csi_iic_config_addr_mode(iic_handle_t handle, iic_address_mode_e addr_mode); + + +/** + \brief config iic slave address. + \param[in] handle iic handle to operate. + \param[in] slave_addr slave address.if negative, then this attribute not changed + \return error code +*/ +int32_t csi_iic_config_slave_addr(iic_handle_t handle, int32_t slave_addr); + +/** + \brief Get IIC transferred data count. + \param[in] handle iic handle to operate. + \return number of data bytes transferred +*/ +uint32_t csi_iic_get_data_count(iic_handle_t handle); + +/** + \brief Send START command. + \param[in] handle iic handle to operate. + \return error code +*/ +int32_t csi_iic_send_start(iic_handle_t handle); + +/** + \brief Send STOP command. + \param[in] handle iic handle to operate. + \return error code +*/ +int32_t csi_iic_send_stop(iic_handle_t handle); + +/** + \brief Reset I2C peripheral. + \param[in] handle iic handle to operate. + \return error code +*/ +int32_t csi_iic_reset(iic_handle_t handle); + +/** + \brief Read a single byte from the I2C bus. + \param[in] handle iic handle to operate. + \param[in] last Acknoledge,indicates if the byte is to be acknowledged (1 = acknowledge) + \return error code if negative, else the data is the lowest byte of return value +*/ +int32_t csi_iic_read_byte(iic_handle_t handle, int32_t last); + +/** + \brief Write one byte. + \param[in] handle iic handle to operate. + \return 0 if NAK was received, 1 if ACK was received, 2 for timeout. negative for error +*/ +int32_t csi_iic_write_byte(iic_handle_t handle, uint8_t data); + +/** + \brief Check to see if the I2C slave has been addressed. + \param[in] handle iic handle to operate. + \return 1 - read addressed, 2 - write to all slaves, + 3 - write addressed, 0 - the slave has not been addressed. + negative for error +*/ +int32_t csi_iic_slave_check_addressed(iic_handle_t handle); + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_IIC_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_intc.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_intc.h new file mode 100644 index 000000000..10ee4cea1 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_intc.h @@ -0,0 +1,163 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_intc.h + * @brief header file for intc driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_INTC_H_ +#define _CSI_INTC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +typedef enum int_trigger_mode_t +{ + INT_MODE_LOW_LEVEL, + INT_MODE_HIGH_LEVEL, + INT_MODE_RISING_EDGE, + INT_MODE_FALLING_EDGE, + INT_MODE_DOUBLE_EDGE, +} int_trigger_mode_t; + +/** + \brief initialize the INTC interrupt controller + \param [in] prio_bits the priority bits of INTC interrupt controller. + */ +void csi_intc_init(void); + +/** + \brief Enable External Interrupt + \details Enables a device-specific interrupt in the INTC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +void csi_intc_enable_irq(int32_t IRQn); + +/** + \brief Disable External Interrupt + \details Disables a device-specific interrupt in the INTC interrupt controller. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +void csi_intc_disable_irq(int32_t IRQn); + +/** + \brief Get Pending Interrupt + \details Reads the pending register in the INTC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +uint32_t csi_intc_get_pending_irq(int32_t IRQn); + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +void csi_intc_set_pending_irq(int32_t IRQn); + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +void csi_intc_clear_pending_irq(int32_t IRQn); + +/** + \brief Get Wake up Interrupt + \details Reads the wake up register in the INTC and returns the pending bit for the specified interrupt. + \param [in] IRQn Interrupt number. + \return 0 Interrupt is not set as wake up interrupt. + \return 1 Interrupt is set as wake up interrupt. + */ +uint32_t csi_intc_get_wakeup_irq(int32_t IRQn); + +/** + \brief Set Wake up Interrupt + \details Sets the wake up bit of an external interrupt. + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +void csi_intc_set_wakeup_irq(int32_t IRQn); + +/** + \brief Clear Wake up Interrupt + \details Clears the wake up bit of an external interrupt. + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +void csi_intc_clear_wakeup_irq(int32_t IRQn); + +/** + \brief Get Active Interrupt + \details Reads the active register in the INTC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +uint32_t csi_intc_get_active(int32_t IRQn); + +/** + \brief Set Threshold register + \details set the threshold register in the INTC. + \param [in] VectThreshold specific vecter threshold. + \param [in] PrioThreshold specific priority threshold. + */ +void csi_intc_set_threshold(uint32_t VectThreshold, uint32_t PrioThreshold); + +/** + \brief Set Interrupt Priority + \details Sets the priority of an interrupt. + \note The priority cannot be set for every core interrupt. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +void csi_intc_set_prio(int32_t IRQn, uint32_t priority); + +/** + \brief Get Interrupt Priority + \details Reads the priority of an interrupt. + The interrupt number can be positive to specify an external (device specific) interrupt, + or negative to specify an internal (core) interrupt. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +uint32_t csi_intc_get_prio(int32_t IRQn); + +/** + \brief funciton is acknowledge the IRQ. this interface is internally used by irq system + \param[in] irq irq number to operate + \return 0 on success; -1 on failure + */ +int csi_intc_ack_irq(int32_t IRQn); + +/** + \briefThis function is set the attributes of an IRQ. + \param[in] irq irq number to operate + \param[in] priority interrupt priority + \param[in] trigger_mode interrupt trigger_mode + \return 0 on success; -1 on failure +*/ +int csi_intc_set_attribute(int32_t IRQn, uint32_t priority,int_trigger_mode_t trigger_mode); + +#endif /* _CSI_INTC_H_ */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_pmu.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_pmu.h new file mode 100644 index 000000000..0d7774264 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_pmu.h @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_pmu.h + * @brief header file for pmu driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_PMU_H_ +#define _CSI_PMU_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/// definition for pmu handle. +typedef void *pmu_handle_t; + +/****** PMU specific error codes *****/ +typedef enum { + EDRV_PMU_MODE = (EDRV_SPECIFIC + 1), ///< Specified Mode not supported +} pmu_error_e; + +/*----- PMU Control Codes: Mode -----*/ +typedef enum { + PMU_MODE_RUN = 0, ///< Running mode + PMU_MODE_SLEEP , ///< Sleep mode + PMU_MODE_DORMANT , ///< Dormant mode + PMU_MODE_STDBY , ///< Standby mode + PMU_MODE_SHUTDOWN ///< Shutdown mode +} pmu_mode_e; + +/*----- PMU Control Codes: Wakeup type -----*/ +typedef enum { + PMU_WAKEUP_TYPE_PULSE = 0, ///< Pulse interrupt + PMU_WAKEUP_TYPE_LEVEL ///< Level interrupt +} pmu_wakeup_type_e; + +/*----- PMU Control Codes: Wakeup polarity -----*/ +typedef enum { + PMU_WAKEUP_POL_LOW = 0, ///< Low or negedge + PMU_WAKEUP_POL_HIGH ///< High or posedge +} pmu_wakeup_pol_e; + +/****** PMU Event *****/ +typedef enum { + PMU_EVENT_SLEEP_DONE = 0, ///< Send completed; however PMU may still transmit data + PMU_EVENT_BEFORE_SLEEP = 1 +} pmu_event_e; + +typedef void (*pmu_event_cb_t)(int32_t idx, pmu_event_e event, pmu_mode_e mode); ///< Pointer to \ref pmu_event_cb_t : PMU Event call back. + +typedef int32_t (*pmu_action_cb_t)(pmu_event_e event); + +/** + \brief Initialize PMU Interface. 1. Initializes the resources needed for the PMU interface 2.registers event callback function + \param[in] idx the id of the pmu + \param[in] cb_event Pointer to \ref pmu_event_cb_t + \return return pmu handle if success +*/ +pmu_handle_t drv_pmu_initialize(int32_t idx, pmu_event_cb_t cb_event); + +/** + \brief De-initialize PMU Interface. stops operation and releases the software resources used by the interface + \param[in] handle pmu handle to operate. + \return error code +*/ +int32_t drv_pmu_uninitialize(pmu_handle_t handle); + +int32_t drv_pmu_power_control(int32_t idx, csi_power_stat_e state); + +/** + \brief choose the pmu mode to enter + \param[in] handle pmu handle to operate. + \param[in] mode \ref pmu_mode_e + \return error code +*/ +int32_t drv_pmu_enter_sleep(pmu_handle_t handle, pmu_mode_e mode); + +/** + \brief choose the pmu mode to enter + \param[in] handle pmu handle to operate. + \param[in] callback Pointer to \ref pmu_action_cb_t + \return error code +*/ +int32_t drv_pmu_register_module(pmu_action_cb_t callback); + +/** + \brief exit the pmu mode + \param[in] handle pmu handle to operate. + \return error code +*/ +int32_t drv_pmu_exit_sleep(pmu_handle_t handle); + +/** + \brief Config the wakeup source. + \param[in] handle pmu handle to operate + \param[in] type \ref pmu_wakeup_type + \param[in] pol \ref pmu_wakeup_pol + \param[in] enable flag control the wakeup source is enable or not + \return error code +*/ +int32_t drv_pmu_config_wakeup_source(pmu_handle_t handle, uint32_t irq_num, pmu_wakeup_type_e type, pmu_wakeup_pol_e pol, uint8_t enable); + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_PMU_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_pwm.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_pwm.h new file mode 100644 index 000000000..9d585429a --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_pwm.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_pwm.h + * @brief header file for pwm driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CSI_PWM_H_ +#define _CSI_PWM_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + + +/// definition for pwm handle. +typedef void *pwm_handle_t; + +/****** PWM specific error codes *****/ +typedef enum { + EDRV_PWM_MODE = (EDRV_SPECIFIC + 1), ///< Specified Mode not supported +} drv_pwm_error_e; + + +/** + \brief Initialize PWM Interface. 1. Initializes the resources needed for the PWM interface 2.registers event callback function + \param[in] pwm_pin pin name of pwm + \return handle pwm handle to operate. +*/ +pwm_handle_t drv_pwm_initialize(pin_t pwm_pin); + +/** + \brief De-initialize PWM Interface. stops operation and releases the software resources used by the interface + \param[in] handle pwm handle to operate. + \return error code +*/ +int32_t drv_pwm_uninitialize(pwm_handle_t handle); + +/** + \brief config pwm mode. + \param[in] handle pwm handle to operate. + \param[in] sysclk configured system clock. + \param[in] period_us the PWM period in us + \param[in] duty the PMW duty. ( 0 - 10000 represents 0% - 100% ,other values are invalid) + \return error code +*/ +int32_t drv_pwm_config(pwm_handle_t handle, + uint32_t sysclk, + uint32_t period_us, + uint32_t duty); + +/** + \brief start generate pwm signal. + \param[in] handle pwm handle to operate. + \return error code +*/ +int32_t drv_pwm_start(pwm_handle_t handle); + +/** + \brief Stop generate pwm signal. + \param[in] handle pwm handle to operate. + \return error code +*/ +int32_t drv_pwm_stop(pwm_handle_t handle); + +/** + \brief Get PWM status. + \param[in] handle pwm handle to operate. + \return PWM status \ref pwm_status_t +pwm_status_t drv_pwm_get_status(pwm_handle_t handle); +*/ + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_PWM_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_rsa.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_rsa.h new file mode 100644 index 000000000..c7b41c108 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_rsa.h @@ -0,0 +1,223 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_rsa.h + * @brief header file for rsa driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CSI_RSA_H_ +#define _CSI_RSA_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + + +/// definition for rsa handle. +typedef void *rsa_handle_t; + +/****** RSA specific error codes *****/ +typedef enum { + RSA_ERROR_DATA_BITS , ///< Specified number of Data bits not supported + RSA_ERROR_ENDIAN ///< Specified endian not supported +} drv_rsa_error_e; + +/*----- RSA Control Codes: Mode Parameters: Data Bits -----*/ +typedef enum { + RSA_DATA_BITS_192 = 0, ///< 192 Data bits + RSA_DATA_BITS_256 , ///< 256 Data bits + RSA_DATA_BITS_512 , ///< 512 Data bits + RSA_DATA_BITS_1024 , ///< 1024 Data bits (default) + RSA_DATA_BITS_2048 ///< 2048 Data bits +} rsa_data_bits_e; + +/*----- RSA Control Codes: Mode Parameters: Endian -----*/ +typedef enum { + RSA_ENDIAN_MODE_LITTLE = 0, ///< RSA Little Endian Mode + RSA_ENDIAN_MODE_BIG ///< RSA Big Endian Mode +} rsa_endian_mode_e; + +typedef enum { + RSA_PADDING_MODE_PKCS1 = 1, ///< RSA PKCS1 Padding Mode + RSA_PADDING_MODE_NO , ///< RSA NO Padding Mode + RSA_PADDING_MODE_SSLV23 , ///< RSA SSLV23 Padding Mode + RSA_PADDING_MODE_PKCS1_OAEP , ///< RSA PKCS1 OAEP Padding Mode + RSA_PADDING_MODE_X931 , ///< RSA X931 Padding Mode + RSA_PADDING_MODE_PSS ///< RSA PSS Padding Mode +} rsa_padding_type_e; + +typedef enum { + RSA_HASH_TYPE_MD5 = 0, + RSA_HASH_TYPE_SHA1 , + RSA_HASH_TYPE_SHA224 , + RSA_HASH_TYPE_SHA256 , + RSA_HASH_TYPE_SHA384 , + RSA_HASH_TYPE_SHA512 +} rsa_hash_type_e; + +/*----- RSA Control Codes: Mode Parameters: Padding mode -----*/ +typedef struct { + rsa_padding_type_e padding_type; + rsa_hash_type_e hash_type; +} rsa_padding_t; + +/** +\brief RSA Status +*/ +typedef struct { + uint32_t busy : 1; ///< Calculate busy flag +} rsa_status_t; + +/****** RSA Event *****/ +typedef enum { + RSA_EVENT_ENCRYPT_COMPLETE = 0, ///< Encrypt completed + RSA_EVENT_DECRYPT_COMPLETE , ///< Decrypt completed + RSA_EVENT_SIGN_COMPLETE , ///< Sign completed + RSA_EVENT_VERIFY_COMPLETE , ///< Verify completed +} rsa_event_e; + +typedef void (*rsa_event_cb_t)(rsa_event_e event); ///< Pointer to \ref rsa_event_cb_t : RSA Event call back. + + +/** +\brief RSA Device Driver Capabilities. +*/ +typedef struct { + uint32_t bits_192 : 1; ///< supports 192bits modular length + uint32_t bits_256 : 1; ///< supports 256bits modular length + uint32_t bits_512 : 1; ///< supports 512bits modular length + uint32_t bits_1024 : 1; ///< supports 1024bits modular length + uint32_t bits_2048 : 1; ///< supports 2048bits modular length +} rsa_capabilities_t; + + +// Function documentation + +/** + \brief get rsa handle count. + \return rsa handle count +*/ +int32_t csi_rsa_get_instance_count(void); + +/** + \brief Initialize RSA Interface. 1. Initializes the resources needed for the RSA interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_rsa_get_instance_count() + \param[in] cb_event Pointer to \ref rsa_event_cb_t + \return pointer to rsa handle +*/ +rsa_handle_t csi_rsa_initialize(int32_t idx, rsa_event_cb_t cb_event); + +/** + \brief De-initialize RSA Interface. stops operation and releases the software resources used by the interface + \param[in] handle rsa handle to operate. + \return error code +*/ +int32_t csi_rsa_uninitialize(rsa_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle rsa handle to operate. + \return \ref rsa_capabilities_t +*/ +rsa_capabilities_t csi_rsa_get_capabilities(rsa_handle_t handle); + +/** + \brief config rsa mode. + \param[in] handle rsa handle to operate. + \param[in] data_bits \ref rsa_data_bits_e + \param[in] endian \ref rsa_endian_mode_e + \return error code +*/ +int32_t csi_rsa_config(rsa_handle_t handle, + rsa_data_bits_e data_bits, + rsa_endian_mode_e endian, + void *arg + ); + +/** + \brief encrypt + \param[in] handle rsa handle to operate. + \param[in] n Pointer to the public modulus + \param[in] e Pointer to the public exponent + \param[in] src Pointer to the source data. + \param[in] src_size the source data len + \param[out] out Pointer to the result buffer + \param[out] out_size the result size + \param[in] padding \ref rsa_padding_t + \return error code +*/ +int32_t csi_rsa_encrypt(rsa_handle_t handle, void *n, void *e, void *src, int32_t src_size, void *out, uint32_t *out_size, rsa_padding_t padding); + + +/** + \brief decrypt + \param[in] handle rsa handle to operate. + \param[in] n Pointer to the public modulus + \param[in] d Pointer to the privte exponent + \param[in] src Pointer to the source data. + \param[in] src_size the source data len + \param[out] out Pointer to the result buffer + \param[out] out_size the result size + \param[in] padding \ref rsa_padding_t + \return error code +*/ +int32_t csi_rsa_decrypt(rsa_handle_t handle, void *n, void *d, void *src, uint32_t src_size, void *out, uint32_t *out_size, rsa_padding_t padding); + +/** + \brief rsa sign + \param[in] handle rsa handle to operate. + \param[in] n Pointer to the public modulus + \param[in] d Pointer to the privte exponent + \param[in] src Pointer to the source data. + \param[in] src_size the source data len + \param[out] signature Pointer to the signature + \param[out] sig_size the signature size + \param[in] padding \ref rsa_padding_t + \return error code +*/ +int32_t csi_rsa_sign(rsa_handle_t handle, void *n, void *d, void *src, uint32_t src_size, void *signature, void *sig_size, rsa_padding_t padding); + +/** + \brief rsa verify + \param[in] handle rsa handle to operate. + \param[in] n Pointer to the public modulus + \param[in] e Pointer to the public exponent + \param[in] src Pointer to the source data. + \param[in] src_size the source data len + \param[in] signature Pointer to the signature + \param[in] sig_size the signature size + \param[out] result Pointer to the result + \param[in] padding \ref rsa_padding_t + \return error code +*/ +int32_t csi_rsa_verify(rsa_handle_t handle, void *n, void *e, void *src, uint32_t src_size, void *signature, uint32_t sig_size, void *result, rsa_padding_t padding); +/** + \brief Get RSA status. + \param[in] handle rsa handle to operate. + \return RSA status \ref rsa_status_t +*/ +rsa_status_t csi_rsa_get_status(rsa_handle_t handle); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_RSA_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_rtc.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_rtc.h new file mode 100644 index 000000000..182b3df84 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_rtc.h @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_rtc.h + * @brief header file for rtc driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_RTC_H_ +#define _CSI_RTC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +/// definition for rtc handle. +typedef void *rtc_handle_t; + +/****** rtc specific error codes *****/ +typedef enum { + EDRV_RTC_TIME = (EDRV_SPECIFIC + 1), ///< timer data not supported +} drv_rtc_error_e; + +/** +\brief RTC Status +*/ +typedef struct { + uint32_t active : 1; ///< rtc is running or not +} rtc_status_t; + +/****** RTC Event *****/ +typedef enum { + RTC_EVENT_TIMER_INTRERRUPT = 0 ///< generate interrupt +} rtc_event_e; + +typedef void (*rtc_event_cb_t)(rtc_event_e event); ///< Pointer to \ref rtc_event_cb_t : RTC Event call back. + +/** +\brief RTC Device Driver Capabilities. +*/ +typedef struct { + uint32_t interrupt_mode : 1; ///< supports Interrupt mode + uint32_t wrap_mode : 1; ///< supports wrap mode +} rtc_capabilities_t; + +/** + \brief get rtc instance count. + \return rtc instance count +*/ +int32_t csi_rtc_get_instance_count(void); + +/** + \brief Initialize RTC Interface. 1. Initializes the resources needed for the RTC interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_rtc_get_instance_count() + \param[in] cb_event Pointer to \ref rtc_event_cb_t + \return pointer to rtc instance +*/ +rtc_handle_t csi_rtc_initialize(int32_t idx, rtc_event_cb_t cb_event); + +/** + \brief De-initialize RTC Interface. stops operation and releases the software resources used by the interface + \param[in] handle rtc handle to operate. + \return error code +*/ +int32_t csi_rtc_uninitialize(rtc_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle rtc handle to operate. + \return \ref rtc_capabilities_t +*/ +rtc_capabilities_t csi_rtc_get_capabilities(rtc_handle_t handle); + +/** + \brief Set RTC timer. + \param[in] handle rtc handle to operate. + \param[in] rtctime pointer to rtc time + \return error code +*/ +int32_t csi_rtc_set_time(rtc_handle_t handle, const struct tm *rtctime); + +/** + \brief Get RTC timer. + \param[in] handle rtc handle to operate. + \param[in] rtctime pointer to rtc time + \return error code +*/ +int32_t csi_rtc_get_time(rtc_handle_t handle, struct tm *rtctime); + + + +/** + \brief Start RTC timer. + \param[in] handle rtc handle to operate. + \return error code +*/ +int32_t csi_rtc_start(rtc_handle_t handle); + +/** + \brief Stop RTC timer. + \param[in] handle rtc handle to operate. + \return error code +*/ +int32_t csi_rtc_stop(rtc_handle_t handle); + +/** + \brief config rtc mode. + \param[in] handle rtc handle to operate. + \return error code +*/ +//int32_t drv_rtc_config (rtc_handle_t handle/*,rtc_mode_e mode*/); + +/** + \brief Get RTC status. + \param[in] handle rtc handle to operate. + \return RTC status \ref rtc_status_t +*/ +rtc_status_t csi_rtc_get_status(rtc_handle_t handle); + +/** + \brief config RTC timer. + \param[in] handle rtc handle to operate. + \param[in] rtctime time to wake up + \return error code +*/ +int32_t csi_rtc_timer_config(rtc_handle_t handle, const struct tm *rtctime); + +/** + \brief disable or enable RTC timer. + \param[in] handle rtc handle to operate. + \param[in] en set 1 enable for rtc timer + \return error code +*/ +int32_t csi_rtc_timer_enable(rtc_handle_t handle, uint8_t en); + + + + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_RTC_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_sha.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_sha.h new file mode 100644 index 000000000..238d1548f --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_sha.h @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_sha.h + * @brief header file for sha driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CSI_SHA_H_ +#define _CSI_SHA_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + + +/// definition for sha handle. +typedef void *sha_handle_t; + +/****** SHA specific error codes *****/ +typedef enum { + SHA_ERROR_MODE = (EDRV_SPECIFIC + 1), ///< Specified Mode not supported + SHA_ERROR_ENDIAN ///< Specified endian not supported +} drv_sha_error_e; + +/*----- SHA Control Codes: Mode -----*/ +typedef enum { + SHA_MODE_1 = 1, ///< SHA_1 mode + SHA_MODE_256 , ///< SHA_256 mode + SHA_MODE_224 , ///< SHA_224 mode + SHA_MODE_512 , ///< SHA_512 mode + SHA_MODE_384 , ///< SHA_384 mode + SHA_MODE_512_256 , ///< SHA_512_256 mode + SHA_MODE_512_224 ///< SHA_512_224 mode +} sha_mode_e; + +/*----- SHA Control Codes: Mode Parameters: Endian -----*/ +typedef enum { + SHA_ENDIAN_MODE_BIG = 0, ///< Big Endian Mode + SHA_ENDIAN_MODE_LITTLE , ///< Little Endian Mode +} sha_endian_mode_e; + +/** +\brief SHA Status +*/ +typedef struct { + uint32_t busy : 1; ///< calculate busy flag +} sha_status_t; + +/****** SHA Event *****/ +typedef enum { + SHA_EVENT_COMPLETE = 0 ///< calculate completed +} sha_event_e; + +typedef void (*sha_event_cb_t)(sha_event_e event); ///< Pointer to \ref sha_event_cb_t : SHA Event call back. + + +/** +\brief SHA Device Driver Capabilities. +*/ +typedef struct { + uint32_t sha1 : 1; ///< supports sha1 mode + uint32_t sha224 : 1; ///< supports sha224 mode + uint32_t sha256 : 1; ///< supports sha256 mode + uint32_t sha384 : 1; ///< supports sha384 mode + uint32_t sha512 : 1; ///< supports sha512 mode + uint32_t sha512_224 : 1; ///< supports sha512_224 mode + uint32_t sha512_256 : 1; ///< supports sha512_256 mode + uint32_t endianmode : 1; ///< supports endian mode control + uint32_t interruptmode : 1; ///< supports interrupt mode +} sha_capabilities_t; + + +// Function documentation + +/** + \brief get sha handle count. + \return sha handle count +*/ +int32_t csi_sha_get_instance_count(void); + +/** + \brief Initialize SHA Interface. 1. Initializes the resources needed for the SHA interface 2.registers event callback function + \param[in] handle Pointer to the buffer store the sha context + \param[in] cb_event Pointer to \ref sha_event_cb_t + \return return sha handle if success +*/ +sha_handle_t csi_sha_initialize(sha_handle_t handle, sha_event_cb_t cb_event); + +/** + \brief De-initialize SHA Interface. stops operation and releases the software resources used by the interface + \param[in] handle sha handle to operate. + \return error code +*/ +int32_t csi_sha_uninitialize(sha_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle sha handle to operate. + \return \ref sha_capabilities_t +*/ +sha_capabilities_t csi_sha_get_capabilities(sha_handle_t handle); + +/** + \brief config sha mode. + \param[in] handle sha handle to operate. + \param[in] mode \ref sha_mode_e + \param[in] endian \ref sha_endian_mode_e + \return error code +*/ +int32_t csi_sha_config(sha_handle_t handle, + sha_mode_e mode, + sha_endian_mode_e endian + ); + +/** + \brief start the engine + \param[in] handle sha handle to operate. + \param[in] context Pointer to the sha context. + \return error code +*/ +int32_t csi_sha_starts(sha_handle_t handle, void *context); + +/** + \brief updata the engine + \param[in] handle sha handle to operate. + \param[in] context Pointer to the sha context. + \param[in] input Pointer to the Source data + \param[in] len the data len + \return error code +*/ +int32_t csi_sha_update(sha_handle_t handle, void *context, const void *input, uint32_t len); + +/** + \brief finish the engine + \param[in] handle sha handle to operate. + \param[in] context Pointer to the sha context. + \param[out] output Pointer to the dest data + \return error code +*/ +int32_t csi_sha_finish(sha_handle_t handle, void *context, void *output); + +/** + \brief Get SHA status. + \param[in] handle sha handle to operate. + \return SHA status \ref sha_status_t +*/ +sha_status_t csi_sha_get_status(sha_handle_t handle); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_SHA_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_spi.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_spi.h new file mode 100644 index 000000000..3e5afe570 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_spi.h @@ -0,0 +1,320 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_spi.h + * @brief header file for spi driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_SPI_H_ +#define _CSI_SPI_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#ifdef CONFIG_SPI_DMA +#include +#endif + +/// definition for spi handle. +typedef void *spi_handle_t; + +/****** SPI specific error codes *****/ +typedef enum { + EDRV_SPI_MODE = (EDRV_SPECIFIC + 1), ///< Specified Mode not supported + EDRV_SPI_FRAME_FORMAT, ///< Specified Frame Format not supported + EDRV_SPI_DATA_BITS, ///< Specified number of Data bits not supported + EDRV_SPI_BIT_ORDER, ///< Specified Bit order not supported + EDRV_SPI_SS_MODE ///< Specified Slave Select Mode not supported +} drv_spi_err_e; + +/*----- SPI Control Codes: Mode -----*/ +typedef enum { + SPI_MODE_INACTIVE = 0, ///< SPI Inactive + SPI_MODE_MASTER, ///< SPI Master (Output on MOSI, Input on MISO); arg = Bus Speed in bps + SPI_MODE_SLAVE, ///< SPI Slave (Output on MISO, Input on MOSI) + SPI_MODE_MASTER_SIMPLEX, ///< SPI Master (Output/Input on MOSI); arg = Bus Speed in bps + SPI_MODE_SLAVE_SIMPLEX ///< SPI Slave (Output/Input on MISO) +} spi_mode_e; + +/*----- SPI Control Codes: Mode Parameters: Frame Format -----*/ +typedef enum { + SPI_FORMAT_CPOL0_CPHA0 = 0, ///< Clock Polarity 0, Clock Phase 0 (default) + SPI_FORMAT_CPOL0_CPHA1, ///< Clock Polarity 0, Clock Phase 1 + SPI_FORMAT_CPOL1_CPHA0, ///< Clock Polarity 1, Clock Phase 0 + SPI_FORMAT_CPOL1_CPHA1, ///< Clock Polarity 1, Clock Phase 1 +} spi_format_e; + +/*----- SPI Control Codes: Mode Parameters: Bit Order -----*/ +typedef enum { + SPI_ORDER_MSB2LSB = 0, ///< SPI Bit order from MSB to LSB (default) + SPI_ORDER_LSB2MSB ///< SPI Bit order from LSB to MSB +} spi_bit_order_e; + +/*----- SPI Control Codes: Mode Parameters: Data Width in bits -----*/ +#define SPI_DATAWIDTH_MAX 32 /* 1 ~ 32 bit*/ + +/*----- SPI Control Codes: Mode Parameters: Slave Select Mode -----*/ +typedef enum { + /*options for SPI_MODE_MASTER/SPI_MODE_MASTER_SIMPLEX */ + SPI_SS_MASTER_UNUSED = 0, ///< SPI Slave Select when Master: Not used (default).SS line is not controlled by master, For example,SS line connected to a fixed low level + SPI_SS_MASTER_SW, ///< SPI Slave Select when Master: Software controlled. SS line is configured by software + SPI_SS_MASTER_HW_OUTPUT, ///< SPI Slave Select when Master: Hardware controlled Output.SS line is activated or deactivated automatically by hardware + SPI_SS_MASTER_HW_INPUT, ///< SPI Slave Select when Master: Hardware monitored Input.Used in multi-master configuration where a master does not drive the Slave Select when driving the bus, but rather monitors it + /*options for SPI_MODE_SLAVE/SPI_MODE_SLAVE_SIMPLEX */ + SPI_SS_SLAVE_HW, ///< SPI Slave Select when Slave: Hardware monitored (default).Hardware monitors the Slave Select line and accepts transfers only when the line is active + SPI_SS_SLAVE_SW ///< SPI Slave Select when Slave: Software controlled.Used only when the Slave Select line is not used. Software controls if the slave is responding or not(enables or disables transfers) +} spi_ss_mode_e; + +/****** SPI Slave Select Signal definitions *****/ +typedef enum { + SPI_SS_INACTIVE = 0, ///< SPI Slave Select Signal/line Inactive + SPI_SS_ACTIVE ///< SPI Slave Select Signal/line Active +} spi_ss_stat_e; + +/** +\brief SPI Status +*/ +typedef struct { + uint32_t busy : 1; ///< Transmitter/Receiver busy flag + uint32_t data_lost : 1; ///< Data lost: Receive overflow / Transmit underflow (cleared on start of transfer operation) + uint32_t mode_fault : 1; ///< Mode fault detected; optional (cleared on start of transfer operation) +} spi_status_t; + +/****** SPI Event *****/ +typedef enum { + SPI_EVENT_TRANSFER_COMPLETE = 0, ///< Data Transfer completed. Occurs after call to ARM_SPI_Send, ARM_SPI_Receive, or ARM_SPI_Transfer to indicate that all the data has been transferred. The driver is ready for the next transfer operation + SPI_EVENT_TX_COMPLETE, ///< Data Transfer completed. Occurs after call to ARM_SPI_Send, ARM_SPI_Receive, or ARM_SPI_Transfer to indicate that all the data has been transferred. The driver is ready for the next transfer operation + SPI_EVENT_RX_COMPLETE, ///< Data Transfer completed. Occurs after call to ARM_SPI_Send, ARM_SPI_Receive, or ARM_SPI_Transfer to indicate that all the data has been transferred. The driver is ready for the next transfer operation + SPI_EVENT_DATA_LOST, ///< Data lost: Receive overflow / Transmit underflow. Occurs in slave mode when data is requested/sent by master but send/receive/transfer operation has not been started and indicates that data is lost. Occurs also in master mode when driver cannot transfer data fast enough. + SPI_EVENT_MODE_FAULT ///< Master Mode Fault (SS deactivated when Master).Occurs in master mode when Slave Select is deactivated and indicates Master Mode Fault. The driver is ready for the next transfer operation. +} spi_event_e; + +typedef void (*spi_event_cb_t)(spi_event_e event, void *arg); ///< Pointer to \ref spi_event_cb_t : SPI Event call back. + +/** +\brief SPI Driver Capabilities. +*/ +typedef struct { + uint32_t simplex : 1; ///< supports Simplex Mode (Master and Slave) + uint32_t ti_ssi : 1; ///< supports TI Synchronous Serial Interface + uint32_t microwire : 1; ///< supports Microwire Interface + uint32_t event_mode_fault : 1; ///< Signal Mode Fault event: \ref spi_event_e +} spi_capabilities_t; + +/** + \brief Initialize SPI Interface. 1. Initializes the resources needed for the SPI interface 2.registers event callback function + \param[in] mosi spi pin of mosi + \param[in] miso spi pin of miso + \param[in] sclk spi pin of sclk + \param[in] ssel spi pin of ssel + \param[in] cb_event event call back function \ref spi_event_cb_t + \param[in] cb_arg argument for call back function + \return return spi handle if success +*/ +spi_handle_t csi_spi_initialize(pin_t mosi, pin_t miso, pin_t sclk, pin_t ssel, spi_event_cb_t cb_event, void *cb_arg); + +/** + \brief De-initialize SPI Interface. stops operation and releases the software resources used by the interface + \param[in] handle spi handle to operate. + \return error code +*/ +int32_t csi_spi_uninitialize(spi_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle spi handle to operate. + \return \ref spi_capabilities_t +*/ +spi_capabilities_t csi_spi_get_capabilities(spi_handle_t handle); + +/** + \brief config spi mode. + \param[in] handle spi handle to operate. + \param[in] sysclk sysclk for spi module. + \param[in] baud spi baud rate. if negative, then this attribute not changed + \param[in] mode \ref spi_mode_e . if negative, then this attribute not changed + \param[in] format \ref spi_format_e . if negative, then this attribute not changed + \param[in] order \ref spi_bit_order_e . if negative, then this attribute not changed + \param[in] ss_mode \ref spi_ss_mode_e . if negative, then this attribute not changed + \param[in] bit_width spi data bitwidth: (1 ~ SPI_DATAWIDTH_MAX) . if negative, then this attribute not changed + \return error code +*/ +int32_t csi_spi_config(spi_handle_t handle, + int32_t sysclk, + int32_t baud, + spi_mode_e mode, + spi_format_e format, + spi_bit_order_e order, + spi_ss_mode_e ss_mode, + int32_t bit_width); + +/** + \brief config spi default tx value. + \param[in] handle spi handle to operate. + \param[in] value default tx value + \return error code +*/ +int32_t csi_spi_set_default_tx_value(spi_handle_t handle, uint32_t value); + +/** +\brief sending data to SPI transmitter,(received data is ignored). + if non-blocking mode, this function only start the sending, + \ref spi_event_e is signaled when operation completes or error happens. + \ref csi_spi_get_status can indicates operation status. + if blocking mode, this function return after operation completes or error happens. + \param[in] handle spi handle to operate. + \param[in] data Pointer to buffer with data to send to SPI transmitter. data_type is : uint8_t for 1..8 data bits, uint16_t for 9..16 data bits,uint32_t for 17..32 data bits, + \param[in] num Number of data items to send. + \param[in] block_mode blocking and non_blocking to selcect + \return error code +*/ +int32_t csi_spi_send(spi_handle_t handle, const void *data, uint32_t num, uint8_t block_mode); + +/** + \brief receiving data from SPI receiver.transmits the default value as specified by csi_spi_set_default_tx_value + if non-blocking mode, this function only start the receiving, + \ref spi_event_e is signaled when operation completes or error happens. + \ref csi_spi_get_status can indicates operation status. + if blocking mode, this function return after operation completes or error happens. + \param[in] handle spi handle to operate. + \param[out] data Pointer to buffer for data to receive from SPI receiver + \param[in] num Number of data items to receive + \param[in] block_mode blocking and non_blocking to selcect + \return error code +*/ +int32_t csi_spi_receive(spi_handle_t handle, void *data, uint32_t num, uint8_t block_mode); + +/** + \brief sending/receiving data to/from SPI transmitter/receiver. + if non-blocking mode, this function only start the transfer, + \ref spi_event_e is signaled when operation completes or error happens. + \ref csi_spi_get_status can indicates operation status. + if blocking mode, this function return after operation completes or error happens. + \param[in] handle spi handle to operate. + \param[in] data_out Pointer to buffer with data to send to SPI transmitter + \param[out] data_in Pointer to buffer for data to receive from SPI receiver + \param[in] num_out Number of data items to send + \param[in] num_in Number of data items to receive + \param[in] block_mode blocking and non_blocking to selcect + \return error code +*/ +int32_t csi_spi_transfer(spi_handle_t handle, const void *data_out, void *data_in, uint32_t num_out, uint32_t num_in, uint8_t block_mode); + +/** + \brief abort spi transfer. + \param[in] handle spi handle to operate. + \return error code +*/ +int32_t csi_spi_abort_transfer(spi_handle_t handle); + +/** + \brief Get SPI status. + \param[in] handle spi handle to operate. + \return SPI status \ref spi_status_t +*/ +spi_status_t csi_spi_get_status(spi_handle_t handle); + +/** + \brief config the SPI mode. + \param[in] handle spi handle + \param[in] mode spi mode. \ref spi_mode_e + \return error code +*/ +int32_t csi_spi_config_mode(spi_handle_t handle, spi_mode_e mode); + +/** + \brief Set the SPI clock divider. + \param[in] handle spi handle + \param[in] baud spi baud rate + \param[in] apbfreq sysclk for spi module. + \return error code +*/ +int32_t csi_spi_config_baudrate(spi_handle_t handle, int32_t baud, int32_t apbfreq); + +/** + \brief config the SPI mode. + \param[in] handle spi handle + \param[in] order spi bit order.\ref spi_bit_order_e + \return error code +*/ +int32_t csi_spi_config_bit_order(spi_handle_t handle, spi_bit_order_e order); + +/** + \brief Set the SPI datawidth. + \param[in] handle spi handle + \param[in] datawidth date frame size in bits + \return error code +*/ +int32_t csi_spi_config_datawidth(spi_handle_t handle, int32_t datawidth); + +/** + \brief config the SPI format. + \param[in] handle spi handle + \param[in] format spi format. \ref spi_format_e + \return error code +*/ +int32_t csi_spi_config_format(spi_handle_t handle, spi_format_e format); + +/** + \brief config the SPI slave select mode. + \param[in] handle spi handle + \param[in] ss_mode spi slave select mode. \ref spi_ss_mode_e + \return error code +*/ +int32_t csi_spi_config_ss_mode(spi_handle_t handle, spi_ss_mode_e ss_mode); + +/** + \brief Get spi transferred data count. + \param[in] handle spi handle to operate. + \return number of data bytes transferred +*/ +uint32_t csi_spi_get_data_count(spi_handle_t handle); + +/** + \brief control spi power. + \param[in] handle spi handle to operate. + \param[in] state power state.\ref csi_power_stat_e. + \return error code +*/ +int32_t csi_spi_power_control(spi_handle_t handle, csi_power_stat_e state); + +/** + \brief Check if a value is available to read. + \param[in] handle spi handle to operate. + \return non-zero if a value is available +*/ +int32_t csi_spi_slave_readable(spi_handle_t handle); + +/** + \brief Control the Slave Select signal (SS). + \param[in] handle spi handle to operate. + \param[in] stat SS state. \ref spi_ss_stat_e. + \return error code +*/ +int32_t csi_spi_ss_control(spi_handle_t handle, spi_ss_stat_e stat); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_SPI_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_tee.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_tee.h new file mode 100644 index 000000000..61d61b1d2 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_tee.h @@ -0,0 +1,640 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************** + * @file drv_tee.h + * @brief Header File for TEE + * @version V1.0 + * @date 12 Sep 2017 + ******************************************************************************/ +#ifndef _CSI_AES_H_ +#define _CSI_AES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/****** TEE AES mode *****/ +typedef enum { + TEE_AES_MODE_ECB = 0, ///< TEE AES ECB mode + TEE_AES_MODE_CBC = 1, ///< TEE AES CBC mode + TEE_AES_MODE_MAX, ///< invaild mode +} +tee_aes_mode_e; + +/** + \brief TEE AES encrypt + \note Length should be a multiple of the block size (16 bytes) + After calling this function, the content of iv is updated. + \param[in] in Pointer to plaintext buffer + \param[in] in_len Plaintext buffer length + \param[in] key Pointer to secret key + \param[in] key_len Secret key size,must be 16 bytes for AES128,24 bytes for AES192 or 32byes for AES256 + \param[out] out Pointer to ciphertext buffer + \param[in] mode \ref tee_aes_mode_e + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_aes_encrypt(const uint8_t *in, uint32_t in_len, + const uint8_t *key, uint32_t key_len, + uint8_t iv[16], + uint8_t *out, + tee_aes_mode_e mode); + +/** + \brief TEE AES decrypt + \note Length should be a multiple of the block size (16 bytes) + After calling this function, the content of iv is updated. + \param[in] in Pointer to ciphertext buffer + \param[in] in_len Ciphertext buffer length + \param[in] key Pointer to secret key + \param[in] key_len Secret key size,must be 16 bytes for AES128,24 bytes for AES192 or 32byes for AES256 + \param[out] out Pointer to plaintext buffer + \param[in] mode \ref tee_aes_mode_e + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_aes_decrypt(const uint8_t *in, uint32_t in_len, + const uint8_t *key, uint32_t key_len, + uint8_t iv[16], + uint8_t *out, + uint32_t mode); + +/** + \brief TEE AES ECB encrypt + \note Length should be a multiple of the block size (16 bytes) + After calling this function, the content of iv is updated. + \param[in] in Pointer to plaintext buffer + \param[in] in_len Plaintext buffer length + \param[in] key Pointer to secret key + \param[in] key_len Secret key size,must be 16 bytes for AES128,24 bytes for AES192 or 32byes for AES256 + \param[out] out Pointer to ciphertext buffer + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_aes_encrypt_ecb(in, in_len, key, key_len, out) \ + csi_tee_aes_encrypt(in, in_len, key, key_len, NULL, out, TEE_AES_MODE_ECB) + +/** + \brief TEE AES ECB decrypt + \note Length should be a multiple of the block size (16 bytes) + After calling this function, the content of iv is updated. + \param[in] in Pointer to ciphertext buffer + \param[in] in_len Ciphertext buffer length + \param[in] key Pointer to secret key + \param[in] key_len Secret key size,must be 16 bytes for AES128,24 bytes for AES192 or 32byes for AES256 + \param[out] out Pointer to plaintext buffer + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_aes_decrypt_ecb(in, in_len, key, key_len, out) \ + csi_tee_aes_decrypt(in, in_len, key, key_len, NULL, out, TEE_AES_MODE_ECB) + +/** + \brief TEE AES CBC encrypt + \note Length should be a multiple of the block size (16 bytes) + After calling this function, the content of iv is updated. + \param[in] in Pointer to ciphertext buffer + \param[in] in_len Ciphertext buffer length + \param[in] key Pointer to secret key + \param[in] key_len Secret key size,must be 16 bytes for AES128,24 bytes for AES192 or 32byes for AES256 + \param[out] out Pointer to plaintext buffer + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_aes_encrypt_cbc(in, in_len, key, key_len, iv, out) \ + csi_tee_aes_encrypt(in, in_len, key, key_len, iv, out, TEE_AES_MODE_CBC) + +/** + \brief TEE AES CBC decrypt + \note Length should be a multiple of the block size (16 bytes) + After calling this function, the content of iv is updated. + \param[in] in Pointer to ciphertext buffer + \param[in] in_len Ciphertext buffer length + \param[in] key Pointer to secret key + \param[in] key_len Secret key size,must be 16 bytes for AES128,24 bytes for AES192 or 32byes for AES256 + \param[out] out Pointer to plaintext buffer + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_aes_decrypt_cbc(in, in_len, key, key_len, iv, out) \ + csi_tee_aes_decrypt(in, in_len, key, key_len, iv, out, TEE_AES_MODE_CBC) + +/** + \brief TEE BASE64 encode/decode + \param[in] in Pointer to input data buffer + \param[in] in_len input data buffer length + \param[out] out Pointer to output data buffer + \param[out] out_len output data buffer length + \param[in] is_encode 1 encode 0 decode + \param[in] wsafe base64 websafe feature,set 1, replace "+/" with "-_" + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_base64(const uint8_t *in, uint32_t in_len, + uint8_t *out, uint32_t *out_len, + uint32_t is_encode, + uint32_t wsafe); + +/** + \brief TEE BASE64 encode + \param[in] in Pointer to input data buffer + \param[in] in_len input data buffer length + \param[out] out Pointer to output data buffer + \param[out] out_len output data buffer length + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_base64_encode(in,in_len,out,out_len) \ + csi_tee_base64(in,in_len,out,out_len,1,0) + +/** + \brief TEE BASE64 decode + \param[in] in Pointer to input data buffer + \param[in] in_len input data buffer length + \param[out] out Pointer to output data buffer + \param[out] out_len output data buffer length + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_base64_decode(in,in_len,out,out_len) \ + csi_tee_base64(in,in_len,out,out_len,0,0) + +/** + \brief TEE BASE64 web safe encode + \param[in] in Pointer to input data buffer + \param[in] in_len input data buffer length + \param[out] out Pointer to output data buffer + \param[out] out_len output data buffer length + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_base64_websafe_encode(in,in_len,out,out_len) \ + csi_tee_base64(in,in_len,out,out_len,1,1) + +/** + \brief TEE BASE64 web safe decode + \param[in] in Pointer to input data buffer + \param[in] in_len input data buffer length + \param[out] out Pointer to output data buffer + \param[out] out_len output data buffer length + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_base64_websafe_decode(in,in_len,out,out_len) \ + csi_tee_base64(in,in_len,out,out_len,0,1) + +/** + \brief TEE obtain CID from Key Provisioning + \param[out] out Pointer to cid buffer + \param[out] out_len cid buffer length,if cid obtain successfully, + out_len is updated to actual cid sizes + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_get_cid(uint8_t *out, uint32_t *out_len); + +/****** lpm mode *****/ +typedef enum { + TEE_LPM_MODE_WAIT = 0, ///< lpm wait + TEE_LPM_MODE_DOZE = 1, ///< lpm doze + TEE_LPM_MODE_STOP = 2, ///< lpm stop + TEE_LPM_MODE_STANDBY = 3, ///< lpm standby + TEE_LPM_MODE_MAX, +} tee_lpm_mode_e; + +/** + \brief TEE set low power mode + \param[in] gate not use for now + \param[in] irqid not use for now + \param[in] mode \ref tee_lpm_mode_e + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_enter_lpm(uint32_t gate, uint32_t irqid, tee_lpm_mode_e mode); + +/** + \brief TEE obtain manifest info from manifest table + \note call csi_tee_get_sys_img_info, csi_tee_get_sys_os_version or csi_tee_get_sys_partition is better + \param[out] out Pointer to info buffer + \param[out] out_len Info buffer length,if info obtain successfully, + out_len is updated to actual sizes + \param[in] name info name + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_get_manifest_info(uint8_t *out, uint32_t *out_len, char *name); + +/** + \brief TEE obtain image buffer from manifest table + \param[out] out Pointer to image buffer + \param[out] out_len Image buffer length,if info obtain successfully, + out_len is updated to actual image buffer sizes + \param[in] img_name image name + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_get_sys_img_info(out,out_len,img_name) \ + csi_tee_get_manifest_info(out,out_len,img_name) + +/** + \brief TEE obtain os version from manifest table + \param[out] out Pointer to os version buffer + \param[out] out_len OS version buffer length,if info obtain successfully, + out_len is updated to actual os version buffer sizes + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_get_sys_os_version(out,out_len) \ + csi_tee_get_manifest_info(out,out_len,"os_v") + +/** + \brief TEE obtain partition buffer from manifest table + \param[out] out Pointer to partition buffer + \param[out] out_len Partition buffer length,if info obtain successfully, + out_len is updated to actual partition buffer sizes + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_get_sys_partition(out,out_len) \ + csi_tee_get_manifest_info(out,out_len,"sys_p") + +/** + \brief TEE set random seed + \param[in] Seed random sedd + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_rand_seed(uint32_t seed); + +/** + \brief TEE ramdom date generation + \param[out] out Pointer to random data buffer + \param[in] out_len Data buffer length + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_rand_generate(uint8_t *out, uint32_t out_len); + +/****** TEE RSA sign type *****/ +typedef enum { + TEE_RSA_MD5 = 0, ///< MD5 + TEE_RSA_SHA1 = 1, ///< SHA1 + TEE_RSA_SHA256 = 3, ///< SHA256 + TEE_RSA_SIGN_TYPE_MAX, ///< invailed type +} tee_rsa_sign_type_e; + +/** + \brief TEE RSA sign with private key + \param[in] in Pointer to digest buffer + \param[in] in_len Digest buffer length + \param[in] key Pointer to private key,key contains n, e, d + \param[in] key_len Private key size,must be 128*3 = 384 bytes for RSA1024, 256*3 = 768 bytes for RSA2048 + \param[out] sign Pointer to sign buffer + \param[out] sign_len Sign buffer length + \param[in] type \ref tee_rsa_sign_type_e + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_rsa_sign(const uint8_t *in, uint32_t in_len, + const uint8_t *key, uint32_t key_len, + uint8_t *sign, uint32_t *sign_len, + tee_rsa_sign_type_e type); + +/** + \brief TEE RSA verify with public key + \param[in] in Pointer to digest buffer + \param[in] in_len Digest buffer length + \param[in] key Pointer to public key,key contains n, e + \param[in] key_len Public key size,must be 128*2 = 256 bytes for RSA1024, 256*2 = 512 bytes for RSA2048 + \param[in] sign Pointer to sign buffer + \param[in] sign_len Sign buffer length + \param[in] type \ref tee_rsa_sign_type_e + \return return 0 if verify successful,otherwise error code +*/ +int32_t csi_tee_rsa_verify(const uint8_t *in, uint32_t in_len, + const uint8_t *key, uint32_t key_len, + uint8_t *sign, uint32_t sign_len, + tee_rsa_sign_type_e type); + +/****** TEE RSA padding mode *****/ +typedef enum { + TEE_RSA_PKCS1_PADDING = 0x01, ///< RSA PKCS padding mode + TEE_RSA_NO_PADDING = 0x02, ///< RSA no padding mode +} tee_rsa_padding_mode_e; + +/** + \brief TEE RSA encrypt with public key + \param[in] in Pointer to plaintext buffer + \param[in] in_len Plaintext buffer length + \param[in] key Pointer to public key,key contains n, e + \param[in] key_len Public key size, must be 128*2 = 256 bytes for RSA1024, 256*2 = 512 bytes for RSA2048 + \param[in] out Pointer to ciphertext buffer + \param[in] out_len Ciphertext buffer length + \param[in] padding \ref tee_rsa_padding_mode_e + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_rsa_encrypt(const uint8_t *in, uint32_t in_len, + const uint8_t *key, uint32_t key_len, + uint8_t *out, uint32_t *out_len, + tee_rsa_padding_mode_e padding); +/** + \brief TEE RSA decrypt with private key + \param[in] in Pointer to ciphertext buffer + \param[in] in_len Ciphertext buffer length + \param[in] key Pointer to private key,key contains n, e, d + \param[in] key_len Private key size,must be 128*3 = 384 bytes for RSA1024, 256*3 = 768 bytes for RSA2048 + \param[in] out Pointer to plaintext buffer + \param[in] out_len Plaintext buffer length + \param[in] padding \ref tee_rsa_padding_mode_e + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_rsa_decrypt(const uint8_t *in, uint32_t in_len, + const uint8_t *key, uint32_t key_len, + uint8_t *out, uint32_t *out_len, + tee_rsa_padding_mode_e padding); + +/** + \brief TEE RSA sign with internal private key + \note Only use if key provisioning exist + \param[in] in Pointer to digest buffer + \param[in] in_len Digest buffer length + \param[out] sign Pointer to sign buffer + \param[out] sign_len Sign buffer length + \param[in] type \ref tee_rsa_sign_type_e + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_cid_rsa_sign(in,in_len,sign,sign_len,type) \ + csi_tee_rsa_sign(in,in_len,NULL,0,sign,sign_len,type) + +/** + \brief TEE RSA verify with internal public key + \note Only use if key provisioning exist + \param[in] in Pointer to digest buffer + \param[in] in_len Digest buffer length + \param[in] sign Pointer to sign buffer + \param[in] sign_len Sign buffer length + \param[in] type \ref tee_rsa_sign_type_e + \return return 0 if verify successful,otherwise error code +*/ +#define csi_tee_cid_rsa_verify(in,in_len,sign,sign_len,type) \ + csi_tee_rsa_verify(in,in_len,NULL,0,sign,sign_len,type) + +/** + \brief TEE RSA encrypt with internal public key + \note Only use if key provisioning exist + \param[in] in Pointer to plaintext buffer + \param[in] in_len Plaintext buffer length + \param[in] out Pointer to ciphertext buffer + \param[in] out_len Ciphertext buffer length + \param[in] padding \ref tee_rsa_padding_mode_e + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_cid_rsa_encrypt(in,in_len,out,out_len,padding) \ + csi_tee_rsa_encrypt(in,in_len,NULL,0,out,out_len,padding) + +/** + \brief TEE RSA decrypt with internal private key + \note Only use if key provisioning exist + \param[in] in Pointer to ciphertext buffer + \param[in] in_len Ciphertext buffer length + \param[in] key Pointer to private key,key contains n, e, d + \param[in] key_len Private key size,must be 128*3 = 384 bytes for RSA1024, 256*3 = 768 bytes for RSA2048 + \param[in] out Pointer to plaintext buffer + \param[in] out_len Plaintext buffer length + \param[in] padding \ref tee_rsa_padding_mode_e + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_cid_rsa_decrypt(in,in_len,out,out_len,padding) \ + csi_tee_rsa_decrypt(in,in_len,NULL,0,out,out_len,padding) + +/** + \brief verify boot image with boot public key + \note Only use if key provisioning exist + \param[in] in Pointer to digest buffer + \param[in] in_len Digest buffer length + \param[in] sign Pointer to sign buffer + \param[in] sign_len Sign buffer length + \param[in] type \ref tee_rsa_sign_type_e + \return return 0 if verify successful,otherwise error code +*/ +int32_t csi_tee_img_rsa_verify(const uint8_t *in, uint32_t in_len, + uint8_t *sign, uint32_t sign_len, + tee_rsa_sign_type_e type); + +/****** TEE HASH operation mode *****/ +typedef enum { + TEE_HASH_OP_NONE = 0, ///< No operation + TEE_HASH_OP_START = 1, ///< HASH init + TEE_HASH_OP_UPDATA = 2, ///< HASH update + TEE_HASH_OP_FINISH = 3, ///< HASH finish + TEE_HASH_OP_MAX, ///< invailed operation +} tee_hash_op_e; + +/****** TEE HMAC type *****/ +typedef enum { + TEE_HMAC_SHA1 = 1, ///< HMAC with SHA1 +} tee_hmac_type_e; + +/** + \brief TEE HAMC + \note Call csi_tee_hmac_digest is better + out buffer size must be large enough according to type, eg. 20 bytes for TEE_HMAC_SHA1 + \param[in] in Pointer to input data buffer + \param[in] in_len Input data buffer length + \param[in] key Pointer to key buffer + \param[in] key_len Key buffer size + \param[out] out Pointer to output date buffer + \param[in] type \ref tee_hmac_type_e + \param[in] hash_op \ref tee_hash_op_e + \param[in] ctx Pointer to context of hmac + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_hmac(const uint8_t *in, uint32_t in_len, + const uint8_t *key, uint32_t key_len, + uint8_t *out, + tee_hmac_type_e type, + tee_hash_op_e hash_op, + uint32_t *ctx); + +/** + \brief TEE HAMC digest + \note out buffer size must be large enough according to type, eg. 20 bytes for TEE_HMAC_SHA1 + \param[in] in Pointer to input data buffer + \param[in] in_len Input data buffer length + \param[in] key Pointer to key buffer + \param[in] key_len Key buffer size + \param[out] out Pointer to output date buffer + \param[in] type \ref tee_hmac_type_e + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_hmac_digest(in,in_len,key,key_len,out,type) \ + csi_tee_hmac(in,in_len,key,key_len,out,type,TEE_HASH_OP_NONE,NULL) + +/****** TEE SHA type *****/ +typedef enum { + TEE_SHA1 = 0, ///< SHA1 + TEE_SHA256 = 1, ///< SHA256 + TEE_SHA224 = 2, ///< SHA224 + TEE_SHA384 = 3, ///< SHA384 + TEE_SHA512 = 4, ///< SHA512 + TEE_SHA_MAX, ///< invaild sha type +} tee_sha_type_t; + +/** + \brief TEE SHA + \note Call csi_tee_sha_digest, csi_tee_sha_start, csi_tee_sha_update or csi_tee_sha_finish is better + out buffer size must be large enough according to type, eg. 20 bytes for TEE_SHA1, 32 bytes for TEE_SHA256 + \param[in] in Pointer to input data buffer + \param[in] in_len Input data buffer length + \param[out] out Pointer to output date buffer + \param[in] type \ref tee_sha_type_t + \param[in] hash_op \ref tee_hash_op_e + \param[in] ctx Pointer to context of sha + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_sha(const uint8_t *in, uint32_t in_len, + uint8_t *out, + tee_sha_type_t type, + tee_hash_op_e hash_op, + void *ctx); + +/** + \brief TEE SHA digest + \note out buffer size must be large enough according to type, eg. 20 bytes for TEE_SHA1, 32 bytes for TEE_SHA256 + \param[in] in Pointer to input data buffer + \param[in] in_len Input data buffer length + \param[out] out Pointer to output date buffer + \param[in] type \ref tee_sha_type_t + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_sha_digest(in,in_len,out,type) \ + csi_tee_sha(in,in_len,out,type,TEE_HASH_OP_NONE,NULL); + +/** + \brief TEE SHA start, initial sha + \param[in] type \ref tee_sha_type_t + \param[in] ctx Pointer to context of sha + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_sha_start(type,ctx) \ + csi_tee_sha(NULL,0,NULL,type,TEE_HASH_OP_START,ctx); + +/** + \brief TEE SHA update, update data + \param[in] in Pointer to input data buffer + \param[in] in_len Input data buffer length + \param[in] ctx Pointer to context of sha + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_sha_update(in,in_len,ctx) \ + csi_tee_sha(in,in_len,NULL,0,TEE_HASH_OP_UPDATA,ctx); + +/** + \brief TEE SHA digest, get sha digest + \note out buffer size must be large enough according to type, eg. 20 bytes for TEE_SHA1, 32 bytes for TEE_SHA256 + \param[out] out Pointer to output date buffer + \param[in] ctx Pointer to context of sha + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_sha_finish(out,ctx) \ + csi_tee_sha(NULL,0,out,0,TEE_HASH_OP_FINISH,ctx); + +/** + \brief TEE get device name and product key + \param[in] name_encrypted Pointer to device name ciphertext + \param[in] name_encrypted_len device name ciphertext length + \param[in] product_key_encrypted Pointer to device product key ciphertext + \param[in] product_key_encrypted_len Device product key ciphertext length + \param[out] name Pointer to device name + \param[out] name_len Device name length + \param[out] product_key Pointer to device product key + \param[out] product_key_len Device product key length + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_dev_info_get(const uint8_t *name_encrypted, uint32_t name_encrypted_len, + const uint8_t *product_key_encrypted, uint32_t product_key_encrypted_len, + const uint8_t *name, uint32_t *name_len, + const uint8_t *product_key, uint32_t *product_key_len); + +/** + \brief TEE device info sign + \param[in] in Pointer to input date buffer + \param[in] in_len Input data buffer length + \param[in] device_secret Pointer to device secret ciphertext + \param[in] device_secret_len Device secret ciphertext length + \param[out] sign Pointer to signed buffer + \param[out] sign_len Signed buffer length + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_dev_info_sign(const uint8_t *in, uint32_t in_len, + const uint8_t *device_secret, uint32_t device_secret_len, + const uint8_t *sign, uint32_t *sign_len); + +/** + \brief TEE device info encrypt/decrypt + \param[in] in Pointer to input date buffer + \param[in] in_len Input data buffer length + \param[in] out Pointer to output date buffer + \param[in] out_len Onput data buffer length + \param[in] is_enc 1 incrypt 0 decrypt + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_dev_info_crypt(const uint8_t *in, uint32_t in_len, + uint8_t *out, uint32_t *out_len, + uint8_t is_enc); + +/** + \brief TEE device info encrypt + \param[in] in Pointer to input date buffer + \param[in] in_len Input data buffer length + \param[in] out Pointer to output date buffer + \param[in] out_len Onput data buffer length + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_dev_info_encrypt(in, in_len, out, out_len) \ + csi_tee_dev_info_crypt(in, in_len, out, out_len, 1) + +/** + \brief TEE device info decrypt + \param[in] in Pointer to input date buffer + \param[in] in_len Input data buffer length + \param[in] out Pointer to output date buffer + \param[in] out_len Onput data buffer length + \return return 0 if successful,otherwise error code +*/ +#define csi_tee_dev_info_decrypt(in, in_len, out, out_len) \ + csi_tee_dev_info_crypt(in, in_len, out, out_len, 0) + +/****** system clock source type *****/ +typedef enum { + IHS_CLK = 0, ///< internel clock source + EHS_CLK = 1 ///< externel clock source +} clk_src_e; + +/****** system clock value scope *****/ +typedef enum { + OSR_8M_CLK_16M = 0x80204, ///< register value for clock 16M + OSR_8M_CLK_24M = 0x80206, ///< register value for clock 24M + OSR_8M_CLK_32M = 0x80208, ///< register value for clock 32M + OSR_8M_CLK_40M = 0x8020a, ///< register value for clock 40M + OSR_8M_CLK_48M = 0x8020c ///< register value for clock 48M +} clk_val_e; + +/** + \brief Set system frequence + \param[in] clk_src indicate clock source type + \param[in] clk_val system freqence to be set + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_set_sys_freq(uint32_t clk_src, uint32_t clk_val); + +/** + \brief Get system frequence + \param[in] clk_val value address to store system freqence + \return return 0 if successful,otherwise error code +*/ +int32_t csi_tee_get_sys_freq(uint32_t *clk_val); + + +int32_t csi_tee_xor(uint8_t *out, uint32_t *out_len); +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_AES_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_timer.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_timer.h new file mode 100644 index 000000000..a2474194f --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_timer.h @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_timer.h + * @brief header file for timer driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_TIMER_H_ +#define _CSI_TIMER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/// definition for timer handle. +typedef void *timer_handle_t; + +/*----- TIMER Control Codes: Mode -----*/ +typedef enum { + TIMER_MODE_FREE_RUNNING = 0, ///< free running mode + TIMER_MODE_RELOAD ///< reload mode +} timer_mode_e; + +/** +\brief TIMER Status +*/ +typedef struct { + uint32_t active : 1; ///< timer active flag + uint32_t timeout : 1; ///< timeout flag +} timer_status_t; + +/** +\brief TIMER Event +*/ +typedef enum { + TIMER_EVENT_TIMEOUT = 0 ///< time out event +} timer_event_e; + +typedef void (*timer_event_cb_t)(timer_event_e event, void *arg); ///< Pointer to \ref timer_event_cb_t : TIMER Event call back. + +/** +\brief TIMER Device Driver Capabilities. +*/ +typedef struct { + uint32_t interrupt_mode : 1; ///< supports Interrupt mode +} timer_capabilities_t; + +/** + \brief get timer instance count. + \return timer instance count +*/ +int32_t csi_timer_get_instance_count(void); + +/** + \brief Initialize TIMER Interface. 1. Initializes the resources needed for the TIMER interface 2.registers event callback function + \param[in] idx instance timer index + \param[in] cb_event Pointer to \ref timer_event_cb_t + \param[in] cb_arg arguments of cb_event + \return pointer to timer instance +*/ +timer_handle_t csi_timer_initialize(int32_t idx, timer_event_cb_t cb_event, void *cb_arg); + +/** + \brief De-initialize TIMER Interface. stops operation and releases the software resources used by the interface + \param[in] handle timer handle to operate. + \return error code +*/ +int32_t csi_timer_uninitialize(timer_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle timer handle to operate. + \return \ref timer_capabilities_t +*/ +timer_capabilities_t csi_timer_get_capabilities(timer_handle_t handle); + +/** + \brief config timer mode. + \param[in] handle timer handle to operate. + \param[in] mode \ref timer_mode_e + \return error code +*/ +int32_t csi_timer_config(timer_handle_t handle, timer_mode_e mode); + +/** + \brief Set timer. + \param[in] handle timer handle to operate. + \param[in] timeout the timeout value in microseconds(us). + \return error code +*/ +int32_t csi_timer_set_timeout(timer_handle_t handle, uint32_t timeout); + +/** + \brief Start timer. + \param[in] handle timer handle to operate. + \param[in] apbfreq APB frequency + \return error code +*/ +int32_t csi_timer_start(timer_handle_t handle, uint32_t apbfreq); + +/** + \brief Stop timer. + \param[in] handle timer handle to operate. + \return error code +*/ +int32_t csi_timer_stop(timer_handle_t handle); + +/** + \brief suspend timer. + \param[in] handle timer handle to operate. + \return error code +*/ +int32_t csi_timer_suspend(timer_handle_t handle); + +/** + \brief resume timer. + \param[in] handle timer handle to operate. + \return error code +*/ +int32_t csi_timer_resume(timer_handle_t handle); + +/** + \brief get timer current value + \param[in] handle timer handle to operate. + \param[in] value timer current value + \return error code +*/ +int32_t csi_timer_get_current_value(timer_handle_t handle, uint32_t *value); + +/** + \brief Get TIMER status. + \param[in] handle timer handle to operate. + \return TIMER status \ref timer_status_t +*/ +timer_status_t csi_timer_get_status(timer_handle_t handle); + +/** + \brief get timer reload value + \param[in] handle timer handle to operate. + \param[in] value timer reload value + \return error code +*/ +int32_t csi_timer_get_load_value(timer_handle_t handle, uint32_t *value); + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_TIMER_H_ */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_trng.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_trng.h new file mode 100644 index 000000000..5646c4c76 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_trng.h @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_trng.h + * @brief header file for trng driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ +#ifndef _CSI_TRNG_H_ +#define _CSI_TRNG_H_ + +#include "drv_common.h" +#ifdef __cplusplus +extern "C" { +#endif + +#include + + +/// definition for trng handle. +typedef void *trng_handle_t; +/****** TRNG specific error codes *****/ +typedef enum { + TRNG_ERROR_MODE = 0, ///< Specified Mode not supported +} drv_trng_error_e; + +/*----- TRNG Control Codes: Mode -----*/ +typedef enum { + TRNG_MODE_LOWPOWER = 0, ///< TRNG Low power Mode + TRNG_MODE_NORMAL ///< TRNG Normal Mode +} trng_mode_e; + +/** +\brief TRNG Status +*/ +typedef struct { + uint32_t busy : 1; + uint32_t data_valid : 1; ///< Data is valid flag +} trng_status_t; + +/****** TRNG Event *****/ +typedef enum { + TRNG_EVENT_DATA_GENERATE_COMPLETE = 0 ///< Get data from TRNG success +} trng_event_e; +typedef void (*trng_event_cb_t)(trng_event_e event); ///< Pointer to \ref trng_event_cb_t : TRNG Event call back. + +/** +\brief TRNG Device Driver Capabilities. +*/ +typedef struct { + uint32_t lowper_mode : 1; ///< supports low power mode +} trng_capabilities_t; + +// Function documentation + +/** + \brief get trng handle count. + \return trng handle count +*/ +int32_t csi_trng_get_instance_count(void); + +/** + \brief Initialize TRNG Interface. 1. Initializes the resources needed for the TRNG interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_trng_get_instance_count() + \param[in] cb_event Pointer to \ref trng_event_cb_t + \return pointer to trng handle +*/ +trng_handle_t csi_trng_initialize(int32_t idx, trng_event_cb_t cb_event); + +/** + \brief De-initialize TRNG Interface. stops operation and releases the software resources used by the interface + \param[in] handle trng handle to operate. + \return error code +*/ +int32_t csi_trng_uninitialize(trng_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle trng handle to operate. + \return \ref trng_capabilities_t +*/ +trng_capabilities_t csi_trng_get_capabilities(trng_handle_t handle); + +/** + \brief Get data from the TRNG. + \param[in] handle trng handle to operate. + \param[out] data Pointer to buffer with data get from TRNG + \param[in] num Number of data items to obtain + \return error code +*/ +int32_t csi_trng_get_data(trng_handle_t handle, void *data, uint32_t num); + +/** + \brief Get TRNG status. + \param[in] handle trng handle to operate. + \return TRNG status \ref trng_status_t +*/ +trng_status_t csi_trng_get_status(trng_handle_t handle); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_TRNG_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_usart.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_usart.h new file mode 100644 index 000000000..cd8bbf6d7 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_usart.h @@ -0,0 +1,495 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_usart.h + * @brief header file for usart driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_USART_H_ +#define _CSI_USART_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/// definition for usart handle. +typedef void *usart_handle_t; + +/****** USART specific error codes *****/ +typedef enum { + EDRV_USART_MODE = (EDRV_SPECIFIC + 1), ///< Specified Mode not supported + EDRV_USART_BAUDRATE, ///< Specified baudrate not supported + EDRV_USART_DATA_BITS, ///< Specified number of Data bits not supported + EDRV_USART_PARITY, ///< Specified Parity not supported + EDRV_USART_STOP_BITS, ///< Specified number of Stop bits not supported + EDRV_USART_FLOW_CONTROL, ///< Specified Flow Control not supported + EDRV_USART_CPOL, ///< Specified Clock Polarity not supported + EDRV_USART_CPHA ///< Specified Clock Phase not supported +} drv_usart_error_e; + +/*----- USART Control Codes: Mode -----*/ +typedef enum { + USART_MODE_ASYNCHRONOUS = 0, ///< USART (Asynchronous) + USART_MODE_SYNCHRONOUS_MASTER , ///< Synchronous Master + USART_MODE_SYNCHRONOUS_SLAVE , ///< Synchronous Slave (external clock signal) + USART_MODE_SINGLE_WIRE , ///< USART Single-wire (half-duplex) + USART_MODE_SINGLE_IRDA , ///< UART IrDA + USART_MODE_SINGLE_SMART_CARD , ///< UART Smart Card +} usart_mode_e; + +/*----- USART Control Codes: Mode Parameters: Data Bits -----*/ +typedef enum { + USART_DATA_BITS_5 = 0, ///< 5 Data bits + USART_DATA_BITS_6 , ///< 6 Data bit + USART_DATA_BITS_7 , ///< 7 Data bits + USART_DATA_BITS_8 , ///< 8 Data bits (default) + USART_DATA_BITS_9 ///< 9 Data bits +} usart_data_bits_e; + +/*----- USART Control Codes: Mode Parameters: Parity -----*/ +typedef enum { + USART_PARITY_NONE = 0, ///< No Parity (default) + USART_PARITY_EVEN , ///< Even Parity + USART_PARITY_ODD , ///< Odd Parity + USART_PARITY_1 , ///< Parity forced to 1 + USART_PARITY_0 ///< Parity forced to 0 +} usart_parity_e; + +/*----- USART Control Codes: Mode Parameters: Stop Bits -----*/ +typedef enum { + USART_STOP_BITS_1 = 0, ///< 1 Stop bit (default) + USART_STOP_BITS_2 , ///< 2 Stop bits + USART_STOP_BITS_1_5 , ///< 1.5 Stop bits + USART_STOP_BITS_0_5 ///< 0.5 Stop bits +} usart_stop_bits_e; + +/*----- USART Control Codes: Mode Parameters: Clock Polarity (Synchronous mode) -----*/ +typedef enum { + USART_CPOL0 = 0, ///< CPOL = 0 (default). data are captured on rising edge (low->high transition) + USART_CPOL1 ///< CPOL = 1. data are captured on falling edge (high->lowh transition) +} usart_cpol_e; + +/*----- USART Control Codes: Mode Parameters: Clock Phase (Synchronous mode) -----*/ +typedef enum { + USART_CPHA0 = 0, ///< CPHA = 0 (default). sample on first (leading) edge + USART_CPHA1 ///< CPHA = 1. sample on second (trailing) edge +} usart_cpha_e; + +/*----- USART Control Codes: flush data type-----*/ +typedef enum { + USART_FLUSH_WRITE, + USART_FLUSH_READ +} usart_flush_type_e; + +/*----- USART Control Codes: flow control type-----*/ +typedef enum { + USART_FLOWCTRL_NONE, + USART_FLOWCTRL_CTS, + USART_FLOWCTRL_RTS, + USART_FLOWCTRL_CTS_RTS +} usart_flowctrl_type_e; + +/*----- USART Modem Control -----*/ +typedef enum { + USART_RTS_CLEAR, ///< Deactivate RTS + USART_RTS_SET, ///< Activate RTS + USART_DTR_CLEAR, ///< Deactivate DTR + USART_DTR_SET ///< Activate DTR +} usart_modem_ctrl_e; + +/*----- USART Modem Status -----*/ +typedef struct { + uint32_t cts : 1; ///< CTS state: 1=Active, 0=Inactive + uint32_t dsr : 1; ///< DSR state: 1=Active, 0=Inactive + uint32_t dcd : 1; ///< DCD state: 1=Active, 0=Inactive + uint32_t ri : 1; ///< RI state: 1=Active, 0=Inactive +} usart_modem_stat_t; + +/*----- USART Control Codes: on-off intrrupte type-----*/ +typedef enum { + USART_INTR_WRITE, + USART_INTR_READ +} usart_intr_type_e; + +/** +\brief USART Status +*/ +typedef struct { + uint32_t tx_busy : 1; ///< Transmitter busy flag + uint32_t rx_busy : 1; ///< Receiver busy flag + uint32_t tx_underflow : 1; ///< Transmit data underflow detected (cleared on start of next send operation)(Synchronous Slave) + uint32_t rx_overflow : 1; ///< Receive data overflow detected (cleared on start of next receive operation) + uint32_t rx_break : 1; ///< Break detected on receive (cleared on start of next receive operation) + uint32_t rx_framing_error : 1; ///< Framing error detected on receive (cleared on start of next receive operation) + uint32_t rx_parity_error : 1; ///< Parity error detected on receive (cleared on start of next receive operation) +} usart_status_t; + +/****** USART Event *****/ +typedef enum { + USART_EVENT_SEND_COMPLETE = 0, ///< Send completed; however USART may still transmit data + USART_EVENT_RECEIVE_COMPLETE = 1, ///< Receive completed + USART_EVENT_TRANSFER_COMPLETE = 2, ///< Transfer completed + USART_EVENT_TX_COMPLETE = 3, ///< Transmit completed (optional) + USART_EVENT_TX_UNDERFLOW = 4, ///< Transmit data not available (Synchronous Slave) + USART_EVENT_RX_OVERFLOW = 5, ///< Receive data overflow + USART_EVENT_RX_TIMEOUT = 6, ///< Receive character timeout (optional) + USART_EVENT_RX_BREAK = 7, ///< Break detected on receive + USART_EVENT_RX_FRAMING_ERROR = 8, ///< Framing error detected on receive + USART_EVENT_RX_PARITY_ERROR = 9, ///< Parity error detected on receive + USART_EVENT_CTS = 10, ///< CTS state changed (optional) + USART_EVENT_DSR = 11, ///< DSR state changed (optional) + USART_EVENT_DCD = 12, ///< DCD state changed (optional) + USART_EVENT_RI = 13, ///< RI state changed (optional) + USART_EVENT_RECEIVED = 14, ///< Received data, but no send()/receive()/transfer() called +} usart_event_e; + +typedef void (*usart_event_cb_t)(usart_event_e event, void *cb_arg); ///< Pointer to \ref usart_event_cb_t : USART Event call back. + +/** +\brief USART Driver Capabilities. +*/ +typedef struct { + uint32_t asynchronous : 1; ///< supports UART (Asynchronous) mode + uint32_t synchronous_master : 1; ///< supports Synchronous Master mode + uint32_t synchronous_slave : 1; ///< supports Synchronous Slave mode + uint32_t single_wire : 1; ///< supports UART Single-wire mode + uint32_t irda : 1; ///< supports UART IrDA mode + uint32_t smart_card : 1; ///< supports UART Smart Card mode + uint32_t smart_card_clock : 1; ///< Smart Card Clock generator available + uint32_t flow_control_rts : 1; ///< RTS Flow Control available + uint32_t flow_control_cts : 1; ///< CTS Flow Control available + uint32_t event_tx_complete : 1; ///< Transmit completed event: \ref ARM_USART_EVENT_TX_COMPLETE + uint32_t event_rx_timeout : 1; ///< Signal receive character timeout event: \ref ARM_USART_EVENT_RX_TIMEOUT + uint32_t rts : 1; ///< RTS Line: 0=not available, 1=available + uint32_t cts : 1; ///< CTS Line: 0=not available, 1=available + uint32_t dtr : 1; ///< DTR Line: 0=not available, 1=available + uint32_t dsr : 1; ///< DSR Line: 0=not available, 1=available + uint32_t dcd : 1; ///< DCD Line: 0=not available, 1=available + uint32_t ri : 1; ///< RI Line: 0=not available, 1=available + uint32_t event_cts : 1; ///< Signal CTS change event: \ref ARM_USART_EVENT_CTS + uint32_t event_dsr : 1; ///< Signal DSR change event: \ref ARM_USART_EVENT_DSR + uint32_t event_dcd : 1; ///< Signal DCD change event: \ref ARM_USART_EVENT_DCD + uint32_t event_ri : 1; ///< Signal RI change event: \ref ARM_USART_EVENT_RI +} usart_capabilities_t; + +/** + \brief Initialize USART Interface. 1. Initializes the resources needed for the USART interface 2.registers event callback function + \param[in] tx usart pin of tx + \param[in] rx usart pin of rx + \param[in] cb_event Pointer to \ref usart_event_cb_t + \param[in] cb_arg argument for cb_event + \return return usart handle if success +*/ +usart_handle_t csi_usart_initialize(pin_t tx, pin_t rx, usart_event_cb_t cb_event, void *cb_arg); + +/** + \brief De-initialize USART Interface. stops operation and releases the software resources used by the interface + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_uninitialize(usart_handle_t handle); +/** + \brief Get driver capabilities. + \param[in] handle usart handle to operate. + \return \ref usart_capabilities_t +*/ +usart_capabilities_t csi_usart_get_capabilities(usart_handle_t handle); + +/** + \brief config usart mode. + \param[in] handle usart handle to operate. + \param[in] sysclk system clock. + \param[in] baud baud rate. + \param[in] mode \ref usart_mode_e . + \param[in] parity \ref usart_parity_e . + \param[in] stopbits \ref usart_stop_bits_e . + \param[in] bits \ref usart_data_bits_e . + \return error code +*/ +int32_t csi_usart_config(usart_handle_t handle, + uint32_t sysclk, + uint32_t baud, + usart_mode_e mode, + usart_parity_e parity, + usart_stop_bits_e stopbits, + usart_data_bits_e bits); + +/** + \brief config usart default tx value. used in synchronous mode + \param[in] handle usart handle to operate. + \param[in] value default tx value + \return error code +*/ +int32_t csi_usart_set_default_tx_value(usart_handle_t handle, uint32_t value); + +/** + \brief Start sending data to USART transmitter,(received data is ignored). + This function is non-blocking,\ref usart_event_e is signaled when operation completes or error happens. + \ref csi_usart_get_status can indicates operation status. + \param[in] handle usart handle to operate. + \param[in] data Pointer to buffer with data to send to USART transmitter. data_type is : uint8_t for 5..8 data bits, uint16_t for 9 data bits + \param[in] num Number of data items to send + \return error code +*/ +int32_t csi_usart_send(usart_handle_t handle, const void *data, uint32_t num/*,bool asynch*/); + +/** + \brief Abort Send data to USART transmitter + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_abort_send(usart_handle_t handle); + +/** + \brief Start receiving data from USART receiver.transmits the default value as specified by csi_usart_set_default_tx_value. \n + This function is non-blocking,\ref usart_event_e is signaled when operation completes or error happens. + \ref csi_usart_get_status can indicates operation status. + \param[in] handle usart handle to operate. + \param[out] data Pointer to buffer for data to receive from USART receiver.data_type is : uint8_t for 5..8 data bits, uint16_t for 9 data bits + \param[in] num Number of data items to receive + \return error code +*/ +int32_t csi_usart_receive(usart_handle_t handle, void *data, uint32_t num/*,bool asynch*/); + +/** + \brief query data from UART receiver FIFO. + \param[in] handle usart handle to operate. + \param[out] data Pointer to buffer for data to receive from UART receiver + \param[in] num Number of data items to receive + \return receive fifo data num +*/ +int32_t csi_usart_receive_query(usart_handle_t handle, void *data, uint32_t num/*,bool asynch*/); + +/** + \brief Abort Receive data from USART receiver + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_abort_receive(usart_handle_t handle); + +/** + \brief Start synchronously sends data to the USART transmitter and receives data from the USART receiver. used in synchronous mode + This function is non-blocking,\ref usart_event_e is signaled when operation completes or error happens. + \ref csi_usart_get_status can indicates operation status. + \param[in] handle usart handle to operate. + \param[in] data_out Pointer to buffer with data to send to USART transmitter.data_type is : uint8_t for 5..8 data bits, uint16_t for 9 data bits + \param[out] data_in Pointer to buffer for data to receive from USART receiver.data_type is : uint8_t for 5..8 data bits, uint16_t for 9 data bits + \param[in] num Number of data items to transfer + \return error code +*/ +int32_t csi_usart_transfer(usart_handle_t handle, const void *data_out, void *data_in, uint32_t num/*,bool asynch*/); + +/** + \brief abort sending/receiving data to/from USART transmitter/receiver. + \param[in] handle usart handle to operate. + \return error code +*/ +int32_t csi_usart_abort_transfer(usart_handle_t handle); + +/** + \brief Get USART status. + \param[in] handle usart handle to operate. + \return USART status \ref usart_status_t +*/ +usart_status_t csi_usart_get_status(usart_handle_t handle); + +/** + \brief flush receive/send data. + \param[in] handle usart handle to operate. + \param[in] type \ref usart_flush_type_e . + \return \ref execution_status +*/ +int32_t csi_usart_flush(usart_handle_t handle, usart_flush_type_e type); + +/** + \brief control interrupt on/off. + \param[in] handle usart handle to operate. + \param[in] type \ref usart_intr_type_e. + \param[in] flag 0-OFF, 1-ON. + \return error code +*/ +int32_t csi_usart_interrupt_on_off(usart_handle_t handle, usart_intr_type_e type, int flag); + +/** + \brief set the baut drate of usart. + \param[in] addr usart base to operate. + \param[in] baudrate baud rate + \param[in] apbfreq the frequency of the apb. + \return error code +*/ +int32_t csi_usart_config_baudrate(usart_handle_t handle, uint32_t baudrate, uint32_t apbfreq); + +/** + \brief config usart mode. + \param[in] handle usart handle to operate. + \param[in] mode \ref usart_mode_e + \return error code +*/ +int32_t csi_usart_config_mode(usart_handle_t handle, usart_mode_e mode); + +/** + \brief config usart parity. + \param[in] handle usart handle to operate. + \param[in] parity \ref usart_parity_e + \return error code +*/ +int32_t csi_usart_config_parity(usart_handle_t handle, usart_parity_e parity); + +/** + \brief config usart stop bit number. + \param[in] handle usart handle to operate. + \param[in] stopbits \ref usart_stop_bits_e + \return error code +*/ +int32_t dw_usart_config_stopbits(usart_handle_t handle, usart_stop_bits_e stopbit); + +/** + \brief config usart data length. + \param[in] handle usart handle to operate. + \param[in] databits \ref usart_data_bits_e + \return error code +*/ +int32_t csi_usart_config_databits(usart_handle_t handle, usart_data_bits_e databits); + +/** + \brief get character in query mode. + \param[in] handle usart handle to operate. + \param[in] the pointer to the received character if return 0. + \return error code +*/ +int32_t csi_usart_getchar(usart_handle_t handle, uint8_t *ch); + +/** + \brief transmit character in query mode. + \param[in] handle usart handle to operate. + \param[in] ch the input character + \return error code +*/ +int32_t csi_usart_putchar(usart_handle_t handle, uint8_t ch); + +/** + \brief Get usart send data count. + \param[in] handle usart handle to operate. + \return number of data bytes transferred +*/ +uint32_t csi_usart_get_tx_count(usart_handle_t handle); + +/** + \brief Get usart receive data count. + \param[in] handle usart handle to operate. + \return number of data bytes transferred +*/ +uint32_t csi_usart_get_rx_count(usart_handle_t handle); + +/** + \brief control usart power. + \param[in] handle usart handle to operate. + \param[in] state power state.\ref csi_power_stat_e. + \return error code +*/ +int32_t csi_usart_power_control(usart_handle_t handle, csi_power_stat_e state); + +/** + \brief config usart flow control type. + \param[in] handle usart handle to operate. + \param[in] flowctrl_type flow control type.\ref usart_flowctrl_type_e. + \param[in] tx_flow The TX flow pin name + \param[in] rx_flow The RX flow pin name + \return error code +*/ +int32_t csi_usart_config_flowctrl(usart_handle_t handle, + usart_flowctrl_type_e flowctrl_type, + pin_t tx_flow, pin_t rx_flow); +/** + \brief usart modem control. + \param[in] handle usart handle to operate. + \param[in] modem_ctrl modem control action.\ref usart_modem_ctrl_e. + \return error code +*/ +int32_t csi_usart_modem_ctrl(usart_handle_t handle, usart_modem_ctrl_e modem_ctrl); + +/** + \brief get usart modem status. + \param[in] handle usart handle to operate. + \param[in] modem_ctrl modem control action.\ref usart_modem_ctrl_e. + \return modem status.\ref usart_modem_stat_t. +*/ +usart_modem_stat_t csi_usart_get_modem_stat(usart_handle_t handle); + +/** + \brief config usart clock Polarity and Phase. + \param[in] handle usart handle to operate. + \param[in] cpol Clock Polarity.\ref usart_cpol_e. + \param[in] cpha Clock Phase.\ref usart_cpha_e. + \return error code +*/ +int32_t csi_usart_config_clock(usart_handle_t handle, usart_cpol_e cpol, usart_cpha_e cpha); + +/** + \brief config usart guard time. + \param[in] handle usart handle to operate. + \param[in] num_of_bits guard time in number of bit periods. + \return error code +*/ +int32_t csi_usart_config_guard_time(usart_handle_t handle, uint32_t num_of_bits); + +/** + \brief check if usart is readable(data received). + \param[in] handle usart handle to operate. + \return 1 - a character can be read, 0 if nothing to read ,negative for error code +*/ +int32_t csi_usart_readable(usart_handle_t handle); + +/** + \brief check if usart is writable(free for data sending). + \param[in] handle usart handle to operate. + \return 1 - a character can be written, 0 - cannot be written ,negative for error code +*/ +int32_t csi_usart_writable(usart_handle_t handle); + +/** + \brief control the transmit. + \param[in] handle usart handle to operate. + \param[in] 1 - enable the transmitter. 0 - disable the transmitter + \return error code +*/ +int32_t csi_usart_control_tx(usart_handle_t handle, uint32_t enable); + +/** + \brief control the receive. + \param[in] handle usart handle to operate. + \param[in] 1 - enable the receiver. 0 - disable the receiver + \return error code +*/ +int32_t csi_usart_control_rx(usart_handle_t handle, uint32_t enable); + +/** + \brief control the break. + \param[in] handle usart handle to operate. + \param[in] 1- Enable continuous Break transmission,0 - disable continuous Break transmission + \return error code +*/ +int32_t csi_usart_control_break(usart_handle_t handle, uint32_t enable); + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_USART_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wdt.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wdt.h new file mode 100644 index 000000000..bf69c127c --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wdt.h @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/****************************************************************************** + * @file drv_wdt.h + * @brief header file for wdt driver + * @version V1.0 + * @date 02. June 2017 + ******************************************************************************/ + +#ifndef _CSI_WDT_H_ +#define _CSI_WDT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/// definition for wdt handle. +typedef void *wdt_handle_t; + +/****** WDT Event *****/ +typedef enum { + WDT_EVENT_TIMEOUT = 0 ///< generate the interrupt +} wdt_event_e; + +typedef void (*wdt_event_cb_t)(wdt_event_e event); ///< Pointer to \ref wdt_event_cb_t : WDT Event call back. + +/** +\brief WDT Device Driver Capabilities. +*/ +typedef struct { + uint32_t interrupt : 1; ///< supports interrupt +} wdt_capabilities_t; + +/** + \brief get wdt instance count. + \return wdt instance count +*/ +int32_t csi_wdt_get_instance_count(void); + +/** + \brief Initialize WDT Interface. 1. Initializes the resources needed for the WDT interface 2.registers event callback function + \param[in] idx must not exceed return value of csi_wdt_get_instance_count() + \param[in] cb_event Pointer to \ref wdt_event_cb_t + \return pointer to wdt instance +*/ +wdt_handle_t csi_wdt_initialize(int32_t idx, wdt_event_cb_t cb_event); + +/** + \brief De-initialize WDT Interface. stops operation and releases the software resources used by the interface + \param[in] handle wdt handle to operate. + \return error code +*/ +int32_t csi_wdt_uninitialize(wdt_handle_t handle); + +/** + \brief Get driver capabilities. + \param[in] handle wdt handle to operate. + \return \ref wdt_capabilities_t +*/ +wdt_capabilities_t csi_wdt_get_capabilities(wdt_handle_t handle); + +/** + \brief Set the WDT value. + \param[in] handle wdt handle to operate. + \param[in] value the timeout value(ms). + \return error code +*/ +int32_t csi_wdt_set_timeout(wdt_handle_t handle, uint32_t value); + +/** + \brief Start the WDT. + \param[in] handle wdt handle to operate. + \return error code +*/ +int32_t csi_wdt_start(wdt_handle_t handle); + +/** + \brief Stop the WDT. + \param[in] handle wdt handle to operate. + \return error code +*/ +int32_t csi_wdt_stop(wdt_handle_t handle); + +/** + \brief Restart the WDT. + \param[in] handle wdt handle to operate. + \return error code +*/ +int32_t csi_wdt_restart(wdt_handle_t handle); + +/** + \brief Read the WDT Current value. + \param[in] handle wdt handle to operate. + \param[in] value Pointer to the Value. + \return error code +*/ +int32_t csi_wdt_read_current_value(wdt_handle_t handle, uint32_t *value); + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_WDT_H_ */ diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wifi.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wifi.h new file mode 100644 index 000000000..0ea3d3eab --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wifi.h @@ -0,0 +1,1051 @@ +/** + * Copyright (C) 2016 CSI Project. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CSI_WIFI_H__ +#define __CSI_WIFI_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef bool +#define bool int8_t +#define false 0 ///< XOS definition of 'false' +#define true 1 ///< XOS definition of 'true' +#endif + +typedef enum { + WIFI_EVENT_WIFI_READY = 0, /**< WiFi ready */ + WIFI_EVENT_SCAN_DONE, /**< finish scanning AP */ + WIFI_EVENT_STA_START, /**< station start */ + WIFI_EVENT_STA_STOP, /**< station stop */ + WIFI_EVENT_STA_CONNECTED, /**< station connected to AP */ + WIFI_EVENT_STA_DISCONNECTED, /**< station disconnected from AP */ + WIFI_EVENT_STA_AUTHMODE_CHANGE, /**< the auth mode of AP connected by station changed */ + WIFI_EVENT_STA_GOT_IP, /**< station got IP from connected AP */ + WIFI_EVENT_STA_WPS_ER_SUCCESS, /**< station wps succeeds in enrollee mode */ + WIFI_EVENT_STA_WPS_ER_FAILED, /**< station wps fails in enrollee mode */ + WIFI_EVENT_STA_WPS_ER_TIMEOUT, /**< station wps timeout in enrollee mode */ + WIFI_EVENT_STA_WPS_ER_PIN, /**< station wps pin code in enrollee mode */ + WIFI_EVENT_AP_START, /**< soft-AP start */ + WIFI_EVENT_AP_STOP, /**< soft-AP stop */ + WIFI_EVENT_AP_STACONNECTED, /**< a station connected to soft-AP */ + WIFI_EVENT_AP_STADISCONNECTED, /**< a station disconnected from soft-AP */ + WIFI_EVENT_AP_PROBEREQRECVED, /**< Receive probe request packet in soft-AP interface */ + WIFI_EVENT_AP_STA_GOT_IP6, /**< station or ap interface v6IP addr is preferred */ + WIFI_EVENT_ETH_START, /**< ethernet start */ + WIFI_EVENT_ETH_STOP, /**< ethernet stop */ + WIFI_EVENT_ETH_CONNECTED, /**< ethernet phy link up */ + WIFI_EVENT_ETH_DISCONNECTED, /**< ethernet phy link down */ + WIFI_EVENT_ETH_GOT_IP, /**< ethernet got IP from connected AP */ + WIFI_EVENT_MAX +} wifi_event_id_t; + + +typedef enum { + CSI_IF_WIFI_STA = 0, /**< CSI station interface */ + CSI_IF_WIFI_AP, /**< CSI soft-AP interface */ + CSI_IF_ETH, /**< CSI ethernet interface */ + CSI_IF_MAX +} csi_interface_t; + +typedef enum { + WIFI_MODE_NULL = 0, /**< null mode */ + WIFI_MODE_STA, /**< WiFi station mode */ + WIFI_MODE_AP, /**< WiFi soft-AP mode */ + WIFI_MODE_APSTA, /**< WiFi station + soft-AP mode */ + WIFI_MODE_MAX +} wifi_mode_t; + +typedef csi_interface_t wifi_interface_t; + +#define WIFI_IF_STA CSI_IF_WIFI_STA +#define WIFI_IF_AP CSI_IF_WIFI_AP + +typedef enum { + WIFI_COUNTRY_CN = 0, /**< country China, channel range [1, 14] */ + WIFI_COUNTRY_JP, /**< country Japan, channel range [1, 14] */ + WIFI_COUNTRY_US, /**< country USA, channel range [1, 11] */ + WIFI_COUNTRY_EU, /**< country Europe, channel range [1, 13] */ + WIFI_COUNTRY_MAX +} wifi_country_t; + +typedef enum { + WIFI_AUTH_OPEN = 0, /**< authenticate mode : open */ + WIFI_AUTH_WEP, /**< authenticate mode : WEP */ + WIFI_AUTH_WPA_PSK, /**< authenticate mode : WPA_PSK */ + WIFI_AUTH_WPA2_PSK, /**< authenticate mode : WPA2_PSK */ + WIFI_AUTH_WPA_WPA2_PSK, /**< authenticate mode : WPA_WPA2_PSK */ + WIFI_AUTH_WPA2_ENTERPRISE, /**< authenticate mode : WPA2_ENTERPRISE */ + WIFI_AUTH_MAX +} wifi_auth_mode_t; + +enum { + WIFI_REASON_UNSPECIFIED = 1, + WIFI_REASON_AUTH_EXPIRE = 2, + WIFI_REASON_AUTH_LEAVE = 3, + WIFI_REASON_ASSOC_EXPIRE = 4, + WIFI_REASON_ASSOC_TOOMANY = 5, + WIFI_REASON_NOT_AUTHED = 6, + WIFI_REASON_NOT_ASSOCED = 7, + WIFI_REASON_ASSOC_LEAVE = 8, + WIFI_REASON_ASSOC_NOT_AUTHED = 9, + WIFI_REASON_DISASSOC_PWRCAP_BAD = 10, + WIFI_REASON_DISASSOC_SUPCHAN_BAD = 11, + WIFI_REASON_IE_INVALID = 13, + WIFI_REASON_MIC_FAILURE = 14, + WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT = 15, + WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT = 16, + WIFI_REASON_IE_IN_4WAY_DIFFERS = 17, + WIFI_REASON_GROUP_CIPHER_INVALID = 18, + WIFI_REASON_PAIRWISE_CIPHER_INVALID = 19, + WIFI_REASON_AKMP_INVALID = 20, + WIFI_REASON_UNSUPP_RSN_IE_VERSION = 21, + WIFI_REASON_INVALID_RSN_IE_CAP = 22, + WIFI_REASON_802_1X_AUTH_FAILED = 23, + WIFI_REASON_CIPHER_SUITE_REJECTED = 24, + + WIFI_REASON_BEACON_TIMEOUT = 200, + WIFI_REASON_NO_AP_FOUND = 201, + WIFI_REASON_AUTH_FAIL = 202, + WIFI_REASON_ASSOC_FAIL = 203, + WIFI_REASON_HANDSHAKE_TIMEOUT = 204, +}; + +typedef enum { + WIFI_SECOND_CHAN_NONE = 0, /**< the channel width is HT20 */ + WIFI_SECOND_CHAN_ABOVE, /**< the channel width is HT40 and the second channel is above the primary channel */ + WIFI_SECOND_CHAN_BELOW, /**< the channel width is HT40 and the second channel is below the primary channel */ +} wifi_second_chan_t; + +typedef enum { + WIFI_SCAN_TYPE_ACTIVE = 0, /**< active scan */ + WIFI_SCAN_TYPE_PASSIVE, /**< passive scan */ +} wifi_scan_type_t; + +typedef struct { + uint32_t min; /**< minimum active scan time per channel, units: millisecond */ + uint32_t max; /**< maximum active scan time per channel, units: millisecond, values above 1500ms may + cause station to disconnect from AP and are not recommended. */ +} wifi_active_scan_time_t; + +typedef union { + wifi_active_scan_time_t active; /**< active scan time per channel */ + uint32_t passive; /**< passive scan time per channel, units: millisecond, values above 1500ms may + cause station to disconnect from AP and are not recommended. */ +} wifi_scan_time_t; + +typedef struct { + uint8_t *ssid; /**< SSID of AP */ + uint8_t *bssid; /**< MAC address of AP */ + uint8_t channel; /**< channel, scan the specific channel */ + bool show_hidden; /**< enable to scan AP whose SSID is hidden */ + wifi_scan_type_t scan_type; /**< scan type, active or passive */ + wifi_scan_time_t scan_time; /**< scan time per channel */ +} wifi_scan_config_t; + +typedef struct { + uint8_t bssid[6]; /**< MAC address of AP */ + uint8_t ssid[32]; /**< SSID of AP */ + uint8_t primary; /**< channel of AP */ + wifi_second_chan_t second; /**< second channel of AP */ + int8_t rssi; /**< signal strength of AP */ + wifi_auth_mode_t authmode; /**< authmode of AP */ + uint32_t low_rate_enable:1; /**< bit: 0 flag to identify if low rate is enabled or not */ + uint32_t reserved:31; /**< bit: 1..31 reserved */ +} wifi_ap_record_t; + +typedef enum { + WIFI_PS_NONE, /**< No power save */ + WIFI_PS_MODEM, /**< Modem power save */ +} wifi_ps_type_t; + +#define WIFI_PROTOCOL_11B 1 +#define WIFI_PROTOCOL_11G 2 +#define WIFI_PROTOCOL_11N 4 +#define WIFI_PROTOCOL_LR 8 + +typedef enum { + WIFI_BW_HT20 = 1, /* Bandwidth is HT20 */ + WIFI_BW_HT40, /* Bandwidth is HT40 */ + WIFI_BW_HT20_HT40, +} wifi_bandwidth_t; + +typedef struct { + uint8_t ssid[32]; /**< SSID of soft-AP */ + uint8_t password[64]; /**< Password of soft-AP */ + uint8_t ssid_len; /**< Length of SSID. If softap_config.ssid_len==0, check the SSID until there is a termination character; otherwise, set the SSID length according to softap_config.ssid_len. */ + uint8_t channel; /**< Channel of soft-AP */ + wifi_auth_mode_t authmode; /**< Auth mode of soft-AP. Do not support AUTH_WEP in soft-AP mode */ + uint8_t ssid_hidden; /**< Broadcast SSID or not, default 0, broadcast the SSID */ + uint8_t max_connection; /**< Max number of stations allowed to connect in, default 4, max 4 */ + uint16_t beacon_interval; /**< Beacon interval, 100 ~ 60000 ms, default 100 ms */ +} wifi_ap_config_t; + +typedef struct { + uint8_t ssid[32]; /**< SSID of target AP*/ + uint8_t password[64]; /**< password of target AP*/ + bool bssid_set; /**< whether set MAC address of target AP or not. Generally, station_config.bssid_set needs to be 0; and it needs to be 1 only when users need to check the MAC address of the AP.*/ + uint8_t bssid[6]; /**< MAC address of target AP*/ +} wifi_sta_config_t; + +typedef union { + wifi_ap_config_t ap; /**< configuration of AP */ + wifi_sta_config_t sta; /**< configuration of STA */ +} wifi_config_t; + +typedef struct { + uint8_t mac[6]; /**< mac address of sta that associated with soft-AP */ +} wifi_sta_info_t; + +#define CSI_WIFI_MAX_CONN_NUM (10) /**< max number of stations which can connect to soft-AP */ + +typedef struct { + wifi_sta_info_t sta[CSI_WIFI_MAX_CONN_NUM]; /**< station list */ + int num; /**< number of station that associated with soft-AP */ +} wifi_sta_list_t; + +typedef enum { + WIFI_STORAGE_FLASH, /**< all configuration will strore in both memory and flash */ + WIFI_STORAGE_RAM, /**< all configuration will only store in the memory */ +} wifi_storage_t; + +/** + * @brief Vendor IE type + * + */ +typedef enum { + WIFI_VND_IE_TYPE_BEACON, + WIFI_VND_IE_TYPE_PROBE_REQ, + WIFI_VND_IE_TYPE_PROBE_RCSI, + WIFI_VND_IE_TYPE_ASSOC_REQ, + WIFI_VND_IE_TYPE_ASSOC_RCSI, +} wifi_vendor_ie_type_t; + +/** + * @brief Vendor IE index + * + */ +typedef enum { + WIFI_VND_IE_ID_0, + WIFI_VND_IE_ID_1, +} wifi_vendor_ie_id_t; + +typedef struct { + signed rssi:8; /**< signal intensity of packet */ + unsigned rate:5; /**< data rate */ + unsigned :1; /**< reserve */ + unsigned sig_mode:2; /**< 0:is not 11n packet; 1:is 11n packet */ + unsigned :16; /**< reserve */ + unsigned mcs:7; /**< if is 11n packet, shows the modulation(range from 0 to 76) */ + unsigned cwb:1; /**< if is 11n packet, shows if is HT40 packet or not */ + unsigned :16; /**< reserve */ + unsigned smoothing:1; /**< reserve */ + unsigned not_sounding:1; /**< reserve */ + unsigned :1; /**< reserve */ + unsigned aggregation:1; /**< Aggregation */ + unsigned stbc:2; /**< STBC */ + unsigned fec_coding:1; /**< if is 11n packet, shows if is LDPC packet or not */ + unsigned sgi:1; /**< SGI */ + unsigned noise_floor:8; /**< noise floor */ + unsigned ampdu_cnt:8; /**< ampdu cnt */ + unsigned channel:4; /**< which channel this packet in */ + unsigned :12; /**< reserve */ + unsigned timestamp:32; /**< timestamp */ + unsigned :32; /**< reserve */ + unsigned :32; /**< reserve */ + unsigned sig_len:12; /**< It is really lenth of packet */ + unsigned :12; /**< reserve */ + unsigned rx_state:8; /**< rx state */ +} wifi_pkt_rx_ctrl_t; + +typedef struct { + wifi_pkt_rx_ctrl_t rx_ctrl; + uint8_t payload[0]; /**< ieee80211 packet buff, The length of payload is described by sig_len */ +} wifi_promiscuous_pkt_t; + +/** + * @brief Promiscuous frame type + * + */ +typedef enum { + WIFI_PKT_CTRL, /**< control type, receive packet buf is wifi_pkt_rx_ctrl_t */ + WIFI_PKT_MGMT, /**< management type, receive packet buf is wifi_promiscuous_pkt_t */ + WIFI_PKT_DATA, /**< data type, receive packet buf is wifi_promiscuous_pkt_t */ + WIFI_PKT_MISC, /**< other type, receive packet buf is wifi_promiscuous_pkt_t */ +} wifi_promiscuous_pkt_type_t; + +#define CSI_OK 0 +#define CSI_FAIL -1 + +#define CSI_ERR_NO_MEM 0x101 +#define CSI_ERR_INVALID_ARG 0x102 +#define CSI_ERR_INVALID_STATE 0x103 +#define CSI_ERR_INVALID_SIZE 0x104 +#define CSI_ERR_NOT_FOUND 0x105 +#define CSI_ERR_NOT_SUPPORTED 0x106 +#define CSI_ERR_TIMEOUT 0x107 +#define CSI_ERR_INVALID_RCSIONSE 0x108 +#define CSI_ERR_INVALID_CRC 0x109 + +//#define CSI_ERR_WIFI_BASE 0x3000 /*!< Starting number of WiFi error codes */ + +#define CSI_ERR_WIFI_OK CSI_OK /*!< No error */ +#define CSI_ERR_WIFI_FAIL CSI_FAIL /*!< General fail code */ +#define CSI_ERR_WIFI_NO_MEM CSI_ERR_NO_MEM /*!< Out of memory */ +#define CSI_ERR_WIFI_ARG CSI_ERR_INVALID_ARG /*!< Invalid argument */ +#define CSI_ERR_WIFI_NOT_SUPPORT CSI_ERR_NOT_SUPPORTED /*!< Indicates that API is not supported yet */ + +#define CSI_ERR_WIFI_NOT_INIT (CSI_DRV_ERRNO_WIFI_BASE + 1) /*!< WiFi driver was not installed by csi_wifi_init */ +#define CSI_ERR_WIFI_NOT_STARTED (CSI_DRV_ERRNO_WIFI_BASE + 2) /*!< WiFi driver was not started by csi_wifi_start */ +#define CSI_ERR_WIFI_IF (CSI_DRV_ERRNO_WIFI_BASE + 3) /*!< WiFi interface error */ +#define CSI_ERR_WIFI_MODE (CSI_DRV_ERRNO_WIFI_BASE + 4) /*!< WiFi mode error */ +#define CSI_ERR_WIFI_STATE (CSI_DRV_ERRNO_WIFI_BASE + 5) /*!< WiFi internal state error */ +#define CSI_ERR_WIFI_CONN (CSI_DRV_ERRNO_WIFI_BASE + 6) /*!< WiFi internal control block of station or soft-AP error */ +#define CSI_ERR_WIFI_NVS (CSI_DRV_ERRNO_WIFI_BASE + 7) /*!< WiFi internal NVS module error */ +#define CSI_ERR_WIFI_MAC (CSI_DRV_ERRNO_WIFI_BASE + 8) /*!< MAC address is invalid */ +#define CSI_ERR_WIFI_SSID (CSI_DRV_ERRNO_WIFI_BASE + 9) /*!< SSID is invalid */ +#define CSI_ERR_WIFI_PASSWORD (CSI_DRV_ERRNO_WIFI_BASE + 10) /*!< Password is invalid */ +#define CSI_ERR_WIFI_TIMEOUT (CSI_DRV_ERRNO_WIFI_BASE + 11) /*!< Timeout error */ +#define CSI_ERR_WIFI_WAKE_FAIL (CSI_DRV_ERRNO_WIFI_BASE + 12) /*!< WiFi is in sleep state(RF closed) and wakeup fail */ + +typedef enum +{ + FRAME_FILTER_MODE_FORWARD = 1, /*!< Packet filter engine forwards matching packets, discards non-matching packets */ + FRAME_FILTER_MODE_DISCARD = 0, /*!< Packet filter engine discards matching packets, forwards non-matching packets */ +} frame_filter_mode_t; + +typedef enum +{ + FRAME_FILTER_RULE_POSITIVE_MATCHING = 0, /*!< Specifies that a filter should match a given pattern */ + FRAME_FILTER_RULE_NEGATIVE_MATCHING = 1, /*!< Specifies that a filter should NOT match a given pattern */ +} frame_filter_rule_t; + +/** + * Structure describing a frame filter list item + */ +typedef struct +{ + uint32_t id; /*!< Unique identifier for a packet filter item */ + frame_filter_rule_t rule; /*!< Filter matches are either POSITIVE or NEGATIVE matching */ + uint16_t offset; /*!< Offset in bytes to start filtering (referenced to the start of the ethernet packet) */ + uint16_t mask_size; /*!< Size of the mask in bytes */ + uint8_t* mask; /*!< Pattern mask bytes to be ANDed with the pattern eg. "\xff00" (must be in network byte order) */ + uint8_t* pattern; /*!< Pattern bytes used to filter eg. "\x0800" (must be in network byte order) */ + bool enabled_status; /*!< When returned from mhd_get_packet_filters, indicates if the filter is enabled */ +} wifi_frame_filter_t; + +struct wifi_frame_filter_list +{ + struct wifi_frame_filter_list* next; +}; +typedef struct wifi_frame_filter_list wifi_frame_filter_list_t; + +typedef void (*wifi_event_cb_t)(uint32_t event); ///< Signal WiFi Event. Events refer to wifi_event_id_t + +/** + * @brief Init WiFi + * Alloc resource for WiFi driver, such as WiFi control structure, RX/TX buffer, + * WiFi NVS structure etc, this WiFi also start WiFi task + * + * @attention 1. This API must be called before all other WiFi API can be called + * + * @param cb callback to handle WiFi event + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NO_MEM: out of memory + * - others: refer to error code csi_err.h + */ +int32_t csi_wifi_init(wifi_event_cb_t *cb); + +/** + * @brief Deinit WiFi + * Free all resource allocated in csi_wifi_init and stop WiFi task + * + * @attention 1. This API should be called if you want to remove WiFi driver from the system + * + * @return CSI_OK: succeed + */ +int32_t csi_wifi_deinit(void); + +/** + * @brief Set the WiFi operating mode + * + * Set the WiFi operating mode as station, soft-AP or station+soft-AP, + * The default mode is soft-AP mode. + * + * @param mode WiFi operating mode + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + * - others: refer to error code in csi_err.h + */ +int32_t csi_wifi_set_mode(wifi_mode_t mode); + +/** + * @brief Get current operating mode of WiFi + * + * @param[out] mode store current WiFi mode + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + */ +int32_t csi_wifi_get_mode(wifi_mode_t *mode); + +/** + * @brief Start WiFi according to current configuration + * If mode is WIFI_MODE_STA, it create station control block and start station + * If mode is WIFI_MODE_AP, it create soft-AP control block and start soft-AP + * If mode is WIFI_MODE_APSTA, it create soft-AP and station control block and start soft-AP and station + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + * - CSI_ERR_WIFI_NO_MEM: out of memory + * - CSI_ERR_WIFI_CONN: WiFi internal error, station or soft-AP control block wrong + * - CSI_ERR_WIFI_FAIL: other WiFi internal errors + */ +int32_t csi_wifi_start(void); + +/** + * @brief Stop WiFi + * If mode is WIFI_MODE_STA, it stop station and free station control block + * If mode is WIFI_MODE_AP, it stop soft-AP and free soft-AP control block + * If mode is WIFI_MODE_APSTA, it stop station/soft-AP and free station/soft-AP control block + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + */ +int32_t csi_wifi_stop(void); + +/** + * @brief Restore WiFi stack persistent settings to default values + * + * This function will reset settings made using the following APIs: + * - csi_wifi_get_auto_connect, + * - csi_wifi_set_protocol, + * - csi_wifi_set_config related + * - csi_wifi_set_mode + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + */ +int32_t csi_wifi_restore(void); + +/** + * @brief Connect the WiFi station to the AP. + * + * @attention 1. This API only impact WIFI_MODE_STA or WIFI_MODE_APSTA mode + * @attention 2. If connecting to an AP, call csi_wifi_disconnect to disconnect. + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_NOT_START: WiFi is not started by csi_wifi_start + * - CSI_ERR_WIFI_CONN: WiFi internal error, station or soft-AP control block wrong + * - CSI_ERR_WIFI_SSID: SSID of AP which station connects is invalid + */ +int32_t csi_wifi_connect(void); + +/** + * @brief Disconnect the WiFi station from the AP. + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi was not initialized by csi_wifi_init + * - CSI_ERR_WIFI_NOT_STARTED: WiFi was not started by csi_wifi_start + * - CSI_ERR_WIFI_FAIL: other WiFi internal errors + */ +int32_t csi_wifi_disconnect(void); + +/** + * @brief deauthenticate all stations or associated id equals to aid + * + * @param aid when aid is 0, deauthenticate all stations, otherwise deauthenticate station whose associated id is aid + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_NOT_STARTED: WiFi was not started by csi_wifi_start + * - CSI_ERR_WIFI_ARG: invalid argument + * - CSI_ERR_WIFI_MODE: WiFi mode is wrong + */ +int32_t csi_wifi_deauth_sta(uint16_t aid); + +/** + * @brief Scan all available APs. + * + * @attention If this API is called, the found APs are stored in WiFi driver dynamic allocated memory and that + * will be freed in csi_wifi_get_ap_list, so generally, call csi_wifi_get_ap_list to cause + * the memory to be freed once the scan is done + * @attention The values of maximum active scan time and passive scan time per channel are limited to 1500 milliseconds. + * Values above 1500ms may cause station to disconnect from AP and are not recommended. + * + * @param config configuration of scanning + * @param block if block is true, this API will block the caller until the scan is done, otherwise + * it will return immediately + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_NOT_STARTED: WiFi was not started by csi_wifi_start + * - CSI_ERR_WIFI_TIMEOUT: blocking scan is timeout + * - others: refer to error code in csi_err.h + */ +int32_t csi_wifi_scan_start(wifi_scan_config_t *config, bool block); + +/** + * @brief Stop the scan in process + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_NOT_STARTED: WiFi is not started by csi_wifi_start + */ +int32_t csi_wifi_scan_stop(void); + +/** + * @brief Get AP list found in last scan + * + * @param[inout] number As input param, it stores max AP number ap_records can hold. + * As output param, it receives the actual AP number this API returns. + * @param ap_records wifi_ap_record_t array to hold the found APs + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_NOT_STARTED: WiFi is not started by csi_wifi_start + * - CSI_ERR_WIFI_ARG: invalid argument + * - CSI_ERR_WIFI_NO_MEM: out of memory + */ +int32_t csi_wifi_scan_get_ap_records(uint16_t *number, wifi_ap_record_t *ap_records); + + +/** + * @brief Get information of AP which station is associated with + * + * @param ap_info the wifi_ap_record_t to hold AP information + * + * @return + * - CSI_OK: succeed + * - others: fail + */ +int32_t csi_wifi_sta_get_ap_info(wifi_ap_record_t *ap_info); + +/** + * @brief Set current power save type + * + * @attention Default power save type is WIFI_PS_NONE. + * + * @param type power save type + * + * @return CSI_ERR_WIFI_NOT_SUPPORT: not supported yet + */ +int32_t csi_wifi_set_ps(wifi_ps_type_t type); + +/** + * @brief Get current power save type + * + * @attention Default power save type is WIFI_PS_NONE. + * + * @param[out] type: store current power save type + * + * @return CSI_ERR_WIFI_NOT_SUPPORT: not supported yet + */ +int32_t csi_wifi_get_ps(wifi_ps_type_t *type); + +/** + * @brief Set protocol type of specified interface + * The default protocol is (WIFI_PROTOCOL_11B|WIFI_PROTOCOL_11G|WIFI_PROTOCOL_11N) + * + * @attention Currently we only support 802.11b or 802.11bg or 802.11bgn mode + * + * @param ifx interfaces + * @param protocol_bitmap WiFi protocol bitmap + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_IF: invalid interface + * - others: refer to error codes in csi_err.h + */ +int32_t csi_wifi_set_protocol(wifi_interface_t ifx, uint8_t protocol_bitmap); + +/** + * @brief Get the current protocol bitmap of the specified interface + * + * @param ifx interface + * @param[out] protocol_bitmap store current WiFi protocol bitmap of interface ifx + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_IF: invalid interface + * - CSI_ERR_WIFI_ARG: invalid argument + * - others: refer to error codes in csi_err.h + */ +int32_t csi_wifi_get_protocol(wifi_interface_t ifx, uint8_t *protocol_bitmap); + +/** + * @brief Set the bandwidth of specified interface + * + * @attention 1. API return false if try to configure an interface that is not enabled + * @attention 2. WIFI_BW_HT40 is supported only when the interface support 11N + * + * @param ifx interface to be configured + * @param bw bandwidth + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_IF: invalid interface + * - CSI_ERR_WIFI_ARG: invalid argument + * - others: refer to error codes in csi_err.h + */ +int32_t csi_wifi_set_bandwidth(wifi_interface_t ifx, wifi_bandwidth_t bw); + +/** + * @brief Get the bandwidth of specified interface + * + * @attention 1. API return false if try to get a interface that is not enable + * + * @param ifx interface to be configured + * @param[out] bw store bandwidth of interface ifx + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_IF: invalid interface + * - CSI_ERR_WIFI_ARG: invalid argument + */ +int32_t csi_wifi_get_bandwidth(wifi_interface_t ifx, wifi_bandwidth_t *bw); + +/** + * @brief Set primary/secondary channel + * + * @attention 1. This is a special API for sniffer + * @attention 2. This API should be called after csi_wifi_start() or csi_wifi_set_promiscuous() + * + * @param primary for HT20, primary is the channel number, for HT40, primary is the primary channel + * @param second for HT20, second is ignored, for HT40, second is the second channel + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_IF: invalid interface + * - CSI_ERR_WIFI_ARG: invalid argument + */ +int32_t csi_wifi_set_channel(uint8_t primary, wifi_second_chan_t second); + +/** + * @brief Get the primary/secondary channel + * + * @attention 1. API return false if try to get a interface that is not enable + * + * @param[out] primary store current primary channel + * @param[out] second store current second channel + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + */ +int32_t csi_wifi_get_channel(uint8_t *primary, wifi_second_chan_t *second); + +/** + * @brief Set country code + * The default value is WIFI_COUNTRY_CN + * + * @param country country type + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + * - others: refer to error code in csi_err.h + */ +int32_t csi_wifi_set_country(wifi_country_t country); + +/** + * @brief Get country code + * + * @param country store current country + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + */ +int32_t csi_wifi_get_country(wifi_country_t *country); + +/** + * @brief Set MAC address of the WiFi station or the soft-AP interface. + * + * @attention 1. This API can only be called when the interface is disabled + * @attention 2. soft-AP and station have different MAC addresses, do not set them to be the same. + * @attention 3. The bit 0 of the first byte of MAC address can not be 1. For example, the MAC address + * can set to be "1a:XX:XX:XX:XX:XX", but can not be "15:XX:XX:XX:XX:XX". + * + * @param ifx interface + * @param mac the MAC address + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + * - CSI_ERR_WIFI_IF: invalid interface + * - CSI_ERR_WIFI_MAC: invalid mac address + * - CSI_ERR_WIFI_MODE: WiFi mode is wrong + * - others: refer to error codes in csi_err.h + */ +int32_t csi_wifi_set_mac(wifi_interface_t ifx, uint8_t mac[6]); + +/** + * @brief Get mac of specified interface + * + * @param ifx interface + * @param[out] mac store mac of the interface ifx + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + * - CSI_ERR_WIFI_IF: invalid interface + */ +int32_t csi_wifi_get_mac(wifi_interface_t ifx, uint8_t mac[6]); + +/** + * @brief The RX callback function in the promiscuous mode. + * Each time a packet is received, the callback function will be called. + * + * @param buf Data received. Type of data in buffer (wifi_promiscuous_pkt_t or wifi_pkt_rx_ctrl_t) indicated by 'type' parameter. + * @param type promiscuous packet type. + * + */ +typedef void (* wifi_promiscuous_cb_t)(void *buf, wifi_promiscuous_pkt_type_t type); + +/** + * @brief Register the RX callback function in the promiscuous mode. + * + * Each time a packet is received, the registered callback function will be called. + * + * @param cb callback + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + */ +int32_t csi_wifi_set_promiscuous_rx_cb(wifi_promiscuous_cb_t cb); + +/** + * @brief Enable the promiscuous mode. + * + * @param en false - disable, true - enable + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + */ +int32_t csi_wifi_set_promiscuous(bool en); + +/** + * @brief Get the promiscuous mode. + * + * @param[out] en store the current status of promiscuous mode + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + */ +int32_t csi_wifi_get_promiscuous(bool *en); + +/** + * @brief Set the configuration of STA or AP + * + * @attention 1. This API can be called only when specified interface is enabled, otherwise, API fail + * @attention 2. For station configuration, bssid_set needs to be 0; and it needs to be 1 only when users need to check the MAC address of the AP. + * @attention 3. Limited to only one channel, so when in the soft-AP+station mode, the soft-AP will adjust its channel automatically to be the same as + * the channel of the station. + * + * @param ifx interface + * @param conf station or soft-AP configuration + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + * - CSI_ERR_WIFI_IF: invalid interface + * - CSI_ERR_WIFI_MODE: invalid mode + * - CSI_ERR_WIFI_PASSWORD: invalid password + * - CSI_ERR_WIFI_NVS: WiFi internal NVS error + * - others: refer to the erro code in csi_err.h + */ +int32_t csi_wifi_set_config(wifi_interface_t ifx, wifi_config_t *conf); + +/** + * @brief Get configuration of specified interface + * + * @param ifx interface + * @param[out] conf station or soft-AP configuration + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + * - CSI_ERR_WIFI_IF: invalid interface + */ +int32_t csi_wifi_get_config(wifi_interface_t ifx, wifi_config_t *conf); + +/** + * @brief Get STAs associated with soft-AP + * + * @attention SSC only API + * + * @param[out] sta station list + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + * - CSI_ERR_WIFI_MODE: WiFi mode is wrong + * - CSI_ERR_WIFI_CONN: WiFi internal error, the station/soft-AP control block is invalid + */ +int32_t csi_wifi_ap_get_sta_list(wifi_sta_list_t *sta); + + +/** + * @brief Set the WiFi API configuration storage type + * + * @attention 1. The default value is WIFI_STORAGE_FLASH + * + * @param storage : storage type + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + */ +int32_t csi_wifi_set_storage(wifi_storage_t storage); + +/** + * @brief Set auto connect + * The default value is true + * + * @param en : true - enable auto connect / false - disable auto connect + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_MODE: WiFi internal error, the station/soft-AP control block is invalid + * - others: refer to error code in csi_err.h + */ +int32_t csi_wifi_set_auto_connect(bool en); + +/** + * @brief Get the auto connect flag + * + * @param[out] en store current auto connect configuration + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + */ +int32_t csi_wifi_get_auto_connect(bool *en); + +/** + * @brief Set vendor specific element + * + * @param enable enable or not + * @param type information element type + * @param idx information element index + * @param vnd_ie pointer to a vendor specific element + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + * - CSI_ERR_WIFI_ARG: invalid argument + * - CSI_ERR_WIFI_NO_MEM: out of memory + */ +int32_t csi_wifi_set_vendor_ie(bool enable, wifi_vendor_ie_type_t type, wifi_vendor_ie_id_t idx, uint8_t *vnd_ie); + +/** + * @brief Define function pointer for vendor specific element callback + * @param ctx reserved + * @param type information element type + * @param sa source address + * @param vnd_ie pointer to a vendor specific element + * @param rssi received signal strength indication + */ +typedef void (*csi_vendor_ie_cb_t) (void *ctx, wifi_vendor_ie_type_t type, const uint8_t sa[6], const uint8_t *vnd_ie, int rssi); + +/** + * @brief Set vendor specific element callback + * + * @param cb callback function + * @param ctx reserved + * + * @return + * - CSI_OK: succeed + * - CSI_ERR_WIFI_NOT_INIT: WiFi is not initialized by csi_wifi_init + */ +int32_t csi_wifi_set_vendor_ie_cb(csi_vendor_ie_cb_t cb, void *ctx); + +/** + * @brief get whether the wifi driver is allowed to transmit data or not + * + * @return + * - true : upper layer should stop to transmit data to wifi driver + * - false : upper layer can transmit data to wifi driver + */ +bool csi_wifi_tx_is_stop(void); + +/** + * @brief free the rx buffer which allocated by wifi driver + * + * @param buffer: rx buffer pointer + */ +void csi_wifi_free_rx_buffer(void *buffer); + +/** + * @brief transmit the buffer via wifi driver + * + * @param wifi_if : wifi interface id + * @param buffer : the buffer to be tansmit + * @param len : the length of buffer + * + * @return + * - ERR_OK : Successfully transmit the buffer to wifi driver + * - ERR_MEM : Out of memory + * - ERR_IF : WiFi driver error + * - ERR_ARG : Invalid argument + */ +int csi_wifi_tx(wifi_interface_t wifi_if, void *buffer, uint16_t len); + +/** + * @brief The WiFi RX callback function + * + * Each time the WiFi need to forward the packets to high layer, the callback function will be called. + * ebuf is rx buffer allocated by wifi driver + */ +typedef int32_t (*wifi_rxcb_t)(void *buffer, uint16_t len, void *ebuf); + +/** + * @brief Set the WiFi RX callback + * + * @attention 1. Currently we support only one RX callback for each interface + * + * @param ifx : interface + * @param fn : WiFi RX callback + * + * @return + * - CSI_OK : succeed + * - others : fail + */ +int32_t csi_wifi_reg_rxcb(wifi_interface_t ifx, wifi_rxcb_t fn); + +/** + \brief Add Frame Filter Setting with Filter ID. + \param[in] filter Pointer to filter setting + \return +*/ +int32_t csi_wifi_add_framefilter(const wifi_frame_filter_t *filter); + +/** + \brief Remove Frame Filter Setting. + \param[in] filter_id Frame Filter ID + \return +*/ +int32_t csi_wifi_remove_framefilter(uint32_t filter_id); + +/** + \brief Enable/Disable Specified Frame Filter ID. + \param[in] filter_id Frame Filter ID + \param[in] en Enable or disable + \return +*/ +int32_t csi_wifi_en_framefilter(uint32_t filter_id, bool en); + +/** + \brief Get frame filter table list. + \param[in] list frame filter table list + \param[in] count_out the count of filter setting added + \param[in] max_count max filter setting can be supported + \return +*/ +int32_t csi_wifi_get_framefilter(wifi_frame_filter_list_t* list, uint32_t* count_out, uint32_t max_count); + +/** +* @brief This function gets the radio status of the Wi-Fi driver. +* +* @param[out] on_off indicates the Wi-Fi radio is on or off. +* +* Value |Definition | +* ------------------------------|------------------------------------------------------------------------| +* \b 0 | OFF, the Wi-Fi radio is turned off, and Wi-Fi TX/RX is disabled.| +* \b 1 | ON, the Wi-Fi radio is turned on, and Wi-Fi TX/RX is enabled.| +* +* +* @return >=0 the operation completed successfully, <0 the operation failed. +* +* @note In repeater mode, both Wi-Fi interface and Wi-Fi radio are turned on/off at the same time. +*/ +int32_t wifi_config_get_radio(uint8_t *on_off); + +/** +* @brief This function sets the radio status of the Wi-Fi driver. This operation takes effect immediately. +* +* @param[in] on_off indicates the Wi-Fi radio is on or off. +* +* Value |Definition | +* ------------------------------|------------------------------------------------------------------------| +* \b 0 | OFF, the Wi-Fi radio is turned off, and Wi-Fi TX/RX is disabled| +* \b 1 | ON, the Wi-Fi radio is turned on, and Wi-Fi TX/RX is enabled| +* +* @return >=0 the operation completed successfully, <0 the operation failed. +* +* @note In repeater mode, both Wi-Fi interface and Wi-Fi radio are turned on/off at the same time. +*/ +int32_t wifi_config_set_radio(uint8_t on_off); + +/** +* @brief This function gets the RSSI of the connected AP. It's only used for the STA mode and while the station is connected to the AP. +* +* @param[out] rssi returns the RSSI of the connected AP. +* +* @return >=0 the operation completed successfully, <0 the operation failed. +* +* +*/ +int32_t csi_wifi_connection_get_rssi(int8_t *rssi); + + +#ifdef __cplusplus +} +#endif + +#endif /* __CSI_WIFI_H__ */ + + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wifi_wps.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wifi_wps.h new file mode 100644 index 000000000..9cb9c9dec --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/drv_wifi_wps.h @@ -0,0 +1,101 @@ +/** + * Copyright (C) 2016 CSI Project. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CSI_WIFI_WPS_H__ +#define __CSI_WIFI_WPS_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup WiFi_APIs WiFi Related APIs + * @brief WiFi APIs + */ + +/** @addtogroup WiFi_APIs + * @{ + */ + +/** \defgroup WPS_APIs WPS APIs + * @brief WPS APIs + * + * WPS can only be used when station is enabled. + * + */ + +/** @addtogroup WPS_APIs + * @{ + */ + +#define CSI_ERR_WIFI_REGISTRAR (CSI_DRV_ERRNO_WIFI_BASE + 51) /*!< WPS registrar is not supported */ +#define CSI_ERR_WIFI_WPS_TYPE (CSI_DRV_ERRNO_WIFI_BASE + 52) /*!< WPS type error */ +#define CSI_ERR_WIFI_WPS_SM (CSI_DRV_ERRNO_WIFI_BASE + 53) /*!< WPS state machine is not initialized */ + +typedef enum wps_type { + WPS_TYPE_DISABLE = 0, + WPS_TYPE_PBC, + WPS_TYPE_PIN, + WPS_TYPE_MAX, +} wps_type_t; + +/** + * @brief Enable Wi-Fi WPS function. + * + * @attention WPS can only be used when station is enabled. + * + * @param wps_type : WPS type, so far only WPS_TYPE_PBC and WPS_TYPE_PIN is supported + * + * @return + * - CSI_OK : succeed + * - CSI_ERR_WIFI_WPS_TYPE : wps type is invalid + * - CSI_ERR_WIFI_WPS_MODE : wifi is not in station mode or sniffer mode is on + * - CSI_ERR_WIFI_FAIL : wps initialization fails + */ +int32_t csi_wifi_wps_enable(wps_type_t wps_type); + +/** + * @brief Disable Wi-Fi WPS function and release resource it taken. + * + * @return + * - CSI_OK : succeed + * - CSI_ERR_WIFI_WPS_MODE : wifi is not in station mode or sniffer mode is on + */ +int32_t csi_wifi_wps_disable(void); + +/** + * @brief WPS starts to work. + * + * @attention WPS can only be used when station is enabled. + * + * @param timeout_ms : maximum blocking time before API return. + * - 0 : non-blocking + * - 1~120000 : blocking time + * + * @return + * - CSI_OK : succeed + * - CSI_ERR_WIFI_WPS_TYPE : wps type is invalid + * - CSI_ERR_WIFI_WPS_MODE : wifi is not in station mode or sniffer mode is on + * - CSI_ERR_WIFI_WPS_SM : wps state machine is not initialized + * - CSI_ERR_WIFI_FAIL : wps initialization fails + */ +int32_t csi_wifi_wps_start(int timeout_ms); + +#ifdef __cplusplus +} +#endif + +#endif /* __CSI_WIFI_H__ */ + diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/system.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/system.c new file mode 100644 index 000000000..34433eea6 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/include/system.c @@ -0,0 +1,33 @@ +#include +#include +#include + +extern void CORET_IRQHandler(void); +extern void Default_handler(void); +extern void console_init(); +void (*g_irqvector[32])(void); + +void irq_vectors_init(void) +{ + int i; + + for (i = 0; i < 32; i++) { + g_irqvector[i] = Default_handler; + } + + g_irqvector[CORET_IRQn] = CORET_IRQHandler; +} + + +#define CONFIG_SYSTICK_HZ 100 +#define CONFIG_SYSTEM_FREQ 24000000 + +void SystemInit(void) +{ + irq_vectors_init(); + drv_coret_config(CONFIG_SYSTEM_FREQ / CONFIG_SYSTICK_HZ, CORET_IRQn); //10ms + drv_nvic_enable_irq(CORET_IRQn); + + console_init(); + return; +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/driver/uart.c b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/driver/uart.c new file mode 100644 index 000000000..60ac671c9 --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/driver/uart.c @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include "soc.h" +#include "pin_name.h" +#include "drv_usart.h" +#include "ck_sys_freq.h" + +#define CONSOLE_TXD PA10_ADC2_TXD0 +#define CONSOLE_RXD PA11_ACMP0N_ADC3_RXD0 +static usart_handle_t console_handle = NULL; +extern int32_t csi_usart_putchar(usart_handle_t handle, uint8_t ch); + +int putchar(int ch) +{ + if (ch == '\n') { + csi_usart_putchar(console_handle, '\r'); + } + + csi_usart_putchar(console_handle, ch); + + return 0; +} + +int fputc(int ch, FILE *fp) +{ + if (ch == '\n') { + csi_usart_putchar(console_handle, '\r'); + } + + csi_usart_putchar(console_handle, ch); + + return 0; +} + + +void usart_event_cb(usart_event_e event, void *cb_arg) +{ + //do nothing +} + +void console_init() +{ + int ret; + + console_handle = csi_usart_initialize(CONSOLE_TXD, CONSOLE_RXD, usart_event_cb, 0); + + if (!console_handle) { + return; + } + + ret = csi_usart_config(console_handle, + SYSTEM_CLOCK, + 115200, + USART_MODE_ASYNCHRONOUS, + USART_PARITY_NONE, + USART_STOP_BITS_1, + USART_DATA_BITS_8); + + if (ret < 0) { + return; + } +} + +void console_init_ree(uint32_t sysclk) +{ + int ret; + + + console_handle = csi_usart_initialize(CONSOLE_TXD, CONSOLE_RXD, usart_event_cb, 0); + + if (!console_handle) { + return; + } + + ret = csi_usart_config(console_handle, + sysclk, + 115200, + USART_MODE_ASYNCHRONOUS, + USART_PARITY_NONE, + USART_STOP_BITS_1, + USART_DATA_BITS_8); + + if (ret < 0) { + return; + } +} diff --git a/FreeRTOS/Demo/T-HEAD_CB2201_CDK/driver/uart.h b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/driver/uart.h new file mode 100644 index 000000000..42105056a --- /dev/null +++ b/FreeRTOS/Demo/T-HEAD_CB2201_CDK/driver/uart.h @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UART_H +#define UART_H +void console_init(void); +#endif diff --git a/FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/port.c b/FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/port.c new file mode 100644 index 000000000..db8d50f7a --- /dev/null +++ b/FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/port.c @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * 1 tab == 4 spaces! + */ + +/* Kernel includes. */ +#include "FreeRTOS.h" +#include "task.h" + +extern void vPortStartTask(void); + +/* Used to keep track of the number of nested calls to taskENTER_CRITICAL(). This +will be set to 0 prior to the first task being started. */ +portLONG ulCriticalNesting = 0x9999UL; + +/* Used to record one tack want to swtich task after enter critical area, we need know it + * and implement task switch after exit critical area */ +portLONG pendsvflag = 0; + +StackType_t *pxPortInitialiseStack( StackType_t * pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) +{ + StackType_t *stk = NULL; + + stk = pxTopOfStack; + + *(--stk) = (uint32_t)pxCode; /* Entry Point */ + *(--stk) = (uint32_t)0xE0000140L; /* PSR */ + *(--stk) = (uint32_t)0xFFFFFFFEL; /* R15 (LR) (init value will cause fault if ever used) */ + *(--stk) = (uint32_t)0x13131313L; /* R13 */ + *(--stk) = (uint32_t)0x12121212L; /* R12 */ + *(--stk) = (uint32_t)0x11111111L; /* R11 */ + *(--stk) = (uint32_t)0x10101010L; /* R10 */ + *(--stk) = (uint32_t)0x09090909L; /* R9 */ + *(--stk) = (uint32_t)0x08080808L; /* R8 */ + *(--stk) = (uint32_t)0x07070707L; /* R7 */ + *(--stk) = (uint32_t)0x06060606L; /* R6 */ + *(--stk) = (uint32_t)0x05050505L; /* R5 */ + *(--stk) = (uint32_t)0x04040404L; /* R4 */ + *(--stk) = (uint32_t)0x03030303L; /* R3 */ + *(--stk) = (uint32_t)0x02020202L; /* R2 */ + *(--stk) = (uint32_t)0x01010101L; /* R1 */ + *(--stk) = (uint32_t)pvParameters; /* R0 : argument */ + + return stk; +} + +BaseType_t xPortStartScheduler( void ) +{ + ulCriticalNesting = 0UL; + + vPortStartTask(); + + return pdFALSE; +} + + +void vPortEndScheduler( void ) +{ + /* Not implemented as there is nothing to return to. */ +} + +void vPortEnterCritical( void ) +{ + portDISABLE_INTERRUPTS(); + ulCriticalNesting ++; +} + +void vPortExitCritical( void ) +{ + if (ulCriticalNesting == 0) { + while(1); + } + + ulCriticalNesting --; + if (ulCriticalNesting == 0) + { + portENABLE_INTERRUPTS(); + + if (pendsvflag) + { + pendsvflag = 0; + portYIELD(); + } + } +} + +#if configUSE_PREEMPTION == 0 +void xPortSysTickHandler( void ) +{ + portLONG ulDummy; + + ulDummy = portSET_INTERRUPT_MASK_FROM_ISR(); + xTaskIncrementTick(); + portCLEAR_INTERRUPT_MASK_FROM_ISR( ulDummy ); +} + +#else +void xPortSysTickHandler( void ) +{ + portLONG ulDummy; + + ulDummy = portSET_INTERRUPT_MASK_FROM_ISR(); + { + if (xTaskIncrementTick() != pdFALSE) + { + portYIELD_FROM_ISR(pdTRUE); + } + } + portCLEAR_INTERRUPT_MASK_FROM_ISR( ulDummy ); +} +#endif + +void vPortYieldHandler( void ) +{ + uint32_t ulSavedInterruptMask; + + ulSavedInterruptMask = portSET_INTERRUPT_MASK_FROM_ISR(); + + vTaskSwitchContext(); + + portCLEAR_INTERRUPT_MASK_FROM_ISR( ulSavedInterruptMask ); +} + +__attribute__((weak)) void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed portCHAR *pcTaskName ) +{ + for(;;); +} + +__attribute__((weak)) void vApplicationMallocFailedHook( void ) +{ + for(;;); +} diff --git a/FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/portasm.S b/FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/portasm.S new file mode 100644 index 000000000..693ec641d --- /dev/null +++ b/FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/portasm.S @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * 1 tab == 4 spaces! + */ + +//#include + +/******************************************************************** + * Functions: vPortStartTask + * + ********************************************************************/ +.global vPortStartTask +.type vPortStartTask, %function +vPortStartTask: + psrclr ie + lrw r4, pxCurrentTCB + ld.w r4, (r4) // the current task stack pointer is the first member + ld.w sp, (r4) + + ldw r0, (sp, 64) + mtcr r0, epc + ldw r0, (sp, 60) + mtcr r0, epsr + ldw r15, (sp, 56) + ldm r0-r13, (sp) + addi sp, 68 + rte + +/******************************************************************** + * Functions: vPortYield + * + ********************************************************************/ +.global vPortYield +.type vPortYield, %function +vPortYield: + psrclr ee + subi sp, 68 + stm r0-r13, (sp) + stw r15, (sp, 56) + mfcr r0, psr + bseti r0, 8 + stw r0, (sp, 60) + stw r15, (sp, 64) + + lrw r2, pxCurrentTCB + ld.w r3, (r2) + st.w sp, (r3) + + jbsr vTaskSwitchContext + lrw r4, pxCurrentTCB + ld.w r4, (r4) + ld.w sp, (r4) + + ldw r0, (sp, 64) + mtcr r0, epc + ldw r0, (sp, 60) + mtcr r0, epsr + ldw r15, (sp, 56) + ldm r0-r13, (sp) + addi sp, 68 + + rte + +/******************************************************************** + * Functions: NOVIC_IRQ_Default_Handler + * + ********************************************************************/ +.global NOVIC_IRQ_Default_Handler +.type NOVIC_IRQ_Default_Handler, %function +NOVIC_IRQ_Default_Handler: + psrset ee + subi sp, 68 + stm r0-r13, (sp) + stw r15, (sp, 56) + mfcr r0, epsr + stw r0, (sp, 60) + mfcr r0, epc + stw r0, (sp, 64) + + lrw r7, pxCurrentTCB + ldw r7, (r7) + stw sp, (r7) + + lrw sp, g_top_irqstack + + lrw r1, g_irqvector + mfcr r0, psr + lsri r0, 16 + sextb r0 + subi r0, 32 + lsli r0, 2 + add r1, r0 + ldw r1, (r1) + lsri r0, 2 + jsr r1 + + lrw r7, pxCurrentTCB + ldw r7, (r7) + ldw sp, (r7) + + ldw r0, (sp, 64) + mtcr r0, epc + ldw r0, (sp, 60) + mtcr r0, epsr + ldm r0-r13, (sp) + ldw r15, (sp, 56) + addi sp, 68 + rte diff --git a/FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/portmacro.h b/FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/portmacro.h new file mode 100644 index 000000000..6db37cc54 --- /dev/null +++ b/FreeRTOS/Source/portable/ThirdParty/CDK/T-HEAD_CK802/portmacro.h @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * 1 tab == 4 spaces! + */ + +#ifndef PORTMACRO_H +#define PORTMACRO_H + +#include +#include +#include + +extern void vPortYield(void); +#ifdef __cplusplus +class vPortYield; +extern "C" { +#endif + + +/*----------------------------------------------------------- + * Port specific definitions. + * + * The settings in this file configure FreeRTOS correctly for the + * given hardware and compiler. + * + * These settings should not be altered. + *----------------------------------------------------------- + */ + +/* Type definitions. */ +#define portCHAR char +#define portFLOAT float +#define portDOUBLE double +#define portLONG long +#define portSHORT short +#define portSTACK_TYPE uint32_t +#define portBASE_TYPE long + +typedef portSTACK_TYPE StackType_t; +typedef long BaseType_t; +typedef unsigned long UBaseType_t; +typedef void (*portvectorfunc)(void); + +#if( configUSE_16_BIT_TICKS == 1 ) + typedef uint16_t TickType_t; + #define portMAX_DELAY ( TickType_t ) 0xffff +#else + typedef uint32_t TickType_t; + #define portMAX_DELAY ( TickType_t ) 0xffffffffUL +#endif + + +/* Hardware specifics. */ +#define portBYTE_ALIGNMENT 8 +#define portSTACK_GROWTH -1 +#define portMS_PERIOD_TICK 10 +#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) + + +static inline void vPortEnableInterrupt( void ) +{ + __enable_irq(); +} + +static inline void vPortDisableInterrupt( void ) +{ + __disable_irq(); +} + +static inline portLONG GetCurrentPSR (void) +{ + return __get_PSR(); +} + +static inline portLONG SaveLocalPSR (void) +{ + portLONG flags = __get_PSR(); + __disable_irq(); + return flags; +} + +static inline void RestoreLocalPSR (portLONG newMask) +{ + __asm__ __volatile__( + "mtcr %0, psr \n" + : + :"r" (newMask) + :"memory" + ); +} + +extern void vPortEnterCritical( void ); +extern void vPortExitCritical( void ); +extern __attribute__((naked)) void cpu_yeild(void); + +#define portDISABLE_INTERRUPTS() vPortDisableInterrupt() +#define portENABLE_INTERRUPTS() vPortEnableInterrupt() +#define portENTER_CRITICAL() vPortEnterCritical() +#define portEXIT_CRITICAL() vPortExitCritical() +#define portSET_INTERRUPT_MASK_FROM_ISR() SaveLocalPSR() +#define portCLEAR_INTERRUPT_MASK_FROM_ISR(a) RestoreLocalPSR(a) + +#define portNOP() asm("nop") + +extern portLONG ulCriticalNesting; +extern portLONG pendsvflag; + +#define portYIELD() if (ulCriticalNesting == 0) \ + { \ + vPortYield(); \ + } \ + else \ + { \ + pendsvflag = 1; \ + } \ + portNOP();portNOP() + +/*-----------------------------------------------------------*/ + +/* Task function macros as described on the FreeRTOS.org WEB site. */ +#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) __attribute__((noreturn)) +#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) +/*-----------------------------------------------------------*/ + +#define portEND_SWITCHING_ISR( xSwitchRequired ) do { \ + if( xSwitchRequired != pdFALSE ) \ + { \ + portYIELD(); \ + } \ + }while(0) + +#define portYIELD_FROM_ISR( a ) vTaskSwitchContext() + + + +#ifdef __cplusplus +} +#endif + +#endif /* PORTMACRO_H */ + -- 2.39.5