From 4fea46c83c2e3d2140e158af7a448b4a6dcb4b46 Mon Sep 17 00:00:00 2001 From: limxuzheng <276137500@qq.com> Date: Wed, 12 Nov 2014 01:09:43 +0800 Subject: [PATCH] support rx62n --- bsp/rx/RPDL/Interrupt_INTC.c | 475 +++++++ bsp/rx/RPDL/Interrupt_RTC.c | 132 ++ bsp/rx/RPDL/Interrupt_SPI.c | 568 ++++++++ bsp/rx/RPDL/Interrupt_TMR.c | 286 ++++ bsp/rx/RPDL/interrupt_adc_10.c | 78 ++ bsp/rx/RPDL/interrupt_adc_12.c | 64 + bsp/rx/RPDL/interrupt_bsc.c | 63 + bsp/rx/RPDL/interrupt_cmt.c | 141 ++ bsp/rx/RPDL/interrupt_dmac.c | 105 ++ bsp/rx/RPDL/interrupt_exdmac.c | 88 ++ bsp/rx/RPDL/interrupt_iic.c | 901 ++++++++++++ bsp/rx/RPDL/interrupt_mtu2.c | 1064 ++++++++++++++ bsp/rx/RPDL/interrupt_not_rpdl.c | 203 +++ bsp/rx/RPDL/interrupt_poe.c | 126 ++ bsp/rx/RPDL/interrupt_sci.c | 1219 +++++++++++++++++ bsp/rx/RPDL/interrupt_wdt.c | 63 + bsp/rx/RPDL/macro.h | 72 + bsp/rx/RPDL/r_pdl_adc_10.h | 111 ++ bsp/rx/RPDL/r_pdl_adc_10_RX62Nxx.h | 82 ++ bsp/rx/RPDL/r_pdl_adc_12.h | 123 ++ bsp/rx/RPDL/r_pdl_adc_12_RX62Nxx.h | 80 ++ bsp/rx/RPDL/r_pdl_bsc.h | 210 +++ bsp/rx/RPDL/r_pdl_bsc_rx62nxx.h | 129 ++ bsp/rx/RPDL/r_pdl_cgc.h | 64 + bsp/rx/RPDL/r_pdl_cgc_rx62nxx.h | 55 + bsp/rx/RPDL/r_pdl_cmt.h | 83 ++ bsp/rx/RPDL/r_pdl_cmt_rx62nxx.h | 104 ++ bsp/rx/RPDL/r_pdl_common_defs_rx62nxx.h | 315 +++++ bsp/rx/RPDL/r_pdl_crc.h | 57 + bsp/rx/RPDL/r_pdl_crc_rx62nxx.h | 64 + bsp/rx/RPDL/r_pdl_dac_10.h | 52 + bsp/rx/RPDL/r_pdl_dac_10_rx62nxx.h | 59 + bsp/rx/RPDL/r_pdl_definitions.h | 59 + bsp/rx/RPDL/r_pdl_dmac.h | 174 +++ bsp/rx/RPDL/r_pdl_dmac_rx62nxx.h | 101 ++ bsp/rx/RPDL/r_pdl_dtc.h | 214 +++ bsp/rx/RPDL/r_pdl_dtc_rx62nxx.h | 90 ++ bsp/rx/RPDL/r_pdl_exdmac.h | 148 ++ bsp/rx/RPDL/r_pdl_exdmac_rx62nxx.h | 102 ++ bsp/rx/RPDL/r_pdl_iic.h | 203 +++ bsp/rx/RPDL/r_pdl_iic_rx62nxfp.h | 203 +++ bsp/rx/RPDL/r_pdl_iic_rx62nxnfp.h | 203 +++ bsp/rx/RPDL/r_pdl_intc.h | 606 ++++++++ bsp/rx/RPDL/r_pdl_intc_rx62nxx.h | 118 ++ bsp/rx/RPDL/r_pdl_io_port.h | 252 ++++ bsp/rx/RPDL/r_pdl_io_port_rx62nxbg.h | 200 +++ bsp/rx/RPDL/r_pdl_io_port_rx62nxfb.h | 201 +++ bsp/rx/RPDL/r_pdl_io_port_rx62nxfp.h | 201 +++ bsp/rx/RPDL/r_pdl_io_port_rx62nxld.h | 201 +++ bsp/rx/RPDL/r_pdl_io_port_rx62nxle.h | 201 +++ bsp/rx/RPDL/r_pdl_iwdt.h | 55 + bsp/rx/RPDL/r_pdl_iwdt_RX62Nxx.h | 55 + bsp/rx/RPDL/r_pdl_lpc.h | 125 ++ bsp/rx/RPDL/r_pdl_lpc_rx62nxx.h | 81 ++ bsp/rx/RPDL/r_pdl_lvd.h | 42 + bsp/rx/RPDL/r_pdl_lvd_RX62Nxx.h | 39 + bsp/rx/RPDL/r_pdl_mcu.h | 45 + bsp/rx/RPDL/r_pdl_mcu_rx62nxx.h | 46 + bsp/rx/RPDL/r_pdl_mtu2.h | 522 +++++++ bsp/rx/RPDL/r_pdl_mtu2_rx62nxx.h | 187 +++ bsp/rx/RPDL/r_pdl_pfc.h | 74 + bsp/rx/RPDL/r_pdl_pfc_rx62nxx.h | 72 + bsp/rx/RPDL/r_pdl_poe.h | 178 +++ bsp/rx/RPDL/r_pdl_poe_rx62nxx.h | 80 ++ bsp/rx/RPDL/r_pdl_ppg.h | 105 ++ bsp/rx/RPDL/r_pdl_ppg_rx62nxx.h | 76 + bsp/rx/RPDL/r_pdl_rtc.h | 136 ++ bsp/rx/RPDL/r_pdl_rtc_RX62Nxx.h | 76 + bsp/rx/RPDL/r_pdl_sci.h | 203 +++ bsp/rx/RPDL/r_pdl_sci_rx62nxx.h | 178 +++ bsp/rx/RPDL/r_pdl_spi.h | 222 +++ bsp/rx/RPDL/r_pdl_spi_rx62nxx.h | 131 ++ bsp/rx/RPDL/r_pdl_tmr.h | 211 +++ bsp/rx/RPDL/r_pdl_tmr_rx62nxx.h | 238 ++++ bsp/rx/RPDL/r_pdl_user_definitions.h | 14 + bsp/rx/RPDL/r_pdl_wdt.h | 60 + bsp/rx/RPDL/r_pdl_wdt_rx62nxx.h | 63 + bsp/rx/ReadMe.txt | 5 + bsp/rx/applications/SConscript | 11 + bsp/rx/applications/application.c | 250 ++++ bsp/rx/applications/startup.c | 104 ++ bsp/rx/drivers/Uart.h | 6 + bsp/rx/drivers/board.c | 96 ++ bsp/rx/drivers/board.h | 16 + bsp/rx/drivers/uart.c | 545 ++++++++ bsp/rx/lnkr5f562n8.icf | 51 + bsp/rx/project.vpj | 328 +++++ bsp/rx/project.vpw | 6 + bsp/rx/project.vpwhist | 150 ++ bsp/rx/project.vtg | Bin 0 -> 2146304 bytes bsp/rx/rt.ewd | 332 +++++ bsp/rx/rt.ewp | 1164 ++++++++++++++++ bsp/rx/rtconfig.h | 187 +++ bsp/rx/rx62n.eww | 10 + components/external/freetype/docs/VERSION.DLL | 138 -- components/finsh/shell.c | 4 +- libcpu/rx/context_iar.S | 132 ++ libcpu/rx/cpuconfig.h | 7 + libcpu/rx/cpuport.c | 216 +++ 99 files changed, 17645 insertions(+), 140 deletions(-) create mode 100644 bsp/rx/RPDL/Interrupt_INTC.c create mode 100644 bsp/rx/RPDL/Interrupt_RTC.c create mode 100644 bsp/rx/RPDL/Interrupt_SPI.c create mode 100644 bsp/rx/RPDL/Interrupt_TMR.c create mode 100644 bsp/rx/RPDL/interrupt_adc_10.c create mode 100644 bsp/rx/RPDL/interrupt_adc_12.c create mode 100644 bsp/rx/RPDL/interrupt_bsc.c create mode 100644 bsp/rx/RPDL/interrupt_cmt.c create mode 100644 bsp/rx/RPDL/interrupt_dmac.c create mode 100644 bsp/rx/RPDL/interrupt_exdmac.c create mode 100644 bsp/rx/RPDL/interrupt_iic.c create mode 100644 bsp/rx/RPDL/interrupt_mtu2.c create mode 100644 bsp/rx/RPDL/interrupt_not_rpdl.c create mode 100644 bsp/rx/RPDL/interrupt_poe.c create mode 100644 bsp/rx/RPDL/interrupt_sci.c create mode 100644 bsp/rx/RPDL/interrupt_wdt.c create mode 100644 bsp/rx/RPDL/macro.h create mode 100644 bsp/rx/RPDL/r_pdl_adc_10.h create mode 100644 bsp/rx/RPDL/r_pdl_adc_10_RX62Nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_adc_12.h create mode 100644 bsp/rx/RPDL/r_pdl_adc_12_RX62Nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_bsc.h create mode 100644 bsp/rx/RPDL/r_pdl_bsc_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_cgc.h create mode 100644 bsp/rx/RPDL/r_pdl_cgc_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_cmt.h create mode 100644 bsp/rx/RPDL/r_pdl_cmt_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_common_defs_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_crc.h create mode 100644 bsp/rx/RPDL/r_pdl_crc_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_dac_10.h create mode 100644 bsp/rx/RPDL/r_pdl_dac_10_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_definitions.h create mode 100644 bsp/rx/RPDL/r_pdl_dmac.h create mode 100644 bsp/rx/RPDL/r_pdl_dmac_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_dtc.h create mode 100644 bsp/rx/RPDL/r_pdl_dtc_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_exdmac.h create mode 100644 bsp/rx/RPDL/r_pdl_exdmac_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_iic.h create mode 100644 bsp/rx/RPDL/r_pdl_iic_rx62nxfp.h create mode 100644 bsp/rx/RPDL/r_pdl_iic_rx62nxnfp.h create mode 100644 bsp/rx/RPDL/r_pdl_intc.h create mode 100644 bsp/rx/RPDL/r_pdl_intc_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_io_port.h create mode 100644 bsp/rx/RPDL/r_pdl_io_port_rx62nxbg.h create mode 100644 bsp/rx/RPDL/r_pdl_io_port_rx62nxfb.h create mode 100644 bsp/rx/RPDL/r_pdl_io_port_rx62nxfp.h create mode 100644 bsp/rx/RPDL/r_pdl_io_port_rx62nxld.h create mode 100644 bsp/rx/RPDL/r_pdl_io_port_rx62nxle.h create mode 100644 bsp/rx/RPDL/r_pdl_iwdt.h create mode 100644 bsp/rx/RPDL/r_pdl_iwdt_RX62Nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_lpc.h create mode 100644 bsp/rx/RPDL/r_pdl_lpc_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_lvd.h create mode 100644 bsp/rx/RPDL/r_pdl_lvd_RX62Nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_mcu.h create mode 100644 bsp/rx/RPDL/r_pdl_mcu_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_mtu2.h create mode 100644 bsp/rx/RPDL/r_pdl_mtu2_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_pfc.h create mode 100644 bsp/rx/RPDL/r_pdl_pfc_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_poe.h create mode 100644 bsp/rx/RPDL/r_pdl_poe_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_ppg.h create mode 100644 bsp/rx/RPDL/r_pdl_ppg_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_rtc.h create mode 100644 bsp/rx/RPDL/r_pdl_rtc_RX62Nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_sci.h create mode 100644 bsp/rx/RPDL/r_pdl_sci_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_spi.h create mode 100644 bsp/rx/RPDL/r_pdl_spi_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_tmr.h create mode 100644 bsp/rx/RPDL/r_pdl_tmr_rx62nxx.h create mode 100644 bsp/rx/RPDL/r_pdl_user_definitions.h create mode 100644 bsp/rx/RPDL/r_pdl_wdt.h create mode 100644 bsp/rx/RPDL/r_pdl_wdt_rx62nxx.h create mode 100644 bsp/rx/ReadMe.txt create mode 100644 bsp/rx/applications/SConscript create mode 100644 bsp/rx/applications/application.c create mode 100644 bsp/rx/applications/startup.c create mode 100644 bsp/rx/drivers/Uart.h create mode 100644 bsp/rx/drivers/board.c create mode 100644 bsp/rx/drivers/board.h create mode 100644 bsp/rx/drivers/uart.c create mode 100644 bsp/rx/lnkr5f562n8.icf create mode 100644 bsp/rx/project.vpj create mode 100644 bsp/rx/project.vpw create mode 100644 bsp/rx/project.vpwhist create mode 100644 bsp/rx/project.vtg create mode 100644 bsp/rx/rt.ewd create mode 100644 bsp/rx/rt.ewp create mode 100644 bsp/rx/rtconfig.h create mode 100644 bsp/rx/rx62n.eww delete mode 100644 components/external/freetype/docs/VERSION.DLL create mode 100644 libcpu/rx/context_iar.S create mode 100644 libcpu/rx/cpuconfig.h create mode 100644 libcpu/rx/cpuport.c diff --git a/bsp/rx/RPDL/Interrupt_INTC.c b/bsp/rx/RPDL/Interrupt_INTC.c new file mode 100644 index 0000000000..1460196348 --- /dev/null +++ b/bsp/rx/RPDL/Interrupt_INTC.c @@ -0,0 +1,475 @@ +/* Adapted for use with IAR Embedded Workbench */ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nxx +* File Name : Interrupt_INTC.c +* Version : 1.02 +* Contents : Interrupt handlers for the external interrupts +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_intc.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/* External functions */ +extern void PowerON_Reset_PC(void); +extern void rpdl_ADC_10_Start(void); + +/* CMT control register definition */ +#define CMSTR_ADDRESS(a) ( (volatile uint16_t *)&CMT.CMSTR0 + ( (0x10u * (a >> 1)) / sizeof(uint16_t)) ) + +/*""FUNC COMMENT""*************************************************** +* Module outline: External interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_XXXX(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for External interrupts +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------ +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_INTC_callback_func[n]() +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ0 +__fast_interrupt void Interrupt_IRQ0(void) +#else +#pragma vector = VECT_ICU_IRQ0 +__interrupt void Interrupt_IRQ0(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ0] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ0](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ1 +__fast_interrupt void Interrupt_IRQ1(void) +#else +#pragma vector = VECT_ICU_IRQ1 +__interrupt void Interrupt_IRQ1(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ1] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ1](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ2 +__fast_interrupt void Interrupt_IRQ2(void) +#else +#pragma vector = VECT_ICU_IRQ2 +__interrupt void Interrupt_IRQ2(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ2] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ2](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ3 +__fast_interrupt void Interrupt_IRQ3(void) +#else +#pragma vector = VECT_ICU_IRQ3 +__interrupt void Interrupt_IRQ3(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ3] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ3](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ4 +__fast_interrupt void Interrupt_IRQ4(void) +#else +#pragma vector = VECT_ICU_IRQ4 +__interrupt void Interrupt_IRQ4(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ4] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ4](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ5 +__fast_interrupt void Interrupt_IRQ5(void) +#else +#pragma vector = VECT_ICU_IRQ5 +__interrupt void Interrupt_IRQ5(void) +#endif +{ +#ifdef DEVICE_PACKAGE_TFLGA_85 + /* This pin is not available on the 85-pin package */ + nop(); +#else + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ5] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ5](); + } +#endif +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ6 +__fast_interrupt void Interrupt_IRQ6(void) +#else +#pragma vector = VECT_ICU_IRQ6 +__interrupt void Interrupt_IRQ6(void) +#endif +{ +#ifdef DEVICE_PACKAGE_TFLGA_85 + /* This pin is not available on the 85-pin package */ + nop(); +#else + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ6] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ6](); + } +#endif +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ7 +__fast_interrupt void Interrupt_IRQ7(void) +#else +#pragma vector = VECT_ICU_IRQ7 +__interrupt void Interrupt_IRQ7(void) +#endif +{ +#ifdef DEVICE_PACKAGE_TFLGA_85 + /* This pin is not available on the 85-pin package */ + nop(); +#else + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ7] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ7](); + } +#endif +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ8 +__fast_interrupt void Interrupt_IRQ8(void) +#else +#pragma vector = VECT_ICU_IRQ8 +__interrupt void Interrupt_IRQ8(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ8] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ8](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ9 +__fast_interrupt void Interrupt_IRQ9(void) +#else +#pragma vector = VECT_ICU_IRQ9 +__interrupt void Interrupt_IRQ9(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ9] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ9](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ10 +__fast_interrupt void Interrupt_IRQ10(void) +#else +#pragma vector = VECT_ICU_IRQ10 +__interrupt void Interrupt_IRQ10(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ10] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ10](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ11 +__fast_interrupt void Interrupt_IRQ11(void) +#else +#pragma vector = VECT_ICU_IRQ11 +__interrupt void Interrupt_IRQ11(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ11] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ11](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ12 +__fast_interrupt void Interrupt_IRQ12(void) +#else +#pragma vector = VECT_ICU_IRQ12 +__interrupt void Interrupt_IRQ12(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ12] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ12](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ13 +__fast_interrupt void Interrupt_IRQ13(void) +#else +#pragma vector = VECT_ICU_IRQ13 +__interrupt void Interrupt_IRQ13(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ13] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ13](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ14 +__fast_interrupt void Interrupt_IRQ14(void) +#else +#pragma vector = VECT_ICU_IRQ14 +__interrupt void Interrupt_IRQ14(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ14] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ14](); + } +} + +#if FAST_INTC_VECTOR == VECT_ICU_IRQ15 +__fast_interrupt void Interrupt_IRQ15(void) +#else +#pragma vector = VECT_ICU_IRQ15 +__interrupt void Interrupt_IRQ15(void) +#endif +{ + /* Call the user function */ + if (rpdl_INTC_callback_func[PDL_INTC_IRQ15] != PDL_NO_FUNC) + { + rpdl_INTC_callback_func[PDL_INTC_IRQ15](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Software interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_SWINT(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for the software interrupt +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------ +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_INTC_callback_func[PDL_INTC_SWINT]() +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +/*""FUNC COMMENT""*************************************************** +* Module outline: Break interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_BRK(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for the break interrupt +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------ +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ +#if 0 +#pragma vector = 0 +__interrupt void Interrupt_BRK(void) +{ + uint32_t * vector_location; + volatile uint32_t * stacked_psw_ptr; + uint32_t psw_copy; + switch (rpdl_INTC_brk_command) + { + case BRK_START_ADC_10: + rpdl_ADC_10_Start(); + break; + case BRK_START_ADC_10_AND_SLEEP: + rpdl_ADC_10_Start(); + /* Prevent all-module clock stop */ + SYSTEM.MSTPCRA.BIT.ACSE = 0; + /* Select sleep or all-module clock stop */ + SYSTEM.SBYCR.BIT.SSBY = 0; + /* Prevent out-of-order execution */ + while (SYSTEM.SBYCR.BIT.SSBY != 0); + wait(); + break; + case BRK_SLEEP: + /* Prevent all-module clock stop */ + SYSTEM.MSTPCRA.BIT.ACSE = 0; + /* Select sleep or all-module clock stop */ + SYSTEM.SBYCR.BIT.SSBY = 0; + /* Prevent out-of-order execution */ + while (SYSTEM.SBYCR.BIT.SSBY != 0); + wait(); + break; + case BRK_ALL_MODULE_CLOCK_STOP: + /* Select sleep or all-module clock stop */ + SYSTEM.SBYCR.BIT.SSBY = 0; + /* Prevent out-of-order execution */ + while (SYSTEM.SBYCR.BIT.SSBY != 0); + wait(); + break; + case BRK_STANDBY: + /* Prevent deep standby mode */ + SYSTEM.DPSBYCR.BIT.DPSBY = 0; + /* Select standby mode */ + SYSTEM.SBYCR.BIT.SSBY = 1; + /* Prevent out-of-order execution */ + while (SYSTEM.SBYCR.BIT.SSBY != 1); + wait(); + break; + case BRK_DEEP_STANDBY: + /* Stop the RAM clock */ + SYSTEM.MSTPCRC.BIT.MSTPC0 = 1; + SYSTEM.MSTPCRC.BIT.MSTPC1 = 1; + /* Select deep standby mode */ + SYSTEM.DPSBYCR.BIT.DPSBY = 1; + /* Select standby mode */ + SYSTEM.SBYCR.BIT.SSBY = 1; + /* Prevent out-of-order execution */ + while (SYSTEM.SBYCR.BIT.SSBY != 1); + wait(); + break; + case BRK_LOAD_FINTV_REGISTER: + /* Find the start of the maskable interrupt vector table */ + vector_location = (uint32_t *)get_intb(); + /* Move to the location of the address of the selected interrupt */ + vector_location += ICU.FIR.BIT.FVCT; + /* Store the address of this vector in the FINTV register */ + set_fintv((__fast_int_f)*vector_location); + break; + case BRK_WRITE_IPL: + /* Find the stacked PSW */ + stacked_psw_ptr = (uint32_t *)(rpdl_INTC_saved_isp) - 1; + /* Read the stacked PSW */ + psw_copy = *stacked_psw_ptr; + /* Clear the IPL bits */ + psw_copy &= (uint32_t)(INV_BIT_27 & INV_BIT_26 & INV_BIT_25 & INV_BIT_24); + /* Modify the IPL bits */ + psw_copy |= (uint32_t)(rpdl_INTC_brk_data8 << 24); + /* Modify the saved IPL */ + *stacked_psw_ptr = psw_copy; + break; + case BRK_CMT_START: + /* Set STRn to 1 */ + *(CMSTR_ADDRESS(rpdl_INTC_brk_data8)) |= (uint16_t)((rpdl_INTC_brk_data8 & 0x01u) + 1); + break; + case BRK_CMT_STOP: + /* Set STRn to 0 */ + *(CMSTR_ADDRESS(rpdl_INTC_brk_data8)) &= (uint16_t)(0x2u >> (rpdl_INTC_brk_data8 & 0x01u)); + break; + default: + /* This must never occur */ + break; + } + rpdl_INTC_brk_command = BRK_NO_COMMAND; +} + #endif +/* Exception (Privileged Instruction) */ +__interrupt void __privileged_handler(void) +{ + if (rpdl_INTC_callback_func[PDL_INTC_PRIVILEGED] != PDL_NO_FUNC) + { + /* Call the user function */ + rpdl_INTC_callback_func[PDL_INTC_PRIVILEGED](); + } +} + +/* Exception (Undefined Instruction) */ +__interrupt void __undefined_handler(void) +{ + if (rpdl_INTC_callback_func[PDL_INTC_UNDEFINED] != PDL_NO_FUNC) + { + /* Call the user function */ + rpdl_INTC_callback_func[PDL_INTC_UNDEFINED](); + } +} + +/* Exception(Floating Point) */ +__interrupt void __floating_point_handler(void) +{ + if (rpdl_INTC_callback_func[PDL_INTC_FLOATING_POINT] != PDL_NO_FUNC) + { + /* Call the user function */ + rpdl_INTC_callback_func[PDL_INTC_FLOATING_POINT](); + } +} + +__interrupt void __NMI_handler(void) +{ + if (rpdl_INTC_callback_func[PDL_INTC_NMI] != PDL_NO_FUNC) + { + /* Call the user function */ + rpdl_INTC_callback_func[PDL_INTC_NMI](); + } +} + +/* End of file */ diff --git a/bsp/rx/RPDL/Interrupt_RTC.c b/bsp/rx/RPDL/Interrupt_RTC.c new file mode 100644 index 0000000000..c195cd7992 --- /dev/null +++ b/bsp/rx/RPDL/Interrupt_RTC.c @@ -0,0 +1,132 @@ +/*""FILE COMMENT""******************************************************* +* System Name : RTC Interrupt program for RX62Nxx +* File Name : Interrupt_RTC.c +* Version : 1.02 +* Contents : Interrupt handler for RTC +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_rtc.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline: RTC periodic interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_RTC_PRD(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for RTC +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_RTC_Periodic_callback_func() +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ +#if FAST_INTC_VECTOR == VECT_RTC_PRD +__fast_interrupt void Interrupt_RTC_PRD(void) +#else +#pragma vector = VECT_RTC_PRD +__interrupt void Interrupt_RTC_PRD(void) +#endif +{ + /* Call the user function */ + if (rpdl_RTC_Periodic_callback_func != PDL_NO_FUNC) + { + rpdl_RTC_Periodic_callback_func(); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: RTC alarm interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_RTC_ALM(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for RTC +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_RTC_Alarm_callback_func() +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ +#if FAST_INTC_VECTOR == VECT_RTC_ALM +__fast_interrupt void Interrupt_RTC_ALM(void) +#else +#pragma vector = VECT_RTC_ALM +__interrupt void Interrupt_RTC_ALM(void) +#endif +{ + /* Call the user function */ + if (rpdl_RTC_Alarm_callback_func != PDL_NO_FUNC) + { + rpdl_RTC_Alarm_callback_func(); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: RTC Carry interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_RTC_CUP(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for RTC +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : +*------------------------------------------------------------------- +* Notes : This interrupt is not used. +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ +#if FAST_INTC_VECTOR == VECT_RTC_CUP +__fast_interrupt void Interrupt_RTC_CUP(void) +#else +#pragma vector = VECT_RTC_CUP +__interrupt void Interrupt_RTC_CUP(void) +#endif +{ + /* Disable further requests */ + ICU.IER[IER_RTC_CUP].BIT.IEN_RTC_CUP = 0; +} + +/* End of file */ diff --git a/bsp/rx/RPDL/Interrupt_SPI.c b/bsp/rx/RPDL/Interrupt_SPI.c new file mode 100644 index 0000000000..61df961f4e --- /dev/null +++ b/bsp/rx/RPDL/Interrupt_SPI.c @@ -0,0 +1,568 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nxx +* File Name : Interrupt_SPI.c +* Version : 1.02 +* Contents : Interrupt handlers for all SPI channels +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_spi.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline: SPIn receive data error interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_RSPIn_SPEIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Output : None +*------------------------------------------------------------------- +* Use function : rpdl_SPI_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_RSPI0_SPEI0 +__fast_interrupt void Interrupt_RSPI0_SPEI0(void) +#else +#pragma vector = VECT_RSPI0_SPEI0 +__interrupt void Interrupt_RSPI0_SPEI0(void) +#endif +{ + /* Will the user handle the errors? */ + if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC) + { + /* Notify the user */ + rpdl_SPI_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_RSPI1_SPEI1 +__fast_interrupt void Interrupt_RSPI1_SPEI1(void) +#else +#pragma vector = VECT_RSPI1_SPEI1 +__interrupt void Interrupt_RSPI1_SPEI1(void) +#endif +{ + /* Will the user handle the errors? */ + if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC) + { + /* Notify the user */ + rpdl_SPI_callback_func[1](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: SPIn receive data interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_RSPIn_SPRIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : (I/ ) : SPDCR, SBDR +* Output : (I/O) : SPCR, SPCR2 +*------------------------------------------------------------------- +* Use function : None +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_RSPI0_SPRI0 +__fast_interrupt void Interrupt_RSPI0_SPRI0(void) +#else +#pragma vector = VECT_RSPI0_SPRI0 +__interrupt void Interrupt_RSPI0_SPRI0(void) +#endif +{ + uint8_t frame_count; + uint32_t received_frame; + uint8_t spdcr_copy; + uint8_t splw; + uint8_t spfc; + volatile uint32_t * rx_data_ptr; + + /* Ok to process the data? */ + if (rpdl_SPI_method[0] == SPI_USING_IRQ) + { + spdcr_copy = RSPI0.SPDCR.BYTE; + splw = (uint8_t)(spdcr_copy & BIT_5); + spfc = (uint8_t)(spdcr_copy & 0x03u); + rx_data_ptr = rpdl_SPI_rx_ptr[0]; + + /* Load the data register */ + for (frame_count = 0; frame_count <= spfc; frame_count++) + { + if (splw == 0) + { + /* Read the data */ + received_frame = (uint32_t)RSPI0.SPDR.WORD.H; + } + else + { + /* Read the data */ + received_frame = RSPI0.SPDR.LONG; + } + + /* Store the data? */ + if (rx_data_ptr != PDL_NO_PTR) + { + *rx_data_ptr = received_frame; + + /* Increment the address pointer */ + rx_data_ptr ++; + } + + /* Increment the frame counter */ + rpdl_SPI_rx_frame_counter[0] ++; + } + + /* Store the updated pointer */ + rpdl_SPI_rx_ptr[0] = rx_data_ptr; + + /* All data read? */ + if (rpdl_SPI_rx_frame_counter[0] == rpdl_SPI_frame_total[0]) + { + /* Increment the loop counter */ + rpdl_SPI_rx_sequence_counter[0]++; + + /* All loops completed? */ + if (rpdl_SPI_rx_sequence_counter[0] == rpdl_SPI_sequence_count[0]) + { + /* Disable receive interrupts */ + RSPI0.SPCR.BIT.SPRIE = 0; + + /* Master mode? */ + if (RSPI0.SPCR.BIT.MSTR == 1) + { + /* Enable idle interrupts */ + RSPI0.SPCR2.BIT.SPIIE = 1; + } + else + { + /* Notify the user */ + if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SPI_callback_func[0](); + } + } + } + else + { + /* Reset the frame counter */ + rpdl_SPI_rx_frame_counter[0] = 0; + } + } + } + else + { + /* Notify the user */ + if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SPI_callback_func[0](); + } + } +} + +#if FAST_INTC_VECTOR == VECT_RSPI1_SPRI1 +__fast_interrupt void Interrupt_RSPI1_SPRI1(void) +#else +#pragma vector = VECT_RSPI1_SPRI1 +__interrupt void Interrupt_RSPI1_SPRI1(void) +#endif +{ + uint8_t frame_count; + uint32_t received_frame; + uint8_t spdcr_copy; + uint8_t splw; + uint8_t spfc; + volatile uint32_t * rx_data_ptr; + + /* Ok to process the data? */ + if (rpdl_SPI_method[1] == SPI_USING_IRQ) + { + spdcr_copy = RSPI1.SPDCR.BYTE; + splw = (uint8_t)(spdcr_copy & BIT_5); + spfc = (uint8_t)(spdcr_copy & 0x03u); + rx_data_ptr = rpdl_SPI_rx_ptr[1]; + + /* Load the data register */ + for (frame_count = 0; frame_count <= spfc; frame_count++) + { + if (splw == 0) + { + /* Read the data */ + received_frame = (uint32_t)RSPI1.SPDR.WORD.H; + } + else + { + /* Read the data */ + received_frame = RSPI1.SPDR.LONG; + } + + /* Store the data? */ + if (rx_data_ptr != PDL_NO_PTR) + { + *rx_data_ptr = received_frame; + + /* Increment the address pointer */ + rx_data_ptr ++; + } + + /* Increment the frame counter */ + rpdl_SPI_rx_frame_counter[1] ++; + } + + /* Store the updated pointer */ + rpdl_SPI_rx_ptr[1] = rx_data_ptr; + + /* All data read? */ + if (rpdl_SPI_rx_frame_counter[1] == rpdl_SPI_frame_total[1]) + { + /* Increment the loop counter */ + rpdl_SPI_rx_sequence_counter[1]++; + + /* All loops completed? */ + if (rpdl_SPI_rx_sequence_counter[1] == rpdl_SPI_sequence_count[1]) + { + /* Disable receive interrupts */ + RSPI1.SPCR.BIT.SPRIE = 0; + + /* Master mode? */ + if (RSPI1.SPCR.BIT.MSTR == 1) + { + /* Enable idle interrupts */ + RSPI1.SPCR2.BIT.SPIIE = 1; + } + else + { + /* Notify the user */ + if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SPI_callback_func[1](); + } + } + } + else + { + /* Reset the frame counter */ + rpdl_SPI_rx_frame_counter[1] = 0; + } + } + } + else + { + /* Notify the user */ + if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SPI_callback_func[1](); + } + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: SPIn transmit data interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_RSPIn_SPTIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : (I/ ) : SPDCR +* Output : ( /O) : SBDR +* : (I/O) : SPCR, SPCR2 +*------------------------------------------------------------------- +* Use function : +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_RSPI0_SPTI0 +__fast_interrupt void Interrupt_RSPI0_SPTI0(void) +#else +#pragma vector = VECT_RSPI0_SPTI0 +__interrupt void Interrupt_RSPI0_SPTI0(void) +#endif +{ + uint8_t frame_count; + uint8_t spdcr_copy; + uint8_t splw; + uint8_t spfc; + volatile const uint32_t * tx_data_ptr; + + /* Ok to process the string? */ + if (rpdl_SPI_method[0] == SPI_USING_IRQ) + { + spdcr_copy = RSPI0.SPDCR.BYTE; + splw = (uint8_t)(spdcr_copy & BIT_5); + spfc = (uint8_t)(spdcr_copy & 0x03u); + tx_data_ptr = rpdl_SPI_tx_ptr[0]; + + /* Load the data register */ + for (frame_count = 0; frame_count <= spfc; frame_count++) + { + if (splw == 0) + { + RSPI0.SPDR.WORD.H = (uint16_t)*tx_data_ptr; + } + else + { + RSPI0.SPDR.LONG = *tx_data_ptr; + } + + /* Increment the address pointer? */ + if (tx_data_ptr != PDL_NO_PTR) + { + tx_data_ptr ++; + } + + /* Increment the frame counter */ + rpdl_SPI_tx_frame_counter[0] ++; + } + + /* Store the updated pointer */ + rpdl_SPI_tx_ptr[0] = tx_data_ptr; + + /* All data written? */ + if (rpdl_SPI_tx_frame_counter[0] == rpdl_SPI_frame_total[0]) + { + /* Increment the loop counter */ + rpdl_SPI_tx_sequence_counter[0]++; + + /* All loops completed? */ + if (rpdl_SPI_tx_sequence_counter[0] == rpdl_SPI_sequence_count[0]) + { + /* Disable transmit interrupts */ + RSPI0.SPCR.BIT.SPTIE = 0; + + /* Transmit only? */ + if (RSPI0.SPCR.BIT.TXMD == 1) + { + /* Master mode? */ + if (RSPI0.SPCR.BIT.MSTR == 1) + { + /* Enable idle interrupts */ + RSPI0.SPCR2.BIT.SPIIE = 1; + } + else + { + /* Notify the user */ + if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SPI_callback_func[0](); + } + } + } + } + else + { + /* Reset the frame counter */ + rpdl_SPI_tx_frame_counter[0] = 0; + } + } + } + else + { + /* Notify the user */ + if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SPI_callback_func[0](); + } + } +} + +#if FAST_INTC_VECTOR == VECT_RSPI1_SPTI1 +__fast_interrupt void Interrupt_RSPI1_SPTI1(void) +#else +#pragma vector = VECT_RSPI1_SPTI1 +__interrupt void Interrupt_RSPI1_SPTI1(void) +#endif +{ + uint8_t frame_count; + uint8_t spdcr_copy; + uint8_t splw; + uint8_t spfc; + volatile const uint32_t * tx_data_ptr; + + /* Ok to process the string? */ + if (rpdl_SPI_method[1] == SPI_USING_IRQ) + { + spdcr_copy = RSPI1.SPDCR.BYTE; + splw = (uint8_t)(spdcr_copy & BIT_5); + spfc = (uint8_t)(spdcr_copy & 0x03u); + tx_data_ptr = rpdl_SPI_tx_ptr[1]; + + /* Load the data register */ + for (frame_count = 0; frame_count <= spfc; frame_count++) + { + if (splw == 0) + { + RSPI1.SPDR.WORD.H = (uint16_t)*tx_data_ptr; + } + else + { + RSPI1.SPDR.LONG = *tx_data_ptr; + } + + /* Increment the address pointer? */ + if (tx_data_ptr != PDL_NO_PTR) + { + tx_data_ptr ++; + } + + /* Increment the frame counter */ + rpdl_SPI_tx_frame_counter[1] ++; + } + + /* Store the updated pointer */ + rpdl_SPI_tx_ptr[1] = tx_data_ptr; + + /* All data written? */ + if (rpdl_SPI_tx_frame_counter[1] == rpdl_SPI_frame_total[1]) + { + /* Increment the loop counter */ + rpdl_SPI_tx_sequence_counter[1]++; + + /* All loops completed? */ + if (rpdl_SPI_tx_sequence_counter[1] == rpdl_SPI_sequence_count[1]) + { + /* Disable transmit interrupts */ + RSPI1.SPCR.BIT.SPTIE = 0; + + /* Transmit only? */ + if (RSPI1.SPCR.BIT.TXMD == 1) + { + /* Master mode? */ + if (RSPI1.SPCR.BIT.MSTR == 1) + { + /* Enable idle interrupts */ + RSPI1.SPCR2.BIT.SPIIE = 1; + } + else + { + /* Notify the user */ + if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SPI_callback_func[1](); + } + } + } + } + else + { + /* Reset the frame counter */ + rpdl_SPI_tx_frame_counter[1] = 0; + } + } + } + else + { + /* Notify the user */ + if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SPI_callback_func[1](); + } + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: SPIn idle interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_RSPIn_SPIIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Output : SPCR, SPCR2 +*------------------------------------------------------------------- +* Use function : rpdl_SPI_callback_func() +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_RSPI0_SPII0 +__fast_interrupt void Interrupt_RSPI0_SPII0(void) +#else +#pragma vector = VECT_RSPI0_SPII0 +__interrupt void Interrupt_RSPI0_SPII0(void) +#endif +{ + /* Disable the channel */ + RSPI0.SPCR.BIT.SPE = 0; + + /* Disable idle interrupts */ + RSPI0.SPCR2.BIT.SPIIE = 0; + + /* Call the callback function */ + if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SPI_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_RSPI1_SPII1 +__fast_interrupt void Interrupt_RSPI1_SPII1(void) +#else +#pragma vector = VECT_RSPI1_SPII1 +__interrupt void Interrupt_RSPI1_SPII1(void) +#endif +{ + /* Disable the channel */ + RSPI1.SPCR.BIT.SPE = 0; + + /* Disable idle interrupts */ + RSPI1.SPCR2.BIT.SPIIE = 0; + + /* Call the callback function */ + if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SPI_callback_func[1](); + } +} + +/* End of file */ diff --git a/bsp/rx/RPDL/Interrupt_TMR.c b/bsp/rx/RPDL/Interrupt_TMR.c new file mode 100644 index 0000000000..e8a8652b33 --- /dev/null +++ b/bsp/rx/RPDL/Interrupt_TMR.c @@ -0,0 +1,286 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nxx +* File Name : Interrupt_TMR.c +* Version : 1.02 +* Contents : Interrupt handlers for the Timer units +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_tmr.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline : Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_TMRn_XXX(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for Timer TMR channel n +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : R_TmrOverflowFunc[n](), R_TmrCMAFunc[n]() or +* : R_TmrCMBFunc[n]() as appropriate. +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_TMR0_CMIA0 +__fast_interrupt void Interrupt_TMR0_CMA(void) +#else +#pragma vector = VECT_TMR0_CMIA0 +__interrupt void Interrupt_TMR0_CMA(void) +#endif +{ + /* Call the user function? */ + if (rpdl_TMR_CMA_callback_func[0] != PDL_NO_FUNC) + { + /* Call the user function */ + rpdl_TMR_CMA_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR0_CMIB0 +__fast_interrupt void Interrupt_TMR0_CMB(void) +#else +#pragma vector = VECT_TMR0_CMIB0 +__interrupt void Interrupt_TMR0_CMB(void) +#endif +{ + if (rpdl_TMR_one_shot[0] != false) + { + /* Channel mode? */ + if (rpdl_TMR_one_shot[0] == CHANNEL_MODE) + { + /* Stop the channel 0 clock input */ + TMR0.TCCR.BYTE = 0x00u; + } + /* Unit mode? */ + else + { + /* Stop the channel 1 clock input */ + TMR1.TCCR.BYTE = 0x00u; + } + + rpdl_TMR_one_shot[0] = false; + + /* Clear the interrupt request flag (the timer may have set it again) */ + ICU.IR[VECT_TMR0_CMIB0].BIT.IR = 0; + } + + /* Call the user function? */ + if (rpdl_TMR_CMB_callback_func[0] != PDL_NO_FUNC) + { + rpdl_TMR_CMB_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR0_OVI0 +__fast_interrupt void Interrupt_TMR0_OV(void) +#else +#pragma vector = VECT_TMR0_OVI0 +__interrupt void Interrupt_TMR0_OV(void) +#endif +{ + /* Call the user function */ + if (rpdl_TMR_Overflow_callback_func[0] != PDL_NO_FUNC) + { + rpdl_TMR_Overflow_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR1_CMIA1 +__fast_interrupt void Interrupt_TMR1_CMA(void) +#else +#pragma vector = VECT_TMR1_CMIA1 +__interrupt void Interrupt_TMR1_CMA(void) +#endif +{ + /* Call the user function? */ + if (rpdl_TMR_CMA_callback_func[1] != PDL_NO_FUNC) + { + /* Call the user function */ + rpdl_TMR_CMA_callback_func[1](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR1_CMIB1 +__fast_interrupt void Interrupt_TMR1_CMB(void) +#else +#pragma vector = VECT_TMR1_CMIB1 +__interrupt void Interrupt_TMR1_CMB(void) +#endif +{ + if (rpdl_TMR_one_shot[1] != false) + { + /* Stop the channel 1 clock input */ + TMR1.TCCR.BYTE = 0x00u; + + rpdl_TMR_one_shot[1] = false; + + /* Clear the interrupt request flag (the timer may have set it again) */ + ICU.IR[VECT_TMR1_CMIB1].BIT.IR = 0u; + } + + /* Call the user function? */ + if (rpdl_TMR_CMB_callback_func[1] != PDL_NO_FUNC) + { + rpdl_TMR_CMB_callback_func[1](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR1_OVI1 +__fast_interrupt void Interrupt_TMR1_OV(void) +#else +#pragma vector = VECT_TMR1_OVI1 +__interrupt void Interrupt_TMR1_OV(void) +#endif +{ + /* Call the user function */ + if (rpdl_TMR_Overflow_callback_func[1] != PDL_NO_FUNC) + { + rpdl_TMR_Overflow_callback_func[1](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR2_CMIA2 +__fast_interrupt void Interrupt_TMR2_CMA(void) +#else +#pragma vector = VECT_TMR2_CMIA2 +__interrupt void Interrupt_TMR2_CMA(void) +#endif +{ + /* Call the user function? */ + if (rpdl_TMR_CMA_callback_func[2] != PDL_NO_FUNC) + { + /* Call the user function */ + rpdl_TMR_CMA_callback_func[2](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR2_CMIB2 +__fast_interrupt void Interrupt_TMR2_CMB(void) +#else +#pragma vector = VECT_TMR2_CMIB2 +__interrupt void Interrupt_TMR2_CMB(void) +#endif +{ + if (rpdl_TMR_one_shot[2] != false) + { + /* Channel mode? */ + if (rpdl_TMR_one_shot[2] == CHANNEL_MODE) + { + /* Stop the channel 2 clock input */ + TMR2.TCCR.BYTE = 0x00u; + } + /* Unit mode? */ + else + { + /* Stop the channel 3 clock input */ + TMR3.TCCR.BYTE = 0x00u; + } + + rpdl_TMR_one_shot[2] = false; + + /* Clear the interrupt request flag (the timer may have set it again) */ + ICU.IR[VECT_TMR2_CMIB2].BIT.IR = 0; + } + + /* Call the user function? */ + if (rpdl_TMR_CMB_callback_func[2] != PDL_NO_FUNC) + { + rpdl_TMR_CMB_callback_func[2](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR2_OVI2 +__fast_interrupt void Interrupt_TMR2_OV(void) +#else +#pragma vector = VECT_TMR2_OVI2 +__interrupt void Interrupt_TMR2_OV(void) +#endif +{ + /* Call the user function */ + if (rpdl_TMR_Overflow_callback_func[2] != PDL_NO_FUNC) + { + rpdl_TMR_Overflow_callback_func[2](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR3_CMIA3 +__fast_interrupt void Interrupt_TMR3_CMA(void) +#else +#pragma vector = VECT_TMR3_CMIA3 +__interrupt void Interrupt_TMR3_CMA(void) +#endif +{ + /* Call the user function? */ + if (rpdl_TMR_CMA_callback_func[3] != PDL_NO_FUNC) + { + /* Call the user function */ + rpdl_TMR_CMA_callback_func[3](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR3_CMIB3 +__fast_interrupt void Interrupt_TMR3_CMB(void) +#else +#pragma vector = VECT_TMR3_CMIB3 +__interrupt void Interrupt_TMR3_CMB(void) +#endif +{ + if (rpdl_TMR_one_shot[3] != false) + { + /* Stop the channel 3 clock input */ + TMR3.TCCR.BYTE = 0x00u; + + rpdl_TMR_one_shot[3] = false; + + /* Clear the interrupt request flag (the timer may have set it again) */ + ICU.IR[VECT_TMR3_CMIB3].BIT.IR = 0; + } + + /* Call the user function? */ + if (rpdl_TMR_CMB_callback_func[3] != PDL_NO_FUNC) + { + rpdl_TMR_CMB_callback_func[3](); + } +} + +#if FAST_INTC_VECTOR == VECT_TMR3_OVI3 +__fast_interrupt void Interrupt_TMR3_OV(void) +#else +#pragma vector = VECT_TMR3_OVI3 +__interrupt void Interrupt_TMR3_OV(void) +#endif +{ + /* Call the user function */ + if (rpdl_TMR_Overflow_callback_func[3] != PDL_NO_FUNC) + { + rpdl_TMR_Overflow_callback_func[3](); + } +} +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_adc_10.c b/bsp/rx/RPDL/interrupt_adc_10.c new file mode 100644 index 0000000000..2dd08444e2 --- /dev/null +++ b/bsp/rx/RPDL/interrupt_adc_10.c @@ -0,0 +1,78 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nxx +* File Name : Interrupt_ADC_10.c +* Version : 1.02 +* Contents : Interrupt handlers for the ADC units +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_adc_10.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline: ADC interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_ADCn(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for ADC unit n +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : ADC_callback_func[n]() +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_AD0_ADI0 +__fast_interrupt void Interrupt_ADC0(void) +#else +#pragma vector = VECT_AD0_ADI0 +__interrupt void Interrupt_ADC0(void) +#endif +{ + /* Call the user function */ + if (rpdl_ADC_10_callback_func[0] != PDL_NO_FUNC) + { + rpdl_ADC_10_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_AD1_ADI1 +__fast_interrupt void Interrupt_ADC1(void) +#else +#pragma vector = VECT_AD1_ADI1 +__interrupt void Interrupt_ADC1(void) +#endif +{ + /* Call the user function */ + if (rpdl_ADC_10_callback_func[1] != PDL_NO_FUNC) + { + rpdl_ADC_10_callback_func[1](); + } +} + +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_adc_12.c b/bsp/rx/RPDL/interrupt_adc_12.c new file mode 100644 index 0000000000..e60c440ea3 --- /dev/null +++ b/bsp/rx/RPDL/interrupt_adc_12.c @@ -0,0 +1,64 @@ +/*""FILE COMMENT""******************************************************* +* System Name : 12-bit ADC Interrupt program for RX62Nxx +* File Name : Interrupt_ADC_12.c +* Version : 1.02 +* Contents : Interrupt handler for ADC_12 +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_adc_12.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline: ADC interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_ADCn(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for ADC unit n +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_ADC_12_callback_func[n]() +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_S12AD_ADI +__fast_interrupt void Interrupt_ADC_12_0(void) +#else +#pragma vector = VECT_S12AD_ADI +__interrupt void Interrupt_ADC_12_0(void) +#endif +{ + /* Call the user function */ + if (rpdl_ADC_12_callback_func[0] != PDL_NO_FUNC) + { + rpdl_ADC_12_callback_func[0](); + } +} + +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_bsc.c b/bsp/rx/RPDL/interrupt_bsc.c new file mode 100644 index 0000000000..c12a05a214 --- /dev/null +++ b/bsp/rx/RPDL/interrupt_bsc.c @@ -0,0 +1,63 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nxx +* File Name : Interrupt_BSC.c +* Version : 1.02 +* Contents : Interrupt handler for the BSC +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_bsc.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline : BSC interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_BSC(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for the BSC +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_BSC_callback_func +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_BSC_BUSERR +__fast_interrupt void Interrupt_BSC(void) +#else +#pragma vector = VECT_BSC_BUSERR +__interrupt void Interrupt_BSC(void) +#endif +{ + /* Call the user function */ + if (rpdl_BSC_callback_func != PDL_NO_FUNC) + { + rpdl_BSC_callback_func(); + } +} +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_cmt.c b/bsp/rx/RPDL/interrupt_cmt.c new file mode 100644 index 0000000000..700ebf301a --- /dev/null +++ b/bsp/rx/RPDL/interrupt_cmt.c @@ -0,0 +1,141 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nxx +* File Name : Interrupt_CMT.c +* Version : 1.02 +* Contents : Interrupt handlers for the CMT channels +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_cmt.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline : Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_CMTn(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for CMT channel n +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : CMT_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ +#if 0 +#if FAST_INTC_VECTOR == VECT_CMT0_CMI0 +__fast_interrupt void Interrupt_CMT0(void) +#else +#pragma vector = VECT_CMT0_CMI0 +__interrupt void Interrupt_CMT0(void) +#endif +{ + if (rpdl_CMT_one_shot[0] != false) + { + /* Stop the channel 0 clock input */ + CMT.CMSTR0.BIT.STR0 = 0; + + /* Clear the interrupt request flag (the timer may have set it again) */ + ICU.IR[IR_CMT0_CMI0].BIT.IR = 0; + } + + /* Call the user function */ + if (rpdl_CMT_callback_func[0] != PDL_NO_FUNC) + { + rpdl_CMT_callback_func[0](); + } +} +#endif +#if FAST_INTC_VECTOR == VECT_CMT1_CMI1 +__fast_interrupt void Interrupt_CMT1(void) +#else +#pragma vector = VECT_CMT1_CMI1 +__interrupt void Interrupt_CMT1(void) +#endif +{ + if (rpdl_CMT_one_shot[1] != false) + { + /* Stop the channel 0 clock input */ + CMT.CMSTR0.BIT.STR1 = 0; + + /* Clear the interrupt request flag (the timer may have set it again) */ + ICU.IR[IR_CMT1_CMI1].BIT.IR = 0; + } + + /* Call the user function */ + if (rpdl_CMT_callback_func[1] != PDL_NO_FUNC) + { + rpdl_CMT_callback_func[1](); + } +} + +#if FAST_INTC_VECTOR == VECT_CMT2_CMI2 +__fast_interrupt void Interrupt_CMT2(void) +#else +#pragma vector = VECT_CMT2_CMI2 +__interrupt void Interrupt_CMT2(void) +#endif +{ + if (rpdl_CMT_one_shot[2] != false) + { + /* Stop the channel 0 clock input */ + CMT.CMSTR1.BIT.STR2 = 0; + + /* Clear the interrupt request flag (the timer may have set it again) */ + ICU.IR[IR_CMT2_CMI2].BIT.IR = 0; + } + + /* Call the user function */ + if (rpdl_CMT_callback_func[2] != PDL_NO_FUNC) + { + rpdl_CMT_callback_func[2](); + } +} + +#if FAST_INTC_VECTOR == VECT_CMT3_CMI3 +__fast_interrupt void Interrupt_CMT3(void) +#else +#pragma vector = VECT_CMT3_CMI3 +__interrupt void Interrupt_CMT3(void) +#endif +{ + if (rpdl_CMT_one_shot[3] != false) + { + /* Stop the channel 0 clock input */ + CMT.CMSTR1.BIT.STR3 = 0; + + /* Clear the interrupt request flag (the timer may have set it again) */ + ICU.IR[IR_CMT3_CMI3].BIT.IR = 0; + } + + /* Call the user function */ + if (rpdl_CMT_callback_func[3] != PDL_NO_FUNC) + { + rpdl_CMT_callback_func[3](); + } +} +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_dmac.c b/bsp/rx/RPDL/interrupt_dmac.c new file mode 100644 index 0000000000..cd830ecff0 --- /dev/null +++ b/bsp/rx/RPDL/interrupt_dmac.c @@ -0,0 +1,105 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62N +* File Name : Interrupt_DMAC.c +* Version : 1.02 +* Contents : Interrupt handlers for the DMAC channels +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_dmac.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline : DMAC interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_DMACn(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for DMAC channel n +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : DMAC_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_DMAC_DMAC0I +__fast_interrupt void Interrupt_DMAC0(void) +#else +#pragma vector = VECT_DMAC_DMAC0I +__interrupt void Interrupt_DMAC0(void) +#endif +{ + /* Call the user function */ + if (rpdl_DMAC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_DMAC_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_DMAC_DMAC1I +__fast_interrupt void Interrupt_DMAC1(void) +#else +#pragma vector = VECT_DMAC_DMAC1I +__interrupt void Interrupt_DMAC1(void) +#endif +{ + /* Call the user function */ + if (rpdl_DMAC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_DMAC_callback_func[1](); + } +} + +#if FAST_INTC_VECTOR == VECT_DMAC_DMAC2I +__fast_interrupt void Interrupt_DMAC2(void) +#else +#pragma vector = VECT_DMAC_DMAC2I +__interrupt void Interrupt_DMAC2(void) +#endif +{ + /* Call the user function */ + if (rpdl_DMAC_callback_func[2] != PDL_NO_FUNC) + { + rpdl_DMAC_callback_func[2](); + } +} + +#if FAST_INTC_VECTOR == VECT_DMAC_DMAC3I +__fast_interrupt void Interrupt_DMAC3(void) +#else +#pragma vector = VECT_DMAC_DMAC3I +__interrupt void Interrupt_DMAC3(void) +#endif +{ + /* Call the user function */ + if (rpdl_DMAC_callback_func[3] != PDL_NO_FUNC) + { + rpdl_DMAC_callback_func[3](); + } +} +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_exdmac.c b/bsp/rx/RPDL/interrupt_exdmac.c new file mode 100644 index 0000000000..2a98f8cef4 --- /dev/null +++ b/bsp/rx/RPDL/interrupt_exdmac.c @@ -0,0 +1,88 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62N +* File Name : Interrupt_EXDMAC.c +* Version : 1.02 +* Contents : Interrupt handlers for the EXDMAC channels +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_exdmac.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline : EXDMAC interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_EXDMACn(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for EXDMAC channel n +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : EXDMAC_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_EXDMAC_EXDMAC0I +__fast_interrupt void Interrupt_EXDMAC0(void) +#else +#pragma vector = VECT_EXDMAC_EXDMAC0I +__interrupt void Interrupt_EXDMAC0(void) +#endif +{ +#if defined(DEVICE_PACKAGE_LQFP_100) || defined(DEVICE_PACKAGE_TFLGA_85) + /* This peripheral is not available on the 100-pin or 85-pin packages */ + nop(); +#else + /* Call the user function */ + if (rpdl_EXDMAC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_EXDMAC_callback_func[0](); + } +#endif +} + +#if FAST_INTC_VECTOR == VECT_EXDMAC_EXDMAC1I +__fast_interrupt void Interrupt_EXDMAC1(void) +#else +#pragma vector = VECT_EXDMAC_EXDMAC1I +__interrupt void Interrupt_EXDMAC1(void) +#endif +{ +#if defined(DEVICE_PACKAGE_LQFP_100) || defined(DEVICE_PACKAGE_TFLGA_85) + /* This peripheral is not available on the 100-pin or 85-pin packages */ + nop(); +#else + /* Call the user function */ + if (rpdl_EXDMAC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_EXDMAC_callback_func[1](); + } +#endif +} + +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_iic.c b/bsp/rx/RPDL/interrupt_iic.c new file mode 100644 index 0000000000..d5d71c224a --- /dev/null +++ b/bsp/rx/RPDL/interrupt_iic.c @@ -0,0 +1,901 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nx +* File Name : Interrupt_IIC.c +* Version : 1.02 +* Contents : Interrupt handlers for all IIC channels +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_iic.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/* For DMAC support */ +#define DMCNT_ADDRESS(a) ((volatile uint8_t *)&DMAC0.DMCNT + ((0x40u * a) / sizeof( uint8_t)) ) + +/* External functions */ +extern void Store_detected_address(const uint8_t); + +/*""FUNC COMMENT""*************************************************** +* Module outline: IICn event interrupt processing +*------------------------------------------------------------------- +* Declaration : void InterruptIIC_ICEEIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Output : +*------------------------------------------------------------------- +* Use function : +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_RIIC0_ICEEI0 +__fast_interrupt void Interrupt_IIC_ICEEI0(void) +#else +#pragma vector = VECT_RIIC0_ICEEI0 +__interrupt void Interrupt_IIC_ICEEI0(void) +#endif +{ + uint8_t valid_flags; + volatile uint8_t unwanted_byte; + + /* Read the status register */ + valid_flags = RIIC0.ICSR2.BYTE; + + /* Remove any that are not enabled */ + valid_flags &= RIIC0.ICIER.BYTE; + + /* Remove the transmit and receive flags */ + valid_flags &= 0x1Fu; + + /* Start or Repeated Start detected? */ + if ((valid_flags & BIT_2) != 0x0u) + { + /* Decide what to send */ + switch(rpdl_IIC_next_state[0]) + { + case IIC_MASTER_SEND_SLAVE_ADDRESS_7: + /* Send the slave address */ + RIIC0.ICDRT = rpdl_IIC_slave_address_lower[0]; + + /* Transmit mode? */ + if ((rpdl_IIC_slave_address_lower[0] & BIT_0) == 0) + { + rpdl_IIC_current_state[0] = IIC_MASTER_SEND_DATA; + } + else + { + rpdl_IIC_current_state[0] = IIC_MASTER_START_READ; + } + break; + case IIC_MASTER_SEND_SLAVE_ADDRESS_10a: + rpdl_IIC_current_state[0] = IIC_MASTER_SEND_SLAVE_ADDRESS_10b; + + /* Send the first part of the slave address */ + RIIC0.ICDRT = rpdl_IIC_slave_address_upper[0]; + break; + default: + break; + } + + /* Were we expecting data? */ + if (rpdl_IIC_current_state[0] == IIC_SLAVE_READ_DATA) + { + /* Go back to checking for a device address */ + rpdl_IIC_current_state[0] = IIC_SLAVE_MONITOR; + + /* Disable Start detection */ + RIIC0.ICIER.BIT.STIE = 0; + } + + /* Clear the flag */ + RIIC0.ICSR2.BIT.START = 0; + } + /* NACK detected? */ + else if ((valid_flags & BIT_4) != 0x0u) + { + /* Disable NACK interrupt request generation */ + RIIC0.ICIER.BIT.NAKIE = 0; + + /* Failed transmission of data? */ + if (rpdl_IIC_current_state[0] == IIC_MASTER_SEND_DATA) + { + /* Decrement the counter */ + rpdl_IIC_tx_counter[0]--; + + /* Call the callback function */ + if (rpdl_IIC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[0](); + } + } + /* NACK received from the master? */ + else + { + /* Do a dummy read to release SCL */ + unwanted_byte = RIIC0.ICDRR; + } + } + else + { + /* Disable all interrupt request generation */ + RIIC0.ICIER.BYTE = 0x00u; + + /* Call the callback function */ + if (rpdl_IIC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[0](); + } + } +} + +#if FAST_INTC_VECTOR == VECT_RIIC1_ICEEI1 +__fast_interrupt void Interrupt_IIC_ICEEI1(void) +#else +#pragma vector = VECT_RIIC1_ICEEI1 +__interrupt void Interrupt_IIC_ICEEI1(void) +#endif +{ +#ifdef DEVICE_PACKAGE_LQFP_100 + /* This channel is not available on the 100-pin package */ + nop(); +#else + uint8_t valid_flags; + volatile uint8_t unwanted_byte; + + /* Read the status register */ + valid_flags = RIIC1.ICSR2.BYTE; + /* Remove any that are not enabled */ + valid_flags &= RIIC1.ICIER.BYTE; + /* Remove the transmit and receive flags */ + valid_flags &= 0x1Fu; + + /* Start or Repeated Start detected? */ + if ((valid_flags & BIT_2) != 0x0u) + { + /* Decide what to send */ + switch(rpdl_IIC_next_state[1]) + { + case IIC_MASTER_SEND_SLAVE_ADDRESS_7: + /* Send the slave address */ + RIIC1.ICDRT = rpdl_IIC_slave_address_lower[1]; + + /* Transmit mode? */ + if ((rpdl_IIC_slave_address_lower[1] & BIT_0) == 0) + { + rpdl_IIC_current_state[1] = IIC_MASTER_SEND_DATA; + } + else + { + rpdl_IIC_current_state[1] = IIC_MASTER_START_READ; + } + break; + case IIC_MASTER_SEND_SLAVE_ADDRESS_10a: + rpdl_IIC_current_state[1] = IIC_MASTER_SEND_SLAVE_ADDRESS_10b; + + /* Send the first part of the slave address */ + RIIC1.ICDRT = rpdl_IIC_slave_address_upper[1]; + break; + default: + break; + } + + /* Were we expecting data? */ + if (rpdl_IIC_current_state[1] == IIC_SLAVE_READ_DATA) + { + /* Go back to checking for a device address */ + rpdl_IIC_current_state[1] = IIC_SLAVE_MONITOR; + + /* Disable Start detection */ + RIIC1.ICIER.BIT.STIE = 0; + } + + /* Clear the flag */ + RIIC1.ICSR2.BIT.START = 0; + } + /* NACK detected? */ + else if ((valid_flags & BIT_4) != 0x0u) + { + /* Disable NACK interrupt request generation */ + RIIC1.ICIER.BIT.NAKIE = 0; + + /* Failed transmission of data? */ + if (rpdl_IIC_current_state[1] == IIC_MASTER_SEND_DATA) + { + /* Decrement the counter */ + rpdl_IIC_tx_counter[1]--; + + /* Call the callback function */ + if (rpdl_IIC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[1](); + } + } + /* NACK received from the master? */ + else + { + /* Do a dummy read to release SCL */ + unwanted_byte = RIIC1.ICDRR; + } + } + else + { + /* Disable all interrupt request generation */ + RIIC1.ICIER.BYTE = 0x00u; + + /* Call the callback function */ + if (rpdl_IIC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[1](); + } + } +#endif +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: IICn receive data interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_IIC_ICRXIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Output : ICDRR, ICIER +*------------------------------------------------------------------- +* Use function : +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ +#if FAST_INTC_VECTOR == VECT_RIIC0_ICRXI0 +__fast_interrupt void Interrupt_IIC_ICRXI0(void) +#else +#pragma vector = VECT_RIIC0_ICRXI0 +__interrupt void Interrupt_IIC_ICRXI0(void) +#endif +{ + volatile uint8_t unwanted_byte; + + switch (rpdl_IIC_current_state[0]) + { + case IIC_MASTER_START_READ: + /* Only one byte to be read? */ + if (rpdl_IIC_rx_threshold[0] == 1) + { + /* Prepare to signal a NACK to the slave (ACKBT = 1) */ + RIIC0.ICMR3.BIT.ACKBT = 1; + } + rpdl_IIC_current_state[0] = IIC_MASTER_READ_DATA; + + /* Do a dummy read */ + unwanted_byte = RIIC0.ICDRR; + break; + case IIC_MASTER_READ_DATA: + /* Is the last byte about to be read from the slave? */ + if (rpdl_IIC_rx_counter[0] == (rpdl_IIC_rx_threshold[0] - 2)) + { + /* Prepare to signal a NACK to the slave (ACKBT = 1) */ + RIIC0.ICMR3.BIT.ACKBT = 1; + } + /* All data read from the slave? */ + else if (rpdl_IIC_rx_counter[0] == (rpdl_IIC_rx_threshold[0] - 1)) + { + rpdl_IIC_current_state[0] = IIC_MASTER_WAIT_FOR_STOP; + + /* Enable Stop detection */ + RIIC0.ICIER.BIT.SPIE = 1; + + /* Issue a stop condition */ + RIIC0.ICCR2.BIT.SP = 1; + } + + /* Store the data byte */ + *rpdl_IIC_rx_data_pointer[0] = RIIC0.ICDRR; + + /* Increment the pointer */ + rpdl_IIC_rx_data_pointer[0]++; + + /* Increment the counter */ + rpdl_IIC_rx_counter[0]++; + break; + case IIC_SLAVE_MONITOR: + /* Note the detected address */ + Store_detected_address(0); + + /* Clear the Start flag */ + RIIC0.ICSR2.BIT.START = 0; + + /* Enable Start detection (in case a Repeated Start arrives) */ + RIIC0.ICIER.BIT.STIE = 1; + + /* Will interrupts be used for the transfers? */ + if (rpdl_IIC_rx_transfer_method[0] == IIC_TRANSFER_CPU) + { + rpdl_IIC_current_state[0] = IIC_SLAVE_READ_DATA; + } + else + { + /* Disable ACK / NACK decisions (RDRFS = 0) */ + RIIC0.ICMR3.BIT.RDRFS = 0; + /* Select DMAC or DTC transfers */ + if (rpdl_IIC_rx_transfer_method[0] == IIC_TRANSFER_DTC) + { + ICU.DTCER[DTCE_RIIC0_ICRXI0].BIT.DTCE = 1; + } + else /* DMAC */ + { + /* Set DTE = 1 */ + *DMCNT_ADDRESS(rpdl_IIC_rx_dmac_channel[0]) = 0x01u; + } + /* Prevent further RX-based interrupts */ + ICU.IPR[IPR_RIIC0_ICRXI0].BIT.IPR = 0; + rpdl_IIC_current_state[0] = IIC_EXIT_LOOP; + } + + /* Do a dummy read */ + unwanted_byte = RIIC0.ICDRR; + break; + case IIC_SLAVE_READ_DATA: + /* All data received? */ + if (rpdl_IIC_rx_counter[0] == rpdl_IIC_rx_threshold[0]) + { + /* Do a dummy read */ + unwanted_byte = RIIC0.ICDRR; + + /* Signal a NACK to the master */ + RIIC0.ICMR3.BIT.ACKBT = 1; + } + else + { + /* Store the data byte */ + *rpdl_IIC_rx_data_pointer[0] = RIIC0.ICDRR; + + /* Increment the pointer */ + rpdl_IIC_rx_data_pointer[0]++; + + /* Increment the counter */ + rpdl_IIC_rx_counter[0]++; + + /* Signal an ACK to the master */ + RIIC0.ICMR3.BIT.ACKBT = 0; + } + break; + case IIC_SLAVE_SEND_DATA: + /* Call the callback function */ + if (rpdl_IIC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[0](); + } + break; + case IIC_EXIT_LOOP: + /* This will occur if the DMAC/DTC is being used with a callback */ + /* Call the callback function */ + if (rpdl_IIC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[0](); + } + break; + default: + /* Call the callback function */ + if (rpdl_IIC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[0](); + } + break; + } +} + +#if FAST_INTC_VECTOR == VECT_RIIC1_ICRXI1 +__fast_interrupt void Interrupt_IIC_ICRXI1(void) +#else +#pragma vector = VECT_RIIC1_ICRXI1 +__interrupt void Interrupt_IIC_ICRXI1(void) +#endif +{ +#ifdef DEVICE_PACKAGE_LQFP_100 + /* This channel is not available on the 100-pin package */ + nop(); +#else + volatile uint8_t unwanted_byte; + + switch (rpdl_IIC_current_state[1]) + { + case IIC_MASTER_START_READ: + /* Only one byte to be read? */ + if (rpdl_IIC_rx_threshold[1] == 1) + { + /* Prepare to signal a NACK to the slave (ACKBT = 1) */ + RIIC1.ICMR3.BIT.ACKBT = 1; + } + rpdl_IIC_current_state[1] = IIC_MASTER_READ_DATA; + + /* Do a dummy read */ + unwanted_byte = RIIC1.ICDRR; + break; + case IIC_MASTER_READ_DATA: + /* Is the last byte about to be read from the slave? */ + if (rpdl_IIC_rx_counter[1] == (rpdl_IIC_rx_threshold[1] - 2)) + { + /* Prepare to signal a NACK to the slave (ACKBT = 1) */ + RIIC1.ICMR3.BIT.ACKBT = 1; + } + /* All data read from the slave? */ + else if (rpdl_IIC_rx_counter[1] == (rpdl_IIC_rx_threshold[1] - 1)) + { + rpdl_IIC_current_state[1] = IIC_MASTER_WAIT_FOR_STOP; + + /* Enable Stop detection */ + RIIC1.ICIER.BIT.SPIE = 1; + + /* Issue a stop condition */ + RIIC1.ICCR2.BIT.SP = 1; + } + + /* Store the data byte */ + *rpdl_IIC_rx_data_pointer[1] = RIIC1.ICDRR; + + /* Increment the pointer */ + rpdl_IIC_rx_data_pointer[1]++; + + /* Increment the counter */ + rpdl_IIC_rx_counter[1]++; + break; + case IIC_SLAVE_MONITOR: + /* Note the detected address */ + Store_detected_address(1); + + /* Clear the Start flag */ + RIIC1.ICSR2.BIT.START = 0; + + /* Enable Start detection (in case a Repeated Start arrives) */ + RIIC1.ICIER.BIT.STIE = 1; + + /* Will interrupts be used for the transfers? */ + if (rpdl_IIC_rx_transfer_method[1] == IIC_TRANSFER_CPU) + { + rpdl_IIC_current_state[1] = IIC_SLAVE_READ_DATA; + } + else + { + /* Disable ACK / NACK decisions (RDRFS = 0) */ + RIIC1.ICMR3.BIT.RDRFS = 0; + /* Select DMAC or DTC transfers */ + if (rpdl_IIC_rx_transfer_method[1] == IIC_TRANSFER_DTC) + { + ICU.DTCER[DTCE_RIIC1_ICRXI1].BIT.DTCE = 1; + } + else /* DMAC */ + { + /* Set DTE = 1 */ + *DMCNT_ADDRESS(rpdl_IIC_rx_dmac_channel[1]) = 0x01u; + } + /* Prevent further RX-based interrupts */ + ICU.IPR[IPR_RIIC1_ICRXI1].BIT.IPR = 0; + rpdl_IIC_current_state[1] = IIC_EXIT_LOOP; + } + + /* Do a dummy read */ + unwanted_byte = RIIC1.ICDRR; + break; + + case IIC_SLAVE_READ_DATA: + /* All data received? */ + if (rpdl_IIC_rx_counter[1] == rpdl_IIC_rx_threshold[1]) + { + /* Do a dummy read */ + unwanted_byte = RIIC1.ICDRR; + + /* Signal a NACK to the master */ + RIIC1.ICMR3.BIT.ACKBT = 1; + } + else + { + /* Store the data byte */ + *rpdl_IIC_rx_data_pointer[1] = RIIC1.ICDRR; + + /* Increment the pointer */ + rpdl_IIC_rx_data_pointer[1]++; + + /* Increment the counter */ + rpdl_IIC_rx_counter[1]++; + + /* Signal an ACK to the master */ + RIIC1.ICMR3.BIT.ACKBT = 0; + } + break; + case IIC_SLAVE_SEND_DATA: + /* Call the callback function */ + if (rpdl_IIC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[1](); + } + break; + case IIC_EXIT_LOOP: + /* This will occur if the DMAC/DTC is being used with a callback */ + /* Call the callback function */ + if (rpdl_IIC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[1](); + } + break; + default: + /* Call the callback function */ + if (rpdl_IIC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[1](); + } + break; + } +#endif +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: IICn transmit data interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_IIC_ICTXIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Output : ICDRT, ICIER +*------------------------------------------------------------------- +* Use function : +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ +#if FAST_INTC_VECTOR == VECT_RIIC0_ICTXI0 +__fast_interrupt void Interrupt_IIC_ICTXI0(void) +#else +#pragma vector = VECT_RIIC0_ICTXI0 +__interrupt void Interrupt_IIC_ICTXI0(void) +#endif +{ + switch (rpdl_IIC_current_state[0]) + { + case IIC_MASTER_SEND_SLAVE_ADDRESS_10b: + /* Send the second part of the slave address */ + RIIC0.ICDRT = rpdl_IIC_slave_address_lower[0]; + + /* Transmit mode? */ + if ((rpdl_IIC_slave_address_upper[0] & BIT_0) == 0) + { + rpdl_IIC_current_state[0] = IIC_MASTER_SEND_DATA; + } + else + { + rpdl_IIC_current_state[0] = IIC_MASTER_START_READ; + + /* Enable receive interrupt request generation */ + RIIC0.ICIER.BIT.RIE = 1; + } + break; + case IIC_MASTER_SEND_DATA: + /* All data sent? */ + if (rpdl_IIC_tx_counter[0] == rpdl_IIC_tx_threshold[0]) + { + rpdl_IIC_current_state[0] = IIC_MASTER_WAIT_FOR_TX_COMPLETE; + + /* Disable ICTXI interrupt request generation */ + RIIC0.ICIER.BIT.TIE = 0; + + /* Ensure the ICTEI IR flag is clear */ + ICU.IR[IR_RIIC0_ICTEI0].BIT.IR = 0; + + /* Enable Transmit End interrupt generation */ + RIIC0.ICIER.BIT.TEIE = 1; + } + else + { + /* Load the data to be sent */ + RIIC0.ICDRT = *rpdl_IIC_tx_data_pointer[0]; + + /* Increment the pointer */ + rpdl_IIC_tx_data_pointer[0]++; + + /* Increment the counter */ + rpdl_IIC_tx_counter[0]++; + } + break; + case IIC_SLAVE_MONITOR: + /* Note the detected address */ + Store_detected_address(0); + + /* Call the callback function */ + if (rpdl_IIC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[0](); + } + break; + case IIC_SLAVE_SEND_DATA: + /* All data sent? */ + if (rpdl_IIC_tx_counter[0] == rpdl_IIC_tx_threshold[0]) + { + /* Clear the counter */ + rpdl_IIC_tx_counter[0] = 0; + + /* Loop back to the start */ + rpdl_IIC_tx_data_pointer[0] = rpdl_IIC_tx_data_start[0]; + } + + /* Load the data to be sent */ + RIIC0.ICDRT = *rpdl_IIC_tx_data_pointer[0]; + + /* Increment the pointer */ + rpdl_IIC_tx_data_pointer[0]++; + + /* Increment the counter */ + rpdl_IIC_tx_counter[0]++; + break; + case IIC_SLAVE_READ_DATA: + /* Call the callback function */ + if (rpdl_IIC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[0](); + } + break; + case IIC_EXIT_LOOP: + /* This will occur if the DMAC/DTC is being used with a callback */ + /* Call the callback function */ + if (rpdl_IIC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[0](); + } + break; + default: + /* Call the callback function */ + if (rpdl_IIC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[0](); + } + break; + } +} + +#if FAST_INTC_VECTOR == VECT_RIIC1_ICTXI1 +__fast_interrupt void Interrupt_IIC_ICTXI1(void) +#else +#pragma vector = VECT_RIIC1_ICTXI1 +__interrupt void Interrupt_IIC_ICTXI1(void) +#endif +{ +#ifdef DEVICE_PACKAGE_LQFP_100 + /* This channel is not available on the 100-pin package */ + nop(); +#else + switch (rpdl_IIC_current_state[1]) + { + case IIC_MASTER_SEND_SLAVE_ADDRESS_10b: + /* Send the second part of the slave address */ + RIIC1.ICDRT = rpdl_IIC_slave_address_lower[1]; + + /* Transmit mode? */ + if ((rpdl_IIC_slave_address_upper[1] & BIT_0) == 0) + { + rpdl_IIC_current_state[1] = IIC_MASTER_SEND_DATA; + } + else + { + rpdl_IIC_current_state[1] = IIC_MASTER_START_READ; + + /* Enable receive interrupt request generation */ + RIIC1.ICIER.BIT.RIE = 1; + } + break; + case IIC_MASTER_SEND_DATA: + /* All data sent? */ + if (rpdl_IIC_tx_counter[1] == rpdl_IIC_tx_threshold[1]) + { + rpdl_IIC_current_state[1] = IIC_MASTER_WAIT_FOR_TX_COMPLETE; + + /* Disable ICTXI interrupt request generation */ + RIIC1.ICIER.BIT.TIE = 0; + + /* Ensure the ICTEI IR flag is clear */ + ICU.IR[IR_RIIC1_ICTEI1].BIT.IR = 0; + + /* Enable Transmit End interrupt generation */ + RIIC1.ICIER.BIT.TEIE = 1; + } + else + { + /* Load the data to be sent */ + RIIC1.ICDRT = *rpdl_IIC_tx_data_pointer[1]; + + /* Increment the pointer */ + rpdl_IIC_tx_data_pointer[1]++; + + /* Increment the counter */ + rpdl_IIC_tx_counter[1]++; + } + break; + case IIC_SLAVE_MONITOR: + /* Note the detected address */ + Store_detected_address(1); + + /* Call the callback function */ + if (rpdl_IIC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[1](); + } + break; + case IIC_SLAVE_SEND_DATA: + /* All data sent? */ + if (rpdl_IIC_tx_counter[1] == rpdl_IIC_tx_threshold[1]) + { + /* Clear the counter */ + rpdl_IIC_tx_counter[1] = 0; + + /* Loop back to the start */ + rpdl_IIC_tx_data_pointer[1] = rpdl_IIC_tx_data_start[1]; + } + + /* Load the data to be sent */ + RIIC1.ICDRT = *rpdl_IIC_tx_data_pointer[1]; + + /* Increment the pointer */ + rpdl_IIC_tx_data_pointer[1]++; + + /* Increment the counter */ + rpdl_IIC_tx_counter[1]++; + break; + case IIC_SLAVE_READ_DATA: + /* Call the callback function */ + if (rpdl_IIC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[1](); + } + break; + case IIC_EXIT_LOOP: + /* This will occur if the DMAC/DTC is being used with a callback */ + /* Call the callback function */ + if (rpdl_IIC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[1](); + } + break; + default: + /* Call the callback function */ + if (rpdl_IIC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[1](); + } + break; + } +#endif +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: IICn transmit end interrupt processing +*------------------------------------------------------------------- +* Declaration : void InterruptIIC_ICTEIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Output : ICIER, ICSR2 +*------------------------------------------------------------------- +* Use function : +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_RIIC0_ICTEI0 +__fast_interrupt void Interrupt_IIC_ICTEI0(void) +#else +#pragma vector = VECT_RIIC0_ICTEI0 +__interrupt void Interrupt_IIC_ICTEI0(void) +#endif +{ + /* Disable Transmit End interrupt request generation */ + RIIC0.ICIER.BIT.TEIE = 0; + /* Clear the flag */ + RIIC0.ICSR2.BIT.TEND = 0; + + /* Stop condition required? */ + if (rpdl_IIC_stop[0] == true) + { + rpdl_IIC_current_state[0] = IIC_MASTER_WAIT_FOR_STOP; + + /* Enable Stop detection */ + RIIC0.ICIER.BIT.SPIE = 1; + + /* Issue a stop condition */ + RIIC0.ICCR2.BIT.SP = 1; + } + else + { + /* Disable all interrupt request generation */ + RIIC0.ICIER.BYTE = 0x00u; + + /* Call the callback function */ + if (rpdl_IIC_callback_func[0] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[0](); + } + } +} + +#if FAST_INTC_VECTOR == VECT_RIIC1_ICTEI1 +__fast_interrupt void Interrupt_IIC_ICTEI1(void) +#else +#pragma vector = VECT_RIIC1_ICTEI1 +__interrupt void Interrupt_IIC_ICTEI1(void) +#endif +{ +#ifdef DEVICE_PACKAGE_LQFP_100 + /* This channel is not available on the 100-pin package */ + nop(); +#else + /* Disable Transmit End interrupt request generation */ + RIIC1.ICIER.BIT.TEIE = 0; + /* Clear the flag */ + RIIC1.ICSR2.BIT.TEND = 0; + + /* Stop condition required? */ + if (rpdl_IIC_stop[1] == true) + { + rpdl_IIC_current_state[1] = IIC_MASTER_WAIT_FOR_STOP; + + /* Enable Stop detection */ + RIIC1.ICIER.BIT.SPIE = 1; + + /* Issue a stop condition */ + RIIC1.ICCR2.BIT.SP = 1; + } + else + { + /* Disable all interrupt request generation */ + RIIC1.ICIER.BYTE = 0x00u; + + /* Call the callback function */ + if (rpdl_IIC_callback_func[1] != PDL_NO_FUNC) + { + rpdl_IIC_callback_func[1](); + } + } +#endif +} +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_mtu2.c b/bsp/rx/RPDL/interrupt_mtu2.c new file mode 100644 index 0000000000..27e80ab07b --- /dev/null +++ b/bsp/rx/RPDL/interrupt_mtu2.c @@ -0,0 +1,1064 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nxx +* File Name : Interrupt_MTU2.c +* Version : 1.02 +* Contents : Interrupt handlers for the MTU channels +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_mtu2.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TGIA0(void) +*------------------------------------------------------------------- +* Function : TGIAn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_func1_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU0_TGIA0 +__fast_interrupt void Interrupt_MTU0_TGIA0(void) +#else +#pragma vector = VECT_MTU0_TGIA0 +__interrupt void Interrupt_MTU0_TGIA0(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[0] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU1_TGIA1 +__fast_interrupt void Interrupt_MTU1_TGIA1(void) +#else +#pragma vector = VECT_MTU1_TGIA1 +__interrupt void Interrupt_MTU1_TGIA1(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[1] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[1](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU2_TGIA2 +__fast_interrupt void Interrupt_MTU2_TGIA2(void) +#else +#pragma vector = VECT_MTU2_TGIA2 +__interrupt void Interrupt_MTU2_TGIA2(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[2] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[2](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU3_TGIA3 +__fast_interrupt void Interrupt_MTU3_TGIA3(void) +#else +#pragma vector = VECT_MTU3_TGIA3 +__interrupt void Interrupt_MTU3_TGIA3(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[3] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[3](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU4_TGIA4 +__fast_interrupt void Interrupt_MTU4_TGIA4(void) +#else +#pragma vector = VECT_MTU4_TGIA4 +__interrupt void Interrupt_MTU4_TGIA4(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[4] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[4](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU6_TGIA6 +__fast_interrupt void Interrupt_MTU6_TGIA6(void) +#else +#pragma vector = VECT_MTU6_TGIA6 +__interrupt void Interrupt_MTU6_TGIA6(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[6] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[6](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU7_TGIA7 +__fast_interrupt void Interrupt_MTU7_TGIA7(void) +#else +#pragma vector = VECT_MTU7_TGIA7 +__interrupt void Interrupt_MTU7_TGIA7(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[7] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[7](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU8_TGIA8 +__fast_interrupt void Interrupt_MTU8_TGIA8(void) +#else +#pragma vector = VECT_MTU8_TGIA8 +__interrupt void Interrupt_MTU8_TGIA8(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[8] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[8](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU9_TGIA9 +__fast_interrupt void Interrupt_MTU9_TGIA9(void) +#else +#pragma vector = VECT_MTU9_TGIA9 +__interrupt void Interrupt_MTU9_TGIA9(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[9] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[9](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU10_TGIA10 +__fast_interrupt void Interrupt_MTU10_TGIA10(void) +#else +#pragma vector = VECT_MTU10_TGIA10 +__interrupt void Interrupt_MTU10_TGIA10(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[10] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[10](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TGIBn(void) +*------------------------------------------------------------------- +* Function : TGIBn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_func2_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU0_TGIB0 +__fast_interrupt void Interrupt_MTU0_TGIB0(void) +#else +#pragma vector = VECT_MTU0_TGIB0 +__interrupt void Interrupt_MTU0_TGIB0(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[0] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU1_TGIB1 +__fast_interrupt void Interrupt_MTU1_TGIB1(void) +#else +#pragma vector = VECT_MTU1_TGIB1 +__interrupt void Interrupt_MTU1_TGIB1(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[1] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[1](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU2_TGIB2 +__fast_interrupt void Interrupt_MTU2_TGIB2(void) +#else +#pragma vector = VECT_MTU2_TGIB2 +__interrupt void Interrupt_MTU2_TGIB2(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[2] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[2](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU3_TGIB3 +__fast_interrupt void Interrupt_MTU3_TGIB3(void) +#else +#pragma vector = VECT_MTU3_TGIB3 +__interrupt void Interrupt_MTU3_TGIB3(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[3] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[3](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU4_TGIB4 +__fast_interrupt void Interrupt_MTU4_TGIB4(void) +#else +#pragma vector = VECT_MTU4_TGIB4 +__interrupt void Interrupt_MTU4_TGIB4(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[4] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[4](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU6_TGIB6 +__fast_interrupt void Interrupt_MTU6_TGIB6(void) +#else +#pragma vector = VECT_MTU6_TGIB6 +__interrupt void Interrupt_MTU6_TGIB6(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[6] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[6](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU7_TGIB7 +__fast_interrupt void Interrupt_MTU7_TGIB7(void) +#else +#pragma vector = VECT_MTU7_TGIB7 +__interrupt void Interrupt_MTU7_TGIB7(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[7] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[7](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU8_TGIB8 +__fast_interrupt void Interrupt_MTU8_TGIB8(void) +#else +#pragma vector = VECT_MTU8_TGIB8 +__interrupt void Interrupt_MTU8_TGIB8(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[8] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[8](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU9_TGIB9 +__fast_interrupt void Interrupt_MTU9_TGIB9(void) +#else +#pragma vector = VECT_MTU9_TGIB9 +__interrupt void Interrupt_MTU9_TGIB9(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[9] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[9](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU10_TGIB10 +__fast_interrupt void Interrupt_MTU10_TGIB10(void) +#else +#pragma vector = VECT_MTU10_TGIB10 +__interrupt void Interrupt_MTU10_TGIB10(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[10] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[10](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TGICn(void) +*------------------------------------------------------------------- +* Function : TGICn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_func3_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU0_TGIC0 +__fast_interrupt void Interrupt_MTU0_TGIC0(void) +#else +#pragma vector = VECT_MTU0_TGIC0 +__interrupt void Interrupt_MTU0_TGIC0(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func3_callback_func[0] != PDL_NO_FUNC) + { + rpdl_MTU2_func3_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU3_TGIC3 +__fast_interrupt void Interrupt_MTU3_TGIC3(void) +#else +#pragma vector = VECT_MTU3_TGIC3 +__interrupt void Interrupt_MTU3_TGIC3(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func3_callback_func[3] != PDL_NO_FUNC) + { + rpdl_MTU2_func3_callback_func[3](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU4_TGIC4 +__fast_interrupt void Interrupt_MTU4_TGIC4(void) +#else +#pragma vector = VECT_MTU4_TGIC4 +__interrupt void Interrupt_MTU4_TGIC4(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func3_callback_func[4] != PDL_NO_FUNC) + { + rpdl_MTU2_func3_callback_func[4](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU6_TGIC6 +__fast_interrupt void Interrupt_MTU6_TGIC6(void) +#else +#pragma vector = VECT_MTU6_TGIC6 +__interrupt void Interrupt_MTU6_TGIC6(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func3_callback_func[6] != PDL_NO_FUNC) + { + rpdl_MTU2_func3_callback_func[6](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU9_TGIC9 +__fast_interrupt void Interrupt_MTU9_TGIC9(void) +#else +#pragma vector = VECT_MTU9_TGIC9 +__interrupt void Interrupt_MTU9_TGIC9(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func3_callback_func[9] != PDL_NO_FUNC) + { + rpdl_MTU2_func3_callback_func[9](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU10_TGIC10 +__fast_interrupt void Interrupt_MTU10_TGIC10(void) +#else +#pragma vector = VECT_MTU10_TGIC10 +__interrupt void Interrupt_MTU10_TGIC10(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func3_callback_func[10] != PDL_NO_FUNC) + { + rpdl_MTU2_func3_callback_func[10](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TGIDn(void) +*------------------------------------------------------------------- +* Function : TGIDn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_func4_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU0_TGID0 +__fast_interrupt void Interrupt_MTU0_TGID0(void) +#else +#pragma vector = VECT_MTU0_TGID0 +__interrupt void Interrupt_MTU0_TGID0(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func4_callback_func[0] != PDL_NO_FUNC) + { + rpdl_MTU2_func4_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU3_TGID3 +__fast_interrupt void Interrupt_MTU3_TGID3(void) +#else +#pragma vector = VECT_MTU3_TGID3 +__interrupt void Interrupt_MTU3_TGID3(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func4_callback_func[3] != PDL_NO_FUNC) + { + rpdl_MTU2_func4_callback_func[3](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU4_TGID4 +__fast_interrupt void Interrupt_MTU4_TGID4(void) +#else +#pragma vector = VECT_MTU4_TGID4 +__interrupt void Interrupt_MTU4_TGID4(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func4_callback_func[4] != PDL_NO_FUNC) + { + rpdl_MTU2_func4_callback_func[4](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU6_TGID6 +__fast_interrupt void Interrupt_MTU6_TGID6(void) +#else +#pragma vector = VECT_MTU6_TGID6 +__interrupt void Interrupt_MTU6_TGID6(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func4_callback_func[6] != PDL_NO_FUNC) + { + rpdl_MTU2_func4_callback_func[6](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU9_TGID9 +__fast_interrupt void Interrupt_MTU9_TGID9(void) +#else +#pragma vector = VECT_MTU9_TGID9 +__interrupt void Interrupt_MTU9_TGID9(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func4_callback_func[9] != PDL_NO_FUNC) + { + rpdl_MTU2_func4_callback_func[9](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU10_TGID10 +__fast_interrupt void Interrupt_MTU10_TGID10(void) +#else +#pragma vector = VECT_MTU10_TGID10 +__interrupt void Interrupt_MTU10_TGID10(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func4_callback_func[10] != PDL_NO_FUNC) + { + rpdl_MTU2_func4_callback_func[10](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TGIEn(void) +*------------------------------------------------------------------- +* Function : TGIEn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_TGRE_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU0_TGIE0 +__fast_interrupt void Interrupt_MTU0_TGIE0(void) +#else +#pragma vector = VECT_MTU0_TGIE0 +__interrupt void Interrupt_MTU0_TGIE0(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_TGRE_callback_func[0] != PDL_NO_FUNC) + { + rpdl_MTU2_TGRE_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU6_TGIE6 +__fast_interrupt void Interrupt_MTU6_TGIE6(void) +#else +#pragma vector = VECT_MTU6_TGIE6 +__interrupt void Interrupt_MTU6_TGIE6(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_TGRE_callback_func[6] != PDL_NO_FUNC) + { + rpdl_MTU2_TGRE_callback_func[6](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TGIFn(void) +*------------------------------------------------------------------- +* Function : TGIFn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_TGRF_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU0_TGIF0 +__fast_interrupt void Interrupt_MTU0_TGIF0(void) +#else +#pragma vector = VECT_MTU0_TGIF0 +__interrupt void Interrupt_MTU0_TGIF0(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_TGRF_callback_func[0] != PDL_NO_FUNC) + { + rpdl_MTU2_TGRF_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU6_TGIF6 +__fast_interrupt void Interrupt_MTU6_TGIF6(void) +#else +#pragma vector = VECT_MTU6_TGIF6 +__interrupt void Interrupt_MTU6_TGIF6(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_TGRF_callback_func[6] != PDL_NO_FUNC) + { + rpdl_MTU2_TGRF_callback_func[6](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TCIVn(void) +*------------------------------------------------------------------- +* Function : TCIVn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_Overflow_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU0_TCIV0 +__fast_interrupt void Interrupt_MTU0_TCIV0(void) +#else +#pragma vector = VECT_MTU0_TCIV0 +__interrupt void Interrupt_MTU0_TCIV0(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Overflow_callback_func[0] != PDL_NO_FUNC) + { + rpdl_MTU2_Overflow_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU1_TCIV1 +__fast_interrupt void Interrupt_MTU1_TCIV1(void) +#else +#pragma vector = VECT_MTU1_TCIV1 +__interrupt void Interrupt_MTU1_TCIV1(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Overflow_callback_func[1] != PDL_NO_FUNC) + { + rpdl_MTU2_Overflow_callback_func[1](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU2_TCIV2 +__fast_interrupt void Interrupt_MTU2_TCIV2(void) +#else +#pragma vector = VECT_MTU2_TCIV2 +__interrupt void Interrupt_MTU2_TCIV2(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Overflow_callback_func[2] != PDL_NO_FUNC) + { + rpdl_MTU2_Overflow_callback_func[2](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU3_TCIV3 +__fast_interrupt void Interrupt_MTU3_TCIV3(void) +#else +#pragma vector = VECT_MTU3_TCIV3 +__interrupt void Interrupt_MTU3_TCIV3(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Overflow_callback_func[3] != PDL_NO_FUNC) + { + rpdl_MTU2_Overflow_callback_func[3](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU4_TCIV4 +__fast_interrupt void Interrupt_MTU4_TCIV4(void) +#else +#pragma vector = VECT_MTU4_TCIV4 +__interrupt void Interrupt_MTU4_TCIV4(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Overflow_callback_func[4] != PDL_NO_FUNC) + { + rpdl_MTU2_Overflow_callback_func[4](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU6_TCIV6 +__fast_interrupt void Interrupt_MTU6_TCIV6(void) +#else +#pragma vector = VECT_MTU6_TCIV6 +__interrupt void Interrupt_MTU6_TCIV6(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Overflow_callback_func[6] != PDL_NO_FUNC) + { + rpdl_MTU2_Overflow_callback_func[6](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU7_TCIV7 +__fast_interrupt void Interrupt_MTU7_TCIV7(void) +#else +#pragma vector = VECT_MTU7_TCIV7 +__interrupt void Interrupt_MTU7_TCIV7(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Overflow_callback_func[7] != PDL_NO_FUNC) + { + rpdl_MTU2_Overflow_callback_func[7](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU8_TCIV8 +__fast_interrupt void Interrupt_MTU8_TCIV8(void) +#else +#pragma vector = VECT_MTU8_TCIV8 +__interrupt void Interrupt_MTU8_TCIV8(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Overflow_callback_func[8] != PDL_NO_FUNC) + { + rpdl_MTU2_Overflow_callback_func[8](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU9_TCIV9 +__fast_interrupt void Interrupt_MTU9_TCIV9(void) +#else +#pragma vector = VECT_MTU9_TCIV9 +__interrupt void Interrupt_MTU9_TCIV9(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Overflow_callback_func[9] != PDL_NO_FUNC) + { + rpdl_MTU2_Overflow_callback_func[9](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU10_TCIV10 +__fast_interrupt void Interrupt_MTU10_TCIV10(void) +#else +#pragma vector = VECT_MTU10_TCIV10 +__interrupt void Interrupt_MTU10_TCIV10(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Overflow_callback_func[10] != PDL_NO_FUNC) + { + rpdl_MTU2_Overflow_callback_func[10](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TCIUn(void) +*------------------------------------------------------------------- +* Function : TCIUn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_Underflow_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU1_TCIU1 +__fast_interrupt void Interrupt_MTU1_TCIU1(void) +#else +#pragma vector = VECT_MTU1_TCIU1 +__interrupt void Interrupt_MTU1_TCIU1(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Underflow_callback_func[1] != PDL_NO_FUNC) + { + rpdl_MTU2_Underflow_callback_func[1](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU2_TCIU2 +__fast_interrupt void Interrupt_MTU2_TCIU2(void) +#else +#pragma vector = VECT_MTU2_TCIU2 +__interrupt void Interrupt_MTU2_TCIU2(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Underflow_callback_func[2] != PDL_NO_FUNC) + { + rpdl_MTU2_Underflow_callback_func[2](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU7_TCIU7 +__fast_interrupt void Interrupt_MTU7_TCIU7(void) +#else +#pragma vector = VECT_MTU7_TCIU7 +__interrupt void Interrupt_MTU7_TCIU7(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Underflow_callback_func[7] != PDL_NO_FUNC) + { + rpdl_MTU2_Underflow_callback_func[7](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU8_TCIU8 +__fast_interrupt void Interrupt_MTU8_TCIU8(void) +#else +#pragma vector = VECT_MTU8_TCIU8 +__interrupt void Interrupt_MTU8_TCIU8(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_Underflow_callback_func[8] != PDL_NO_FUNC) + { + rpdl_MTU2_Underflow_callback_func[8](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TGIUn(void) +*------------------------------------------------------------------- +* Function : TGIUn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_func1_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU5_TGIU5 +__fast_interrupt void Interrupt_MTU5_TGIU5(void) +#else +#pragma vector = VECT_MTU5_TGIU5 +__interrupt void Interrupt_MTU5_TGIU5(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[5] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[5](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU11_TGIU11 +__fast_interrupt void Interrupt_MTU11_TGIU11(void) +#else +#pragma vector = VECT_MTU11_TGIU11 +__interrupt void Interrupt_MTU11_TGIU11(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func1_callback_func[11] != PDL_NO_FUNC) + { + rpdl_MTU2_func1_callback_func[11](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TGIVn(void) +*------------------------------------------------------------------- +* Function : TGIVn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_func2_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU5_TGIV5 +__fast_interrupt void Interrupt_MTU5_TGIV5(void) +#else +#pragma vector = VECT_MTU5_TGIV5 +__interrupt void Interrupt_MTU5_TGIV5(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[5] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[5](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU11_TGIV11 +__fast_interrupt void Interrupt_MTU11_TGIV11(void) +#else +#pragma vector = VECT_MTU11_TGIV11 +__interrupt void Interrupt_MTU11_TGIV11(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func2_callback_func[11] != PDL_NO_FUNC) + { + rpdl_MTU2_func2_callback_func[11](); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_MTUn_TGIWn(void) +*------------------------------------------------------------------- +* Function : TGIWn interrupt processing +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_MTU2_func3_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_MTU5_TGIW5 +__fast_interrupt void Interrupt_MTU5_TGIW5(void) +#else +#pragma vector = VECT_MTU5_TGIW5 +__interrupt void Interrupt_MTU5_TGIW5(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func3_callback_func[5] != PDL_NO_FUNC) + { + rpdl_MTU2_func3_callback_func[5](); + } +} + +#if FAST_INTC_VECTOR == VECT_MTU11_TGIW11 +__fast_interrupt void Interrupt_MTU11_TGIW11(void) +#else +#pragma vector = VECT_MTU11_TGIW11 +__interrupt void Interrupt_MTU11_TGIW11(void) +#endif +{ + /* Call the user function */ + if (rpdl_MTU2_func3_callback_func[11] != PDL_NO_FUNC) + { + rpdl_MTU2_func3_callback_func[11](); + } +} + +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_not_rpdl.c b/bsp/rx/RPDL/interrupt_not_rpdl.c new file mode 100644 index 0000000000..470aba7c1c --- /dev/null +++ b/bsp/rx/RPDL/interrupt_not_rpdl.c @@ -0,0 +1,203 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nxx +* File Name : Interrupt_not_RPDL.c +* Version : 1.02 +* Contents : Interrupt handlers for peripherals outside the scope +* : of RPDL +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_common_defs_RX62Nxx.h" +#include "r_pdl_user_definitions.h" + +#if FAST_INTC_VECTOR == VECT_FCU_FIFERR +__fast_interrupt void Interrupt_FIFERR(void) +#else +#pragma vector = VECT_FCU_FIFERR +__interrupt void Interrupt_FIFERR(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_FCU_FRDYI +__fast_interrupt void Interrupt_FRDYI(void) +#else +#pragma vector = VECT_FCU_FRDYI +__interrupt void Interrupt_FRDYI(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_ETHER_EINT +__fast_interrupt void Interrupt_EINT(void) +#else +#pragma vector = VECT_ETHER_EINT +__interrupt void Interrupt_EINT(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_USB0_D0FIFO0 +__fast_interrupt void Interrupt_D0FIFO0(void) +#else +#pragma vector = VECT_USB0_D0FIFO0 +__interrupt void Interrupt_D0FIFO0(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_USB0_D1FIFO0 +__fast_interrupt void Interrupt_D1FIFO0(void) +#else +#pragma vector = VECT_USB0_D1FIFO0 +__interrupt void Interrupt_D1FIFO0(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_USB0_USBI0 +__fast_interrupt void Interrupt_USBI0(void) +#else +#pragma vector = VECT_USB0_USBI0 +__interrupt void Interrupt_USBI0(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_USB_USBR0 +__fast_interrupt void Interrupt_USBR0(void) +#else +#pragma vector = VECT_USB_USBR0 +__interrupt void Interrupt_USBR0(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_USB1_D0FIFO1 +__fast_interrupt void Interrupt_D0FIFO1(void) +#else +#pragma vector = VECT_USB1_D0FIFO1 +__interrupt void Interrupt_D0FIFO1(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_USB1_D1FIFO1 +__fast_interrupt void Interrupt_D1FIFO1(void) +#else +#pragma vector = VECT_USB1_D1FIFO1 +__interrupt void Interrupt_D1FIFO1(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_USB1_USBI1 +__fast_interrupt void Interrupt_USBI1(void) +#else +#pragma vector = VECT_USB1_USBI1 +__interrupt void Interrupt_USBI1(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_USB_USBR1 +__fast_interrupt void Interrupt_USBR1(void) +#else +#pragma vector = VECT_USB_USBR1 +__interrupt void Interrupt_USBR1(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_CAN0_ERS0 +__fast_interrupt void Interrupt_ERS0(void) +#else +#pragma vector = VECT_CAN0_ERS0 +__interrupt void Interrupt_ERS0(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_CAN0_RXF0 +__fast_interrupt void Interrupt_RXF0(void) +#else +#pragma vector = VECT_CAN0_RXF0 +__interrupt void Interrupt_RXF0(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_CAN0_TXF0 +__fast_interrupt void Interrupt_TXF0(void) +#else +#pragma vector = VECT_CAN0_TXF0 +__interrupt void Interrupt_TXF0(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_CAN0_RXM0 +__fast_interrupt void Interrupt_RXM0(void) +#else +#pragma vector = VECT_CAN0_RXM0 +__interrupt void Interrupt_RXM0(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +#if FAST_INTC_VECTOR == VECT_CAN0_TXM0 +__fast_interrupt void Interrupt_TXM0(void) +#else +#pragma vector = VECT_CAN0_TXM0 +__interrupt void Interrupt_TXM0(void) +#endif +{ + /* The user can put their own code here */ + nop(); +} + +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_poe.c b/bsp/rx/RPDL/interrupt_poe.c new file mode 100644 index 0000000000..3dd275704c --- /dev/null +++ b/bsp/rx/RPDL/interrupt_poe.c @@ -0,0 +1,126 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62N +* File Name : Interrupt_POE.c +* Version : 1.02 +* Contents : Interrupt handlers for the Port Output Enable module +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_poe.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline : POE interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_OEIn(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for POE interrupt n +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : POE_callback_func[n] +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_POE_OEI1 +__fast_interrupt void Interrupt_OEI1(void) +#else +#pragma vector = VECT_POE_OEI1 +__interrupt void Interrupt_OEI1(void) +#endif +{ +#ifdef DEVICE_PACKAGE_TFLGA_85 + /* This peripheral is not available on the 85-pin package */ + nop(); +#else + /* Call the user function */ + if (rpdl_POE_callback_func[0] != PDL_NO_FUNC) + { + rpdl_POE_callback_func[0](); + } +#endif +} + +#if FAST_INTC_VECTOR == VECT_POE_OEI2 +__fast_interrupt void Interrupt_OEI2(void) +#else +#pragma vector = VECT_POE_OEI2 +__interrupt void Interrupt_OEI2(void) +#endif +{ +#ifdef DEVICE_PACKAGE_TFLGA_85 + /* This peripheral is not available on the 85-pin package */ + nop(); +#else + /* Call the user function */ + if (rpdl_POE_callback_func[2] != PDL_NO_FUNC) + { + rpdl_POE_callback_func[2](); + } +#endif +} + +#if FAST_INTC_VECTOR == VECT_POE_OEI3 +__fast_interrupt void Interrupt_OEI3(void) +#else +#pragma vector = VECT_POE_OEI3 +__interrupt void Interrupt_OEI3(void) +#endif +{ +#ifdef DEVICE_PACKAGE_TFLGA_85 + /* This peripheral is not available on the 85-pin package */ + nop(); +#else + /* Call the user function */ + if (rpdl_POE_callback_func[1] != PDL_NO_FUNC) + { + rpdl_POE_callback_func[1](); + } +#endif +} + +#if FAST_INTC_VECTOR == VECT_POE_OEI4 +__fast_interrupt void Interrupt_OEI4(void) +#else +#pragma vector = VECT_POE_OEI4 +__interrupt void Interrupt_OEI4(void) +#endif +{ +#ifdef DEVICE_PACKAGE_TFLGA_85 + /* This peripheral is not available on the 85-pin package */ + nop(); +#else + /* Call the user function */ + if (rpdl_POE_callback_func[3] != PDL_NO_FUNC) + { + rpdl_POE_callback_func[3](); + } +#endif +} + +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_sci.c b/bsp/rx/RPDL/interrupt_sci.c new file mode 100644 index 0000000000..b06fa2411e --- /dev/null +++ b/bsp/rx/RPDL/interrupt_sci.c @@ -0,0 +1,1219 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nxx +* File Name : Interrupt_SCI.c +* Version : 1.02 +* Contents : Interrupt handlers for all SCI channels +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_sci.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline: SCIn receive data error interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_SCIn_ERIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Output : SSR for that SCI channel +*------------------------------------------------------------------- +* Use function : rpdl_SCI_RX_Error_callback_func +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_SCI0_ERI0 +__fast_interrupt void Interrupt_SCI0_ERI0(void) +#else +#pragma vector = VECT_SCI0_ERI0 +__interrupt void Interrupt_SCI0_ERI0(void) +#endif +{ + /* Will the user handle the errors? */ + if (rpdl_SCI_RX_Error_callback_func[0] != PDL_NO_FUNC) + { + /* Call the error handler */ + rpdl_SCI_RX_Error_callback_func[0](); + } + else + { + /* Clear the error flags */ + SCI0.SSR.BYTE = (uint8_t)(BIT_7 | BIT_6); + } +} + +#if FAST_INTC_VECTOR == VECT_SCI1_ERI1 +__fast_interrupt void Interrupt_SCI1_ERI1(void) +#else +#pragma vector = VECT_SCI1_ERI1 +__interrupt void Interrupt_SCI1_ERI1(void) +#endif +{ + /* Will the user handle the errors? */ + if (rpdl_SCI_RX_Error_callback_func[1] != PDL_NO_FUNC) + { + /* Call the error handler */ + rpdl_SCI_RX_Error_callback_func[1](); + } + else + { + /* Clear the error flags */ + SCI1.SSR.BYTE = (uint8_t)(BIT_7 | BIT_6); + } +} +#if 0 +#if FAST_INTC_VECTOR == VECT_SCI2_ERI2 +__fast_interrupt void Interrupt_SCI2_ERI2(void) +#else +#pragma vector = VECT_SCI2_ERI2 +__interrupt void Interrupt_SCI2_ERI2(void) +#endif +{ + /* Will the user handle the errors? */ + if (rpdl_SCI_RX_Error_callback_func[2] != PDL_NO_FUNC) + { + /* Call the error handler */ + rpdl_SCI_RX_Error_callback_func[2](); + } + else + { + /* Clear the error flags */ + SCI2.SSR.BYTE = (uint8_t)(BIT_7 | BIT_6); + } +} +#endif + +#if FAST_INTC_VECTOR == VECT_SCI3_ERI3 +__fast_interrupt void Interrupt_SCI3_ERI3(void) +#else +#pragma vector = VECT_SCI3_ERI3 +__interrupt void Interrupt_SCI3_ERI3(void) +#endif +{ + /* Will the user handle the errors? */ + if (rpdl_SCI_RX_Error_callback_func[3] != PDL_NO_FUNC) + { + /* Call the error handler */ + rpdl_SCI_RX_Error_callback_func[3](); + } + else + { + /* Clear the error flags */ + SCI3.SSR.BYTE = (uint8_t)(BIT_7 | BIT_6); + } +} + + +#if FAST_INTC_VECTOR == VECT_SCI5_ERI5 +__fast_interrupt void Interrupt_SCI5_ERI5(void) +#else +#pragma vector = VECT_SCI5_ERI5 +__interrupt void Interrupt_SCI5_ERI5(void) +#endif +{ + /* Will the user handle the errors? */ + if (rpdl_SCI_RX_Error_callback_func[5] != PDL_NO_FUNC) + { + /* Call the error handler */ + rpdl_SCI_RX_Error_callback_func[5](); + } + else + { + /* Clear the error flags */ + SCI5.SSR.BYTE = (uint8_t)(BIT_7 | BIT_6); + } +} + +#if FAST_INTC_VECTOR == VECT_SCI6_ERI6 +__fast_interrupt void Interrupt_SCI6_ERI6(void) +#else +#pragma vector = VECT_SCI6_ERI6 +__interrupt void Interrupt_SCI6_ERI6(void) +#endif +{ + /* Will the user handle the errors? */ + if (rpdl_SCI_RX_Error_callback_func[6] != PDL_NO_FUNC) + { + /* Call the error handler */ + rpdl_SCI_RX_Error_callback_func[6](); + } + else + { + /* Clear the error flags */ + SCI6.SSR.BYTE = (uint8_t)(BIT_7 | BIT_6); + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: SCIn receive data interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_SCIn_RXIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Output : +*------------------------------------------------------------------- +* Use function : rpdl_SCI_RX_End_callback_func +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_SCI0_RXI0 +__fast_interrupt void Interrupt_SCI0_RXI0(void) +#else +#pragma vector = VECT_SCI0_RXI0 +__interrupt void Interrupt_SCI0_RXI0(void) +#endif +{ + /* Ok to process the data? */ + if (rpdl_SCI_rx_using_irq[0] == true) + { + /* check if ID reception in Multiprocessor mode */ + if (rpdl_SCI_MP_mode[0] == 2) + { + /* check if ID cycle ? */ + if (SCI0.SSR.BIT.MPB == 1) + { + uint8_t id; + + /* Read the ID */ + id = SCI0.RDR; + + /* ID matching ? */ + if (id != rpdl_SCI_MP_rx_stationID[0]) + { + /* ID does not match */ + /* MPIE = 1 */ + SCI0.SCR.BIT.MPIE = 1; + } + else + { + /* ID matches */ + /* Disable interrupt request generation, and try to disable reception */ + SCI0.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[0](); + } + } + + /* Exit ISR */ + return; + } + } + + /* Read and store the character */ + *rpdl_SCI_rx_string_pointer[0] = SCI0.RDR; + + /* Increment the character counter */ + rpdl_SCI_rx_counter[0]++; + + /* More characters expected? */ + if (rpdl_SCI_rx_counter[0] < rpdl_SCI_rx_threshold[0]) + { + /* Move to the next location in the buffer */ + rpdl_SCI_rx_string_pointer[0]++; + } + else + { + /* Disable interrupt request generation, and try to disable reception */ + SCI0.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Async MP mode ? */ + if (((SCI0.SMR.BIT.MP) != 0) && ((rpdl_SCI_MP_mode[0]) != 0)) + { + /* Set MPIE = 1 (multiprocessor mode reception) */ + SCI0.SCR.BIT.MPIE = 1; + } + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[0](); + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_RX_End_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[0](); + } + } +} + +#if FAST_INTC_VECTOR == VECT_SCI1_RXI1 +__fast_interrupt void Interrupt_SCI1_RXI1(void) +#else +#pragma vector = VECT_SCI1_RXI1 +__interrupt void Interrupt_SCI1_RXI1(void) +#endif +{ + /* Ok to process the data? */ + if (rpdl_SCI_rx_using_irq[1] == true) + { + /* check if ID reception in Multiprocessor mode */ + if (rpdl_SCI_MP_mode[1] == 2) + { + /* check if ID cycle ? */ + if (SCI1.SSR.BIT.MPB == 1) + { + uint8_t id; + + /* Read the ID */ + id = SCI1.RDR; + + /* ID matching ? */ + if (id != rpdl_SCI_MP_rx_stationID[1]) + { + /* ID does not match */ + /* MPIE = 1 */ + SCI1.SCR.BIT.MPIE = 1; + } + else + { + /* ID matches */ + /* Disable interrupt request generation, and try to disable reception */ + SCI1.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[1](); + } + } + + /* Exit ISR */ + return; + } + } + + /* Read and store the character */ + *rpdl_SCI_rx_string_pointer[1] = SCI1.RDR; + + /* Increment the character counter */ + rpdl_SCI_rx_counter[1]++; + + /* More characters expected? */ + if (rpdl_SCI_rx_counter[1] < rpdl_SCI_rx_threshold[1]) + { + /* Move to the next location in the buffer */ + rpdl_SCI_rx_string_pointer[1]++; + } + else + { + /* Disable interrupt request generation, and try to disable reception */ + SCI1.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Async MP mode ? */ + if (((SCI1.SMR.BIT.MP) != 0) && ((rpdl_SCI_MP_mode[1]) != 0)) + { + /* Set MPIE = 1 (multiprocessor mode reception) */ + SCI1.SCR.BIT.MPIE = 1; + } + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[1](); + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_RX_End_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[1](); + } + } +} + +#if 0 +#if FAST_INTC_VECTOR == VECT_SCI2_RXI2 +__fast_interrupt void Interrupt_SCI2_RXI2(void) +#else +#pragma vector = VECT_SCI2_RXI2 +__interrupt void Interrupt_SCI2_RXI2(void) +#endif +{ + /* Ok to process the data? */ + if (rpdl_SCI_rx_using_irq[2] == true) + { + /* check if ID reception in Multiprocessor mode */ + if (rpdl_SCI_MP_mode[2] == 2) + { + /* check if ID cycle ? */ + if (SCI2.SSR.BIT.MPB == 1) + { + uint8_t id; + + /* Read the ID */ + id = SCI2.RDR; + + /* ID matching ? */ + if (id != rpdl_SCI_MP_rx_stationID[2]) + { + /* ID does not match */ + /* MPIE = 1 */ + SCI2.SCR.BIT.MPIE = 1; + } + else + { + /* ID matches */ + /* Disable interrupt request generation, and try to disable reception */ + SCI2.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[2] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[2](); + } + } + + /* Exit ISR */ + return; + } + } + + + /* Read and store the character */ + *rpdl_SCI_rx_string_pointer[2] = SCI2.RDR; + + /* Increment the character counter */ + rpdl_SCI_rx_counter[2]++; + + /* More characters expected? */ + if (rpdl_SCI_rx_counter[2] < rpdl_SCI_rx_threshold[2]) + { + /* Move to the next location in the buffer */ + rpdl_SCI_rx_string_pointer[2]++; + } + else + { + /* Disable interrupt request generation, and try to disable reception */ + SCI2.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Async MP mode ? */ + if (((SCI2.SMR.BIT.MP) != 0) && ((rpdl_SCI_MP_mode[2]) != 0)) + { + /* Set MPIE = 1 (multiprocessor mode reception) */ + SCI2.SCR.BIT.MPIE = 1; + } + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[2] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[2](); + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_RX_End_callback_func[2] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[2](); + } + } +} + #endif +#if FAST_INTC_VECTOR == VECT_SCI3_RXI3 +__fast_interrupt void Interrupt_SCI3_RXI3(void) +#else +#pragma vector = VECT_SCI3_RXI3 +__interrupt void Interrupt_SCI3_RXI3(void) +#endif +{ + /* Ok to process the data? */ + if (rpdl_SCI_rx_using_irq[3] == true) + { + /* check if ID reception in Multiprocessor mode */ + if (rpdl_SCI_MP_mode[3] == 2) + { + /* check if ID cycle ? */ + if (SCI3.SSR.BIT.MPB == 1) + { + uint8_t id; + + /* Read the ID */ + id = SCI3.RDR; + + /* ID matching ? */ + if (id != rpdl_SCI_MP_rx_stationID[3]) + { + /* ID does not match */ + /* MPIE = 1 */ + SCI3.SCR.BIT.MPIE = 1; + } + else + { + /* ID matches */ + /* Disable interrupt request generation, and try to disable reception */ + SCI3.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[3] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[3](); + } + } + + /* Exit ISR */ + return; + } + } + + /* Read and store the character */ + *rpdl_SCI_rx_string_pointer[3] = SCI3.RDR; + + /* Increment the character counter */ + rpdl_SCI_rx_counter[3]++; + + /* More characters expected? */ + if (rpdl_SCI_rx_counter[3] < rpdl_SCI_rx_threshold[3]) + { + /* Move to the next location in the buffer */ + rpdl_SCI_rx_string_pointer[3]++; + } + else + { + /* Disable interrupt request generation, and try to disable reception */ + SCI3.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Async MP mode ? */ + if (((SCI3.SMR.BIT.MP) != 0) && ((rpdl_SCI_MP_mode[3]) != 0)) + { + /* Set MPIE = 1 (multiprocessor mode reception) */ + SCI3.SCR.BIT.MPIE = 1; + } + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[3] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[3](); + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_RX_End_callback_func[3] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[3](); + } + } +} + + +#if FAST_INTC_VECTOR == VECT_SCI5_RXI5 +__fast_interrupt void Interrupt_SCI5_RXI5(void) +#else +#pragma vector = VECT_SCI5_RXI5 +__interrupt void Interrupt_SCI5_RXI5(void) +#endif +{ + /* Ok to process the data? */ + if (rpdl_SCI_rx_using_irq[5] == true) + { + /* check if ID reception in Multiprocessor mode */ + if (rpdl_SCI_MP_mode[5] == 2) + { + /* check if ID cycle ? */ + if (SCI5.SSR.BIT.MPB == 1) + { + uint8_t id; + + /* Read the ID */ + id = SCI5.RDR; + + /* ID matching ? */ + if (id != rpdl_SCI_MP_rx_stationID[5]) + { + /* ID does not match */ + /* MPIE = 1 */ + SCI5.SCR.BIT.MPIE = 1; + } + else + { + /* ID matches */ + /* Disable interrupt request generation, and try to disable reception */ + SCI5.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[5] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[5](); + } + } + + /* Exit ISR */ + return; + } + } + + /* Read and store the character */ + *rpdl_SCI_rx_string_pointer[5] = SCI5.RDR; + + /* Increment the character counter */ + rpdl_SCI_rx_counter[5]++; + + /* More characters expected? */ + if (rpdl_SCI_rx_counter[5] < rpdl_SCI_rx_threshold[5]) + { + /* Move to the next location in the buffer */ + rpdl_SCI_rx_string_pointer[5]++; + } + else + { + /* Disable interrupt request generation, and try to disable reception */ + SCI5.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Async MP mode ? */ + if (((SCI5.SMR.BIT.MP) != 0) && ((rpdl_SCI_MP_mode[5]) != 0)) + { + /* Set MPIE = 1 (multiprocessor mode reception) */ + SCI5.SCR.BIT.MPIE = 1; + } + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[5] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[5](); + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_RX_End_callback_func[5] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[5](); + } + } +} + +#if FAST_INTC_VECTOR == VECT_SCI6_RXI6 +__fast_interrupt void Interrupt_SCI6_RXI6(void) +#else +#pragma vector = VECT_SCI6_RXI6 +__interrupt void Interrupt_SCI6_RXI6(void) +#endif +{ + /* Ok to process the data? */ + if (rpdl_SCI_rx_using_irq[6] == true) + { + /* check if ID reception in Multiprocessor mode */ + if (rpdl_SCI_MP_mode[6] == 2) + { + /* check if ID cycle ? */ + if (SCI6.SSR.BIT.MPB == 1) + { + uint8_t id; + + /* Read the ID */ + id = SCI6.RDR; + + /* ID matching ? */ + if (id != rpdl_SCI_MP_rx_stationID[6]) + { + /* ID does not match */ + /* MPIE = 1 */ + SCI6.SCR.BIT.MPIE = 1; + } + else + { + /* ID matches */ + /* Disable interrupt request generation, and try to disable reception */ + SCI6.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[6] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[6](); + } + } + + /* Exit ISR */ + return; + } + } + + /* Read and store the character */ + *rpdl_SCI_rx_string_pointer[6] = SCI6.RDR; + + /* Increment the character counter */ + rpdl_SCI_rx_counter[6]++; + + /* More characters expected? */ + if (rpdl_SCI_rx_counter[6] < rpdl_SCI_rx_threshold[6]) + { + /* Move to the next location in the buffer */ + rpdl_SCI_rx_string_pointer[6]++; + } + else + { + /* Disable interrupt request generation, and try to disable reception */ + SCI6.SCR.BYTE &= (uint8_t)(INV_BIT_6 & INV_BIT_4); + + /* Async MP mode ? */ + if (((SCI6.SMR.BIT.MP) != 0) && ((rpdl_SCI_MP_mode[6]) != 0)) + { + /* Set MPIE = 1 (multiprocessor mode reception) */ + SCI6.SCR.BIT.MPIE = 1; + } + + /* Notify the user */ + if (rpdl_SCI_RX_End_callback_func[6] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[6](); + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_RX_End_callback_func[6] != PDL_NO_FUNC) + { + rpdl_SCI_RX_End_callback_func[6](); + } + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: SCIn transmit data interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_SCIn_TXIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Output : TDR for that SCI channel +*------------------------------------------------------------------- +* Use function : +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_SCI0_TXI0 +__fast_interrupt void Interrupt_SCI0_TXI0(void) +#else +#pragma vector = VECT_SCI0_TXI0 +__interrupt void Interrupt_SCI0_TXI0(void) +#endif +{ + /* Ok to process the string? */ + if (rpdl_SCI_tx_using_irq[0] == true) + { + /* Another character to be sent? */ + if ( + /* Sending a string and next character is not a Null? */ + ((rpdl_SCI_tx_threshold[0] == 0) && (*rpdl_SCI_tx_string_pointer[0] != NULL)) + || + /* Not reached the byte total? */ + (rpdl_SCI_tx_counter[0] < rpdl_SCI_tx_threshold[0]) + ) + { + /* Send the character */ + SCI0.TDR = *rpdl_SCI_tx_string_pointer[0]; + + /* Increment the pointer */ + rpdl_SCI_tx_string_pointer[0]++; + + /* Increment the counter */ + rpdl_SCI_tx_counter[0]++; + } + else + { + /* Disable interrupt request generation */ + SCI0.SCR.BIT.TIE = 0; + + /* Smart card mode? */ + if (SCI0.SCMR.BIT.SMIF == 1) + { + /* Disable transmission and interrupt request generation */ + SCI0.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[0](); + } + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[0](); + } + } +} + +#if FAST_INTC_VECTOR == VECT_SCI1_TXI1 +__fast_interrupt void Interrupt_SCI1_TXI1(void) +#else +#pragma vector = VECT_SCI1_TXI1 +__interrupt void Interrupt_SCI1_TXI1(void) +#endif +{ + /* Ok to process the string? */ + if (rpdl_SCI_tx_using_irq[1] == true) + { + /* Another character to be sent? */ + if ( + /* Sending a string and next character is not a Null? */ + ((rpdl_SCI_tx_threshold[1] == 0) && (*rpdl_SCI_tx_string_pointer[1] != NULL)) + || + /* Not reached the byte total? */ + (rpdl_SCI_tx_counter[1] < rpdl_SCI_tx_threshold[1]) + ) + { + /* Send the character */ + SCI1.TDR = *rpdl_SCI_tx_string_pointer[1]; + + /* Increment the pointer */ + rpdl_SCI_tx_string_pointer[1]++; + + /* Increment the counter */ + rpdl_SCI_tx_counter[1]++; + } + else + { + /* Disable interrupt request generation */ + SCI1.SCR.BIT.TIE = 0; + + /* Smart card mode? */ + if (SCI1.SCMR.BIT.SMIF == 1) + { + /* Disable transmission and interrupt request generation */ + SCI1.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[1](); + } + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[1](); + } + } +} + +#if FAST_INTC_VECTOR == VECT_SCI2_TXI2 +__fast_interrupt void Interrupt_SCI2_TXI2(void) +#else +#pragma vector = VECT_SCI2_TXI2 +__interrupt void Interrupt_SCI2_TXI2(void) +#endif +{ + /* Ok to process the string? */ + if (rpdl_SCI_tx_using_irq[2] == true) + { + /* Another character to be sent? */ + if ( + /* Sending a string and next character is not a Null? */ + ((rpdl_SCI_tx_threshold[2] == 0) && (*rpdl_SCI_tx_string_pointer[2] != NULL)) + || + /* Not reached the byte total? */ + (rpdl_SCI_tx_counter[2] < rpdl_SCI_tx_threshold[2]) + ) + { + /* Send the character */ + SCI2.TDR = *rpdl_SCI_tx_string_pointer[2]; + + /* Increment the pointer */ + rpdl_SCI_tx_string_pointer[2]++; + + /* Increment the counter */ + rpdl_SCI_tx_counter[2]++; + } + else + { + /* Disable interrupt request generation */ + SCI2.SCR.BIT.TIE = 0; + + /* Smart card mode? */ + if (SCI2.SCMR.BIT.SMIF == 1) + { + /* Disable transmission and interrupt request generation */ + SCI2.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[2] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[2](); + } + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[2] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[2](); + } + } +} + +#if FAST_INTC_VECTOR == VECT_SCI3_TXI3 +__fast_interrupt void Interrupt_SCI3_TXI3(void) +#else +#pragma vector = VECT_SCI3_TXI3 +__interrupt void Interrupt_SCI3_TXI3(void) +#endif +{ + /* Ok to process the string? */ + if (rpdl_SCI_tx_using_irq[3] == true) + { + /* Another character to be sent? */ + if ( + /* Sending a string and next character is not a Null? */ + ((rpdl_SCI_tx_threshold[3] == 0) && (*rpdl_SCI_tx_string_pointer[3] != NULL)) + || + /* Not reached the byte total? */ + (rpdl_SCI_tx_counter[3] < rpdl_SCI_tx_threshold[3]) + ) + { + /* Send the character */ + SCI3.TDR = *rpdl_SCI_tx_string_pointer[3]; + + /* Increment the pointer */ + rpdl_SCI_tx_string_pointer[3]++; + + /* Increment the counter */ + rpdl_SCI_tx_counter[3]++; + } + else + { + /* Disable interrupt request generation */ + SCI3.SCR.BIT.TIE = 0; + + /* Smart card mode? */ + if (SCI3.SCMR.BIT.SMIF == 1) + { + /* Disable transmission and interrupt request generation */ + SCI3.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[3] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[3](); + } + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[3] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[3](); + } + } +} + + +#if FAST_INTC_VECTOR == VECT_SCI5_TXI5 +__fast_interrupt void Interrupt_SCI5_TXI5(void) +#else +#pragma vector = VECT_SCI5_TXI5 +__interrupt void Interrupt_SCI5_TXI5(void) +#endif +{ + /* Ok to process the string? */ + if (rpdl_SCI_tx_using_irq[5] == true) + { + /* Another character to be sent? */ + if ( + /* Sending a string and next character is not a Null? */ + ((rpdl_SCI_tx_threshold[5] == 0) && (*rpdl_SCI_tx_string_pointer[5] != NULL)) + || + /* Not reached the byte total? */ + (rpdl_SCI_tx_counter[5] < rpdl_SCI_tx_threshold[5]) + ) + { + /* Send the character */ + SCI5.TDR = *rpdl_SCI_tx_string_pointer[5]; + + /* Increment the pointer */ + rpdl_SCI_tx_string_pointer[5]++; + + /* Increment the counter */ + rpdl_SCI_tx_counter[5]++; + } + else + { + /* Disable interrupt request generation */ + SCI5.SCR.BIT.TIE = 0; + + /* Smart card mode? */ + if (SCI5.SCMR.BIT.SMIF == 1) + { + /* Disable transmission and interrupt request generation */ + SCI5.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[5] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[5](); + } + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[5] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[5](); + } + } +} + +#if FAST_INTC_VECTOR == VECT_SCI6_TXI6 +__fast_interrupt void Interrupt_SCI6_TXI6(void) +#else +#pragma vector = VECT_SCI6_TXI6 +__interrupt void Interrupt_SCI6_TXI6(void) +#endif +{ + /* Ok to process the string? */ + if (rpdl_SCI_tx_using_irq[6] == true) + { + /* Another character to be sent? */ + if ( + /* Sending a string and next character is not a Null? */ + ((rpdl_SCI_tx_threshold[6] == 0) && (*rpdl_SCI_tx_string_pointer[6] != NULL)) + || + /* Not reached the byte total? */ + (rpdl_SCI_tx_counter[6] < rpdl_SCI_tx_threshold[6]) + ) + { + /* Send the character */ + SCI6.TDR = *rpdl_SCI_tx_string_pointer[6]; + + /* Increment the pointer */ + rpdl_SCI_tx_string_pointer[6]++; + + /* Increment the counter */ + rpdl_SCI_tx_counter[6]++; + } + else + { + /* Disable interrupt request generation */ + SCI6.SCR.BIT.TIE = 0; + + /* Smart card mode? */ + if (SCI6.SCMR.BIT.SMIF == 1) + { + /* Disable transmission and interrupt request generation */ + SCI6.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[6] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[6](); + } + } + } + } + /* Either the DMAC or DTC has passed on the interrupt */ + else + { + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[6] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[6](); + } + } +} + +/*""FUNC COMMENT""*************************************************** +* Module outline: SCIn transmit end interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_SCIn_TEIn(void) +*------------------------------------------------------------------- +* Function : +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Output : SCR for that channel +*------------------------------------------------------------------- +* Use function : rpdl_SCI_TX_End_callback_func() +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_SCI0_TEI0 +__fast_interrupt void Interrupt_SCI0_TEI0(void) +#else +#pragma vector = VECT_SCI0_TEI0 +__interrupt void Interrupt_SCI0_TEI0(void) +#endif +{ + /* Disable interrupt request generation, and try to disable transmission */ + SCI0.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5 & INV_BIT_2); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[0] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[0](); + } +} + +#if FAST_INTC_VECTOR == VECT_SCI1_TEI1 +__fast_interrupt void Interrupt_SCI1_TEI1(void) +#else +#pragma vector = VECT_SCI1_TEI1 +__interrupt void Interrupt_SCI1_TEI1(void) +#endif +{ + /* Disable interrupt request generation, and try to disable transmission */ + SCI1.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5 & INV_BIT_2); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[1] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[1](); + } +} + +#if FAST_INTC_VECTOR == VECT_SCI2_TEI2 +__fast_interrupt void Interrupt_SCI2_TEI2(void) +#else +#pragma vector = VECT_SCI2_TEI2 +__interrupt void Interrupt_SCI2_TEI2(void) +#endif +{ + /* Disable interrupt request generation, and try to disable transmission */ + SCI2.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5 & INV_BIT_2); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[2] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[2](); + } +} + +#if FAST_INTC_VECTOR == VECT_SCI3_TEI3 +__fast_interrupt void Interrupt_SCI3_TEI3(void) +#else +#pragma vector = VECT_SCI3_TEI3 +__interrupt void Interrupt_SCI3_TEI3(void) +#endif +{ + /* Disable interrupt request generation, and try to disable transmission */ + SCI3.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5 & INV_BIT_2); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[3] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[3](); + } +} + + +#if FAST_INTC_VECTOR == VECT_SCI5_TEI5 +__fast_interrupt void Interrupt_SCI5_TEI5(void) +#else +#pragma vector = VECT_SCI5_TEI5 +__interrupt void Interrupt_SCI5_TEI5(void) +#endif +{ + /* Disable interrupt request generation, and try to disable transmission */ + SCI5.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5 & INV_BIT_2); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[5] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[5](); + } +} + +#if FAST_INTC_VECTOR == VECT_SCI6_TEI6 +__fast_interrupt void Interrupt_SCI6_TEI6(void) +#else +#pragma vector = VECT_SCI6_TEI6 +__interrupt void Interrupt_SCI6_TEI6(void) +#endif +{ + /* Disable interrupt request generation, and try to disable transmission */ + SCI6.SCR.BYTE &= (uint8_t)(INV_BIT_7 & INV_BIT_5 & INV_BIT_2); + + /* Call the callback function */ + if (rpdl_SCI_TX_End_callback_func[6] != PDL_NO_FUNC) + { + rpdl_SCI_TX_End_callback_func[6](); + } +} +/* End of file */ diff --git a/bsp/rx/RPDL/interrupt_wdt.c b/bsp/rx/RPDL/interrupt_wdt.c new file mode 100644 index 0000000000..a93e366955 --- /dev/null +++ b/bsp/rx/RPDL/interrupt_wdt.c @@ -0,0 +1,63 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Interrupt program for RX62Nxx +* File Name : Interrupt_WDT.c +* Version : 1.02 +* Contents : Interrupt handler for the Watchdog timer +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#include "r_pdl_wdt.h" +#include "r_pdl_definitions.h" +#include "r_pdl_user_definitions.h" + +/*""FUNC COMMENT""*************************************************** +* Module outline : Timer interrupt processing +*------------------------------------------------------------------- +* Declaration : void Interrupt_WDT(void) +*------------------------------------------------------------------- +* Function : Interrupt processing function for the WDT +*------------------------------------------------------------------- +* Argument : Nothing +*------------------------------------------------------------------- +* Return value : Nothing +*------------------------------------------------------------------- +* Input : +* Output : +*------------------------------------------------------------------- +* Use function : WDT_callback_func +*------------------------------------------------------------------- +* Notes : +*------------------------------------------------------------------- +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FUNC COMMENT END""**********************************************/ + +#if FAST_INTC_VECTOR == VECT_WDT_WOVI +__fast_interrupt void Interrupt_WDT(void) +#else +#pragma vector = VECT_WDT_WOVI +__interrupt void Interrupt_WDT(void) +#endif +{ + /* Call the user function */ + if (rpdl_WDT_callback_func != PDL_NO_FUNC) + { + rpdl_WDT_callback_func(); + } +} +/* End of file */ diff --git a/bsp/rx/RPDL/macro.h b/bsp/rx/RPDL/macro.h new file mode 100644 index 0000000000..ddd830db54 --- /dev/null +++ b/bsp/rx/RPDL/macro.h @@ -0,0 +1,72 @@ +/********************************************************************************/ +/* RX FAMILY C/C++ Compiler */ +/* Copyright (C) 2007 Renesas Technology Corp. and Renesas Solutions Corp. */ +/* All Rights Reserved. */ +/********************************************************************************/ + +#ifndef _MACRO +#define _MACRO + +#ifdef __RX + +#ifndef _NO_MT +#define _NO_MT +#endif /* !_NO_MT */ + +#ifdef __STDC_VERSION__ +#if 199901L <= __STDC_VERSION__ +#define _C99 +#endif /* 199901L <= __STDC_VERSION__ */ +#endif /* __STDC_VERSION__ */ + +#ifndef _HAS_TR1 +#define _HAS_TR1 0 +#endif /* !_HAS_TR1 */ + +#ifndef __STDC_WANT_LIB_EXT1__ +#define __STDC_WANT_LIB_EXT1__ 0 +#endif /* !__STDC_WANT_LIB_EXT1 */ + +#ifndef _ADDED_C_LIB +#define _ADDED_C_LIB 0 +#endif /* !_ADDED_C_LIB */ + +#ifndef __STDC_WANT_SAFER_LIB__ +#define __STDC_WANT_SAFER_LIB__ 0 +#endif /* !__STDC_WANT_SAFER_LIB__ */ + +#ifndef _ALT_NS +#define _ALT_NS 0 +#endif /* !_ALT_NS */ + +#ifdef __cplusplus + +#ifndef _C99 +#define _C99 +#endif /* !_C99*/ + +#endif /* __cplusplus */ + +#ifdef __embedded_cplusplus + +#ifndef _NO_NS +#define _NO_NS +#endif /* !_NO_NS */ + +#ifndef _ECPP +#define _ECPP +#endif /* !_ECPP */ + +#endif /* __embedded_cplusplus */ + +#ifdef _REENTRANT + +#ifndef _R_REENT +#define _R_REENT +#endif /* !_R_REENT */ + +#endif /* _REENTRANT */ + +#endif /* __RX */ + +#endif /* _MACRO */ diff --git a/bsp/rx/RPDL/r_pdl_adc_10.h b/bsp/rx/RPDL/r_pdl_adc_10.h new file mode 100644 index 0000000000..7590f11cb0 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_adc_10.h @@ -0,0 +1,111 @@ +/*""FILE COMMENT""******************************************************* +* System Name : ADC converter API for RX62Nxx +* File Name : r_pdl_adc_10.h +* Version : 1.02 +* Contents : ADC function prototypes +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_ADC_10_H +#define R_PDL_ADC_10_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_ADC_10_Create( + uint8_t, + uint32_t, + uint32_t, + float, + void *, + uint8_t +); +bool R_ADC_10_Destroy( + uint8_t +); +bool R_ADC_10_Control( + uint16_t +); +bool R_ADC_10_Read( + uint8_t, + uint16_t * +); + +/* Scan mode */ +#define PDL_ADC_10_MODE_SINGLE 0x00000001u +#define PDL_ADC_10_MODE_CONTINUOUS_SCAN 0x00000002u +#define PDL_ADC_10_MODE_ONE_CYCLE_SCAN 0x00000004u + +/* Channel selection */ +#define PDL_ADC_10_CHANNELS_OPTION_1 0x00000008u +#define PDL_ADC_10_CHANNELS_OPTION_2 0x00000010u +#define PDL_ADC_10_CHANNELS_OPTION_3 0x00000020u +#define PDL_ADC_10_CHANNELS_OPTION_4 0x00000040u + +/* Trigger selection */ +#define PDL_ADC_10_TRIGGER_SOFTWARE 0x00000080u +#define PDL_ADC_10_TRIGGER_MTU0_MTU4_CMIC_A 0x00000100u +#define PDL_ADC_10_TRIGGER_TMR0_CM_A 0x00000200u +#define PDL_ADC_10_TRIGGER_ADTRG0 0x00000400u +#define PDL_ADC_10_TRIGGER_ADTRG1 0x00000800u +#define PDL_ADC_10_TRIGGER_MTU0_CMIC 0x00001000u +#define PDL_ADC_10_TRIGGER_MTU6_MTU10_CMIC_A 0x00002000u +#define PDL_ADC_10_TRIGGER_MTU4_CM 0x00004000u +#define PDL_ADC_10_TRIGGER_MTU10_CM 0x00008000u + +/* Data alignment */ +#define PDL_ADC_10_DATA_ALIGNMENT_LEFT 0x00010000u +#define PDL_ADC_10_DATA_ALIGNMENT_RIGHT 0x00020000u + +/* DMAC / DTC trigger control */ +#define PDL_ADC_10_DMAC_DTC_TRIGGER_DISABLE 0x00040000u +#define PDL_ADC_10_DMAC_TRIGGER_ENABLE 0x00080000u +#define PDL_ADC_10_DTC_TRIGGER_ENABLE 0x00100000u + +/* Sampling time calcuation control */ +#define PDL_ADC_10_ADSSTR_CALCULATE 0x00200000u +#define PDL_ADC_10_ADSSTR_SPECIFY 0x00400000u + +/* Pin selection */ +#define PDL_ADC_10_PIN_ADTRG0_A 0x00800000u +#define PDL_ADC_10_PIN_ADTRG0_B 0x01000000u + +/* Self-Diagnostic */ +#define PDL_ADC_10_SINGLE_AN0_SW (PDL_ADC_10_MODE_SINGLE | \ + PDL_ADC_10_CHANNELS_OPTION_1 | \ + PDL_ADC_10_TRIGGER_SOFTWARE) +#define PDL_ADC_10_ADDIAGR_DISABLE 0x02000000u +#define PDL_ADC_10_ADDIAGR_VREF_0 0x04000000u +#define PDL_ADC_10_ADDIAGR_VREF_0_5 0x08000000u +#define PDL_ADC_10_ADDIAGR_VREF_1 0x10000000u +#define PDL_ADC_10_SELF_DIAGNOSTIC_DISABLE (PDL_ADC_10_ADDIAGR_DISABLE) +#define PDL_ADC_10_SELF_DIAGNOSTIC_VREF_0 (PDL_ADC_10_SINGLE_AN0_SW | PDL_ADC_10_ADDIAGR_VREF_0) +#define PDL_ADC_10_SELF_DIAGNOSTIC_VREF_0_5 (PDL_ADC_10_SINGLE_AN0_SW | PDL_ADC_10_ADDIAGR_VREF_0_5) +#define PDL_ADC_10_SELF_DIAGNOSTIC_VREF_1 (PDL_ADC_10_SINGLE_AN0_SW | PDL_ADC_10_ADDIAGR_VREF_1) + +/* On / off control */ +#define PDL_ADC_10_0_ON 0x0001u +#define PDL_ADC_10_0_OFF 0x0002u +#define PDL_ADC_10_1_ON 0x0004u +#define PDL_ADC_10_1_OFF 0x0008u + +/* CPU control */ +#define PDL_ADC_10_CPU_ON 0x0100u +#define PDL_ADC_10_CPU_OFF 0x0200u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_adc_10_RX62Nxx.h b/bsp/rx/RPDL/r_pdl_adc_10_RX62Nxx.h new file mode 100644 index 0000000000..263f2a2e15 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_adc_10_RX62Nxx.h @@ -0,0 +1,82 @@ +/*""FILE COMMENT""******************************************************* +* System Name : A/D converter API for RX62Nxx +* File Name : r_pdl_adc_10_RX62Nxx.h +* Version : 1.02 +* Contents : ADC header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_ADC_10_RX62Nxx_H +#define R_PDL_ADC_10_RX62Nxx_H + +#define ADC_10_UNITS 2 + +extern VoidCallBackFunc rpdl_ADC_10_callback_func[]; + +/* Library prototypes */ +bool R_ADC_10_CreateAll( + const uint8_t, + const uint32_t, + const uint32_t, + const float, + VoidCallBackFunc const, + const uint8_t +); +bool R_ADC_10_DestroyAll( + const uint8_t +); +bool R_ADC_10_ControlAll( + const uint16_t +); +bool R_ADC_10_ReadAll( + const uint8_t, + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_ADC_10_Create(a, b, c, d, e, f) \ +( \ +( ( ((a) < ADC_10_UNITS) && ((f) <= IPL_MAX) ) ) ? \ +R_ADC_10_CreateAll( (a), (b), (c), (d), (e), (f)): \ +ReturnFalse() \ +) + +#define R_ADC_10_Destroy(a) \ +( \ +( (a) < ADC_10_UNITS ) ? \ +R_ADC_10_DestroyAll( (a) ): \ +ReturnFalse() \ +) + +#define R_ADC_10_Control(a) \ +( \ +( ((a) & 0xFFu) != 0x00u ) ? \ +R_ADC_10_ControlAll( (a) ): \ +ReturnFalse() \ +) + +#define R_ADC_10_Read(a, b) \ +( \ +( (a) < ADC_10_UNITS ) ? \ +R_ADC_10_ReadAll( (a), (b) ): \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_adc_12.h b/bsp/rx/RPDL/r_pdl_adc_12.h new file mode 100644 index 0000000000..e0c49b289e --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_adc_12.h @@ -0,0 +1,123 @@ +/*""FILE COMMENT""******************************************************* +* System Name : 12-bit ADC converter API for RX62Nxx +* File Name : r_pdl_adc_12.h +* Version : 1.02 +* Contents : ADC_12 function prototypes +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_ADC_12_H +#define R_PDL_ADC_12_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_ADC_12_Create( + uint8_t, + uint32_t, + uint16_t, + uint16_t, + void *, + uint8_t +); +bool R_ADC_12_Destroy( + uint8_t +); +bool R_ADC_12_Control( + uint8_t +); +bool R_ADC_12_Read( + uint8_t, + uint16_t * +); + +/* Scan mode */ +#define PDL_ADC_12_SCAN_SINGLE 0x00000001ul +#define PDL_ADC_12_SCAN_CONTINUOUS 0x00000002ul + +// Input channel selection +#define PDL_ADC_12_CHANNEL_0 0x00000004ul +#define PDL_ADC_12_CHANNEL_1 0x00000008ul +#define PDL_ADC_12_CHANNEL_2 0x00000010ul +#define PDL_ADC_12_CHANNEL_3 0x00000020ul +#define PDL_ADC_12_CHANNEL_4 0x00000040ul +#define PDL_ADC_12_CHANNEL_5 0x00000080ul +#define PDL_ADC_12_CHANNEL_6 0x00000100ul +#define PDL_ADC_12_CHANNEL_7 0x00000200ul + +/* Clock division */ +#define PDL_ADC_12_DIV_1 0x00000400ul +#define PDL_ADC_12_DIV_2 0x00000800ul +#define PDL_ADC_12_DIV_4 0x00001000ul +#define PDL_ADC_12_DIV_8 0x00002000ul + +/* Data alignment */ +#define PDL_ADC_12_DATA_ALIGNMENT_LEFT 0x00004000ul +#define PDL_ADC_12_DATA_ALIGNMENT_RIGHT 0x00008000ul + +/* Result register clearing */ +#define PDL_ADC_12_RETAIN_RESULT 0x00010000ul +#define PDL_ADC_12_CLEAR_RESULT 0x00020000ul + +/* DMAC / DTC trigger control */ +#define PDL_ADC_12_DMAC_DTC_TRIGGER_DISABLE 0x00040000ul +#define PDL_ADC_12_DMAC_TRIGGER_ENABLE 0x00080000ul +#define PDL_ADC_12_DTC_TRIGGER_ENABLE 0x00100000ul + +/* Trigger selection */ +#define PDL_ADC_12_TRIGGER_SOFTWARE 0x0001u +#define PDL_ADC_12_TRIGGER_ADTRG0 0x0002u +#define PDL_ADC_12_TRIGGER_MTU0_ICCM_A 0x0004u +#define PDL_ADC_12_TRIGGER_MTU0_ICCM_B 0x0008u +#define PDL_ADC_12_TRIGGER_MTU0_MTU4_ICCM 0x0010u +#define PDL_ADC_12_TRIGGER_MTU6_MTU10_ICCM 0x0020u +#define PDL_ADC_12_TRIGGER_MTU0_CM_E 0x0040u +#define PDL_ADC_12_TRIGGER_MTU0_CM_F 0x0080u +#define PDL_ADC_12_TRIGGER_MTU4_CM 0x0100u +#define PDL_ADC_12_TRIGGER_MTU10_CM 0x0200u +#define PDL_ADC_12_TRIGGER_TMR0 0x0400u +#define PDL_ADC_12_TRIGGER_TMR2 0x0800u + +/* Pin selection */ +#define PDL_ADC_12_PIN_ADTRG0_A 0x1000u +#define PDL_ADC_12_PIN_ADTRG0_B 0x2000u + +/* Value addition mode selection */ +#define PDL_ADC_12_VALUE_ADD_CHANNEL_0 0x0001u +#define PDL_ADC_12_VALUE_ADD_CHANNEL_1 0x0002u +#define PDL_ADC_12_VALUE_ADD_CHANNEL_2 0x0004u +#define PDL_ADC_12_VALUE_ADD_CHANNEL_3 0x0008u +#define PDL_ADC_12_VALUE_ADD_CHANNEL_4 0x0010u +#define PDL_ADC_12_VALUE_ADD_CHANNEL_5 0x0020u +#define PDL_ADC_12_VALUE_ADD_CHANNEL_6 0x0040u +#define PDL_ADC_12_VALUE_ADD_CHANNEL_7 0x0080u + +/* Value addition count selection */ +#define PDL_ADC_12_VALUE_ADD_TIME_1 0x0100u +#define PDL_ADC_12_VALUE_ADD_TIME_2 0x0200u +#define PDL_ADC_12_VALUE_ADD_TIME_3 0x0400u +#define PDL_ADC_12_VALUE_ADD_TIME_4 0x0800u + +/* On / off control */ +#define PDL_ADC_12_0_ON 0x01u +#define PDL_ADC_12_0_OFF 0x02u + +/* CPU control */ +#define PDL_ADC_12_CPU_OFF 0x04u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_adc_12_RX62Nxx.h b/bsp/rx/RPDL/r_pdl_adc_12_RX62Nxx.h new file mode 100644 index 0000000000..574c5328c3 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_adc_12_RX62Nxx.h @@ -0,0 +1,80 @@ +/*""FILE COMMENT""******************************************************* +* System Name : 12-bit A/D converter API for RX62Nxx +* File Name : r_pdl_adc_12_RX62Nxx.h +* Version : 1.02 +* Contents : ADC_12 header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_ADC_12_RX62Nxx_H +#define R_PDL_ADC_12_RX62Nxx_H + +extern VoidCallBackFunc rpdl_ADC_12_callback_func[]; + +#define ADC_12_UNITS 1 + +/* Library prototypes */ +bool R_ADC_12_CreateAll( + const uint8_t, + const uint32_t, + const uint16_t, + const uint16_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_ADC_12_DestroyAll( + const uint8_t +); +bool R_ADC_12_ControlAll( + const uint8_t +); +bool R_ADC_12_ReadAll( + const uint8_t, + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_ADC_12_Create(a, b, c, d, e, f) \ +( \ +( ( ((a) < ADC_12_UNITS) && ((f) <= IPL_MAX) ) ) ? \ +R_ADC_12_CreateAll( (a), (b), (c), (d), (e), (f)): \ +ReturnFalse() \ +) + +#define R_ADC_12_Destroy(a) \ +( \ +( (a) < ADC_12_UNITS ) ? \ +R_ADC_12_DestroyAll( (a) ): \ +ReturnFalse() \ +) + +#define R_ADC_12_Control(a) \ +( \ +R_ADC_12_ControlAll( (a) ) \ +) + +#define R_ADC_12_Read(a, b) \ +( \ +( (a) < ADC_12_UNITS ) ? \ +R_ADC_12_ReadAll( (a), (b) ): \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_bsc.h b/bsp/rx/RPDL/r_pdl_bsc.h new file mode 100644 index 0000000000..1a3f8a31e9 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_bsc.h @@ -0,0 +1,210 @@ +/*""FILE COMMENT""******************************************************* +* System Name : BSC API for RX62Nxx +* File Name : r_pdl_bsc.h +* Version : 1.02 +* Contents : BSC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_BSC_H +#define R_PDL_BSC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_BSC_Create( + uint32_t, + uint32_t, + uint8_t, + void *, + uint8_t +); +bool R_BSC_CreateArea( + uint8_t, + uint16_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t +); +bool R_BSC_SDRAM_CreateArea( + uint16_t, + uint16_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + uint16_t +); +bool R_BSC_Destroy( + uint8_t +); +bool R_BSC_Control( + uint16_t +); +bool R_BSC_GetStatus( + uint8_t *, + uint16_t *, + uint8_t * +); + +/* R_BSC_Create parameter options */ +/* Configuration1 (pin select control) */ +/* Chip select pin selection */ +#define PDL_BSC_CS0_A 0x00000001ul +#define PDL_BSC_CS0_B 0x00000002ul +#define PDL_BSC_CS1_A 0x00000004ul +#define PDL_BSC_CS1_B 0x00000008ul +#define PDL_BSC_CS1_C 0x00000010ul +#define PDL_BSC_CS2_A 0x00000020ul +#define PDL_BSC_CS2_B 0x00000040ul +#define PDL_BSC_CS2_C 0x00000080ul +#define PDL_BSC_CS3_A 0x00000100ul +#define PDL_BSC_CS3_B 0x00000200ul +#define PDL_BSC_CS3_C 0x00000400ul +#define PDL_BSC_CS4_A 0x00000800ul +#define PDL_BSC_CS4_B 0x00001000ul +#define PDL_BSC_CS4_C 0x00002000ul +#define PDL_BSC_CS5_A 0x00004000ul +#define PDL_BSC_CS5_B 0x00008000ul +#define PDL_BSC_CS5_C 0x00010000ul +#define PDL_BSC_CS6_A 0x00020000ul +#define PDL_BSC_CS6_B 0x00040000ul +#define PDL_BSC_CS6_C 0x00080000ul +#define PDL_BSC_CS7_A 0x00100000ul +#define PDL_BSC_CS7_B 0x00200000ul +#define PDL_BSC_CS7_C 0x00400000ul + +/* Address (A23-A16) pin selection */ +#define PDL_BSC_A23_A16_A 0x00800000ul +#define PDL_BSC_A23_A16_B 0x01000000ul + +/* WAIT pin selection */ +#define PDL_BSC_WAIT_NOT_USED 0x02000000ul +#define PDL_BSC_WAIT_A 0x04000000ul +#define PDL_BSC_WAIT_B 0x08000000ul +#define PDL_BSC_WAIT_C 0x10000000ul +#define PDL_BSC_WAIT_D 0x20000000ul + +/* Configuration2 (output enable control) */ +/* Address output control */ +#define PDL_BSC_A9_A0_DISABLE 0x00000001ul +#define PDL_BSC_A9_A4_DISABLE 0x00000002ul +#define PDL_BSC_A9_A8_DISABLE 0x00000004ul +#define PDL_BSC_A10_DISABLE 0x00000008ul +#define PDL_BSC_A11_DISABLE 0x00000010ul +#define PDL_BSC_A12_DISABLE 0x00000020ul +#define PDL_BSC_A13_DISABLE 0x00000040ul +#define PDL_BSC_A14_DISABLE 0x00000080ul +#define PDL_BSC_A15_DISABLE 0x00000100ul +#define PDL_BSC_A16_DISABLE 0x00000200ul +#define PDL_BSC_A17_DISABLE 0x00000400ul +#define PDL_BSC_A18_DISABLE 0x00000800ul +#define PDL_BSC_A19_DISABLE 0x00001000ul +#define PDL_BSC_A20_DISABLE 0x00002000ul +#define PDL_BSC_A21_DISABLE 0x00004000ul +#define PDL_BSC_A22_DISABLE 0x00008000ul +#define PDL_BSC_A23_DISABLE 0x00010000ul + +/* SDRAM output control */ +#define PDL_BSC_SDRAM_PINS_DISABLE 0x00020000ul +#define PDL_BSC_SDRAM_PINS_ENABLE 0x00040000ul +#define PDL_BSC_SDRAM_DQM1_DISABLE 0x00080000ul +#define PDL_BSC_SDRAM_DQM1_ENABLE 0x00100000ul + + +/* Configuration3 (error control) */ +/* Error monitoring */ +#define PDL_BSC_ERROR_ILLEGAL_ADDRESS_ENABLE 0x01u +#define PDL_BSC_ERROR_ILLEGAL_ADDRESS_DISABLE 0x02u +#define PDL_BSC_ERROR_TIME_OUT_ENABLE 0x04u +#define PDL_BSC_ERROR_TIME_OUT_DISABLE 0x08u + +/* R_BSC_CreateArea parameter options */ +/* Configuration selection */ +/* Bus width */ +#define PDL_BSC_WIDTH_16 0x0001u +#define PDL_BSC_WIDTH_8 0x0002u +#define PDL_BSC_WIDTH_32 0x0004u + +/* Endian mode */ +#define PDL_BSC_ENDIAN_SAME 0x0008u +#define PDL_BSC_ENDIAN_OPPOSITE 0x0010u + +/* Write access mode */ +#define PDL_BSC_WRITE_BYTE 0x0020u +#define PDL_BSC_WRITE_SINGLE 0x0040u + +/* External wait control */ +#define PDL_BSC_WAIT_DISABLE 0x0080u +#define PDL_BSC_WAIT_ENABLE 0x0100u + +/* Page access control */ +#define PDL_BSC_PAGE_READ_DISABLE 0x0200u +#define PDL_BSC_PAGE_READ_NORMAL 0x0400u +#define PDL_BSC_PAGE_READ_CONTINUOUS 0x0800u +#define PDL_BSC_PAGE_WRITE_DISABLE 0x1000u +#define PDL_BSC_PAGE_WRITE_ENABLE 0x2000u + +/* R_BSC_Control parameter options */ +#define PDL_BSC_ERROR_CLEAR 0x0001u +#define PDL_BSC_SDRAM_INITIALIZATION 0x0002u +#define PDL_BSC_SDRAM_AUTO_REFRESH_ENABLE 0x0004u +#define PDL_BSC_SDRAM_AUTO_REFRESH_DISABLE 0x0008u +#define PDL_BSC_SDRAM_SELF_REFRESH_ENABLE 0x0010u +#define PDL_BSC_SDRAM_SELF_REFRESH_DISABLE 0x0020u +#define PDL_BSC_SDRAM_ENABLE 0x0040u +#define PDL_BSC_SDRAM_DISABLE 0x0080u +#define PDL_BSC_DISABLE_BUSERR_IRQ 0x0100u + +/* R_BSC_SDRAM_CreateArea parameter options */ +/* Configuration selection */ +/* Bus width */ +#define PDL_BSC_SDRAM_WIDTH_16 0x0001u +#define PDL_BSC_SDRAM_WIDTH_8 0x0002u +#define PDL_BSC_SDRAM_WIDTH_32 0x0004u + +/* Endian mode */ +#define PDL_BSC_SDRAM_ENDIAN_SAME 0x0008u +#define PDL_BSC_SDRAM_ENDIAN_OPPOSITE 0x0010u + +/* Continuous access mode */ +#define PDL_BSC_SDRAM_CONT_ACCESS_ENABLE 0x0020u +#define PDL_BSC_SDRAM_CONT_ACCESS_DISABLE 0x0040u + +/* Address multiplex selection */ +#define PDL_BSC_SDRAM_8_BIT_SHIFT 0x0080u +#define PDL_BSC_SDRAM_9_BIT_SHIFT 0x0100u +#define PDL_BSC_SDRAM_10_BIT_SHIFT 0x0200u +#define PDL_BSC_SDRAM_11_BIT_SHIFT 0x0400u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_bsc_rx62nxx.h b/bsp/rx/RPDL/r_pdl_bsc_rx62nxx.h new file mode 100644 index 0000000000..178d2bbdea --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_bsc_rx62nxx.h @@ -0,0 +1,129 @@ +/*""FILE COMMENT""******************************************************* +* System Name : BSC API for RX62N +* File Name : r_pdl_bsc_RX62Nxx.h +* Version : 1.02 +* Contents : BSC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_BSC_RX62Nxx_H +#define R_PDL_BSC_RX62Nxx_H + +#define BSC_AREAS 8 + +/* Callback function storage */ +extern VoidCallBackFunc rpdl_BSC_callback_func; + +/* Library prototypes */ +bool R_BSC_CreateAll( + const uint32_t, + const uint32_t, + const uint8_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_BSC_CreateAreaAll( + const uint8_t, + const uint16_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_BSC_SDRAM_CreateAreaAll( + const uint16_t, + const uint16_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint16_t +); +bool R_BSC_DestroyAll( + const uint8_t +); +bool R_BSC_ControlAll( + const uint16_t +); +bool R_BSC_GetStatusAll( + volatile uint8_t * const, + volatile uint16_t * const, + volatile uint8_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_BSC_Create(a, b, c, d, e) \ +( \ +( (e) <= IPL_MAX ) ? \ +R_BSC_CreateAll( (a), (b), (c), (d), (e) ) : \ +ReturnFalse() \ +) + +#define R_BSC_CreateArea(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) \ +( \ +( (a) < BSC_AREAS ) ? \ +R_BSC_CreateAreaAll( (a), (b), (c), (d), (e), (f), (g), (h), (i), (j), (k), (l), (m), (n), (o) ) : \ +ReturnFalse() \ +) + +#if defined (DEVICE_PACKAGE_LQFP_100) || defined (DEVICE_PACKAGE_TFLGA_85) +#define R_BSC_SDRAM_CreateArea(a, b, c, d, e, f, g, h, i, j, k, l) \ +( \ +ReturnFalse() \ +) +#else +#define R_BSC_SDRAM_CreateArea(a, b, c, d, e, f, g, h, i, j, k, l) \ +( \ +R_BSC_SDRAM_CreateAreaAll( (a), (b), (c), (d), (e), (f), (g), (h), (i), (j), (k), (l) ) \ +) +#endif + +#define R_BSC_Destroy(a) \ +( \ +( (a) < BSC_AREAS ) ? \ +R_BSC_DestroyAll( (a) ) : \ +ReturnFalse() \ +) + +#define R_BSC_Control(a) \ +( \ +R_BSC_ControlAll( (a) ) \ +) + +#define R_BSC_GetStatus(a, b, c) \ +( \ +R_BSC_GetStatusAll( (a), (b), (c) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_cgc.h b/bsp/rx/RPDL/r_pdl_cgc.h new file mode 100644 index 0000000000..e786942297 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_cgc.h @@ -0,0 +1,64 @@ +/*""FILE COMMENT""******************************************************* +* System Name : CGC API +* File Name : r_pdl_cgc.h +* Version : 1.02 +* Contents : CGC header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_CGC_H +#define R_PDL_CGC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_CGC_Set( + uint32_t, + uint32_t, + uint32_t, + uint32_t, + uint16_t +); + +bool R_CGC_Control( + uint16_t +); + +bool R_CGC_GetStatus( + uint8_t * +); + +/* BCLK pin putput control */ +#define PDL_CGC_BCLK_DISABLE 0x0001u +#define PDL_CGC_BCLK_DIV_1 0x0002u +#define PDL_CGC_BCLK_DIV_2 0x0004u +#define PDL_CGC_BCLK_HIGH 0x0008u + +/* SDCLK pin putput control */ +#define PDL_CGC_SDCLK_DISABLE 0x0010u +#define PDL_CGC_SDCLK_ENABLE 0x0020u + +/* Oscillation Stop Detection control */ +#define PDL_CGC_OSC_STOP_ENABLE 0x0040u +#define PDL_CGC_OSC_STOP_DISABLE 0x0080u + +/* Sub-clock oscillator control */ +#define PDL_CGC_SUB_CLOCK_ENABLE 0x0100u +#define PDL_CGC_SUB_CLOCK_DISABLE 0x0200u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_cgc_rx62nxx.h b/bsp/rx/RPDL/r_pdl_cgc_rx62nxx.h new file mode 100644 index 0000000000..33d85f2f55 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_cgc_rx62nxx.h @@ -0,0 +1,55 @@ +/*""FILE COMMENT""******************************************************* +* System Name : CGC API for RX62Nxx +* File Name : r_pdl_cgc_RX62Nxx.h +* Version : 1.02 +* Contents : CGC header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_CGC_RX62Nxx_H +#define R_PDL_CGC_RX62Nxx_H + +/* Library prototypes */ +bool R_CGC_SetAll( + const uint32_t, + const uint32_t, + const uint32_t, + const uint32_t, + const uint16_t +); + +bool R_CGC_ControlAll( + const uint16_t +); + +bool R_CGC_GetStatusAll( + volatile uint8_t * const +); + +/* Macro definitions */ + +#define R_CGC_Set(a, b, c, d, e) \ +R_CGC_SetAll( (a), (b), (c), (d), (e) ) + +#define R_CGC_Control(a) \ +R_CGC_ControlAll( (a) ) + +#define R_CGC_GetStatus(a) \ +R_CGC_GetStatusAll( (a) ) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_cmt.h b/bsp/rx/RPDL/r_pdl_cmt.h new file mode 100644 index 0000000000..6cf9ef1be9 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_cmt.h @@ -0,0 +1,83 @@ +/*""FILE COMMENT""******************************************************* +* System Name : CMT API for RX62Nxx +* File Name : r_pdl_cmt.h +* Version : 1.02 +* Contents : CMT API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_CMT_H +#define R_PDL_CMT_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_CMT_Create( + uint8_t, + uint16_t, + float, + void *, + uint8_t +); +bool R_CMT_CreateOneShot( + uint8_t, + uint16_t, + float, + void *, + uint8_t +); +bool R_CMT_Destroy( + uint8_t +); +bool R_CMT_Control( + uint8_t, + uint16_t, + float +); +bool R_CMT_Read( + uint8_t, + uint8_t *, + uint16_t * +); + +/* Timer counter control */ +#define PDL_CMT_STOP 0x0001u +#define PDL_CMT_START 0x0002u + +/* Calculation selection */ +#define PDL_CMT_PERIOD 0x0004u +#define PDL_CMT_FREQUENCY 0x0008u + +/* CPU control */ +#define PDL_CMT_CPU_ON 0x0010u +#define PDL_CMT_CPU_OFF 0x0020u + +/* DMAC / DTC trigger control */ +#define PDL_CMT_DMAC_DTC_TRIGGER_DISABLE 0x0040u +#define PDL_CMT_DMAC_TRIGGER_ENABLE 0x0080u +#define PDL_CMT_DTC_TRIGGER_ENABLE 0x0100u + +/* Direct register control */ +#define PDL_CMT_CONSTANT 0x0200u +#define PDL_CMT_COUNTER 0x0400u +#define PDL_CMT_PCLK_DIV_8 0x0800u +#define PDL_CMT_PCLK_DIV_32 0x1000u +#define PDL_CMT_PCLK_DIV_128 0x2000u +#define PDL_CMT_PCLK_DIV_512 0x4000u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_cmt_rx62nxx.h b/bsp/rx/RPDL/r_pdl_cmt_rx62nxx.h new file mode 100644 index 0000000000..ae425dca0c --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_cmt_rx62nxx.h @@ -0,0 +1,104 @@ +/*""FILE COMMENT""******************************************************* +* System Name : CMT API for RX62Nxx +* File Name : r_pdl_cmt_RX62Nxx.h +* Version : 1.02 +* Contents : CMT API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_CMT_RX62Nxx_H +#define R_PDL_CMT_RX62Nxx_H + +#define CMT_UNITS 2 +#define CMT_CHANNELS_PER_UNIT 2 +#define CMT_CHANNELS (uint8_t)(CMT_UNITS * CMT_CHANNELS_PER_UNIT) + +/* Callback function storage */ +extern VoidCallBackFunc rpdl_CMT_callback_func[CMT_CHANNELS]; + +/* Global variables */ +extern volatile uint8_t rpdl_CMT_one_shot[CMT_CHANNELS]; + +/* Library prototypes */ +bool R_CMT_CreateAll( + const uint8_t, + const uint16_t, + const float, + VoidCallBackFunc const, + const uint8_t +); +bool R_CMT_CreateOneShotAll( + const uint8_t, + const uint16_t, + const float, + VoidCallBackFunc const, + const uint8_t +); +bool R_CMT_DestroyAll( + const uint8_t +); +bool R_CMT_ControlAll( + const uint8_t, + const uint16_t, + const float +); +bool R_CMT_ReadAll( + const uint8_t, + volatile uint8_t * const, + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_CMT_Create(a, b, c, d, e) \ +( \ +( ( ((a) < CMT_CHANNELS ) && ((e) <= IPL_MAX) ) ) ? \ +R_CMT_CreateAll( (a), (b), (c), (d), (e) ) : \ +ReturnFalse() \ +) + +#define R_CMT_CreateOneShot(a, b, c, d, e) \ +( \ +( ( ((a) < CMT_CHANNELS ) && ((e) <= IPL_MAX) ) ) ? \ +R_CMT_CreateOneShotAll( (a), (b), (c), (d), (e) ) : \ +ReturnFalse() \ +) + +#define R_CMT_Destroy(a) \ +( \ +( (a) < CMT_UNITS ) ? \ +R_CMT_DestroyAll( (a) ) : \ +ReturnFalse() \ +) + +#define R_CMT_Control(a, b, c) \ +( \ +( (a) < CMT_CHANNELS ) ? \ +R_CMT_ControlAll( (a), (b), (c) ) : \ +ReturnFalse() \ +) + +#define R_CMT_Read(a, b, c) \ +( \ +( (a) < CMT_CHANNELS ) ? \ +R_CMT_ReadAll( (a), (b), (c) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_common_defs_rx62nxx.h b/bsp/rx/RPDL/r_pdl_common_defs_rx62nxx.h new file mode 100644 index 0000000000..13fcd8296e --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_common_defs_rx62nxx.h @@ -0,0 +1,315 @@ +/*""FILE COMMENT""******************************************************* +* System Name : API for RX62Nxx +* File Name : r_pdl_common_defs_RX62Nxx.h +* Version : 1.02 +* Contents : API common definitions +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_COMMON_DEFS_RX62Nxx_H +#define R_PDL_COMMON_DEFS_RX62Nxx_H + +#include +#include +#include +#include +#include + +/* Callback function type */ +typedef void (* VoidCallBackFunc)(void); + +/* The supported MCU group */ +#define PDL_MCU_GROUP RX62N + +/* The highest interrupt priority level */ +#define IPL_MAX 15 + +/* Use the I/O register area to indicate that a callback function pointer is not to be used */ +#define PDL_NO_FUNC (VoidCallBackFunc)0x00080000ul +/* Use the ROM area to indicate that a data pointer is not to be used */ +#define PDL_NO_PTR (void *)0xFFFFFFFCul +/* When no parameters options are required */ +#define PDL_NO_DATA 0 + +/* Shared global variables */ +extern volatile uint32_t rpdl_CGC_f_pclk; +extern volatile uint32_t rpdl_CGC_f_iclk; +extern volatile uint32_t rpdl_CGC_f_bclk; +extern volatile uint8_t rpdl_INTC_brk_command; +extern volatile uint8_t rpdl_INTC_brk_data8; +extern volatile uint32_t rpdl_INTC_saved_isp; + +/* Shared functions */ +uint8_t rpdl_DMAC_get_channel(const uint8_t); + +/* Utility functions */ +uint8_t rpdl_BCD8_to_dec(const uint8_t); +uint16_t rpdl_BCD16_to_dec(const uint16_t); +bool rpdl_common_BCD8_check(const uint8_t); +bool rpdl_common_BCD16_check(const uint16_t); +bool rpdl_common_BCD32_check(const uint32_t); + +/* BRK handler command options */ +typedef enum { + BRK_NO_COMMAND, + BRK_START_ADC_10, + BRK_START_ADC_10_AND_SLEEP, + BRK_SLEEP, + BRK_ALL_MODULE_CLOCK_STOP, + BRK_STANDBY, + BRK_DEEP_STANDBY, + BRK_LOAD_FINTV_REGISTER, + BRK_WRITE_IPL, + BRK_CMT_START, + BRK_CMT_STOP +} brk_commands; + +/* Bit definitions */ +#define BIT_0 0x00000001ul +#define BIT_1 0x00000002ul +#define BIT_2 0x00000004ul +#define BIT_3 0x00000008ul +#define BIT_4 0x00000010ul +#define BIT_5 0x00000020ul +#define BIT_6 0x00000040ul +#define BIT_7 0x00000080ul +#define BIT_8 0x00000100ul +#define BIT_9 0x00000200ul +#define BIT_10 0x00000400ul +#define BIT_11 0x00000800ul +#define BIT_12 0x00001000ul +#define BIT_13 0x00002000ul +#define BIT_14 0x00004000ul +#define BIT_15 0x00008000ul +#define BIT_16 0x00010000ul +#define BIT_17 0x00020000ul +#define BIT_18 0x00040000ul +#define BIT_19 0x00080000ul +#define BIT_20 0x00100000ul +#define BIT_21 0x00200000ul +#define BIT_22 0x00400000ul +#define BIT_23 0x00800000ul +#define BIT_24 0x01000000ul +#define BIT_25 0x02000000ul +#define BIT_26 0x04000000ul +#define BIT_27 0x08000000ul +#define BIT_28 0x10000000ul +#define BIT_29 0x20000000ul +#define BIT_30 0x40000000ul +#define BIT_31 0x80000000ul + +#define INV_BIT_0 0xFFFFFFFEul +#define INV_BIT_1 0xFFFFFFFDul +#define INV_BIT_2 0xFFFFFFFBul +#define INV_BIT_3 0xFFFFFFF7ul +#define INV_BIT_4 0xFFFFFFEFul +#define INV_BIT_5 0xFFFFFFDFul +#define INV_BIT_6 0xFFFFFFBFul +#define INV_BIT_7 0xFFFFFF7Ful +#define INV_BIT_8 0xFFFFFEFFul +#define INV_BIT_9 0xFFFFFDFFul +#define INV_BIT_10 0xFFFFFBFFul +#define INV_BIT_11 0xFFFFF7FFul +#define INV_BIT_12 0xFFFFEFFFul +#define INV_BIT_13 0xFFFFDFFFul +#define INV_BIT_14 0xFFFFBFFFul +#define INV_BIT_15 0xFFFF7FFFul +#define INV_BIT_16 0xFFFEFFFFul +#define INV_BIT_17 0xFFFDFFFFul +#define INV_BIT_18 0xFFFBFFFFul +#define INV_BIT_19 0xFFF7FFFFul +#define INV_BIT_20 0xFFEFFFFFul +#define INV_BIT_21 0xFFDFFFFFul +#define INV_BIT_22 0xFFBFFFFFul +#define INV_BIT_23 0xFF7FFFFFul +#define INV_BIT_24 0xFEFFFFFFul +#define INV_BIT_25 0xFDFFFFFFul +#define INV_BIT_26 0xFBFFFFFFul +#define INV_BIT_27 0xF7FFFFFFul +#define INV_BIT_28 0xEFFFFFFFul +#define INV_BIT_29 0xDFFFFFFFul +#define INV_BIT_30 0xBFFFFFFFul +#define INV_BIT_31 0x7FFFFFFFul + +/* Interrupt vector numbers */ +#define PDL_INTC_VECTOR_BUSERR VECT_BSC_BUSERR +#define PDL_INTC_VECTOR_FIFERR VECT_FCU_FIFERR +#define PDL_INTC_VECTOR_FRDYI VECT_FCU_FRDYI +#define PDL_INTC_VECTOR_SWINT VECT_ICU_SWINT +#define PDL_INTC_VECTOR_CMT0 VECT_CMT0_CMI0 +#define PDL_INTC_VECTOR_CMT1 VECT_CMT1_CMI1 +#define PDL_INTC_VECTOR_CMT2 VECT_CMT2_CMI2 +#define PDL_INTC_VECTOR_CMT3 VECT_CMT3_CMI3 +#define PDL_INTC_VECTOR_EINT VECT_ETHER_EINT +#define PDL_INTC_VECTOR_D0FIFO0 VECT_USB0_D0FIFO0 +#define PDL_INTC_VECTOR_D1FIFO0 VECT_USB0_D1FIFO0 +#define PDL_INTC_VECTOR_USBI0 VECT_USB0_USBI0 +#define PDL_INTC_VECTOR_USBR0 VECT_USB_USBR0 +#define PDL_INTC_VECTOR_D0FIFO1 VECT_USB1_D0FIFO1 +#define PDL_INTC_VECTOR_D1FIFO1 VECT_USB1_D1FIFO1 +#define PDL_INTC_VECTOR_USBI1 VECT_USB1_USBI1 +#define PDL_INTC_VECTOR_USBR1 VECT_USB_USBR1 +#define PDL_INTC_VECTOR_SPEI0 VECT_RSPI0_SPEI0 +#define PDL_INTC_VECTOR_SPRI0 VECT_RSPI0_SPRI0 +#define PDL_INTC_VECTOR_SPTI0 VECT_RSPI0_SPTI0 +#define PDL_INTC_VECTOR_SPII0 VECT_RSPI0_SPII0 +#define PDL_INTC_VECTOR_SPEI1 VECT_RSPI1_SPEI1 +#define PDL_INTC_VECTOR_SPRI1 VECT_RSPI1_SPRI1 +#define PDL_INTC_VECTOR_SPTI1 VECT_RSPI1_SPTI1 +#define PDL_INTC_VECTOR_SPII1 VECT_RSPI1_SPII1 +#define PDL_INTC_VECTOR_ERS0 VECT_CAN0_ERS0 +#define PDL_INTC_VECTOR_RXF0 VECT_CAN0_RXF0 +#define PDL_INTC_VECTOR_TXF0 VECT_CAN0_TXF0 +#define PDL_INTC_VECTOR_RXM0 VECT_CAN0_RXM0 +#define PDL_INTC_VECTOR_TXM0 VECT_CAN0_TXM0 +#define PDL_INTC_VECTOR_PRD VECT_RTC_PRD +#define PDL_INTC_VECTOR_CUP VECT_RTC_CUP +#define PDL_INTC_VECTOR_ALM VECT_RTC_ALM +#define PDL_INTC_VECTOR_IRQ0 VECT_ICU_IRQ0 +#define PDL_INTC_VECTOR_IRQ1 VECT_ICU_IRQ1 +#define PDL_INTC_VECTOR_IRQ2 VECT_ICU_IRQ2 +#define PDL_INTC_VECTOR_IRQ3 VECT_ICU_IRQ3 +#define PDL_INTC_VECTOR_IRQ4 VECT_ICU_IRQ4 +#define PDL_INTC_VECTOR_IRQ5 VECT_ICU_IRQ5 +#define PDL_INTC_VECTOR_IRQ6 VECT_ICU_IRQ6 +#define PDL_INTC_VECTOR_IRQ7 VECT_ICU_IRQ7 +#define PDL_INTC_VECTOR_IRQ8 VECT_ICU_IRQ8 +#define PDL_INTC_VECTOR_IRQ9 VECT_ICU_IRQ9 +#define PDL_INTC_VECTOR_IRQ10 VECT_ICU_IRQ10 +#define PDL_INTC_VECTOR_IRQ11 VECT_ICU_IRQ11 +#define PDL_INTC_VECTOR_IRQ12 VECT_ICU_IRQ12 +#define PDL_INTC_VECTOR_IRQ13 VECT_ICU_IRQ13 +#define PDL_INTC_VECTOR_IRQ14 VECT_ICU_IRQ14 +#define PDL_INTC_VECTOR_IRQ15 VECT_ICU_IRQ15 +#define PDL_INTC_VECTOR_WOVI VECT_WDT_WOVI +#define PDL_INTC_VECTOR_ADI0 VECT_AD0_ADI0 +#define PDL_INTC_VECTOR_ADI1 VECT_AD1_ADI1 +#define PDL_INTC_VECTOR_ADI12_0 VECT_S12AD_ADI +#define PDL_INTC_VECTOR_TGIA0 VECT_MTU0_TGIA0 +#define PDL_INTC_VECTOR_TGIB0 VECT_MTU0_TGIB0 +#define PDL_INTC_VECTOR_TGIC0 VECT_MTU0_TGIC0 +#define PDL_INTC_VECTOR_TGID0 VECT_MTU0_TGID0 +#define PDL_INTC_VECTOR_TCIV0 VECT_MTU0_TCIV0 +#define PDL_INTC_VECTOR_TGIE0 VECT_MTU0_TGIE0 +#define PDL_INTC_VECTOR_TGIF0 VECT_MTU0_TGIF0 +#define PDL_INTC_VECTOR_TGIA1 VECT_MTU1_TGIA1 +#define PDL_INTC_VECTOR_TGIB1 VECT_MTU1_TGIB1 +#define PDL_INTC_VECTOR_TCIV1 VECT_MTU1_TCIV1 +#define PDL_INTC_VECTOR_TCIU1 VECT_MTU1_TCIU1 +#define PDL_INTC_VECTOR_TGIA2 VECT_MTU2_TGIA2 +#define PDL_INTC_VECTOR_TGIB2 VECT_MTU2_TGIB2 +#define PDL_INTC_VECTOR_TCIV2 VECT_MTU2_TCIV2 +#define PDL_INTC_VECTOR_TCIU2 VECT_MTU2_TCIU2 +#define PDL_INTC_VECTOR_TGIA3 VECT_MTU3_TGIA3 +#define PDL_INTC_VECTOR_TGIB3 VECT_MTU3_TGIB3 +#define PDL_INTC_VECTOR_TGIC3 VECT_MTU3_TGIC3 +#define PDL_INTC_VECTOR_TGID3 VECT_MTU3_TGID3 +#define PDL_INTC_VECTOR_TCIV3 VECT_MTU3_TCIV3 +#define PDL_INTC_VECTOR_TGIA4 VECT_MTU4_TGIA4 +#define PDL_INTC_VECTOR_TGIB4 VECT_MTU4_TGIB4 +#define PDL_INTC_VECTOR_TGIC4 VECT_MTU4_TGIC4 +#define PDL_INTC_VECTOR_TGID4 VECT_MTU4_TGID4 +#define PDL_INTC_VECTOR_TCIV4 VECT_MTU4_TCIV4 +#define PDL_INTC_VECTOR_TGIU5 VECT_MTU5_TGIU5 +#define PDL_INTC_VECTOR_TGIV5 VECT_MTU5_TGIV5 +#define PDL_INTC_VECTOR_TGIW5 VECT_MTU5_TGIW5 +#define PDL_INTC_VECTOR_TGIA6 VECT_MTU6_TGIA6 +#define PDL_INTC_VECTOR_TGIB6 VECT_MTU6_TGIB6 +#define PDL_INTC_VECTOR_TGIC6 VECT_MTU6_TGIC6 +#define PDL_INTC_VECTOR_TGID6 VECT_MTU6_TGID6 +#define PDL_INTC_VECTOR_TCIV6 VECT_MTU6_TCIV6 +#define PDL_INTC_VECTOR_TGIE6 VECT_MTU6_TGIE6 +#define PDL_INTC_VECTOR_TGIF6 VECT_MTU6_TGIF6 +#define PDL_INTC_VECTOR_TGIA7 VECT_MTU7_TGIA7 +#define PDL_INTC_VECTOR_TGIB7 VECT_MTU7_TGIB7 +#define PDL_INTC_VECTOR_TCIV7 VECT_MTU7_TCIV7 +#define PDL_INTC_VECTOR_TCIU7 VECT_MTU7_TCIU7 +#define PDL_INTC_VECTOR_TGIA8 VECT_MTU8_TGIA8 +#define PDL_INTC_VECTOR_TGIB8 VECT_MTU8_TGIB8 +#define PDL_INTC_VECTOR_TCIV8 VECT_MTU8_TCIV8 +#define PDL_INTC_VECTOR_TCIU8 VECT_MTU8_TCIU8 +#define PDL_INTC_VECTOR_TGIA9 VECT_MTU9_TGIA9 +#define PDL_INTC_VECTOR_TGIB9 VECT_MTU9_TGIB9 +#define PDL_INTC_VECTOR_TGIC9 VECT_MTU9_TGIC9 +#define PDL_INTC_VECTOR_TGID9 VECT_MTU9_TGID9 +#define PDL_INTC_VECTOR_TCIV9 VECT_MTU9_TCIV9 +#define PDL_INTC_VECTOR_TGIA10 VECT_MTU10_TGIA10 +#define PDL_INTC_VECTOR_TGIB10 VECT_MTU10_TGIB10 +#define PDL_INTC_VECTOR_TGIC10 VECT_MTU10_TGIC10 +#define PDL_INTC_VECTOR_TGID10 VECT_MTU10_TGID10 +#define PDL_INTC_VECTOR_TCIV10 VECT_MTU10_TCIV10 +#define PDL_INTC_VECTOR_TGIU11 VECT_MTU11_TGIU11 +#define PDL_INTC_VECTOR_TGIV11 VECT_MTU11_TGIV11 +#define PDL_INTC_VECTOR_TGIW11 VECT_MTU11_TGIW11 +#define PDL_INTC_VECTOR_OEI1 VECT_POE_OEI1 +#define PDL_INTC_VECTOR_OEI2 VECT_POE_OEI2 +#define PDL_INTC_VECTOR_OEI3 VECT_POE_OEI3 +#define PDL_INTC_VECTOR_OEI4 VECT_POE_OEI4 +#define PDL_INTC_VECTOR_CMIA0 VECT_TMR0_CMIA0 +#define PDL_INTC_VECTOR_CMIB0 VECT_TMR0_CMIB0 +#define PDL_INTC_VECTOR_OVI0 VECT_TMR0_OVI0 +#define PDL_INTC_VECTOR_CMIA1 VECT_TMR1_CMIA1 +#define PDL_INTC_VECTOR_CMIB1 VECT_TMR1_CMIB1 +#define PDL_INTC_VECTOR_OVI1 VECT_TMR1_OVI1 +#define PDL_INTC_VECTOR_CMIA2 VECT_TMR2_CMIA2 +#define PDL_INTC_VECTOR_CMIB2 VECT_TMR2_CMIB2 +#define PDL_INTC_VECTOR_OVI2 VECT_TMR2_OVI2 +#define PDL_INTC_VECTOR_CMIA3 VECT_TMR3_CMIA3 +#define PDL_INTC_VECTOR_CMIB3 VECT_TMR3_CMIB3 +#define PDL_INTC_VECTOR_OVI3 VECT_TMR3_OVI3 +#define PDL_INTC_VECTOR_DMAC0I VECT_DMAC_DMAC0I +#define PDL_INTC_VECTOR_DMAC1I VECT_DMAC_DMAC1I +#define PDL_INTC_VECTOR_DMAC2I VECT_DMAC_DMAC2I +#define PDL_INTC_VECTOR_DMAC3I VECT_DMAC_DMAC3I +#define PDL_INTC_VECTOR_EXDMAC0I VECT_EXDMAC_EXDMAC0I +#define PDL_INTC_VECTOR_EXDMAC1I VECT_EXDMAC_EXDMAC1I +#define PDL_INTC_VECTOR_ERI0 VECT_SCI0_ERI0 +#define PDL_INTC_VECTOR_RXI0 VECT_SCI0_RXI0 +#define PDL_INTC_VECTOR_TXI0 VECT_SCI0_TXI0 +#define PDL_INTC_VECTOR_TEI0 VECT_SCI0_TEI0 +#define PDL_INTC_VECTOR_ERI1 VECT_SCI1_ERI1 +#define PDL_INTC_VECTOR_RXI1 VECT_SCI1_RXI1 +#define PDL_INTC_VECTOR_TXI1 VECT_SCI1_TXI1 +#define PDL_INTC_VECTOR_TEI1 VECT_SCI1_TEI1 +#define PDL_INTC_VECTOR_ERI2 VECT_SCI2_ERI2 +#define PDL_INTC_VECTOR_RXI2 VECT_SCI2_RXI2 +#define PDL_INTC_VECTOR_TXI2 VECT_SCI2_TXI2 +#define PDL_INTC_VECTOR_TEI2 VECT_SCI2_TEI2 +#define PDL_INTC_VECTOR_ERI3 VECT_SCI3_ERI3 +#define PDL_INTC_VECTOR_RXI3 VECT_SCI3_RXI3 +#define PDL_INTC_VECTOR_TXI3 VECT_SCI3_TXI3 +#define PDL_INTC_VECTOR_TEI3 VECT_SCI3_TEI3 +#define PDL_INTC_VECTOR_ERI5 VECT_SCI5_ERI5 +#define PDL_INTC_VECTOR_RXI5 VECT_SCI5_RXI5 +#define PDL_INTC_VECTOR_TXI5 VECT_SCI5_TXI5 +#define PDL_INTC_VECTOR_TEI5 VECT_SCI5_TEI5 +#define PDL_INTC_VECTOR_ERI6 VECT_SCI6_ERI6 +#define PDL_INTC_VECTOR_RXI6 VECT_SCI6_RXI6 +#define PDL_INTC_VECTOR_TXI6 VECT_SCI6_TXI6 +#define PDL_INTC_VECTOR_TEI6 VECT_SCI6_TEI6 +#define PDL_INTC_VECTOR_ICEEI0 VECT_RIIC0_ICEEI0 +#define PDL_INTC_VECTOR_ICRXI0 VECT_RIIC0_ICRXI0 +#define PDL_INTC_VECTOR_ICTXI0 VECT_RIIC0_ICTXI0 +#define PDL_INTC_VECTOR_ICTEI0 VECT_RIIC0_ICTEI0 +#define PDL_INTC_VECTOR_ICEEI1 VECT_RIIC1_ICEEI1 +#define PDL_INTC_VECTOR_ICRXI1 VECT_RIIC1_ICRXI1 +#define PDL_INTC_VECTOR_ICTXI1 VECT_RIIC1_ICTXI1 +#define PDL_INTC_VECTOR_ICTEI1 VECT_RIIC1_ICTEI1 + +#endif + +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_crc.h b/bsp/rx/RPDL/r_pdl_crc.h new file mode 100644 index 0000000000..2df1329812 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_crc.h @@ -0,0 +1,57 @@ +/*""FILE COMMENT""******************************************************* +* System Name : CRC calculator API for RX62Nxx +* File Name : r_pdl_crc.h +* Version : 1.02 +* Contents : CRC function prototypes +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_CRC_H +#define R_PDL_CRC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_CRC_Create( + uint8_t +); +bool R_CRC_Destroy( + void +); +bool R_CRC_Write( + uint8_t +); +bool R_CRC_Read( + uint8_t, + uint16_t * +); + +/* Polynomial selection */ +#define PDL_CRC_POLY_CRC_8 0x01u +#define PDL_CRC_POLY_CRC_16 0x02u +#define PDL_CRC_POLY_CRC_CCITT 0x04u + +/* Bit order */ +#define PDL_CRC_LSB_FIRST 0x08u +#define PDL_CRC_MSB_FIRST 0x10u + +/* Result register clearing */ +#define PDL_CRC_CLEAR_RESULT 0x01u +#define PDL_CRC_RETAIN_RESULT 0x02u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_crc_rx62nxx.h b/bsp/rx/RPDL/r_pdl_crc_rx62nxx.h new file mode 100644 index 0000000000..183c489acd --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_crc_rx62nxx.h @@ -0,0 +1,64 @@ +/*""FILE COMMENT""******************************************************* +* System Name : CRC calculator API for RX62Nxx +* File Name : r_pdl_crc_RX62Nxx.h +* Version : 1.02 +* Contents : CRC header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_CRC_RX62Nxx_H +#define R_PDL_CRC_RX62Nxx_H + +/* Library prototypes */ +bool R_CRC_CreateAll( + const uint8_t +); +bool R_CRC_DestroyAll( + void +); +bool R_CRC_WriteAll( + const uint8_t +); +bool R_CRC_ReadAll( + const uint8_t, + volatile uint16_t * const +); + +/* Macro definitions */ + +#define R_CRC_Create(a) \ +( \ +R_CRC_CreateAll( (a) ) \ +) + +#define R_CRC_Destroy() \ +( \ +R_CRC_DestroyAll() \ +) + +#define R_CRC_Write(a) \ +( \ +R_CRC_WriteAll( (a) ) \ +) + +#define R_CRC_Read(a, b) \ +( \ +R_CRC_ReadAll( (a), (b) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_dac_10.h b/bsp/rx/RPDL/r_pdl_dac_10.h new file mode 100644 index 0000000000..3c281bd4dd --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_dac_10.h @@ -0,0 +1,52 @@ +/*""FILE COMMENT""******************************************************* +* System Name : DAC API for RX62Nxx +* File Name : r_pdl_dac_10.h +* Version : 1.02 +* Contents : CRC function prototypes +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_DAC_H +#define R_PDL_DAC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_DAC_10_Create( + uint8_t, + uint16_t, + uint16_t +); +bool R_DAC_10_Destroy( + uint8_t +); +bool R_DAC_10_Write( + uint8_t, + uint16_t, + uint16_t +); + +/* Channel selection */ +#define PDL_DAC_10_CHANNEL_0 0x01u +#define PDL_DAC_10_CHANNEL_1 0x02u + +/* Data alignment */ +#define PDL_DAC_10_ALIGN_LEFT 0x04u +#define PDL_DAC_10_ALIGN_RIGHT 0x08u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_dac_10_rx62nxx.h b/bsp/rx/RPDL/r_pdl_dac_10_rx62nxx.h new file mode 100644 index 0000000000..968392e60a --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_dac_10_rx62nxx.h @@ -0,0 +1,59 @@ +/*""FILE COMMENT""******************************************************* +* System Name : DAC API for RX62Nxx +* File Name : r_pdl_dac_10_RX62Nxx.h +* Version : 1.02 +* Contents : DAC header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_DAC_RX62Nxx_H +#define R_PDL_DAC_RX62Nxx_H + +/* Library prototypes */ +bool R_DAC_10_CreateAll( + const uint8_t, + const uint16_t, + const uint16_t +); +bool R_DAC_10_DestroyAll( + const uint8_t +); +bool R_DAC_10_WriteAll( + const uint8_t, + const uint16_t, + const uint16_t +); + +/* Macro definitions */ + +#define R_DAC_10_Create(a, b, c) \ +( \ +R_DAC_10_CreateAll( (a), (b), (c) ) \ +) + +#define R_DAC_10_Destroy(a) \ +( \ +R_DAC_10_DestroyAll( (a) ) \ +) + +#define R_DAC_10_Write(a, b, c) \ +( \ +R_DAC_10_WriteAll( (a), (b), (c) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_definitions.h b/bsp/rx/RPDL/r_pdl_definitions.h new file mode 100644 index 0000000000..cc13872108 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_definitions.h @@ -0,0 +1,59 @@ +/*""FILE COMMENT""******************************************************* +* System Name : PDL driver API +* File Name : r_pdl_definitions.h +* Version : 1.02 +* Contents : API headers for RX62N (100-pin package) +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_DEFS_H +#define R_PDL_DEFS_H + +#define PDL_VERSION 0x0102u /* v01.02 in BCD format */ +#define DEVICE_PACKAGE_LQFP_100 + +/* Peripiherals that are common to all device packages */ +#include "r_pdl_adc_10_RX62Nxx.h" +#include "r_pdl_adc_12_RX62Nxx.h" +#include "r_pdl_bsc_RX62Nxx.h" +#include "r_pdl_cgc_RX62Nxx.h" +#include "r_pdl_cmt_RX62Nxx.h" +#include "r_pdl_crc_RX62Nxx.h" +#include "r_pdl_dac_10_RX62Nxx.h" +#include "r_pdl_dmac_RX62Nxx.h" +#include "r_pdl_dtc_RX62Nxx.h" +#include "r_pdl_intc_RX62Nxx.h" +#include "r_pdl_iwdt_RX62Nxx.h" +#include "r_pdl_lpc_RX62Nxx.h" +#include "r_pdl_lvd_RX62Nxx.h" +#include "r_pdl_mcu_RX62Nxx.h" +#include "r_pdl_mtu2_RX62Nxx.h" +#include "r_pdl_pfc_RX62Nxx.h" +#include "r_pdl_poe_RX62Nxx.h" +#include "r_pdl_ppg_RX62Nxx.h" +#include "r_pdl_rtc_RX62Nxx.h" +#include "r_pdl_sci_RX62Nxx.h" +#include "r_pdl_spi_RX62Nxx.h" +#include "r_pdl_tmr_RX62Nxx.h" +#include "r_pdl_wdt_RX62Nxx.h" + +/* Peripiherals that are device package-dependent */ +#include "r_pdl_iic_RX62NxFP.h" +#include "r_pdl_io_port_RX62NxFP.h" + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_dmac.h b/bsp/rx/RPDL/r_pdl_dmac.h new file mode 100644 index 0000000000..818f0b8d84 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_dmac.h @@ -0,0 +1,174 @@ +/*""FILE COMMENT""******************************************************* +* System Name : DMAC API for RX62Nxx +* File Name : r_pdl_dmac.h +* Version : 1.02 +* Contents : DMAC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_DMAC_H +#define R_PDL_DMAC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_DMAC_Create( + uint8_t, + uint32_t, + uint8_t, + void *, + void *, + uint16_t, + uint16_t, + int32_t, + uint32_t, + uint32_t, + void *, + uint8_t +); +bool R_DMAC_Destroy( + uint8_t +); +bool R_DMAC_Control( + uint8_t, + uint16_t, + void *, + void *, + uint16_t, + uint16_t, + int32_t, + uint32_t, + uint32_t +); +bool R_DMAC_GetStatus( + uint8_t, + uint8_t *, + uint32_t *, + uint32_t *, + uint16_t *, + uint16_t * +); + +/* Transfer mode selection */ +#define PDL_DMAC_NORMAL 0x00000001ul +#define PDL_DMAC_REPEAT 0x00000002ul +#define PDL_DMAC_BLOCK 0x00000004ul +#define PDL_DMAC_SOURCE 0x00000008ul +#define PDL_DMAC_DESTINATION 0x00000010ul + +/* Address addition direction selection */ +#define PDL_DMAC_SOURCE_ADDRESS_FIXED 0x00000020ul +#define PDL_DMAC_SOURCE_ADDRESS_PLUS 0x00000040ul +#define PDL_DMAC_SOURCE_ADDRESS_MINUS 0x00000080ul +#define PDL_DMAC_SOURCE_ADDRESS_OFFSET 0x00000100ul +#define PDL_DMAC_DESTINATION_ADDRESS_FIXED 0x00000200ul +#define PDL_DMAC_DESTINATION_ADDRESS_PLUS 0x00000400ul +#define PDL_DMAC_DESTINATION_ADDRESS_MINUS 0x00000800ul +#define PDL_DMAC_DESTINATION_ADDRESS_OFFSET 0x00001000ul + +/* Transfer data size */ +#define PDL_DMAC_SIZE_8 0x00002000ul +#define PDL_DMAC_SIZE_16 0x00004000ul +#define PDL_DMAC_SIZE_32 0x00008000ul + +/* Interrupt generation */ +#define PDL_DMAC_IRQ_END 0x00010000ul +#define PDL_DMAC_IRQ_ESCAPE_END 0x00020000ul +#define PDL_DMAC_IRQ_REPEAT_SIZE_END 0x00040000ul +#define PDL_DMAC_IRQ_EXT_SOURCE 0x00080000ul +#define PDL_DMAC_IRQ_EXT_DESTINATION 0x00100000ul + +/* Start trigger forwarding */ +#define PDL_DMAC_TRIGGER_CLEAR 0x00200000ul +#define PDL_DMAC_TRIGGER_FORWARD 0x00400000ul + +/* DTC trigger control */ +#define PDL_DMAC_DTC_TRIGGER_DISABLE 0x00800000ul +#define PDL_DMAC_DTC_TRIGGER_ENABLE 0x01000000ul + +/* DMAC activation source */ +#define PDL_DMAC_TRIGGER_SW 0x00u +#define PDL_DMAC_TRIGGER_CMT0 VECT_CMT0_CMI0 +#define PDL_DMAC_TRIGGER_CMT1 VECT_CMT1_CMI1 +#define PDL_DMAC_TRIGGER_CMT2 VECT_CMT2_CMI2 +#define PDL_DMAC_TRIGGER_CMT3 VECT_CMT3_CMI3 +#define PDL_DMAC_TRIGGER_USB0_D0 VECT_USB0_D0FIFO0 +#define PDL_DMAC_TRIGGER_USB0_D1 VECT_USB0_D1FIFO0 +#define PDL_DMAC_TRIGGER_USB1_D0 VECT_USB1_D0FIFO1 +#define PDL_DMAC_TRIGGER_USB1_D1 VECT_USB1_D1FIFO1 +#define PDL_DMAC_TRIGGER_SPI0_RX VECT_RSPI0_SPRI0 +#define PDL_DMAC_TRIGGER_SPI0_TX VECT_RSPI0_SPTI0 +#define PDL_DMAC_TRIGGER_SPI1_RX VECT_RSPI1_SPRI1 +#define PDL_DMAC_TRIGGER_SPI1_TX VECT_RSPI1_SPTI1 +#define PDL_DMAC_TRIGGER_IRQ0 VECT_ICU_IRQ0 +#define PDL_DMAC_TRIGGER_IRQ1 VECT_ICU_IRQ1 +#define PDL_DMAC_TRIGGER_IRQ2 VECT_ICU_IRQ2 +#define PDL_DMAC_TRIGGER_IRQ3 VECT_ICU_IRQ3 +#define PDL_DMAC_TRIGGER_ADC10_0 VECT_AD0_ADI0 +#define PDL_DMAC_TRIGGER_ADC10_1 VECT_AD1_ADI1 +#define PDL_DMAC_TRIGGER_ADC12 VECT_S12AD_ADI +#define PDL_DMAC_TRIGGER_MTU0 VECT_MTU0_TGIA0 +#define PDL_DMAC_TRIGGER_MTU1 VECT_MTU1_TGIA1 +#define PDL_DMAC_TRIGGER_MTU2 VECT_MTU2_TGIA2 +#define PDL_DMAC_TRIGGER_MTU3 VECT_MTU3_TGIA3 +#define PDL_DMAC_TRIGGER_MTU4 VECT_MTU4_TGIA4 +#define PDL_DMAC_TRIGGER_MTU6 VECT_MTU6_TGIA6 +#define PDL_DMAC_TRIGGER_MTU7 VECT_MTU7_TGIA7 +#define PDL_DMAC_TRIGGER_MTU8 VECT_MTU8_TGIA8 +#define PDL_DMAC_TRIGGER_MTU9 VECT_MTU9_TGIA9 +#define PDL_DMAC_TRIGGER_MTU10 VECT_MTU10_TGIA10 +#define PDL_DMAC_TRIGGER_SCI0_RX VECT_SCI0_RXI0 +#define PDL_DMAC_TRIGGER_SCI0_TX VECT_SCI0_TXI0 +#define PDL_DMAC_TRIGGER_SCI1_RX VECT_SCI1_RXI1 +#define PDL_DMAC_TRIGGER_SCI1_TX VECT_SCI1_TXI1 +#define PDL_DMAC_TRIGGER_SCI2_RX VECT_SCI2_RXI2 +#define PDL_DMAC_TRIGGER_SCI2_TX VECT_SCI2_TXI2 +#define PDL_DMAC_TRIGGER_SCI3_RX VECT_SCI3_RXI3 +#define PDL_DMAC_TRIGGER_SCI3_TX VECT_SCI3_TXI3 +#define PDL_DMAC_TRIGGER_SCI5_RX VECT_SCI5_RXI5 +#define PDL_DMAC_TRIGGER_SCI5_TX VECT_SCI5_TXI5 +#define PDL_DMAC_TRIGGER_SCI6_RX VECT_SCI6_RXI6 +#define PDL_DMAC_TRIGGER_SCI6_TX VECT_SCI6_TXI6 +#define PDL_DMAC_TRIGGER_IIC0_RX VECT_RIIC0_ICRXI0 +#define PDL_DMAC_TRIGGER_IIC0_TX VECT_RIIC0_ICTXI0 +#define PDL_DMAC_TRIGGER_IIC1_RX VECT_RIIC1_ICRXI1 +#define PDL_DMAC_TRIGGER_IIC1_TX VECT_RIIC1_ICTXI1 + +/* Enable / suspend control */ +#define PDL_DMAC_ENABLE 0x0001u +#define PDL_DMAC_SUSPEND 0x0002u + +/* Software trigger control */ +#define PDL_DMAC_START 0x0004u +#define PDL_DMAC_START_RUN 0x0008u +#define PDL_DMAC_STOP 0x0010u + +/* Transfer end interrupt flag control */ +#define PDL_DMAC_CLEAR_DTIF 0x0020u +#define PDL_DMAC_CLEAR_ESIF 0x0040u + +/* Modify registers selection */ +#define PDL_DMAC_UPDATE_SOURCE 0x0080u +#define PDL_DMAC_UPDATE_DESTINATION 0x0100u +#define PDL_DMAC_UPDATE_COUNT 0x0200u +#define PDL_DMAC_UPDATE_SIZE 0x0400u +#define PDL_DMAC_UPDATE_OFFSET 0x0800u +#define PDL_DMAC_UPDATE_REPEAT_SOURCE 0x1000u +#define PDL_DMAC_UPDATE_REPEAT_DESTINATION 0x2000u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_dmac_rx62nxx.h b/bsp/rx/RPDL/r_pdl_dmac_rx62nxx.h new file mode 100644 index 0000000000..3b631ebdae --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_dmac_rx62nxx.h @@ -0,0 +1,101 @@ +/*""FILE COMMENT""******************************************************* +* System Name : DMAC API for RX62Nxx +* File Name : r_pdl_dmac_RX62Nxx.h +* Version : 1.02 +* Contents : DMAC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_DMAC_RX62Nxx_H +#define R_PDL_DMAC_RX62Nxx_H + +#define DMAC_CHANNELS 4 + +/* Callback function storage */ +extern VoidCallBackFunc rpdl_DMAC_callback_func[]; + +/* Library prototypes */ +bool R_DMAC_CreateAll( + const uint8_t, + const uint32_t, + const uint8_t, + volatile const void * const, + volatile const void * const, + const uint16_t, + const uint16_t, + const int32_t, + const uint32_t, + const uint32_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_DMAC_DestroyAll( + const uint8_t +); +bool R_DMAC_ControlAll( + const uint8_t, + const uint16_t, + volatile const void * const, + volatile const void * const, + const uint16_t, + const uint16_t, + const int32_t, + const uint32_t, + const uint32_t +); +bool R_DMAC_GetStatusAll( + const uint8_t, + volatile uint8_t * const, + volatile uint32_t * const, + volatile uint32_t * const, + volatile uint16_t * const, + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_DMAC_Create(a, b, c, d, e, f, g, h, i, j, k, l) \ +( \ +( ( ((a) < DMAC_CHANNELS ) && ((l) <= IPL_MAX) ) ) ? \ +R_DMAC_CreateAll( (a), (b), (c), (d), (e), (f), (g), (h), (i), (j), (k), (l) ) : \ +ReturnFalse() \ +) + +#define R_DMAC_Control(a, b, c, d, e, f, g, h, i) \ +( \ +( ((a) < DMAC_CHANNELS) ) ? \ +R_DMAC_ControlAll( (a), (b), (c), (d), (e), (f), (g), (h), (i) ) : \ +ReturnFalse() \ +) + +#define R_DMAC_GetStatus(a, b, c, d, e, f) \ +( \ +( ((a) < DMAC_CHANNELS) ) ? \ +R_DMAC_GetStatusAll( (a), (b), (c), (d), (e), (f) ) : \ +ReturnFalse() \ +) + +#define R_DMAC_Destroy(a) \ +( \ +( ((a) < DMAC_CHANNELS) ) ? \ +R_DMAC_DestroyAll( (a) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_dtc.h b/bsp/rx/RPDL/r_pdl_dtc.h new file mode 100644 index 0000000000..810caa0381 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_dtc.h @@ -0,0 +1,214 @@ +/*""FILE COMMENT""******************************************************* +* System Name : DTC API for RX62N +* File Name : r_pdl_dtc.h +* Version : 1.02 +* Contents : DTC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_DTC_H +#define R_PDL_DTC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_DTC_Set( + uint8_t, + uint32_t * +); +bool R_DTC_Create( + uint32_t, + uint32_t *, + void *, + void *, + uint16_t, + uint8_t +); +bool R_DTC_Destroy( + void +); +bool R_DTC_Control( + uint32_t, + uint32_t *, + void *, + void *, + uint16_t, + uint8_t +); +bool R_DTC_GetStatus( + uint32_t *, + uint16_t *, + uint32_t *, + uint32_t *, + uint16_t *, + uint8_t * +); + +/* Read skip control */ +#define PDL_DTC_READ_SKIP_DISABLE 0x01u +#define PDL_DTC_READ_SKIP_ENABLE 0x02u + +/* Address size control */ +#define PDL_DTC_ADDRESS_FULL 0x04u +#define PDL_DTC_ADDRESS_SHORT 0x08u + +/* Transfer mode selection */ +#define PDL_DTC_NORMAL 0x00000001ul +#define PDL_DTC_REPEAT 0x00000002ul +#define PDL_DTC_BLOCK 0x00000004ul +#define PDL_DTC_SOURCE 0x00000008ul +#define PDL_DTC_DESTINATION 0x00000010ul + +/* Address direction selection */ +#define PDL_DTC_SOURCE_ADDRESS_FIXED 0x00000020ul +#define PDL_DTC_SOURCE_ADDRESS_PLUS 0x00000040ul +#define PDL_DTC_SOURCE_ADDRESS_MINUS 0x00000080ul +#define PDL_DTC_DESTINATION_ADDRESS_FIXED 0x00000100ul +#define PDL_DTC_DESTINATION_ADDRESS_PLUS 0x00000200ul +#define PDL_DTC_DESTINATION_ADDRESS_MINUS 0x00000400ul + +/* Transfer data size */ +#define PDL_DTC_SIZE_8 0x00000800ul +#define PDL_DTC_SIZE_16 0x00001000ul +#define PDL_DTC_SIZE_32 0x00002000ul + +/* Chain transfer control */ +#define PDL_DTC_CHAIN_DISABLE 0x00004000ul +#define PDL_DTC_CHAIN_CONTINUOUS 0x00008000ul +#define PDL_DTC_CHAIN_0 0x00010000ul + +/* Interrupt generation */ +#define PDL_DTC_IRQ_COMPLETE 0x00020000ul +#define PDL_DTC_IRQ_TRANSFER 0x00040000ul + +/* Trigger selection */ +#define PDL_DTC_TRIGGER_CHAIN (uint32_t)(0x00u << 24) +#define PDL_DTC_TRIGGER_SW (uint32_t)(VECT_ICU_SWINT << 24) +#define PDL_DTC_TRIGGER_CMT0 (uint32_t)(VECT_CMT0_CMI0 << 24) +#define PDL_DTC_TRIGGER_CMT1 (uint32_t)(VECT_CMT1_CMI1 << 24) +#define PDL_DTC_TRIGGER_CMT2 (uint32_t)(VECT_CMT2_CMI2 << 24) +#define PDL_DTC_TRIGGER_CMT3 (uint32_t)(VECT_CMT3_CMI3 << 24) +#define PDL_DTC_TRIGGER_USB0_D0 (uint32_t)(VECT_USB0_D0FIFO0 << 24) +#define PDL_DTC_TRIGGER_USB1_D0 (uint32_t)(VECT_USB1_D0FIFO1 << 24) +#define PDL_DTC_TRIGGER_USB0_D1 (uint32_t)(VECT_USB0_D1FIFO0 << 24) +#define PDL_DTC_TRIGGER_USB1_D1 (uint32_t)(VECT_USB1_D1FIFO1 << 24) +#define PDL_DTC_TRIGGER_SPI0_RX (uint32_t)(VECT_RSPI0_SPRI0 << 24) +#define PDL_DTC_TRIGGER_SPI1_RX (uint32_t)(VECT_RSPI1_SPRI1 << 24) +#define PDL_DTC_TRIGGER_SPI0_TX (uint32_t)(VECT_RSPI0_SPTI0 << 24) +#define PDL_DTC_TRIGGER_SPI1_TX (uint32_t)(VECT_RSPI1_SPTI1 << 24) +#define PDL_DTC_TRIGGER_IRQ0 (uint32_t)(VECT_ICU_IRQ0 << 24) +#define PDL_DTC_TRIGGER_IRQ1 (uint32_t)(VECT_ICU_IRQ1 << 24) +#define PDL_DTC_TRIGGER_IRQ2 (uint32_t)(VECT_ICU_IRQ2 << 24) +#define PDL_DTC_TRIGGER_IRQ3 (uint32_t)(VECT_ICU_IRQ3 << 24) +#define PDL_DTC_TRIGGER_IRQ4 (uint32_t)(VECT_ICU_IRQ4 << 24) +#define PDL_DTC_TRIGGER_IRQ5 (uint32_t)(VECT_ICU_IRQ5 << 24) +#define PDL_DTC_TRIGGER_IRQ6 (uint32_t)(VECT_ICU_IRQ6 << 24) +#define PDL_DTC_TRIGGER_IRQ7 (uint32_t)(VECT_ICU_IRQ7 << 24) +#define PDL_DTC_TRIGGER_IRQ8 (uint32_t)(VECT_ICU_IRQ8 << 24) +#define PDL_DTC_TRIGGER_IRQ9 (uint32_t)(VECT_ICU_IRQ9 << 24) +#define PDL_DTC_TRIGGER_IRQ10 (uint32_t)(VECT_ICU_IRQ10 << 24) +#define PDL_DTC_TRIGGER_IRQ11 (uint32_t)(VECT_ICU_IRQ11 << 24) +#define PDL_DTC_TRIGGER_IRQ12 (uint32_t)(VECT_ICU_IRQ12 << 24) +#define PDL_DTC_TRIGGER_IRQ13 (uint32_t)(VECT_ICU_IRQ13 << 24) +#define PDL_DTC_TRIGGER_IRQ14 (uint32_t)(VECT_ICU_IRQ14 << 24) +#define PDL_DTC_TRIGGER_IRQ15 (uint32_t)(VECT_ICU_IRQ15 << 24) +#define PDL_DTC_TRIGGER_ADI0 (uint32_t)(VECT_AD0_ADI0 << 24) +#define PDL_DTC_TRIGGER_ADI1 (uint32_t)(VECT_AD1_ADI1 << 24) +#define PDL_DTC_TRIGGER_ADC12 (uint32_t)(VECT_S12AD_ADI << 24) +#define PDL_DTC_TRIGGER_TGIA0 (uint32_t)(VECT_MTU0_TGIA0 << 24) +#define PDL_DTC_TRIGGER_TGIA1 (uint32_t)(VECT_MTU1_TGIA1 << 24) +#define PDL_DTC_TRIGGER_TGIA2 (uint32_t)(VECT_MTU2_TGIA2 << 24) +#define PDL_DTC_TRIGGER_TGIA3 (uint32_t)(VECT_MTU3_TGIA3 << 24) +#define PDL_DTC_TRIGGER_TGIA4 (uint32_t)(VECT_MTU4_TGIA4 << 24) +#define PDL_DTC_TRIGGER_TGIA6 (uint32_t)(VECT_MTU6_TGIA6 << 24) +#define PDL_DTC_TRIGGER_TGIA7 (uint32_t)(VECT_MTU7_TGIA7 << 24) +#define PDL_DTC_TRIGGER_TGIA8 (uint32_t)(VECT_MTU8_TGIA8 << 24) +#define PDL_DTC_TRIGGER_TGIA9 (uint32_t)(VECT_MTU9_TGIA9 << 24) +#define PDL_DTC_TRIGGER_TGIA10 (uint32_t)(VECT_MTU10_TGIA10 << 24) +#define PDL_DTC_TRIGGER_TGIB0 (uint32_t)(VECT_MTU0_TGIB0 << 24) +#define PDL_DTC_TRIGGER_TGIB1 (uint32_t)(VECT_MTU1_TGIB1 << 24) +#define PDL_DTC_TRIGGER_TGIB2 (uint32_t)(VECT_MTU2_TGIB2 << 24) +#define PDL_DTC_TRIGGER_TGIB3 (uint32_t)(VECT_MTU3_TGIB3 << 24) +#define PDL_DTC_TRIGGER_TGIB4 (uint32_t)(VECT_MTU4_TGIB4 << 24) +#define PDL_DTC_TRIGGER_TGIB6 (uint32_t)(VECT_MTU6_TGIB6 << 24) +#define PDL_DTC_TRIGGER_TGIB7 (uint32_t)(VECT_MTU7_TGIB7 << 24) +#define PDL_DTC_TRIGGER_TGIB8 (uint32_t)(VECT_MTU8_TGIB8 << 24) +#define PDL_DTC_TRIGGER_TGIB9 (uint32_t)(VECT_MTU9_TGIB9 << 24) +#define PDL_DTC_TRIGGER_TGIB10 (uint32_t)(VECT_MTU10_TGIB10 << 24) +#define PDL_DTC_TRIGGER_TGIC0 (uint32_t)(VECT_MTU0_TGIC0 << 24) +#define PDL_DTC_TRIGGER_TGIC3 (uint32_t)(VECT_MTU3_TGIC3 << 24) +#define PDL_DTC_TRIGGER_TGIC4 (uint32_t)(VECT_MTU4_TGIC4 << 24) +#define PDL_DTC_TRIGGER_TGIC6 (uint32_t)(VECT_MTU6_TGIC6 << 24) +#define PDL_DTC_TRIGGER_TGIC9 (uint32_t)(VECT_MTU9_TGIC9 << 24) +#define PDL_DTC_TRIGGER_TGIC10 (uint32_t)(VECT_MTU10_TGIC10 << 24) +#define PDL_DTC_TRIGGER_TGID0 (uint32_t)(VECT_MTU0_TGID0 << 24) +#define PDL_DTC_TRIGGER_TGID3 (uint32_t)(VECT_MTU3_TGID3 << 24) +#define PDL_DTC_TRIGGER_TGID4 (uint32_t)(VECT_MTU4_TGID4 << 24) +#define PDL_DTC_TRIGGER_TGID6 (uint32_t)(VECT_MTU6_TGID6 << 24) +#define PDL_DTC_TRIGGER_TGID9 (uint32_t)(VECT_MTU9_TGID9 << 24) +#define PDL_DTC_TRIGGER_TGID10 (uint32_t)(VECT_MTU10_TGID10 << 24) +#define PDL_DTC_TRIGGER_TGIU5 (uint32_t)(VECT_MTU5_TGIU5 << 24) +#define PDL_DTC_TRIGGER_TGIU11 (uint32_t)(VECT_MTU11_TGIU11 << 24) +#define PDL_DTC_TRIGGER_TGIV5 (uint32_t)(VECT_MTU5_TGIV5 << 24) +#define PDL_DTC_TRIGGER_TGIV11 (uint32_t)(VECT_MTU11_TGIV11 << 24) +#define PDL_DTC_TRIGGER_TGIW5 (uint32_t)(VECT_MTU5_TGIW5 << 24) +#define PDL_DTC_TRIGGER_TGIW11 (uint32_t)(VECT_MTU11_TGIW11 << 24) +#define PDL_DTC_TRIGGER_TCIV4 (uint32_t)(VECT_MTU4_TCIV4 << 24) +#define PDL_DTC_TRIGGER_TCIV10 (uint32_t)(VECT_MTU10_TCIV10 << 24) +#define PDL_DTC_TRIGGER_CMIA0 (uint32_t)(VECT_TMR0_CMIA0 << 24) +#define PDL_DTC_TRIGGER_CMIA1 (uint32_t)(VECT_TMR1_CMIA1 << 24) +#define PDL_DTC_TRIGGER_CMIA2 (uint32_t)(VECT_TMR2_CMIA2 << 24) +#define PDL_DTC_TRIGGER_CMIA3 (uint32_t)(VECT_TMR3_CMIA3 << 24) +#define PDL_DTC_TRIGGER_CMIB0 (uint32_t)(VECT_TMR0_CMIB0 << 24) +#define PDL_DTC_TRIGGER_CMIB1 (uint32_t)(VECT_TMR1_CMIB1 << 24) +#define PDL_DTC_TRIGGER_CMIB2 (uint32_t)(VECT_TMR2_CMIB2 << 24) +#define PDL_DTC_TRIGGER_CMIB3 (uint32_t)(VECT_TMR3_CMIB3 << 24) +#define PDL_DTC_TRIGGER_DMACI0 (uint32_t)(VECT_DMAC_DMAC0I << 24) +#define PDL_DTC_TRIGGER_DMACI1 (uint32_t)(VECT_DMAC_DMAC1I << 24) +#define PDL_DTC_TRIGGER_DMACI2 (uint32_t)(VECT_DMAC_DMAC2I << 24) +#define PDL_DTC_TRIGGER_DMACI3 (uint32_t)(VECT_DMAC_DMAC3I << 24) +#define PDL_DTC_TRIGGER_EXDMACI0 (uint32_t)(VECT_EXDMAC_EXDMAC0I << 24) +#define PDL_DTC_TRIGGER_EXDMACI1 (uint32_t)(VECT_EXDMAC_EXDMAC1I << 24) +#define PDL_DTC_TRIGGER_RXI0 (uint32_t)(VECT_SCI0_RXI0 << 24) +#define PDL_DTC_TRIGGER_RXI1 (uint32_t)(VECT_SCI1_RXI1 << 24) +#define PDL_DTC_TRIGGER_RXI2 (uint32_t)(VECT_SCI2_RXI2 << 24) +#define PDL_DTC_TRIGGER_RXI3 (uint32_t)(VECT_SCI3_RXI3 << 24) +#define PDL_DTC_TRIGGER_RXI5 (uint32_t)(VECT_SCI5_RXI5 << 24) +#define PDL_DTC_TRIGGER_RXI6 (uint32_t)(VECT_SCI6_RXI6 << 24) +#define PDL_DTC_TRIGGER_TXI0 (uint32_t)(VECT_SCI0_TXI0 << 24) +#define PDL_DTC_TRIGGER_TXI1 (uint32_t)(VECT_SCI1_TXI1 << 24) +#define PDL_DTC_TRIGGER_TXI2 (uint32_t)(VECT_SCI2_TXI2 << 24) +#define PDL_DTC_TRIGGER_TXI3 (uint32_t)(VECT_SCI3_TXI3 << 24) +#define PDL_DTC_TRIGGER_TXI5 (uint32_t)(VECT_SCI5_TXI5 << 24) +#define PDL_DTC_TRIGGER_TXI6 (uint32_t)(VECT_SCI6_TXI6 << 24) +#define PDL_DTC_TRIGGER_ICRXI0 (uint32_t)(VECT_RIIC0_ICRXI0 << 24) +#define PDL_DTC_TRIGGER_ICRXI1 (uint32_t)(VECT_RIIC1_ICRXI1 << 24) +#define PDL_DTC_TRIGGER_ICTXI0 (uint32_t)(VECT_RIIC0_ICTXI0 << 24) +#define PDL_DTC_TRIGGER_ICTXI1 (uint32_t)(VECT_RIIC1_ICTXI1 << 24) + +/* Stop / Start control */ +#define PDL_DTC_STOP 0x01u +#define PDL_DTC_START 0x02u + +/* Register modification control */ +#define PDL_DTC_UPDATE_SOURCE 0x04ul +#define PDL_DTC_UPDATE_DESTINATION 0x08ul +#define PDL_DTC_UPDATE_COUNT 0x10ul +#define PDL_DTC_UPDATE_BLOCK_SIZE 0x20ul + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_dtc_rx62nxx.h b/bsp/rx/RPDL/r_pdl_dtc_rx62nxx.h new file mode 100644 index 0000000000..3f42d21bf0 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_dtc_rx62nxx.h @@ -0,0 +1,90 @@ +/*""FILE COMMENT""******************************************************* +* System Name : DTC API for RX62N +* File Name : r_pdl_dtc_RX62Nxx.h +* Version : 1.02 +* Contents : DTC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_DTC_RX62Nxx_H +#define R_PDL_DTC_RX62Nxx_H + +/* Library prototypes */ +bool R_DTC_SetAll( + const uint8_t, + uint32_t * const +); +bool R_DTC_CreateAll( + const uint32_t, + const uint8_t, + uint32_t * const, + volatile const void * const, + volatile const void * const, + const uint16_t, + const uint8_t +); +bool R_DTC_DestroyAll( + void +); +bool R_DTC_ControlAll( + const uint32_t, + const uint8_t, + uint32_t * const, + volatile const void * const, + volatile const void * const, + const uint16_t, + const uint8_t +); +bool R_DTC_GetStatusAll( + const uint32_t * const, + volatile uint16_t * const, + volatile uint32_t * const, + volatile uint32_t * const, + volatile uint16_t * const, + volatile uint8_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_DTC_Set(a, b) \ +( \ +R_DTC_SetAll( (a), (b) ) \ +) + +#define R_DTC_Create(a, b, c, d, e, f) \ +( \ +R_DTC_CreateAll( (a), (uint8_t)((a) >> 24), (b), (c), (d), (e), (f) ) \ +) + +#define R_DTC_Destroy() \ +( \ +R_DTC_DestroyAll() \ +) + +#define R_DTC_Control(a, b, c, d, e, f) \ +( \ +R_DTC_ControlAll( (a), (uint8_t)((a) >> 24), (b), (c), (d), (e), (f) ) \ +) + +#define R_DTC_GetStatus(a, b, c, d, e, f) \ +( \ +R_DTC_GetStatusAll( (a), (b), (c), (d), (e), (f) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_exdmac.h b/bsp/rx/RPDL/r_pdl_exdmac.h new file mode 100644 index 0000000000..04d1f5409b --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_exdmac.h @@ -0,0 +1,148 @@ +/*""FILE COMMENT""******************************************************* +* System Name : EXDMAC API for RX62Nxx +* File Name : r_pdl_exdmac.h +* Version : 1.02 +* Contents : EXDMAC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_EXDMAC_H +#define R_PDL_EXDMAC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_EXDMAC_Create( + uint8_t, + uint32_t, + uint16_t, + uint8_t, + void *, + void *, + uint16_t, + uint16_t, + int32_t, + uint32_t, + uint32_t, + void *, + uint8_t +); +bool R_EXDMAC_Destroy( + uint8_t +); +bool R_EXDMAC_Control( + uint8_t, + uint16_t, + void *, + void *, + uint16_t, + uint16_t, + int32_t, + uint32_t, + uint32_t +); +bool R_EXDMAC_GetStatus( + uint8_t, + uint8_t *, + uint32_t *, + uint32_t *, + uint16_t *, + uint16_t * +); + +/* Transfer mode selection */ +#define PDL_EXDMAC_NORMAL 0x00000001ul +#define PDL_EXDMAC_REPEAT 0x00000002ul +#define PDL_EXDMAC_BLOCK 0x00000004ul +#define PDL_EXDMAC_CLUSTER 0x00000008ul +#define PDL_EXDMAC_SOURCE 0x00000010ul +#define PDL_EXDMAC_DESTINATION 0x00000020ul + +/* Address addition direction selection */ +#define PDL_EXDMAC_SOURCE_ADDRESS_FIXED 0x00000040ul +#define PDL_EXDMAC_SOURCE_ADDRESS_PLUS 0x00000080ul +#define PDL_EXDMAC_SOURCE_ADDRESS_MINUS 0x00000100ul +#define PDL_EXDMAC_SOURCE_ADDRESS_OFFSET 0x00000200ul +#define PDL_EXDMAC_DESTINATION_ADDRESS_FIXED 0x00000400ul +#define PDL_EXDMAC_DESTINATION_ADDRESS_PLUS 0x00000800ul +#define PDL_EXDMAC_DESTINATION_ADDRESS_MINUS 0x00001000ul +#define PDL_EXDMAC_DESTINATION_ADDRESS_OFFSET 0x00002000ul + +/* Address mode selection */ +#define PDL_EXDMAC_ADDRESS_MODE_READ 0x00004000ul +#define PDL_EXDMAC_ADDRESS_MODE_WRITE 0x00008000ul +#define PDL_EXDMAC_ADDRESS_MODE_DUAL 0x00010000ul + +/* Transfer data size */ +#define PDL_EXDMAC_SIZE_8 0x00020000ul +#define PDL_EXDMAC_SIZE_16 0x00040000ul +#define PDL_EXDMAC_SIZE_32 0x00080000ul + +/* Pin selection */ +#define PDL_EXDMAC_PIN_A 0x0001u +#define PDL_EXDMAC_PIN_B 0x0002u +#define PDL_EXDMAC_PIN_C 0x0004u + +/* EDACKn pin output control */ +#define PDL_EXDMAC_EDACK_DISABLE 0x0008u +#define PDL_EXDMAC_EDACK_LOW 0x0010u +#define PDL_EXDMAC_EDACK_HIGH 0x0020u +#define PDL_EXDMAC_EDACK_SYNC 0x0040u +#define PDL_EXDMAC_EDACK_WAIT 0x0080u + +/* Trigger selection */ +#define PDL_EXDMAC_TRIGGER_SW 0x0100u +#define PDL_EXDMAC_TRIGGER_RISING 0x0200u +#define PDL_EXDMAC_TRIGGER_FALLING 0x0400u +#define PDL_EXDMAC_TRIGGER_LOW 0x0800u +#define PDL_EXDMAC_TRIGGER_MTU1 0x1000u + +/* Interrupt generation */ +#define PDL_EXDMAC_IRQ_END 0x01u +#define PDL_EXDMAC_IRQ_ESCAPE_END 0x02u +#define PDL_EXDMAC_IRQ_REPEAT_SIZE_END 0x04u +#define PDL_EXDMAC_IRQ_EXT_SOURCE 0x08u +#define PDL_EXDMAC_IRQ_EXT_DESTINATION 0x10u + +/* DTC trigger control */ +#define PDL_EXDMAC_DTC_TRIGGER_DISABLE 0x20u +#define PDL_EXDMAC_DTC_TRIGGER_ENABLE 0x40u + +/* Enable / suspend control */ +#define PDL_EXDMAC_ENABLE 0x0001u +#define PDL_EXDMAC_SUSPEND 0x0002u + +/* Software trigger control */ +#define PDL_EXDMAC_START 0x0004u +#define PDL_EXDMAC_START_RUN 0x0008u +#define PDL_EXDMAC_STOP 0x0010u + +/* Transfer end interrupt flag control */ +#define PDL_EXDMAC_CLEAR_DTIF 0x0020u +#define PDL_EXDMAC_CLEAR_ESIF 0x0040u + +/* Modify registers selection */ +#define PDL_EXDMAC_UPDATE_SOURCE 0x0080u +#define PDL_EXDMAC_UPDATE_DESTINATION 0x0100u +#define PDL_EXDMAC_UPDATE_COUNT 0x0200u +#define PDL_EXDMAC_UPDATE_SIZE 0x0400u +#define PDL_EXDMAC_UPDATE_OFFSET 0x0800u +#define PDL_EXDMAC_UPDATE_REPEAT_SOURCE 0x1000u +#define PDL_EXDMAC_UPDATE_REPEAT_DESTINATION 0x2000u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_exdmac_rx62nxx.h b/bsp/rx/RPDL/r_pdl_exdmac_rx62nxx.h new file mode 100644 index 0000000000..0a7cb0f50a --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_exdmac_rx62nxx.h @@ -0,0 +1,102 @@ +/*""FILE COMMENT""******************************************************* +* System Name : EXDMAC API for RX62Nxx +* File Name : r_pdl_exdmac_RX62Nxx.h +* Version : 1.02 +* Contents : EXDMAC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_EXDMAC_RX62Nxx_H +#define R_PDL_EXDMAC_RX62Nxx_H + +#define EXDMAC_CHANNELS 2 + +/* Callback function storage */ +extern VoidCallBackFunc rpdl_EXDMAC_callback_func[]; + +/* Library prototypes */ +bool R_EXDMAC_CreateAll( + const uint8_t, + const uint32_t, + const uint16_t, + const uint8_t, + volatile const void * const, + volatile const void * const, + const uint16_t, + const uint16_t, + const int32_t, + const uint32_t, + const uint32_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_EXDMAC_DestroyAll( + const uint8_t +); +bool R_EXDMAC_ControlAll( + const uint8_t, + const uint16_t, + volatile const void * const, + volatile const void * const, + const uint16_t, + const uint16_t, + const int32_t, + const uint32_t, + const uint32_t +); +bool R_EXDMAC_GetStatusAll( + const uint8_t, + volatile uint8_t * const, + volatile uint32_t * const, + volatile uint32_t * const, + volatile uint16_t * const, + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_EXDMAC_Create(a, b, c, d, e, f, g, h, i, j, k, l, m) \ +( \ +( ( ((a) < EXDMAC_CHANNELS ) && ((m) <= IPL_MAX) ) ) ? \ +R_EXDMAC_CreateAll( (a), (b), (c), (d), (e), (f), (g), (h), (i), (j), (k), (l), (m) ) : \ +ReturnFalse() \ +) + +#define R_EXDMAC_Control(a, b, c, d, e, f, g, h, i) \ +( \ +( ((a) < EXDMAC_CHANNELS) ) ? \ +R_EXDMAC_ControlAll( (a), (b), (c), (d), (e), (f), (g), (h), (i) ) : \ +ReturnFalse() \ +) + +#define R_EXDMAC_GetStatus(a, b, c, d, e, f) \ +( \ +( ((a) < EXDMAC_CHANNELS) ) ? \ +R_EXDMAC_GetStatusAll( (a), (b), (c), (d), (e), (f) ) : \ +ReturnFalse() \ +) + +#define R_EXDMAC_Destroy(a) \ +( \ +( ((a) < EXDMAC_CHANNELS) ) ? \ +R_EXDMAC_DestroyAll( (a) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_iic.h b/bsp/rx/RPDL/r_pdl_iic.h new file mode 100644 index 0000000000..116a3fbb3a --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_iic.h @@ -0,0 +1,203 @@ +/*""FILE COMMENT""******************************************************* +* System Name : I²C API for RX62Nxx +* File Name : r_pdl_iic.h +* Version : 1.02 +* Contents : I²C API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IIC_H +#define R_PDL_IIC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_IIC_Create( + uint8_t, + uint32_t, + uint32_t, + uint16_t, + uint16_t, + uint16_t, + uint32_t, + uint32_t +); +bool R_IIC_Destroy( + uint8_t +); +bool R_IIC_MasterSend( + uint8_t, + uint16_t, + uint16_t, + uint8_t *, + uint16_t, + void *, + uint8_t +); +bool R_IIC_MasterReceive( + uint8_t, + uint16_t, + uint16_t, + uint8_t *, + uint16_t, + void *, + uint8_t +); +bool R_IIC_MasterReceiveLast( + uint8_t, + uint8_t * +); +bool R_IIC_SlaveMonitor( + uint8_t, + uint16_t, + uint8_t *, + uint16_t, + void *, + uint8_t +); +bool R_IIC_SlaveSend( + uint8_t, + uint8_t *, + uint16_t +); +bool R_IIC_Control( + uint8_t, + uint8_t +); +bool R_IIC_GetStatus( + uint8_t, + uint32_t *, + uint16_t *, + uint16_t * +); + +/* Bus mode */ +#define PDL_IIC_MODE_IIC 0x00000001ul +#define PDL_IIC_MODE_IIC_FMP 0x00000002ul +#define PDL_IIC_MODE_SMBUS 0x00000004ul + +/* Internal reference clock */ +#define PDL_IIC_INT_PCLK_DIV_1 0x00000008ul +#define PDL_IIC_INT_PCLK_DIV_2 0x00000010ul +#define PDL_IIC_INT_PCLK_DIV_4 0x00000020ul +#define PDL_IIC_INT_PCLK_DIV_8 0x00000040ul +#define PDL_IIC_INT_PCLK_DIV_16 0x00000080ul +#define PDL_IIC_INT_PCLK_DIV_32 0x00000100ul +#define PDL_IIC_INT_PCLK_DIV_64 0x00000200ul +#define PDL_IIC_INT_PCLK_DIV_128 0x00000400ul + +/* Timeout detection */ +#define PDL_IIC_TIMEOUT_DISABLE 0x00000800ul +#define PDL_IIC_TIMEOUT_LOW 0x00001000ul +#define PDL_IIC_TIMEOUT_HIGH 0x00002000ul +#define PDL_IIC_TIMEOUT_BOTH 0x00004000ul + +/* Timeout mode */ +#define PDL_IIC_TIMEOUT_LONG 0x00008000ul +#define PDL_IIC_TIMEOUT_SHORT 0x00010000ul + +/* SDA output delay count */ +#define PDL_IIC_SDA_DELAY_0 0x00020000ul +#define PDL_IIC_SDA_DELAY_1 0x00040000ul +#define PDL_IIC_SDA_DELAY_2 0x00080000ul +#define PDL_IIC_SDA_DELAY_3 0x00100000ul +#define PDL_IIC_SDA_DELAY_4 0x00200000ul +#define PDL_IIC_SDA_DELAY_5 0x00400000ul +#define PDL_IIC_SDA_DELAY_6 0x00800000ul +#define PDL_IIC_SDA_DELAY_7 0x01000000ul + +/* SDA output delay clock source */ +#define PDL_IIC_SDA_DELAY_DIV_1 0x02000000ul +#define PDL_IIC_SDA_DELAY_DIV_2 0x04000000ul + +/* Noise filter control */ +#define PDL_IIC_NF_DISABLE 0x08000000ul +#define PDL_IIC_NF_1 0x10000000ul +#define PDL_IIC_NF_2 0x20000000ul +#define PDL_IIC_NF_3 0x40000000ul +#define PDL_IIC_NF_4 0x80000000ul + +/* NACK Transmission Arbitration Lost Detection control */ +#define PDL_IIC_NTALD_DISABLE 0x00000001ul +#define PDL_IIC_NTALD_ENABLE 0x00000002ul + +/* Slave Arbitration Lost Detection control */ +#define PDL_IIC_SALD_DISABLE 0x00000004ul +#define PDL_IIC_SALD_ENABLE 0x00000008ul + +/* Slave address detection control */ +#define PDL_IIC_SLAVE_0_DISABLE 0x00000010ul +#define PDL_IIC_SLAVE_0_ENABLE_7 0x00000020ul +#define PDL_IIC_SLAVE_0_ENABLE_10 0x00000040ul +#define PDL_IIC_SLAVE_1_DISABLE 0x00000080ul +#define PDL_IIC_SLAVE_1_ENABLE_7 0x00000100ul +#define PDL_IIC_SLAVE_1_ENABLE_10 0x00000200ul +#define PDL_IIC_SLAVE_2_DISABLE 0x00000400ul +#define PDL_IIC_SLAVE_2_ENABLE_7 0x00000800ul +#define PDL_IIC_SLAVE_2_ENABLE_10 0x00001000ul +#define PDL_IIC_SLAVE_GCA_DISABLE 0x00002000ul +#define PDL_IIC_SLAVE_GCA_ENABLE 0x00004000ul + +/* Device-ID detection control */ +#define PDL_IIC_DEVICE_ID_DISABLE 0x00008000ul +#define PDL_IIC_DEVICE_ID_ENABLE 0x00010000ul + +/* Host Address detection control */ +#define PDL_IIC_HOST_ADDRESS_DISABLE 0x00020000ul +#define PDL_IIC_HOST_ADDRESS_ENABLE 0x00040000ul + +/* Start / Repeated Start condition control */ +#define PDL_IIC_START_ENABLE 0x0001u +#define PDL_IIC_START_DISABLE 0x0002u + +/* Stop condition control */ +#define PDL_IIC_STOP_ENABLE 0x0004u +#define PDL_IIC_STOP_DISABLE 0x0008u + +/* Master DMAC / DTC trigger control */ +#define PDL_IIC_DMAC_DTC_TRIGGER_DISABLE 0x0010u +#define PDL_IIC_DMAC_TRIGGER_ENABLE 0x0020u +#define PDL_IIC_DTC_TRIGGER_ENABLE 0x0040u + +/* Slave DMAC / DTC trigger control */ +#define PDL_IIC_RX_DMAC_DTC_TRIGGER_DISABLE 0x0080u +#define PDL_IIC_RX_DMAC_TRIGGER_ENABLE 0x0100u +#define PDL_IIC_RX_DTC_TRIGGER_ENABLE 0x0200u +#define PDL_IIC_TX_DMAC_DTC_TRIGGER_DISABLE 0x0400u +#define PDL_IIC_TX_DMAC_TRIGGER_ENABLE 0x0800u +#define PDL_IIC_TX_DTC_TRIGGER_ENABLE 0x1000u + +/* Stop generation */ +#define PDL_IIC_STOP 0x01u + +/* NACK generation */ +#define PDL_IIC_NACK 0x02u + +/* Pin control */ +#define PDL_IIC_SDA_LOW 0x04u +#define PDL_IIC_SDA_HI_Z 0x08u +#define PDL_IIC_SCL_LOW 0x10u +#define PDL_IIC_SCL_HI_Z 0x20u + +/* Extra clock cycle generation */ +#define PDL_IIC_CYCLE_SCL 0x40u + +/* Reset control */ +#define PDL_IIC_RESET 0x80u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_iic_rx62nxfp.h b/bsp/rx/RPDL/r_pdl_iic_rx62nxfp.h new file mode 100644 index 0000000000..876690e2cc --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_iic_rx62nxfp.h @@ -0,0 +1,203 @@ +/*""FILE COMMENT""******************************************************* +* System Name : I²C API for RX62Nxx (FP suffix) +* File Name : r_pdl_iic_RX62NxFP.h +* Version : 1.02 +* Contents : I²C API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IIC_RX62NxFP_H +#define R_PDL_IIC_RX62NxFP_H + +#define IIC_CHANNELS 1 + +/* Globals */ +extern volatile uint8_t rpdl_IIC_stop[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_current_state[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_next_state[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_slave_address_lower[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_slave_address_upper[IIC_CHANNELS]; +extern const volatile uint8_t * rpdl_IIC_tx_data_pointer[IIC_CHANNELS]; +extern const volatile uint8_t * rpdl_IIC_tx_data_start[IIC_CHANNELS]; +extern volatile uint8_t * rpdl_IIC_rx_data_pointer[IIC_CHANNELS]; +extern volatile uint8_t * rpdl_IIC_rx_data_start[IIC_CHANNELS]; +extern volatile uint16_t rpdl_IIC_rx_counter[IIC_CHANNELS]; +extern volatile uint16_t rpdl_IIC_tx_counter[IIC_CHANNELS]; +extern volatile uint16_t rpdl_IIC_rx_threshold[IIC_CHANNELS]; +extern volatile uint16_t rpdl_IIC_tx_threshold[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_detected_address[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_rx_transfer_method[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_rx_dmac_channel[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_tx_dmac_channel[IIC_CHANNELS]; + +/* IIC state machine states */ +typedef enum { + IIC_SEND_START, + IIC_MASTER_SEND_SLAVE_ADDRESS_7, + IIC_MASTER_SEND_SLAVE_ADDRESS_10a, + IIC_MASTER_SEND_SLAVE_ADDRESS_10b, + IIC_MASTER_SEND_SLAVE_ADDRESS_10c, + IIC_MASTER_SEND_SLAVE_ADDRESS_10d, + IIC_MASTER_SEND_DATA, + IIC_MASTER_WAIT_FOR_TX_COMPLETE, + IIC_MASTER_WAIT_FOR_STOP, + IIC_EXIT_LOOP, + IIC_MASTER_START_READ, + IIC_MASTER_READ_DATA, + IIC_SEND_STOP, + IIC_SLAVE_MONITOR, + IIC_SLAVE_SEND_DATA, + IIC_SLAVE_READ_SLAVE_ADDRESS, + IIC_SLAVE_READ_DATA +} iic_states; + +/* Transfer options */ +#define IIC_TRANSFER_CPU 0 +#define IIC_TRANSFER_DMAC 2 +#define IIC_TRANSFER_DTC 1 + +/* Callback function prototype */ +extern VoidCallBackFunc rpdl_IIC_callback_func[IIC_CHANNELS]; + +/* Library prototypes */ +bool R_IIC_CreateAll( + const uint8_t, + const uint32_t, + const uint32_t, + const uint16_t, + const uint16_t, + const uint16_t, + const uint32_t, + const uint32_t +); +bool R_IIC_DestroyAll( + const uint8_t +); +bool R_IIC_MasterSendAll( + const uint8_t, + const uint16_t, + const uint16_t, + const volatile uint8_t * const, + const uint16_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_IIC_MasterReceiveAll( + const uint8_t, + const uint16_t, + const uint16_t, + volatile uint8_t * const, + const uint16_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_IIC_MasterReceiveLastAll( + const uint8_t, + volatile uint8_t * const +); +bool R_IIC_SlaveMonitorAll( + const uint8_t, + const uint16_t, + volatile uint8_t * const, + const uint16_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_IIC_SlaveSendAll( + const uint8_t, + const volatile uint8_t * const, + const uint16_t +); +bool R_IIC_ControlAll( + const uint8_t, + const uint8_t +); +bool R_IIC_GetStatusAll( + const uint8_t, + volatile uint32_t * const, + volatile uint16_t * const, + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_IIC_Create(a, b, c, d, e, f, g, h) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_CreateAll( (a), (b), (c), (d), (e), (f), (g), (h) ) : \ +ReturnFalse() \ +) + +#define R_IIC_Destroy(a) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_DestroyAll( (a) ) : \ +ReturnFalse() \ +) + +#define R_IIC_MasterSend(a, b, c, d, e, f, g) \ +( \ +( ( (a) < IIC_CHANNELS ) && ((g) <= IPL_MAX) ) ? \ +R_IIC_MasterSendAll( (a), (b), (c), (d), (e), (f), (g) ) : \ +ReturnFalse() \ +) + +#define R_IIC_MasterReceive(a, b, c, d, e, f, g) \ +( \ +( ( (a) < IIC_CHANNELS ) && ((g) <= IPL_MAX) ) ? \ +R_IIC_MasterReceiveAll( (a), (b), (c), (d), (e), (f), (g) ) : \ +ReturnFalse() \ +) + +#define R_IIC_MasterReceiveLast(a, b) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_MasterReceiveLastAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_IIC_SlaveMonitor(a, b, c, d, e, f) \ +( \ +( ( (a) < IIC_CHANNELS ) && ((f) <= IPL_MAX) ) ? \ +R_IIC_SlaveMonitorAll( (a), (b), (c), (d), (e), (f) ) : \ +ReturnFalse() \ +) + +#define R_IIC_SlaveSend(a, b, c) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_SlaveSendAll( (a), (b), (c) ) : \ +ReturnFalse() \ +) + +#define R_IIC_Control(a, b) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_ControlAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_IIC_GetStatus(a, b, c, d) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_GetStatusAll( (a), (b), (c), (d) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_iic_rx62nxnfp.h b/bsp/rx/RPDL/r_pdl_iic_rx62nxnfp.h new file mode 100644 index 0000000000..eb32b20b3d --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_iic_rx62nxnfp.h @@ -0,0 +1,203 @@ +/*""FILE COMMENT""******************************************************* +* System Name : I²C API for RX62N (not FP suffix) +* File Name : r_pdl_iic_RX62NxnFP.h +* Version : 1.02 +* Contents : I²C API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IIC_RX62NxnFP_H +#define R_PDL_IIC_RX62NxnFP_H + +#define IIC_CHANNELS 2 + +/* Globals */ +extern volatile uint8_t rpdl_IIC_stop[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_current_state[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_next_state[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_slave_address_lower[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_slave_address_upper[IIC_CHANNELS]; +extern const volatile uint8_t * rpdl_IIC_tx_data_pointer[IIC_CHANNELS]; +extern const volatile uint8_t * rpdl_IIC_tx_data_start[IIC_CHANNELS]; +extern volatile uint8_t * rpdl_IIC_rx_data_pointer[IIC_CHANNELS]; +extern volatile uint8_t * rpdl_IIC_rx_data_start[IIC_CHANNELS]; +extern volatile uint16_t rpdl_IIC_rx_counter[IIC_CHANNELS]; +extern volatile uint16_t rpdl_IIC_tx_counter[IIC_CHANNELS]; +extern volatile uint16_t rpdl_IIC_rx_threshold[IIC_CHANNELS]; +extern volatile uint16_t rpdl_IIC_tx_threshold[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_detected_address[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_rx_transfer_method[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_rx_dmac_channel[IIC_CHANNELS]; +extern volatile uint8_t rpdl_IIC_tx_dmac_channel[IIC_CHANNELS]; + +/* IIC state machine states */ +typedef enum { + IIC_SEND_START, + IIC_MASTER_SEND_SLAVE_ADDRESS_7, + IIC_MASTER_SEND_SLAVE_ADDRESS_10a, + IIC_MASTER_SEND_SLAVE_ADDRESS_10b, + IIC_MASTER_SEND_SLAVE_ADDRESS_10c, + IIC_MASTER_SEND_SLAVE_ADDRESS_10d, + IIC_MASTER_SEND_DATA, + IIC_MASTER_WAIT_FOR_TX_COMPLETE, + IIC_MASTER_WAIT_FOR_STOP, + IIC_EXIT_LOOP, + IIC_MASTER_START_READ, + IIC_MASTER_READ_DATA, + IIC_SEND_STOP, + IIC_SLAVE_MONITOR, + IIC_SLAVE_SEND_DATA, + IIC_SLAVE_READ_SLAVE_ADDRESS, + IIC_SLAVE_READ_DATA +} iic_states; + +/* Transfer options */ +#define IIC_TRANSFER_CPU 0 +#define IIC_TRANSFER_DMAC 2 +#define IIC_TRANSFER_DTC 1 + +/* Callback function prototype */ +extern VoidCallBackFunc rpdl_IIC_callback_func[IIC_CHANNELS]; + +/* Library prototypes */ +bool R_IIC_CreateAll( + const uint8_t, + const uint32_t, + const uint32_t, + const uint16_t, + const uint16_t, + const uint16_t, + const uint32_t, + const uint32_t +); +bool R_IIC_DestroyAll( + const uint8_t +); +bool R_IIC_MasterSendAll( + const uint8_t, + const uint16_t, + const uint16_t, + const volatile uint8_t * const, + const uint16_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_IIC_MasterReceiveAll( + const uint8_t, + const uint16_t, + const uint16_t, + volatile uint8_t * const, + const uint16_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_IIC_MasterReceiveLastAll( + const uint8_t, + volatile uint8_t * const +); +bool R_IIC_SlaveMonitorAll( + const uint8_t, + const uint16_t, + volatile uint8_t * const, + const uint16_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_IIC_SlaveSendAll( + const uint8_t, + const volatile uint8_t * const, + const uint16_t +); +bool R_IIC_ControlAll( + const uint8_t, + const uint8_t +); +bool R_IIC_GetStatusAll( + const uint8_t, + volatile uint32_t * const, + volatile uint16_t * const, + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_IIC_Create(a, b, c, d, e, f, g, h) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_CreateAll( (a), (b), (c), (d), (e), (f), (g), (h) ) : \ +ReturnFalse() \ +) + +#define R_IIC_Destroy(a) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_DestroyAll( (a) ) : \ +ReturnFalse() \ +) + +#define R_IIC_MasterSend(a, b, c, d, e, f, g) \ +( \ +( ( (a) < IIC_CHANNELS ) && ((g) <= IPL_MAX) ) ? \ +R_IIC_MasterSendAll( (a), (b), (c), (d), (e), (f), (g) ) : \ +ReturnFalse() \ +) + +#define R_IIC_MasterReceive(a, b, c, d, e, f, g) \ +( \ +( ( (a) < IIC_CHANNELS ) && ((g) <= IPL_MAX) ) ? \ +R_IIC_MasterReceiveAll( (a), (b), (c), (d), (e), (f), (g) ) : \ +ReturnFalse() \ +) + +#define R_IIC_MasterReceiveLast(a, b) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_MasterReceiveLastAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_IIC_SlaveMonitor(a, b, c, d, e, f) \ +( \ +( ( (a) < IIC_CHANNELS ) && ((f) <= IPL_MAX) ) ? \ +R_IIC_SlaveMonitorAll( (a), (b), (c), (d), (e), (f) ) : \ +ReturnFalse() \ +) + +#define R_IIC_SlaveSend(a, b, c) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_SlaveSendAll( (a), (b), (c) ) : \ +ReturnFalse() \ +) + +#define R_IIC_Control(a, b) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_ControlAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_IIC_GetStatus(a, b, c, d) \ +( \ +( (a) < IIC_CHANNELS ) ? \ +R_IIC_GetStatusAll( (a), (b), (c), (d) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_intc.h b/bsp/rx/RPDL/r_pdl_intc.h new file mode 100644 index 0000000000..6fea67b028 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_intc.h @@ -0,0 +1,606 @@ +/*""FILE COMMENT""******************************************************* +* System Name : External interrupt API +* File Name : r_pdl_intc.h +* Version : 1.02 +* Contents : External interrupt API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_INTC_H +#define R_PDL_INTC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_INTC_CreateExtInterrupt( + uint8_t, + uint32_t, + void *, + uint8_t +); +bool R_INTC_CreateSoftwareInterrupt( + uint8_t, + void *, + uint8_t +); +bool R_INTC_CreateFastInterrupt( + uint8_t +); +bool R_INTC_CreateExceptionHandlers( + void *, + void *, + void * +); +bool R_INTC_ControlExtInterrupt( + uint8_t, + uint32_t +); +bool R_INTC_GetExtInterruptStatus( + uint8_t, + uint8_t * +); +bool R_INTC_Read( + uint16_t, + uint8_t * +); +bool R_INTC_Write( + uint16_t, + uint8_t +); +bool R_INTC_Modify( + uint16_t, + uint8_t, + uint8_t +); + +/* Interrupt pins */ +#define PDL_INTC_IRQ0 0 +#define PDL_INTC_IRQ1 1 +#define PDL_INTC_IRQ2 2 +#define PDL_INTC_IRQ3 3 +#define PDL_INTC_IRQ4 4 +#define PDL_INTC_IRQ5 5 +#define PDL_INTC_IRQ6 6 +#define PDL_INTC_IRQ7 7 +#define PDL_INTC_IRQ8 8 +#define PDL_INTC_IRQ9 9 +#define PDL_INTC_IRQ10 10 +#define PDL_INTC_IRQ11 11 +#define PDL_INTC_IRQ12 12 +#define PDL_INTC_IRQ13 13 +#define PDL_INTC_IRQ14 14 +#define PDL_INTC_IRQ15 15 +#define PDL_INTC_PRIVILEGED 16 +#define PDL_INTC_UNDEFINED 17 +#define PDL_INTC_FLOATING_POINT 18 +#define PDL_INTC_NMI 19 +#define PDL_INTC_SWINT 20 + +/* Detection sense selection */ +#define PDL_INTC_LOW 0x00000001ul +#define PDL_INTC_FALLING 0x00000002ul +#define PDL_INTC_RISING 0x00000004ul +#define PDL_INTC_BOTH 0x00000008ul + +/* IRQ alternate pin selection */ +#define PDL_INTC_A 0x00000010ul +#define PDL_INTC_B 0x00000020ul + +/* DMAC / DTC trigger control */ +#define PDL_INTC_DMAC_DTC_TRIGGER_DISABLE 0x00000040ul +#define PDL_INTC_DMAC_TRIGGER_ENABLE 0x00000080ul +#define PDL_INTC_DTC_TRIGGER_ENABLE 0x00000100ul + +/* LVD detection control */ +#define PDL_INTC_LVD_DISABLE 0x00000200ul +#define PDL_INTC_LVD_ENABLE 0x00000400ul + +/* Oscillation stop detection control */ +#define PDL_INTC_OSD_DISABLE 0x00000800ul +#define PDL_INTC_OSD_ENABLE 0x00001000ul + +/* Interrupt control */ +#define PDL_INTC_ENABLE 0x00002000ul +#define PDL_INTC_DISABLE 0x00004000ul + +/* Flag control */ +#define PDL_INTC_CLEAR_IR_FLAG 0x00008000ul +#define PDL_INTC_CLEAR_OSD_FLAG 0x00010000ul + +/* DTC software trigger control */ +#define PDL_INTC_DTC_SW_TRIGGER_DISABLE 0x01u +#define PDL_INTC_DTC_SW_TRIGGER_ENABLE 0x02u + +/* Interrupt registers */ +#define PDL_INTC_REG_IPL 0x0100u +#define PDL_INTC_REG_IR 0x0200u +#define PDL_INTC_REG_IER 0x0400u +#define PDL_INTC_REG_IPR 0x0800u +#define PDL_INTC_REG_DTCER 0x1000u +#define PDL_INTC_REG_SWINTR 0x2000u + +/* Logical operations */ +#define PDL_INTC_AND 0x01u +#define PDL_INTC_OR 0x02u +#define PDL_INTC_XOR 0x04u + +/* IR registers */ +#define PDL_INTC_REG_IR_BSC_BUSERR (PDL_INTC_REG_IR | IR_BSC_BUSERR) +#define PDL_INTC_REG_IR_FCU_FIFERR (PDL_INTC_REG_IR | IR_FCU_FIFERR) +#define PDL_INTC_REG_IR_FCU_FRDYI (PDL_INTC_REG_IR | IR_FCU_FRDYI) +#define PDL_INTC_REG_IR_ICU_SWINT (PDL_INTC_REG_IR | IR_ICU_SWINT) +#define PDL_INTC_REG_IR_CMT0_CMI (PDL_INTC_REG_IR | IR_CMT0_CMI0) +#define PDL_INTC_REG_IR_CMT1_CMI (PDL_INTC_REG_IR | IR_CMT1_CMI1) +#define PDL_INTC_REG_IR_CMT2_CMI (PDL_INTC_REG_IR | IR_CMT2_CMI2) +#define PDL_INTC_REG_IR_CMT3_CMI (PDL_INTC_REG_IR | IR_CMT3_CMI3) +#define PDL_INTC_REG_IR_ETHER_EINT (PDL_INTC_REG_IR | IR_ETHER_EINT) +#define PDL_INTC_REG_IR_USB0_D0FIFO (PDL_INTC_REG_IR | IR_USB0_D0FIFO0) +#define PDL_INTC_REG_IR_USB0_D1FIFO (PDL_INTC_REG_IR | IR_USB0_D1FIFO0) +#define PDL_INTC_REG_IR_USB0_USBI (PDL_INTC_REG_IR | IR_USB0_USBI0) +#define PDL_INTC_REG_IR_USB1_D0FIFO (PDL_INTC_REG_IR | IR_USB1_D0FIFO1) +#define PDL_INTC_REG_IR_USB1_D1FIFO (PDL_INTC_REG_IR | IR_USB1_D1FIFO1) +#define PDL_INTC_REG_IR_USB1_USBI (PDL_INTC_REG_IR | IR_USB1_USBI1) +#define PDL_INTC_REG_IR_SPI0_SPEI (PDL_INTC_REG_IR | IR_RSPI0_SPEI0) +#define PDL_INTC_REG_IR_SPI0_SPRI (PDL_INTC_REG_IR | IR_RSPI0_SPRI0) +#define PDL_INTC_REG_IR_SPI0_SPTI (PDL_INTC_REG_IR | IR_RSPI0_SPTI0) +#define PDL_INTC_REG_IR_SPI0_SPII (PDL_INTC_REG_IR | IR_RSPI0_SPII0) +#define PDL_INTC_REG_IR_SPI1_SPEI (PDL_INTC_REG_IR | IR_RSPI1_SPEI1) +#define PDL_INTC_REG_IR_SPI1_SPRI (PDL_INTC_REG_IR | IR_RSPI1_SPRI1) +#define PDL_INTC_REG_IR_SPI1_SPTI (PDL_INTC_REG_IR | IR_RSPI1_SPTI1) +#define PDL_INTC_REG_IR_SPI1_SPII (PDL_INTC_REG_IR | IR_RSPI1_SPII1) +#define PDL_INTC_REG_IR_CAN0_ERS (PDL_INTC_REG_IR | IR_CAN0_ERS0) +#define PDL_INTC_REG_IR_CAN0_RXF (PDL_INTC_REG_IR | IR_CAN0_RXF0) +#define PDL_INTC_REG_IR_CAN0_TXF (PDL_INTC_REG_IR | IR_CAN0_TXF0) +#define PDL_INTC_REG_IR_CAN0_RXM (PDL_INTC_REG_IR | IR_CAN0_RXM0) +#define PDL_INTC_REG_IR_CAN0_TXM (PDL_INTC_REG_IR | IR_CAN0_TXM0) +#define PDL_INTC_REG_IR_RTC_PRD (PDL_INTC_REG_IR | IR_RTC_PRD) +#define PDL_INTC_REG_IR_RTC_CUP (PDL_INTC_REG_IR | IR_RTC_CUP) +#define PDL_INTC_REG_IR_ICU_IRQ0 (PDL_INTC_REG_IR | IR_ICU_IRQ0) +#define PDL_INTC_REG_IR_ICU_IRQ1 (PDL_INTC_REG_IR | IR_ICU_IRQ1) +#define PDL_INTC_REG_IR_ICU_IRQ2 (PDL_INTC_REG_IR | IR_ICU_IRQ2) +#define PDL_INTC_REG_IR_ICU_IRQ3 (PDL_INTC_REG_IR | IR_ICU_IRQ3) +#define PDL_INTC_REG_IR_ICU_IRQ4 (PDL_INTC_REG_IR | IR_ICU_IRQ4) +#define PDL_INTC_REG_IR_ICU_IRQ5 (PDL_INTC_REG_IR | IR_ICU_IRQ5) +#define PDL_INTC_REG_IR_ICU_IRQ6 (PDL_INTC_REG_IR | IR_ICU_IRQ6) +#define PDL_INTC_REG_IR_ICU_IRQ7 (PDL_INTC_REG_IR | IR_ICU_IRQ7) +#define PDL_INTC_REG_IR_ICU_IRQ8 (PDL_INTC_REG_IR | IR_ICU_IRQ8) +#define PDL_INTC_REG_IR_ICU_IRQ9 (PDL_INTC_REG_IR | IR_ICU_IRQ9) +#define PDL_INTC_REG_IR_ICU_IRQ10 (PDL_INTC_REG_IR | IR_ICU_IRQ10) +#define PDL_INTC_REG_IR_ICU_IRQ11 (PDL_INTC_REG_IR | IR_ICU_IRQ11) +#define PDL_INTC_REG_IR_ICU_IRQ12 (PDL_INTC_REG_IR | IR_ICU_IRQ12) +#define PDL_INTC_REG_IR_ICU_IRQ13 (PDL_INTC_REG_IR | IR_ICU_IRQ13) +#define PDL_INTC_REG_IR_ICU_IRQ14 (PDL_INTC_REG_IR | IR_ICU_IRQ14) +#define PDL_INTC_REG_IR_ICU_IRQ15 (PDL_INTC_REG_IR | IR_ICU_IRQ15) +#define PDL_INTC_REG_IR_USB_USBR0 (PDL_INTC_REG_IR | IR_USB_USBR0) +#define PDL_INTC_REG_IR_USB_USBR1 (PDL_INTC_REG_IR | IR_USB_USBR1) +#define PDL_INTC_REG_IR_RTC_ALM (PDL_INTC_REG_IR | IR_RTC_ALM) +#define PDL_INTC_REG_IR_WDT_WOVI (PDL_INTC_REG_IR | IR_WDT_WOVI) +#define PDL_INTC_REG_IR_AD0_ADI (PDL_INTC_REG_IR | IR_AD0_ADI0) +#define PDL_INTC_REG_IR_AD1_ADI (PDL_INTC_REG_IR | IR_AD1_ADI1) +#define PDL_INTC_REG_IR_S12AD_ADI (PDL_INTC_REG_IR | IR_S12AD_ADI) +#define PDL_INTC_REG_IR_MTU0_TGIA (PDL_INTC_REG_IR | IR_MTU0_TGIA0) +#define PDL_INTC_REG_IR_MTU0_TGIB (PDL_INTC_REG_IR | IR_MTU0_TGIB0) +#define PDL_INTC_REG_IR_MTU0_TGIC (PDL_INTC_REG_IR | IR_MTU0_TGIC0) +#define PDL_INTC_REG_IR_MTU0_TGID (PDL_INTC_REG_IR | IR_MTU0_TGID0) +#define PDL_INTC_REG_IR_MTU0_TCIV (PDL_INTC_REG_IR | IR_MTU0_TCIV0) +#define PDL_INTC_REG_IR_MTU0_TGIE (PDL_INTC_REG_IR | IR_MTU0_TGIE0) +#define PDL_INTC_REG_IR_MTU0_TGIF (PDL_INTC_REG_IR | IR_MTU0_TGIF0) +#define PDL_INTC_REG_IR_MTU1_TGIA (PDL_INTC_REG_IR | IR_MTU1_TGIA1) +#define PDL_INTC_REG_IR_MTU1_TGIB (PDL_INTC_REG_IR | IR_MTU1_TGIB1) +#define PDL_INTC_REG_IR_MTU1_TCIV (PDL_INTC_REG_IR | IR_MTU1_TCIV1) +#define PDL_INTC_REG_IR_MTU1_TCIU (PDL_INTC_REG_IR | IR_MTU1_TCIU1) +#define PDL_INTC_REG_IR_MTU2_TGIA (PDL_INTC_REG_IR | IR_MTU2_TGIA2) +#define PDL_INTC_REG_IR_MTU2_TGIB (PDL_INTC_REG_IR | IR_MTU2_TGIB2) +#define PDL_INTC_REG_IR_MTU2_TCIV (PDL_INTC_REG_IR | IR_MTU2_TCIV2) +#define PDL_INTC_REG_IR_MTU2_TCIU (PDL_INTC_REG_IR | IR_MTU2_TCIU2) +#define PDL_INTC_REG_IR_MTU3_TGIA (PDL_INTC_REG_IR | IR_MTU3_TGIA3) +#define PDL_INTC_REG_IR_MTU3_TGIB (PDL_INTC_REG_IR | IR_MTU3_TGIB3) +#define PDL_INTC_REG_IR_MTU3_TGIC (PDL_INTC_REG_IR | IR_MTU3_TGIC3) +#define PDL_INTC_REG_IR_MTU3_TGID (PDL_INTC_REG_IR | IR_MTU3_TGID3) +#define PDL_INTC_REG_IR_MTU3_TCIV (PDL_INTC_REG_IR | IR_MTU3_TCIV3) +#define PDL_INTC_REG_IR_MTU4_TGIA (PDL_INTC_REG_IR | IR_MTU4_TGIA4) +#define PDL_INTC_REG_IR_MTU4_TGIB (PDL_INTC_REG_IR | IR_MTU4_TGIB4) +#define PDL_INTC_REG_IR_MTU4_TGIC (PDL_INTC_REG_IR | IR_MTU4_TGIC4) +#define PDL_INTC_REG_IR_MTU4_TGID (PDL_INTC_REG_IR | IR_MTU4_TGID4) +#define PDL_INTC_REG_IR_MTU4_TCIV (PDL_INTC_REG_IR | IR_MTU4_TCIV4) +#define PDL_INTC_REG_IR_MTU5_TGIU (PDL_INTC_REG_IR | IR_MTU5_TGIU5) +#define PDL_INTC_REG_IR_MTU5_TGIV (PDL_INTC_REG_IR | IR_MTU5_TGIV5) +#define PDL_INTC_REG_IR_MTU5_TGIW (PDL_INTC_REG_IR | IR_MTU5_TGIW5) +#define PDL_INTC_REG_IR_MTU6_TGIA (PDL_INTC_REG_IR | IR_MTU6_TGIA6) +#define PDL_INTC_REG_IR_MTU6_TGIB (PDL_INTC_REG_IR | IR_MTU6_TGIB6) +#define PDL_INTC_REG_IR_MTU6_TGIC (PDL_INTC_REG_IR | IR_MTU6_TGIC6) +#define PDL_INTC_REG_IR_MTU6_TGID (PDL_INTC_REG_IR | IR_MTU6_TGID6) +#define PDL_INTC_REG_IR_MTU6_TCIV (PDL_INTC_REG_IR | IR_MTU6_TCIV6) +#define PDL_INTC_REG_IR_MTU6_TGIE (PDL_INTC_REG_IR | IR_MTU6_TGIE6) +#define PDL_INTC_REG_IR_MTU6_TGIF (PDL_INTC_REG_IR | IR_MTU6_TGIF6) +#define PDL_INTC_REG_IR_MTU7_TGIA (PDL_INTC_REG_IR | IR_MTU7_TGIA7) +#define PDL_INTC_REG_IR_MTU7_TGIB (PDL_INTC_REG_IR | IR_MTU7_TGIB7) +#define PDL_INTC_REG_IR_MTU7_TCIV (PDL_INTC_REG_IR | IR_MTU7_TCIV7) +#define PDL_INTC_REG_IR_MTU7_TCIU (PDL_INTC_REG_IR | IR_MTU7_TCIU7) +#define PDL_INTC_REG_IR_MTU8_TGIA (PDL_INTC_REG_IR | IR_MTU8_TGIA8) +#define PDL_INTC_REG_IR_MTU8_TGIB (PDL_INTC_REG_IR | IR_MTU8_TGIB8) +#define PDL_INTC_REG_IR_MTU8_TCIV (PDL_INTC_REG_IR | IR_MTU8_TCIV8) +#define PDL_INTC_REG_IR_MTU8_TCIU (PDL_INTC_REG_IR | IR_MTU8_TCIU8) +#define PDL_INTC_REG_IR_MTU9_TGIA (PDL_INTC_REG_IR | IR_MTU9_TGIA9) +#define PDL_INTC_REG_IR_MTU9_TGIB (PDL_INTC_REG_IR | IR_MTU9_TGIB9) +#define PDL_INTC_REG_IR_MTU9_TGIC (PDL_INTC_REG_IR | IR_MTU9_TGIC9) +#define PDL_INTC_REG_IR_MTU9_TGID (PDL_INTC_REG_IR | IR_MTU9_TGID9) +#define PDL_INTC_REG_IR_MTU9_TCIV (PDL_INTC_REG_IR | IR_MTU9_TCIV9) +#define PDL_INTC_REG_IR_MTU10_TGIA (PDL_INTC_REG_IR | IR_MTU10_TGIA10) +#define PDL_INTC_REG_IR_MTU10_TGIB (PDL_INTC_REG_IR | IR_MTU10_TGIB10) +#define PDL_INTC_REG_IR_MTU10_TGIC (PDL_INTC_REG_IR | IR_MTU10_TGIC10) +#define PDL_INTC_REG_IR_MTU10_TGID (PDL_INTC_REG_IR | IR_MTU10_TGID10) +#define PDL_INTC_REG_IR_MTU10_TCIV (PDL_INTC_REG_IR | IR_MTU10_TCIV10) +#define PDL_INTC_REG_IR_MTU11_TGIU (PDL_INTC_REG_IR | IR_MTU11_TGIU11) +#define PDL_INTC_REG_IR_MTU11_TGIV (PDL_INTC_REG_IR | IR_MTU11_TGIV11) +#define PDL_INTC_REG_IR_MTU11_TGIW (PDL_INTC_REG_IR | IR_MTU11_TGIW11) +#define PDL_INTC_REG_IR_POE_OEI1 (PDL_INTC_REG_IR | IR_POE_OEI1) +#define PDL_INTC_REG_IR_POE_OEI2 (PDL_INTC_REG_IR | IR_POE_OEI2) +#define PDL_INTC_REG_IR_POE_OEI3 (PDL_INTC_REG_IR | IR_POE_OEI3) +#define PDL_INTC_REG_IR_POE_OEI4 (PDL_INTC_REG_IR | IR_POE_OEI4) +#define PDL_INTC_REG_IR_TMR0_CMIA (PDL_INTC_REG_IR | IR_TMR0_CMIA0) +#define PDL_INTC_REG_IR_TMR0_CMIB (PDL_INTC_REG_IR | IR_TMR0_CMIB0) +#define PDL_INTC_REG_IR_TMR0_OVI (PDL_INTC_REG_IR | IR_TMR0_OVI0) +#define PDL_INTC_REG_IR_TMR1_CMIA (PDL_INTC_REG_IR | IR_TMR1_CMIA1) +#define PDL_INTC_REG_IR_TMR1_CMIB (PDL_INTC_REG_IR | IR_TMR1_CMIB1) +#define PDL_INTC_REG_IR_TMR1_OVI (PDL_INTC_REG_IR | IR_TMR1_OVI1) +#define PDL_INTC_REG_IR_TMR2_CMIA (PDL_INTC_REG_IR | IR_TMR2_CMIA2) +#define PDL_INTC_REG_IR_TMR2_CMIB (PDL_INTC_REG_IR | IR_TMR2_CMIB2) +#define PDL_INTC_REG_IR_TMR2_OVI (PDL_INTC_REG_IR | IR_TMR2_OVI2) +#define PDL_INTC_REG_IR_TMR3_CMIA (PDL_INTC_REG_IR | IR_TMR3_CMIA3) +#define PDL_INTC_REG_IR_TMR3_CMIB (PDL_INTC_REG_IR | IR_TMR3_CMIB3) +#define PDL_INTC_REG_IR_TMR3_OVI (PDL_INTC_REG_IR | IR_TMR3_OVI3) +#define PDL_INTC_REG_IR_DMAC_DMAC0I (PDL_INTC_REG_IR | IR_DMAC_DMAC0I) +#define PDL_INTC_REG_IR_DMAC_DMAC1I (PDL_INTC_REG_IR | IR_DMAC_DMAC1I) +#define PDL_INTC_REG_IR_DMAC_DMAC2I (PDL_INTC_REG_IR | IR_DMAC_DMAC2I) +#define PDL_INTC_REG_IR_DMAC_DMAC3I (PDL_INTC_REG_IR | IR_DMAC_DMAC3I) +#define PDL_INTC_REG_IR_EXDMAC_EXDMAC0I (PDL_INTC_REG_IR | IR_EXDMAC_EXDMAC0I) +#define PDL_INTC_REG_IR_EXDMAC_EXDMAC1I (PDL_INTC_REG_IR | IR_EXDMAC_EXDMAC1I) +#define PDL_INTC_REG_IR_SCI0_ERI (PDL_INTC_REG_IR | IR_SCI0_ERI0) +#define PDL_INTC_REG_IR_SCI0_RXI (PDL_INTC_REG_IR | IR_SCI0_RXI0) +#define PDL_INTC_REG_IR_SCI0_TXI (PDL_INTC_REG_IR | IR_SCI0_TXI0) +#define PDL_INTC_REG_IR_SCI0_TEI (PDL_INTC_REG_IR | IR_SCI0_TEI0) +#define PDL_INTC_REG_IR_SCI1_ERI (PDL_INTC_REG_IR | IR_SCI1_ERI1) +#define PDL_INTC_REG_IR_SCI1_RXI (PDL_INTC_REG_IR | IR_SCI1_RXI1) +#define PDL_INTC_REG_IR_SCI1_TXI (PDL_INTC_REG_IR | IR_SCI1_TXI1) +#define PDL_INTC_REG_IR_SCI1_TEI (PDL_INTC_REG_IR | IR_SCI1_TEI1) +#define PDL_INTC_REG_IR_SCI2_ERI (PDL_INTC_REG_IR | IR_SCI2_ERI2) +#define PDL_INTC_REG_IR_SCI2_RXI (PDL_INTC_REG_IR | IR_SCI2_RXI2) +#define PDL_INTC_REG_IR_SCI2_TXI (PDL_INTC_REG_IR | IR_SCI2_TXI2) +#define PDL_INTC_REG_IR_SCI2_TEI (PDL_INTC_REG_IR | IR_SCI2_TEI2) +#define PDL_INTC_REG_IR_SCI3_ERI (PDL_INTC_REG_IR | IR_SCI3_ERI3) +#define PDL_INTC_REG_IR_SCI3_RXI (PDL_INTC_REG_IR | IR_SCI3_RXI3) +#define PDL_INTC_REG_IR_SCI3_TXI (PDL_INTC_REG_IR | IR_SCI3_TXI3) +#define PDL_INTC_REG_IR_SCI3_TEI (PDL_INTC_REG_IR | IR_SCI3_TEI3) +#define PDL_INTC_REG_IR_SCI5_ERI (PDL_INTC_REG_IR | IR_SCI5_ERI5) +#define PDL_INTC_REG_IR_SCI5_RXI (PDL_INTC_REG_IR | IR_SCI5_RXI5) +#define PDL_INTC_REG_IR_SCI5_TXI (PDL_INTC_REG_IR | IR_SCI5_TXI5) +#define PDL_INTC_REG_IR_SCI5_TEI (PDL_INTC_REG_IR | IR_SCI5_TEI5) +#define PDL_INTC_REG_IR_SCI6_ERI (PDL_INTC_REG_IR | IR_SCI6_ERI6) +#define PDL_INTC_REG_IR_SCI6_RXI (PDL_INTC_REG_IR | IR_SCI6_RXI6) +#define PDL_INTC_REG_IR_SCI6_TXI (PDL_INTC_REG_IR | IR_SCI6_TXI6) +#define PDL_INTC_REG_IR_SCI6_TEI (PDL_INTC_REG_IR | IR_SCI6_TEI6) +#define PDL_INTC_REG_IR_IIC0_EEI (PDL_INTC_REG_IR | IR_RIIC0_ICEEI0) +#define PDL_INTC_REG_IR_IIC0_RXI (PDL_INTC_REG_IR | IR_RIIC0_ICRXI0) +#define PDL_INTC_REG_IR_IIC0_TXI (PDL_INTC_REG_IR | IR_RIIC0_ICTXI0) +#define PDL_INTC_REG_IR_IIC0_TEI (PDL_INTC_REG_IR | IR_RIIC0_ICTEI0) +#define PDL_INTC_REG_IR_IIC1_EEI (PDL_INTC_REG_IR | IR_RIIC1_ICEEI1) +#define PDL_INTC_REG_IR_IIC1_RXI (PDL_INTC_REG_IR | IR_RIIC1_ICRXI1) +#define PDL_INTC_REG_IR_IIC1_TXI (PDL_INTC_REG_IR | IR_RIIC1_ICTXI1) +#define PDL_INTC_REG_IR_IIC1_TEI (PDL_INTC_REG_IR | IR_RIIC1_ICTEI1) + +/* IER registers */ +#define PDL_INTC_REG_IER02 (PDL_INTC_REG_IER | 0x02) +#define PDL_INTC_REG_IER03 (PDL_INTC_REG_IER | 0x03) +#define PDL_INTC_REG_IER04 (PDL_INTC_REG_IER | 0x04) +#define PDL_INTC_REG_IER05 (PDL_INTC_REG_IER | 0x05) +#define PDL_INTC_REG_IER06 (PDL_INTC_REG_IER | 0x06) +#define PDL_INTC_REG_IER07 (PDL_INTC_REG_IER | 0x07) +#define PDL_INTC_REG_IER08 (PDL_INTC_REG_IER | 0x08) +#define PDL_INTC_REG_IER09 (PDL_INTC_REG_IER | 0x09) +#define PDL_INTC_REG_IER0B (PDL_INTC_REG_IER | 0x0B) +#define PDL_INTC_REG_IER0C (PDL_INTC_REG_IER | 0x0C) +#define PDL_INTC_REG_IER0E (PDL_INTC_REG_IER | 0x0E) +#define PDL_INTC_REG_IER0F (PDL_INTC_REG_IER | 0x0F) +#define PDL_INTC_REG_IER10 (PDL_INTC_REG_IER | 0x10) +#define PDL_INTC_REG_IER11 (PDL_INTC_REG_IER | 0x11) +#define PDL_INTC_REG_IER12 (PDL_INTC_REG_IER | 0x12) +#define PDL_INTC_REG_IER13 (PDL_INTC_REG_IER | 0x13) +#define PDL_INTC_REG_IER14 (PDL_INTC_REG_IER | 0x14) +#define PDL_INTC_REG_IER15 (PDL_INTC_REG_IER | 0x15) +#define PDL_INTC_REG_IER16 (PDL_INTC_REG_IER | 0x16) +#define PDL_INTC_REG_IER17 (PDL_INTC_REG_IER | 0x17) +#define PDL_INTC_REG_IER18 (PDL_INTC_REG_IER | 0x18) +#define PDL_INTC_REG_IER19 (PDL_INTC_REG_IER | 0x19) +#define PDL_INTC_REG_IER1A (PDL_INTC_REG_IER | 0x1A) +#define PDL_INTC_REG_IER1B (PDL_INTC_REG_IER | 0x1B) +#define PDL_INTC_REG_IER1C (PDL_INTC_REG_IER | 0x1C) +#define PDL_INTC_REG_IER1D (PDL_INTC_REG_IER | 0x1D) +#define PDL_INTC_REG_IER1E (PDL_INTC_REG_IER | 0x1E) +#define PDL_INTC_REG_IER1F (PDL_INTC_REG_IER | 0x1F) + +/* IPR registers */ +#define PDL_INTC_REG_IPR_BSC_BUSERR (PDL_INTC_REG_IPR | IPR_BSC_BUSERR) +#define PDL_INTC_REG_IPR_FCU_FIFERR (PDL_INTC_REG_IPR | IPR_FCU_FIFERR) +#define PDL_INTC_REG_IPR_FCU_FRDYI (PDL_INTC_REG_IPR | IPR_FCU_FRDYI) +#define PDL_INTC_REG_IPR_ICU_SWINT (PDL_INTC_REG_IPR | IPR_ICU_SWINT) +#define PDL_INTC_REG_IPR_CMT0_CMI (PDL_INTC_REG_IPR | IPR_CMT0_CMI0) +#define PDL_INTC_REG_IPR_CMT1_CMI (PDL_INTC_REG_IPR | IPR_CMT1_CMI1) +#define PDL_INTC_REG_IPR_CMT2_CMI (PDL_INTC_REG_IPR | IPR_CMT2_CMI2) +#define PDL_INTC_REG_IPR_CMT3_CMI (PDL_INTC_REG_IPR | IPR_CMT3_CMI3) +#define PDL_INTC_REG_IPR_ETHER_EINT (PDL_INTC_REG_IPR | IPR_ETHER_EINT) +#define PDL_INTC_REG_IPR_USB0_D0FIFO (PDL_INTC_REG_IPR | IPR_USB0_D0FIFO0) +#define PDL_INTC_REG_IPR_USB0_D1FIFO (PDL_INTC_REG_IPR | IPR_USB0_D1FIFO0) +#define PDL_INTC_REG_IPR_USB0_USBI (PDL_INTC_REG_IPR | IPR_USB0_USBI0) +#define PDL_INTC_REG_IPR_USB1_D0FIFO (PDL_INTC_REG_IPR | IPR_USB1_D0FIFO1) +#define PDL_INTC_REG_IPR_USB1_D1FIFO (PDL_INTC_REG_IPR | IPR_USB1_D1FIFO1) +#define PDL_INTC_REG_IPR_USB1_USBI (PDL_INTC_REG_IPR | IPR_USB1_USBI1) +#define PDL_INTC_REG_IPR_SPI0_SPEI (PDL_INTC_REG_IPR | IPR_RSPI0_SPEI0) +#define PDL_INTC_REG_IPR_SPI0_SPRI (PDL_INTC_REG_IPR | IPR_RSPI0_SPRI0) +#define PDL_INTC_REG_IPR_SPI0_SPTI (PDL_INTC_REG_IPR | IPR_RSPI0_SPTI0) +#define PDL_INTC_REG_IPR_SPI0_SPII (PDL_INTC_REG_IPR | IPR_RSPI0_SPII0) +#define PDL_INTC_REG_IPR_SPI1_SPEI (PDL_INTC_REG_IPR | IPR_RSPI1_SPEI1) +#define PDL_INTC_REG_IPR_SPI1_SPRI (PDL_INTC_REG_IPR | IPR_RSPI1_SPRI1) +#define PDL_INTC_REG_IPR_SPI1_SPTI (PDL_INTC_REG_IPR | IPR_RSPI1_SPTI1) +#define PDL_INTC_REG_IPR_SPI1_SPII (PDL_INTC_REG_IPR | IPR_RSPI1_SPII1) +#define PDL_INTC_REG_IPR_CAN0_ERS (PDL_INTC_REG_IPR | IPR_CAN0_ERS0) +#define PDL_INTC_REG_IPR_CAN0_RXF (PDL_INTC_REG_IPR | IPR_CAN0_RXF0) +#define PDL_INTC_REG_IPR_CAN0_TXF (PDL_INTC_REG_IPR | IPR_CAN0_TXF0) +#define PDL_INTC_REG_IPR_CAN0_RXM (PDL_INTC_REG_IPR | IPR_CAN0_RXM0) +#define PDL_INTC_REG_IPR_CAN0_TXM (PDL_INTC_REG_IPR | IPR_CAN0_TXM0) +#define PDL_INTC_REG_IPR_RTC_PRD (PDL_INTC_REG_IPR | IPR_RTC_PRD) +#define PDL_INTC_REG_IPR_RTC_CUP (PDL_INTC_REG_IPR | IPR_RTC_CUP) +#define PDL_INTC_REG_IPR_ICU_IRQ0 (PDL_INTC_REG_IPR | IPR_ICU_IRQ0) +#define PDL_INTC_REG_IPR_ICU_IRQ1 (PDL_INTC_REG_IPR | IPR_ICU_IRQ1) +#define PDL_INTC_REG_IPR_ICU_IRQ2 (PDL_INTC_REG_IPR | IPR_ICU_IRQ2) +#define PDL_INTC_REG_IPR_ICU_IRQ3 (PDL_INTC_REG_IPR | IPR_ICU_IRQ3) +#define PDL_INTC_REG_IPR_ICU_IRQ4 (PDL_INTC_REG_IPR | IPR_ICU_IRQ4) +#define PDL_INTC_REG_IPR_ICU_IRQ5 (PDL_INTC_REG_IPR | IPR_ICU_IRQ5) +#define PDL_INTC_REG_IPR_ICU_IRQ6 (PDL_INTC_REG_IPR | IPR_ICU_IRQ6) +#define PDL_INTC_REG_IPR_ICU_IRQ7 (PDL_INTC_REG_IPR | IPR_ICU_IRQ7) +#define PDL_INTC_REG_IPR_ICU_IRQ8 (PDL_INTC_REG_IPR | IPR_ICU_IRQ8) +#define PDL_INTC_REG_IPR_ICU_IRQ9 (PDL_INTC_REG_IPR | IPR_ICU_IRQ9) +#define PDL_INTC_REG_IPR_ICU_IRQ10 (PDL_INTC_REG_IPR | IPR_ICU_IRQ10) +#define PDL_INTC_REG_IPR_ICU_IRQ11 (PDL_INTC_REG_IPR | IPR_ICU_IRQ11) +#define PDL_INTC_REG_IPR_ICU_IRQ12 (PDL_INTC_REG_IPR | IPR_ICU_IRQ12) +#define PDL_INTC_REG_IPR_ICU_IRQ13 (PDL_INTC_REG_IPR | IPR_ICU_IRQ13) +#define PDL_INTC_REG_IPR_ICU_IRQ14 (PDL_INTC_REG_IPR | IPR_ICU_IRQ14) +#define PDL_INTC_REG_IPR_ICU_IRQ15 (PDL_INTC_REG_IPR | IPR_ICU_IRQ15) +#define PDL_INTC_REG_IPR_USB_USBR0 (PDL_INTC_REG_IPR | IPR_USB_USBR0) +#define PDL_INTC_REG_IPR_USB_USBR1 (PDL_INTC_REG_IPR | IPR_USB_USBR1) +#define PDL_INTC_REG_IPR_RTC_ALM (PDL_INTC_REG_IPR | IPR_RTC_ALM) +#define PDL_INTC_REG_IPR_WDT_WOVI (PDL_INTC_REG_IPR | IPR_WDT_WOVI) +#define PDL_INTC_REG_IPR_AD0_ADI (PDL_INTC_REG_IPR | IPR_AD0_ADI0) +#define PDL_INTC_REG_IPR_AD1_ADI (PDL_INTC_REG_IPR | IPR_AD1_ADI1) +#define PDL_INTC_REG_IPR_S12AD_ADI (PDL_INTC_REG_IPR | IPR_S12AD_ADI) +#define PDL_INTC_REG_IPR_MTU0_TGIA (PDL_INTC_REG_IPR | IPR_MTU0_TGIA0) +#define PDL_INTC_REG_IPR_MTU0_TGIB (PDL_INTC_REG_IPR | IPR_MTU0_TGIB0) +#define PDL_INTC_REG_IPR_MTU0_TGIC (PDL_INTC_REG_IPR | IPR_MTU0_TGIC0) +#define PDL_INTC_REG_IPR_MTU0_TGID (PDL_INTC_REG_IPR | IPR_MTU0_TGID0) +#define PDL_INTC_REG_IPR_MTU0_TCIV (PDL_INTC_REG_IPR | IPR_MTU0_TCIV0) +#define PDL_INTC_REG_IPR_MTU0_TGIE (PDL_INTC_REG_IPR | IPR_MTU0_TGIE0) +#define PDL_INTC_REG_IPR_MTU0_TGIF (PDL_INTC_REG_IPR | IPR_MTU0_TGIF0) +#define PDL_INTC_REG_IPR_MTU1_TGIA (PDL_INTC_REG_IPR | IPR_MTU1_TGIA1) +#define PDL_INTC_REG_IPR_MTU1_TGIB (PDL_INTC_REG_IPR | IPR_MTU1_TGIB1) +#define PDL_INTC_REG_IPR_MTU1_TCIV (PDL_INTC_REG_IPR | IPR_MTU1_TCIV1) +#define PDL_INTC_REG_IPR_MTU1_TCIU (PDL_INTC_REG_IPR | IPR_MTU1_TCIU1) +#define PDL_INTC_REG_IPR_MTU2_TGIA (PDL_INTC_REG_IPR | IPR_MTU2_TGIA2) +#define PDL_INTC_REG_IPR_MTU2_TGIB (PDL_INTC_REG_IPR | IPR_MTU2_TGIB2) +#define PDL_INTC_REG_IPR_MTU2_TCIV (PDL_INTC_REG_IPR | IPR_MTU2_TCIV2) +#define PDL_INTC_REG_IPR_MTU2_TCIU (PDL_INTC_REG_IPR | IPR_MTU2_TCIU2) +#define PDL_INTC_REG_IPR_MTU3_TGIA (PDL_INTC_REG_IPR | IPR_MTU3_TGIA3) +#define PDL_INTC_REG_IPR_MTU3_TGIB (PDL_INTC_REG_IPR | IPR_MTU3_TGIB3) +#define PDL_INTC_REG_IPR_MTU3_TGIC (PDL_INTC_REG_IPR | IPR_MTU3_TGIC3) +#define PDL_INTC_REG_IPR_MTU3_TGID (PDL_INTC_REG_IPR | IPR_MTU3_TGID3) +#define PDL_INTC_REG_IPR_MTU3_TCIV (PDL_INTC_REG_IPR | IPR_MTU3_TCIV3) +#define PDL_INTC_REG_IPR_MTU4_TGIA (PDL_INTC_REG_IPR | IPR_MTU4_TGIA4) +#define PDL_INTC_REG_IPR_MTU4_TGIB (PDL_INTC_REG_IPR | IPR_MTU4_TGIB4) +#define PDL_INTC_REG_IPR_MTU4_TGIC (PDL_INTC_REG_IPR | IPR_MTU4_TGIC4) +#define PDL_INTC_REG_IPR_MTU4_TGID (PDL_INTC_REG_IPR | IPR_MTU4_TGID4) +#define PDL_INTC_REG_IPR_MTU4_TCIV (PDL_INTC_REG_IPR | IPR_MTU4_TCIV4) +#define PDL_INTC_REG_IPR_MTU5_TGIU (PDL_INTC_REG_IPR | IPR_MTU5_TGIU5) +#define PDL_INTC_REG_IPR_MTU5_TGIV (PDL_INTC_REG_IPR | IPR_MTU5_TGIV5) +#define PDL_INTC_REG_IPR_MTU5_TGIW (PDL_INTC_REG_IPR | IPR_MTU5_TGIW5) +#define PDL_INTC_REG_IPR_MTU6_TGIA (PDL_INTC_REG_IPR | IPR_MTU6_TGIA6) +#define PDL_INTC_REG_IPR_MTU6_TGIB (PDL_INTC_REG_IPR | IPR_MTU6_TGIB6) +#define PDL_INTC_REG_IPR_MTU6_TGIC (PDL_INTC_REG_IPR | IPR_MTU6_TGIC6) +#define PDL_INTC_REG_IPR_MTU6_TGID (PDL_INTC_REG_IPR | IPR_MTU6_TGID6) +#define PDL_INTC_REG_IPR_MTU6_TCIV (PDL_INTC_REG_IPR | IPR_MTU6_TCIV6) +#define PDL_INTC_REG_IPR_MTU6_TGIE (PDL_INTC_REG_IPR | IPR_MTU6_TGIE6) +#define PDL_INTC_REG_IPR_MTU6_TGIF (PDL_INTC_REG_IPR | IPR_MTU6_TGIF6) +#define PDL_INTC_REG_IPR_MTU7_TGIA (PDL_INTC_REG_IPR | IPR_MTU7_TGIA7) +#define PDL_INTC_REG_IPR_MTU7_TGIB (PDL_INTC_REG_IPR | IPR_MTU7_TGIB7) +#define PDL_INTC_REG_IPR_MTU7_TCIV (PDL_INTC_REG_IPR | IPR_MTU7_TCIV7) +#define PDL_INTC_REG_IPR_MTU7_TCIU (PDL_INTC_REG_IPR | IPR_MTU7_TCIU7) +#define PDL_INTC_REG_IPR_MTU8_TGIA (PDL_INTC_REG_IPR | IPR_MTU8_TGIA8) +#define PDL_INTC_REG_IPR_MTU8_TGIB (PDL_INTC_REG_IPR | IPR_MTU8_TGIB8) +#define PDL_INTC_REG_IPR_MTU8_TCIV (PDL_INTC_REG_IPR | IPR_MTU8_TCIV8) +#define PDL_INTC_REG_IPR_MTU8_TCIU (PDL_INTC_REG_IPR | IPR_MTU8_TCIU8) +#define PDL_INTC_REG_IPR_MTU9_TGIA (PDL_INTC_REG_IPR | IPR_MTU9_TGIA9) +#define PDL_INTC_REG_IPR_MTU9_TGIB (PDL_INTC_REG_IPR | IPR_MTU9_TGIB9) +#define PDL_INTC_REG_IPR_MTU9_TGIC (PDL_INTC_REG_IPR | IPR_MTU9_TGIC9) +#define PDL_INTC_REG_IPR_MTU9_TGID (PDL_INTC_REG_IPR | IPR_MTU9_TGID9) +#define PDL_INTC_REG_IPR_MTU9_TCIV (PDL_INTC_REG_IPR | IPR_MTU9_TCIV9) +#define PDL_INTC_REG_IPR_MTU10_TGIA (PDL_INTC_REG_IPR | IPR_MTU10_TGIA10) +#define PDL_INTC_REG_IPR_MTU10_TGIB (PDL_INTC_REG_IPR | IPR_MTU10_TGIB10) +#define PDL_INTC_REG_IPR_MTU10_TGIC (PDL_INTC_REG_IPR | IPR_MTU10_TGIC10) +#define PDL_INTC_REG_IPR_MTU10_TGID (PDL_INTC_REG_IPR | IPR_MTU10_TGID10) +#define PDL_INTC_REG_IPR_MTU10_TCIV (PDL_INTC_REG_IPR | IPR_MTU10_TCIV10) +#define PDL_INTC_REG_IPR_MTU11_TGIU (PDL_INTC_REG_IPR | IPR_MTU11_TGIU11) +#define PDL_INTC_REG_IPR_MTU11_TGIV (PDL_INTC_REG_IPR | IPR_MTU11_TGIV11) +#define PDL_INTC_REG_IPR_MTU11_TGIW (PDL_INTC_REG_IPR | IPR_MTU11_TGIW11) +#define PDL_INTC_REG_IPR_POE_OEI1 (PDL_INTC_REG_IPR | IPR_POE_OEI1) +#define PDL_INTC_REG_IPR_POE_OEI2 (PDL_INTC_REG_IPR | IPR_POE_OEI2) +#define PDL_INTC_REG_IPR_POE_OEI3 (PDL_INTC_REG_IPR | IPR_POE_OEI3) +#define PDL_INTC_REG_IPR_POE_OEI4 (PDL_INTC_REG_IPR | IPR_POE_OEI4) +#define PDL_INTC_REG_IPR_TMR0_CMIA (PDL_INTC_REG_IPR | IPR_TMR0_CMIA0) +#define PDL_INTC_REG_IPR_TMR0_CMIB (PDL_INTC_REG_IPR | IPR_TMR0_CMIB0) +#define PDL_INTC_REG_IPR_TMR0_OVI (PDL_INTC_REG_IPR | IPR_TMR0_OVI0) +#define PDL_INTC_REG_IPR_TMR1_CMIA (PDL_INTC_REG_IPR | IPR_TMR1_CMIA1) +#define PDL_INTC_REG_IPR_TMR1_CMIB (PDL_INTC_REG_IPR | IPR_TMR1_CMIB1) +#define PDL_INTC_REG_IPR_TMR1_OVI (PDL_INTC_REG_IPR | IPR_TMR1_OVI1) +#define PDL_INTC_REG_IPR_TMR2_CMIA (PDL_INTC_REG_IPR | IPR_TMR2_CMIA2) +#define PDL_INTC_REG_IPR_TMR2_CMIB (PDL_INTC_REG_IPR | IPR_TMR2_CMIB2) +#define PDL_INTC_REG_IPR_TMR2_OVI (PDL_INTC_REG_IPR | IPR_TMR2_OVI2) +#define PDL_INTC_REG_IPR_TMR3_CMIA (PDL_INTC_REG_IPR | IPR_TMR3_CMIA3) +#define PDL_INTC_REG_IPR_TMR3_CMIB (PDL_INTC_REG_IPR | IPR_TMR3_CMIB3) +#define PDL_INTC_REG_IPR_TMR3_OVI (PDL_INTC_REG_IPR | IPR_TMR3_OVI3) +#define PDL_INTC_REG_IPR_DMAC_DMAC0I (PDL_INTC_REG_IPR | IPR_DMAC_DMAC0I) +#define PDL_INTC_REG_IPR_DMAC_DMAC1I (PDL_INTC_REG_IPR | IPR_DMAC_DMAC1I) +#define PDL_INTC_REG_IPR_DMAC_DMAC2I (PDL_INTC_REG_IPR | IPR_DMAC_DMAC2I) +#define PDL_INTC_REG_IPR_DMAC_DMAC3I (PDL_INTC_REG_IPR | IPR_DMAC_DMAC3I) +#define PDL_INTC_REG_IPR_EXDMAC_EXDMAC0I (PDL_INTC_REG_IPR | IPR_EXDMAC_EXDMAC0I) +#define PDL_INTC_REG_IPR_EXDMAC_EXDMAC1I (PDL_INTC_REG_IPR | IPR_EXDMAC_EXDMAC1I) +#define PDL_INTC_REG_IPR_SCI0_ERI (PDL_INTC_REG_IPR | IPR_SCI0_ERI0) +#define PDL_INTC_REG_IPR_SCI0_RXI (PDL_INTC_REG_IPR | IPR_SCI0_RXI0) +#define PDL_INTC_REG_IPR_SCI0_TXI (PDL_INTC_REG_IPR | IPR_SCI0_TXI0) +#define PDL_INTC_REG_IPR_SCI0_TEI (PDL_INTC_REG_IPR | IPR_SCI0_TEI0) +#define PDL_INTC_REG_IPR_SCI1_ERI (PDL_INTC_REG_IPR | IPR_SCI1_ERI1) +#define PDL_INTC_REG_IPR_SCI1_RXI (PDL_INTC_REG_IPR | IPR_SCI1_RXI1) +#define PDL_INTC_REG_IPR_SCI1_TXI (PDL_INTC_REG_IPR | IPR_SCI1_TXI1) +#define PDL_INTC_REG_IPR_SCI1_TEI (PDL_INTC_REG_IPR | IPR_SCI1_TEI1) +#define PDL_INTC_REG_IPR_SCI2_ERI (PDL_INTC_REG_IPR | IPR_SCI2_ERI2) +#define PDL_INTC_REG_IPR_SCI2_RXI (PDL_INTC_REG_IPR | IPR_SCI2_RXI2) +#define PDL_INTC_REG_IPR_SCI2_TXI (PDL_INTC_REG_IPR | IPR_SCI2_TXI2) +#define PDL_INTC_REG_IPR_SCI2_TEI (PDL_INTC_REG_IPR | IPR_SCI2_TEI2) +#define PDL_INTC_REG_IPR_SCI3_ERI (PDL_INTC_REG_IPR | IPR_SCI3_ERI3) +#define PDL_INTC_REG_IPR_SCI3_RXI (PDL_INTC_REG_IPR | IPR_SCI3_RXI3) +#define PDL_INTC_REG_IPR_SCI3_TXI (PDL_INTC_REG_IPR | IPR_SCI3_TXI3) +#define PDL_INTC_REG_IPR_SCI3_TEI (PDL_INTC_REG_IPR | IPR_SCI3_TEI3) +#define PDL_INTC_REG_IPR_SCI5_ERI (PDL_INTC_REG_IPR | IPR_SCI5_ERI5) +#define PDL_INTC_REG_IPR_SCI5_RXI (PDL_INTC_REG_IPR | IPR_SCI5_RXI5) +#define PDL_INTC_REG_IPR_SCI5_TXI (PDL_INTC_REG_IPR | IPR_SCI5_TXI5) +#define PDL_INTC_REG_IPR_SCI5_TEI (PDL_INTC_REG_IPR | IPR_SCI5_TEI5) +#define PDL_INTC_REG_IPR_SCI6_ERI (PDL_INTC_REG_IPR | IPR_SCI6_ERI6) +#define PDL_INTC_REG_IPR_SCI6_RXI (PDL_INTC_REG_IPR | IPR_SCI6_RXI6) +#define PDL_INTC_REG_IPR_SCI6_TXI (PDL_INTC_REG_IPR | IPR_SCI6_TXI6) +#define PDL_INTC_REG_IPR_SCI6_TEI (PDL_INTC_REG_IPR | IPR_SCI6_TEI6) +#define PDL_INTC_REG_IPR_IIC0_EEI (PDL_INTC_REG_IPR | IPR_RIIC0_ICEEI0) +#define PDL_INTC_REG_IPR_IIC0_RXI (PDL_INTC_REG_IPR | IPR_RIIC0_ICRXI0) +#define PDL_INTC_REG_IPR_IIC0_TXI (PDL_INTC_REG_IPR | IPR_RIIC0_ICTXI0) +#define PDL_INTC_REG_IPR_IIC0_TEI (PDL_INTC_REG_IPR | IPR_RIIC0_ICTEI0) +#define PDL_INTC_REG_IPR_IIC1_EEI (PDL_INTC_REG_IPR | IPR_RIIC1_ICEEI1) +#define PDL_INTC_REG_IPR_IIC1_RXI (PDL_INTC_REG_IPR | IPR_RIIC1_ICRXI1) +#define PDL_INTC_REG_IPR_IIC1_TXI (PDL_INTC_REG_IPR | IPR_RIIC1_ICTXI1) +#define PDL_INTC_REG_IPR_IIC1_TEI (PDL_INTC_REG_IPR | IPR_RIIC1_ICTEI1) + +/* DTCER registers */ +#define PDL_INTC_REG_DTCER_ICU_SWINT (PDL_INTC_REG_DTCER | DTCE_ICU_SWINT) +#define PDL_INTC_REG_DTCER_CMT0_CMI (PDL_INTC_REG_DTCER | DTCE_CMT0_CMI0) +#define PDL_INTC_REG_DTCER_CMT1_CMI (PDL_INTC_REG_DTCER | DTCE_CMT1_CMI1) +#define PDL_INTC_REG_DTCER_CMT2_CMI (PDL_INTC_REG_DTCER | DTCE_CMT2_CMI2) +#define PDL_INTC_REG_DTCER_CMT3_CMI (PDL_INTC_REG_DTCER | DTCE_CMT3_CMI3) +#define PDL_INTC_REG_DTCER_USB0_D0FIFO (PDL_INTC_REG_DTCER | DTCE_USB0_D0FIFO0) +#define PDL_INTC_REG_DTCER_USB0_D1FIFO (PDL_INTC_REG_DTCER | DTCE_USB0_D1FIFO0) +#define PDL_INTC_REG_DTCER_USB1_D0FIFO (PDL_INTC_REG_DTCER | DTCE_USB1_D0FIFO1) +#define PDL_INTC_REG_DTCER_USB1_D1FIFO (PDL_INTC_REG_DTCER | DTCE_USB1_D1FIFO1) +#define PDL_INTC_REG_DTCER_SPI0_SPRI (PDL_INTC_REG_DTCER | DTCE_RSPI0_SPRI0) +#define PDL_INTC_REG_DTCER_SPI0_SPTI (PDL_INTC_REG_DTCER | DTCE_RSPI0_SPTI0) +#define PDL_INTC_REG_DTCER_SPI1_SPRI (PDL_INTC_REG_DTCER | DTCE_RSPI1_SPRI1) +#define PDL_INTC_REG_DTCER_SPI1_SPTI (PDL_INTC_REG_DTCER | DTCE_RSPI1_SPTI1) +#define PDL_INTC_REG_DTCER_ICU_IRQ0 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ0) +#define PDL_INTC_REG_DTCER_ICU_IRQ1 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ1) +#define PDL_INTC_REG_DTCER_ICU_IRQ2 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ2) +#define PDL_INTC_REG_DTCER_ICU_IRQ3 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ3) +#define PDL_INTC_REG_DTCER_ICU_IRQ4 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ4) +#define PDL_INTC_REG_DTCER_ICU_IRQ5 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ5) +#define PDL_INTC_REG_DTCER_ICU_IRQ6 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ6) +#define PDL_INTC_REG_DTCER_ICU_IRQ7 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ7) +#define PDL_INTC_REG_DTCER_ICU_IRQ8 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ8) +#define PDL_INTC_REG_DTCER_ICU_IRQ9 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ9) +#define PDL_INTC_REG_DTCER_ICU_IRQ10 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ10) +#define PDL_INTC_REG_DTCER_ICU_IRQ11 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ11) +#define PDL_INTC_REG_DTCER_ICU_IRQ12 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ12) +#define PDL_INTC_REG_DTCER_ICU_IRQ13 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ13) +#define PDL_INTC_REG_DTCER_ICU_IRQ14 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ14) +#define PDL_INTC_REG_DTCER_ICU_IRQ15 (PDL_INTC_REG_DTCER | DTCE_ICU_IRQ15) +#define PDL_INTC_REG_DTCER_AD0_ADI (PDL_INTC_REG_DTCER | DTCE_AD0_ADI0) +#define PDL_INTC_REG_DTCER_AD1_ADI (PDL_INTC_REG_DTCER | DTCE_AD1_ADI1) +#define PDL_INTC_REG_DTCER_S12AD_ADI (PDL_INTC_REG_DTCER | DTCE_S12AD_ADI) +#define PDL_INTC_REG_DTCER_MTU0_TGIA (PDL_INTC_REG_DTCER | DTCE_MTU0_TGIA0) +#define PDL_INTC_REG_DTCER_MTU0_TGIB (PDL_INTC_REG_DTCER | DTCE_MTU0_TGIB0) +#define PDL_INTC_REG_DTCER_MTU0_TGIC (PDL_INTC_REG_DTCER | DTCE_MTU0_TGIC0) +#define PDL_INTC_REG_DTCER_MTU0_TGID (PDL_INTC_REG_DTCER | DTCE_MTU0_TGID0) +#define PDL_INTC_REG_DTCER_MTU1_TGIA (PDL_INTC_REG_DTCER | DTCE_MTU1_TGIA1) +#define PDL_INTC_REG_DTCER_MTU1_TGIB (PDL_INTC_REG_DTCER | DTCE_MTU1_TGIB1) +#define PDL_INTC_REG_DTCER_MTU2_TGIA (PDL_INTC_REG_DTCER | DTCE_MTU2_TGIA2) +#define PDL_INTC_REG_DTCER_MTU2_TGIB (PDL_INTC_REG_DTCER | DTCE_MTU2_TGIB2) +#define PDL_INTC_REG_DTCER_MTU3_TGIA (PDL_INTC_REG_DTCER | DTCE_MTU3_TGIA3) +#define PDL_INTC_REG_DTCER_MTU3_TGIB (PDL_INTC_REG_DTCER | DTCE_MTU3_TGIB3) +#define PDL_INTC_REG_DTCER_MTU3_TGIC (PDL_INTC_REG_DTCER | DTCE_MTU3_TGIC3) +#define PDL_INTC_REG_DTCER_MTU3_TGID (PDL_INTC_REG_DTCER | DTCE_MTU3_TGID3) +#define PDL_INTC_REG_DTCER_MTU4_TGIA (PDL_INTC_REG_DTCER | DTCE_MTU4_TGIA4) +#define PDL_INTC_REG_DTCER_MTU4_TGIB (PDL_INTC_REG_DTCER | DTCE_MTU4_TGIB4) +#define PDL_INTC_REG_DTCER_MTU4_TGIC (PDL_INTC_REG_DTCER | DTCE_MTU4_TGIC4) +#define PDL_INTC_REG_DTCER_MTU4_TGID (PDL_INTC_REG_DTCER | DTCE_MTU4_TGID4) +#define PDL_INTC_REG_DTCER_MTU4_TCIV (PDL_INTC_REG_DTCER | DTCE_MTU4_TCIV4) +#define PDL_INTC_REG_DTCER_MTU5_TGIU (PDL_INTC_REG_DTCER | DTCE_MTU5_TGIU5) +#define PDL_INTC_REG_DTCER_MTU5_TGIV (PDL_INTC_REG_DTCER | DTCE_MTU5_TGIV5) +#define PDL_INTC_REG_DTCER_MTU5_TGIW (PDL_INTC_REG_DTCER | DTCE_MTU5_TGIW5) +#define PDL_INTC_REG_DTCER_MTU6_TGIA (PDL_INTC_REG_DTCER | DTCE_MTU6_TGIA6) +#define PDL_INTC_REG_DTCER_MTU6_TGIB (PDL_INTC_REG_DTCER | DTCE_MTU6_TGIB6) +#define PDL_INTC_REG_DTCER_MTU6_TGIC (PDL_INTC_REG_DTCER | DTCE_MTU6_TGIC6) +#define PDL_INTC_REG_DTCER_MTU6_TGID (PDL_INTC_REG_DTCER | DTCE_MTU6_TGID6) +#define PDL_INTC_REG_DTCER_MTU7_TGIA (PDL_INTC_REG_DTCER | DTCE_MTU7_TGIA7) +#define PDL_INTC_REG_DTCER_MTU7_TGIB (PDL_INTC_REG_DTCER | DTCE_MTU7_TGIB7) +#define PDL_INTC_REG_DTCER_MTU8_TGIA (PDL_INTC_REG_DTCER | DTCE_MTU8_TGIA8) +#define PDL_INTC_REG_DTCER_MTU8_TGIB (PDL_INTC_REG_DTCER | DTCE_MTU8_TGIB8) +#define PDL_INTC_REG_DTCER_MTU9_TGIA (PDL_INTC_REG_DTCER | DTCE_MTU9_TGIA9) +#define PDL_INTC_REG_DTCER_MTU9_TGIB (PDL_INTC_REG_DTCER | DTCE_MTU9_TGIB9) +#define PDL_INTC_REG_DTCER_MTU9_TGIC (PDL_INTC_REG_DTCER | DTCE_MTU9_TGIC9) +#define PDL_INTC_REG_DTCER_MTU9_TGID (PDL_INTC_REG_DTCER | DTCE_MTU9_TGID9) +#define PDL_INTC_REG_DTCER_MTU10_TGIA (PDL_INTC_REG_DTCER | DTCE_MTU10_TGIA10) +#define PDL_INTC_REG_DTCER_MTU10_TGIB (PDL_INTC_REG_DTCER | DTCE_MTU10_TGIB10) +#define PDL_INTC_REG_DTCER_MTU10_TGIC (PDL_INTC_REG_DTCER | DTCE_MTU10_TGIC10) +#define PDL_INTC_REG_DTCER_MTU10_TGID (PDL_INTC_REG_DTCER | DTCE_MTU10_TGID10) +#define PDL_INTC_REG_DTCER_MTU10_TCIV (PDL_INTC_REG_DTCER | DTCE_MTU10_TCIV10) +#define PDL_INTC_REG_DTCER_MTU11_TGIU (PDL_INTC_REG_DTCER | DTCE_MTU11_TGIU11) +#define PDL_INTC_REG_DTCER_MTU11_TGIV (PDL_INTC_REG_DTCER | DTCE_MTU11_TGIV11) +#define PDL_INTC_REG_DTCER_MTU11_TGIW (PDL_INTC_REG_DTCER | DTCE_MTU11_TGIW11) +#define PDL_INTC_REG_DTCER_TMR0_CMIA0 (PDL_INTC_REG_DTCER | DTCE_TMR0_CMIA0) +#define PDL_INTC_REG_DTCER_TMR0_CMIB0 (PDL_INTC_REG_DTCER | DTCE_TMR0_CMIB0) +#define PDL_INTC_REG_DTCER_TMR1_CMIA (PDL_INTC_REG_DTCER | DTCE_TMR1_CMIA1) +#define PDL_INTC_REG_DTCER_TMR1_CMIB (PDL_INTC_REG_DTCER | DTCE_TMR1_CMIB1) +#define PDL_INTC_REG_DTCER_TMR2_CMIA (PDL_INTC_REG_DTCER | DTCE_TMR2_CMIA2) +#define PDL_INTC_REG_DTCER_TMR2_CMIB (PDL_INTC_REG_DTCER | DTCE_TMR2_CMIB2) +#define PDL_INTC_REG_DTCER_TMR3_CMIA (PDL_INTC_REG_DTCER | DTCE_TMR3_CMIA3) +#define PDL_INTC_REG_DTCER_TMR3_CMIB (PDL_INTC_REG_DTCER | DTCE_TMR3_CMIB3) +#define PDL_INTC_REG_DTCER_DMAC_DMAC0I (PDL_INTC_REG_DTCER | DTCE_DMAC_DMAC0I) +#define PDL_INTC_REG_DTCER_DMAC_DMAC1I (PDL_INTC_REG_DTCER | DTCE_DMAC_DMAC1I) +#define PDL_INTC_REG_DTCER_DMAC_DMAC2I (PDL_INTC_REG_DTCER | DTCE_DMAC_DMAC2I) +#define PDL_INTC_REG_DTCER_DMAC_DMAC3I (PDL_INTC_REG_DTCER | DTCE_DMAC_DMAC3I) +#define PDL_INTC_REG_DTCER_EXDMAC_EXDMAC0I (PDL_INTC_REG_DTCER | DTCE_EXDMAC_EXDMAC0I) +#define PDL_INTC_REG_DTCER_EXDMAC_EXDMAC1I (PDL_INTC_REG_DTCER | DTCE_EXDMAC_EXDMAC1I) +#define PDL_INTC_REG_DTCER_SCI0_RXI (PDL_INTC_REG_DTCER | DTCE_SCI0_RXI0) +#define PDL_INTC_REG_DTCER_SCI0_TXI (PDL_INTC_REG_DTCER | DTCE_SCI0_TXI0) +#define PDL_INTC_REG_DTCER_SCI1_RXI (PDL_INTC_REG_DTCER | DTCE_SCI1_RXI1) +#define PDL_INTC_REG_DTCER_SCI1_TXI (PDL_INTC_REG_DTCER | DTCE_SCI1_TXI1) +#define PDL_INTC_REG_DTCER_SCI2_RXI (PDL_INTC_REG_DTCER | DTCE_SCI2_RXI2) +#define PDL_INTC_REG_DTCER_SCI2_TXI (PDL_INTC_REG_DTCER | DTCE_SCI2_TXI2) +#define PDL_INTC_REG_DTCER_SCI3_RXI (PDL_INTC_REG_DTCER | DTCE_SCI3_RXI3) +#define PDL_INTC_REG_DTCER_SCI3_TXI (PDL_INTC_REG_DTCER | DTCE_SCI3_TXI3) +#define PDL_INTC_REG_DTCER_SCI5_RXI (PDL_INTC_REG_DTCER | DTCE_SCI5_RXI5) +#define PDL_INTC_REG_DTCER_SCI5_TXI (PDL_INTC_REG_DTCER | DTCE_SCI5_TXI5) +#define PDL_INTC_REG_DTCER_SCI6_RXI (PDL_INTC_REG_DTCER | DTCE_SCI6_RXI6) +#define PDL_INTC_REG_DTCER_SCI6_TXI (PDL_INTC_REG_DTCER | DTCE_SCI6_TXI6) +#define PDL_INTC_REG_DTCER_IIC0_RXI (PDL_INTC_REG_DTCER | DTCE_RIIC0_ICRXI0) +#define PDL_INTC_REG_DTCER_IIC0_TXI (PDL_INTC_REG_DTCER | DTCE_RIIC0_ICTXI0) +#define PDL_INTC_REG_DTCER_IIC1_RXI (PDL_INTC_REG_DTCER | DTCE_RIIC1_ICRXI1) +#define PDL_INTC_REG_DTCER_IIC1_TXI (PDL_INTC_REG_DTCER | DTCE_RIIC1_ICTXI1) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_intc_rx62nxx.h b/bsp/rx/RPDL/r_pdl_intc_rx62nxx.h new file mode 100644 index 0000000000..aad34d6a47 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_intc_rx62nxx.h @@ -0,0 +1,118 @@ +/*""FILE COMMENT""******************************************************* +* System Name : External interrupt API for RX62Nxx +* File Name : r_pdl_intc_RX62Nxx.h +* Version : 1.02 +* Contents : INTC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_INTC_RX62Nxx_H +#define R_PDL_INTC_RX62Nxx_H + +/* Callback function storage */ +extern VoidCallBackFunc rpdl_INTC_callback_func[]; + +/* Library prototypes */ +bool R_INTC_CreateExtInterruptAll( + const uint8_t, + const uint32_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_INTC_CreateSoftwareInterruptAll( + const uint8_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_INTC_CreateFastInterruptAll( + const uint8_t +); +bool R_INTC_CreateExceptionHandlersAll( + VoidCallBackFunc const, + VoidCallBackFunc const, + VoidCallBackFunc const +); +bool R_INTC_ControlExtInterruptAll( + const uint8_t, + const uint32_t +); +bool R_INTC_GetExtInterruptStatusAll( + const uint8_t, + volatile uint8_t * const +); +bool R_INTC_ReadAll( + const uint16_t, + volatile uint8_t * const +); +bool R_INTC_WriteAll( + const uint16_t, + const uint8_t +); +bool R_INTC_ModifyAll( + const uint16_t, + const uint8_t, + const uint8_t +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_INTC_CreateExtInterrupt(a, b, c, d) \ +( \ +( ( (a) <= PDL_INTC_NMI ) && ((d) <= IPL_MAX) ) ? \ +R_INTC_CreateExtInterruptAll( (a), (b), (c), (d) ) : \ +ReturnFalse() \ +) + +#define R_INTC_CreateSoftwareInterrupt(a, b, c) \ +( \ +( (c) <= IPL_MAX ) ? \ +R_INTC_CreateSoftwareInterruptAll( (a), (b), (c) ) : \ +ReturnFalse() \ +) + +#define R_INTC_ControlExtInterrupt(a, b) \ +( \ +( (a) <= PDL_INTC_NMI ) ? \ +R_INTC_ControlExtInterruptAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_INTC_GetExtInterruptStatus(a, b) \ +( \ +( (a) <= PDL_INTC_NMI ) ? \ +R_INTC_GetExtInterruptStatusAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_INTC_CreateFastInterrupt(a) \ +( R_INTC_CreateFastInterruptAll( (a) ) ) + +#define R_INTC_CreateExceptionHandlers(a, b, c) \ +( R_INTC_CreateExceptionHandlersAll( (a), (b), (c) ) ) + +#define R_INTC_Read(a, b) \ +( R_INTC_ReadAll( (a), (b) ) ) + +#define R_INTC_Write(a, b) \ +( R_INTC_WriteAll( (a), (b) ) ) + +#define R_INTC_Modify(a, b, c) \ +( R_INTC_ModifyAll( (a), (b), (c) ) ) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_io_port.h b/bsp/rx/RPDL/r_pdl_io_port.h new file mode 100644 index 0000000000..04647f0c41 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_io_port.h @@ -0,0 +1,252 @@ +/*""FILE COMMENT""******************************************************* +* System Name : I/O Port API +* File Name : r_pdl_io_port.h +* Version : 1.02 +* Contents : I/O Port API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IO_PORT_H +#define R_PDL_IO_PORT_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_IO_PORT_Set( + uint16_t, + uint8_t +); +bool R_IO_PORT_ReadControl( + uint16_t, + uint8_t, + uint8_t * +); +bool R_IO_PORT_ModifyControl( + uint16_t, + uint8_t, + uint8_t +); +bool R_IO_PORT_Read( + uint16_t, + uint8_t * +); +bool R_IO_PORT_Write( + uint16_t, + uint8_t +); +bool R_IO_PORT_Compare( + uint16_t, + uint8_t, + void * +); +bool R_IO_PORT_Modify( + uint16_t, + uint8_t, + uint8_t +); +bool R_IO_PORT_Wait( + uint16_t, + uint8_t +); + +/* I/O Ports*/ +#define PDL_IO_PORT_0 0xF000u /* Port 0 */ +#define PDL_IO_PORT_1 0xF001u /* Port 1 */ +#define PDL_IO_PORT_2 0xF002u /* Port 2 */ +#define PDL_IO_PORT_3 0xF003u /* Port 3 */ +#define PDL_IO_PORT_4 0xF004u /* Port 4 */ +#define PDL_IO_PORT_5 0xF005u /* Port 5 */ +#define PDL_IO_PORT_6 0xF006u /* Port 6 */ +#define PDL_IO_PORT_7 0xF007u /* Port 7 */ +#define PDL_IO_PORT_8 0xF008u /* Port 8 */ +#define PDL_IO_PORT_9 0xF009u /* Port 9 */ +#define PDL_IO_PORT_A 0xF00Au /* Port A */ +#define PDL_IO_PORT_B 0xF00Bu /* Port B */ +#define PDL_IO_PORT_C 0xF00Cu /* Port C */ +#define PDL_IO_PORT_D 0xF00Du /* Port D */ +#define PDL_IO_PORT_E 0xF00Eu /* Port E */ +#define PDL_IO_PORT_F 0xF00Fu /* Port F */ +#define PDL_IO_PORT_G 0xF010u /* Port G */ + +/* I/O port pins */ +#define PDL_IO_PORT_0_0 0x0001u /* P00 */ +#define PDL_IO_PORT_0_1 0x0002u /* P01 */ +#define PDL_IO_PORT_0_2 0x0004u /* P02 */ +#define PDL_IO_PORT_0_3 0x0008u /* P03 */ +#define PDL_IO_PORT_0_5 0x0020u /* P05 */ +#define PDL_IO_PORT_0_7 0x0080u /* P07 */ + +#define PDL_IO_PORT_1_0 0x0101u /* P10 */ +#define PDL_IO_PORT_1_1 0x0102u /* P11 */ +#define PDL_IO_PORT_1_2 0x0104u /* P12 */ +#define PDL_IO_PORT_1_3 0x0108u /* P13 */ +#define PDL_IO_PORT_1_4 0x0110u /* P14 */ +#define PDL_IO_PORT_1_5 0x0120u /* P15 */ +#define PDL_IO_PORT_1_6 0x0140u /* P16 */ +#define PDL_IO_PORT_1_7 0x0180u /* P17 */ + +#define PDL_IO_PORT_2_0 0x0201u /* P20 */ +#define PDL_IO_PORT_2_1 0x0202u /* P21 */ +#define PDL_IO_PORT_2_2 0x0204u /* P22 */ +#define PDL_IO_PORT_2_3 0x0208u /* P23 */ +#define PDL_IO_PORT_2_4 0x0210u /* P24 */ +#define PDL_IO_PORT_2_5 0x0220u /* P25 */ +#define PDL_IO_PORT_2_6 0x0240u /* P26 */ +#define PDL_IO_PORT_2_7 0x0280u /* P27 */ + +#define PDL_IO_PORT_3_0 0x0301u /* P30 */ +#define PDL_IO_PORT_3_1 0x0302u /* P31 */ +#define PDL_IO_PORT_3_2 0x0304u /* P32 */ +#define PDL_IO_PORT_3_3 0x0308u /* P33 */ +#define PDL_IO_PORT_3_4 0x0310u /* P34 */ +#define PDL_IO_PORT_3_5 0x0320u /* P35 */ + +#define PDL_IO_PORT_4_0 0x0401u /* P40 */ +#define PDL_IO_PORT_4_1 0x0402u /* P41 */ +#define PDL_IO_PORT_4_2 0x0404u /* P42 */ +#define PDL_IO_PORT_4_3 0x0408u /* P43 */ +#define PDL_IO_PORT_4_4 0x0410u /* P44 */ +#define PDL_IO_PORT_4_5 0x0420u /* P45 */ +#define PDL_IO_PORT_4_6 0x0440u /* P46 */ +#define PDL_IO_PORT_4_7 0x0480u /* P47 */ + +#define PDL_IO_PORT_5_0 0x0501u /* P50 */ +#define PDL_IO_PORT_5_1 0x0502u /* P51 */ +#define PDL_IO_PORT_5_2 0x0504u /* P52 */ +#define PDL_IO_PORT_5_3 0x0508u /* P53 */ +#define PDL_IO_PORT_5_4 0x0510u /* P54 */ +#define PDL_IO_PORT_5_5 0x0520u /* P55 */ +#define PDL_IO_PORT_5_6 0x0540u /* P56 */ +#define PDL_IO_PORT_5_7 0x0580u /* P57 */ + +#define PDL_IO_PORT_6_0 0x0601u /* P60 */ +#define PDL_IO_PORT_6_1 0x0602u /* P61 */ +#define PDL_IO_PORT_6_2 0x0604u /* P62 */ +#define PDL_IO_PORT_6_3 0x0608u /* P63 */ +#define PDL_IO_PORT_6_4 0x0610u /* P64 */ +#define PDL_IO_PORT_6_5 0x0620u /* P65 */ +#define PDL_IO_PORT_6_6 0x0640u /* P66 */ +#define PDL_IO_PORT_6_7 0x0680u /* P67 */ + +#define PDL_IO_PORT_7_0 0x0701u /* P70 */ +#define PDL_IO_PORT_7_1 0x0702u /* P71 */ +#define PDL_IO_PORT_7_2 0x0704u /* P72 */ +#define PDL_IO_PORT_7_3 0x0708u /* P73 */ +#define PDL_IO_PORT_7_4 0x0710u /* P74 */ +#define PDL_IO_PORT_7_5 0x0720u /* P75 */ +#define PDL_IO_PORT_7_6 0x0740u /* P76 */ +#define PDL_IO_PORT_7_7 0x0780u /* P77 */ + +#define PDL_IO_PORT_8_0 0x0801u /* P80 */ +#define PDL_IO_PORT_8_1 0x0802u /* P81 */ +#define PDL_IO_PORT_8_2 0x0804u /* P82 */ +#define PDL_IO_PORT_8_3 0x0808u /* P83 */ +#define PDL_IO_PORT_8_4 0x0810u /* P84 */ +#define PDL_IO_PORT_8_5 0x0820u /* P85 */ + +#define PDL_IO_PORT_9_0 0x0901u /* P90 */ +#define PDL_IO_PORT_9_1 0x0902u /* P91 */ +#define PDL_IO_PORT_9_2 0x0904u /* P92 */ +#define PDL_IO_PORT_9_3 0x0908u /* P93 */ +#define PDL_IO_PORT_9_4 0x0910u /* P94 */ +#define PDL_IO_PORT_9_5 0x0920u /* P95 */ +#define PDL_IO_PORT_9_6 0x0940u /* P96 */ +#define PDL_IO_PORT_9_7 0x0980u /* P97 */ + +#define PDL_IO_PORT_A_0 0x0A01u /* PA0 */ +#define PDL_IO_PORT_A_1 0x0A02u /* PA1 */ +#define PDL_IO_PORT_A_2 0x0A04u /* PA2 */ +#define PDL_IO_PORT_A_3 0x0A08u /* PA3 */ +#define PDL_IO_PORT_A_4 0x0A10u /* PA4 */ +#define PDL_IO_PORT_A_5 0x0A20u /* PA5 */ +#define PDL_IO_PORT_A_6 0x0A40u /* PA6 */ +#define PDL_IO_PORT_A_7 0x0A80u /* PA7 */ + +#define PDL_IO_PORT_B_0 0x0B01u /* PB0 */ +#define PDL_IO_PORT_B_1 0x0B02u /* PB1 */ +#define PDL_IO_PORT_B_2 0x0B04u /* PB2 */ +#define PDL_IO_PORT_B_3 0x0B08u /* PB3 */ +#define PDL_IO_PORT_B_4 0x0B10u /* PB4 */ +#define PDL_IO_PORT_B_5 0x0B20u /* PB5 */ +#define PDL_IO_PORT_B_6 0x0B40u /* PB6 */ +#define PDL_IO_PORT_B_7 0x0B80u /* PB7 */ + +#define PDL_IO_PORT_C_0 0x0C01u /* PC0 */ +#define PDL_IO_PORT_C_1 0x0C02u /* PC1 */ +#define PDL_IO_PORT_C_2 0x0C04u /* PC2 */ +#define PDL_IO_PORT_C_3 0x0C08u /* PC3 */ +#define PDL_IO_PORT_C_4 0x0C10u /* PC4 */ +#define PDL_IO_PORT_C_5 0x0C20u /* PC5 */ +#define PDL_IO_PORT_C_6 0x0C40u /* PC6 */ +#define PDL_IO_PORT_C_7 0x0C80u /* PC7 */ + +#define PDL_IO_PORT_D_0 0x0D01u /* PD0 */ +#define PDL_IO_PORT_D_1 0x0D02u /* PD1 */ +#define PDL_IO_PORT_D_2 0x0D04u /* PD2 */ +#define PDL_IO_PORT_D_3 0x0D08u /* PD3 */ +#define PDL_IO_PORT_D_4 0x0D10u /* PD4 */ +#define PDL_IO_PORT_D_5 0x0D20u /* PD5 */ +#define PDL_IO_PORT_D_6 0x0D40u /* PD6 */ +#define PDL_IO_PORT_D_7 0x0D80u /* PD7 */ + +#define PDL_IO_PORT_E_0 0x0E01u /* PE0 */ +#define PDL_IO_PORT_E_1 0x0E02u /* PE1 */ +#define PDL_IO_PORT_E_2 0x0E04u /* PE2 */ +#define PDL_IO_PORT_E_3 0x0E08u /* PE3 */ +#define PDL_IO_PORT_E_4 0x0E10u /* PE4 */ +#define PDL_IO_PORT_E_5 0x0E20u /* PE5 */ +#define PDL_IO_PORT_E_6 0x0E40u /* PE6 */ +#define PDL_IO_PORT_E_7 0x0E80u /* PE7 */ + +#define PDL_IO_PORT_F_0 0x0F01u /* PF0 */ +#define PDL_IO_PORT_F_1 0x0F02u /* PF1 */ +#define PDL_IO_PORT_F_2 0x0F04u /* PF2 */ +#define PDL_IO_PORT_F_3 0x0F08u /* PF3 */ +#define PDL_IO_PORT_F_4 0x0F10u /* PF4 */ + +#define PDL_IO_PORT_G_0 0x1001u /* PG0 */ +#define PDL_IO_PORT_G_1 0x1002u /* PG1 */ +#define PDL_IO_PORT_G_2 0x1004u /* PG2 */ +#define PDL_IO_PORT_G_3 0x1008u /* PG3 */ +#define PDL_IO_PORT_G_4 0x1010u /* PG4 */ +#define PDL_IO_PORT_G_5 0x1020u /* PG5 */ +#define PDL_IO_PORT_G_6 0x1040u /* PG6 */ +#define PDL_IO_PORT_G_7 0x1080u /* PG7 */ + +/* Settings */ +#define PDL_IO_PORT_INPUT 0x01u /* Input port */ +#define PDL_IO_PORT_OUTPUT 0x02u /* Output port */ +#define PDL_IO_PORT_INPUT_BUFFER_ON 0x04u /* The input buffer is enabled */ +#define PDL_IO_PORT_INPUT_BUFFER_OFF 0x08u /* The input buffer is disabled */ +#define PDL_IO_PORT_PULL_UP_ON 0x10u /* Pulled high */ +#define PDL_IO_PORT_PULL_UP_OFF 0x20u /* Not pulled high */ +#define PDL_IO_PORT_OPEN_DRAIN 0x40u /* NMOS open-drain output */ +#define PDL_IO_PORT_CMOS 0x80u /* CMOS output */ + +/* Control register selection */ +#define PDL_IO_PORT_DIRECTION 0x01u +#define PDL_IO_PORT_INPUT_BUFFER 0x02u +#define PDL_IO_PORT_PULL_UP 0x04u +#define PDL_IO_PORT_TYPE 0x08u + +/* Logical operations */ +#define PDL_IO_PORT_AND 0x10u +#define PDL_IO_PORT_OR 0x20u +#define PDL_IO_PORT_XOR 0x40u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_io_port_rx62nxbg.h b/bsp/rx/RPDL/r_pdl_io_port_rx62nxbg.h new file mode 100644 index 0000000000..53f7aeea86 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_io_port_rx62nxbg.h @@ -0,0 +1,200 @@ +/*""FILE COMMENT""******************************************************* +* System Name : I/O Port API for RX62N (176-pin LFBGA) +* File Name : r_pdl_io_port_RX62NxBG.h +* Version : 1.02 +* Contents : I/O Port API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IO_PORT_RX62NxBG_H +#define R_PDL_IO_PORT_RX62NxBG_H + +/* Library prototypes */ +bool R_IO_PORT_SetAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ReadControlAll( + const uint8_t, + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ReadControlRegisterAll( + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ModifyControlAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ModifyControlRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ReadDataAll( + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ReadDataRegisterAll( + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_WriteAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WriteRegisterAll( + const uint8_t, + const uint8_t +); +bool R_IO_PORT_CompareAll( + const uint8_t, + const uint8_t, + const uint8_t, + VoidCallBackFunc const +); +bool R_IO_PORT_CompareRegisterAll( + const uint8_t, + const uint8_t, + VoidCallBackFunc const +); +bool R_IO_PORT_ModifyDataAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ModifyDataRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WaitAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WaitRegisterAll( + const uint8_t, + const uint8_t +); +bool ReturnFalse(void); + +/* Macro definitions */ + +/* R_IO_PORT_Set */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Set(a, b) \ +( \ +( ((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_G_7) ) ? \ +R_IO_PORT_SetAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_ReadControl */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_ReadControl(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_G_7)) ) ? \ +R_IO_PORT_ReadControlAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_G) ) ? \ +R_IO_PORT_ReadControlRegisterAll( (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_ModifyControl */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_ModifyControl(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_G_7)) ) ? \ +R_IO_PORT_ModifyControlAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_G) ) ? \ +R_IO_PORT_ModifyControlRegisterAll( (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_Read */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Read(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_G_7)) ) ? \ +R_IO_PORT_ReadDataAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_G) ) ? \ +R_IO_PORT_ReadDataRegisterAll( (uint8_t)(a), (b) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_Write */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Write(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_G_7)) ) ? \ +R_IO_PORT_WriteAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_G) ) ? \ +R_IO_PORT_WriteRegisterAll( (uint8_t)(a), (b) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Compare */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Compare(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_G_7)) ) ? \ +R_IO_PORT_CompareAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_G) ) ? \ +R_IO_PORT_CompareRegisterAll( (uint8_t)(a), (b), (c) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Modify */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Modify(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_G_7)) ) ? \ +R_IO_PORT_ModifyDataAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_G) ) ? \ +R_IO_PORT_ModifyDataRegisterAll( (uint8_t)(a), (b), (c) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Wait */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Wait(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_G_7)) && (b == 1u) ) ? \ +R_IO_PORT_WaitAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)(a) ) : \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_G_7)) && (b == 0u) ) ? \ +R_IO_PORT_WaitAll( (uint8_t)((a) >> 8), (uint8_t)(a), 0 ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_G) ) ? \ +R_IO_PORT_WaitRegisterAll( (uint8_t)(a), (b) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_io_port_rx62nxfb.h b/bsp/rx/RPDL/r_pdl_io_port_rx62nxfb.h new file mode 100644 index 0000000000..7c3e19187f --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_io_port_rx62nxfb.h @@ -0,0 +1,201 @@ +/*""FILE COMMENT""******************************************************* +* System Name : I/O Port API for RX62N (144-pin LQFP) +* File Name : r_pdl_io_port_RX62NxFB.h +* Version : 1.02 +* Contents : I/O Port API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IO_PORT_RX62NxFB_H +#define R_PDL_IO_PORT_RX62NxFB_H + +/* Library prototypes */ +/* Library prototypes */ +bool R_IO_PORT_SetAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ReadControlAll( + const uint8_t, + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ReadControlRegisterAll( + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ModifyControlAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ModifyControlRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ReadDataAll( + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ReadDataRegisterAll( + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_WriteAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WriteRegisterAll( + const uint8_t, + const uint8_t +); +bool R_IO_PORT_CompareAll( + const uint8_t, + const uint8_t, + const uint8_t, + VoidCallBackFunc const +); +bool R_IO_PORT_CompareRegisterAll( + const uint8_t, + const uint8_t, + VoidCallBackFunc const +); +bool R_IO_PORT_ModifyDataAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ModifyDataRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WaitAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WaitRegisterAll( + const uint8_t, + const uint8_t +); +bool ReturnFalse(void); + +/* Macro definitions */ + +/* R_IO_PORT_Set */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Set(a, b) \ +( \ +( ((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7) ) ? \ +R_IO_PORT_SetAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_ReadControl */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_ReadControl(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ReadControlAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ReadControlRegisterAll( (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_ModifyControl */ +/* Call the function if the port number is valid (0 to E). */ +#define R_IO_PORT_ModifyControl(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ModifyControlAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ModifyControlRegisterAll( (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_Read */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Read(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ReadDataAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ReadDataRegisterAll( (uint8_t)(a), (b) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_Write */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Write(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_WriteAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_WriteRegisterAll( (uint8_t)(a), (b) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Compare */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Compare(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_CompareAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_CompareRegisterAll( (uint8_t)(a), (b), (c) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Modify */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Modify(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ModifyDataAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ModifyDataRegisterAll( (uint8_t)(a), (b), (c) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Wait */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Wait(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) && (b == 1u) ) ? \ +R_IO_PORT_WaitAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)(a) ) : \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) && (b == 0u) ) ? \ +R_IO_PORT_WaitAll( (uint8_t)((a) >> 8), (uint8_t)(a), 0u ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_WaitRegisterAll( (uint8_t)(a), (b) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_io_port_rx62nxfp.h b/bsp/rx/RPDL/r_pdl_io_port_rx62nxfp.h new file mode 100644 index 0000000000..3efd70e492 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_io_port_rx62nxfp.h @@ -0,0 +1,201 @@ +/*""FILE COMMENT""******************************************************* +* System Name : I/O Port API for RX62N (100-pin LQFP) +* File Name : r_pdl_io_port_RX62NxFP.h +* Version : 1.02 +* Contents : I/O Port API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IO_PORT_RX62NxFP_H +#define R_PDL_IO_PORT_RX62NxFP_H + +/* Library prototypes */ +/* Library prototypes */ +bool R_IO_PORT_SetAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ReadControlAll( + const uint8_t, + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ReadControlRegisterAll( + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ModifyControlAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ModifyControlRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ReadDataAll( + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ReadDataRegisterAll( + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_WriteAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WriteRegisterAll( + const uint8_t, + const uint8_t +); +bool R_IO_PORT_CompareAll( + const uint8_t, + const uint8_t, + const uint8_t, + VoidCallBackFunc const +); +bool R_IO_PORT_CompareRegisterAll( + const uint8_t, + const uint8_t, + VoidCallBackFunc const +); +bool R_IO_PORT_ModifyDataAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ModifyDataRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WaitAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WaitRegisterAll( + const uint8_t, + const uint8_t +); +bool ReturnFalse(void); + +/* Macro definitions */ + +/* R_IO_PORT_Set */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Set(a, b) \ +( \ +( ((a) >= PDL_IO_PORT_0_5) && ((a) <= PDL_IO_PORT_E_7) ) ? \ +R_IO_PORT_SetAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_ReadControl */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_ReadControl(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_5) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ReadControlAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ReadControlRegisterAll( (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_ModifyControl */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_ModifyControl(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_5) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ModifyControlAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ModifyControlRegisterAll( (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_Read */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Read(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_5) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ReadDataAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ReadDataRegisterAll( (uint8_t)(a), (b) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_Write */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Write(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_5) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_WriteAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_WriteRegisterAll( (uint8_t)(a), (b) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Compare */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Compare(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_5) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_CompareAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_CompareRegisterAll( (uint8_t)(a), (b), (c) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Modify */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Modify(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_5) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ModifyDataAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ModifyDataRegisterAll( (uint8_t)(a), (b), (c) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Wait */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Wait(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_5) && ((a) <= PDL_IO_PORT_E_7)) && (b == 1u) ) ? \ +R_IO_PORT_WaitAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)(a) ) : \ +( (((a) >= PDL_IO_PORT_0_5) && ((a) <= PDL_IO_PORT_E_7)) && (b == 0u) ) ? \ +R_IO_PORT_WaitAll( (uint8_t)((a) >> 8), (uint8_t)(a), 0u ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_WaitRegisterAll( (uint8_t)(a), (b) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_io_port_rx62nxld.h b/bsp/rx/RPDL/r_pdl_io_port_rx62nxld.h new file mode 100644 index 0000000000..7f7f479952 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_io_port_rx62nxld.h @@ -0,0 +1,201 @@ +/*""FILE COMMENT""******************************************************* +* System Name : I/O Port API for RX62N (85-pin TFLGA) +* File Name : r_pdl_io_port_RX62NxLD.h +* Version : 1.02 +* Contents : I/O Port API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IO_PORT_RX62NxLD_H +#define R_PDL_IO_PORT_RX62NxLD_H + +/* Library prototypes */ +/* Library prototypes */ +bool R_IO_PORT_SetAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ReadControlAll( + const uint8_t, + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ReadControlRegisterAll( + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ModifyControlAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ModifyControlRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ReadDataAll( + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ReadDataRegisterAll( + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_WriteAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WriteRegisterAll( + const uint8_t, + const uint8_t +); +bool R_IO_PORT_CompareAll( + const uint8_t, + const uint8_t, + const uint8_t, + VoidCallBackFunc const +); +bool R_IO_PORT_CompareRegisterAll( + const uint8_t, + const uint8_t, + VoidCallBackFunc const +); +bool R_IO_PORT_ModifyDataAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ModifyDataRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WaitAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WaitRegisterAll( + const uint8_t, + const uint8_t +); +bool ReturnFalse(void); + +/* Macro definitions */ + +/* R_IO_PORT_Set */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Set(a, b) \ +( \ +( ((a) >= PDL_IO_PORT_0_3) && ((a) <= PDL_IO_PORT_D_7) ) ? \ +R_IO_PORT_SetAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_ReadControl */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_ReadControl(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_3) && ((a) <= PDL_IO_PORT_D_7)) ) ? \ +R_IO_PORT_ReadControlAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_D) ) ? \ +R_IO_PORT_ReadControlRegisterAll( (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_ModifyControl */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_ModifyControl(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_3) && ((a) <= PDL_IO_PORT_D_7)) ) ? \ +R_IO_PORT_ModifyControlAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_D) ) ? \ +R_IO_PORT_ModifyControlRegisterAll( (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_Read */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Read(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_3) && ((a) <= PDL_IO_PORT_D_7)) ) ? \ +R_IO_PORT_ReadDataAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_D) ) ? \ +R_IO_PORT_ReadDataRegisterAll( (uint8_t)(a), (b) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_Write */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Write(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_3) && ((a) <= PDL_IO_PORT_D_7)) ) ? \ +R_IO_PORT_WriteAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_D) ) ? \ +R_IO_PORT_WriteRegisterAll( (uint8_t)(a), (b) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Compare */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Compare(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_3) && ((a) <= PDL_IO_PORT_D_7)) ) ? \ +R_IO_PORT_CompareAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_D) ) ? \ +R_IO_PORT_CompareRegisterAll( (uint8_t)(a), (b), (c) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Modify */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Modify(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_3) && ((a) <= PDL_IO_PORT_D_7)) ) ? \ +R_IO_PORT_ModifyDataAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_D) ) ? \ +R_IO_PORT_ModifyDataRegisterAll( (uint8_t)(a), (b), (c) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Wait */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Wait(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_3) && ((a) <= PDL_IO_PORT_D_7)) && (b == 1u) ) ? \ +R_IO_PORT_WaitAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)(a) ) : \ +( (((a) >= PDL_IO_PORT_0_3) && ((a) <= PDL_IO_PORT_D_7)) && (b == 0u) ) ? \ +R_IO_PORT_WaitAll( (uint8_t)((a) >> 8), (uint8_t)(a), 0u ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_D) ) ? \ +R_IO_PORT_WaitRegisterAll( (uint8_t)(a), (b) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_io_port_rx62nxle.h b/bsp/rx/RPDL/r_pdl_io_port_rx62nxle.h new file mode 100644 index 0000000000..44d7e58cb9 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_io_port_rx62nxle.h @@ -0,0 +1,201 @@ +/*""FILE COMMENT""******************************************************* +* System Name : I/O Port API for RX62N (145-pin TFLGA) +* File Name : r_pdl_io_port_RX62NxLE.h +* Version : 1.02 +* Contents : I/O Port API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IO_PORT_RX62NxLE_H +#define R_PDL_IO_PORT_RX62NxLE_H + +/* Library prototypes */ +/* Library prototypes */ +bool R_IO_PORT_SetAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ReadControlAll( + const uint8_t, + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ReadControlRegisterAll( + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ModifyControlAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ModifyControlRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ReadDataAll( + const uint8_t, + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_ReadDataRegisterAll( + const uint8_t, + volatile uint8_t * const +); +bool R_IO_PORT_WriteAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WriteRegisterAll( + const uint8_t, + const uint8_t +); +bool R_IO_PORT_CompareAll( + const uint8_t, + const uint8_t, + const uint8_t, + VoidCallBackFunc const +); +bool R_IO_PORT_CompareRegisterAll( + const uint8_t, + const uint8_t, + VoidCallBackFunc const +); +bool R_IO_PORT_ModifyDataAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_ModifyDataRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WaitAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_IO_PORT_WaitRegisterAll( + const uint8_t, + const uint8_t +); +bool ReturnFalse(void); + +/* Macro definitions */ + +/* R_IO_PORT_Set */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Set(a, b) \ +( \ +( ((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7) ) ? \ +R_IO_PORT_SetAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_ReadControl */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_ReadControl(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ReadControlAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ReadControlRegisterAll( (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_ModifyControl */ +/* Call the function if the port number is valid (0 to E). */ +#define R_IO_PORT_ModifyControl(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ModifyControlAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ModifyControlRegisterAll( (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_Read */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Read(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ReadDataAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ReadDataRegisterAll( (uint8_t)(a), (b) ) : \ +ReturnFalse() \ +) + +/* R_IO_PORT_Write */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Write(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_WriteAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_WriteRegisterAll( (uint8_t)(a), (b) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Compare */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Compare(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_CompareAll( (uint8_t)((a) >> 8), (uint8_t)(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_CompareRegisterAll( (uint8_t)(a), (b), (c) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Modify */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Modify(a, b, c) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) ) ? \ +R_IO_PORT_ModifyDataAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)~(a), (b), (c) ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_ModifyDataRegisterAll( (uint8_t)(a), (b), (c) ): \ +ReturnFalse() \ +) + +/* R_IO_PORT_Wait */ +/* Call the function if the port number is valid. */ +#define R_IO_PORT_Wait(a, b) \ +( \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) && (b == 1u) ) ? \ +R_IO_PORT_WaitAll( (uint8_t)((a) >> 8), (uint8_t)(a), (uint8_t)(a) ) : \ +( (((a) >= PDL_IO_PORT_0_0) && ((a) <= PDL_IO_PORT_E_7)) && (b == 0u) ) ? \ +R_IO_PORT_WaitAll( (uint8_t)((a) >> 8), (uint8_t)(a), 0u ) : \ +( ((a) >= PDL_IO_PORT_0) && ((a) <= PDL_IO_PORT_E) ) ? \ +R_IO_PORT_WaitRegisterAll( (uint8_t)(a), (b) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_iwdt.h b/bsp/rx/RPDL/r_pdl_iwdt.h new file mode 100644 index 0000000000..fd16c8ba90 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_iwdt.h @@ -0,0 +1,55 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Independent Watchdog timer API for RX62Nxx +* File Name : r_pdl_iwdt.h +* Version : 1.02 +* Contents : IWDT API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IWDT_H +#define R_PDL_IWDT_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_IWDT_Set( + uint16_t +); +bool R_IWDT_Control( + uint8_t +); +bool R_IWDT_Read( + uint16_t * +); + +/* Calculation selection */ +#define PDL_IWDT_TIMEOUT_1024 0x0001u +#define PDL_IWDT_TIMEOUT_4096 0x0002u +#define PDL_IWDT_TIMEOUT_8192 0x0004u +#define PDL_IWDT_TIMEOUT_16384 0x0008u + +#define PDL_IWDT_CLOCK_OCO_1 0x0010u +#define PDL_IWDT_CLOCK_OCO_16 0x0020u +#define PDL_IWDT_CLOCK_OCO_32 0x0040u +#define PDL_IWDT_CLOCK_OCO_64 0x0080u +#define PDL_IWDT_CLOCK_OCO_128 0x0100u +#define PDL_IWDT_CLOCK_OCO_256 0x0200u + +#define PDL_IWDT_REFRESH 0x01u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_iwdt_RX62Nxx.h b/bsp/rx/RPDL/r_pdl_iwdt_RX62Nxx.h new file mode 100644 index 0000000000..e793587e1f --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_iwdt_RX62Nxx.h @@ -0,0 +1,55 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Independent Watchdog timer API for RX62Nxx +* File Name : r_pdl_iwdt_RX62Nxx.h +* Version : 1.02 +* Contents : IWDT API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_IWDT_RX62Nxx_H +#define R_PDL_IWDT_RX62Nxx_H + +/* Library prototypes */ +bool R_IWDT_SetAll( + const uint16_t +); +bool R_IWDT_ControlAll( + const uint8_t +); +bool R_IWDT_ReadAll( + volatile uint16_t * const +); + +/* Macro definitions */ + +#define R_IWDT_Set(a) \ +( \ +R_IWDT_SetAll( (a) ) \ +) + +#define R_IWDT_Control(a) \ +( \ +R_IWDT_ControlAll( (a) ) \ +) + +#define R_IWDT_Read(a) \ +( \ +R_IWDT_ReadAll( (a) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_lpc.h b/bsp/rx/RPDL/r_pdl_lpc.h new file mode 100644 index 0000000000..2905d6bcd2 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_lpc.h @@ -0,0 +1,125 @@ +/*""FILE COMMENT""******************************************************* +* System Name : LPC API for RX62Nxx +* File Name : r_pdl_lpc.h +* Version : 1.02 +* Contents : LPC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_LPC_H +#define R_PDL_LPC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_LPC_Create( + uint32_t, + uint32_t +); +bool R_LPC_Control( + uint16_t +); +bool R_LPC_WriteBackup( + uint8_t *, + uint8_t +); +bool R_LPC_ReadBackup( + uint8_t *, + uint8_t +); +bool R_LPC_GetStatus( + uint16_t * +); + +/* Software and Deep Software Standby mode output port control */ +#define PDL_LPC_EXT_BUS_ON 0x00000001ul +#define PDL_LPC_EXT_BUS_HI_Z 0x00000002ul + +/* On-chip RAM power / USB resume detection control */ +#define PDL_LPC_RAM_USB_DETECT_ON 0x00000004ul +#define PDL_LPC_RAM_USB_DETECT_OFF 0x00000008ul + +/* I/O port retention control */ +#define PDL_LPC_IO_SAME 0x00000010ul +#define PDL_LPC_IO_DELAY 0x00000020ul + +/* Deep software standby cancel control */ +#define PDL_LPC_CANCEL_IRQ0_DISABLE 0x00000040ul +#define PDL_LPC_CANCEL_IRQ0_FALLING 0x00000080ul +#define PDL_LPC_CANCEL_IRQ0_RISING 0x00000100ul +#define PDL_LPC_CANCEL_IRQ1_DISABLE 0x00000200ul +#define PDL_LPC_CANCEL_IRQ1_FALLING 0x00000400ul +#define PDL_LPC_CANCEL_IRQ1_RISING 0x00000800ul +#define PDL_LPC_CANCEL_IRQ2_DISABLE 0x00001000ul +#define PDL_LPC_CANCEL_IRQ2_FALLING 0x00002000ul +#define PDL_LPC_CANCEL_IRQ2_RISING 0x00004000ul +#define PDL_LPC_CANCEL_IRQ3_DISABLE 0x00008000ul +#define PDL_LPC_CANCEL_IRQ3_FALLING 0x00010000ul +#define PDL_LPC_CANCEL_IRQ3_RISING 0x00020000ul +#define PDL_LPC_CANCEL_NMI_DISABLE 0x00040000ul +#define PDL_LPC_CANCEL_NMI_FALLING 0x00080000ul +#define PDL_LPC_CANCEL_NMI_RISING 0x00100000ul +#define PDL_LPC_CANCEL_LVD_DISABLE 0x00200000ul +#define PDL_LPC_CANCEL_LVD_ENABLE 0x00400000ul +#define PDL_LPC_CANCEL_RTC_DISABLE 0x00800000ul +#define PDL_LPC_CANCEL_RTC_ENABLE 0x01000000ul +#define PDL_LPC_CANCEL_USB_DISABLE 0x02000000ul +#define PDL_LPC_CANCEL_USB_ENABLE 0x04000000ul + +/* Software Standby waiting time */ +#define PDL_LPC_STANDBY_64 0x00000001ul +#define PDL_LPC_STANDBY_512 0x00000002ul +#define PDL_LPC_STANDBY_1024 0x00000004ul +#define PDL_LPC_STANDBY_2048 0x00000008ul +#define PDL_LPC_STANDBY_4096 0x00000010ul +#define PDL_LPC_STANDBY_16384 0x00000020ul +#define PDL_LPC_STANDBY_32768 0x00000040ul +#define PDL_LPC_STANDBY_65536 0x00000080ul +#define PDL_LPC_STANDBY_131072 0x00000100ul +#define PDL_LPC_STANDBY_262144 0x00000200ul +#define PDL_LPC_STANDBY_524288 0x00000400ul + +/* Deep Software Standby waiting time */ +#define PDL_LPC_DEEP_STANDBY_64 0x00000800ul +#define PDL_LPC_DEEP_STANDBY_512 0x00001000ul +#define PDL_LPC_DEEP_STANDBY_1024 0x00002000ul +#define PDL_LPC_DEEP_STANDBY_2048 0x00004000ul +#define PDL_LPC_DEEP_STANDBY_4096 0x00008000ul +#define PDL_LPC_DEEP_STANDBY_16384 0x00010000ul +#define PDL_LPC_DEEP_STANDBY_32768 0x00020000ul +#define PDL_LPC_DEEP_STANDBY_65536 0x00040000ul +#define PDL_LPC_DEEP_STANDBY_131072 0x00080000ul +#define PDL_LPC_DEEP_STANDBY_262144 0x00100000ul +#define PDL_LPC_DEEP_STANDBY_524288 0x00200000ul + +/* Error monitoring */ +#define PDL_LPC_MODE_SLEEP 0x0001u +#define PDL_LPC_MODE_ALL_MODULE_CLOCK_STOP 0x0002u +#define PDL_LPC_MODE_SOFTWARE_STANDBY 0x0004u +#define PDL_LPC_MODE_DEEP_SOFTWARE_STANDBY 0x0008u + +/* All-module clock stop cancellation modification */ +#define PDL_LPC_TMR_OFF 0x0010u +#define PDL_LPC_TMR_UNIT_0 0x0020u +#define PDL_LPC_TMR_UNIT_1 0x0040u +#define PDL_LPC_TMR_BOTH 0x0080u + +/* I/O port retention cancellation */ +#define PDL_LPC_IO_RELEASE 0x0100u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_lpc_rx62nxx.h b/bsp/rx/RPDL/r_pdl_lpc_rx62nxx.h new file mode 100644 index 0000000000..2962644cfa --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_lpc_rx62nxx.h @@ -0,0 +1,81 @@ +/*""FILE COMMENT""******************************************************* +* System Name : LPC API for RX62Nxx +* File Name : r_pdl_lpc_RX62Nxx.h +* Version : 1.02 +* Contents : LPC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_LPC_RX62Nxx_H +#define R_PDL_LPC_RX62Nxx_H + +#define R_PDL_LPC_BACKUP_AREA_SIZE 32 + +/* Library prototypes */ +bool R_LPC_CreateAll( + const uint32_t, + const uint32_t +); +bool R_LPC_ControlAll( + const uint16_t +); +bool R_LPC_WriteBackupAll( + volatile const uint8_t * const, + const uint8_t +); +bool R_LPC_ReadBackupAll( + volatile uint8_t * const, + const uint8_t +); +bool R_LPC_GetStatusAll( + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_LPC_Create(a, b) \ +( \ +R_LPC_CreateAll( (a), (b) ) \ +) + +#define R_LPC_Control(a) \ +( \ +R_LPC_ControlAll( (a) ) \ +) + +#define R_LPC_WriteBackup(a, b) \ +( \ +( ( ((b) > 0) && ((b) <= R_PDL_LPC_BACKUP_AREA_SIZE) ) ) ? \ +R_LPC_WriteBackupAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_LPC_ReadBackup(a, b) \ +( \ +( ( ((b) > 0) && ((b) <= R_PDL_LPC_BACKUP_AREA_SIZE) ) ) ? \ +R_LPC_ReadBackupAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_LPC_GetStatus(a) \ +( \ +R_LPC_GetStatusAll( (a) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_lvd.h b/bsp/rx/RPDL/r_pdl_lvd.h new file mode 100644 index 0000000000..3f1c22dcc8 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_lvd.h @@ -0,0 +1,42 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Voltage detection circuit API for RX62Nxx +* File Name : r_pdl_lvd.h +* Version : 1.02 +* Contents : LVD API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_LVD_H +#define R_PDL_LVD_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool LVD_Control( + uint8_t +); + +/* LVD2 and LVD1 control */ +#define PDL_LVD_VDET2_DISABLE_VDET1_DISABLE 0x01u +#define PDL_LVD_VDET2_DISABLE_VDET1_RESET 0x02u +#define PDL_LVD_VDET2_DISABLE_VDET1_INTERRUPT 0x04u +#define PDL_LVD_VDET2_RESET_VDET1_DISABLE 0x08u +#define PDL_LVD_VDET2_INTERRUPT_VDET1_DISABLE 0x10u +#define PDL_LVD_VDET2_INTERRUPT_VDET1_RESET 0x20u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_lvd_RX62Nxx.h b/bsp/rx/RPDL/r_pdl_lvd_RX62Nxx.h new file mode 100644 index 0000000000..a1c0cd4c33 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_lvd_RX62Nxx.h @@ -0,0 +1,39 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Voltage detection circuit API for RX62Nxx +* File Name : r_pdl_lvd_RX62Nxx.h +* Version : 1.02 +* Contents : LVD API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_LVD_RX62Nxx_H +#define R_PDL_LVD_RX62Nxx_H + +/* Library prototypes */ +bool R_LVD_ControlAll( + const uint8_t +); + +/* Macro definitions */ + +#define R_LVD_Control(a) \ +( \ +R_LVD_ControlAll( (a) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_mcu.h b/bsp/rx/RPDL/r_pdl_mcu.h new file mode 100644 index 0000000000..14c73c7262 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_mcu.h @@ -0,0 +1,45 @@ +/*""FILE COMMENT""******************************************************* +* System Name : MCU API for RX62Nxx +* File Name : r_pdl_mcu.h +* Version : 1.02 +* Contents : MCU API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_MCU_H +#define R_PDL_MCU_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_MCU_Control( + uint8_t +); +bool R_MCU_GetStatus( + uint16_t * +); + +/* On-chip ROM control */ +#define PDL_MCU_ROM_ENABLE 0x01u +#define PDL_MCU_ROM_DISABLE 0x02u + +/* On-chip RAM control */ +#define PDL_MCU_RAM_ENABLE 0x04u +#define PDL_MCU_RAM_DISABLE 0x08u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_mcu_rx62nxx.h b/bsp/rx/RPDL/r_pdl_mcu_rx62nxx.h new file mode 100644 index 0000000000..824b203c25 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_mcu_rx62nxx.h @@ -0,0 +1,46 @@ +/*""FILE COMMENT""******************************************************* +* System Name : MCU API for RX62Nxx +* File Name : r_pdl_mcu_RX62Nxx.h +* Version : 1.02 +* Contents : MCU API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_MCU_RX62Nxx_H +#define R_PDL_MCU_RX62Nxx_H + +/* Library prototypes */ +bool R_MCU_ControlAll( + const uint8_t +); +bool R_MCU_GetStatusAll( + volatile uint16_t * const +); + +/* Macro definitions */ +#define R_MCU_Control(a) \ +( \ +R_MCU_ControlAll( (a) ) \ +) + +#define R_MCU_GetStatus(a) \ +( \ +R_MCU_GetStatusAll( (a) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_mtu2.h b/bsp/rx/RPDL/r_pdl_mtu2.h new file mode 100644 index 0000000000..608852858f --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_mtu2.h @@ -0,0 +1,522 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Multi-function Timer Pulse Unit API for RX62N +* File Name : r_pdl_mtu2.h +* Version : 1.02 +* Contents : MTU2 API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_MTU2_H +#define R_PDL_MTU2_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_MTU2_Set( + uint16_t +); +bool R_MTU2_Create( + uint8_t, + void * +); +bool R_MTU2_Destroy( + uint8_t +); +bool R_MTU2_ControlChannel( + uint8_t, + void * +); +bool R_MTU2_ControlUnit( + uint8_t, + void * +); +bool R_MTU2_ReadChannel( + uint8_t, + uint8_t *, + uint16_t *, + uint16_t *, + uint16_t *, + uint16_t *, + uint16_t *, + uint16_t *, + uint16_t * +); +bool R_MTU2_ReadUnit( + uint8_t, + uint16_t *, + uint8_t * +); + +/* Pin selection */ +#define PDL_MTU2_PIN_3C_A 0x0001u +#define PDL_MTU2_PIN_3C_B 0x0002u +#define PDL_MTU2_PIN_3BD_A 0x0004u +#define PDL_MTU2_PIN_3BD_B 0x0008u +#define PDL_MTU2_PIN_4AC_A 0x0010u +#define PDL_MTU2_PIN_4AC_B 0x0020u +#define PDL_MTU2_PIN_4BD_A 0x0040u +#define PDL_MTU2_PIN_4BD_B 0x0080u +#define PDL_MTU2_PIN_5UVW_A 0x0100u +#define PDL_MTU2_PIN_5UVW_B 0x0200u +#define PDL_MTU2_PIN_CLKABCD_A 0x0400u +#define PDL_MTU2_PIN_CLKABCD_B 0x0800u +#define PDL_MTU2_PIN_11UVW_A 0x1000u +#define PDL_MTU2_PIN_11UVW_B 0x2000u +#define PDL_MTU2_PIN_CLKEFGH_A 0x4000u +#define PDL_MTU2_PIN_CLKEFGH_B 0x8000u + +/* Operation mode */ +#define PDL_MTU2_MODE_NORMAL 0x00000001u +#define PDL_MTU2_MODE_PWM1 0x00000002u +#define PDL_MTU2_MODE_PWM2 0x00000004u +#define PDL_MTU2_MODE_PHASE1 0x00000008u +#define PDL_MTU2_MODE_PHASE2 0x00000010u +#define PDL_MTU2_MODE_PHASE3 0x00000020u +#define PDL_MTU2_MODE_PHASE4 0x00000040u +#define PDL_MTU2_MODE_PWM_RS 0x00000080u +#define PDL_MTU2_MODE_PWM_COMP1 0x00000100u +#define PDL_MTU2_MODE_PWM_COMP2 0x00000200u +#define PDL_MTU2_MODE_PWM_COMP3 0x00000400u + +/* Synchronous mode control */ +#define PDL_MTU2_SYNC_DISABLE 0x00000800u +#define PDL_MTU2_SYNC_ENABLE 0x00001000u + +/* TGRA DMAC / DTC trigger control */ +#define PDL_MTU2_TGRA_DMAC_DTC_TRIGGER_DISABLE 0x00002000u +#define PDL_MTU2_TGRA_DMAC_TRIGGER_ENABLE 0x00004000u +#define PDL_MTU2_TGRA_DTC_TRIGGER_ENABLE 0x00008000u + +/* TGRB DTC trigger control */ +#define PDL_MTU2_TGRB_DTC_TRIGGER_DISABLE 0x00010000u +#define PDL_MTU2_TGRB_DTC_TRIGGER_ENABLE 0x00020000u + +/* TGRC DTC trigger control */ +#define PDL_MTU2_TGRC_DTC_TRIGGER_DISABLE 0x00040000u +#define PDL_MTU2_TGRC_DTC_TRIGGER_ENABLE 0x00080000u + +/* TGRD DTC trigger control */ +#define PDL_MTU2_TGRD_DTC_TRIGGER_DISABLE 0x00100000u +#define PDL_MTU2_TGRD_DTC_TRIGGER_ENABLE 0x00200000u + +/* TGRU DTC trigger control */ +#define PDL_MTU2_TGRU_DTC_TRIGGER_DISABLE 0x00400000u +#define PDL_MTU2_TGRU_DTC_TRIGGER_ENABLE 0x00800000u + +/* TGRV DTC trigger control */ +#define PDL_MTU2_TGRV_DTC_TRIGGER_DISABLE 0x01000000u +#define PDL_MTU2_TGRV_DTC_TRIGGER_ENABLE 0x02000000u + +/* TGRW DTC trigger control */ +#define PDL_MTU2_TGRW_DTC_TRIGGER_DISABLE 0x04000000u +#define PDL_MTU2_TGRW_DTC_TRIGGER_ENABLE 0x08000000u + +/* TCIV DTC trigger control */ +#define PDL_MTU2_TCIV_DTC_TRIGGER_DISABLE 0x10000000u +#define PDL_MTU2_TCIV_DTC_TRIGGER_ENABLE 0x20000000u + +/* TCNT counter clock sources */ +#define PDL_MTU2_CLK_PCLK_DIV_1 0x00000001ul +#define PDL_MTU2_CLK_PCLK_DIV_4 0x00000002ul +#define PDL_MTU2_CLK_PCLK_DIV_16 0x00000004ul +#define PDL_MTU2_CLK_PCLK_DIV_64 0x00000008ul +#define PDL_MTU2_CLK_PCLK_DIV_256 0x00000010ul +#define PDL_MTU2_CLK_PCLK_DIV_1024 0x00000020ul +#define PDL_MTU2_CLK_MTCLKA 0x00000040ul +#define PDL_MTU2_CLK_MTCLKB 0x00000080ul +#define PDL_MTU2_CLK_MTCLKC 0x00000100ul +#define PDL_MTU2_CLK_MTCLKD 0x00000200ul +#define PDL_MTU2_CLK_MTCLKE 0x00000400ul +#define PDL_MTU2_CLK_MTCLKF 0x00000800ul +#define PDL_MTU2_CLK_MTCLKG 0x00001000ul +#define PDL_MTU2_CLK_MTCLKH 0x00002000ul +#define PDL_MTU2_CLK_CASCADE 0x00004000ul + +/* TNCT counter clock edge selection */ +#define PDL_MTU2_CLK_RISING 0x00008000ul +#define PDL_MTU2_CLK_FALLING 0x00010000ul +#define PDL_MTU2_CLK_BOTH 0x00020000ul + +/* TCNT counter clearing options */ +#define PDL_MTU2_CLEAR_DISABLE 0x00040000ul +#define PDL_MTU2_CLEAR_TGRA 0x00080000ul +#define PDL_MTU2_CLEAR_TGRB 0x00100000ul +#define PDL_MTU2_CLEAR_SYNC 0x00200000ul +#define PDL_MTU2_CLEAR_TGRC 0x00400000ul +#define PDL_MTU2_CLEAR_TGRD 0x00800000ul + +/* TCNTU counter clock sources */ +#define PDL_MTU2_CLKU_PCLK_DIV_1 0x00000001ul +#define PDL_MTU2_CLKU_PCLK_DIV_4 0x00000002ul +#define PDL_MTU2_CLKU_PCLK_DIV_16 0x00000004ul +#define PDL_MTU2_CLKU_PCLK_DIV_64 0x00000008ul + +/* TCNTV counter clock sources */ +#define PDL_MTU2_CLKV_PCLK_DIV_1 0x00000010ul +#define PDL_MTU2_CLKV_PCLK_DIV_4 0x00000020ul +#define PDL_MTU2_CLKV_PCLK_DIV_16 0x00000040ul +#define PDL_MTU2_CLKV_PCLK_DIV_64 0x00000080ul + +/* TCNTW counter clock sources */ +#define PDL_MTU2_CLKW_PCLK_DIV_1 0x00000100ul +#define PDL_MTU2_CLKW_PCLK_DIV_4 0x00000200ul +#define PDL_MTU2_CLKW_PCLK_DIV_16 0x00000400ul +#define PDL_MTU2_CLKW_PCLK_DIV_64 0x00000800ul + +/* U,V,W counter clearing options */ +#define PDL_MTU2_CLEAR_TGRU_DISABLE 0x00001000ul +#define PDL_MTU2_CLEAR_TGRU_ENABLE 0x00002000ul +#define PDL_MTU2_CLEAR_TGRV_DISABLE 0x00004000ul +#define PDL_MTU2_CLEAR_TGRV_ENABLE 0x00008000ul +#define PDL_MTU2_CLEAR_TGRW_DISABLE 0x00010000ul +#define PDL_MTU2_CLEAR_TGRW_ENABLE 0x00020000ul + +/* ADC conversion trigger control */ +#define PDL_MTU2_ADC_TRIG_TGRA_DISABLE 0x00000001ul +#define PDL_MTU2_ADC_TRIG_TGRA_ENABLE 0x00000002ul +#define PDL_MTU2_ADC_TRIG_TROUGH_DISABLE 0x00000004ul +#define PDL_MTU2_ADC_TRIG_TROUGH_ENABLE 0x00000008ul + +/* ADC trigger interrupt skipping */ +#define PDL_MTU2_ADC_TRIG_A_TROUGH_INT_SKIP_DISABLE 0x00000010ul +#define PDL_MTU2_ADC_TRIG_A_TROUGH_INT_SKIP_ENABLE 0x00000020ul +#define PDL_MTU2_ADC_TRIG_B_TROUGH_INT_SKIP_DISABLE 0x00000040ul +#define PDL_MTU2_ADC_TRIG_B_TROUGH_INT_SKIP_ENABLE 0x00000080ul +#define PDL_MTU2_ADC_TRIG_A_CREST_INT_SKIP_DISABLE 0x00000100ul +#define PDL_MTU2_ADC_TRIG_A_CREST_INT_SKIP_ENABLE 0x00000200ul +#define PDL_MTU2_ADC_TRIG_B_CREST_INT_SKIP_DISABLE 0x00000400ul +#define PDL_MTU2_ADC_TRIG_B_CREST_INT_SKIP_ENABLE 0x00000800ul + +/* ADC trigger control */ +#define PDL_MTU2_ADC_TRIG_A_DOWN_DISABLE 0x00001000ul +#define PDL_MTU2_ADC_TRIG_A_DOWN_ENABLE 0x00002000ul +#define PDL_MTU2_ADC_TRIG_B_DOWN_DISABLE 0x00004000ul +#define PDL_MTU2_ADC_TRIG_B_DOWN_ENABLE 0x00008000ul +#define PDL_MTU2_ADC_TRIG_A_UP_DISABLE 0x00010000ul +#define PDL_MTU2_ADC_TRIG_A_UP_ENABLE 0x00020000ul +#define PDL_MTU2_ADC_TRIG_B_UP_DISABLE 0x00040000ul +#define PDL_MTU2_ADC_TRIG_B_UP_ENABLE 0x00080000ul + +/* Cycle set buffer transfer timing */ +#define PDL_MTU2_CSB_DISABLE 0x0001u +#define PDL_MTU2_CSB_CREST 0x0002u +#define PDL_MTU2_CSB_TROUGH 0x0004u +#define PDL_MTU2_CSB_BOTH 0x0008u + +/* Buffer operation */ +#define PDL_MTU2_BUFFER_AC_DISABLE 0x0010u +#define PDL_MTU2_BUFFER_AC_ENABLE 0x0020u +#define PDL_MTU2_BUFFER_BD_DISABLE 0x0040u +#define PDL_MTU2_BUFFER_BD_ENABLE 0x0080u +#define PDL_MTU2_BUFFER_EF_DISABLE 0x0100u +#define PDL_MTU2_BUFFER_EF_ENABLE 0x0200u + +/* Buffer data transfer */ +#define PDL_MTU2_BUFFER_AC_CM_A 0x0400u +#define PDL_MTU2_BUFFER_AC_TCNT_CLR 0x0800u +#define PDL_MTU2_BUFFER_BD_CM_B 0x1000u +#define PDL_MTU2_BUFFER_BD_TCNT_CLR 0x2000u +#define PDL_MTU2_BUFFER_EF_CM_E 0x4000u +#define PDL_MTU2_BUFFER_EF_TCNT_CLR 0x8000u + +/* TGRA options */ +#define PDL_MTU2_A_OC_DISABLED 0x00000001ul +#define PDL_MTU2_A_OC_LOW 0x00000002ul +#define PDL_MTU2_A_OC_LOW_CM_HIGH 0x00000004ul +#define PDL_MTU2_A_OC_LOW_CM_INV 0x00000008ul +#define PDL_MTU2_A_OC_HIGH_CM_LOW 0x00000010ul +#define PDL_MTU2_A_OC_HIGH 0x00000020ul +#define PDL_MTU2_A_OC_HIGH_CM_INV 0x00000040ul +#define PDL_MTU2_A_IC_RISING_EDGE 0x00000080ul +#define PDL_MTU2_A_IC_FALLING_EDGE 0x00000100ul +#define PDL_MTU2_A_IC_BOTH_EDGES 0x00000200ul +#define PDL_MTU2_A_IC_COUNT 0x00000400ul +#define PDL_MTU2_A_IC_CM_IC 0x00000800ul + +/* TGRB options */ +#define PDL_MTU2_B_OC_DISABLED 0x00001000ul +#define PDL_MTU2_B_OC_LOW 0x00002000ul +#define PDL_MTU2_B_OC_LOW_CM_HIGH 0x00004000ul +#define PDL_MTU2_B_OC_LOW_CM_INV 0x00008000ul +#define PDL_MTU2_B_OC_HIGH_CM_LOW 0x00010000ul +#define PDL_MTU2_B_OC_HIGH 0x00020000ul +#define PDL_MTU2_B_OC_HIGH_CM_INV 0x00040000ul +#define PDL_MTU2_B_IC_RISING_EDGE 0x00080000ul +#define PDL_MTU2_B_IC_FALLING_EDGE 0x00100000ul +#define PDL_MTU2_B_IC_BOTH_EDGES 0x00200000ul +#define PDL_MTU2_B_IC_COUNT 0x00400000ul +#define PDL_MTU2_B_IC_CM_IC 0x00800000ul + +/* Cascade input capture control */ +#define PDL_MTU2_CASCADE_AL_IC_EXC_H 0x01000000ul +#define PDL_MTU2_CASCADE_AL_IC_INC_H 0x02000000ul +#define PDL_MTU2_CASCADE_BL_IC_EXC_H 0x04000000ul +#define PDL_MTU2_CASCADE_BL_IC_INC_H 0x08000000ul +#define PDL_MTU2_CASCADE_AH_IC_EXC_L 0x10000000ul +#define PDL_MTU2_CASCADE_AH_IC_INC_L 0x20000000ul +#define PDL_MTU2_CASCADE_BH_IC_EXC_L 0x40000000ul +#define PDL_MTU2_CASCADE_BH_IC_INC_L 0x80000000ul + +/* TGRC options */ +#define PDL_MTU2_C_OC_DISABLED 0x00000001ul +#define PDL_MTU2_C_OC_LOW 0x00000002ul +#define PDL_MTU2_C_OC_LOW_CM_HIGH 0x00000004ul +#define PDL_MTU2_C_OC_LOW_CM_INV 0x00000008ul +#define PDL_MTU2_C_OC_HIGH_CM_LOW 0x00000010ul +#define PDL_MTU2_C_OC_HIGH 0x00000020ul +#define PDL_MTU2_C_OC_HIGH_CM_INV 0x00000040ul +#define PDL_MTU2_C_IC_RISING_EDGE 0x00000080ul +#define PDL_MTU2_C_IC_FALLING_EDGE 0x00000100ul +#define PDL_MTU2_C_IC_BOTH_EDGES 0x00000200ul +#define PDL_MTU2_C_IC_COUNT 0x00000400ul + +/* TGRD options */ +#define PDL_MTU2_D_OC_DISABLED 0x00000800ul +#define PDL_MTU2_D_OC_LOW 0x00001000ul +#define PDL_MTU2_D_OC_LOW_CM_HIGH 0x00002000ul +#define PDL_MTU2_D_OC_LOW_CM_INV 0x00004000ul +#define PDL_MTU2_D_OC_HIGH_CM_LOW 0x00008000ul +#define PDL_MTU2_D_OC_HIGH 0x00010000ul +#define PDL_MTU2_D_OC_HIGH_CM_INV 0x00020000ul +#define PDL_MTU2_D_IC_RISING_EDGE 0x00040000ul +#define PDL_MTU2_D_IC_FALLING_EDGE 0x00080000ul +#define PDL_MTU2_D_IC_BOTH_EDGES 0x00100000ul +#define PDL_MTU2_D_IC_COUNT 0x00200000ul + +/* TGRU options */ +#define PDL_MTU2_U_CM 0x00000001ul +#define PDL_MTU2_U_IC_RISING_EDGE 0x00000002ul +#define PDL_MTU2_U_IC_FALLING_EDGE 0x00000004ul +#define PDL_MTU2_U_IC_BOTH_EDGES 0x00000008ul +#define PDL_MTU2_U_IC_PWM_LOW_TROUGH 0x00000010ul +#define PDL_MTU2_U_IC_PWM_LOW_CREST 0x00000020ul +#define PDL_MTU2_U_IC_PWM_LOW_BOTH 0x00000040ul +#define PDL_MTU2_U_IC_PWM_HIGH_TROUGH 0x00000080ul +#define PDL_MTU2_U_IC_PWM_HIGH_CREST 0x00000100ul +#define PDL_MTU2_U_IC_PWM_HIGH_BOTH 0x00000200ul + +/* TGRV options */ +#define PDL_MTU2_V_CM 0x00000400ul +#define PDL_MTU2_V_IC_RISING_EDGE 0x00000800ul +#define PDL_MTU2_V_IC_FALLING_EDGE 0x00001000ul +#define PDL_MTU2_V_IC_BOTH_EDGES 0x00002000ul +#define PDL_MTU2_V_IC_PWM_LOW_TROUGH 0x00004000ul +#define PDL_MTU2_V_IC_PWM_LOW_CREST 0x00008000ul +#define PDL_MTU2_V_IC_PWM_LOW_BOTH 0x00010000ul +#define PDL_MTU2_V_IC_PWM_HIGH_TROUGH 0x00020000ul +#define PDL_MTU2_V_IC_PWM_HIGH_CREST 0x00040000ul +#define PDL_MTU2_V_IC_PWM_HIGH_BOTH 0x00080000ul + +/* TGRW options */ +#define PDL_MTU2_W_CM 0x00100000ul +#define PDL_MTU2_W_IC_RISING_EDGE 0x00200000ul +#define PDL_MTU2_W_IC_FALLING_EDGE 0x00400000ul +#define PDL_MTU2_W_IC_BOTH_EDGES 0x00800000ul +#define PDL_MTU2_W_IC_PWM_LOW_TROUGH 0x01000000ul +#define PDL_MTU2_W_IC_PWM_LOW_CREST 0x02000000ul +#define PDL_MTU2_W_IC_PWM_LOW_BOTH 0x04000000ul +#define PDL_MTU2_W_IC_PWM_HIGH_TROUGH 0x08000000ul +#define PDL_MTU2_W_IC_PWM_HIGH_CREST 0x10000000ul +#define PDL_MTU2_W_IC_PWM_HIGH_BOTH 0x20000000ul + +/* Counter stop / re-start */ +#define PDL_MTU2_STOP 0x01u +#define PDL_MTU2_START 0x02u +#define PDL_MTU2_STOP_U 0x04u +#define PDL_MTU2_START_U 0x08u +#define PDL_MTU2_STOP_V 0x10u +#define PDL_MTU2_START_V 0x20u +#define PDL_MTU2_STOP_W 0x40u +#define PDL_MTU2_START_W 0x80u + +/* The registers to be modified (n = 0 to 4 or 6 to 10) */ +#define PDL_MTU2_REGISTER_COUNTER 0x0001u +#define PDL_MTU2_REGISTER_TGRA 0x0002u +#define PDL_MTU2_REGISTER_TGRB 0x0004u +#define PDL_MTU2_REGISTER_TGRC 0x0008u +#define PDL_MTU2_REGISTER_TGRD 0x0010u +#define PDL_MTU2_REGISTER_TGRE 0x0020u +#define PDL_MTU2_REGISTER_TGRF 0x0040u +#define PDL_MTU2_REGISTER_TADCOBRA 0x0080u +#define PDL_MTU2_REGISTER_TADCOBRB 0x0100u + +/* The registers to be modified (n = 5 or 11) */ +#define PDL_MTU2_REGISTER_COUNTER_U 0x01u +#define PDL_MTU2_REGISTER_COUNTER_V 0x02u +#define PDL_MTU2_REGISTER_COUNTER_W 0x04u +#define PDL_MTU2_REGISTER_TGRU 0x08u +#define PDL_MTU2_REGISTER_TGRV 0x10u +#define PDL_MTU2_REGISTER_TGRW 0x20u + +/* Simultaneous stop control */ +#define PDL_MTU2_STOP_CH_0 0x0001u +#define PDL_MTU2_STOP_CH_1 0x0002u +#define PDL_MTU2_STOP_CH_2 0x0004u +#define PDL_MTU2_STOP_CH_3 0x0008u +#define PDL_MTU2_STOP_CH_4 0x0010u +#define PDL_MTU2_STOP_CH_6 PDL_MTU2_STOP_CH_0 +#define PDL_MTU2_STOP_CH_7 PDL_MTU2_STOP_CH_1 +#define PDL_MTU2_STOP_CH_8 PDL_MTU2_STOP_CH_2 +#define PDL_MTU2_STOP_CH_9 PDL_MTU2_STOP_CH_3 +#define PDL_MTU2_STOP_CH_10 PDL_MTU2_STOP_CH_4 + +/* Simultaneous start control */ +#define PDL_MTU2_START_CH_0 0x0020u +#define PDL_MTU2_START_CH_1 0x0040u +#define PDL_MTU2_START_CH_2 0x0080u +#define PDL_MTU2_START_CH_3 0x0100u +#define PDL_MTU2_START_CH_4 0x0200u +#define PDL_MTU2_START_CH_6 PDL_MTU2_START_CH_0 +#define PDL_MTU2_START_CH_7 PDL_MTU2_START_CH_1 +#define PDL_MTU2_START_CH_8 PDL_MTU2_START_CH_2 +#define PDL_MTU2_START_CH_9 PDL_MTU2_START_CH_3 +#define PDL_MTU2_START_CH_10 PDL_MTU2_START_CH_4 + +/* Output control */ +#define PDL_MTU2_OUT_P_PHASE_1_ENABLE 0x00000001ul +#define PDL_MTU2_OUT_P_PHASE_1_DISABLE 0x00000002ul +#define PDL_MTU2_OUT_N_PHASE_1_ENABLE 0x00000004ul +#define PDL_MTU2_OUT_N_PHASE_1_DISABLE 0x00000008ul +#define PDL_MTU2_OUT_P_PHASE_2_ENABLE 0x00000010ul +#define PDL_MTU2_OUT_P_PHASE_2_DISABLE 0x00000020ul +#define PDL_MTU2_OUT_N_PHASE_2_ENABLE 0x00000040ul +#define PDL_MTU2_OUT_N_PHASE_2_DISABLE 0x00000080ul +#define PDL_MTU2_OUT_P_PHASE_3_ENABLE 0x00000100ul +#define PDL_MTU2_OUT_P_PHASE_3_DISABLE 0x00000200ul +#define PDL_MTU2_OUT_N_PHASE_3_ENABLE 0x00000400ul +#define PDL_MTU2_OUT_N_PHASE_3_DISABLE 0x00000800ul + +#define PDL_MTU2_OUT_P_PHASE_ALL_ENABLE (PDL_MTU2_OUT_P_PHASE_1_ENABLE | PDL_MTU2_OUT_P_PHASE_2_ENABLE | PDL_MTU2_OUT_P_PHASE_3_ENABLE) +#define PDL_MTU2_OUT_P_PHASE_ALL_DISABLE (PDL_MTU2_OUT_P_PHASE_1_DISABLE | PDL_MTU2_OUT_P_PHASE_2_DISABLE | PDL_MTU2_OUT_P_PHASE_3_DISABLE) +#define PDL_MTU2_OUT_N_PHASE_ALL_ENABLE (PDL_MTU2_OUT_N_PHASE_1_ENABLE | PDL_MTU2_OUT_N_PHASE_2_ENABLE | PDL_MTU2_OUT_N_PHASE_3_ENABLE) +#define PDL_MTU2_OUT_N_PHASE_ALL_DISABLE (PDL_MTU2_OUT_N_PHASE_1_DISABLE | PDL_MTU2_OUT_N_PHASE_2_DISABLE | PDL_MTU2_OUT_N_PHASE_3_DISABLE) + +/* Inversion control */ +#define PDL_MTU2_OUT_P_PHASE_ALL_HIGH_LOW 0x00001000ul +#define PDL_MTU2_OUT_P_PHASE_ALL_LOW_HIGH 0x00002000ul +#define PDL_MTU2_OUT_N_PHASE_ALL_HIGH_LOW 0x00004000ul +#define PDL_MTU2_OUT_N_PHASE_ALL_LOW_HIGH 0x00008000ul + +#define PDL_MTU2_OUT_P_PHASE_1_HIGH_LOW 0x00010000ul +#define PDL_MTU2_OUT_P_PHASE_1_LOW_HIGH 0x00020000ul +#define PDL_MTU2_OUT_N_PHASE_1_HIGH_LOW 0x00040000ul +#define PDL_MTU2_OUT_N_PHASE_1_LOW_HIGH 0x00080000ul +#define PDL_MTU2_OUT_P_PHASE_2_HIGH_LOW 0x00100000ul +#define PDL_MTU2_OUT_P_PHASE_2_LOW_HIGH 0x00200000ul +#define PDL_MTU2_OUT_N_PHASE_2_HIGH_LOW 0x00400000ul +#define PDL_MTU2_OUT_N_PHASE_2_LOW_HIGH 0x00800000ul +#define PDL_MTU2_OUT_P_PHASE_3_HIGH_LOW 0x01000000ul +#define PDL_MTU2_OUT_P_PHASE_3_LOW_HIGH 0x02000000ul +#define PDL_MTU2_OUT_N_PHASE_3_HIGH_LOW 0x04000000ul +#define PDL_MTU2_OUT_N_PHASE_3_LOW_HIGH 0x08000000ul + +/* Write access control */ +#define PDL_MTU2_OUT_LOCK_ENABLE 0x10000000ul + +/* Toggle output control */ +#define PDL_MTU2_OUT_TOGGLE_ENABLE 0x20000000ul +#define PDL_MTU2_OUT_TOGGLE_DISABLE 0x40000000ul + +/* Output level buffer control */ +#define PDL_MTU2_OUT_BUFFER_P_PHASE_1_LOW 0x00000001ul +#define PDL_MTU2_OUT_BUFFER_P_PHASE_1_HIGH 0x00000002ul +#define PDL_MTU2_OUT_BUFFER_N_PHASE_1_LOW 0x00000004ul +#define PDL_MTU2_OUT_BUFFER_N_PHASE_1_HIGH 0x00000008ul +#define PDL_MTU2_OUT_BUFFER_P_PHASE_2_LOW 0x00000010ul +#define PDL_MTU2_OUT_BUFFER_P_PHASE_2_HIGH 0x00000020ul +#define PDL_MTU2_OUT_BUFFER_N_PHASE_2_LOW 0x00000040ul +#define PDL_MTU2_OUT_BUFFER_N_PHASE_2_HIGH 0x00000080ul +#define PDL_MTU2_OUT_BUFFER_P_PHASE_3_LOW 0x00000100ul +#define PDL_MTU2_OUT_BUFFER_P_PHASE_3_HIGH 0x00000200ul +#define PDL_MTU2_OUT_BUFFER_N_PHASE_3_LOW 0x00000400ul +#define PDL_MTU2_OUT_BUFFER_N_PHASE_3_HIGH 0x00000800ul + +/* Transfer timing (complementary PWM) */ +#define PDL_MTU2_OUT_BUFFER_TRANSFER_DISABLE 0x00001000ul +#define PDL_MTU2_OUT_BUFFER_TRANSFER_CREST 0x00002000ul +#define PDL_MTU2_OUT_BUFFER_TRANSFER_TROUGH 0x00004000ul +#define PDL_MTU2_OUT_BUFFER_TRANSFER_BOTH 0x00008000ul + +/* Transfer timing (reset-synchronised PWM) */ +#define PDL_MTU2_OUT_BUFFER_TRANSFER_CLEAR PDL_MTU2_OUT_BUFFER_TRANSFER_CREST + +/* Buffer transfer to temporary transfer control */ +#define PDL_MTU2_BUFFER_TRANSFER_DISABLE 0x00020000ul +#define PDL_MTU2_BUFFER_TRANSFER_ENABLE 0x00040000ul +#define PDL_MTU2_BUFFER_TRANSFER_LINK 0x00080000ul + +/* Brushless DC motor waveform control */ +#define PDL_MTU2_BDCM_ENABLE 0x0001u +#define PDL_MTU2_BDCM_DISABLE 0x0002u +#define PDL_MTU2_BDCM_P_PHASE_ENABLE 0x0004u +#define PDL_MTU2_BDCM_P_PHASE_DISABLE 0x0008u +#define PDL_MTU2_BDCM_N_PHASE_ENABLE 0x0010u +#define PDL_MTU2_BDCM_N_PHASE_DISABLE 0x0020u +#define PDL_MTU2_BDCM_OPS_FB 0x0040u +#define PDL_MTU2_BDCM_OPS_000 0x0080u +#define PDL_MTU2_BDCM_OPS_001 0x0100u +#define PDL_MTU2_BDCM_OPS_010 0x0200u +#define PDL_MTU2_BDCM_OPS_011 0x0400u +#define PDL_MTU2_BDCM_OPS_100 0x0800u +#define PDL_MTU2_BDCM_OPS_101 0x1000u +#define PDL_MTU2_BDCM_OPS_110 0x2000u +#define PDL_MTU2_BDCM_OPS_111 0x4000u + +/* Interrupt skipping control */ +#define PDL_MTU2_INT_SKIP_TROUGH_DISABLE 0x00000001ul +#define PDL_MTU2_INT_SKIP_TROUGH_1 0x00000002ul +#define PDL_MTU2_INT_SKIP_TROUGH_2 0x00000004ul +#define PDL_MTU2_INT_SKIP_TROUGH_3 0x00000008ul +#define PDL_MTU2_INT_SKIP_TROUGH_4 0x00000010ul +#define PDL_MTU2_INT_SKIP_TROUGH_5 0x00000020ul +#define PDL_MTU2_INT_SKIP_TROUGH_6 0x00000040ul +#define PDL_MTU2_INT_SKIP_TROUGH_7 0x00000080ul +#define PDL_MTU2_INT_SKIP_CREST_DISABLE 0x00000100ul +#define PDL_MTU2_INT_SKIP_CREST_1 0x00000200ul +#define PDL_MTU2_INT_SKIP_CREST_2 0x00000400ul +#define PDL_MTU2_INT_SKIP_CREST_3 0x00000800ul +#define PDL_MTU2_INT_SKIP_CREST_4 0x00001000ul +#define PDL_MTU2_INT_SKIP_CREST_5 0x00002000ul +#define PDL_MTU2_INT_SKIP_CREST_6 0x00004000ul +#define PDL_MTU2_INT_SKIP_CREST_7 0x00008000ul + +/* Dead time generation control */ +#define PDL_MTU2_DEAD_TIME_DISABLE 0x00010000ul +#define PDL_MTU2_DEAD_TIME_ENABLE 0x00020000ul + +/* Waveform retention control */ +#define PDL_MTU2_WAVEFORM_RETAIN_DISABLE 0x00040000ul +#define PDL_MTU2_WAVEFORM_RETAIN_ENABLE 0x00080000ul + +/* Compare match clearing control */ +#define PDL_MTU2_CNT_CLEAR_CM_A_DISABLE 0x00100000ul +#define PDL_MTU2_CNT_CLEAR_CM_A_ENABLE 0x00200000ul + +/* Reset-synchronised or complementary PWM control */ +#define PDL_MTU2_PWM_RS_COMP_ENABLE 0x00400000ul + +/* Register protection */ +#define PDL_MTU2_ACCESS_DISABLE 0x00800000ul +#define PDL_MTU2_ACCESS_ENABLE 0x01000000ul + +/* Unit registers to be modified */ +#define PDL_MTU2_REGISTER_DEAD_TIME 0x01u +#define PDL_MTU2_REGISTER_CYCLE_DATA 0x02u +#define PDL_MTU2_REGISTER_CYCLE_BUFFER 0x04u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_mtu2_rx62nxx.h b/bsp/rx/RPDL/r_pdl_mtu2_rx62nxx.h new file mode 100644 index 0000000000..0881209a96 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_mtu2_rx62nxx.h @@ -0,0 +1,187 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Multi-function Timer Pulse Unit API for RX62N +* File Name : r_pdl_MTU2_RX62Nxx.h +* Version : 1.02 +* Contents : MTU2 API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_MTU2_RX62Nxx_H +#define R_PDL_MTU2_RX62Nxx_H + +#define MTU2_UNITS 2 +#define MTU2_CHANNELS_PER_UNIT 6 +#define MTU2_CHANNELS (uint8_t)(MTU2_UNITS * MTU2_CHANNELS_PER_UNIT) + +/* Callback function storage */ +extern VoidCallBackFunc rpdl_MTU2_func1_callback_func[MTU2_CHANNELS]; +extern VoidCallBackFunc rpdl_MTU2_func2_callback_func[MTU2_CHANNELS]; +extern VoidCallBackFunc rpdl_MTU2_func3_callback_func[MTU2_CHANNELS]; +extern VoidCallBackFunc rpdl_MTU2_func4_callback_func[MTU2_CHANNELS]; +extern VoidCallBackFunc rpdl_MTU2_TGRE_callback_func[MTU2_CHANNELS]; +extern VoidCallBackFunc rpdl_MTU2_TGRF_callback_func[MTU2_CHANNELS]; +extern VoidCallBackFunc rpdl_MTU2_Overflow_callback_func[MTU2_CHANNELS]; +extern VoidCallBackFunc rpdl_MTU2_Underflow_callback_func[MTU2_CHANNELS]; + +typedef struct R_MTU2_Create_parameters +{ + uint32_t data2; + uint32_t data3; + uint32_t data4; + uint16_t data5; + uint32_t data6; + uint32_t data7; + uint32_t data8; + uint16_t data9; + uint16_t data10; + uint16_t data11; + uint16_t data12; + uint16_t data13; + uint16_t data14; + uint16_t data15; + uint16_t data16; + uint16_t data17; + uint16_t data18; + VoidCallBackFunc func1; + VoidCallBackFunc func2; + VoidCallBackFunc func3; + VoidCallBackFunc func4; + uint8_t data19; + VoidCallBackFunc func5; + VoidCallBackFunc func6; + VoidCallBackFunc func7; + VoidCallBackFunc func8; + uint8_t data20; +} R_MTU2_Create_structure; + +typedef struct R_MTU2_ControlChannel_parameters +{ + uint8_t data2; + uint16_t data3; + uint16_t data4; + uint16_t data5; + uint16_t data6; + uint16_t data7; + uint16_t data8; + uint16_t data9; + uint16_t data10; + uint16_t data11; + uint16_t data12; +} R_MTU2_ControlChannel_structure; + +typedef struct R_MTU2_ControlUnit_parameters +{ + uint16_t data2; + uint32_t data3; + uint32_t data4; + uint16_t data5; + uint32_t data6; + uint8_t data7; + uint16_t data8; + uint16_t data9; + uint16_t data10; +} R_MTU2_ControlUnit_structure; + +/* Library prototypes */ +bool R_MTU2_SetAll( + const uint16_t +); +bool R_MTU2_CreateAll( + const uint8_t, + R_MTU2_Create_structure * const +); +bool R_MTU2_DestroyAll( + const uint8_t +); +bool R_MTU2_ControlChannelAll( + const uint8_t, + R_MTU2_ControlChannel_structure * const +); +bool R_MTU2_ControlUnitAll( + const uint8_t, + R_MTU2_ControlUnit_structure * const +); +bool R_MTU2_ReadChannelAll( + const uint8_t, + volatile uint8_t * const, + volatile uint16_t * const, + volatile uint16_t * const, + volatile uint16_t * const, + volatile uint16_t * const, + volatile uint16_t * const, + volatile uint16_t * const, + volatile uint16_t * const +); +bool R_MTU2_ReadUnitAll( + const uint8_t, + volatile uint16_t * const, + volatile uint8_t * const +); +bool ReturnFalse(void); +void R_MTU2_Create_load_defaults(R_MTU2_Create_structure * const); + +/* Macro definitions */ + +#define R_MTU2_Set(a) \ +( \ +R_MTU2_SetAll( (a) ) \ +) + +#define R_MTU2_Create(a, b) \ +( \ +( (a) < MTU2_CHANNELS ) ? \ +R_MTU2_CreateAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_MTU2_ControlChannel(a, b) \ +( \ +( (a) < MTU2_CHANNELS ) ? \ +R_MTU2_ControlChannelAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_MTU2_ControlUnit(a, b) \ +( \ +( (a) < MTU2_UNITS ) ? \ +R_MTU2_ControlUnitAll( (a), (b) ) : \ +ReturnFalse() \ +) + +#define R_MTU2_ReadChannel(a, b, c, d, e, f, g, h, i) \ +( \ +( (a) < MTU2_CHANNELS ) ? \ +R_MTU2_ReadChannelAll( (a), (b), (c), (d), (e), (f), (g), (h), (i) ) : \ +ReturnFalse() \ +) + +#define R_MTU2_ReadUnit(a, b, c) \ +( \ +( (a) < MTU2_UNITS ) ? \ +R_MTU2_ReadUnitAll( (a), (b), (c) ) : \ +ReturnFalse() \ +) + +#define R_MTU2_Destroy(a) \ +( \ +( (a) < MTU2_UNITS ) ? \ +R_MTU2_DestroyAll( (a) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_pfc.h b/bsp/rx/RPDL/r_pdl_pfc.h new file mode 100644 index 0000000000..302a94988e --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_pfc.h @@ -0,0 +1,74 @@ +/*""FILE COMMENT""******************************************************* +* System Name : PFC API +* File Name : r_pdl_pfc.h +* Version : 1.02 +* Contents : PFC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_PFC_H +#define R_PDL_PFC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_PFC_Read( + uint8_t, + uint8_t * +); +bool R_PFC_Write( + uint8_t, + uint8_t +); +bool R_PFC_Modify( + uint8_t, + uint8_t, + uint8_t +); + +/* PFC register definitions */ +#define PDL_PFC_PF0CSE 0x00u +#define PDL_PFC_PF1CSS 0x01u +#define PDL_PFC_PF2CSS 0x02u +#define PDL_PFC_PF3BUS 0x03u +#define PDL_PFC_PF4BUS 0x04u +#define PDL_PFC_PF5BUS 0x05u +#define PDL_PFC_PF6BUS 0x06u +#define PDL_PFC_PF7DMA 0x07u +#define PDL_PFC_PF8IRQ 0x08u +#define PDL_PFC_PF9IRQ 0x09u +#define PDL_PFC_PFAADC 0x0Au +#define PDL_PFC_PFBTMR 0x0Bu +#define PDL_PFC_PFCMTU 0x0Cu +#define PDL_PFC_PFDMTU 0x0Du +#define PDL_PFC_PFENET 0x0Eu +#define PDL_PFC_PFFSCI 0x0Fu +#define PDL_PFC_PFGSPI 0x10u +#define PDL_PFC_PFHSPI 0x11u +#define PDL_PFC_PFJCAN 0x13u +#define PDL_PFC_PFKUSB 0x14u +#define PDL_PFC_PFLUSB 0x15u +#define PDL_PFC_PFMPOE 0x16u +#define PDL_PFC_PFNPOE 0x17u + +/* Logical operations */ +#define PDL_PFC_AND 0x01u +#define PDL_PFC_OR 0x02u +#define PDL_PFC_XOR 0x04u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_pfc_rx62nxx.h b/bsp/rx/RPDL/r_pdl_pfc_rx62nxx.h new file mode 100644 index 0000000000..89448abbf5 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_pfc_rx62nxx.h @@ -0,0 +1,72 @@ +/*""FILE COMMENT""******************************************************* +* System Name : PFC API for RX62Nxx +* File Name : r_pdl_pfc_RX62Nxx.h +* Version : 1.02 +* Contents : PFC API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_PFC_RX62Nxx_H +#define R_PDL_PFC_RX62Nxx_H + +/* Library prototypes */ +bool R_PFC_ReadRegisterAll( + const uint8_t, + volatile uint8_t * const +); +bool R_PFC_WriteRegisterAll( + const uint8_t, + const uint8_t +); +bool R_PFC_ModifyRegisterAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool ReturnFalse(void); + +/* Macro definitions */ + +/* R_PFC_Read */ +/* Call the function if the PFC number is valid (0 to 9). */ +#define R_PFC_Read(a, b) \ +( \ +((a) <= PDL_PFC_PFNPOE) ? \ +R_PFC_ReadRegisterAll( (a), (b) ) : \ +ReturnFalse() \ +) + +/* R_PFC_Write */ +/* Call the function if the PFC number is valid (0 to 9). */ +#define R_PFC_Write(a, b) \ +( \ +((a) <= PDL_PFC_PFNPOE) ? \ +R_PFC_WriteRegisterAll( (a), (b) ) : \ +ReturnFalse() \ +) + +/* R_PFC_Modify */ +/* Call the function if the PFC number is valid (0 to 9). */ +#define R_PFC_Modify(a, b, c) \ +( \ +((a) <= PDL_PFC_PFNPOE) ? \ +R_PFC_ModifyRegisterAll( (a), (b), (c) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_poe.h b/bsp/rx/RPDL/r_pdl_poe.h new file mode 100644 index 0000000000..0bc94dedf2 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_poe.h @@ -0,0 +1,178 @@ +/*""FILE COMMENT""******************************************************* +* System Name : POE API for RX62Nxx +* File Name : r_pdl_poe.h +* Version : 1.02 +* Contents : POE API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_POE_H +#define R_PDL_POE_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_POE_Set( + uint32_t, + uint8_t, + uint32_t +); +bool R_POE_Create( + uint16_t, + void *, + void *, + void *, + void *, + uint8_t +); +bool POE_Control( + uint8_t, + uint16_t, + uint16_t +); +bool R_POE_GetStatus( + uint16_t * +); + +/* Pin selection */ +#define PDL_POE_PINS_0_TO_3 0x01u +#define PDL_POE_PINS_4_TO_7 0x02u +#define PDL_POE_PIN_8 0x04u +#define PDL_POE_PIN_9 0x08u + +/* Input pin detection */ +#define PDL_POE_0_MODE_EDGE 0x00000001ul +#define PDL_POE_0_MODE_LOW_8 0x00000002ul +#define PDL_POE_0_MODE_LOW_16 0x00000004ul +#define PDL_POE_0_MODE_LOW_128 0x00000008ul + +#define PDL_POE_1_MODE_EDGE 0x00000010ul +#define PDL_POE_1_MODE_LOW_8 0x00000020ul +#define PDL_POE_1_MODE_LOW_16 0x00000040ul +#define PDL_POE_1_MODE_LOW_128 0x00000080ul + +#define PDL_POE_2_MODE_EDGE 0x00000100ul +#define PDL_POE_2_MODE_LOW_8 0x00000200ul +#define PDL_POE_2_MODE_LOW_16 0x00000400ul +#define PDL_POE_2_MODE_LOW_128 0x00000800ul + +#define PDL_POE_3_MODE_EDGE 0x00001000ul +#define PDL_POE_3_MODE_LOW_8 0x00002000ul +#define PDL_POE_3_MODE_LOW_16 0x00004000ul +#define PDL_POE_3_MODE_LOW_128 0x00008000ul + +#define PDL_POE_4_MODE_EDGE 0x00010000ul +#define PDL_POE_4_MODE_LOW_8 0x00020000ul +#define PDL_POE_4_MODE_LOW_16 0x00040000ul +#define PDL_POE_4_MODE_LOW_128 0x00080000ul + +#define PDL_POE_5_MODE_EDGE 0x00100000ul +#define PDL_POE_5_MODE_LOW_8 0x00200000ul +#define PDL_POE_5_MODE_LOW_16 0x00400000ul +#define PDL_POE_5_MODE_LOW_128 0x00800000ul + +#define PDL_POE_6_MODE_EDGE 0x01000000ul +#define PDL_POE_6_MODE_LOW_8 0x02000000ul +#define PDL_POE_6_MODE_LOW_16 0x04000000ul +#define PDL_POE_6_MODE_LOW_128 0x08000000ul + +#define PDL_POE_7_MODE_EDGE 0x10000000ul +#define PDL_POE_7_MODE_LOW_8 0x20000000ul +#define PDL_POE_7_MODE_LOW_16 0x40000000ul +#define PDL_POE_7_MODE_LOW_128 0x80000000ul + +#define PDL_POE_8_MODE_EDGE 0x01u +#define PDL_POE_8_MODE_LOW_8 0x02u +#define PDL_POE_8_MODE_LOW_16 0x04u +#define PDL_POE_8_MODE_LOW_128 0x08u + +#define PDL_POE_9_MODE_EDGE 0x10u +#define PDL_POE_9_MODE_LOW_8 0x20u +#define PDL_POE_9_MODE_LOW_16 0x40u +#define PDL_POE_9_MODE_LOW_128 0x80u + +/* Pin output control */ + +/* High impedance request detection */ +#define PDL_POE_HI_Z_REQ_8_ENABLE 0x00000001ul +#define PDL_POE_HI_Z_REQ_MTIOC0A 0x00000002ul +#define PDL_POE_HI_Z_REQ_MTIOC0B 0x00000004ul +#define PDL_POE_HI_Z_REQ_MTIOC0C 0x00000008ul +#define PDL_POE_HI_Z_REQ_MTIOC0D 0x00000010ul + +#define PDL_POE_HI_Z_REQ_9_ENABLE 0x00000020ul +#define PDL_POE_HI_Z_REQ_MTIOC6A 0x00000040ul +#define PDL_POE_HI_Z_REQ_MTIOC6B 0x00000080ul +#define PDL_POE_HI_Z_REQ_MTIOC6C 0x00000100ul +#define PDL_POE_HI_Z_REQ_MTIOC6D 0x00000200ul + +/* Output short detection */ +#define PDL_POE_SHORT_3_4_HI_Z 0x00000400ul +#define PDL_POE_SHORT_MTIOC4BD_B 0x00000800ul +#define PDL_POE_SHORT_MTIOC4AC_B 0x00001000ul +#define PDL_POE_SHORT_MTIOC3BD_B 0x00002000ul +#define PDL_POE_SHORT_MTIOC4BD_A 0x00004000ul +#define PDL_POE_SHORT_MTIOC4AC_A 0x00008000ul +#define PDL_POE_SHORT_MTIOC3BD_A 0x00010000ul + +#define PDL_POE_SHORT_9_10_HI_Z 0x00020000ul +#define PDL_POE_SHORT_MTIOC10BD 0x00040000ul +#define PDL_POE_SHORT_MTIOC10AC 0x00080000ul +#define PDL_POE_SHORT_MTIOC9BD 0x00100000ul + +/* High impedance request response */ +#define PDL_POE_IRQ_HI_Z_0_3_DISABLE 0x0001u +#define PDL_POE_IRQ_HI_Z_0_3_ENABLE 0x0002u +#define PDL_POE_IRQ_HI_Z_4_7_DISABLE 0x0004u +#define PDL_POE_IRQ_HI_Z_4_7_ENABLE 0x0008u +#define PDL_POE_IRQ_HI_Z_8_DISABLE 0x0010u +#define PDL_POE_IRQ_HI_Z_8_ENABLE 0x0020u +#define PDL_POE_IRQ_HI_Z_9_DISABLE 0x0040u +#define PDL_POE_IRQ_HI_Z_9_ENABLE 0x0080u + +/* Output short detection response */ +#define PDL_POE_IRQ_SHORT_3_4_ENABLE 0x0100u +#define PDL_POE_IRQ_SHORT_3_4_DISABLE 0x0200u +#define PDL_POE_IRQ_SHORT_9_10_ENABLE 0x0400u +#define PDL_POE_IRQ_SHORT_9_10_DISABLE 0x0800u + +/* MTU channel high impedance control */ +#define PDL_POE_MTU3_MTU4_HI_Z_ON 0x01u +#define PDL_POE_MTU3_MTU4_HI_Z_OFF 0x02u +#define PDL_POE_MTU0_HI_Z_ON 0x04u +#define PDL_POE_MTU0_HI_Z_OFF 0x08u +#define PDL_POE_MTU9_MTU10_HI_Z_ON 0x10u +#define PDL_POE_MTU9_MTU10_HI_Z_OFF 0x20u +#define PDL_POE_MTU6_HI_Z_ON 0x40u +#define PDL_POE_MTU6_HI_Z_OFF 0x80u + +/* Event flag control */ +#define PDL_POE_FLAG_POE0_CLEAR 0x0001u +#define PDL_POE_FLAG_POE1_CLEAR 0x0002u +#define PDL_POE_FLAG_POE2_CLEAR 0x0004u +#define PDL_POE_FLAG_POE3_CLEAR 0x0008u +#define PDL_POE_FLAG_POE4_CLEAR 0x0010u +#define PDL_POE_FLAG_POE5_CLEAR 0x0020u +#define PDL_POE_FLAG_POE6_CLEAR 0x0040u +#define PDL_POE_FLAG_POE7_CLEAR 0x0080u +#define PDL_POE_FLAG_POE8_CLEAR 0x0100u +#define PDL_POE_FLAG_POE9_CLEAR 0x0200u +#define PDL_POE_FLAG_SHORT_3_4_CLEAR 0x0400u +#define PDL_POE_FLAG_SHORT_9_10_CLEAR 0x0800u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_poe_rx62nxx.h b/bsp/rx/RPDL/r_pdl_poe_rx62nxx.h new file mode 100644 index 0000000000..898af21979 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_poe_rx62nxx.h @@ -0,0 +1,80 @@ +/*""FILE COMMENT""******************************************************* +* System Name : POE API for RX62Nxx +* File Name : r_pdl_poe_RX62Nxx.h +* Version : 1.02 +* Contents : POE API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_POE_RX62Nxx_H +#define R_PDL_POE_RX62Nxx_H + +#define POE_INTERRUPTS 4 + +/* Callback function storage */ +extern VoidCallBackFunc rpdl_POE_callback_func[]; + +/* Library prototypes */ +bool R_POE_SetAll( + const uint32_t, + const uint8_t, + const uint32_t +); +bool R_POE_CreateAll( + const uint16_t, + VoidCallBackFunc const, + VoidCallBackFunc const, + VoidCallBackFunc const, + VoidCallBackFunc const, + const uint8_t +); +bool R_POE_ControlAll( + const uint8_t, + const uint16_t, + const uint16_t +); +bool R_POE_GetStatusAll( + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_POE_Set(a, b, c) \ +( \ +R_POE_SetAll( (a), (b), (c) ) \ +) + +#define R_POE_Create(a, b, c, d, e, f) \ +( \ +( ((f) <= IPL_MAX) ) ? \ +R_POE_CreateAll( (a), (b), (c), (d), (e), (f) ) : \ +ReturnFalse() \ +) + +#define R_POE_Control(a, b, c) \ +( \ +R_POE_ControlAll( (a), (b), (c) ) \ +) + +#define R_POE_GetStatus(a) \ +( \ +R_POE_GetStatusAll( (a) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_ppg.h b/bsp/rx/RPDL/r_pdl_ppg.h new file mode 100644 index 0000000000..d1d1604333 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_ppg.h @@ -0,0 +1,105 @@ +/*""FILE COMMENT""******************************************************* +* System Name : PPG API for RX62Nxx +* File Name : r_pdl_PPG.h +* Version : 1.02 +* Contents : PPG API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_PPG_H +#define R_PDL_PPG_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_PPG_Create( + uint32_t, + uint16_t, + uint8_t +); +bool R_PPG_Destroy( + uint32_t +); +bool R_PPG_Control( + uint32_t, + uint8_t +); + +/* Output pin selection */ +#define PDL_PPG_PO0 (PDL_PPG_GROUP_0 | 0x01u) +#define PDL_PPG_PO1 (PDL_PPG_GROUP_0 | 0x02u) +#define PDL_PPG_PO2 (PDL_PPG_GROUP_0 | 0x04u) +#define PDL_PPG_PO3 (PDL_PPG_GROUP_0 | 0x08u) +#define PDL_PPG_PO4 (PDL_PPG_GROUP_1 | 0x10u) +#define PDL_PPG_PO5 (PDL_PPG_GROUP_1 | 0x20u) +#define PDL_PPG_PO6 (PDL_PPG_GROUP_1 | 0x40u) +#define PDL_PPG_PO7 (PDL_PPG_GROUP_1 | 0x80u) +#define PDL_PPG_PO8 (PDL_PPG_GROUP_2 | 0x01u) +#define PDL_PPG_PO9 (PDL_PPG_GROUP_2 | 0x02u) +#define PDL_PPG_PO10 (PDL_PPG_GROUP_2 | 0x04u) +#define PDL_PPG_PO11 (PDL_PPG_GROUP_2 | 0x08u) +#define PDL_PPG_PO12 (PDL_PPG_GROUP_3 | 0x10u) +#define PDL_PPG_PO13 (PDL_PPG_GROUP_3 | 0x20u) +#define PDL_PPG_PO14 (PDL_PPG_GROUP_3 | 0x40u) +#define PDL_PPG_PO15 (PDL_PPG_GROUP_3 | 0x80u) +#define PDL_PPG_PO16 (PDL_PPG_GROUP_4 | 0x01u) +#define PDL_PPG_PO17 (PDL_PPG_GROUP_4 | 0x02u) +#define PDL_PPG_PO18 (PDL_PPG_GROUP_4 | 0x04u) +#define PDL_PPG_PO19 (PDL_PPG_GROUP_4 | 0x08u) +#define PDL_PPG_PO20 (PDL_PPG_GROUP_5 | 0x10u) +#define PDL_PPG_PO21 (PDL_PPG_GROUP_5 | 0x20u) +#define PDL_PPG_PO22 (PDL_PPG_GROUP_5 | 0x40u) +#define PDL_PPG_PO23 (PDL_PPG_GROUP_5 | 0x80u) +#define PDL_PPG_PO24 (PDL_PPG_GROUP_6 | 0x01u) +#define PDL_PPG_PO25 (PDL_PPG_GROUP_6 | 0x02u) +#define PDL_PPG_PO26 (PDL_PPG_GROUP_6 | 0x04u) +#define PDL_PPG_PO27 (PDL_PPG_GROUP_6 | 0x08u) +#define PDL_PPG_PO28 (PDL_PPG_GROUP_7 | 0x10u) +#define PDL_PPG_PO29 (PDL_PPG_GROUP_7 | 0x20u) +#define PDL_PPG_PO30 (PDL_PPG_GROUP_7 | 0x40u) +#define PDL_PPG_PO31 (PDL_PPG_GROUP_7 | 0x80u) + +/* Output trigger selection */ +#define PDL_PPG_TRIGGER_MTU0 0x0001u +#define PDL_PPG_TRIGGER_MTU1 0x0002u +#define PDL_PPG_TRIGGER_MTU2 0x0004u +#define PDL_PPG_TRIGGER_MTU3 0x0008u +#define PDL_PPG_TRIGGER_MTU6 0x0010u +#define PDL_PPG_TRIGGER_MTU7 0x0020u +#define PDL_PPG_TRIGGER_MTU8 0x0040u +#define PDL_PPG_TRIGGER_MTU9 0x0080u + +/* Non-overlap control */ +#define PDL_PPG_NORMAL 0x0100u +#define PDL_PPG_NON_OVERLAP 0x0200u + +/* Invert control */ +#define PDL_PPG_DIRECT 0x0400u +#define PDL_PPG_INVERT 0x0800u + +/* Group selection */ +#define PDL_PPG_GROUP_0 0x00000100u +#define PDL_PPG_GROUP_1 0x00110200u +#define PDL_PPG_GROUP_2 0x00220400u +#define PDL_PPG_GROUP_3 0x00330800u +#define PDL_PPG_GROUP_4 0x01041000u +#define PDL_PPG_GROUP_5 0x01152000u +#define PDL_PPG_GROUP_6 0x01264000u +#define PDL_PPG_GROUP_7 0x01378000u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_ppg_rx62nxx.h b/bsp/rx/RPDL/r_pdl_ppg_rx62nxx.h new file mode 100644 index 0000000000..218f300e7b --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_ppg_rx62nxx.h @@ -0,0 +1,76 @@ +/*""FILE COMMENT""******************************************************* +* System Name : PPG API for RX62Nxx +* File Name : r_pdl_ppg_RX62Nxx.h +* Version : 1.02 +* Contents : PPG API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_PPG_RX62Nxx_H +#define R_PDL_PPG_RX62Nxx_H + +#define PPG_UNITS 2 +#define PPG_GROUPS_PER_UNIT 4 +#define PPG_GROUPS (uint8_t)(PPG_UNITS * PPG_GROUPS_PER_UNIT) + +/* Library prototypes */ +bool R_PPG_CreateAll( + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint16_t, + const uint8_t +); +bool R_PPG_DestroyAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_PPG_ControlAll( + const uint8_t, + const uint8_t, + const uint8_t +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_PPG_Create(a, b, c) \ +( \ +( (a) != 0x00000000u ) ? \ +R_PPG_CreateAll( (uint8_t)(((a) & 0x0F000000ul) >> 24), (uint8_t)(((a) & 0x00F00000ul) >> 20), (uint8_t)(((a) & 0x000F0000ul) >> 16), (uint8_t)(((a) & 0x0000FF00ul) >> 8), (uint8_t)(a), (b), (c) ) : \ +ReturnFalse() \ +) + +#define R_PPG_Destroy(a) \ +( \ +( (a) != 0x00000000u ) ? \ +R_PPG_DestroyAll( (uint8_t)(((a) & 0x0F000000ul) >> 24), (uint8_t)(((a) & 0x0000FF00ul) >> 8), (uint8_t)(a) ) : \ +ReturnFalse() \ +) + +#define R_PPG_Control(a, b ) \ +( \ +( (a) != 0x00u ) ? \ +R_PPG_ControlAll( (uint8_t)(((a) & 0x0F000000ul) >> 24), (uint8_t)(((a) & 0x0000FF00ul) >> 8), (b) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_rtc.h b/bsp/rx/RPDL/r_pdl_rtc.h new file mode 100644 index 0000000000..2cdc217868 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_rtc.h @@ -0,0 +1,136 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Real-time clock API for RX62Nxx +* File Name : r_pdl_rtc.h +* Version : 1.02 +* Contents : RTC function prototypes +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_RTC_H +#define R_PDL_RTC_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_RTC_Create( + uint32_t, + uint32_t, + uint32_t, + uint32_t, + uint32_t, + void *, + uint8_t, + void *, + uint8_t +); +bool R_RTC_Control( + uint32_t, + uint16_t, + uint32_t, + uint32_t, + uint32_t, + uint32_t +); +bool R_RTC_Read( + uint8_t *, + uint32_t *, + uint32_t * +); + +/* Alarm control */ +#define PDL_RTC_ALARM_HOUR_DISABLE 0x00000001ul +#define PDL_RTC_ALARM_HOUR_ENABLE 0x00000002ul +#define PDL_RTC_ALARM_MINUTE_DISABLE 0x00000004ul +#define PDL_RTC_ALARM_MINUTE_ENABLE 0x00000008ul +#define PDL_RTC_ALARM_SECOND_DISABLE 0x00000010ul +#define PDL_RTC_ALARM_SECOND_ENABLE 0x00000020ul +#define PDL_RTC_ALARM_YEAR_DISABLE 0x00000040ul +#define PDL_RTC_ALARM_YEAR_ENABLE 0x00000080ul +#define PDL_RTC_ALARM_MONTH_DISABLE 0x00000100ul +#define PDL_RTC_ALARM_MONTH_ENABLE 0x00000200ul +#define PDL_RTC_ALARM_DAY_DISABLE 0x00000400ul +#define PDL_RTC_ALARM_DAY_ENABLE 0x00000800ul +#define PDL_RTC_ALARM_DOW_DISABLE 0x00001000ul +#define PDL_RTC_ALARM_DOW_ENABLE 0x00002000ul + +#define PDL_RTC_ALARM_TIME_DISABLE \ +(PDL_RTC_ALARM_HOUR_DISABLE | PDL_RTC_ALARM_MINUTE_DISABLE | PDL_RTC_ALARM_SECOND_DISABLE) +#define PDL_RTC_ALARM_TIME_ENABLE \ +(PDL_RTC_ALARM_HOUR_ENABLE | PDL_RTC_ALARM_MINUTE_ENABLE | PDL_RTC_ALARM_SECOND_ENABLE) +#define PDL_RTC_ALARM_DATE_DISABLE \ + (PDL_RTC_ALARM_YEAR_DISABLE | PDL_RTC_ALARM_MONTH_DISABLE | \ + PDL_RTC_ALARM_DAY_DISABLE | PDL_RTC_ALARM_DOW_DISABLE) +#define PDL_RTC_ALARM_DATE_ENABLE \ + (PDL_RTC_ALARM_YEAR_ENABLE | PDL_RTC_ALARM_MONTH_ENABLE | \ + PDL_RTC_ALARM_DAY_ENABLE | PDL_RTC_ALARM_DOW_ENABLE) + +/* Periodic interrupt selection */ +#define PDL_RTC_PERIODIC_DISABLE 0x00004000ul +#define PDL_RTC_PERIODIC_256_HZ 0x00008000ul +#define PDL_RTC_PERIODIC_64_HZ 0x00010000ul +#define PDL_RTC_PERIODIC_16_HZ 0x00020000ul +#define PDL_RTC_PERIODIC_4_HZ 0x00040000ul +#define PDL_RTC_PERIODIC_2_HZ 0x00080000ul +#define PDL_RTC_PERIODIC_1_HZ 0x00100000ul +#define PDL_RTC_PERIODIC_2S 0x00200000ul + +/* Clock output control */ +#define PDL_RTC_OUTPUT_DISABLE 0x00400000ul +#define PDL_RTC_OUTPUT_ENABLE 0x00800000ul + +/* Clock control */ +#define PDL_RTC_CLOCK_STOP 0x01000000ul +#define PDL_RTC_CLOCK_START 0x02000000ul + +/* 30-second adjustment control */ +#define PDL_RTC_ADJUST_START 0x04000000ul + +/* Reset control */ +#define PDL_RTC_RESET_START 0x08000000ul + +/* Current time counter selection */ +#define PDL_RTC_UPDATE_CURRENT_HOUR 0x0001u +#define PDL_RTC_UPDATE_CURRENT_MINUTE 0x0002u +#define PDL_RTC_UPDATE_CURRENT_SECOND 0x0004u +#define PDL_RTC_UPDATE_CURRENT_TIME \ +(PDL_RTC_UPDATE_CURRENT_HOUR | PDL_RTC_UPDATE_CURRENT_MINUTE | PDL_RTC_UPDATE_CURRENT_SECOND) + +/* Current date counter selection */ +#define PDL_RTC_UPDATE_CURRENT_YEAR 0x0008u +#define PDL_RTC_UPDATE_CURRENT_MONTH 0x0010u +#define PDL_RTC_UPDATE_CURRENT_DAY 0x0020u +#define PDL_RTC_UPDATE_CURRENT_DOW 0x0040u +#define PDL_RTC_UPDATE_CURRENT_DATE \ +(PDL_RTC_UPDATE_CURRENT_YEAR | PDL_RTC_UPDATE_CURRENT_MONTH | PDL_RTC_UPDATE_CURRENT_DAY | PDL_RTC_UPDATE_CURRENT_DOW) + +/* Alarm time counter selection */ +#define PDL_RTC_UPDATE_ALARM_HOUR 0x0080u +#define PDL_RTC_UPDATE_ALARM_MINUTE 0x0100u +#define PDL_RTC_UPDATE_ALARM_SECOND 0x0200u +#define PDL_RTC_UPDATE_ALARM_TIME \ +(PDL_RTC_UPDATE_ALARM_HOUR | PDL_RTC_UPDATE_ALARM_MINUTE | PDL_RTC_UPDATE_ALARM_SECOND) + +/* Alarm date counter selection */ +#define PDL_RTC_UPDATE_ALARM_YEAR 0x0400u +#define PDL_RTC_UPDATE_ALARM_MONTH 0x0800u +#define PDL_RTC_UPDATE_ALARM_DAY 0x1000u +#define PDL_RTC_UPDATE_ALARM_DOW 0x2000u +#define PDL_RTC_UPDATE_ALARM_DATE \ +(PDL_RTC_UPDATE_ALARM_YEAR | PDL_RTC_UPDATE_ALARM_MONTH | PDL_RTC_UPDATE_ALARM_DAY | PDL_RTC_UPDATE_ALARM_DOW) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_rtc_RX62Nxx.h b/bsp/rx/RPDL/r_pdl_rtc_RX62Nxx.h new file mode 100644 index 0000000000..bc243cd0b4 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_rtc_RX62Nxx.h @@ -0,0 +1,76 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Real-time clock API for RX62Nxx +* File Name : r_pdl_rtc_RX62Nxx.h +* Version : 1.02 +* Contents : RTC header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_RTC_RX62Nxx_H +#define R_PDL_RTC_RX62Nxx_H + +extern VoidCallBackFunc rpdl_RTC_Periodic_callback_func; +extern VoidCallBackFunc rpdl_RTC_Alarm_callback_func; + +/* Library prototypes */ +bool R_RTC_CreateAll( + const uint32_t, + const uint32_t, + const uint32_t, + const uint32_t, + const uint32_t, + VoidCallBackFunc const, + const uint8_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_RTC_ControlAll( + const uint32_t, + const uint16_t, + const uint32_t, + const uint32_t, + const uint32_t, + const uint32_t +); +bool R_RTC_ReadAll( + volatile uint8_t * const, + volatile uint32_t * const, + volatile uint32_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_RTC_Create(a, b, c, d, e, f, g, h, i) \ +( \ +( ((g) <= IPL_MAX) && ((i) <= IPL_MAX) ) ? \ +R_RTC_CreateAll( (a), (b), (c), (d), (e), (f), (g), (h), (i) ): \ +ReturnFalse() \ +) + +#define R_RTC_Control(a, b, c, d, e, f) \ +( \ +R_RTC_ControlAll( (a), (b), (c), (d), (e), (f) ) \ +) + +#define R_RTC_Read(a, b, c) \ +( \ +R_RTC_ReadAll( (a), (b), (c) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_sci.h b/bsp/rx/RPDL/r_pdl_sci.h new file mode 100644 index 0000000000..62a636c14a --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_sci.h @@ -0,0 +1,203 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Serial Communication Interface API for RX62Nxx +* File Name : r_pdl_sci.h +* Version : 1.02 +* Contents : Serial Interface API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_SCI_H +#define R_PDL_SCI_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_SCI_Set( + uint8_t +); +bool R_SCI_Create( + uint8_t, + uint32_t, + uint32_t, + uint8_t +); +bool R_SCI_Destroy( + uint8_t +); +bool R_SCI_Send( + uint8_t, + uint16_t, + uint8_t *, + uint16_t, + void * +); +bool R_SCI_Receive( + uint8_t, + uint16_t, + uint8_t *, + uint16_t, + void *, + void * +); +bool R_SCI_Control( + uint8_t, + uint8_t +); +bool R_SCI_GetStatus( + uint8_t, + uint8_t *, + uint8_t *, + uint16_t *, + uint16_t * +); + +/* ------------------------ */ +/* R_SCI_Set, Configuration */ +/* ------------------------ */ +/* Pin selection */ +#define PDL_SCI_PIN_SCI1_A 0x01u +#define PDL_SCI_PIN_SCI1_B 0x02u +#define PDL_SCI_PIN_SCI2_A 0x04u +#define PDL_SCI_PIN_SCI2_B 0x08u +#define PDL_SCI_PIN_SCI3_A 0x10u +#define PDL_SCI_PIN_SCI3_B 0x20u +#define PDL_SCI_PIN_SCI6_A 0x40u +#define PDL_SCI_PIN_SCI6_B 0x80u + +/* ----------------------------------------- */ +/* R_SCI_Create, data2 Channel configuration */ +/* ----------------------------------------- */ +/* Operation mode */ +#define PDL_SCI_ASYNC 0x00000001ul +#define PDL_SCI_SYNC 0x00000002ul +#define PDL_SCI_SMART 0x00000004ul +#define PDL_SCI_ASYNC_MP 0x00000008ul + +/* Common selections */ + +/* Transmit / Receive connections */ +#define PDL_SCI_TX_CONNECTED 0x00000010ul +#define PDL_SCI_TX_DISCONNECTED 0x00000020ul +#define PDL_SCI_RX_CONNECTED 0x00000040ul +#define PDL_SCI_RX_DISCONNECTED 0x00000080ul + +/* Data clock source */ +#define PDL_SCI_CLK_INT_OUT 0x00000100ul +#define PDL_SCI_CLK_EXT 0x00000200ul + +/* Parity selection */ +#define PDL_SCI_PARITY_EVEN 0x00000400ul +#define PDL_SCI_PARITY_ODD 0x00000800ul + +/* Asynchronous-only selections */ + +/* Data clock source */ +#define PDL_SCI_CLK_INT_IO 0x00001000ul +#define PDL_SCI_CLK_TMR 0x00002000ul + +/* Data length */ +#define PDL_SCI_8_BIT_LENGTH 0x00004000ul +#define PDL_SCI_7_BIT_LENGTH 0x00008000ul + +/* Parity selection */ +#define PDL_SCI_PARITY_NONE 0x00010000ul + +/* Stop bit length */ +#define PDL_SCI_STOP_1 0x00020000ul +#define PDL_SCI_STOP_2 0x00040000ul + +#define PDL_SCI_8N1 (PDL_SCI_8_BIT_LENGTH | PDL_SCI_PARITY_NONE | PDL_SCI_STOP_1) + +/* Smart card-only selections */ + +/* Data transfer format */ +#define PDL_SCI_LSB_FIRST 0x00001000ul +#define PDL_SCI_MSB_FIRST 0x00002000ul + +/* Data inversion */ +#define PDL_SCI_INVERSION_OFF 0x00004000ul +#define PDL_SCI_INVERSION_ON 0x00008000ul + +/* Base clock pulse cycle count */ +#define PDL_SCI_BCP_32 0x00010000ul +#define PDL_SCI_BCP_64 0x00020000ul +#define PDL_SCI_BCP_93 0x00040000ul +#define PDL_SCI_BCP_128 0x00080000ul +#define PDL_SCI_BCP_186 0x00100000ul +#define PDL_SCI_BCP_256 0x00200000ul +#define PDL_SCI_BCP_372 0x00400000ul +#define PDL_SCI_BCP_512 0x00800000ul + +/* Block transfer mode */ +#define PDL_SCI_BLOCK_MODE_OFF 0x01000000ul +#define PDL_SCI_BLOCK_MODE_ON 0x02000000ul + +/* GSM mode */ +#define PDL_SCI_GSM_MODE_OFF 0x04000000ul +#define PDL_SCI_GSM_MODE_ON 0x08000000ul + +/* Clock output control */ +#define PDL_SCI_SCK_OUTPUT_OFF 0x10000000ul +#define PDL_SCI_SCK_OUTPUT_LOW 0x20000000ul +#define PDL_SCI_SCK_OUTPUT_ON 0x40000000ul +#define PDL_SCI_SCK_OUTPUT_HIGH 0x80000000ul + +/* ----------------------------------- */ +/* R_SCI_Create, data3 register value */ +/* ----------------------------------- */ +/* Transfer clock control */ + +/* CKS selection (optional) */ +#define PDL_SCI_PCLK_DIV_1 0x01000000ul +#define PDL_SCI_PCLK_DIV_4 0x02000000ul +#define PDL_SCI_PCLK_DIV_16 0x03000000ul +#define PDL_SCI_PCLK_DIV_64 0x04000000ul + +/* ABCS selection (optional) */ +#define PDL_SCI_CYCLE_BIT_16 0x10000000ul +#define PDL_SCI_CYCLE_BIT_8 0x20000000ul + +/* ----------------------------------------------- */ +/* R_SCI_Send/R_SCI_Receive, Channel configuration */ +/* ----------------------------------------------- */ +/* DMAC / DTC trigger control */ +#define PDL_SCI_DMAC_DTC_TRIGGER_DISABLE 0x0001u +#define PDL_SCI_DMAC_TRIGGER_ENABLE 0x0002u +#define PDL_SCI_DTC_TRIGGER_ENABLE 0x0004u +#define PDL_SCI_MP_ID_CYCLE 0x0008u + +/* ------------------------------ */ +/* R_SCI_Control, Channel control */ +/* ------------------------------ */ +/* Stop control */ +#define PDL_SCI_STOP_TX 0x01u +#define PDL_SCI_STOP_RX 0x02u +#define PDL_SCI_STOP_TX_AND_RX (PDL_SCI_STOP_TX | PDL_SCI_STOP_RX) + +/* Break output control */ +#define PDL_SCI_OUTPUT_MARK 0x04u +#define PDL_SCI_OUTPUT_SPACE 0x08u + +/* Error flag control */ +#define PDL_SCI_CLEAR_RECEIVE_ERROR_FLAGS 0x10u + +/* Manual SCK control */ +#define PDL_SCI_GSM_SCK_STOP 0x20u +#define PDL_SCI_GSM_SCK_START 0x40u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_sci_rx62nxx.h b/bsp/rx/RPDL/r_pdl_sci_rx62nxx.h new file mode 100644 index 0000000000..d1177c4b01 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_sci_rx62nxx.h @@ -0,0 +1,178 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Serial Communication Interface API for RX62Nxx +* File Name : r_pdl_sci_RX62Nxx.h +* Version : 1.02 +* Contents : Serial Interface API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_SCI_RX62Nxx_H +#define R_PDL_SCI_RX62Nxx_H + +#define SCI_CHANNELS 7 + +/* Globals */ +extern volatile const uint8_t * rpdl_SCI_tx_string_pointer[SCI_CHANNELS]; +extern volatile uint8_t * rpdl_SCI_rx_string_pointer[SCI_CHANNELS]; +extern volatile uint8_t * rpdl_SCI_rx_string_start[SCI_CHANNELS]; +extern volatile uint16_t rpdl_SCI_rx_counter[SCI_CHANNELS]; +extern volatile uint16_t rpdl_SCI_tx_counter[SCI_CHANNELS]; +extern volatile uint16_t rpdl_SCI_rx_threshold[SCI_CHANNELS]; +extern volatile uint16_t rpdl_SCI_tx_threshold[SCI_CHANNELS]; +extern volatile uint8_t rpdl_SCI_tx_using_irq[SCI_CHANNELS]; +extern volatile uint8_t rpdl_SCI_rx_using_irq[SCI_CHANNELS]; +extern volatile uint8_t rpdl_SCI_sync_simultaneous[SCI_CHANNELS]; +extern volatile uint8_t rpdl_SCI_MP_mode[SCI_CHANNELS]; +extern volatile uint8_t rpdl_SCI_MP_rx_stationID[SCI_CHANNELS]; + +/* Callback function prototypes */ +extern VoidCallBackFunc rpdl_SCI_TX_End_callback_func[SCI_CHANNELS]; +extern VoidCallBackFunc rpdl_SCI_RX_End_callback_func[SCI_CHANNELS]; +extern VoidCallBackFunc rpdl_SCI_RX_Error_callback_func[SCI_CHANNELS]; + +/* Library prototypes */ +bool R_SCI_SetAll( + const uint8_t +); +bool R_SCI_CreateAll( + const uint8_t, + const uint32_t, + const uint32_t, + const uint8_t +); +bool R_SCI_CreateAsyncAll( + const uint8_t, + const uint32_t, + const uint32_t, + const uint8_t +); +bool R_SCI_CreateSyncAll( + const uint8_t, + const uint32_t, + const uint32_t, + const uint8_t +); +bool R_SCI_CreateSmartAll( + const uint8_t, + const uint32_t, + const uint32_t, + const uint8_t +); +bool R_SCI_DestroyAll( + const uint8_t +); +bool R_SCI_SendAll( + const uint8_t, + const uint16_t, + volatile const uint8_t * const, + const uint16_t, + VoidCallBackFunc const +); +bool R_SCI_SendStationID( + const uint8_t, + const uint16_t +); +bool R_SCI_SendData( + const uint8_t, + const uint16_t, + volatile const uint8_t * const, + const uint16_t, + VoidCallBackFunc const +); +bool R_SCI_ReceiveAll( + const uint8_t, + const uint16_t, + volatile uint8_t * const, + const uint16_t, + VoidCallBackFunc const, + VoidCallBackFunc const +); +bool R_SCI_ReceiveStationID( + const uint8_t, + const uint16_t, + VoidCallBackFunc const, + VoidCallBackFunc const +); +bool R_SCI_ReceiveData( + const uint8_t, + const uint16_t, + volatile uint8_t * const, + const uint16_t, + VoidCallBackFunc const, + VoidCallBackFunc const +); +bool R_SCI_ControlAll( + const uint8_t, + const uint8_t +); +bool R_SCI_GetStatusAll( + const uint8_t, + volatile uint8_t * const, + volatile uint8_t * const, + volatile uint16_t * const, + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ +#define R_SCI_Set(a) \ +( R_SCI_SetAll( (a) ) ) + +#define R_SCI_Create(a, b, c, d) \ +( \ +( ((a) >= SCI_CHANNELS) || ((a) == 4) || ((c) == 0) || ((d) > IPL_MAX) )? \ +ReturnFalse(): \ +R_SCI_CreateAll( (a), (b), (c), (d) )\ +) + +#define R_SCI_Destroy(a) \ +( \ +(((a) < SCI_CHANNELS) && ((a) != 4)) ? \ +R_SCI_DestroyAll( (a) ): \ +ReturnFalse() \ +) + +#define R_SCI_Send(a, b, c, d, e) \ +( \ +(((a) < SCI_CHANNELS) && ((a) != 4)) ? \ +R_SCI_SendAll( (a), (b), (c), (d), (e) ): \ +ReturnFalse() \ +) + +#define R_SCI_Receive(a, b, c, d, e, f) \ +( \ +(((a) < SCI_CHANNELS) && ((a) != 4)) ? \ +R_SCI_ReceiveAll( (a), (b), (c), (d), (e), (f) ): \ +ReturnFalse() \ +) + +#define R_SCI_Control(a, b) \ +( \ +(((a) < SCI_CHANNELS) && ((a) != 4)) ? \ +R_SCI_ControlAll( (a), (b) ): \ +ReturnFalse() \ +) + +#define R_SCI_GetStatus(a, b, c, d, e) \ +( \ +(((a) < SCI_CHANNELS) && ((a) != 4)) ? \ +R_SCI_GetStatusAll( (a), (b), (c), (d), (e) ): \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_spi.h b/bsp/rx/RPDL/r_pdl_spi.h new file mode 100644 index 0000000000..cd3a551482 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_spi.h @@ -0,0 +1,222 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Serial Peripheral Interface API for RX62Nxx +* File Name : r_pdl_spi.h +* Version : 1.02 +* Contents : SPI API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_SPI_H +#define R_PDL_SPI_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_SPI_Create( + uint8_t, + uint32_t, + uint32_t, + uint32_t, + uint32_t +); +bool R_SPI_Destroy( + uint8_t +); +bool R_SPI_Command( + uint8_t, + uint8_t, + uint32_t, + uint8_t +); +bool R_SPI_Transfer( + uint8_t, + uint8_t, + uint32_t *, + uint32_t *, + uint16_t, + void *, + uint8_t +); +bool R_SPI_Control( + uint8_t, + uint8_t, + uint32_t +); +bool R_SPI_GetStatus( + uint8_t, + uint16_t *, + uint16_t * +); + +/* Connection mode */ +#define PDL_SPI_MODE_SPI_MASTER 0x00000001ul +#define PDL_SPI_MODE_SPI_MULTI_MASTER 0x00000002ul +#define PDL_SPI_MODE_SPI_SLAVE 0x00000004ul +#define PDL_SCI_MODE_SYNC_MASTER 0x00000008ul +#define PDL_SCI_MODE_SYNC_SLAVE 0x00000010ul + +/* Reception control */ +#define PDL_SPI_FULL_DUPLEX 0x00000020ul +#define PDL_SPI_TRANSMIT_ONLY 0x00000040ul + +/* Pin selection and control */ +#define PDL_SPI_PIN_CMOS 0x00000080ul +#define PDL_SPI_PIN_OPEN_DRAIN 0x00000100ul +#define PDL_SPI_PIN_A 0x00000200ul +#define PDL_SPI_PIN_B 0x00000400ul +#define PDL_SPI_PIN_RSPCK_ENABLE 0x00000800ul +#define PDL_SPI_PIN_RSPCK_DISABLE 0x00001000ul +#define PDL_SPI_PIN_MOSI_ENABLE 0x00002000ul +#define PDL_SPI_PIN_MOSI_DISABLE 0x00004000ul +#define PDL_SPI_PIN_MISO_ENABLE 0x00008000ul +#define PDL_SPI_PIN_MISO_DISABLE 0x00010000ul +#define PDL_SPI_PIN_SSL0_LOW 0x00020000ul +#define PDL_SPI_PIN_SSL0_HIGH 0x00040000ul +#define PDL_SPI_PIN_SSL0_DISABLE 0x00080000ul +#define PDL_SPI_PIN_SSL1_LOW 0x00100000ul +#define PDL_SPI_PIN_SSL1_HIGH 0x00200000ul +#define PDL_SPI_PIN_SSL1_DISABLE 0x00400000ul +#define PDL_SPI_PIN_SSL2_LOW 0x00800000ul +#define PDL_SPI_PIN_SSL2_HIGH 0x01000000ul +#define PDL_SPI_PIN_SSL2_DISABLE 0x02000000ul +#define PDL_SPI_PIN_SSL3_LOW 0x04000000ul +#define PDL_SPI_PIN_SSL3_HIGH 0x08000000ul +#define PDL_SPI_PIN_SSL3_DISABLE 0x10000000ul +#define PDL_SPI_PIN_MOSI_IDLE_LAST 0x20000000ul +#define PDL_SPI_PIN_MOSI_IDLE_LOW 0x40000000ul +#define PDL_SPI_PIN_MOSI_IDLE_HIGH 0x80000000ul + +/* Buffer size */ +#define PDL_SPI_BUFFER_64 0x00000001ul +#define PDL_SPI_BUFFER_128 0x00000002ul + +/* Frame configuration selection */ +#define PDL_SPI_FRAME_1_1 0x00000004ul +#define PDL_SPI_FRAME_1_2 0x00000008ul +#define PDL_SPI_FRAME_1_3 0x00000010ul +#define PDL_SPI_FRAME_1_4 0x00000020ul +#define PDL_SPI_FRAME_2_1 0x00000040ul +#define PDL_SPI_FRAME_2_2 0x00000080ul +#define PDL_SPI_FRAME_3 0x00000100ul +#define PDL_SPI_FRAME_4 0x00000200ul +#define PDL_SPI_FRAME_5 0x00000400ul +#define PDL_SPI_FRAME_6 0x00000800ul +#define PDL_SPI_FRAME_7 0x00001000ul +#define PDL_SPI_FRAME_8 0x00002000ul + +/* Parity bit control */ +#define PDL_SPI_PARITY_NONE 0x00004000ul +#define PDL_SPI_PARITY_EVEN 0x00008000ul +#define PDL_SPI_PARITY_ODD 0x00010000ul + +/* Extended clock delay */ +#define PDL_SPI_CLOCK_DELAY_1 0x00000001ul +#define PDL_SPI_CLOCK_DELAY_2 0x00000002ul +#define PDL_SPI_CLOCK_DELAY_3 0x00000004ul +#define PDL_SPI_CLOCK_DELAY_4 0x00000008ul +#define PDL_SPI_CLOCK_DELAY_5 0x00000010ul +#define PDL_SPI_CLOCK_DELAY_6 0x00000020ul +#define PDL_SPI_CLOCK_DELAY_7 0x00000040ul +#define PDL_SPI_CLOCK_DELAY_8 0x00000080ul + +/* Extended SSL negation delay */ +#define PDL_SPI_SSL_DELAY_1 0x00000100ul +#define PDL_SPI_SSL_DELAY_2 0x00000200ul +#define PDL_SPI_SSL_DELAY_3 0x00000400ul +#define PDL_SPI_SSL_DELAY_4 0x00000800ul +#define PDL_SPI_SSL_DELAY_5 0x00001000ul +#define PDL_SPI_SSL_DELAY_6 0x00002000ul +#define PDL_SPI_SSL_DELAY_7 0x00004000ul +#define PDL_SPI_SSL_DELAY_8 0x00008000ul + +/* Extended next-access delay */ +#define PDL_SPI_NEXT_DELAY_1 0x00010000ul +#define PDL_SPI_NEXT_DELAY_2 0x00020000ul +#define PDL_SPI_NEXT_DELAY_3 0x00040000ul +#define PDL_SPI_NEXT_DELAY_4 0x00080000ul +#define PDL_SPI_NEXT_DELAY_5 0x00100000ul +#define PDL_SPI_NEXT_DELAY_6 0x00200000ul +#define PDL_SPI_NEXT_DELAY_7 0x00400000ul +#define PDL_SPI_NEXT_DELAY_8 0x00800000ul + +/* Channel control */ +#define PDL_SPI_DISABLE 0x01u + +/* Loopback control */ +#define PDL_SPI_LOOPBACK_DISABLE 0x02u +#define PDL_SPI_LOOPBACK_DIRECT 0x04u +#define PDL_SPI_LOOPBACK_REVERSED 0x08u + +/* Clock phase and polarity */ +#define PDL_SPI_CLOCK_MODE_0 0x00000001ul +#define PDL_SPI_CLOCK_MODE_1 0x00000002ul +#define PDL_SPI_CLOCK_MODE_2 0x00000004ul +#define PDL_SPI_CLOCK_MODE_3 0x00000008ul + +/* Clock division */ +#define PDL_SPI_DIV_1 0x00000010ul +#define PDL_SPI_DIV_2 0x00000020ul +#define PDL_SPI_DIV_4 0x00000040ul +#define PDL_SPI_DIV_8 0x00000080ul + +/* SSL assertion */ +#define PDL_SPI_ASSERT_SSL0 0x00000100ul +#define PDL_SPI_ASSERT_SSL1 0x00000200ul +#define PDL_SPI_ASSERT_SSL2 0x00000400ul +#define PDL_SPI_ASSERT_SSL3 0x00000800ul + +/* SSL negation */ +#define PDL_SPI_SSL_NEGATE 0x00001000ul +#define PDL_SPI_SSL_KEEP 0x00002000ul + +/* Frame data length */ +#define PDL_SPI_LENGTH_8 0x00004000ul +#define PDL_SPI_LENGTH_9 0x00008000ul +#define PDL_SPI_LENGTH_10 0x00010000ul +#define PDL_SPI_LENGTH_11 0x00020000ul +#define PDL_SPI_LENGTH_12 0x00040000ul +#define PDL_SPI_LENGTH_13 0x00080000ul +#define PDL_SPI_LENGTH_14 0x00100000ul +#define PDL_SPI_LENGTH_15 0x00200000ul +#define PDL_SPI_LENGTH_16 0x00400000ul +#define PDL_SPI_LENGTH_20 0x00800000ul +#define PDL_SPI_LENGTH_24 0x01000000ul +#define PDL_SPI_LENGTH_32 0x02000000ul + +/* Data transfer format */ +#define PDL_SPI_MSB_FIRST 0x04000000ul +#define PDL_SPI_LSB_FIRST 0x08000000ul + +/* Extended timing selection */ +#define PDL_SPI_CLOCK_DELAY_MINIMUM 0x01u +#define PDL_SPI_CLOCK_DELAY_EXTENDED 0x02u + +/* Extended timing selection */ +#define PDL_SPI_SSL_DELAY_MINIMUM 0x04u +#define PDL_SPI_SSL_DELAY_EXTENDED 0x08u + +/* Next-access delay */ +#define PDL_SPI_NEXT_DELAY_MINIMUM 0x10u +#define PDL_SPI_NEXT_DELAY_EXTENDED 0x20u + +/* DMAC / DTC trigger control */ +#define PDL_SPI_DMAC_DTC_TRIGGER_DISABLE 0x01u +#define PDL_SPI_DMAC_TRIGGER_ENABLE 0x02u +#define PDL_SPI_DTC_TRIGGER_ENABLE 0x04u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_spi_rx62nxx.h b/bsp/rx/RPDL/r_pdl_spi_rx62nxx.h new file mode 100644 index 0000000000..a64a6e3333 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_spi_rx62nxx.h @@ -0,0 +1,131 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Serial Peripheral Interface API for RX62Nxx +* File Name : r_pdl_spi_RX62Nxx.h +* Version : 1.02 +* Contents : SPI API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_SPI_RX62Nxx_H +#define R_PDL_SPI_RX62Nxx_H + +#define SPI_CHANNELS 2 +#define SPI_COMMANDS 8 + +/* Globals */ +extern volatile uint8_t rpdl_SPI_method[SPI_CHANNELS]; +extern volatile uint16_t rpdl_SPI_sequence_count[SPI_CHANNELS]; +extern volatile uint16_t rpdl_SPI_tx_sequence_counter[SPI_CHANNELS]; +extern volatile uint16_t rpdl_SPI_rx_sequence_counter[SPI_CHANNELS]; +extern volatile uint8_t rpdl_SPI_tx_frame_counter[SPI_CHANNELS]; +extern volatile uint8_t rpdl_SPI_frame_total[SPI_CHANNELS]; +extern volatile uint8_t rpdl_SPI_rx_frame_counter[SPI_CHANNELS]; +extern volatile const uint32_t * rpdl_SPI_tx_ptr[SPI_CHANNELS]; +extern volatile uint32_t * rpdl_SPI_rx_ptr[SPI_CHANNELS]; + +/* Callback function prototypes */ +extern VoidCallBackFunc rpdl_SPI_callback_func[SPI_CHANNELS]; + +/* Request trigger options */ +typedef enum { + SPI_USING_POLLING, + SPI_USING_IRQ, + SPI_USING_DMAC_DTC +} rpdl_spi_transfer_options; + +bool R_SPI_CreateAll( + const uint8_t, + const uint32_t, + const uint32_t, + const uint32_t, + const uint32_t +); +bool R_SPI_DestroyAll( + const uint8_t +); +bool R_SPI_CommandAll( + const uint8_t, + const uint8_t, + const uint32_t, + const uint8_t +); +bool R_SPI_TransferAll( + const uint8_t, + const uint8_t, + volatile const uint32_t * const, + volatile uint32_t * const, + const uint16_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_SPI_ControlAll( + const uint8_t, + const uint8_t, + const uint32_t +); +bool R_SPI_GetStatusAll( + const uint8_t, + volatile uint16_t * const, + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ +#define R_SPI_Create(a, b, c, d, e) \ +( \ +( (a) < SPI_CHANNELS) ? \ +R_SPI_CreateAll( (a), (b), (c), (d), (e) ): \ +ReturnFalse() \ +) + +#define R_SPI_Destroy(a) \ +( \ +( (a) < SPI_CHANNELS) ? \ +R_SPI_DestroyAll( (a) ): \ +ReturnFalse() \ +) + +#define R_SPI_Command(a, b, c, d) \ +( \ +( ( ((a) < SPI_CHANNELS) && ((b) < SPI_COMMANDS) ) ) ? \ +R_SPI_CommandAll( (a), (b), (c), (d) ): \ +ReturnFalse() \ +) + +#define R_SPI_Transfer(a, b, c, d, e, f, g) \ +( \ +( ( ((a) < SPI_CHANNELS) && ((g) <= IPL_MAX) ) ) ? \ +R_SPI_TransferAll( (a), (b), (c), (d), (e), (f), (g) ): \ +ReturnFalse() \ +) + +#define R_SPI_Control(a, b, c) \ +( \ +( (a) < SPI_CHANNELS) ? \ +R_SPI_ControlAll( (a), (b), (c) ): \ +ReturnFalse() \ +) + +#define R_SPI_GetStatus(a, b, c) \ +( \ +( (a) < SPI_CHANNELS) ? \ +R_SPI_GetStatusAll( (a), (b), (c) ): \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_tmr.h b/bsp/rx/RPDL/r_pdl_tmr.h new file mode 100644 index 0000000000..0c903b9817 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_tmr.h @@ -0,0 +1,211 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Timer TMR API for RX62Nxx +* File Name : r_pdl_tmr.h +* Version : 1.02 +* Contents : Timer TMR API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_TMR_H +#define R_PDL_TMR_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_TMR_Set( + uint8_t +); +bool R_TMR_CreateChannel( + uint8_t, + uint32_t, + uint8_t, + uint8_t, + uint8_t, + uint8_t, + void *, + void *, + void *, + uint8_t +); +bool R_TMR_CreateUnit( + uint8_t, + uint32_t, + uint8_t, + uint16_t, + uint16_t, + uint16_t, + void *, + void *, + void *, + uint8_t +); +bool R_TMR_CreatePeriodic( + uint8_t, + uint32_t, + float, + float, + void *, + void *, + uint8_t +); +bool R_TMR_CreateOneShot( + uint8_t, + uint32_t, + float, + void *, + uint8_t +); +bool R_TMR_Destroy( + uint8_t +); +bool R_TMR_ControlChannel( + uint8_t, + uint32_t, + uint8_t, + uint8_t, + uint8_t +); +bool R_TMR_ControlUnit( + uint8_t, + uint32_t, + uint16_t, + uint16_t, + uint16_t +); +bool R_TMR_ControlPeriodic( + uint8_t, + uint32_t, + float, + float +); +bool R_TMR_ReadChannel( + uint8_t, + uint8_t *, + uint8_t *, + uint8_t *, + uint8_t * +); +bool R_TMR_ReadUnit( + uint8_t, + uint8_t *, + uint16_t *, + uint16_t *, + uint16_t * +); + +/* Pin selection */ +#define PDL_TMR_PIN_TMR0_A 0x01u +#define PDL_TMR_PIN_TMR0_B 0x02u +#define PDL_TMR_PIN_TMR1_A 0x04u +#define PDL_TMR_PIN_TMR1_B 0x08u +#define PDL_TMR_PIN_TMR2_A 0x10u +#define PDL_TMR_PIN_TMR2_B 0x20u +#define PDL_TMR_PIN_TMR3_A 0x40u +#define PDL_TMR_PIN_TMR3_B 0x80u + +/* Counter clock sources */ +#define PDL_TMR_CLK_OFF 0x00000001ul +#define PDL_TMR_CLK_EXT_RISING 0x00000002ul +#define PDL_TMR_CLK_EXT_FALLING 0x00000004ul +#define PDL_TMR_CLK_EXT_BOTH 0x00000008ul +#define PDL_TMR_CLK_PCLK_DIV_1 0x00000010ul +#define PDL_TMR_CLK_PCLK_DIV_2 0x00000020ul +#define PDL_TMR_CLK_PCLK_DIV_8 0x00000040ul +#define PDL_TMR_CLK_PCLK_DIV_32 0x00000080ul +#define PDL_TMR_CLK_PCLK_DIV_64 0x00000100ul +#define PDL_TMR_CLK_PCLK_DIV_1024 0x00000200ul +#define PDL_TMR_CLK_PCLK_DIV_8192 0x00000400ul +#define PDL_TMR_CLK_TMR1_OVERFLOW 0x00000800ul +#define PDL_TMR_CLK_TMR3_OVERFLOW 0x00001000ul +#define PDL_TMR_CLK_TMR0_CM_A 0x00002000ul +#define PDL_TMR_CLK_TMR2_CM_A 0x00004000ul + +/* A/D trigger control */ +#define PDL_TMR_ADC_TRIGGER_DISABLE 0x00008000ul +#define PDL_TMR_ADC_TRIGGER_ENABLE 0x00010000ul + +/* Counter clearing options */ +#define PDL_TMR_CLEAR_DISABLE 0x00020000ul +#define PDL_TMR_CLEAR_CM_A 0x00040000ul +#define PDL_TMR_CLEAR_CM_B 0x00080000ul +#define PDL_TMR_CLEAR_RESET_RISING 0x00100000ul +#define PDL_TMR_CLEAR_RESET_HIGH 0x00200000ul + +/* DTC CMA trigger control */ +#define PDL_TMR_CM_A_DTC_TRIGGER_DISABLE 0x00400000ul +#define PDL_TMR_CM_A_DTC_TRIGGER_ENABLE 0x00800000ul + +/* DTC CMB trigger control */ +#define PDL_TMR_CM_B_DTC_TRIGGER_DISABLE 0x01000000ul +#define PDL_TMR_CM_B_DTC_TRIGGER_ENABLE 0x02000000ul + +/* Output control options */ +#define PDL_TMR_OUTPUT_IGNORE_CM_A 0x01u +#define PDL_TMR_OUTPUT_LOW_CM_A 0x02u +#define PDL_TMR_OUTPUT_HIGH_CM_A 0x04u +#define PDL_TMR_OUTPUT_INV_CM_A 0x08u +#define PDL_TMR_OUTPUT_IGNORE_CM_B 0x10u +#define PDL_TMR_OUTPUT_LOW_CM_B 0x20u +#define PDL_TMR_OUTPUT_HIGH_CM_B 0x40u +#define PDL_TMR_OUTPUT_INV_CM_B 0x80u + +/* Channels and units */ +#define PDL_TMR_TMR0 0 +#define PDL_TMR_TMR1 1 +#define PDL_TMR_TMR2 2 +#define PDL_TMR_TMR3 3 +#define PDL_TMR_UNIT0 4 +#define PDL_TMR_UNIT1 5 + +/* Period or frequency selection */ +#define PDL_TMR_PERIOD 0x00000001ul +#define PDL_TMR_FREQUENCY 0x00000002ul + +/* Output pin control */ +#define PDL_TMR_OUTPUT_HIGH 0x00000004ul +#define PDL_TMR_OUTPUT_LOW 0x00000008ul +#define PDL_TMR_OUTPUT_OFF 0x00000010ul +#define PDL_TMR_OUTPUT_ENABLE 0x00000020ul +#define PDL_TMR_OUTPUT_DISABLE 0x00000040ul + +/* ADC trigger control */ +#define PDL_TMR_ADC_TRIGGER_ON 0x00000080ul +#define PDL_TMR_ADC_TRIGGER_OFF 0x00000100ul + +/* Pulse DTC trigger control */ +#define PDL_TMR_PULSE_DTC_TRIGGER_DISABLE 0x00000200ul +#define PDL_TMR_PULSE_DTC_TRIGGER_ENABLE 0x00000400ul + +/* Period DTC trigger control */ +#define PDL_TMR_PERIOD_DTC_TRIGGER_DISABLE 0x00000800ul +#define PDL_TMR_PERIOD_DTC_TRIGGER_ENABLE 0x00001000ul + +/* CPU control */ +#define PDL_TMR_CPU_ON 0x00002000ul +#define PDL_TMR_CPU_OFF 0x00004000ul + +/* Timer counter control */ +#define PDL_TMR_STOP 0x00008000ul +#define PDL_TMR_START 0x00010000ul + +/* Register selections */ +#define PDL_TMR_COUNTER 0x00020000ul +#define PDL_TMR_TIME_CONSTANT_A 0x00040000ul +#define PDL_TMR_TIME_CONSTANT_B 0x00080000ul + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_tmr_rx62nxx.h b/bsp/rx/RPDL/r_pdl_tmr_rx62nxx.h new file mode 100644 index 0000000000..d1e2978dce --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_tmr_rx62nxx.h @@ -0,0 +1,238 @@ +/*""FILE COMMENT""******************************************************* +* System Name : Timer TMR API for RX62Nxx +* File Name : r_pdl_tmr_RX62Nxx.h +* Version : 1.02 +* Contents : Timer TMR API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_TMR_RX62Nxx_H +#define R_PDL_TMR_RX62Nxx_H + +#define TMR_UNITS 2 +#define TMR_CHANNELS_PER_UNIT 2 +#define TMR_CHANNELS (uint8_t)(TMR_UNITS * TMR_CHANNELS_PER_UNIT) + +/* One-shot modes */ +#define CHANNEL_MODE 0x01u +#define UNIT_MODE 0x02u + +/* Callback function storage */ +extern VoidCallBackFunc rpdl_TMR_Overflow_callback_func[TMR_CHANNELS]; +extern VoidCallBackFunc rpdl_TMR_CMA_callback_func[TMR_CHANNELS]; +extern VoidCallBackFunc rpdl_TMR_CMB_callback_func[TMR_CHANNELS]; + +/* Global variables */ +extern volatile uint8_t rpdl_TMR_tcsr_setting[TMR_CHANNELS]; +extern volatile uint8_t rpdl_TMR_tccr8_setting[TMR_CHANNELS]; +extern volatile uint16_t rpdl_TMR_tccr16_setting[TMR_UNITS]; +extern volatile uint8_t rpdl_TMR_one_shot[TMR_CHANNELS]; + +/* Library prototypes */ +bool R_TMR_SetAll( + const uint8_t +); +bool R_TMR_CreateChannelAll( + const uint8_t, + const uint32_t, + const uint8_t, + const uint8_t, + const uint8_t, + const uint8_t, + VoidCallBackFunc const, + VoidCallBackFunc const, + VoidCallBackFunc const, + const uint8_t +); +bool R_TMR_CreateUnitAll( + const uint8_t, + const uint32_t, + const uint8_t, + const uint16_t, + const uint16_t, + const uint16_t, + VoidCallBackFunc const, + VoidCallBackFunc const, + VoidCallBackFunc const, + const uint8_t +); +bool R_TMR_CreatePeriodicChannelAll( + const uint8_t, + const uint32_t, + const float, + const float, + VoidCallBackFunc const, + VoidCallBackFunc const, + const uint8_t +); +bool R_TMR_CreatePeriodicUnitAll( + const uint8_t, + const uint32_t, + const float, + const float, + VoidCallBackFunc const, + VoidCallBackFunc const, + const uint8_t +); +bool R_TMR_CreateOneShotChannelAll( + const uint8_t, + const uint32_t, + const float, + VoidCallBackFunc const, + const uint8_t +); +bool R_TMR_CreateOneShotUnitAll( + const uint8_t, + const uint32_t, + const float, + VoidCallBackFunc const, + const uint8_t +); +bool R_TMR_DestroyAll( + const uint8_t +); +bool R_TMR_ControlChannelAll( + const uint8_t, + const uint32_t, + const uint8_t, + const uint8_t, + const uint8_t +); +bool R_TMR_ControlUnitAll( + const uint8_t, + const uint32_t, + const uint16_t, + const uint16_t, + const uint16_t +); +bool R_TMR_ControlPeriodicChannelAll( + const uint8_t, + const uint32_t, + const float, + const float +); +bool R_TMR_ControlPeriodicUnitAll( + const uint8_t, + const uint32_t, + const float, + const float +); +bool R_TMR_ReadChannelAll( + const uint8_t, + volatile uint8_t * const, + volatile uint8_t * const, + volatile uint8_t * const, + volatile uint8_t * const +); +bool R_TMR_ReadUnitAll( + const uint8_t, + volatile uint8_t * const, + volatile uint16_t * const, + volatile uint16_t * const, + volatile uint16_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#if defined (DEVICE_PACKAGE_LFBGA_176) || defined (DEVICE_PACKAGE_TFLGA_145) || \ + defined (DEVICE_PACKAGE_LQFP_144) +#define R_TMR_Set(a) \ +( R_TMR_SetAll( (a) ) ) +#else +#define R_TMR_Set(a) \ +( ReturnFalse() ) +#endif + +#define R_TMR_CreateChannel(a, b, c, d, e, f, g, h, i, j) \ +( \ +( ((a) < TMR_CHANNELS) && ((j) <= IPL_MAX) ) ? \ +R_TMR_CreateChannelAll( (a), (b), (c), (d), (e), (f), (g), (h), (i), (j) ) : \ +ReturnFalse() \ +) + +#define R_TMR_CreateUnit(a, b, c, d, e, f, g, h, i, j) \ +( \ +( ((a) < TMR_UNITS) && ((j) <= IPL_MAX) ) ? \ +R_TMR_CreateUnitAll( (a), (b), (c), (d), (e), (f), (g), (h), (i), (j) ): \ +ReturnFalse() \ +) + +#define R_TMR_CreatePeriodic(a, b, c, d, e, f, g) \ +( \ +( ((a) > PDL_TMR_UNIT1) || ((g) > IPL_MAX) ) ? \ +ReturnFalse() : \ +( (a) <= PDL_TMR_TMR3) ? \ +R_TMR_CreatePeriodicChannelAll( (a), (b), (c), (d), (e), (f), (g) ) : \ +R_TMR_CreatePeriodicUnitAll( (a - PDL_TMR_UNIT0), (b), (c), (d), (e), (f), (g) ) \ +) + +#define R_TMR_CreateOneShot(a, b, c, d, e) \ +( \ +( ((a) > PDL_TMR_UNIT1) || ((e) > IPL_MAX) ) ? \ +ReturnFalse() : \ +( (a) <= PDL_TMR_TMR3 ) ? \ +R_TMR_CreateOneShotChannelAll( (a), (b), (c), (d), (e) ) : \ +R_TMR_CreateOneShotUnitAll( (a - PDL_TMR_UNIT0), (b), (c), (d), (e) ) \ +) + +#define R_TMR_Destroy(a) \ +( \ +( (a) < TMR_UNITS ) ? \ +R_TMR_DestroyAll( (a) ) : \ +ReturnFalse() \ +) + +#define R_TMR_ControlChannel(a, b, c, d, e) \ +( \ +( (a) < TMR_CHANNELS ) ? \ +R_TMR_ControlChannelAll( (a), (b), (c), (d), (e) ) : \ +ReturnFalse() \ +) + +#define R_TMR_ControlUnit(a, b, c, d, e) \ +( \ +( (a) < TMR_UNITS ) ? \ +R_TMR_ControlUnitAll( (a), (b), (c), (d), (e) ): \ +ReturnFalse() \ +) + +#define R_TMR_ControlPeriodic(a, b, c, d) \ +( \ +( (a) > PDL_TMR_UNIT1 ) ? \ +ReturnFalse() : \ +( (a) <= PDL_TMR_TMR3 ) ? \ +R_TMR_ControlPeriodicChannelAll( (a), (b), (float)(c), (float)(d) ) : \ +R_TMR_ControlPeriodicUnitAll( (a - PDL_TMR_UNIT0), (b), (float)(c), (float)(d) ) \ +) + +#define R_TMR_ReadChannel(a, b, c, d, e) \ +( \ +( (a) < TMR_CHANNELS ) ? \ +R_TMR_ReadChannelAll( (a), (b), (c), (d), (uint8_t *)(e) ) : \ +ReturnFalse() \ +) + +#define R_TMR_ReadUnit(a, b, c, d, e) \ +( \ +( (a) < TMR_UNITS ) ? \ +R_TMR_ReadUnitAll( (a), (b), (c), (d), (e) ) : \ +ReturnFalse() \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_user_definitions.h b/bsp/rx/RPDL/r_pdl_user_definitions.h new file mode 100644 index 0000000000..b207b498b0 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_user_definitions.h @@ -0,0 +1,14 @@ +/*""FILE COMMENT""******************************************************* +* System Name : RPDL driver API +* File Name : r_pdl_user_definitions.h +* Contents : User-modifiable definitions +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_USER_DEFS_H +#define R_PDL_USER_DEFS_H + +/* The vector number to be used with fast interrupt processing */ +#define FAST_INTC_VECTOR 0 + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_wdt.h b/bsp/rx/RPDL/r_pdl_wdt.h new file mode 100644 index 0000000000..fcaeecbe2f --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_wdt.h @@ -0,0 +1,60 @@ +/*""FILE COMMENT""******************************************************* +* System Name : WDT API for RX62Nxx +* File Name : r_pdl_wdt.h +* Version : 1.02 +* Contents : WDT API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_WDT_H +#define R_PDL_WDT_H + +#include "r_pdl_common_defs_RX62Nxx.h" + +/* Function prototypes */ +bool R_WDT_Create( + uint16_t, + void *, + uint8_t +); +bool R_WDT_Control( + uint8_t +); +bool R_WDT_Read( + uint8_t * +); + +/* Calculation selection */ +#define PDL_WDT_PCLK_DIV_4 0x0001u +#define PDL_WDT_PCLK_DIV_64 0x0002u +#define PDL_WDT_PCLK_DIV_128 0x0004u +#define PDL_WDT_PCLK_DIV_512 0x0008u +#define PDL_WDT_PCLK_DIV_2048 0x0010u +#define PDL_WDT_PCLK_DIV_8192 0x0020u +#define PDL_WDT_PCLK_DIV_32768 0x0040u +#define PDL_WDT_PCLK_DIV_131072 0x0080u + +/* MCU reset control */ +#define PDL_WDT_RESET_DISABLE 0x0100u +#define PDL_WDT_RESET_ENABLE 0x0200u + +/* Timer counter control */ +#define PDL_WDT_STOP 0x01u +#define PDL_WDT_RESET_COUNTER 0x02u + +#endif +/* End of file */ diff --git a/bsp/rx/RPDL/r_pdl_wdt_rx62nxx.h b/bsp/rx/RPDL/r_pdl_wdt_rx62nxx.h new file mode 100644 index 0000000000..7d646d5ed3 --- /dev/null +++ b/bsp/rx/RPDL/r_pdl_wdt_rx62nxx.h @@ -0,0 +1,63 @@ +/*""FILE COMMENT""******************************************************* +* System Name : WDT API for RX62Nxx +* File Name : r_pdl_wdt_RX62Nxx.h +* Version : 1.02 +* Contents : WDT API header +* Customer : +* Model : +* Order : +* CPU : RX +* Compiler : RXC +* OS : Nothing +* Programmer : +* Note : +************************************************************************ +* Copyright, 2011. Renesas Electronics Corporation +* and Renesas Solutions Corporation +************************************************************************ +* History : 2011.04.08 +* : Ver 1.02 +* : CS-5 release. +*""FILE COMMENT END""**************************************************/ + +#ifndef R_PDL_WDT_RX62Nxx_H +#define R_PDL_WDT_RX62Nxx_H + +/* Callback function storage */ +extern VoidCallBackFunc rpdl_WDT_callback_func; + +/* Library prototypes */ +bool R_WDT_CreateAll( + const uint16_t, + VoidCallBackFunc const, + const uint8_t +); +bool R_WDT_ControlAll( + const uint8_t +); +bool R_WDT_ReadAll( + volatile uint8_t * const +); +bool ReturnFalse(void); + +/* Macro definitions */ + +#define R_WDT_Create(a, b, c) \ +( \ +( (c) <= IPL_MAX) ? \ +R_WDT_CreateAll( (a), (b), (c) ) : \ +ReturnFalse() \ +) + +#define R_WDT_Control(a) \ +( \ +R_WDT_ControlAll( (a) ) \ +) + +#define R_WDT_Read(a) \ +( \ +R_WDT_ReadAll( (a) ) \ +) + +#endif +/* End of file */ diff --git a/bsp/rx/ReadMe.txt b/bsp/rx/ReadMe.txt new file mode 100644 index 0000000000..956e2e00a1 --- /dev/null +++ b/bsp/rx/ReadMe.txt @@ -0,0 +1,5 @@ +board:Renesas YRDKRX62N +chip: R5F562N8BDFP RX62N8 +Tool: IAR Embedded Workbench for Renesas RX 2.60.5 + IAR Embedded Workbench common components 7.0.6.3257 + (30-day limited) diff --git a/bsp/rx/applications/SConscript b/bsp/rx/applications/SConscript new file mode 100644 index 0000000000..01eb940dfb --- /dev/null +++ b/bsp/rx/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = os.path.join(str(Dir('#')), 'applications') +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/rx/applications/application.c b/bsp/rx/applications/application.c new file mode 100644 index 0000000000..92ecaad723 --- /dev/null +++ b/bsp/rx/applications/application.c @@ -0,0 +1,250 @@ +/* + * File : application.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2009-01-05 Bernard the first version + * 2013-07-12 aozima update for auto initial. + */ + +/** + * @addtogroup STM32 + */ +/*@{*/ + +#include +#include + +#ifdef RT_USING_COMPONENTS_INIT +#include +#endif /* RT_USING_COMPONENTS_INIT */ + +#ifdef RT_USING_DFS +/* dfs filesystem:ELM filesystem init */ +#include +/* dfs Filesystem APIs */ +#include +#endif + +#ifdef RT_USING_RTGUI +#include +#include +#include +#include +#include +#endif + + +#ifdef RT_USING_RTGUI +rt_bool_t cali_setup(void) +{ + rt_kprintf("cali setup entered\n"); + return RT_FALSE; +} + +void cali_store(struct calibration_data *data) +{ + rt_kprintf("cali finished (%d, %d), (%d, %d)\n", + data->min_x, + data->max_x, + data->min_y, + data->max_y); +} +#endif /* RT_USING_RTGUI */ + +void rt_init_thread_entry(void* parameter) +{ + + #ifdef RT_USING_MODULE + rt_system_module_init(); +#endif + +#ifdef RT_USING_FINSH + /* initialize finsh */ + finsh_system_init(); + finsh_set_device(RT_CONSOLE_DEVICE_NAME); +#endif + +#ifdef RT_USING_LWIP + /* initialize lwip stack */ + /* register ethernetif device */ + eth_system_device_init(); + + /* initialize lwip system */ + lwip_system_init(); + rt_kprintf("TCP/IP initialized!\n"); +#endif + +#ifdef RT_USING_DFS + /* initialize the device file system */ + dfs_init(); + +#ifdef RT_USING_DFS_ELMFAT + /* initialize the elm chan FatFS file system*/ + elm_init(); +#endif + +#if defined(RT_USING_DFS_NFS) && defined(RT_USING_LWIP) + /* initialize NFSv3 client file system */ + nfs_init(); +#endif + +#ifdef RT_USING_DFS_YAFFS2 + dfs_yaffs2_init(); +#endif + +#ifdef RT_USING_DFS_UFFS + dfs_uffs_init(); +#endif + +#ifdef RT_USING_DFS_JFFS2 + dfs_jffs2_init(); +#endif + +#ifdef RT_USING_DFS_ROMFS + dfs_romfs_init(); +#endif + +#ifdef RT_USING_DFS_RAMFS + dfs_ramfs_init(); +#endif + +#ifdef RT_USING_DFS_DEVFS + devfs_init(); +#endif +#endif /* end of RT_USING_DFS */ + +#ifdef RT_USING_NEWLIB + libc_system_init(RT_CONSOLE_DEVICE_NAME); +#else + /* the pthread system initialization will be initiallized in libc */ +#ifdef RT_USING_PTHREADS + pthread_system_init(); +#endif +#endif + +#ifdef RT_USING_RTGUI + rtgui_system_server_init(); +#endif + +#ifdef RT_USING_USB_HOST + rt_usb_host_init(); +#endif + +#ifdef RT_USING_FINSH + finsh_set_device(RT_CONSOLE_DEVICE_NAME); +#endif /* RT_USING_FINSH */ + + /* Filesystem Initialization */ +#if defined(RT_USING_DFS) && defined(RT_USING_DFS_ELMFAT) + /* mount sd card fat partition 1 as root directory */ + if (dfs_mount("sd0", "/", "elm", 0, 0) == 0) + { + rt_kprintf("File System initialized!\n"); + } + else + rt_kprintf("File System initialzation failed!\n"); +#endif /* RT_USING_DFS */ + +#ifdef RT_USING_RTGUI + { + extern void rt_hw_lcd_init(); + extern void rtgui_touch_hw_init(void); + + rt_device_t lcd; + + /* init lcd */ + rt_hw_lcd_init(); + + /* init touch panel */ + rtgui_touch_hw_init(); + + /* find lcd device */ + lcd = rt_device_find("lcd"); + + /* set lcd device as rtgui graphic driver */ + rtgui_graphic_set_device(lcd); + +#ifndef RT_USING_COMPONENTS_INIT + /* init rtgui system server */ + rtgui_system_server_init(); +#endif + + calibration_set_restore(cali_setup); + calibration_set_after(cali_store); + calibration_init(); + } +#endif /* #ifdef RT_USING_RTGUI */ +} + + + +ALIGN(RT_ALIGN_SIZE) +static rt_uint8_t led_stack[ 512 ]; +static struct rt_thread led_thread; +static void led_thread_entry(void* parameter) +{ + unsigned int count=0; + +// rt_hw_led_init(); + + while (1) + { + /* led1 on */ +#ifndef RT_USING_FINSH + rt_kprintf("led on, count : %d\r\n",count); +#endif + count++; + + rt_thread_delay( RT_TICK_PER_SECOND/2 ); /* sleep 0.5 second and switch to other thread */ + + /* led1 off */ +#ifndef RT_USING_FINSH + rt_kprintf("led off\r\n"); +#endif + rt_thread_delay( RT_TICK_PER_SECOND/2 ); + } +} +int rt_application_init(void) +{ + rt_thread_t init_thread; + #if 1 + rt_err_t result; + /* init led thread */ + result = rt_thread_init(&led_thread, + "led", + led_thread_entry, + RT_NULL, + (rt_uint8_t*)&led_stack[0], + sizeof(led_stack), + 20, + 5); + if (result == RT_EOK) + { + rt_thread_startup(&led_thread); + } + + #endif +#if (RT_THREAD_PRIORITY_MAX == 32) + init_thread = rt_thread_create("init", + rt_init_thread_entry, RT_NULL, + 1024, 8, 20); +#else + init_thread = rt_thread_create("init", + rt_init_thread_entry, RT_NULL, + 2048, 80, 20); +#endif + + if (init_thread != RT_NULL) + rt_thread_startup(init_thread); + + return 0; +} + +/*@}*/ diff --git a/bsp/rx/applications/startup.c b/bsp/rx/applications/startup.c new file mode 100644 index 0000000000..4b195492f6 --- /dev/null +++ b/bsp/rx/applications/startup.c @@ -0,0 +1,104 @@ +/* + * File : startup.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006, RT-Thread Develop Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://openlab.rt-thread.com/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2006-08-31 Bernard first implementation + */ + +#include +#include + +#include "board.h" +#include "intrinsics.h" +/** + * @addtogroup rx62n + */ + +/*@{*/ + +extern int rt_application_init(void); + + +#pragma section="HEAP" + +/******************************************************************************* +* Function Name : assert_failed +* Description : Reports the name of the source file and the source line number +* where the assert error has occurred. +* Input : - file: pointer to the source file name +* - line: assert error line source number +* Output : None +* Return : None +*******************************************************************************/ +void assert_failed(unsigned char * file, unsigned long line) +{ + rt_kprintf("\n\r Wrong parameter value detected on\r\n"); + rt_kprintf(" file %s\r\n", file); + rt_kprintf(" line %d\r\n", line); + + while (1) ; +} + +/** + * This function will startup RT-Thread RTOS. + */ +void rtthread_startup(void) +{ + /* init board */ + rt_hw_board_init(); +#ifdef RT_USING_CONSOLE + /* show version */ + rt_show_version(); +#endif + +#ifdef RT_USING_HEAP + + rt_system_heap_init(__segment_end("HEAP"), (void*)RX62N_SRAM_END); + +#endif /* RT_USING_HEAP */ + + /* init scheduler system */ + rt_system_scheduler_init(); + + /* initialize timer */ + rt_system_timer_init(); + + /* init timer thread */ + rt_system_timer_thread_init(); + + /* init application */ + rt_application_init(); + + /* init idle thread */ + rt_thread_idle_init(); + + /* start scheduler */ + rt_system_scheduler_start(); + + /* never reach here */ + return ; +} + +int main(void) +{ + + rt_hw_system_freq_init(); + + __enable_interrupt(); + /* disable interrupt first */ + rt_hw_interrupt_disable(); + + /* startup RT-Thread RTOS */ + rtthread_startup(); + + return 0; +} + +/*@}*/ diff --git a/bsp/rx/drivers/Uart.h b/bsp/rx/drivers/Uart.h new file mode 100644 index 0000000000..9354861ca3 --- /dev/null +++ b/bsp/rx/drivers/Uart.h @@ -0,0 +1,6 @@ + +#ifndef __UART_H__ +#define __UART_H__ + +void rt_hw_uart_init(void); +#endif /* UART_H_ */ diff --git a/bsp/rx/drivers/board.c b/bsp/rx/drivers/board.c new file mode 100644 index 0000000000..4e02325325 --- /dev/null +++ b/bsp/rx/drivers/board.c @@ -0,0 +1,96 @@ +#include +#include +#include "board.h" +#include "uart.h" +#include +#include +#include "r_pdl_cgc.h" +/* General RPDL function definitions */ +#include "r_pdl_definitions.h" +#include "intrinsics.h" +#include "iorx62n.h" + + + +/** + * This is the timer interrupt service routine. + * + */ +#pragma vector = VECT_CMT0_CMI0 +__interrupt +void SysTick_Handler(void) +{ + // __enable_interrupt(); + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} + + +void rt_hw_systick_init(void) +{ + /* Enable compare match timer 0. */ + MSTP( CMT0 ) = 0; + + /* Interrupt on compare match. */ + CMT0.CMCR.BIT.CMIE = 1; + + /* Set the compare match value. */ + CMT0.CMCOR = ( unsigned short ) (((XTAL_FREQUENCY * PCLK_MUL) / RT_TICK_PER_SECOND)/8 -1); + + /* Divide the PCLK by 128. */ + CMT0.CMCR.BIT.CKS = 0; + + /* Enable the interrupt... */ + _IEN( _CMT0_CMI0 ) = 1; + + /* ...and set its priority to the application defined kernel priority. */ + _IPR( _CMT0_CMI0 ) = 4; + + /* Start the timer. */ + CMT.CMSTR0.BIT.STR0 = 1; +} + +void rt_hw_system_freq_init(void) +{ + /* Declare error flag */ + bool err = true; + + /* Modify the MCU clocks, all are based off Epson 12 MHz clock */ + err &= R_CGC_Set + ( + 12E6, + 96E6, + 48E6, + 24E6, + PDL_NO_DATA + ); + /* + Clock Description Frequency + ---------------------------------------- + Input Clock Frequency..............12MHz + Internal Clock Frequency...........96MHz + Peripheral Clock Frequency.........48MHz + External Bus Clock Frequency.......24MHz */ + + /* Halt in while loop when RPDL errors detected */ + while (!err); +} + +/** + * This function will initial rx62n board + */ +void rt_hw_board_init() +{ + + rt_hw_system_freq_init(); + rt_hw_systick_init(); + rt_hw_uart_init(); +#ifdef RT_USING_CONSOLE + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif +} diff --git a/bsp/rx/drivers/board.h b/bsp/rx/drivers/board.h new file mode 100644 index 0000000000..870e805a99 --- /dev/null +++ b/bsp/rx/drivers/board.h @@ -0,0 +1,16 @@ +#ifndef __BOARD_H__ +#define __BOARD_H__ + + +#define XTAL_FREQUENCY (12000000L) +#define ICLK_MUL (8) +#define PCLK_MUL (4) +#define BCLK_MUL (2) + +#define RX62N_SRAM_END 0x0000ffff + +#define RT_USING_UART2 + +void rt_hw_board_init(void); +void rt_hw_system_freq_init(void); +#endif diff --git a/bsp/rx/drivers/uart.c b/bsp/rx/drivers/uart.c new file mode 100644 index 0000000000..9e304ac95c --- /dev/null +++ b/bsp/rx/drivers/uart.c @@ -0,0 +1,545 @@ +/* +********************************************************************************************************* +* Filename : uart.c +********************************************************************************************************* +*/ + + +#include +#include +#include +#include "board.h" +#include "uart.h" +#include +#include +#include "r_pdl_sci.h" +/* General RPDL function definitions */ +#include "r_pdl_definitions.h" +#include "intrinsics.h" +#include "iorx62n.h" + +//#include + + + /* Clock selection control */ +#define SCI_CKS_MIN 0 +#define SCI_CKS_MAX 3 +#define SCI_CKS_STEP 1 + + +#define IPR_ADDRESS(a) ((volatile unsigned char *)&ICU.IPR[IPR_SCI0_ + a]) +//#define IER_ADDRESS(a) ((volatile unsigned char *)&(ICU.IER[IER_SCI0_ERI0 + a])/sizeof(unsigned char)) +#define ERI_ADDRESS(a) ((volatile unsigned char *)&ICU.IR[IR_SCI0_ERI0] + ((4 * a) / sizeof(unsigned char)) ) +#define IER_ADDRESS(a) ((volatile unsigned char *)&ICU.IER[IER_SCI0_ERI0] + ((4 * a) / sizeof(unsigned char)) ) +#define RXI_ADDRESS(a) ((volatile unsigned char *)&ICU.IR[IR_SCI0_RXI0] + ((4 * a) / sizeof(unsigned char)) ) +#define TXI_ADDRESS(a) ((volatile unsigned char *)&ICU.IR[IR_SCI0_TXI0] + ((4 * a) / sizeof(unsigned char)) ) +#define TEI_ADDRESS(a) ((volatile unsigned char *)&ICU.IR[IR_SCI0_TEI0] + ((4 * a) / sizeof(unsigned char)) ) +#define RXI_DTCER_ADDRESS(a) (( volatile unsigned char *)&ICU.DTCER[IR_SCI0_RXI0]+ ((4*a)/sizeof(unsigned char))) +#define TXI_DTCER_ADDRESS(a) (( volatile unsigned char *)&ICU.DTCER[IR_SCI0_TXI0]+ ((4*a) / sizeof(unsigned char))) +//#define SCI1_USE_B +//#define SCI2_USE_B +//#define SCI3_USE_B +//#define SCI6_USE_B + +#define SourceClk 12000000 +#define rpdl_CGC_f_pclk SourceClk * 4 +/* Idle output options */ +#define SPACE 0 +#define MARK 1 + +typedef int UART_ID_Type; +typedef int IRQn_Type; + +#define SCI2_USE_B + +struct rx_uart +{ + UART_ID_Type UART; + volatile struct st_sci __sfr * sci; +}; + +static rt_err_t rx_configure(struct rt_serial_device *serial, struct serial_configure *cfg) +{ + #if 1 + struct rx_uart *uart; + + unsigned char smr_copy; + unsigned char semr_copy; + unsigned char scr_copy; + unsigned char scmr_copy; + unsigned long brr_divider; + unsigned long bit_interval_counter; + RT_ASSERT(serial != RT_NULL); + uart = (struct rx_uart *)serial->parent.user_data; + + if (uart->UART > 6) { + return RT_ERROR; + } + /* Initialise the working copies */ + smr_copy = 0x00u; + scr_copy = 0x00u; + semr_copy = 0x00u; + scmr_copy = 0x72u; + brr_divider = 0; + + switch (uart->UART) { +case 0: + SYSTEM.MSTPCRB.BIT.MSTPB31 = 0; + /* Enable the input buffer */ + PORT2.ICR.BIT.B2 = 1; + /* Ensure the pin is set to input */ + PORT2.DDR.BIT.B2 = 0; + /* Disable the USB0_DRPD output */ + IOPORT.PFKUSB.BIT.USBE = 0; + /* Disable the MTIOC3B-A output */ + MTU3.TIORH.BIT.IOB = 0; + /* Disable the TMO0 output */ + TMR0.TCSR.BIT.OSA = 0; + TMR0.TCSR.BIT.OSB = 0; + /* Disable the MTIOC1A output */ + MTU1.TIOR.BIT.IOA = 0; + /* Set the idle state direction */ + PORT2.DDR.BIT.B0 = 1; + PORT2.DR.BIT.B0 = 1; + PORT2.ICR.BIT.B0 = 1; + PORT2.ICR.BIT.B1 = 1; + break; + case 1: + SYSTEM.MSTPCRB.BIT.MSTPB30 = 0; + + /* Disable the CS6#-C output */ + IOPORT.PF0CSE.BIT.CS6E = 0; + /* Disable the MOSIB-A output */ + IOPORT.PFHSPI.BIT.MOSIE = 0; + /* Disable the MTIOC2A output */ + MTU2.TIOR.BIT.IOA = 0; + /* Disable the TMO1 output */ + TMR1.TCSR.BYTE = 0xF0u; +#ifdef SCI1_USE_B + + IOPORT.PFFSCI.BIT.SCI1S = 1; + PORTF.DDR.BIT.B2 = 0; + PORTF.ICR.BIT.B2 = 1; + PORTF.DDR.BIT.B0 = 1; + PORTF.DR.BIT.B0 = 1; +#else + IOPORT.PFFSCI.BIT.SCI1S = 0; + + /* Set the idle state direction */ + PORT2.DDR.BIT.B6 = 1; + PORT2.DR.BIT.B6 = 1; +// PORT2.DR.BIT.B6 = 1; + /* Enable the input buffer */ + //PORT3.ICR.BIT.B0 = 1; + /* Ensure the pin is set to input */ + PORT3.DDR.BIT.B0 = 0; + + +#endif + + break; + case 2: + SYSTEM.MSTPCRB.BIT.MSTPB29 = 0; + /* Disable the SSLB2-A output */ + IOPORT.PFHSPI.BIT.SSL2E = 0; + +#ifdef SCI2_USE_B + IOPORT.PFFSCI.BIT.SCI2S = 1; + PORT5.DDR.BIT.B0 = 1; + PORT5.DR.BIT.B0 = 1; + PORT5.DDR.BIT.B2 = 0; + PORT5.ICR.BIT.B2 = 1; + /* Disable the SSLB1-A output */ + IOPORT.PFHSPI.BIT.SSL1E = 0; + +#else + IOPORT.PFFSCI.BIT.SCI2S = 0; + /* Enable the input buffer */ + PORT1.ICR.BIT.B2 = 1; + /* Ensure the pin is set to input */ + PORT1.DDR.BIT.B2 = 0; + PORT1.DDR.BIT.B3 = 1; + PORT1.DR.BIT.B3 = 1; + /* Disable the TMO3 output */ + TMR3.TCSR.BYTE = 0xF0u; +#endif + break; + case 3: + SYSTEM.MSTPCRB.BIT.MSTPB28 = 0; +#ifdef SCI3_USE_B + IOPORT.PFFSCI.BIT.SCI3S = 1; + PORT2.DDR.BIT.B5 = 0; + PORT2.ICR.BIT.B5 = 1; + PORT2.DDR.BIT.B3 = 1; + PORT2.DR.BIT.B3 = 1; + IOPORT.PF0CSE.BIT.CS4E = 0; + /* Disable the USB0_VBUSEN-A output */ + IOPORT.PFKUSB.BIT.USBE = 0; + /* Disable the MTIOC4A-A output */ + MTU4.TIORH.BIT.IOA = 0; + /* Disable the USB0_DPUPE-A output */ + IOPORT.PFKUSB.BIT.USBE = 0; + /* Disable the EDACK0-B output */ + EXDMAC0.EDMOMD.BIT.DACKE = 0; + /* Disable the MTIOC3D-A output */ + MTU3.TIORL.BIT.IOD = 0; + +#else + + IOPORT.PFFSCI.BIT.SCI3S = 0; + /* Disable the MTIOC0B output */ + MTU0.TIORH.BIT.IOB = 0; + PORT1.DDR.BIT.B6 = 0; + PORT1.ICR.BIT.B6 = 1; + PORT1.DDR.BIT.B7 = 1; + PORT1.DR.BIT.B7 = 1; + MTU3.TIORH.BIT.IOA = 0; + /* Set the idle state direction */ +#endif + break; + //case UartPort4: + // SYSTEM.MSTPCRB.BIT.MSTPB27 = 0; + // break; + case 5: + SYSTEM.MSTPCRB.BIT.MSTPB26 = 0; + /* Enable the input buffer */ + PORTC.ICR.BIT.B1 = 1; + /* Ensure the pin is set to input */ + PORTC.DDR.BIT.B1 = 0; + PORTC.DDR.BIT.B3 = 1; + PORTC.DR.BIT.B3 = 1; + /* Disable the A17-A output */ + IOPORT.PF3BUS.BIT.A17E = 0; + break; + case 6: + + + SYSTEM.MSTPCRB.BIT.MSTPB25 = 0; + +#ifdef SCI6_USE_B + IOPORT.PFFSCI.BIT.SCI6S = 1; + PORT3.DDR.BIT.B3 = 0; + //PORT3.ICR.BIT.B3 = 1; + PORT3.DDR.BIT.B2 = 1; + PORT3.DR.BIT.B2 = 1; + /* Disable the MTIOC0A output */ + MTU0.TIORH.BIT.IOA = 0; + /* Disable the CTX0 output */ + IOPORT.PFJCAN.BIT.CAN0E = 0; + /* Disable the MTIOC0C output */ + MTU0.TIORL.BIT.IOC = 0; +#else + IOPORT.PFFSCI.BIT.SCI6S = 0; + PORT0.DDR.BIT.B0 = 1; + PORT0.DR.BIT.B0 = 1; + PORT0.ICR.BIT.B1 = 1; + PORT0.DDR.BIT.B1 = 0; + +#endif + break; + default: + break; + } + + + /*stop bit*/ + if (cfg->stop_bits == STOP_BITS_2) { + smr_copy |= BIT_3; + } else if (cfg->stop_bits != STOP_BITS_1) { + return RT_ERROR; + } + + /*data bit*/ + if (cfg->data_bits == 7) { + smr_copy |= BIT_6; + } else if (cfg->data_bits != DATA_BITS_8) { + return RT_ERROR; + } + + /*parity*/ + if (cfg->parity == PARITY_ODD) + smr_copy |= BIT_5; + else if (cfg->parity == PARITY_EVEN) + smr_copy |= BIT_4 | BIT_5; + + + + brr_divider = rpdl_CGC_f_pclk / cfg->baud_rate; + /* There is a fixed division by 2 */ + brr_divider /= 16; + + /* Select 8 base clock cycles (ABCS = 1) */ + semr_copy |= (unsigned char)BIT_4; + //brr_divider /= 8; + /* More division required? */ + if (brr_divider > 256) { + /* Select 16 base clock cycles (ABCS = 0) */ + semr_copy &= (unsigned char)INV_BIT_4; + brr_divider /= 2; + } + + /* Load the BRR reset value */ + //brr_copy = 0xFFu; + + + /* Ensure bits TIE, RIE, TE, RE and TEIE in the SCR are 0 */ + uart->sci->SCR.BYTE = 0x00; + + /* Configure the CKE & MPIE bits */ + uart->sci->SCR.BYTE = scr_copy & (BIT_0 | BIT_1 | BIT_3); + + /* Configure the SMR register */ + uart->sci->SMR.BYTE = smr_copy; + /* Configure the SCMR register */ + uart->sci->SCMR.BYTE = scmr_copy; + /* Configure the SEMR register */ + uart->sci->SEMR.BYTE = semr_copy; + /* Configure the BRR register */ + uart->sci->BRR = brr_divider - 1; + + bit_interval_counter = rpdl_CGC_f_pclk / cfg->baud_rate; + /* Wait for at least a 1-bit duration */ + do { + bit_interval_counter--; + }while (bit_interval_counter != 0); + + scr_copy = 0x00u; + + /*enable rx an tx*/ + scr_copy |= BIT_5 | BIT_4 ; + + uart->sci->SCR.BYTE &= 0x5B; + uart->sci->SCR.BYTE |= scr_copy; + + *(IPR_ADDRESS(uart->UART)) = 5; + uart->sci->SSR.BYTE = 0xC0; + uart->sci->SSR.BYTE &= INV_BIT_5; + while (uart->sci->SSR.BYTE & BIT_4); + uart->sci->SSR.BYTE &= INV_BIT_3; + #else + struct rx_uart *uart; + /* Declare error flag */ + bool err = true; + uint32_t flag = 0; + RT_ASSERT(serial != RT_NULL); + uart = (struct rx_uart *)serial->parent.user_data; + + + /* Configure the pin selection of SCI channel */ + err &= R_SCI_Set + ( + PDL_SCI_PIN_SCI2_B + ); + + uart->sci->SCR.BYTE |= BIT_4 | BIT_5; + switch (cfg->parity) { + case PARITY_ODD: + flag |= PDL_SCI_PARITY_ODD; + break; + case PARITY_EVEN: + flag |= PDL_SCI_PARITY_EVEN; + break; + default: + flag |= PDL_SCI_PARITY_NONE; + break; + + } + + switch (cfg->data_bits) { + case DATA_BITS_7: + flag |= PDL_SCI_7_BIT_LENGTH; + break; + case DATA_BITS_8: + flag |= PDL_SCI_8_BIT_LENGTH; + break; + } + + switch (cfg->stop_bits) { + case STOP_BITS_1: + flag |= PDL_SCI_STOP_1; + break; + case STOP_BITS_2: + flag |= PDL_SCI_STOP_2; + break; + } + + flag |= PDL_SCI_ASYNC | + PDL_SCI_TX_CONNECTED | + PDL_SCI_RX_CONNECTED | + PDL_SCI_CLK_INT_IO ; + /* Configure the RS232 port */ + err &= R_SCI_Create( + uart->UART, + flag, + cfg->baud_rate, + 5); + + uart->sci->SCR.BYTE |= BIT_4|BIT_5; + + __enable_interrupt(); + #endif + + switch (uart->UART) { + case 0: + + //ier_copy |= BIT_6 | BIT_7; + ICU.IER[IER_SCI0_ERI0].BIT.IEN_SCI0_ERI0 = 1; + ICU.IER[IER_SCI0_RXI0].BIT.IEN_SCI0_RXI0 = 1; + ICU.IER[IER_SCI0_TEI0].BIT.IEN_SCI0_TEI0 = 1; + ICU.IER[IER_SCI0_TXI0].BIT.IEN_SCI0_TXI0 = 1; + + break; + case 1: + + ICU.IER[IER_SCI1_ERI1].BIT.IEN_SCI1_ERI1 = 1; + ICU.IER[IER_SCI1_RXI1].BIT.IEN_SCI1_RXI1 = 1; + //ICU.IER[IER_SCI1_TEI1].BIT.IEN_SCI1_TEI1 = 1; + //ICU.IER[IER_SCI1_TXI1].BIT.IEN_SCI1_TXI1 = 1; + + break; + case 2: + + ICU.IER[IER_SCI2_ERI2].BIT.IEN_SCI2_ERI2 = 1; + ICU.IER[IER_SCI2_RXI2].BIT.IEN_SCI2_RXI2 = 1; + ICU.IER[IER_SCI2_RXI2].BIT.IEN_SCI2_TEI2 = 0; + ICU.IER[IER_SCI2_TXI2].BIT.IEN_SCI2_TXI2 = 0; + + break; + case 3: + + ICU.IER[IER_SCI3_ERI3].BIT.IEN_SCI3_ERI3 = 1; + ICU.IER[IER_SCI3_RXI3].BIT.IEN_SCI3_RXI3 = 1; + ICU.IER[IER_SCI3_TEI3].BIT.IEN_SCI3_TEI3 = 1; + ICU.IER[IER_SCI3_TXI3].BIT.IEN_SCI3_TXI3 = 1; + + break; + case 5: + + ICU.IER[IER_SCI5_ERI5].BIT.IEN_SCI5_ERI5 = 1; + ICU.IER[IER_SCI5_RXI5].BIT.IEN_SCI5_RXI5 = 1; + ICU.IER[IER_SCI5_TEI5].BIT.IEN_SCI5_TEI5 = 1; + ICU.IER[IER_SCI5_TXI5].BIT.IEN_SCI5_TXI5 = 1; + + break; + case 6: + + ICU.IER[IER_SCI6_ERI6].BIT.IEN_SCI6_ERI6 = 1; + ICU.IER[IER_SCI6_RXI6].BIT.IEN_SCI6_RXI6 = 1; + ICU.IER[IER_SCI6_TEI6].BIT.IEN_SCI6_TEI6 = 1; + ICU.IER[IER_SCI6_TXI6].BIT.IEN_SCI6_TXI6 = 1; + + break; + } + + return RT_EOK; +} + +static rt_err_t rx_control(struct rt_serial_device *serial, int cmd, void *arg) +{ + struct rx_uart *uart; + + RT_ASSERT(serial != RT_NULL); + uart = (struct rx_uart *)serial->parent.user_data; + + switch (cmd) + { + case RT_DEVICE_CTRL_CLR_INT: + /* disable rx irq */ + uart->sci->SCR.BIT.RIE = 0; + break; + case RT_DEVICE_CTRL_SET_INT: + /* enable rx irq */ + (void)(uart->sci->RDR); + uart->sci->SCR.BIT.RIE = 1; + break; + } + + return RT_EOK; +} + +static int rx_putc(struct rt_serial_device *serial, char c) +{ + struct rx_uart *uart; + + uart = (struct rx_uart *)serial->parent.user_data; + while (uart->sci->SSR.BIT.TDRE == 0); + uart->sci->TDR = c; + return 1; +} + +static int rx_getc(struct rt_serial_device *serial) +{ + + struct rx_uart *uart; + + uart = (struct rx_uart *)serial->parent.user_data; + if (uart->sci->SSR.BIT.RDRF) + return (int) (uart->sci->RDR); + + return -1; +} + +static const struct rt_uart_ops rx_uart_ops = +{ + rx_configure, + rx_control, + rx_putc, + rx_getc, +}; + +#if defined(RT_USING_UART2) +/* UART0 device driver structure */ +struct rx_uart uart2 = +{ + 2, + &SCI2, +}; +struct rt_serial_device serial2; + + +#pragma vector = VECT_SCI2_ERI2 +__interrupt void Interrupt_SCI2_ERI2(void) +{ + /* Will the user handle the errors? */ + /* Clear the error flags */ + SCI2.SSR.BYTE = (uint8_t)(BIT_7 | BIT_6); +} + +#pragma vector = VECT_SCI2_RXI2 +__interrupt void Interrupt_SCI2_RXI2(void) +{ + rt_interrupt_enter(); + rt_hw_serial_isr(&serial2, RT_SERIAL_EVENT_RX_IND); + rt_interrupt_leave(); +} + +#endif + +void rt_hw_uart_init(void) +{ + struct rx_uart *uart; + struct serial_configure config; + +#ifdef RT_USING_UART2 + uart = &uart2; + config.baud_rate = BAUD_RATE_38400; + config.bit_order = BIT_ORDER_LSB; + config.data_bits = DATA_BITS_8; + config.parity = PARITY_NONE; + config.stop_bits = STOP_BITS_1; + config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; + + serial2.ops = &rx_uart_ops; + serial2.config = config; + + /* register UART1 device */ + rt_hw_serial_register(&serial2, "uart2", + RT_DEVICE_FLAG_RDWR | + RT_DEVICE_FLAG_INT_RX | + RT_DEVICE_FLAG_STREAM, + uart); +#endif + +} + diff --git a/bsp/rx/lnkr5f562n8.icf b/bsp/rx/lnkr5f562n8.icf new file mode 100644 index 0000000000..38790c05d5 --- /dev/null +++ b/bsp/rx/lnkr5f562n8.icf @@ -0,0 +1,51 @@ +//----------------------------------------------------------------------------- +// ILINK command file template for the Renesas RX microcontroller R5F562N8 +//----------------------------------------------------------------------------- +define memory mem with size = 4G; + +define region ROM_region16 = mem:[from 0xFFFF8000 to 0xFFFFFFFF]; +define region RAM_region16 = mem:[from 0x00000004 to 0x00007FFF]; +define region ROM_region24 = mem:[from 0xFFF80000 to 0xFFFFFFFF]; +define region RAM_region24 = mem:[from 0x00000004 to 0x00017FFF]; +define region ROM_region32 = mem:[from 0xFFF80000 to 0xFFFFFFFF]; +define region RAM_region32 = mem:[from 0x00000004 to 0x00017FFF]; +define region DATA_FLASH_region = mem:[from 0x00100000 to 0x00107FFF]; + +initialize by copy { rw, ro section D, ro section D_1, ro section D_2 }; +initialize by copy with packing = none { section __DLIB_PERTHREAD }; +do not initialize { section .*.noinit }; + +define block HEAP with alignment = 4, size = _HEAP_SIZE { }; +define block USTACK with alignment = 4, size = _USTACK_SIZE { }; +define block ISTACK with alignment = 4, size = _ISTACK_SIZE { }; + +define block STACKS with fixed order { block ISTACK, + block USTACK }; +keep { section FSymTab }; +keep { section VSymTab }; +keep { section .rti_fn* }; +place at address mem:0xFFFFFF80 { ro section .nmivec }; + +"ROM16":place in ROM_region16 { ro section .code16*, + ro section .data16* }; +"RAM16":place in RAM_region16 { rw section .data16*, + rw section __DLIB_PERTHREAD }; +"ROM24":place in ROM_region24 { ro section .code24*, + ro section .data24* }; +"RAM24":place in RAM_region24 { rw section .data24* }; +"ROM32":place in ROM_region32 { ro, + ro section FSymTab, + ro section VSymTab, + ro section .rti_fn*, + }; +"RAM32":place in RAM_region32 { rw, + ro section D, + ro section D_1, + ro section D_2, + block STACKS, + block HEAP, + }; + +"DATAFLASH":place in DATA_FLASH_region + { ro section .dataflash* }; + diff --git a/bsp/rx/project.vpj b/bsp/rx/project.vpj new file mode 100644 index 0000000000..9e8b56055f --- /dev/null +++ b/bsp/rx/project.vpj @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/rx/project.vpw b/bsp/rx/project.vpw new file mode 100644 index 0000000000..db5528329f --- /dev/null +++ b/bsp/rx/project.vpw @@ -0,0 +1,6 @@ + + + + + + diff --git a/bsp/rx/project.vpwhist b/bsp/rx/project.vpwhist new file mode 100644 index 0000000000..6bddeb5fea --- /dev/null +++ b/bsp/rx/project.vpwhist @@ -0,0 +1,150 @@ +[Global] +CurrentProject=project.vpj +[ProjectDates] +project.vpj=20141105163139555 +[ActiveConfig] +project.vpj=Debug +[TreeExpansion2] +-@ project.vpj + + applications + + ..\..\components + - drivers + - include + - drivers + + serial + + finsh + + drivers + + ..\..\include + - ..\..\libcpu + - rx + + RPDL + + ..\..\src + - E:\ + - ForTest + - iar_rx + - rx + - inc +scroll:0 +[State] +SCREEN: 1366 768 97 52 1172 625 0 0 M 0 0 0 0 935 334 0 +CWD: ..\rx +BUFFER: BN="..\..\include\rthw.h" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.3072 CL=1 LE=0 CX=1 CY=15 WI=5 BI=26 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="rtconfig.h" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.1899 CL=32 LE=0 CX=32 CY=27 WI=5 BI=25 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="..\..\src\kservice.c" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.24196 CL=31 LE=0 CX=31 CY=15 WI=5 BI=23 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="E:\ForTest\iar_rx\rx\inc\iorx62n.h" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.0 CL=1 LE=0 CX=1 CY=0 WI=5 BI=22 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="RPDL\r_pdl_sci.h" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.2631 CL=29 LE=0 CX=29 CY=14 WI=5 BI=21 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="RPDL\interrupt_sci.c" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.13015 CL=6 LE=0 CX=6 CY=13 WI=5 BI=20 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="..\..\components\finsh\shell.c" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.738 CL=49 LE=0 CX=49 CY=13 WI=5 BI=19 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="..\..\components\drivers\include\drivers\serial.h" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.5705 CL=1 LE=0 CX=1 CY=20 WI=5 BI=18 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="RPDL\Interrupt_INTC.c" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.13438 CL=2 LE=0 CX=2 CY=2 WI=5 BI=16 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="drivers\board.c" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.1997 CL=4 LE=0 CX=4 CY=10 WI=5 BI=15 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="..\..\libcpu\rx\context_iar.S" +BI: MA=1 72 1 TABS=10 16 36 72 73 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=IBM HLASM HM=0 MF=52428896 TL=72 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.3626 CL=9 LE=0 CX=9 CY=7 WI=5 BI=14 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="..\..\libcpu\rx\cpuport.c" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=118620768 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.5430 CL=1 LE=0 CX=1 CY=10 WI=5 BI=4 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="..\..\components\finsh\finsh.h" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.5625 CL=70 LE=0 CX=70 CY=6 WI=5 BI=28 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="..\..\src\scheduler.c" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.12003 CL=13 LE=0 CX=13 CY=25 WI=5 BI=27 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="applications\startup.c" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.2126 CL=2 LE=0 CX=2 CY=24 WI=5 BI=24 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="drivers\uart.c" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=33554432 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=0 CL="" SC="" SCE= SCU= +VIEW: LN=.12260 CL=1 LE=0 CX=1 CY=21 WI=5 BI=17 HT=0 HN=0 HF=0 HC=4 +BUFFER: BN="..\..\libcpu\rx\cpuconfig.h" +BI: MA=1 74 1 TABS=1 5 WWS=1 IWT=0 ST=8 IN=2 BW=0 US=32000 RO=0 SE=1 SN=0 BIN=0 MN=C/C++ HM=0 MF=120783456 TL=0 MLL=0 ASE=0 LNL=1 LCF=6 CAPS=0 E=0 ESBU2=1 CL="" SC="" SCE= SCU= +VIEW: LN=.0 CL=1 LE=0 CX=1 CY=0 WI=5 BI=29 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=9 ",,," DID=0 +BUFFER: BN="applications\startup.c" +VIEW: LN=.2126 CL=2 LE=0 CX=7 CY=24 WI=157 BI=24 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=8 ",,," DID=0 +BUFFER: BN="..\..\src\scheduler.c" +VIEW: LN=.12003 CL=13 LE=0 CX=18 CY=25 WI=155 BI=27 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 351 0 0 N WF=0 WT=11 ",,," DID=0 +BUFFER: BN="..\..\components\finsh\finsh.h" +VIEW: LN=.5625 CL=70 LE=0 CX=75 CY=6 WI=153 BI=28 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 351 0 0 N WF=0 WT=2 ",,," DID=0 +BUFFER: BN="drivers\board.c" +VIEW: LN=.1997 CL=4 LE=0 CX=8 CY=10 WI=147 BI=15 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 351 0 0 N WF=0 WT=17 ",,," DID=0 +BUFFER: BN="RPDL\Interrupt_INTC.c" +VIEW: LN=.13438 CL=2 LE=0 CX=7 CY=2 WI=145 BI=16 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=7 ",,," DID=0 +BUFFER: BN="..\..\components\drivers\include\drivers\serial.h" +VIEW: LN=.5705 CL=1 LE=0 CX=6 CY=20 WI=143 BI=18 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=4 ",,," DID=0 +BUFFER: BN="..\..\components\finsh\shell.c" +VIEW: LN=.738 CL=49 LE=0 CX=54 CY=13 WI=141 BI=19 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=3 ",,," DID=0 +BUFFER: BN="RPDL\interrupt_sci.c" +VIEW: LN=.13015 CL=6 LE=0 CX=12 CY=13 WI=139 BI=20 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=14 ",,," DID=0 +BUFFER: BN="RPDL\r_pdl_sci.h" +VIEW: LN=.2631 CL=29 LE=0 CX=34 CY=14 WI=137 BI=21 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=6 ",,," DID=0 +BUFFER: BN="E:\ForTest\iar_rx\rx\inc\iorx62n.h" +VIEW: LN=.0 CL=1 LE=0 CX=7 CY=0 WI=135 BI=22 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=13 ",,," DID=0 +BUFFER: BN="..\..\src\kservice.c" +VIEW: LN=.24196 CL=31 LE=0 CX=37 CY=15 WI=133 BI=23 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=12 ",,," DID=0 +BUFFER: BN="rtconfig.h" +VIEW: LN=.1899 CL=32 LE=0 CX=37 CY=27 WI=131 BI=25 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=10 ",,," DID=0 +BUFFER: BN="..\..\include\rthw.h" +VIEW: LN=.3072 CL=1 LE=0 CX=6 CY=15 WI=129 BI=26 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 491 0 0 N WF=0 WT=5 ",,," DID=0 +BUFFER: BN="drivers\uart.c" +VIEW: LN=.12260 CL=1 LE=0 CX=6 CY=21 WI=159 BI=17 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 311 0 0 N WF=0 WT=18 ",,," DID=0 +BUFFER: BN="..\..\libcpu\rx\cpuconfig.h" +VIEW: LN=.184 CL=1 LE=0 CX=4 CY=7 WI=161 BI=29 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 311 0 0 N WF=0 WT=16 ",,," DID=0 +BUFFER: BN="..\..\libcpu\rx\context_iar.S" +VIEW: LN=.3626 CL=9 LE=0 CX=14 CY=7 WI=149 BI=14 HT=0 HN=0 HF=0 HC=4 +WINDOW: 1 22 933 311 0 0 N WF=0 WT=15 ",,," DID=0 +BUFFER: BN="..\..\libcpu\rx\cpuport.c" +VIEW: LN=.6697 CL=14 LE=0 CX=19 CY=13 WI=151 BI=4 HT=0 HN=0 HF=0 HC=4 +MDISTATE: 1 +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 +FILEHIST: 9 +rtconfig.h +drivers\uart.c +RPDL\interrupt_sci.c +..\..\include\rthw.h +..\..\components\finsh\finsh.h +RPDL\Interrupt_INTC.c +..\..\libcpu\rx\context_iar.S +..\..\libcpu\rx\cpuconfig.h +..\..\libcpu\rx\cpuport.c +TBCLASS: 0 0 +DEBUG: 0 0 0 0 3 0 gdb +printf +strcpy +std::* +DEBUG2: 0 diff --git a/bsp/rx/project.vtg b/bsp/rx/project.vtg new file mode 100644 index 0000000000000000000000000000000000000000..eaa059472d657f80f5dc6d7722277589f190113c GIT binary patch literal 2146304 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
!&HepZ+l+O#BoefKEC}-`E4oD}Y3(^fa33(E7 z3UV59267hC1BpZWApMX5i1|q>C+jPMiZm^9H9RSsIO-0a>ccm6BbqpT7I{{`8m*q_ zE}a}tm&%3QIn0DlqfwHbr;OF2Aqt#SD2?>xbLcst&s8ZF72rFH=telAaUGFvI=zUd zMg}Lny!ed_{eC!A^8PXveRi zSE*bWP_?qyawvr^Xqrh3bx2!ME$J7nCLf9F4<_m#lbY{38AtpICt719qX)_G3xcR{ zRD)7hZ9~W>b%N=3im1b_c1z$+gAS^^(FC!71DddIC5QvI$30 zIDs_j7o2d)U#0qvRN?5xilm^iQ%Mnhc~xk>+XS^-fiwFO*=%njdFxy`muwb^H@eAi z(;e$3iP%NgPgG?Q`#(vvr__xJOFL>*ruXBZMjCygnDf|trigl?`kPOg4a?1o%3&+9 z&PnN_=jZ7rk>eTU*qud|Z5ISB4TY-)MvBbH4yhCzK15VB21m@_-LZjjfe*J>J$g72 z|7XL-nyH74kI|Z<)%RkE*SQ{~{4dm(B)7Qo7wx(_4RSl`ekw}0@8+a8TY z?$X#;d7HCkX*b&TJ&?VSX2?Fseh6(|a{xk{)6k|h2O+d+4sFCk8}!h|J+#>lZLUKb z`_QI1v>&{!j$Zsa4Pb|1nI zGvTRwfYC&BY=Y0r2tMQo?;D*OnH(5LSU9MBOjTmTG+J<-_P)`PiOKkg=!zk5Cq1*_ zV+6k72kxKjb0_h{cOE6g94jq%StFZB&v`>_7*C8LJ!GVOnwqF!bmuHRGfrbnwT*Q` zpRe3EHsy|@}wDZbW8+{md{!pMFjL3Xu7Wi zdVH$hAMqYGkDRe?OHfCjH*m`cSrE_2;_h(5*A~50Xv+sLR0*>Ssp1`1RYKns5L`ZO zA$XuW@Q5gJ@5`iQ2GG!7Qf@LV%6_S5@jEtUcUqA+{QtXp?nd}Pi+16RRY~#cLSCHn zeeU^mX`+-Um5Xq;`4x92(GOdeIBAs@XrpS%;HqmF_~L8QfLjw9uPulCLIXnPx-^-DFltSce4kUB^`qye%TvIepi zvJSEyLYv=hfNX@&rg!vVBJTDh9-TmvCr8JO)KcT!X1xbP9=jMNFR{2A;VC;f=m#DB zuup#Jr`x-)fQCC}^+BM3w_4)vEGSi@C@IH;;xX_{CG-OE)Ig?#IsG!qgBp$<-G1X?^vWPYn_A%^i)h4r5I})*4 zVQ9$SE+SBs#|uwIcuduNBL>-Mk~`BSFRZ8=)O0`M53*;soQVIsZ8@QW|I7Cm)Ec74 zu_98_Ol!7R;Qjw|PRaSovftVJ5%e&3@7cHa&-X0txv~3OyMJN#TXxUyIuxsnN49*c>8F|&o4T5urmt*%$L6WcJ2pSu^wOs6rdO{2>y5v>@%0-o zZfxB6+Z*1u;pT>Y8~&*ACmI(TqmAEQ|M~UrY>2O4x&Eu`-n{P8x;5**w)TT-OKS($ z?pXV0YaXn5$C{gKzS`h69B=sB`Y+bMw*FduTm3(*`gYyl*M6z?qcuaT_OEiB+{%+H z57hk1iVv>Ht(ackz2bjg{&Tn>f4A%_%S3(r9{Nw4)e_>KuR2K7vl}0X_q!992F#au{#Bjxn z!7C__j>8L9p{vt!X!a2!Q7yCY3g;4!hAIQ9AU!$-D$pb1Z#guF5wUql=8nQNJE z$*ghKEG5wMn1LiADM%VJ3z>t=Lo$$CkOfE%@)=cZb$)}sePqF<$Q zXBGg_rX&L|h50UPa1c(kF+%M-X(H)->iL10!-cGZq?y zM&S1vf&Hg=Jl3AI1~w4(Jw{kPHas}k7j-AET^Z;@2E>=azR7EYQAYg-DyfeL)yH}D zck}8IGxmrpVvjJfzpIkE5j&|P_QgMOMef> zn0Vh@N!O2;W^l5)Z{l^mvW;s*e-B2Pc)zcbt{-od;^lN-w z%|RWEoDSce-@xc%UVStoYO?stojgAnk48>f!+B^3Ue7CcYu#?4+RbRbj@Rtcnq5M( zi_v^7ui2?JJB4N^qxl+MvqNj54kM!-jOG%r*`_tygk~F~`D$LXRcoT|AkJ1s^HscN zOlzX_Lo>!`zLM9BYE6`1x}c2a3%sUR7El7AiIRZf7JT##8ztctj3!ouL}hX(qF5f{ z#`_1K3^%CHSI~^OGQsiwC}~C+)q53HWs2kd5mJqGg-h;TMs;xfvb-*XeN!%dVf3)* zg+`1;FWS5HjbE18RC+N+?>4U|v#9iG0}91VlXbgOpHwq zMj7p5C2iH9Xzg)UyTEIEO&MuNT#B1Z`E!-DjkrmBe2}}lFEZLw6TMNlU%FcTeQxmF zDAzT~S5%iCm+Fy9>N#FLV#H2=lRB69g^KE4>`)i6N4mphI?JeI7Kbd;^am!h47M_g zw|GTasG%4m#TcXbEUzeC4aF!aMj6EnuPCz##Rw@z>}i^4XXY8jiL2BH#)Je6vjkhE zv=N%dHFb^kI=Fbqqfa?|hGwD$l~Wazjki8{d==U!!xb=LXzOUtjgDW9kBd&YUK(aE zZbKHQ8BOtsLb;^J^9t$30Ikp(SuqGGf+EbW1bzWA80D6(75>iPV}4d=S8sG<^CWHm6n?Dn)QQ^7*)v*;NjaUWS0#EWBdWPt$xh2o}g(ka-;-C zC~M_xe|TtT>}8A$4~|St$b^Uymuw$K1FVE#;M?;Kmyod`&jgLZaLE{X858FQuMNoZ zARJQ8_Ry;#d<+MwnN#BaDvKZM3Nbp9JsTdT8Zy#g>6>1lQ30;bU#hHbIDp=UbCF-H ztZn9JmMn=bn<3pZ8w46=)zm!oXa2t1-V?nTijN8m#ds3CWnqr|)(6u;_$bN%Ygdk3ezj0km}j(QQA zuMX9GsyC{^UL%1RE7q?F#29%fePU2t>8lie*XcBJ27lTw4&kPkdvRzlUxZ3<1p0#0 zyrQQD1Ew|2*r$7Gx$`w=*|L7j2Uy%9>v>Wg>U)4;`xy2F!wxd+5W^m4*b#;uWmpTt z4m0dH!%i?P!mwiui!rQ~VQmbHGOUAPoeb+@SUbZ`8Vsjkii5Bd21_gEGVB?KWf*pi zVOJS;gJIVVwy4rF%dix~(hQqp*u25$K+_p)?Eeaey}+=0411noS%%$W*j}eF&oXR+VUrBYF>HZh1%{OvRy5chb=}S|>@3527)EFL>UK@rn_*az zVciUSieYq?uN}wJ44Y=yWw3&7cjb}w?iR3_t+FjH;!uYK{7_Hf6r(dGs6=l!SQ_i| ziEU!oW`h;evPIZtuu^(X=ip2qKGup5)zxy(vpJml{zZgrR69|%tR*t z<#Gue<5F6n<%%}zG*}U5=adnyo$P5{I-3PC_Zy7r5iwfYsKaS?#$Z&BC|sYx=v;bY z0|uk-bo5Od*vu}OW+dB*;P9Rpv8zGWMeJITbrZWDWKJvC*&vG$yAfnjVl-L7 zyyk6SJr-*Ri(3qHATzxd>jdkw7@iq2{TAy68vx6w@<(Nl4vrc!7+o`BHyJj|usMd! zGc3cfXBl>jVNWw`fnhm@D>AIaurkALGwcq-?lSD2!Kh48 z-stQveSI~1o?)*r7?nNJoi-SiJz@!iQQ0FlV=yXv#F7T1vPUdsFe-b*(gwr1aES#s zySNu@QI$!Y5he};+w&mI_A;!QVQUzcT?*T~$%LC`SdwA0410!Q35KN@Hpj4~rEr>G z!?4#f>~#!lco4St2864Asvf9%pz49D2dW;ZdZ6lost2kbsCuC4fvN|p9;kZYd)Na# zD|+bs^_u(G1K@#t|38fJX_q#6#$dHRzkSqT1vi($Cc%XX!Eg{b!sX^N*#ypipJmvb z$;23aBs$HoG*~jRAnZBLtzTHa+d zTHa+dTKZ)(TKZ)(S{9~Rrce?`+0!yGo6#~b&73s06T^OFw7g2Q6uv))^XzFknP$nN zWVF0Yv(jD3ni)pR(R8>)ylWtPv@A_CC!1I(U3S`O#2bh1#+7hPIfrW(Pp&#(Pp$9(q^mMnVT*pQj2AmmZRE?mbluCmaE!qnqjo0)ec9?U2R57VMW7F zFLH~;bRm^WtXc}QT7#i&5;wDzCX3KbbUwMwV0Z;B*j9sOQj%>nSV`UB)-bG*Ve1&S z!C;FEh#5DK?FP#w&`5%9F_@!nDs=|S+$y>$yzIW?_&(6A#t4UYT-O{Q)>n@y%} zK20W5H=j)bCT}#W4VF+hpS28I&#(rA;TnmX%J%zyKB(76HH^WXc zY$wA~3`;X?mSJ-Yn`c;tVb3z`7Q=QkYzM>kGOU?lS%xhzEXS~#`~Ef3zF*0(RSetA zuqK9WVc1rN9bO8j+Ic7}B@tdn6~3_HrO7KR;T*l~uPU|57BG3+wKdKossut|npVc1g)yUMU@ z47<*-8w|S%R{c~xQ1w97162=HJy7*P)dN)zR6S7jK-B|P4^%x+^}zSA2c}m9M@ABY1# z>l5{~=Y4ON}tMrL9ZqYhJ1!6PyBCbascT|dQyX`L z10gBzT8H69Fx%&C~O#QR< zx9YR?3-Fm%D$rT*GV2QY$3)bNteaSATyqjg zSjbc$rJffMjC`q7y)Dt9{yy z&7gvjUoZoUJ>R_T)68F#8QS!${*mXR`B%}%;TX<*j+^GhrcoxK5WP0&Gl9Rwwn>>? z>dc=j?ow|C8t9MXEUv5Z!AX;nWosik^Jj5jAMLYkLYYR|*4w1gib-UQL!(zs7)-0Y ztmg0LB{Y01ZB1Ms33$sY6=Lr&(^#NL^-slz%pX-sI450+K29h&*O-lcGSaAI)e zy!p$7+&tW`AF9>{!q9$ytuYgsJ1(kC6MYl9=V3S_kgcoZgOdXRYyK$(-j;A7c zz5h*Ral!o-!HCqjFrL|vYeYdE3DjJ9<#e`m6Jr>*+|67M@>rLdN__>avZbp@xKzn~ zEDfiM2G%s$hZY6riJC~qLVG)#obyD51}U5pZS-7xXoyOW*XH}prs*5XdbGogUHX$w zcQa|_h$aHnkG9x1_2jm5CNT@6a+|&b8VTckAg|o-%cI%Ij4rwfFuuG8;y8L3wU$FwDYvO3uZANp5TB&WAK91N~*=P34p_b^vkWYZ~}DR#=I-R`~2qZ}dn zHZKoy1Ap&lwOhPrUweW|f}fZ`6R)p6jy^a)c-0St?kV~tI3O7Z+f0q3Q}yU>548YP zlEt>LXqSXpbFXJFO;)RJWEU4xq{8rk@ya`%flS}mO^tnq(YY&GOtg`kc!@Z&0ccUF1g-!FLoRyz(M~?M^X1>NeiVM z$1a3)Wv$|kwpI!)Z(e2tgxvW>z({O|)hLG2BpVj(PTACWjSuazK5=z$L{)21tmyy< zuiR2*&*S(L#wX_od&88fE0+47*kAb zp=%(|N8vFap}gA%E*C6!hD=a=T`~*iX6`+9isW3VbqLR~T z-JUs8>>C{(8yc7#kg@6m2fQF&Nusk4JZiLl9y3GoUf>H!+`48=Ie=T@?8S-u7sp7F z*O&EraF*xe?DdGV*CQ@_sls`Fr`0y-Ukv4UBRSHuqG=M9R97`|>={ zo?b=Az^>NPh^nW$y`y7Lyb2k%GOmtV@js+K{-@gP#2|%_)HmTTAgDaEQ@&6vwfk znhRH;O%g8e4X1>(c*;7LNhVq74vt`$MO0ixnGBuRUUh}=U7Z@kX2z(q#%O?PTOKwQ zQkExRd07|7DCnxL&-_q@QGZpXRex3Og8qsjaq6P$uc{}dvx6!f_}RY~8a2^t8053F zS3=d18eSf(j*e(XL}0p2i1Sa-XBPk$RpgAhAE9xD^F%1reR&3v7lST?6ewIXh=vO> z(Qqjt8ZIS7{lYB{+CiljiGjz&;{@7S@m)1H;#>|tgnWL{8SwIrUcWXXj2gw(y3^k`jyk<55LOjdWmR1mO1wDgBM{VYZL|mRv~Q+KH7ClJ?-SWl2UF}nYl+-3t-W|M zoxB!u4GK`$vs9|MkYUdvBwJM5RBu$jrwcSBqI47lwb3K z%`h0gzu>?X^i_qIMP0>xI-Gk76wW@;aQ=z<4)E_AYV<|Kq;Ao{iYJB}a8DH>kP&gx z6%zs7d5yMN=MM22-87T>Dc6td=cb0_;Hh~L$N-z2N@WL6>Ha9s1uxyw|H`Mxhsal- z$`@KqQSzDR13I$GGop_93Kcmz63c^fMBW-z61PHZo9LO6&oyRG$!g?{TLOxJJetqb z7P-+SMCS%i2I4B|+{7c!(uxSJr>epK{%-FAPN>c;`|94`-Shsv&+a|Bw_)$!?*7=G z+k3k9e0$d~?S6iD*Y1{GU*7ctyOO)6cK*fAFYbKH&a*q3c7A=wi#s-L|G&0>a(iO? zD>r|6+nsGkw*B7LcWmw3`gdD?c1v!{!7UG)-q$qVw7Tg_oBw2e+vfkW=|h{YZ))81 z>l>Fgc5nQ%4KHnYdc(#IUuk?*V_ReY>ig@jtgm1Hg>~h1N7wzq+8ZcK1>3y?r_A1@y=fy zB|&FJd`6uaWrRFUZ=ThlmN&+T@kpVQ{8w&!e1w|-WglVS{^$_MyEG$>0iQx6{!wae>z#0F2DinSePZ2fEnThWTPq7`j@rh=_V zMOzVR>!Nig8S?n)uq|<4uub_-1|o-yrBCseVvHr#9j#>PXLw5?S0PPe1f@4x$tWM?=1%WQj)){8lMh z`t)%QOVN#c}o>9Ute1#OYh??RlIzCt(7djm$y{$^7U1`d_Tlm!kba1bjn9t z{8lMhKgb)ac=>uOUOs)+eXxA?b}^|^BQ%xL^aFgFIvGo9(6o}Jck`Ai7OCEfMe1F= zrHVzWw_=fcCvT}@k?O5jq~5_>3Uy%6wy2STN`Cr&-V%G8p`o|R9lf{nmbkL1o|8qI zn4ZGhSW6hCVTyq_f>SAjZ{>|uEavfw#r!S2rHaKo-c>10Z{{skEavgfN|xTlTdG*h z;}whf_wkl07V~(;V*Vm;sbVpYS1jgl96N4ab;5!bJb5D z3_th1E^J9mb+AjhH#J8Tg7em)sCa;UEoW#jlsEm-wvw6Gux3IT)AKZh875mxVKW$W zjfOg#`VEcjYchsj%^M1pNNq?KNXF2sctfEAsSU~U$QXJhZzxnAwITV~$QXKoHx#;L z+K}woGlpKl8wy=CZAkV8m@@P{Ybex8Dm$``WX#-S&4ijrWkxoTjG4QvnNa(v%*fV} zF>{AC6KWil8QC;4W^S`)Divs1o*6S`)=Z`1EK4(Ero@`5RG4L1X3P{>GnI<6EXjM%9>cAksAKgpB1`V`$W`amMK7 z@Z?~{l;v1sQOr=}jL}>OOt7q!vIW){y*uWNsn^!R*hn~=*|0J7($zMmFujSANn@o6w3$ttd@)$H!=Wp7yoWTXvxkl?o^6fc2olQ?`OX8&_yXxS?cZt8o(;b~R`g141h!`1q%AKaeO0hL(UxsUh%C_FVwEAak5<2>tJT=vs@pV_-+ z@9C{y+VjGmwmsk4{o&nD@7}!oH+H>#*Qs59x%1;Y-JKhEetE~;9jUENTmNv&Pi=YC zmccE}TYj(UCpL99)iotH=QqB3)4-v6s zTEAoc->m)gx>u|_x$awQKEL+P+UVNV>gQIUUOn9K9~(Z|@Y;qq z*6(Wgllsrqf2MA-eoy^>t}E3n)lJmxt@~!}r)uxj_SDwZ{?4k8t$Nj};Z^%q{hup; zY2{DUoUB<@^NkfhvSMb%z7^kI{&l=MfBW(`EW7y6^xpr;@Z0Yb#@layBDc~azS`@xWhx9MBr)#5W%#VbrWDE%yB(+EYGd2vQ#YTm?uPIr4vkim zCU7$x85tOwh_yJfOz7qZp>WhUzg9TzoD@mYVV`guHGZnBsu|R332UJ361THcPP=X3 z9kODw26Q_n?riN=rAFl6&*{o_Z`5qyw$N(5iiMII6Aea4cV22bpweb_$D#5zE*`O1 zliCjGoOD|4e5o4uzyJPA1kISn}jISc85#38+qK1e@g0CEm;9&!OP2)PKk1Q~)1 zLq;H@kTJ+*$T(yIG6|W2T!CDLT!UPP+<-gEC~IS7J}&MLmWHmo25x8a5u?As%-8k$qZMy-7o!DHp))Qkpgs{uF_TuyEj zp`+!laA{U!S}L?T>riXLq1{fK9g7;mV)VSuG5pFXs$n9fNRJ5v*CyRS{ehF)R2ymd zObrZKieB~U;v!R{K!%QL!9<6AV5A?8Y2zYO<35JsfVYzYbYi%uq3fguc}yJ}xgVVX4W5 z_>_HUF_laWZdh6qlssw?84Wc^pfu!?YuY*i8q^#z8uI}k_}dkb24D5(7!6w1O&Tbo zOm&`RG^CfQ{xc1`dWsKZ!>b0B+JKorEVN}sA0-Lpk!dgzp}@T&Fcrj5>oOe*92bG9 zAcjiq%|KxDLA48s!4nCiqn^E0eua*DR;7nw=(L8LCH44i>d41c>OVlme#}Fzt_6~& zA0EWMCA7(e%#+kU8*bUu*g(Y@p>~bA-Yi6bKy>ydSF+H;LI2gyrS924mjO*V$?JHBdiz?zHmsHOUl^G=E!^i zrgkMXe1J{(cr~%>f`q@a2$YO0-H`4Z6TYtW{{}fT^hG11f6o4Xs1N2eEMLaW0?}8bM&H z_CP=*Jcz)k^aoVJ;|OWhP~l;*t`X%KMF&qP-YjcxX1I9FR9i;0sDF=$Kj?AH{)-;x zBoluXRpt?icp^n4crx=M>61G;grX1+h2psqkCb@26wwJt2@rqihebVa+Dno4w~? zjk9KH4<3m2LYg7_Ap0SYK@LD3hdco}2ssQn0=ebv7Z*YIlaVjfMwKs7G<3G~1}oBE z|A<_jboSa&_2{UubWFt~H;K^~MP3AZK?o9g3Yz`~GotuXvHYB0?M015NIZFjFS=0h zM{Pu17hnBB9$gph!5>{EzZ))E3&uWbgEaFIt0h6YF%B9iUg41~Yy5~RXr;u-tcr?j zB_s5U1UmP@k*5>kWTHP9D405#6xT~u(}P^02$+RShxQ}==g(B1ssg%!L@IacRLat5 zm6ouh4_oaMOnB`RwLjiQN$u9765jHBL*B_Km>MMWH}Q$wrS||4Yrp_XzZFtagHCiG z@30=@5dJqq;f=l^?&r9ZN3CHJX#Km8miM%bR{@8tRtgGV^A*GfWw0D8AGDeng!>IM zoER91mcQh@Whw8hz^s53&U26gqzEZNZbR-sYL-?wD4bDax*;baPeSONtJ9D(kh72;NF34& z>4Wq`1|a7k=OGs$bOzK#$R)@SWEe668HJ2NE#fFvO)NE$K=nS;zjGLUB>w;)-_0wf2ixsU4vSp}(u)IsVY4UpB4HITKC zb&&OtM#u)pM#v_}W=Ioc3uG%~J7foBCuA37H{|~hA7;AkSN*D^M`Pr!48}WlvBpks zw?sSpi1+P`v9DAx7MeexHyfcf)Rm0=I%kYF`KXjK`mK_&U#noOV#;7lri_^+@#U~F zWF$1R3`>ONhEgI?jGZsBc0yCjUXuys=2~9>3OO|1$;$)OxVeNz_qri^b zn5zA?Sw8F?9jZd%Gc`)VLP;Ci(QUjM{XKdDPO^wjjM z#Oi;@(sJ~1mMt4_&`-gG6WxVebpY}?hMi~F1%?eW>>|USWY`eHh8Z@(u;UCn!LSI! zq6~YSVMiEtkYOzhJI1i58Fq%b9FWvIT?bcoSfYsCZQV66&z+RZC%3Yp@v=Zl%GH zloI7+8^fr7tmDw(s2{Bvk}P!BFpT=$cDQv6qrSNgmr?epKW;PXuWOc5;pz-lQ0$K5 zhtsTv30H5hqSD>WuqK9WV%Tbit!3DHhBYvZ`nx*6I(^iS)~uw`OwSB9qvr{m(es7P zb}}r*FzWN$y0Z+UX97FiJi{^!dzNAJOkvxjXEU4aU>H5S+2QC}&Svz?Vl#S%v008` z^o(PNTgfnb2C~D^^Nr2udBNGOUGR z#~5~;VJ8?y&)T+M=-Jz5^ek_)y8B^P&#(rDt!CI7hOK4T<4fUq4>Ifth8;l6E z8FrCjml!t0uwjOcFpS1-Y`;t~jK+8Da5P?Ivk8VxGVBV&o?_TlhFxPAjW5}0xxp|R zce2CLc$Cd(T*_uNUS%^Hx3U?HXW4As{V-e4FdCz>b!p7XW*ZqsV_J5&eM@2X7{m53 z?0~__sxLreVmc1ZXspa;I~leEtf2anvRAk0<{dB$WK$nAM;%%8_6}1x#nRM~1v_Z4 zB6VcJ4j8PIMn@LxNPx*+%@YQrFx02s1Gb14e4=l=kh+@&?PXXG!%j1-jbSdsrWqDx zSSQ0yG3*S(&N8fUTonZqEyTq`I3>#wDAj57jY=U8v47Q1w97162=HJy7*P)dN)zR6S7j!1u5R9@6{& zTBoK5^V%LPcOGB1Y#EJ9ia{+JuqveI<}!s6jZ4~$#wBe=uexTMW!T+(JV zE@?9wm$Vs;OWKUaC2dCIk~X7pNt@BQq|IntQnML1T}q@D%QP;jSyC|?m((n!7>!G6 zR#c3}CDjn%V!Dt@;azuv#sY0dV}UlKu|UmkCG%Ol|4z_Ypk{?cI*Sp^1dRpSjK%^r zD;3Kk9E}BPmMMvm&IFAG+Kk2mZAN2(HlwjXo6%UHX7U|xGC^a3HlwjX&2A+VsWkFI zV}UlKu|S*ASfI^lEYM~&7N}WvCXu5!Xe>~(wEJ8E@9Yya7HBgX3$z)H1=@_p0yQfr zdo&iPSz@7($NT;SjRktl&1DwBXe>~(8O3NUP_v|BG#02?B8_4MT^bA2%uPR^!Dw`X z#sY0dV}UlKu|Um|g>s&BI~dl*u#*gXl40!zD-{wYisNa9-87i9m>1!mF<5%BSSH=4 z3?>_^WMYhA!wef|*eJtB3??c*;!QGahGA)j%`t42VJU`P26K~{482fDqA|%P?l1?dSb%{6YW0&j~I+vt5PvPe~w}24R$M=Ty#sh z%r=JYWY{i-ZD-hShV5Y39)@i-7`ZW>$}coAY>UBW7T{=v+hj266`*~}U9niyoy|op z76Xe}tQD-)Vr^h;2AfF~Gbyl$!2nX&#U)C8!VB<3$;Y5_yofqW7r{v z9cI`Oh8<*B3&V~v>^Q@Y8cgID`M72}J@L3_EGEsMI~hurmxh zZL*luJ;AUz!+H#soRhk}4C^x(iiT*)2MvazA=m|jQJtZte9B-{u83VS7?mqx7Y*i? z%K7v{rnHw~%?#VmumcR+$FRpuCT2O_EsZm5!eFY-lqSKFX!EFjru@<@#>>vC088Z( z?ySWeXT}`~viVYe#vL(;6RbDD+66lwU`~wE(h+2>#GVYYHe#oOtex2DAnPD@GRQiK zoei=sVm(3DO)MT{qS+ZXm}s+aXWc6X6KyuwRfAC}%`D{HOBQnqd3VlW!d@}&UNe}m z2X@_H>1^h9rm*N>(vh(?kR?yVc1!Q^)M{XuwzT%c#kve1j8Z> zi!v<6u#3&%crP(*l3`N}yTY)m47kJ!W*f7IJ7&gkVF@{}c*f_%`7ryGYoSXHqEeoOJRGv8McREdl}Zuu>A~sj9~{DmS_&AZ-!w>hSf0k zRx)fA!)h5;$FQ{wt7ljP!&WnF4a3$kY(2vo8Mc988yU8VVVfD&#IP+4+sd$Q4BO7I z9Sqyauw4v$x;b24TA6Td3~Ogt2g5oU*2S=HhMi>ClMFk>u+t1%c|V-rbIoCPo?#al zHpsBYm%{d*VAw&19b(vFh8**r1;&lOfM%!e`+a52 zPBZKb!_G3S2dw(3dZ6lost2kbsCuC4fvN|p9?%}BiPS9N-T!nA_Wyt0d4==t<)`-6 z?OojS&E2oseRKDb-M_l?mv+5<*O6U6x#KlE5A6Jd9bee~)Q-bD{@eE7-}d76(d}Ee z|IOBywk>RH+t$4Gi(B8i^~%=4Eq}7*(>N2L+_ZVi?>GHq)B85}G_7v>t<60f(wjRs z*KhvaO`q6wdsEM*hE4zL#t&?q*?4f{f8Fqz4fi(8tXZ|;-!{IZ@k-;)#y?p9W9w(v zx36EZ{u}E)v@X5w*t)-3`=K=l*Zk?~PpmGi?pnQJ^`A66Xn0STUEe_U6ny-`W*Sn>W9sTJ*5`tXO#Keznd%e6nM|NblRz~gH7tyJDx7wl!NERv0^3r% zwBL9XTlgOlNi_mt<2(v99G{pR7qv0Il z)EXla;SI`RN0&O!#)tr?)7U{LhT>NSyd7nukyJaQhqDS^PA}QU=wUCym(!bRW%O`{ zz{}|+VvGZE@Xe$3I-`#}SoepI;T0TsLt3gFVK4efGnFuW>f}DBRM;XI4bLRqVkv<) zsD0{EV}}%RA_aawrcR_FOQpMRY9WEiHuH&GE}f;l1+j?l0vnr(LoFy= z;X5#KP94=_qyn2LnkMkFEmxey0Q*9^G@nng3F%i`^chxAi99Q*bSa%IiPy5JLb_OF zZNybwGHk#lo(=e;G!NzZd{(4^wucOQgE4@O7Ci&-#>*HuOVo@6F8nu58D43jJ&08|!`E_nPm_n>RCW4r~bHI^`%- zPFsY$A4a{7D{HGBP~1{-#|2|PP~ zVO~D*tP^1;-d-(Gtx1nA%+8LVT}(l%daG!`z*fbs`MLS&8P@Q6Yllf>G@i68;Id_0c`DEXKhgrKDE!BFnkQBiX;Xi z*km5NcyCktraIQa`w_Vx74d>Au|J-;P3-o$)!N1wtZI8UhgF;;fPFq0rH^Y$qhX~K zn|m@!)gEg?DOlz41dYDUI$>VzT1K2b;mARDPfxI^O~8agdDuzNclr(3-s`!D_c(W6 zh}edHm$mOYB>&Wu><&k8Kw!M93(Xkks1b3BMZ2|uJw)H*7u79$M=j8{^Y)QFkbk!) z-_JWOwwq_1ewQi9I!$L=FiyYIFUmVj8_f@5f6q+Js>lLmgK|K*pgd4M2sKuq5L5)B z8CoSEn$blwxM;Q)%|4@9WHdvJW}VS2Gnzq0v%_dM3C$j%Ss*lHgk~PmERl^Mnwdm1 zhiK*z%`~E!MKtq=W)9IzA(|OPvuf%=G~Spr_FaHfcT zlnM;ILFcCZCRg-OQWS0oi}k&>cDo@}#DPD79$ z@k<)sQcBr`zT6fJ+TO~eKNxRcmQ>X7ma1aT+lT#~etvKd`@%Evl zqK>yzYjEDa#4l-iOWTCo$BQCUUZe?z4;jUsiUD>Bw-4=wkUEu4y!c7TGKIQ>lX|{q zs%Ma~g|kELlXPM0L0if;h9g9`TdhHeJy#R!Of*vaP5xN!=NQ}#)Ph@t``HF}h#GN= za6il74%Umax`^L@{0jWOWN>?FRqnHyf1f8afQDT(b|`!dd2%=b*F^Opj4@B-y~zaO zB|TE~V@u6NPLRr|s3MaHUEqYodBrkutfljuP!rWOGK*NDbDR*$fIK!SiF@kcH>Y_l zqlluQ>U};C^PD9LI~_)rEP8XC5QSVNicQljCnPItkyGr$Gwlft#=B#^LxTzDAYJ!$ z#ysEZ2sjFbBX+2_r%QOK-eio_8NacP-a&C_noJm5E8OLma*kSaPPt;LtqH%BI&RH* zbuq>Lv|q@3z$mwnW$Zg|+!KuV3?}*_hYpJ8D;RQ)&layP#^hKM$!1X+VG?=AKGUN~ z1RG@G5~*YbN0JCSCxeSq@_c7Zq2?J*BIqPhytM4IsUUYEiJX%{@ycT45=rEo1X3H9 z^YhLma`FKZ*~r$cw|jEpJh*}G4)@@3Izo?oW!+}U&=b+wEspghLpbWfcN`WXa?CF! zA00^GZPn|Yks=PNg2b(K`Uoj^k1b-4XY$UC(*AOe4qC3xy@EQNS0>d(lAK3{k+X>3 zi~Ww+0F6NnjGrCzc|k*N?jcckSV!-`a=W3Tdm2;Pr)Pay+>@^ib>^8-9jXDTB?})i zWU{)4=P(4=KR!B+C0&Pb;j=)BPpSS6G|(3lau%cNj0T^y>!16_B94x!ksi$qMvrwf zY$RRP?jMWTaE@%(f`PGJX@fZcY)Z9!~U zUI;UW;ubyJYppdj2N7dvZvSa(^bCo`WAC0|=A4MNg$|9{t+s=AzAMz$?z0)y$y~KN zwF9JZde*Yx7pfBM^gm(eh-Sxq8e!-PmRwe4i#_toXWu(*>`{M;`!r9~gM4K_6yqXZ z)NMJ11IbQ2>f=(El#<%bp(A}WZmvIIR=nQBQGzCh*|I$F|pbXIC z)_^9W8rRbz4;f36mQ9g( z1WjEK{KfK{YK(lg83NK0KD$7d_;v zuGek~ttP)z8O4Ve6DK`{@>U|#Q!~S}xdzM(^haJpRrXBJz0W(s7{)FZ#&;76CW zZ)nhf8m#~}S|Mt*f)MlZn;8=G$(tD%v-CAuNsU=yY_!50vjW#>mGYQRpBbW<@${kVdX`{HfiQa zo6nS40wTEYRIGZ&AMG{u)LW6Sw<6o(yKm-fi^X4WMJ{Z~w^%t5hP?TTH40vfrB2lm z22Z^esjy|D#ma@SrL)D7ueU-QhP>yZ`C`*U+hXNz*wWkL(`#l~823FpqUqwcJ)EYE zZZB*^p+l3^S_B49#JGwYS4~z%#jLyL+sv$?2aomH>}DzHvXq&%X{Tkn$;z-!tBf^S zf$g+1yvfRlPAkKktc<{5zZN{%$fak8da;J%=JRU3rXtOYT-FZ;PL@FxY;FO(VuLI`@t3fxCAM-SL6S>5jga&Rh$GzLk ztTXSXJpt0YGdetptu02+Bu-K<=A=lY{E98685=WeGf#PP*1WmQ)5fiNXQrgkH`pKU z89*B*LC5r|v>O9}lu{WI1Ez67x<#>arzjhYG%n|GI5{&&vl_^GC(3dJmDt?epqZ)e zG(yYA!HCCa235?#^KLpJ5HljRz`3)Rl>=(5%jo%1lGI$?-aaAgxGyGx8wD#^KYT@w zkt=eHUXf!=`6~*rDuW7g9|JG-*5qEr=*vH0RVz?5t28SGQN#99N_jqlN025>rC(Oe;^^=7y`yNfu3n zazS=!fP2?^e(aL%c;&cYL{$}g=bn{HPnDTPp;qO;za{Nz@@8Ioj?!dt+oD>c;xah_ z5EIB;bg^RX#FVDYxB>&(gi)`J?s#V;r$LQ7QC(m@2VVM}8+I`DBI8yeRA)OabjKnd zYBd^$o4C+yy457jr8JnhdQ(iebdw29UPUTv9NWc+vtY;-x?&Avgvay9fVBjOpatDZ z%Sp1q?s@5CuwIE9tj%I%4Pi1$m+QU3tG*>s)*+0v)=8C2ubbew<2)vId?ZeFnD368 zGwP$AG9%|~2HhTp-Jft>^(KJ1koN)%1=>@v)-@1Fxm z=_g8VFRd)xSMuKC>B7G(daU4%f*l2!`LDrr(vmDg9R&pItt^{7uXAvpQKyAv}HY`;V4v)-@BE224{#cLt2Z8{R zSOJo)qo6H9unH5uel7(^r{=-w{+E>ZgW`hk7Ocv`tZ@pdG!TpoG#!cb2hFfbJI*~B z7c!RfWC@mQQQmCCEImw;bQLwise%4byZYDhRb8e*t_SilA-fGr#J(njGdnjkv9rB- zpl`s=7rL`U-H{ITLBXw;%Cx-2lr7f*85J%WB3x2MYI|Ye9;n$T{Mdxzku8hI>^!2~ z(vR_oNY9}A2U39>JKXDMKy=1PMva%pD4q>8;l^}96kL=qx+8rc`)5I3`8wz+8QIz1 z)Q5sX|ABRq9@!zT$nGR)zi_<{`S_r8ePM0{CA%@w8Sm^R+s6iD^1qO$dnjk(9$Cjd zGCd0N3fx*P1i{w+2y#*W<0M~Rk?{n`d$b}_aBgZ8dDu7*>9!s%x&iBSLnfWBcPUe*JH_LHBp)7&)@3rV8r;sW8@IH5n#`yJaDW zk{d!*Z)Sxk)XpvGP!{T&IjHi~6ibID&X3JQI(`Jr2`g1}3)1qIRC5t3?gn{T`X5pa zo1*oUr|s%rH#^le85{=f64DzHgm3E4 zRNFvbV)>7^B3f0^c;W;4}qdWLoGBs zW0{Em_yroFq^dR+?MB1E`4<}0Ej$eJ7I`q}da(tSLR=N7ikadt~0Rw^*mH~kJOi>IF2zuf$oe)WyN@; zw?En*r2j$#?x9S}d&qr4FF?m#An(c8=RMKGvg$XBB9)6_`2vt7h}<}3sQ7z5GlR%X zs~F1s6gQ*_^56(a*0HsyAQEOcgN@O?fp`orFZG8OPzNF(20-2e@n>2@o9YLm{hhHM zGclrMIJcxPu^}?h zLai+MFVZ54rn)5aQ=o29CU+n^p3rOChSt7#U#u}QXyvSYg?e|TBjm&xkoU;1@=6&B zIJF3^)KCi+!nh$-kT17__6UDAp*_`Xl(SGQI@sUeF8@JVR1uTcWcwsY)_hwa+~Yka zAv_M2b$Ut!ENzqBagbNW4;r?Eq5jTZTZeK$-II#QhdV*_A`xrREc}G@LsX%`?v8d4 zoENnw{v@M?XbgGJYhY!en&V|M~fF<*|+;00_j zWBzjpYzIKH7Fvhi#C~E$g)@9=JTYN<3At6Gkn;gc0WTzL-p5gu?GjY&%AybXj05Qlw`NAB$wErdTT_7(>om!HV zXCis_-(;g56cl#Wpx+R6e7k4*?6`2v_=C)JfV>XI9tez2o;-~mYPA27(wL!mpX9?p z=-kCAuv&kR(lE%2QU?TLg0BzC*}uRaHDva>G6SxR`4`!U7&2j3rhj~LSlTiFA{+Za zUXO3M-a87d(5zodE(k;sJgcxL|cY%h4^V^ z^u5;pTB3V~V4bM+ZpS^mJJg5hGnT?Oyq;z5i=@E*PUywJu zLEb}xDfA>fH9RpnGJS#ji;V36dC6{5GT8rYQj{$74>E8I$Sb^cQegZXc5i|S<6ly} z739@DnD0a`&5chXlcs0M0{b`FXf*6#We`cuPfU%^+W!h0Bq7Qf)uPxdL?nHDYG!(R z68w0y%)dzcCQz@CsYL^!MarnMIqT-4TU-}|c0yGf$V=*ascsU>ViISk$0(`n-{iz* z&{5$?9bR zP!)En5@guTzsNuf$%)j`%L}{k37G{{MuAg9Ksv0>lrMc2Qp zK*@t9kXN^10hIJyRH=6_j4z1NFKbxtlHA$?I*EjAMTfi}-6w2E=0qzoic{U@67v_a zDcf~m z%f#&6C_{6jP{902hSwQlH4r;Fadz%>V(#?#So1eGt|a|` zlf9K7FOj9LBvr@KqWKqDDg${XxY(5u;npIp{Yhp@L9#ZfMH{We6l2SUQ0SBlvRVw1 z-K)*m@vO*Ifruh132I;IVd4SuqY`vTJjz=T@&a8E<&!D62tp23fLevFjrgun=IWxr zVQ6GxjL3^6`iv7}WWNd|2UND8-MG?{V;&Py=tP5z7J|HIyTU8>s8Lnyll(=db3tAR z@?7&HlhbJX;+2H=vDC6SLS7VryqYl!x=@j!WrH8*JSF#N)*@hN5*VKyze@%X5 zfxJXz7+TOFHxrc%AXhRCchaFqr2xH~lM|;Fu#K+Fr=-{9N*d@Ml<^(t?GIyly4qC~ z!{2lOr`!{GdWM?vb7F$*_E@=`!l zs%fZZXJ9$9Ze*7Fwo_BXXUFEQ=5KQM*Z6sL%`#~5CWkNnSKtKJ{|E5DOSJ$0a|6!{ zJhc4tYu>bGeocJMf0k9Q`OoSns$XAyTlM=^KYR6;s)AKtS`}XPkCl&97FT|!VyvRC z{I;^cTp3;Yw$k>}e=51FWM4^DNk+-v6n(b%{l(8HK2=;>Tw2^)_`agKqC`QyW%=~ob?`OUkHO_&|^_lsZ-^%!W##=KU&FIP4nekZq^U{0L zccwp-c5m7jQ$L(~I(0Dh11WD#iKOgE`ObnJ+YzRv~DgkJL zpn*=?^J#lBh;3!gVRr)zsb5-oA|>zu$oV}RV~F(Aq@U#^!JTghFNG4+?Q`=rYN-Hr z2GVxvrkRyn#eEZ}#U6{}00w*gs-Y3ID(p&$2KiNGsglerHZi=U1gAg({Hbm-J9+cNf28RFTiQ@OMu0`G6{T zXgG<}GEi|I(6+fZmQmUwMm5nL7~P?t^Kw8uPz`vkvhlME zQ#IZtsYr+Tgr;JfdLW!rOrRnxt;>0%?wYz_Gl{1`^pqyvC`R_YLr@^z?h}`q!uVDj z8yE;Sk)BlO7}xYLZs5BY1wjhC3-W@EB%T7%+coi86@M)i_@d>BtCexV1`@tMfT=#3 zuzes9(tvMsLfAVHhy?G0U_ukDqc=BxnpJ$RB0;sH#S5M&HTOdP4o%)ZI0)MC0ZWtD z4-O&+&O^a~rocW-2nz5Kixjvkb=yep9>^Wj~6Act=onqhY-4y`t5B^4K;;)tfg zJ~Ia@@TrMYp{XAjm2{1YBDnxvy^HI@`23Z0jffID4_)1h>%!-UE9n{*)y*_?MKoPZ z#$j-Naa}E<_|8I8T+?J9fP~27(-LV?i>m1WB+Bu-A=sq}+J_=R(5SXZW(G1bO~yXu z2r~GD=dMYX<0*?DltgOJK<%!@)uL_Vs>S$8Hqy4Xvvrrq>)Y=Cs!CN#Xb+zu` z$sz|Tk;7Bayie0?AF>3^_`j>!-eVxC$CJ>zN7HMcn*^n3DY<$PUw3_=({l5N;S`iM zEUpxN7gs5wdlgFWg3>lkseQr{JjKh`RSHiRJzpL$##ISFuc-1gR5ocU z?Sq`)CB9DSD!siAR3=%6Fp;C9(7H|28pTi!{ZiFILC}g1mp-kF9_~bXPeN}{(`z62 z1ikAuz4UasJ2l95udku&FAd``vO_as9|8p<>lh=~atIWqWejF+(ahK8LO+ir|7 zHRq}hh9cDosNS%+>YAjglOGmEsz;!@R#R;sAO)}S&Cd1O+jk`C6Fm%#n>CI0p;FL@ z?|808V=t7XN>4!PMop=G&=i#7E1#=0=|NMJcoR(&^ ztMQG?Tg0mE$uOt-Gfop6wbw_TzL7gDl6-K-WkH|S9^Xkeo-;}h34WT%_d6yda?B&S zLB*h%DOk&8%?}JG6CM#<8pH$s`Wdjn$3Uojgx(dNa&_a`m~ipJGHL0kWK%+P2iQpq4kaVT$# zs6U(z$^d18sB@nUqOpZs5RJOzgJ>M85Jcm4#UL8wECtcvZW*W?R0&!IssgPBRfE=m zYCwzq>@jVWg#Z09Z8-5Da(#S$VfJk2@Z{XM7)qisZF~G0oKN%kwLMl151ztUwLLBk zEjM9Y+8%?3mEVLhXnVXFZrzyiW_xTIibtK=!>&9R9i8L`9DR*e(U!GGDeaL%ZVcWY zM~0ifq2tK*m@z!Psxf1Gd>C@SQRBn*STOuMptVG=VJz4lfQ6BuKY;Fj*5bcb>*)szqh=%e5CBhWgjhjS=pJD>&m{h z^35w>U%GAO_ewum`iqkLN)MIRl@6DDrR3cu50reUcuz@1$v2Dl7d~2ickzMZ^~Jv^ z`eM=Bu}{E>qSm5%TC zzdZkkd3iaH4Z*>`4# zveUA^lJ)kiXJ;MG+M4yN%)iTgW9B`XuTD+Ld?MrFjN3BSWqddNUFjFoccuR_?W1Wg zOgog8m-dC!-&t`Ybz|yxQ{Is>pVF4{s}&!`{D4&}zP|jAm(MNVwS2|$CzdVt=6_o6 zwW`r>r#+16nRUzLW=L3PoH&fVvvDGQtUumNf8uQ3c(b@-MVcI4?NVRCH9y~`Ho?;JeV{KM4~hh06=Xb^5Z8?8TRG7| zOBC0P=pS>U{gx=M8PT_JqA^Pp*No_!Inj8$-c4)0NNYVK`X)|v&=SQpBZ>~L*w@8~ zaK9yrYew{qoM_Av#dVuMU*F&t9UAE9m-&jn65?v7U-0#;po%Yqf+QIa?zMXIs6zhG zFBuKeLVedLHr|l{BmD=Av{>e^OG|)B?(h4hDSlufC z&o3!c=Nhe7$>pS9$4HCR>CzHt^Vcq~^-IUFr+_HPvBCXx8aOVQYT`A1!ASR@tS0D> zM5LRoUS7@0g@i%KVJ2sHJjB?0jFppF3b`Q31sOSvf7lNV*kx?!50c}G{iA-lfg?_2 z;*p_*xMB*>EB%6<{n2A_k-|<0imP2})`C`nzJd{qV{_(yPf}bmqL27RaR8qq+A$Ep zSrv3y7pS4Pi~f4SFigDXZ~`0tBpPtcUrVR_Ele`JFV%Q)JZ8sYybpQ2p|<)9(ZzUQ zqVeKL#MolIzpL@$RMbx8FzfG&HC`Ns+Nm67d0(XQ;tbSIOkrXFpAsofnsT^i` zU#Rio#M4gYFw6S_jTc8Xb}ENi-sfw)$hS`AFw2WU7uR3p8%`||5oURx=kW%SZ(tM= zW_cgbc#&`56%l56pR4gwzA1-U-sfn%lyAymmiO5jFXbD4p72AWf(cj zvMzY6D!<5CmKCQEJH9&E1!q~-Igi!JEjYU{xg~%$4Srf(e|I3@)VSg-W1L>f@?ls{ z@Ijw}dtk7YY1*<@x2?^w2@l1=7?aE@ie$SWCDSwYURY=b>w^Orq zQ1Tq=4M!85)YQjeC0+4>!B~HbGk&XaACTP9Sgen>)9#6O9BW>u7IA27aml7Qn(Ap& z5d1Wb{gNY$L;bMN)6k(4xTiGxGa<^7yL5$BcZKn{CX1_fHJYLs zZd0OSALCQw*zZX$MpUzOO!=Uirr=BogXv}^k8&MJ%wf9ISYl#shNLOZ^?rdSU4Wia zn(fu9%!QPLngL8?l~aDmfc8`?iCfg96-@%uRfR;PE0Q>w7#W>BPFxmdGLC=xi9FVu+@OgWMVcG-Trjxte#ea)G#8A_ z(wvY2&8$5?3}*k-G3!qLN}hU`#Y#P&a&mwsrsQc3*mK6WNn&^ zO!J;;f;G*Cr)l9d+ngq`)7pbQAez!22GPol7^n*r2OR`;gL*-?f(AfCpd%n!!E-z4 z4p0I#3>pQEgHC}aKvSS;(A}Up&;sZ@=pyJDp!-121U(D%9MA)x2SG0YrCpLaP6d^o zn>-NJHB`;%HLiMJ82?Zv&>S|>5_&5BUbA0J>e zh~uvlIM@ejm%J(z=GG?A0R9iB~bT!aXKJaa>+@IZOuh5(^6Ax<8mrhq`G zb3=#iB*OTocc^QB0T=8+%j{@Xixa+n3Pc#w@3EY>{{ONceE9v$ww+oz_8|x1Gda z6eYBx`h2lgxE5|v^w^A-xuYbsU`3OcHocrvN7oLE9)ys12K+&Co)dr49fz1yX$caC zBn@c+L%H>?Iw)h*VJPzWVUb_jL*`_XcuqaRC=N6g$7T5vB@7<+IK}l5?;6GGh*4Oa zvshH-_hZ*3wdIT_)Dgwg*4sCb2nOW=Ey7I=)q;R0=5PXg{U1caaLSH6WXesJ6Hm$y z$Ff`2e9w!WV-b7`_en*<1CekvmgqP{MIqi3!LgXmMm)wAIbM3GwrK1yY6?}U0rVMg zxU~vI%ONL4L9_5Uqc|w}sM=y${b*O8s3+xNVe(m}%9I}dAz#*NHP4X0vI$e_sj3on z?tqtAaf7dq!>VGS%G7)Z$OXTV{pz@8;hKwSx$R;`nWr;%A*(&6E}vF!>Cc~Y-k0Y# z-F0HiJ)N#bt%QlBihz51Tt0cml$jEFs*#Dcd9qH?3Ts8nEv@v1>>m&{n=h+$=NC^} zgTK6aMMoScCCKP#1kfYa5V7CfK(uF0G&AIr;kbL{bIWDo4;?(BRY|%l zDwQ7O)dP0rqdk72QI!0>@4OmNJUqpy5j7{Y$3QfS*sO6g!P7zoOAOT7-g$2XCpd1A zu`3)OgZ>~kFfT$G`GI3STC>e6q|%1x=V9YLhqMoQ8GvKQT;Ig&n@zlUZaqd*g;oQR z^L7fYMyn{YMh&Rm4{DK5GAo*&nic1j95SB^t$0Lxk6^$kJ`nCWq&0rsh|$yPnbcve zwCgYzc6wKu$L)!tE}mw`!$n<4;#sHX8Kv2)fqlwE>7?F+@8#h(h*bkw%PrBe=iXAb zjP^dUZ)vX;`<9kt_APm^sR)vNOM8O||D3*0l7@dr;tJ2dtzUcd=#QExK-PQLEk$VP zP${w>bG=w-%}O2C8h<*hwE^|lKIR#CIj)|gSf|gfTlt2awiPuLX(K>S+U3!Tv5RSC znA(Q&k!NJJX7FGH4M_dmM}HA?ntten(N-hqL{Ss{BH4n2y*&2Uu%nvNe|3$b-{n$I%yHqdKuY z6E80ASvI4jxw}|gwU?v*g3yxTM9At38P>E4K;)v4du|?xTFY#?h3w1iqRT1AHpzQPk^$!ayBXp)(IB#T+A)*NQ-$=4sU zMQb|$IEqsYonD;S1k5W&WUOiE@DaPYC@{+dyJe6h+UiB+7kxh%WjTm2PIo;HtAhyWUOlNFIqnuZ!^^ncY^Be^XeHCg9T=% zPo&kXHXJTJiFDvF1hq%NS9{yl2L-@ssj$NVjvehGa3HPpha(Ye=H-vC`v@XX+?&+R zt4^)RIQq5cz=5>V?m$}a(Y2=D+rE2v=yB5@pZ zB_i?uTU(5)R(T~>frzyn^4eQyV{o_0D?Crl7;A~gn&tIicYiR^dpIuZd{IWpBGy^L zo~l1=H0Y|rI>WAbSk~h9ms0hl2u2D)5E5@C|gAqE1Q~-YovvY z49SY$l4Si;?nS~q^_VKs$vV>HYR3#YiV73FUMv6RY+9Kx>+875us(IGLT}C zn_9W%OBdMu`3_JOY83KD%7dtEPU!B2qw!z}gWuw@5-%6DP~X&r&a*Qb7DwEKEc<(eJ=6d%f4YCvJw(VWOBHOXnB zZc1dS^HL@v5K)+tRe#gpbe%OO!}{m#fp)W@Cr%QYB;hOYRLpi)7ra%rV1 z7Jg=G71*2}2AY=VCcXjBk}95Rx}2+8q($>pq@}}3OSnGpIKKa5?SIM%TL1q5_W%FE z@{g@~(VD?ERcpRc{f_E;s(+LptIn(bht-!?Ppl5D{(05Ms$N`mxN1$+H&?xF)%>bm ztCp|&WaYz^w^we!i2(1YSg6=lv8>{+%U@hRP+n2~FJ*5iJ5v@c`^m}=tbESO_{#j1 zUo3rf>2T@h(jQ<4fQvXUAhqO);+Ga5DPCRt^`bWyO&2v4{k-tQg%1{X7Zw+Ox#0H- z#tXI;45j{A{(bq8{LK7M=e;DaA14ERDfiX6cjm6e8vl3a+?x~2$i@r-fQ!U zRa%HIvrKxuf7b`>M>n|xub?0t{AzsemT5aG<$T#$kq7e=zT2O2JYLL zkz3=JLyF|`ameAlh$}{}nvp|G$*~7HTrqO1{c=c=CP!C{T$NuA>C@!sijiC8mqUu= zGIyj8Z)aRFa+Qo6+DA_MWV4cytMJPqMVcI4F>>X8IiyIFqpJ?Jqpda}zKoGm?LFbE zZ1Ui{gKPsb8dfILP#^besE_aVFVHXbYanY4QeJ%Xm)DGJ2`?M6WJ8?YVqP|A$p$&u zB3@Rd+4Z?T&g500Ul!d?xy1uorw!BzZD4l7DDcZ+lZ6gVP+T&S`K)Bvlnisb*5vsm z;hn4(;45ZY;)=1D>z5|8RqJh48J6NmCvi_q0kj$G2Jgm&S`?;l95bfCBvpF(=| zCFp_?OJT)inNwm7jMxfROlH3l3o&BLSuvRtN-Vg?U-vBYi^-mxNF92`Zr6?x#-bh3 zaM1=2AbdC|t-8Vh7~x;5R)i@Gd!}UojPS1*VbN1|h4F?F03-ZMMi?UmL0J^YZPDoj zzzF|>6^_`#02tw)v%(#=FaSpQe^_A*F6n6&qfJcd{~05U__R5)Z6aK4jO0%lNkmJR zq)SHfC#+<|l#Fna|IJEvn35fw#(%#L!@?6QNcyQrOC*^FLY1!=~h6 zPVzq(NsK}1l61+~{1Gb|HYLNHJ^fNtcYx?=X^htaM4b zWF)`MN=8h{2q*b1R;1Ixy>PR1=}%VAhC%_=Qmi%!=~h6 zPV(!lw>5`Frl9h~@k`YewUs%ZwQ?i4T z{AX4&Y)XbX$$w%b5fa(TL4@#Gh%T9QewC3#NOVcMWF-HQm5i8@5l-?etfcBeNN-UO zagtwVB~=f?kqmQ^Ut%Ot-^vCZBr(`dmrOeUft5ULN*?AU|DKUV!gNWxWNdzsl~lbC z=`ETVoa7f6NhHi`&WUse8JnMHB@dgDhdIf=V2~4jM!hYVn%^!V#MCZiW$X)8|?TC zR?H|Y++fF_vtmY3;RZYYj1@Br3X`_?vSLOtsc*7Q;;9mwT-d`L;X~cxiS5S>6#UHy zy~l4WGSue^;crIh-F~6I{-`U2znS6Gclm_|k9Nyci8&W^#mK$WFV}C#(G?^2Cw{p> z%!CnMDtn!r+&lboG=s*IqbtT9w)n8aAL}2`|d9ujB#?MX64^OTHc6#37LllsvVhtnT$k$cC8qYa=6od;S zRlufk4Cma4h|46h>Fheh)W#|_3>E}m0WcH?M^+S%Y6dITF$h!f$k8z5t-#hWSP6sW z0z*-9?200@n!(C73}yviK4GVn?A!w8R?f|@XRt~Q8&-UUz{cjJtauQnhG%OS>^uMR z%U|1kS>U6Xo*MPyocW|5E7LG1&gH@;C(8Eh|u?FNRj;n)>< zzK+2n8V0k1Zx3O!t}H?|HoSqsVkQRhvEhBd=ve@X`h|RsGuUArQ|TQdeJIaLR`_y& z!EVr15Q{;0%RAJLu=m6Q+DGgIq z-Snu2A;^@yvl$F_M#EJ0&W-~^_A0wF#hDCtR>M@096t#RkG_yqkN$W%gH18mX<$_6 z%!~BO1mDeIwU<3U_$&gm9vGEpB`Xp<2U#22tn;Y^uLVZsS;>k7&qLP6HfVeh6@2Rm zLxP2@O7J<7wXm%kpHtV>5Qe(W@tNwnS(3G|O%@+)&#wVSQNA#qn3W}CG*QoBY1kFX z=9|9c$;y&3n%J(%IvDM!I@ghTzZeg%=P1fO?xg_&^ zV#0eL<%5sPi;n%^nLq!vgE?j6-rxKAuc;g;K9Rf}$lBO1AnRhPY`hS%R1TD^NJ=hb zZR}@|bug!FJfCDy4uq^K8zm%bVc#QJg*j#89>@+)N!jsHEGQYDpUZ}LMWNqw6khQT(nk+Sj z=OA08$vW8o(`1Jg-~Esc1g1}(m1P5u5gq%IkN=ujI@*p@MG)VGarx9V1k!xi8q6uS z`N}kG^uoBPPq%Bb4pz^t!4O1H08 zWF4%M;VTA4RT#wz|ACA11(inJH>V?qIP0 z`1Q|zZS(#0zW?!IAJ;IEuqkYetLbyFA8Ps>td8OP8N>H^#>VFu?4u0!VGUE=)%jY@ zu7mwVvpbDmHMKXlX?za$bB6C9G#d`z7d31cJzmoHw+!|f4MQ24$2)O;t7g~1-ly>) zD+S+IGz_8>!{-z8w-~Y#`*+P}hzh>vkHK=8wB<2a8H1HG zSOtSsGT15xt75Qx1}k8&LIx{huwn))VX#sLTghO@80(+ zCWECi*bIZsGuQ}3r0 zOa|NbxIYFv7_5uI4l>wA2HVPDLkzZ^!5SH?jlseU*2!Q87_5)MW*O`pgWbbmue{`s z>8lwmjVV`a8GTzA>{bS=W3YM#YhtiH3>Iau{S21PVCxvHmcjZN>=p(KGFUT%?PahS zgT)!Fo59vI*Z_lt7_5cC_AyuwgKc22K?ZAJuvP|ZXRuxd+r(fU47QoUA`Etz!FDp( z5eD1EU`H8jH-n`y*xd}az+e{{>=l>%&-7yqmdZTS8H~OM8QI@qu;(+_y$rVcanHX~ ziG|Ur#N=4D#)r95mMwobzqPD-pw!{+hXl=#*Hn^kRZ`hYq)Hj`LMe5+-99N*M2 zy<&2#AM=_VY*Jx|Gz{N~1>db2Hlwf}2J2?9UJaAe%_heNfXzC-2n#cb4#KLXe>7K^ zEQ>jB3Zpr|gwb3!hmSs55=L{>98ApX0w(63DOs6{nM5D>X4Xg>athky*hvOE#b75G zY#i9E(nk~8D9*PLR-^hoYN8v>WwSAwqh@0?_sqc@ePh7JaO5ZTqlRY^ZnV5JOJ%wXjVwvxft zFxUnL8(^?123yTwH4L_j!KxW7hrx0gtdhaX7_5T9vKg$9!SWfbgu#j!Y>2@QGuROZ z8)UF%25VukRt8(kV4E0hJ%epwuv!LN$6&n-*2iGCGFU%@g&3@X!5SH?iNV?!Y$t1ePMO6oI7(EJa``0!tBCioj9? zmLl+57J-`7`V@>W(zoqjtVslh1COZv|I5~VrTVqiC#u(1Z(jM`(zlh)ly;V;m%gNA zZOK=QR~8*F&M1CM(ea{l1s^VaW#KOi-kbN+{B!v=`KNL(z;Dj%V%4D$LrK`GL%rWlm(iGNUx}dl?_b9{p1p z;f&IZw)79AzchV3{RL^c>0e9x)3i^nxFao?mYVkE)VE>B{vm76{vV?|>h0M7;pLAk z|1HadC3pQ1VD^!JhT70V?Y-Zapgrds`90_Fv3Y6F`9^-v`HMC$?K$7b?>T?L=A}L7 z8~Huw&)dAT=X@i-=lnUFm-d`*=$2Vc~QhbAaeDAb*DZW8IzIWKX6yG2p-`h>z zdJ*4xKEAivyc9EJ9CzNvF`Jj-P|wHVsLe}psORHw#O9?qzzNQW!!|F)p&oJA8dxtX zduIq4JJJo9yj}GdIuSCCv)|IGxegd?Y0j=++ zb^5eNfd1QWRl#*QI8&sVjueo2umutDu5fJUmMz1zbz4S2qqViQ%ZBSl>PFiG>x5b- zLC}Ndo01ge$5G=PU+QR)8ukW|XZUIIXr?K7%0Wk59UW>)-xX-IrP07r(n$^wbrdGK zog|%y1NFA0la?jpSXI-CaZ6dC^glZgvbCa7qWou1N8LgJ*uBTy)DMT}*6v$OKub^U zPVHRUEi(T1`_qNyfD=Lg!MBUq=g;nSbBwY6pg;fc(sr!Rj$su;Cwz+^zfn)O66hCGdw z3s+@#pK6`pWtl>4D&*5D{YYu!h-^C(Zogxz^?HZ6_j;#i#yz;4IiseI;)&;igv&>>Jas0Y*w>I2;h>IV&g z20=rh!=NLeqo8A;+d#L2j)U$1-3dy7PJo6%BcM^x7-$@H5_Af58Z-gA3v>oF37P_( z1x&tdM@Yz(DOhv z1)8QezX0??5KVu65$MIB-vzw{^bqK!poc*(1HByd2wgcK;@tcP$g&;s0y?iR1I1K zssXJ9tplwGZ2)ZqZ31luZ2{GSwt}{S>Oi-Ewu5$n>OnzJ2-E;-1T}%0K`o$GP#b6` zXcuTVXb)&FXdkE@6b5yGBA_TJ2I>TLf%b#qpaY(8x6$V$K=9PQ!r!M!10!b`QuU;dp5X0QEsa52ou2U$G^ibj1tnEP2J2_AUIy!7uu%pZVX$!qJH=op8ElNfZUr{0@`E-jru9MFfQ@4enDXc}mRwOj zO%R{LBr={z3*aShVR)tcunY!6sc`umyQg7eW{b27v)Gn*a_n~SIhfq$cXBMsU@-(a0Z#aGT?s~D_`!73PRHG@?$ST%!{X_(xacyg?i!B#R@v4)*h zX*H8EJThGBJ|C>zHaY#)R5G1#pdCbvYM9BW~)RtCF`!HzN5 zCI(y2U|Sfhmch0%*k%T+W3XEoY&(N(W3ZzPc7(y&7;G1V?PRds47QiS_AuBE1`9J- zJA-vFScJji47Q)ah8XN1gB{SYc~zd*Fjx(Ptz)na47QfRHZoX0gAFj)Ah21deil#Q zOd=E51V;VnU2*p8Fug7&?$ofkv%|BLzN`}-pMzyHSPrmRN1xg#evO8SHNdc4u3=&g zFt7{_n^zmQ*J#+B+K7D>gHbo zX$HF+*sP;Z#ii(yhdFV1fyU>=B~9aV;!>hvPF%7WEQi4|G|Y)h9)lHVm=l+^C-6SU z_f;w{&i+rgVn1UWJIP=@4A#eB#~JJn2D_cX1{iFR!R}kV6ZL*Yi6)r47QuW_AuB^2HVGA?F<%Xux>z`kVz8qO zc8tOHGuRk|-By$Cdp>Swu)PenkHOj*EX-iHT=Lu9&R{zjte(Mw3>IRr12ulT2N`UT z!G;*@FoPXou%irijKK~uST}?9Fjy~x^)cA34A#$J0}Qr@!O|}KW17xj84Q-mV0YB` z_1(!}2?jgCU~4b=^{r;GY6e@wU^NW3j=|P5*aik0uJQXf!eFBemcr;uWw0~`OJ}eQ z2FqozOa{whuxtj)VX!;~%V)3x1}kK+A_gmFuo4ColE3|7Hll?=9u!KxVS zc#XfjG%$RP4A#V8%?#GUV66<+#$Y=cY!`#=X0SaBmU`Kr-p(37*2Q4^87$6V8!!3w zZDO#^47P>AY8h-RgKcB5ItJ^g@%tBHuqcDY7_6UZ3+%q^Z!7O%u)PenkHOj*EX-gX z3>IOqD1*fqtdqgI7;Ha-#To1XgB@hBLk!l1ePMO6oI7( zEJa``0xAM0u>SvXd=b8!iuM2Vf%(9L%Ram2^=mGyIkcu`&3{#YqWU$}Gu6*s6|F9> z{{HI6SHFDq>D9Ye7p(q9)t^_rsOm&jV^v1gS6BVXs*jZ)T~)U#u<8qyZ>qevvafPO ze^~Tr`DA%}c}e-V%idr1P}x{nYgta&lPlk|^7$)|udH8L zRs6A{M~fzl+KWnxzFqkK!iNgS3R??v3ZE=^Pr>sGju+Gyq!fH9|E>9#@(1%b=l>}0 zeR(g)JCe64@8`KsP~&4zLwS?xT`}H-j!&5&j?gRUzOq#-&yKWutL zf%V7YI#TbLxz+&GEyH3${Imc(pa;NMC`W;K>P5m(bv5Czi-ufU!?|!3#lx_^Sd@}4 z;3;1wmjY_B!sZWNnWsF6$i*Ai7b#8A)x=4ym3yiWj%Mwt#pNy5DnC>w*tEfm3syE> zbHUN75{O?-6ztN%Eq1aOI>FO3@RV8T)TDS#JuS>&nmxdu;76X(5kv|>>eOklk|XX2W@Hw~Fr6V}2U zn3XH`)Z0ZZI=+@<*~@6;5~t|^zM|u&W%EHjeag_aCyqDQr`ADg=DKuqVzJvbq-rdH z2^gmPayg#$7QVJ}W#+|kYh4%e!dQIHym=UN{5rT1Z*jF#yo~kfj_#|8KX2h=01C|r z8Ozs`y%v}xcniH~VV`kzk3V1K+B=mGhLx*HjG^7MWnN7Mn(g#q4yN~j@|F7)Q^yB$ zj#`RlFxMtAcI}DeO^#R#PT>HS%6aLNFNZ6pXOVbrw^q}^g14GZ<)2(o*U^>Ozg4YO zb=m-EJ^jqwwBcxPfBgk)M^mfTqiUQ#H93h9`>HT1e_}F*d$3ms_9@w>f}yGWFOzfd zSRXbZ!3Heb1DH02pT_#1CTri&p+kwGK5#cKG^mW#xc|fCj`#Ep4JJB@Vw)E5 zvRe-Qlg*2bTEH9R^!}sC+nJzkr8@bveZ}Ub?UXwC?UcT3^CE5FWz+U0o0qmz>g3b* z4>m7tr-WUSxU_xIRwfbIp|2f82hOwc9Jvp~-Q zJs0!<=y{+ALC*)h0JIK^A~%C-L0duFKy{#7K-)n(K=q&?Cd~H3+e;i3hD<9fCfQB zpu?aeprfE;pxZ#VgN}pl1SLQxK*OLB&?smOlyU+KMnP$ybWjE;6O;wY2IYWqL3yBj zPywhAR0Jvpm4He?D?w$Ta!>`R60{0b1zHWN2CV_rfYyT6f!2dIfHs0Qfi{D-fNDWo zLEAuepj$xOK|4V8pdcs&Y5+BYnn2B<7Emjw4YU)q3$z=w2ec2=4hn-hKoL+B6a#gF zxd~H3+e;i3hD<9fCfQBpu?aeprfE;pxZ#VgN}pl0Nn{nfKGsh zK~Lw8d0&0ne14*$&WZAM&J#8-)j3hV&iRzhOLb0^uX8?W^HQA?6V)IgbBYb>6Z1YllBYb=x zw|ObP5k9^jvUw@K5k9^jw0SAM5k9^juz4xI5k9`}w|ObP5k9`}GkH5id^`B~{)Np; z@$KN_`{y<<#kYfx@1NPc6yFX$zVEepDZU+ieE-zurTBL6@qLfYOY!aCBkZ&<`P%*XdnY+j0Qn2+x}Y+j0Qn2+zv!jHxs{K@>ug?%Ln|ML*V?=k zhgLogud#V44y}9~@ZnJ3R^HMo$;mg@8 zY+fp7Eqr_*v3V)JEqr`mZu3%nTlo0C%;u%|w(#+N*yg49w(#+Nsm)9AZQ?4>QA~{&0y;otd_z08SEAY3o=+UgY9Lo7=y(btee5sGuQxwg&3@b!S*p& z4})!But5fEV6avOYiF=t2HV779SpXa!6FQHn89{3*bxTX#b8GnY&V0YG1%Pw?W7169S9r zSWsd#_UX!oBt~PQF4iD18XI-7Mv2kbsf#s9jK)q~tXX0-mg-_H5~HzI7YhWi7wPPD zqmI=l1V-bpE?-b${W=zs*no~TNNiBY8YM>Kx30b>i5=FlW{J`GuFKaVF&gi6u|S}K zd=BbZeL`R~ChYPBB}QY!E*6p)jTyTbPL&~jG=}VAjS{0VX%}mf7>zT#SRl|yvdubH zpAZ<0MZ0`KiP6}!i-jacW7RI!ATb)dcCki@jp|sF#Kv^2Sz`2Uz?E&07=0^nu|S}S zd~VTY>k|T_?+GqnP-66b!No!nqwftahSPpXAANstF`R@%7=4d$u_lSp_X!tkmKc4n zaIqGN(f11%3j}al!R&Oa>9fEd(D{N1fzdY)S2iRu`Uc`+4HA34jx|c`1v=Iwv6K^9 zel$yrz9+c)S|paHV}U>m`P^jsEU_2J|o!sr`?i#14$zFD|fqr~VN zhKn^xjJ|2O7`knwkG^lX7`n=Y(f1A)3j{D{Wp;XJjfT}H1XiH)1tnIfV$vG?mKc5Kaj_PO(RUvg!}fIK^X?iAt4|1wzAw3aL5b0~A{PrujJ_SYScAmY>R6-1 z=-ZOZ*Ca9e*5qQ%65F6-EfS+|Q7+%uS>YdjyKym0JEU~9)o56KLSUP8zM#Z5>sUx) z^o`5a*B~+a=H+6I5~FWmF4iP5`X;vYTZ+I^1ePMO6oI7(EJa``0!tBCioj9?mLjke zfu#s6Md1H%1TJI!Kl=YEkJI}9P~c$Tp=Cd;{@m)rRsXu`J*)b$s;8skiON9W0OK9i0 zB;`#h_oqCSWKDAuyZ9Pw0n7~n3{_Yiw#8lf zf0Y{pT;uBRn6Wv4VO?8bsd=HDI?5j3Xs`Z8te&CAN?U1neUZ`>T}_;>dG)s$8O_>L zi;KPb8*!P{PBsK*SuiTUi}TFcj`)I zk-wpw_i7Ry{o^WufwPB z+MPGn%G#^HVPmgugQ|}!m$77Pd$)=A(Q^E^00iA_obIbh0&l@y{S6C^x`kw~g=s7oGNAIU3jSznSCed8O z#!e%9_5>G+hpg*yY&2!HNds!h#n2^eSR(3;cTmQ16t2kHSY^n@{NU#Z)gy`w%^~2L7y?(BuvG;+4^!1Dca3<`%;b7wWM+Z1V_J{!t z-RKbm&aAzM9Lzo)qX?WU_Q(QUxj7>XoN;@vIT*j0qYa!3_WpBl;krg3I2-n!bg*&5 zMX^o zIbe^5z=4}R8p63@kC4EPn><1S3&}=EI^+n+$O)`K1&x8mK_@|{K&L?ypu0e4K$D;; z&{@zlXa;mQXcjaFng=a_&VkN@QZA@$}BXHIIgf-K_t2Mng2y zPjNKl8aiiPzTuX|8i-uq%pUka=&=EZ*AIIN10TMv#GlrI4>Kg5>BRz*yq94Qav(g| z=fVrmQyJv&#ph-Ya+u+`zCn)1@%tc_{M@anU~X#Wj1AgBIETLTQkx!UYB}rdS&{5r#+T-F0Cl--&2pTxFN#o01pz_DDUmHmO z*}b*UZ%uCvo+jz7QM&0(LF4IhP$kmb0n&eV?+x0nr}suC=>FxL*!e|B#U zCa=FYM~3NbN#7JApb{8u2I)V$cL&2ax_3uz(2JTrXLN$f;KFW@{t||Xt*XD`moolCFF8XE8~Xec1(m{)R*?R)dxLQ1X7&cj zC2D`sSE_xW0=Tmsr2p*RAzZqy-XYmMb3%R%>wwK-*lVr|*`#KsoSWGf4m0 zy-Rp;6MC2A3H1l)tLa`)KD?*{=|8)-2~VD;-X?iRJr??|y9bm9&$fc}pWXX}cQ>#1 zNe)prias{)2Iaz;Eg=18_eSB+&F+noThzGtiNdMWrQ@C}Ld#A9Fq<4BK zCVQu;@R59_@=u|p{G}2|H6lHkR69^jMekUuxamzoFFI;h(F>p28LL25pw*yi&>GNM z&^pk1kp8p3)d#QsTYUpNwGvyN*3yle`mO$ork`T(^jf~vM{jud6tRDo{>ERld%8#n z{GY<;R~et1**!JGab4ZhtYsU;Q@cVvyNJbAe{a9a zNIV_i+s%mBGYYjY{mCb|*x%L>iI?gR4Si2c@@@Sp1L1u1zM2Q-n!c@@sdvn14f?AJ zfc+gE0l4Px=vNsD`2;_G-_gwg8P*qzQt}Zl`JJ$ z?Wx7Z9&tfjX7z_C>8$ug!twNcABU$&MqKRC6mVY8Xo@{j0(I9vQeuySK3S{g#8FBUYEP9yjSK;57o5UmnT z1Eqs9K$#%@XZNZxZ~tm%z%R1y>}L0>uW0&d=vABZPoK&Rc>AL-V*mfK_a*>#CS|$s zNz&Wty*vBf$z5h(uUx%;>#^!n*N#56+t&^eWzSa% zJ}{OUulT<_J%S0qQ=l@~jhofw`HPDSOo$*Y*~Qj#X55OqJT`8nju49oQCmdinXCUmx;KrT4bGJbny$%f%qct4tOR zp=DGvvVxmp#Bx%FhVqQBIqn8I+}cP>pgpgYild`wwDZMsCOdAaBTJEPTfAm_fJ*KF zr-k;K3KpxpWq}}Xnr!8jF{^P4dbQdxge#mANs<3avZm2WF&zzR0oPUGO?6fcD2Xm> zG}I@+zt!+cwY7h{afN>?B|-mlLE9GL-&P*bfNly!)h$>yra*&Xo}n-_EO>+|P`GRw z6uW5{sXUD)hP3qRiEQk3zGWSqZd!Bd?9h;*nbn8{>{O#FV~7Jc*<2%TG-n`^wo*NuN(8!}Bz5yfk1fii zu3CjjQL|LnMBP)#>!`%9q*Mkuz}2ksTye5eva(H77<5nJw%vEhihRvYR8llz3g-_J zB^b;GPmb=iOWso~O}(;J#!Ezn4j->hVVxzeOiR@8eW+Qn__g*<_8beo}^ z200pB>5lRg))Y=&+mDhMQq5}jNL#!41%)(Ac&sG!8W6o{kQrgL`L%kYpoa58mHT2? zw}fT3&^QzIJf~Vv*oF$Xl|D1^Xdy+xMnA@+eo?+oSAk%>CNQxBCB@LzEZZv!NWwdzsg$i7% zmeBEK#wV+^03!&)U0c#906Hx?`f$gV zGzy5;-zp_iBUMA}(GOMCaNn4;MknNJP?f16(U1?RU&8!M-1xd*oD<7?4eOQUwJT(3#ca*khXWa*yWZoPZ|gbvgy1$PszkOX1Iu0k2OUu zYcpV^WHV}ic0TzGb}jN<>>A^{SQW?6$F3qsF8X2FUIlf7i!r$mxXFC?b2{Ki8J#WX zs@a(`tqO$P&=HE28&M(*%gEds6qV9wxc$NpzuZ((Dx)2(X<*P1-6NEPS2>^WlhsJ~ z%$A{pL9LPxWlU2tX8dVG{obz5`-RtXCF1gl7% zFyahrL}-oXng+AbMkhfOQnW$|YL7w{QF`QtHC`)Y<+4{0Ep3f*sB=O$4?!b(1XiB- z1kSSWEc)K+6*HC)4Z9bq-Dh|XmPLJSM9c0dN4_s_ekCU8auywB^}v+Y?qy`o>o^1E zv}f7S03}V%ue?zoR>nj_Y-bU2I}oqk=X=#cE_McUKIrJGiz1{ws5hGX=qRn4D5KOR zS=hnVY{3p*1J0WhX2Q%XRCB##2}f75grk+LU`REMLM*ZjW1&ZPbc0^uD`(9Nt$tMz`N z!uV9~Om!+ZRZaD)3KE2qDK%0OiWNpmh4NT@_fqxd<;Ciy8`rMgxL&=yaOIZPnfBa7 zr4O>CRgDj#1FBXNS}9Hxre-SDq2#dPSEGH2;Q^$@WA-egZQ;4(yaXkA19?6*cQTPO z^f1CxjN1HuqP$=O>7hPt)Yq?0nY+t=eobLhq=Xp|-Nc4Wz8JqmqzZK%2sXTkJQXUd zFbTs^@5LLCf0{z&z6!={BO9UAp#uY<0%Jy7h#MC-8~%t_=YgLvI_6?{vQE7iE>c|p zW?ZuP(+5O`Po02ZvH}()CzA&+*ct@(F@m`LF{$C#NR_eg&U*+dL`e-Ieva@|fg~7F zgb#uQ5{G*{b>RyKf(EfzLxN6q)!m`*|CeLSu_ssk<&I}}ykYyz?Kifa*|xkPvvvE{ zt}UP4{E?O$mBNc%h5 zzu0!M{Z#vw_RDR5(Dv@OZ)yAO)>Cbp+P=`byY+`#zpnLc>oYC?*7CHkLNj0u%{Aj~F8(!H^ zZRl+HmHOrS{q-NOdu?5=?n`UlzNTT#Pp`hbdhP08UG?OD-391O_v-;2B z%~k3s#B^}>fGDp1zUxbhqEA<@$z(4>_)igpGm(Udl_UHTPlzELmcm?w(lwdj2*2ng z94+P}2;s^T{$m7TE|L%%Zk&eyJAyD9Nrh zy`JR~lTrtla7*+~#Bj+{&|WwzW>rlw^%pB39GN$1=E%N1OeV&%rTlp|m7XJ4Fkb5* z6Pxv%YW}d9qx-fnoj=Rx=zQ1S{dDv?Xt!4zbT|Z)cqY-evM;vF_Vz7?H{mO_!jQen z@P%_uAWN;?qwSgeLTgTom)U-&$H^Y>JWLacU<$w9@Ql=9 z;m+F!mYY=+&&u&wza8+U?tp3onIc7$__QDx<%^Awx$#1#RGlj4t0Uu?QG`g4qEK~l zD0bKm_@Yoi^nqSDvNOV^!rAha5zf~QzF};HNQTY5VubL_0MDYFEcS;B){+r`Qey@Z zrDbs-cF<1GlUAUBZlc(5QC&Aejn4+762*s$>Y5cO7!?(y#gj37OMpM4_&;uhqQVi} z#uT|F@@r-BR1A}vVBo7}U^*qkhDI`17IU#dJ2XCD^J=P`vK#RSwMU{?77xdIY>EYg zBCC`|4zhkP8-6p|ZxViw#qP0r=MBHvsmhr4o)}`w(gnkNNt`0_0`#%PwQ2+y!SPI- zJMluKRu+$jn^Js7=NW5!YR>bWTv^-~3%*Bywgg9WJ>Q}MOeOY&IUg{5O->Y(!^grk z`Mlw0WPB=9fvT9qV%U)!Iv8$E&l%olCi4Xx>MZ1wgNMS^3197bDo&S*v&HekD7+3Z zshKsrVpA{KpX_IR%~-zrl6{P?isdVvOf$a9makMY#rP^&zLLo#FZ=q95v&#SeT(XmYive&ouSHz{Bc-2>std zRcDOwC%o`t1%VAdsD?O3upuuPEhey`4vwk@)(D2a9Lp%A?dZaC;hE*)_2q@7rInk@ z<>mS1m0KPU7V@;t2McQYV9;P1s%X^Wj7b$DNvEpI_p4z9NW|+vupIthlPoRFFE13H zxwLR|`Ra}9WAoQ9FD@)eZJxSu_42{P#{ZrOt0TV$q*Ubu)5!cSKV_ymlVL5;R0p&u z-?*~;^!(C-XBjiR(nIBHNe%3cG;O!o?rN7HV>-49_KB(Ch%gb}PmEj+-K~NcU9kUg zADLuq$QmG{44~IWqQ#OcO3wk~-&oqA7yNpASIwWYx&eg4@Jjhr`L2VipGN4WSmW(I zxEyjXWFKTdatK0y16Bu&81{QHV2Mz(%k@sJ*J-7fHakM?@29MD!&K(+Aqp5BHro+lsa00M5I;*A(Wp%A`8w9 zq$Z!ia{M7{7>b2-cowac@F!Qt(NiZ^($+{9UNM;Ry!xxmSawGM8muuvPz;zLSdynW z5TrBKdAk{TwGOf#vH`LYvI(*ovIVjgvJJ8wvIDXc(gWEIxd)P>dX7I`KA|aE4<_1y zKEz5xJ0=7s&`gMQib7x{$ArKV1rs7k#-QvfPmlq(gYEMBh zuw%5sa6S}-b|gfIJ}v~NqoEMATOmTExDaRzLm_AnLWD?S#)`^0Is48vH%QlhdQAa$##BMit(B*|TcL)-!P2yFr9;{5$ z?PYW$9$l_RH@?xGbVng{S0CLMNOu>~t($a}Bi$`YS6|XitEVAZNFGAB+tU9vL0TYf zkPb)}#QdY%(;Du`*S_f6X1X=Z_G5qJjQaX~zj2OuW#j+$H_msB`u`K(I8*-ABY*lK z^!+*A>_+)${@LF_BY)m2N_t>7&GAuZgqglZzJn$c*1>#f2z|y+7vxcOF#qfevSGp( z@U8Uow4vI#5S~dZlTkz;^IgXRQF$^Qn%yw(5uHUf`Wx zK_doYH@3cwf_}G$`pBLuu;(Gzasop4e^QTc{@FL8!JaShMzrTyQK{_tlMf>me0BXQ zn>Hi1|7W&~^)#HWJKcoJiaP*qua5mrY}KlE*zzWZ(KOV@2f;V4Ru?aKFxc^)u)j{m zUl)UQGuT=NTgPDQ8SLJkur3=Ie;XNW6N7DLuq_O>mBF?#*medx(G%9Wjq$gW!Fm{M z7lZ9)uzMJ64}278dfPWOb^y^AV6X~h2z3SiGV> zba_ekqIGw|7|mvFe>66#*s>?VUX+zI=mDUA-Rb-qX#mgr2K(-hXiX!dPm zM;MGI0k%IHquJPQ1{-8Bnu6)DTIVLhun=kL-1ux5Yho}Od)r}Y(qdyYrnIq92BQ@t z+aFCCHKuh=Qdq3nnmW@o+{S2i!^UZZ8Y>ehMHb#>|8>2D1jh$lRr4>2bA5F827%h3* z7%hR@7%hd{7%h|A7%iLI7%idO7%j!y7%jou7%k7+7%kT?skF(I-K^3Q{}Of@D7`l> z$rSH1u!SXw(YB5Dw{S~hw4I|d%}3ilH*xrf_%2m1-CTtI*4=3gVVfCj3xjQCuuTlM zoxyf6*iHu9#$dY`Y&V15!(jUvY!8F=FxXxO+s9zN40e#g4l&pP1G}v9=s1HV80;j2 z-OFGZ20O)ICm3v)!LkfC#9;Rs*n&#iS_bPju&c`7Mg}{>U>gkVnhKj|un`8!F<8OC zmK5K52J0}eTgu-t2J2_A6oVaRumJ{3GguN>?XPBmngwbWs9B(9ftm$s7N}XEW`UXo zY8I$jpk{%Z1-^zYaJm7j=doDbbM^TCpH^xMv2SmBNz<9t$yJ}nzn}NtkI{Qbktf`7 z|G)&U2UCY5)GvI#AU|0Uw-%6lX==i|hE`tqKa(;e{Yui88Mysw zX1a2hD^O(mC=!`I`j_PM7!)J!Qz=wLI^BMh4wkQ=X4;RDut@)0yaH2tX+Cu(DA|DZ zVquwSe8iEN%oWDzJ{z3@mJ5BeRaKw4Ni7g6Unoq|jrEiH?D=XkolFd-kX1UQvJ?Di zFSs2BISC+Gln5~t(0WFfP)Y@T<-#kIO7zJ~ZipL~vy?Lv@={DAE_^Ph%YsLu)Ie%e z(Ww>J*XWe$^aWxK7$-H5O7``6(coDFyj?IgQklz?#3Ke|LC;kwK{xqnTj-d4{ctUm zaRD?XOOWD2MEb`J?pl#wB$O+72trz298Ap4UwUHYrb6gUk^*!LIxPeJ{b_l95OJ4K zGpTT($`o>y>eQsCER35kjAugH!-R=w6RNv{Jk_PaTt-1Wr2;-fF8leYRSo1t!0g^d zKt{HUytQqosnV&z0l(lF8KIgbZKc9FJi#$ju8tL}4|t{sL>;tWz$qAsj=De9ml_)K zZ#dFX`B{!D8Lcc=Zd8)xH>;j5c7~0}D__YDT6ZH8%{VL~Ty9sLnJiXt^N!ZY(^y>` zN~E5*q$*nSvoQVR#&zth%e#DnS%IsB{VUtaNmh+oyPgY3k|V)$Ra&8qV8%G7vN;V_hVAK0V#!D za4Ctn{6pP_h|C%sidFAy@>QPthQ3YxZ0Tf^^r-`m7_-d z5>m_@B^~&7vHl zOv$_EkuY&DtC81=&Lap#B(l9wDhC~;x-f^h6J6?xUm_-vBi@aK^zI1NV^Qwt(g)*4 z5VLU;?n)c)78;Q_ksWlayML)D`veOaLSHJ3oQFE7CG;ea7rmkvW&okM1~u}&VC_>~ zl(ZDka6rZ-1c{4Ds z!=d^Ii-aIj=VIAtLFo=-$d_QmAIyHZ*e43u0H3>BHs zKWmptDB|B;PYKuUj9H>Ymcplqg|6=pc(n7LDD{Qc(2aBvEh+vJ45(fi(XCIgnL?u% zh($F>fyCRlfs*-?sZ8E{XUMy2P11RV%`gPr{o<-6qRdf}$%?udqYO&3qDJecM7>C% z`B6}W`bfRF{Wxc|F2VbAsL+(ub?_y5Be;$S@yd7zp!`L|mbEDo)5cs$_Htl0(sfQ1 zUtIl0*Lnxk&#Q+s)SY5h$0e1Jra~haYzky?Koh2n=-qIRbo-Z@`GNeKcyv`0l?MGV z8A=%fWR@Y|h;-uC@Nl0G4afwXlOM<)4j6&FTc7m>%~Tdp#6_A^snz+MG4h$JjWmsJ z)8bY$wCr7S;HO_#HdQTQwV*vkN2E&~*#uGRi?M?~WfJ5~e!3M9m-y1t9dJZhmFWJ4VWV5Y11J6vdCL%_7>qzZxS}GE z)>A*^!h|_g&{nozi;)FPUA;^ZD+c?vdQnDY$qS}gnONP=Y%tippwGZ07wV}?oDGKX zrQbRg)=ku=4(g_7^SWt+(i%;g0SjivT1|lI4|5AqZc>`bQSLiirmrGL)UChZT*5y1(@Eo zK$IeYKbBCBFU#^SYoctA!JM<|K062=*Ll?ajQ#EmeC zv)(-wPqt;m;s`=vQikSET2m!lw$8!QBw~=GPp(|ZVVl&id>+GovmG*x~@ zK4Un_sOL=q14dM(hi0a_f%hVysj13Gp?%IC1Ibj&p(}aRiee-kh{V)-#_eQG#GsaS z$)-EloaF>XkOXedBNMBJV|G(#1hd+vKrpMF4Y*nP8E~^q5^%HZ8gR2ljR7~gMxqN> zK8nUF<^dXG1ZS+_d%a`8FF%T7E1@)~s)ec%LctApRq&|0O)D!!!-X)R>7E}%^w{XW z#GEY|yMX)ud$0=sTqE}X@!!~nRc~&3_39m~H>`Tzd;edP9-CGT(1jbcedO&d(-{DN zFFJ5g!1U%l(?Wr>ncSI~=_>YQGu3kOfdU@)@V1$s#}=ye;@>C{cwmEw!~qE9Yl-e( zgoa`}Ol^;uPEvnz^*3pK%-G5`4m(_n9havi!iP6Zt;AUi&rr%r;{1ia7SG>>M0YrZ`&~c&%$_2ImnNTR*-P<@%27 zGGShN(GO&34#gXeb7FJEXdGokVtd7(DPhS-y{T>loecytZ^(U6XjY8XO^T|Qwn{X?waX*In8f_&G~YW#Hy#0G-h!@`JilA?^Drm6ODk#aAS zPl&}}p)R7vcngCzw)fImBQ`9wmKdl7VwXLH_R9922&xp)Lkh88HN$qNo@cq<1M`X@ zDcgm5eywSP)X8%dMFSd|OM7Y{pccjSFH0lXT*R*zYPB~xI@Q0#$c*k16py|J?21B7 zHrGBe0yKW1py3y3DHkAAZP07G0V|VFucXPMkfyyt5w|%vF$cTwr<|mrx9VInyLvfAuS^x_Bv0c}rE$Z#Ll9u9#$6`8Y2- zxez;Bwr$CpLN|;7!}|{+NBYC>OUqEmN7)kvtQBNr8yelVG2y)OhaECqR4`XE^4afO zU@%T)SyS;GH4*6jX?rFiN~Cx^J(N*iH4Uie8<%;e)lq$o>KWh?CUV7VSJ=C~it1Sm ztD8g|HTgtE6stPP$iX0ySAgW2Wgw7r z^OA*z2sEOl2|jg?qe($hcoQv@sPFiJf}jULfe7HFR}urb6)~0}D2-r|i)+RTiP3th zW@HrGoOT&QU|swu3BiRWm96yBPB0Zx3((5-mMBNr^?H`FH64I>-$d zZHFvow93%>K~MZfu@Eh{8nua^Vq6;Fg-6|Ggcl^Wi>SAVP3%5n`<9YHxgdv7tF- zB-&AShq{{uvwsvwjqQUfQnaG=$G9TwBCER^=;-{Qa~-g&Uu_v(#Tdj-v$l}lDG&u6 zHt?pEI%fk^$|Nw5nxN=pc_+9C5GUsXRo{QU$V!n}QHFo!)S>7qdy{IEVQfa zRf|dVi|=w|A>#Wt3I*fH-i?0fY(NGYIvaBmR6f_FL^#PpswyVZZKMHPa=|hnk|&pB ztkIhcrFI)dN_7dPV@|?SemN6AL+(0@yd6E!F<~DN+u_Y(b3#0}>=V z5ZTI#H6mRpL}JyrE|6GE60~{r60G=5YhP*~8TuIqKTO-2XF;_A)S?+kVdQXC=Pn&l z73Ei0NDmF+su!45CB*K9xx!?8#OjZv>`{uIsmU%_{<| zy5@ui0cP1zXTT9s^yFAF43tBx=Ld^8?5JbO$@+;wAD#YjdduJC(^nW-%n)eOCYDIO zfliQ8FS>GPo1|9gvgyEQFc_RfwGJ$y7zPu8X01TpI6s7gOD>LRGsyuED!7bD52WzR z7-fn2uTx2tMcS2^R(J!YpJ9n}{#GkT^8e^aYi$zWyOHUjM*$hVM-j0_`G} zPed<;Vj2izr%7i->6~5VL~7Y_j?8lBIcYfnirvQk{~dgL*F*dN3$caReXHKF^W4tn zo$uRmWyhu+AKL!n?T5Di*|yhgJGJd|TkmYGY;D@wyx|wN+}yHf%f~mre)H(&uWb5> zO;xQ`vzqtP9`g_)YY~8EYomlq|Yu~>1k+tjA{$}@!x({`K zqU*I?^R1b#f9QN$=UivJ^XEIRb?of;{q~o)_qTt#?YrB~wEb)Ads;uXW^L=Qw>;g_ z+w$?|*EHYP{P*!6iqFIw4@yG2QrA4R35HHhj7MUG>%auKEwut<>$W zd&Qc*HJ@Dl+ST{2{`9KvSasij&IyJ}`0?DITNU24KzX8?ii&H!mpxs2iK_C-J(=ib zIN$H)94+P}IpNN8zAuV1cNb2qv2uF;Y!qkqE}U7O^Jk(sGk4*{A^zU8>aj_>%9j4H ztMt=6r#yw`q*RC0IKrQD5=P~ZT3F=>e=>s5ojHOqH_Q>fH-gZeGlDQX+&ihB$uw;E z1$%SO=$1HcLu@zXhPrBH`{jM&(&<&0(+y8X2xmzTW(mc!d7j8CJizL``EZcK#HdoCO zY+07=&)saU5+c|#EZhHJ*~FN9&XK3mv7aj;pK!CeYL=S8aBP3(W^>hgIhkN}`#8%c zcSjv5m5zO!Zhz`xbC)-@z{;`xiJQ$;-UM5Y)$NbnY_9Sq*s?6!AGz6F&Dre_U2N`L5L+5~mhHd0*<86G*m5k}N8N0$To7zomhBJRY_41oY#EmA z_gOY9jbM4kkqgo>#pS~9x!GK`Ua-xwY`^PbbN8oUgCooK5jUI5Zh|etvi%Orh7}pN z-K1lZv)gaG*<5xLY_lxeZ@Jjqb^{w6S+)0)z_L*(KB%k~>CHg}68bj!1BzwTypwMc?3$FlvJo6XfC3AQZD_5nAW ztAq%)Orm!pJU{)_Fq^kP%C$(IWAFX+jy(R1$?mU&$<%=rj!K_p;h3J~n8XQlo=G?* zde6l0pjc3+Uk)?reN~Q1yY&{s$@`@+l{%QmF)1g`=y(m?UXaC_xHyxOfKJNs3M=@sNUtIiY)LP)jOS3QN=yMHP1g5 zrc%csxU!&}IHGs(MEDrYMFgkb@o?YsqhTVwS;#SIw*<%ab_W;syPRBbW4V6B!G*8t zoLqDP1*g{!JGij<=j5UjR2-FENmq!Z!^t0x?hZ>Q?=NvBR^4vG(S5&@&TTt&mjp-m zeNH;J?T8M?Jvh4Wb<(+QM|3zK$xV{p5~dU99q>PFR(Oud-cop*^vw=7d0vyt3&AIy zS;p^iF^cn8Zbo@ri%ao$vy2HE&bm@89TQxN-{fG6OtJULEywsq7h_b4^@oFr-q;=N z|HrWZf4c$u|BuHWkF8(zV>>VGT)*?fJHBB@a>pmPzj1qU`x;G? z+WO~PzHQ6NEuY!^=FQp7f4%8@H=W&7zv=xOuWj75@$c*YaKo!MoZRsD>)*Ei{Q9=_ zzp`#+UGKV2tbN_u!rFiCepmN=_xkP+b-lRjP}iSzzNYh3=jS@^be!$z?)Yf?8`@{u zH?;pz+nd_Xw{2ExO_r*1DTT@=MYR!9AKfJnS_4`*nx@!Fk zKM7C@?-)PIY@fPXUA3uiwz~}D6*pt3@vs=F>17xf+>D|2!(yb?mtnl@W(+kU79%yl z4C5u9k(!;NU8f92=}y&3yjWpQ%`dtcqwGkGILyp3&bt|->`08%5;Hnpa5F~Pkr=5l zW==3v8Ah+cwc0vmN6$IgI}^im&iFG{I395kvdxo8shebm^kF9{*FptIRjbS-{UM%| zZI*pX-7qs+KIkI6OVa(enIV0^NgADWzj})J{6#n&RkYc{=gMzmra0Zo|>d@O0u(rjt${+3cMTw>%Ywj#e$i>203R zbLRNU44?O@5YOj1qt(Hy^1&)ya`6>M@Ip-lp>XFI&oYeu33Z;)ckjI~cEHwg(q=4_ zlJ@kfP1)1|Q&p z=b7O4Vweox&jrsh!R-Yw8N81Ro@IjDi(WE#nhTy`g4+vSGI)v$ewqnxFK)@;NiH}J z)&^JjQDN-`Eg3w)1wR!Io?z>Hg01f-nc!@FPq6j<1QVRCunD%p-pd4MD{O+Tu*aF; zY>i8>HEx&*&epgDTjPe9;B1Xcur+Rw3C`BI1Y6?8IB99(=3G_Ud+UxyzUM-j?O+a&Worl^}a1de6u3I&E-$q%+JF_(DI)b|ID*j=1A4 z#EH8TCyH404Xx<3hl#ywtI{l~;mi@XMG&T<2~(_wtr3L0Jv|MREMZFoA#X>I5H@5= zV{@2LUsuJ|UhT%7dX77|@L{_>FBD^O|9fz5yRpg5X0Pi6*l;47NoOO=Cf*fvq*J~* z$Z6K#;EG76Sk&cDP}jTJTwYqq@hrxC+*lq^9 zhrt$O;W+y4gt2}G8)UEn1{-3qVFtUG!HzRn|Lw4T2?k3tSc<{Y3^u@EgABG33+r-` z!Il{87K1G_*i#JlG=tIo5q5dG_jVXN&R|0fHq2o6G1w^vJHcQl87$9Wrx`56U|9ys zF<6no`WS44!A2QujKS__urmxc&R}O5Y=Xfi8ElHdrWvfnU}XlIW3X8Ut1#FMgFVP# z4=~s{20PDS7Z~gz278#n9$~O5gVo;&*O>+eYh2HVMCJq&gagY9OpJq)&&!S*xQJ_b9$V7&}>h`|mr*kJ}c!eGZ3>?ngJ7%a(P zX$DI%So7_0{te8O z23yNu>llpAWZL~|J%cqcSR;cqF<6|zdKv5>gB@nDg;-eUDFz#7up)y!25d=1NY!`!VF|dV4WgI;QcH^4F_8Qp2lEm&Yu%)LZ zw#UG9Iy!;f#Ak*y&c1Q8dV|K)w*c^kMW3VKHooBEI80-c?P@4V3!!|GJ}mjTNkPyU&mmBOxTw&{$9#pU(aCQz+kr->}3r0at8Y*1{-2@ zeg)(2l??XH4EEm`>{Sd_cOl&7)H7HEgY`2yH!}X37%a|U%?#GUV6DJve>Dr#EKsvR z%>p$G)GSc5K+OU*3)C!7vp~%PH4D@%@KspgIqd)6u8-B7#{U1at79L<{{NF$Usc=w zH>*omtB+z~bMu`rwuQkSXTm2_={DjR%=O=88&QI7Fou9BVIzM4!c?P5N6ShA(KVf5Ze!|A+{Dh4a8H~

xqJHue(40e{mCKzmz!KN5&n!!p8R%S3dKVjR2&QI7Fou9C=83uch z!5(0+a|}l3C+s-r{Dh6s`3W1N^Ak2k=O=88&QI7_{hct@z+jCG*2G|kZio5k{Dd9v zCI&mkU|a8m!_xT)n~%;<*chFkurWG6VPkZD!p7+QgpJYp2^*vH6E?P&!S*xQJ_b9$ zV7&}>h`|mr*kJ}c!eGZ3>?ngJ7%a(PX$DI%So7_${n{9;g~3`GtewHS7_5WAIvFf} zC#+vHgS9YND}%K$SUZDtFjyypbum~sgRNz-bqrQ_JDgrRKVg^g1_o26px7TVk9|=O?s&u}808y>)e|I%Q%poF0JRaRa-4^~%EK>nqiwfmN4oEMHo9 zs=5PvfSONZI~lBp!CDz?@phQ+VaDGD2D`*yR~YOO2AgNF%MA7?gWbLz*7;=&_Kgho zat3RDHq7@5#^0+L?3E1mEev+`*>D_>GuRUhw#Z=LbUVy zusVkC8iQSDu$MA?U(aBTJ@uh--@;%`4A#bA%?#GTU~vX(XRtOVZS4%Uk-;`G*k%UX z!eCn&Y#W1hFjyypbum~sgRNz-b--$WH4D@%P_sbI0yPWNEKsvR%>p$G)GSc5K+OU* z3)C#|pJ9Q^CwJ`K@h96~z5V3&&u#mG zZRKtC+kSTI)va5%{?3+{ZaK2$6PsVN`Q+x$;st<-O{+Hj=x^J~9HKKNH+CdDo@;+? z`>FQNw!Nk8OxwS-{%GsD*2dPKX<2Al*YbhprRH7DzZd_8_|f<$nyO8QnpQV`xbbHi zU)*@UabIJh;Y$s_*6_xLTMe5U{-*v{>R(m=lDa~Dy#7OVZ>zh%Zs(dcbst{yxG?J{Bug$ES1E(!%`Z?EIxCR&E}kzl*)6 z621HO(LYX{ELG`#C-Rle*tI@(BxQiMmV)xi;3~4oTH?A))-B>&z zQ>K0?K1#&t*ls&)+6%k1Fu%N@gNh%fCc*>Zu!7 zFXz>5(}qucI4JcRU05zJ&o8gs0>28dIKO;#aiM4B>hz1&983j8+8rCp{G9)(=`&v|8<%5)i~BAmZOF<#aBS5aevDQ&pgh?|L^#igq^)PfqpB!t0}aQhBvS4OZ<&c|zF5v= z#|w#P5<@FTtgG7L8#Tf7U6@p!`&JlgG?t#{DU&+2(iCgDJ%ikvh0H8qRbol>ji+3)2gJ(E5~Kp5Kf3^dPZXda!`%xI!g-2PSg!!J#^Sf@5ZM%D{7z$R0x|`ehMa|z zAQg!DcZxCtf4a~O#;6CQd?f1Ge4&!67AGrsj$mfGB7Wnl#6r1HNj#HEtelSBYll|l z${pG(#L2`8^LWTl*f(EIql#B%hUwj6`?4zac!=jb%w56s<2>OI_ky!eD4mBm!uLcF z+K)I}gtIK+yPbsLcbo%+aApbL6+!5>A(9LevxM*D2?wKXD4hp68~#`Xq1%RnaF!)} zhm$bMh9HD9OZcM^gl-!O!VF9JcAgNoJ&zXc3-Dmgl~)>bZ3en%&~;u6+!6E6hW9}3BNOf(48rQ5Ld`DgQYj{gt$pO zS9DiB>73#SzaxUsUG)UvEKB%$Ct*~-3_>`wgs+PrblXr6;(A)fhTqN;;)>2F8%k&P z&d=9I5V~zB2xnQsZ*vkx*-+dunq>)J6G7;CC>K`05Bk z_t-`d7Ffb>aS}!~Um%1tOZX}$VN~-aG|aPv|1E;h-Fykc9837k5rppMOAz83VJ4Sf z8A0eSHi9sd;NH`F1w&X)rZV|zCU4(uu0{@?bMHj>9iMMv_%ivVn@u?;IkK0tWQiy; z;mAJC{EZCRT)tABo0@ebRJ(FFO}~s`qeta4%4*7y%Y)kt7ak&|CzMO}b;pX$ zbLRNIA%f3-hRot)%gEO=eDp|Tv2-?RzfYz3JZDb7mqzf}_g7ndeH`CQBKYh}tS!DY z$MYf_>1Ml2b>P@;xY?pB1N(N$b%u?a?%d2YUqF;2*GF7)a7~x&_fu8TB`!GP z6*X+v87soL-*b`S%4H_ev!8QxINFt7Q47&M;i4-=(!rIbd)!4=IpOj@A#MYx3|x>*R{W=?ZLLjwx4XRw$``)Sj*X#FE!t3E;fH5{^s~t{2!ZsuxYC4 zD~&(eINP|U@y8n;ZfI)w$@)jI)BjU-)w;I2pI>ujP3M}QTYY(T`|9_ty0{9j&wLes zv*B0Kx2+bN71*M{E`MRPny=&vV#7er_<|M|jxVAAr7Z)6;DvDK4yBO9j zk*wATI;g9jdoiq=U94i@ZB_OltMrlRWmq>wvRd;Ih80s1hIL~kt2HTMSTQeQST{tn zM%q?9jk)+m$gCR|Er0tQU*1&@y zO>(4dk)+o6gCR}ymcuWYwMLOzBl0lkFh|)EMQIJo!<0iDWpfmzH8u}Z4sw+7C`xO9 z9;O`ND4U`v?^==iIm*T;%DYyhK8~^>it?_ND9usUM^WCj3Z*#8x+u!KS0IjZO%&x_ zt52eLE<7Ar%~F=9i^*zvx?(N$7^SG>c}a4#tDPz{5vOOlpVcC>>0+-x)>wv=)GglFn-3x7->iEDSKv3=WiKC z`Nq70F1je&spsw)xt*68k@#bP=`# z9X(XfX!i*hU6k$AyY~#;pSkFwY?q>^$yx0_&eLI?F2Z)gHOVFRPn~oTwgVmYlT2d& z#6=fnI~?qG(EYKCF3NUEvK_14AMtb%eJ+|$;mWSCf6Pf2VLQ;B!=v+z?f%e37iGHy z*^Z_A?=HG1+a<_$iQb3k<0zs3_LA`>iJ+0$wtaM493SWM&j<8QwjLFi7fAjI*v$?zQhR~W+SsX}$CP_$NZ zbrsRB9NV*QHfs^rVq*_o{IZ+PTEDf}*h3e;(c}Htgpn#U`oyn+WBe zWI2B!iZkNWu84D%=luC7&KbU&_R@jm^u|s%p00Zi`~T0a5%>T94(|WY-0|-qU0RU$ z|7RI2$6$E|D=^pygN-uS7=slV?0yD2!(ihKHo;(%3^v7J(+qZ&!AcBPX0Qr_%`n(3 zgUuP(;!T-v7h*=6d5GT6qRaC$c}*k%UX!eAGeIJPqWwlUawChP+Y)*1`z+{R!V7;GbhZDO#^47P>A zwlY{dgLN=iCxdk{ST}>MWw3P&ww}QrWNg~s6SnC9gAFm*AcGAv*l`9s!C?0?*#1~p zzk3*L4}278pj>UzTIt!J}u;UDNg27HQ*eM3fG1z?!cACL5 z43=fEJcAV&tjJ(v3^u}GqYO5|VB-vSKZBiNuuDw+m}LAF7=QB&c9Fpvd&2dtiNWFw z*34i#Vqv}(25V-p-3+$9C(O5l!Fm{MCxh)`u-y!{hr#Y)u)PenkHHQw*nS48SKiPaG!FO!5(F>#~AE!2D`>!PcYabgS9X^ zw=!58gS9hQ2ZMDoSQmqJGuT=NTgPDQ8EgZC%`-OG#b6g1>=J`rX0QbY+ZGGg^X&|_ z)4*ctZMylGUxxI1bw_T8v7-!jl?mI;_*=_h8yIXogKcE6Yq79?*BR^vgWY7X^>@O2 z8yIXOgKYv<`>R=?W`UXoY8I$jpk{%Z1!@+kS)gWtngwbWs9B(9fv;f;T)_VSv)KPX zT_3Bvy*ftw|FnO76JHY3nZT;r6sG-a8>9Ve8>9Ve8>9Ve8>9Ve8>9Ve8>9Ve8>9Ve z8>9Ve8>9Ve8>9Ve8>?shH85BcgEcZ(oWW@S+K!j@uWgL>uWgL>uWgL>uWgL>uWgL> zuWgL>uWgL>uWgL>uWgL>uWgL>uWgL>uWhU~77p9SV6=a2ho${%8>9Ve8>9Ve8>9Ve z8>9Ve8*67U+P}8_(f+lK(f+lK(f+lK(f+lK(f+lK(f+lK(f+lK(f+lK(f+lK(f+lK z(f+lK(f+lK(f+lK(f+lK(f+lK?T>{q+P}8_(f+lK?Paii40eFQdKrxNukAQ!|JufA z|JufA|JufA|Jugtdcx_T{cGD_1A`r5bUw^r2N~=TgVFxA9WU))+t^VCqy1~!AMIb; z80}x%80}x%80}x%80}x%80}x%80}x%80}x%80}x%80}x%80}x%80}x%80}x%80}x% z80}x%80}x%80}x%80}x%80}x%Sb@Qc3^vAKBMdgmU=s{B&S3X5*ck?+{cAfNlZ-#w zzqb9+{{cGDF?O)s2J_b9$VEY-Ym%$D)*kJ}c#9&7ljP|c>ooWBt#*Q%< z?O)seX#d*AX#d*AX#d*AX#d*AX#d*AX#d*AX#d*AX#d*AX#d*AX#d*AX#d*AS{R*M z8LW-LX#d*g>tHb2zqb9+{~SXS z6AZTHb~ui$47P{C)-l*#2HVGA`x)#2gKcB5?F_a9SnaQ7ftm$s7N}XEW`UXoY8I$j zpk{%Z1!@+kS)gWtngzawEpQw6|6@(6?m`pp|Gyf0JhpH35AU4b`7b-(x?^(3KW+cP z?c>|Oxb4oi`?vk?t>3qGZ0i@cyk*PCmd|hgp3V8qf4AvPo3fiev+=t&p4|AC8(zI3 zwc$_J-(J6e{YTb4y{>27hu1Ez-LdwA-Amoux&IGts^w)Z?`^KM>}>g5^ULGUH2-7#C*mJ$nu+g=f2paZ z>ARaAZ@RZB-}v#yw>PddKGU$a@wtX~HN3sP(9qrRiTdBKyH$S*ZvuRA&3D($*Bz>h z#on{#+M2^_{$}-$u6}g&K6((n_V-m;AYqMDnUm`>yAdHO?+bKxFxg-fY$NE;XK zL07n>3WwxzCV7Ahhlf+7l1LpF=zJ*9Sf*U)(}DWfKl20#p=CNb$4 zw*nv?nQSgkafoWf1Ucgff>=ZiO2m3?Yu#@J=~v01R$+zlU*!A~Kh>CH;es+|`R~ih z6i{7ZypJ;8i5=>5-bZZjXer4)R6iK@0^?nJP^OpCt)*W?%@t$M63wG3pqp|(A z<+HYTrFtU8`ObuWOYY=KKDJkIV^q`BiGQIdJsyjxH;GCM^Ot9?UtPX<A%T=>heMHFCYhBu5!-czzyIANA9ut>(>_+Lo^iF;`5nb(7%rRD#TPW(7PxV zayPCoFWp!SrR1p_S1%ttsk$K=)~S%Nb}%HTzX+U&?Xj%~Kn2b(+(NW3GE?0jyGQ%i zk@a}~b4v^J%L}IW!y=L+G5EosVczXtpz?yBJ7lqROukvQPXrP9xg{3cy;Qw5Mwa4iTJ1Uw99)&yx zxe9q4@&sfNat(3=auagucB4{3{^ztRXgU_$6^a(8R2`qrRYw<=%ggi2E4L0Jn&%^Q?D0A z7Dwr+?lopOC*7QP(NkS+%y3S)IK>sgQF^L7gc;6pH|JgSR2K=)$A&~D*L53B?-`cU zy4KgJuH~waO+^O5FQ^O3C9<)?-fG%K$3 zWpvHCSmial&awE zP)VHQi3g*J-3=L)3ZZe9Cmx6 zfxQu|cj>~w3Lh-%o=Dcn@+w$!EbBdytdZqaux44--I1)3m?J8LDRteK{?}%iLw5wp{XE)njtXPJ*OTQ(3qaqK z{eP_feP!oV>}>3{t2V9swYAsQZdm)v-H&yTcCYLHv#xh`-Ryd}v%hO~*GD?v)cLZG zU7err_@$0-YtMHyb^KQQTiQzP>)Zdh?H#Svw%u)?YW;#gb5FSUH6`F2a8CEoJS z@$YF~Xg=0FQU8JXx5j7UJK~>edUw-PO(&byG<~q~HI1dl4UK==@O=&6Qr}ts(Ym+R zEz}*V`^=hW*Sv1c#WnqF8rJ;P>i1$9^|w~NV)f{1JoF3=1B;YjYd=m{`{dX)$8tY4 zcjL49>TJGH!HQU+T&ReD<7L`nIg=ePU=w6$2=AS~9lgJG3_6&g)wp;Vfg zt{{Bh3KRD|(cy(A2%B0t6&tqW-W?s**F3p$B(_V0)(hs)91G@@Vzm=suCdz-=J0&C z1@m3jf;obC3+5Edn7zN#AB(+MsgKp};uLH?Ucfdk(n>pDM`CidURxU8pZ2|DK3dIA zRmR|%+xLR!r-GhmCX1D-*c@f{z2JR?@tz=d?0X%yR_Wn=Ip}?AWQ6=;)9XHK)enB3 z^!bX}viN?@#!#$rQ?jRr^zYsi7eX zM;p1w*+nL>I%Yy~1p=oAQprBCu}_=2j=<`ONhokKolFeMJ@g?NI3LU0ZobnPYk{;v z+92(a4oD}Y3(^f)3t0zQ57_|O2-yVL4A}zN3fTtP4%q?O3F(3Cg6xLe1K9)F3)u(R z4>H*axL`WpUU#+k>ReJ3D65&~Vww%=4_suQfv`-yRfmj7RTXUs=Oevyk+R3&qg98Ete}3hqOl;A znP}CyBO@%0Z@g$lW8p}xI)P*bHKNsBBoi$T28eN{pW4ZZVzpE(7bi!lO_s@JjjWC& z8PQVE5sU{^SeaZltU8`#g*8-`>1D&Jqe@2DV(Bcl#XX&MU%-qAMnlOJVNIn)irL|W zI>ls1Y-%l%%xbO9Gz9}=O5kg)`U6JmJg0RkU~1JPFoAP?;DFYYW>)Jg7Z_XShSrp1 z)?67rtZ8f2IWStE<^u<`mOTVh{qN%fV*}mP8cAlgKE;O(YK=6rflu;*gIXh>R~A#@ ziO6w3Fy<}!!gxlG->FeWh-7%afSH@Fya-XwOwcq({9(?(wTn0jqyv;P6QVuE#I%sB zRMlKV1V(Scv=nH?U12A6wA5uVom$EdS~yp!W@pOPv10WBFBIQrB*USm{Fu;Zq?JYV zyBFBY4^QOHZua^ulS&-5R2)E~8a=mk zb$KBoY{EZ`CXW6=Q_P!XwDv@q^c;%q76UsYE^!V`v>w5;Yw46aC`kXXXV{46h0d@M z#Ghd!X=8KNqzorc9%NUrip5;?37(ShQOt?Q$r;)Q+_X`LV>B)NBzqa!^DbKK21cA+ zBick&Xq(_@&$(&urY+IJPXcdOqmbiIFGs+(b1bbmNEfB8_At=h7AhVD;$T`S)$ODiEArChwg=057_|O2-yVL457Pb z=x!Oh(}nJEp*vf4LV6&(AiE*=K=wfB9vQkfhVF?u0O^GsgdBn#h8%$$g&cz>s+2FOOpCdg*U7RXk}Hpq6! z4#-YO4`df)H{>439>`wEKFEH^0Z1?8Amk9_Fysj2DC8I<0ZBqqkTj$Z(hnJc3_^w= z!;s^Udm$$vCn2XG_d!lWGLS4J2gySUkP*lzWDHV-+z&Ye8HY?jCLvRhX~4ywJ1|dU`VaRdF zy^s@-laN!8`yi(w8AukAgXAFv$OvQG zU65|bTF5%cddLRIM#v_}X2=%ER>(HUcE}FMPDl@A7i2f&9>^ZZUdTSke#ikxFXSNP z5aclA2;?Z_7$gBnLQ;@4qz}>$8GsBzh9JX`>g)NF$^P5{K0OY8I$j z;A_YN&tm`o+0Izqb8XoFuSb7-pgk6Q&6d}1mTA0&|5i5>R{N`2pk{%Z1!@+kS)gWt zngwbWs9B(9ftm$s7Wn^*1qNHbH5MyQm#W?e!pUNMGG8c-#Vc8yB94!gCMV+ZEA4nb zlbgBY z@oWxJ2zqY^ES{UlkDnlY$G)AG+pG0OU0m#p}QvB9(_1f~vyzoWYfYMgX&BTkNnZl$5lkz{Qc&RX* z87)ZOWLo`HuB0e5lwM@IlKtvu8l`M*TK(u#|Lu?G#)gxLvEl;?7(fnEd6N{B9ADqe zaJ*8QLtU$&SWb_lT;o`<>_LwTArp_jk8}<_#eNYl&d+7WCsbA?h(-TE zVJ*u{k@=X4j|}vU!K4C}4+p{v1m9!EQ&%V9j{bI3vsjnD3vH+nMw&YRNdJ`-#Q_? z1&Y#|K^GvY3~S`h6h;vrnrP}k{32G)m#Cmqi-^iz#Th>E%H|OtV4{UmmerbM(Hs$j zY+e$wc`-uEf~Kfano6b|4X&v(YJ?FmEqf)A5ikRco}^+Q;OjF3phEacqxtiH$PQ2G zFl4%*v4b~oBW>r3DrqRmI;o{hwt|L7_k!{!BiVb%?h+=4B~sKbqw|LC&{P!1v+>Gw zj#{KryjrC~f_gzMf^LNkGl|f;K;Y9hSQzzOv7*w$C_0BkkwSh>Psrj{PNp*Xcy>zV zt~acpBH3Do1}VxaY%e7lM`i0`I2ptj)B79 z$}Ks*LFO0)L61SV{`gq2LY-zH*^~@eCs{SkfpQJMMHm2WdX>@x17M&bhZU$QxtZx; zGBZQU5rsd2Cb~pJ4k(5b$O#mvGV1PB8GQ#%*rME{>Q7|OO=Dx=iVlPgaW2Vs1eGM$V{vOUM&dAvNMe`lSy_ zEA@$@&dRJ!P(8u*%BybIJ+~t;OV}BEHTG4iGnrDQI##X5mzJxKJzZUy$A7Ql?!GVM zJV0!TZhxbKJ-x7W^~U9^m#UZM7Z)$$Tw(Rf%JoZeS?c8lbn*H4#rUQ8p#)AzOmX{Ju}`WdHHk%7yF+|*>=^A&VFU&!ctmObh~f+_8u z3u*>xT`^Zp^$%1rGSXZ=UiL66(NYVS>qK#K2Jy(t2PxZp8)x$O&y*|lRgPigfQr%7 zfdov=RHkPt4qJ>(%|zRRN|BcWXKl@X0Wu zyoS;nP%sdaGEig{(0L_lCe?SHZm$@ib{nO`N;Mh8(I99dm0l{`mL}3g6=}=Oi#`<< zd*-~Sua4$?$Uw??BBizpUNi%JW;`C8G*LxFt%l7bokRt+b5*w?W|8;!1F;5jG9OBt ztXHArd0ckHR#q_u9&zY|sOC2I9QOY&(7DxS?Eg2#nqqHV_2KTH>3*(rpz{wJK3aci z^;=g3dal}!{}K!QGENG{F!id^hvJxIi;G_Ax8J+UApl{crKuULl>|F}a*%@s*{S=# z%|2bAX5UYMx)hgUB@#6fkiV20agw8qx{5L?G!@kNljAH(tJ&eX#^hZz9>ZZn~!lu5y zx|36r7}yp{;~A{xC{yWIA24qAwKYKBs0NtwOCH1Hr^pE6YifXlDqXsqGGu;AjBvx+ z9;!s^aH0@b{dCCReiEjq(zatDD}0|aq@NP`+s_~Q+b=!xx1UJ)+s~4G5p%AJXLZ!1 zgsx&HnEZDfFveFwG&R-LmHzEr_90pj0Jw>oYA!Q-P^AWb{1)a4*~_OC?T9hC5W{SoF zQxGE-D-f)bCevW7gKzT!rcp)^dBO6ft9`Z(I^}&cUyu6zF#iB5p%g#bGxk)R+FyXb7< zqJu;u3OjWPEEWVrl+|JvBqiCRB+EsPdr5Iq;<&|raf+S9&a)%8IB|*-J8|Op{~RZA z632N-9LFWG6Z`$nlzZpSJqt-Gpa18R>?TJhzB^~inYpv~o;!1e!`I>Ds$FbOr{Jv;^6iD(qHL*To()YUKNdt$FQOy(o-814-YU z`hRX=Shs3{N{89uXHG0jw5|kZ%CNnMsW3YLn zm!?L0@ETW?aS!2M{#~wuxAvU-a-q z{MzDLDxRcUI8j@ukN1zF;dH^^j}iF4=Wm(GOs*1%z4K-oHI07Z4i!y-avJY%?wM3~ zVB*hHcr#*VU{oN|GdcNOY%B8Vz^WKSw{Nsh-KUFhyYT`+l_KomwNfmO@c!(@@HDc) z%MtU>c6x2@9(0oe0`|1AMYQ)n-n)Gs_pwV6vYlAMNVkb?VP7` zuye)Rl@=*M_(RGFR*PV9i*+QSc~y%PJ<-V?thI2u2l3VrPe(n@uqar3*-NZvYt?KTbZ-e=MXD8E%!^vN@gTi?@md?x2%-^+n-@8LM6Nhs4DSVn3B1(Z&KUX_b;gT1 znB=VSO)rQpCtyp}Zv0RqRfeilgg@h9K~w@}5NAd@-Olv5JCC|;J4=4Wd)>l!pXK;Vw^$a@loHI_{**kPrKjq5o5a_DMZ!|F+ z$f9(MgSWNQ=I}InLw-d*184H|(0HKZlrixWWp^oK>IjwQRhXVyQC)FNpK%2krHe{? zg$K;blwn_LW+BFa6gLjR{_4(bc-7LWiRkDgUE5rH^_U6^v--!C+bqmTI385SYxRsl z{Wda%{~DHXnNe|7jlO=m!sL7{`q;fhxDItQlJmVB6uLk;BfA5|9t^IoQJBl5zr&y3 zfY+#AJy<cvD3bDUjv;?labRi2&asvb&e|I&TTY9d*AiovXdhfogEDf zIaunfam5>YzAsw6FTBwcsGIx4BYy43b?>PKzB7Ih0^b=|xcC|Ib*|f58m88qe-7}v-!qTf3F6|jdcpstJsXHVdJex#zIz6< z6)nuv7`Sk33%Wl)@&_R>cKsJZyD{L!&t-5V;65+Y-4HFO5M#iu#587H&xT}OWd{$^ zoFtEgHD_`B`uaz+m&};F+|e&O#kRW~l~`7x-(1+WLxQuu$;VD0^5@2wdsQF{c8>8z zk!e}q@S;GUo*AM&J$;jtf$7SaLET@`Kv#+mqbb9@;rCx=-Rg#AgBt_CG5yx3YD|p{ z3?Ra^ZKEFgy;3uZZv>0`0_HKm`@s+Xj=8stVXT9fPfns8#{6z1G43kec?cb9-zJ!s z694lldJ)SfGmaFa{VIE$AlsaCy8!Y33-SK{vCtEtj!hrlb!%70uJ7#pz|OUu;ho>u z5vl*#9m_jfcYJ^Q$F{#@`|$R%?O$qmXTyUH#~Sh*K3D&i`i1%r*ZkYIPj7quw#(c0 zZ~JE5N9tZ$H(9r>?oVrfx^}VlaP7BizEtsOO<&EHn%}E_L-qOU?bUx;_4cays)JQu zuY7OiV&#F#*KK`OMR&z_%73QZDX%R5jj|V)^_6Wd`*`W&r9GvaOFy}_XUp8y)~$J4 zKU?zSC9@?>CEqUowc?i-PZsYg{_8EjxaHw3B{^kV{;=pxMOTZOivF?imkJ*$JXyG< z@CyZREx2CLT=1RzU(J6>{&0SI{vYPODQ`Y6ocB+;AI!ax+m-wMoR8!@in9hjv^f;| z)lH9VzIXHAZ$k8gP0l794we0EY=Hv^oJ1ekPJHmnO+|$yhZRk96rGw*LiV3QjdTbN zNY7;|-6R}t_@oq0?!t?3kX(3K)!2WdoIo^OywsJKBIsm#HoYM<^^IQdR$KcDo%9iY>F zj~y2sD7-P`r)#{=bmkaNI7-}fU=|WEtNjX3V1UJn##ZDlI7JYPyaN(5R;dycN zbF}o)(5*X;gI6J&5u23J-pXhjPvP>!c8X8RYL{fxR%K&O7avx;n9=SQ4;|!PqVpgq z%sW1;_Lhv=;*o_erwz1=7;X8$qsw-qRWnvA%&4u)Rt*ov@oR)L}G}oc98x(qpF)o2Nl?d zS)e2T&Q|dcQfeUS`NQ@?@9TzM(Dl%KvlE)>Rs^G@kMW!NH>@6c3gypbnknmRK^?=N zAb%*ivi_RYLs{L;H^tS*l=W9Z9k`CQ?*hg|!??2klGQ_5QRvY1*G{*5ep~!`PzPR9 z`N#(?y7oE{!qd|FGgeD=8`S8sV+#99Pz^?O3q!lO!v2)i@(M%KxWc|1RC68hs3Ki& zOw0Zct7R01DDQ`YQ}dq~YCX!8L51M@YPN3EF>t?VrIvmSk-jx>eiPFFv6Wspctr9@ zI!yQE_!#5+kF4ZI?QtdDhbXL;!XFq4uA@V|Wb*n(|7@Q`09Q->^BL96lGSfFQ~c*R zec^pHidR45O!2>;QQa(_E;h`tQF@}n$1vCLar)g3_HT?DV^iL@q?fws(aoR1XE(^e ztb({#W2^AHTn>2uVOK%^&NEf`oeeVZRYA--OQ-2!%-@L5a5<_3uxjyyW^72=VCOxiVpX4%&27H13iqWkHQ?XAxx4f*1(J>gzRrU;*nVk51SDBbI zxvT8gHpsxL0^OQ0^UO!t96W!nm{Dn(z-~m9~{0ly1^NqiI0v6pv1&&;S>d$9X4Xe}V9$nNJB;dkGpf2R6|)Re-=E2-s#_`^XBf@*WYp9x zMN`?1d8c1<+I->SUb+0^%sVowdM%|ngQ@RNXH<1tO49|S`Sy&OZcFL8#y;&07q9fzfYRiJQK3ZFWrmX85>Ue16gZ|0Qf zxkNRJeK34eK*_xP)eR-%DETp;-f8h-Q4}Rw6+A8pHvdseMfnnhmYP|aR=v^EGEcjr zzG91dou#DQwxTFCmoi1Y*3uHoV3fy5PNIy`Yd9rw#+>Xdb|k%;Qxd1*%FbeyUd1Wt zqp|4OlN+8Kc1`t;Y>T3W&qJ%QxOxbmM#x>t6e@jWTd27jeO(i_=UM zUTEeZR>1_`BBQJ1MBSWbs_=r1GH|OPCV~uAc*vgvZw0!3=)+av)Qs*6p*OPC4-?IacalO-M)4RcF0T@b_Bc6 zWD&_unyf{#sL5I->o!@NWIZNpm#o)h9g_8#EEJljIv?NdtFvJJX1cH=*nr6*k`0=y zMY182wMur%WTDVCDz|&LuUx@So9V)iV8bShNH$`!7Rg3U)+*VU$=W0vH(9%6XH3>1 z*@VH;iIqjF^CZJAGwdwGrVX|dPpndY7Yv4QQ-WPJSR$1cY|3CuOX&pZUSZgIhMhB5 zJaH>Uy7wCl#oi<~1D2Y*A?BP_=Xz{)Ddud$X<#; z84M z&agcU+sm+h21BDod-pT!PJ^webh{aL7sKv0SW@XWGVGwi(kk6O3_D=3nbew-h{xxS zFszwj#~F5%VNr&iVAwH+bup})VVw-S&tT448o%c^XH3@bI+ zt=YL1blzcxwJ|KhuqKAJGpvPSVTK)ISO>%IWmv1h7E-ITPI5VQ%3z`S`Bh>A21_lj zq=^kOY>3$0x}1mRoJcA@w|<6UV+@-x7=Dd}ZcfO{PqQ(DVX%mFQ>2@YEsOifP$-dJ zOtR?g!v+{O z$gukuc9LPI88*zYE`}Xp*inWZGngEwxU3B($0??0gUN9^>#P|}j?-D^L4(P0I_o4% zCdTQkvuH9gPG_AJhOIJe*e;>^j4i3`SRZY;M-6zwKR@bd?j^W-w<(vYiau zVKCgq3fEWY`qLE;8&A!=@Q_mSL9}R&zVp-dcv$8BAVBF=y*lPgh2l)?y9$=Tf*h*Lx^k|QPu*tZQ@0uU)NMvS zb(@h--Dc!dPpWd2OWzqL*6G=W_!M+C)9KDoeqAzMQaRko_ii)tz1xg@?=~afds5}6 z-1p8ju_Inxh|d~~`h!@^U|RQnumo0Okxd=t&?aBL&B&K;GxFuzjC}bvBVWGF$d_+3 z^5xr%eEBvbU%t)Amv1xj<=c#W`8Heo%BBE&ieco-w{^*vZ!_}c+l+kqHX~oY&B&K; zGxFuzjC}bvBVWGF$d_+3^5xr%eEBvbU%t)Amv1xj<=c#W`8Fe8zRk#&Z!_}c+l+kq zHX~oY&B&K;GxFuzjC}bvBVWGF$d_+3^5xr%eEBvbU%t)Amv1xj<=c#W`8Fe8zRk#& zZ!_}c+l+kqHX~oY&B&K;GxFuzjC}bvBVWGF$d_+3^5xr%eEBvbU%t)Amv1xj<=c#W z`8Fe8zRk#&Z!_}c+l+kqHX~oY&B&K;GxFuzjC}bvBVWGF$d_+3^5xr%eEBvbU%t)A zmv1xj<=c#W`8Fe8zRk#&Z!_}c+l+kqHX~oY&B&K;GxFuzjC}bvBVWGFZiRyEA%>+H zw$8AJ8J2T3SjG(|-A#t=Vc4Av+sm+h47-bAcQdSoVXX{nV^}-GIvCc;u-yzRX4o!< zRWq!HVYLjaW7sx^)ibPtVcQv2%CIVil{2i8VPy=fVAxKE?Ppjc!wxX)Aj9rq*bas@ zG3*e-4l^vwux5ru7|ITz4;6)X4n>nl`*W8VR;P8Wmplz z3K_PQVI>T!Vpui9Di~JIuu6u#=xXq~yvDG3hCRfvhZ%OAVGl6ug$#QXEc?k?AZvlF z1+o^%S|DqItOc?b$XXz4fvg4oM_b@3#sAL_<=ien{QoBq|Ns0QAKmrhU6Z@&c71v0 z+jp++Y~A@UJ3g}Gi5;UmYIgj^_IGbz+1|4KhYg=>cv-_pLuJF4>)&6Ws_(4-!M10% zJ+W{VqK%J!9g zv-D%7uP&V_jo>_hKiK+?t=G4Pw|=+eBPEZQOqA>``DXFQi(gxOwz$6d%UgbGOMJ`S zTi#W4t>{3}*9zZLxLA0w@aqNd#Yq5P${)!8<-C1)U&(z-?#0~N+%M$3A!jP5GUs!f zU$c39bLr;a-Smo0!<)8j`u#iJaL4&O{^O&9iU0L;MnLD_VGL$mb0!GO`*~#@m_mid z;3KKL&(a+p>pAU)EOR4+a3SvAV`=IWki64ejL0Bd2Jg<8fj&3`8OU%>s5=v6?_E{~ z`s58?4Rl}-E`xVw%)qFDjtjzN@D3{jZ3A(tnK;mg0@}RZ3FMXGqQm+0$YQpGiG4cKpKI~;B8h0+6Gn) zgb~;b-kLE3Uk!v2(n~$TKs#@?GSD`l<5(yRHDx2LAk4sK@um&3@YO;Xg3aP5tSq!0 zg0&!1uvz^023h!PLB>cgy*?PV=#5qurY%&QnFDU1Df8?a_k_wv*stBw+xV|r^uaid zuMP&ieZvNIlG9|SD#>s8A|q;|!>Uq`%H!BmMP;HhSF# zb>eKKGYzv=(BJYl(%-r^Vgiu9#;T7VM{XnJ1w~gB8~^mx8TIuKBSx@_)Xx(P9+_#err?<*dY30wTjEp^@cK=BmY zjR`*cR7QP&@f6>UG5*Ueb=`V*`0LhFlsBgMmuA%W7f)d@nc`n!sq5AUi$^d_ruY|U z)VGR9M9kyCh~`fi>XTE^2^{!H=R>-)qRU#31*5G$&M9{Vbz2zS$2i^2pl*cGz0K)% z1a-rV?xUP;dr-HTi7x*_PM1RR(S^yRe*u@i1?lNZWYRyvrH|0~!GJaIl?8MpFc7#B9SPe~?K|0|GtFB~LKP#dyGE!sNcn zB$t67BV6(oCb<|5h@Kk`HHoe?y7an{+&y&_0cvrg4~7q;@IVHIvvfcQr?8koVHy_d z#7PukyGje3f<8c&P8w?Ew61NWg~}o9FjLn2Mp{(EFn8)jjMGxbu2Ym$nhBW0GG;eW z6LC^8A+!X$XogiAm=G~$F()u8S2L)H2(#!{M#agXBI3)UXBn0IGpNYuvYnjDl?*B} zwrne>ayf&Fj4VsN8aSop5~rd@5V{9ZVbk}7?zYDrJTt~DNWYpGZ0M4M>L@_tsyXLN ziird%(GyIjXMHItQ;bFQ0F&voFDWvWmlTuflrJS^DlaA`(@9@aWJ)Pp(~Y4!?dDJT zQX*3%jHKCD>HG%()0tI9;92gdy^)N{>NFR6e54P1|1_LY z+dVs`Q>!!nu+yA6J%-DQD|ZTtW?FqJlde96MtBjZ-po;XLz$G_YO7|mp@|1=ZU5O| zvc+r^<^fyNJ{wF2MQ7sT_uIPG*7~Qgsh$`~eLmHm5xO>I16k8{8_9!*@shIe zj_{_9W>nT4BOc{445*VCwcVZ(PjaNr45<4!bz?xOX0xq6kxAF9w`evyppIu!Hma@s zK}@XcW45+`K*<)f4L)jX+5<|qm_51Rh^=c4DA~>Ifa>z8$^nJsBA_~Rt+pGuFfQn?&HS0|e z58MnD&ZO+GHa(Uz1FG59wg(hyjR$h(3Oa0S1_up1uY~A31LN~Jm>Rz9!JD}(e zf{W09&`91(14`U<(9EP~LB=SJwvyi{dO~E3a=_LM7)8watWoycy0%fol+UW(?Neor zbQFzck953?Qx!9}XeL|Sot%#ENJnZVJKpx$s&t9qgg>0aE(%psAM>lWH-o0_6dRAp(@M)u^6-L{Hy5$eMo&_H&)?J)FueB+HSh73m8ZY%l68#Kj~$BefITQe}; z#I(-#V!f?vk2jP{u1KaYw)s?<@g^F}j<-5aRdxn7lP#{6)A5ZrY9%|~YHU?|yip_B zLaQ@qdgF~6$&R-wMpZYFrZwgW(Mnsz8gF8LV}A3>Ougu2Pqeqsk;iA#LC`opTg*48 zX?iJi8}I+IHaaIn@BibWh0q_~5vu!0?XBAO+Hcmpzvg<)fts&Y|77)*>iX(0RK2=t zxGKNula&ut9;p25ig#DssOYOGuJ|0@);r~g@V5RlWj|InU)EZ-sqFVk-&%UPba&}j zx4wJp($?m!-zxc)k{cz*O71B6_2QQoj~7=L|H+oOZi#K#v*jyAZ!2<&=rO0U=$nNf zD*Um+c;V{{nhU>Q@R5RVv>NVFjwjE~yiAjgroQMzw@i zY;|QVwL87IlInC)O&k0*teite*1L4pwqc(w=c&*=!nj6W4LUE&c1%|5t4lMf#ih8e z^+8eV#*n-ujG<8{^6VXU#`}AmiSzA|(VI7&!Mm+7bUYLqkjINqvh!mTn7>-ncUk?9 zRQ+BmktmYh9oluf2OZQ4>4Wq`1|WlwA;>AnX~-~S1TqR4gN#GYKqerQkSWMCX2Rj=NjTQRZCpZ}XiDBLviErZX_+wS7eXB|(!GSIdZMGqv4zVKX}yGl zljB23$hP{JnQ%ZRZ02%=i@?jVf3gQTHurN05f8*m*f-iozNuAzxDNZ7?C#L2>5 z!cLj6lS_ybjJ<>%y(8p0WrtbBOxWH%J&A*8jG7zZY72kJc7bHK*LBCOo6a9a@RzWKQQ`i<)$$KU>tZJ`~!UbP{tE z`h9tMb;X&B&#&p(_t3)LJ=Q#prupXS!LHz`)%lx*k#HqM9QQ?0&jp;!>d3?7(G9J5 z>wzJJkNyR~6`Yq@u{SzJLy>(mlgp{~_CUdc@&0}D26Ytgy@&gv6Ljw$ zb=M?%&*IFA!0%<&H&$)vM{*{E?;07Li=OT4ADb9~y{4i=zSFVQb2)P~^>;SNz^HjL}HJH(S>5E{!EZ<~R&0;e@rvHPXI|S2Do*o)k2TymPyXeVBJQy$!cz>T+ zwOy)`GlG3?`n$}kZBkV}r!%Gg-^{AwWv_Ua_l`nzSgF92< zzsansPXZKA?#!_KT4q(Vch%!N^XUKATn5tT=cw+L&+m-xUu~eP`j;Bbj>x~IuM@tN)LYLw7Hx&9U)GCmcq>;sRte{y$y=D-OhU$7pj!X=Ga7%w zYtX6&Oevhk7dee)YKQQOF=hNQuR&$dHN|NB5vxJ%5Keza;|sh7l|inraBv|PTnuz) zB7St;{^%Dk%W=IN3E{@h|6}_Hwt`;xX7oSYUR}YT>Cb1<^j4g~>BSWJIa^ULb~B2E z(~Bwc_cLjFMdFr%G34*rie^y}&XAwAHH;#{X=Vl9Z<`9!{r!Ct&eTM7bdvrtJT!Wm z`b_+wVcKHm+uzzi-6&f5*qPga&uox^ueGQKs&Fxc2NwTO__UD&t&)~^XFY|K_vM7o@Km z;!c6-++TgRJiKba9IQ1y%x9sk5izYn6CY=d4?SBRUNyw617nR};j_@z@K=N01u)k5 z_Nm9rI@1>WAr5U14bd;kRC`cqz}>$8GsBzh9IXPry;|T5y&WH3^EQm z1DSwKLZ%?o5Q-^u4ssrH0Yb5ZCu_;n0I$VD9#GU63P?qmW~eqCLoiLDabVBEaV*IJmdo8BIFX}GUR@U1Gx&Bfy_c;kU2;kG7q^1 zS%54;9)MhjEJ2nbE09%40`edv30Z@rAZf@tAl60ND=N0oe)J1=$VR1KA7N2e}h+ z7vyfpe#ikxBjh0D9!L}9UdSQHVMsG142eKmAgz!#NIRqh(h2E;9Dy8#9D^K(oPgX1 zISGkEx*$@&M#IWC^kiS%IuV5|9TWNyr)`1xZ8J zAvYj5A-5n8K^}%Y0(k-Cg^))fw;_)~9)~;uc@gAE$crJlw=oVN`H%ugA*2Yh1yT$t zfoz48LdqcJkP1j8qzY0Ese#l&>LA-7^^gY0cE}FMPRK6EZpa?UUdTSkoshdAcSH6= z4nP_q2O;-BnjrT=4nYn>njv9G1kwU&g|tE1AsvuTNEhS?@nDyVs{!WrPyAE?PJ(o47;0QEevaASR2FI8P>tDPLtta!|Q18Zi7)@ z5Gyv=5)L*bw##5K9ED4)nqf5zt7TXn!?rQ3o?#6P+itL>SVGjVlwnm2D`!|G!^#*| zVX!qE_(*oyX)shJO>95I8X0zgVF&$eo$|YfVLKSs#IQqtc7yUe%&;)Sni&=`7+piD zm6$`nH~PF_&FJ?>Gdgm5b}iXjkS z>6~-w4JOa&oO9|7CeP`db81Z{&gq6~+_8CJuvDuc;$I_I2nhE*`E(qM}z zXKn^(oYQZ*wx4G78}G8~Yq0&I6J}V1VJ!@6Wfm;8 zKel!0zS?GVziqQ3hS7bvosRCqZASO!HmhP-HNz?xR?e_WgT-)BlTGOvLYJGs0n^0j zS;l7b410)S4>RmK!yaJR3mNt(!&Vu#!m!5~M$b)l+twJCWY{{xZunS2*zYce#Tj;! zVYe8z$gl;5(et9$Hdz;Xeze&#!_LVl7?xsK+F;jKQ^I~PX4sPkONYbG z%3{JHKbmfvX5>fHY;Lwiq#I@!`Q>yvCnnR8AJ1mw$I~n}(<<^K|DMgrzo*&UtV~D# zKAVyMPqX!Oo5+v+gEk}opk{QBL+vGhq0PvDXfyI7+Kl{)nmKDpXBm?@`8G9+r`8s) z;oPro!_JzWX4o*pMi|z8+Z%s6zbM1#+1{?p5R>02hV?M4mtlPj>u1;i!v+~P%CIqp zjTySh&h6tVb}!2E;4MAVN(p7X4qMVode5$vKGi%AZvlF1+o^%S|DqI ztOc?b$XXz4fvg3x7RXxQzljB&!TbNKc>jMA@BeRa3Vjjp|HA;7 zerKDJ-`Qs5ceWY%ooz;bXPZ6AF!DRw>B#SFGx9szjQq|vBfqoF$nR`3 z@;lp%{LVHbzq8HA?`$*jJKK!>&Nd^zv(3owY%}sZ+l>6qHY2~Y&B*U;Gx9szjQq|v zBfqoFx^D*=`JL@_erKDJ-`Qs5ceYs{!^rP!rz5|!&B*U;Gx9szjQq|v zBfqoF$nR`3@;lp%{LVHbzq8HA?`$*jJKK!>&Nd^zv(3owY%}sZ+l>6qHY2~Y&B*U; zGx9szjQq|vBfqoF$nR`3@;lp%{LVHbzq8HA?`$*jJKK!>&Ne&GunP=3#;_9%JIOFw zUv8I6>(6ag5(?IDE5m55x~)rV*KI~?*=p`hUGJ? zfMJCUD`MCdhBaIb+H@zwb};NthV5h6UWV;q*lvdHV%Tta|Z!#Wt&&agIywK6Qsup_sFHZ-hZnSE&lCn&slifCPEUx2+f~fxr>ewizcjpFoSRl3f&ARqTqv5{mUP>=eUJGi;b) zLkt^b*cijc88*VO35HEFY>HuL7&aAmQ{7L);)58=A!oM(gZ|UkQ2XX0UdGSlmdrn7kp_b+7~i7Eyl9PJETdT5bsA z&tioP%V$`g!NMxPB8JgUFI|RCSIn?228*ctwlb`QVPy;}HCT(vuYzIa469;TrNLTN zel-lMW>_7=Y7N$=@~daqHim6yScAdZRen1ewu5228Mez{9V)-Q47-bAcQS0B!8%ob zcQdRJEc?k?AZvlF1+o^%S|DqItOc?b$XXz4fvg3x7RXxQf0PBjg7^Q=6eE7l9U*%E z|2ug9U-L|ED2dR)h;NHs9B|{TE;^+QD`r?N!>Slo!mzCjD`!{*!?rMN8^h`uR>`n3 zgJFODN-~{_HxNVMT+=R{3_HTGCWh^2*fEB+GwcAv4l=BnVG)Mi#jukM>trh@@@m?l+j$Jzz4WdlxZ;>n7b5 z+Hjs&a!Q`gcUc?`d1A!|OU17VR&Fri`$W1jg9+a!*j8eQ9d4Gf5b~HVK1|nx$jQ&Uu4TU5H&E zhVXl4I>%r--3&3jN1=53y$8h$vl+z;(@ekjpm<`M>GvKKU(99dy$8h^vl+!5bD4VY zK{3kc9gJC*GtbEPGA8Rbn6ArNhK(6a*Kgcps(zCUn=+ZI->AWKzfBW^Kc4ER{p^F} zQ&&v;+4~Kq{pHHQ9rt^Ei$7Fuj45sURomkW><5~hiJPbx<5L+|Y z8ak6$ideT_xA~;UwC*8;Y2AAart1yl3lr&>^7lI<5`Yfh!XC_iGQ2BWqSD>E4N2eB%H#W2Ydt1#F~d`++t zgQXPPN(@JVn00y3V7e|3Fzhf|)(ocGyUMU-h9wN9 z?GiVb?zbDnaJUNDYMJ^ivF4n(TI4d(mtZFiChP}x%wWO>V8;z6YycKD*bL&cP#H&w z4f@Mndj@q;OqZKBm@fB0gXwaU2GixP8%&p*FqmrtVng0|NiL@lzXjmrFz=*t@mPO1BFzgJ&Cc(0wtOc?b$XXz4fvg3x7RXv4Yk{lX4)T^ zbFwh>ue%-#Jsv9A^as1%wrg=$WY_MU-`n}Aov+$?erNxVzuob{9WUImw7q=Cm$v`( z_SZIaY`xFFwzX}?w&iU5LfyOSZq)VH)z$q? z?T2b#T02r(S^LGB&6V+*gEil%{-x?is=KR;s(-KQja8Sc_EvqZ@@Fg4mB%VyRr*^M zudTRPv8Up1%73B!k@CLs((*5qy}4|*Y=7B5m43AJc9Bzhu=HD7KehD@TW7Z3yY*j6 zK2`FXk}D;RCEqUoSn(^0KUCCTw4>;s3ljw&E?g-5^@7^`rh-icAJ2bf{%7-EmA8_2 zH1AUG_j7+M_jS1s=j_Y<+nis_dDG^eoGm$@-~20^Vw(?c{ztgqAKlcysf66{|1&>b z>O5uI#6usvW7EfWj}JKGW8t;~;uL25F)%SUJ?^wT(tH!AgEcaW`WSDi*vcs4ctlQ7 zAL}g@TNp(g1jZ@qW4@(ggi*xtU!0;o_FF23EyW1hh%>)9MSTpoRBYxHagcT=4vV6X zVO4!BxKQlk^l)4@qo+>^7kZtX9!}3@^z@aL zLeCyFR33F9qo+?87kc)XAwB9rMo%9&F7)gn)2up>(bMOT3q5y58L@0L&Rq`KOT^gDF=o@9I`7560<#f00v^6XR1QP1alsyS4=Q_WG$!IRWf zeDt+)GK5piLKB#K`kaAyYBDvGO0ONT{*Ep!9XK%4*w}c-%%HM?p^q2hGQF~$(pG;d z-KGPxjZFt)B9Erorq~T@CPY23SyJUAY;ypg`Nm_%hsJUEYxI0$<9+70R<=zC=8%0H zGT+#EWFnqQCs+Dsme%42sM1tm(_B-$X}&mAd^;8@#Hnh9I906>r>Yg=RJB5!s#b_o z)e3Q{S|LtVE5xa4g*Z{I5GSe?hEC#4I{Fw*#@s6_GZ{~*=Hg#gopi|u)%1j6fRph; z$Pb6ng^W6iQLw(cIM<7l?dW5q#Ka;?aytj5D21h&)Z$WnH;qmjHV0#?D{HB@@ z0~et(ogCac2a#T=cVf_ae~B^Z|MRERurX>TFBuFQIh2E$ifqoJSv@mLOWiZE>;37K z*lv+;(|-!~s)+heco&0Opi}Zwl-p6sFldOT#Li!TOhPqm^S^= zW?f@JhSWf6A+*_+HqFvzTG|v#n`LR!D{Y3QO|7)qbq|C#v(lzi z+N?^OSZOore#ikxBjh0D9!L}9UdSQHVMsG142eKmAgz!#NIRqh(h2E;9Dy8#9D^K( zoPgX1ISGkEx*_Kg*Q! z&Y(`j&}rp#-VxLZ8#)nA=cj`@-lRb1-Z$gQu*ShpdOA32y&Wg=Iv1U>{(kZNaTr&V zmHufq{b=(|bW1xfFe~}ne961$ICo4`ULok1He8yP)>}8wLQ&`$rX_FjDVc?!SD2Q( znN5%Eaf&cgr#JbMw@^!3jfON+kKi^NA3gQsD*K7dN>ordeH8PMrSqen&d|gebAI;@ zof|(IAjWYC97o=hLPAA9Q3bX)LNYmqd1I6#*{yjLC+`< zW0NWH<&0vp(_$7F;R<{zgPvJn7zN53B4b>?#8Z^_A0tykV?ABny%^NusCabwQdjU- z=f$jExH;NGige?WLGj59in2sH6+VOFi)=-4r$mEIl!!r1ibrspU|oif+lr!zE#19N zRA^#UXV83%)ohLSC{58!w#?hSrdy_HC#(4=t4X!(7PW1rhO(M3WHqU_N|PGOYQBKi z^va}$rk9xE^N6iUGmYCP&D2b`#9N-8m@X#z&R`zK$ZHn^4;7_JitEjr88zj|6Qh>Z zypd5;*@uQLtGS+0Q;r~17n9Y}(csjWW;D&I5t?WzTj(02DooU@O++^~oQaYdHMNP* zQdaZ9jGC^AFmG{XCNgTeCc+OZXQEX`)11)BMEHGO3I`{z2Rv2Wkc{>AIm2V;oN%O5 z-19JZ7K^+>ySV9L?kpDA^vE84b_fqC)=YCPki4&VpikW9Ftv|+sXMLOqkEXz&+!VV zJvxP{eT+?y+M_3!+Rp}(%i6>E%$0xDOWk4BUQGVzv^2I}1#VLvUQcv^=xV672k%zz zXVpYcXsxzjhg=D0=?>9KOv^5LO6^w5e**LE!S|*#uj>a)oO|(oljcwUzKufnwHjVv-9rl#)sN$RBsHf># zV_SBb*OM(1O=DYjidB;>6HQ}VHWbiuTPB*uwha4u^zeukVjmEu*HfE$jA_!d%PHG`3|?UQf3SO=DYjl2y|!L(|xn;h|QWQB~4t z8Jfnn?6{}Y%(jefESOmz`%iUYrk>j}x~pL3Mr@&F)ZCWQ9R)Lk90_QdEu(vh1J+9r z*h0S>#WXxVH0pF=mg-E0b{C$^Iaw6Sc^YogXXO5WinlC+ks>&%KAVu@Eo&A^%kv74 znQUFM6DGSM8O2-Hx;QF4wt{^n6mMCxmAGUSZ&|a{oU^_dOF0y8*=7`PS+nIiXC`?q zoHcPq`Z`o!PZ`oimN=NaQZAS5y4K_#VXg!6^DBiNc(v*(k zE!&LZEgNi|(owu+n~@XSU^gfo#ap%+#aq@4_j1cIC+$$YWzBHJdu$PGr@`d;>uHDL zE$ehRMpdMvc*{21$FRK&+ru!5w`}J}@s>4{=f0<%?FN(WSa&GivQ8)4vF=d3WzA$e z)*XtsteI@bx4{?YQAkyk(nFyk(nFyk(nFyk(nFyk(nFyk*T~J8n1>Z&|bC>U?~C z=7vM@mTh(vY|g>PCCnvgFM<%KX7=9B3C)`1E#{)O5M4YnXAap z$3n?fie2on_*$%aKGEl6YiqIae1c*Zd+ER;^9hPwY_Rlf%Y1@j7yDT2e1c*Z`&iq2 zf?^l@So?f}Vi$XCW_hk-K0&dIJ@#O7v2#8_v5S4IYd%4-i#-;bo0*wUQ0!ulVJGSA ze1c*Zdkm4D5s;T+7yH=Ue1c*Zdn^@SiO(k}cCp8>n|ppfL9vSsmRP$spP<;qKDIEQ zpxDJ8TbYSHFrT>OW3y}N>+=bUUF@X;TbfT?@G(RLSe{Q%>|!q+*a`v*`xwSca`h&~ zE*3!qFoxnzoWdnE)9XCVmK38`dN!lieKw=lfSRfN!t^RoGnHSMUK84kUKQGmULk6x z@{7=`M9oxw5qiaFGkVo%GkOK7naZz)UPWrA@@t`2ls2PRl{TYSn3}2lTIp4$W-7l{ zdc|oodevz&dIhSP%CC)Hg=(hqYok}BHrviHdWEXfsr=gMRjOtxzjk`XYBPG(YBPET ztC`BLgI>jIrt<5cSF$#vSG6{ySGby~{5t7Xu4XE~PI{$lGkVo)GkOKAnaZz=UIlBW z^6R2k!ZxE<#Wtf?$eK~CjcYSY^Yoh5X7t+DX7n1@X7pOuX7rlZX7t+EX7n1^X5zIl zRgA7*RX=)7Y^S5w#+uOvYHA0)hPD~KTGs4A>~DU^SzMr3=Qg8P=Qg9)>o%j;?KY#= z_co)~@iwDZ^ERVb^){nd_co(f`I=E19Q-uU>w25f>wBBg>wKHh>wTNi>wcTj>wlZk zasZpr@&L_})FG%JEfugCEg`TOEhVrSEiurHnu`S-%e2J6X0&ucGdjnh1^=NX2{xmp z3Yt-V?MO#U6l_LI7c`^%y6_)b(qJ=M>Yy2Zc{-hy#RM%MF<2L|93x%IX?CzBJ3-4$ zbh;GY5D=r~Cz|067Z%?wtkKd9mvu=-OExq^^+Y;a{$Vp()?qVR@?kSt5@Iu29%3_E zK4PdFou!{}&UO(a7` zdx1jX)x-^pHG|!@SQzXvi$%a*Xt5TsCoI+q_9Bb5fjw!lcCeh2{`z%*-#(Ybmu#FF7IsJS-a!oJ6^V9e8q`gAipze#^xa#}m+mP2i>;q2UfKG! zlKGOCZfPn0mo3k1d2iA9mTg=9yy)|V>qRGu@{7J-@K)^cZz+6W^T!HaQt)s2pUVG{ z{OSCi`7g*D$SckJqulA-UAbSw4*$1p{`{t&*%aRt3hmnzzvKV6p8Tk_JrT=pcGBj* ziK(89+Y_z*f6xC_*@coV=o$ga@9sd)V@J&G^7SZmu8YUD|DmnhJCc7 z)Sm-38;Y%pl*2e2h^upp2$a21CiZ4TRKwkjNV&M15r5QLsN566hCs2>hLTN>_eQ7s zoak_LV#J|;ie2r2Z!YvjCmx~IIe~9R#zv40=Xx*$g&Mvg~T9pkT_%> zat*QoS%f?QS%Um~K8ztB&t%Bx1zMjBL)yD$V12d!f$v~iAO$shiw@LoXDEwC476y0 z-s8a$sJ0RW3Y!`l$uI&3$EGulz@gFUsXl(BP4@MSjrJl&f`5w}>iuwrdP@z|oE8Z( zdJkpL8xggD9<38(?4&k91X@h(f)=e3{K;S~)s_N7t7m#*qHlDHy;k*i+|{bTW3N~J zC3D5PU*Vc%MolVU4nu+3g=LJ4n%eKcwhLoa?31v!TA|a_W(P)1G>a6Oy zHBM=h#8W~0FK28XH&S)exv{FhljFo5t@>LvUhS=ZXu(p(nz$nt#tv)}gy!{(n(ml| zy}7Zjwp=h))1wyaEA2IzC{b;VAiasc$-XIPaw8bJQDPxQSVy%_z^4>; z2F0E^*|y+%UDWZMS4Xcbr6#+KRZ|-be5GMOnB1W!n#Nj0?Jw}DA^3#S6Wzw@sSO4` zy>_=e(Y)a1MYK+BG4Sa{+S~#~1B1Jqpg6&p#ppb_8zQ~L++U4&n%<3-8ZYksmHdXL zAN7qpC&+KajK+V3X*$Cf*bybS;x@k7+JuV+spbA;38Px7NnE|uS8T=j@2F-OzCqR0 zH;v2<0nXUax0kYRG{360SXHCBhi|@|&-m};EUB&Y;-GcZP6N+6q6VtUTow3ssygsr zs!C`(*!x$}N4Smm+o9L(Qo8u%W}4vEI%wkmgPN)&sY=%fJJQt_2CwPf0F#<@k+6lT zO$>fbU!ih~#<8HiPulf02fQkl?!lIh2Y;5;b_TClsp~Ho&1LI+!YSfYk$H-d}hv#+l8n>2b(AW6S)tJe_gRcg&_lkc2W+BOd-ZZz$BfSn``hNt5&EZ zWWK}AJVRVD;ojIF?{&m!lJ%!RNWQ=9Fk~nW&V{{6haw@xR+pEtuzW5)zos1ohZgqk zvEmv*#pg;Ge6zKK2J;2xDMYFALa-tH*G%J{^;G{;VPANQ(@kWx`{Hq8ma{USv7Qx-jDHYv52OilFXRy9Fr*n0hD0E(5c+)Ain|8Gx9i5qKwg>K<_7xu_ZeUI zkL;dizI#Lxks{pAr|@^6VIDWYT)<2e{mqWShGxU(#>HTpvf`&9<-M+fo?HAhe<(5h z#pEew0~+n#fU)9}1#&SWwBfrSv0R?0=PtLNViLd@e12K_3&{AF6&?>Lz8tL^$eBE4!wk3um?exIH zrB{!oUjA*AKHNqRDqQ-QU7uD;-`py0zIsDlw-cd4xFc}98)OZVf}|nq5Lz;M6LJgk z5aeOVBajzBXi4Ow5L!Y>OD1VKw?y(sIT;NIs+hQV1!6Y=IO*N+4SyrI0d6 zIivzo38{iqLuw$kkUGdVNIj$hvK>OpK5029Ep4TxqI)2FA^RYALhgp_htSf}=ksCu zXx6r23vAfj(jsm{ne;Pu`Us_uM8v%(lm4omK1}JuVd3**(mQtgW=f9_-D2Kjg$~4+ zR1f_$W`;)3_G#A#m-LdCb??wbUk`anFcdMe8tsv*p6)5v(Xmly3>gnc$!$S*$xJQO zW4%m2F%lg{QmSy+3b=p@>&^SfdTL^5U;vjm0%g&*Sh^Et6!gA*zk=AS3x^-0pdO~F zGDZn>tian-PBX$60p@;y*j3R!(=viEqXh&dfLmP2faf-MW4MjTyGbv{1$CExq zd*qN}hJI9!(yFTV$RWiH{iq(JrDE6~IjvC4(2wdNS}EEiM=0|BsGgveqCIkiBHxed z=~*e-BS$ErA46BM|9?03|38EM|F`A-{{x{yaUL|?Ky<2&ANvi~rPx7+-OI2hhTUVZ zd6nNehMi~F1%_Q@*d>NtX4n;m-On(GVOJS;hGDY?TTtyi#IP2I9cEZF!}c&N!mw6` zwK1%nVI2lrRPE?tSTDo+7}n3Q0fr4SY=~i}7&gqX(+nGB*oeWFReL8G7G>Bt!^RkP zmSNKjn_}3c!EnmD*knn2*62KUx_&jwVbal_H9H;cS<_6OzP>cqY3OQpAH%{7JISyU z3_HrO;|x2(uwxACVpumAooP>YQQJ`+3Ll*~DOoa}!l}CP)j3M1m`)cnm_E~f#b9)< zFr{5I7@dDjY}Ln<1;G;d;iJ09Q|Xt){yELAsm*otz+p3b0I?Z8kl2hKP;5pIJT{|; z7@N^Ujm_vGN3%s$KYA$AY(+78V6quKNNI*0$_d&GOb>%LyTP#A410`W^ss2>_XNXU z#IPqBMh}>Fe)Pa;vpk07GmIW`ZC!d`wHZCY+Ke7(ZAK5cHY;ElJpkM3=z-W~^nh$L zdVsbWJwV%x9^P$657{=Ohi;p#GrHsiu+u%lFme*u>Bxy-vquevXhCB9kuyN2(~O(} zHY4YN&B$3`Gjbl-jGPHJBjA(_evJmBIgEI#!DtR67BLu|@lNb8SfWSPWyXo6lDK{^Fl>Nf!wlO>t)zchMi>C5W`L}EXuHMgJFTBu>E<4O&V-frJH8hS%V?0 zlgMwJVPgy%W!MD6rWkgHVW$~3Vz8vD-$jF^6@vfyGVBV&?q`?-mQ>fd92p6xjTrn1G!JREY%rQjh!@`W($QQ(tiWJ1 zh}A(X7c2qC2Ibe`AO;cUk|u+7Ds~UUnhiFi(rshdZiCILbe#%X?`TXiqrc6r;uZMAj3TK8n#aNSVt zU)BD6?F(ve)YR4fdCmK3o~j4l>fO~}uljJ+Q&ktM8ms=f^3#=Xtc+LQ zTlt-eXDVJ^@s^T?im#TxxBNzVPx;pJFP6Q%Y^5w*_AjL$FMVz4Lg|Upua~TroGi&H z`NQIO6hBgYp}2QTN%5z*Jh7#xD0j;zi=HStS-83AqlHft))xFj!CMPX7rY?v1Np=G zf0_4xbNcc=nw!e~)}}K#U)X#Ej;G6;BAfmj_v(Lf)9kg%Sl;v)zgGFj)J8-yb{PaI zv6*UqvE5^o=mzQV9()641kS=y`o^K4LOu+MQoldQ%@8weKE!d$};cr_sP znvRuKTLjR!*afY9p;S}ol{4(rOQC)IFIXUV#4trDikqPRbURzwb<}4;3e6IR;8v3bc(~kzr-{;p)EhOV>3#&_WR6b3tegiTY z>@_k#1D+*=`_%kkSYVHl0a_4SO|PWlNxpnWeYc^G@;6lP4Gy7Qe)Y9fk~#pxD49}S zaL{jp{@_4Bgei9ni7_bhNUXwyvLQ6d`*RuAxs-n{7y+NXu$N8&f+@^4BuFgb!-N;eP&){EPxg(Cf@ zx%3nR1FOW3(eY^b&^u}RAo(Y~d<&`i9P8gZ{+C*o4zR934Px3M>?7iu#zR zt0G`bjz@cNP%4&(+Xs`PsAmGnN1_v_k-9ZKVjT*L)F1IuPfm@EJD9PeqrI41#fE({ zhr%L;f&2Hw`NpZx>DycIwzn8k0@(^Fg_J?cAr+8HNEM_SQUj@l)IsPidp)E9vK_Jm zvJBdRtC!$M1ujghV0TkRC`cqz}>$8GsBzh9IXPry;|T z5y&WH3^ERxfJ{Q@?fNw2EabU-4qDso&_Vy(>Y$19=*mc%N%^Z*$|*`24s3)%o*(p5 z;s<4@*Xg-{QHj(P#K#Ucg!CWq()S|vh2DSUomr2uWk-5~+AkVvBRE)_(Tk*y(}rAp zjEm(LEIqSKbN6~MbPfuApQkKZ<#Z2CIoMYv;-a8|!O%HSdM~FG#$GAfbV#3Ih#6?T z+tV8F89t5Z9A_PDgB1JEGAg}`QKFKXTSP%9$&R;!lHSQEQ9-Ivtj;?a9olN8niLH6 zf^y#C>Cg5|oW0dl+r_wnpcg0bOonl%Y?i(FYu`3CVM<<4+ zF3{du8BEZwli*8>D9JTncfa;2D7HU^hU*mg);YG(o^a% znrQZ*eef=dQo-?T!$>XJfy{7+cTaa9{d!D|Oqkur{0c1l6^0PRaA-{G$o^w=7Caqg zg|XgVsY4@@{aw2j(CItdr$({ZTg}ZUbDk2lrtiEOj5HeAQeu7uY7KsGRMpTP_6O>! zr-bK!+zcQ(J*KsM9!#PF@)8aYkr&y8Ixv&|xc53(8Sj)WwyC+k9<43S_u+$a-Qz z^0QvGD1SF|#1CRJhZ9i`P*EK>IYI{At9_BIj`WociU4OH+hqLMLJuuk-;9#8c$jO|J=Wrh1SU@ssFL-2V^qa!4fp z)!{jMb+(;4+a4=m6Ef3zo%Pg&e;BoK-FWI9MW8Oiajm@!A|pX$%q8*PkG37{$WXA@hNQ z)6B#UFoovAlkvO)OhLux*%<6rCe)W>uXsBq18`9UuLIsc;g+UQQ*HpE#ye&xWKeOa z==So-!q5sN0eKLTa~n}nAbF5{2ra;;h57n((VCD@YLpsH5y#XhQU$BOtg@R9%%L7} z$b4g?sz=jYQ@m;Z$E~>wIUjLz7U6ynx9PyO#$(5a#)qAe==sLG?>=x~(fFHUXo-60 z;6P@h&4QbdP1At|$RZPTicBM`)O4+Bp=r^6TZxL{`IU>Tv|?Q=NQoHAzJ3s+BEyR* z9~R-(gm=vU%F^R6vR;{>G;s|XT>;~Z0!2Q%>58;obcpLRn(uI6c2| z2j2e|g^CaXbg;g>wzl%UWj|N=+1z*M4&}UT^MoEf&+&gdHeU>d;H^!job{Qdbi5E= zsHSPaHr&^km+VWd+ea5bn!pxl3jup-q?wwy;SzB<{ zml4#BzJ->~U@hh7Lb~zm)_q~BuW(VN5%qFY&fbtIm+0HIg(dfkxy5xi52~onZw9Xj z+!jDv6qzhsD_mNIm)2`^N~P)_8l4<;2KuJL?Nr3dsMph$Qeg_6p-=@lw3- zrlChotf{kk5mji>^KiBLVAgqoxOjcoKkT}=X>CTu3!qRhIQSR=b8W|A|@ zaX5|FRHfGvR7J9mTdkWqb2ssNq1)`12&H$+luD!1!^4D0Q}-GD+s$%q!T5tru2az$ z`rpXZRd5T?t)!7A62=y0l3u?colZe-j&xgemPUPO;G7$q=%pm+XIauZ@=6h*L9H{Q zI_ZB?7wOE%{!$J7JD*+=-A&o{>U^n^r1?w;cTE${x!x%~6&KDF&KAZB71PsVp)q%< z@8|~ulZ7v3p_*p_>4u52b%ToOgzi#@LYiD?HZd|RwBPy{iuVANk?(z*(8Uj`a|dqZ z{Po}PC$iA3mI#VB0(CCbZYbN58>8V_T}^>qE+?w^-ns3 zh5b>44acKck8>7JRbvx>wi!3QqNDJ5>hz3sTb(sQkF7eWUtw?G*`c03_yKxOM+f?x z;WPc?PPnxdHWJ!$eCX3T{Iq9bW@RP5B!``mdU|D%-q-8Iq9=3?`nwr9lt^oAJ)WFj zTD`GRH7PrJA&>@c&I;#*Rp=M3FzzeKsMUPoH5?J+YYCN)-vA%ebu%;{Knm(`D$TrR zL@Rv_(pd?pa`0WBZcnVPV1iy)O?fR(#bQZZa%=Gvc5Po%IZfb77PVA$6d7x?QD8#h z0yQ&POEOuwRgrB#rbhGh#GqcX2Xc%hJFP6$&7jWJoh*bw)T??oN@5{V5kt{uow1ep zB-*drVzy6xWmGXR^_a<-9<#@BfA>Jt33s%My6D9O;_{-(L0T+(dm~mZZtyJJGZJOT zrm~5yjBb}6H)Mcj`}&&dAEtV>wz*ZIWMR%u`m*Sp4-cx+9O~)F%}hC^T123{ zemLc|vUMHnI?{7I*}{psS-7a%Ln0WzW4_Zd=4!I%`1J5(-$n`a8&o^xYNr0%Y`*Sb{hg=oZ-+dvfgKxK z)inP$cw|}DV%yi#q&jmL-^ENy5<9;V-tP;M){Ni zV`<3M@akudYQt(UWV5d-aJk#lA=3D(OKJL}!^7sBi9}vKlzrfS^yTgKql=-|;{M^P z@zu75m;5zTqex6n>NnfXPhB(3e%r~PH$A@Om7DRG&CAOk?5ca0Ho@&G7bA@i(XzUE zdM?##s|qIpr|HMV8JakQXD2r$mM!^H;wBPly@jc`yL1!NN~!pR>G(>_%Q@zK?f(up zqOKyIkQY{s8&g?`8yeT&^lp#cn?k~}8^*`vxRpie ztf@AE`#VpmmlmGjW|r( zv-tcBmIc#AArk8g%`*Xwy9krN95)z($XbpIdswLU`7Mgt_FK6bjW$#im6erN&~u*m zkm;{x*vi=Zc6w!wbuiFCfYVC1p6srw(6JfIP(=pxDiCw4TDyy+1kC3{`rBJsD^}+U zpPj3XFSR!L@hH7))}-79U|z=ZYxPo&UK5JVIl{jo^t`EiUd>&|4XXiZZMe$Y_gmr1 zuNQsgX`x!~f@mLg*Li!CR_)s>;=OMJ3(Q?Bt;~6Ca4lzD*`7V*xXTp9TrL_o(W*Ut~)QTg5^iyeshxE1!!f0Twlh8%6rJ zwZy~a#!^9-QI)U+u5e@jfo_0U;N%rV%H$gMeLZ#F?_>~7!XqI5SG!aQ$+c3hD&2UC z6!ONKQh3!>kH!S4$S!%mPJim#B6m%$`N-oY@Gsc4%WPNA2$Wn^0}DRfR2U=fx)&3o zB#-L>D?K5)qF9XRYEZ?|p)#Sqnq9+T5sRDB7#8X=iSkpAVq(d>n^ZksxPP0=*<9!@ zk#mV}A*V~VhbFL~-%X(x^SHoR9cc8Cswyql*O!vG{czQc1`6~ns14W)YyQ;kmIEim&CUd+623NSV-PJN0sr?9~IY~>a+(hQW zKo^=r!|2isZcb4hxmuEz*6H3>6Q^#ps2yI}=)YA1^s_l-;&r5YWn?rI>y2Dh-L*qw zE;1HHdQ4jlv!yOom>!)Xw}t5W+5OtsKoEKc@BgtpBnNN)<^KPMO~0}0CEMF}{r1i? zJ3q7IJKHyH|Ko;VZursqry7nn{7wCtZGH9swC$(1U9J1qx_8z+QTGS6$Ls3rzFXUm z{r<14eW3Q2YWCLtpyp3%cGbMLW~Js-&BN8-s{YODw^o0)YP|Zc>hD$UsCZx13#%ek zWmSJy`I*XhRlcZlrt(B(L*;iXK40f*oM@?%?OxBQ^!siIv)FDcw!_-h4kELbaedH#4oO~L2$ zAIa;<|6$%Uc~9mZ$@@X>2Xa4=b0xPcw=6ej^LS2O&IhsH=KY)cHZ{=FrR-;83)o9% z;C-QO%5gmFt@O_MjBDXV0~WidEc8 zOwG@*tKO(F>K_YQK`t^R|B!Tp@YeRq3R=NmguSI3Hj#UoQG|C_9yH0CxBgMAID}qA z+fv<}v*W<48M9Eys2cO_Na(N_$T?~_qsS)p2*t>UH)_EtwJk7L?TSWn ztR0h280a3KOThM6ToPA`-d}x8^_JfFikz_c(#;9aI`FU26OtIOe%)@Zt2T>5_bx+M zdL{kcitVN}LUrlAs^g5(?=*5i={~=$dS>_Mai0nyVC1pS$ir}7vg%9~_8RJF#Isjn zkVZH@MisCv!!)Ap+ttsU{-!Yb>^AcGf9$;ncwE_aCiut(LlMk569m~L0D>f{5D2nK zHjzl8iPQj?$$ltQ6@Vftbp;aah*pkmSyn6A^3al;wc|XpEw9v;ZOu5yUhjPNj?=i; z?z!RJckj8-<ef3>j3o40w`kDtv0q5;(k|a)mTx-+7VM|xo>6r_B2w}9 z&q4uj?e%u(kP*5;oMH^FX{j4SPy5Shw9}NYd7-PMy{6R{n9dq2*iE`f{BvI7cByW` z)GdQa-rK(`UI1!C<*=-NFp!m5onpD!X5D8kLTv`}s zdZ{H#PbtR3l&ZFM^JLkC0bnM;@jts7sIz(mE0_%Z1x34$SjsaQ+7ON6eaO#KJogYM`)`z^1#74Q!XqgV#l>zuC<NVkDwN1n>5wbiQt2A@?qB zNM2&Cr8M_f!SzfdJfB07??RHod@dcD&w=w5FLUPC)x-az&F3)r&?A<$t^1E>+y1Udq0 z1|0<*104sofTExns1?)(Y6o?IPJlW=Cqbt`Pk>H?&VbH>o&=o(b%DA;J)mAtALu;j z0_Y;BAM_OH5@-N42pR$ngGNA4gT_GPpv#~upsS#3pzEL;pqrpupxYq+nKGd|n7`sw zV6ZM8>arqhxaLlVo=4F9X1!b z4oZ#dikTJJSvjO|n$7CsySHC>{T{GRVDVp+*|Rv9nXAu&srn)Z>9S{h)>A)5vCsv0S!gXle{Y|RTa{1NLVV-$d zO)i+WFBPavsD;WL(@IA@tpy&OVWEOWqqbxM5ANSpJhD^hyhb#S>=c>>rz$C#PMcGp zvNQ|MQWA@D3Ti3>3(f)%i}H#ESg_rmSY)rz8DVLJSd>>RkP5bo6N~Z+VhQ-LP6ZoI ziAC8LqwIiryugp@gDPn7og&nOgxa+J)vwND)lN{Amd|~Fw`5Eck#n!nO;s9{JHnfw zX6eC|>3Egh8GaHLSi3driAP}V(ySeizEP2WJq8NA7YoON(Yv zR<0UCGz-?SC>3So1z50pMJ)0_q*KA-6|s0G4s=|a1?yJCA`e8G<%njH2O`bVq*;`G zN!=?ZLYH0fg1g#vD*aq9Z}SMd=uO3JALDLcHld7Is*jrm7sV)V0(z4~pY~RR92F1{ zsvhKtR_}v(>j@qRB^cTU^dLz|P{ zdWv>cOjS0OI<$}IO;Q}LUOd?CH~|-HpjiO=@x}%PtEG{q0Ef4wsqv^;)kOfu=z-pfu#_pAUH^)OgLRL3@iHO$W0JNm4+nPwhnMYA1TtW^EpuA1!zP8JiTS&hUFe z(GE~XwK%7mhnnN+e9oQ;G?*7&pybY=!O*t^zO|@t$;PubDgs)PzaH0soK?H3T4%Hs z;s;@9Gx01~?Z3m8T`w|{D*9<%6$)#N&Kr?)HLus={C^F+ajEk=&XOgMmE)<^kPTy5&Ie)Qn+Ap}v$brgg8h%B z@&?F;v9t3&7B_seB#XGhly9Ljn}|;)*e z*eZFK*=n3&)-IzOt0c0%O|J>qB*Uz%3k){UvZlP(1uVfZYnM2%gd3}rk?%}GRZ+fs zz8a%duP`62vV}2PwF_gknr5+FMdxvWeRSWac>RcEb6fj!tvwZMLa+hK+%fn){ zf@k^i8CUVq>Yl~o1&z_Fqs7X&lAY3{RY;2&mn_nXVba*oaqgojlu~`jH;mCLp~W(B z%||PZMI)Qb#b*-9c5w3tJ8IzzUf$y$t7C@mlM3oAZa)hu~B(>PL2 z^*}a^(TXR-P~>uoR!PgL($rL5`6&rIpLW(&Vaq4hVUmx44h7LF9=2A8fFvYXUBMei<12zLJowj_sY_$8! zVm7_o0=9pm#>p{Rv6T<1v8aG8 zd%c>k4%j`LuPRzOxeEGOOzT%p9t4KIUe$*lE8IlNS>a(2RsOf?fsa|cOn?u4y;qm0 zkK_ROEN1wUPlFGAJ?E=jW|-ltJOd1Uv&V-PQaLy8V_N4}Wi{I6RKe#XKj@iX>0wsC z1TdJ}OAmah7aSime5r(knQ4%3y1+2QH{Ey+{Q+I}uG+b_OFP4CzFA=EB4?j3T|4h% zhA&Ms?gCx-%=p?SR(Y7^d**e_qRRokVlDP4TFmejp8-~?Xg)M6G_zuA2hvO43&@st zGt9`An}FrBZUT0td5&{`DxJJY_6uRR$$kb)Pp68+Hw`|TTUc3ItT-=VDTb9xB%O>W zfzjN;lf``Ff`H93Oo@VT3K;sU6zbTUo8=rlX&B7T8B)N|Us*miV7}rY-w>AOd}h#_ z0fza8mNoN@mmwR*@{G^UH|`LI@zm%?W-ZT?YzWJQ_-OE%28MD>!!NzERRpZM(Hpvfe2YXpo|2N)l+N#^naKCHSXlesLz@@aaEO6F)4g2}3O zxmLhvMS}AolQOM#kRPDmCVxrh;@Rw3>N`W&a>vJ%a^Nc=J;tXV4$cK-6&4A~Dy#xo z@&l8v@~hL34P&%--NVTE@Rw()9Pk$-tNh>$WW(4p$XX1dimynr@E0X({H2RzLl{NN zvzX^Eq;uKkTTD%ra`7i18^%^Z)?%5s<|{xJwkl$bE8=NE*1{-Mi=RacELvdE0*e+{w7{YT7A>%7fkg`}T42!vixyb4 zz@i2Izi5F~EwtuSgXjHk?#nv`=Y31wyRUiQ5AI#N_kDZz@A=u?-?MvS_t$q7cmDFO z{$0Pjvu8)$&i}gOlRI{A|GVuEw)bzJ+4dLPzP#A1`Y>97a*z(xspWS?a^V!Y2H~rS8*EU_-^u6o;2>GV9a!hA`;)c5u=cgJskO1S|G4JY*SxmonKg&jd}H+| zYxmav@v4uny1eS~Rev4%O5|gRa&|QG*DHT><&UrYPb*$t*}8J|%3oOi+KLM+{(kwt zSvI%4bNM%y{rb}Xf^+|QY>Vh!`sF3>Tk`+jS_+@I#?I_C?chM%#)qD`ew(?p)t*U# z+@zJ$8%Kh%mqTYYuscmYUX8Ha@kcw3{!X)@kZFJ;3qrWahaQbdcqjB}$EVTh(Uth2 z(1AIaVKk^jC|2`ZvxC;|q3VRU3)U$aW?Y#1M;+`P#)p{-+v~Zhtd`%dt-eEw{yRES z9#j{C8XB-W(a3CYYs#|_@(&jn2S)?i;9RKUM8yDV7+s9RpBmFd><)(u}> zv|yvE{_Cw3U;*wxxxyE=!~L>pwXKp+n_zEuc`*$1Rnw4%!+Cj=ycdRk0R^BdK1_KW9bpOh zk?}?OA=7Qz&EHVKZvIvU4PTuQu7sdDgw*V=Z=G5wiu}V<8#Cvwm~IDH*&cCUdZ4}z zhV}=dxOIr@HPGEmKiea}2Mf7>&mde<}m-QV=w zY!1QNZHvefo1R79SY34yu;2d^WxP@r@aS>FXJ z+&Boq-&shIE}GM~fkH5RnS^U zr;E<%TEb3{sLj9jxlPb;Eub&M4BrNdRhiwPtE!R4mslDLTw7pLK*=i^p&(y;SPDTU)J>X# zvwgu&A`mOwULi|YK36hyew%i^;G#EYEodERJ!k`n-o|YLZ3fX>!mS{Bd~H3+e-%2VDSN1oeZS0$ldI@Xoj@{6&;8*T7S!W>i!+byG)x4=yMT-@=Q0 z5Iuzg$uSvyo4A&tYf8gc8$;+PeIf6f1gjgym8z?tA@UQxi0%(Oeq2^+V=J-7kH9Nd zFB(sx?E=q_2YFiB!jWc>?~nOBC}V4@!1AL3mRL++`H=uiG%B$CaDWB%Y9>sqOrP~x zO#PTE74$8vttQw2llV-PguUnkB5*h%lTTNPzzHZ!zrK*Q-Asd6CO=Rm!EQNF7qbf4 zJg62j*F&IUJ1at2{za99EsMURRmcRPXRH(W4y~>nKqj$@P?k?sN%&=Fy7xpoViwKu`f^Zmg+LhF}7| z3UoU(K9$U=YG3;>OJSg|3-c#+QJd`!boncp)71|2-Lj;<`iJz^B^Udw4~1p5r$R}Z zyU6|AcL_3q>DP(SEED|z4hDJlQKe%>(RC{p?ft$OAG%o=uF6))oH5H0%&p!h%kqp> zA;n<>=Zk!O)!jq-ei|~Ty>wnE=DVuI^c5XiOwZPyFk#r3s_(24^KX^XqEyUEMi9lR zqmZKhB}rP83Mq=dJt*qMho-w|jHsHG3Aw&)0nsRKc`>33&Bk6?K(xaOqNvrEjl+fJ z7Z7Z<%A%l^j4*Y0c>%#rqp6xY2y!niAm`;ra|c20#RcS|Hb0s_beKST%nM!!%F$gk zbVreuq8WrRyM4Y|%G_Y%31Su@sQFyApxDZ+)uk7BJtENG+l3xm`xKQDhh9Ns!dx!5^N69bRWX-u( zuIXrK9T@CgmOb!xfeWd;n3?V(Hl0@qu3s)|dOYg$mE}jaJVLZl!hz)HLNTzQFk({h zw@`yJGEtNEl|=xzTu1Pk?$UxFBX1zL3ca5 z=9lA~-aA1@q3G_qrOvW9mO6Vu7eFp(8CF~hpk|yETZMCAhwGMMm0>yfm*Yu$h0}%e zNwp7FID?=Uakis(ekHmaL~uJ7aaPZRAhl-#D*zz+*nnM!)L*KhVbSiPw=nE?mMCU6 z5(U=rE@nd!3*f&PbVA{#aRQqH7O;4;DoO$V<`Joh>EV$%!-vX|8G3o0S&wer3uk2* zSTq7Uxm|sroNleh^5#69d~!h(pg3p}lmI0`DbN&X8Z-k+gYJN4K^agMlmq2Kw40oE z!P9Pb+J#TM>FfoR7(?R=*l`?M3CcHh%~^!b?S#I5O3*sLwAjf71{+pA1_=ukt$ zbmQqW-Z^$_Y%3KqfsF`3(FB?yDVsz`6lk6fhcd^YETNz3!@y^<l3gG0(M@&E(+KN0oy8I+XQU8fNc@5odUK?z;-iCAC<}^4+z*nhUsHbnPjhkbqiQj zzd5RK0jmdAG;L6G72I0F&g*t*v8xQr(LpPu zNayw}U&s5oz%B|{Kf|U>{U#^;`n6a}z@`LjTEJ!mEG=Mn1Z-BoG6I$ru$+J`dr)1r z9>$094aXHT$%Bl~VjTi@Lclr&?4*F560j!(?6iQL5wNoY)+%6a0#+|z`vvTPfSqF) z`X*(+?g`({7JE{_dIjuBmR`=Jw_U(?2-r>m+a+MT1#FLi?G>M^Dlgqo;d|WofkzQV1?-@J9T2d+0#+|zM+EG!fHex(ApvU; zux0@}E?`FmtVO_@1gsO-;%CtUixyb4z@h~fEwE^TMGGuiV9^4L7Fe{vq6HQ$uxNpQ z#uhk-_x}&pIyH58|Npvv|G(lKcA!u+R7B}jC6DC`b50Oz0Tv1IMS-mfVKHE}A*>bH z>JZijY-I>*2evkZbpTrz!cG8NAHq6;tqEZ#fo%+7PHVn!-wBls*rpI)6xikv=CtJt zcSEvHd%o~|80*LvUI=3+@`V?}SZBWQTo^lud>P6xKPugJA{4S0}8FVNNG* zhA1Q^J2}?Tsj!m)tUX42r#R-sS_y0CSnPzto(N#kcH%qDF{iDAu#N!MdXlgc3`2iF z?QQamfSqL+w$T(3!8$R{FsF>$8fG(zLkx4vxJd!n;{vvyVGczI2454yP#4JIexhH% zo?=)6mr2mw5SJK+;Y48r45KjyeR`7i?s;{dq#m#|{iJ}=-aX3)tDpxgO zOU2aPT$=XoSy_wG-aU(zis>nLvXr5{dlrMQxGCtK7P3Q3)})t> zF)VBPzfp#vdr|!)?eVkurri7GbTM8y%&?rn8X1;1813=1vUk%-s(rRArL(yjiTnV3Q2PRzNjph%i};trD6gK#Zm$`C1BGWi|O=c1T4)kr&aUa;aHo-W;xcb zu?)vLG?wMq3614A)~PYt^JeR^P{AcgnaULHd9zs5oheV}QkjE{&tkOaEzC!I-ohB| zc?)B-=PiuUp0_YYd)_P-GrG{8w=hO~-YnK?_-N0Y#X1c}d)_Q|(qL^2qg(9?`Fy5c z!1fE+0fyNz^c=&eo1rnZdt&kZznZ5m{<*aQ+|b0^i(s$C-6LyYzeaykp<$ec!*gb#G<&V|)H!_Ydygu_M0w zCwHyfwQT1A!6Js|_F6czxsJ8^5vs%NxFT!|aA_8-9BI&#k+>e$V}R{>+1hj`$wzZUfW;0zP5JNXIB+homzD)^2d=+N2Vi}R{r(M zFRXlJWp>5pm4CS6vnxKZymiGtF8|8%A6<53`M%}<5pj}p%VNvERr8xQAFoN(#A?3v z*l#`diN|IhJMq}^$9`|=XP5qSt-$|(lq($b3rDR?2rmkLaelOGu+KfAgNx~~bb^2h zrOzEOZ$LBxdk@&e zIw~ZxN%H4E$W8`j$HoR)T`v+PwIcddN1}veT#z(DK}|ucg9$=xLJ-s8h)o$qH4$IO zx(QhpYQ}su{TQs_$d}0P89~yhX^JPRd0P-OQImD)L^W?!Nky5OUX)cq&6|Q`IK*l= zG$TrPLl84+>e7j7BE((Dnk`&S6@65$bc7z)%SuP8bEHs8*+O` zyZUV`brh(QiJ1U>Osm15Tn{=>lM@Oec0y12662#?Lt}&ea#z;!D|V_P`7ITXa< zW^42Fmj?#i-peBceb=lIg-;C!G=&hN+9;u(esu?iJ9d4j#~mB!y3%I_DSoQp#|Yt5 zEjWn2xo^};(oiQDve(yhaJaWm4U>T!X}o*VT)V^!*(1meULF{S=D}<+^a&;Hmc)aC z7y$cB_&v<3SFXo+3llwIBb9lv^?2MtFQg@l>v_(^Qe%m9*hEa!ys9MV9vzCvNRcHI zez;K;MG{IJwemLR+(Q%4x=>QSR>4S;7pqk~Y_l-I;~tuWjooP56)P%2rRvCSV#LjQ zn#DMbT?KTcsge%#R+Xz4?^FH~j=>09z10|u5bbxWOdZ!E>M^D*by`Ny2c zA3Wx4o2YT#4cd)Bnx%4 zxW-x-kqpc~O}NB^K5!A`{3uoBin;UgOev*2gu;ZL^?lfK96(zpE{!sfcyle4i3Lt-l4>J_Nm6VGJ2wnke{sHZrL+O4LVm`sZx(;7R`p`OUp?G;DD*&G){Y&duf*FsT_2@ngs#-T-jD>F%gql!BMQL9Lz&yta3c`*b3t|3Hz5&#(Uf=eLdsDqb-L+O&x42 zspwP@m&dRY(A#%@%)M9+MZA5=alS@ubO8>TlY&L-z^jC)tIR00E&n+*OxV!2@^C>R zZQpHTnp+P+o`1^oG=ZZ1Y|RyHV?1ZWBxY`_zp){;U@+U})L(`A0jTl&Rt?j;+eq9> zm9u0zYlSFu@yDBn##1UL@EOYjwpOccC@o2G6-T`hp^*^}n64dd)KPdLFIyD? zA(^e;dTr><;xT_c)QuzMpSLONzR+B&i?-1aZwxh#7hY(9-e=)bz+C{iasY z4TOvM6)83kW>c?GG^ZY0(xkkObx1!EEGz2>KfJUoQaCHMm3`!5d&#ik zH%~QB|43+5L3RH~&;+Itq4=kLXQH_0ci8iT*XOA^@wKXIRaTGYh8g^p2Hkl`S4|o= z&orl-@BCD?TmC>$Pru1oRlVWk;o3f${oks>G=x)ENL`@)v{c{Z`6*in+*!~N7+FwJ zZPomr4Dc(D(AV5jW28sF@G}xB^dpe*$1FARp&87_O$TacJ>dMHP2ElbFwBOYS7>;C|14yI{s>mmGwD*gZ`GKwr?$!SBi@1TYZ)kkLRq*0QvDSEYbnN*H)rWG41Hf66e&E=Cy+9dRBB~|f@lFF5f_ak{_ z*;1rbE>bGfnfzotC1hW`yx~6TxrIo+H_HWkwUo`xf?Iy zjB`0Mu4~;?e%LO9m2zs1%s|!ZP9w{BGFc=Wk$l=zQR*&i5TU{nT8>X%TGB<&{PvCG=bNz#O7FLzo)id6IrE9#emo$KbsfyQ*qzePd zNOs1nCNjKslG3!UBi#t#{BGa1k>SztNC5{C)2c*pU1ecax25}8sI7&|>1+!2Nfk@f z1iT9B?Yq+7(?@yf(m>^08BP!0Y{6uUSP)5^o=;~Ylt{j!?Pi*yZV|nGV?Cq&Bjf$U zL%Lc}d|Dh-cJ&&S(oFxQ)uCdMF2M$z%8pR$tHPl{H`)kvEzRWbxvVThv^8b0>l&Il z0zRn5N=5|b5-5gO+QGiTk>TM1RgR*ui}n;<*)SsvP(ih;9PY)Dnl`!LUbX(3Kdj=I z?o`mKRZ+t~kE=THZOuESWU7=<&PL7DcpLgJW99Rghu}5CL$<dtI8>v@a#j%%D62A){RUL&cKHONdBMm#KP`{8axu(euVl?X+ z?6vhue7akN#>qe-biV`?T~{GqRDF}u%XT4XaqwH+&uiu!{Mk=K_5WJJjBit!_;iGZ z9aBJE-bAHHsYAnbzL>^nHj~GF9ZJv)cfmf9ycBwy-ca$G!Wnj5qDU!z-&nAmFJlz( z8yfkhc3N^!^k=$f50nKtsODU_AGwz=LZRRQZ&K3*(LJ*MZghZbG?J`jv-hc2h#5tu zim8;5^ei8mV)S&unRJJ%>w4_^;CNSeq(q~6b`t$mE;Uy+E~r`s)ki>r>X=@dlW!V- z!I*x{`ajK7%|NSECbm$As0R9{)%fhE(KmRpuWN)-(VeL`Ec2m?#{3)e*nQTg){IG2GgI-?HyIWx@Wc-GIP(%qy)|8h&7#vms2FC>}Cq6CKzVcL=y~}`l4~o+@pqN z(7uJjnFal{M~H7W`}~ zJ(c$|gwv6;AQyCkG{eIPQB>6y$*VpnWHUSMgXX#lNc()DL@8iORmh}h9`Dld97(8& zk}V3A7v@p9`-b!tBv3edxB2zh4kA9K8 zhSiU0HMsLrQ@Vv*?dl(=XPfhwtY7IHjZmE-!bh%@g^_hW#BT@ec%q!X3kOtPKdTef zmH6hfo&baw6>;r?h!TUAYFI_no)CCa|9f0((>Xt#@u7jg;ulbIz+ z51QJSmB)mNU#OI3R36=z$F4^*@SjX@O!N~seYl@?B#}*$EH5mX2aXM1!>4<2rX%b{ zLxG>JtvIS+H6j_O9a@InW=KBVG1CJL9!+T~LURNpQ|W+=}7>-4N=JUZAl z5OHnex#+s&JAuv(eNL))7yYQI<{=uQP%4v2b-(t|9!zyze)}6l`}5V~eU|YHR5VS6 zXp@Vs&nWvI3-&=t#3@9tkJSU8y_J1$)0L;}#WK}7_(pC&VcNG*K{pI^U+259gVLIT zY7J8)JJvIc*bWfA9#my?p~+ z*WIWD#w1V_Z}T_@`i3ryUvxV?fMwF|frjg(2QaP<4>ZR+I{efb+X;`2fqu5;WI?No zt?3@;!0_-$cbD3dJ&GMAkmIks_P%TJm~#Infkk~eOPBmJ+-Y*|2T{X@rG{Mdi$@i`li2P#u7co0WBwn zRQG)UC@Us$`_+LaANpNci0$q7711X>qJjFL)ch(Vvs~)y8-X%bfr|lo+Cv@yf`@W~ zKamo~?%rgU*BCezZl@+xJFNR~ahY zxNHKx87$&gs5eBYC(|+3F<4%|pxTrDzb%JfXrqdEzRlCzvig?LiTR?I!&oISD(QnC zUSe9*Ps-%l8f@U2%Qv$A+c&TN+czVxgsMjD`Mo;9;%Q=(j`>v-ILYG;Gudn$3%S<6 ztdw7Powv%wPl|zl4KmQLL|v39>yH?lUtgB3TCkd@&FF5nn0dN;wzkezk9ea=T5zVf zaah%xDq-F zAKMk*b!6Ay?EKQs_wF3qxo78J?Rb61t2=J&_?s;UcYI^}&u@R*_Oa~;xBtzyuWbA7 zZMU`^-u9PUzqs`STW@S_*!qL(zr5wUw%pp%xaDs*|H|eMZN9y^Y4hK0`qfRZZo0bZ zz@~3({KNJ6^=<3_?{&Yv?uXaCbKQSfdwX5`x;5+C*Z#uV53Y@`{mh!k+W%wCuOVi@ zD{I^}XV!dV_1~}l-&X(J>d5Ni>Y>$5t8dqSt@f8{KUn*HtB%(GNX<-5N6nutegD$wrCm!SOF!{HW^Y8n?0H&GCn(mavvog+ zBfoZS7|#M~5vqZ9@aW~@#)ifvc!y9)lLEHs~3U3z`7ML6e{aC<#h|ra;r68BiK@2Q&-HfU=+*C=V)to&^;_B~Teu0o?`N z1I>Z%gPsFD4|)OgBIqU1%b24*T6WPEYS#)H)4I)x#RN8)}&k z;Y7P#Gltjd#V0|7_i_#NDrF!w>~4ex@0U`uM-f;Pd4;ED7Hk3qim2q?PQGo|8vFwJ zn2_{+p0rt}Y2xL^F$ie-lH+)beJHnGbC5Z`)oaFinAfOI^995eP|HY$jdl_Wrc8US z+UtQD9UKtDN44t}NI zVs`b0aS93MmHT3inXw58=1^F>T=#I!tnpr2sCqc(ER?iM)Qs~J&M{>hyNw&QjBp12 zQc!S3>v?~5NiTpm*ZC`;oy~RrVp_Dhj;#$e*ZJ#sc<67gqeWD`qS##LXJ!}mn(JC# zj5#e~#cpuL!fRBmE$wu`3?EjM>kCTILK+?MIu<&Qfbt^%fv*x4K+Q@#j$gMP4;_C2 zHv$g?xoOsi)iJQg1a?Fl2(p_sR)IwA%5?0SKd5*9cS8o=ko%VsQvE|BI3 z=hSQA3#5tH?0%ZWIZEf=qixkyGsro;RciBI1v2e|%s{maRjPhT4w*JV=2Eqc|6(07 ztBQLj1ZFlYN>(CkIj7F2!zEux%6UXgd%(2Mx}%=w#X3 zkLZ3goU#^oMziR)-EuH=)COtb*uUQwV1X|x@SNg2=r3C8%|w%BM8{hFHPM)$$_bAH zilk`Bh<#R+OJ&rq$-_M>rDdcjD zb98nJ97j3Fi4y`xGw0~&5IBx-j`sHE>JF(PWA3o{nHRS3^9gU*1?f}RAO19gGAK|P>eP#@?#=mO{>s2}tc=n`lE zGzc034TDBNPlHB5W1w-+WzZGSRnRribo zr9pQOluU2SJa64uKAX8bFPpCeRU3Gw3Mj80a{t1r!Cv zK&_xQP&=ptbOO`~Ite-jdIEGBbOv-5^d#sUs0-8$>H+nF&Vw$1E`s_&kNOcD>3{Vd z$$vv&*D&F;orr#bE*l@_?!PMudCrH1b;6vHVluz&%jgwG{hESh6_c9BS7k9jvnWC> zphpcV_#3{I_hOC;qrx{KT9F{~>%NHht_~vTp6DZre8m?r>$0sBHi1H3EhO@5RU+sB zX)3m`$gft5v_QlZMpW!qszk7P2O_#KqR5x4MO4H`T^Ld1m#alolm=ZGQRMY%5gjQ} z)r=_erD_o!n?e;v6!~Jch>nz~3L}dA&($Kz$hv04s9nEQC32E%tSd&8_(GM03d>=m zs|k_8aOB!9a8v7~SH3zADv22K@$*3m{q9`LP`!v@!G6}4@t4PK1WVM6DD*RukggdM zP)!Ix_S2G(jbe#1i8=k0B&2Hx5h+Q?#`$2~&A;@8)T?uC0;(L5{eKFw>u4je7X?xi zQvY0#-4+{7Uu6IBAiFIvlo!JW;^eihb^bEO7J-7M2{93WSd{WqqmXHW)DMYLo`w`8 zRFJ|_yr7}26BQ>^7&bobOL^~c?7Kr0t`qTWFtZQ#`oncpyrs zy#o-5Rl@UOOy54`iv(wDP2t2p>2tE#nrg7_LxFGg+S6ux zG5KB;uzp}g(~h)u1-BMh;wjy>vUKb&7oSNGpTR8OGYq3!lnLKF;qzH+qkwH;SgNRH z*9q7f0ox#8>lsGJr%9Jh42#nR=fJiJ*mj1MQ@S=+3s?kL+1NnY1Sw8B)mWTirE)q) z_IH6*j4a(}iZiFV31CxryQKOsx>vniitn6&{S1cFRCL9%y8~DOZ?1^1;Fgp3fF2aE zMgglAum%C!D`1Zc*Z~1M%rKlcQ~DhhutNfNgkiW}TFEv8E1L3Zq~Pu*Y*5?4VoeMq zUnBek!^p1)>tGo90b!lM+##Kwn~CFSM#+8Z0aiK0-4n19uoCwxTugscz^)0{ zZ2@}*nESMDmox56DVLsduTRu^m;$izW!ZyjY&ozgBa09WN_q~mVXQ1*6#>f&*nI(e zS-@Tqu#$kiC}7VE*mDB*f`GjwV0Q)V9>a2#DP^m*4}4o$Y@L8T_}16HWo>HtX0X%F zV&&AdN-xRsuvm&=@szINXBbvarj=|x%hzK21*}fM_Av~bvQ>JwCj7F^;lw$4)@uUx zQHJ5rvEsYUFq$7IuN1HZ!{TMl7iU<}U^f{yhqwil-Xz0{@w*C}W;V50TEHf_Y)Z>M zD_})nGp2n^BhHFjh^Jg&S%al;q&b0{*FUJnHUOK#ejl2HBr(>K&X=5OtY5$efVtyZ zR=3J2_Xe;@Y)qo`$PZ={`OF=XHCR3~sq)AO*etLa!)MEp2IgJ~_8ZG4fMGip<)LeG z%54BPWw3HQsq(leVCMzwl7L+huzrSF9~u;}YXbI^fHe!)RRKFDU?&9Zlz?>z*pmX* zBVg?Uc1FPZ1guxU&I(uz*y3l=0*e+{w7{YT7A>%7fkg`}T42!vixyb4z@h~fEwE^T zf5sMg1MmOm*E%(C>~m^fU+VlB-v58!zxao5A$W4hO{CKZuT8IYQXgel$zUI682EBn zzDs=)7-Ib@S#7ma>LUX7^T2X(99%>ml>**TBJjb785YmtJtMFWF)UHm*sH)0Ft${L ztgV^P)a_JX@0NY+`PXqif5zVgr1t$|>6 zsxs+e&f8RaLF_{U_Wc6(IRX1cg*ne6CcDkodHMAXq;a{#urE$1%)x6-k8fsvjZ-Kf z3?^X+;8~bUxpmMvo}W~hMv}!{z_RrI4t$8pnM>vJg+0LZ%bi?W38oV1-Gt@9!P46Y zjMDY;MLu8q)4%+dn?qbqUzhSW@VO<6X=U~TOBeA*RrAq1r~G?>CGdWM${Vd! zpmL>P%Uh10pIGfwGFZIDyIe95KB?^wYOAmY0o!wKwd1r*=2E__vz}}p4Pv{26)3>8 z;%iAHVcwMwmM|=;un5CqQCDGG7zW)EB~-)u02VD{0l2&?fW;KHJ%F_;Y!Aco2pQXg zcX4Z9_jR$@#t;?--#P)?#4x8NLCve&@W4;ciE6BoV=;{#;#jN3j&RI@!6@YG>nuH| zrG(c+<*f`ONph!kOx9ut7={`^iQRH7lXcSflSN>w8J0*>@8OnH0(M8hW(6!GV0i&6 z2v}Ocatwphp>4b6`~z;6sKN>yYth(!jzu+gmt!%FJ??fVHbUMg=S> zU{e9CL&;tjuyz4^Qot?<*r0$tEns5-?1a)~LcneaSWLjq1+Y$)UR=O#3fKt&>k42e zReHAstW&_w3fM&fdx~M00Hjmc)Km95@1J7|+aJJM6}C5kwJGcX!`zm1p@c0^D+O#& z!1@Jjm}60$-hhCO3fPc=45+ZBtkS!!VXj&4F)Q5X%y_ zg<&ZeA%VHuafTHQ){Xb;c7BDvUGWVG*hPk=+^FJf38bg79>$0MPw@>4SU7YuA6> zIluFFwts!ckL@_Oqj_5q5&l2DZD`w?Z3A0>b?bwz#jQ8CEZh2(E#J50L!0+*`Mb@( zu=$IdMmINZ{?D7fw(-SHPjA|=Y4gS(+W7p&GaFMIes9B%Z+LaX*Vi50uxi7vtUtc~ z3+q0$?xl4%)_s0$`?`(m{$j1W=6!3At^L<)8dle@`M0aTd-Wh*VHN`C?=uawg(9m6dgqKUUqod7i!-7*mzBS&EMki%I?R0b?LRGe~v|#f8L+n&W`y>r`Ab;QlKf& zG-w7y=X>aU5S{&@GeKEU4wMHKK+l4Tpc1GIs(|i-?t$h&&w-u?y#V5$jEPCNX(*JWk+YB1d*ZYIC`ohgKn8A4O>GN*I6FX7Ef@n{xnHnDtJ z$q-3KX9hbI-06g}7X1@5fmX41#@1vhz)N@3dfZL8Z2gqes9b?b^amu=Wwy9plcbuK zFpD3p&I^%$nO@jYf*mB~B_wHGY^m>J?UwnU%Eee-h$qZz=fBUzSh}sjbpHuljAe#^ z#=H>!1TMxhLlAgYmCVJ?78`P=y zSXl6SD1tC@J>obQad)}fHPC+n7egVgd_zM6`Df!1A0Na`q(`HThhA!^!f*i#m?uJU z=#g-fExLA0x_NRfxI}+@DHMhr>7&7MNlIVy zJ}lh^FMHDED5;*GT3Dd5aS8GDgkp&!cMATjZeD{yaJ}xrNuZ!}jZ5Yl96jbP*VRq+ zeIQr>t$drKH}DYVSvj-&55N7#>iZo0#%Q~55#zh-Ev zx49$Vg07RB=lh4oF1o6U2fMD_HmU~xcfgbbN~sUZvCnbpbxquj7jcWzzG@cCs7@;u z+#dd<8DhxsNf(^vg)wykxZfvVbWzfDZd%`~qI_kE)~~L7zmQt#ET5+nzc)d*LC=6( z&;-bS+KijCED$a>kOi(SN1w{lZ8kC5nGB5R$>j2yS9Qb3OyF?FThDk=1m0;|t@!`L zHi8lAn2qcmCv@DHKKL1zg}As)k}3$7It-7xxWU$%(vCV~j)TaCp3ZM(%EP9}OuUzycq*XI~J!xp-3nmQRXc@LNo(?6JNsQ@p@=jt?yP3@IbQ@F>596BrG#<;%< zPAssXfdxACaAQC!bsmdt38gvG97W5>j3)Bs|5PFzFv3^Du3oTfeJXA6bhRSxpOg3x}jASa> zoHS`rLtUqFf5uX4ES}Bd6a<1>r8A+ta`9}cvAU-Ic8RVj$W<~alA%YMJt3cg4u8Fb zE`rEnuFzDS%KvFn(f6i#dOm47dREb2TH>hbFqFKTPNWp8={|7~LphD=K1XqrwMr^m$mcQtH-Qvnoxio9Vo~y3Bnetey^gd2!~2G80U=*JcJ+ zoXpR8c?l-`2h5^W&1V_!LRkq;@t2raQ*V>4lv932f>ZplmyyT$7P9%bCY#jVRIcom zN66;qY&JgULfITP_sy}E{5g|NDV6myIZa(QKCFV?Z!@uc3uV!5I}5*YAn7sA@lSU8a!snx^fxoLK$5!3pN;f)lMTcc#K5o7xI&L zQVE>X!d>t2bS_o&6EMG|b5r?ZHeSX!d-L`o8obC_Ak%MP-RCaE@Uy4uF=H2)rN(ew z)K?agX$-fr3;lD@41p}obB;5ULf_z}*l)WbKi^iBqVi5W`k^H096IJyT_smaPv=s} zI=`2;-CwyW6MhhZ9inzz$7pRY;jxc<__-x`P0wa$!+b4-SplzV-pdFxHpxvN7ApRLMQypsoT;%qTOQ>>Y?z!dy)pV&CawPME?(FUDuPAe! zY8o%n3>F`jv@w@4_srV4HvSgVX7dCZ@tVO$S4z^AjdfF*_;fQV*hK3G zw?nJ7D9zy|Fg;Cg2}o>HmMVj7pF_lh8i6b|13}ZUNMbAp$u5- zaJ>fz0Kv5LQ#fu^SIC#l96>3suePMDwX|9zz7y)gk>Lk;hSW?w31-BF@>@8kaDRfF z26;}2Odb}jt}Z{Pv1(oaLbtqBF^xySd_gr8RQf|qV=oG=%Tu+6M=&Ub&YlXalca~% zhwAjK)d}uMy#W&VSLnH{k7aQTZw?8V=1Z;C?}IFpn$cJ%*NzAgQj{(rC7)|1*Vk)6 zv(*`XDwtvMt!21yRzlfc@w0+T{{zZ)HJIUdtZYTw(ENHkLWZIq4_=1#RLQM`r%1H>F)}EQRuXMkQ%)h5n#<0$_KX|2V=RQll@%bET~6 zJ9KB;(8S?Kxaz#BA3*mV>bq61kVJ@L-2a@<_3_1K8~}&5KdSCXPN1bWG+{|S@#fhM zR44Ky2rgYI>qO|wn->zogd>i%~E9wAxk1o>#`)YYD=an@kY zx89-n|Mg3jEIIyQiBpfa>NLl}(QyisU0nXUkD1Wf#TA5MqC$L#6|DGnGb~@w*e-@y z*?olJZ9bQMoMBjyQ0X0Hn3X+D7;1;hHZu(8kCf~YhFRHTgslzAUSwFo$X;NWm3@k^ zbwSy2hT&X{%6E)mR`v>E7~HtdMTS|vGQ)8GL#3A`Y@?R7_3=)^HV3hz4(e}f5Zhe` zYf}7U13kXvCb<80(L9xImVYa*d@ky z&tNYzzCuRJ&NJ+;!Cqll0v8HUTYZUPIJ2y zQD?bRkN3hHJ6yNSsmGHd$2JpRdl0LAu)?XwJ_OD;NZ83BcEtgPH$9xMYaZB{Al5s- z(y4zkh`s0l>k4AeIuWP7Cx~^N1J)PBR?h>&yDpyZsR`WJiKlOlt#*J71hGBfJB^`^ z_$b=TOu1aV^Z*#9CWIk82*QPwi}WOGG3V^ev3oP+B0cF^%*xV}Z~cgtt)DrjLORo8 z@o9tM;^~=V*>X`W=o-w*(!%m-#7w4q!Idi9FDJ4SK4$rDFl^@7WIBWXB^SV^b7=&H zP7By9!zhE}rTe8BVD(t=pnOeu^C^0DWib=3dWv3aS*(y(A&#f$)t1Ffc$JgadbFSGG~zOI*_sK+V#3eM zv6f*bEcnzWhS{>MW*GMWC|%ZbOozXo+Q6`^!PWsgZSuAHEhoNfL0xt+%<8g-VOEzN z46`=a4eYc@&*rh6FvOhZHfSW-8yd59v;ylf7PC4>2)n8IEOz|?WN!s^ZaD`&gIWEK zGtAm5%CNi+JwDaUFk6mez)qX=Y&jk$>~^pmT@LbnCaB8*!)zXxfSopcHofx@38PtQDp|`gE4wm?WiqLm(kjAIIz8LJyyhT}sbC(D z6Q99s9)}rb^QdQ-O>aN2`e~h>?Gs;Pm@UW083sP3-^VCDBWv^h6vJ#^{5=eVE?8_U zmp(!1%>?s3MSKRc`gIatI>>jG`0i+IIz5GJV9Lcg!e)cm$O9jnIW}F4Bj2om6$R|w z0`?IBTY;ERr!zWVtMeY>%W4ee#l*8*Jk2o6cb2exQ0LAENY7x$rYn;qdx~K;y(buE z$E}kL!_bK9ZOX+n!0L-S4`nI@HQQac*2CM`z7q_ye5VP+TLS76E!Is~B`7<>Fw1v^u)9INL$CXo<$Ij4dqKV=$r{Y^r3jk~ z@?{xj`7#W%WAc{QA$woT+P1aQfvpT?ZE%(G+4Qax_FOREZ6s?j%eS2{ypthY+4OK{ zx`$alTF0+{LGxi+lBwXHsrCopGnj3cw-{!1o)EA!!)(4$juD7CQX9jpE-}Jh^z5Si zzSRNtQm`Cd6Fz2T&k^==knc9bEZDPSpv+47zMR{!2$eUunx>*Ey3 z8a`{k0>f;2&ywu>g6Z94m`!gV`UuNs>-RFlY+as2y;(l{Y7X@ri zz{&zv5wN=gRuZthfW07K&k5LlhUxI1iF8rGUSe3v1QxBCU^Xz=3ISU#V9N+=3fgpx zVb-RufL#`_K>-^Uu%`v=l7RIH*lhv3E?`#~W^LLpU~z_7o8A<#w17Iiw#@q&LONmTY_@n(z)msDEu_#4XNw&iOUCmVU?&)cbw@l(%@&&(22li^ zoh`O9ESaNVva`i@V2htc3oKe-(E^JWShT>R1r{x^Xo2s51jOY1^j1-|#1E|6)~U$@^D*2Xb0W0v6a8!OJau&}XRc+PFJ*ee6ot zXoSurMf4#Rbvy}Mgp1{fi!F(XOsSAcM9dB|+DjSH8<1SuV;Rv&UFaK+c9`#1`bNk4 zhlkw3{-NPflO{hj#j~O9vk@FpG@|+(-Q}T6L&H~x+@ay#z6kA{bCq`XD6Zih8z1c- zy5QniB-EVi>~K5UTsKm2wdQ!EmVkiC%lw6tm-*RBAws#j>MRb|g?2p_I8e#W=JNM) z5py`rO9XpTBdqMCrc#5Mk2cSQ%G7slq_1b(?HlTixPxOoF3iL-V_&h)u#9r3Byf=3 zB-7tJeto3RR+ne>)|io;%2Y}-u*7)3J(GBCWO#JkJ%4$qXB^dG*wn!wbDlFoC(9zJ z8r-9sjG(GZiHM6*qCWJ&J$DitaC1l$8+ORFsqK;Q4_zJ@&~?oWNE;`)O)AWy#uVhXr=jj~@(vuDIvdfuw2WA( z98b);llgKvpEVE`%2VXjuu;$O;7I>K-zZgs@>bVs-8E{;WQ1tc` zX5-YqQvc+4AgUgz|Ij7EQA>22r%UBzCOt`-XeWY~n!Vs+8L1-({9xR0c%*N%YaDIu zu1!amOXr2=(%;oRpu4KM2(`LEB16OO`GMiC@qny#I@FU3{|vSa(^X(Idlt@}OwAcl z^f9@7B%VpfOMYU?vrB2*gaZ?6jfT1g10836HkFG^RdR_)f-XU!t;q@s_DSRq#!R}8 zw@&Ao6n!GzJko&Xx;;H^*XSU==wER}+i#aceOCwiyYbtFq02q^fe&c9R);SIOl0h= z?2rAj`cMn2HlvR+i0gLsj*WB=boE?9)|9$?w{$=2q8C9ssq!d73*hNT_k$sMyl-&K z?T7MAU23&P9UBn98qy5pJzc0%^wkE|O$;q!ysJAxCr^ys;Dmu<+4ik{*LA0qp4wpA z4ugGz!=u+RmLPpyC#vaJk2cgNQ%lw(w$vG+a7s63hr)N@b>kJ%=f^7hWMKiyrVBk72)vRzb}j&~sewbNh#E(^Cdi zdB6rbV+G|>IBcW)DC^Hkp7dkM!NTs?MccU5V4|iD-Pgx$x1q#{ue*QzYX4Xj+}nSp zI>pgQ!hn97SBFP?!<>VcZQfosU6}NQH0&ShiKN3IrjayQMKV@&kh*n zCiAuo=D7&QQ`N}Qq#V%?GkxEJgBvkDdf9Q-%u#iP@c97CgQkt_Po1S{3clNGHBCZf zpFnyk>|NyWf;fh7j&*NGa&s6GZ)Yz(Of?%@NI2BWWOCYF^Hy2S;J{sx$5l&@EF~&@~z6$gp%z8(y zMW|BL;nT;KVoR@nd^fSiSXvR&ov1)$Xz#QXV}1@s5Hp~fyV*q(?Qq^im9$oW_)*OQ zNvS}LcA)hcDa;wu$W^7a&l$cFC>kO)M)cvzP!~eyuT4Kfb3a!#6KxTlfDvX!nzj=i zZ@x**k#!6qOY_up^tuQSMP{G>;4x{6hZHEd3fUJxbg(^MeKw3-L``0ezN#E%O-2nz zw!Ntn_rbLgrLX-xg6FkD1mQ>SDqCbImX$66d>jvMri1n%6Fkf4=y#NM4yrpha?NnZ zWO((Im2`X!A*=knyl7bZN#D-^N`#xPQHsZj^7*ZX+UK-Bcy!|>pkXoax3APo5p0vU zPn^oC%AA^8`LtdI(5VlPxR^q?Y%=XnniQzz0t=p=B<8_x)y#?}ENbS-a+KzTW~N1h zBrm8PRcOv(et?dc!D}7;^;1uafnGN}yJM3k&Bi7?Y9?p!W5Mi zOE0mSZpG7w?5PwAcER57n6K-yu$1IMicK$7#nH^zc#c2a_Xk0GTJ>^)RrDyUD##t9 zhr__Htjb|vTSjI{put3p$0=1*ye}xDYE~D-8y2c{puEB=;JJ#|8*;-0UUsMIhY_k^ zn(s3cswGx0>#^}F8!xct>Wf?);4;*75S4(h@IXgAiE6D?%hIySxkw|{rTT%$xQ=8k z>sX$YH(w8>Mo+DN7lbhs?c`f8``~E|%rx??L`xHT z)t2QMScdit<@GhH1~@w#Jt!|!NwAWr8StX&WoT9ea){v4knfXhB_{Y-!$7PHTWBHJQw-cn+{A%2j_=O_{9eW{3=Ipa z!d2T*lNp_!Kk})iD9GkZ7vKkU5;cwEPIE_gu# zBpL+49Rxs-Y=RpAf@F7t1VM2TK@cP%f&>JBn<(nC(F@Qb&<%DsxM+oT$&xHfvSrzl zEqaSL+47RrTNuZ&Wyg+_*jeXgqIqxPCGjMFlQ?;qB+v7oTJAmf-U38gnfbotq3uI8 z{yuf8>eO=2tvYpT)dQ=}tZHAic;(-%{Orm{R^Gbud-cCu|Bm|CSDdduT)(bt)+20jCy37mQZ@W!0}&JzMou<@Tyq z=bxVcvw4}y?#giG*t~Dg`_#Or=Y6K)^t`R}%I3XM@zc|>Fe>(Sf=YC}FgL99~T{-t>bAENsl{sy5epvR^viBh}mR+`|><6XK zm3Ec>KeN9v`^DK8W^bGQ&$E6VKC?5Q|Nk}6p~A%KkY(_!_?Q#RR!(=~WeiIt6A6T% z!n@&!-pry+qUK#H3>6dbQ8cnjDwg4F>~|T`H}COFI}{RDsezI^Yj$%cq%GJStY<=m~v943|Zs8Q+PJcyST0tvSqFP5$~k z?taDFx_on5uYX^N=ppj=XK}0#&LS+_nt|yVG(8M(#?-4q(lZ6%u!_^FLIHAl+N=U5 ziX?XiN5Erz^htSG{V_?i#rWG39Kest@h1{bIRNR`=9^V@*x(H&HV#3N+#i4bR?EWi zG_N+OkWn6i2TcGz90|i9A}OY-c>>nU1P_^qp{S%#gpN1NIuXuMdJ3~a_X7$GwLp{u zM*wO2R+Yu3@1Bkzxp25~y51t0aH7)JTXv|pO#0Xb>Ww3%JTEeH8=EDgH9ZMC2Ozcyc)Db;?loJ-lvunqzg} zO}{fI!tba!uB;g_M@Z$0*FcIak3jN!8kt9IQ{%;^4Ux+c@kyt5H8wYb1(&6O&Cj=Y zZ@Y;%X6B8ynV4J6%&~1vJeYmU#eraDa1_+3Otj6Zj4Hpc>=&C*TCd0_f+C?!DH1P- zxH-V17gANzJzgbfQ0~GjnvLIl*m{4E_jS7`k`6G!>8NC4k)Wao30RnO(RwS5`pw^A~Q&#sj0cJ zUrq2#2Ifwm44N4Y5(o~D?h96=FCYPX9tHtG!x=*fdIRaHum%BQdQEir-ix3I#O?Cc zA>(~vm6{Yf$Ru@?Z>EH!9sw|F#f4jjBFG6}+&QH0Xd^KTK`6%&j~LpCN1bH@`kt&{ z?shsjIqz%Vrr0(sGTDe{B?WM525kbhfHs4+fVP4npeQH?Y6WcrZ3nf1c7WPJJ3%*r zc7b+-_JH<+ZU*fGb%6GRIzb0OU7&-YL!iT;ZqO~DBcLA8QBW_a4|FT2A2a|O1RV#R z0G$M#0{K7w*$1^h?5RDLRLMO&x-mFB4|y2H%6epTP@7$v&0PkCYhL7XG_uuajU)2| zL1wWKh{q?)Fr2E#hs_Y3L3UcI1b589y+6oJ>yF@#8n|JY$Z5_kH?3~dgM3r4mM}Tg zq)2^+mdNQ%A_m*H#b4;X0amqc8f)9?v)Q2$m?%EMdWS2vy*W7Z!D8{TV>>6d&A_=U zz=>_ASgZdP2}QUmz$tf|V=)8sP7^apjvBPq9$+Tdy%@UDCcoBp1X$%hW^|`PZd-tv zMsc*=poZ-MR&0PocNjRg88~~QZH5+Z4REUclBlW4VgYU}xkq6bZ1n3O8sG$DtD&fl zQOXzGqcH;~UP68S1#9-vsDX1!fD_B~(THIN!F#7)=JB4L21X1GA0zhJVCXdZD~{ga zW5m3)qb1l&90OKV+}-U%D|z3B(XEjS6DoP7A+_Bg8I2L(CXa$`n}XAlWAn07V4D}~ z1A%VsSfz}Wd@68{(OSP20I(u-ABY+>)!^Y#udxyTYZ+=EhJ7X;&G2jA;4{wfGi*?8 zoQaabLerMg5>YPkV)$jxWA)7~rG-}2B*jFe_=$BOinmB{6Dh{xYET%o2Gjsr3t9(S z5843IA8l>1VtgV{3>XO4V{I`RSXuU2D%WLgF$qrvBwUBJ#nRs!NPk_{7L%|qAmMtf zEhYeCgel?rtgS|0)O)NKp#L*5%Gx@t=Cd-l``|q#;8`3n?bJ1wq8H+o)P<&A8 zGy3Dd$qZ${Ku~+JtAmc<|ch@hbA)ng*7z!y^0%Ajgo`YKMu;S@8JB8wBB9 z%^7butG83qJQ=81LV+bCRVLh5$vE{WLi&6*%l{aXx9jA>vvm682!K0D!A~imDg|Gq z;HVTxl>(vpy(EeaNPpDAJ;0?!oxKmixmfHjHu|NB;2rIXcG z>9twb-&-XmUDrY+ay$Hulk|l?^#*LG0XrzMHlB8+0lUe79g^4%p0>__?J{78CDzW< zt~Ox14Oq9tcJj1g1GdM2-2$wb8M0a0!rh3S?ZLL&g%f_P%`TkuV>|4^pdV|u3#a|q zPP=d$u++o_mTzj}DPRa^%`hvq?yBm|SKPK-b8UreREB+SpTwdJYf^k1`=aEFaI8`C zd9W`ic|)T^P9Mr#L(j7!kyPHr9zI8tSk!|(B(RtVdr)Al9_#^uZS!E00^9Dv?iW~_ z2fI&TJ3QFE0&DkR&k1a&2YXgvktnanI|LT>V9y9F=E2@BuvQQDw7|A`u%`sJ-GezFzFEHqjVeb?MIge++xCz@R^d zy(Tc|k71t{81%=mPYDeAW7w+#gZ>!yNr6Fs4Euz@pg)FvTwu^2!#*Z3#J5W)oId&L zIjr0Q%8$C(_AvERFLsN-hSQ00m+!FX&-o(9&Js3$IX=etdIcXWv7(!H`#E@M;KQ-+ zyn!WMANI9tLB5Cf(U`#pw+72Emi6MfYWbC6e{8_I-w5*6?OPs5`-Fk-w+z^vYr(X8 z4OqV+kB1G|w+z^a4e}Q6s|}PnZNOeNV9T!s(;n2Am2!0YglZ!z?qcb4%S673f{Q(@ zEC!A}Ls%r4jN|46Sy0OwI)`_@s23X{Eat_sgtdCHB4OLS*jX5q;N-6=Z)-#YfXl-4ZmmQW+06 z2CSG(B!(DY<<+GYB06%cSOW~o!lkmVyvM~@#q`Ip7X+3X=U5ULvh`qD!G|e_rTvJK z$Fa{Vc^peAc^u0D8?%!l=C0J=<@f@t)=G_L1ZEfD=#EXy3Sju8Vyz>NUcM;mMyQK@ zNnykBjKf#{2HBSQBwZ|e4ckTdq!?DKFe~r!Rfu|kkzp_I({qH&cRVMy9=-wHhZx^{ z-PaiQisp;Bc|5A~jk?$az_M}dPsb&O>!AyCEoq2qOHbA)5V5{q(dL}D?H zWhB?IxKPf`_o&p12U{ZbLQ$HX@-<67Ol>Z9+ScQ-m@$kJzw0YEny_2v=%7cA~u&5V%zesE4(>XWaUYYNORNlpIH(+aI zS@H$OHz4NNs0TYPu$TusDX>-#c3RHQ`FO$2w?*db!A2!!;kFB>Z)`ANpAzM>;0fvS zB_*E+Ym$7)v7*bjQ}TJRKag#n%8X^5eD?_b4STSYQm1LocZ)CIh9=27*oXDI z3&R%a_Ya1hG+^uXI|So z{HNByRh<978phs#3C{mNXgy&y&v|Y2?W?O+AHxfs`+0d)bk#RkzPR$?mBT9!t=zEk z-|GLY{@3cCufJITFSQ%%=hXkziZ8Bs`-*cbVk_pa_)*>0>poa_Pu*>GZFMzucQ5~5 z?Z<1c)E=tcTsyD!ztp@|^Gr>uroE=J=C7B3YxxJ3zqV*_`IhB#m%mZ{8`aNNXQ~fW zudM#ZW#3))(Pj59>sU5x+21b8E~;Ae?S&s$c-z9Jh5xqT#|u8O;DrST7yNzIcdI^C z^`5Gq&d*mJs;aN*oc}xX-#b4$|Aoq$`9G=rt;!$GyR-7<%B7XN=Y4tJbMw;ko~>9s z?}rs%s`!&os-mr8ZbftG)zAZ>rUo|pT&B-h)`Qv|8ewJ*ck~QKE+0I&!)g`! z(Vl5wyPvT+fq}%q6B%MCayfRe&5HSx-DgTh2T+_;U4~Tmno`k06erbzX5VQW6!9*W zN(CfBsX8~PgYc{}ml!9)dx2~JCf`{C$is1Y=}ZpI=n!LI?J#6r@UqGiHnE)s&b*gX zp00_tM}5xs$Uet7y&6X$c0_!qW{@CjN}!6;X5b$)@v8!DH|XQMmtUPaqLVYyJCrHd zIq447q3o&|@%SmdQ*rPA38vRDn}7-eVw8Masvk3V>rt0amP7yREF^ z+u`WdK|=}R9#$0r4ZK|jvFCievINls23Fh0Ds>R;G&I@mj8zAaQ|%Dl?>{UCJ>dUN z`HUqmV%}#?p;Ed}?rx;keB<+Su!fn;Vt4guMz>1@(9#&O?HUn!vV`T-v z8KOW(!&y;Bs*2ZzrZaWkJ};-r9!FEWhi;(Tqm0vuO$w~0^cDgn+^1^U5G#_GgDLmAqJKAG(|3!&%w1+1b4lk%{ZOGBS#25Lfg`I?M5kCBMlUJWQrN%^lkBJn)e&qd3 zMwvX0PMAXZ&?%g=@QxWo<@M)g)puAP-_&{VXwR&`C9JR{(uT->CbC7Hlwl&j!9-?r zGQBv-9SvsxHO=ckqaqRs)?RVN@F8^TQiZuTpDlQO|r8Gq9eBQDGmDy4t+ z2aEV+&B}v92M+LvWAgORIaX%!$wQgHs3ph~D|ADb$Z+a2HZ8IRJke2_!Hy$y9YOiO zrscagPx<=@yYo*UPGZ{l6)oU8&Nh9`ddKAHbMvg*KxaU=gU*8P0NJ2(pg3ppDZP@6kJ6xe1IGzQ9oa-a*KJg5LFf+j#0L6<<6L03R`f$j#~1G*PBqI~$cj#h5qnJNS6kB zm<7_TOg_f^e2JwVsPf4uEsbVf30BCeM%} z;>!kQelm_psDSSMlw!nJLtgh&lj{iH^sRv_Q&#yNYC0ZDm6b+v++6|>ZFR%3?0)Nc zktNezB^LE1ajBwY@&~hlW-gVeR~_$t1$d2VH*jC{aXagck!}6}Kaf2UUy3A$LSyxW^CHdC3!}@oy#EQyuaHt@p(xWV+1_>22@$OH5Q$$ zQhix64r4T^OMTIm!$JL|Fm;MMnW=-W`xD6baUF6?-ye<3WgE35dEfNfwfb+8+~mpUd@z7$ zpYC;j$>L_}sWYXhvn}GTT2TW;jPn9__yW41BOI6_t2fC+2$pqmz6$mF{y7%R@w2pi z;J?`$<4WG#+$h3VsSBeUFSazC7`QSv7$0hAYAQhp$cVoUKVy=n)n*czZfQ8^icBA6 zYZoLND*2=i5}?*D4DZ$Qm%yvFb&bydFSbhG2#NFm3rk8$mYu7xatS*>R|9 z7_jA(*2h=MFwFTVbuwPd(rT=R@r}kMUj<2NsEJ$@ihjl-HRc0 zGTsVIRB|XzWfq@b5@%kLl>(FQFk_m_JQz|VElsVX{u(WSE)@r~GD=dm*G@=0b zXF!!N#;~&j%f}H0!r}YPeW(XA;Mitex0K8GY0@7~zh@ZsEs5phX_s%mtXn=l>S7;I ze4}G7mboV6k@4k}rTY!o@%V5oW5Av;U>`SNuN$zHO3yrxJqGNo!f?#QDc{X+s5WQV zC55FKw&$9B&*IoN1K+5`3Y_n|VVM@a&B?b{_ZNmW>9Q~^uCQd>P5Vx9W}HTpi=D^$ zaQfsEF81DQ)OT?lk71|Z2x4)8;aD8wdl*=D0<%QgkylKrJTAGIbpd%~v1S4*0ChW` z$Q142XUHCk;EejXlh*p>Fl_Uv7yBwJjRD(Wz_uB%{lKuMOzXu?A9~9s`3c+tCn}yQjQ%d3DdPJjH|=UQ zH(3nZX27~NmPkAK=Fwm1lV;dMa^6Vi81_+`U&b>Y?6>8dgFf!c`(@d8J=n+9JY*$Z zz6v$oatv$HV=(3NeMZU4GVHP}bFsj%Pb$7#+D*Gj$}1Ka_9?|@jk3!6%=t<^ct5jbr7F_Ig^{hqU2Pf@%HJ@^9qnhhDW=kxR$hc{1uZF1$ zMLAX{F)JM(bMp9Qp@UR{V>gSw0bMb^-)YV+9S77-#&R;wE zeuVS_wQ#Ij=mmT^m+y7W$FS{!54B5V9eIm%S@JHnSYoO8SkB>#pTk=!#q?mflwqkNUI(GWYYanc6fdW;_8&7$JpV7} z?bjJbano#I-!@?1Vi?74Aigg#ER`QA681HQiTD!0zQVA$ox);g!T!Dh`$LAIBaUO8 z+x~Ng$ubx1uQN=RxoH2s0sB3M$ubx1FEC7&xoCeC7!HvOJ)@b==ZEaX2DFF9pcR2_ z%ccr924^FXd*k2wquJBo6f;v6071^tHhRYY@5WEG7OKE z)Ww_~Th6eAoyrdv?btF8mKNAzh9PM(J7LFafTeQdo_>|KLRO*(F97uMggu7$fw(=s z&&4vy9KE*NSzwt&LGY!LxiNbj(Re0ZtU#RrSe#+HubpO?oy?|)b(mqfd|qH949no% zocPWdu-h4?`=8CQY^E?lX@?kw%OexnEBJ?Dx?kPFFj>B$oo1LUOVPfKVY&~UW0=gh zXrCo)TW^+++b+35KQ81u-;74cG|7WWLY=!(_fiJHs%UZ_z#nj25cIa{=>p9CK^h!a4)PhJXz- zOwY0BIi@;!ieY$6jFr$GP z4a{iZKZ*w4p#A>^R_V10t8{Xf^&Q0j-*yfjzo+FjV98w89w}rq`wdvT0qZbe`wZAF z1Gd|MwHmOU25gf7>oH)P4Op`Q+iJj~1}p+BhjVY_qjLqTbhrv&9M@Dh*rlYz<})mJ zNn(}2>@zZLPG~u8pSlX&E6g63=vf1H#(>>nz(x&N)_{!}un7ZJFklxAm~FsP1}tg7 zo-$zf8L&wM_J9F19qnYyWN1DH((bG z*th|E%z#}sV0Rg?D+cV60lU|L-DAKWHein$utyBoIRiFiz~Tn%aRZh&U_}F#1D3d5 zj`Q=_eK?;;jU2>Lwv58CCRd0L*@aGEV~lSkQH*y3%PK5IiLt7F7?^!l${Sbn#y+dk z8oEPb*qylxYmV75U>S|YN5-+dS~$kBVrDp#vfSqi4lC4OrPeq>an87ggG7!V+HW4qy}ol=4t)#maNw!;x&lMn_ZF zAsMruwSWyv3|mp8hOze&pTbbWal&6AY((;n*fRAFU}=RVu{KC$zL{Z#%!t6c7*v;z~bi zz@BE9EfU+shYi@{2JA@#_M8EG$bda)!0t6*4;Zj#4A@-;>}~^gj{$qkfIVWso-kln z4A^}J?0y3_3Cun(+YNp$NgM6fd$rPvD-7M&$_{5nFBq^%1NIIB_M!n>h<(+x%7Zq3 zs1L0%VDk*vMuz3%a%8RtmeKVXA4gBiWWx;0$8$r3tzZ}i8+H{l*_8~-;2sIW>KSHV z#2yT=)eOsxV-pfsjRC7=7^bB(@vQ2X)j@v-4}{(k5xuQ5_QYSIoq zjoAv@$uN0KhFv^0>GEmpqyal_z)l#jK?8QlfL%6Vw;8b02CUzJoi$)*4A>n8>~;e- zV89Lt&dA zrGTe^U2F@xeewz(Zz*7{48y~5A`L9YF$99i0NcT^F*t9~C|t`hxQ7dDJHs$torf(@ z+{&@M*fA|e7?w+oWs2a7G7PsKq%H#cm;w8Q0sFWCYh)OllSkti{UdBlXGU;*Y}hWY zzv}8GmCcM|TfJCdd>VV$fIVlxN?E=-?NWxpWJru7k9Qle7Z^60mVAQ->|Gp7W%H@? zc5$--YcXJ37zU?Edu+@uZZcra2CRu;snH4AO)qY^s{L~42{rSX(ZGxbW;8IPff)_V zXkbPIGa8uDz>EfFG%%xq84b*6;6I-RDkG))Dy`CUm5BfUy!9^YZ%e+r`h%t|5EeoHP6@l+4An1wKe~9`JttsU;fPU^UDt|uV4O?>aSKm zS3O+aR=v3TZ@*~gbXzO1;kb?LmNKUwmpOWw6)?~>*v^Ol^O^*4+EWbyx8^tr`P zFU~C9zBsh#p+zSbwJ&O1_~V72SeRM3c)=SBKCJ>&{6+JB zecr>Bot5R4pQ^YxZ~MHzs|bbetmvsIt%!vFx;$3?wesi6?efXFCFOrS_mgw~aL)0$ z&2#_foba3v&ABwEXU=fhPs_em_F~!ROK&QhU-p-!Kb`$(>G9Hr(uUbzp8fdj88zl_1`7*cZ*6c z0%hUQ9FikyZ90=h?PPKhPz^CxS`m-8nMx}In@Qe-2Hv4~vNhJK0-i9rT?XDvGL`TYR5EH{Mtt4?Gxh9P#GsKj12cu)K{qNy5i&ba$?b*& zI2jvlH}E2+Z=fWFku05P{<5tqX_>V&>X59U?0mRqfrCzW&RCIc&Wb`U%|zzQHx+DtZqaOVM5=sUoQc*KYu9bj!Vu#QcPZjS~h1Vp|L zNX0arN#rm95u*&%#)mZro)3WpB7#(FtGd>KF|Ri;=QG3blfaHnDjSOh=Uarr3dkQ# zrB#aP1{KJzT$D@9{0+ers}+}inBn;l#=}eq#*=KL`k6g_Smfxz-XmSdD0uWXYyIRw ztI|3QBHx)KpdJwU*7SnNPlo(w`auJrLC|r~3D8N=dcRRxddhbJ)_|^)QVHd6wA>rjHeQKM2!ul z@-+LF(A=kj8Mjc}Gu)>>TpST!hgMlK9*tHZ{p@tn1EZf0L0WAgW7SLZ8}x-1tr|1C5*+3i4mIuolT<&6{T9Y=Pnickd^42 z@S_raz!>t{Z54wyp3+IjaeCOMJf^FQLBM@lKsI%`C^}tA&Elvbahg3;+qBIpzd{U`TD#v1zQRuAnc#$rs_h+ zf_3ip%B1MS*Hc6a^QcGGEO!ck@hmkc2IrfOEZvAq0!(Tqff{hSM$}`134om~1zg{l z(1V*vIG`nnN?h0A*7FpT0^^-kZ$_)&1R*=0~z;zAsn^lJ|TkH&S$GW7s&MxBEbxOwGM?+5}ieVQ%bJibO z7~>i?lFPBxl7Y2EFj{=Y?=S`FmC-mXR|nZ)7LhpW5ZrDIyckkJF*T$xM?$LOM zi{Hlah>P!Z@I8Ar+8Ys|GBL74#WiJF!#qRQNq7erwQ#QxB-<8D1``d*5C&@`PRZ`U zDljx9OqT4RA$brl>{n0%@8-S3$8U|pYm>kUv!2XKGZ0B6#mhgyM4nWA z60@dw@ZhPlR!_nzytQ$B%HM=dqi>544>@I7Ia81;7J86sP-3SGEl;KrU7tdJ;T@n( z5S7|rL6kPkD%j|=fblcxukTLj>*yco>L(MJ6j26oTR{4=S@noAJbvj3j8ieYW?6{& z!3HJ%qPtDboIPN*P0mGPy4IxvG!I1oqjNGs1{TQ zS^=sDtpu$CtpLPut!Ng26YW{JGx ziSv}Pe;E+fL(uF%0%FxymoeE0|IAsbq^@Wk2AlCCQnH_a3dzU4oK(MQB_9g%lVpSP z_h`=Pl;5hErcr*A=F!U6mlCoHuMs?0404;=P^3DCOJ`?bTH-KGlixhWG&*g5r4H9L z`Td(kZH2WdTjyse)XxOd&?PrJLr?x&&7^ZP@cdBo=*$et{7b=u6)iV6Ly`W};nLX| znEt?F()k&fzA2b^c7}p~RWs?_3_M@dJUTN&vyNaHBEjAhiRJp z&Il%~98R0xpu;syen%aqY4XD>7=|a-6sOH^ufsJ>ez=lOiPHHsD64_ZWD&uHAb9er z_L$E$#&ZK!JH+hoJ|-`!OXluwl$KFpd~*z&LbOaJA3}Sk`XPMT{Uz#2vda;*dDp#{ zMlz$R#z<4i247vj^PzrX7g|8Uw7k@d}Pg4}+(O^NsPC@8~y+A?e zb;PI+_XmG5++U_Bg@0cV>VT!FOz?|i!v3B;c^HNrnR(;;q*=7qXWb*!N+(rrynti} ztnHI@3i>pNPC3(QRyqMqr<>_iF`eS16Pk2#lTOak31V@w82_acvLhfmJxeEJ>C`Ko zfTq*Ubn2N-V$um$I{8YcH|aDpo!F$4&UA{IPNveyRywsxr&;M#FP%cA)2Va1; z&B}}{RXKwBVZlt6H(4r;&B_dKYHYH?*#Doz+5b0a|G(TSx9*wMRhO^+#L_=s@}baQ zmH%MYJ@jHT^O@1W|0f!_liUU1aZt$Ih1Hu7_bUi77lIHLk<*#WA#ziQPZV=DwwA_6 z5p^`=cq@eDHiTfoG6Z=tgc4&(@ptNSD)IBOA^rZW?q5>ZPlh~Kl+sM@BF?qME~M_G zc7cIGaRsUifa63*&+#t#aB^|FTvmv;)ioXB#TemUlP(X^9$-Zn>^e1QAMH5hG91-+ zKcr;Dc*s> zj?N>Z;&N496&mHylb$P-ZcY}Z#fo1xF*ff0;xvT#Ig?GMF1tU{b;kmCnt$MMkFO=2 zt8i7aW7Hh#t|mv%@jRYdA)#82D6eqmerI2k(7I;`C3g#c;;4O~d!S=rpzG-Vo-QA| zyg}Bj1&L+-1?Grzfw0S@OY9bJP*z=a75U(G`Kgb2OV2O=cKICrQVDR!J=#nccRVya znj4CbIz47IQz*JA_07dD;@rIKLON4EAkax#W1(ZmdwN_xN@^~y7jK+!asLhp%dx@#v#$=Xc)T!Ni`z5Ghg5qIa~Kl z%&aaejR}!ADsX(D``97-a92lP$UZvIX`krocNtMeSqsz<9XvU~MrNS=j$TC)Z(ovg zjw_ftkGJ+ze1WL>$>nt}HUA2>()qn|ip7~=X`XUl8$$kRN4Bv$E$K;C4u1W{5SqFh zxdydv7~QJo7Sn64m<_Prx}yRyKxiW(lo&}Ra8{HyWtAY|(k5OTLULnC{z&@ zE)mB+atrVBcwQ$H`??~r^7K(EIo5jsJ^S>4O?OghW@L@WWp-Hq?Iy+|i9caqf7gL7 zC#lPd2SPBt>%k8U zH`Rsg;PDVnLgUJ1j;otAeUrOvU%As2P(8IQjE~D&j9cGiDxpDYI$D!ge^YU=Q-V>C z(lQ>KRHXV|VI%|h7OJzT9R_5EcDE4mJ2A?|fP=;tu9hYxX<=?D;N=8cA)hKv+YgVq?nB4?DCRc>b@lgSuAqq$x56KQMM7R8s3v?sQ6^C!m8IMiVR?#58M~Zx zx>P0RB^0AU{>l;xL86roqm7^9F0O6(W+HM7nF0n z=$;;2WFiIzbu3v`THR$Dlf$U{7`j*Y0b6*o`PHqgEiKut85TAbuat89*pXwsCy&{K zr~A4*KXjey>*^e|d;7ZjI|iK*?9>W|Lr}QmQ|S3gUYhBF#F!Bdg+bVLqV`t`_MKuE zgO)n1&=xZwo${f?LW%IR^i6rH*L58260an*l1qI1&%@FEIL9HfGY7I)ErYb56 zo2Xn>yAI@dl%Gd;!L0#eI-#8iH%lg7R-JbkG;wuc{s0PlG?ofrmwfp?CqS6g0?GZd5EW@-g`7l5AmHE9;Cj z?VGPK!DAG7pKZ8Dw7UZ@dbo2tg2iGywWD!>i%%!;jQs^vYsW%gZZ5 zl@J1wDY2g7*qt3>qhBrzOlKS;Et8@;l$@m8$C#V1Fap%OA(9G{hPS`_R1YM}n{+^L&A0L)W= z&>A5%>o$ogf3E+54tDs`Sf! zfLk9l3T7kQi4LU&e+!yma=iUo*&W)I({cC?rk0We-8(SE-O(H?Hg zq(ehf4*u!JIZX_PsbPxYZye*YUev)*G~$@3iCISVV&}wymrYDN&XR`zMM4>mUB?cDq#;Ot z=*mP>+c{FaFwCXXwO76{z-Wnciq$FO6h)KS)H97cfr(a~DnB)iB_?o#7+%*!Iq9v< zeMT$IP!VbNa;+is5#c2(Ys$~pC`42@FiJ$f2~K(LOQ|%L1_t|SRhBFP|KJG#^!gbx z_Gp?Hg(2aW!4`_HYjTu@lKn}wcjsYP2?4om(sUhiX*>x>WThE;mk*?*DOELx)Vb?m zA7rMfmQ<@2Sk%!Zu6V-(N~qpD`wnHrSe4$bhHS9*$NH{3J3*zS#q>Z8^dwFB5EGHG zvjUuKZcdB@16MSxA6Pki<=@r6UcY6<(fT>{udTRyMQFue*Y(wXq3*qP7wf)T zyQQw8?kBa2YCl^0c?E0=$1*$1mn zSI?==Ej_<%>9Q{`UAJWQ(r+&*EO}$m_ZL67II{S67d*9S#iHjIK3?_Ef`$d(t?HY9 zbJgF>|G@mnynn9zVC7)tGi*7E=0o({e0#3#8@(Fgn8cWE;l*1g!cl`lHzU34}=b}sc(bBR1R zL1Uwt9!LwV1(S#1xH7U2#|uF@5c%<30OdhN&_&Q?&|RQ=K=*>~1Kkgz4?p!pf1^k_ zRwR1up`Ph44{+bXJNb6fOm#R($0+b&)r1d$r!GdJlr|_;p!824(;oTQpr}XuV&(2D zJ@)*{YS9X&?ZPnq<9ED-Jm<)=+*%|#&9}>M{i&Ws7CGubEU@@t)~d zoA`m=6`M(H5+bQ>^k=>H&j+9?=$suMPsmqRk#HD^sA2Ud!V(gO@;E1n3*!@6L}O50 zNlZ>c#+^t{9Y%lJl@lM;No9^R7<{`-7T}DWp7gfdS*l0|a;U@U&p~+d(}(E?fb0Nz zuQX69CD_@)JL`8vL#^C1BhPSq+Yn1aeR|f_$)Az!m<0=%9Ny!q);DZ zZ6mzPz=~5j}bxe{9r6v^3 z?IL6@uENO?`iP@ma9jif`ZU(LNFmMIv6}sg1M&1`EUgCmwn4dJG9L73@zNlf#8-o) z^~lY!Kj@pko1rWXZXXgo(cg){5@wxfo$uHVeny@23#Hsb)(48Tqb)X+e>7W-8n%4} zgV1~2RQ@K;De0q5OvF2VB6Pp8R5MIxvL~ojaxvO7_5P%d-IP5l3s&%_VZa z2$RLs68u@LUr&L@`qyS&;v8EI6j;YPGAa$s5qnNfmE|^$rBz5(74M*|%Hw*2I2Ki4AN5 z-hkL!^|5@n%Y8wKl?yat7wrZF-ankrG6+JU@etKc}3H4I};>9_{2f0<+Hbp}B!7 z#(hUFP{rejnI>Xvh?jivdM&;+iho<+57e}a`D(dv3)Q8m#99#r@NGMgOVw@g}BWX+yNq0y$hrE;9*utvV}5gB-n^k3y#>=m4^Woj&8qW~JI60HK=t#A z$=s`Cz9n;q$=jply)|=(N!+a^zBO})N!+C*z9n;q$-7C(dn@J+6Ne~sVvhRvF?X0? zM5Ggf->SL8MB*5q5cvz4JK8j0@(>447V#H14VW|p$rIB4Jxl{87V-3i*nbbxfQiLh zxvabEU}Kn4JP>=I(xw3uh}e9p`Zr`6=*K3LgjE0`=@)%$YRiB`st0;REAbby445FS zG>Ed@h-Kh^(Z+0!RRO(NBVM#=DPbtcMPbfR}w2%;h!vE=K3E`mXL*by!sV}_L`lmM#$&Pvl#YtdvisBz!Xf0?1Xd|c*#6MKlKCC=({16L>LcDPc5i<1h9C^s(a_1+; zJsn!C_xhHfcQP^5c_79K#0h@ouS9mGFQF4e3W-!gCnzT+lzujbgd&0+^`{o~Zc7h+ zB>^*@T3{3s@ZN}w^#bmEXoa+-KRc8~j0H-uT7{xxPV#x=_!V&GtX|}qqvRkN`iYZm zBZ8dJM=Uti3xyy$kyvt-t8DwC;*XVTF{r{?xR62+K@9lRkDhfetV7~QnlDW2Uh-GW z0p4}524$s-Vn`kgYN$i5df|&_WlVBlv`)J+Cbhk>KxG z#nTa()RONp<%qN?>S$OGKh!?VMu;9|+6u?dd>Ku8#2wYIP@*v`>zp`?D_cqKQkZ(U z+Q0DkRRq78458;#fGR=Mld3=qL5o0(K}$eOLHcu&6@Ypt3UFR`6IFm|_9?h+D%Lt_ zNWe76>tRcad-ORcBKSDH&s3@DhOJ&BgqXv+bk{X(S;7{c@Xd$qM!h73(ksPat<|jo zd6}Sl(wy}&rg+k`{&c8SBE6-6Qm=JJtZvmz!L(5&4plbmM;#M@+5gRkynI99&Uy0ooNXa$sZy1E zD{?$=sFQf#wFQF=TqS#xH^L#4+3S@l67tu0$H8T)44f!>mTXd#6Co>Plge^Zqh3!D zr3>C3)y}gak3Nv+Z1PEY>TQtD>L4nF{A*8C1Zmr5HBFwkun7vf0Lp_3pdx4jbP;q3 zbQyF7bQkDu&^@4gLHB{~2Tg(=06hqL2=p-M5zwQc$3TyRo&dcK^d#sh(9@u|gPsAs z1N0o|dC)sSW&0|vIiR_qa?lNZ&SC%GLj3=$bpHP(>;2ZwS--XVZL8C(yH_`_&aaxc z`bVp-t$KB3=c?LOf4A~~Tlrf3iz^c=cdwkg^3yA_^-cBvwBk@*VMSy`{fhrucVFH5 zx;b^0wYT=iwSQFmx!U*FUZ}lLGq3hfYd&1_((=7E6*b>qp07?Uk1YR}>W^06TD`S; zV%fs#e_i&yWxurS3rl;Kty}ifr3;omv-Iwzw=Rt?%`N$xCEr-`;*$3-KDeZM$&VKQ zcu{U~$Ks`nw=MeWq7N(@S@ewsWsAPH@G}eVTKIznA6gJvaPNZK7DN^dRlQO5t5r`| zeQ17L)x4_zIzL(Y%>4fOd*_$T|Gz3fSNZCrt^A64Xam6<(wp4t$;@*mr z6)%S>D*n&VZ-)M`{7UF}s4?{SWjo6c%x#$SOzB^iy;k;8*_Ep6w2YHDPqvQU?>^k$)uE11i%`jDV@kJW zs!JhDH=w%^qH=~N#5T<2PzP-mvY+vMZGZ|4j|-%QZ$N{nkNIcV zSyIpVd6lv_nP_}PEQgUx$T*^Y)oq19NRyTY-|_=p`;Q;85yWRu*1og%814IS4e~$6 z_>c7tQkrh?_V*v}8?3RGPhL8QSr>E#bQkDu&^@4gLHB{~2Tg(=06hqL2=p-M5zwQc z$3TyRo&Y@wdK&Z$=s6I5$Yh|jgz3*#)j+ITkFsL+^d2e^?-FBlS^IE`L{L^FT7R@D z%|tvRM9|^?{=t&2Q>E7INh%l>N*BhU&&OHD0ezATswh>GDo7uLj_+qO{5ozZK~KVm z6*R}#16d*h5xS*Zb4GaZi>c9F;@>?$M{s5^Tg0p|F^)L_*MHzlYh%+cEa*Bt8P2_< z=|(I;qmz&iViQSI0VNt64#K&HZU8y6zHl~N7=bfPIGZbmhf-mR`GNnYbNN)bfW_kE z#AqrX##qZ2Z_hTgU_Trung_dkkJ)z9F36T@Ms%lpo!;oL`7VEnQ&~}9QJp3?KGe_1 z^}(y5vrI#NvA?i_T-DLMm`xRmjZJIzM6OFiLOr<3y?dblP1JFnm41(U6=dB4^S`55 zH0hegu2W4-cVEnn;<)K(Doj&eI5{ykc4be5RO>Wq}&?dJSVKr9W zX7vnVed__ME?#XMscQPNI}dkt9*M4_7YJ{M=w!^@$GQh2YlFqa1IiKD-PdVi!NbXA z>Ay9yUcL6PV&UQBuncw|?dp$gP)ibwsg*N{88~7nG`h7TYM`fMf27H0LSs7L#CcHt z1IK&JS#D&EIGPEz$VT<(X9Zi!xw?*0cnOmpR(shZepf6MtVTSAU^k>Q!*~+uCq2un zn%rdi2j!y(ffjZtR}TH8&j^#odxQz+%)C#1aRRNm#;Tq?iTU*`=njw#ItPk_hCm5W z5|jd^LBpUCPzH1-XcUwMjf3)_0;mX@0O`*j_3qD#hkZhC@x%!$QvvnM4@=x96AQ;d zCmNAIE&bZ8Z)ReN@peZ!v&6=%Me>_eCuPa8?&M8w%J&RB0B29WgqL8g7E*$%P>FYOJHtQAN9$8B^DK&|9?MYY>dE0|g^aR*vIZ zFj@>03!g1&f@3ma6H3;?@P&!gM9Sech{aSOc`?}!923$hkqWNlV<}T&vb6nZPxY(_z`5 z-eed{7^}Led;uno!?jMmfG{phfAs!A_wmRE@!S7sJ1na@M*2Ey&EyVrr*_az&`qG- zpgo|ypqoMaKpmj{piWR1=pg72=rE`obPMPRs0VZubPUuB>I2;h>IV&g20_O`CqSn_ zr$J{x{L|)J;~x>rj&ga2>>K&Y$lm*$CHJ1Ih!Dx7bp$2Z`VA8C8k8ilP{hQkS5jIq z-l`^ktzi`94oAS10-UO0wz|vy+thr<*smK;|AitwA4g|PY2!`YvqiImSnfF4(LE^Md+Z}!r(*`5y_O|- z1`xc1c%ltT;Y8+S1 z9GYzOM?WlBYM2T#HDBP_ySKqGf4~lKM`2*yNX#GGd}cR_hsQn7z%QY(Ne8cIg~9_^ zrs?ey@04AghkGNJBe;qTPZxX`D-2}Gs{3L)ZUaPmFBhJ)l1r_J$g>LK;;hKFc74|% z6N?92x_YPAY>Pz5G96! zw5kb=m42>FG+vk@NxK?TEXlvhNi3VfrV?I`%~|bKU6rN#KV-U0TE5myk+4n8Ml9j) z$%JF)lNk!lX{y;aWsI;?Uze%IFD0i)W6;L0$ux-@Nb*6MBtJGqE{2jlt#X-Cd4`hV zWr>~~V;85$#*k#6%4YoflVG@0E~8WRhRyCvra1C~?%#;ZFmn0x2>FCHv3x4wJlOF5 zQ#v^hU6#7~`#`r}U4Z9UiRi(Y0K^9ZVEcNOtm(C6F4$?5ya=L?e+d}LFmk6@0>+OR zw9by9f7Ih=7|VRr?@+bUohNBo-!Bmt3wt8=N*fI8K+Q6yFTFNXLCZlQPz8wUTM3#E zssb$lEd(tFEd?zDRfCp;YCyH1I?xJGJ!mCpHAsJM(*ENB==}#pJ7*{wZl5fUu=3$A zdO+>Q{74e@r_&0HuX@`9()vsA0MAoY;;~$oItnu~@k7*i(_UzFS!_EcaO@mQ9h7DXon()21gcmu5r*9FO^?F_Zyw5?<(G>-wr7P8Da9 zUCJb4EsUY=ZBq2NNzJp<;lkhJx$JFRZBh(JNm_8`Lq6K0rUYwlWGSO zd#cgDF<6)bN+q<&P0FAS<;Zr+42wx>P8OMJ=X>B$-_s*N_dR`kH){gyEs-ENc?WOr zCJ}n@Xc7ALm3Ed?1JF{8=t05?h0^2&;08|YL76xW#cG+RSjUu!RI17ZRbvA5Hary4 zNbS!00^-%1o?4CS-A|hvkR}%zJ?$IC8lrdB1m8N}tm!v>z=9cax7r5_Tn~ny!)%W9 z&#(9yQ>dC>%dN7>XDwJ*pcg@<=dg1R;vYSQqGd$WpkHHNr`DZz3e~d-ONNTc-t{K4 zi8YD+|2I}yKgZ`^S65)BTO9iOid8jVUlv=MUA#DSe!=fo{p)M%gb5>s5N+Y*(?82oC-KGwURJpCBN8`hE$q7T?p{D$>Lj6(i zJvRNZ5MDOqvYRkTLx{B;>TeD8ZwvKr5B0YpMpLMNM`++AoSM91$-yJk-%jbJvr5SB z?mTWwPJ9dX@1(qhpH-+~ERJB-SrJ;eZ{Q^2%b|#Hx52xp4CW!KL7=Kv(VH2r)sa8Q zAas45vPAu;Py`eO#VCco+658D^kpcnI~H8)e}yi6d44 zUc(cqae8|VHDq%6%Wbi&6m~w;MNVt3u0jr{Y9lI<-eFMEu?d3g(eX~q8n-OC$944| z3-w1rYta_yX#Il&_}Uht;M!|#Bv(yq?y|TZ=xC^0GMf8t-|_uD-JPMMCk}RW9_^O@ zrFyG&+~0L8VV&@jJ$eH7z2GN=Y3~V9&aObWBdvXtK4RM}S%hSE_u*z2YWCv;eWCsR z9YQp9V&48DZ!|IdzT$=RP&hhQHkHD{UM`tQU%|WZc<5;Fi7h>$zT*RjkA~KYGkdrJ zqLc0r=semN!bQf1LTisenO!|@gSee{plgr{LG>~@tobUOW}{yvG4_YGqKcjV25|M| z(MN0tnzt)N(cs^-WdjA3erln@rD6tCmzzU3)Jl<(3m1jjzHep4OeZ?D7?UgmIs1BG+K(;ERv}-T#Vd%aB$^DaSSPK$UlmJj3==VY|oxODz-Y~V?bR!^JP@3i|X&V zqyb)x+DS6_1FhDemD~gf`G>m+^i=BUxT0<4oG1MT z7`^OZuM*-GY7CQw0zK1-EWBG7U3iImAD`}g#Uv>Osxg-y*FSkwhe3!5Up@xuDMybT z(o6mVx@rN@BBg7%)C{d!%D#U1r0C|dEJJuy7W46h=<(iOqB4gr^no{33b+2s+cto! zq)v4UIb1W7n`4YNSzSscAj4$vB93of2{B2{)gP{uqoSCU& z+T_7N)#d?)y7EDF)2fM~>lCHYPhyIa>hUpj`Gs#L`%`#fx__f=?jHl%v63KRgy>4U zJl*}bvOi$J$tJy#9^mq72V>O*#5}7UWZzi==OV|mNZbHOXZsuv!jO0(Uy4V*qYh<5jRw&8gtMUIibmhV^fi*!#Df3RFTx_kEbp29RF{HfRv zT>}Fhhq`V(-gUgoMRDa`N8jPzeg+-vIsvOqhQbxKlFnr^Q{g-(zY3Q#SCUL663Bkw z{)ATT>+S7P#g^`GDv+x@Y3Tkz&U+!@<)yflW1UaqLXD?p(LTNKTp)AP^GJ~k;Q_Y- zx*t<}(S)Rvkjk6do?KT#(%Xdkk#-^qF;5VbNCaq9iDQ#jaCmvR3r38=D z3{_sw*QyTGBwDEJ8y51o5~<=Tr8{p$e%BJIPVIc-_L2h!2UHHy4N8fV4lp77s>T&= z?K^S+uS%+UgaIR)o4KW^#M=8r{iz1#z+qiOa(fD?>_qF+?EbOY*y_bKpNSD{Op6|q z9}9K&p&@Y20wIv-JqNZ7deYcM*-MLw@j|GN_P*%$Q0yj>{6cn|khG8hZvs>fTXJN6 zB}Q|Fl(Zs()q;Bj?Td%->N*nY#A9ff9*bgI2%aM9tM-NPYOjz_;F&WvMj^nZMx4ij zwAyT3hSV_-3hcX6arJ~BAHs7`l$ktJLZbz|Ws4J20>dR*stC%BBQ$(TzR60fIE{>Z zx(bSiYVGW&hXy-wX`-kJv^7CTghJUdnOMS5Go=pEu3)GKzHUOhDh&#PQi?M5+WiN_ z&`}kkAJmPK&g|QB5-sL97KG4YV2Z<2E`(6^e3I(Sr|3dDk0*hsDe@cWJ>K7`Z+vq5 z4sE7}CdgLD`z)+1D|6SOg&#Pn0xl7OjVbxTb|nN7Zl0BSqwb9z;zG2KtZF ztYZ5ubf62@{Z^}2rf zpI+Rxs&zqm(u@vEO!q8mV4ATq=}>1bi@%Tx^~>Q6N);X%P&(mNBl@|F@SVuv2E9)D z$1@QRz-|ty=|`l~{YGj++e+l}rZ z6_ped19U640%`Ti9U;n8F$_@h4In;cWXa)4eFx(iYNR&|k|#FXMMKaPeON0Ik z$3vbC>LR32ftA08Go%4g3TL}llvnMm)7vNAKn*c+bDRxjT`l$6h@K%7gvnF)Bk~|n zg_R=*ow>8WTR0A)N8*hQt)v}m<%p-6qA8@RQrTh5f4cIa@nP8$WUmn~6}VuGx;43) zQW?E71DWR_aXT^<&9j?K>}tLM53!0SrxJPR0Xc~}BOiA9!H(lSgPwZfIZnmDNLI_Z z7@Ra@12;#LL5FOmZ$`-DyrMb@t>~aaHgyOppztkmJX}KXP_b3Fk+XxC7~E+=&jy$V z@Ku&vIeJK2E}#bC{Nv0K`m!F34`GB+pQDlqX&pTSUAPw*QMhULk+Xp;ps17_3Hj6| zOgN-PtPfCKRYZUMH%g5Wqvlk))3+yec3>@yN*3rZ$}aXdftdFpjAjUkiwKR10#U|3 zD_UCHBwl&iVBOieO7Z{UjS!xX^Z!p-FIeH(KVJ1kL;$#Tb;IgES^2`MTUM2=`h)tH zR~}yZ&-KmqpR9kV{%rm4)cw>rbPtM<5 zRbKU1^Z%kUK7afCiut=LKV3Olc}L~*^QtO;IPc5z{=VY;y#4d)<_%Z;QN^!TyrbfC zp_?iyD}ECCALaLl`a(6KSoycgUo20T!}X)gvi@zZWqk+q3TSBVX8illbAW(8Gv^(1 z&diC-`KPk4mpxl{61+bv{c`EsOV5>dmaZ-R@$6rn{n+f@*TDP0GEOC3yzHx0obbZ?1t~@iD!X_!wmknjx_RvHI0kN|P zw?%(9UThg{D#1U|V50j)B0Ot7iST#hMI_m&d{9{~_lX2(5InDVJ_2!a+N8QssoNRu z6$!__(GUIR9$K5{Jf56LgrT!td6UjI;dHi^U}q}^JDcokI=mRu zKtXpk8p~`BaK3I2j&AG~i_zWJ-*M<@N29pKTnufxhI~&JL%S*1HWv_aN$}f!`S|cy zym2k!_+EChVPEQ$+afC^b^>XbGbZP2eULk+JF3IPzN`t(3D^-*bHcvM<{}wd2wN`h zbim|0Ut__Hu!yLp2zR%pF*%Bm#^X3V*JMaBJVlBO&ZZ)TVWz=L5jwMRrZF^sf;Ycm zA|Lt%rzi{J<4K3HUGuFDPG9|k>mZru zkyXL&hEs-A5xfjW^+{hgg&h+eC6`XybP7=JD>SM+7~4_7hSfH~HX-@+*+0hDBlzSC z4&*7uMm0Mz#v_7}JW5!`%|SjKK7<@RDbLHCv8+NTOAVaeiW6^7`amOb8tQylaEcu_ zr_P(nr5PVq#DjuORYBj48K#5BYlG$N63kLB#G-@TFnRkW3r>@xKG~w~bBv=y=BVoE z$x^$TGwyv3H?3eg+}Nbd;~;C8YQw8@v%`)pIES0g3~UNA?-k6dAO&HsiJG?rS#e4d zS_CVVLa~Z67}{vJ=0y<{D;3~2pDQ~aLG9FQ)hhCduKod-YK@KP$Lf1?G=fjlCW7E8 zz|f{mfcm>mbW@V1wZVann52v&(z8A|K;iE1ksIl0Q1xbmvsEyuoMSz7^5`;NDf_PC zu=&;bLi_&HL#P)_Nxqw=IhfqFWGNtftTWKkzmCPOIq;amLlhbpW{21|MND{j12i`^ zHi{DY3O+0cIY$X0GHRxB*O)S+Q95O$Gi4W{=_1QPzy%6VkL#1S+dadm<)O#u z49PEHYB^oLlf-C(7SY@M9wm2gXp}xAO)bv1drKsw<2SR8gTM%WM-nqdK?G&VrWz?HGV_|Up^LsJuWm0|c&uf>ayavWK^ zR*GM{R;=xvIlHI9wl5awXS+fDwo4U3*Kv+2I!anElrAE~#R=!1T;Sv#WFr!tpPQF)`Hf7)`K>HHi8;KO`vAbCQu7#GiVEFD<}er zf?}Xn&^FL^P#b6ms2#Kuq(4X1NlI2d7-<+Ks2=mY(G}A>tYOkWjbsNP^W#=Ei!otm zwJ^t>#4oBjJ?;@C+YKRW;3T<+V#naa1R{)uEFEu(q)VE>-jCLe1KZ0 zz|F#~N1mpnso^H|5Mq5o+O-}ZG~p2>>I)@=Wj;HDikFtICndQO`4YAU6H3F^laL-S zA|d^w;}Yme64M4wVNykv4_2dkX%I0#)*yt5W$nk*LXknxX70e+#HT;W*TLeB!)DPw zSZBj(y?}|t(^ROBiqyP0m?i8;rE7m199QO{wtZ2)ow5SlxsK#EHv7}+!;`9cMdqRy z=ao>_c2V79u<)aNwN>q5t~QH))-2`%))~l0Sr1C$l1assB=VwNswf@v^o|Qe-hgPd z8TZJe1R|F$!O3e2Paqr~9qwJhzQ37sdwkZAD;qXD)ctcz2`z@CYREY`wgq#9HRe{x z;~40qGL#cjs+&sreL{n9?|jp8HW`v$M>)|FfgIV4M1}P~#?jqi3h)hWJ)-n;8XVfR zl75RitP-qKaiWzLaAv6pEpqP}^Sm2Y=_V^o{lhAQS%LpkMB%PkFxArJNQ;F_`7ptA zByfFkRP_{=@&HdMd@S8((V4UBtaX#mpOXz|}=7Xw03qT7&i$IG(OF&CO%Rtqj<)9i+9cTr}P>D`Y zCA?L0i&TnTOAg$S9b+S%~dX&txX#Z?zEl zNYi3yRuk(#B~!^7aNnGDU_Lw9|D*vER#&e;bN2D!!SFU71$1jWe^~n_}Up( zEW{DYB$waCu+hY21ggvBZ(>+}Tw<*T>;S{C&6=UK+Zi^R$O>#H!-}I5W5ltNVeCNHr43`=K53Y2y?!&2i{aLg;0-^Q?fJd3+Da`}A>%jDx132OtE z#ycCe2Ni|dqtgmv2Y?mvqDXwj_!y!?pU>UKu*<2ez)mnMg(4H*0K;+$yTgE;F<>VR z*zFAaf7yEv@VKt)T=akd2@WgRI|+&n1REMbQW7bmkpzh*6p>Ur7|a|1BTVBI6spm( z)g{YnZi-_%Zb{tYn!FT8dC5&|$4*>c;#|L*M7imSo!BY&CO3BU{mq_uR5LmRJuzkQ>ys)Nn%cOHC z$U<&m?FuKSu^1{YMux%?$H%aLoQkdxwP2$Hi{UvV2fZR*N|^9Kk28&PqlGS^XRvb? z?4$+juwbVxSf>SRwP2?#SepfFw_vwfu(JZAEv2A)E#!p{Tp-la4@y0a)mgCp7Hppd zTW`S*Sg?A5p?DIgs)d3`A6Qhq9D1F_LNDqn49{7mvcv?0^;QXtDiFHa!kEO!2MM=u zhXuQ2!7d66hPf=>z}_V=u9N7+sx26<87rmF=+y{}D()C;TLk8zk`i`AV7L&0u?B$^ zGS!Uy+@wq>vf1xEFc^yUOc^^dTt0;Bpz*sQ>) z0TT9r1*;Nip?XSsGeVEr!WCe*3Oz~-VaEhUX(8;mz$h(*?G+fsLD*4&QClGF7J*S) zAnb&|CUQl_ZWfq3t7a>EEZ9y9c9R9GwO~6e*lr89OJIeVci$NJIy!~_40g_fby=`e z7OdNXby%=A3)XJI&RDP>3wG9mofjDT`w2Yy6jlfyjB9MAz-W5F2h0UljC+$Y%qX)W zJcC`aU^xpmEihD5o}q3RaiE$qwn<>9l8kM(U>gO7YRY;W1cp2?woPDB9D|^l@fLyM zk%_Ub5~DE>dR4W4KRNBr(6pyQya(nzFzo#Iwb@0p zbhePst9Eq~FU53T6EpGOhNX$w-f)PQw@Q(k+1nB+>0_5GIQ545dvJ~W8NS+&^z_~m z&|JmAgObe5fUw6M!;4x7E~<+t(kRj_F+$Nc%t+}Qeo?12BR$~n1;+>JV(S+jVKe+Q z*z%))(1+3@K;p%$Vv!meXai3XtcV1~<&(G($uomr^wue2Zz8?%5{YJD|2nhLj1|Xq z3YZ=X>b!*~mrFB&Fy1r}XH32bQjcO&gh;2bXDF7S>pRI#`(q}TU@{nNSdFL@@xM%O zqJtm~u#L=cbra(vVkSr>0_tR!7A_Y%`ZX zLM59grczD5f@0Lc_Vo9iC5aFRCvt~hI&pjqJgaAV+RnN|!-HLIOh{-bZ0I*iE;2x@ zK(p*c$_9T2Ft+1-cSYv3n!s`Y-`i1ZE4L zjwXxX0rGGY707oL_nOW-S4e8e*qAh|&%QG>9rw>GVjTXuOi4yi2(SnII;ak);405l3sA|U9EGk({alju3C30XQA{^IzCTL&=0IqwsZ=?f0 zhN3>J7|D}Huntnc0uBEtWstxNR7QzBI|mfDagcPyBUg&ZB}$$v4_7nl4|J!B{y*F2^vC^J?#pW8x zB;zD57iKBlpgZnH5itFzb_AWSt9lJPry=H3<4o~cK6A9ZumRr@p*ppPKHn!8H2rk~ zmsOL0g8fokUuPRSt}bG~!VP3D3I)L^a!x4g!?S}UeSP3zrW)$yu;~NrROoS@!Z9FUFNJ96Xgj^>M9gzLlF@wL?Z6p61g%-y zBRmF8g5e7Z*G26IFa(nGuD(u@BaW%P=K_fJ`#K2MG2xq&7&vt<$591POut5Tn$3OILtVFM-8M(PlYCbsdVo#wv;wFhOy9YW{=YOVK z@hPh#6O=GzpnkpBJ$$Yo1h0L=pcHi7?zTa?7+|=ocL>)NP@BUv0_RA05C)?t<_0+8 zfbq~zHK(BsL^OAxBkVK zab&WfK!r~x-MygXFN7($Ivzxg({jhpl6NMs*G3N~s$HZh%0ZnIT=*v61vtn(jgHYv@4t zB@o%4q5F9e%h~p$tw+girCA$72-MQE*ho5=;L%8v;GY@n>WW~JmUpwLBqrCU1*q^# zdBwryDDsQjDoutpEu7D$97yo6s&h1^s=mVQ9qOQNn6k!`QTjua#ksb@PW2tMc;E?8 z1Fh~unHsu0M*}$Q9|hsKBA%hlBZ+jiJccItO7$D2E9h$LyiAo6TGX3)d9EHJ{(-K+ z?*2~Pga8e7Fd7LAp2DY}^c*Ua!!#yMLuC#(J|sYBkJNRY89`T#Ka^|qu%xGAHz+x{ z`!a5GD9_u-P`fHU{zc5mcqC;9aob8oCs3wVveU>IHEq=dnX8!lSG%qYqF8pI=2Z3* z%bg247VzE=Q(6Lr+{?W$8{$np{g=96^%weAp1@PiRQlCapdbBTD7(GGs!I&C)&yw& zB^`ip1*d9oxWlECwP7B@ExXir5%(@>i{c&XKcm0n2UEvOnKR_^%1?OeP{T?-OT_CG z5c71aQ301U4-SvuLJ1Q-he90#Md!mq7rF=3JqW#RLlF&7rDTfh&x zMKN!-n$*FgJfHQG9BB6KX9ua-mxt-s9N~b@F2A!45*9_KBQ&nz*$y<-edyB79R~;( zgAw|5U6l&Bd?Sgu1P(_=W;vt6Egk3D`p$Ow_i4a5(0`(Rn+FPREb_;}uAvd>x>C8Y zM}vFqAXlAm>l8R4CuAT== zbFC5$PichL(-k`D}zJ`v4ZCBorB6p3;N zFA*xd*U{6}Hpq;&U{h8@22v9z5*=aB<&3tkhcVOa{P~JbuXu={XcYZymd9TTO*xjc zz=6x^G1RHL0zKy8fwl(^R8TX0K%haPnzXjIM&h~Xj5|#Sh|mF*ZWY1k5gwR(nV%kc zit<5?xI$K6Fa)cB^1z5`?(ArA!ZvRv;3%`_=-3?#H_>y zs{dF0q@DotqeVnb1k}Mmp;@X|!(6Y#qZz!UZUmroh+xfFz?FFnmjd%?F_fO*&ZEaS z;>OAl4KVd#ijFO!I(=HtDA2&KN`I0|zdW}?1KsUd$(U=5%yDO;`d7cF??Dsj5z~wa zvD_00yWdr)LMH!|9lX?6Ct=~gSpHZu2ts|=*V zIEtPv)y&@23z8Y#t(uO2t0ysoyCVa%ID-_Kp8|bEZ+{?t>~qb>9;j|ys>qcd)%!a~ zdU)+jciB8$!jyn6CZgJ)rX1$6JffBlVIFAwy*==;F`JW+b4XXbJ> zyXd>aG!nmP)JUkFE)k$=YKC7v@Guf+KDvHVM5^RyeS-3+hecXr;!!bJ-MXg1`9Mn> z^dAtA>XPK->F~w)BD!N*&uAOLeFI&1$OJ)nxRmANmVcLspHZ$3eO<%dXK0S!+r~>H zI!SV9%fZHua{qFbqG4l5=aH3x`f$M-zkf^yQzaZ_&`JE zr$*D4npR!jEYD&3M}eyn!J(TNO$pHFlx2xL(>2(p76*{M-YzVokfEORC^}zUufQ#3 zl9t=3@%VjFshwbs(M1oxDtY7ty0=CzZ1573wfj;_1^oCz&r38op@_PMxfarcC7x5p z^#F-L_2|G0iji@CObOKbA&jJPaK9%eCV8wk6J}g^IYfCkJ&w412bncX(p-~pcYv-% z)K1I;Pq0(#^9tQ`sZv|#&_H`nTgL^=_R3e!)zGdu&!f|r$Pn3%YFO3>WPKZmo)XaP zz%MJ+t9Ri_!M1jE+w@pVT^Y~Qk$yejr*boErOb{(fW9n%3ItP66cB|>H`$ePrV0u# zyUq@uL!KlxE+s+rhnxcRg}4a^ogojlT=#gMi9WYL%hc$L#uG%xOm=4Y#F`Ldzy&eM zq+&@$9C|>f(B(55uTt^54J2GwT^j0@PjDTe>PgXusrgha>EYNiFIby`=2sJxSqv(} zm(^7O_*&LJaNv8wyPXCNs?MRsCa%!zj&X%P>mwxiXB> z++BuIn$H8vpF^7l_t```0Xl+2He&l(3u^&*3Oq z;vs?2JHD&=@nRNOT-)Xgi7~w5jouF|p)sfx(Ceii2A1`)Idn162Z7}bhT(`_+`S1{ zUWS*=;H;re%VLVv!GvYJ_-0@eqz7!)i{pq@!Fv=K$Khkew*ZTgUIgdOv0j(VrZSHM zixRd3{3popG;aTX(qKz{>}g<}H((gcu29~dG2yA#oD+%hbmkf`5DYpsrB|Q%>~p|4 zEegYF>s<7$z&LNfW^-;bn#g(2OAN~xguMWa)4Uwzkt=c>FAEI3b$Az&&Qv)|Rr;Wp zPxHHuR5dX63o!n~3f>}MoE9G|E(DewL7G>v)?@(}RZIX&`xr`Y)|&(t2RC8ON)uk* zd&?;JV**&Z_$aWn#ISDlW`hya7kv=kwIPrRK!)-gCy*UvW)z`T;5dnd5duw6pzI*wONMyDG$Utj9P zC_G@8rK8w##r42Iv&onWa6GdHSW;qMIj6q8CYynAc>rTB8`S&Vz&Kv5N7ju&j8x-$fN?!Awq8853mE5@ZIRvN zSfU9S=U0bEc{vD-(*i13li$6-I9^~TzjeSkzeW%F-4Bd?4@`Y>g?eBdFEDZ+p5rI? z8EgY-srq*$fT04RZX5>2>0>?8%|#CZ<2b-%i%Ao@t6cObFfLzU{3&EI$AED?)fjQ! zv;w0xQw^S6q6Z?*mXj9jHVf8a!MZHi84GsKf}OTt?H25m1?#k6XD!&x7Oc&J9k5`x z0!xGEsAjYFDcb&^qqvWJEIZc^jCh2qw>XaB5t_AN4_mN@EZ7Sc>=6t0xCOgn!QN!S z?zdnMSg;o@*s~U_Xu%$}V0jDnlm(l!U^5o%nguIZuxShSW()R&1$&DHyK2FnwqVa# zuqQ3pTP@hzEZB1v>@f@WAh6Tmr&@yND>J5SJ-rP4+NjTr5uA!{0tP}Gfo1151Dh5Y z^>;gg#RvoKrs)&60841h^oiSmC8Zwv#O=Vc8dEJPSJ(k8uQAgnZUhzs2Ug8?KaMd9 zPhtpfl)}@P3D2YOG-kq!0h^gby9Aji9u@FfC=u-*^|4eAq;tU91r{U1Fkt6^#b8@g zi}@P(peEgT>Vm*PE5u`RFR-}QBaafz&oD4dSlAZBPRh+p#(IEFYAoi?ng7V(}2R*<%s zA+!O@0ju5vmuQZQ0Sk7)g7sLiJ`2`w!Fny&panZ`!MZJ2rv*D_!EU!;L%=fR7trS? za77Ba;SPzRB@lKI82iuA?8AQ}z!GG;4`Ut(uh3@FNnl)-z)-8;`CN2LU?@#~{+I+t zz9(DtnaL!8aU8(VP>UHamAFq}h=8#auo&6ak!7}+j(W-G1%?el+%6vn=9Tm?;l+c> zo60ckOU^wiuyJ~N14Y%d0%L*;V9x;KI?3_kIR|y}0br9lj;TDj=_V%dp=U|g1n12rQK zqLj(E35@iR-Q>e%7)|o;2UgT+!E~Rlrp>W83 z1IBUa@MtXj38QzA<6ymy0OK?(3_ldSj{@U*dWiM7o_-1#*CAl2f8*mBH~nc~TsKHB znZY11k^dQBoMvE3tx)_7FixKekK_FWFpgJYP`;Y@q`>mpf1d@$X*uktWyv)iFJX9L zo^ofS5sB%vR0|Bt?O3Fk$S=2GOD)(kfl=D>uw4v{^P$qh`B-H1z~xS#SYjet1B}~; z#%N4gEilE@HtVf5;gMdhki{nd%qoddfEat$2#jrktpi4v^wofN*-MVmS%c}#z{WI& zs*JXfNp1zkeFXGS=_iRMZo9y!&J(r`7`J`s@dw5`fN}W(!z&T2o6SbI0An90J@&x{ zfw8NQk4?b1d?{YERa#5m2#nL$h%|#Mi_*7GU?$Cb1g6?_Cb?T+*nG#fdx3FU5FS39 zmYu*jUWIYJ+9fcPmMVdnwpwSw_5vYFpPtfz_`CM7<%o5z+i@(=e=wU7}qtW$8~KK7>`@V77c7l zU^It~x#M13V9{8D7G!6~f$?|*TV8mLxw8`j;~Zn`i2~!X2YP1gNdueF`6WGiCzS-o zZL0-q&pZxhk~x9pyewX27Ur%1H3q2#m)vVE7a;1@SfjWB&omWyW!T`D|hhF!mqm={4?kz&LNp)|o8C z6YEWQ$NccN89jxu-d13<U}=HTco_$ll^Di6 z4_HxR7?WIJ-h&A5Bm$$sXVP=;bXNKp&t5$DjsQk8<#G3N07H{T=P@WS)Q!m)Cawbl z!>-7*H<@+s5*Y3YE2e?n9l$U}0(Mbg$~N!bBQRx~ckc~gWSe(~1r|@|3VC3zz$nMG zUOFT&#Q;6+jsVM(UvS|LS{w~~lb*nE0+q4*1P1RRb1s^$uvM;_j7!YP&|?WGwS}HD zMJ;LaQUF7501Evvf$6#9i>^Qh%@s5Ao{O#>u*#7bDPi?=v{pj{B+yDEvFK+wbwkNg?ZQH-?^{s!s_2XN! zTaRr0$1Oj<<>4*ox3q5Az44DWe{}Qxn@?@tu=#H`eQwipn=WtKv+0jE{@TV5ZhZ5` z_{PqSkF2ZO_@^7bu;HN%w`|z5;XCVpdHs9VPp!Xo{i^lfS@*?tA6)l|)v#Em% zYwb_3eQ53A+TClvx8_&Zyu4;|&8=%ztog&$lhqHb9$a0w`Uk7tw<^8r&Q*1*{;B4R zHSexT)Euvg)O>5@Pp&MkJhO8B%D-Ci@fDLRI#+C6@xA5WSpNRy_b(q@zHj;Wm;L&( z_bf{-yKPzZvTrT@#L}mijxTLrx?}0TEct^apI`FsCB-G@m+V_ox#Sy>4@Is;E=CSS zDk9%p{PD%t7WXe+zW9%;f35n3>QmLLtN&ur=NG+uQF>9^qV0?RX5kkWerRD~Vdui_ z3%^tK#j5vIJzUjawY%znRDPxMJ(Y8ncU2y!{Fen^Tkz2Zk1e=+LF0lSRQ!I$zf&oj ztD5oNmp|yYCl=5tOT87P#W}z@-%o`H5&WKC;Ftpmfg^)3qCH1$!CaFnY_2SD{LP(E zG`pG2)u%!=yTB=J9u%5;BRtm|*J$FK>USHcQBAr^` z&~``K(WVvo^4tb}M~cu)ETG%D5HC*T(k(+!_fP0GIJN98wX1=>HOk)9M}>SF2I{vv zs+@)Q@AUO|)2)d3aO`;agzxV~X0WT;Ke-o3q0+hgjZ%21?8Z!lIkJE*aTWUk`8YDo5>*LTBql>0p&D<5x(HkHSHCk%>PS!O0>v-oYRpEo-Flz&vdM6%q z5&vFpJtF??C0*XON#_qKREy@epeCKNrZAiIWzC|SsbQa+(*k}4(N*7Em?~<=A5>87 z(7)5gZTN5rVfhawv|@o%+N20Qb5gin-bbi3mo30+3Et^R7YWtX>o0VnU??3p7SKo+ z!Up47vH(v&bl?$>892c&tmx}uS$$NLi;-JQoctrkltOj(+}yP;vVx6@ybqQR8~KX$ zx~~?BRTxlc6Fcw4)|p115E!IX0xFGWus1%a3r2+bdW9pl@C#2`68eJ*T*9KagZk0$ zl`TR=|9umvuXRYb1rhcCs8IPfn`3?D23;wI@;_HNu_7+iK<>l(fu2((;lEWlbi~aM zbC>LimCip@U=fR!>-AxVz{EhQe2;_CCy#Yt)M4%km(F*MDjmO|s)i0dRBivZLS3Fo zH=MCf;DSvR=ieY%G;iSFx6#GI!Rq)OM3mJLU~fS1$G@s@_}~}PsyeJ)a#T?f{AC3$ z&Ot3UDwcHqS%ssw=_cYF)t<2X{unp85#5b;3u>aJ9R4fP1Iiv>Cvf?wO3xpmy5NNY z-B@-PhI(^sI(Pkn*oLX*8=)F;Fi{~;#Z|2pIPv;t`Ce@<~6@9tu$!} z`NyLATT)erNG`D?`YTcu=T18>lQ-&g*C%rKWvNIfBFGDtIn^(y?wvYNIj7qkq6 zDX5{;)tiJ6LW2x9pAw_Wt#Z<=V)`_)mYFHFMrs1qqnP&u<{rxSlbp)HbYIOq8uZn! zqG*0f6%8|n_@_MSFnGgk^AUZ6tkC~}Ri96VHa6?aB8B?*k2x8I7@8dQGDVnN zx0&c8a}BdiN5YNmz2z3fnLyrZm~FJE|9H8&VK$)J8_w~M33YWYt3xaNg4@2L9(B|)>1gPJUBC% zNP2Y*`~9#Fgs1mcxu;OAK+Tj=(E^Um)XT{aCcWr39;$G(o_++U|ImbLCuf(ZA4>DV zl4fA!Y?gzo(tJP-cphd|^zg02_sl47oEZP%RZ916P+U(#>UeF_Po3?*U>!>AysKrF_1+-Yaa&K6h&yzM=bngo5GOr1qebV$8_qCQILB`=!#twvzZjDm zm51BU)8Tm@1Qh=TwZ$eqov8ACyqEo;rrQ34A%7>nFUzvWPTztw4$CfN7dvk^26db& zu>@Cd(cXo;;i#!iyH-C9i|p;->`}*xezYUJK(T>;_cZniLzxScKI%c`pf2eUk z9-M(4n$S{aL4FS-}T(aIz zhOObHp}&+i>YP2S6j5be{wgZQ)qUXynLlMKbH#3{g&ed zX;Lb{4uN-Q%HU|&rN3ul^AG&0Na(SdW1(r-N*o$kDyCs=j@lg~YTP$XKxan!z(m;J zr;iV-li?~%+GLb31-b%(?i7I@4flq>dxJn#aO8tq!Ughm$KkW^J~Ik`Ri~Nj#?uFH zYP|__xU|LetJ<`y#1~O+dX!CX4txH$v}x%Cez|1}TegKW`DJZcq6gBRD-WQV12`34 zUHy^{AV4EgZr#MzC&P{TH?+0nI4U=8WMirc8&P1JM4_3>w_hruDLo9cp?5lt8XB>gE|vr@X-o}lb!iNWX$mxpfF6WA2YCl%MOmPh zB)tRgxIiaE))`pLK<Dp_V6yj;L{YjleBjN8|>>VlQp4D#V2z zZzjf~(Mth6wX6DGp$A*OwL2;>jJk|vgsto4qhm$fO(^tQ8*%$Cu)74-)U2?(1?C=C z*d4%V|F4>C@-ENllcbkaSaj0O;ZpWO9WdHILwd9!q^Ws4*@}G_B@Fv%2#X3V31h-; z78q>^ChVBN;@JN}*xpe;yd+la2wP~umI^G6y)LAe65(ZL6xJdzY+GWzrv--fFvd;@ z44dTU#z4P%6j=V6%5SJr<1B>#+!!2~jN=Fl-r(Turo{4uZ7^7VjP#b)0>c_S>lLsg4A_a+!dNR| zI3K0Ln_#^?*Q!ETtp(d9uo$Wa#j)3d?XzIJ3EQRO#XcwypTx6qEMDiZdPr$W#c^9T zu&L|7@HSJWFTrsvABAlh7Inf{%7Tqqu!IGRS+Ge9Hf6ykELhrtxfU#L!A33EeHP5K zVB;1nYr&F);jOjwbAB|8?XzIFS+M;U?3e{RV8M=Buv;uxvjuCjV7o2YAq%$0f}OBn zM=V&Q1?#e4Ckexw8uGJgGplMBIyvlFB&?}e0Jm8@y9(S8<=6@fw#I_3wO|`8*g6Zg z+JbE)?6j^M9*$xled7+WPE%hBU{#1`v!}yYny@okFM->Fp%=dv#-bMNvIU#4V3QW? zE(>Ofm<5YjuzM}oxCOh@f{j|Rdk8yce1%=N@YU3-VQj*Jjajg`1-s9Jc@`{Y z!Nx6E!h($wc3$Trm%__jsxROiDZ?f#*pvnHEZBV(EMdXog!SsQ6yh_KmLsF!7a33( znw&G2N)_83@Cj(loR8cC%)MRPD$0WVQ=?(*X@Oy>gJ=x$@3vsC0GrU^VQK;5v`q3D z3-)8c#s^irDQu)C&Vut!80#WzNaN#+Sad|^1H3CZ8k5YBt;Xo+ z4#hDpFmrY%P2pWqwm3b^;cXsW>SXRz7#|SA&WFR!GADCa5L*ar9DD-QukmJG#4!SF zVpL(q2P;nd80aE6j^%_!m7c+N0UICFam2Em=2?lM$xuF~1?Hxv8Ou?4+SbH-6<9%I zsR_E-d)CX4Z7di^Tw*$o34xh75)_`cHR0U{%#G`OfV^T7C(2fihOru8Gvi7x4z9Yy zR4%ih^d=OBvlEz(j=LMKhq3h*Y?Z*U@0x8lTd;K&Y@@(PUa)P#&zCuI7~q0_V&>*_6o4P)`Kk@{}?bgq5R_Nc6px#8@FJ23zoEC1%a71 zowi^_3zoHDIbgY*N;4nWjbY1VE$)%m7}_t*pbNV#*e(mUM_}d|aVKGU6$h5<`IPc0 zV2Pr^;6PlYbT{c~%-G&*!CVV=i7=eIpf+v#$@*8r*nSIEN7#(AHTj)Dc+uwuI5SM_@6D5laBD6tJYR zg*lylOai0xBOIPXB(t;8tiaUcdCE%z%V|A6^oRr8_X>>qR~+pq+yjixlyGPlz z8(2jKmDZ>PYR3KA7z6R?!A)%EWo zgjd3FJ}O^K;k+AsrS(kxdjxt0GxcvyU^s|7ftwQwwXiLkICPzS0D4z7rp{*Jk~-)a zjL!vQ@nVSuTPmxBmF%?v3Doo0^a5$F*g7h!Qs zC~4epxsJK0#z45w*l~ejI?dQ)n0FdIgFR`%Ua(;A5}4tv+J0TlfjNE2F^Xoqjqz9)B|SbUjBVMOYyJ);!1JGZ56pXD z-UIU@|I;g+s?)2Ts#g~{kK_G+?{%zO@xp2Wt3LRoz2r{J zHzfxC#PmtLuQwQ$gqW@GY{1r=#vM_)a{-J)ESw_SY+?q)BPx!3I=&Xq9R}lPk;#I$ z*MjY_VEY8-G!U=D%*1AiH7ab2#F`YgRbtHw+a@t2Ih%?lR!NNG$R^fHjN`~AHb{)) z$R;*QjN`~AHVKS_o64uQ3ygyUwnJbX9I#q}ad5zP3XHv+jTP1i%pJpGG_Z9Ni>I;9 z6f4vT4C?_igzXm?mj|$27HqWzqoeJnELB?K#T5d>n>Z{U=ZiJKa6ua_L#cY;%w|4^ zx*@TGJDXXE=M%kLrS+UxwX-6G{m$#(eZ8cYp1`dyZfvR4)7UDkZ9>jrXTcbzZ`Q8!em17;y!?oH%&r3EyuN*s9 zrUzn{!r?MK!p=YsYqX{CumYMm1if;si^9uEz3Espg;$21CB3}Vi>Dh&uM9gc^}y9S z1OB=usi(1S=;2Bfx`j)XB^FR_yN>k*fze*IN8#sGOz5E*uBye_XBqY;VA&uxx7dO` z49uI9;bo(>s8Ri?z^ODD(`rSLnrg z;VK*5Brp^iiYpskEp0V+lh6Yp9kwuKquT|BCAk7&>t)`+F_Z$fS?V!4W;VJ-V07e~ z^mYggYrUuv+2}fv7K7~+dWs_uK9v~Ol8dn23JlwL{W8Zv?3!A%nKJBtU^xsLs%|jH z&fIduTaJChMH|c-J?deSnR?1^USdw68sU{=v%qjuyNZKJ5xt2Ou*H&2isR*rD!hpU zwE|;bc@y;#<85%>#C~AJV^ylpSXMcD-N)c~Tr%c*m#$;|P3ys-DZ(xY43{?GK0MbO zL4J*%!JIT(3^3Y9?IJ*@?o%j z0#k1!T(3V6o?3~$D8d6dGQA$~&RH-|V04cNDn8aA{qz}ZKhJ+sY zp;?dKAsC-x-IK9FVQa8{p{LiUyW9}S z^b9sB^gv>kL?7%82t9-K3B6=yjJ61Ry#iD3OI`0I=4Qq(JWgXJu~n2Wc`99Wz4Iat zgN=#s3`Xx|On3$xve*ujo_d9(#sE0>eu}pYTj%(CYLw0->7A3&Q=@by`Jk{h*h=VO ztff~{90!fRbI>ct)p~J@ogEq9eVJU(DRbVp;wL#mg$kN_Lk`pHUK^3qZA(H?I`rhv3?3K zRnnukPWe8 zTB)b8<5G_t52x>tdKzmMdf2LsICAc8p=YpLg&y}WaOQ`F4}f`7czv-;*c$8@Z0WrQ z4os+aG#gE2u>TmFD~cry$~PlCO%<=(n^Wi#7;hv3{ch)VU(a9{M^~0?$pr=I(R*YQ zp25xuTZ5eydM?h&Cb3syK*VdX3l^-$g7sOjehb!X!3HhZc?;HU!8$G2ISY2X1v_iO zh6I*~;vy>eGzuQ>mu?fb1{)T(F_$~{!UzBG?@B(v9T!Y%e@TR=n^vJ+ zglDi35gxr$q;m^rgr31J3q3s37K(V6{%PrZyi+BtN7$mzW2{fuqFEto#39m$clgv) z3!fF?VOqi1SrMMWZWrM}iD>)^KPzkvc3#*TYyh@6D}@skW?jH>=v<249zgA!r(!G6 zZ+D5?r0nI#D2KD$cYh{CWTCJSGcW2w=V zCCtNnYGS;-BJ>QF6MD2RM|wG-XRy4~LnX>VkM^mUc;R@)XrGF~Xt9L!rbT!Ln}A-7 zE;Z%6sZnn`d{B*%+&1WyV@IKp^LuIA&QvnRkW(#b~u_FOnYFl$S_9FEZ)&jjO zPSPr$Vi3jMW$#5CbUz?tL==uwG8?gOYcRej5ZD~{HW-XA3Iw)A=;=KHN!oj1^l%>` zpMFV7te~(f0>eBN+nwBGQDD;zs5 zuYLwgZV(t~yxlRJ78noM(oP>Yxk>1eQ|PWn+LK~@HI4^t!e~#5!D!PYVL5?O7mEsz zd`Vz*wFYjzPR?4e8G&)U(4##rCJv4l80~Q}7{?1NFEF$iy1+NN9{B)SOQ{agX2q&n z%z?|WJTP~L*qG5bX>#Rn|KayuFUOuFJ#{qD)O$W7h#nD(%(`D2FQi=uZL17h@+xfA zwx=9Ur16Qsy|1Ak*BEweF-Ci$sEaLy=ZqKbMR?`dGK81L<&nOgGrpo0>pn3ovZ%CR zN#Dz_wqS1tmh$zel(I`K*kizopcWNzWS3d6w*d1%J1g|kOD)*rz+%L4ZG45d4iO9X zXb79juC!p+fE7S4=ZELymRqn#fO*qnMXkprJdCl&E6}W>kfXIkY`sq{a-dg+eG}uB z!O;EFB3SCO&@))ibv$EhTfJX1bsA$uIW~l`!eDxjWGXH643@FzxfZ>w&`aRP3>?5t z^$IW0Y&T}41xO4u6g9-)W1GV8el zqlp>WP6=Cs#e^Q_&#adedIlR6dU`C2XKRH|)gycSUSVtWW`qwCIlcueo)hI}u(!Ih z+<453UlDP*a|(NhC|`q(jSByz6v1plq{Y+NBH?FTca<*UR_Q$AnE(7cd*B-Q|Kay4 zl+pKh%sR7OZu18F8OZc7bA~H?uhJ;e0%ZF zE`AGG`8O~Alj@IGKTthTy{-D67X8+u4=#FO(e6dRz3`=lXBRG6_@Szst6r=8Mey)v zD{re@Tlp6Yeqq7e7I+KxFZf=?s}(O+coqLH9ybJPf(v836679d2ipeDb$7T-_&Csi zv1_pZ%$X)bTqd-=8))}6HioGr<00iiV&fVa=xiJAYOpZ9x@6#L`V~$~$H?GN|Del! zkCz9C9Lwl?*ft!{#2d8fm_FElJc1+hwBLLh&&uvtathq% zu|g)753mRyWz|cSpv9*ju^-=%xf6l^AxSB!R4x1DWTqsY%gomeK zPzMLnfO~?F-2O`JO2`D6j42I`l51J1_Ca-yCf4BX)wvSs2qan=^p+AG%M?Lf>?hj7 z9CuhGI>5Wy%<1f^^ohNhI`vLT>8*4+DzSWmc=$F1P&k7Gqh15VM&lPtp%&$HP^Sk3 z#kIuT#G!&vGM|*3#wz6YN@pgQ068`noS)P16pnULevF^!t0j`&Z~||u zbTV0w>Y%ozZx&PIU?Rq@%@8N_E#bgURWgB)9~hRQ3YNe|G?yBaZz@OKQi=P7T<~aR zlbB5TAqdbCkSb?Y7?;9<-VE>0f?6n^pw|h0paQf73Pn+>0g`l;*khGgRpLG&VVXKB zo<*^hihms0@>@(fnY#+HMHK_6Pofiu-rP+RxJyK7Hdituw@?ZYlq#hrcoWoOhM-g@ z)~AOIuna4chRV=g5Q-VnLM2%*nm4xBm2S&W@zl3!@=nnS*M&Oa!Ql?>x!Zc$27A%{ zHe0OrS*?f;*jP0k4U?qpwOaYCz>SR-qdit5!93j19A=T*9Wv@2?sRdRLvI^6u^SsK z@$3qj^mPq)pK%dWZ(9c$S%$uwLPqU97u>dy;r_ucu=)+1BmXspxsG>Q?Yairi0Hhr zsWHqhTx+!$y4*)ev-xd@)d0CU+ttsE%?&N#v44BW2&C;8$cMo?PIUpi#~}8=N7SHA zA)BF*p@A;G&;_*02g>y~hV?H=rCsxvdEs40aj=Fw}>#yE1Ihp?T+tn?0nzTw98tolns`V{^k^qZ{uOG5e-KIx-2Skk{Zq;G0ZLkpVf;qvmW z4(qGx(?u-UO*WH7ArnEhjcWp0!X3iGkO}Sy=<96j0jD=tB}>YxLN?vQq!=VfEfbKIY*aRT?(}{x(oTWNngtUZJoRlK!cHx1#$zYgnSrh!5P%UQ5a{Z&}A zqpc4Yj)gS;GOUSlK1d6$Qu-HR%|5TtJ>F!=)t`rT+v(x0@j$p5{aIMI12?JI2*LjZ zEOezuR)5BKL_c8>gCKqIwD>!$nZmnZe+GxGsdNEdy_ zD8EmuH0@QB>A)3S%H-?iCP=xW**+qlSe5cu7wCsuA}}rsyFp%=rqqAisN){$XtGQ{ z@a(Mgzhd+?`9Dp;X|BHCsbz^P5Jez# zqmY-+^ON7dR=n`0e!SiofDA&0AoRL}UbhovlVnZ5IS~5$A@Su z&S^*+q#e=$>4ebMFWR<3Ta#!TQ#XXRLeVxX+IB_Tr)aAcZLOm1TC}Z+wolQvrD4bj zH{>43y$}~N3W-9-ATdZB;z7nC6Oc(r0&*W@3X+7RAZbVjLd*8F zte%6=(l@;dqE|okdWBxa&?_2x{c;s@KjZ<(gOG9vkPkpU2>B4?!;qhZ{1oJ;As>N!6!J01$0479{0!uikWWEA4fzb@vyjh0 zs;;4KLKZ=)A&Vgq$P&m>$TG-s$O_0xNDX8aWHn?BWG!SJWIbd9WFuq~WHV$7WGiGF zWIJRBq!zLhvJ0{svInvkvJX-R*$=6Q9Dp2z9D*E%9Dy`I8X--PW=IR9mA$^d3$N=Pa$RK10 zG7K4k+yS`=xdgckxf601+yvPL*$vqP*$deRse|l?)I$zH z4nht=4nvMW8X%33CP*`+1#%S93Yq`>ujPTj(wv$`{KkzgAGOTVK5k}dlek9bkX)i| z;91%)Ex<9P*pxrxD_!4uOs=0QJ>k@UO3veW5*H{)72MC=`WZuZCQPvz~^+6Ta4Wh9ad_YBW1A_*A+Y1+tis2`; zw{b5?$f!PWb+FQZ9~J#X0{fs!McxvA%z0Wl@=EYAhcAx0QpDN1dW-WP(9ZX@_RG42 z)g?IpNp)d22g1JOVz($hAr%X#eK%5kTq;tdW5qzuRn(7$uN~hn{i(FxO#Yd5ajUqw zzmwkHSQH;o@#<$4^YUR=IK*p8k=g_&EpVr_iu9py9rv$cZgFnn-dH?^7L}{vm9flh zpo|n$?_9_G|7#eOofUZhKj&O^o?Y-;JFf4@?`YexV#l|(e`tGd`>E}b?LW88+qQb! z=eNFT>&Vu9TmN;-?``?ymPfZ-##{e&TmE+Q7dF3l^X;1>n?Jef@}}=^{MyFc#?u>@ zZv4XypW5*BhI=*~+VF$*-&+6K_0O!ISl_;W#rn^!d&fF&-RX7P*FClN2W$Ue?U&Ym zcx-XS+_3m>sy|kp zuWqY;ebH|&dI`_kO^g0~;g2m$E4`GRK`{I4~P{Rd9% zoqB}`B~n#`d}gqe!k1TIDJ2R%;27Sg7bY{ADQY5oHE3NuecfLd=+$_gC6(2$FlkWU ze?*TfBIK`|kZB+;1z69o`P=k}E!4ke)HxyCM(I^KE%MYNF8qmQ4cZb=OIMg4)y+`^ z@Y^PUIJT_&?@UD?@vzaCjZqA5x7mmytWfXE>B`@FzETOXtEG}!wM&6ti;8#X{@#V# z!g2hji6f3pgRx13#V@QYY(9M;?8jd>=JZPX4UP3{em~jlMP8&4X{C&auYS_+(ko-a zr=Q`t^RY=UUZhiKH>w^;mbrtxb{xmaDf|*p$m~C+SGh#cpX8up*v^1g+)0=30D_h2 z!nyXDwKQS&Gi>I~Vy~&OE!8cvmL}9cq14kT+OYlwy>=}0KNiR^Z9>gVW6L&QV#x9M zg{HuI^&d-69}NbTNb^32A0Cvs2uY;sBY~hw`8^&^|4%8+xjg2#t|&KJs4LkW(=VAs z3_oeNqbgT2YtirGgxUMqOy$W<#4$7VW@E*I-`v~v+P|=QU&!W0wTfci-xTh%-Wv)b zkj|UKl}+8$q|>RdKrZF0zI6R@n_jyWsePA>3(K6KUM;o3KqcoY(jJZ)mooW!`66y* z;!Ren3-EtIx5gpd84dwAF!_3AJBz4yGuhH1P}|c>z_oHi(XIL_G?BTt%aGA+M(G%t zpRxq@V^Mb-n`#Q%zASC$64+H+vL(-2T=}B32zSzD*|50s1sMQ$YsG9SQv6XC!U;X` z6&ZeBhA@upHNvW*)Nh*W2!-L>q+#Amj!Q$z?@xuR4%l0Lt#L|7)|kLucL@)I*8Ufb{ux z_1u2*zDU%ctOyjNY0RHtozk03gfgaO@gNF70O_pxfJJv*^?&d_{C=<;$RE^agTq%jvT+K^YVTpS}kobUQz~oH0WnR`E zfX``?>4It;D{dYtIrrmS7BnDIjpqI?mAA|waghmo4WT5`R3-BMbfqQyTyoJ@M=wB` z;W5_~d~E7S*yax3W&#_YsR2_x;TCI|&y28o$rYS1G4C1<&%4gDh1%ulW{dFS4}ES^ z%Ju3$`$xj_vNJNwLUanNj6Y(am%{VWu0Wu$F3=TB=?dW1HX6=oN&2K+r8wS0YW*;BS9dAGKhisK9-69VDXlb1iRh>pk4B4$RIy8IqF5{V83fIEY=KEYRR;ZQ9 zDg9ReL)>I}?80FT1f@F+?c7oZ$w5_4<+WRI0{H}9qqSUL$z!>>)^sm_<0RwHTXTif z;mK3G^fJEqaS#89hgRAy4iyUXR%~s!1z|QjDok^LLYVDlv$!`7lbzvEF|R} z-XwgH4i+<%UlJCVAi_%x2gf09+DX@O7V*d*5ou9y_ zq`VJ+mtoHVIj`Vc7yaDxM_wc#?k>Res;X&GB-Duex|Fc#jW6|L1 zp3t-yRP7IQ)do)@_9@P~nQXpJEa>VZ7V6g+{aU}jPJxF`sY9mGLKHVhE6j4%>^<^O zg$U;!`GOU_F;enDI_HJ8J1R)>b{*D(^;bI2B1VKPjus~mqI%cP^1u8fs~2JEKbQ1M zDVL@S{QWrGk^?j9v>&?v{f7nLsA6fdg!>aZ+{vcw9 zs+>{!%AwNobI1*S;c(td2iyYTl)m0Lbt+Z+!>?~&kfoWUK8yykeX{2|#%1}AN@vnb zOiY>+b<__9-uNlCx8u-SB92Dr_f|JK8~iR!X}w(O(BhNn&ny}*RXVdm!*by8%`)Yt z9#Y~D$_)Y-r%@4~!C|BvI9}8VEYYF^8CAMZ{jiKGwI{v1H~qfyl}2e8O* zhjpXn+N=~GLsLnBUxJP~axL%^c~JIbO8ZgtI@DsoibQh`U-zV*Jd5t&A?iTP+1P>Z zOIp!4XP)c$+f*3&+idjn%Osw{7rj`|;z)%Y)Xx z;>V+{M+Xix4`KFD7Us+i!~8b|*<=ZF`i+8YZEgJ_scgJGoXX-2gKR%Lh`haVkVnI= zEZi_a?X1?8a4PaY#OSESCig}*E%XV;bLEX}nwy)NEjHO3+Mu>wZftF8*5~U)eagI{ zO$!DlV_pcjUgWU~1eWfkOLGe8P%YXkmxbD=|y!c+orZT_y-oJkxgF*>& za2oy=q@^6&FuK%1bXw0#gXbx|58Mh%_owOWbxS^Y5Qs)&h~s|?*MXRvHk-6(s<^)U9}X&fRjX#tTB zRktUFEtXywd)9(IAZ$I{qfE9h3O$28B=kV{16I63e&uyPUaD7wT^bEzTZA6nQ%8C= z0;4)bw^P&ocqSiNWSFpv*TdM_(|#Ppd{26GkDjrmwI;%G%#J}%UkS|hfLL+fK8pIH^}q`Zrg1N~;<}F!J0xKzg&yC;2#oF!Hns*k z0W4FB7mi7LQ*`wl z?OoejujAxkEt7epM@Tcr%ox@!Vowl;4>4c! zANZ%eRvmhg7#$qKCoi!Fl-?v*(Mz^hMr+~TJTV`ZurH0SAzR0r@v$L=74pecN$=U$ zR*_l`1d}D~USpf}v8AtKB^q}J<-Kf4Z#CuDapt@!AN%}i#G58YDIfb~!tmBYV!z6m z_4$ys+dms*k^QpQ)wUj8I7U3mEs+s zGUtzv-D|;8gf)Pppy2EM2Kl8ii2W8}_z;gJ|ABuVMH|GYQDS>>Uo}2W5<8%@Q3N>2qe|L?p9<~=a)fq4(idtlxJ^B$P@z`O_MJuvTq zc@NBcVBQ1&b9&%4od18d+NnCd6zBgJIg6cFs-LKNrP^^$V*BhTmOi%l6Zm`nGw*?U z56pXD-UIUy&dA5iz;?W8g} zBVvyy^2GiX!o9SC{gl#9a!xH1YwWKqIz)}#*3*5q&mHQ%v&)aEub;Ln;{U^4gM%Xj z!xX$eQ&gb8_3;VC?m(y0$+W-yJl%Q2M;6ra1#(NkYXLiEg@|zU={TG>;qe1jHpGA(S1dBMz zj@F6D_z*J!R;SI00GEEGJZQ=g^3m|%NSBFPIn;dfW0FqN$1O!P>~kXEiO^phraJR9 zFxcHc*gbsN?QOe6`Z_alRL@*yE~1N%eTrXAJ;R?mW~5Ge^<01d1qxSv(b}7rF-fuvHw_Hgt(JvI`eiDhurK9T!S9t#72Khk^(kiW+9ZiwNfr zQL^`NoHvy%%u)D1O4X-R@?^tdaC6kz>uMW_&}r;^=~q7J6Dd(Ch@4PGd~0QaUbAYp zpNP6{g><+bmndWi(dTC9sD-$dMf^hd(M0&4@}{9p`R*Gs(B;J~L4nX9f3*z_b)i=v z6}rnOLS#g~fr!h`eL53ol_@Ylqzhbdn&95Q8-jxFLcvqMB$EyUbYT(s2RRlI(5Y4W zs*|eDVn+D(Ak1hay}(%PU1Elg3B*o*rRd zL?sjf3=Z}WMsR?PG;|XpQVuR^ia}EP`}Y`-HWe3|dpbj3bY^hs2;6o!Sr(zcaBowf z0r|lx2lC|cq_p#;Q>%=jvu9vk1F* zCM`2Yi6CaNh)In(-$OBSV^z&jox*|p^2H=-ow<1ELPefiqb_1*nF)_GI9pG_@fmw0 z{|2MTa5ws+fiAjqt)st>v#j_En2tkq{^jTJIqe)e#X=b%ZUH1Rg*uZ+ZMEh%n+$Ci)u8Pm`DcX~K+%UwTAR zqSery`^Tcm$TIB$ngS6PT@0qW6ad~dYCFadVw&T)nDN6XsJVpc8T5$G!v}>mrX1x` zFsA#Wl;d7_VzA)crge5xW1=IbUsOs;p4N^hx-Q0;0xkj%k*-Rl?~qb+V3w9(nd$n2 zIicir;22e571PNKF5O1Sm{HzvlKIK<{UN7hCTO&?7>>%3x`u*m5A;K+O`-=*T|s5X z|0jr~kbczlgvYN^@;ixBCDY&x#<6|BHJI6_E<(RdwR=pqK#@n3 zM3HG6A;5UY5g39{`oi@tI~T$DQ%a0UNw_Ol$6d)z#Y?`RZ#qw==1?xY6pugD`UJ6w zA4y-=#hz}SK%**Ymy?TlrbA)!F>oevpl`Y;sPrO4m>ltG0_kU}d7|75sj_a$h#?P_ zGg4IPHZ>2aG{r(Ri@t*2C6&6@QW{hp5{W|lA+Ab7WDicM)(PQhYc#@iJ4|XJX0i-d`@_Zb8YGwUA0Id z>hD}g+Jk<*>AC|4%Q;?D8(r!`C_ro9R>ct(cxD8GO zSKgVRRPcWthAu3c)cc|6DG8Mu`>o_f9AMLJCe%<%m6Aq8lm6+v?nCKOiel6?tkh?# z+GDDBJ|Byw$2nzJ++uD*&zVzKMC;I{LUS86c~?QIeu7fWwORI&+N<;kFQ->&YNB}z zNhw?$#fj63KCcR;#2<`G3k^C6$YvA|hgr5o1LPW8;F++f13X_VdD3s0VCmGY4%su# zIb!g}uO2c}o3K7{3XD$~>doyMn|`{DU}K7(%~~;l%Hlm`Z|w;SP-c zGCc+U)D@wiyK|gw*}YqNhYUDT+6rx_CWXH{|tfM57K(zWtPR^$zs+ z_i$3cw{M09-L2BoB(kAsVn~N7yPDXTlIJnTA82)l?9F;HH~8eo{i^6jwWe7NA%1;| z!T4QK%@RT}aNX5qXP$A3dR0%khj>be_(7#t@z!vzRC~}BkCGJ2``O1c#!!DxR|Kn2 zh)FFlVOCNaZcF7$(<1ESw_ zmH#P1(>kbES5Lnb0{7p#i=hHF^EPPZGng<^+Eg+lyzEuR#6zjjt&ZcQnJ(N+u+E%# zk_TvlrQ+AYaw<@pLXR>c=m0YpB4Br@+_Pgq+nbw%TgNkzG+!1i5>Q%5;E2fmL}y3} zx=eKaF@-XnH}h(!px4xcg`TeSY)@4Bp`o_3UAK>PVd+n)mk;vPX@MhEg(G1(_X&MnL4zNh+Q9)11+?l9)+CtUw2fff5kf}C)>Nww= zRJ2+Ynj&Y4jHe2;p27Ww=@n5Y1!=Nb^3<~ze{kZ?kiDR)Wch;vjiG+)*KRQ_6w?7c z-Nj!?EVKC~(AM44-p`AosxBKBkqI7@jG3mih6nK|XIhRfltN@Yfk5?Io30LOgea|6 zil!=8|4Qkgg;mE{(LfjSRJ}_4|E}XYM=RdH<9nMg?bx;BpSS<~_L=R6xBu(59|!yY z?rmS+`r_6tTYqQEBU^TD>0AFK82|ra(=TqC-gI(P)uvBxytr}G#xHGnX2awjh4o7Wv%_qnz1+P_}&$u+}kHm~{W>h$VWt3SW$*s3osezE4>nwpwdSGp@# zt^E3m?25x+^}n_}vivK{9$wbI>~Q3s#fujIZ1r??bM-eCy=&3PqMAkjW#M}k_AdOF zs-Lc!tU6Y;sOrm=@2V_To&taW;|oqL_|uB_R>UigR>)T+|3ChHBut|I=M}ViQ5q%i zH}|Pbsd!76An{LFJ>0v%PM4fwV>}Z!{o{bC-``173K-Y58-Do9VG79CI26-$z*axl zD3)Q2pu`udp6_buKa#jp&94t0K76=alN<@sy+2d|t7)n&T#+_EpwX~L|9}H3^=`JH z-XMvo!a@CvTT30l#jpo{Ux#l`DUHsSJc}^tfyZ37Bl7=$bFg}nN32PbGz$F@xox+0 zo1y8z(${~MW);wB4ww8_SSLIRpy;@s-5fUg0-N}~8dXqw?FP^3j-D+W!{mv-T4u?U zb!Eg4wovOmWL!PyYfrP>Yt(7)h%1@3`wcR(wMkMQ+pWeCEd;!r6k=E{k13il6$SxY}DLzH94za_le!laQOm*LTHBa$I& z8jTJXp74)JbIlWO{LD3>D;(uVr43CNIO!r@T|kNioMv5}VUqZd$UyXrpTeokc^_~2)pRRGJJZ( zxxPCweKsD_KX`q^+ib@wee19=qU@voUdN9&69ho3A zOx5BK$t?|c>57n>NQU{YpO?Y%<1GSJg-49A<)QLx#ag_!(?t)B17>WddHm1kvK zsB`3ze@j$1j^x*zPhC5P8PjnHahKiU*kW-M;kTys=qyy3k>4KbroQ0f&bVJTV zE~2A7cvToLdGC5NF3rp z#vv1sNk{^6A7l!Wgrp#8NEUJhl7r+S1xOJx4Vi(=LgpY>A@@TbfIJAH+oKjj7D1{Z ziy;xn639}>G6*ho8(ArZ(D$Wq8M$a2UE$Vx~JWYzz} z-h05;bzFDCmn2vod+#J5kRkzy1rK1AD3KrtkRZ_nfK3#2@$d@p#Mk)V13^%dMHN@M z#IjuDLR&6zoMhuTu^oFIGl{d=IPHtGn@wW-vz$$_on|{_Q=I7gpEEP}o_p_*lCtal zzHjrMeupCe_sp3yXZp;U8PIaj3ef+m-@VaF{zh5x*kRySEk}Q});=Qx>$cQu2E*-x zSz>G84f#V+X>X9yXozqtO{T<+$@=Z7*T}Fm&=wodw-Q6G5^LMkqF26~n*as$7VS&( zbTrzh!qJKeoRMy8D|NJrI~ps3icYe5Z?u8O-3o%^^?H<=*tE<4(?C*rEWkm zK)rmc9xxG|AWax)wDNBgC5lI=kE4I;c^bcufo1l==)`HVSLl_nvT@#&JV6y1= z+Nhb%n?T`K#uO1T@fBk*wG%A$)T^)p@-{-lx(`PS>yT2z+YJjSZ?<|H@?%nz9J5`F zrtE$rGE!nK^2qt5g*P23hEQo8i}n@$MmUu&UjKV3jrr+}Tg7lPs(zo0;pGdzJ6a4+ z8A+D1D@<`Q8uFwG=@(!V;5Mb0+H09l)V^8N>M_DC#nr@u9Ir-AbIgQ{lvxoj(&Taj zrCk_EJ<+X%wY9web1%oK_9-p%3cdZ^!2g%xWFdVbTJ8@BvEg!RmC3~jy}FD8dyn+b zP^mQ>T(n7cI@KFhV82ix+*00F0n1A~SjnV<%KkXfvKEjw5Uo;sL};(P=|Hy9CR;;` zGVMZKw1fqec`$00HW4~p$^u~{#S9jZnpuj{T`XH|Qd)|V-o0$#|C>yt_m5;zIvibR zXc1zyhXdsXIiAwEDO)Ldrn+WX{1Rdz#P!R4E z;-Up1pp2y;Y!#uy1tAdjr3%9R(NX>;mQ6cOmSVtrR1Ns^Rz<+_5Z^{mprrtK0xbbI zcmcK7naq7JV0Uymdc7YoRA#(T;qr1ITHDroQlh2BlXEc|ZjBetD<{l;t5Oo|gJm_f zD7D%X9xXMVQWH^=Ece2N%ZnH4R%PYZ`dOZeoW=2&O+{~ole;-Aj=9m9(#$}Jz;dQo zY*wC7E##P>A4m+Wa%wM<;b;RiBOsnPs#%%fle{EX2}c>DEKoff#thxj&G5MWVyHD)FbH&jNpg1L^HM&s)il%6BJMt%dPIJ0ER-eow`(T;y(9q61Zu z=8!GHN70=I?Ehn}^+o)CQ2#3Djn0O;FV}yl{*n57>c6-7J)2K&-n98IHvQP9i<_2j z`qhn>H#Tql=M8_h;TJc2d(NTRgLB@pA-~~Q=bYT|#=3nQo}bgW;V;+y*82CYPp#j% z{zBb`x<9USoa_3k%wJl2X5G=E1eQ*KSz*?KPiY{hBpr z*DPD}_0{KBkFQ#@`j1vUziPqCb*sL%a%$z+@}FIC&x$WCzrOs*IY*YK=3HF1Z22E8 z`>kakUUuKooy)$p^rK75OJ^+o?IoXF@|GoUSp3kElS|eu`PSkuEuL6>a`E$v?pQo? z@mCi8?!v;N?nTQNy>G$$7e2V~I}3hq!4vaS3wAD8x8OJCpO4)&|IcI3$Ii@~8T-P# z*Uo!*ZqvN)&HXU$KR7;j``o#;dk{>9)&BqQ#R5n4Vkd}-3HOiWf&#i@eV0-n=P(1-w^@d5-R#ApZe zF&uf0#7k~@vaf?8=kycCLT<&#g^Nte%_MNFi=Kv0m*_P_mZ=+0h$4U!q?K&40-o?gjSzzSdEpDF zoG#&wY*At!bMRUD25dLd&v@iqb)4pz&S3B9;imYZLv78L?@cqEVVqW{@A2j>dNd)z zZ=dNr&^0tL*l~Vp191NjZ_k7^p5>0~RZ?0B}?)HDf;ju+CY z=BB1(^Um$9+nW!?Tk-JSE0@fl~J*&r&B4x^H2SVu3?8}qFO^))*Zs5_X zS%?;5mG1+KElq11kc(a_=xT-&F;ZILgdU^|Nt4Ey+GUh<)R`;|l#p|;u_IAysXYs5 zLOWavs<2CuZ8iH6tf$9%X8Is{dq($L~rTm4I|wn{slike@qGbxvH4yT-igiju$ zVMFyr75qbP=P?t-DFi9Wv$#zV=U<&O^ZFDTvd2VYwqHjeYWa5@XJlZ&9q#Ms?QLr6 z?doqnbhPLA(cXd1Q*@0*^9(=-b=?uczU?@@JtHH%T^?r>&1s4m+AP*)Y;HcNC!Qi8 zrhihtB@{JRq|7Nn_M8c3>Lm>Dwy42-JtMNY4@VRFY#^b+#7L(fn$kDp+#X#Z zMVxO%Zh3K74Aa~cO(}djy~D7`Q03=l_8LW19%74-cL4@81#cY1tIZAgvsgCX#v+h< zciQf4Y#yndjhQVC+tAOnLl=zL_<)4k_l60~26(;hU1ra$GyJXKXKkRkd4W@yV>{o~ zf;&F?N4nj?p{~xJ;hus1a0iQc)mzKl!G=3%eBBc4ppEycNhU73Im@SS&x4DJ) z>O5!8^%P2a8k7NzgR-E9LFN}8j6(X+kaW9;t59cGC_vD|mENDGksrlAI*JSQ@QdrU zsM+w6qP#$?c(z)VKb@waH*VNW2!J;pZa0nr2Zk=-U^BPrWe1}*uGRShN2rh9@L42U zO{L1mt?IqnrDKIIE(r1QNC-Z+;RR{&j=-C@zeRL7RemJfKUw$;l{r;f4{LUu?Y`d%LdRu{b-*A2gjv_f& z=!a;V9EY+J-M02@R)(N<-`G>}I`A)oj`*1hjL@i;_Nd}*2Q2K3w_-{zSpq`gH-3vY1A{4x%0BJ7w9`w|Xq#?em%KO=)v z)O4mA?GU;oY;jWqY8?GUpkp%7%Xjn>67G@`{^uS2!c7mVeW>YK=)|t?M`LjabT8;W z&|y#qs1tMy)CH2iZhb1m=v{%*tT!Je4kSE(92gl;XF?9< zWHIyG8QPG76m%vW6P;A$yNbM2ZPQB)ruzdkx)QCHr(HN3!PRj49t0fqeh<=b1~AZ( zI%VY6^BhZLnUWPlyk0(8)(YD~T|A^+Vrj|AGF>^QM>eFrI(1(qGbKhB@~WOOQ%h(w z8&a~4qXq>W%(GEGR8YWq!f3D79(B{8#|ZkoOqEAudRI9?55;4Q%&P_%EyKm7MTOQXmDT|8u#PFHNTQCk*H3I>I!{?RG((7|?%y1TiR)W@n?f`8E?FL-}&AmCpsRwNb z?E;+yodIP)RZ#dxE1K6{m>GZxo466=-QuW!n^jIIyBq}`E8Xai`8;xDl@cr{v9}xD zg99@OGgu1fp#QN=M{9<6mw8Lmbvp-7yEx?E-E-VM;kr~vx8OL2bo@66uk1!Tm3a+dH@{a!#%z1y`ZWDw2@%1C~RJG`!k|!bH9RS_GHgm%WN4r2ey! zN~gV9%FA0tG7C~d)IXVo7O;#Y7w$rbM8gYGr}VOb5cQ8r6yM9D3bIHmi>9-;G+Ec@ zclD9cV^LB6V6?I>-r*`UDF!@kW>r?G^Y=yut`&+d03L`&`gbP4tyg8sNwY31BKlhs z?q#p2nsr$rPG1ffSJyU88c?k=`lPoSq7W~UIA_S_5~TNI01&k1>x#dIEH z+!UR9GkgY{E9BA55X84#U=C*4*=a16iLeHnMmn5JNdzHVsUHn7@vb{#IXvQui#{@R zqA!fmu+v~l=kz$80t{m`Y&BTA0_~H9ES(YzV>FaC7|X*m<+&RRJ*=2SPL^Tp8x0<& zXVG?{B1ct}i$uKURk~CorRxkL{<1S`7xSmJo2dglavS4WoHYPB{ zfs46PE}hgA@iNvR;&mpHxMwEi(n(H_Ph*=UAD&9hPo~_B0!t=bdRo`LDB`7;l?i)L zU<5g)w|yI5f9g3H({ zfl-CHiVt*()yOm09g;8Sma>;BZbs+=@r;cN4AF7}LnmU5JcDf#@}OU-Sgp8pYS!md zSYwcnlHwLc9BxXr7O!=`;gwy3y;@+fDcAT%QMXJSRo%d>7I7GiPV9#H)_~7RPhv>m z*Q0T&Z%F2(!78QVJPhK{4vcvibaufP=Xbt2ENZ^HFB8NlY5Oh!YY+0ZT?%5v*Y+T= z13sTa0<$5E7|#I1)7^N=8?R&+ilsd2<-Hi8dl+u;qdMIvFejbN;{1gBBy45)T#da} zV0pUBDU)(zGAy1W#*qQ{alz*}{M@*ED8T2G=xyVt0(=f0=$>$=1a`GJmdhe-*9Dd< zA|3D}f0e+}^5!0@zn86!>iio_;Ln4DGI#{}l&@Blcl*9k1| z=5mRA#eG^}cwU%uKLIRTfoM|>oI-IJwl9|o6@z7vUvyG9jKywZFQi=Z_#7}k2);13 zfcUD}#1!Jd?V`mD9%X+Q>Vm;gIf?~f?*_)dq+d=qK|lP`MS-2UxxvXI?d9<*?uJy& z?i`f+Fh=(e8LXuF9=RUHt_iHH`KAS?oAKmqArCjHU4?f=a+w8NY{6m{Y@P+1Yr*DQ zumu)up#@uH!IoICr50>CFjS}PBx!2Is6tcSomeJTQfpK95Un?;BWpaLb`Sj>=DlSQhb=)MZl$F?5 zm=AE?4?A>Zg;OkDO}ideEq~snckag%c@J}NQXlOp{mOpW-x=k1atr5UuLB>NAoO_}L!URrVG%sz^PNIDD5p{hH*5GR>4(q`rIS_E zhO1@VnnqvC??pe2kmW>q+Ot6?*$UU`ORR_O2b&7M=h)5&jR)uXPx{N~D*9_G(H8fx z&8q#wR3PDD*BaQpJT0-cHyLwq&8f$?gu;|7yXWQ}SAKLSCQJIWDma3TuRQ29e6>tkc?>s8sU_!t&=b=YYKz0+5G7cR!UbZ?^o$4ColQ-ThHwaoCO88g6m8WYqVf- z3wFeU4Op;;ELh%xJ<6DqlluLdDjNi^8!m~dAXDy_De=y*2kXGd}V=sXjJJUv7^Q=g72Eb5V0@s za~!su%#?lX3dd1MOYBj`XpPF}D=>xzUtqt?^3c@??5!_o{i=T0pVfSEtd(%%h(G4v zRQV>ccO7A@Rbny47r@?0eCXV(Lf+qFEPzYDiv}xXu~UcsGAS@x;V1!13yk{eN$OYW zm+|%cFr^nmAF_h_=-_rDHTEf^yEWLr3mcq7HIc#$%EK;_4cgRX#PB_adY*I@M&ke) z7d&}mzJoD0Pg*qJ)wcqJn@a$D78w2T`h*w9CrCdAee5S1kTx2bS3N9Oe?z4WIqZdf zn8I>5KH*_$qzx|n=-L%l7|-S&28PEBFqScV>1&sORd`jyV6Y%CrniCGvTz z7KSWXzXcm448vL(_N)avXTdgEum>#I1q=3|1v_uS974}T z4k!%ovhe(9CHCyX*eZc#H6PuVYxoSdLSWb*VR=g}*fL;c9WU)IO<|*alLgx-FeS~c zuC-trEZA}jw#I_3vtX-%xr53swEssN#0LdN`+9`kB{15XBW$<8Xm5_Nb_=#wVB;0V z7Z(`q*HPG=0;3ga!kPuf-Y>wm35*;=h;Kiz37rnAqQzV;-3TlvFxnBnPhh;^3G8lx z@kS=FCV}y0B(NOLGza zlS&rYVPIE0JF8uj24I;XRjw!`?FRQ-ut9;T*?A#5K-jPfi-wNFj##iW7VNAAJ5ShY zC9jwpV|kMn>`@DL&4N85Fxt6Y#l7{uY&zgt=*Fo_7}>8}bW3*#jO<6)7J*SZ2-_?$bQPsy$t@ic80j}raZB3-M*0!9LtvyI zVRs3PR3U7qz(^Isb_~%gS!}@;39OpUA=f7=%YjvN+RXTLlfclnmJoUVJ_-Fz{U= zY=^+A6&xW0)-EuThxa4%djeQ$im=uI=H&6%e7;3u%5^@!7g%Oo*+At+Av@u81>&%DcbUP;NE^v}?8QHQ(O@(WAdK!cD_2y!ToEv(rX#in%jkmy zbmqZe;~Jy$4F=0CB)Mt2c}F}lAXjL}^MVT|rB2xD~TK^UXE56ZYIfzqqp(5rMCMi{$j!IBn?Zqq1V zQSxwvf|py4-Hc*KELevHyT^jvXTc6zu%iM)xlNW(A$D4@T^4MIz{ZLy>~?`sxgWzy zNUy-?YzSeU0;6*qgq;9Z`_(K^vp~%PH4D@%P_sbI0yPWNEb#Bb0@tzsf1}>1dtpAG z|Np)-W5%a&CIYt%VV9wR8*Av-+J5bN9nR!PEZ+V|1atO$G7{F=`yZm%zMqU@`#%xI z4y2-S983d)8#A^jjDAicMSjdUNR;+5=W*?e>?Ddh9gcHjRGrz7Sj!7h>>&&GMhmvC zfzM_+&X^y^2TU9SYc^p8cF}@8W5L#%IFf!GA2V?X>}@8jz#1%JCoI@i3-$pcFXhMk zQ4_Dgp0)7RvpifBamf$6i_ci#jAF^hDx(clz%bYMvF0N*_S&2$3ElKJFNvQANqXmhrlPWRvZU*7lkk! zk8>A?uspD(AuNN7`8}-X7Ty+PCd?>2l?I$K7qxF?>~aCEyVXe z@CmGq_`U$X_7LCu!6&eG;`;^gB@=n<7{PwoR{m=Rd_ETEzg7cS8)K6Jtevqdz|s>{ z9J4U_;g&xTz;LJ@HUok0w@<5%5XK`c#JYY@XdUsX2_EUtBFjk7AP zuE5apaL^?;B_FHTdO`5D##z1A2Ll+Z*LpF4v3ji!2~0JFZhYxYKMoyle3`)F@kyn! z2pfmal#E0Gn__HCU=#=0`Nskn1OnR|#MlUX0+=$w#{yWKjnEdv*a+>w+PwT#@y@;} zu{MtPV1TcU<2?|-RJ?V;upIBc0ACx&yB}D)7jHYuyDxw#d2=97@UgtR1AOf)@17vW znRzIPac15NY>yZ39*(y&fT?)r-VE?@yoUpPdpO=BL5$<=2x1)XQDA$$c)1k0^KJ$) zDhROvwwDXhu|U|pT!^}Y7#E^$VEeo{_Ho)y1u;&?@gT=zZ$Ili7{FA1%nyd;bo2-K_H#N0fE@_My9i-@>;T7m zI>2{;;~fcLD&B>`upIADfbRguI}Gfg7w>!39ZtJ`th8tbn);U3}O4wY9sp=d5pu~_6@Wo?6jN*td3}O^Ve0~t4IN}R{ zxwz}a%gcN&u`P_@+RGJTELAQo2S#@%cwym5@X;WK(X*Rs0Y>NYeLlxsb2EUo;u0Nq zI>^_Gs~_BJVGI}GJsQR^-hBiZo#~fxti2h);uOcLf_!m`!~ar_9d)^ffo zZMEX2#99+H*BB4*wT=-s5x`J9ao1B8SUeXj~<$$$? z&Sit3cl60EQw4d1YX&WALD% zHnxZfPHW1&>4dO&%Kb%wVGSuuL4FBXT!)S8u)iF}5cW#~!y6hLwr&({jt+}vt+kB5 zZw+E`!tNxjnt}(RnbYAqXkfKp%>p$G)GSc5K+OU*3)C!7vp~%PH4D@%@bB6JH?aTz z!X~Hgh}!?(jPw78N9Q{(tp?>%CHh|)r|OOgtWwTqFb~TgzTxwcFD+f}z1D)Qvta8j z*ai!>(SmKVV4E#iy#?#GV0#6I)ubxUI+f-Mte~+u0xN24p1@F!5^f<|IzH;#1=tv2 zy#lM?hCRZ11Xirzp#We*7VLh3Wf7S81})er3zo287cAJQ!0^sOk>WThuq3Tn0_(S6 zeFAIERd7fuTRLsQMl9HXz~VaWISV#y!OjS*O@}>e!5*++=LOcT!#-reE?Te$1(u+K zkMPTG_<3%yMYnQ3%1&Vt+8OoELf+&$Ww#T(I&9OIF1Jaiwmrp%~uL| zwEe^=(o1VfXd}ky5L_~qh&xeimjyd&!R{9rYDYPNi#YdKu)PAqaX02`7Z{GJGq&G? z?GqR^RxWP8ywiehwP0HW=Fk;@2)kKe_$OWf$R!&s*j*NEy9H~uVB0KMlLgx$Fkah) zF1rQBYmvZq3XInifwc;Z*93vJ2#l^%PPqBx0Sk68gpGmkZVPsg!0_+^Kj3jeVq{Ys zIyxsYoM0mCtiY0m^yFn6jXNbU^gMVOc(OPsFx(`<*nq%rOo_2x3wECcYZDlbr*POq z7VL-xJ8Z!^1%{(qEU(Xk-D|-*1cv9;IBdVb=-yVWik-h$N&jLRDM8Z6iy0z>gjS8|i3VGA}QF!Z&2vHAl+j34?q zFEBbEL`M}Lv|twnM&m-V&9M+hcIXOWl;-XbM(H~q#9Hy7%H)Y47ALF+7(efT_LSnK zJ7YhKJK1?18yH>WfNELVI*K-y*0u%KY{42WSd#_YY{BldU|THMc7eg9IC7aT?-UqR zW^9|laM+izy97qbr3YGe08_uTvH||F0e9Ahu@Qx(ueJJopHu#e>1%Nx`+0-4`PgR- z*6w4UG1wj-`?SIK`q4BeVH+M#qIa8-(d`nS_gb=K?C{O0z2qqYZ-$Zrt4!Zqv~GVDS?5e<;7{kCL z;fLMK@=)={d~7>oaCk`iSewC8K6a2XoQY2R*fGYiA(`>9K82Mk<39F)!6tlcoH00Y zKI~%!#;{3s$;YM)mh-XejKNtV?_+N=Si#4hV+>|3``AhCKa0DDy|QtD?i!|v+_aA! zGGS9$kMF#GpTH5=>n+$jE!ama*rzPmFIuqqqj*J>ej?u07Oc^N?J`)}Pe&iu59}NY ztTL*6wc7;t7FBl_kk~6u1Y@VZrHvM!tMbE{m|^pV#Bl`pre7Dq($m`zFLajjoF4@S zoh3H?P7W)v^z>fvL1)S599238uui2jdIewSk3b%D7FfD;KgS_4XZp1fEIoZE;)Tv4 ztmAwf7<87{^gB4L#M0Ayzz3ZrpL0^_9KcQ~ozZLgI)51QptHczr9qBEV$SqyB3OEQ zE8>ODA}rp#0S28VHvM)EE3x!+JNTfp5N|0*ZFzKgU$j=mj*Zvi8<4+ zj$rBOEr=I7i?ELKE5M+$#HOF)uo6p8w}B5jOFriTrE>tgpmavB@9X>_$b-%TOPBgN z4v9I_Pe-uybR*)0&LXViEJhsASz^;~$>+(VH1+jFgkHZG|rk{#n z>FGNl54uQs&U&Sb#HOF+umypor&|#g@g9)6+yGw?OP6{%Y=Ce2$q1I7Zh$=KBIP;T zlr9pRek+G92rNCl8(|UeL8;3Jz!${Qr8*89;G2FTf~BYHArHDpc}|G4emH~o)|H#bggJic+^#&2%;g$+NxVSGdDhK=igf8BHI z((9Vm{rTFDt$k>1>)P+F`N*2{Yxb{Mx8@V8KE3+<>VI8z&&q?VzPs}Il}#&Vt^DYU z!iw1Pzh3_7<>}?$U;69I9$j|dvR_*AsihAtb(W?VSC;Hu^6ka57A;=G zEgWCCX<^TTch7%#{_*)YW6#7k#{O*HyXW=H`_|m|%zbpO<2(R5J?FsOKbiB9IUkw5 zdd_!ee|h%W*-y@PXLrorRrj5`FV{U?_voxybzhnF{Hz-@&&=99>vw13y;4x^_rJ{o z9ZmzsMTh#Af~Fnki5Zw&x#e^smn$Z(6tk(88T=<+tIO}emrC{;_6Zsa=_&eKyQ6&f zg@C`u#HWg9YyI$kC<=1QX%5HvSq_3bAgg#jU?PocbaB^tm7-N~kEO@61vimOm3Oc% z=>m2=@vj3$eUuul{_C(`k(UP-4! z;}LVMEOFz7yV69loW9FZ+blxa$1xAZE<`$ddyvOA<=OS9nCd2>Z`m#Sr$Z!%k`9>Cp~o1GbKj5)qZa+(oY zw8c@|H)!J==MWnV7j%|zRf(5hc9uf=YSm-8Gb*K|3W`=FzR#_0)7dDZDpHvn&n5$0 z4XmiJ(j~k|+to4X_H`WZ>1@3kPbXRrJ9jddsC8ppg{V-VK9=r;*hWHK4~=$LP}3f*4pqrB1V|+fZoO*%}Ui zLh2Kcpmhw(2kp$0l&jSVG=8aF6Ze^-BRKA3 zj)^IJ?RT~W@&Lu}bMx4UmvI?)0avNyklu6|x4+IH(_TiSnZHbG>Y~|@%%@aymMD)W zOiKotRGuMiw~GNGSF6Pn7@mHpB_9pmcGvI;iu=RGeQy6#Y?!pEmL;sIae0+TN&k4;g8xbS_=RT5v?WVl>bu6DWy1OsF}VzN1L7c zI7^TnVQo2|p;4(=%t<|?suPEo9I5-3P%DVs|Ey61PwZ6SPPSV%V)t+f{M;No!+sT4 zQF8|hRbfoc-7*|4{_ju{$E?Lakw)B%e;D()>;61hpv z;86MBed92epCPL3==ZLHj`aK?gtw zL3e}bvfV?VdqH%`E?ufi7xmJ`ymXl^U2IF2`F4T2LB~OKv273NB#17_Tp?VTw`d%Lv`>L25Vr0jfFZCl#fTHBzGziDyz2@M>!m_ z|J~8bI&5OF)NmpGVl?D76Vk8dCctg#I`vhu>`|q*sI|Zdw^V8q3rcY{YWzQ`)5ed~ zY!U9|R&SfOXZ1)-G~%DOUbUW%pwSoUH6E7>?)6u%zCB%m7o>eCIH5hrw zIEtlewpg$f2E)WPmc*x1y-^+hbQYOY#TG8kx7FdkXled+AuC$k0@4Pep?^Yz_KKVi zWGis8>9r{HoDdf+WC3L!jGARygbo+9K-fr0gEggQmeMrNvh$PG^i^AFQXkNU6NAY_ zjIskmnZwaSS|`Mo(VZvYjVAkZj!%oV6oe;da=lVqiA%Q*8!l=V+fN8t(Si_2prs&m ziO^m_(1HF91!0E}7cB?@Wh@0@kq8|w2!XIKRS@pi<8RTde3MrJFbB021A?m!`14jp z;9ykXr#yj{0^kX>1pJ5>uv(t3hH~Ev*zMfGJ)=m%2|wViLWRrAfoN^p#&=rT&IzM31c%g1pR&K3dpR*%u z`j2xwS-ew`%T{PHsWO>QyI2w8aX~IyNH@s(&rH=8`d^RJ6c+ZZP1s8cDu-5?FrvY8 zQxwc-Rhg`m)F3HaxSdKn{PC}v8n&qa$-+-ViQ%Z~Y8Ff}7RMe=71*DlMZe-f4j`N*5=Srni z#=tcLn!(dWOs{2)$P~-@M0Lj%JT8O6+JK3>i}eeOtZ&yjm4ZbU3Lp*asQIMPsF>mnMZ?--0ZQC>d6%h2XoKja+|3aEwY(22wbzLGxeP{#1IRk^Oh(E+q3M zwt+u!PFAG0$?6WBj%0DN05^QKpemyMBQ2;jt>dNGQ&_T;Vk+gNkyE%=52%HVZ?cRe zh6_=B5>n3Cz0q{Pz=4tUXu9JvY^7~?H1Ib#a4ua?sSH@{Sd{(ib+q6cP?Bfu6%&*C zSDTkui^0CeGV;YMX=YZdW5QrcgfQ4K=g9S3!(t~7Du9Zh66i9h461;tph?gb&=lw@ zXd3hg=uyyPpvOViK~I351U&_M8uV(=Ye26By$KL{fZhapGl+bX>TWJ}W`pK{ z=7Q#dVxak;1)znXMWDr?C7`9CWuWDt6`+-%RiHJXwV?H&4WNynO`y%7dQb!C4p1X# z3ur4S{M#SRo3FB6F*Olpt?WSQZt%-qXEfL!sw^!{i(t3QjXG!M^$EOaN+~fvv+QD4 z5Yfo|L7j658y&l=)1`C;%ZPXBcE}7|!1AlO&Ku9^x|vLc>L6*#1A}`^la2ODH(4Ji z)?9H4)yf^i6UZR!8mN{567(?Q!o}9m00ptUpJ#Zy9?M%4luU0$wkI?P0{(y5; zL<_BL$`;N4C-dwN&5|MLI19R@S~QMTwq&XmJnFQt4TV(>aj=Og8jx17x#MC{6aC-W zu8va;VJWEe-OgQM33spr6C4EsqbFRjNYe@Rm*`62Jy9vk15(DVQb?bkXv+VEr$M?c zN36(M8dlw|r$LK;CNz$N3BSjJOlS4-B!&7ci`1_x^>nvolL}1cbu`~bLu)nA^(#C} zxng?5S1wj4UYRiR(Mjkk&^ixn9PsiDJj*-(VyIR(_b*k+mS04#v8!G6@Lsp z3jam51K96LW-GK*L3NF4<{f&o#%v!T9Xn?_y&XfxyPD#M4()5+qB}gnfXUqOU{_~P zM=!DLZEnyDs)FS%$mr@Gq3?T|EpfDvh>lKz(3BReen|`?od~6M=b4LNtdbq$GUpE-4h+dCt}nH z#L!kz4@zxxY{=~x>T?G>+xEmE15)gzIt$2yu^{?}r?k2UhU^YzphK^bMP~ zv9W9+73=Du4cu1!|G55to0ba+?QOBj1ba1b$Eg|GW27akG(0lm_Mh&H4UZgkkM|B7 z?davmk98eAecTt*G17CUE7pbQg??p9_}CL z?=lhwM%<%FC?}wIpcDFIuX+N8qCO?oh13xl zh8RXXm5D;?Dq$QI^kG}|oF48P(kbkKlL+aQEo6#_7nbZ{OQds|349@b$l|!zA}12L z474gupr_CxhKW(xYj}zbrb|Na2qGk9Dfhd3`g;(Lldf%tG;sQ0T+%?53>9|dM4x-| zbl)J#5@+hb$oWCeGvvuoI+sv37;zPhD2@&fv#z}ZoHmGKld<~BRP^NJAg!T?_ zLREx1GNUbJRt!7csdNS-P%<-R3k*t|qsGRZ_awIebT3L8o2QFxf!K4|!X@G_RwvRh z4m3PIFhV7^zvoz2{|KjQ;ONP&PJr4%Fpw!bq>Ve=ix5gXQASWGP%2c`bh~GVdPcff zSm!`r-#~wCkkZw0ELI{1oXRy-GN?+Bngif1nX+7RGg&wQU8BTx4h*Sc#pzbY8Q`+S zrIrgFCl9vQDp3xxF2p^Ibo3y0`g?azZ&xfEE2|QP#8H;1jG}s}i&x3LLhebN|5TE6 zLxPoZ(x>ZOS0_HDCseuTs0XN&u(8-sroB0{=jb`G=CQeqMKdzJS6yJ&k*;$vFoz#x zn{fe0(pb~e{hcI`(%9BFjM}9C-iyEM`f$_~6O&6yqRz6R0XCQ}`_uVYnxm@VZ{X)T zw+|&4wx{AVG}1?nT?xy4aCqXRaIJvOT&z%BcoqZY`rXt0$GW<~t7^qC#8Fryl^PNS zwNfc#Wy{nwVj!nK#M!nO=Ti$nDrn2AVAK+H!!Zf1jOK5T4WgzZ?xWm>QWZCrgo2z| z2+EmB6}RM;4CW$XragjTbaMe|XW7gny~8B>9K}OTCWS^tVCyh8e8RLaT7FM|_W&Z` zwgRO9TXxgjm{B9B3kvxQA%SrJLa`vh!)Q8t`j2t4sQC176G-XS^_&t$Qz4X0-J0uQ z92@;z<>r;TYwQNY{$K3Bg^Y6t)aqnsE`b|@`qKFm@J1tDXicLuO&rWmkQ)E%kJM{O zj~U{GgAKbYk?UBD+y~g_C#F1;D2?Q1$4+!y{Ndo0!o@IHMU#P18qo6~I=!Gt>!z&6 zFxqys8zb)7j-HX8{^M>pD)*VLA*~R*i!n3QVmBSu84Kll*CAHSr8r)dI^rj3+=;@L z$Ej{}x>*wYFvhs}`YwpRT7F2KX!=A6rT-^YU^d1E7dE8|qUahp1zA&UWRW_f zDSQ3IN{KScqST1S4Sr(vR)b{d9_oU^LZbE>B_374jt!jcCkAgAm4%0A%yUzrPiDx$ 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%0AU5^9xwHfu@Vb!^{vtC%R6+85)UPZ!aW|9J%5Vz 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%0DNRFzt=0?3ybgYithx7`vmCseX;Ig@ln{w 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%0DT; zEI&X0_j&K<-IW*1+m;v1o09j-$!|@*aq@x5Et5l&(XKcz?nBmL#@x}xwFH9IwQbe44FP{}K6kos8O>Hk)wKa-Qd#L? zGRrXWi;2Io!oy^yGTBz!+O}=;)`rTmdA_-BM>CX3q_w84dQ)R%aKZ5Q7AuP_E$iAK z5~vKMwDDK^J#30pJqS4oBfKuVLdb36+(nauh5pOJx!$D@|qM zFAIB&&%)&Rtl83B78=o_IZ|8ZHG-$BI%=w$STDCX`pdjVr_CmUO{v%DwAr+7ulJXF zjZT|QL~Oi9r_H7=(&8^ITjX2dUM~xD+%3%wfj0hY2$Tj=TD4;3PiYlt2!tzBTGe4y z;bAo`*)G3omp@#d(yFz=ANGpTSyu$B(v)@8Va2REZ0?<^+QkeNkZFp>2N!d{AbHs) zXq!=OpuVAgb08c@VdmFneh-&ZOqYJ;(jThusLN)gUHU`iDa@2hf2hpEWxjG**SeuD z(pJ~d)Ee>{?s>|nrm;2DR@2xJ3VBV~lTDkT*aSmftHdPJCLlI}pw}vqYufn5#vk-r zC32LFO#Cg|XmikOmB>~$_1M%$YIo2ekKk=K4fS=ANHFj}8m()oXXZBwWcL9)Za7E zPhk4foMd{4ENN*jUC150lA-;Rs^`Coed`)plP%%znMM_=AxWdE0E--<{7#i8I6T)S zL+;$u9`i8!?_wW&H1+?pnRfJ_v}T8^wz>93>yZAV*tdVLUtFCWIMv}zFaL9~ueGMB z)!}WCy&JUI@5C&b!GQd2_Cl77jHFeSTIR^!Z&dXEJaYDuMk;%Y?1B8FD*vZqU(LoA zS37Neq^=7QuRi)-~M|i(h&HH-f@RCNu!}~i` z{uiSNPgnBuQHJ*;GrW))UQmY@@(2&(s#0^gBfP&=&HM4l;U$fRhxaR0{x3%np04CC zMj76hW_Up}ynqfb=n)>qRi)-~M|gjun)kht!%G?s5AT<%{8yt0PgnBYQHJ-48D78) z&#%J^c!Y;>RjIk$5#BFU^FA9nyrj|a@cxe~|HUZ6)0KQW%JAMZ!}A;Ag)4P--uokmmoyq4-e0ToAC4kCUCB|e@aEaKIC?UCS2kRMQnlp@hfiJMn`3Q{ zwZ)NQUvooqU1@8i$vL5|9&Y<;(w2>b+6xF*7=`PO89ozZUS%0L^7S(n@9QJyD`}+i z<=EN!xhnq_TcAkICU!~e`$-;#Z;D~vh&xo;*=t^T^~l;QIuqg1WbK)xZ8B@+k~Io@ zWexMHaMHk$wV$e}pBp)ANu%Le`zuxc#nf5ThA*Vfns)Z=D6{so&O~T5S$jBXo6K67 zWR1dJS;M?4oHTG`?I$YgM@P&MLSRd(xPxaUaT�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 + + + 2 + + Debug + + RX + + 1 + + C-SPY + 3 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RXEMUE20 + 4 + + 4 + 1 + 1 + + + + + + + + + + + + + + + RXJLINK + 4 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + SIMRX + 1 + + 1 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXRxPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/rx/rt.ewp b/bsp/rx/rt.ewp new file mode 100644 index 0000000000..cde5ccb52f --- /dev/null +++ b/bsp/rx/rt.ewp @@ -0,0 +1,1164 @@ + + + + 2 + + Debug + + RX + + 1 + + General + 4 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCRX + 7 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARX + 6 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 1 + + 0 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 4 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 1 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + RPDL + + $PROJ_DIR$\RPDL\interrupt_adc_10.c + + + $PROJ_DIR$\RPDL\interrupt_adc_12.c + + + $PROJ_DIR$\RPDL\interrupt_bsc.c + + + $PROJ_DIR$\RPDL\interrupt_cmt.c + + + $PROJ_DIR$\RPDL\interrupt_dmac.c + + + $PROJ_DIR$\RPDL\interrupt_exdmac.c + + + $PROJ_DIR$\RPDL\interrupt_iic.c + + + $PROJ_DIR$\RPDL\Interrupt_INTC.c + + + $PROJ_DIR$\RPDL\interrupt_mtu2.c + + + $PROJ_DIR$\RPDL\interrupt_not_rpdl.c + + + $PROJ_DIR$\RPDL\interrupt_poe.c + + + $PROJ_DIR$\RPDL\Interrupt_RTC.c + + + $PROJ_DIR$\RPDL\interrupt_sci.c + + + $PROJ_DIR$\RPDL\Interrupt_SPI.c + + + $PROJ_DIR$\RPDL\Interrupt_TMR.c + + + $PROJ_DIR$\RPDL\interrupt_wdt.c + + + + rtos + + components + + drivers + + $PROJ_DIR$\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\components\drivers\src\portal.c + + + $PROJ_DIR$\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\components\drivers\src\workqueue.c + + + + finsh + + $PROJ_DIR$\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_compiler.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_error.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_heap.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_init.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_node.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_ops.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_parser.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_token.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_var.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_vm.c + + + $PROJ_DIR$\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\components\finsh\msh_cmd.c + + + $PROJ_DIR$\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\components\finsh\symbol.c + + + + init + + $PROJ_DIR$\..\..\components\init\components.c + + + + + src + + $PROJ_DIR$\..\..\src\clock.c + + + $PROJ_DIR$\..\..\src\device.c + + + $PROJ_DIR$\..\..\src\idle.c + + + $PROJ_DIR$\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\src\irq.c + + + $PROJ_DIR$\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\src\mem.c + + + $PROJ_DIR$\..\..\src\memheap.c + + + $PROJ_DIR$\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\src\module.c + + + $PROJ_DIR$\..\..\src\object.c + + + $PROJ_DIR$\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\src\slab.c + + + $PROJ_DIR$\..\..\src\thread.c + + + $PROJ_DIR$\..\..\src\timer.c + + + + + target + + app + + $PROJ_DIR$\applications\application.c + + + $PROJ_DIR$\applications\startup.c + + + + cpu + + $PROJ_DIR$\..\..\libcpu\rx\context_iar.S + + + $PROJ_DIR$\..\..\libcpu\rx\cpuport.c + + + + drivers + + $PROJ_DIR$\drivers\board.c + + + $PROJ_DIR$\drivers\uart.c + + + + + + diff --git a/bsp/rx/rtconfig.h b/bsp/rx/rtconfig.h new file mode 100644 index 0000000000..69d71c2411 --- /dev/null +++ b/bsp/rx/rtconfig.h @@ -0,0 +1,187 @@ +/* RT-Thread config file */ +#ifndef __RTTHREAD_CFG_H__ +#define __RTTHREAD_CFG_H__ + +/* RT_NAME_MAX*/ +#define RT_NAME_MAX 8 + +/* RT_ALIGN_SIZE*/ +#define RT_ALIGN_SIZE 4 + +/* PRIORITY_MAX */ +#define RT_THREAD_PRIORITY_MAX 32 + +/* Tick per Second */ +#define RT_TICK_PER_SECOND 100 + +/* SECTION: RT_DEBUG */ +/* Thread Debug */ +#define RT_DEBUG +#define RT_THREAD_DEBUG + +#define RT_USING_OVERFLOW_CHECK + +/* Using Hook */ +#define RT_USING_HOOK + +/* Using Software Timer */ +/* #define RT_USING_TIMER_SOFT */ +#define RT_TIMER_THREAD_PRIO 4 +#define RT_TIMER_THREAD_STACK_SIZE 512 +#define RT_TIMER_TICK_PER_SECOND 10 + +/* SECTION: IPC */ +/* Using Semaphore*/ +#define RT_USING_SEMAPHORE + +/* Using Mutex */ +#define RT_USING_MUTEX + +/* Using Event */ +#define RT_USING_EVENT + +/* Using MailBox */ +#define RT_USING_MAILBOX + +/* Using Message Queue */ +#define RT_USING_MESSAGEQUEUE + +/* SECTION: Memory Management */ +/* Using Memory Pool Management*/ +#define RT_USING_MEMPOOL + +/* Using Dynamic Heap Management */ +#define RT_USING_HEAP + +/* Using Small MM */ +#define RT_USING_SMALL_MEM + +// +#define RT_USING_COMPONENTS_INIT + +/* SECTION: Device System */ +/* Using Device System */ +#define RT_USING_DEVICE +// +#define RT_USING_DEVICE_IPC +// +#define RT_USING_SERIAL + +/* SECTION: Console options */ +#define RT_USING_CONSOLE +/* the buffer size of console*/ +#define RT_CONSOLEBUF_SIZE 128 +// +#define RT_CONSOLE_DEVICE_NAME "uart2" + +/* SECTION: finsh, a C-Express shell */ +#define RT_USING_FINSH +/* Using symbol table */ +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION + +/* SECTION: device filesystem */ +/* #define RT_USING_DFS */ + +#define RT_USING_DFS_ELMFAT +/* Reentrancy (thread safe) of the FatFs module. */ +#define RT_DFS_ELM_REENTRANT +/* Number of volumes (logical drives) to be used. */ +#define RT_DFS_ELM_DRIVES 2 +/* #define RT_DFS_ELM_USE_LFN 1 */ +/* #define RT_DFS_ELM_CODE_PAGE 936 */ +#define RT_DFS_ELM_MAX_LFN 255 +/* Maximum sector size to be handled. */ +#define RT_DFS_ELM_MAX_SECTOR_SIZE 512 + +/* the max number of mounted filesystem */ +#define DFS_FILESYSTEMS_MAX 2 +/* the max number of opened files */ +#define DFS_FD_MAX 4 + +/* SECTION: lwip, a lighwight TCP/IP protocol stack */ +/* #define RT_USING_LWIP */ +/* LwIP uses RT-Thread Memory Management */ +#define RT_LWIP_USING_RT_MEM +/* Enable ICMP protocol*/ +#define RT_LWIP_ICMP +/* Enable UDP protocol*/ +#define RT_LWIP_UDP +/* Enable TCP protocol*/ +#define RT_LWIP_TCP +/* Enable DNS */ +#define RT_LWIP_DNS + +/* the number of simulatenously active TCP connections*/ +#define RT_LWIP_TCP_PCB_NUM 5 + +/* Using DHCP */ +/* #define RT_LWIP_DHCP */ + +/* ip address of target*/ +#define RT_LWIP_IPADDR0 192 +#define RT_LWIP_IPADDR1 168 +#define RT_LWIP_IPADDR2 1 +#define RT_LWIP_IPADDR3 30 + +/* gateway address of target*/ +#define RT_LWIP_GWADDR0 192 +#define RT_LWIP_GWADDR1 168 +#define RT_LWIP_GWADDR2 1 +#define RT_LWIP_GWADDR3 1 + +/* mask address of target*/ +#define RT_LWIP_MSKADDR0 255 +#define RT_LWIP_MSKADDR1 255 +#define RT_LWIP_MSKADDR2 255 +#define RT_LWIP_MSKADDR3 0 + +/* tcp thread options */ +#define RT_LWIP_TCPTHREAD_PRIORITY 12 +#define RT_LWIP_TCPTHREAD_MBOX_SIZE 10 +#define RT_LWIP_TCPTHREAD_STACKSIZE 1024 + +/* ethernet if thread options */ +#define RT_LWIP_ETHTHREAD_PRIORITY 15 +#define RT_LWIP_ETHTHREAD_MBOX_SIZE 10 +#define RT_LWIP_ETHTHREAD_STACKSIZE 512 + +/* TCP sender buffer space */ +#define RT_LWIP_TCP_SND_BUF 8192 +/* TCP receive window. */ +#define RT_LWIP_TCP_WND 8192 + +/* SECTION: RT-Thread/GUI */ +/* #define RT_USING_RTGUI */ + +/* name length of RTGUI object */ +#define RTGUI_NAME_MAX 12 +/* support 16 weight font */ +#define RTGUI_USING_FONT16 +/* support Chinese font */ +#define RTGUI_USING_FONTHZ +/* use DFS as file interface */ +#define RTGUI_USING_DFS_FILERW +/* use font file as Chinese font */ +#define RTGUI_USING_HZ_FILE +/* use Chinese bitmap font */ +#define RTGUI_USING_HZ_BMP +/* use small size in RTGUI */ +#define RTGUI_USING_SMALL_SIZE +/* use mouse cursor */ +/* #define RTGUI_USING_MOUSE_CURSOR */ +/* default font size in RTGUI */ +#define RTGUI_DEFAULT_FONT_SIZE 16 + +/* image support */ +/* #define RTGUI_IMAGE_XPM */ +/* #define RTGUI_IMAGE_BMP */ + +// +// #define RT_USING_CMSIS_OS +// +//#define RT_USING_RTT_CMSIS +// +// #define RT_USING_BSP_CMSIS + +#endif diff --git a/bsp/rx/rx62n.eww b/bsp/rx/rx62n.eww new file mode 100644 index 0000000000..9487a4201d --- /dev/null +++ b/bsp/rx/rx62n.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\rt.ewp + + + + + diff --git a/components/external/freetype/docs/VERSION.DLL b/components/external/freetype/docs/VERSION.DLL deleted file mode 100644 index bb55c3dda9..0000000000 --- a/components/external/freetype/docs/VERSION.DLL +++ /dev/null @@ -1,138 +0,0 @@ -Due to our use of `libtool' to generate and install the FreeType 2 -libraries on Unix systems, as well as other historical events, it is -generally very difficult to know precisely which release of the font -engine is installed on a given system. - -This file tries to explain why and to document ways to properly detect -FreeType on Unix. - - -1. Version and Release numbers ------------------------------- - -For each new public release of FreeType 2, there are generally *three* -distinct `version' numbers to consider: - - * The official FreeType 2 release number, like 2.0.9 or 2.1.3. - - * The libtool (and Unix) specific version number, like 9.2.3. This is - what `freetype-config --version' returns. - - * The platform-specific shared object number, used for example when - the library is installed as `/usr/lib/libfreetype.so.6.3.2'. - -The platform-specific number is, unsurprisingly, platform-specific and -varies with the operating system you are using (several variants of -Linux, FreeBSD, Solaris, etc.). You should thus _never_ use it, even -for simple tests. - -The libtool-specific number does not equal the release number but is -tied to it. - -The release number is available at *compile* time through the following -macros defined in FT_FREETYPE_H: - - - FREETYPE_MAJOR: major release number - - FREETYPE_MINOR: minor release number - - FREETYPE_PATCH: patch release number - -See below for a small autoconf fragment. - -The release number is also available at *runtime* through the -`FT_Library_Version' API. Unfortunately, this one wasn't available or -working correctly before the 2.1.3 official release. - - -2. History ----------- - -The following table gives, for each official release, the corresponding -libtool number, as well as the shared object number found on _most_ -systems, but not all of them: - - - release libtool so - ------------------------------- - 2.3.12 10.0.4 6.4.0 - 2.3.11 9.22.3 6.3.22 - 2.3.10 9.21.3 6.3.21 - 2.3.9 9.20.3 6.3.20 - 2.3.8 9.19.3 6.3.19 - 2.3.7 9.18.3 6.3.18 - 2.3.6 9.17.3 6.3.17 - 2.3.5 9.16.3 6.3.16 - 2.3.4 9.15.3 6.3.15 - 2.3.3 9.14.3 6.3.14 - 2.3.2 9.13.3 6.3.13 - 2.3.1 9.12.3 6.3.12 - 2.3.0 9.11.3 6.3.11 - 2.2.1 9.10.3 6.3.10 - 2.2.0 9.9.3 6.3.9 - 2.1.10 9.8.3 6.3.8 - 2.1.9 9.7.3 6.3.7 - 2.1.8 9.6.3 6.3.6 - 2.1.7 9.5.3 6.3.5 - 2.1.6 9.5.3 6.3.5 - 2.1.5 9.4.3 6.3.4 - 2.1.4 9.3.3 6.3.3 - 2.1.3 9.2.3 6.3.2 - 2.1.2 9.1.3 6.3.1 - 2.1.1 9.0.3 ? - 2.1.0 8.0.2 ? - 2.0.9 9.0.3 ? - 2.0.8 8.0.2 ? - 2.0.4 7.0.1 ? - 2.0.1 6.1.0 ? - -The libtool numbers are a bit inconsistent due to the library's history: - - - 2.1.0 was created as a development branch from 2.0.8 (hence the same - libtool numbers). - - - 2.0.9 was a bug-fix release of the `stable' branch, and we - incorrectly increased its libtool number. - - - 2.1.4 was a development version, however it was stable enough to be - the basis of the 2.2.0 release. - - -3. Autoconf Code Fragment -------------------------- - -Lars Clausen contributed the following autoconf fragment to detect which -version of FreeType is installed on a system. This one tests for a -version that is at least 2.0.9; you should change it to check against -other release numbers. - - - AC_MSG_CHECKING([whether FreeType version is 2.0.9 or higher]) - old_CPPFLAGS="$CPPFLAGS" - CPPFLAGS=`freetype-config --cflags` - AC_TRY_CPP([ - -#include -#include FT_FREETYPE_H -#if (FREETYPE_MAJOR*1000 + FREETYPE_MINOR)*1000 + FREETYPE_PATCH < 2000009 -#error Freetype version too low. -#endif - ], - [AC_MSG_RESULT(yes) - FREETYPE_LIBS=`freetype-config --libs` - AC_SUBST(FREETYPE_LIBS) - AC_DEFINE(HAVE_FREETYPE,1,[Define if you have the FreeType2 library]) - CPPFLAGS="$old_CPPFLAGS"], - [AC_MSG_ERROR([Need FreeType library version 2.0.9 or higher])]) - ------------------------------------------------------------------------- - -Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by -David Turner, Robert Wilhelm, and Werner Lemberg. - -This file is part of the FreeType project, and may only be used, -modified, and distributed under the terms of the FreeType project -license, LICENSE.TXT. By continuing to use, modify, or distribute this -file you indicate that you have read the license and understand and -accept it fully. - - ---- end of VERSION.DLL --- diff --git a/components/finsh/shell.c b/components/finsh/shell.c index ccdb7bc864..ad3b49534d 100644 --- a/components/finsh/shell.c +++ b/components/finsh/shell.c @@ -553,7 +553,7 @@ void finsh_system_var_init(const void* begin, const void* end) _sysvar_table_end = (struct finsh_sysvar*) end; } -#if defined(__ICCARM__) /* for IAR compiler */ +#if defined(__ICCARM__) || defined(__ICCRX__) /* for IAR compiler */ #ifdef FINSH_USING_SYMTAB #pragma section="FSymTab" #pragma section="VSymTab" @@ -606,7 +606,7 @@ int finsh_system_init(void) #ifndef FINSH_USING_MSH_ONLY finsh_system_var_init(&VSymTab$$Base, &VSymTab$$Limit); #endif -#elif defined (__ICCARM__) /* for IAR Compiler */ +#elif defined (__ICCARM__) || defined(__ICCRX__) /* for IAR Compiler */ finsh_system_function_init(__section_begin("FSymTab"), __section_end("FSymTab")); finsh_system_var_init(__section_begin("VSymTab"), diff --git a/libcpu/rx/context_iar.S b/libcpu/rx/context_iar.S new file mode 100644 index 0000000000..143ae00315 --- /dev/null +++ b/libcpu/rx/context_iar.S @@ -0,0 +1,132 @@ +#include "cpuconfig.h" + +//#include "iorx62n.h" + EXTERN _rt_thread_switch_interrupt_flag + EXTERN _rt_interrupt_from_thread + EXTERN _rt_interrupt_to_thread + EXTERN _rt_hw_hard_fault_exception + EXTERN _rt_hw_cpu_shutdown + + /*PUBLIC _Interrupt_SWINT*/ + PUBLIC ___interrupt_27 + PUBLIC ___interrupt_0 + RSEG CODE:CODE(4) + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ + PUBLIC _rt_hw_interrupt_disable +_rt_hw_interrupt_disable: + MVTIPL #MAX_SYSCALL_INTERRUPT_PRIORITY + RTS + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ + PUBLIC _rt_hw_interrupt_enable +_rt_hw_interrupt_enable: + MVTIPL #KERNEL_INTERRUPT_PRIORITY + RTS + +; r0 --> swith from thread stack +; r1 --> swith to thread stack +; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack +___interrupt_27: + +/* enable interrupt because enter the interrupt,it will be clear */ + SETPSW I + MVTIPL #MAX_SYSCALL_INTERRUPT_PRIORITY + PUSH.L R15 + +/* justage if it should switch thread*/ + MOV.L #_rt_thread_switch_interrupt_flag, R15 + MOV.L [ R15 ], R15 + CMP #0, R15 + BEQ notask_exit +/* clean the flag*/ + MOV.L #_rt_thread_switch_interrupt_flag, R15 + MOV.L #0, [ R15 ] + +/* justage if it should save the register*/ + MOV.L #_rt_interrupt_from_thread, R15 + MOV.L [ R15 ], R15 + CMP #0, R15 + BEQ need_modify_isp + /*save register*/ + MVFC USP, R15 + SUB #12, R15 + MVTC R15, USP + MOV.L [ R0 ], [ R15 ] ;PSW + MOV.L 4[ R0 ], 4[ R15 ];PC + MOV.L 8[ R0 ], 8[ R15 ] ;R15 + ADD #12, R0 + SETPSW U + PUSHM R1-R14 + MVFC FPSW, R15 + PUSH.L R15 + MVFACHI R15 + PUSH.L R15 + MVFACMI R15 ; Middle order word. + SHLL #16, R15 ; Shifted left as it is restored to the low orde r w + PUSH.L R15 + /*save thread stack pointer and switch to new thread*/ + MOV.L #_rt_interrupt_from_thread, R15 + MOV.L [ R15 ], R15 + MOV.L R0, [ R15 ] + BRA swtich_to_thread +need_modify_isp: + MVFC ISP, R15 + ADD #12, R15 + MVTC R15, ISP +swtich_to_thread: + SETPSW U + MOV.L #_rt_interrupt_to_thread, R15 + MOV.L [ R15 ], R15 + MOV.L [ R15 ], R0 + POP R15 + MVTACLO R15 + POP R15 + MVTACHI R15 + POP R15 + MVTC R15, FPSW + POPM R1-R15 + BRA pendsv_exit +notask_exit: + POP R15 +pendsv_exit: + + MVTIPL #KERNEL_INTERRUPT_PRIORITY + RTE + NOP + NOP +/*exception interrupt*/ +___interrupt_0: + PUSH.L R15 + /*save the register for infomation*/ + MVFC USP, R15 + SUB #12, R15 + MVTC R15, USP + MOV.L [ R0 ], [ R15 ] ;PSW + MOV.L 4[ R0 ], 4[ R15 ];PC + MOV.L 8[ R0 ], 8[ R15 ] ;R15 + ADD #12, R0 + SETPSW U + PUSHM R1-R14 + MVFC FPSW, R15 + PUSH.L R15 + MVFACHI R15 + PUSH.L R15 + MVFACMI R15 ; Middle order word. + SHLL #16, R15 ; Shifted left as it is restored to the low orde r w + PUSH.L R15 + /*save the exception infomation add R1 as a parameter of + * function rt_hw_hard_fault_exception + */ + MOV.L R0, R1 + BRA _rt_hw_hard_fault_exception + BRA _rt_hw_cpu_shutdown + RTE + NOP + NOP + END + diff --git a/libcpu/rx/cpuconfig.h b/libcpu/rx/cpuconfig.h new file mode 100644 index 0000000000..8b0fd37ce8 --- /dev/null +++ b/libcpu/rx/cpuconfig.h @@ -0,0 +1,7 @@ +#ifndef __CPU_CONFIG_H__ +#define __CPU_CONFIG_H__ + +#define MAX_SYSCALL_INTERRUPT_PRIORITY 10 +#define KERNEL_INTERRUPT_PRIORITY 1 + +#endif diff --git a/libcpu/rx/cpuport.c b/libcpu/rx/cpuport.c new file mode 100644 index 0000000000..e8a75c629e --- /dev/null +++ b/libcpu/rx/cpuport.c @@ -0,0 +1,216 @@ +/* + * File : cpuport.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2009 - 2011, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2011-02-23 Bernard the first version + * 2012-03-03 xuzhenglim modify for rx62N + */ +#include +#include + +#include "cpuconfig.h" + +#include "machine.h" +#include "iorx62n.h" + +#define ENTER_INTERRUPT() ICU.SWINTR.BIT.SWINT = 1; + +extern volatile rt_uint8_t rt_interrupt_nest; + + +/* switch flag on interrupt and thread pointer to save switch record */ +rt_uint32_t rt_interrupt_from_thread; +rt_uint32_t rt_interrupt_to_thread; +rt_uint32_t rt_thread_switch_interrupt_flag; + + +/* stack frame*/ +struct stack_frame +{ + rt_uint32_t ACCLO; + rt_uint32_t ACCHI; + rt_uint32_t FPSW; + rt_uint32_t R1; + rt_uint32_t R2; + rt_uint32_t R3; + rt_uint32_t R4; + rt_uint32_t R5; + rt_uint32_t R6; + rt_uint32_t R7; + rt_uint32_t R8; + rt_uint32_t R9; + rt_uint32_t R10; + rt_uint32_t R11; + rt_uint32_t R12; + rt_uint32_t R13; + rt_uint32_t R14; + rt_uint32_t R15; + //there is not R0 register,it is special for stack pointer + rt_uint32_t PC; + rt_uint32_t PSW; +}; + +/** + * Initilial the threah stack. + * + * @author LXZ (2014/11/8) + * + * @param void* tentry + * @param void* parameter + * @param rt_uint8_t* stack_addr + * @param void* texit + * + * @return rt_uint8_t* + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, + rt_uint8_t *stack_addr, void *texit) +{ + unsigned long *stk; + struct stack_frame *stack_frame; + unsigned long i; + + stk = (unsigned long *)stack_addr; + *(stk) = (unsigned long)texit; + stack_frame = (struct stack_frame *)(stack_addr - sizeof(struct stack_frame)) ; + + //Initilial all register + for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_uint32_t); i ++) + { + ((rt_uint32_t *)stack_frame)[i] = 0xdeadbeef; + } + + stack_frame->PSW = (unsigned long)0x00030000 ; /* psw */ + stack_frame->PC = (unsigned long)tentry; /* thread entery*/ + stack_frame->R1 = (unsigned long )parameter; /* r1 : parameter */ + stack_frame->FPSW = 0x00000100; /* fpsw */ + + return(rt_uint8_t *)stack_frame; +} + +#ifdef RT_USING_FINSH +extern void list_thread(void); +#endif +extern rt_thread_t rt_current_thread; +/** + * deal exception + * + * @author LXZ (2014/11/8) + * + * @param struct stack_frame* exception_contex + */ +void rt_hw_hard_fault_exception(struct stack_frame* exception_contex) +{ + if (exception_contex != RT_NULL) { + rt_kprintf("psw: 0x%08x\n", exception_contex->PSW); + rt_kprintf("pc: 0x%08x\n", exception_contex->PC); + rt_kprintf("r0: 0x%08x\n", exception_contex->R1); + rt_kprintf("r0: 0x%08x\n", exception_contex->R2); + rt_kprintf("r0: 0x%08x\n", exception_contex->R3); + rt_kprintf("r0: 0x%08x\n", exception_contex->R4); + rt_kprintf("r0: 0x%08x\n", exception_contex->R5); + rt_kprintf("r0: 0x%08x\n", exception_contex->R6); + rt_kprintf("r0: 0x%08x\n", exception_contex->R7); + rt_kprintf("r0: 0x%08x\n", exception_contex->R8); + rt_kprintf("r0: 0x%08x\n", exception_contex->R9); + rt_kprintf("r0: 0x%08x\n", exception_contex->R10); + rt_kprintf("r0: 0x%08x\n", exception_contex->R11); + rt_kprintf("r0: 0x%08x\n", exception_contex->R12); + rt_kprintf("r0: 0x%08x\n", exception_contex->R13); + rt_kprintf("r0: 0x%08x\n", exception_contex->R14); + rt_kprintf("r0: 0x%08x\n", exception_contex->R15); + rt_kprintf("fpsw: 0x%08x\n", exception_contex->FPSW); + rt_kprintf("acchi: 0x%08x\n", exception_contex->ACCHI); + rt_kprintf("acclo: 0x%08x\n", exception_contex->ACCLO); + } + rt_kprintf("hard fault on thread: %s\n", rt_current_thread->name); + #ifdef RT_USING_FINSH + list_thread(); + #endif + while (1); + +} + + +/** + * switch thread in interrupt + * + * @author LXZ (2014/11/8) + * + * @param rt_uint32_t from + * @param rt_uint32_t to + */ +void rt_hw_context_switch(rt_uint32_t from, rt_uint32_t to) +{ + if (rt_thread_switch_interrupt_flag == 0) + { + rt_thread_switch_interrupt_flag = 1; + rt_interrupt_from_thread = from; + } + + rt_interrupt_to_thread = to; + ENTER_INTERRUPT(); +} +/** + * swithc thread out the interrupt + * + * @author LXZ (2014/11/8) + * + * @param rt_uint32_t from + * @param rt_uint32_t to + */ +void rt_hw_context_switch_interrupt(rt_uint32_t from, rt_uint32_t to) +{ + if (rt_thread_switch_interrupt_flag == 0) + { + rt_thread_switch_interrupt_flag = 1; + rt_interrupt_from_thread = from; + } + + rt_interrupt_to_thread = to; + ENTER_INTERRUPT(); +} + +/** + * shut down the chip + * + * @author LXZ (2014/11/8) + */ +void rt_hw_cpu_shutdown(void) +{ + rt_kprintf("shutdown...\n"); + + RT_ASSERT(0); +} +/** + * switch to the first thread,it just call one time + * + * @author LXZ (2014/11/8) + * + * @param rt_uint32_t to + */ +void rt_hw_context_switch_to(rt_uint32_t to) +{ + + rt_interrupt_from_thread = 0; + rt_interrupt_to_thread = to; + rt_thread_switch_interrupt_flag = 1; + /* enable interrupt*/ + _IEN( _ICU_SWINT ) = 1; + + /*clear the interrupt flag*/ + _IR( _ICU_SWINT ) = 0; + _IPR( _ICU_SWINT ) = MAX_SYSCALL_INTERRUPT_PRIORITY + 1; + + /*touch the software interrupt*/ + ENTER_INTERRUPT(); + /*wait for first thread start up*/ + while(1); +} +