From a8f4e517fc51b4ceccde76ab266befca73fc5b91 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Tue, 19 Feb 2013 11:28:21 +0900 Subject: [PATCH] removal of ChibiOS_2.0.8 --- ChangeLog | 4 + .../boards/EA_LPCXPRESSO_BB_1114/board.c | 67 - .../boards/EA_LPCXPRESSO_BB_1114/board.h | 92 - .../boards/EA_LPCXPRESSO_BB_1114/board.mk | 5 - .../boards/EA_LPCXPRESSO_BB_1343/board.c | 67 - .../boards/EA_LPCXPRESSO_BB_1343/board.h | 92 - .../boards/EA_LPCXPRESSO_BB_1343/board.mk | 5 - ChibiOS_2.0.8/boards/GENERIC_SPC563/board.c | 70 - ChibiOS_2.0.8/boards/GENERIC_SPC563/board.h | 72 - ChibiOS_2.0.8/boards/GENERIC_SPC563/board.mk | 5 - ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.c | 91 - ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.h | 107 - ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.mk | 5 - .../boards/OLIMEX_AVR_MT_128/board.c | 91 - .../boards/OLIMEX_AVR_MT_128/board.h | 131 - .../boards/OLIMEX_AVR_MT_128/board.mk | 5 - ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.c | 86 - ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.h | 92 - .../boards/OLIMEX_LPC_P2148/board.mk | 8 - .../boards/OLIMEX_LPC_P2148/buzzer.c | 119 - .../boards/OLIMEX_LPC_P2148/buzzer.h | 42 - .../boards/OLIMEX_MSP430_P1611/board.c | 61 - .../boards/OLIMEX_MSP430_P1611/board.h | 88 - .../boards/OLIMEX_MSP430_P1611/board.mk | 5 - .../boards/OLIMEX_SAM7_EX256/board.c | 125 - .../boards/OLIMEX_SAM7_EX256/board.h | 100 - .../boards/OLIMEX_SAM7_EX256/board.mk | 5 - ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.c | 107 - ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.h | 79 - .../boards/OLIMEX_SAM7_P256/board.mk | 5 - .../boards/OLIMEX_STM32_P103/board.c | 56 - .../boards/OLIMEX_STM32_P103/board.h | 142 - .../boards/OLIMEX_STM32_P103/board.mk | 5 - .../boards/RAISONANCE_REVA_STM8S/board.c | 74 - .../boards/RAISONANCE_REVA_STM8S/board.h | 193 - ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.c | 62 - ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.h | 124 - .../boards/ST_STM3210C_EVAL/board.mk | 5 - ChibiOS_2.0.8/boards/readme.txt | 6 - .../demos/ARM7-AT91SAM7S-GCC/Makefile | 184 - ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/ch.ld | 105 - .../demos/ARM7-AT91SAM7S-GCC/chconf.h | 475 - .../demos/ARM7-AT91SAM7S-GCC/halconf.h | 159 - ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/main.c | 74 - .../demos/ARM7-AT91SAM7S-GCC/mcuconf.h | 65 - .../demos/ARM7-AT91SAM7S-GCC/readme.txt | 28 - .../demos/ARM7-AT91SAM7X-GCC/Makefile | 184 - ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/ch.ld | 110 - .../demos/ARM7-AT91SAM7X-GCC/chconf.h | 494 - .../demos/ARM7-AT91SAM7X-GCC/halconf.h | 159 - ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/main.c | 74 - .../demos/ARM7-AT91SAM7X-GCC/mcuconf.h | 65 - .../demos/ARM7-AT91SAM7X-GCC/readme.txt | 28 - .../demos/ARM7-AT91SAM7X-LWIP-GCC/Makefile | 194 - .../demos/ARM7-AT91SAM7X-LWIP-GCC/ch.ld | 110 - .../demos/ARM7-AT91SAM7X-LWIP-GCC/chconf.h | 497 - .../demos/ARM7-AT91SAM7X-LWIP-GCC/halconf.h | 159 - .../ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/cc.h | 81 - .../ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/perf.h | 67 - .../lwip/arch/sys_arch.c | 188 - .../lwip/arch/sys_arch.h | 99 - .../ARM7-AT91SAM7X-LWIP-GCC/lwip/lwip.mk | 44 - .../ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.c | 309 - .../ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.h | 134 - .../demos/ARM7-AT91SAM7X-LWIP-GCC/lwipopts.h | 1801 --- .../demos/ARM7-AT91SAM7X-LWIP-GCC/main.c | 90 - .../demos/ARM7-AT91SAM7X-LWIP-GCC/mcuconf.h | 65 - .../demos/ARM7-AT91SAM7X-LWIP-GCC/readme.txt | 34 - .../demos/ARM7-AT91SAM7X-LWIP-GCC/web/web.c | 127 - .../demos/ARM7-AT91SAM7X-LWIP-GCC/web/web.h | 61 - .../demos/ARM7-AT91SAM7X-UIP-GCC/Makefile | 198 - .../demos/ARM7-AT91SAM7X-UIP-GCC/ch.ld | 110 - .../demos/ARM7-AT91SAM7X-UIP-GCC/chconf.h | 494 - .../demos/ARM7-AT91SAM7X-UIP-GCC/halconf.h | 159 - .../demos/ARM7-AT91SAM7X-UIP-GCC/main.c | 80 - .../demos/ARM7-AT91SAM7X-UIP-GCC/mcuconf.h | 65 - .../demos/ARM7-AT91SAM7X-UIP-GCC/readme.txt | 34 - .../ARM7-AT91SAM7X-UIP-GCC/web/cc-arch.h | 9 - .../ARM7-AT91SAM7X-UIP-GCC/web/clock-arch.h | 42 - .../ARM7-AT91SAM7X-UIP-GCC/web/uip-conf.h | 159 - .../ARM7-AT91SAM7X-UIP-GCC/web/webthread.c | 191 - .../ARM7-AT91SAM7X-UIP-GCC/web/webthread.h | 38 - .../demos/ARM7-LPC214x-FATFS-GCC/Makefile | 190 - .../demos/ARM7-LPC214x-FATFS-GCC/ch.ld | 113 - .../demos/ARM7-LPC214x-FATFS-GCC/chconf.h | 494 - .../demos/ARM7-LPC214x-FATFS-GCC/halconf.h | 159 - .../demos/ARM7-LPC214x-FATFS-GCC/main.c | 282 - .../demos/ARM7-LPC214x-FATFS-GCC/mcuconf.h | 63 - .../demos/ARM7-LPC214x-FATFS-GCC/readme.txt | 19 - ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/Makefile | 184 - ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/ch.ld | 113 - ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/chconf.h | 494 - .../demos/ARM7-LPC214x-G++/halconf.h | 159 - ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/main.cpp | 189 - .../demos/ARM7-LPC214x-G++/mcuconf.h | 63 - .../demos/ARM7-LPC214x-G++/readme.txt | 25 - ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/Makefile | 184 - ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/ch.ld | 113 - ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/chconf.h | 494 - .../demos/ARM7-LPC214x-GCC/halconf.h | 159 - ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/main.c | 104 - .../demos/ARM7-LPC214x-GCC/mcuconf.h | 63 - .../demos/ARM7-LPC214x-GCC/readme.txt | 22 - .../demos/ARMCM0-LPC1114-GCC/Makefile | 192 - ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/ch.ld | 120 - .../demos/ARMCM0-LPC1114-GCC/chconf.h | 494 - .../demos/ARMCM0-LPC1114-GCC/halconf.h | 159 - ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/main.c | 108 - .../demos/ARMCM0-LPC1114-GCC/mcuconf.h | 60 - .../demos/ARMCM3-LPC1343-GCC/Makefile | 193 - ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/ch.ld | 120 - .../demos/ARMCM3-LPC1343-GCC/chconf.h | 494 - .../demos/ARMCM3-LPC1343-GCC/halconf.h | 159 - ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/main.c | 108 - .../demos/ARMCM3-LPC1343-GCC/mcuconf.h | 60 - .../demos/ARMCM3-STM32F103-FATFS-GCC/Makefile | 208 - .../demos/ARMCM3-STM32F103-FATFS-GCC/ch.ld | 120 - .../demos/ARMCM3-STM32F103-FATFS-GCC/chconf.h | 494 - .../ARMCM3-STM32F103-FATFS-GCC/halconf.h | 159 - .../demos/ARMCM3-STM32F103-FATFS-GCC/main.c | 328 - .../ARMCM3-STM32F103-FATFS-GCC/mcuconf.h | 107 - .../ARMCM3-STM32F103-FATFS-GCC/readme.txt | 33 - .../demos/ARMCM3-STM32F103-GCC/Makefile | 205 - .../demos/ARMCM3-STM32F103-GCC/ch.ld | 120 - .../demos/ARMCM3-STM32F103-GCC/chconf.h | 494 - .../demos/ARMCM3-STM32F103-GCC/halconf.h | 159 - .../demos/ARMCM3-STM32F103-GCC/main.c | 76 - .../demos/ARMCM3-STM32F103-GCC/mcuconf.h | 107 - .../demos/ARMCM3-STM32F103-GCC/readme.txt | 28 - .../demos/ARMCM3-STM32F103-GCC/ride7/ch.rapp | 139 - .../demos/ARMCM3-STM32F103-GCC/ride7/ch.rprj | 4 - .../demos/ARMCM3-STM32F107-GCC/Makefile | 205 - .../demos/ARMCM3-STM32F107-GCC/ch.ld | 120 - .../demos/ARMCM3-STM32F107-GCC/chconf.h | 494 - .../demos/ARMCM3-STM32F107-GCC/halconf.h | 159 - .../demos/ARMCM3-STM32F107-GCC/main.c | 76 - .../demos/ARMCM3-STM32F107-GCC/mcuconf.h | 110 - .../demos/ARMCM3-STM32F107-GCC/readme.txt | 25 - ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/Makefile | 652 - ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/chconf.h | 494 - .../demos/AVR-AT90CANx-GCC/halconf.h | 159 - ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/main.c | 84 - .../demos/AVR-AT90CANx-GCC/mcuconf.h | 59 - .../demos/AVR-AT90CANx-GCC/readme.txt | 25 - .../demos/AVR-ATmega128-GCC/Makefile | 652 - .../demos/AVR-ATmega128-GCC/chconf.h | 494 - .../demos/AVR-ATmega128-GCC/halconf.h | 159 - ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/lcd.c | 101 - ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/lcd.h | 59 - ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/main.c | 96 - .../demos/AVR-ATmega128-GCC/mcuconf.h | 59 - .../demos/AVR-ATmega128-GCC/readme.txt | 24 - .../demos/MSP430-MSP430x1611-GCC/Makefile | 150 - .../demos/MSP430-MSP430x1611-GCC/chconf.h | 494 - .../demos/MSP430-MSP430x1611-GCC/halconf.h | 159 - .../demos/MSP430-MSP430x1611-GCC/main.c | 86 - .../demos/MSP430-MSP430x1611-GCC/mcuconf.h | 64 - .../mspgcc/msp430x1611.x | 201 - .../demos/MSP430-MSP430x1611-GCC/readme.txt | 24 - ChibiOS_2.0.8/demos/PPC-SPC563-GCC/Makefile | 154 - ChibiOS_2.0.8/demos/PPC-SPC563-GCC/ch.ld | 118 - ChibiOS_2.0.8/demos/PPC-SPC563-GCC/chconf.h | 494 - ChibiOS_2.0.8/demos/PPC-SPC563-GCC/halconf.h | 159 - ChibiOS_2.0.8/demos/PPC-SPC563-GCC/main.c | 206 - ChibiOS_2.0.8/demos/Posix-GCC/Makefile | 156 - ChibiOS_2.0.8/demos/Posix-GCC/board.h | 30 - ChibiOS_2.0.8/demos/Posix-GCC/chconf.h | 496 - ChibiOS_2.0.8/demos/Posix-GCC/halconf.h | 159 - ChibiOS_2.0.8/demos/Posix-GCC/main.c | 229 - ChibiOS_2.0.8/demos/Posix-GCC/readme.txt | 27 - ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/ch.rapp | 155 - ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/ch.rprj | 4 - .../demos/STM8S-STM8S208-RC/chconf.h | 492 - .../demos/STM8S-STM8S208-RC/halconf.h | 159 - ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/main.c | 82 - .../demos/STM8S-STM8S208-RC/mcuconf.h | 46 - .../demos/STM8S-STM8S208-RC/readme.txt | 16 - ChibiOS_2.0.8/demos/Win32-MinGW/Makefile | 145 - ChibiOS_2.0.8/demos/Win32-MinGW/board.h | 30 - ChibiOS_2.0.8/demos/Win32-MinGW/chconf.h | 496 - ChibiOS_2.0.8/demos/Win32-MinGW/halconf.h | 159 - ChibiOS_2.0.8/demos/Win32-MinGW/main.c | 280 - ChibiOS_2.0.8/demos/Win32-MinGW/readme.txt | 33 - ChibiOS_2.0.8/docs/Doxyfile | 1658 -- ChibiOS_2.0.8/docs/html/_a_r_m7_2crt0_8s.html | 56 - .../docs/html/_a_r_m7_2crt0_8s_source.html | 235 - .../docs/html/_a_r_m_c_mx_2crt0_8s.html | 56 - .../html/_a_r_m_c_mx_2crt0_8s_source.html | 213 - .../docs/html/_l_p_c11xx_2cmparams_8h.html | 67 - .../html/_l_p_c11xx_2cmparams_8h_source.html | 107 - .../docs/html/_l_p_c13xx_2cmparams_8h.html | 67 - .../html/_l_p_c13xx_2cmparams_8h_source.html | 107 - ChibiOS_2.0.8/docs/html/_p_p_c_2crt0_8s.html | 56 - .../docs/html/_p_p_c_2crt0_8s_source.html | 170 - .../docs/html/_s_t_m32_f10x_2cmparams_8h.html | 67 - .../_s_t_m32_f10x_2cmparams_8h_source.html | 107 - ChibiOS_2.0.8/docs/html/adc_8c.html | 75 - ChibiOS_2.0.8/docs/html/adc_8c_source.html | 286 - ChibiOS_2.0.8/docs/html/adc_8h.html | 88 - ChibiOS_2.0.8/docs/html/adc_8h_source.html | 147 - ChibiOS_2.0.8/docs/html/annotated.html | 129 - ChibiOS_2.0.8/docs/html/architecture.html | 136 - ChibiOS_2.0.8/docs/html/article_atomic.html | 67 - .../docs/html/article_create_thread.html | 175 - ChibiOS_2.0.8/docs/html/article_debug.html | 125 - ChibiOS_2.0.8/docs/html/article_design.html | 98 - ChibiOS_2.0.8/docs/html/article_eclipse.html | 143 - ChibiOS_2.0.8/docs/html/article_eclipse2.html | 229 - ChibiOS_2.0.8/docs/html/article_events.html | 73 - .../docs/html/article_integrationguide.html | 94 - .../docs/html/article_interrupts.html | 76 - ChibiOS_2.0.8/docs/html/article_jitter.html | 87 - .../docs/html/article_lifecycle.html | 60 - .../docs/html/article_manage_memory.html | 80 - .../docs/html/article_mutual_exclusion.html | 174 - .../docs/html/article_portguide.html | 95 - .../docs/html/article_roundrobin.html | 55 - ChibiOS_2.0.8/docs/html/article_saveram.html | 90 - ChibiOS_2.0.8/docs/html/article_stacks.html | 86 - ChibiOS_2.0.8/docs/html/article_stop_os.html | 132 - ChibiOS_2.0.8/docs/html/article_timing.html | 91 - ChibiOS_2.0.8/docs/html/article_wakeup.html | 142 - ChibiOS_2.0.8/docs/html/articles.html | 49 - .../docs/html/at91sam7_8h_source.html | 107 - ChibiOS_2.0.8/docs/html/at91sam7__mii_8c.html | 70 - .../docs/html/at91sam7__mii_8c_source.html | 189 - ChibiOS_2.0.8/docs/html/at91sam7__mii_8h.html | 81 - .../docs/html/at91sam7__mii_8h_source.html | 164 - ChibiOS_2.0.8/docs/html/bc_s.png | Bin 705 -> 0 bytes ChibiOS_2.0.8/docs/html/can_8c.html | 79 - ChibiOS_2.0.8/docs/html/can_8c_source.html | 322 - ChibiOS_2.0.8/docs/html/can_8h.html | 105 - ChibiOS_2.0.8/docs/html/can_8h_source.html | 183 - ChibiOS_2.0.8/docs/html/ch_8cpp.html | 56 - ChibiOS_2.0.8/docs/html/ch_8cpp_source.html | 386 - ChibiOS_2.0.8/docs/html/ch_8h.html | 93 - ChibiOS_2.0.8/docs/html/ch_8h_source.html | 146 - ChibiOS_2.0.8/docs/html/ch_8hpp.html | 76 - ChibiOS_2.0.8/docs/html/ch_8hpp_source.html | 669 - ChibiOS_2.0.8/docs/html/chcond_8c.html | 78 - ChibiOS_2.0.8/docs/html/chcond_8c_source.html | 296 - ChibiOS_2.0.8/docs/html/chcond_8h.html | 94 - ChibiOS_2.0.8/docs/html/chcond_8h_source.html | 142 - ChibiOS_2.0.8/docs/html/chconf_8h.html | 130 - ChibiOS_2.0.8/docs/html/chconf_8h_source.html | 538 - ChibiOS_2.0.8/docs/html/chcore__v6m_8c.html | 75 - .../docs/html/chcore__v6m_8c_source.html | 204 - ChibiOS_2.0.8/docs/html/chcore__v6m_8h.html | 107 - .../docs/html/chcore__v6m_8h_source.html | 311 - ChibiOS_2.0.8/docs/html/chcore__v7m_8c.html | 72 - .../docs/html/chcore__v7m_8c_source.html | 234 - ChibiOS_2.0.8/docs/html/chcore__v7m_8h.html | 104 - .../docs/html/chcore__v7m_8h_source.html | 322 - ChibiOS_2.0.8/docs/html/chcoreasm_8s.html | 56 - .../docs/html/chcoreasm_8s_source.html | 288 - ChibiOS_2.0.8/docs/html/chdebug_8c.html | 73 - .../docs/html/chdebug_8c_source.html | 138 - ChibiOS_2.0.8/docs/html/chdebug_8h.html | 76 - .../docs/html/chdebug_8h_source.html | 214 - ChibiOS_2.0.8/docs/html/chevents_8c.html | 90 - .../docs/html/chevents_8c_source.html | 493 - ChibiOS_2.0.8/docs/html/chevents_8h.html | 112 - .../docs/html/chevents_8h_source.html | 208 - ChibiOS_2.0.8/docs/html/chheap_8c.html | 70 - ChibiOS_2.0.8/docs/html/chheap_8c_source.html | 357 - ChibiOS_2.0.8/docs/html/chheap_8h.html | 76 - ChibiOS_2.0.8/docs/html/chheap_8h_source.html | 141 - ChibiOS_2.0.8/docs/html/chinline_8h.html | 56 - .../docs/html/chinline_8h_source.html | 137 - ChibiOS_2.0.8/docs/html/chioch_8h.html | 99 - ChibiOS_2.0.8/docs/html/chioch_8h_source.html | 328 - ChibiOS_2.0.8/docs/html/chlists_8c.html | 74 - .../docs/html/chlists_8c_source.html | 199 - ChibiOS_2.0.8/docs/html/chlists_8h.html | 96 - .../docs/html/chlists_8h_source.html | 169 - ChibiOS_2.0.8/docs/html/chmboxes_8c.html | 76 - .../docs/html/chmboxes_8c_source.html | 320 - ChibiOS_2.0.8/docs/html/chmboxes_8h.html | 90 - .../docs/html/chmboxes_8h_source.html | 194 - ChibiOS_2.0.8/docs/html/chmemcore_8c.html | 68 - .../docs/html/chmemcore_8c_source.html | 173 - ChibiOS_2.0.8/docs/html/chmemcore_8h.html | 81 - .../docs/html/chmemcore_8h_source.html | 122 - ChibiOS_2.0.8/docs/html/chmempools_8c.html | 70 - .../docs/html/chmempools_8c_source.html | 184 - ChibiOS_2.0.8/docs/html/chmempools_8h.html | 83 - .../docs/html/chmempools_8h_source.html | 144 - ChibiOS_2.0.8/docs/html/chmsg_8c.html | 68 - ChibiOS_2.0.8/docs/html/chmsg_8c_source.html | 201 - ChibiOS_2.0.8/docs/html/chmsg_8h.html | 74 - ChibiOS_2.0.8/docs/html/chmsg_8h_source.html | 111 - ChibiOS_2.0.8/docs/html/chmtx_8c.html | 76 - ChibiOS_2.0.8/docs/html/chmtx_8c_source.html | 392 - ChibiOS_2.0.8/docs/html/chmtx_8h.html | 94 - ChibiOS_2.0.8/docs/html/chmtx_8h_source.html | 139 - ChibiOS_2.0.8/docs/html/chqueues_8c.html | 80 - .../docs/html/chqueues_8c_source.html | 407 - ChibiOS_2.0.8/docs/html/chqueues_8h.html | 131 - .../docs/html/chqueues_8h_source.html | 293 - ChibiOS_2.0.8/docs/html/chregistry_8c.html | 64 - .../docs/html/chregistry_8c_source.html | 158 - ChibiOS_2.0.8/docs/html/chregistry_8h.html | 70 - .../docs/html/chregistry_8h_source.html | 120 - ChibiOS_2.0.8/docs/html/chschd_8c.html | 81 - ChibiOS_2.0.8/docs/html/chschd_8c_source.html | 326 - ChibiOS_2.0.8/docs/html/chschd_8h.html | 117 - ChibiOS_2.0.8/docs/html/chschd_8h_source.html | 234 - ChibiOS_2.0.8/docs/html/chsem_8c.html | 80 - ChibiOS_2.0.8/docs/html/chsem_8c_source.html | 335 - ChibiOS_2.0.8/docs/html/chsem_8h.html | 102 - ChibiOS_2.0.8/docs/html/chsem_8h_source.html | 155 - ChibiOS_2.0.8/docs/html/chstreams_8h.html | 75 - .../docs/html/chstreams_8h_source.html | 155 - ChibiOS_2.0.8/docs/html/chsys_8c.html | 64 - ChibiOS_2.0.8/docs/html/chsys_8c_source.html | 189 - ChibiOS_2.0.8/docs/html/chsys_8h.html | 92 - ChibiOS_2.0.8/docs/html/chsys_8h_source.html | 237 - ChibiOS_2.0.8/docs/html/chthreads_8c.html | 90 - .../docs/html/chthreads_8c_source.html | 566 - ChibiOS_2.0.8/docs/html/chthreads_8h.html | 158 - .../docs/html/chthreads_8h_source.html | 381 - ChibiOS_2.0.8/docs/html/chvt_8c.html | 73 - ChibiOS_2.0.8/docs/html/chvt_8c_source.html | 173 - ChibiOS_2.0.8/docs/html/chvt_8h.html | 101 - ChibiOS_2.0.8/docs/html/chvt_8h_source.html | 198 - .../classchibios__rt_1_1_base_thread.html | 708 - ...ibios__rt_1_1_base_thread__coll__graph.png | Bin 56356 -> 0 bytes ...589beba9bb4c959b3f49a82b24562eb_cgraph.png | Bin 1357 -> 0 bytes ...557c9e6e0b61a7eb848ce928115973d_cgraph.png | Bin 3508 -> 0 bytes ...4de1239fc6517ddf735405dd7fc8463_cgraph.png | Bin 1285 -> 0 bytes ...8012dd4151de3d40aa5139b230ed627_cgraph.png | Bin 3437 -> 0 bytes ...ecedb2d2b646ea4a9261c0e62f16945_cgraph.png | Bin 3620 -> 0 bytes ...c7600b2472318e1406d5c5dbc1a73d5_cgraph.png | Bin 3508 -> 0 bytes ...cde6d5b592476aded69ee10b5adc912_cgraph.png | Bin 1930 -> 0 bytes ...b4a3de70b98980e6836a48f3e97969c_cgraph.png | Bin 4594 -> 0 bytes ...391836cb66a13932044703d1833ae64_cgraph.png | Bin 1339 -> 0 bytes ...824957049b5d62a4d23b0c9758b30a5_cgraph.png | Bin 2037 -> 0 bytes ...8e737914200f075bf02ade85876764d_cgraph.png | Bin 1367 -> 0 bytes ...c119aef948c9050d2e18a5a2686d88d_cgraph.png | Bin 4559 -> 0 bytes ...960dbec72042a9072e35984523694b8_cgraph.png | Bin 2001 -> 0 bytes .../html/classchibios__rt_1_1_cond_var.html | 294 - ...111c4947178c9ef6b15e03f24d2e861_cgraph.png | Bin 3477 -> 0 bytes ...75c5724485b6f47bdf6f1f003154f02_cgraph.png | Bin 3337 -> 0 bytes ...b9e183dd1c97f1a0104f57f47197ecc_cgraph.png | Bin 1159 -> 0 bytes ...7e0b0cb4ac5cbe6bbb56c51539284c8_cgraph.png | Bin 1744 -> 0 bytes ...66a352fb3bc95f07abda728d4ae4906_cgraph.png | Bin 1889 -> 0 bytes .../classchibios__rt_1_1_enhanced_thread.html | 193 - ...s__rt_1_1_enhanced_thread__coll__graph.png | Bin 12352 -> 0 bytes .../docs/html/classchibios__rt_1_1_event.html | 741 - ...77bc72df220068c9d620b8e9f42f2f5_cgraph.png | Bin 1295 -> 0 bytes ...9acaf2436f139a798973308c1929031_cgraph.png | Bin 1371 -> 0 bytes ...870dfce1f2ace0ab434718b0960b960_cgraph.png | Bin 2044 -> 0 bytes ...5bd3220048e77217f5f75af7697d46f_cgraph.png | Bin 1828 -> 0 bytes ...853ef97699efe31a969c7fc200e09a1_cgraph.png | Bin 1843 -> 0 bytes ...65b23d0d212b06107a27f118021238c_cgraph.png | Bin 3451 -> 0 bytes ...8c805f6b615e47050a75b16fd94492d_cgraph.png | Bin 2048 -> 0 bytes ...8fc502561437fec0194653052202b82_cgraph.png | Bin 2017 -> 0 bytes ...a48258fbffb54c6e19bbb9016c4cee1_cgraph.png | Bin 1178 -> 0 bytes ...3c7092d78ac9dda43c109b356826f41_cgraph.png | Bin 1169 -> 0 bytes ...b53e2435cf8f614ea51e3c90334d5ae_cgraph.png | Bin 1862 -> 0 bytes ...de2cfb76dbd552ebb05bc6c6c8b2969_cgraph.png | Bin 1260 -> 0 bytes .../docs/html/classchibios__rt_1_1_mutex.html | 269 - ...0b2ff557451955a905ecdca2855389b_cgraph.png | Bin 1127 -> 0 bytes ...3150e8fa423f7e042661d350d238b84_cgraph.png | Bin 3249 -> 0 bytes ...726d7244983f7be74fcfa9cfb63745f_cgraph.png | Bin 1658 -> 0 bytes ...87ecfd207fd25760a3c07517b69c148_cgraph.png | Bin 1733 -> 0 bytes .../html/classchibios__rt_1_1_semaphore.html | 364 - ...804607c066a7a373188cb8220203f8f_cgraph.png | Bin 1189 -> 0 bytes ...02630db53afefbe5c419ee6d2eddab1_cgraph.png | Bin 3380 -> 0 bytes ...f2ad5962e43c82fc56b1e0e76a58c9a_cgraph.png | Bin 9924 -> 0 bytes ...89b4780f60d73929bd77a652b526868_cgraph.png | Bin 1831 -> 0 bytes ...fb1b068e95063f490b27cc3b467f63f_cgraph.png | Bin 1731 -> 0 bytes ...cb934714ebe5658c857ef1021dd5f2b_cgraph.png | Bin 3484 -> 0 bytes .../html/classchibios__rt_1_1_system.html | 184 - ...68a84ccf6f537f7ba732829cbb29281_cgraph.png | Bin 18383 -> 0 bytes .../docs/html/classchibios__rt_1_1_timer.html | 223 - ...65b7fbc2a055152c39505ae91ea9754_cgraph.png | Bin 1174 -> 0 bytes ...75cb7ce8108c24336016a94efd8a787_cgraph.png | Bin 1129 -> 0 bytes ChibiOS_2.0.8/docs/html/classes.html | 63 - ChibiOS_2.0.8/docs/html/closed.png | Bin 126 -> 0 bytes ChibiOS_2.0.8/docs/html/concepts.html | 149 - ChibiOS_2.0.8/docs/html/credits.html | 81 - ChibiOS_2.0.8/docs/html/custom.css | 441 - ChibiOS_2.0.8/docs/html/doxygen.png | Bin 3942 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse003.jpg | Bin 42621 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse004.jpg | Bin 49163 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse005.jpg | Bin 45472 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse006.jpg | Bin 15292 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse007.jpg | Bin 61644 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse008.jpg | Bin 19051 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse009.jpg | Bin 33845 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse010.jpg | Bin 29039 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse011.jpg | Bin 34286 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse012.jpg | Bin 12243 -> 0 bytes ChibiOS_2.0.8/docs/html/eclipse013.jpg | Bin 60847 -> 0 bytes ChibiOS_2.0.8/docs/html/evtimer_8c.html | 65 - .../docs/html/evtimer_8c_source.html | 120 - ChibiOS_2.0.8/docs/html/evtimer_8h.html | 73 - .../docs/html/evtimer_8h_source.html | 113 - ChibiOS_2.0.8/docs/html/files.html | 263 - ChibiOS_2.0.8/docs/html/ftv2blank.png | Bin 174 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2doc.png | Bin 255 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2folderclosed.png | Bin 259 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2folderopen.png | Bin 261 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2lastnode.png | Bin 233 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2link.png | Bin 358 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2mlastnode.png | Bin 160 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2mnode.png | Bin 194 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2node.png | Bin 235 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2plastnode.png | Bin 165 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2pnode.png | Bin 200 -> 0 bytes ChibiOS_2.0.8/docs/html/ftv2vertline.png | Bin 229 -> 0 bytes ChibiOS_2.0.8/docs/html/functions.html | 133 - ChibiOS_2.0.8/docs/html/functions_0x62.html | 92 - ChibiOS_2.0.8/docs/html/functions_0x63.html | 204 - ChibiOS_2.0.8/docs/html/functions_0x64.html | 88 - ChibiOS_2.0.8/docs/html/functions_0x65.html | 109 - ChibiOS_2.0.8/docs/html/functions_0x67.html | 85 - ChibiOS_2.0.8/docs/html/functions_0x68.html | 88 - ChibiOS_2.0.8/docs/html/functions_0x69.html | 85 - ChibiOS_2.0.8/docs/html/functions_0x6c.html | 80 - ChibiOS_2.0.8/docs/html/functions_0x6d.html | 145 - ChibiOS_2.0.8/docs/html/functions_0x6e.html | 82 - ChibiOS_2.0.8/docs/html/functions_0x6f.html | 85 - ChibiOS_2.0.8/docs/html/functions_0x70.html | 241 - ChibiOS_2.0.8/docs/html/functions_0x71.html | 94 - ChibiOS_2.0.8/docs/html/functions_0x72.html | 122 - ChibiOS_2.0.8/docs/html/functions_0x73.html | 212 - ChibiOS_2.0.8/docs/html/functions_0x74.html | 109 - ChibiOS_2.0.8/docs/html/functions_0x75.html | 89 - ChibiOS_2.0.8/docs/html/functions_0x76.html | 104 - ChibiOS_2.0.8/docs/html/functions_0x77.html | 109 - ChibiOS_2.0.8/docs/html/functions_func.html | 262 - ChibiOS_2.0.8/docs/html/functions_vars.html | 131 - .../docs/html/functions_vars_0x62.html | 83 - .../docs/html/functions_vars_0x63.html | 196 - .../docs/html/functions_vars_0x64.html | 83 - .../docs/html/functions_vars_0x65.html | 98 - .../docs/html/functions_vars_0x67.html | 77 - .../docs/html/functions_vars_0x68.html | 86 - .../docs/html/functions_vars_0x6d.html | 137 - .../docs/html/functions_vars_0x6e.html | 80 - .../docs/html/functions_vars_0x6f.html | 83 - .../docs/html/functions_vars_0x70.html | 236 - .../docs/html/functions_vars_0x71.html | 92 - .../docs/html/functions_vars_0x72.html | 104 - .../docs/html/functions_vars_0x73.html | 185 - .../docs/html/functions_vars_0x74.html | 101 - .../docs/html/functions_vars_0x75.html | 77 - .../docs/html/functions_vars_0x76.html | 102 - .../docs/html/functions_vars_0x77.html | 77 - ChibiOS_2.0.8/docs/html/globals.html | 196 - ChibiOS_2.0.8/docs/html/globals_0x61.html | 236 - ChibiOS_2.0.8/docs/html/globals_0x62.html | 206 - ChibiOS_2.0.8/docs/html/globals_0x63.html | 1077 -- ChibiOS_2.0.8/docs/html/globals_0x64.html | 150 - ChibiOS_2.0.8/docs/html/globals_0x65.html | 165 - ChibiOS_2.0.8/docs/html/globals_0x66.html | 97 - ChibiOS_2.0.8/docs/html/globals_0x68.html | 125 - ChibiOS_2.0.8/docs/html/globals_0x69.html | 241 - ChibiOS_2.0.8/docs/html/globals_0x6c.html | 221 - ChibiOS_2.0.8/docs/html/globals_0x6d.html | 296 - ChibiOS_2.0.8/docs/html/globals_0x6e.html | 107 - ChibiOS_2.0.8/docs/html/globals_0x6f.html | 92 - ChibiOS_2.0.8/docs/html/globals_0x70.html | 714 - ChibiOS_2.0.8/docs/html/globals_0x71.html | 104 - ChibiOS_2.0.8/docs/html/globals_0x72.html | 146 - ChibiOS_2.0.8/docs/html/globals_0x73.html | 942 -- ChibiOS_2.0.8/docs/html/globals_0x74.html | 319 - ChibiOS_2.0.8/docs/html/globals_0x75.html | 235 - ChibiOS_2.0.8/docs/html/globals_0x76.html | 114 - ChibiOS_2.0.8/docs/html/globals_0x77.html | 97 - ChibiOS_2.0.8/docs/html/globals_defs.html | 148 - .../docs/html/globals_defs_0x61.html | 158 - .../docs/html/globals_defs_0x62.html | 196 - .../docs/html/globals_defs_0x63.html | 646 - .../docs/html/globals_defs_0x64.html | 137 - .../docs/html/globals_defs_0x65.html | 131 - .../docs/html/globals_defs_0x66.html | 93 - .../docs/html/globals_defs_0x68.html | 106 - .../docs/html/globals_defs_0x69.html | 199 - .../docs/html/globals_defs_0x6c.html | 202 - .../docs/html/globals_defs_0x6d.html | 142 - .../docs/html/globals_defs_0x6e.html | 97 - .../docs/html/globals_defs_0x6f.html | 88 - .../docs/html/globals_defs_0x70.html | 514 - .../docs/html/globals_defs_0x71.html | 97 - .../docs/html/globals_defs_0x72.html | 127 - .../docs/html/globals_defs_0x73.html | 662 - .../docs/html/globals_defs_0x74.html | 237 - .../docs/html/globals_defs_0x75.html | 216 - .../docs/html/globals_defs_0x77.html | 96 - ChibiOS_2.0.8/docs/html/globals_enum.html | 74 - ChibiOS_2.0.8/docs/html/globals_eval.html | 143 - ChibiOS_2.0.8/docs/html/globals_func.html | 114 - .../docs/html/globals_func_0x61.html | 120 - .../docs/html/globals_func_0x63.html | 471 - .../docs/html/globals_func_0x64.html | 88 - .../docs/html/globals_func_0x65.html | 82 - .../docs/html/globals_func_0x66.html | 79 - .../docs/html/globals_func_0x68.html | 94 - .../docs/html/globals_func_0x69.html | 79 - .../docs/html/globals_func_0x6c.html | 94 - .../docs/html/globals_func_0x6d.html | 187 - .../docs/html/globals_func_0x6e.html | 85 - .../docs/html/globals_func_0x70.html | 180 - .../docs/html/globals_func_0x71.html | 79 - .../docs/html/globals_func_0x72.html | 79 - .../docs/html/globals_func_0x73.html | 247 - .../docs/html/globals_func_0x74.html | 112 - .../docs/html/globals_func_0x76.html | 82 - ChibiOS_2.0.8/docs/html/globals_type.html | 409 - ChibiOS_2.0.8/docs/html/globals_vars.html | 240 - ChibiOS_2.0.8/docs/html/goals.html | 71 - ChibiOS_2.0.8/docs/html/graph_legend.html | 102 - ChibiOS_2.0.8/docs/html/graph_legend.png | Bin 13377 -> 0 bytes ChibiOS_2.0.8/docs/html/group___a_d_c.html | 491 - ChibiOS_2.0.8/docs/html/group___a_d_c.png | Bin 1507 -> 0 bytes .../docs/html/group___a_d_c___l_l_d.html | 285 - .../docs/html/group___a_d_c___l_l_d.png | Bin 2104 -> 0 bytes ...26ac46dfe36031ab177e35f3aff5b09_cgraph.png | Bin 1900 -> 0 bytes ...caf934a28b65e6a5eda3e882ca06845_cgraph.png | Bin 1061 -> 0 bytes ...2f8b4434b8199323b1469e0479de7f8_cgraph.png | Bin 1060 -> 0 bytes ...ce14d8f240e85715cded02c85b6585a_cgraph.png | Bin 9232 -> 0 bytes ...7f619e304c79c17f19221d05138d405_cgraph.png | Bin 1077 -> 0 bytes ...b9905e3fcd0f053ca1e07e9686bf641_cgraph.png | Bin 1274 -> 0 bytes ...d645b17cf0581bcaa22c56011c775e4_cgraph.png | Bin 965 -> 0 bytes ChibiOS_2.0.8/docs/html/group___a_r_m7.html | 144 - ChibiOS_2.0.8/docs/html/group___a_r_m7.png | Bin 9150 -> 0 bytes .../docs/html/group___a_r_m7___c_o_n_f.html | 66 - .../docs/html/group___a_r_m7___c_o_n_f.png | Bin 1146 -> 0 bytes .../docs/html/group___a_r_m7___c_o_r_e.html | 1057 -- .../docs/html/group___a_r_m7___c_o_r_e.png | Bin 1139 -> 0 bytes .../html/group___a_r_m7___s_t_a_r_t_u_p.html | 86 - .../html/group___a_r_m7___s_t_a_r_t_u_p.png | Bin 1115 -> 0 bytes .../docs/html/group___a_r_m_c_mx.html | 137 - .../docs/html/group___a_r_m_c_mx.png | Bin 26733 -> 0 bytes .../html/group___a_r_m_c_mx___c_o_n_f.html | 68 - .../html/group___a_r_m_c_mx___c_o_n_f.png | Bin 1192 -> 0 bytes .../html/group___a_r_m_c_mx___c_o_r_e.html | 912 -- .../html/group___a_r_m_c_mx___c_o_r_e.png | Bin 3593 -> 0 bytes .../html/group___a_r_m_c_mx___l_p_c11xx.html | 136 - .../html/group___a_r_m_c_mx___l_p_c11xx.png | Bin 1320 -> 0 bytes .../html/group___a_r_m_c_mx___l_p_c13xx.html | 136 - .../html/group___a_r_m_c_mx___l_p_c13xx.png | Bin 1323 -> 0 bytes .../html/group___a_r_m_c_mx___n_v_i_c.html | 439 - .../html/group___a_r_m_c_mx___n_v_i_c.png | Bin 1135 -> 0 bytes .../group___a_r_m_c_mx___s_t_a_r_t_u_p.html | 83 - .../group___a_r_m_c_mx___s_t_a_r_t_u_p.png | Bin 1197 -> 0 bytes .../group___a_r_m_c_mx___s_t_m32_f10x.html | 136 - .../group___a_r_m_c_mx___s_t_m32_f10x.png | Bin 1367 -> 0 bytes .../group___a_r_m_c_mx___v6_m___c_o_r_e.html | 707 - .../group___a_r_m_c_mx___v6_m___c_o_r_e.png | Bin 1383 -> 0 bytes ...3ce719bfc3197594c741fab5d09ae0c_cgraph.png | Bin 1257 -> 0 bytes .../group___a_r_m_c_mx___v7_m___c_o_r_e.html | 741 - .../group___a_r_m_c_mx___v7_m___c_o_r_e.png | Bin 1376 -> 0 bytes ...3ce719bfc3197594c741fab5d09ae0c_cgraph.png | Bin 1257 -> 0 bytes ...870f7fd669dc9419dda0f9972ecc0d8_cgraph.png | Bin 1175 -> 0 bytes ...fa627cc34d473a5c1b00810798c1592_cgraph.png | Bin 1030 -> 0 bytes .../docs/html/group___a_t91_s_a_m7.html | 95 - .../docs/html/group___a_t91_s_a_m7.png | Bin 10298 -> 0 bytes .../html/group___a_t91_s_a_m7___h_a_l.html | 207 - .../html/group___a_t91_s_a_m7___h_a_l.png | Bin 1320 -> 0 bytes .../html/group___a_t91_s_a_m7___m_a_c.html | 542 - .../html/group___a_t91_s_a_m7___m_a_c.png | Bin 2465 -> 0 bytes .../html/group___a_t91_s_a_m7___m_i_i.html | 282 - .../html/group___a_t91_s_a_m7___m_i_i.png | Bin 1284 -> 0 bytes .../html/group___a_t91_s_a_m7___p_a_l.html | 689 - .../html/group___a_t91_s_a_m7___p_a_l.png | Bin 11740 -> 0 bytes .../group___a_t91_s_a_m7___s_e_r_i_a_l.html | 403 - .../group___a_t91_s_a_m7___s_e_r_i_a_l.png | Bin 18482 -> 0 bytes ChibiOS_2.0.8/docs/html/group___a_v_r.html | 95 - ChibiOS_2.0.8/docs/html/group___a_v_r.png | Bin 4673 -> 0 bytes .../docs/html/group___a_v_r___c_o_n_f.html | 64 - .../docs/html/group___a_v_r___c_o_n_f.png | Bin 1169 -> 0 bytes .../docs/html/group___a_v_r___c_o_r_e.html | 1015 -- .../docs/html/group___a_v_r___c_o_r_e.png | Bin 1191 -> 0 bytes .../html/group___a_v_r___d_r_i_v_e_r_s.html | 72 - .../html/group___a_v_r___d_r_i_v_e_r_s.png | Bin 2719 -> 0 bytes .../docs/html/group___a_v_r___h_a_l.html | 108 - .../docs/html/group___a_v_r___h_a_l.png | Bin 1148 -> 0 bytes .../html/group___a_v_r___s_e_r_i_a_l.html | 330 - .../docs/html/group___a_v_r___s_e_r_i_a_l.png | Bin 17769 -> 0 bytes ChibiOS_2.0.8/docs/html/group___c_a_n.html | 719 - ChibiOS_2.0.8/docs/html/group___c_a_n.png | Bin 1505 -> 0 bytes .../docs/html/group___c_a_n___l_l_d.html | 446 - .../docs/html/group___c_a_n___l_l_d.png | Bin 2364 -> 0 bytes ...5d2448864b2cae4674ed7e6f3c576b8_cgraph.png | Bin 1076 -> 0 bytes ...9737d4ae5be724bf791a309e8a28dff_cgraph.png | Bin 4997 -> 0 bytes ...d3efc34f7704ab23c293aac2be47764_cgraph.png | Bin 962 -> 0 bytes ...e89a7d246119e077d27431a02586133_cgraph.png | Bin 8590 -> 0 bytes ...57d845167f6ab4f224b036860411db5_cgraph.png | Bin 4665 -> 0 bytes ...7caf4f277c09588c225ea2328a74cba_cgraph.png | Bin 4974 -> 0 bytes ...9c686d19b4319ef586af3631b779c6c_cgraph.png | Bin 3688 -> 0 bytes ...f8c892ca4bd2544d03be8a690885aef_cgraph.png | Bin 1074 -> 0 bytes ChibiOS_2.0.8/docs/html/group___h_a_l.html | 112 - ChibiOS_2.0.8/docs/html/group___h_a_l.png | Bin 3079 -> 0 bytes .../docs/html/group___h_a_l___c_o_n_f.html | 215 - .../docs/html/group___h_a_l___c_o_n_f.png | Bin 1057 -> 0 bytes .../docs/html/group___h_a_l___l_l_d.html | 110 - .../docs/html/group___h_a_l___l_l_d.png | Bin 1100 -> 0 bytes ...d89c1650df524d95aef39b8bc38170d_cgraph.png | Bin 18550 -> 0 bytes ChibiOS_2.0.8/docs/html/group___i_o.html | 132 - ChibiOS_2.0.8/docs/html/group___i_o.png | Bin 18059 -> 0 bytes .../docs/html/group___l_p_c11xx.html | 83 - ChibiOS_2.0.8/docs/html/group___l_p_c11xx.png | Bin 4096 -> 0 bytes .../docs/html/group___l_p_c11xx___h_a_l.html | 607 - .../docs/html/group___l_p_c11xx___h_a_l.png | Bin 1234 -> 0 bytes .../docs/html/group___l_p_c11xx___p_a_l.html | 851 - .../docs/html/group___l_p_c11xx___p_a_l.png | Bin 11747 -> 0 bytes .../html/group___l_p_c11xx___s_e_r_i_a_l.html | 332 - .../html/group___l_p_c11xx___s_e_r_i_a_l.png | Bin 18198 -> 0 bytes .../docs/html/group___l_p_c13xx.html | 83 - ChibiOS_2.0.8/docs/html/group___l_p_c13xx.png | Bin 4119 -> 0 bytes .../docs/html/group___l_p_c13xx___h_a_l.html | 607 - .../docs/html/group___l_p_c13xx___h_a_l.png | Bin 1255 -> 0 bytes .../docs/html/group___l_p_c13xx___p_a_l.html | 851 - .../docs/html/group___l_p_c13xx___p_a_l.png | Bin 11771 -> 0 bytes .../html/group___l_p_c13xx___s_e_r_i_a_l.html | 332 - .../html/group___l_p_c13xx___s_e_r_i_a_l.png | Bin 18196 -> 0 bytes .../docs/html/group___l_p_c214x.html | 97 - ChibiOS_2.0.8/docs/html/group___l_p_c214x.png | Bin 8858 -> 0 bytes .../docs/html/group___l_p_c214x___h_a_l.html | 186 - .../docs/html/group___l_p_c214x___h_a_l.png | Bin 1271 -> 0 bytes .../docs/html/group___l_p_c214x___p_a_l.html | 714 - .../docs/html/group___l_p_c214x___p_a_l.png | Bin 11763 -> 0 bytes .../html/group___l_p_c214x___s_e_r_i_a_l.html | 417 - .../html/group___l_p_c214x___s_e_r_i_a_l.png | Bin 18203 -> 0 bytes .../docs/html/group___l_p_c214x___s_p_i.html | 486 - .../docs/html/group___l_p_c214x___s_p_i.png | Bin 3935 -> 0 bytes .../docs/html/group___l_p_c214x___v_i_c.html | 132 - .../docs/html/group___l_p_c214x___v_i_c.png | Bin 1184 -> 0 bytes ChibiOS_2.0.8/docs/html/group___m_a_c.html | 609 - ChibiOS_2.0.8/docs/html/group___m_a_c.png | Bin 1599 -> 0 bytes .../docs/html/group___m_a_c___l_l_d.html | 486 - .../docs/html/group___m_a_c___l_l_d.png | Bin 2329 -> 0 bytes ...f692163094614561eace2a8c30938f9_cgraph.png | Bin 1519 -> 0 bytes ...51a33674ef86c2403ac7797fa87805c_cgraph.png | Bin 3705 -> 0 bytes ...d3c3dcea43573cf2b5d674e98a37aa3_cgraph.png | Bin 1235 -> 0 bytes ...f76703cfc76da57feedb57e9d37c8a4_cgraph.png | Bin 994 -> 0 bytes ...4d60b00ad9794d52da6833e18c9ec70_cgraph.png | Bin 1098 -> 0 bytes ...c6470b965aef1ee65bc6dd24c71bc5c_cgraph.png | Bin 1446 -> 0 bytes ...304721038db1d7c0cb616c9c4d3f0ce_cgraph.png | Bin 3756 -> 0 bytes ...5bf748233450f371b5a88f2accf87e1_cgraph.png | Bin 1273 -> 0 bytes .../docs/html/group___m_m_c___s_p_i.html | 958 -- .../docs/html/group___m_m_c___s_p_i.png | Bin 1044 -> 0 bytes ...76506461b42641a9fe632cc3e72dab5_cgraph.png | Bin 4579 -> 0 bytes ...7833cde77794f914e4802c7e65281a5_cgraph.png | Bin 3030 -> 0 bytes ...aae8e8af4ea0c35c677fa472fb36318_cgraph.png | Bin 3034 -> 0 bytes ...c62caa5d008460e7319fb2c36518ddc_cgraph.png | Bin 5593 -> 0 bytes ...e02b9210a8d3d9f8465b8000983dadf_cgraph.png | Bin 5439 -> 0 bytes ...031c8222f92a0c6632b36ff943fe825_cgraph.png | Bin 5588 -> 0 bytes ...ce0adb181138efc1f835aff6d8eb203_cgraph.png | Bin 7973 -> 0 bytes ...ff4f12fa759c3cb4aca2b64b11f1d22_cgraph.png | Bin 3440 -> 0 bytes ...90f252316351a93ec38b11f7eaf1f16_cgraph.png | Bin 1605 -> 0 bytes ...84abdd53540f03262822aa1f9a213b5_cgraph.png | Bin 3699 -> 0 bytes ...55b97f76be81f4ce5cde415f3131400_cgraph.png | Bin 3711 -> 0 bytes ChibiOS_2.0.8/docs/html/group___m_s_p430.html | 97 - ChibiOS_2.0.8/docs/html/group___m_s_p430.png | Bin 4515 -> 0 bytes .../docs/html/group___m_s_p430___c_o_n_f.html | 64 - .../docs/html/group___m_s_p430___c_o_n_f.png | Bin 1118 -> 0 bytes .../docs/html/group___m_s_p430___c_o_r_e.html | 1039 -- .../docs/html/group___m_s_p430___c_o_r_e.png | Bin 1105 -> 0 bytes .../group___m_s_p430___d_r_i_v_e_r_s.html | 77 - .../html/group___m_s_p430___d_r_i_v_e_r_s.png | Bin 4946 -> 0 bytes .../docs/html/group___m_s_p430___h_a_l.html | 177 - .../docs/html/group___m_s_p430___h_a_l.png | Bin 1223 -> 0 bytes .../docs/html/group___m_s_p430___p_a_l.html | 600 - .../docs/html/group___m_s_p430___p_a_l.png | Bin 11629 -> 0 bytes .../html/group___m_s_p430___s_e_r_i_a_l.html | 328 - .../html/group___m_s_p430___s_e_r_i_a_l.png | Bin 18237 -> 0 bytes ChibiOS_2.0.8/docs/html/group___p_a_l.html | 1348 -- ChibiOS_2.0.8/docs/html/group___p_a_l.png | Bin 1542 -> 0 bytes .../docs/html/group___p_a_l___l_l_d.html | 880 - .../docs/html/group___p_a_l___l_l_d.png | Bin 1131 -> 0 bytes ChibiOS_2.0.8/docs/html/group___p_p_c.html | 104 - ChibiOS_2.0.8/docs/html/group___p_p_c.png | Bin 6553 -> 0 bytes .../docs/html/group___p_p_c___c_o_n_f.html | 64 - .../docs/html/group___p_p_c___c_o_n_f.png | Bin 1078 -> 0 bytes .../docs/html/group___p_p_c___c_o_r_e.html | 1146 -- .../docs/html/group___p_p_c___c_o_r_e.png | Bin 1100 -> 0 bytes .../html/group___p_p_c___s_t_a_r_t_u_p.html | 84 - .../html/group___p_p_c___s_t_a_r_t_u_p.png | Bin 1108 -> 0 bytes ChibiOS_2.0.8/docs/html/group___p_w_m.html | 1249 -- ChibiOS_2.0.8/docs/html/group___p_w_m.png | Bin 4270 -> 0 bytes .../docs/html/group___p_w_m___l_l_d.html | 533 - .../docs/html/group___p_w_m___l_l_d.png | Bin 3738 -> 0 bytes ...c8ae46921c4ae7d57bd44dd994e10bd_cgraph.png | Bin 1006 -> 0 bytes ...8b759363af69a6aaee37a362ed5bfd2_cgraph.png | Bin 1151 -> 0 bytes ...cb5729a65c0996584808e4f93b28a0d_cgraph.png | Bin 1081 -> 0 bytes ...a4d0d8a47883efe286a332cade14080_cgraph.png | Bin 1058 -> 0 bytes ...a4d803d25a5326b48b3713ffd5fce53_cgraph.png | Bin 1178 -> 0 bytes ...c14dc1b026c78809440281786aceda3_cgraph.png | Bin 1108 -> 0 bytes ...2679d11833a4ea9df5a9ed2e4a2c2e7_cgraph.png | Bin 1303 -> 0 bytes ...d6c45693467da77ab13edca8420620d_cgraph.png | Bin 1233 -> 0 bytes .../docs/html/group___s_e_r_i_a_l.html | 1223 -- .../docs/html/group___s_e_r_i_a_l.png | Bin 1621 -> 0 bytes .../html/group___s_e_r_i_a_l___l_l_d.html | 225 - .../docs/html/group___s_e_r_i_a_l___l_l_d.png | Bin 18151 -> 0 bytes ...e77658b4f3b559927705dc8fbfbdfad_cgraph.png | Bin 1040 -> 0 bytes ...c0462b840ea6364ca266a8d3fcb0945_cgraph.png | Bin 1701 -> 0 bytes ...94544bc991e2b85a601459463604346_cgraph.png | Bin 6152 -> 0 bytes ...b106a30f8007afdf9eeaf8681dbd3cf_cgraph.png | Bin 8960 -> 0 bytes ...b9838adcf51106f4e481f41a851cc34_cgraph.png | Bin 3720 -> 0 bytes ...ed9c1cfde941c7614183b1c887e862b_cgraph.png | Bin 954 -> 0 bytes ...a1753aa30a6b79cc7e6de3e8a156fdc_cgraph.png | Bin 3850 -> 0 bytes .../docs/html/group___s_h_e_l_l.html | 400 - ChibiOS_2.0.8/docs/html/group___s_h_e_l_l.png | Bin 1024 -> 0 bytes .../group___s_p_c563___d_r_i_v_e_r_s.html | 72 - .../html/group___s_p_c563___d_r_i_v_e_r_s.png | Bin 3235 -> 0 bytes .../docs/html/group___s_p_c563___h_a_l.html | 1031 -- .../docs/html/group___s_p_c563___h_a_l.png | Bin 1259 -> 0 bytes .../html/group___s_p_c563___s_e_r_i_a_l.html | 509 - .../html/group___s_p_c563___s_e_r_i_a_l.png | Bin 17995 -> 0 bytes ChibiOS_2.0.8/docs/html/group___s_p_i.html | 733 - ChibiOS_2.0.8/docs/html/group___s_p_i.png | Bin 1620 -> 0 bytes .../docs/html/group___s_p_i___l_l_d.html | 409 - .../docs/html/group___s_p_i___l_l_d.png | Bin 3758 -> 0 bytes ...0809152c869db80192aa3e04266a99a_cgraph.png | Bin 1086 -> 0 bytes ...b04a2410ef4323ee4e37c63f320c18f_cgraph.png | Bin 5359 -> 0 bytes ...82cfbdffd2df57cf3843d45164e8bfc_cgraph.png | Bin 1058 -> 0 bytes ...c484a97cdec02c5dbf46a11245e3395_cgraph.png | Bin 980 -> 0 bytes ...3889a7d4c473f653596f8c0acafce2a_cgraph.png | Bin 1085 -> 0 bytes ...752c9f736f8de774a5bef6dfe2aae2e_cgraph.png | Bin 1037 -> 0 bytes ...03cec73f6dd8d3d1f18fb6a61b8255a_cgraph.png | Bin 3477 -> 0 bytes ...7a7bdc554b8e8fdfc77064e67689fcf_cgraph.png | Bin 2222 -> 0 bytes ...3a359eea03e68e95899886ae93a06e4_cgraph.png | Bin 1026 -> 0 bytes ...d99ad823b391dde114f04dedafe5e80_cgraph.png | Bin 1120 -> 0 bytes ...291c012872da9c89dec23581f701b5f_cgraph.png | Bin 1105 -> 0 bytes ...1c59f3fd2f85620a5253c23d9586095_cgraph.png | Bin 1194 -> 0 bytes ChibiOS_2.0.8/docs/html/group___s_t_m32.html | 113 - ChibiOS_2.0.8/docs/html/group___s_t_m32.png | Bin 19398 -> 0 bytes .../docs/html/group___s_t_m32___a_d_c.html | 807 - .../docs/html/group___s_t_m32___a_d_c.png | Bin 2210 -> 0 bytes ...27ca25370379b53e77a820e7bfee540_cgraph.png | Bin 4592 -> 0 bytes .../docs/html/group___s_t_m32___c_a_n.html | 667 - .../docs/html/group___s_t_m32___c_a_n.png | Bin 2408 -> 0 bytes .../docs/html/group___s_t_m32___d_m_a.html | 184 - .../docs/html/group___s_t_m32___d_m_a.png | Bin 1231 -> 0 bytes .../docs/html/group___s_t_m32___h_a_l.html | 182 - .../docs/html/group___s_t_m32___h_a_l.png | Bin 3482 -> 0 bytes .../docs/html/group___s_t_m32___p_a_l.html | 843 - .../docs/html/group___s_t_m32___p_a_l.png | Bin 11302 -> 0 bytes .../docs/html/group___s_t_m32___p_w_m.html | 357 - .../docs/html/group___s_t_m32___p_w_m.png | Bin 1241 -> 0 bytes ...8b759363af69a6aaee37a362ed5bfd2_cgraph.png | Bin 1151 -> 0 bytes ...cb5729a65c0996584808e4f93b28a0d_cgraph.png | Bin 1081 -> 0 bytes ...a4d803d25a5326b48b3713ffd5fce53_cgraph.png | Bin 1178 -> 0 bytes .../html/group___s_t_m32___s_e_r_i_a_l.html | 597 - .../html/group___s_t_m32___s_e_r_i_a_l.png | Bin 18110 -> 0 bytes .../docs/html/group___s_t_m32___s_p_i.html | 713 - .../docs/html/group___s_t_m32___s_p_i.png | Bin 3770 -> 0 bytes .../html/group___s_t_m32_f103___h_a_l.html | 2139 --- .../html/group___s_t_m32_f103___h_a_l.png | Bin 1305 -> 0 bytes .../group___s_t_m32_f10_x___c_l___h_a_l.html | 2406 --- .../group___s_t_m32_f10_x___c_l___h_a_l.png | Bin 1357 -> 0 bytes ChibiOS_2.0.8/docs/html/group___s_t_m8.html | 97 - ChibiOS_2.0.8/docs/html/group___s_t_m8.png | Bin 4434 -> 0 bytes .../docs/html/group___s_t_m8___c_o_n_f.html | 63 - .../docs/html/group___s_t_m8___c_o_n_f.png | Bin 1070 -> 0 bytes .../docs/html/group___s_t_m8___c_o_r_e.html | 1276 -- .../docs/html/group___s_t_m8___c_o_r_e.png | Bin 1423 -> 0 bytes ...fa627cc34d473a5c1b00810798c1592_cgraph.png | Bin 1030 -> 0 bytes .../html/group___s_t_m8___d_r_i_v_e_r_s.html | 77 - .../html/group___s_t_m8___d_r_i_v_e_r_s.png | Bin 4622 -> 0 bytes .../docs/html/group___s_t_m8___h_a_l.html | 509 - .../docs/html/group___s_t_m8___h_a_l.png | Bin 1183 -> 0 bytes .../docs/html/group___s_t_m8___p_a_l.html | 668 - .../docs/html/group___s_t_m8___p_a_l.png | Bin 11479 -> 0 bytes .../html/group___s_t_m8___s_e_r_i_a_l.html | 480 - .../html/group___s_t_m8___s_e_r_i_a_l.png | Bin 17937 -> 0 bytes ChibiOS_2.0.8/docs/html/group__base.html | 63 - ChibiOS_2.0.8/docs/html/group__base.png | Bin 7527 -> 0 bytes ChibiOS_2.0.8/docs/html/group__condvars.html | 598 - ChibiOS_2.0.8/docs/html/group__condvars.png | Bin 1183 -> 0 bytes ...7a0c55ac1002a64e8c7f9b7e3ca1caf_cgraph.png | Bin 10081 -> 0 bytes ...66f912bc9b09b133fae862993004ffe_cgraph.png | Bin 9982 -> 0 bytes ...cf1f4697985d81ee089b042391df6fc_cgraph.png | Bin 2430 -> 0 bytes ...0c24a8060a884313efe82b8404e77f6_cgraph.png | Bin 6960 -> 0 bytes ...b9d882c348124fed46a1afc3db6c02c_cgraph.png | Bin 2349 -> 0 bytes ...cf6ebe4c9f28cb206fab14984a18d29_cgraph.png | Bin 22381 -> 0 bytes ...6357d80b01ed8d225ef1e30a66248f9_cgraph.png | Bin 15586 -> 0 bytes ...ddadb68e2a2ce061c7df0d647da9996_cgraph.png | Bin 4391 -> 0 bytes ChibiOS_2.0.8/docs/html/group__config.html | 870 - ChibiOS_2.0.8/docs/html/group__config.png | Bin 1023 -> 0 bytes ChibiOS_2.0.8/docs/html/group__core.html | 706 - ChibiOS_2.0.8/docs/html/group__core.png | Bin 1047 -> 0 bytes .../docs/html/group__cpp__library.html | 59 - .../docs/html/group__cpp__library.png | Bin 1054 -> 0 bytes .../docs/html/group__data__streams.html | 209 - .../docs/html/group__data__streams.png | Bin 1119 -> 0 bytes ChibiOS_2.0.8/docs/html/group__debug.html | 387 - ChibiOS_2.0.8/docs/html/group__debug.png | Bin 968 -> 0 bytes .../docs/html/group__event__timer.html | 176 - .../docs/html/group__event__timer.png | Bin 1113 -> 0 bytes ChibiOS_2.0.8/docs/html/group__events.html | 1081 -- ChibiOS_2.0.8/docs/html/group__events.png | Bin 1118 -> 0 bytes ...944a7fc82e7cc15537f5a7c04f457d3_cgraph.png | Bin 5039 -> 0 bytes ...4015af4dd20f74b0f73824ff1c1b2f4_cgraph.png | Bin 3805 -> 0 bytes ...c219038c3e618e2142c6e1601997907_cgraph.png | Bin 1129 -> 0 bytes ...5a812ae99ce83a3689f51d797a038de_cgraph.png | Bin 5853 -> 0 bytes ...7651e22578713ebe355c1213286c2e9_cgraph.png | Bin 3063 -> 0 bytes ...c5c6bf310a08cdc836d23f98a87dbf5_cgraph.png | Bin 3010 -> 0 bytes ...0d702300eecee3d05f83e95b155c3ee_cgraph.png | Bin 5018 -> 0 bytes ...24d9bed5b676b577200c4a8ebe3b8a3_cgraph.png | Bin 1715 -> 0 bytes ...d731d3ed2f037b2409e370676575f8d_cgraph.png | Bin 3060 -> 0 bytes ...690406ccc833e2c9235e7e2041a6715_cgraph.png | Bin 5048 -> 0 bytes ChibiOS_2.0.8/docs/html/group__external.html | 48 - ChibiOS_2.0.8/docs/html/group__heaps.html | 300 - ChibiOS_2.0.8/docs/html/group__heaps.png | Bin 1105 -> 0 bytes ...135c9ddbd1402a4a36ce44df948f4e4_cgraph.png | Bin 2205 -> 0 bytes ...e7a6625a49b6a560a47ae7575575264_cgraph.png | Bin 2271 -> 0 bytes ChibiOS_2.0.8/docs/html/group__internals.html | 521 - ChibiOS_2.0.8/docs/html/group__internals.png | Bin 977 -> 0 bytes .../docs/html/group__io__channels.html | 635 - .../docs/html/group__io__channels.png | Bin 1066 -> 0 bytes .../docs/html/group__io__queues.html | 1344 -- ChibiOS_2.0.8/docs/html/group__io__queues.png | Bin 1079 -> 0 bytes ...a35a7de945e4b56b5fb5f5c8567e296_cgraph.png | Bin 3043 -> 0 bytes ...d3a250e6572526b165d2c61f69230e5_cgraph.png | Bin 1006 -> 0 bytes ...42d0e885ac3a695f5f033a65f49abd0_cgraph.png | Bin 1833 -> 0 bytes ...e90d41fa021107d72b1bed81186aae8_cgraph.png | Bin 1777 -> 0 bytes ...252ca3e5d6ee6d8d323d025365aee59_cgraph.png | Bin 2984 -> 0 bytes ...3b72ba9803de5a20caa84ffd0c193fc_cgraph.png | Bin 2963 -> 0 bytes ...4a5a71f39e94fcfdd88935da92a8ce9_cgraph.png | Bin 2993 -> 0 bytes ...df1926602eb698119990b311b097ad9_cgraph.png | Bin 1831 -> 0 bytes ...df6fc39af7d905c9f23afde14d8d764_cgraph.png | Bin 1856 -> 0 bytes ...2a5a0ef7c488ac02762e76933baa7b1_cgraph.png | Bin 1014 -> 0 bytes .../docs/html/group__io__support.html | 62 - .../docs/html/group__io__support.png | Bin 4276 -> 0 bytes ChibiOS_2.0.8/docs/html/group__kernel.html | 67 - ChibiOS_2.0.8/docs/html/group__kernel.png | Bin 26884 -> 0 bytes .../docs/html/group__kernel__info.html | 155 - .../docs/html/group__kernel__info.png | Bin 1204 -> 0 bytes ChibiOS_2.0.8/docs/html/group__mailboxes.html | 846 - ChibiOS_2.0.8/docs/html/group__mailboxes.png | Bin 1116 -> 0 bytes ...199e224456395c3dbc74dbc889dff94_cgraph.png | Bin 7249 -> 0 bytes ...5c5b8890b78127bc1fa5a324252d5e6_cgraph.png | Bin 4952 -> 0 bytes ...1543bf11d0caa737f5818c67548c055_cgraph.png | Bin 4629 -> 0 bytes ...bafcc634765886f59cf68c0e35d070d_cgraph.png | Bin 4574 -> 0 bytes ...9c91c0b781bec0df3540407d75b1bb3_cgraph.png | Bin 9072 -> 0 bytes ...6514c185ae87c2633132478ea48d689_cgraph.png | Bin 8807 -> 0 bytes ...c562242a8854497a1f9539cb9ffea09_cgraph.png | Bin 8858 -> 0 bytes ...f65b97bfdbf9144e9727a100a9be93a_cgraph.png | Bin 1012 -> 0 bytes ChibiOS_2.0.8/docs/html/group__memcore.html | 315 - ChibiOS_2.0.8/docs/html/group__memcore.png | Bin 1256 -> 0 bytes ...394bda5b809ecf6b80b041b6b9ebaf4_cgraph.png | Bin 1041 -> 0 bytes ChibiOS_2.0.8/docs/html/group__memory.html | 62 - ChibiOS_2.0.8/docs/html/group__memory.png | Bin 4653 -> 0 bytes .../docs/html/group__memory__streams.html | 155 - .../docs/html/group__memory__streams.png | Bin 1079 -> 0 bytes ChibiOS_2.0.8/docs/html/group__messages.html | 296 - ChibiOS_2.0.8/docs/html/group__messages.png | Bin 1233 -> 0 bytes ...9a54b3b4b0e3677c47d650a3be3c7aa_cgraph.png | Bin 4487 -> 0 bytes ...9a48a438e97dc47cb798a84e13764cb_cgraph.png | Bin 4401 -> 0 bytes ...68fefbf9d0404bbf56ae354961fae41_cgraph.png | Bin 3041 -> 0 bytes ChibiOS_2.0.8/docs/html/group__mutexes.html | 521 - ChibiOS_2.0.8/docs/html/group__mutexes.png | Bin 1073 -> 0 bytes ...d6350c2d147d1165c359f30798205f5_cgraph.png | Bin 7922 -> 0 bytes ...05fa60fb8aa28a6632f693e83f78c96_cgraph.png | Bin 2349 -> 0 bytes ...53b4ced43d22fb5d82678dd2f0aba75_cgraph.png | Bin 8344 -> 0 bytes ...da14e216460dc55e1816234168cf95c_cgraph.png | Bin 1154 -> 0 bytes ...9ae07165126c9f6c0ce0b17bdb53669_cgraph.png | Bin 4400 -> 0 bytes ...a06b82e3496c44eb7bf31d9f1b655ba_cgraph.png | Bin 6789 -> 0 bytes ChibiOS_2.0.8/docs/html/group__pools.html | 412 - ChibiOS_2.0.8/docs/html/group__pools.png | Bin 1170 -> 0 bytes ...78f8d038e8e981bf9e5a104b81c6cb6_cgraph.png | Bin 1036 -> 0 bytes ...86190d70893fe708c75570af6720bd5_cgraph.png | Bin 1018 -> 0 bytes ChibiOS_2.0.8/docs/html/group__ports.html | 62 - ChibiOS_2.0.8/docs/html/group__ports.png | Bin 10514 -> 0 bytes ChibiOS_2.0.8/docs/html/group__registry.html | 229 - ChibiOS_2.0.8/docs/html/group__registry.png | Bin 997 -> 0 bytes ...fff43a49fb7888a596319d67cf01dab_cgraph.png | Bin 3091 -> 0 bytes ChibiOS_2.0.8/docs/html/group__scheduler.html | 820 - ChibiOS_2.0.8/docs/html/group__scheduler.png | Bin 1593 -> 0 bytes ...257cf203e72a766a52059750cb97e6e_cgraph.png | Bin 3896 -> 0 bytes ...06e564f678c1a39139639490c77e78b_cgraph.png | Bin 6166 -> 0 bytes ...e38b4bee3d2330f6a0f1cdb7660af20_cgraph.png | Bin 4655 -> 0 bytes ...7c1c514b755a1e71caf2f19c1ccf986_cgraph.png | Bin 2335 -> 0 bytes ...47a8819a21ef2d521124e76bfb37c95_cgraph.png | Bin 2431 -> 0 bytes .../docs/html/group__semaphores.html | 800 - ChibiOS_2.0.8/docs/html/group__semaphores.png | Bin 1119 -> 0 bytes ...bc227311e5be3e3b6e3aee6a68169da_cgraph.png | Bin 1853 -> 0 bytes ...dc7b4339506de346d67b4560b271e44_cgraph.png | Bin 14212 -> 0 bytes ...8e266e609cfd3dbc67f299b3ae9debb_cgraph.png | Bin 7324 -> 0 bytes ...ec0cbda23e49e2370e0b91f20baf05e_cgraph.png | Bin 4504 -> 0 bytes ...24ec5d191bb8debe8727ae4dd5d6d03_cgraph.png | Bin 5010 -> 0 bytes ...2c0367078533e291d2e889e251d8b67_cgraph.png | Bin 3036 -> 0 bytes ...c8f7e509870e9b0527a6a68fad71425_cgraph.png | Bin 1728 -> 0 bytes ...a0b70cf495a9cb7569e1cf5b07e2b3d_cgraph.png | Bin 2403 -> 0 bytes ...7972b6b22b80ac09bac5a186277ab81_cgraph.png | Bin 2384 -> 0 bytes .../docs/html/group__synchronization.html | 65 - .../docs/html/group__synchronization.png | Bin 13026 -> 0 bytes ChibiOS_2.0.8/docs/html/group__system.html | 525 - ChibiOS_2.0.8/docs/html/group__system.png | Bin 1292 -> 0 bytes ...e2c7de6567e98e487e009e81e3be10b_cgraph.png | Bin 24871 -> 0 bytes ChibiOS_2.0.8/docs/html/group__test.html | 554 - ChibiOS_2.0.8/docs/html/group__threads.html | 1546 -- ChibiOS_2.0.8/docs/html/group__threads.png | Bin 1148 -> 0 bytes ...48e588238dd336c6059133b3d0c3435_cgraph.png | Bin 5111 -> 0 bytes ...4ab3a3a4d70214ee360867a1c3c75ac_cgraph.png | Bin 5576 -> 0 bytes ...c1ce2be73cd177af7e577b282232a7d_cgraph.png | Bin 3142 -> 0 bytes ...0b84e3e82a4e09c1066e1d422e4c780_cgraph.png | Bin 6195 -> 0 bytes ...a5d9388c64e4c1a3aec129d2831eefe_cgraph.png | Bin 1747 -> 0 bytes ...4a5727ecdbe0f738dfc8e1ede1c3409_cgraph.png | Bin 7011 -> 0 bytes ...22f80040cf192015be4607f31a0ac80_cgraph.png | Bin 2909 -> 0 bytes ...6de13d4044b32d3ae9e2066b5d4c030_cgraph.png | Bin 1081 -> 0 bytes ...3ccc1a6f054c543258ed2fe97ed2f58_cgraph.png | Bin 8464 -> 0 bytes ChibiOS_2.0.8/docs/html/group__time.html | 504 - ChibiOS_2.0.8/docs/html/group__time.png | Bin 1278 -> 0 bytes ChibiOS_2.0.8/docs/html/group__types.html | 352 - ChibiOS_2.0.8/docs/html/group__types.png | Bin 936 -> 0 bytes ChibiOS_2.0.8/docs/html/group__various.html | 83 - ChibiOS_2.0.8/docs/html/group__various.png | Bin 6334 -> 0 bytes ChibiOS_2.0.8/docs/html/hal_8c.html | 63 - ChibiOS_2.0.8/docs/html/hal_8c_source.html | 131 - ChibiOS_2.0.8/docs/html/hal_8h.html | 72 - ChibiOS_2.0.8/docs/html/hal_8h_source.html | 110 - .../docs/html/hal__lld__f103_8h.html | 198 - .../docs/html/hal__lld__f103_8h_source.html | 489 - .../docs/html/hal__lld__f105__f107_8h.html | 221 - .../html/hal__lld__f105__f107_8h_source.html | 582 - ChibiOS_2.0.8/docs/html/halconf_8h.html | 76 - .../docs/html/halconf_8h_source.html | 210 - ChibiOS_2.0.8/docs/html/hierarchy.html | 143 - ChibiOS_2.0.8/docs/html/index.hhc | 1047 -- ChibiOS_2.0.8/docs/html/index.hhk | 13202 ---------------- ChibiOS_2.0.8/docs/html/index.hhp | 851 - ChibiOS_2.0.8/docs/html/index.html | 16 - ChibiOS_2.0.8/docs/html/inherit__graph__0.png | Bin 333 -> 0 bytes ChibiOS_2.0.8/docs/html/inherit__graph__1.png | Bin 403 -> 0 bytes .../docs/html/inherit__graph__10.png | Bin 401 -> 0 bytes .../docs/html/inherit__graph__11.png | Bin 387 -> 0 bytes .../docs/html/inherit__graph__12.png | Bin 454 -> 0 bytes .../docs/html/inherit__graph__13.png | Bin 448 -> 0 bytes .../docs/html/inherit__graph__14.png | Bin 1226 -> 0 bytes .../docs/html/inherit__graph__15.png | Bin 508 -> 0 bytes .../docs/html/inherit__graph__16.png | Bin 476 -> 0 bytes .../docs/html/inherit__graph__17.png | Bin 461 -> 0 bytes .../docs/html/inherit__graph__18.png | Bin 526 -> 0 bytes .../docs/html/inherit__graph__19.png | Bin 508 -> 0 bytes ChibiOS_2.0.8/docs/html/inherit__graph__2.png | Bin 504 -> 0 bytes .../docs/html/inherit__graph__20.png | Bin 451 -> 0 bytes .../docs/html/inherit__graph__21.png | Bin 394 -> 0 bytes .../docs/html/inherit__graph__22.png | Bin 419 -> 0 bytes .../docs/html/inherit__graph__23.png | Bin 389 -> 0 bytes .../docs/html/inherit__graph__24.png | Bin 361 -> 0 bytes .../docs/html/inherit__graph__25.png | Bin 375 -> 0 bytes .../docs/html/inherit__graph__26.png | Bin 347 -> 0 bytes .../docs/html/inherit__graph__27.png | Bin 436 -> 0 bytes .../docs/html/inherit__graph__28.png | Bin 415 -> 0 bytes .../docs/html/inherit__graph__29.png | Bin 462 -> 0 bytes ChibiOS_2.0.8/docs/html/inherit__graph__3.png | Bin 396 -> 0 bytes .../docs/html/inherit__graph__30.png | Bin 415 -> 0 bytes .../docs/html/inherit__graph__31.png | Bin 439 -> 0 bytes .../docs/html/inherit__graph__32.png | Bin 367 -> 0 bytes .../docs/html/inherit__graph__33.png | Bin 362 -> 0 bytes .../docs/html/inherit__graph__34.png | Bin 430 -> 0 bytes .../docs/html/inherit__graph__35.png | Bin 446 -> 0 bytes .../docs/html/inherit__graph__36.png | Bin 335 -> 0 bytes .../docs/html/inherit__graph__37.png | Bin 410 -> 0 bytes .../docs/html/inherit__graph__38.png | Bin 313 -> 0 bytes .../docs/html/inherit__graph__39.png | Bin 341 -> 0 bytes ChibiOS_2.0.8/docs/html/inherit__graph__4.png | Bin 541 -> 0 bytes .../docs/html/inherit__graph__40.png | Bin 511 -> 0 bytes .../docs/html/inherit__graph__41.png | Bin 541 -> 0 bytes .../docs/html/inherit__graph__42.png | Bin 517 -> 0 bytes .../docs/html/inherit__graph__43.png | Bin 401 -> 0 bytes .../docs/html/inherit__graph__44.png | Bin 553 -> 0 bytes .../docs/html/inherit__graph__45.png | Bin 533 -> 0 bytes .../docs/html/inherit__graph__46.png | Bin 415 -> 0 bytes .../docs/html/inherit__graph__47.png | Bin 384 -> 0 bytes .../docs/html/inherit__graph__48.png | Bin 457 -> 0 bytes .../docs/html/inherit__graph__49.png | Bin 406 -> 0 bytes ChibiOS_2.0.8/docs/html/inherit__graph__5.png | Bin 610 -> 0 bytes .../docs/html/inherit__graph__50.png | Bin 392 -> 0 bytes .../docs/html/inherit__graph__51.png | Bin 524 -> 0 bytes .../docs/html/inherit__graph__52.png | Bin 336 -> 0 bytes .../docs/html/inherit__graph__53.png | Bin 392 -> 0 bytes .../docs/html/inherit__graph__54.png | Bin 405 -> 0 bytes .../docs/html/inherit__graph__55.png | Bin 409 -> 0 bytes .../docs/html/inherit__graph__56.png | Bin 502 -> 0 bytes .../docs/html/inherit__graph__57.png | Bin 404 -> 0 bytes .../docs/html/inherit__graph__58.png | Bin 398 -> 0 bytes .../docs/html/inherit__graph__59.png | Bin 397 -> 0 bytes ChibiOS_2.0.8/docs/html/inherit__graph__6.png | Bin 471 -> 0 bytes .../docs/html/inherit__graph__60.png | Bin 406 -> 0 bytes .../docs/html/inherit__graph__61.png | Bin 474 -> 0 bytes .../docs/html/inherit__graph__62.png | Bin 444 -> 0 bytes .../docs/html/inherit__graph__63.png | Bin 426 -> 0 bytes .../docs/html/inherit__graph__64.png | Bin 402 -> 0 bytes .../docs/html/inherit__graph__65.png | Bin 384 -> 0 bytes .../docs/html/inherit__graph__66.png | Bin 404 -> 0 bytes .../docs/html/inherit__graph__67.png | Bin 522 -> 0 bytes .../docs/html/inherit__graph__68.png | Bin 422 -> 0 bytes .../docs/html/inherit__graph__69.png | Bin 362 -> 0 bytes ChibiOS_2.0.8/docs/html/inherit__graph__7.png | Bin 3952 -> 0 bytes .../docs/html/inherit__graph__70.png | Bin 2907 -> 0 bytes .../docs/html/inherit__graph__71.png | Bin 409 -> 0 bytes .../docs/html/inherit__graph__72.png | Bin 411 -> 0 bytes .../docs/html/inherit__graph__73.png | Bin 349 -> 0 bytes ChibiOS_2.0.8/docs/html/inherit__graph__8.png | Bin 585 -> 0 bytes ChibiOS_2.0.8/docs/html/inherit__graph__9.png | Bin 405 -> 0 bytes ChibiOS_2.0.8/docs/html/inherits.html | 345 - .../docs/html/inline_dotgraph_1.dot.png | Bin 16145 -> 0 bytes .../docs/html/inline_dotgraph_10.dot.png | Bin 18604 -> 0 bytes .../docs/html/inline_dotgraph_11.dot.png | Bin 25597 -> 0 bytes .../docs/html/inline_dotgraph_12.dot.png | Bin 15792 -> 0 bytes .../docs/html/inline_dotgraph_13.dot.png | Bin 14789 -> 0 bytes .../docs/html/inline_dotgraph_14.dot.png | Bin 30562 -> 0 bytes .../docs/html/inline_dotgraph_15.dot.png | Bin 23843 -> 0 bytes .../docs/html/inline_dotgraph_16.dot.png | Bin 38589 -> 0 bytes .../docs/html/inline_dotgraph_17.dot.png | Bin 21239 -> 0 bytes .../docs/html/inline_dotgraph_18.dot.png | Bin 13443 -> 0 bytes .../docs/html/inline_dotgraph_19.dot.png | Bin 79380 -> 0 bytes .../docs/html/inline_dotgraph_2.dot.png | Bin 5316 -> 0 bytes .../docs/html/inline_dotgraph_3.dot.png | Bin 8981 -> 0 bytes .../docs/html/inline_dotgraph_4.dot.png | Bin 4851 -> 0 bytes .../docs/html/inline_dotgraph_5.dot.png | Bin 35647 -> 0 bytes .../docs/html/inline_dotgraph_6.dot.png | Bin 66431 -> 0 bytes .../docs/html/inline_dotgraph_7.dot.png | Bin 29505 -> 0 bytes .../docs/html/inline_dotgraph_8.dot.png | Bin 23990 -> 0 bytes .../docs/html/inline_dotgraph_9.dot.png | Bin 46290 -> 0 bytes .../html/kernel_2templates_2chcore_8c.html | 83 - .../kernel_2templates_2chcore_8c_source.html | 184 - .../html/kernel_2templates_2chcore_8h.html | 125 - .../kernel_2templates_2chcore_8h_source.html | 229 - .../html/kernel_2templates_2chtypes_8h.html | 95 - .../kernel_2templates_2chtypes_8h_source.html | 180 - ChibiOS_2.0.8/docs/html/lic_faq.html | 101 - ChibiOS_2.0.8/docs/html/logo_small.png | Bin 7697 -> 0 bytes ChibiOS_2.0.8/docs/html/lpc214x_8h.html | 55 - .../docs/html/lpc214x_8h_source.html | 576 - ChibiOS_2.0.8/docs/html/mac_8c.html | 77 - ChibiOS_2.0.8/docs/html/mac_8c_source.html | 250 - ChibiOS_2.0.8/docs/html/mac_8h.html | 85 - ChibiOS_2.0.8/docs/html/mac_8h_source.html | 173 - ChibiOS_2.0.8/docs/html/main.html | 72 - ChibiOS_2.0.8/docs/html/memstreams_8c.html | 64 - .../docs/html/memstreams_8c_source.html | 146 - ChibiOS_2.0.8/docs/html/memstreams_8h.html | 73 - .../docs/html/memstreams_8h_source.html | 124 - ChibiOS_2.0.8/docs/html/mii_8h_source.html | 239 - ChibiOS_2.0.8/docs/html/mmc__spi_8c.html | 87 - .../docs/html/mmc__spi_8c_source.html | 641 - ChibiOS_2.0.8/docs/html/mmc__spi_8h.html | 126 - .../docs/html/mmc__spi_8h_source.html | 272 - ChibiOS_2.0.8/docs/html/modules.html | 233 - .../docs/html/mpc563m_8h_source.html | 4167 ----- ChibiOS_2.0.8/docs/html/nav_f.png | Bin 159 -> 0 bytes ChibiOS_2.0.8/docs/html/nav_h.png | Bin 97 -> 0 bytes ChibiOS_2.0.8/docs/html/nvic_8c.html | 67 - ChibiOS_2.0.8/docs/html/nvic_8c_source.html | 126 - ChibiOS_2.0.8/docs/html/nvic_8h.html | 99 - ChibiOS_2.0.8/docs/html/nvic_8h_source.html | 243 - ChibiOS_2.0.8/docs/html/open.png | Bin 118 -> 0 bytes ChibiOS_2.0.8/docs/html/page_general.html | 50 - ChibiOS_2.0.8/docs/html/page_howtos.html | 52 - ChibiOS_2.0.8/docs/html/page_kb.html | 59 - ChibiOS_2.0.8/docs/html/pal_8c.html | 67 - ChibiOS_2.0.8/docs/html/pal_8c_source.html | 167 - ChibiOS_2.0.8/docs/html/pal_8h.html | 136 - ChibiOS_2.0.8/docs/html/pal_8h_source.html | 552 - ...platforms_2_a_t91_s_a_m7_2hal__lld_8c.html | 70 - ...ms_2_a_t91_s_a_m7_2hal__lld_8c_source.html | 190 - ...platforms_2_a_t91_s_a_m7_2hal__lld_8h.html | 74 - ...ms_2_a_t91_s_a_m7_2hal__lld_8h_source.html | 138 - ...platforms_2_a_t91_s_a_m7_2mac__lld_8c.html | 89 - ...ms_2_a_t91_s_a_m7_2mac__lld_8c_source.html | 558 - ...platforms_2_a_t91_s_a_m7_2mac__lld_8h.html | 99 - ...ms_2_a_t91_s_a_m7_2mac__lld_8h_source.html | 251 - ...platforms_2_a_t91_s_a_m7_2pal__lld_8c.html | 65 - ...ms_2_a_t91_s_a_m7_2pal__lld_8c_source.html | 200 - ...platforms_2_a_t91_s_a_m7_2pal__lld_8h.html | 109 - ...ms_2_a_t91_s_a_m7_2pal__lld_8h_source.html | 306 - ...tforms_2_a_t91_s_a_m7_2serial__lld_8c.html | 76 - ...2_a_t91_s_a_m7_2serial__lld_8c_source.html | 409 - ...tforms_2_a_t91_s_a_m7_2serial__lld_8h.html | 92 - ...2_a_t91_s_a_m7_2serial__lld_8h_source.html | 229 - .../html/platforms_2_a_v_r_2hal__lld_8c.html | 63 - ...platforms_2_a_v_r_2hal__lld_8c_source.html | 108 - .../html/platforms_2_a_v_r_2hal__lld_8h.html | 66 - ...platforms_2_a_v_r_2hal__lld_8h_source.html | 120 - .../platforms_2_a_v_r_2serial__lld_8c.html | 74 - ...tforms_2_a_v_r_2serial__lld_8c_source.html | 333 - .../platforms_2_a_v_r_2serial__lld_8h.html | 86 - ...tforms_2_a_v_r_2serial__lld_8h_source.html | 195 - .../platforms_2_l_p_c11xx_2hal__lld_8c.html | 75 - ...forms_2_l_p_c11xx_2hal__lld_8c_source.html | 183 - .../platforms_2_l_p_c11xx_2hal__lld_8h.html | 108 - ...forms_2_l_p_c11xx_2hal__lld_8h_source.html | 281 - .../platforms_2_l_p_c11xx_2pal__lld_8c.html | 65 - ...forms_2_l_p_c11xx_2pal__lld_8c_source.html | 156 - .../platforms_2_l_p_c11xx_2pal__lld_8h.html | 116 - ...forms_2_l_p_c11xx_2pal__lld_8h_source.html | 360 - ...platforms_2_l_p_c11xx_2serial__lld_8c.html | 74 - ...ms_2_l_p_c11xx_2serial__lld_8c_source.html | 341 - ...platforms_2_l_p_c11xx_2serial__lld_8h.html | 86 - ...ms_2_l_p_c11xx_2serial__lld_8h_source.html | 252 - .../platforms_2_l_p_c13xx_2hal__lld_8c.html | 75 - ...forms_2_l_p_c13xx_2hal__lld_8c_source.html | 183 - .../platforms_2_l_p_c13xx_2hal__lld_8h.html | 108 - ...forms_2_l_p_c13xx_2hal__lld_8h_source.html | 281 - .../platforms_2_l_p_c13xx_2pal__lld_8c.html | 65 - ...forms_2_l_p_c13xx_2pal__lld_8c_source.html | 156 - .../platforms_2_l_p_c13xx_2pal__lld_8h.html | 116 - ...forms_2_l_p_c13xx_2pal__lld_8h_source.html | 360 - ...platforms_2_l_p_c13xx_2serial__lld_8c.html | 74 - ...ms_2_l_p_c13xx_2serial__lld_8c_source.html | 341 - ...platforms_2_l_p_c13xx_2serial__lld_8h.html | 86 - ...ms_2_l_p_c13xx_2serial__lld_8h_source.html | 252 - .../platforms_2_l_p_c214x_2hal__lld_8c.html | 70 - ...forms_2_l_p_c214x_2hal__lld_8c_source.html | 178 - .../platforms_2_l_p_c214x_2hal__lld_8h.html | 72 - ...forms_2_l_p_c214x_2hal__lld_8h_source.html | 131 - .../platforms_2_l_p_c214x_2pal__lld_8c.html | 65 - ...forms_2_l_p_c214x_2pal__lld_8c_source.html | 164 - .../platforms_2_l_p_c214x_2pal__lld_8h.html | 111 - ...forms_2_l_p_c214x_2pal__lld_8h_source.html | 308 - ...platforms_2_l_p_c214x_2serial__lld_8c.html | 78 - ...ms_2_l_p_c214x_2serial__lld_8c_source.html | 389 - ...platforms_2_l_p_c214x_2serial__lld_8h.html | 90 - ...ms_2_l_p_c214x_2serial__lld_8h_source.html | 226 - .../platforms_2_l_p_c214x_2spi__lld_8c.html | 86 - ...forms_2_l_p_c214x_2spi__lld_8c_source.html | 273 - .../platforms_2_l_p_c214x_2spi__lld_8h.html | 89 - ...forms_2_l_p_c214x_2spi__lld_8h_source.html | 192 - .../platforms_2_m_s_p430_2hal__lld_8c.html | 68 - ...tforms_2_m_s_p430_2hal__lld_8c_source.html | 148 - .../platforms_2_m_s_p430_2hal__lld_8h.html | 69 - ...tforms_2_m_s_p430_2hal__lld_8h_source.html | 163 - .../platforms_2_m_s_p430_2pal__lld_8c.html | 65 - ...tforms_2_m_s_p430_2pal__lld_8c_source.html | 190 - .../platforms_2_m_s_p430_2pal__lld_8h.html | 115 - ...tforms_2_m_s_p430_2pal__lld_8h_source.html | 348 - .../platforms_2_m_s_p430_2serial__lld_8c.html | 75 - ...rms_2_m_s_p430_2serial__lld_8c_source.html | 360 - .../platforms_2_m_s_p430_2serial__lld_8h.html | 86 - ...rms_2_m_s_p430_2serial__lld_8h_source.html | 199 - .../platforms_2_s_p_c56x_2hal__lld_8c.html | 65 - ...tforms_2_s_p_c56x_2hal__lld_8c_source.html | 176 - .../platforms_2_s_p_c56x_2hal__lld_8h.html | 129 - ...tforms_2_s_p_c56x_2hal__lld_8h_source.html | 275 - .../platforms_2_s_p_c56x_2serial__lld_8c.html | 78 - ...rms_2_s_p_c56x_2serial__lld_8c_source.html | 346 - .../platforms_2_s_p_c56x_2serial__lld_8h.html | 100 - ...rms_2_s_p_c56x_2serial__lld_8h_source.html | 216 - .../platforms_2_s_t_m32_2adc__lld_8c.html | 78 - ...atforms_2_s_t_m32_2adc__lld_8c_source.html | 296 - .../platforms_2_s_t_m32_2adc__lld_8h.html | 138 - ...atforms_2_s_t_m32_2adc__lld_8h_source.html | 330 - .../platforms_2_s_t_m32_2can__lld_8c.html | 84 - ...atforms_2_s_t_m32_2can__lld_8c_source.html | 435 - .../platforms_2_s_t_m32_2can__lld_8h.html | 118 - ...atforms_2_s_t_m32_2can__lld_8h_source.html | 371 - .../platforms_2_s_t_m32_2hal__lld_8c.html | 70 - ...atforms_2_s_t_m32_2hal__lld_8c_source.html | 256 - .../platforms_2_s_t_m32_2hal__lld_8h.html | 72 - ...atforms_2_s_t_m32_2hal__lld_8h_source.html | 127 - .../platforms_2_s_t_m32_2pal__lld_8c.html | 65 - ...atforms_2_s_t_m32_2pal__lld_8c_source.html | 244 - .../platforms_2_s_t_m32_2pal__lld_8h.html | 125 - ...atforms_2_s_t_m32_2pal__lld_8h_source.html | 360 - .../platforms_2_s_t_m32_2pwm__lld_8c.html | 82 - ...atforms_2_s_t_m32_2pwm__lld_8c_source.html | 499 - .../platforms_2_s_t_m32_2pwm__lld_8h.html | 120 - ...atforms_2_s_t_m32_2pwm__lld_8h_source.html | 391 - .../platforms_2_s_t_m32_2serial__lld_8c.html | 80 - ...orms_2_s_t_m32_2serial__lld_8c_source.html | 477 - .../platforms_2_s_t_m32_2serial__lld_8h.html | 108 - ...orms_2_s_t_m32_2serial__lld_8h_source.html | 288 - .../platforms_2_s_t_m32_2spi__lld_8c.html | 94 - ...atforms_2_s_t_m32_2spi__lld_8c_source.html | 421 - .../platforms_2_s_t_m32_2spi__lld_8h.html | 103 - ...atforms_2_s_t_m32_2spi__lld_8h_source.html | 270 - .../html/platforms_2_s_t_m8_2hal__lld_8c.html | 68 - ...latforms_2_s_t_m8_2hal__lld_8c_source.html | 162 - .../html/platforms_2_s_t_m8_2hal__lld_8h.html | 91 - ...latforms_2_s_t_m8_2hal__lld_8h_source.html | 198 - .../html/platforms_2_s_t_m8_2pal__lld_8c.html | 63 - ...latforms_2_s_t_m8_2pal__lld_8c_source.html | 159 - .../html/platforms_2_s_t_m8_2pal__lld_8h.html | 121 - ...latforms_2_s_t_m8_2pal__lld_8h_source.html | 286 - .../platforms_2_s_t_m8_2serial__lld_8c.html | 74 - ...forms_2_s_t_m8_2serial__lld_8c_source.html | 380 - .../platforms_2_s_t_m8_2serial__lld_8h.html | 102 - ...forms_2_s_t_m8_2serial__lld_8h_source.html | 208 - .../ports_2_g_c_c_2_a_r_m7_2chcore_8c.html | 62 - ...ts_2_g_c_c_2_a_r_m7_2chcore_8c_source.html | 94 - .../ports_2_g_c_c_2_a_r_m7_2chcore_8h.html | 120 - ...ts_2_g_c_c_2_a_r_m7_2chcore_8h_source.html | 442 - .../ports_2_g_c_c_2_a_r_m7_2chtypes_8h.html | 85 - ...s_2_g_c_c_2_a_r_m7_2chtypes_8h_source.html | 133 - ...ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c.html | 62 - ..._g_c_c_2_a_r_m_c_mx_2chcore_8c_source.html | 96 - ...ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h.html | 114 - ..._g_c_c_2_a_r_m_c_mx_2chcore_8h_source.html | 331 - ...orts_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h.html | 84 - ...g_c_c_2_a_r_m_c_mx_2chtypes_8h_source.html | 131 - .../ports_2_g_c_c_2_a_v_r_2chcore_8c.html | 67 - ...rts_2_g_c_c_2_a_v_r_2chcore_8c_source.html | 187 - .../ports_2_g_c_c_2_a_v_r_2chcore_8h.html | 120 - ...rts_2_g_c_c_2_a_v_r_2chcore_8h_source.html | 367 - .../ports_2_g_c_c_2_a_v_r_2chtypes_8h.html | 85 - ...ts_2_g_c_c_2_a_v_r_2chtypes_8h_source.html | 133 - .../ports_2_g_c_c_2_m_s_p430_2chcore_8c.html | 67 - ..._2_g_c_c_2_m_s_p430_2chcore_8c_source.html | 152 - .../ports_2_g_c_c_2_m_s_p430_2chcore_8h.html | 122 - ..._2_g_c_c_2_m_s_p430_2chcore_8h_source.html | 339 - .../ports_2_g_c_c_2_m_s_p430_2chtypes_8h.html | 85 - ...2_g_c_c_2_m_s_p430_2chtypes_8h_source.html | 133 - .../ports_2_g_c_c_2_p_p_c_2chcore_8c.html | 66 - ...rts_2_g_c_c_2_p_p_c_2chcore_8c_source.html | 141 - .../ports_2_g_c_c_2_p_p_c_2chcore_8h.html | 120 - ...rts_2_g_c_c_2_p_p_c_2chcore_8h_source.html | 376 - .../ports_2_g_c_c_2_p_p_c_2chtypes_8h.html | 90 - ...ts_2_g_c_c_2_p_p_c_2chtypes_8h_source.html | 145 - .../html/ports_2_r_c_2_s_t_m8_2chcore_8c.html | 72 - ...orts_2_r_c_2_s_t_m8_2chcore_8c_source.html | 127 - .../html/ports_2_r_c_2_s_t_m8_2chcore_8h.html | 133 - ...orts_2_r_c_2_s_t_m8_2chcore_8h_source.html | 376 - .../ports_2_r_c_2_s_t_m8_2chtypes_8h.html | 103 - ...rts_2_r_c_2_s_t_m8_2chtypes_8h_source.html | 181 - ChibiOS_2.0.8/docs/html/pwm_8c.html | 73 - ChibiOS_2.0.8/docs/html/pwm_8c_source.html | 202 - ChibiOS_2.0.8/docs/html/pwm_8h.html | 94 - ChibiOS_2.0.8/docs/html/pwm_8h_source.html | 171 - ChibiOS_2.0.8/docs/html/serial_8c.html | 77 - ChibiOS_2.0.8/docs/html/serial_8c_source.html | 313 - ChibiOS_2.0.8/docs/html/serial_8h.html | 148 - ChibiOS_2.0.8/docs/html/serial_8h_source.html | 349 - ChibiOS_2.0.8/docs/html/shell_8c.html | 79 - ChibiOS_2.0.8/docs/html/shell_8c_source.html | 350 - ChibiOS_2.0.8/docs/html/shell_8h.html | 95 - ChibiOS_2.0.8/docs/html/shell_8h_source.html | 141 - ChibiOS_2.0.8/docs/html/spi_8c.html | 85 - ChibiOS_2.0.8/docs/html/spi_8c_source.html | 328 - ChibiOS_2.0.8/docs/html/spi_8h.html | 95 - ChibiOS_2.0.8/docs/html/spi_8h_source.html | 156 - ChibiOS_2.0.8/docs/html/stm32__dma_8c.html | 67 - .../docs/html/stm32__dma_8c_source.html | 163 - ChibiOS_2.0.8/docs/html/stm32__dma_8h.html | 72 - .../docs/html/stm32__dma_8h_source.html | 126 - ChibiOS_2.0.8/docs/html/stm8_8h_source.html | 92 - .../docs/html/struct___serial_driver.html | 97 - .../struct___serial_driver__coll__graph.png | Bin 8418 -> 0 bytes .../docs/html/struct_a_d_c_config.html | 60 - .../html/struct_a_d_c_conversion_group.html | 240 - .../docs/html/struct_a_d_c_driver.html | 275 - .../html/struct_a_d_c_driver__coll__graph.png | Bin 10565 -> 0 bytes .../struct_base_asynchronous_channel.html | 99 - ...base_asynchronous_channel__coll__graph.png | Bin 8084 -> 0 bytes ...truct_base_asynchronous_channel_v_m_t.html | 59 - .../docs/html/struct_base_channel.html | 99 - .../html/struct_base_channel__coll__graph.png | Bin 6255 -> 0 bytes .../docs/html/struct_base_channel_v_m_t.html | 59 - .../html/struct_base_sequential_stream.html | 95 - ...ct_base_sequential_stream__coll__graph.png | Bin 2453 -> 0 bytes .../struct_base_sequential_stream_v_m_t.html | 59 - .../docs/html/struct_c_a_n_config.html | 152 - .../html/struct_c_a_n_config__coll__graph.png | Bin 3241 -> 0 bytes .../docs/html/struct_c_a_n_driver.html | 303 - .../html/struct_c_a_n_driver__coll__graph.png | Bin 18229 -> 0 bytes .../docs/html/struct_c_a_n_filter.html | 165 - .../docs/html/struct_c_a_n_rx_frame.html | 231 - .../docs/html/struct_c_a_n_tx_frame.html | 197 - .../docs/html/struct_c_m3___n_v_i_c.html | 59 - .../docs/html/struct_c_m3___s_c_b.html | 59 - .../docs/html/struct_c_m3___s_t.html | 59 - ChibiOS_2.0.8/docs/html/struct_cond_var.html | 92 - .../html/struct_cond_var__coll__graph.png | Bin 23443 -> 0 bytes .../docs/html/struct_ctx_swc_event.html | 148 - .../docs/html/struct_e_m_a_c_descriptor.html | 60 - ChibiOS_2.0.8/docs/html/struct_ev_timer.html | 66 - .../html/struct_ev_timer__coll__graph.png | Bin 9332 -> 0 bytes .../docs/html/struct_event_listener.html | 134 - .../struct_event_listener__coll__graph.png | Bin 41055 -> 0 bytes .../docs/html/struct_event_source.html | 92 - .../html/struct_event_source__coll__graph.png | Bin 9456 -> 0 bytes .../docs/html/struct_generic_config.html | 69 - .../docs/html/struct_generic_queue.html | 198 - .../struct_generic_queue__coll__graph.png | Bin 4446 -> 0 bytes ChibiOS_2.0.8/docs/html/struct_i_o_bus.html | 130 - .../struct_l_p_c13xx__gpio__setup__t.html | 98 - .../docs/html/struct_m_a_c_driver.html | 128 - .../html/struct_m_a_c_driver__coll__graph.png | Bin 10152 -> 0 bytes .../html/struct_m_a_c_receive_descriptor.html | 122 - ..._m_a_c_receive_descriptor__coll__graph.png | Bin 2877 -> 0 bytes .../struct_m_a_c_transmit_descriptor.html | 122 - ...m_a_c_transmit_descriptor__coll__graph.png | Bin 2935 -> 0 bytes .../docs/html/struct_m_m_c_config.html | 59 - .../docs/html/struct_m_m_c_driver.html | 302 - .../html/struct_m_m_c_driver__coll__graph.png | Bin 47191 -> 0 bytes .../docs/html/struct_mem_stream_v_m_t.html | 59 - .../docs/html/struct_memory_pool.html | 134 - .../html/struct_memory_pool__coll__graph.png | Bin 3693 -> 0 bytes .../docs/html/struct_memory_stream.html | 94 - .../struct_memory_stream__coll__graph.png | Bin 6239 -> 0 bytes ChibiOS_2.0.8/docs/html/struct_mutex.html | 134 - .../docs/html/struct_mutex__coll__graph.png | Bin 33232 -> 0 bytes .../docs/html/struct_p_a_l_config.html | 612 - .../html/struct_p_a_l_config__coll__graph.png | Bin 39031 -> 0 bytes .../html/struct_p_w_m_channel_config.html | 108 - .../docs/html/struct_p_w_m_config.html | 180 - .../html/struct_p_w_m_config__coll__graph.png | Bin 3156 -> 0 bytes .../docs/html/struct_p_w_m_driver.html | 158 - .../html/struct_p_w_m_driver__coll__graph.png | Bin 5344 -> 0 bytes .../docs/html/struct_ready_list.html | 195 - .../html/struct_ready_list__coll__graph.png | Bin 42429 -> 0 bytes .../docs/html/struct_s_p_i_config.html | 160 - .../docs/html/struct_s_p_i_driver.html | 229 - .../html/struct_s_p_i_driver__coll__graph.png | Bin 48013 -> 0 bytes ChibiOS_2.0.8/docs/html/struct_semaphore.html | 113 - .../html/struct_semaphore__coll__graph.png | Bin 23729 -> 0 bytes .../docs/html/struct_serial_config.html | 324 - .../docs/html/struct_serial_driver_v_m_t.html | 59 - .../docs/html/struct_shell_command.html | 102 - .../docs/html/struct_shell_config.html | 109 - .../html/struct_shell_config__coll__graph.png | Bin 8561 -> 0 bytes ChibiOS_2.0.8/docs/html/struct_thread.html | 542 - .../docs/html/struct_thread__coll__graph.png | Bin 38981 -> 0 bytes .../docs/html/struct_threads_list.html | 94 - .../html/struct_threads_list__coll__graph.png | Bin 30928 -> 0 bytes .../docs/html/struct_threads_queue.html | 119 - .../struct_threads_queue__coll__graph.png | Bin 19479 -> 0 bytes .../docs/html/struct_trace_buffer.html | 134 - .../html/struct_trace_buffer__coll__graph.png | Bin 3064 -> 0 bytes ChibiOS_2.0.8/docs/html/struct_v_t_list.html | 156 - .../html/struct_v_t_list__coll__graph.png | Bin 4588 -> 0 bytes .../docs/html/struct_virtual_timer.html | 176 - .../struct_virtual_timer__coll__graph.png | Bin 2618 -> 0 bytes .../html/structat91sam7__pio__setup__t.html | 115 - ChibiOS_2.0.8/docs/html/structcmxctx.html | 59 - ChibiOS_2.0.8/docs/html/structcontext.html | 67 - .../docs/html/structcontext__coll__graph.png | Bin 1783 -> 0 bytes .../docs/html/structeabi__frame.html | 98 - ChibiOS_2.0.8/docs/html/structextctx.html | 60 - ChibiOS_2.0.8/docs/html/structgpio__t.html | 59 - ChibiOS_2.0.8/docs/html/structintctx.html | 60 - .../html/structlpc111x__gpio__setup__t.html | 98 - .../html/structlpc214x__fio__setup__t.html | 98 - .../docs/html/structmemory__heap.html | 134 - .../html/structmemory__heap__coll__graph.png | Bin 31470 -> 0 bytes .../html/structmsp430__dio__setup__t.html | 59 - .../docs/html/structpool__header.html | 92 - .../html/structpool__header__coll__graph.png | Bin 1877 -> 0 bytes .../docs/html/structport__common__t.html | 60 - .../docs/html/structstkalign__t.html | 59 - .../html/structstm32__gpio__setup__t.html | 115 - .../docs/html/structstm8__startctx.html | 60 - ChibiOS_2.0.8/docs/html/structtestcase.html | 140 - .../docs/html/syscalls_8c_source.html | 221 - ChibiOS_2.0.8/docs/html/tab_a.png | Bin 140 -> 0 bytes ChibiOS_2.0.8/docs/html/tab_b.png | Bin 178 -> 0 bytes ChibiOS_2.0.8/docs/html/tab_h.png | Bin 192 -> 0 bytes ChibiOS_2.0.8/docs/html/tab_s.png | Bin 189 -> 0 bytes ChibiOS_2.0.8/docs/html/tabs.css | 59 - ChibiOS_2.0.8/docs/html/target.html | 88 - .../docs/html/templates_2adc__lld_8c.html | 71 - .../html/templates_2adc__lld_8c_source.html | 153 - .../docs/html/templates_2adc__lld_8h.html | 87 - .../html/templates_2adc__lld_8h_source.html | 206 - .../docs/html/templates_2can__lld_8c.html | 79 - .../html/templates_2can__lld_8c_source.html | 202 - .../docs/html/templates_2can__lld_8h.html | 98 - .../html/templates_2can__lld_8h_source.html | 281 - .../docs/html/templates_2hal__lld_8c.html | 63 - .../html/templates_2hal__lld_8c_source.html | 109 - .../docs/html/templates_2hal__lld_8h.html | 66 - .../html/templates_2hal__lld_8h_source.html | 121 - .../docs/html/templates_2mac__lld_8c.html | 79 - .../html/templates_2mac__lld_8c_source.html | 227 - .../docs/html/templates_2mac__lld_8h.html | 95 - .../html/templates_2mac__lld_8h_source.html | 185 - .../docs/html/templates_2pal__lld_8c.html | 57 - .../html/templates_2pal__lld_8c_source.html | 106 - .../docs/html/templates_2pal__lld_8h.html | 109 - .../html/templates_2pal__lld_8h_source.html | 364 - .../docs/html/templates_2pwm__lld_8c.html | 73 - .../html/templates_2pwm__lld_8c_source.html | 174 - .../docs/html/templates_2pwm__lld_8h.html | 102 - .../html/templates_2pwm__lld_8h_source.html | 261 - .../docs/html/templates_2serial__lld_8c.html | 67 - .../templates_2serial__lld_8c_source.html | 145 - .../docs/html/templates_2serial__lld_8h.html | 80 - .../templates_2serial__lld_8h_source.html | 160 - .../docs/html/templates_2spi__lld_8c.html | 79 - .../html/templates_2spi__lld_8c_source.html | 209 - .../docs/html/templates_2spi__lld_8h.html | 84 - .../html/templates_2spi__lld_8h_source.html | 161 - ChibiOS_2.0.8/docs/html/test_8c.html | 98 - ChibiOS_2.0.8/docs/html/test_8c_source.html | 437 - ChibiOS_2.0.8/docs/html/test_8h.html | 99 - ChibiOS_2.0.8/docs/html/test_8h_source.html | 211 - ChibiOS_2.0.8/docs/html/test_benchmarks.html | 67 - .../docs/html/test_benchmarks_001.html | 47 - .../docs/html/test_benchmarks_002.html | 47 - .../docs/html/test_benchmarks_003.html | 47 - .../docs/html/test_benchmarks_004.html | 48 - .../docs/html/test_benchmarks_005.html | 48 - .../docs/html/test_benchmarks_006.html | 48 - .../docs/html/test_benchmarks_007.html | 48 - .../docs/html/test_benchmarks_008.html | 48 - .../docs/html/test_benchmarks_009.html | 48 - .../docs/html/test_benchmarks_010.html | 48 - .../docs/html/test_benchmarks_011.html | 48 - .../docs/html/test_benchmarks_012.html | 48 - .../docs/html/test_benchmarks_013.html | 47 - ChibiOS_2.0.8/docs/html/test_dynamic.html | 63 - ChibiOS_2.0.8/docs/html/test_dynamic_001.html | 48 - ChibiOS_2.0.8/docs/html/test_dynamic_002.html | 48 - ChibiOS_2.0.8/docs/html/test_dynamic_003.html | 47 - ChibiOS_2.0.8/docs/html/test_events.html | 62 - ChibiOS_2.0.8/docs/html/test_events_001.html | 49 - ChibiOS_2.0.8/docs/html/test_events_002.html | 53 - ChibiOS_2.0.8/docs/html/test_events_003.html | 53 - ChibiOS_2.0.8/docs/html/test_heap.html | 59 - ChibiOS_2.0.8/docs/html/test_heap_001.html | 48 - ChibiOS_2.0.8/docs/html/test_mbox.html | 60 - ChibiOS_2.0.8/docs/html/test_mbox_001.html | 48 - ChibiOS_2.0.8/docs/html/test_msg.html | 59 - ChibiOS_2.0.8/docs/html/test_msg_001.html | 48 - ChibiOS_2.0.8/docs/html/test_mtx.html | 69 - ChibiOS_2.0.8/docs/html/test_mtx_001.html | 48 - ChibiOS_2.0.8/docs/html/test_mtx_002.html | 64 - ChibiOS_2.0.8/docs/html/test_mtx_003.html | 65 - ChibiOS_2.0.8/docs/html/test_mtx_004.html | 48 - ChibiOS_2.0.8/docs/html/test_mtx_005.html | 48 - ChibiOS_2.0.8/docs/html/test_mtx_006.html | 48 - ChibiOS_2.0.8/docs/html/test_mtx_007.html | 48 - ChibiOS_2.0.8/docs/html/test_mtx_008.html | 47 - ChibiOS_2.0.8/docs/html/test_pools.html | 59 - ChibiOS_2.0.8/docs/html/test_pools_001.html | 48 - ChibiOS_2.0.8/docs/html/test_queues.html | 61 - ChibiOS_2.0.8/docs/html/test_queues_001.html | 47 - ChibiOS_2.0.8/docs/html/test_queues_002.html | 47 - ChibiOS_2.0.8/docs/html/test_sem.html | 61 - ChibiOS_2.0.8/docs/html/test_sem_001.html | 48 - ChibiOS_2.0.8/docs/html/test_sem_002.html | 48 - ChibiOS_2.0.8/docs/html/test_sem_003.html | 48 - ChibiOS_2.0.8/docs/html/test_threads.html | 59 - ChibiOS_2.0.8/docs/html/test_threads_001.html | 48 - ChibiOS_2.0.8/docs/html/test_threads_002.html | 48 - ChibiOS_2.0.8/docs/html/test_threads_003.html | 48 - ChibiOS_2.0.8/docs/html/test_threads_004.html | 47 - ChibiOS_2.0.8/docs/html/testbmk_8c.html | 102 - .../docs/html/testbmk_8c_source.html | 822 - ChibiOS_2.0.8/docs/html/testbmk_8h.html | 79 - .../docs/html/testbmk_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/testdyn_8c.html | 95 - .../docs/html/testdyn_8c_source.html | 331 - ChibiOS_2.0.8/docs/html/testdyn_8h.html | 79 - .../docs/html/testdyn_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/testevt_8c.html | 91 - .../docs/html/testevt_8c_source.html | 363 - ChibiOS_2.0.8/docs/html/testevt_8h.html | 79 - .../docs/html/testevt_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/testheap_8c.html | 87 - .../docs/html/testheap_8c_source.html | 218 - ChibiOS_2.0.8/docs/html/testheap_8h.html | 79 - .../docs/html/testheap_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/testmbox_8c.html | 87 - .../docs/html/testmbox_8c_source.html | 231 - ChibiOS_2.0.8/docs/html/testmbox_8h.html | 79 - .../docs/html/testmbox_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/testmsg_8c.html | 87 - .../docs/html/testmsg_8c_source.html | 177 - ChibiOS_2.0.8/docs/html/testmsg_8h.html | 79 - .../docs/html/testmsg_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/testmtx_8c.html | 98 - .../docs/html/testmtx_8c_source.html | 718 - ChibiOS_2.0.8/docs/html/testmtx_8h.html | 79 - .../docs/html/testmtx_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/testpools_8c.html | 57 - .../docs/html/testpools_8c_source.html | 166 - ChibiOS_2.0.8/docs/html/testpools_8h.html | 55 - .../docs/html/testpools_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/testqueues_8c.html | 88 - .../docs/html/testqueues_8c_source.html | 269 - ChibiOS_2.0.8/docs/html/testqueues_8h.html | 79 - .../docs/html/testqueues_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/testsem_8c.html | 91 - .../docs/html/testsem_8c_source.html | 310 - ChibiOS_2.0.8/docs/html/testsem_8h.html | 79 - .../docs/html/testsem_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/testsuite.html | 72 - ChibiOS_2.0.8/docs/html/testthd_8c.html | 88 - .../docs/html/testthd_8c_source.html | 301 - ChibiOS_2.0.8/docs/html/testthd_8h.html | 79 - .../docs/html/testthd_8h_source.html | 76 - ChibiOS_2.0.8/docs/html/tool001.jpg | Bin 22548 -> 0 bytes ChibiOS_2.0.8/docs/html/tool002.jpg | Bin 47193 -> 0 bytes ChibiOS_2.0.8/docs/html/tree.html | 788 - ChibiOS_2.0.8/docs/html/typedefs_8h.html | 56 - .../docs/html/typedefs_8h_source.html | 81 - ChibiOS_2.0.8/docs/html/union____ioport.html | 66 - .../html/union____ioport__coll__graph.png | Bin 2620 -> 0 bytes .../docs/html/unionheap__header.html | 137 - .../html/unionheap__header__coll__graph.png | Bin 8834 -> 0 bytes ChibiOS_2.0.8/docs/html/vic_8c.html | 64 - ChibiOS_2.0.8/docs/html/vic_8c_source.html | 114 - ChibiOS_2.0.8/docs/html/vic_8h.html | 63 - ChibiOS_2.0.8/docs/html/vic_8h_source.html | 93 - ChibiOS_2.0.8/docs/html/workspace.png | Bin 20994 -> 0 bytes ChibiOS_2.0.8/docs/index.html | 8 - ChibiOS_2.0.8/docs/readme.txt | 34 - .../docs/reports/AT91SAM7X-48-ARM.txt | 159 - .../docs/reports/AT91SAM7X-48-THUMB.txt | 159 - ChibiOS_2.0.8/docs/reports/ATmega128-16.txt | 150 - ChibiOS_2.0.8/docs/reports/LPC1114-48.txt | 159 - ChibiOS_2.0.8/docs/reports/LPC1343-72.txt | 159 - ChibiOS_2.0.8/docs/reports/LPC2148-48-ARM.txt | 159 - .../docs/reports/LPC2148-48-THUMB.txt | 159 - .../docs/reports/MSP430F1611-0.75.txt | 159 - ChibiOS_2.0.8/docs/reports/MSP430F1611-8.txt | 159 - ChibiOS_2.0.8/docs/reports/SPC563M64-80.txt | 159 - ChibiOS_2.0.8/docs/reports/STM32F103-48.txt | 159 - ChibiOS_2.0.8/docs/reports/STM32F103-72.txt | 159 - ChibiOS_2.0.8/docs/reports/STM8S208-16.txt | 124 - ChibiOS_2.0.8/docs/reports/build.txt | 48 - ChibiOS_2.0.8/docs/reports/coverage.txt | 71 - ChibiOS_2.0.8/docs/reports/kernel.txt | 306 - ChibiOS_2.0.8/docs/rsc/custom.css | 441 - ChibiOS_2.0.8/docs/rsc/eclipse003.jpg | Bin 42621 -> 0 bytes ChibiOS_2.0.8/docs/rsc/eclipse004.jpg | Bin 49163 -> 0 bytes ChibiOS_2.0.8/docs/rsc/eclipse005.jpg | Bin 45472 -> 0 bytes ChibiOS_2.0.8/docs/rsc/eclipse006.jpg | Bin 15292 -> 0 bytes ChibiOS_2.0.8/docs/rsc/eclipse007.jpg | Bin 61644 -> 0 bytes ChibiOS_2.0.8/docs/rsc/eclipse008.jpg | Bin 19051 -> 0 bytes ChibiOS_2.0.8/docs/rsc/eclipse009.jpg | Bin 33845 -> 0 bytes ChibiOS_2.0.8/docs/rsc/eclipse010.jpg | Bin 29039 -> 0 bytes ChibiOS_2.0.8/docs/rsc/eclipse011.jpg | Bin 34286 -> 0 bytes ChibiOS_2.0.8/docs/rsc/eclipse012.jpg | Bin 12243 -> 0 bytes ChibiOS_2.0.8/docs/rsc/eclipse013.jpg | Bin 60847 -> 0 bytes ChibiOS_2.0.8/docs/rsc/footer.html | 4 - ChibiOS_2.0.8/docs/rsc/header.html | 17 - ChibiOS_2.0.8/docs/rsc/layout.xml | 184 - ChibiOS_2.0.8/docs/rsc/logo.png | Bin 16818 -> 0 bytes ChibiOS_2.0.8/docs/rsc/tabs.css | 102 - ChibiOS_2.0.8/docs/rsc/tool001.jpg | Bin 22548 -> 0 bytes ChibiOS_2.0.8/docs/rsc/tool002.jpg | Bin 47193 -> 0 bytes ChibiOS_2.0.8/docs/rsc/workspace.png | Bin 20994 -> 0 bytes ChibiOS_2.0.8/docs/rsc/workspace.svg | 280 - ChibiOS_2.0.8/docs/src/architecture.dox | 268 - ChibiOS_2.0.8/docs/src/articles.dox | 73 - ChibiOS_2.0.8/docs/src/atomic.dox | 64 - ChibiOS_2.0.8/docs/src/concepts.dox | 290 - ChibiOS_2.0.8/docs/src/createthread.dox | 194 - ChibiOS_2.0.8/docs/src/credits.dox | 104 - ChibiOS_2.0.8/docs/src/debug.dox | 145 - ChibiOS_2.0.8/docs/src/design.dox | 117 - ChibiOS_2.0.8/docs/src/eclipse.dox | 176 - ChibiOS_2.0.8/docs/src/eclipse2.dox | 256 - ChibiOS_2.0.8/docs/src/events.dox | 130 - ChibiOS_2.0.8/docs/src/goals.dox | 95 - ChibiOS_2.0.8/docs/src/integrationguide.dox | 102 - ChibiOS_2.0.8/docs/src/interrupts.dox | 76 - ChibiOS_2.0.8/docs/src/jitter.dox | 142 - ChibiOS_2.0.8/docs/src/licfaq.dox | 126 - ChibiOS_2.0.8/docs/src/lifecycle.dox | 75 - ChibiOS_2.0.8/docs/src/main.dox | 77 - ChibiOS_2.0.8/docs/src/memory.dox | 145 - ChibiOS_2.0.8/docs/src/mutualexcl.dox | 217 - ChibiOS_2.0.8/docs/src/portguide.dox | 127 - ChibiOS_2.0.8/docs/src/roundrobin.dox | 57 - ChibiOS_2.0.8/docs/src/saveram.dox | 88 - ChibiOS_2.0.8/docs/src/stacks.dox | 114 - ChibiOS_2.0.8/docs/src/stop_os.dox | 140 - ChibiOS_2.0.8/docs/src/target.dox | 89 - ChibiOS_2.0.8/docs/src/timing.dox | 98 - ChibiOS_2.0.8/docs/src/wakeup.dox | 155 - ChibiOS_2.0.8/exception.txt | 54 - ChibiOS_2.0.8/ext/ext.dox | 45 - ChibiOS_2.0.8/ext/ff007e-patched.zip | Bin 634222 -> 0 bytes ChibiOS_2.0.8/ext/lwip-1.3.1.zip | Bin 552326 -> 0 bytes ChibiOS_2.0.8/ext/readme.txt | 32 - ChibiOS_2.0.8/ext/stm32lib-3.3.0.zip | Bin 172514 -> 0 bytes ChibiOS_2.0.8/ext/uip-1.0.patches.zip | Bin 21462 -> 0 bytes ChibiOS_2.0.8/ext/uip-1.0.tar.gz | Bin 1348599 -> 0 bytes ChibiOS_2.0.8/license.txt | 674 - ChibiOS_2.0.8/os/hal/hal.dox | 404 - ChibiOS_2.0.8/os/hal/hal.mk | 14 - ChibiOS_2.0.8/os/hal/include/adc.h | 103 - ChibiOS_2.0.8/os/hal/include/can.h | 139 - ChibiOS_2.0.8/os/hal/include/hal.h | 66 - ChibiOS_2.0.8/os/hal/include/mac.h | 129 - ChibiOS_2.0.8/os/hal/include/mii.h | 195 - ChibiOS_2.0.8/os/hal/include/mmc_spi.h | 228 - ChibiOS_2.0.8/os/hal/include/pal.h | 508 - ChibiOS_2.0.8/os/hal/include/pwm.h | 127 - ChibiOS_2.0.8/os/hal/include/serial.h | 305 - ChibiOS_2.0.8/os/hal/include/spi.h | 112 - .../platforms/AT91SAM7/at91lib/AT91SAM7S128.h | 2229 --- .../platforms/AT91SAM7/at91lib/AT91SAM7S256.h | 2229 --- .../platforms/AT91SAM7/at91lib/AT91SAM7S512.h | 2303 --- .../platforms/AT91SAM7/at91lib/AT91SAM7S64.h | 2229 --- .../platforms/AT91SAM7/at91lib/AT91SAM7X128.h | 2914 ---- .../platforms/AT91SAM7/at91lib/AT91SAM7X256.h | 2918 ---- .../platforms/AT91SAM7/at91lib/AT91SAM7X512.h | 2984 ---- .../os/hal/platforms/AT91SAM7/at91lib/aic.c | 84 - .../os/hal/platforms/AT91SAM7/at91lib/aic.h | 78 - .../os/hal/platforms/AT91SAM7/at91sam7.h | 63 - .../os/hal/platforms/AT91SAM7/at91sam7_mii.c | 145 - .../os/hal/platforms/AT91SAM7/at91sam7_mii.h | 120 - .../os/hal/platforms/AT91SAM7/hal_lld.c | 146 - .../os/hal/platforms/AT91SAM7/hal_lld.h | 94 - .../os/hal/platforms/AT91SAM7/mac_lld.c | 514 - .../os/hal/platforms/AT91SAM7/mac_lld.h | 207 - .../os/hal/platforms/AT91SAM7/pal_lld.c | 156 - .../os/hal/platforms/AT91SAM7/pal_lld.h | 262 - .../os/hal/platforms/AT91SAM7/platform.dox | 100 - .../os/hal/platforms/AT91SAM7/platform.mk | 10 - .../os/hal/platforms/AT91SAM7/serial_lld.c | 365 - .../os/hal/platforms/AT91SAM7/serial_lld.h | 185 - ChibiOS_2.0.8/os/hal/platforms/AVR/hal_lld.c | 64 - ChibiOS_2.0.8/os/hal/platforms/AVR/hal_lld.h | 76 - .../os/hal/platforms/AVR/platform.dox | 48 - .../os/hal/platforms/AVR/platform.mk | 6 - .../os/hal/platforms/AVR/serial_lld.c | 289 - .../os/hal/platforms/AVR/serial_lld.h | 151 - .../os/hal/platforms/LPC11xx/LPC11xx.h | 499 - .../os/hal/platforms/LPC11xx/hal_lld.c | 139 - .../os/hal/platforms/LPC11xx/hal_lld.h | 237 - .../os/hal/platforms/LPC11xx/pal_lld.c | 112 - .../os/hal/platforms/LPC11xx/pal_lld.h | 316 - .../os/hal/platforms/LPC11xx/platform.dox | 82 - .../os/hal/platforms/LPC11xx/platform.mk | 7 - .../os/hal/platforms/LPC11xx/serial_lld.c | 297 - .../os/hal/platforms/LPC11xx/serial_lld.h | 208 - .../os/hal/platforms/LPC11xx/system_LPC11xx.h | 64 - .../os/hal/platforms/LPC13xx/LPC13xx.h | 493 - .../os/hal/platforms/LPC13xx/hal_lld.c | 139 - .../os/hal/platforms/LPC13xx/hal_lld.h | 237 - .../os/hal/platforms/LPC13xx/pal_lld.c | 112 - .../os/hal/platforms/LPC13xx/pal_lld.h | 316 - .../os/hal/platforms/LPC13xx/platform.dox | 82 - .../os/hal/platforms/LPC13xx/platform.mk | 7 - .../os/hal/platforms/LPC13xx/serial_lld.c | 297 - .../os/hal/platforms/LPC13xx/serial_lld.h | 208 - .../os/hal/platforms/LPC13xx/system_LPC13xx.h | 64 - .../os/hal/platforms/LPC214x/hal_lld.c | 134 - .../os/hal/platforms/LPC214x/hal_lld.h | 87 - .../os/hal/platforms/LPC214x/lpc214x.h | 532 - .../os/hal/platforms/LPC214x/pal_lld.c | 120 - .../os/hal/platforms/LPC214x/pal_lld.h | 264 - .../os/hal/platforms/LPC214x/platform.dox | 97 - .../os/hal/platforms/LPC214x/platform.mk | 9 - .../os/hal/platforms/LPC214x/serial_lld.c | 345 - .../os/hal/platforms/LPC214x/serial_lld.h | 182 - .../os/hal/platforms/LPC214x/spi_lld.c | 229 - .../os/hal/platforms/LPC214x/spi_lld.h | 148 - ChibiOS_2.0.8/os/hal/platforms/LPC214x/vic.c | 70 - ChibiOS_2.0.8/os/hal/platforms/LPC214x/vic.h | 49 - .../os/hal/platforms/MSP430/hal_lld.c | 104 - .../os/hal/platforms/MSP430/hal_lld.h | 119 - .../os/hal/platforms/MSP430/pal_lld.c | 146 - .../os/hal/platforms/MSP430/pal_lld.h | 304 - .../os/hal/platforms/MSP430/platform.dox | 74 - .../os/hal/platforms/MSP430/platform.mk | 7 - .../os/hal/platforms/MSP430/serial_lld.c | 316 - .../os/hal/platforms/MSP430/serial_lld.h | 155 - .../os/hal/platforms/Posix/console.c | 133 - .../os/hal/platforms/Posix/console.h | 72 - .../os/hal/platforms/Posix/hal_lld.c | 113 - .../os/hal/platforms/Posix/hal_lld.h | 85 - .../os/hal/platforms/Posix/pal_lld.c | 105 - .../os/hal/platforms/Posix/pal_lld.h | 210 - .../os/hal/platforms/Posix/platform.mk | 7 - .../os/hal/platforms/Posix/serial_lld.c | 273 - .../os/hal/platforms/Posix/serial_lld.h | 170 - .../os/hal/platforms/SPC56x/hal_lld.c | 132 - .../os/hal/platforms/SPC56x/hal_lld.h | 231 - .../os/hal/platforms/SPC56x/mpc563m.h | 4123 ----- .../os/hal/platforms/SPC56x/platform.dox | 48 - .../os/hal/platforms/SPC56x/platform.mk | 6 - .../os/hal/platforms/SPC56x/serial_lld.c | 302 - .../os/hal/platforms/SPC56x/serial_lld.h | 172 - .../os/hal/platforms/SPC56x/typedefs.h | 37 - .../os/hal/platforms/STM32/adc_lld.c | 252 - .../os/hal/platforms/STM32/adc_lld.h | 325 - .../os/hal/platforms/STM32/can_lld.c | 391 - .../os/hal/platforms/STM32/can_lld.h | 327 - .../os/hal/platforms/STM32/hal_lld.c | 212 - .../os/hal/platforms/STM32/hal_lld.h | 83 - .../os/hal/platforms/STM32/hal_lld_f103.h | 445 - .../hal/platforms/STM32/hal_lld_f105_f107.h | 538 - .../os/hal/platforms/STM32/pal_lld.c | 200 - .../os/hal/platforms/STM32/pal_lld.h | 316 - .../os/hal/platforms/STM32/platform.dox | 150 - .../os/hal/platforms/STM32/platform.mk | 12 - .../os/hal/platforms/STM32/pwm_lld.c | 455 - .../os/hal/platforms/STM32/pwm_lld.h | 347 - .../os/hal/platforms/STM32/serial_lld.c | 433 - .../os/hal/platforms/STM32/serial_lld.h | 244 - .../os/hal/platforms/STM32/spi_lld.c | 377 - .../os/hal/platforms/STM32/spi_lld.h | 226 - .../os/hal/platforms/STM32/stm32_dma.c | 119 - .../os/hal/platforms/STM32/stm32_dma.h | 82 - .../os/hal/platforms/STM32/stm32f10x.h | 8224 ---------- ChibiOS_2.0.8/os/hal/platforms/STM8/hal_lld.c | 118 - ChibiOS_2.0.8/os/hal/platforms/STM8/hal_lld.h | 154 - ChibiOS_2.0.8/os/hal/platforms/STM8/pal_lld.c | 115 - ChibiOS_2.0.8/os/hal/platforms/STM8/pal_lld.h | 242 - .../os/hal/platforms/STM8/platform.dox | 75 - .../os/hal/platforms/STM8/serial_lld.c | 336 - .../os/hal/platforms/STM8/serial_lld.h | 164 - ChibiOS_2.0.8/os/hal/platforms/STM8/stm8.h | 48 - .../os/hal/platforms/Win32/console.c | 133 - .../os/hal/platforms/Win32/console.h | 72 - .../os/hal/platforms/Win32/hal_lld.c | 119 - .../os/hal/platforms/Win32/hal_lld.h | 77 - .../os/hal/platforms/Win32/pal_lld.c | 105 - .../os/hal/platforms/Win32/pal_lld.h | 210 - .../os/hal/platforms/Win32/platform.mk | 7 - .../os/hal/platforms/Win32/serial_lld.c | 270 - .../os/hal/platforms/Win32/serial_lld.h | 162 - ChibiOS_2.0.8/os/hal/src/adc.c | 242 - ChibiOS_2.0.8/os/hal/src/can.c | 278 - ChibiOS_2.0.8/os/hal/src/hal.c | 87 - ChibiOS_2.0.8/os/hal/src/mac.c | 206 - ChibiOS_2.0.8/os/hal/src/mmc_spi.c | 597 - ChibiOS_2.0.8/os/hal/src/pal.c | 123 - ChibiOS_2.0.8/os/hal/src/pwm.c | 158 - ChibiOS_2.0.8/os/hal/src/serial.c | 269 - ChibiOS_2.0.8/os/hal/src/spi.c | 284 - ChibiOS_2.0.8/os/hal/templates/adc_lld.c | 109 - ChibiOS_2.0.8/os/hal/templates/adc_lld.h | 162 - ChibiOS_2.0.8/os/hal/templates/can_lld.c | 158 - ChibiOS_2.0.8/os/hal/templates/can_lld.h | 237 - ChibiOS_2.0.8/os/hal/templates/hal_lld.c | 65 - ChibiOS_2.0.8/os/hal/templates/hal_lld.h | 77 - ChibiOS_2.0.8/os/hal/templates/halconf.h | 166 - ChibiOS_2.0.8/os/hal/templates/mac_lld.c | 183 - ChibiOS_2.0.8/os/hal/templates/mac_lld.h | 141 - ChibiOS_2.0.8/os/hal/templates/meta/driver.c | 115 - ChibiOS_2.0.8/os/hal/templates/meta/driver.h | 90 - .../os/hal/templates/meta/driver_lld.c | 91 - .../os/hal/templates/meta/driver_lld.h | 101 - ChibiOS_2.0.8/os/hal/templates/pal_lld.c | 62 - ChibiOS_2.0.8/os/hal/templates/pal_lld.h | 320 - ChibiOS_2.0.8/os/hal/templates/pwm_lld.c | 130 - ChibiOS_2.0.8/os/hal/templates/pwm_lld.h | 217 - ChibiOS_2.0.8/os/hal/templates/serial_lld.c | 101 - ChibiOS_2.0.8/os/hal/templates/serial_lld.h | 116 - ChibiOS_2.0.8/os/hal/templates/spi_lld.c | 165 - ChibiOS_2.0.8/os/hal/templates/spi_lld.h | 117 - ChibiOS_2.0.8/os/kernel/include/ch.h | 102 - ChibiOS_2.0.8/os/kernel/include/chcond.h | 98 - ChibiOS_2.0.8/os/kernel/include/chdebug.h | 170 - ChibiOS_2.0.8/os/kernel/include/chevents.h | 164 - ChibiOS_2.0.8/os/kernel/include/chheap.h | 97 - ChibiOS_2.0.8/os/kernel/include/chinline.h | 93 - ChibiOS_2.0.8/os/kernel/include/chioch.h | 284 - ChibiOS_2.0.8/os/kernel/include/chlists.h | 125 - ChibiOS_2.0.8/os/kernel/include/chmboxes.h | 150 - ChibiOS_2.0.8/os/kernel/include/chmemcore.h | 78 - ChibiOS_2.0.8/os/kernel/include/chmempools.h | 100 - ChibiOS_2.0.8/os/kernel/include/chmsg.h | 67 - ChibiOS_2.0.8/os/kernel/include/chmtx.h | 95 - ChibiOS_2.0.8/os/kernel/include/chqueues.h | 249 - ChibiOS_2.0.8/os/kernel/include/chregistry.h | 76 - ChibiOS_2.0.8/os/kernel/include/chschd.h | 190 - ChibiOS_2.0.8/os/kernel/include/chsem.h | 111 - ChibiOS_2.0.8/os/kernel/include/chstreams.h | 111 - ChibiOS_2.0.8/os/kernel/include/chsys.h | 193 - ChibiOS_2.0.8/os/kernel/include/chthreads.h | 337 - ChibiOS_2.0.8/os/kernel/include/chvt.h | 154 - ChibiOS_2.0.8/os/kernel/kernel.dox | 172 - ChibiOS_2.0.8/os/kernel/kernel.mk | 22 - ChibiOS_2.0.8/os/kernel/src/chcond.c | 252 - ChibiOS_2.0.8/os/kernel/src/chdebug.c | 94 - ChibiOS_2.0.8/os/kernel/src/chevents.c | 449 - ChibiOS_2.0.8/os/kernel/src/chheap.c | 313 - ChibiOS_2.0.8/os/kernel/src/chlists.c | 155 - ChibiOS_2.0.8/os/kernel/src/chmboxes.c | 276 - ChibiOS_2.0.8/os/kernel/src/chmemcore.c | 129 - ChibiOS_2.0.8/os/kernel/src/chmempools.c | 140 - ChibiOS_2.0.8/os/kernel/src/chmsg.c | 157 - ChibiOS_2.0.8/os/kernel/src/chmtx.c | 348 - ChibiOS_2.0.8/os/kernel/src/chqueues.c | 363 - ChibiOS_2.0.8/os/kernel/src/chregistry.c | 114 - ChibiOS_2.0.8/os/kernel/src/chschd.c | 282 - ChibiOS_2.0.8/os/kernel/src/chsem.c | 291 - ChibiOS_2.0.8/os/kernel/src/chsys.c | 145 - ChibiOS_2.0.8/os/kernel/src/chthreads.c | 522 - ChibiOS_2.0.8/os/kernel/src/chvt.c | 129 - ChibiOS_2.0.8/os/kernel/templates/chconf.h | 494 - ChibiOS_2.0.8/os/kernel/templates/chcore.c | 140 - ChibiOS_2.0.8/os/kernel/templates/chcore.h | 185 - ChibiOS_2.0.8/os/kernel/templates/chtypes.h | 136 - ChibiOS_2.0.8/os/ports/GCC/ARM/rules.mk | 146 - .../os/ports/GCC/ARM7/AT91SAM7/vectors.s | 81 - .../os/ports/GCC/ARM7/AT91SAM7/wfi.h | 42 - .../os/ports/GCC/ARM7/LPC214x/vectors.s | 78 - ChibiOS_2.0.8/os/ports/GCC/ARM7/LPC214x/wfi.h | 42 - ChibiOS_2.0.8/os/ports/GCC/ARM7/chcore.c | 50 - ChibiOS_2.0.8/os/ports/GCC/ARM7/chcore.h | 398 - ChibiOS_2.0.8/os/ports/GCC/ARM7/chcoreasm.s | 244 - ChibiOS_2.0.8/os/ports/GCC/ARM7/chtypes.h | 89 - ChibiOS_2.0.8/os/ports/GCC/ARM7/crt0.s | 191 - ChibiOS_2.0.8/os/ports/GCC/ARM7/port.dox | 225 - ChibiOS_2.0.8/os/ports/GCC/ARM7/port.mk | 7 - .../os/ports/GCC/ARMCMx/LPC11xx/cmparams.h | 63 - .../os/ports/GCC/ARMCMx/LPC11xx/port.mk | 11 - .../os/ports/GCC/ARMCMx/LPC11xx/vectors.s | 219 - .../os/ports/GCC/ARMCMx/LPC13xx/cmparams.h | 63 - .../os/ports/GCC/ARMCMx/LPC13xx/port.mk | 11 - .../os/ports/GCC/ARMCMx/LPC13xx/vectors.s | 315 - .../os/ports/GCC/ARMCMx/STM32F10x/cmparams.h | 63 - .../os/ports/GCC/ARMCMx/STM32F10x/port.mk | 11 - .../os/ports/GCC/ARMCMx/STM32F10x/vectors.s | 377 - ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore.c | 52 - ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore.h | 287 - .../os/ports/GCC/ARMCMx/chcore_v6m.c | 160 - .../os/ports/GCC/ARMCMx/chcore_v6m.h | 267 - .../os/ports/GCC/ARMCMx/chcore_v7m.c | 190 - .../os/ports/GCC/ARMCMx/chcore_v7m.h | 278 - ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chtypes.h | 87 - .../os/ports/GCC/ARMCMx/cmsis/core_cm0.c | 455 - .../os/ports/GCC/ARMCMx/cmsis/core_cm0.h | 991 -- .../os/ports/GCC/ARMCMx/cmsis/core_cm3.c | 784 - .../os/ports/GCC/ARMCMx/cmsis/core_cm3.h | 1849 --- ChibiOS_2.0.8/os/ports/GCC/ARMCMx/crt0.s | 169 - ChibiOS_2.0.8/os/ports/GCC/ARMCMx/nvic.c | 82 - ChibiOS_2.0.8/os/ports/GCC/ARMCMx/nvic.h | 199 - .../os/ports/GCC/ARMCMx/old/chcore_v7m.c | 147 - .../os/ports/GCC/ARMCMx/old/chcore_v7m.h | 305 - ChibiOS_2.0.8/os/ports/GCC/ARMCMx/port.dox | 213 - ChibiOS_2.0.8/os/ports/GCC/AVR/chcore.c | 143 - ChibiOS_2.0.8/os/ports/GCC/AVR/chcore.h | 323 - ChibiOS_2.0.8/os/ports/GCC/AVR/chtypes.h | 89 - ChibiOS_2.0.8/os/ports/GCC/AVR/port.dox | 89 - ChibiOS_2.0.8/os/ports/GCC/AVR/port.mk | 6 - ChibiOS_2.0.8/os/ports/GCC/MSP430/chcore.c | 108 - ChibiOS_2.0.8/os/ports/GCC/MSP430/chcore.h | 295 - ChibiOS_2.0.8/os/ports/GCC/MSP430/chtypes.h | 89 - ChibiOS_2.0.8/os/ports/GCC/MSP430/port.dox | 95 - ChibiOS_2.0.8/os/ports/GCC/MSP430/port.mk | 6 - ChibiOS_2.0.8/os/ports/GCC/MSP430/rules.mk | 87 - ChibiOS_2.0.8/os/ports/GCC/PPC/SPC56x/ivor.s | 181 - .../os/ports/GCC/PPC/SPC56x/vectors.s | 1501 -- ChibiOS_2.0.8/os/ports/GCC/PPC/chcore.c | 97 - ChibiOS_2.0.8/os/ports/GCC/PPC/chcore.h | 332 - ChibiOS_2.0.8/os/ports/GCC/PPC/chtypes.h | 101 - ChibiOS_2.0.8/os/ports/GCC/PPC/crt0.s | 126 - ChibiOS_2.0.8/os/ports/GCC/PPC/port.dox | 138 - ChibiOS_2.0.8/os/ports/GCC/PPC/port.mk | 6 - ChibiOS_2.0.8/os/ports/GCC/PPC/rules.mk | 87 - ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chcore.c | 91 - ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chcore.h | 227 - ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chtypes.h | 79 - ChibiOS_2.0.8/os/ports/GCC/SIMIA32/port.mk | 6 - ChibiOS_2.0.8/os/ports/RC/STM8/chcore.c | 83 - ChibiOS_2.0.8/os/ports/RC/STM8/chcore.h | 332 - ChibiOS_2.0.8/os/ports/RC/STM8/chtypes.h | 137 - ChibiOS_2.0.8/os/ports/RC/STM8/port.dox | 94 - ChibiOS_2.0.8/os/ports/ports.dox | 32 - ChibiOS_2.0.8/os/various/ch.cpp | 342 - ChibiOS_2.0.8/os/various/ch.hpp | 625 - ChibiOS_2.0.8/os/various/evtimer.c | 76 - ChibiOS_2.0.8/os/various/evtimer.h | 69 - ChibiOS_2.0.8/os/various/memstreams.c | 102 - ChibiOS_2.0.8/os/various/memstreams.h | 80 - ChibiOS_2.0.8/os/various/shell.c | 306 - ChibiOS_2.0.8/os/various/shell.h | 97 - ChibiOS_2.0.8/os/various/syscalls.c | 177 - ChibiOS_2.0.8/os/various/various.dox | 75 - ChibiOS_2.0.8/readme.txt | 432 - ChibiOS_2.0.8/test/coverage/Makefile | 150 - ChibiOS_2.0.8/test/coverage/board.h | 30 - ChibiOS_2.0.8/test/coverage/chconf.h | 494 - ChibiOS_2.0.8/test/coverage/halconf.h | 159 - ChibiOS_2.0.8/test/coverage/main.c | 53 - ChibiOS_2.0.8/test/coverage/readme.txt | 6 - ChibiOS_2.0.8/test/test.c | 393 - ChibiOS_2.0.8/test/test.dox | 92 - ChibiOS_2.0.8/test/test.h | 167 - ChibiOS_2.0.8/test/test.mk | 16 - ChibiOS_2.0.8/test/testbmk.c | 778 - ChibiOS_2.0.8/test/testbmk.h | 32 - ChibiOS_2.0.8/test/testdyn.c | 287 - ChibiOS_2.0.8/test/testdyn.h | 32 - ChibiOS_2.0.8/test/testevt.c | 319 - ChibiOS_2.0.8/test/testevt.h | 32 - ChibiOS_2.0.8/test/testheap.c | 174 - ChibiOS_2.0.8/test/testheap.h | 32 - ChibiOS_2.0.8/test/testmbox.c | 187 - ChibiOS_2.0.8/test/testmbox.h | 32 - ChibiOS_2.0.8/test/testmsg.c | 133 - ChibiOS_2.0.8/test/testmsg.h | 32 - ChibiOS_2.0.8/test/testmtx.c | 674 - ChibiOS_2.0.8/test/testmtx.h | 32 - ChibiOS_2.0.8/test/testpools.c | 122 - ChibiOS_2.0.8/test/testpools.h | 32 - ChibiOS_2.0.8/test/testqueues.c | 225 - ChibiOS_2.0.8/test/testqueues.h | 32 - ChibiOS_2.0.8/test/testsem.c | 266 - ChibiOS_2.0.8/test/testsem.h | 32 - ChibiOS_2.0.8/test/testthd.c | 257 - ChibiOS_2.0.8/test/testthd.h | 32 - ChibiOS_2.0.8/testhal/STM32/Makefile | 204 - ChibiOS_2.0.8/testhal/STM32/ch.ld | 120 - ChibiOS_2.0.8/testhal/STM32/chconf.h | 494 - ChibiOS_2.0.8/testhal/STM32/halconf.h | 159 - ChibiOS_2.0.8/testhal/STM32/main.c | 228 - ChibiOS_2.0.8/testhal/STM32/mcuconf.h | 107 - ChibiOS_2.0.8/testhal/STM32/readme.txt | 30 - ChibiOS_2.0.8/testhal/STM32/settings.c | 82 - ChibiOS_2.0.8/testhal/STM32/settings.h | 41 - 1909 files changed, 4 insertions(+), 316163 deletions(-) delete mode 100644 ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.c delete mode 100644 ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.h delete mode 100644 ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.mk delete mode 100644 ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.c delete mode 100644 ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.h delete mode 100644 ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.mk delete mode 100644 ChibiOS_2.0.8/boards/GENERIC_SPC563/board.c delete mode 100644 ChibiOS_2.0.8/boards/GENERIC_SPC563/board.h delete mode 100644 ChibiOS_2.0.8/boards/GENERIC_SPC563/board.mk delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.c delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.h delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.mk delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.c delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.h delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.mk delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.c delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.h delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.mk delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/buzzer.c delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/buzzer.h delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.c delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.h delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.mk delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.c delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.h delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.mk delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.c delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.h delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.mk delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.c delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.h delete mode 100644 ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.mk delete mode 100644 ChibiOS_2.0.8/boards/RAISONANCE_REVA_STM8S/board.c delete mode 100644 ChibiOS_2.0.8/boards/RAISONANCE_REVA_STM8S/board.h delete mode 100644 ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.c delete mode 100644 ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.h delete mode 100644 ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.mk delete mode 100644 ChibiOS_2.0.8/boards/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/cc.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/perf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.c delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwip.mk delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.c delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwipopts.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/web/web.c delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/web/web.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/cc-arch.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/clock-arch.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/uip-conf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/webthread.c delete mode 100644 ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/webthread.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/main.cpp delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ride7/ch.rapp delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ride7/ch.rprj delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/lcd.c delete mode 100644 ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/lcd.h delete mode 100644 ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/mspgcc/msp430x1611.x delete mode 100644 ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/PPC-SPC563-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/PPC-SPC563-GCC/ch.ld delete mode 100644 ChibiOS_2.0.8/demos/PPC-SPC563-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/PPC-SPC563-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/PPC-SPC563-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/Posix-GCC/Makefile delete mode 100644 ChibiOS_2.0.8/demos/Posix-GCC/board.h delete mode 100644 ChibiOS_2.0.8/demos/Posix-GCC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/Posix-GCC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/Posix-GCC/main.c delete mode 100644 ChibiOS_2.0.8/demos/Posix-GCC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/ch.rapp delete mode 100644 ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/ch.rprj delete mode 100644 ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/main.c delete mode 100644 ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/mcuconf.h delete mode 100644 ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/readme.txt delete mode 100644 ChibiOS_2.0.8/demos/Win32-MinGW/Makefile delete mode 100644 ChibiOS_2.0.8/demos/Win32-MinGW/board.h delete mode 100644 ChibiOS_2.0.8/demos/Win32-MinGW/chconf.h delete mode 100644 ChibiOS_2.0.8/demos/Win32-MinGW/halconf.h delete mode 100644 ChibiOS_2.0.8/demos/Win32-MinGW/main.c delete mode 100644 ChibiOS_2.0.8/demos/Win32-MinGW/readme.txt delete mode 100644 ChibiOS_2.0.8/docs/Doxyfile delete mode 100644 ChibiOS_2.0.8/docs/html/_a_r_m7_2crt0_8s.html delete mode 100644 ChibiOS_2.0.8/docs/html/_a_r_m7_2crt0_8s_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/_a_r_m_c_mx_2crt0_8s.html delete mode 100644 ChibiOS_2.0.8/docs/html/_a_r_m_c_mx_2crt0_8s_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/_l_p_c11xx_2cmparams_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/_l_p_c11xx_2cmparams_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/_l_p_c13xx_2cmparams_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/_l_p_c13xx_2cmparams_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/_p_p_c_2crt0_8s.html delete mode 100644 ChibiOS_2.0.8/docs/html/_p_p_c_2crt0_8s_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/_s_t_m32_f10x_2cmparams_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/_s_t_m32_f10x_2cmparams_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/adc_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/adc_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/adc_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/adc_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/annotated.html delete mode 100644 ChibiOS_2.0.8/docs/html/architecture.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_atomic.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_create_thread.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_debug.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_design.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_eclipse.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_eclipse2.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_events.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_integrationguide.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_interrupts.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_jitter.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_lifecycle.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_manage_memory.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_mutual_exclusion.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_portguide.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_roundrobin.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_saveram.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_stacks.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_stop_os.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_timing.html delete mode 100644 ChibiOS_2.0.8/docs/html/article_wakeup.html delete mode 100644 ChibiOS_2.0.8/docs/html/articles.html delete mode 100644 ChibiOS_2.0.8/docs/html/at91sam7_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/at91sam7__mii_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/at91sam7__mii_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/at91sam7__mii_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/at91sam7__mii_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/bc_s.png delete mode 100644 ChibiOS_2.0.8/docs/html/can_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/can_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/can_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/can_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ch_8cpp.html delete mode 100644 ChibiOS_2.0.8/docs/html/ch_8cpp_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ch_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ch_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ch_8hpp.html delete mode 100644 ChibiOS_2.0.8/docs/html/ch_8hpp_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcond_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcond_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcond_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcond_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chconf_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chconf_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcore__v6m_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcore__v6m_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcore__v6m_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcore__v6m_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcore__v7m_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcore__v7m_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcore__v7m_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcore__v7m_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcoreasm_8s.html delete mode 100644 ChibiOS_2.0.8/docs/html/chcoreasm_8s_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chdebug_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chdebug_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chdebug_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chdebug_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chevents_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chevents_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chevents_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chevents_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chheap_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chheap_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chheap_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chheap_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chinline_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chinline_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chioch_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chioch_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chlists_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chlists_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chlists_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chlists_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmboxes_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmboxes_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmboxes_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmboxes_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmemcore_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmemcore_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmemcore_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmemcore_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmempools_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmempools_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmempools_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmempools_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmsg_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmsg_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmsg_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmsg_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmtx_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmtx_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmtx_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chmtx_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chqueues_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chqueues_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chqueues_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chqueues_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chregistry_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chregistry_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chregistry_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chregistry_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chschd_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chschd_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chschd_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chschd_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chsem_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chsem_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chsem_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chsem_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chstreams_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chstreams_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chsys_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chsys_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chsys_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chsys_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chthreads_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chthreads_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chthreads_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chthreads_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chvt_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/chvt_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/chvt_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/chvt_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread.html delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a0589beba9bb4c959b3f49a82b24562eb_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a1557c9e6e0b61a7eb848ce928115973d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a44de1239fc6517ddf735405dd7fc8463_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a48012dd4151de3d40aa5139b230ed627_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a4ecedb2d2b646ea4a9261c0e62f16945_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a5c7600b2472318e1406d5c5dbc1a73d5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a6cde6d5b592476aded69ee10b5adc912_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a8b4a3de70b98980e6836a48f3e97969c_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a9391836cb66a13932044703d1833ae64_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_aa824957049b5d62a4d23b0c9758b30a5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_ab8e737914200f075bf02ade85876764d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_abc119aef948c9050d2e18a5a2686d88d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_ae960dbec72042a9072e35984523694b8_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var.html delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a0111c4947178c9ef6b15e03f24d2e861_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a075c5724485b6f47bdf6f1f003154f02_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a1b9e183dd1c97f1a0104f57f47197ecc_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a37e0b0cb4ac5cbe6bbb56c51539284c8_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a866a352fb3bc95f07abda728d4ae4906_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_enhanced_thread.html delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_enhanced_thread__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event.html delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_a177bc72df220068c9d620b8e9f42f2f5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_a39acaf2436f139a798973308c1929031_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_a4870dfce1f2ace0ab434718b0960b960_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_a55bd3220048e77217f5f75af7697d46f_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_a5853ef97699efe31a969c7fc200e09a1_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_a665b23d0d212b06107a27f118021238c_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_ab8c805f6b615e47050a75b16fd94492d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_ab8fc502561437fec0194653052202b82_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_aca48258fbffb54c6e19bbb9016c4cee1_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_ae3c7092d78ac9dda43c109b356826f41_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_aeb53e2435cf8f614ea51e3c90334d5ae_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_afde2cfb76dbd552ebb05bc6c6c8b2969_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex.html delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a00b2ff557451955a905ecdca2855389b_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a03150e8fa423f7e042661d350d238b84_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a1726d7244983f7be74fcfa9cfb63745f_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a787ecfd207fd25760a3c07517b69c148_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore.html delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a0804607c066a7a373188cb8220203f8f_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a202630db53afefbe5c419ee6d2eddab1_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a3f2ad5962e43c82fc56b1e0e76a58c9a_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a589b4780f60d73929bd77a652b526868_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_abfb1b068e95063f490b27cc3b467f63f_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_aecb934714ebe5658c857ef1021dd5f2b_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_system.html delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_system_a368a84ccf6f537f7ba732829cbb29281_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_timer.html delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_timer_a065b7fbc2a055152c39505ae91ea9754_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_timer_a375cb7ce8108c24336016a94efd8a787_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/classes.html delete mode 100644 ChibiOS_2.0.8/docs/html/closed.png delete mode 100644 ChibiOS_2.0.8/docs/html/concepts.html delete mode 100644 ChibiOS_2.0.8/docs/html/credits.html delete mode 100644 ChibiOS_2.0.8/docs/html/custom.css delete mode 100644 ChibiOS_2.0.8/docs/html/doxygen.png delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse003.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse004.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse005.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse006.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse007.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse008.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse009.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse010.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse011.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse012.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/eclipse013.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/evtimer_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/evtimer_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/evtimer_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/evtimer_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/files.html delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2blank.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2doc.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2folderclosed.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2folderopen.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2lastnode.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2link.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2mlastnode.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2mnode.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2node.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2plastnode.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2pnode.png delete mode 100644 ChibiOS_2.0.8/docs/html/ftv2vertline.png delete mode 100644 ChibiOS_2.0.8/docs/html/functions.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x62.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x63.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x64.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x65.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x67.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x68.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x69.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x6c.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x6d.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x6e.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x6f.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x70.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x71.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x72.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x73.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x74.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x75.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x76.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_0x77.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_func.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x62.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x63.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x64.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x65.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x67.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x68.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x6d.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x6e.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x6f.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x70.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x71.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x72.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x73.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x74.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x75.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x76.html delete mode 100644 ChibiOS_2.0.8/docs/html/functions_vars_0x77.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x61.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x62.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x63.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x64.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x65.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x66.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x68.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x69.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x6c.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x6d.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x6e.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x6f.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x70.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x71.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x72.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x73.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x74.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x75.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x76.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_0x77.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x61.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x62.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x63.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x64.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x65.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x66.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x68.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x69.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x6c.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x6d.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x6e.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x6f.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x70.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x71.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x72.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x73.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x74.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x75.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_defs_0x77.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_enum.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_eval.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x61.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x63.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x64.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x65.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x66.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x68.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x69.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x6c.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x6d.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x6e.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x70.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x71.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x72.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x73.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x74.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_func_0x76.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_type.html delete mode 100644 ChibiOS_2.0.8/docs/html/globals_vars.html delete mode 100644 ChibiOS_2.0.8/docs/html/goals.html delete mode 100644 ChibiOS_2.0.8/docs/html/graph_legend.html delete mode 100644 ChibiOS_2.0.8/docs/html/graph_legend.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c___l_l_d.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c___l_l_d.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c_ga026ac46dfe36031ab177e35f3aff5b09_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c_ga3caf934a28b65e6a5eda3e882ca06845_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c_ga92f8b4434b8199323b1469e0479de7f8_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c_gabce14d8f240e85715cded02c85b6585a_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c_gac7f619e304c79c17f19221d05138d405_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c_gadb9905e3fcd0f053ca1e07e9686bf641_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_d_c_gafd645b17cf0581bcaa22c56011c775e4_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m7.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m7.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_n_f.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_n_f.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_r_e.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_r_e.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m7___s_t_a_r_t_u_p.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m7___s_t_a_r_t_u_p.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_n_f.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_n_f.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_r_e.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_r_e.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___l_p_c11xx.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___l_p_c11xx.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___l_p_c13xx.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___l_p_c13xx.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___n_v_i_c.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___n_v_i_c.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_a_r_t_u_p.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_a_r_t_u_p.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_m32_f10x.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_m32_f10x.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v6_m___c_o_r_e.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v6_m___c_o_r_e.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v6_m___c_o_r_e_ga13ce719bfc3197594c741fab5d09ae0c_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v7_m___c_o_r_e.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v7_m___c_o_r_e.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v7_m___c_o_r_e_ga13ce719bfc3197594c741fab5d09ae0c_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v7_m___c_o_r_e_gaa870f7fd669dc9419dda0f9972ecc0d8_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v7_m___c_o_r_e_gaffa627cc34d473a5c1b00810798c1592_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___m_a_c.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___m_a_c.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___m_i_i.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___m_i_i.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___p_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___p_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___s_e_r_i_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___s_e_r_i_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_n_f.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_n_f.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_r_e.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_r_e.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r___d_r_i_v_e_r_s.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r___d_r_i_v_e_r_s.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r___s_e_r_i_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___a_v_r___s_e_r_i_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n___l_l_d.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n___l_l_d.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n_ga05d2448864b2cae4674ed7e6f3c576b8_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n_ga09737d4ae5be724bf791a309e8a28dff_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n_ga2d3efc34f7704ab23c293aac2be47764_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n_ga4e89a7d246119e077d27431a02586133_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n_ga557d845167f6ab4f224b036860411db5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n_ga97caf4f277c09588c225ea2328a74cba_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n_gad9c686d19b4319ef586af3631b779c6c_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___c_a_n_gadf8c892ca4bd2544d03be8a690885aef_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___h_a_l___c_o_n_f.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___h_a_l___c_o_n_f.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___h_a_l___l_l_d.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___h_a_l___l_l_d.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___h_a_l_gafd89c1650df524d95aef39b8bc38170d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___i_o.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___i_o.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c11xx.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c11xx.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c11xx___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c11xx___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c11xx___p_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c11xx___p_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c11xx___s_e_r_i_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c11xx___s_e_r_i_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c13xx.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c13xx.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c13xx___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c13xx___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c13xx___p_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c13xx___p_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c13xx___s_e_r_i_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c13xx___s_e_r_i_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x___p_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x___p_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_e_r_i_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_e_r_i_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_p_i.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_p_i.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x___v_i_c.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___l_p_c214x___v_i_c.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c___l_l_d.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c___l_l_d.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c_ga0f692163094614561eace2a8c30938f9_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c_ga151a33674ef86c2403ac7797fa87805c_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c_ga2d3c3dcea43573cf2b5d674e98a37aa3_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c_ga2f76703cfc76da57feedb57e9d37c8a4_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c_ga34d60b00ad9794d52da6833e18c9ec70_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c_ga4c6470b965aef1ee65bc6dd24c71bc5c_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c_ga7304721038db1d7c0cb616c9c4d3f0ce_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_a_c_gab5bf748233450f371b5a88f2accf87e1_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga076506461b42641a9fe632cc3e72dab5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga27833cde77794f914e4802c7e65281a5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga6aae8e8af4ea0c35c677fa472fb36318_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga6c62caa5d008460e7319fb2c36518ddc_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga7e02b9210a8d3d9f8465b8000983dadf_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga8031c8222f92a0c6632b36ff943fe825_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga9ce0adb181138efc1f835aff6d8eb203_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga9ff4f12fa759c3cb4aca2b64b11f1d22_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_gab90f252316351a93ec38b11f7eaf1f16_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_gae84abdd53540f03262822aa1f9a213b5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_gaf55b97f76be81f4ce5cde415f3131400_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_n_f.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_n_f.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_r_e.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_r_e.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___d_r_i_v_e_r_s.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___d_r_i_v_e_r_s.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___p_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___p_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___s_e_r_i_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___m_s_p430___s_e_r_i_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_a_l___l_l_d.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_a_l___l_l_d.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_p_c.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_p_c.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_n_f.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_n_f.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_r_e.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_r_e.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_p_c___s_t_a_r_t_u_p.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_p_c___s_t_a_r_t_u_p.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m___l_l_d.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m___l_l_d.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m_ga1c8ae46921c4ae7d57bd44dd994e10bd_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m_ga48b759363af69a6aaee37a362ed5bfd2_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m_ga7cb5729a65c0996584808e4f93b28a0d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m_ga8a4d0d8a47883efe286a332cade14080_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m_ga8a4d803d25a5326b48b3713ffd5fce53_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m_ga9c14dc1b026c78809440281786aceda3_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m_gac2679d11833a4ea9df5a9ed2e4a2c2e7_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___p_w_m_gafd6c45693467da77ab13edca8420620d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l___l_l_d.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l___l_l_d.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_ga5e77658b4f3b559927705dc8fbfbdfad_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_ga6c0462b840ea6364ca266a8d3fcb0945_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_gac94544bc991e2b85a601459463604346_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_gacb106a30f8007afdf9eeaf8681dbd3cf_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_gacb9838adcf51106f4e481f41a851cc34_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_gaced9c1cfde941c7614183b1c887e862b_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_gafa1753aa30a6b79cc7e6de3e8a156fdc_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_h_e_l_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_h_e_l_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_c563___d_r_i_v_e_r_s.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_c563___d_r_i_v_e_r_s.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_c563___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_c563___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_c563___s_e_r_i_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_c563___s_e_r_i_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i___l_l_d.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i___l_l_d.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_ga00809152c869db80192aa3e04266a99a_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_ga1b04a2410ef4323ee4e37c63f320c18f_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_ga382cfbdffd2df57cf3843d45164e8bfc_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_ga3c484a97cdec02c5dbf46a11245e3395_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_ga43889a7d4c473f653596f8c0acafce2a_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_ga6752c9f736f8de774a5bef6dfe2aae2e_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_ga803cec73f6dd8d3d1f18fb6a61b8255a_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_ga87a7bdc554b8e8fdfc77064e67689fcf_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_gad3a359eea03e68e95899886ae93a06e4_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_gadd99ad823b391dde114f04dedafe5e80_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_gae291c012872da9c89dec23581f701b5f_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_p_i_gaf1c59f3fd2f85620a5253c23d9586095_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___a_d_c.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___a_d_c.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___a_d_c_ga727ca25370379b53e77a820e7bfee540_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___c_a_n.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___c_a_n.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___d_m_a.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___d_m_a.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___p_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___p_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m_ga48b759363af69a6aaee37a362ed5bfd2_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m_ga7cb5729a65c0996584808e4f93b28a0d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m_ga8a4d803d25a5326b48b3713ffd5fce53_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___s_e_r_i_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___s_e_r_i_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___s_p_i.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32___s_p_i.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32_f103___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32_f103___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32_f10_x___c_l___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m32_f10_x___c_l___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_n_f.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_n_f.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_r_e.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_r_e.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_r_e_gaffa627cc34d473a5c1b00810798c1592_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___d_r_i_v_e_r_s.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___d_r_i_v_e_r_s.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___h_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___h_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___p_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___p_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___s_e_r_i_a_l.html delete mode 100644 ChibiOS_2.0.8/docs/html/group___s_t_m8___s_e_r_i_a_l.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__base.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__base.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__condvars.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__condvars.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__condvars_ga07a0c55ac1002a64e8c7f9b7e3ca1caf_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__condvars_ga466f912bc9b09b133fae862993004ffe_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__condvars_ga5cf1f4697985d81ee089b042391df6fc_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__condvars_ga60c24a8060a884313efe82b8404e77f6_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__condvars_ga7b9d882c348124fed46a1afc3db6c02c_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__condvars_ga9cf6ebe4c9f28cb206fab14984a18d29_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__condvars_gab6357d80b01ed8d225ef1e30a66248f9_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__condvars_gadddadb68e2a2ce061c7df0d647da9996_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__config.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__config.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__core.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__core.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__cpp__library.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__cpp__library.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__data__streams.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__data__streams.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__debug.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__debug.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__event__timer.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__event__timer.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__events.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events_ga2944a7fc82e7cc15537f5a7c04f457d3_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events_ga44015af4dd20f74b0f73824ff1c1b2f4_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events_ga6c219038c3e618e2142c6e1601997907_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events_ga75a812ae99ce83a3689f51d797a038de_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events_ga77651e22578713ebe355c1213286c2e9_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events_ga8c5c6bf310a08cdc836d23f98a87dbf5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events_ga90d702300eecee3d05f83e95b155c3ee_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events_gaa24d9bed5b676b577200c4a8ebe3b8a3_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events_gabd731d3ed2f037b2409e370676575f8d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__events_gaf690406ccc833e2c9235e7e2041a6715_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__external.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__heaps.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__heaps.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__heaps_ga7135c9ddbd1402a4a36ce44df948f4e4_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__heaps_ga7e7a6625a49b6a560a47ae7575575264_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__internals.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__internals.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__channels.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__channels.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues_ga0a35a7de945e4b56b5fb5f5c8567e296_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues_ga0d3a250e6572526b165d2c61f69230e5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues_ga142d0e885ac3a695f5f033a65f49abd0_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues_ga1e90d41fa021107d72b1bed81186aae8_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues_ga2252ca3e5d6ee6d8d323d025365aee59_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues_ga23b72ba9803de5a20caa84ffd0c193fc_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues_ga34a5a71f39e94fcfdd88935da92a8ce9_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues_ga3df1926602eb698119990b311b097ad9_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues_gaddf6fc39af7d905c9f23afde14d8d764_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__queues_gae2a5a0ef7c488ac02762e76933baa7b1_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__support.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__io__support.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__kernel.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__kernel.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__kernel__info.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__kernel__info.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mailboxes.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__mailboxes.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mailboxes_ga4199e224456395c3dbc74dbc889dff94_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mailboxes_ga55c5b8890b78127bc1fa5a324252d5e6_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mailboxes_ga61543bf11d0caa737f5818c67548c055_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mailboxes_ga9bafcc634765886f59cf68c0e35d070d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mailboxes_gaa9c91c0b781bec0df3540407d75b1bb3_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mailboxes_gac6514c185ae87c2633132478ea48d689_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mailboxes_gadc562242a8854497a1f9539cb9ffea09_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mailboxes_gaff65b97bfdbf9144e9727a100a9be93a_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__memcore.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__memcore.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__memcore_ga5394bda5b809ecf6b80b041b6b9ebaf4_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__memory.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__memory.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__memory__streams.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__memory__streams.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__messages.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__messages.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__messages_ga19a54b3b4b0e3677c47d650a3be3c7aa_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__messages_ga29a48a438e97dc47cb798a84e13764cb_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__messages_gae68fefbf9d0404bbf56ae354961fae41_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mutexes.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__mutexes.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mutexes_ga2d6350c2d147d1165c359f30798205f5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mutexes_ga705fa60fb8aa28a6632f693e83f78c96_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mutexes_ga853b4ced43d22fb5d82678dd2f0aba75_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mutexes_gaada14e216460dc55e1816234168cf95c_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mutexes_gae9ae07165126c9f6c0ce0b17bdb53669_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__mutexes_gafa06b82e3496c44eb7bf31d9f1b655ba_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__pools.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__pools.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__pools_ga978f8d038e8e981bf9e5a104b81c6cb6_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__pools_gab86190d70893fe708c75570af6720bd5_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__ports.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__ports.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__registry.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__registry.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__registry_gaefff43a49fb7888a596319d67cf01dab_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__scheduler.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__scheduler.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__scheduler_ga0257cf203e72a766a52059750cb97e6e_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__scheduler_ga306e564f678c1a39139639490c77e78b_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__scheduler_ga4e38b4bee3d2330f6a0f1cdb7660af20_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__scheduler_ga97c1c514b755a1e71caf2f19c1ccf986_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__scheduler_gae47a8819a21ef2d521124e76bfb37c95_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores_ga0bc227311e5be3e3b6e3aee6a68169da_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores_ga0dc7b4339506de346d67b4560b271e44_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores_ga58e266e609cfd3dbc67f299b3ae9debb_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores_ga7ec0cbda23e49e2370e0b91f20baf05e_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores_ga924ec5d191bb8debe8727ae4dd5d6d03_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores_gaa2c0367078533e291d2e889e251d8b67_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores_gabc8f7e509870e9b0527a6a68fad71425_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores_gaca0b70cf495a9cb7569e1cf5b07e2b3d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__semaphores_gae7972b6b22b80ac09bac5a186277ab81_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__synchronization.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__synchronization.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__system.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__system.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__system_gafe2c7de6567e98e487e009e81e3be10b_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__test.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads_ga048e588238dd336c6059133b3d0c3435_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads_ga24ab3a3a4d70214ee360867a1c3c75ac_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads_ga2c1ce2be73cd177af7e577b282232a7d_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads_ga50b84e3e82a4e09c1066e1d422e4c780_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads_ga5a5d9388c64e4c1a3aec129d2831eefe_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads_ga94a5727ecdbe0f738dfc8e1ede1c3409_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads_gaa22f80040cf192015be4607f31a0ac80_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads_gac6de13d4044b32d3ae9e2066b5d4c030_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__threads_gad3ccc1a6f054c543258ed2fe97ed2f58_cgraph.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__time.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__time.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__types.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__types.png delete mode 100644 ChibiOS_2.0.8/docs/html/group__various.html delete mode 100644 ChibiOS_2.0.8/docs/html/group__various.png delete mode 100644 ChibiOS_2.0.8/docs/html/hal_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/hal_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/hal_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/hal_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/hal__lld__f103_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/hal__lld__f103_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/hal__lld__f105__f107_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/hal__lld__f105__f107_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/halconf_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/halconf_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/hierarchy.html delete mode 100644 ChibiOS_2.0.8/docs/html/index.hhc delete mode 100644 ChibiOS_2.0.8/docs/html/index.hhk delete mode 100644 ChibiOS_2.0.8/docs/html/index.hhp delete mode 100644 ChibiOS_2.0.8/docs/html/index.html delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__0.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__1.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__10.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__11.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__12.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__13.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__14.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__15.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__16.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__17.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__18.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__19.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__2.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__20.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__21.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__22.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__23.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__24.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__25.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__26.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__27.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__28.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__29.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__3.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__30.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__31.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__32.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__33.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__34.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__35.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__36.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__37.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__38.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__39.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__4.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__40.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__41.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__42.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__43.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__44.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__45.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__46.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__47.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__48.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__49.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__5.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__50.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__51.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__52.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__53.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__54.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__55.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__56.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__57.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__58.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__59.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__6.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__60.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__61.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__62.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__63.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__64.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__65.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__66.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__67.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__68.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__69.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__7.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__70.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__71.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__72.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__73.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__8.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherit__graph__9.png delete mode 100644 ChibiOS_2.0.8/docs/html/inherits.html delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_1.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_10.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_11.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_12.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_13.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_14.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_15.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_16.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_17.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_18.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_19.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_2.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_3.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_4.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_5.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_6.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_7.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_8.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/inline_dotgraph_9.dot.png delete mode 100644 ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/kernel_2templates_2chtypes_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/kernel_2templates_2chtypes_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/lic_faq.html delete mode 100644 ChibiOS_2.0.8/docs/html/logo_small.png delete mode 100644 ChibiOS_2.0.8/docs/html/lpc214x_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/lpc214x_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/mac_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/mac_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/mac_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/mac_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/main.html delete mode 100644 ChibiOS_2.0.8/docs/html/memstreams_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/memstreams_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/memstreams_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/memstreams_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/mii_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/mmc__spi_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/mmc__spi_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/mmc__spi_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/mmc__spi_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/modules.html delete mode 100644 ChibiOS_2.0.8/docs/html/mpc563m_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/nav_f.png delete mode 100644 ChibiOS_2.0.8/docs/html/nav_h.png delete mode 100644 ChibiOS_2.0.8/docs/html/nvic_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/nvic_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/nvic_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/nvic_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/open.png delete mode 100644 ChibiOS_2.0.8/docs/html/page_general.html delete mode 100644 ChibiOS_2.0.8/docs/html/page_howtos.html delete mode 100644 ChibiOS_2.0.8/docs/html/page_kb.html delete mode 100644 ChibiOS_2.0.8/docs/html/pal_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/pal_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/pal_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/pal_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chtypes_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chtypes_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chtypes_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chtypes_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chtypes_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chtypes_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chtypes_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chtypes_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chtypes_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chtypes_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/pwm_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/pwm_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/pwm_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/pwm_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/serial_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/serial_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/serial_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/serial_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/shell_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/shell_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/shell_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/shell_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/spi_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/spi_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/spi_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/spi_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/stm32__dma_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/stm32__dma_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/stm32__dma_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/stm32__dma_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/stm8_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct___serial_driver.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct___serial_driver__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_a_d_c_config.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_a_d_c_conversion_group.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_a_d_c_driver.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_a_d_c_driver__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel_v_m_t.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_base_channel.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_base_channel__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_base_channel_v_m_t.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_base_sequential_stream.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_base_sequential_stream__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_base_sequential_stream_v_m_t.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_c_a_n_config.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_c_a_n_config__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_c_a_n_driver.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_c_a_n_driver__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_c_a_n_filter.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_c_a_n_rx_frame.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_c_a_n_tx_frame.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_c_m3___n_v_i_c.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_c_m3___s_c_b.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_c_m3___s_t.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_cond_var.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_cond_var__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_ctx_swc_event.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_e_m_a_c_descriptor.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_ev_timer.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_ev_timer__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_event_listener.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_event_listener__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_event_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_event_source__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_generic_config.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_generic_queue.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_generic_queue__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_i_o_bus.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_l_p_c13xx__gpio__setup__t.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_m_a_c_driver.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_m_a_c_driver__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_m_a_c_receive_descriptor.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_m_a_c_receive_descriptor__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_m_a_c_transmit_descriptor.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_m_a_c_transmit_descriptor__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_m_m_c_config.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_m_m_c_driver.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_m_m_c_driver__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_mem_stream_v_m_t.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_memory_pool.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_memory_pool__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_memory_stream.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_memory_stream__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_mutex.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_mutex__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_p_a_l_config.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_p_a_l_config__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_p_w_m_channel_config.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_p_w_m_config.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_p_w_m_config__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_p_w_m_driver.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_p_w_m_driver__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_ready_list.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_ready_list__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_s_p_i_config.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_s_p_i_driver.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_s_p_i_driver__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_semaphore.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_semaphore__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_serial_config.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_serial_driver_v_m_t.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_shell_command.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_shell_config.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_shell_config__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_thread.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_thread__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_threads_list.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_threads_list__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_threads_queue.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_threads_queue__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_trace_buffer.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_trace_buffer__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_v_t_list.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_v_t_list__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/struct_virtual_timer.html delete mode 100644 ChibiOS_2.0.8/docs/html/struct_virtual_timer__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/structat91sam7__pio__setup__t.html delete mode 100644 ChibiOS_2.0.8/docs/html/structcmxctx.html delete mode 100644 ChibiOS_2.0.8/docs/html/structcontext.html delete mode 100644 ChibiOS_2.0.8/docs/html/structcontext__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/structeabi__frame.html delete mode 100644 ChibiOS_2.0.8/docs/html/structextctx.html delete mode 100644 ChibiOS_2.0.8/docs/html/structgpio__t.html delete mode 100644 ChibiOS_2.0.8/docs/html/structintctx.html delete mode 100644 ChibiOS_2.0.8/docs/html/structlpc111x__gpio__setup__t.html delete mode 100644 ChibiOS_2.0.8/docs/html/structlpc214x__fio__setup__t.html delete mode 100644 ChibiOS_2.0.8/docs/html/structmemory__heap.html delete mode 100644 ChibiOS_2.0.8/docs/html/structmemory__heap__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/structmsp430__dio__setup__t.html delete mode 100644 ChibiOS_2.0.8/docs/html/structpool__header.html delete mode 100644 ChibiOS_2.0.8/docs/html/structpool__header__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/structport__common__t.html delete mode 100644 ChibiOS_2.0.8/docs/html/structstkalign__t.html delete mode 100644 ChibiOS_2.0.8/docs/html/structstm32__gpio__setup__t.html delete mode 100644 ChibiOS_2.0.8/docs/html/structstm8__startctx.html delete mode 100644 ChibiOS_2.0.8/docs/html/structtestcase.html delete mode 100644 ChibiOS_2.0.8/docs/html/syscalls_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/tab_a.png delete mode 100644 ChibiOS_2.0.8/docs/html/tab_b.png delete mode 100644 ChibiOS_2.0.8/docs/html/tab_h.png delete mode 100644 ChibiOS_2.0.8/docs/html/tab_s.png delete mode 100644 ChibiOS_2.0.8/docs/html/tabs.css delete mode 100644 ChibiOS_2.0.8/docs/html/target.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2adc__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2adc__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2adc__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2adc__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2can__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2can__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2can__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2can__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2hal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2hal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2hal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2hal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2mac__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2mac__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2mac__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2mac__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2pal__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2pal__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2pal__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2pal__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2serial__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2serial__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2serial__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2serial__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2spi__lld_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2spi__lld_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2spi__lld_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/templates_2spi__lld_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_002.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_003.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_004.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_005.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_006.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_007.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_008.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_009.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_010.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_011.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_012.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_benchmarks_013.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_dynamic.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_dynamic_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_dynamic_002.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_dynamic_003.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_events.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_events_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_events_002.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_events_003.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_heap.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_heap_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mbox.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mbox_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_msg.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_msg_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mtx.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mtx_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mtx_002.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mtx_003.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mtx_004.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mtx_005.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mtx_006.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mtx_007.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_mtx_008.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_pools.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_pools_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_queues.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_queues_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_queues_002.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_sem.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_sem_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_sem_002.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_sem_003.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_threads.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_threads_001.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_threads_002.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_threads_003.html delete mode 100644 ChibiOS_2.0.8/docs/html/test_threads_004.html delete mode 100644 ChibiOS_2.0.8/docs/html/testbmk_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testbmk_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testbmk_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testbmk_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testdyn_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testdyn_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testdyn_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testdyn_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testevt_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testevt_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testevt_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testevt_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testheap_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testheap_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testheap_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testheap_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmbox_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmbox_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmbox_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmbox_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmsg_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmsg_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmsg_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmsg_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmtx_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmtx_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmtx_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testmtx_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testpools_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testpools_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testpools_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testpools_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testqueues_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testqueues_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testqueues_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testqueues_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testsem_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testsem_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testsem_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testsem_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testsuite.html delete mode 100644 ChibiOS_2.0.8/docs/html/testthd_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/testthd_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/testthd_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/testthd_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/tool001.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/tool002.jpg delete mode 100644 ChibiOS_2.0.8/docs/html/tree.html delete mode 100644 ChibiOS_2.0.8/docs/html/typedefs_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/typedefs_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/union____ioport.html delete mode 100644 ChibiOS_2.0.8/docs/html/union____ioport__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/unionheap__header.html delete mode 100644 ChibiOS_2.0.8/docs/html/unionheap__header__coll__graph.png delete mode 100644 ChibiOS_2.0.8/docs/html/vic_8c.html delete mode 100644 ChibiOS_2.0.8/docs/html/vic_8c_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/vic_8h.html delete mode 100644 ChibiOS_2.0.8/docs/html/vic_8h_source.html delete mode 100644 ChibiOS_2.0.8/docs/html/workspace.png delete mode 100644 ChibiOS_2.0.8/docs/index.html delete mode 100644 ChibiOS_2.0.8/docs/readme.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/AT91SAM7X-48-ARM.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/AT91SAM7X-48-THUMB.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/ATmega128-16.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/LPC1114-48.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/LPC1343-72.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/LPC2148-48-ARM.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/LPC2148-48-THUMB.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/MSP430F1611-0.75.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/MSP430F1611-8.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/SPC563M64-80.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/STM32F103-48.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/STM32F103-72.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/STM8S208-16.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/build.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/coverage.txt delete mode 100644 ChibiOS_2.0.8/docs/reports/kernel.txt delete mode 100644 ChibiOS_2.0.8/docs/rsc/custom.css delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse003.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse004.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse005.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse006.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse007.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse008.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse009.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse010.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse011.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse012.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/eclipse013.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/footer.html delete mode 100644 ChibiOS_2.0.8/docs/rsc/header.html delete mode 100644 ChibiOS_2.0.8/docs/rsc/layout.xml delete mode 100644 ChibiOS_2.0.8/docs/rsc/logo.png delete mode 100644 ChibiOS_2.0.8/docs/rsc/tabs.css delete mode 100644 ChibiOS_2.0.8/docs/rsc/tool001.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/tool002.jpg delete mode 100644 ChibiOS_2.0.8/docs/rsc/workspace.png delete mode 100644 ChibiOS_2.0.8/docs/rsc/workspace.svg delete mode 100644 ChibiOS_2.0.8/docs/src/architecture.dox delete mode 100644 ChibiOS_2.0.8/docs/src/articles.dox delete mode 100644 ChibiOS_2.0.8/docs/src/atomic.dox delete mode 100644 ChibiOS_2.0.8/docs/src/concepts.dox delete mode 100644 ChibiOS_2.0.8/docs/src/createthread.dox delete mode 100644 ChibiOS_2.0.8/docs/src/credits.dox delete mode 100644 ChibiOS_2.0.8/docs/src/debug.dox delete mode 100644 ChibiOS_2.0.8/docs/src/design.dox delete mode 100644 ChibiOS_2.0.8/docs/src/eclipse.dox delete mode 100644 ChibiOS_2.0.8/docs/src/eclipse2.dox delete mode 100644 ChibiOS_2.0.8/docs/src/events.dox delete mode 100644 ChibiOS_2.0.8/docs/src/goals.dox delete mode 100644 ChibiOS_2.0.8/docs/src/integrationguide.dox delete mode 100644 ChibiOS_2.0.8/docs/src/interrupts.dox delete mode 100644 ChibiOS_2.0.8/docs/src/jitter.dox delete mode 100644 ChibiOS_2.0.8/docs/src/licfaq.dox delete mode 100644 ChibiOS_2.0.8/docs/src/lifecycle.dox delete mode 100644 ChibiOS_2.0.8/docs/src/main.dox delete mode 100644 ChibiOS_2.0.8/docs/src/memory.dox delete mode 100644 ChibiOS_2.0.8/docs/src/mutualexcl.dox delete mode 100644 ChibiOS_2.0.8/docs/src/portguide.dox delete mode 100644 ChibiOS_2.0.8/docs/src/roundrobin.dox delete mode 100644 ChibiOS_2.0.8/docs/src/saveram.dox delete mode 100644 ChibiOS_2.0.8/docs/src/stacks.dox delete mode 100644 ChibiOS_2.0.8/docs/src/stop_os.dox delete mode 100644 ChibiOS_2.0.8/docs/src/target.dox delete mode 100644 ChibiOS_2.0.8/docs/src/timing.dox delete mode 100644 ChibiOS_2.0.8/docs/src/wakeup.dox delete mode 100644 ChibiOS_2.0.8/exception.txt delete mode 100644 ChibiOS_2.0.8/ext/ext.dox delete mode 100644 ChibiOS_2.0.8/ext/ff007e-patched.zip delete mode 100644 ChibiOS_2.0.8/ext/lwip-1.3.1.zip delete mode 100644 ChibiOS_2.0.8/ext/readme.txt delete mode 100644 ChibiOS_2.0.8/ext/stm32lib-3.3.0.zip delete mode 100644 ChibiOS_2.0.8/ext/uip-1.0.patches.zip delete mode 100644 ChibiOS_2.0.8/ext/uip-1.0.tar.gz delete mode 100644 ChibiOS_2.0.8/license.txt delete mode 100644 ChibiOS_2.0.8/os/hal/hal.dox delete mode 100644 ChibiOS_2.0.8/os/hal/hal.mk delete mode 100644 ChibiOS_2.0.8/os/hal/include/adc.h delete mode 100644 ChibiOS_2.0.8/os/hal/include/can.h delete mode 100644 ChibiOS_2.0.8/os/hal/include/hal.h delete mode 100644 ChibiOS_2.0.8/os/hal/include/mac.h delete mode 100644 ChibiOS_2.0.8/os/hal/include/mii.h delete mode 100644 ChibiOS_2.0.8/os/hal/include/mmc_spi.h delete mode 100644 ChibiOS_2.0.8/os/hal/include/pal.h delete mode 100644 ChibiOS_2.0.8/os/hal/include/pwm.h delete mode 100644 ChibiOS_2.0.8/os/hal/include/serial.h delete mode 100644 ChibiOS_2.0.8/os/hal/include/spi.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S128.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S256.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S512.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S64.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X128.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X256.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X512.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/aic.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/aic.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7_mii.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7_mii.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/mac_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/mac_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/pal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/pal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/platform.dox delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/platform.mk delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AVR/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AVR/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AVR/platform.dox delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AVR/platform.mk delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AVR/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/AVR/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC11xx/LPC11xx.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC11xx/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC11xx/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC11xx/pal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC11xx/pal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC11xx/platform.dox delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC11xx/platform.mk delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC11xx/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC11xx/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC11xx/system_LPC11xx.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC13xx/LPC13xx.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC13xx/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC13xx/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC13xx/pal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC13xx/pal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC13xx/platform.dox delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC13xx/platform.mk delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC13xx/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC13xx/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC13xx/system_LPC13xx.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/lpc214x.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/pal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/pal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/platform.dox delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/platform.mk delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/spi_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/spi_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/vic.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/LPC214x/vic.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/MSP430/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/MSP430/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/MSP430/pal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/MSP430/pal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/MSP430/platform.dox delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/MSP430/platform.mk delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/MSP430/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/MSP430/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Posix/console.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Posix/console.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Posix/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Posix/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Posix/pal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Posix/pal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Posix/platform.mk delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Posix/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Posix/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/SPC56x/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/SPC56x/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/SPC56x/mpc563m.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/SPC56x/platform.dox delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/SPC56x/platform.mk delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/SPC56x/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/SPC56x/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/SPC56x/typedefs.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/adc_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/adc_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/can_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/can_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld_f103.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld_f105_f107.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/pal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/pal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/platform.dox delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/platform.mk delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/pwm_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/pwm_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/spi_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/spi_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/stm32_dma.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/stm32_dma.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM32/stm32f10x.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM8/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM8/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM8/pal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM8/pal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM8/platform.dox delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM8/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM8/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/STM8/stm8.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Win32/console.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Win32/console.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Win32/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Win32/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Win32/pal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Win32/pal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Win32/platform.mk delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Win32/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/platforms/Win32/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/src/adc.c delete mode 100644 ChibiOS_2.0.8/os/hal/src/can.c delete mode 100644 ChibiOS_2.0.8/os/hal/src/hal.c delete mode 100644 ChibiOS_2.0.8/os/hal/src/mac.c delete mode 100644 ChibiOS_2.0.8/os/hal/src/mmc_spi.c delete mode 100644 ChibiOS_2.0.8/os/hal/src/pal.c delete mode 100644 ChibiOS_2.0.8/os/hal/src/pwm.c delete mode 100644 ChibiOS_2.0.8/os/hal/src/serial.c delete mode 100644 ChibiOS_2.0.8/os/hal/src/spi.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/adc_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/adc_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/templates/can_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/can_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/templates/hal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/hal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/templates/halconf.h delete mode 100644 ChibiOS_2.0.8/os/hal/templates/mac_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/mac_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/templates/meta/driver.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/meta/driver.h delete mode 100644 ChibiOS_2.0.8/os/hal/templates/meta/driver_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/meta/driver_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/templates/pal_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/pal_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/templates/pwm_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/pwm_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/templates/serial_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/serial_lld.h delete mode 100644 ChibiOS_2.0.8/os/hal/templates/spi_lld.c delete mode 100644 ChibiOS_2.0.8/os/hal/templates/spi_lld.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/ch.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chcond.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chdebug.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chevents.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chheap.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chinline.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chioch.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chlists.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chmboxes.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chmemcore.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chmempools.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chmsg.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chmtx.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chqueues.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chregistry.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chschd.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chsem.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chstreams.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chsys.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chthreads.h delete mode 100644 ChibiOS_2.0.8/os/kernel/include/chvt.h delete mode 100644 ChibiOS_2.0.8/os/kernel/kernel.dox delete mode 100644 ChibiOS_2.0.8/os/kernel/kernel.mk delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chcond.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chdebug.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chevents.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chheap.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chlists.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chmboxes.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chmemcore.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chmempools.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chmsg.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chmtx.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chqueues.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chregistry.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chschd.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chsem.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chsys.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chthreads.c delete mode 100644 ChibiOS_2.0.8/os/kernel/src/chvt.c delete mode 100644 ChibiOS_2.0.8/os/kernel/templates/chconf.h delete mode 100644 ChibiOS_2.0.8/os/kernel/templates/chcore.c delete mode 100644 ChibiOS_2.0.8/os/kernel/templates/chcore.h delete mode 100644 ChibiOS_2.0.8/os/kernel/templates/chtypes.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM/rules.mk delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/AT91SAM7/vectors.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/AT91SAM7/wfi.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/LPC214x/vectors.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/LPC214x/wfi.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/chcore.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/chcore.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/chcoreasm.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/chtypes.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/crt0.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/port.dox delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARM7/port.mk delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/cmparams.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/port.mk delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/vectors.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/cmparams.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/port.mk delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/vectors.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/cmparams.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/port.mk delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/vectors.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v6m.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v6m.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v7m.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v7m.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chtypes.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm0.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm0.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm3.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm3.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/crt0.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/nvic.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/nvic.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/old/chcore_v7m.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/old/chcore_v7m.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/ARMCMx/port.dox delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/AVR/chcore.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/AVR/chcore.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/AVR/chtypes.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/AVR/port.dox delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/AVR/port.mk delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/MSP430/chcore.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/MSP430/chcore.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/MSP430/chtypes.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/MSP430/port.dox delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/MSP430/port.mk delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/MSP430/rules.mk delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/PPC/SPC56x/ivor.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/PPC/SPC56x/vectors.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/PPC/chcore.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/PPC/chcore.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/PPC/chtypes.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/PPC/crt0.s delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/PPC/port.dox delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/PPC/port.mk delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/PPC/rules.mk delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chcore.c delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chcore.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chtypes.h delete mode 100644 ChibiOS_2.0.8/os/ports/GCC/SIMIA32/port.mk delete mode 100644 ChibiOS_2.0.8/os/ports/RC/STM8/chcore.c delete mode 100644 ChibiOS_2.0.8/os/ports/RC/STM8/chcore.h delete mode 100644 ChibiOS_2.0.8/os/ports/RC/STM8/chtypes.h delete mode 100644 ChibiOS_2.0.8/os/ports/RC/STM8/port.dox delete mode 100644 ChibiOS_2.0.8/os/ports/ports.dox delete mode 100644 ChibiOS_2.0.8/os/various/ch.cpp delete mode 100644 ChibiOS_2.0.8/os/various/ch.hpp delete mode 100644 ChibiOS_2.0.8/os/various/evtimer.c delete mode 100644 ChibiOS_2.0.8/os/various/evtimer.h delete mode 100644 ChibiOS_2.0.8/os/various/memstreams.c delete mode 100644 ChibiOS_2.0.8/os/various/memstreams.h delete mode 100644 ChibiOS_2.0.8/os/various/shell.c delete mode 100644 ChibiOS_2.0.8/os/various/shell.h delete mode 100644 ChibiOS_2.0.8/os/various/syscalls.c delete mode 100644 ChibiOS_2.0.8/os/various/various.dox delete mode 100644 ChibiOS_2.0.8/readme.txt delete mode 100644 ChibiOS_2.0.8/test/coverage/Makefile delete mode 100644 ChibiOS_2.0.8/test/coverage/board.h delete mode 100644 ChibiOS_2.0.8/test/coverage/chconf.h delete mode 100644 ChibiOS_2.0.8/test/coverage/halconf.h delete mode 100644 ChibiOS_2.0.8/test/coverage/main.c delete mode 100644 ChibiOS_2.0.8/test/coverage/readme.txt delete mode 100644 ChibiOS_2.0.8/test/test.c delete mode 100644 ChibiOS_2.0.8/test/test.dox delete mode 100644 ChibiOS_2.0.8/test/test.h delete mode 100644 ChibiOS_2.0.8/test/test.mk delete mode 100644 ChibiOS_2.0.8/test/testbmk.c delete mode 100644 ChibiOS_2.0.8/test/testbmk.h delete mode 100644 ChibiOS_2.0.8/test/testdyn.c delete mode 100644 ChibiOS_2.0.8/test/testdyn.h delete mode 100644 ChibiOS_2.0.8/test/testevt.c delete mode 100644 ChibiOS_2.0.8/test/testevt.h delete mode 100644 ChibiOS_2.0.8/test/testheap.c delete mode 100644 ChibiOS_2.0.8/test/testheap.h delete mode 100644 ChibiOS_2.0.8/test/testmbox.c delete mode 100644 ChibiOS_2.0.8/test/testmbox.h delete mode 100644 ChibiOS_2.0.8/test/testmsg.c delete mode 100644 ChibiOS_2.0.8/test/testmsg.h delete mode 100644 ChibiOS_2.0.8/test/testmtx.c delete mode 100644 ChibiOS_2.0.8/test/testmtx.h delete mode 100644 ChibiOS_2.0.8/test/testpools.c delete mode 100644 ChibiOS_2.0.8/test/testpools.h delete mode 100644 ChibiOS_2.0.8/test/testqueues.c delete mode 100644 ChibiOS_2.0.8/test/testqueues.h delete mode 100644 ChibiOS_2.0.8/test/testsem.c delete mode 100644 ChibiOS_2.0.8/test/testsem.h delete mode 100644 ChibiOS_2.0.8/test/testthd.c delete mode 100644 ChibiOS_2.0.8/test/testthd.h delete mode 100644 ChibiOS_2.0.8/testhal/STM32/Makefile delete mode 100644 ChibiOS_2.0.8/testhal/STM32/ch.ld delete mode 100644 ChibiOS_2.0.8/testhal/STM32/chconf.h delete mode 100644 ChibiOS_2.0.8/testhal/STM32/halconf.h delete mode 100644 ChibiOS_2.0.8/testhal/STM32/main.c delete mode 100644 ChibiOS_2.0.8/testhal/STM32/mcuconf.h delete mode 100644 ChibiOS_2.0.8/testhal/STM32/readme.txt delete mode 100644 ChibiOS_2.0.8/testhal/STM32/settings.c delete mode 100644 ChibiOS_2.0.8/testhal/STM32/settings.h diff --git a/ChangeLog b/ChangeLog index cf99f94..b3367b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-02-19 Niibe Yutaka + + * ChibiOS_2.0.8: Remove. + 2013-02-18 Niibe Yutaka Changes for new ChibiOS/RT. diff --git a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.c b/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.c deleted file mode 100644 index 52fdac9..0000000 --- a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -/* - * Early initialization code. - * This initialization is performed just after reset before BSS and DATA - * segments initialization. - */ -void hwinit0(void) { - - lpc111x_clock_init(); -} - -/* - * Late initialization code. - * This initialization is performed after BSS and DATA segments initialization - * and before invoking the main() function. - */ -void hwinit1(void) { - - /* - * HAL initialization. - */ - halInit(); - - /* - * Extra, board-specific, initializations. - * NOTE: PIO1_2 is associated also to the JTAG, if you need to use JTAG - * you must comment that line first. - */ - LPC_IOCON->PIO0_7 = 0xC0; /* Disables pull-up on LED2 output. */ - LPC_IOCON->JTAG_nTRST_PIO1_2 = 0xC1; /* Disables pull-up on LED3B output - and makes it GPIO1_2. */ - LPC_IOCON->PIO1_9 = 0xC0; /* Disables pull-up on LED3R output.*/ - LPC_IOCON->PIO1_10 = 0xC0; /* Disables pull-up on LED3G output.*/ - - /* - * ChibiOS/RT initialization. - */ - chSysInit(); -} diff --git a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.h b/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.h deleted file mode 100644 index 1b725e7..0000000 --- a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for Embedded Artists LPCXpresso Base Board with LPC1114 daughter - * board. - */ - -/* - * Board identifiers. - */ -#define BOARD_EA_BB_LPC1114 -#define BOARD_NAME "Embedded Artists LPCXpresso Base Board + LPC1114" - -/* - * Board frequencies. - */ -#define SYSOSCCLK 12000000 - -/* - * GPIO 0 initial setup. - * Bit7 - LPCxpresso LED, initially output at low level. - */ -#define VAL_GPIO0DIR PAL_PORT_BIT(GPIO0_LED2) -#define VAL_GPIO0DATA 0x00000000 - -/* - * GPIO 1 initial setup. - */ -#define VAL_GPIO1DIR PAL_PORT_BIT(GPIO1_LED3B) | \ - PAL_PORT_BIT(GPIO1_LED3R) | \ - PAL_PORT_BIT(GPIO1_LED3G) -#define VAL_GPIO1DATA 0x00000000 - -/* - * GPIO 2 initial setup. - */ -#define VAL_GPIO2DIR 0x00000000 -#define VAL_GPIO2DATA 0x00000000 - -/* - * GPIO 3 initial setup. - */ -#define VAL_GPIO3DIR 0x00000000 -#define VAL_GPIO3DATA 0x00000000 - -/* - * Pin definitions. - */ -#define GPIO0_SW3 1 -#define GPIO0_LED2 7 - -#define GPIO1_LED3B 2 -#define GPIO1_SW4 4 -#define GPIO1_LED3R 9 -#define GPIO1_LED3G 10 - -#ifdef __cplusplus -extern "C" { -#endif - void hwinit(void); -#ifdef __cplusplus -} -#endif - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.mk b/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.mk deleted file mode 100644 index 377aea0..0000000 --- a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1114/board.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/EA_LPCXPRESSO_BB_1114/board.c - -# Required include directories -BOARDINC = ${CHIBIOS}/boards/EA_LPCXPRESSO_BB_1114 diff --git a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.c b/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.c deleted file mode 100644 index a680095..0000000 --- a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -/* - * Early initialization code. - * This initialization is performed just after reset before BSS and DATA - * segments initialization. - */ -void hwinit0(void) { - - LPC13xx_clock_init(); -} - -/* - * Late initialization code. - * This initialization is performed after BSS and DATA segments initialization - * and before invoking the main() function. - */ -void hwinit1(void) { - - /* - * HAL initialization. - */ - halInit(); - - /* - * Extra, board-specific, initializations. - * NOTE: PIO1_2 is associated also to the JTAG, if you need to use JTAG - * you must comment that line first. - */ - LPC_IOCON->PIO0_7 = 0xC0; /* Disables pull-up on LED2 output. */ - LPC_IOCON->JTAG_nTRST_PIO1_2 = 0xC1; /* Disables pull-up on LED3B output - and makes it GPIO1_2. */ - LPC_IOCON->PIO1_9 = 0xC0; /* Disables pull-up on LED3R output.*/ - LPC_IOCON->PIO1_10 = 0xC0; /* Disables pull-up on LED3G output.*/ - - /* - * ChibiOS/RT initialization. - */ - chSysInit(); -} diff --git a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.h b/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.h deleted file mode 100644 index 0e596e6..0000000 --- a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for Embedded Artists LPCXpresso Base Board with LPC1343 daughter - * board. - */ - -/* - * Board identifiers. - */ -#define BOARD_EA_BB_LPC1343 -#define BOARD_NAME "Embedded Artists LPCXpresso Base Board + LPC1343" - -/* - * Board frequencies. - */ -#define SYSOSCCLK 12000000 - -/* - * GPIO 0 initial setup. - * Bit7 - LPCxpresso LED, initially output at low level. - */ -#define VAL_GPIO0DIR PAL_PORT_BIT(GPIO0_LED2) -#define VAL_GPIO0DATA 0x00000000 - -/* - * GPIO 1 initial setup. - */ -#define VAL_GPIO1DIR PAL_PORT_BIT(GPIO1_LED3B) | \ - PAL_PORT_BIT(GPIO1_LED3R) | \ - PAL_PORT_BIT(GPIO1_LED3G) -#define VAL_GPIO1DATA 0x00000000 - -/* - * GPIO 2 initial setup. - */ -#define VAL_GPIO2DIR 0x00000000 -#define VAL_GPIO2DATA 0x00000000 - -/* - * GPIO 3 initial setup. - */ -#define VAL_GPIO3DIR 0x00000000 -#define VAL_GPIO3DATA 0x00000000 - -/* - * Pin definitions. - */ -#define GPIO0_SW3 1 -#define GPIO0_LED2 7 - -#define GPIO1_LED3B 2 -#define GPIO1_SW4 4 -#define GPIO1_LED3R 9 -#define GPIO1_LED3G 10 - -#ifdef __cplusplus -extern "C" { -#endif - void hwinit(void); -#ifdef __cplusplus -} -#endif - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.mk b/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.mk deleted file mode 100644 index 22fb23e..0000000 --- a/ChibiOS_2.0.8/boards/EA_LPCXPRESSO_BB_1343/board.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/EA_LPCXPRESSO_BB_1343/board.c - -# Required include directories -BOARDINC = ${CHIBIOS}/boards/EA_LPCXPRESSO_BB_1343 diff --git a/ChibiOS_2.0.8/boards/GENERIC_SPC563/board.c b/ChibiOS_2.0.8/boards/GENERIC_SPC563/board.c deleted file mode 100644 index 5887dc7..0000000 --- a/ChibiOS_2.0.8/boards/GENERIC_SPC563/board.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -/* - * Early initialization code. - * This initialization is performed just after reset before BSS and DATA - * segments initialization. - */ -void hwinit0(void) { - - spc563_clock_init(); -} - -/* - * Late initialization code. - * This initialization is performed after BSS and DATA segments initialization - * and before invoking the main() function. - */ -void hwinit1(void) { - - /* - * Various initialization (temporary code). - */ - SIU.PCR[GPIO_LED1].R = 0x0300; /* OBE | IBE. */ - SIU.PCR[GPIO_LED2].R = 0x0300; /* OBE | IBE. */ - SIU.PCR[GPIO_LED3].R = 0x0300; /* OBE | IBE. */ - SIU.PCR[GPIO_LED4].R = 0x0300; /* OBE | IBE. */ - SIU.PCR[GPIO_BUTTON1].R = 0x0100; /* IBE. */ - SIU.PCR[GPIO_BUTTON2].R = 0x0100; /* IBE. */ - SIU.PCR[GPIO_BUTTON3].R = 0x0100; /* IBE. */ - SIU.PCR[GPIO_BUTTON4].R = 0x0100; /* IBE. */ - SIU.PCR[GPIO_SCI_A_TX].R = 0x0500; /* Primary | IBE. */ - SIU.PCR[GPIO_SCI_A_RX].R = 0x0500; /* Primary | IBE. */ - - /* - * HAL initialization. - */ - halInit(); - - /* - * ChibiOS/RT initialization. - */ - chSysInit(); -} diff --git a/ChibiOS_2.0.8/boards/GENERIC_SPC563/board.h b/ChibiOS_2.0.8/boards/GENERIC_SPC563/board.h deleted file mode 100644 index 26490c7..0000000 --- a/ChibiOS_2.0.8/boards/GENERIC_SPC563/board.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for a generic SPC563 proto board. - */ - -/* - * Board identifiers. - */ -#define BOARD_GENERIC_SPC563 -#define BOARD_NAME "Generic SPC563" - -/* - * Board frequencies. - */ -#if !defined(EXTCLK) -#define EXTCLK 8000000 -#endif - -/* - * I/O definitions. - */ -#define GPIO_SCI_A_TX 89 -#define GPIO_SCI_A_RX 90 - -#define GPIO_BUTTON1 179 -#define GPIO_BUTTON2 181 -#define GPIO_BUTTON3 183 -#define GPIO_BUTTON4 187 - -#define GPIO_LED1 188 -#define GPIO_LED2 189 -#define GPIO_LED3 190 -#define GPIO_LED4 191 - -#ifdef __cplusplus -extern "C" { -#endif - void hwinit0(void); - void hwinit1(void); -#ifdef __cplusplus -} -#endif - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/GENERIC_SPC563/board.mk b/ChibiOS_2.0.8/boards/GENERIC_SPC563/board.mk deleted file mode 100644 index 3925456..0000000 --- a/ChibiOS_2.0.8/boards/GENERIC_SPC563/board.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/GENERIC_SPC563/board.c - -# Required include directories -BOARDINC = ${CHIBIOS}/boards/GENERIC_SPC563 diff --git a/ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.c b/ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.c deleted file mode 100644 index 3a1f690..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -CH_IRQ_HANDLER(TIMER0_COMP_vect) { - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - chSysTimerHandlerI(); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} - -/* - * Board initialization code. - */ -void hwinit(void) { - - /* - * I/O ports setup. - */ - DDRA = VAL_DDRA; - PORTA = VAL_PORTA; - DDRB = VAL_DDRB; - PORTB = VAL_PORTB; - DDRC = VAL_DDRC; - PORTC = VAL_PORTC; - DDRD = VAL_DDRD; - PORTD = VAL_PORTD; - DDRE = VAL_DDRE; - PORTE = VAL_PORTE; - DDRF = VAL_DDRF; - PORTF = VAL_PORTF; - DDRG = VAL_DDRG; - PORTG = VAL_PORTG; - - /* - * External interrupts setup, all disabled initially. - */ - EICRA = 0x00; - EICRB = 0x00; - EIMSK = 0x00; - - /* - * Enables Idle mode for SLEEP instruction. - */ - SMCR = (1 << SE); - - /* - * Timer 0 setup. - */ - TCCR0A = (1 << WGM01) | (0 << WGM00) | /* CTC mode. */ - (0 << COM0A1) | (0 << COM0A0) | /* OC0A disabled. */ - (0 << CS02) | (1 << CS01) | (1 << CS00); /* CLK/64 clock. */ - OCR0A = F_CPU / 64 / CH_FREQUENCY - 1; - TCNT0 = 0; /* Reset counter. */ - TIFR0 = (1 << OCF0A); /* Reset pending. */ - TIMSK0 = (1 << OCIE0A); /* IRQ on compare. */ - - /* - * HAL initialization. - */ - halInit(); -} diff --git a/ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.h b/ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.h deleted file mode 100644 index 4f49030..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for the Olimex AVR-CAN proto board. - */ - -/* - * Board identifier. - */ -#define BOARD_OLIMEX_AVR_CAN -#define BOARD_NAME "Olimex AVR-CAN" - -/* - * All inputs with pullups. - */ -#define VAL_DDRA 0x00 -#define VAL_PORTA 0xFF - -/* - * All inputs with pullups. - */ -#define VAL_DDRB 0x00 -#define VAL_PORTB 0xFF - -/* - * All inputs with pullups. - */ -#define VAL_DDRC 0x00 -#define VAL_PORTC 0xFF - -/* PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0 - * IN IN OUT IN OUT IN IN IN - * DDRD 0 0 1 0 1 0 0 0 - * PU HiZ VAL PU VAL HiZ HiZ HiZ - * PORTD 1 0 ?1 1 1 0 0 0 - */ -#define VAL_DDRD 0x28 -#define VAL_PORTD 0xB8 - -/* PE7 PE6 BUT LED PE3 PE2 PE1 PE0 - * IN IN IN OUT IN IN OUT IN - * DDRE 0 0 0 1 0 0 1 0 - * PU PU HiZ VAL PU PU VAL HiZ - * PORTE 1 1 0 1 1 1 1 0 - */ -#define VAL_DDRE 0x12 -#define VAL_PORTE 0xDE - -/* TDI TDO TMS TCK PF3 PF2 PF1 PF0 - * x x x x IN IN IN IN - * DDRF 0 0 0 0 0 0 0 0 - * x x x x PU PU PU PU - * PORTF 0 0 0 0 1 1 1 1 - * - */ -#define VAL_DDRF 0x00 -#define VAL_PORTF 0x0F - -/* x x x x x PG2 PG1 PG0 - * x x x x x IN IN IN - * DDRG 0 0 0 0 0 0 0 0 - * x x x x x PU PU PU - * PORTG 0 0 0 0 0 1 1 1 - * - */ -#define VAL_DDRG 0x00 -#define VAL_PORTG 0x07 - -#define PORTE_LED (1 << 4) -#define PORTE_BUTTON (1 << 5) - -#ifdef __cplusplus -extern "C" { -#endif - void hwinit(void); -#ifdef __cplusplus -} -#endif - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.mk b/ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.mk deleted file mode 100644 index 3abf0f6..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_AVR_CAN/board.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/OLIMEX_AVR_CAN/board.c - -# Required include directories -BOARDINC = ${CHIBIOS}/boards/OLIMEX_AVR_CAN diff --git a/ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.c b/ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.c deleted file mode 100644 index f967f72..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -CH_IRQ_HANDLER(TIMER0_COMP_vect) { - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - chSysTimerHandlerI(); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} - -/* - * Board initialization code. - */ -void hwinit(void) { - - /* - * I/O ports setup. - */ - DDRA = VAL_DDRA; - PORTA = VAL_PORTA; - DDRB = VAL_DDRB; - PORTB = VAL_PORTB; - DDRC = VAL_DDRC; - PORTC = VAL_PORTC; - DDRD = VAL_DDRD; - PORTD = VAL_PORTD; - DDRE = VAL_DDRE; - PORTE = VAL_PORTE; - DDRF = VAL_DDRF; - PORTF = VAL_PORTF; - DDRG = VAL_DDRG; - PORTG = VAL_PORTG; - - /* - * External interrupts setup, all disabled initially. - */ - EICRA = 0x00; - EICRB = 0x00; - EIMSK = 0x00; - - /* - * Enables Idle mode for SLEEP instruction. - */ - MCUCR = (1 << SE); - - /* - * Timer 0 setup. - */ - TCCR0 = (1 << WGM01) | (0 << WGM00) | /* CTC mode. */ - (0 << COM01) | (0 << COM00) | /* OC0A disabled. */ - (1 << CS02) | (0 << CS01) | (0 << CS00); /* CLK/64 clock. */ - OCR0 = F_CPU / 64 / CH_FREQUENCY - 1; - TCNT0 = 0; /* Reset counter. */ - TIFR = (1 << OCF0); /* Reset pending. */ - TIMSK = (1 << OCIE0); /* IRQ on compare. */ - - /* - * HAL initialization. - */ - halInit(); -} diff --git a/ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.h b/ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.h deleted file mode 100644 index 8e35a76..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for the Olimex AVR-MT-128 proto board. - */ - -/* - * Board identifier. - */ -#define BOARD_OLIMEX_AVR_MT_128 -#define BOARD_NAME "Olimex AVR-MT-128" - -/* PA7 RLY DS B5 B4 B3 B2 B1 - * IN OUT IN IN IN IN IN IN - * DDRA 0 1 0 0 0 0 0 0 - * PU VAL HiZ HiZ HiZ HiZ HiZ HiZ - * PORTA 1 0 0 0 0 0 0 0 - */ -#define VAL_DDRA 0x40 -#define VAL_PORTA 0x80 - -/* - * All inputs with pullups. - */ -#define VAL_DDRB 0x00 -#define VAL_PORTB 0xFF - -/* D7 D6 D5 D4 PC3 E R/W RS - * OUT OUT OUT OUT IN OUT OUT OUT - * DDRC 1 1 1 1 0 1 1 1 - * PU PU PU PU PU VAL VAL VAL - * PORTC 0 0 0 0 1 0 0 0 - */ -#define VAL_DDRC 0xF7 -#define VAL_PORTC 0x08 - -/* PD7 PD6 PD5 PD4 TXD RXD PD1 PD0 - * IN IN IN IN OUT IN IN IN - * DDRD 0 0 0 0 1 0 0 0 - * PU PU PU PU VAL HiZ PU PU - * PORTD 1 1 1 1 1 0 1 1 - */ -#define VAL_DDRD 0x08 -#define VAL_PORTD 0xFB - -/* PE7 PE6 BZ2 BZ2 PE3 PE2 PE1 PE0 - * IN IN OUT OUT IN IN OUT IN - * DDRE 0 0 1 1 0 0 1 0 - * PU PU VAL VAL PU PU VAL PU - * PORTE 1 1 1 1 1 1 1 1 - */ -#define VAL_DDRE 0x32 -#define VAL_PORTE 0xFF - -/* TDI TDO TMS TCK PF3 PF2 PF1 PF0 - * x x x x IN IN IN IN - * DDRF 0 0 0 0 0 0 0 0 - * x x x x PU PU PU PU - * PORTF 0 0 0 0 1 1 1 1 - * - */ -#define VAL_DDRF 0x00 -#define VAL_PORTF 0x0F - -/* x x x x x PG2 PG1 PG0 - * x x x x x IN IN IN - * DDRG 0 0 0 0 0 0 0 0 - * x x x x x PU PU PU - * PORTG 0 0 0 0 0 1 1 1 - * - */ -#define VAL_DDRG 0x00 -#define VAL_PORTG 0x07 - -#define PORTA_BUTTON1 (1 << 0) -#define PORTA_BUTTON2 (1 << 1) -#define PORTA_BUTTON3 (1 << 2) -#define PORTA_BUTTON4 (1 << 3) -#define PORTA_BUTTON5 (1 << 4) -#define PORTA_DALLAS (1 << 5) -#define PORTA_RELAY (1 << 6) - -#define PORTC_44780_RS (1 << 0) -#define PORTC_44780_RW (1 << 1) -#define PORTC_44780_E (1 << 2) -#define PORTC_44780_D4 (1 << 4) -#define PORTC_44780_D5 (1 << 5) -#define PORTC_44780_D6 (1 << 6) -#define PORTC_44780_D7 (1 << 7) -#define PORTC_44780_DATA (PORTC_44780_D4 | PORTC_44780_D5 | \ - PORTC_44780_D6 | PORTC_44780_D7) - -#define PORTE_BUZZ1 (1 << 4) -#define PORTE_BUZZ2 (1 << 5) - -#ifdef __cplusplus -extern "C" { -#endif - void hwinit(void); -#ifdef __cplusplus -} -#endif - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.mk b/ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.mk deleted file mode 100644 index 71b16ae..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_AVR_MT_128/board.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/OLIMEX_AVR_MT_128/board.c - -# Required include directories -BOARDINC = ${CHIBIOS}/boards/OLIMEX_AVR_MT_128 diff --git a/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.c b/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.c deleted file mode 100644 index e25467f..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -#define VAL_TC0_PRESCALER 0 - -/* - * Timer 0 IRQ handling here. - */ -static CH_IRQ_HANDLER(T0IrqHandler) { - - CH_IRQ_PROLOGUE(); - T0IR = 1; /* Clear interrupt on match MR0. */ - - chSysLockFromIsr(); - chSysTimerHandlerI(); - chSysUnlockFromIsr(); - - VICVectAddr = 0; - CH_IRQ_EPILOGUE(); -} - -/* - * Early initialization code. - * This initialization is performed just after reset before BSS and DATA - * segments initialization. - */ -void hwinit0(void) { - - lpc214x_clock_init(); -} - -/* - * Late initialization code. - * This initialization is performed after BSS and DATA segments initialization - * and before invoking the main() function. - */ -void hwinit1(void) { - - /* - * HAL initialization. - */ - halInit(); - - /* - * System Timer initialization, 1ms intervals. - */ - SetVICVector(T0IrqHandler, 0, SOURCE_Timer0); - VICIntEnable = INTMASK(SOURCE_Timer0); - TC *timer = T0Base; - timer->TC_PR = VAL_TC0_PRESCALER; - timer->TC_MR0 = (PCLK / CH_FREQUENCY) / (VAL_TC0_PRESCALER + 1); - timer->TC_MCR = 3; /* Interrupt and clear TC on match MR0. */ - timer->TC_TCR = 2; /* Reset counter and prescaler. */ - timer->TC_TCR = 1; /* Timer enabled. */ - - /* - * ChibiOS/RT initialization. - */ - chSysInit(); -} diff --git a/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.h b/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.h deleted file mode 100644 index c089c55..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for the Olimex LPC-P2148 proto board. - */ - -/* - * Board identifier. - */ -#define BOARD_OLIMEX_LPC_P2148 -#define BOARD_NAME "Olimex LPC-P2148" - -/* - * The following values are implementation dependent. You may change them in - * order to match your HW. - */ -#define FOSC 12000000 -#define CCLK 48000000 -#define PCLK 12000000 - -/* - * Pins configuration for Olimex LPC-P2148. - * - * PINSEL0 - * P0 P0 P0 P0 P0 P0 RXD TXD SSE MOS MIS SCK SDA SCL RXD TXD - * 15 14 13 12 11 10 1 1 L0 I0 O0 0 0 0 0 0 - * 00 00 00 00 00 00 01 01 01 01 01 01 01 01 01 01 - * FIO0DIR (15...0) - * IN IN OUT OUT OUT OUT -- -- -- -- -- -- -- -- -- -- - * 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 - * - * PINSEL1 - * P0 AD P0 P0 -- -- AO -- VB P0 P0 P0 MOS MIS SCK P0 - * 31 03 29 28 -- -- UT -- US 22 21 20 I1 O1 1 16 - * 00 01 00 00 00 00 10 00 01 00 00 00 10 10 10 00 - * FIO0DIR (31...16) - * OUT -- OUT OUT -- -- -- -- -- OUT OUT OUT -- -- -- IN - * 1 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 - * - * FIO1DIR (31...16) - * -- -- -- -- -- IN IN OUT OUT OUT OUT OUT OUT OUT OUT OUT - * 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 - */ -#define VAL_PINSEL0 0x00055555 -#define VAL_PINSEL1 0x100840A8 -#define VAL_PINSEL2 0x00000004 /* Do not modify */ -#define VAL_FIO0DIR 0xB0703C00 -#define VAL_FIO1DIR 0x01FF0000 -#define VAL_FIO0PIN 0xFFFFFFFF -#define VAL_FIO1PIN 0xFFFFFFFF - -#define PA_LED1 10 -#define PA_LED2 11 -#define PA_BUZZ1 12 -#define PA_BUZZ2 13 -#define PA_BSL 14 -#define PA_BUTTON1 15 -#define PA_BUTTON2 16 -#define PA_SSEL1 20 -#define PA_LEDUSB 31 - -#define PB_WP1 24 -#define PB_CP1 25 - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.mk b/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.mk deleted file mode 100644 index ceb075f..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/board.mk +++ /dev/null @@ -1,8 +0,0 @@ -# Board directory path -BOARDPATH = ${CHIBIOS}/boards/OLIMEX_LPC_P2148/ - -# List of all the mandatory board related files. -BOARDSRC = ${BOARDPATH}/board.c - -# Required include directories -BOARDINC = ${BOARDPATH} diff --git a/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/buzzer.c b/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/buzzer.c deleted file mode 100644 index 92d8310..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/buzzer.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * Buzzer driver for Olimex LPC-P2148. - * Uses the timer 1 for wave generation and a Virtual Timer for the sound - * duration. - * The driver also generates an event when the sound is done and the buzzer - * goes silent. - */ - -#include "ch.h" -#include "hal.h" - -#include "buzzer.h" - -EventSource BuzzerSilentEventSource; - -#define StartCounter(t) ((t)->TC_EMR = 0xF1, (t)->TC_TCR = 1) -#define StopCounter(t) ((t)->TC_EMR = 0, (t)->TC_TCR = 2) - -/** - * @brief Buzzer driver initialization. - */ -void buzzInit(void) { - - chEvtInit(&BuzzerSilentEventSource); - - /* - * Switches P0.12 and P0.13 to MAT1.0 and MAT1.1 functions. - * Enables Timer1 clock. - */ - PINSEL0 &= 0xF0FFFFFF; - PINSEL0 |= 0x0A000000; - PCONP = (PCONP & PCALL) | PCTIM1; - - /* - * Timer setup. - */ - TC *tc = T1Base; - StopCounter(tc); - tc->TC_CTCR = 0; /* Clock source is PCLK. */ - tc->TC_PR = 0; /* Prescaler disabled. */ - tc->TC_MCR = 2; /* Clear TC on match MR0. */ -} - -/** - * @brief Stops the sound. - * - * @param[in] p pointer to the timer - */ -static void stop(void *p) { - - StopCounter((TC *)p); - chEvtBroadcastI(&BuzzerSilentEventSource); -} - -/** - * @brief Plays a tone asynchronously. - * - * @param[in] freq approximated tone frequency - * @param[in] duration tone duration in systicks - */ -void buzzPlay(uint32_t freq, systime_t duration) { - static VirtualTimer bvt; - TC *tc = T1Base; - - chSysLock(); - - if (chVTIsArmedI(&bvt)) { /* If a sound is already being */ - chVTResetI(&bvt); /* played then aborts it. */ - StopCounter(tc); - } - - tc->TC_MR0 = tc->TC_MR1 = (PCLK / (freq * 2)); - StartCounter(tc); - chVTSetI(&bvt, duration, stop, tc); - - chSysUnlock(); -} - -/** - * @brief Plays a tone. - * - * @param[in] freq approximated tone frequency - * @param[in] duration tone duration in systicks - */ -void buzzPlayWait(uint32_t freq, systime_t duration) { - TC *tc = T1Base; - - StopCounter(tc); - tc->TC_MR0 = tc->TC_MR1 = (PCLK / (freq * 2)); - StartCounter(tc); - chThdSleep(duration); - StopCounter(tc); -} diff --git a/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/buzzer.h b/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/buzzer.h deleted file mode 100644 index ec2a3b6..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_LPC_P2148/buzzer.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BUZZER_H_ -#define _BUZZER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - void buzzInit(void); - void buzzPlay(uint32_t freq, systime_t duration); - void buzzPlayWait(uint32_t freq, systime_t duration); -#ifdef __cplusplus -} -#endif - -extern EventSource BuzzerSilentEventSource; - -#endif /* _BUZZER_H_ */ diff --git a/ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.c b/ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.c deleted file mode 100644 index 7a60ea8..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include - -#include "ch.h" -#include "hal.h" - -CH_IRQ_HANDLER(TIMERA0_VECTOR) { - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - chSysTimerHandlerI(); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} - -/* - * Hardware initialization goes here. - * NOTE: Interrupts are still disabled. - */ -void hwinit(void) { - - /* - * HAL initialization. - */ - halInit(); - - /* - * Timer 0 setup, uses SMCLK as source. - */ - TACCR0 = SMCLK / 4 / CH_FREQUENCY - 1;/* Counter limit. */ - TACTL = TACLR; /* Clean start. */ - TACTL = TASSEL_2 | ID_2 | MC_1; /* Src=SMCLK, ID=4, cmp=TACCR0. */ - TACCTL0 = CCIE; /* Interrupt on compare. */ -} diff --git a/ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.h b/ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.h deleted file mode 100644 index 8489dff..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for the Olimex MSP430-P1611 proto board. - */ - -/* - * Board identifier. - */ -#define BOARD_OLIMEX_MSP430_P1611 -#define BOARD_NAME "Olimex MSP430-P1611" - -/* - * Clock constants. - */ -#define LFXT1CLK 32768 -#define XT2CLK 8000000 -#define DCOCLK 750000 - -/* - * Pin definitions for the Olimex MSP430-P1611 board. - */ -#define P3_O_TXD0 4 -#define P3_O_TXD0_MASK (1 << P3_O_TXD0) -#define P3_I_RXD0 5 -#define P3_I_RXD0_MASK (1 << P3_I_RXD0) -#define P6_O_LED 0 -#define P6_O_LED_MASK (1 << P6_O_LED) -#define P6_I_BUTTON 1 -#define P6_I_BUTTON_MASK (1 << P6_I_BUTTON) - -/* - * Initial I/O ports settings. - */ -#define VAL_P1OUT 0x00 -#define VAL_P1DIR 0xFF - -#define VAL_P2OUT 0x00 -#define VAL_P2DIR 0xFF - -#define VAL_P3OUT P3_O_TXD0_MASK -#define VAL_P3DIR ~P3_I_RXD0_MASK - -#define VAL_P4OUT 0x00 -#define VAL_P4DIR 0xFF - -#define VAL_P5OUT 0x00 -#define VAL_P5DIR 0xFF - -#define VAL_P6OUT P6_O_LED_MASK -#define VAL_P6DIR ~P6_I_BUTTON_MASK - -#ifdef __cplusplus -extern "C" { -#endif - void hwinit(void); -#ifdef __cplusplus -} -#endif - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.mk b/ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.mk deleted file mode 100644 index 420f176..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_MSP430_P1611/board.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/OLIMEX_MSP430_P1611/board.c - -# Required include directories -BOARDINC = ${CHIBIOS}/boards/OLIMEX_MSP430_P1611 diff --git a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.c b/ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.c deleted file mode 100644 index 047e7e7..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.c +++ /dev/null @@ -1,125 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -/* - * SYS IRQ handling here. - */ -static CH_IRQ_HANDLER(SYSIrqHandler) { - - CH_IRQ_PROLOGUE(); - - if (AT91C_BASE_PITC->PITC_PISR & AT91C_PITC_PITS) { - (void) AT91C_BASE_PITC->PITC_PIVR; - chSysLockFromIsr(); - chSysTimerHandlerI(); - chSysUnlockFromIsr(); - } - -#if USE_SAM7_DBGU_UART - if (AT91C_BASE_DBGU->DBGU_CSR & - (AT91C_US_RXRDY | AT91C_US_TXRDY | AT91C_US_PARE | AT91C_US_FRAME | AT91C_US_OVRE | AT91C_US_RXBRK)) { - sd_lld_serve_interrupt(&SD3); - } -#endif - AT91C_BASE_AIC->AIC_EOICR = 0; - CH_IRQ_EPILOGUE(); -} - -/* - * Early initialization code. - * This initialization is performed just after reset before BSS and DATA - * segments initialization. - */ -void hwinit0(void) { - - /* Watchdog disabled.*/ - AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; - - at91sam7_clock_init(); -} - -/* - * Late initialization code. - * This initialization is performed after BSS and DATA segments initialization - * and before invoking the main() function. - */ -void hwinit1(void) { - - /* - * HAL initialization. - */ - halInit(); - - /* - * LCD pins setup. - */ - palClearPad(IOPORT2, PIOB_LCD_BL); - palSetPadMode(IOPORT2, PIOB_LCD_BL, PAL_MODE_OUTPUT_PUSHPULL); - - palSetPad(IOPORT1, PIOA_LCD_RESET); - palSetPadMode(IOPORT1, PIOA_LCD_RESET, PAL_MODE_OUTPUT_PUSHPULL); - - /* - * Joystick and buttons setup. - */ - palSetGroupMode(IOPORT1, - PIOA_B1_MASK | PIOA_B2_MASK | PIOA_B3_MASK | - PIOA_B4_MASK | PIOA_B5_MASK, - PAL_MODE_INPUT); - palSetGroupMode(IOPORT2, PIOB_SW1_MASK | PIOB_SW2_MASK, PAL_MODE_INPUT); - - /* - * MMC/SD slot setup. - */ - palSetGroupMode(IOPORT2, - PIOB_MMC_WP_MASK | PIOB_MMC_CP_MASK, - PAL_MODE_INPUT); - - /* - * PIT Initialization. - */ - AIC_ConfigureIT(AT91C_ID_SYS, - AT91C_AIC_SRCTYPE_HIGH_LEVEL | (AT91C_AIC_PRIOR_HIGHEST - 1), - SYSIrqHandler); - AIC_EnableIT(AT91C_ID_SYS); - AT91C_BASE_PITC->PITC_PIMR = (MCK / 16 / CH_FREQUENCY) - 1; - AT91C_BASE_PITC->PITC_PIMR |= AT91C_PITC_PITEN | AT91C_PITC_PITIEN; - - /* - * RTS/CTS pins enabled for USART0 only. - */ - AT91C_BASE_PIOA->PIO_PDR = AT91C_PA3_RTS0 | AT91C_PA4_CTS0; - AT91C_BASE_PIOA->PIO_ASR = AT91C_PIO_PA3 | AT91C_PIO_PA4; - AT91C_BASE_PIOA->PIO_PPUDR = AT91C_PIO_PA3 | AT91C_PIO_PA4; - - /* - * ChibiOS/RT initialization. - */ - chSysInit(); -} diff --git a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.h b/ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.h deleted file mode 100644 index d4a7b1e..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for the Olimex SAM7-EX256 development board. - */ - -/* - * Board identifier. - */ -#define BOARD_OLIMEX_SAM7_EX256 -#define BOARD_NAME "Olimex SAM7-EX256" - -/* - * Select your platform by modifying the following line. - */ -#if !defined(SAM7_PLATFORM) -#define SAM7_PLATFORM SAM7X256 -#endif - -#include "at91sam7.h" - -#define CLK 18432000 -#define MCK 48054857 - -/* - * Initial I/O setup. - */ -#define VAL_PIOA_ODSR 0x00000000 /* Output data. */ -#define VAL_PIOA_OSR 0x00000000 /* Direction. */ -#define VAL_PIOA_PUSR 0xFFFFFFFF /* Pull-up. */ - -#define VAL_PIOB_ODSR 0x00000000 /* Output data. */ -#define VAL_PIOB_OSR 0x00000000 /* Direction. */ -#define VAL_PIOB_PUSR 0xFFFFFFFF /* Pull-up. */ - -/* - * I/O definitions. - */ -#define PIOA_LCD_RESET 2 -#define PIOA_LCD_RESET_MASK (1 << PIOA_LCD_RESET) -#define PIOA_B1 7 -#define PIOA_B1_MASK (1 << PIOA_B1) -#define PIOA_B2 8 -#define PIOA_B2_MASK (1 << PIOA_B2) -#define PIOA_B3 9 -#define PIOA_B3_MASK (1 << PIOA_B3) -#define PIOA_B4 14 -#define PIOA_B4_MASK (1 << PIOA_B4) -#define PIOA_B5 15 -#define PIOA_B5_MASK (1 << PIOA_B5) -#define PIOA_USB_PUP 25 -#define PIOA_USB_PUP_MASK (1 << PIOA_USB_PUP) -#define PIOA_USB_PR 26 -#define PIOA_USB_PR_MASK (1 << PIOA_USB_PR) - -#define PIOB_PHY_PD 18 -#define PIOB_PHY_PD_MASK (1 << PIOB_PHY_PD) -#define PIOB_AUDIO_OUT 19 -#define PIOB_AUDIO_OUT_MASK (1 << PIOB_AUDIO_OUT) -#define PIOB_LCD_BL 20 -#define PIOB_LCD_BL_MASK (1 << PIOB_LCD_BL) -#define PIOB_MMC_WP 22 -#define PIOB_MMC_WP_MASK (1 << PIOB_MMC_WP) -#define PIOB_MMC_CP 23 -#define PIOB_MMC_CP_MASK (1 << PIOB_MMC_CP) -#define PIOB_SW1 24 -#define PIOB_SW1_MASK (1 << PIOB_SW1) -#define PIOB_SW2 25 -#define PIOB_SW2_MASK (1 << PIOB_SW2) -#define PIOB_PHY_IRQ 26 -#define PIOB_PHY_IRQ_MASK (1 << PIOB_PHY_IRQ) - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.mk b/ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.mk deleted file mode 100644 index 862319c..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_EX256/board.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/OLIMEX_SAM7_EX256/board.c - -# Required include directories -BOARDINC = ${CHIBIOS}/boards/OLIMEX_SAM7_EX256 diff --git a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.c b/ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.c deleted file mode 100644 index e41f7f5..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -/* - * SYS IRQ handling here. - */ -static CH_IRQ_HANDLER(SYSIrqHandler) { - - CH_IRQ_PROLOGUE(); - - if (AT91C_BASE_PITC->PITC_PISR & AT91C_PITC_PITS) { - (void) AT91C_BASE_PITC->PITC_PIVR; - chSysLockFromIsr(); - chSysTimerHandlerI(); - chSysUnlockFromIsr(); - } - AT91C_BASE_AIC->AIC_EOICR = 0; - - CH_IRQ_EPILOGUE(); -} - -/* - * Early initialization code. - * This initialization is performed just after reset before BSS and DATA - * segments initialization. - */ -void hwinit0(void) { - - /* Watchdog disabled.*/ - AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; - - at91sam7_clock_init(); -} - -/* - * Late initialization code. - * This initialization is performed after BSS and DATA segments initialization - * and before invoking the main() function. - */ -void hwinit1(void) { - - /* - * HAL initialization. - */ - halInit(); - - /* - * LED pins setup. - */ - palClearPad(IOPORT1, PIOA_LED1); - palSetPadMode(IOPORT1, PIOA_LED1, PAL_MODE_OUTPUT_PUSHPULL); - palClearPad(IOPORT1, PIOA_LED2); - palSetPadMode(IOPORT1, PIOA_LED2, PAL_MODE_OUTPUT_PUSHPULL); - - /* - * buttons setup. - */ - palSetGroupMode(IOPORT1, PIOA_B1_MASK | PIOA_B2_MASK, PAL_MODE_INPUT); - - /* - * MMC/SD slot setup. - */ - palSetGroupMode(IOPORT1, - PIOA_MMC_WP_MASK | PIOA_MMC_CP_MASK, - PAL_MODE_INPUT); - - /* - * PIT Initialization. - */ - AIC_ConfigureIT(AT91C_ID_SYS, - AT91C_AIC_SRCTYPE_HIGH_LEVEL | (AT91C_AIC_PRIOR_HIGHEST - 1), - SYSIrqHandler); - AIC_EnableIT(AT91C_ID_SYS); - AT91C_BASE_PITC->PITC_PIMR = (MCK / 16 / CH_FREQUENCY) - 1; - AT91C_BASE_PITC->PITC_PIMR |= AT91C_PITC_PITEN | AT91C_PITC_PITIEN; - - /* - * ChibiOS/RT initialization. - */ - chSysInit(); -} diff --git a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.h b/ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.h deleted file mode 100644 index 40a815f..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for the Olimex SAM7-P256 development board. - */ - -/* - * Board identifier. - */ -#define BOARD_OLIMEX_SAM7_P256 - -/* - * Select your platform by modifying the following line. - */ -#if !defined(SAM7_PLATFORM) -#define SAM7_PLATFORM SAM7S256 -#endif - -#include "at91sam7.h" - -#define CLK 18432000 -#define MCK 48054857 - -/* - * Initial I/O setup. - */ -#define VAL_PIOA_ODSR 0x00000000 /* Output data. */ -#define VAL_PIOA_OSR 0x00000000 /* Direction. */ -#define VAL_PIOA_PUSR 0xFFFFFFFF /* Pull-up. */ - -/* - * I/O definitions. - */ -#define PIOA_LED1 18 -#define PIOA_LED1_MASK (1 << PIOA_LED1_MASK) -#define PIOA_LED2 17 -#define PIOA_LED2_MASK (1 << PIOA_LED2_MASK) -#define PIOA_B1 19 -#define PIOA_B1_MASK (1 << PIOA_B1) -#define PIOA_B2 20 -#define PIOA_B2_MASK (1 << PIOA_B2) -#define PIOA_DP_PUP 25 -#define PIOA_DD_PUP_MASK (1 << PIOA_DP_PUP) -#define PIOA_USB_D 26 -#define PIOA_USB_D_MASK (1 << PIOA_USB_D) - -#define PIOA_MMC_WP 16 -#define PIOA_MMC_WP_MASK (1 << PIOA_MMC_WP) -#define PIOA_MMC_CP 15 -#define PIOA_MMC_CP_MASK (1 << PIOA_MMC_CP) - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.mk b/ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.mk deleted file mode 100644 index 547b797..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_SAM7_P256/board.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/OLIMEX_SAM7_P256/board.c - -# Required include directories -BOARDINC = ${CHIBIOS}/boards/OLIMEX_SAM7_P256 diff --git a/ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.c b/ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.c deleted file mode 100644 index ae47ec9..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -/* - * Early initialization code. - * This initialization is performed just after reset before BSS and DATA - * segments initialization. - */ -void hwinit0(void) { - - stm32_clock_init(); -} - -/* - * Late initialization code. - * This initialization is performed after BSS and DATA segments initialization - * and before invoking the main() function. - */ -void hwinit1(void) { - - /* - * HAL initialization. - */ - halInit(); - - /* - * ChibiOS/RT initialization. - */ - chSysInit(); -} diff --git a/ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.h b/ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.h deleted file mode 100644 index 8c050e5..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for the Olimex STM33-P103 proto board. - */ - -/* - * Board identifier. - */ -#define BOARD_OLIMEX_STM32_P103 -#define BOARD_NAME "Olimex STM32-P103" - -/* - * Board frequencies. - */ -#define STM32_LSECLK 32768 -#define STM32_HSECLK 8000000 - -/* - * MCU type, this macro is used by both the ST library and the ChibiOS/RT - * native STM32 HAL. - */ -#define STM32F10X_MD - -/* - * IO pins assignments. - */ -#define GPIOA_BUTTON 0 -#define GPIOA_SPI1NSS 4 - -#define GPIOB_SPI2NSS 12 - -#define GPIOC_MMCWP 6 -#define GPIOC_MMCCP 7 -#define GPIOC_CANCNTL 10 -#define GPIOC_DISC 11 -#define GPIOC_LED 12 - -/* - * I/O ports initial setup, this configuration is established soon after reset - * in the initialization code. - * - * The digits have the following meaning: - * 0 - Analog input. - * 1 - Push Pull output 10MHz. - * 2 - Push Pull output 2MHz. - * 3 - Push Pull output 50MHz. - * 4 - Digital input. - * 5 - Open Drain output 10MHz. - * 6 - Open Drain output 2MHz. - * 7 - Open Drain output 50MHz. - * 8 - Digital input with PullUp or PullDown resistor depending on ODR. - * 9 - Alternate Push Pull output 10MHz. - * A - Alternate Push Pull output 2MHz. - * B - Alternate Push Pull output 50MHz. - * C - Reserved. - * D - Alternate Open Drain output 10MHz. - * E - Alternate Open Drain output 2MHz. - * F - Alternate Open Drain output 50MHz. - * Please refer to the STM32 Reference Manual for details. - */ - -/* - * Port A setup. - * Everything input with pull-up except: - * PA0 - Normal input (BUTTON). - * PA2 - Alternate output (USART2 TX). - * PA3 - Normal input (USART2 RX). - */ -#define VAL_GPIOACRL 0x88884B84 /* PA7...PA0 */ -#define VAL_GPIOACRH 0x88888888 /* PA15...PA8 */ -#define VAL_GPIOAODR 0xFFFFFFFF - -/* - * Port B setup. - * Everything input with pull-up except: - * PB13 - Alternate output (MMC SPI2 SCK). - * PB14 - Normal input (MMC SPI2 MISO). - * PB15 - Alternate output (MMC SPI2 MOSI). - */ -#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */ -#define VAL_GPIOBCRH 0xB4B88888 /* PB15...PB8 */ -#define VAL_GPIOBODR 0xFFFFFFFF - -/* - * Port C setup. - * Everything input with pull-up except: - * PC6 - Normal input because there is an external resistor. - * PC7 - Normal input because there is an external resistor. - * PC11 - Push Pull output (CAN CNTRL). - * PC12 - Push Pull output (LED). - */ -#define VAL_GPIOCCRL 0x44888888 /* PC7...PC0 */ -#define VAL_GPIOCCRH 0x88833888 /* PC15...PC8 */ -#define VAL_GPIOCODR 0xFFFFFFFF - -/* - * Port D setup. - * Everything input with pull-up except: - * PD0 - Normal input (XTAL). - * PD1 - Normal input (XTAL). - */ -#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */ -#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */ -#define VAL_GPIODODR 0xFFFFFFFF - -/* - * Port E setup. - * Everything input with pull-up except: - */ -#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */ -#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */ -#define VAL_GPIOEODR 0xFFFFFFFF - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.mk b/ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.mk deleted file mode 100644 index cb03841..0000000 --- a/ChibiOS_2.0.8/boards/OLIMEX_STM32_P103/board.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/OLIMEX_STM32_P103/board.c - -# Required include directories -BOARDINC = ${CHIBIOS}/boards/OLIMEX_STM32_P103 diff --git a/ChibiOS_2.0.8/boards/RAISONANCE_REVA_STM8S/board.c b/ChibiOS_2.0.8/boards/RAISONANCE_REVA_STM8S/board.c deleted file mode 100644 index cbd5cc6..0000000 --- a/ChibiOS_2.0.8/boards/RAISONANCE_REVA_STM8S/board.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -/* - * TIM 2 clock after the prescaler. - */ -#define TIM2_CLOCK (SYSCLK / 16) -#define TIM2_ARR ((TIM2_CLOCK / CH_FREQUENCY) - 1) - -/* - * TIM2 interrupt handler. - */ -CH_IRQ_HANDLER(13) { - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - chSysTimerHandlerI(); - chSysUnlockFromIsr(); - - TIM2_SR1 = 0; - - CH_IRQ_EPILOGUE(); -} - -/* - * Board initialization code. - */ -void hwinit(void) { - - /* - * HAL initialization. - */ - halInit(); - - /* - * TIM2 initialization as system tick. - */ - CLK_PCKENR1 |= 32; /* PCKEN15, TIM2 clock source.*/ - TIM2_PSCR = 4; /* Prescaler divide by 2^4=16.*/ - TIM2_ARRH = TIM2_ARR >> 8; - TIM2_ARRL = TIM2_ARR; - TIM2_CNTRH = 0; - TIM2_CNTRL = 0; - TIM2_SR1 = 0; - TIM2_IER = 1; /* UIE */ - TIM2_CR1 = 1; /* CEN */ -} diff --git a/ChibiOS_2.0.8/boards/RAISONANCE_REVA_STM8S/board.h b/ChibiOS_2.0.8/boards/RAISONANCE_REVA_STM8S/board.h deleted file mode 100644 index 3ecb6c0..0000000 --- a/ChibiOS_2.0.8/boards/RAISONANCE_REVA_STM8S/board.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for Raisonance REva V3 + STM8S208RB daughter board. - */ - -/* - * Board identifiers. - */ -#define BOARD_REVA_V3_STM8S208RB -#define BOARD_NAME "Raisonance REva V3 + STM8S208RB" - -/* - * Board frequencies. - */ -#define HSECLK 24000000 - -/* - * MCU model used on the board. - * The available models are listed in the file ./os/hal/platforms/stm8/stm8.h - */ -#define STM8_PLATFORM PLATFORM_STM8S208RB - -/* - * Pin definitions. - */ -#define PA_OSCIN 1 -#define PA_J2_25 2 /* It is also OSCOUT. */ -#define PA_J2_27 3 -#define PA_RX 4 -#define PA_TX 5 - -#define PB_LED(n) (n) -#define PB_LCD_D0 0 -#define PB_LCD_D1 1 -#define PB_LCD_CSB 2 -#define PB_LCD_RESB 3 - -#define PC_ADC_ETR 0 -#define PC_J2_51 1 -#define PC_J2_53 2 -#define PC_J2_55 3 -#define PC_J2_57 4 -#define PC_SCK 5 -#define PC_MOSI 6 -#define PC_MISO 7 - -#define PD_J2_69 0 -#define PD_J2_21 1 -#define PD_J2_67 2 -#define PD_J2_65 3 -#define PD_PWM 4 -#define PD_J2_63 5 -#define PD_J2_61 6 -#define PD_J2_59 7 - -#define PE_P2_49 0 -#define PE_SCL 1 -#define PE_SDA 2 -#define PE_P2_47 3 -#define PE_P2_45 4 -#define PE_P2_43 5 -#define PE_P2_41 6 -#define PE_P2_39 7 - -#define PF_J2_37 0 -#define PF_J2_35 1 -#define PF_J2_33 2 -#define PF_J2_31 3 -#define PF_ANA_IN1 4 -#define PF_ANA_IN2 5 -#define PF_ANA_TEMP 6 -#define PF_ANA_POT 7 - -#define PG_CAN_TX 0 -#define PG_CAN_RX 1 -#define PG_BT5 2 -#define PG_BT6 3 -#define PG_SW4 4 -#define PG_SW3 5 -#define PG_SW2 6 -#define PG_SW1 7 - -#define PI_J2_71 0 - -/* - * Port A initial setup. - */ -#define VAL_GPIOAODR (1 << PA_TX) /* PA_TX initially to 1. */ -#define VAL_GPIOADDR (1 << PA_TX) /* PA_TX output, others inputs. */ -#define VAL_GPIOACR1 0xFF /* All pull-up or push-pull. */ -#define VAL_GPIOACR2 0 - -/* - * Port B initial setup. - */ -#define VAL_GPIOBODR 0xFF /* Initially all set to high. */ -#define VAL_GPIOBDDR 0xFF /* All outputs. */ -#define VAL_GPIOBCR1 0xFF /* All push-pull. */ -#define VAL_GPIOBCR2 0 - -/* - * Port C initial setup. - */ -#define VAL_GPIOCODR 0 -#define VAL_GPIOCDDR 0 /* All inputs. */ -#define VAL_GPIOCCR1 0xFF /* All pull-up. */ -#define VAL_GPIOCCR2 0 - -/* - * Port D initial setup. - */ -#define VAL_GPIODODR 0 -#define VAL_GPIODDDR 0 /* All inputs. */ -#define VAL_GPIODCR1 0xFF /* All pull-up. */ -#define VAL_GPIODCR2 0 - -/* - * Port E initial setup. - */ -#define VAL_GPIOEODR 0 -#define VAL_GPIOEDDR 0 /* All inputs. */ -#define VAL_GPIOECR1 0xFF /* All pull-up. */ -#define VAL_GPIOECR2 0 - -/* - * Port F initial setup. - */ -#define VAL_GPIOFODR 0 -#define VAL_GPIOFDDR 0 /* All inputs. */ -#define VAL_GPIOFCR1 0xFF /* All pull-up. */ -#define VAL_GPIOFCR2 0 - -/* - * Port G initial setup. - */ -#define VAL_GPIOGODR (1 << PG_CAN_TX)/* CAN_TX initially to 1. */ -#define VAL_GPIOGDDR (1 << PG_CAN_TX)/* CAN_TX output, others inputs. */ -#define VAL_GPIOGCR1 0xFF /* All pull-up or push-pull. */ -#define VAL_GPIOGCR2 0 - -/* - * Port H initial setup (dummy, not present). - */ -#define VAL_GPIOHODR 0 -#define VAL_GPIOHDDR 0 /* All inputs. */ -#define VAL_GPIOHCR1 0xFF /* All pull-up. */ -#define VAL_GPIOHCR2 0 - -/* - * Port I initial setup. - */ -#define VAL_GPIOIODR 0 -#define VAL_GPIOIDDR 0 /* All inputs. */ -#define VAL_GPIOICR1 0xFF /* All pull-up. */ -#define VAL_GPIOICR2 0 - -#ifdef __cplusplus -extern "C" { -#endif - void hwinit(void); -#ifdef __cplusplus -} -#endif - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.c b/ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.c deleted file mode 100644 index b75ac97..0000000 --- a/ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" - -/* - * Early initialization code. - * This initialization is performed just after reset before BSS and DATA - * segments initialization. - */ -void hwinit0(void) { - - stm32_clock_init(); -} - -/* - * Late initialization code. - * This initialization is performed after BSS and DATA segments initialization - * and before invoking the main() function. - */ -void hwinit1(void) { - - /* - * HAL initialization. - */ - halInit(); - - /* - * Remap USART2 to the PD5/PD6 pins, done after halInit since HAL resets - * these. - */ - AFIO->MAPR |= AFIO_MAPR_USART2_REMAP; - - /* - * ChibiOS/RT initialization. - */ - chSysInit(); -} diff --git a/ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.h b/ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.h deleted file mode 100644 index bcecdbc..0000000 --- a/ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -/* - * Setup for the STMicroelectronics STM3210C-EVAL evaluation board. - */ - -/* - * Board identifier. - */ -#define BOARD_ST_STM3210C_EVAL -#define BOARD_NAME "ST STM3210C-EVAL" - -/* - * Board frequencies. - */ -#define STM32_LSECLK 32768 -#define STM32_HSECLK 25000000 - -/* - * MCU type, this macro is used by both the ST library and the ChibiOS/RT - * native STM32 HAL. - */ -#define STM32F10X_CL - -/* - * IO pins assignments. - * *********************TO BE COMPLETED********************* - */ - -/* - * I/O ports initial setup, this configuration is established soon after reset - * in the initialization code. - * - * The digits have the following meaning: - * 0 - Analog input. - * 1 - Push Pull output 10MHz. - * 2 - Push Pull output 2MHz. - * 3 - Push Pull output 50MHz. - * 4 - Digital input. - * 5 - Open Drain output 10MHz. - * 6 - Open Drain output 2MHz. - * 7 - Open Drain output 50MHz. - * 8 - Digital input with PullUp or PullDown resistor depending on ODR. - * 9 - Alternate Push Pull output 10MHz. - * A - Alternate Push Pull output 2MHz. - * B - Alternate Push Pull output 50MHz. - * C - Reserved. - * D - Alternate Open Drain output 10MHz. - * E - Alternate Open Drain output 2MHz. - * F - Alternate Open Drain output 50MHz. - * Please refer to the STM32 Reference Manual for details. - */ - -/* - * Port A setup. - * Everything input except: - */ -#define VAL_GPIOACRL 0x44444444 /* PA7...PA0 */ -#define VAL_GPIOACRH 0x44444444 /* PA15...PA8 */ -#define VAL_GPIOAODR 0xFFFFFFFF - -/* - * Port B setup. - * Everything input except: - */ -#define VAL_GPIOBCRL 0x44444444 /* PB7...PB0 */ -#define VAL_GPIOBCRH 0x44444444 /* PB15...PB8 */ -#define VAL_GPIOBODR 0xFFFFFFFF - -/* - * Port C setup. - * Everything input except: - */ -#define VAL_GPIOCCRL 0x44444444 /* PC7...PC0 */ -#define VAL_GPIOCCRH 0x44444444 /* PC15...PC8 */ -#define VAL_GPIOCODR 0xFFFFFFFF - -/* - * Port D setup. - * Everything input except: - * PD5 - USART2TX (remapped) AF PP Output - * PD6 - USART2RX (remapped) Digital Input - * PD7 - LED (LD1) PP Output - */ -#define VAL_GPIODCRL 0x34B44444 /* PD7...PD0 */ -#define VAL_GPIODCRH 0x44444444 /* PD15...PD8 */ -#define VAL_GPIODODR 0x0F0FFFFF - -/* - * Port E setup. - * Everything input except: - */ -#define VAL_GPIOECRL 0x44444444 /* PE7...PE0 */ -#define VAL_GPIOECRH 0x44444444 /* PE15...PE8 */ -#define VAL_GPIOEODR 0xFFFFFFFF - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.mk b/ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.mk deleted file mode 100644 index e2c4f9c..0000000 --- a/ChibiOS_2.0.8/boards/ST_STM3210C_EVAL/board.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/ST_STM3210C_EVAL/board.c - -# Required include directories -BOARDINC = ${CHIBIOS}/boards/ST_STM3210C_EVAL diff --git a/ChibiOS_2.0.8/boards/readme.txt b/ChibiOS_2.0.8/boards/readme.txt deleted file mode 100644 index 578c79b..0000000 --- a/ChibiOS_2.0.8/boards/readme.txt +++ /dev/null @@ -1,6 +0,0 @@ -This directory contains the support files for various board models. If you -want to support a new board: -- Create a new directory under ./boards, give it the name of your board. -- Copy inside the new directory the files from a similar board. -- Customize board.c, board.h and board.mk in order to correctly initialize - your board. \ No newline at end of file diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/Makefile b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/Makefile deleted file mode 100644 index c65f77d..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/Makefile +++ /dev/null @@ -1,184 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = no -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_SAM7_P256/board.mk -include $(CHIBIOS)/os/hal/platforms/AT91SAM7/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARM7/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARM7/AT91SAM7/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various \ - $(CHIBIOS)/os/ports/GCC/ARM7/AT91SAM7 - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = arm7tdmi - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/ch.ld deleted file mode 100644 index 5729a52..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/ch.ld +++ /dev/null @@ -1,105 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * AT91SAM7X256 memory setup. - */ -__und_stack_size__ = 0x0004; -__abt_stack_size__ = 0x0004; -__fiq_stack_size__ = 0x0010; -__irq_stack_size__ = 0x0080; -__svc_stack_size__ = 0x0004; -__sys_stack_size__ = 0x0400; -__stacks_total_size__ = __und_stack_size__ + __abt_stack_size__ + __fiq_stack_size__ + __irq_stack_size__ + __svc_stack_size__ + __sys_stack_size__; - -MEMORY -{ - flash : org = 0x100000, len = 256k - ram : org = 0x200020, len = 64k - 0x20 -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*); - *(.rodata); - *(.rodata.*); - *(.glue_7t); - *(.glue_7); - *(.gcc*); - *(.ctors); - *(.dtors); - . = ALIGN(4); - _etext = .; - } > flash - - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram - - /DISCARD/ : - { - *(.eh_*) - } -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/chconf.h deleted file mode 100644 index 92e562c..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/chconf.h +++ /dev/null @@ -1,475 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @addtogroup config - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the round robin mechanism. - * - * @note Disabling round robin makes the kernel more compact and generally - * faster but forbids multiple threads at the same priority level. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemWaitSignal() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. It - * may not be implemented or some ports. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/halconf.h deleted file mode 100644 index 40b1798..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/main.c b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/main.c deleted file mode 100644 index 9d6b76a..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/main.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -static WORKING_AREA(waThread1, 64); -static msg_t Thread1(void *p) { - - (void)p; - while (TRUE) { - palSetPad(IOPORT1, PIOA_LED1); - chThdSleepMilliseconds(100); - palClearPad(IOPORT1, PIOA_LED1); - chThdSleepMilliseconds(900); - } - return 0; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - (void)argc; - (void)argv; - - /* - * Activates the serial driver 1 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Normal main() thread activity. - */ - while (TRUE) { - chThdSleepMilliseconds(500); - if (!palReadPad(IOPORT1, PIOA_B1)) - sdWrite(&SD1, (uint8_t *)"Hello World!\r\n", 14); - if (!palReadPad(IOPORT1, PIOA_B2)) - TestThread(&SD1); - } - - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/mcuconf.h deleted file mode 100644 index 02ce316..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/mcuconf.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * AT91SAM7 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * MAC driver system settings. - */ -#define MAC_TRANSMIT_BUFFERS 2 -#define MAC_RECEIVE_BUFFERS 2 -#define MAC_BUFFERS_SIZE 1518 -#define EMAC_INTERRUPT_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 3) - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ -#define USE_SAM7_USART0 TRUE -#define USE_SAM7_USART1 TRUE -#define SAM7_USART0_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) -#define SAM7_USART1_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) - -/* - * SPI driver system settings. - */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/readme.txt b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/readme.txt deleted file mode 100644 index 00bc052..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7S-GCC/readme.txt +++ /dev/null @@ -1,28 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for ARM7TDMI AT91SAM7S256. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex SAM7-P256 board. - -** The Demo ** - -The demo currently just flashes the LED1 using a thread. -The button B1 prints an "Hello World!" string on RS232_0, the button B2 -activates che ChibiOS/RT test suite, output on RS232_0(port baudrate 38400). - -** Build Procedure ** - -The demo was built using the YAGARTO toolchain but any toolchain based on GCC -and GNU userspace programs will work. - -** Notes ** - -Some files used by the demo are not part of ChibiOS/RT but are Atmel copyright -and are licensed under a different license, see the header present in all the -source files under ./demos/os/hal/platform/AT91SAM7/at91lib for details. -Also note that not all the files present in the Atmel library are distribuited -with ChibiOS/RT, you can find the whole library on the Atmel web site: - - http://www.atmel.com diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/Makefile b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/Makefile deleted file mode 100644 index 3d2a7dd..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/Makefile +++ /dev/null @@ -1,184 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = no -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_SAM7_EX256/board.mk -include $(CHIBIOS)/os/hal/platforms/AT91SAM7/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARM7/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARM7/AT91SAM7/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various \ - $(CHIBIOS)/os/ports/GCC/ARM7/AT91SAM7 - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = arm7tdmi - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/ch.ld deleted file mode 100644 index 805c8a5..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/ch.ld +++ /dev/null @@ -1,110 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * AT91SAM7X256 memory setup. - */ -__und_stack_size__ = 0x0004; -__abt_stack_size__ = 0x0004; -__fiq_stack_size__ = 0x0010; -__irq_stack_size__ = 0x0080; -__svc_stack_size__ = 0x0004; -__sys_stack_size__ = 0x0400; -__stacks_total_size__ = __und_stack_size__ + __abt_stack_size__ + __fiq_stack_size__ + __irq_stack_size__ + __svc_stack_size__ + __sys_stack_size__; - -MEMORY -{ - flash : org = 0x100000, len = 256k - ram : org = 0x200020, len = 64k - 0x20 -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - *(.ctors) - *(.dtors) - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/halconf.h deleted file mode 100644 index 40b1798..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/main.c b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/main.c deleted file mode 100644 index 4196956..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/main.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -static WORKING_AREA(waThread1, 64); -static msg_t Thread1(void *p) { - - (void)p; - while (TRUE) { - palSetPad(IOPORT2, PIOB_LCD_BL); - chThdSleepMilliseconds(100); - palClearPad(IOPORT2, PIOB_LCD_BL); - chThdSleepMilliseconds(900); - } - return 0; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - (void)argc; - (void)argv; - - /* - * Activates the serial driver 1 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Normal main() thread activity. - */ - while (TRUE) { - chThdSleepMilliseconds(500); - if (!palReadPad(IOPORT2, PIOB_SW1)) - sdWrite(&SD1, (uint8_t *)"Hello World!\r\n", 14); - if (!palReadPad(IOPORT2, PIOB_SW2)) - TestThread(&SD1); - } - - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/mcuconf.h deleted file mode 100644 index 02ce316..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/mcuconf.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * AT91SAM7 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * MAC driver system settings. - */ -#define MAC_TRANSMIT_BUFFERS 2 -#define MAC_RECEIVE_BUFFERS 2 -#define MAC_BUFFERS_SIZE 1518 -#define EMAC_INTERRUPT_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 3) - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ -#define USE_SAM7_USART0 TRUE -#define USE_SAM7_USART1 TRUE -#define SAM7_USART0_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) -#define SAM7_USART1_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) - -/* - * SPI driver system settings. - */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/readme.txt b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/readme.txt deleted file mode 100644 index e33b627..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-GCC/readme.txt +++ /dev/null @@ -1,28 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for ARM7TDMI AT91SAM7X256. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex SAM7-EX256 board. - -** The Demo ** - -The demo currently just flashes the LCD background using a thread. -The button SW1 prints an "Hello World!" string on COM1, the button SW2 -activates che ChibiOS/RT test suite, output on COM1. - -** Build Procedure ** - -The demo was built using the YAGARTO toolchain but any toolchain based on GCC -and GNU userspace programs will work. - -** Notes ** - -Some files used by the demo are not part of ChibiOS/RT but are Atmel copyright -and are licensed under a different license, see the header present in all the -source files under ./demos/os/hal/platform/AT91SAM7/at91lib for details. -Also note that not all the files present in the Atmel library are distribuited -with ChibiOS/RT, you can find the whole library on the Atmel web site: - - http://www.atmel.com diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/Makefile b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/Makefile deleted file mode 100644 index b83c41f..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/Makefile +++ /dev/null @@ -1,194 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = no -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_SAM7_EX256/board.mk -include $(CHIBIOS)/os/hal/platforms/AT91SAM7/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARM7/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk -include ./lwip/lwip.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(LWNETIFSRC) \ - $(LWCORESRC) \ - $(LWIPV4SRC) \ - $(LWAPISRC) \ - $(CHIBIOS)/os/various/evtimer.c \ - ./lwip/arch/sys_arch.c \ - ./lwip/lwipthread.c \ - ./web/web.c \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARM7/AT91SAM7/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) $(LWINC) \ - $(CHIBIOS)/os/various \ - $(CHIBIOS)/os/ports/GCC/ARM7/AT91SAM7 \ - ./lwip - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = arm7tdmi - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DLWIP_PROVIDE_ERRNO - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/ch.ld deleted file mode 100644 index 805c8a5..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/ch.ld +++ /dev/null @@ -1,110 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * AT91SAM7X256 memory setup. - */ -__und_stack_size__ = 0x0004; -__abt_stack_size__ = 0x0004; -__fiq_stack_size__ = 0x0010; -__irq_stack_size__ = 0x0080; -__svc_stack_size__ = 0x0004; -__sys_stack_size__ = 0x0400; -__stacks_total_size__ = __und_stack_size__ + __abt_stack_size__ + __fiq_stack_size__ + __irq_stack_size__ + __svc_stack_size__ + __sys_stack_size__; - -MEMORY -{ - flash : org = 0x100000, len = 256k - ram : org = 0x200020, len = 64k - 0x20 -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - *(.ctors) - *(.dtors) - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/chconf.h deleted file mode 100644 index bab624b..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/chconf.h +++ /dev/null @@ -1,497 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS TRUE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ - /* Space for the LWIP sys_timeouts structure.*/ \ - void *p_lwipspace[1]; \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ - (tp)->p_lwipspace[0] = NULL; \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/halconf.h deleted file mode 100644 index e438ebb..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC TRUE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/cc.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/cc.h deleted file mode 100644 index bf28818..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/cc.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ -/* - * **** This file incorporates work covered by the following copyright and **** - * **** permission notice: **** - * - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#ifndef __CC_H__ -#define __CC_H__ - -#include - -typedef uint8_t u8_t; -typedef int8_t s8_t; -typedef uint16_t u16_t; -typedef int16_t s16_t; -typedef uint32_t u32_t; -typedef int32_t s32_t; -typedef uint32_t mem_ptr_t; - -#define LWIP_PLATFORM_DIAG(x) -#define LWIP_PLATFORM_ASSERT(x) { \ - chSysHalt(); \ -} - -#define BYTE_ORDER LITTLE_ENDIAN - -#endif /* __CC_H__ */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/perf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/perf.h deleted file mode 100644 index 4cbd285..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/perf.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ -/* - * **** This file incorporates work covered by the following copyright and **** - * **** permission notice: **** - * - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#ifndef __PERF_H__ -#define __PERF_H__ - -#define PERF_START -#define PERF_STOP(x) - -#endif /* __PERF_H__ */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.c b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.c deleted file mode 100644 index c9f55e8..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ -/* - * **** This file incorporates work covered by the following copyright and **** - * **** permission notice: **** - * - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "ch.h" - -#include "lwip/opt.h" -#include "lwip/mem.h" -#include "lwip/sys.h" -#include "lwip/stats.h" - -#include "arch/cc.h" -#include "arch/sys_arch.h" - -void sys_init(void) { - -} - -sys_sem_t sys_sem_new(u8_t count) { - - sys_sem_t sem = chHeapAlloc(NULL, sizeof(Semaphore)); - if (sem == 0) { - SYS_STATS_INC(sem.err); - } - else { - chSemInit(sem, (cnt_t)count); - SYS_STATS_INC(sem.used); - } - return sem; -} - -void sys_sem_free(sys_sem_t sem) { - - chHeapFree(sem); - SYS_STATS_DEC(sem.used); -} - -void sys_sem_signal(sys_sem_t sem) { - - chSemSignal(sem); -} - -u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout) { - systime_t time; - - chSysLock(); - time = chTimeNow(); - if (chSemWaitTimeoutS(sem, (systime_t)timeout) != RDY_OK) - time = SYS_ARCH_TIMEOUT; - else - time = chTimeNow() - time; - chSysUnlock(); - return time; -} - -sys_mbox_t sys_mbox_new(int size) { - - sys_mbox_t mbox = chHeapAlloc(NULL, sizeof(Mailbox) + sizeof(msg_t) * size); - if (mbox == 0) { - SYS_STATS_INC(mbox.err); - } - else { - chMBInit(mbox, (void *)(((uint8_t *)mbox) + sizeof(Mailbox)), size); - SYS_STATS_INC(mbox.used); - } - return mbox; -} - -void sys_mbox_free(sys_mbox_t mbox) { - - chHeapFree(mbox); - SYS_STATS_DEC(mbox.used); -} - -void sys_mbox_post(sys_mbox_t mbox, void *msg) { - - chMBPost(mbox, (msg_t)msg, TIME_INFINITE); -} - -err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg) { - - if (chMBPost(mbox, (msg_t)msg, TIME_IMMEDIATE) == RDY_TIMEOUT) - return ERR_MEM; - return ERR_OK; -} - -u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout) { - systime_t time; - - chSysLock(); - time = chTimeNow(); - if (chMBFetchS(mbox, (msg_t *)msg, (systime_t)timeout) != RDY_OK) - time = SYS_ARCH_TIMEOUT; - else - time = chTimeNow() - time; - chSysUnlock(); - return time; -} - -u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg) { - - if (chMBFetch(mbox, (msg_t *)msg, TIME_IMMEDIATE) == RDY_TIMEOUT) - return SYS_MBOX_EMPTY; - return 0; -} - -struct sys_timeouts *sys_arch_timeouts(void) { - - return (struct sys_timeouts *)currp->p_lwipspace; -} - -sys_thread_t sys_thread_new(char *name, void (* thread)(void *arg), - void *arg, int stacksize, int prio) { - (void)name; - size_t wsz = THD_WA_SIZE(stacksize); - void *wsp = chCoreAlloc(wsz); - if (wsp == NULL) - return NULL; - return (sys_thread_t)chThdCreateStatic(wsp, wsz, prio, (tfunc_t)thread, arg); -} - -sys_prot_t sys_arch_protect(void) { - - chSysLock(); - return 0; -} - -void sys_arch_unprotect(sys_prot_t pval) { - - (void)pval; - chSysUnlock(); -} diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.h deleted file mode 100644 index 16601c4..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ -/* - * **** This file incorporates work covered by the following copyright and **** - * **** permission notice: **** - * - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include - -#ifndef __SYS_ARCH_H__ -#define __SYS_ARCH_H__ - -typedef Semaphore * sys_sem_t; -typedef Mailbox * sys_mbox_t; -typedef Thread * sys_thread_t; -typedef int sys_prot_t; - -#define SYS_MBOX_NULL (Mailbox *)0 -#define SYS_THREAD_NULL (Thread *)0 -#define SYS_SEM_NULL (Semaphore *)0 - -void sys_init(void); -sys_sem_t sys_sem_new(u8_t count); -void sys_sem_free(sys_sem_t sem); -void sys_sem_signal(sys_sem_t sem); -u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout); - -sys_mbox_t sys_mbox_new(int size); -void sys_mbox_free(sys_mbox_t mbox); -void sys_mbox_post(sys_mbox_t mbox, void *msg); -err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg); -u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout); -u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg); - -struct sys_timeouts *sys_arch_timeouts(void); - -sys_thread_t sys_thread_new(char *name, - void (* thread)(void *arg), - void *arg, - int stacksize, - int prio); - -sys_prot_t sys_arch_protect(void); -void sys_arch_unprotect(sys_prot_t pval); - -#endif /* __SYS_ARCH_H__ */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwip.mk b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwip.mk deleted file mode 100644 index 886eeab..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwip.mk +++ /dev/null @@ -1,44 +0,0 @@ -# List of the required lwIP files. -LWNETIFSRC = \ - ${CHIBIOS}/ext/lwip/src/netif/etharp.c \ - ${CHIBIOS}/ext/lwip/src/netif/loopif.c - -LWCORESRC = \ - ${CHIBIOS}/ext/lwip/src/core/dhcp.c \ - ${CHIBIOS}/ext/lwip/src/core/dns.c \ - ${CHIBIOS}/ext/lwip/src/core/init.c \ - ${CHIBIOS}/ext/lwip/src/core/mem.c \ - ${CHIBIOS}/ext/lwip/src/core/memp.c \ - ${CHIBIOS}/ext/lwip/src/core/netif.c \ - ${CHIBIOS}/ext/lwip/src/core/pbuf.c \ - ${CHIBIOS}/ext/lwip/src/core/raw.c \ - ${CHIBIOS}/ext/lwip/src/core/stats.c \ - ${CHIBIOS}/ext/lwip/src/core/sys.c \ - ${CHIBIOS}/ext/lwip/src/core/tcp.c \ - ${CHIBIOS}/ext/lwip/src/core/tcp_in.c \ - ${CHIBIOS}/ext/lwip/src/core/tcp_out.c \ - ${CHIBIOS}/ext/lwip/src/core/udp.c - -LWIPV4SRC = \ - ${CHIBIOS}/ext/lwip/src/core/ipv4/autoip.c \ - ${CHIBIOS}/ext/lwip/src/core/ipv4/icmp.c \ - ${CHIBIOS}/ext/lwip/src/core/ipv4/igmp.c \ - ${CHIBIOS}/ext/lwip/src/core/ipv4/inet.c \ - ${CHIBIOS}/ext/lwip/src/core/ipv4/inet_chksum.c \ - ${CHIBIOS}/ext/lwip/src/core/ipv4/ip.c \ - ${CHIBIOS}/ext/lwip/src/core/ipv4/ip_addr.c \ - ${CHIBIOS}/ext/lwip/src/core/ipv4/ip_frag.c - -LWAPISRC = \ - ${CHIBIOS}/ext/lwip/src/api/api_lib.c \ - ${CHIBIOS}/ext/lwip/src/api/api_msg.c \ - ${CHIBIOS}/ext/lwip/src/api/err.c \ - ${CHIBIOS}/ext/lwip/src/api/netbuf.c \ - ${CHIBIOS}/ext/lwip/src/api/netdb.c \ - ${CHIBIOS}/ext/lwip/src/api/netifapi.c \ - ${CHIBIOS}/ext/lwip/src/api/sockets.c \ - ${CHIBIOS}/ext/lwip/src/api/tcpip.c - -LWINC = \ - ${CHIBIOS}/ext/lwip/src/include \ - ${CHIBIOS}/ext/lwip/src/include/ipv4 diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.c b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.c deleted file mode 100644 index 8c59d29..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.c +++ /dev/null @@ -1,309 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ -/* - * **** This file incorporates work covered by the following copyright and **** - * **** permission notice: **** - * - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -/** - * @file lwipthread.c - * @brief LWIP wrapper thread code. - * @addtogroup LWIP_THREAD - * @{ - */ - -#include "ch.h" -#include "hal.h" -#include "evtimer.h" - -#include "lwip/opt.h" - -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/pbuf.h" -#include "lwip/sys.h" -#include -#include -#include -#include "netif/etharp.h" -#include "netif/ppp_oe.h" - -#include "lwipthread.h" - -#define PERIODIC_TIMER_ID 1 -#define FRAME_RECEIVED_ID 2 - -/** - * Stack area for the LWIP-MAC thread. - */ -WORKING_AREA(wa_lwip_thread, LWIP_THREAD_STACK_SIZE); - -/* - * Initialization. - */ -static void low_level_init(struct netif *netif) { - /* set MAC hardware address length */ - netif->hwaddr_len = ETHARP_HWADDR_LEN; - - /* maximum transfer unit */ - netif->mtu = 1500; - - /* device capabilities */ - /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */ - netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP; - - /* Do whatever else is needed to initialize interface. */ -} - -/* - * Transmits a frame. - */ -static err_t low_level_output(struct netif *netif, struct pbuf *p) { - struct pbuf *q; - MACTransmitDescriptor td; - - (void)netif; - if (macWaitTransmitDescriptor(Ð1, &td, MS2ST(LWIP_SEND_TIMEOUT)) != RDY_OK) - return ERR_TIMEOUT; - -#if ETH_PAD_SIZE - pbuf_header(p, -ETH_PAD_SIZE); /* drop the padding word */ -#endif - - /* Iterates through the pbuf chain. */ - for(q = p; q != NULL; q = q->next) { - macWriteTransmitDescriptor(&td, (uint8_t *)q->payload, (size_t)q->len); - } - macReleaseTransmitDescriptor(&td); - -#if ETH_PAD_SIZE - pbuf_header(p, ETH_PAD_SIZE); /* reclaim the padding word */ -#endif - - LINK_STATS_INC(link.xmit); - - return ERR_OK; -} - -/* - * Receives a frame. - */ -static struct pbuf *low_level_input(struct netif *netif) { - MACReceiveDescriptor rd; - struct pbuf *p, *q; - u16_t len; - - (void)netif; - if (macWaitReceiveDescriptor(Ð1, &rd, TIME_IMMEDIATE) == RDY_OK) { - len = (u16_t)rd.rd_size; - -#if ETH_PAD_SIZE - len += ETH_PAD_SIZE; /* allow room for Ethernet padding */ -#endif - - /* We allocate a pbuf chain of pbufs from the pool. */ - p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL); - - if (p != NULL) { - -#if ETH_PAD_SIZE - pbuf_header(p, -ETH_PAD_SIZE); /* drop the padding word */ -#endif - - /* Iterates through the pbuf chain. */ - for(q = p; q != NULL; q = q->next) { - macReadReceiveDescriptor(&rd, (uint8_t *)q->payload, (size_t)q->len); - } - macReleaseReceiveDescriptor(&rd); - -#if ETH_PAD_SIZE - pbuf_header(p, ETH_PAD_SIZE); /* reclaim the padding word */ -#endif - - LINK_STATS_INC(link.recv); - } - else { - macReleaseReceiveDescriptor(&rd); - LINK_STATS_INC(link.memerr); - LINK_STATS_INC(link.drop); - } - return p; - } - return NULL; -} - -/* - * Initialization. - */ -static err_t ethernetif_init(struct netif *netif) { -#if LWIP_NETIF_HOSTNAME - /* Initialize interface hostname */ - netif->hostname = "lwip"; -#endif /* LWIP_NETIF_HOSTNAME */ - - /* - * Initialize the snmp variables and counters inside the struct netif. - * The last argument should be replaced with your link speed, in units - * of bits per second. - */ - NETIF_INIT_SNMP(netif, snmp_ifType_ethernet_csmacd, LWIP_LINK_SPEED); - - netif->state = NULL; - netif->name[0] = LWIP_IFNAME0; - netif->name[1] = LWIP_IFNAME1; - /* We directly use etharp_output() here to save a function call. - * You can instead declare your own function an call etharp_output() - * from it if you have to do some checks before sending (e.g. if link - * is available...) */ - netif->output = etharp_output; - netif->linkoutput = low_level_output; - - /* initialize the hardware */ - low_level_init(netif); - - return ERR_OK; -} - -/** - * @brief LWIP handling thread. - * - * @param[in] p pointer to a @p lwipthread_opts structure or @p NULL - * @return The function does not return. - */ -msg_t lwip_thread(void *p) { - EvTimer evt; - EventListener el0, el1; - struct ip_addr ip, gateway, netmask; - static struct netif thisif; - - /* Initializes the thing.*/ - sys_init(); - mem_init(); - memp_init(); - pbuf_init(); - netif_init(); - ip_init(); - tcpip_init(NULL, NULL); - - /* TCP/IP parameters, runtime or compile time.*/ - if (p) { - struct lwipthread_opts *opts = p; - unsigned i; - - for (i = 0; i < 6; i++) - thisif.hwaddr[i] = opts->macaddress[i]; - ip.addr = opts->address; - gateway.addr = opts->gateway; - netmask.addr = opts->netmask; - } - else { - thisif.hwaddr[0] = LWIP_ETHADDR_0; - thisif.hwaddr[1] = LWIP_ETHADDR_1; - thisif.hwaddr[2] = LWIP_ETHADDR_2; - thisif.hwaddr[3] = LWIP_ETHADDR_3; - thisif.hwaddr[4] = LWIP_ETHADDR_4; - thisif.hwaddr[5] = LWIP_ETHADDR_5; - LWIP_IPADDR(&ip); - LWIP_GATEWAY(&gateway); - LWIP_NETMASK(&netmask); - } - macSetAddress(Ð1, thisif.hwaddr); - netif_add(&thisif, &ip, &netmask, &gateway, NULL, ethernetif_init, tcpip_input); - - netif_set_default(&thisif); - netif_set_up(&thisif); - - /* Setup event sources.*/ - evtInit(&evt, S2ST(5)); - evtStart(&evt); - chEvtRegisterMask(&evt.et_es, &el0, PERIODIC_TIMER_ID); - chEvtRegisterMask(macGetReceiveEventSource(Ð1), &el1, FRAME_RECEIVED_ID); - chEvtPend(PERIODIC_TIMER_ID | FRAME_RECEIVED_ID); - - /* Goes to the final priority after initialization.*/ - chThdSetPriority(LWIP_THREAD_PRIORITY); - - while (TRUE) { - eventmask_t mask = chEvtWaitAny(ALL_EVENTS); - if (mask & PERIODIC_TIMER_ID) - (void)macPollLinkStatus(Ð1); - if (mask & FRAME_RECEIVED_ID) { - struct pbuf *p; - while ((p = low_level_input(&thisif)) != NULL) { - struct eth_hdr *ethhdr = p->payload; - switch (htons(ethhdr->type)) { - /* IP or ARP packet? */ - case ETHTYPE_IP: - case ETHTYPE_ARP: -#if PPPOE_SUPPORT - /* PPPoE packet? */ - case ETHTYPE_PPPOEDISC: - case ETHTYPE_PPPOE: -#endif /* PPPOE_SUPPORT */ - /* full packet send to tcpip_thread to process */ - if (thisif.input(p, &thisif) == ERR_OK) - break; - LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n")); - default: - pbuf_free(p); - } - } - } - } - return 0; -} - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.h deleted file mode 100644 index ddc048c..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file lwipthread.h - * @brief LWIP wrapper thread macros and structures. - * @addtogroup LWIP_THREAD - * @{ - */ - -#ifndef _LWIPTHREAD_H_ -#define _LWIPTHREAD_H_ - -/** @brief MAC thread priority.*/ -#ifndef LWIP_THREAD_PRIORITY -#define LWIP_THREAD_PRIORITY LOWPRIO -#endif - -/** @brief IP Address. */ -#if !defined(LWIP_IPADDR) || defined(__DOXYGEN__) -#define LWIP_IPADDR(p) IP4_ADDR(p, 192, 168, 1, 20) -#endif - -/** @brief IP Gateway. */ -#if !defined(LWIP_GATEWAY) || defined(__DOXYGEN__) -#define LWIP_GATEWAY(p) IP4_ADDR(p, 192, 168, 1, 1) -#endif - -/** @brief IP netmask. */ -#if !defined(LWIP_NETMASK) || defined(__DOXYGEN__) -#define LWIP_NETMASK(p) IP4_ADDR(p, 255, 255, 255, 0) -#endif - -/** @brief MAC thread stack size. */ -#if !defined(LWIP_THREAD_STACK_SIZE) || defined(__DOXYGEN__) -#define LWIP_THREAD_STACK_SIZE 512 -#endif - -/** @brief Transmission timeout. */ -#if !defined(LWIP_SEND_TIMEOUT) || defined(__DOXYGEN__) -#define LWIP_SEND_TIMEOUT 50 -#endif - -/** @brief Link speed. */ -#if !defined(LWIP_LINK_SPEED) || defined(__DOXYGEN__) -#define LWIP_LINK_SPEED 100000000 -#endif - -/** @brief MAC Address byte 0. */ -#if !defined(LWIP_ETHADDR_0) || defined(__DOXYGEN__) -#define LWIP_ETHADDR_0 0xC2 -#endif - -/** @brief MAC Address byte 1. */ -#if !defined(LWIP_ETHADDR_1) || defined(__DOXYGEN__) -#define LWIP_ETHADDR_1 0xAF -#endif - -/** @brief MAC Address byte 2. */ -#if !defined(LWIP_ETHADDR_2) || defined(__DOXYGEN__) -#define LWIP_ETHADDR_2 0x51 -#endif - -/** @brief MAC Address byte 3. */ -#if !defined(LWIP_ETHADDR_3) || defined(__DOXYGEN__) -#define LWIP_ETHADDR_3 0x03 -#endif - -/** @brief MAC Address byte 4. */ -#if !defined(LWIP_ETHADDR_4) || defined(__DOXYGEN__) -#define LWIP_ETHADDR_4 0xCF -#endif - -/** @brief MAC Address byte 5. */ -#if !defined(LWIP_ETHADDR_5) || defined(__DOXYGEN__) -#define LWIP_ETHADDR_5 0x46 -#endif - -/** @brief Interface name byte 0. */ -#if !defined(LWIP_IFNAME0) || defined(__DOXYGEN__) -#define LWIP_IFNAME0 'm' -#endif - -/** @brief Interface name byte 1. */ -#if !defined(LWIP_IFNAME1) || defined(__DOXYGEN__) -#define LWIP_IFNAME1 's' -#endif - -/** - * @brief Runtime TCP/IP settings. - */ -struct lwipthread_opts { - uint8_t *macaddress; - uint32_t address; - uint32_t netmask; - uint32_t gateway; -}; - -extern WORKING_AREA(wa_lwip_thread, LWIP_THREAD_STACK_SIZE); - -#ifdef __cplusplus -extern "C" { -#endif - msg_t lwip_thread(void *p); -#ifdef __cplusplus -} -#endif - -#endif /* _LWIPTHREAD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwipopts.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwipopts.h deleted file mode 100644 index 8707a27..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/lwipopts.h +++ /dev/null @@ -1,1801 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIPOPT_H__ -#define __LWIPOPT_H__ - - -/* - ----------------------------------------------- - ---------- Platform specific locking ---------- - ----------------------------------------------- -*/ - -/** - * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain - * critical regions during buffer allocation, deallocation and memory - * allocation and deallocation. - */ -#ifndef SYS_LIGHTWEIGHT_PROT -#define SYS_LIGHTWEIGHT_PROT 0 -#endif - -/** - * NO_SYS==1: Provides VERY minimal functionality. Otherwise, - * use lwIP facilities. - */ -#ifndef NO_SYS -#define NO_SYS 0 -#endif - -/** - * MEMCPY: override this if you have a faster implementation at hand than the - * one included in your C library - */ -#ifndef MEMCPY -#define MEMCPY(dst,src,len) memcpy(dst,src,len) -#endif - -/** - * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a - * call to memcpy() if the length is known at compile time and is small. - */ -#ifndef SMEMCPY -#define SMEMCPY(dst,src,len) memcpy(dst,src,len) -#endif - -/* - ------------------------------------ - ---------- Memory options ---------- - ------------------------------------ -*/ -/** - * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library - * instead of the lwip internal allocator. Can save code size if you - * already use it. - */ -#ifndef MEM_LIBC_MALLOC -#define MEM_LIBC_MALLOC 0 -#endif - -/** -* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. -* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution -* speed and usage from interrupts! -*/ -#ifndef MEMP_MEM_MALLOC -#define MEMP_MEM_MALLOC 0 -#endif - -/** - * MEM_ALIGNMENT: should be set to the alignment of the CPU - * 4 byte alignment -> #define MEM_ALIGNMENT 4 - * 2 byte alignment -> #define MEM_ALIGNMENT 2 - */ -#ifndef MEM_ALIGNMENT -#define MEM_ALIGNMENT 4 -#endif - -/** - * MEM_SIZE: the size of the heap memory. If the application will send - * a lot of data that needs to be copied, this should be set high. - */ -#ifndef MEM_SIZE -#define MEM_SIZE 1600 -#endif - -/** - * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable - * amount of bytes before and after each memp element in every pool and fills - * it with a prominent default value. - * MEMP_OVERFLOW_CHECK == 0 no checking - * MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed - * MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time - * memp_malloc() or memp_free() is called (useful but slow!) - */ -#ifndef MEMP_OVERFLOW_CHECK -#define MEMP_OVERFLOW_CHECK 0 -#endif - -/** - * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make - * sure that there are no cycles in the linked lists. - */ -#ifndef MEMP_SANITY_CHECK -#define MEMP_SANITY_CHECK 0 -#endif - -/** - * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set - * of memory pools of various sizes. When mem_malloc is called, an element of - * the smallest pool that can provide the length needed is returned. - * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled. - */ -#ifndef MEM_USE_POOLS -#define MEM_USE_POOLS 0 -#endif - -/** - * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next - * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more - * reliable. */ -#ifndef MEM_USE_POOLS_TRY_BIGGER_POOL -#define MEM_USE_POOLS_TRY_BIGGER_POOL 0 -#endif - -/** - * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h - * that defines additional pools beyond the "standard" ones required - * by lwIP. If you set this to 1, you must have lwippools.h in your - * inlude path somewhere. - */ -#ifndef MEMP_USE_CUSTOM_POOLS -#define MEMP_USE_CUSTOM_POOLS 0 -#endif - -/** - * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from - * interrupt context (or another context that doesn't allow waiting for a - * semaphore). - * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT, - * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs - * with each loop so that mem_free can run. - * - * ATTENTION: As you can see from the above description, this leads to dis-/ - * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc - * can need longer. - * - * If you don't want that, at least for NO_SYS=0, you can still use the following - * functions to enqueue a deallocation call which then runs in the tcpip_thread - * context: - * - pbuf_free_callback(p); - * - mem_free_callback(m); - */ -#ifndef LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0 -#endif - -/* - ------------------------------------------------ - ---------- Internal Memory Pool Sizes ---------- - ------------------------------------------------ -*/ -/** - * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). - * If the application sends a lot of data out of ROM (or other static memory), - * this should be set high. - */ -#ifndef MEMP_NUM_PBUF -#define MEMP_NUM_PBUF 16 -#endif - -/** - * MEMP_NUM_RAW_PCB: Number of raw connection PCBs - * (requires the LWIP_RAW option) - */ -#ifndef MEMP_NUM_RAW_PCB -#define MEMP_NUM_RAW_PCB 4 -#endif - -/** - * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One - * per active UDP "connection". - * (requires the LWIP_UDP option) - */ -#ifndef MEMP_NUM_UDP_PCB -#define MEMP_NUM_UDP_PCB 4 -#endif - -/** - * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. - * (requires the LWIP_TCP option) - */ -#ifndef MEMP_NUM_TCP_PCB -#define MEMP_NUM_TCP_PCB 5 -#endif - -/** - * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. - * (requires the LWIP_TCP option) - */ -#ifndef MEMP_NUM_TCP_PCB_LISTEN -#define MEMP_NUM_TCP_PCB_LISTEN 8 -#endif - -/** - * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. - * (requires the LWIP_TCP option) - */ -#ifndef MEMP_NUM_TCP_SEG -#define MEMP_NUM_TCP_SEG 16 -#endif - -/** - * MEMP_NUM_REASSDATA: the number of simultaneously IP packets queued for - * reassembly (whole packets, not fragments!) - */ -#ifndef MEMP_NUM_REASSDATA -#define MEMP_NUM_REASSDATA 5 -#endif - -/** - * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing - * packets (pbufs) that are waiting for an ARP request (to resolve - * their destination address) to finish. - * (requires the ARP_QUEUEING option) - */ -#ifndef MEMP_NUM_ARP_QUEUE -#define MEMP_NUM_ARP_QUEUE 30 -#endif - -/** - * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces - * can be members et the same time (one per netif - allsystems group -, plus one - * per netif membership). - * (requires the LWIP_IGMP option) - */ -#ifndef MEMP_NUM_IGMP_GROUP -#define MEMP_NUM_IGMP_GROUP 8 -#endif - -/** - * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. - * (requires NO_SYS==0) - */ -#ifndef MEMP_NUM_SYS_TIMEOUT -#define MEMP_NUM_SYS_TIMEOUT (4 + LWIP_DHCP + LWIP_DNS) -#endif - -/** - * MEMP_NUM_NETBUF: the number of struct netbufs. - * (only needed if you use the sequential API, like api_lib.c) - */ -#ifndef MEMP_NUM_NETBUF -#define MEMP_NUM_NETBUF 2 -#endif - -/** - * MEMP_NUM_NETCONN: the number of struct netconns. - * (only needed if you use the sequential API, like api_lib.c) - */ -#ifndef MEMP_NUM_NETCONN -#define MEMP_NUM_NETCONN 4 -#endif - -/** - * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used - * for callback/timeout API communication. - * (only needed if you use tcpip.c) - */ -#ifndef MEMP_NUM_TCPIP_MSG_API -#define MEMP_NUM_TCPIP_MSG_API 8 -#endif - -/** - * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used - * for incoming packets. - * (only needed if you use tcpip.c) - */ -#ifndef MEMP_NUM_TCPIP_MSG_INPKT -#define MEMP_NUM_TCPIP_MSG_INPKT 8 -#endif - -/** - * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. - */ -#ifndef PBUF_POOL_SIZE -#define PBUF_POOL_SIZE 16 -#endif - -/* - --------------------------------- - ---------- ARP options ---------- - --------------------------------- -*/ -/** - * LWIP_ARP==1: Enable ARP functionality. - */ -#ifndef LWIP_ARP -#define LWIP_ARP 1 -#endif - -/** - * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached. - */ -#ifndef ARP_TABLE_SIZE -#define ARP_TABLE_SIZE 10 -#endif - -/** - * ARP_QUEUEING==1: Outgoing packets are queued during hardware address - * resolution. - */ -#ifndef ARP_QUEUEING -#define ARP_QUEUEING 1 -#endif - -/** - * ETHARP_TRUST_IP_MAC==1: Incoming IP packets cause the ARP table to be - * updated with the source MAC and IP addresses supplied in the packet. - * You may want to disable this if you do not trust LAN peers to have the - * correct addresses, or as a limited approach to attempt to handle - * spoofing. If disabled, lwIP will need to make a new ARP request if - * the peer is not already in the ARP table, adding a little latency. - */ -#ifndef ETHARP_TRUST_IP_MAC -#define ETHARP_TRUST_IP_MAC 1 -#endif - -/* - -------------------------------- - ---------- IP options ---------- - -------------------------------- -*/ -/** - * IP_FORWARD==1: Enables the ability to forward IP packets across network - * interfaces. If you are going to run lwIP on a device with only one network - * interface, define this to 0. - */ -#ifndef IP_FORWARD -#define IP_FORWARD 0 -#endif - -/** - * IP_OPTIONS_ALLOWED: Defines the behavior for IP options. - * IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped. - * IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed). - */ -#ifndef IP_OPTIONS_ALLOWED -#define IP_OPTIONS_ALLOWED 1 -#endif - -/** - * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that - * this option does not affect outgoing packet sizes, which can be controlled - * via IP_FRAG. - */ -#ifndef IP_REASSEMBLY -#define IP_REASSEMBLY 1 -#endif - -/** - * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note - * that this option does not affect incoming packet sizes, which can be - * controlled via IP_REASSEMBLY. - */ -#ifndef IP_FRAG -#define IP_FRAG 1 -#endif - -/** - * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) - * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived - * in this time, the whole packet is discarded. - */ -#ifndef IP_REASS_MAXAGE -#define IP_REASS_MAXAGE 3 -#endif - -/** - * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. - * Since the received pbufs are enqueued, be sure to configure - * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive - * packets even if the maximum amount of fragments is enqueued for reassembly! - */ -#ifndef IP_REASS_MAX_PBUFS -#define IP_REASS_MAX_PBUFS 10 -#endif - -/** - * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP - * fragmentation. Otherwise pbufs are allocated and reference the original - * packet data to be fragmented. - */ -#ifndef IP_FRAG_USES_STATIC_BUF -#define IP_FRAG_USES_STATIC_BUF 1 -#endif - -/** - * IP_FRAG_MAX_MTU: Assumed max MTU on any interface for IP frag buffer - * (requires IP_FRAG_USES_STATIC_BUF==1) - */ -#if IP_FRAG_USES_STATIC_BUF && !defined(IP_FRAG_MAX_MTU) -#define IP_FRAG_MAX_MTU 1500 -#endif - -/** - * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. - */ -#ifndef IP_DEFAULT_TTL -#define IP_DEFAULT_TTL 255 -#endif - -/** - * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast - * filter per pcb on udp and raw send operations. To enable broadcast filter - * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1. - */ -#ifndef IP_SOF_BROADCAST -#define IP_SOF_BROADCAST 0 -#endif - -/** - * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast - * filter on recv operations. - */ -#ifndef IP_SOF_BROADCAST_RECV -#define IP_SOF_BROADCAST_RECV 0 -#endif - -/* - ---------------------------------- - ---------- ICMP options ---------- - ---------------------------------- -*/ -/** - * LWIP_ICMP==1: Enable ICMP module inside the IP stack. - * Be careful, disable that make your product non-compliant to RFC1122 - */ -#ifndef LWIP_ICMP -#define LWIP_ICMP 1 -#endif - -/** - * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. - */ -#ifndef ICMP_TTL -#define ICMP_TTL (IP_DEFAULT_TTL) -#endif - -/** - * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only) - */ -#ifndef LWIP_BROADCAST_PING -#define LWIP_BROADCAST_PING 0 -#endif - -/** - * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only) - */ -#ifndef LWIP_MULTICAST_PING -#define LWIP_MULTICAST_PING 0 -#endif - -/* - --------------------------------- - ---------- RAW options ---------- - --------------------------------- -*/ -/** - * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. - */ -#ifndef LWIP_RAW -#define LWIP_RAW 1 -#endif - -/** - * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. - */ -#ifndef RAW_TTL -#define RAW_TTL (IP_DEFAULT_TTL) -#endif - -/* - ---------------------------------- - ---------- DHCP options ---------- - ---------------------------------- -*/ -/** - * LWIP_DHCP==1: Enable DHCP module. - */ -#ifndef LWIP_DHCP -#define LWIP_DHCP 0 -#endif - -/** - * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. - */ -#ifndef DHCP_DOES_ARP_CHECK -#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) -#endif - -/* - ------------------------------------ - ---------- AUTOIP options ---------- - ------------------------------------ -*/ -/** - * LWIP_AUTOIP==1: Enable AUTOIP module. - */ -#ifndef LWIP_AUTOIP -#define LWIP_AUTOIP 0 -#endif - -/** - * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on - * the same interface at the same time. - */ -#ifndef LWIP_DHCP_AUTOIP_COOP -#define LWIP_DHCP_AUTOIP_COOP 0 -#endif - -/** - * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes - * that should be sent before falling back on AUTOIP. This can be set - * as low as 1 to get an AutoIP address very quickly, but you should - * be prepared to handle a changing IP address when DHCP overrides - * AutoIP. - */ -#ifndef LWIP_DHCP_AUTOIP_COOP_TRIES -#define LWIP_DHCP_AUTOIP_COOP_TRIES 9 -#endif - -/* - ---------------------------------- - ---------- SNMP options ---------- - ---------------------------------- -*/ -/** - * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP - * transport. - */ -#ifndef LWIP_SNMP -#define LWIP_SNMP 0 -#endif - -/** - * SNMP_CONCURRENT_REQUESTS: Number of concurrent requests the module will - * allow. At least one request buffer is required. - */ -#ifndef SNMP_CONCURRENT_REQUESTS -#define SNMP_CONCURRENT_REQUESTS 1 -#endif - -/** - * SNMP_TRAP_DESTINATIONS: Number of trap destinations. At least one trap - * destination is required - */ -#ifndef SNMP_TRAP_DESTINATIONS -#define SNMP_TRAP_DESTINATIONS 1 -#endif - -/** - * SNMP_PRIVATE_MIB: - */ -#ifndef SNMP_PRIVATE_MIB -#define SNMP_PRIVATE_MIB 0 -#endif - -/** - * Only allow SNMP write actions that are 'safe' (e.g. disabeling netifs is not - * a safe action and disabled when SNMP_SAFE_REQUESTS = 1). - * Unsafe requests are disabled by default! - */ -#ifndef SNMP_SAFE_REQUESTS -#define SNMP_SAFE_REQUESTS 1 -#endif - -/* - ---------------------------------- - ---------- IGMP options ---------- - ---------------------------------- -*/ -/** - * LWIP_IGMP==1: Turn on IGMP module. - */ -#ifndef LWIP_IGMP -#define LWIP_IGMP 0 -#endif - -/* - ---------------------------------- - ---------- DNS options ----------- - ---------------------------------- -*/ -/** - * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS - * transport. - */ -#ifndef LWIP_DNS -#define LWIP_DNS 0 -#endif - -/** DNS maximum number of entries to maintain locally. */ -#ifndef DNS_TABLE_SIZE -#define DNS_TABLE_SIZE 4 -#endif - -/** DNS maximum host name length supported in the name table. */ -#ifndef DNS_MAX_NAME_LENGTH -#define DNS_MAX_NAME_LENGTH 256 -#endif - -/** The maximum of DNS servers */ -#ifndef DNS_MAX_SERVERS -#define DNS_MAX_SERVERS 2 -#endif - -/** DNS do a name checking between the query and the response. */ -#ifndef DNS_DOES_NAME_CHECK -#define DNS_DOES_NAME_CHECK 1 -#endif - -/** DNS use a local buffer if DNS_USES_STATIC_BUF=0, a static one if - DNS_USES_STATIC_BUF=1, or a dynamic one if DNS_USES_STATIC_BUF=2. - The buffer will be of size DNS_MSG_SIZE */ -#ifndef DNS_USES_STATIC_BUF -#define DNS_USES_STATIC_BUF 1 -#endif - -/** DNS message max. size. Default value is RFC compliant. */ -#ifndef DNS_MSG_SIZE -#define DNS_MSG_SIZE 512 -#endif - -/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, - * you have to define - * #define DNS_LOCAL_HOSTLIST_INIT {{"host1", 0x123}, {"host2", 0x234}} - * (an array of structs name/address, where address is an u32_t in network - * byte order). - * - * Instead, you can also use an external function: - * #define DNS_LOOKUP_LOCAL_EXTERN(x) extern u32_t my_lookup_function(const char *name) - * that returns the IP address or INADDR_NONE if not found. - */ -#ifndef DNS_LOCAL_HOSTLIST -#define DNS_LOCAL_HOSTLIST 0 -#endif /* DNS_LOCAL_HOSTLIST */ - -/** If this is turned on, the local host-list can be dynamically changed - * at runtime. */ -#ifndef DNS_LOCAL_HOSTLIST_IS_DYNAMIC -#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC 0 -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - -/* - --------------------------------- - ---------- UDP options ---------- - --------------------------------- -*/ -/** - * LWIP_UDP==1: Turn on UDP. - */ -#ifndef LWIP_UDP -#define LWIP_UDP 1 -#endif - -/** - * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) - */ -#ifndef LWIP_UDPLITE -#define LWIP_UDPLITE 0 -#endif - -/** - * UDP_TTL: Default Time-To-Live value. - */ -#ifndef UDP_TTL -#define UDP_TTL (IP_DEFAULT_TTL) -#endif - -/* - --------------------------------- - ---------- TCP options ---------- - --------------------------------- -*/ -/** - * LWIP_TCP==1: Turn on TCP. - */ -#ifndef LWIP_TCP -#define LWIP_TCP 1 -#endif - -/** - * TCP_TTL: Default Time-To-Live value. - */ -#ifndef TCP_TTL -#define TCP_TTL (IP_DEFAULT_TTL) -#endif - -/** - * TCP_WND: The size of a TCP window. This must be at least - * (2 * TCP_MSS) for things to work well - */ -#ifndef TCP_WND -#define TCP_WND 2048 -#endif - -/** - * TCP_MAXRTX: Maximum number of retransmissions of data segments. - */ -#ifndef TCP_MAXRTX -#define TCP_MAXRTX 12 -#endif - -/** - * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. - */ -#ifndef TCP_SYNMAXRTX -#define TCP_SYNMAXRTX 6 -#endif - -/** - * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. - * Define to 0 if your device is low on memory. - */ -#ifndef TCP_QUEUE_OOSEQ -#define TCP_QUEUE_OOSEQ (LWIP_TCP) -#endif - -/** - * TCP_MSS: TCP Maximum segment size. (default is 128, a *very* - * conservative default.) - * For the receive side, this MSS is advertised to the remote side - * when opening a connection. For the transmit size, this MSS sets - * an upper limit on the MSS advertised by the remote host. - */ -#ifndef TCP_MSS -#define TCP_MSS 128 -#endif - -/** - * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really - * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which - * reflects the available reassembly buffer size at the remote host) and the - * largest size permitted by the IP layer" (RFC 1122) - * Setting this to 1 enables code that checks TCP_MSS against the MTU of the - * netif used for a connection and limits the MSS if it would be too big otherwise. - */ -#ifndef TCP_CALCULATE_EFF_SEND_MSS -#define TCP_CALCULATE_EFF_SEND_MSS 1 -#endif - - -/** - * TCP_SND_BUF: TCP sender buffer space (bytes). - */ -#ifndef TCP_SND_BUF -#define TCP_SND_BUF 256 -#endif - -/** - * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least - * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. - */ -#ifndef TCP_SND_QUEUELEN -#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF/TCP_MSS)) -#endif - -/** - * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than or equal - * to TCP_SND_BUF. It is the amount of space which must be available in the - * TCP snd_buf for select to return writable. - */ -#ifndef TCP_SNDLOWAT -#define TCP_SNDLOWAT (TCP_SND_BUF/2) -#endif - -/** - * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. - */ -#ifndef TCP_LISTEN_BACKLOG -#define TCP_LISTEN_BACKLOG 0 -#endif - -/** - * The maximum allowed backlog for TCP listen netconns. - * This backlog is used unless another is explicitly specified. - * 0xff is the maximum (u8_t). - */ -#ifndef TCP_DEFAULT_LISTEN_BACKLOG -#define TCP_DEFAULT_LISTEN_BACKLOG 0xff -#endif - -/** - * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. - */ -#ifndef LWIP_TCP_TIMESTAMPS -#define LWIP_TCP_TIMESTAMPS 0 -#endif - -/** - * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an - * explicit window update - */ -#ifndef TCP_WND_UPDATE_THRESHOLD -#define TCP_WND_UPDATE_THRESHOLD (TCP_WND / 4) -#endif - -/** - * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1. - * LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all - * events (accept, sent, etc) that happen in the system. - * LWIP_CALLBACK_API==1: The PCB callback function is called directly - * for the event. - */ -//#define LWIP_EVENT_API - -/* - ---------------------------------- - ---------- Pbuf options ---------- - ---------------------------------- -*/ -/** - * PBUF_LINK_HLEN: the number of bytes that should be allocated for a - * link level header. The default is 14, the standard value for - * Ethernet. - */ -#ifndef PBUF_LINK_HLEN -#define PBUF_LINK_HLEN 14 -#endif - -/** - * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is - * designed to accomodate single full size TCP frame in one pbuf, including - * TCP_MSS, IP header, and link header. - */ -#ifndef PBUF_POOL_BUFSIZE -#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) -#endif - -/* - ------------------------------------------------ - ---------- Network Interfaces options ---------- - ------------------------------------------------ -*/ -/** - * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname - * field. - */ -#ifndef LWIP_NETIF_HOSTNAME -#define LWIP_NETIF_HOSTNAME 0 -#endif - -/** - * LWIP_NETIF_API==1: Support netif api (in netifapi.c) - */ -#ifndef LWIP_NETIF_API -#define LWIP_NETIF_API 0 -#endif - -/** - * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface - * changes its up/down status (i.e., due to DHCP IP acquistion) - */ -#ifndef LWIP_NETIF_STATUS_CALLBACK -#define LWIP_NETIF_STATUS_CALLBACK 0 -#endif - -/** - * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface - * whenever the link changes (i.e., link down) - */ -#ifndef LWIP_NETIF_LINK_CALLBACK -#define LWIP_NETIF_LINK_CALLBACK 0 -#endif - -/** - * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table - * indices) in struct netif. TCP and UDP can make use of this to prevent - * scanning the ARP table for every sent packet. While this is faster for big - * ARP tables or many concurrent connections, it might be counterproductive - * if you have a tiny ARP table or if there never are concurrent connections. - */ -#ifndef LWIP_NETIF_HWADDRHINT -#define LWIP_NETIF_HWADDRHINT 0 -#endif - -/** - * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP - * address equal to the netif IP address, looping them back up the stack. - */ -#ifndef LWIP_NETIF_LOOPBACK -#define LWIP_NETIF_LOOPBACK 0 -#endif - -/** - * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback - * sending for each netif (0 = disabled) - */ -#ifndef LWIP_LOOPBACK_MAX_PBUFS -#define LWIP_LOOPBACK_MAX_PBUFS 0 -#endif - -/** - * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in - * the system, as netifs must change how they behave depending on this setting - * for the LWIP_NETIF_LOOPBACK option to work. - * Setting this is needed to avoid reentering non-reentrant functions like - * tcp_input(). - * LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a - * multithreaded environment like tcpip.c. In this case, netif->input() - * is called directly. - * LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. - * The packets are put on a list and netif_poll() must be called in - * the main application loop. - */ -#ifndef LWIP_NETIF_LOOPBACK_MULTITHREADING -#define LWIP_NETIF_LOOPBACK_MULTITHREADING (!NO_SYS) -#endif - -/** - * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data - * to be sent into one single pbuf. This is for compatibility with DMA-enabled - * MACs that do not support scatter-gather. - * Beware that this might involve CPU-memcpy before transmitting that would not - * be needed without this flag! Use this only if you need to! - * - * @todo: TCP and IP-frag do not work with this, yet: - */ -#ifndef LWIP_NETIF_TX_SINGLE_PBUF -#define LWIP_NETIF_TX_SINGLE_PBUF 0 -#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ - -/* - ------------------------------------ - ---------- LOOPIF options ---------- - ------------------------------------ -*/ -/** - * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c - */ -#ifndef LWIP_HAVE_LOOPIF -#define LWIP_HAVE_LOOPIF 0 -#endif - -/* - ------------------------------------ - ---------- SLIPIF options ---------- - ------------------------------------ -*/ -/** - * LWIP_HAVE_SLIPIF==1: Support slip interface and slipif.c - */ -#ifndef LWIP_HAVE_SLIPIF -#define LWIP_HAVE_SLIPIF 0 -#endif - -/* - ------------------------------------ - ---------- Thread options ---------- - ------------------------------------ -*/ -/** - * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. - */ -#ifndef TCPIP_THREAD_NAME -#define TCPIP_THREAD_NAME "tcpip_thread" -#endif - -/** - * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef TCPIP_THREAD_STACKSIZE -#define TCPIP_THREAD_STACKSIZE 1024 -#endif - -/** - * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef TCPIP_THREAD_PRIO -#define TCPIP_THREAD_PRIO (LOWPRIO + 1) -#endif - -/** - * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages - * The queue size value itself is platform-dependent, but is passed to - * sys_mbox_new() when tcpip_init is called. - */ -#ifndef TCPIP_MBOX_SIZE -#define TCPIP_MBOX_SIZE 4 -#endif - -/** - * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread. - */ -#ifndef SLIPIF_THREAD_NAME -#define SLIPIF_THREAD_NAME "slipif_loop" -#endif - -/** - * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef SLIPIF_THREAD_STACKSIZE -#define SLIPIF_THREAD_STACKSIZE 1024 -#endif - -/** - * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef SLIPIF_THREAD_PRIO -#define SLIPIF_THREAD_PRIO (LOWPRIO + 1) -#endif - -/** - * PPP_THREAD_NAME: The name assigned to the pppMain thread. - */ -#ifndef PPP_THREAD_NAME -#define PPP_THREAD_NAME "pppMain" -#endif - -/** - * PPP_THREAD_STACKSIZE: The stack size used by the pppMain thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef PPP_THREAD_STACKSIZE -#define PPP_THREAD_STACKSIZE 1024 -#endif - -/** - * PPP_THREAD_PRIO: The priority assigned to the pppMain thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef PPP_THREAD_PRIO -#define PPP_THREAD_PRIO (LOWPRIO + 1) -#endif - -/** - * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread. - */ -#ifndef DEFAULT_THREAD_NAME -#define DEFAULT_THREAD_NAME "lwIP" -#endif - -/** - * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef DEFAULT_THREAD_STACKSIZE -#define DEFAULT_THREAD_STACKSIZE 1024 -#endif - -/** - * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef DEFAULT_THREAD_PRIO -#define DEFAULT_THREAD_PRIO (LOWPRIO + 1) -#endif - -/** - * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#ifndef DEFAULT_RAW_RECVMBOX_SIZE -#define DEFAULT_RAW_RECVMBOX_SIZE 4 -#endif - -/** - * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#ifndef DEFAULT_UDP_RECVMBOX_SIZE -#define DEFAULT_UDP_RECVMBOX_SIZE 4 -#endif - -/** - * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#ifndef DEFAULT_TCP_RECVMBOX_SIZE -#define DEFAULT_TCP_RECVMBOX_SIZE 40 -#endif - -/** - * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. - * The queue size value itself is platform-dependent, but is passed to - * sys_mbox_new() when the acceptmbox is created. - */ -#ifndef DEFAULT_ACCEPTMBOX_SIZE -#define DEFAULT_ACCEPTMBOX_SIZE 4 -#endif - -/* - ---------------------------------------------- - ---------- Sequential layer options ---------- - ---------------------------------------------- -*/ -/** - * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!) - * Don't use it if you're not an active lwIP project member - */ -#ifndef LWIP_TCPIP_CORE_LOCKING -#define LWIP_TCPIP_CORE_LOCKING 0 -#endif - -/** - * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) - */ -#ifndef LWIP_NETCONN -#define LWIP_NETCONN 1 -#endif - -/* - ------------------------------------ - ---------- Socket options ---------- - ------------------------------------ -*/ -/** - * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) - */ -#ifndef LWIP_SOCKET -#define LWIP_SOCKET 1 -#endif - -/** - * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names. - * (only used if you use sockets.c) - */ -#ifndef LWIP_COMPAT_SOCKETS -#define LWIP_COMPAT_SOCKETS 1 -#endif - -/** - * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. - * Disable this option if you use a POSIX operating system that uses the same - * names (read, write & close). (only used if you use sockets.c) - */ -#ifndef LWIP_POSIX_SOCKETS_IO_NAMES -#define LWIP_POSIX_SOCKETS_IO_NAMES 1 -#endif - -/** - * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT - * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set - * in seconds. (does not require sockets.c, and will affect tcp.c) - */ -#ifndef LWIP_TCP_KEEPALIVE -#define LWIP_TCP_KEEPALIVE 0 -#endif - -/** - * LWIP_SO_RCVTIMEO==1: Enable SO_RCVTIMEO processing. - */ -#ifndef LWIP_SO_RCVTIMEO -#define LWIP_SO_RCVTIMEO 0 -#endif - -/** - * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. - */ -#ifndef LWIP_SO_RCVBUF -#define LWIP_SO_RCVBUF 0 -#endif - -/** - * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize. - */ -#ifndef RECV_BUFSIZE_DEFAULT -#define RECV_BUFSIZE_DEFAULT INT_MAX -#endif - -/** - * SO_REUSE==1: Enable SO_REUSEADDR and SO_REUSEPORT options. DO NOT USE! - */ -#ifndef SO_REUSE -#define SO_REUSE 0 -#endif - -/* - ---------------------------------------- - ---------- Statistics options ---------- - ---------------------------------------- -*/ -/** - * LWIP_STATS==1: Enable statistics collection in lwip_stats. - */ -#ifndef LWIP_STATS -#define LWIP_STATS 1 -#endif - -#if LWIP_STATS - -/** - * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. - */ -#ifndef LWIP_STATS_DISPLAY -#define LWIP_STATS_DISPLAY 0 -#endif - -/** - * LINK_STATS==1: Enable link stats. - */ -#ifndef LINK_STATS -#define LINK_STATS 1 -#endif - -/** - * ETHARP_STATS==1: Enable etharp stats. - */ -#ifndef ETHARP_STATS -#define ETHARP_STATS (LWIP_ARP) -#endif - -/** - * IP_STATS==1: Enable IP stats. - */ -#ifndef IP_STATS -#define IP_STATS 1 -#endif - -/** - * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is - * on if using either frag or reass. - */ -#ifndef IPFRAG_STATS -#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) -#endif - -/** - * ICMP_STATS==1: Enable ICMP stats. - */ -#ifndef ICMP_STATS -#define ICMP_STATS 1 -#endif - -/** - * IGMP_STATS==1: Enable IGMP stats. - */ -#ifndef IGMP_STATS -#define IGMP_STATS (LWIP_IGMP) -#endif - -/** - * UDP_STATS==1: Enable UDP stats. Default is on if - * UDP enabled, otherwise off. - */ -#ifndef UDP_STATS -#define UDP_STATS (LWIP_UDP) -#endif - -/** - * TCP_STATS==1: Enable TCP stats. Default is on if TCP - * enabled, otherwise off. - */ -#ifndef TCP_STATS -#define TCP_STATS (LWIP_TCP) -#endif - -/** - * MEM_STATS==1: Enable mem.c stats. - */ -#ifndef MEM_STATS -#define MEM_STATS 1 -#endif - -/** - * MEMP_STATS==1: Enable memp.c pool stats. - */ -#ifndef MEMP_STATS -#define MEMP_STATS 1 -#endif - -/** - * SYS_STATS==1: Enable system stats (sem and mbox counts, etc). - */ -#ifndef SYS_STATS -#define SYS_STATS 1 -#endif - -#else - -#define LINK_STATS 0 -#define IP_STATS 0 -#define IPFRAG_STATS 0 -#define ICMP_STATS 0 -#define IGMP_STATS 0 -#define UDP_STATS 0 -#define TCP_STATS 0 -#define MEM_STATS 0 -#define MEMP_STATS 0 -#define SYS_STATS 0 -#define LWIP_STATS_DISPLAY 0 - -#endif /* LWIP_STATS */ - -/* - --------------------------------- - ---------- PPP options ---------- - --------------------------------- -*/ -/** - * PPP_SUPPORT==1: Enable PPP. - */ -#ifndef PPP_SUPPORT -#define PPP_SUPPORT 0 -#endif - -/** - * PPPOE_SUPPORT==1: Enable PPP Over Ethernet - */ -#ifndef PPPOE_SUPPORT -#define PPPOE_SUPPORT 0 -#endif - -/** - * PPPOS_SUPPORT==1: Enable PPP Over Serial - */ -#ifndef PPPOS_SUPPORT -#define PPPOS_SUPPORT PPP_SUPPORT -#endif - -#if PPP_SUPPORT - -/** - * NUM_PPP: Max PPP sessions. - */ -#ifndef NUM_PPP -#define NUM_PPP 1 -#endif - -/** - * PAP_SUPPORT==1: Support PAP. - */ -#ifndef PAP_SUPPORT -#define PAP_SUPPORT 0 -#endif - -/** - * CHAP_SUPPORT==1: Support CHAP. - */ -#ifndef CHAP_SUPPORT -#define CHAP_SUPPORT 0 -#endif - -/** - * MSCHAP_SUPPORT==1: Support MSCHAP. CURRENTLY NOT SUPPORTED! DO NOT SET! - */ -#ifndef MSCHAP_SUPPORT -#define MSCHAP_SUPPORT 0 -#endif - -/** - * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET! - */ -#ifndef CBCP_SUPPORT -#define CBCP_SUPPORT 0 -#endif - -/** - * CCP_SUPPORT==1: Support CCP. CURRENTLY NOT SUPPORTED! DO NOT SET! - */ -#ifndef CCP_SUPPORT -#define CCP_SUPPORT 0 -#endif - -/** - * VJ_SUPPORT==1: Support VJ header compression. - */ -#ifndef VJ_SUPPORT -#define VJ_SUPPORT 0 -#endif - -/** - * MD5_SUPPORT==1: Support MD5 (see also CHAP). - */ -#ifndef MD5_SUPPORT -#define MD5_SUPPORT 0 -#endif - -/* - * Timeouts - */ -#ifndef FSM_DEFTIMEOUT -#define FSM_DEFTIMEOUT 6 /* Timeout time in seconds */ -#endif - -#ifndef FSM_DEFMAXTERMREQS -#define FSM_DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ -#endif - -#ifndef FSM_DEFMAXCONFREQS -#define FSM_DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ -#endif - -#ifndef FSM_DEFMAXNAKLOOPS -#define FSM_DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ -#endif - -#ifndef UPAP_DEFTIMEOUT -#define UPAP_DEFTIMEOUT 6 /* Timeout (seconds) for retransmitting req */ -#endif - -#ifndef UPAP_DEFREQTIME -#define UPAP_DEFREQTIME 30 /* Time to wait for auth-req from peer */ -#endif - -#ifndef CHAP_DEFTIMEOUT -#define CHAP_DEFTIMEOUT 6 /* Timeout time in seconds */ -#endif - -#ifndef CHAP_DEFTRANSMITS -#define CHAP_DEFTRANSMITS 10 /* max # times to send challenge */ -#endif - -/* Interval in seconds between keepalive echo requests, 0 to disable. */ -#ifndef LCP_ECHOINTERVAL -#define LCP_ECHOINTERVAL 0 -#endif - -/* Number of unanswered echo requests before failure. */ -#ifndef LCP_MAXECHOFAILS -#define LCP_MAXECHOFAILS 3 -#endif - -/* Max Xmit idle time (in jiffies) before resend flag char. */ -#ifndef PPP_MAXIDLEFLAG -#define PPP_MAXIDLEFLAG 100 -#endif - -/* - * Packet sizes - * - * Note - lcp shouldn't be allowed to negotiate stuff outside these - * limits. See lcp.h in the pppd directory. - * (XXX - these constants should simply be shared by lcp.c instead - * of living in lcp.h) - */ -#define PPP_MTU 1500 /* Default MTU (size of Info field) */ -#ifndef PPP_MAXMTU -/* #define PPP_MAXMTU 65535 - (PPP_HDRLEN + PPP_FCSLEN) */ -#define PPP_MAXMTU 1500 /* Largest MTU we allow */ -#endif -#define PPP_MINMTU 64 -#define PPP_MRU 1500 /* default MRU = max length of info field */ -#define PPP_MAXMRU 1500 /* Largest MRU we allow */ -#ifndef PPP_DEFMRU -#define PPP_DEFMRU 296 /* Try for this */ -#endif -#define PPP_MINMRU 128 /* No MRUs below this */ - - -#define MAXNAMELEN 256 /* max length of hostname or name for auth */ -#define MAXSECRETLEN 256 /* max length of password or secret */ - -#endif /* PPP_SUPPORT */ - -/* - -------------------------------------- - ---------- Checksum options ---------- - -------------------------------------- -*/ -/** - * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets. - */ -#ifndef CHECKSUM_GEN_IP -#define CHECKSUM_GEN_IP 1 -#endif - -/** - * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets. - */ -#ifndef CHECKSUM_GEN_UDP -#define CHECKSUM_GEN_UDP 1 -#endif - -/** - * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets. - */ -#ifndef CHECKSUM_GEN_TCP -#define CHECKSUM_GEN_TCP 1 -#endif - -/** - * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets. - */ -#ifndef CHECKSUM_CHECK_IP -#define CHECKSUM_CHECK_IP 1 -#endif - -/** - * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets. - */ -#ifndef CHECKSUM_CHECK_UDP -#define CHECKSUM_CHECK_UDP 1 -#endif - -/** - * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets. - */ -#ifndef CHECKSUM_CHECK_TCP -#define CHECKSUM_CHECK_TCP 1 -#endif - -/* - --------------------------------------- - ---------- Debugging options ---------- - --------------------------------------- -*/ -/** - * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is - * compared against this value. If it is smaller, then debugging - * messages are written. - */ -#ifndef LWIP_DBG_MIN_LEVEL -#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF -#endif - -/** - * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable - * debug messages of certain types. - */ -#ifndef LWIP_DBG_TYPES_ON -#define LWIP_DBG_TYPES_ON LWIP_DBG_ON -#endif - -/** - * ETHARP_DEBUG: Enable debugging in etharp.c. - */ -#ifndef ETHARP_DEBUG -#define ETHARP_DEBUG LWIP_DBG_OFF -#endif - -/** - * NETIF_DEBUG: Enable debugging in netif.c. - */ -#ifndef NETIF_DEBUG -#define NETIF_DEBUG LWIP_DBG_OFF -#endif - -/** - * PBUF_DEBUG: Enable debugging in pbuf.c. - */ -#ifndef PBUF_DEBUG -#define PBUF_DEBUG LWIP_DBG_OFF -#endif - -/** - * API_LIB_DEBUG: Enable debugging in api_lib.c. - */ -#ifndef API_LIB_DEBUG -#define API_LIB_DEBUG LWIP_DBG_OFF -#endif - -/** - * API_MSG_DEBUG: Enable debugging in api_msg.c. - */ -#ifndef API_MSG_DEBUG -#define API_MSG_DEBUG LWIP_DBG_OFF -#endif - -/** - * SOCKETS_DEBUG: Enable debugging in sockets.c. - */ -#ifndef SOCKETS_DEBUG -#define SOCKETS_DEBUG LWIP_DBG_OFF -#endif - -/** - * ICMP_DEBUG: Enable debugging in icmp.c. - */ -#ifndef ICMP_DEBUG -#define ICMP_DEBUG LWIP_DBG_OFF -#endif - -/** - * IGMP_DEBUG: Enable debugging in igmp.c. - */ -#ifndef IGMP_DEBUG -#define IGMP_DEBUG LWIP_DBG_OFF -#endif - -/** - * INET_DEBUG: Enable debugging in inet.c. - */ -#ifndef INET_DEBUG -#define INET_DEBUG LWIP_DBG_OFF -#endif - -/** - * IP_DEBUG: Enable debugging for IP. - */ -#ifndef IP_DEBUG -#define IP_DEBUG LWIP_DBG_OFF -#endif - -/** - * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. - */ -#ifndef IP_REASS_DEBUG -#define IP_REASS_DEBUG LWIP_DBG_OFF -#endif - -/** - * RAW_DEBUG: Enable debugging in raw.c. - */ -#ifndef RAW_DEBUG -#define RAW_DEBUG LWIP_DBG_OFF -#endif - -/** - * MEM_DEBUG: Enable debugging in mem.c. - */ -#ifndef MEM_DEBUG -#define MEM_DEBUG LWIP_DBG_OFF -#endif - -/** - * MEMP_DEBUG: Enable debugging in memp.c. - */ -#ifndef MEMP_DEBUG -#define MEMP_DEBUG LWIP_DBG_OFF -#endif - -/** - * SYS_DEBUG: Enable debugging in sys.c. - */ -#ifndef SYS_DEBUG -#define SYS_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_DEBUG: Enable debugging for TCP. - */ -#ifndef TCP_DEBUG -#define TCP_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. - */ -#ifndef TCP_INPUT_DEBUG -#define TCP_INPUT_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. - */ -#ifndef TCP_FR_DEBUG -#define TCP_FR_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit - * timeout. - */ -#ifndef TCP_RTO_DEBUG -#define TCP_RTO_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. - */ -#ifndef TCP_CWND_DEBUG -#define TCP_CWND_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. - */ -#ifndef TCP_WND_DEBUG -#define TCP_WND_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. - */ -#ifndef TCP_OUTPUT_DEBUG -#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. - */ -#ifndef TCP_RST_DEBUG -#define TCP_RST_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. - */ -#ifndef TCP_QLEN_DEBUG -#define TCP_QLEN_DEBUG LWIP_DBG_OFF -#endif - -/** - * UDP_DEBUG: Enable debugging in UDP. - */ -#ifndef UDP_DEBUG -#define UDP_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCPIP_DEBUG: Enable debugging in tcpip.c. - */ -#ifndef TCPIP_DEBUG -#define TCPIP_DEBUG LWIP_DBG_OFF -#endif - -/** - * PPP_DEBUG: Enable debugging for PPP. - */ -#ifndef PPP_DEBUG -#define PPP_DEBUG LWIP_DBG_OFF -#endif - -/** - * SLIP_DEBUG: Enable debugging in slipif.c. - */ -#ifndef SLIP_DEBUG -#define SLIP_DEBUG LWIP_DBG_OFF -#endif - -/** - * DHCP_DEBUG: Enable debugging in dhcp.c. - */ -#ifndef DHCP_DEBUG -#define DHCP_DEBUG LWIP_DBG_OFF -#endif - -/** - * AUTOIP_DEBUG: Enable debugging in autoip.c. - */ -#ifndef AUTOIP_DEBUG -#define AUTOIP_DEBUG LWIP_DBG_OFF -#endif - -/** - * SNMP_MSG_DEBUG: Enable debugging for SNMP messages. - */ -#ifndef SNMP_MSG_DEBUG -#define SNMP_MSG_DEBUG LWIP_DBG_OFF -#endif - -/** - * SNMP_MIB_DEBUG: Enable debugging for SNMP MIBs. - */ -#ifndef SNMP_MIB_DEBUG -#define SNMP_MIB_DEBUG LWIP_DBG_OFF -#endif - -/** - * DNS_DEBUG: Enable debugging for DNS. - */ -#ifndef DNS_DEBUG -#define DNS_DEBUG LWIP_DBG_OFF -#endif - -#endif /* __LWIPOPT_H__ */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/main.c b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/main.c deleted file mode 100644 index d9efe52..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/main.c +++ /dev/null @@ -1,90 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -#include "lwip/lwipthread.h" -#include "web/web.h" - -static WORKING_AREA(waThread1, 64); -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palClearPad(IOPORT2, PIOB_LCD_BL); - chThdSleepMilliseconds(900); - palSetPad(IOPORT2, PIOB_LCD_BL); - chThdSleepMilliseconds(100); - } - return 0; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 1 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Creates the LWIP threads (it changes priority internally). - */ - chThdCreateStatic(wa_lwip_thread, LWIP_THREAD_STACK_SIZE, NORMALPRIO + 1, - lwip_thread, NULL); - - /* - * Creates the HTTP thread (it changes priority internally). - */ - chThdCreateStatic(wa_http_server, sizeof(wa_http_server), NORMALPRIO + 1, - http_server, NULL); - - /* - * Normal main() thread activity. - */ - while (TRUE) { - chThdSleepMilliseconds(500); - if (!palReadPad(IOPORT2, PIOB_SW1)) - sdWrite(&SD1, (uint8_t *)"Hello World!\r\n", 14); - if (!palReadPad(IOPORT2, PIOB_SW2)) - TestThread(&SD1); - } - - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/mcuconf.h deleted file mode 100644 index 02ce316..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/mcuconf.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * AT91SAM7 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * MAC driver system settings. - */ -#define MAC_TRANSMIT_BUFFERS 2 -#define MAC_RECEIVE_BUFFERS 2 -#define MAC_BUFFERS_SIZE 1518 -#define EMAC_INTERRUPT_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 3) - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ -#define USE_SAM7_USART0 TRUE -#define USE_SAM7_USART1 TRUE -#define SAM7_USART0_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) -#define SAM7_USART1_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) - -/* - * SPI driver system settings. - */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/readme.txt b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/readme.txt deleted file mode 100644 index d0d8721..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/readme.txt +++ /dev/null @@ -1,34 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for ARM7TDMI AT91SAM7X256. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex SAM7-EX256 board. - -** The Demo ** - -The demo currently just flashes the LCD background using a thread and serves -HTTP requests at address 192.168.1.20 on port 80 (remember to change it IP -address into web.c in order to adapt it to your network settings). -The button SW1 prints an "Hello World!" string on COM1, the button SW2 -activates che ChibiOS/RT test suite, output on COM1. - -** Build Procedure ** - -The demo was built using the YAGARTO toolchain but any toolchain based on GCC -and GNU userspace programs will work. -The demo requires the patcher lwIP 1.3.1 stack, see: ./ext/readme.txt - -** Notes ** - -Some files used by the demo are not part of ChibiOS/RT but are Atmel copyright -and are licensed under a different license, see the header present in all the -source files under ./demos/os/hal/platform/AT91SAM7/at91lib for details. -Also note that not all the files present in the Atmel library are distribuited -with ChibiOS/RT, you can find the whole library on the Atmel web site: - - http://www.atmel.com - -The lwIP stack also has its own license, please read the info into the included -lwIP distribution files. diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/web/web.c b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/web/web.c deleted file mode 100644 index db00691..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/web/web.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * This file is a modified version of the lwIP web server demo. The original - * author is unknown because the file didn't contain any license information. - */ - -/** - * @file web.c - * @brief HTTP server wrapper thread code. - * @addtogroup WEB_THREAD - * @{ - */ - -#include "ch.h" - -#include "lwip/opt.h" -#include "lwip/arch.h" -#include "lwip/api.h" - -#include "web.h" - -#if LWIP_NETCONN - -static const char http_html_hdr[] = "HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n"; -static const char http_index_html[] = "Congrats!

Welcome to our lwIP HTTP server!

This is a small test page."; - -static void http_server_serve(struct netconn *conn) { - struct netbuf *inbuf; - char *buf; - u16_t buflen; - - /* Read the data from the port, blocking if nothing yet there. - We assume the request (the part we care about) is in one netbuf */ - inbuf = netconn_recv(conn); - - if (netconn_err(conn) == ERR_OK) { - netbuf_data(inbuf, (void **)&buf, &buflen); - - /* Is this an HTTP GET command? (only check the first 5 chars, since - there are other formats for GET, and we're keeping it very simple )*/ - if (buflen>=5 && - buf[0]=='G' && - buf[1]=='E' && - buf[2]=='T' && - buf[3]==' ' && - buf[4]=='/' ) { - - /* Send the HTML header - * subtract 1 from the size, since we dont send the \0 in the string - * NETCONN_NOCOPY: our data is const static, so no need to copy it - */ - netconn_write(conn, http_html_hdr, sizeof(http_html_hdr)-1, NETCONN_NOCOPY); - - /* Send our HTML page */ - netconn_write(conn, http_index_html, sizeof(http_index_html)-1, NETCONN_NOCOPY); - } - } - /* Close the connection (server closes in HTTP) */ - netconn_close(conn); - - /* Delete the buffer (netconn_recv gives us ownership, - so we have to make sure to deallocate the buffer) */ - netbuf_delete(inbuf); -} - -/** - * Stack area for the http thread. - */ -WORKING_AREA(wa_http_server, WEB_THREAD_STACK_SIZE); - -/** - * HTTP server thread. - */ -msg_t http_server(void *p) { - struct netconn *conn, *newconn; - - (void)p; - - /* Create a new TCP connection handle */ - conn = netconn_new(NETCONN_TCP); - LWIP_ERROR("http_server: invalid conn", (conn != NULL), return RDY_RESET;); - - /* Bind to port 80 (HTTP) with default IP address */ - netconn_bind(conn, NULL, WEB_THREAD_PORT); - - /* Put the connection into LISTEN state */ - netconn_listen(conn); - - /* Goes to the final priority after initialization.*/ - chThdSetPriority(WEB_THREAD_PRIORITY); - - while(1) { - newconn = netconn_accept(conn); - http_server_serve(newconn); - netconn_delete(newconn); - } - return RDY_OK; -} - -#endif /* LWIP_NETCONN */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/web/web.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/web/web.h deleted file mode 100644 index 2b0be04..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-LWIP-GCC/web/web.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file web.h - * @brief HTTP server wrapper thread macros and structures. - * @addtogroup WEB_THREAD - * @{ - */ - -#ifndef _WEB_H_ -#define _WEB_H_ - -#ifndef WEB_THREAD_STACK_SIZE -#define WEB_THREAD_STACK_SIZE 1024 -#endif - -#ifndef WEB_THREAD_PORT -#define WEB_THREAD_PORT 80 -#endif - -#ifndef WEB_THREAD_PRIORITY -#define WEB_THREAD_PRIORITY (LOWPRIO + 2) -#endif - -extern WORKING_AREA(wa_http_server, WEB_THREAD_STACK_SIZE); - -#ifdef __cplusplus -extern "C" { -#endif - msg_t http_server(void *p); -#ifdef __cplusplus -} -#endif - -#endif /* _WEB_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/Makefile b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/Makefile deleted file mode 100644 index f775778..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/Makefile +++ /dev/null @@ -1,198 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = no -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_SAM7_EX256/board.mk -include $(CHIBIOS)/os/hal/platforms/AT91SAM7/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARM7/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# List of the required uIP source files. -USRC = $(CHIBIOS)/ext/uip-1.0/uip/uip_arp.c \ - $(CHIBIOS)/ext/uip-1.0/uip/psock.c \ - $(CHIBIOS)/ext/uip-1.0/uip/uip.c \ - $(CHIBIOS)/ext/uip-1.0/apps/webserver/httpd.c \ - $(CHIBIOS)/ext/uip-1.0/apps/webserver/http-strings.c \ - $(CHIBIOS)/ext/uip-1.0/apps/webserver/httpd-fs.c \ - $(CHIBIOS)/ext/uip-1.0/apps/webserver/httpd-cgi.c - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(USRC) \ - $(CHIBIOS)/os/various/syscalls.c \ - $(CHIBIOS)/os/various/evtimer.c \ - web/webthread.c \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARM7/AT91SAM7/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various \ - $(CHIBIOS)/os/ports/GCC/ARM7/AT91SAM7 \ - ./web $(CHIBIOS)/ext/uip-1.0/uip $(CHIBIOS)/ext/uip-1.0/apps/webserver - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = arm7tdmi - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/ch.ld deleted file mode 100644 index 805c8a5..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/ch.ld +++ /dev/null @@ -1,110 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * AT91SAM7X256 memory setup. - */ -__und_stack_size__ = 0x0004; -__abt_stack_size__ = 0x0004; -__fiq_stack_size__ = 0x0010; -__irq_stack_size__ = 0x0080; -__svc_stack_size__ = 0x0004; -__sys_stack_size__ = 0x0400; -__stacks_total_size__ = __und_stack_size__ + __abt_stack_size__ + __fiq_stack_size__ + __irq_stack_size__ + __svc_stack_size__ + __sys_stack_size__; - -MEMORY -{ - flash : org = 0x100000, len = 256k - ram : org = 0x200020, len = 64k - 0x20 -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - *(.ctors) - *(.dtors) - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/halconf.h deleted file mode 100644 index e438ebb..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC TRUE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/main.c b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/main.c deleted file mode 100644 index f667441..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/main.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -#include "web/webthread.h" - -static WORKING_AREA(waWebThread, 1024); -static WORKING_AREA(waThread1, 128); - -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palSetPad(IOPORT2, PIOB_LCD_BL); - chThdSleepMilliseconds(100); - palClearPad(IOPORT2, PIOB_LCD_BL); - chThdSleepMilliseconds(900); - } - return 0; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * Creates the blinker and web server threads. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - chThdCreateStatic(waWebThread, sizeof(waWebThread), LOWPRIO, WebThread, NULL); - - /* - * Normal main() thread activity. - */ - while (TRUE) { - chThdSleepMilliseconds(500); - if (!palReadPad(IOPORT2, PIOB_SW1)) - sdWrite(&SD1, (uint8_t *)"Hello World!\r\n", 14); - if (!palReadPad(IOPORT2, PIOB_SW2)) - TestThread(&SD1); - } - - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/mcuconf.h deleted file mode 100644 index 02ce316..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/mcuconf.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * AT91SAM7 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * MAC driver system settings. - */ -#define MAC_TRANSMIT_BUFFERS 2 -#define MAC_RECEIVE_BUFFERS 2 -#define MAC_BUFFERS_SIZE 1518 -#define EMAC_INTERRUPT_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 3) - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ -#define USE_SAM7_USART0 TRUE -#define USE_SAM7_USART1 TRUE -#define SAM7_USART0_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) -#define SAM7_USART1_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) - -/* - * SPI driver system settings. - */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/readme.txt b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/readme.txt deleted file mode 100644 index 80fddce..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/readme.txt +++ /dev/null @@ -1,34 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for ARM7TDMI AT91SAM7X256. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex SAM7-EX256 board. - -** The Demo ** - -The demo currently just flashes the LCD background using a thread and serves -HTTP requests at address 192.168.1.20 on port 80 (remember to change it IP -address into webthread.c in order to adapt it to your network settings). -The button SW1 prints an "Hello World!" string on COM1, the button SW2 -activates che ChibiOS/RT test suite, output on COM1. - -** Build Procedure ** - -The demo was built using the YAGARTO toolchain but any toolchain based on GCC -and GNU userspace programs will work. -The demo requires the patcher uIP 1.0 stack, see: ./ext/readme.txt - -** Notes ** - -Some files used by the demo are not part of ChibiOS/RT but are Atmel copyright -and are licensed under a different license, see the header present in all the -source files under ./demos/os/hal/platform/AT91SAM7/at91lib for details. -Also note that not all the files present in the Atmel library are distribuited -with ChibiOS/RT, you can find the whole library on the Atmel web site: - - http://www.atmel.com - -The uIP stack also has its own license, please read the info into the included -uIP distribution files. diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/cc-arch.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/cc-arch.h deleted file mode 100644 index ef41b00..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/cc-arch.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __CC_ARCH_H__ -#define __CC_ARCH_H__ - -#define PACK_STRUCT_FIELD(x) x __attribute__((packed)) -#define PACK_STRUCT_STRUCT __attribute__((packed)) -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_END - -#endif /* __CC_ARCH_H__ */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/clock-arch.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/clock-arch.h deleted file mode 100644 index 118a1b9..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/clock-arch.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $ - */ - -#ifndef __CLOCK_ARCH_H__ -#define __CLOCK_ARCH_H__ - -#include - -typedef systime_t clock_time_t; -#define CLOCK_CONF_SECOND CH_FREQUENCY - -#endif /* __CLOCK_ARCH_H__ */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/uip-conf.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/uip-conf.h deleted file mode 100644 index bc30715..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/uip-conf.h +++ /dev/null @@ -1,159 +0,0 @@ -/** - * \addtogroup uipopt - * @{ - */ - -/** - * \name Project-specific configuration options - * @{ - * - * uIP has a number of configuration options that can be overridden - * for each project. These are kept in a project-specific uip-conf.h - * file and all configuration names have the prefix UIP_CONF. - */ - -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ - */ - -/** - * \file - * An example uIP configuration file - * \author - * Adam Dunkels - */ - -#ifndef __UIP_CONF_H__ -#define __UIP_CONF_H__ - -#include - -#include /* patched */ - -/** - * 8 bit datatype - * - * This typedef defines the 8-bit type used throughout uIP. - * - * \hideinitializer - */ -typedef uint8_t u8_t; - -/** - * 16 bit datatype - * - * This typedef defines the 16-bit type used throughout uIP. - * - * \hideinitializer - */ -typedef uint16_t u16_t; - -/** - * Statistics datatype - * - * This typedef defines the dataype used for keeping statistics in - * uIP. - * - * \hideinitializer - */ -typedef unsigned short uip_stats_t; - -/** - * Maximum number of TCP connections. - * - * \hideinitializer - */ -#define UIP_CONF_MAX_CONNECTIONS 40 - -/** - * Maximum number of listening TCP ports. - * - * \hideinitializer - */ -#define UIP_CONF_MAX_LISTENPORTS 40 - -/** - * uIP buffer size. - * - * \hideinitializer - */ -#define UIP_CONF_BUFFER_SIZE 1518 - -/** - * CPU byte order. - * - * \hideinitializer - */ -#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN - -/** - * Logging on or off - * - * \hideinitializer - */ -#define UIP_CONF_LOGGING 0 - -/** - * UDP support on or off - * - * \hideinitializer - */ -#define UIP_CONF_UDP 0 - -/** - * UDP checksums on or off - * - * \hideinitializer - */ -#define UIP_CONF_UDP_CHECKSUMS 1 - -/** - * uIP statistics on or off - * - * \hideinitializer - */ -#define UIP_CONF_STATISTICS 1 - -/* Here we include the header file for the application(s) we use in - our project. */ -/*#include "smtp.h"*/ -/*#include "hello-world.h"*/ -/*#include "telnetd.h"*/ -#include "webserver.h" -/*#include "dhcpc.h"*/ -/*#include "resolv.h"*/ -/*#include "webclient.h"*/ - -#endif /* __UIP_CONF_H__ */ - -/** @} */ -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/webthread.c b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/webthread.c deleted file mode 100644 index 7ee143e..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/webthread.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include - -#include "ch.h" -#include "hal.h" -#include "evtimer.h" - -#include "uip.h" -#include "uip_arp.h" -#include "httpd.h" -#include "clock-arch.h" - -#define IPADDR0 192 -#define IPADDR1 168 -#define IPADDR2 1 -#define IPADDR3 20 - -#define SEND_TIMEOUT 50 - -static const struct uip_eth_addr macaddr = { - {0xC2, 0xAF, 0x51, 0x03, 0xCF, 0x46} -}; - -#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) - -/* - * uIP send function wrapping the EMAC functions. - */ -static void network_device_send(void) { - MACTransmitDescriptor td; - - if (macWaitTransmitDescriptor(Ð1, &td, MS2ST(SEND_TIMEOUT)) == RDY_OK) { - if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) - macWriteTransmitDescriptor(&td, uip_buf, uip_len); - else { - macWriteTransmitDescriptor(&td, uip_buf, UIP_LLH_LEN + UIP_TCPIP_HLEN); - macWriteTransmitDescriptor(&td, uip_appdata, - uip_len - (UIP_LLH_LEN + UIP_TCPIP_HLEN)); - } - macReleaseTransmitDescriptor(&td); - } - /* Dropped... */ -} - -/* - * uIP receive function wrapping the EMAC function. - */ -static size_t network_device_read(void) { - MACReceiveDescriptor rd; - size_t size; - - if (macWaitReceiveDescriptor(Ð1, &rd, TIME_IMMEDIATE) != RDY_OK) - return 0; - size = rd.rd_size; - macReadReceiveDescriptor(&rd, uip_buf, size); - macReleaseReceiveDescriptor(&rd); - return size; -} - -void clock_init(void) {} - -clock_time_t clock_time( void ) -{ - return chTimeNow(); -} - -/* - * TCP/IP periodic timer. - */ -static void PeriodicTimerHandler(eventid_t id) { - int i; - - (void)id; - for (i = 0; i < UIP_CONNS; i++) { - uip_periodic(i); - if (uip_len > 0) { - uip_arp_out(); - network_device_send(); - } - } -} - -/* - * ARP periodic timer. - */ -static void ARPTimerHandler(eventid_t id) { - - (void)id; - (void)macPollLinkStatus(Ð1); - uip_arp_timer(); -} - -/* - * Ethernet frame received. - */ -static void FrameReceivedHandler(eventid_t id) { - - (void)id; - while ((uip_len = network_device_read()) > 0) { - if (BUF->type == HTONS(UIP_ETHTYPE_IP)) { - uip_arp_ipin(); - uip_input(); - if (uip_len > 0) { - uip_arp_out(); - network_device_send(); - } - } - else if (BUF->type == HTONS(UIP_ETHTYPE_ARP)) { - uip_arp_arpin(); - if (uip_len > 0) - network_device_send(); - } - } -} - -#define FRAME_RECEIVED_ID 0 -#define PERIODIC_TIMER_ID 1 -#define ARP_TIMER_ID 2 - -static const evhandler_t evhndl[] = { - FrameReceivedHandler, - PeriodicTimerHandler, - ARPTimerHandler -}; - -msg_t WebThread(void *p) { - EvTimer evt1, evt2; - EventListener el0, el1, el2; - uip_ipaddr_t ipaddr; - - (void)p; - - /* - * Event sources setup. - */ - chEvtRegister(macGetReceiveEventSource(Ð1), &el0, FRAME_RECEIVED_ID); - chEvtPend(EVENT_MASK(FRAME_RECEIVED_ID)); /* In case some frames are already buffered */ - - evtInit(&evt1, MS2ST(500)); - evtStart(&evt1); - chEvtRegister(&evt1.et_es, &el1, PERIODIC_TIMER_ID); - - evtInit(&evt2, S2ST(10)); - evtStart(&evt2); - chEvtRegister(&evt2.et_es, &el2, ARP_TIMER_ID); - - /* - * EMAC settings. - */ - macSetAddress(Ð1, &macaddr.addr[0]); - (void)macPollLinkStatus(Ð1); - - /* - * uIP initialization. - */ - uip_init(); - uip_setethaddr(macaddr); - uip_ipaddr(ipaddr, IPADDR0, IPADDR1, IPADDR2, IPADDR3); - uip_sethostaddr(ipaddr); - httpd_init(); - - while (TRUE) { - chEvtDispatch(evhndl, chEvtWaitOne(ALL_EVENTS)); - } - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/webthread.h b/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/webthread.h deleted file mode 100644 index f5bdcba..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-AT91SAM7X-UIP-GCC/web/webthread.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _WEBTHREAD_H_ -#define _WEBTHREAD_H_ - -#ifdef __cplusplus -extern "C" { -#endif - msg_t WebThread(void *p); - #ifdef __cplusplus -} -#endif - -#endif /* _WEBTHREAD_H_ */ diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/Makefile b/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/Makefile deleted file mode 100644 index ace0b2b..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/Makefile +++ /dev/null @@ -1,190 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu -falign-functions=16 -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = no -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT = ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_LPC_P2148/board.mk -include $(CHIBIOS)/os/hal/platforms/LPC214x/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARM7/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk -include $(CHIBIOS)/ext/fatfs/fatfs.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(FATFSSRC) \ - $(BOARDSRC) \ - ${BOARDPATH}/buzzer.c \ - $(CHIBIOS)/os/various/evtimer.c \ - $(CHIBIOS)/os/various/syscalls.c \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARM7/LPC214x/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(FATFSINC) \ - $(CHIBIOS)/os/various \ - $(CHIBIOS)/os/ports/GCC/ARM7/LPC214x - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = arm7tdmi - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DSTDOUT_SD=SD1 -DSTDIN_SD=SD1 - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/ch.ld deleted file mode 100644 index 9529a23..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/ch.ld +++ /dev/null @@ -1,113 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * LPC2148 memory setup. - */ -__und_stack_size__ = 0x0004; -__abt_stack_size__ = 0x0004; -__fiq_stack_size__ = 0x0010; -__irq_stack_size__ = 0x0080; -__svc_stack_size__ = 0x0004; -__sys_stack_size__ = 0x0400; -__stacks_total_size__ = __und_stack_size__ + __abt_stack_size__ + __fiq_stack_size__ + __irq_stack_size__ + __svc_stack_size__ + __sys_stack_size__; - -MEMORY -{ - flash : org = 0x00000000, len = 512k - 12k - ram : org = 0x40000200, len = 32k - 0x200 - 288 -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; -__dma_start__ = 0x7FD00000; -__dma_size__ = 8k; -__dma_end__ = 0x7FD00000 + __dma_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - *(.ctors) - *(.dtors) - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/halconf.h deleted file mode 100644 index 32a85fc..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI TRUE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI TRUE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/main.c b/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/main.c deleted file mode 100644 index e02dc96..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/main.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include -#include - -#include "ch.h" -#include "hal.h" -#include "test.h" -#include "evtimer.h" -#include "buzzer.h" - -#include "ff.h" - -/** - * @brief FS object. - */ -FATFS MMC_FS; - -/** - * MMC driver instance. - */ -MMCDriver MMCD1; - -/* FS mounted and ready.*/ -static bool_t fs_ready = FALSE; - -/* Maximum speed SPI configuration (18MHz, CPHA=0, CPOL=0).*/ -static SPIConfig hs_spicfg = { - IOPORT1, - PA_SSEL1, - CR0_DSS8BIT | CR0_FRFSPI | CR0_CLOCKRATE(0), - 0, - 2 -}; - -/* Low speed SPI configuration (281.250KHz, CPHA=0, CPOL=0).*/ -static SPIConfig ls_spicfg = { - IOPORT1, - PA_SSEL1, - CR0_DSS8BIT | CR0_FRFSPI | CR0_CLOCKRATE(0), - 0, - 254 -}; - -/* MMC configuration (empty).*/ -static const MMCConfig mmc_cfg = {}; - -/* Card insertion verification.*/ -static bool_t mmc_is_inserted(void) { - return !palReadPad(IOPORT2, PB_CP1); -} - -/* Card protection verification.*/ -static bool_t mmc_is_protected(void) { - return palReadPad(IOPORT2, PB_WP1); -} - -/* Generic large buffer.*/ -uint8_t fbuff[1024]; - -/* - * Red LEDs blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 128); -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palClearPort(IOPORT1, PAL_PORT_BIT(PA_LED2)); - chThdSleepMilliseconds(200); - palSetPort(IOPORT1, PAL_PORT_BIT(PA_LED1) | PAL_PORT_BIT(PA_LED2)); - chThdSleepMilliseconds(800); - palClearPort(IOPORT1, PAL_PORT_BIT(PA_LED1)); - chThdSleepMilliseconds(200); - palSetPort(IOPORT1, PAL_PORT_BIT(PA_LED1) | PAL_PORT_BIT(PA_LED2)); - chThdSleepMilliseconds(800); - } - return 0; -} - -/* - * Yellow LED blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread2, 128); -static msg_t Thread2(void *arg) { - - (void)arg; - while (TRUE) { - palClearPad(IOPORT1, PA_LEDUSB); - chThdSleepMilliseconds(200); - palSetPad(IOPORT1, PA_LEDUSB); - chThdSleepMilliseconds(300); - } - return 0; -} - -static FRESULT scan_files(char *path) -{ - FRESULT res; - FILINFO fno; - DIR dir; - int i; - char *fn; - - res = f_opendir(&dir, path); - if (res == FR_OK) { - i = strlen(path); - for (;;) { - res = f_readdir(&dir, &fno); - if (res != FR_OK || fno.fname[0] == 0) - break; - if (fno.fname[0] == '.') - continue; - fn = fno.fname; - if (fno.fattrib & AM_DIR) { - siprintf(&path[i], "/%s", fn); - res = scan_files(path); - if (res != FR_OK) - break; - path[i] = 0; - } - else { - iprintf("%s/%s\r\n", path, fn); - } - } - } - return res; -} - -/* - * Executed as event handler at 500mS intervals. - */ -static void TimerHandler(eventid_t id) { - - (void)id; - if (!palReadPad(IOPORT1, PA_BUTTON1)) { - if (fs_ready) { - FRESULT err; - uint32_t clusters; - FATFS *fsp; - - err = f_getfree("/", &clusters, &fsp); - if (err != FR_OK) { - iprintf("FS: f_getfree() failed\r\n"); - return; - } - iprintf("FS: %lu free clusters, %u sectors per cluster, %lu bytes free\r\n", - clusters, MMC_FS.csize, - clusters * (uint32_t)MMC_FS.csize * (uint32_t)MMC_SECTOR_SIZE); - fbuff[0] = 0; - scan_files((char *)fbuff); - } - } - else if (!palReadPad(IOPORT1, PA_BUTTON2)) { - static WORKING_AREA(waTestThread, 256); - Thread *tp = chThdCreateStatic(waTestThread, sizeof(waTestThread), - NORMALPRIO, TestThread, &SD1); - chThdWait(tp); - buzzPlay(500, MS2ST(100)); - } -} - -/* - * MMC card insertion event. - */ -static void InsertHandler(eventid_t id) { - FRESULT err; - - (void)id; - buzzPlayWait(1000, MS2ST(100)); - buzzPlayWait(2000, MS2ST(100)); - iprintf("MMC: inserted\r\n"); - /* - * On insertion MMC initialization and FS mount. - */ - iprintf("MMC: initialization "); - if (mmcConnect(&MMCD1)) { - iprintf("failed\r\n"); - return; - } - iprintf("ok\r\n"); - iprintf("FS: mount "); - err = f_mount(0, &MMC_FS); - if (err != FR_OK) { - iprintf("failed\r\n"); - mmcDisconnect(&MMCD1); - return; - } - fs_ready = TRUE; - iprintf("ok\r\n"); - buzzPlay(440, MS2ST(200)); -} - -/* - * MMC card removal event. - */ -static void RemoveHandler(eventid_t id) { - - (void)id; - iprintf("MMC: removed\r\n"); - fs_ready = FALSE; - buzzPlayWait(2000, MS2ST(100)); - buzzPlayWait(1000, MS2ST(100)); -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - static const evhandler_t evhndl[] = { - TimerHandler, - InsertHandler, - RemoveHandler - }; - static EvTimer evt; - struct EventListener el0, el1, el2; - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * Buzzer driver initialization. - */ - buzzInit(); - - /* - * Initializes the MMC driver to work with SPI2. - */ - mmcObjectInit(&MMCD1, &SPID1, - &ls_spicfg, &hs_spicfg, - mmc_is_protected, mmc_is_inserted); - mmcStart(&MMCD1, &mmc_cfg); - - /* - * Creates the blinker threads. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO, Thread2, NULL); - - /* - * Normal main() thread activity, in this demo it does nothing except - * sleeping in a loop and listen for events. - */ - evtInit(&evt, MS2ST(500)); /* Initializes an event timer object. */ - evtStart(&evt); /* Starts the event timer. */ - chEvtRegister(&evt.et_es, &el0, 0); /* Registers on the timer event source. */ - chEvtRegister(&MMCD1.mmc_inserted_event, &el1, 1); - chEvtRegister(&MMCD1.mmc_removed_event, &el2, 2); - while (TRUE)// chThdSleepMilliseconds(50); - chEvtDispatch(evhndl, chEvtWaitOne(ALL_EVENTS)); - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/mcuconf.h deleted file mode 100644 index 884af1d..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/mcuconf.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * LPC214x drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * MAC driver system settings. - */ - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ -#define USE_LPC214x_UART0 TRUE -#define USE_LPC214x_UART1 TRUE -#define LPC214x_UART_FIFO_PRELOAD 16 -#define LPC214x_UART0_PRIORITY 1 -#define LPC214x_UART1_PRIORITY 2 - -/* - * SPI driver system settings. - */ -#define USE_LPC214x_SPI1 TRUE diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/readme.txt b/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/readme.txt deleted file mode 100644 index 68ade5c..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-FATFS-GCC/readme.txt +++ /dev/null @@ -1,19 +0,0 @@ -***************************************************************************** -** ChibiOS/RT + FatFS demo for LPC214x. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex LPC-P2148 board. The port on other boards or other -members of the LPC2000 family should be an easy task. - -** The Demo ** - -The demo blinks the leds on the board by using multiple threads. -By pressing button 1 a directory scan on the MMC slot is performed, by -pressing the button 2 the test suite is activated on serial port 1. - -** Build Procedure ** - -The demo was built using the YAGARTO toolchain but any toolchain based on GCC -and GNU userspace programs will work. diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/Makefile b/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/Makefile deleted file mode 100644 index b2a81db..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/Makefile +++ /dev/null @@ -1,184 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu -falign-functions=16 -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -fno-exceptions -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = no -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT = ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_LPC_P2148/board.mk -include $(CHIBIOS)/os/hal/platforms/LPC214x/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARM7/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(CHIBIOS)/os/various/evtimer.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = $(CHIBIOS)/os/various/ch.cpp main.cpp - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARM7/LPC214x/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various \ - $(CHIBIOS)/os/ports/GCC/ARM7/LPC214x - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = arm7tdmi - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/ch.ld b/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/ch.ld deleted file mode 100644 index 9529a23..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/ch.ld +++ /dev/null @@ -1,113 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * LPC2148 memory setup. - */ -__und_stack_size__ = 0x0004; -__abt_stack_size__ = 0x0004; -__fiq_stack_size__ = 0x0010; -__irq_stack_size__ = 0x0080; -__svc_stack_size__ = 0x0004; -__sys_stack_size__ = 0x0400; -__stacks_total_size__ = __und_stack_size__ + __abt_stack_size__ + __fiq_stack_size__ + __irq_stack_size__ + __svc_stack_size__ + __sys_stack_size__; - -MEMORY -{ - flash : org = 0x00000000, len = 512k - 12k - ram : org = 0x40000200, len = 32k - 0x200 - 288 -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; -__dma_start__ = 0x7FD00000; -__dma_size__ = 8k; -__dma_end__ = 0x7FD00000 + __dma_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - *(.ctors) - *(.dtors) - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/chconf.h b/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/halconf.h b/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/halconf.h deleted file mode 100644 index 40b1798..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/main.cpp b/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/main.cpp deleted file mode 100644 index 251e88e..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/main.cpp +++ /dev/null @@ -1,189 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.hpp" -#include "hal.h" -#include "test.h" -#include "evtimer.h" - -#define BOTH_BUTTONS (PAL_PORT_BIT(PA_BUTTON1) | PAL_PORT_BIT(PA_BUTTON2)) - -using namespace chibios_rt; - -/* - * LED blink sequences. - * NOTE: Sequences must always be terminated by a GOTO instruction. - * NOTE: The sequencer language could be easily improved but this is outside - * the scope of this demo. - */ -#define SLEEP 0 -#define GOTO 1 -#define STOP 2 -#define BITCLEAR 3 -#define BITSET 4 - -typedef struct { - uint8_t action; - uint32_t value; -} seqop_t; - -// Flashing sequence for LED1. -static const seqop_t LED1_sequence[] = -{ - {BITCLEAR, PAL_PORT_BIT(PA_LED1)}, - {SLEEP, 200}, - {BITSET, PAL_PORT_BIT(PA_LED1)}, - {SLEEP, 1800}, - {GOTO, 0} -}; - -// Flashing sequence for LED2. -static const seqop_t LED2_sequence[] = -{ - {SLEEP, 1000}, - {BITCLEAR, PAL_PORT_BIT(PA_LED2)}, - {SLEEP, 200}, - {BITSET, PAL_PORT_BIT(PA_LED2)}, - {SLEEP, 1800}, - {GOTO, 1} -}; - -// Flashing sequence for LED3. -static const seqop_t LED3_sequence[] = -{ - {BITCLEAR, PAL_PORT_BIT(PA_LEDUSB)}, - {SLEEP, 200}, - {BITSET, PAL_PORT_BIT(PA_LEDUSB)}, - {SLEEP, 300}, - {GOTO, 0} -}; - -/* - * Sequencer thread class. It can drive LEDs or other output pins. - * Any sequencer is just an instance of this class, all the details are - * totally encapsulated and hidden to the application level. - */ -class SequencerThread : public EnhancedThread<128> { -private: - const seqop_t *base, *curr; // Thread local variables. - -protected: - virtual msg_t Main(void) { - while (true) { - switch(curr->action) { - case SLEEP: - Sleep(curr->value); - break; - case GOTO: - curr = &base[curr->value]; - continue; - case STOP: - return 0; - case BITCLEAR: - palClearPort(IOPORT1, curr->value); - break; - case BITSET: - palSetPort(IOPORT1, curr->value); - break; - } - curr++; - } - } - -public: - SequencerThread(const seqop_t *sequence) : EnhancedThread<128>("sequencer") { - - base = curr = sequence; - } -}; - -/* - * Tester thread class. This thread executes the test suite. - */ -class TesterThread : public EnhancedThread<128> { - -protected: - virtual msg_t Main(void) { - - return TestThread(&SD1); - } - -public: - TesterThread(void) : EnhancedThread<128>("tester") { - } -}; - -/* - * Executed as an event handler at 500mS intervals. - */ -static void TimerHandler(eventid_t id) { - - (void)id; - if (!(palReadPort(IOPORT1) & BOTH_BUTTONS)) { // Both buttons - TesterThread tester; - tester.Wait(); - }; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - static const evhandler_t evhndl[] = { - TimerHandler - }; - static EvTimer evt; - struct EventListener el0; - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - evtInit(&evt, 500); // Initializes an event timer. - evtStart(&evt); // Starts the event timer. - chEvtRegister(&evt.et_es, &el0, 0); // Registers a listener on the source. - - /* - * Starts several instances of the SequencerThread class, each one operating - * on a different LED. - */ - SequencerThread blinker1(LED1_sequence); - SequencerThread blinker2(LED2_sequence); - SequencerThread blinker3(LED3_sequence); - - /* - * Serves timer events. - */ - while (true) - Event::Dispatch(evhndl, Event::WaitOne(ALL_EVENTS)); - - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/mcuconf.h b/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/mcuconf.h deleted file mode 100644 index 884af1d..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/mcuconf.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * LPC214x drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * MAC driver system settings. - */ - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ -#define USE_LPC214x_UART0 TRUE -#define USE_LPC214x_UART1 TRUE -#define LPC214x_UART_FIFO_PRELOAD 16 -#define LPC214x_UART0_PRIORITY 1 -#define LPC214x_UART1_PRIORITY 2 - -/* - * SPI driver system settings. - */ -#define USE_LPC214x_SPI1 TRUE diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/readme.txt b/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/readme.txt deleted file mode 100644 index 0b53385..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-G++/readme.txt +++ /dev/null @@ -1,25 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for ARM7TDMI LPC214X using G++. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex LPC-P2148 board. The port on other boards or other -members of the LPC2000 family should be an easy task. - -** The Demo ** - -The demo blinks the leds on the board by using multiple threads implemented -as C++ classes. Pressing both buttons activates the test procedure on the -serial port 1. - -NOTE: the C++ GNU compiler can produce code sizes comparable to C if you - don't use RTTI and standard libraries, those are disabled by default - in the makefile. You can enable them if you have a lot of program space - available. It is possible to use a lot of C++ features without using - runtimes, just see the demo. - -** Build Procedure ** - -The demo was built using the YAGARTO toolchain but any toolchain based on GCC -and GNU userspace programs will work. diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/Makefile b/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/Makefile deleted file mode 100644 index caa6149..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/Makefile +++ /dev/null @@ -1,184 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu -falign-functions=16 -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = no -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT = ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_LPC_P2148/board.mk -include $(CHIBIOS)/os/hal/platforms/LPC214x/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARM7/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARM7/LPC214x/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various \ - $(CHIBIOS)/os/ports/GCC/ARM7/LPC214x - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = arm7tdmi - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/ch.ld deleted file mode 100644 index 9529a23..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/ch.ld +++ /dev/null @@ -1,113 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * LPC2148 memory setup. - */ -__und_stack_size__ = 0x0004; -__abt_stack_size__ = 0x0004; -__fiq_stack_size__ = 0x0010; -__irq_stack_size__ = 0x0080; -__svc_stack_size__ = 0x0004; -__sys_stack_size__ = 0x0400; -__stacks_total_size__ = __und_stack_size__ + __abt_stack_size__ + __fiq_stack_size__ + __irq_stack_size__ + __svc_stack_size__ + __sys_stack_size__; - -MEMORY -{ - flash : org = 0x00000000, len = 512k - 12k - ram : org = 0x40000200, len = 32k - 0x200 - 288 -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; -__dma_start__ = 0x7FD00000; -__dma_size__ = 8k; -__dma_end__ = 0x7FD00000 + __dma_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - *(.ctors) - *(.dtors) - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/halconf.h deleted file mode 100644 index 40b1798..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/main.c b/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/main.c deleted file mode 100644 index 0ac030b..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/main.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -#define BOTH_BUTTONS (PAL_PORT_BIT(PA_BUTTON1) | PAL_PORT_BIT(PA_BUTTON2)) - -/* - * Red LEDs blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 128); -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palClearPort(IOPORT1, PAL_PORT_BIT(PA_LED2)); - chThdSleepMilliseconds(200); - palSetPort(IOPORT1, PAL_PORT_BIT(PA_LED1) | PAL_PORT_BIT(PA_LED2)); - chThdSleepMilliseconds(800); - palClearPort(IOPORT1, PAL_PORT_BIT(PA_LED1)); - chThdSleepMilliseconds(200); - palSetPort(IOPORT1, PAL_PORT_BIT(PA_LED1) | PAL_PORT_BIT(PA_LED2)); - chThdSleepMilliseconds(800); - } - return 0; -} - -/* - * Yellow LED blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread2, 128); -static msg_t Thread2(void *arg) { - - (void)arg; - while (TRUE) { - palClearPad(IOPORT1, PA_LEDUSB); - chThdSleepMilliseconds(200); - palSetPad(IOPORT1, PA_LEDUSB); - chThdSleepMilliseconds(300); - } - return 0; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * If a button is pressed during the reset then the blinking leds threads - * are not started in order to make accurate benchmarks. - */ - if ((palReadPort(IOPORT1) & BOTH_BUTTONS) == BOTH_BUTTONS) { - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO, Thread2, NULL); - } - - /* - * Normal main() thread activity, in this demo it does nothing except - * sleeping in a loop and check the buttons state. - */ - while (TRUE) { - if (!palReadPad(IOPORT1, PA_BUTTON1)) - sdWrite(&SD1, (uint8_t *)"Hello World!\r\n", 14); - if (!palReadPad(IOPORT1, PA_BUTTON2)) - TestThread(&SD1); - chThdSleepMilliseconds(500); - } - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/mcuconf.h deleted file mode 100644 index 884af1d..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/mcuconf.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * LPC214x drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * MAC driver system settings. - */ - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ -#define USE_LPC214x_UART0 TRUE -#define USE_LPC214x_UART1 TRUE -#define LPC214x_UART_FIFO_PRELOAD 16 -#define LPC214x_UART0_PRIORITY 1 -#define LPC214x_UART1_PRIORITY 2 - -/* - * SPI driver system settings. - */ -#define USE_LPC214x_SPI1 TRUE diff --git a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/readme.txt b/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/readme.txt deleted file mode 100644 index e800b5a..0000000 --- a/ChibiOS_2.0.8/demos/ARM7-LPC214x-GCC/readme.txt +++ /dev/null @@ -1,22 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for ARM7TDMI LPC214X. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex LPC-P2148 board. The port on other boards or other -members of the LPC2000 family should be an easy task. - -** The Demo ** - -The demo blinks the leds on the board by using multiple threads. By pressing -the buttons on the board it is possible to send a message over the serial -port or activate the test procedure. -See main.c for details. Buzzer.c contains an interesting device driver -example that uses a physical timer for the waveform generation and a virtual -timer for the sound duration. - -** Build Procedure ** - -The demo was built using the YAGARTO toolchain but any toolchain based on GCC -and GNU userspace programs will work. diff --git a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/Makefile b/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/Makefile deleted file mode 100644 index bec884f..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/Makefile +++ /dev/null @@ -1,192 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = yes -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Architecture or project specific options -# - -# -# Architecture or project specific options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/EA_LPCXPRESSO_BB_1114/board.mk -include $(CHIBIOS)/os/hal/platforms/LPC11xx/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARMCMx/LPC11xx/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(CHIBIOS)/os/various/evtimer.c \ - $(CHIBIOS)/os/various/syscalls.c \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARMCMx/LPC11xx/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = cortex-m0 - -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DLPC1114 -D__NEWLIB__ - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/ch.ld deleted file mode 100644 index 30303cc..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/ch.ld +++ /dev/null @@ -1,120 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * LPC1114 memory setup. - */ -__main_stack_size__ = 0x0100; -__process_stack_size__ = 0x0100; -__stacks_total_size__ = __main_stack_size__ + __process_stack_size__; - -MEMORY -{ - flash : org = 0x00000000, len = 32k - ram : org = 0x10000000, len = 8k -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - } > flash - - .ctors : - { - PROVIDE(_ctors_start_ = .); - KEEP(*(SORT(.ctors.*))) - KEEP(*(.ctors)) - PROVIDE(_ctors_end_ = .); - } > flash - - .dtors : - { - PROVIDE(_dtors_start_ = .); - KEEP(*(SORT(.dtors.*))) - KEEP(*(.dtors)) - PROVIDE(_dtors_end_ = .); - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/halconf.h deleted file mode 100644 index 40b1798..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/main.c b/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/main.c deleted file mode 100644 index aceab8f..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/main.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -/* - * Red LED blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 128); -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palClearPad(GPIO0, GPIO0_LED2); - chThdSleepMilliseconds(500); - palSetPad(GPIO0, GPIO0_LED2); - chThdSleepMilliseconds(500); - } - return 0; -} - -/* - * RGB LED blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread2, 128); -static msg_t Thread2(void *arg) { - - (void)arg; - while (TRUE) { - palClearPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3B) | - PAL_PORT_BIT(GPIO1_LED3R) | - PAL_PORT_BIT(GPIO1_LED3G)); - chThdSleepMilliseconds(250); - palClearPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3B) | - PAL_PORT_BIT(GPIO1_LED3R) | - PAL_PORT_BIT(GPIO1_LED3G)); - palSetPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3B)); - chThdSleepMilliseconds(250); - palClearPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3B) | - PAL_PORT_BIT(GPIO1_LED3R) | - PAL_PORT_BIT(GPIO1_LED3G)); - palSetPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3R)); - chThdSleepMilliseconds(250); - palClearPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3B) | - PAL_PORT_BIT(GPIO1_LED3R) | - PAL_PORT_BIT(GPIO1_LED3G)); - palSetPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3G)); - chThdSleepMilliseconds(250); - } - return 0; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 1 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * Creates the blinker threads. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO, Thread2, NULL); - - /* - * Normal main() thread activity, in this demo it does nothing except - * sleeping in a loop and check the button state. - */ - while (TRUE) { - if (!palReadPad(GPIO0, GPIO0_SW3)) - TestThread(&SD1); - chThdSleepMilliseconds(500); - } - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/mcuconf.h deleted file mode 100644 index 477bd48..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM0-LPC1114-GCC/mcuconf.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * LPC1114 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - * - * IRQ priorities: - * 3...0 Lowest...highest. - */ - -/* - * HAL driver system settings. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ - -/* - * SPI driver system settings. - */ diff --git a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/Makefile b/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/Makefile deleted file mode 100644 index 604b821..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/Makefile +++ /dev/null @@ -1,193 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = yes -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Architecture or project specific options -# - -# -# Architecture or project specific options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/EA_LPCXPRESSO_BB_1343/board.mk -include $(CHIBIOS)/os/hal/platforms/LPC13xx/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARMCMx/LPC13xx/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(CHIBIOS)/os/various/evtimer.c \ - $(CHIBIOS)/os/various/syscalls.c \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARMCMx/LPC13xx/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = cortex-m3 - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DLPC1348 -D__NEWLIB__ - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/ch.ld deleted file mode 100644 index ad0ec6b..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/ch.ld +++ /dev/null @@ -1,120 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * LPC1343 memory setup. - */ -__main_stack_size__ = 0x0100; -__process_stack_size__ = 0x0100; -__stacks_total_size__ = __main_stack_size__ + __process_stack_size__; - -MEMORY -{ - flash : org = 0x00000000, len = 32k - ram : org = 0x10000000, len = 8k -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - } > flash - - .ctors : - { - PROVIDE(_ctors_start_ = .); - KEEP(*(SORT(.ctors.*))) - KEEP(*(.ctors)) - PROVIDE(_ctors_end_ = .); - } > flash - - .dtors : - { - PROVIDE(_dtors_start_ = .); - KEEP(*(SORT(.dtors.*))) - KEEP(*(.dtors)) - PROVIDE(_dtors_end_ = .); - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/halconf.h deleted file mode 100644 index 40b1798..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/main.c b/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/main.c deleted file mode 100644 index aceab8f..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/main.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -/* - * Red LED blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 128); -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palClearPad(GPIO0, GPIO0_LED2); - chThdSleepMilliseconds(500); - palSetPad(GPIO0, GPIO0_LED2); - chThdSleepMilliseconds(500); - } - return 0; -} - -/* - * RGB LED blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread2, 128); -static msg_t Thread2(void *arg) { - - (void)arg; - while (TRUE) { - palClearPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3B) | - PAL_PORT_BIT(GPIO1_LED3R) | - PAL_PORT_BIT(GPIO1_LED3G)); - chThdSleepMilliseconds(250); - palClearPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3B) | - PAL_PORT_BIT(GPIO1_LED3R) | - PAL_PORT_BIT(GPIO1_LED3G)); - palSetPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3B)); - chThdSleepMilliseconds(250); - palClearPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3B) | - PAL_PORT_BIT(GPIO1_LED3R) | - PAL_PORT_BIT(GPIO1_LED3G)); - palSetPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3R)); - chThdSleepMilliseconds(250); - palClearPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3B) | - PAL_PORT_BIT(GPIO1_LED3R) | - PAL_PORT_BIT(GPIO1_LED3G)); - palSetPort(GPIO1, PAL_PORT_BIT(GPIO1_LED3G)); - chThdSleepMilliseconds(250); - } - return 0; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 1 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * Creates the blinker threads. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO, Thread2, NULL); - - /* - * Normal main() thread activity, in this demo it does nothing except - * sleeping in a loop and check the button state. - */ - while (TRUE) { - if (!palReadPad(GPIO0, GPIO0_SW3)) - TestThread(&SD1); - chThdSleepMilliseconds(500); - } - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/mcuconf.h deleted file mode 100644 index 386835a..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-LPC1343-GCC/mcuconf.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * LPC13xx drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - * - * IRQ priorities: - * 7...0 Lowest...highest. - */ - -/* - * HAL driver system settings. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ - -/* - * SPI driver system settings. - */ diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/Makefile b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/Makefile deleted file mode 100644 index bc7c278..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/Makefile +++ /dev/null @@ -1,208 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16 -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = yes -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Architecture or project specific options -# - -# Enable this if you really want to use the STM FWLib. -ifeq ($(USE_FWLIB),) - USE_FWLIB = no -endif - -# -# Architecture or project specific options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_STM32_P103/board.mk -include $(CHIBIOS)/os/hal/platforms/STM32/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk -include $(CHIBIOS)/ext/fatfs/fatfs.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(FATFSSRC) \ - $(CHIBIOS)/os/various/shell.c \ - $(CHIBIOS)/os/various/syscalls.c \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(FATFSINC) \ - $(CHIBIOS)/os/various - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = cortex-m3 - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DSTDOUT_SD=SD2 -DSTDIN_SD=SD2 - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -ifeq ($(USE_FWLIB),yes) - include $(CHIBIOS)/ext/stm32lib/stm32lib.mk - CSRC += $(STM32SRC) - INCDIR += $(STM32INC) - USE_OPT += -DUSE_STDPERIPH_DRIVER -endif - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/ch.ld deleted file mode 100644 index d64ee32..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/ch.ld +++ /dev/null @@ -1,120 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * ST32F103 memory setup. - */ -__main_stack_size__ = 0x0400; -__process_stack_size__ = 0x0400; -__stacks_total_size__ = __main_stack_size__ + __process_stack_size__; - -MEMORY -{ - flash : org = 0x08000000, len = 128k - ram : org = 0x20000000, len = 20k -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - } > flash - - .ctors : - { - PROVIDE(_ctors_start_ = .); - KEEP(*(SORT(.ctors.*))) - KEEP(*(.ctors)) - PROVIDE(_ctors_end_ = .); - } > flash - - .dtors : - { - PROVIDE(_dtors_start_ = .); - KEEP(*(SORT(.dtors.*))) - KEEP(*(.dtors)) - PROVIDE(_dtors_end_ = .); - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/halconf.h deleted file mode 100644 index 32a85fc..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI TRUE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI TRUE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/main.c b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/main.c deleted file mode 100644 index cfee329..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/main.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include -#include - -#include "ch.h" -#include "hal.h" -#include "test.h" -#include "shell.h" -#include "evtimer.h" - -#include "ff.h" - -/*===========================================================================*/ -/* MMC/SPI related. */ -/*===========================================================================*/ - -/** - * @brief FS object. - */ -FATFS MMC_FS; - -/** - * MMC driver instance. - */ -MMCDriver MMCD1; - -/* FS mounted and ready.*/ -static bool_t fs_ready = FALSE; - -/* Maximum speed SPI configuration (18MHz, CPHA=0, CPOL=0, MSb first).*/ -static SPIConfig hs_spicfg = {IOPORT2, GPIOB_SPI2NSS, 0}; - -/* Low speed SPI configuration (281.250KHz, CPHA=0, CPOL=0, MSb first).*/ -static SPIConfig ls_spicfg = {IOPORT2, GPIOB_SPI2NSS, SPI_CR1_BR_2 | SPI_CR1_BR_1}; - -/* MMC configuration (empty).*/ -static const MMCConfig mmc_cfg = {}; - -/* Card insertion verification.*/ -static bool_t mmc_is_inserted(void) {return palReadPad(IOPORT3, GPIOC_MMCCP);} - -/* Card protection verification.*/ -static bool_t mmc_is_protected(void) {return !palReadPad(IOPORT3, GPIOC_MMCWP);} - -/* Generic large buffer.*/ -uint8_t fbuff[1024]; - -static FRESULT scan_files(char *path) -{ - FRESULT res; - FILINFO fno; - DIR dir; - int i; - char *fn; - - res = f_opendir(&dir, path); - if (res == FR_OK) { - i = strlen(path); - for (;;) { - res = f_readdir(&dir, &fno); - if (res != FR_OK || fno.fname[0] == 0) - break; - if (fno.fname[0] == '.') - continue; - fn = fno.fname; - if (fno.fattrib & AM_DIR) { - siprintf(&path[i], "/%s", fn); - res = scan_files(path); - if (res != FR_OK) - break; - path[i] = 0; - } - else { - iprintf("%s/%s\r\n", path, fn); - } - } - } - return res; -} - -/*===========================================================================*/ -/* Command line related. */ -/*===========================================================================*/ - -#define SHELL_WA_SIZE THD_WA_SIZE(1024) -#define TEST_WA_SIZE THD_WA_SIZE(256) - -static void cmd_mem(BaseChannel *chp, int argc, char *argv[]) { - size_t n, size; - char buf[52]; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: mem"); - return; - } - n = chHeapStatus(NULL, &size); - siprintf(buf, "core free memory : %u bytes", chCoreStatus()); - shellPrintLine(chp, buf); - siprintf(buf, "heap fragments : %u", n); - shellPrintLine(chp, buf); - siprintf(buf, "heap free total : %u bytes", size); - shellPrintLine(chp, buf); -} - -static void cmd_threads(BaseChannel *chp, int argc, char *argv[]) { - static const char *states[] = { - "READY", - "CURRENT", - "SUSPENDED", - "WTSEM", - "WTMTX", - "WTCOND", - "SLEEPING", - "WTEXIT", - "WTOREVT", - "WTANDEVT", - "SNDMSG", - "WTMSG", - "FINAL" - }; - Thread *tp; - char buf[60]; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: threads"); - return; - } - shellPrintLine(chp, " addr stack prio refs state time"); - tp = chRegFirstThread(); - do { - siprintf(buf, "%8lx %8lx %4u %4i %9s %u", - (uint32_t)tp, (uint32_t)tp->p_ctx.r13, - (unsigned int)tp->p_prio, tp->p_refs - 1, - states[tp->p_state], (unsigned int)tp->p_time); - shellPrintLine(chp, buf); - tp = chRegNextThread(tp); - } while (tp != NULL); -} - -static void cmd_test(BaseChannel *chp, int argc, char *argv[]) { - Thread *tp; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: test"); - return; - } - tp = chThdCreateFromHeap(NULL, TEST_WA_SIZE, chThdGetPriority(), - TestThread, chp); - if (tp == NULL) { - shellPrintLine(chp, "out of memory"); - return; - } - chThdWait(tp); -} - -static void cmd_tree(BaseChannel *chp, int argc, char *argv[]) { - FRESULT err; - uint32_t clusters; - FATFS *fsp; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: tree"); - return; - } - if (!fs_ready) { - shellPrintLine(chp, "File System not mounted"); - return; - } - err = f_getfree("/", &clusters, &fsp); - if (err != FR_OK) { - shellPrintLine(chp, "FS: f_getfree() failed"); - return; - } - siprintf((void *)fbuff, - "FS: %lu free clusters, %lu sectors per cluster, %lu bytes free", - clusters, (uint32_t)MMC_FS.csize, - clusters * (uint32_t)MMC_FS.csize * (uint32_t)MMC_SECTOR_SIZE); - shellPrintLine(chp, (void *)fbuff); - fbuff[0] = 0; - scan_files((char *)fbuff); -} - -static const ShellCommand commands[] = { - {"mem", cmd_mem}, - {"threads", cmd_threads}, - {"test", cmd_test}, - {"tree", cmd_tree}, - {NULL, NULL} -}; - -static const ShellConfig shell_cfg1 = { - (BaseChannel *)&SD2, - commands -}; - -/* - * Red LEDs blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 128); -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palTogglePad(IOPORT3, GPIOC_LED); - if (fs_ready) - chThdSleepMilliseconds(200); - else - chThdSleepMilliseconds(500); - } - return 0; -} - -/* - * MMC card insertion event. - */ -static void InsertHandler(eventid_t id) { - FRESULT err; - - (void)id; - /* - * On insertion MMC initialization and FS mount. - */ - if (mmcConnect(&MMCD1)) { - return; - } - err = f_mount(0, &MMC_FS); - if (err != FR_OK) { - mmcDisconnect(&MMCD1); - return; - } - fs_ready = TRUE; -} - -/* - * MMC card removal event. - */ -static void RemoveHandler(eventid_t id) { - - (void)id; - fs_ready = FALSE; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - static const evhandler_t evhndl[] = { - InsertHandler, - RemoveHandler - }; - Thread *shelltp = NULL; - struct EventListener el0, el1; - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD2, NULL); - - /* - * Shell manager initialization. - */ - shellInit(); - - /* - * Initializes the MMC driver to work with SPI2. - */ - palSetPadMode(IOPORT2, GPIOB_SPI2NSS, PAL_MODE_OUTPUT_PUSHPULL); - palSetPad(IOPORT2, GPIOB_SPI2NSS); - mmcObjectInit(&MMCD1, &SPID2, - &ls_spicfg, &hs_spicfg, - mmc_is_protected, mmc_is_inserted); - mmcStart(&MMCD1, &mmc_cfg); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Normal main() thread activity, in this demo it does nothing except - * sleeping in a loop and listen for events. - */ - chEvtRegister(&MMCD1.mmc_inserted_event, &el0, 0); - chEvtRegister(&MMCD1.mmc_removed_event, &el1, 1); - while (TRUE) { - if (!shelltp) - shelltp = shellCreate(&shell_cfg1, SHELL_WA_SIZE, NORMALPRIO); - else if (chThdTerminated(shelltp)) { - chThdRelease(shelltp); /* Recovers memory of the previous shell. */ - shelltp = NULL; /* Triggers spawning of a new shell. */ - } - chEvtDispatch(evhndl, chEvtWaitOne(ALL_EVENTS)); - } - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/mcuconf.h deleted file mode 100644 index c862cf9..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/mcuconf.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * STM32 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - * - * IRQ priorities: - * 15...0 Lowest...Highest. - * - * DMA priorities: - * 0...3 Lowest...Highest. - */ - -/* - * HAL driver system settings. - */ -#define STM32_SW STM32_SW_PLL -#define STM32_PLLSRC STM32_PLLSRC_HSE -#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 -#define STM32_PLLMUL_VALUE 9 -#define STM32_HPRE STM32_HPRE_DIV1 -#define STM32_PPRE1 STM32_PPRE1_DIV2 -#define STM32_PPRE2 STM32_PPRE2_DIV2 -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_MCO STM32_MCO_NOCLOCK - -/* - * ADC driver system settings. - */ -#define USE_STM32_ADC1 TRUE -#define STM32_ADC1_DMA_PRIORITY 3 -#define STM32_ADC1_IRQ_PRIORITY 5 -#define STM32_ADC1_DMA_ERROR_HOOK() chSysHalt() - -/* - * CAN driver system settings. - */ -#define USE_STM32_CAN1 TRUE -#define STM32_CAN1_IRQ_PRIORITY 11 - -/* - * PWM driver system settings. - */ -#define USE_STM32_PWM1 TRUE -#define USE_STM32_PWM2 FALSE -#define USE_STM32_PWM3 FALSE -#define USE_STM32_PWM4 FALSE -#define STM32_PWM1_IRQ_PRIORITY 7 -#define STM32_PWM2_IRQ_PRIORITY 7 -#define STM32_PWM3_IRQ_PRIORITY 7 -#define STM32_PWM4_IRQ_PRIORITY 7 - -/* - * SERIAL driver system settings. - */ -#define USE_STM32_USART1 FALSE -#define USE_STM32_USART2 TRUE -#define USE_STM32_USART3 FALSE -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#define USE_STM32_UART4 FALSE -#define USE_STM32_UART5 FALSE -#endif -#define STM32_USART1_PRIORITY 12 -#define STM32_USART2_PRIORITY 12 -#define STM32_USART3_PRIORITY 12 -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#define STM32_UART4_PRIORITY 12 -#define STM32_UART5_PRIORITY 12 -#endif - -/* - * SPI driver system settings. - */ -#define USE_STM32_SPI1 TRUE -#define USE_STM32_SPI2 TRUE -#define STM32_SPI1_DMA_PRIORITY 2 -#define STM32_SPI2_DMA_PRIORITY 2 -#define STM32_SPI1_IRQ_PRIORITY 10 -#define STM32_SPI2_IRQ_PRIORITY 10 -#define STM32_SPI1_DMA_ERROR_HOOK() chSysHalt() diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/readme.txt b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/readme.txt deleted file mode 100644 index 1603a6b..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-FATFS-GCC/readme.txt +++ /dev/null @@ -1,33 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for ARM-Cortex-M3 STM32F103. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex STM32-P103 board. - -** The Demo ** - -This demo shows how to integrate the FatFs file system and use the SPI and MMC -drivers. -The demo flashes the board LED using a thread and monitors the MMC slot for -a card insertion. When a card is inserted then the file system is mounted -and the LED flashes faster. -A command line shell is spawned on SD2, all the interaction with the demo is -performed using the command shell, type "help" for a list of the available -commands. - -** Build Procedure ** - -The demo has been tested by using the free Codesourcery GCC-based toolchain, -YAGARTO and an experimental WinARM build including GCC 4.3.0. -Just modify the TRGT line in the makefile in order to use different GCC ports. - -** Notes ** - -Some files used by the demo are not part of ChibiOS/RT but are copyright of -ST Microelectronics and are licensed under a different license. -Also note that not all the files present in the ST library are distributed -with ChibiOS/RT, you can find the whole library on the ST web site: - - http://www.st.com diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/Makefile b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/Makefile deleted file mode 100644 index d460644..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/Makefile +++ /dev/null @@ -1,205 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16 -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = yes -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Architecture or project specific options -# - -# Enable this if you really want to use the STM FWLib. -ifeq ($(USE_FWLIB),) - USE_FWLIB = no -endif - -# -# Architecture or project specific options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_STM32_P103/board.mk -include $(CHIBIOS)/os/hal/platforms/STM32/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(CHIBIOS)/os/various/evtimer.c \ - $(CHIBIOS)/os/various/syscalls.c \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = cortex-m3 - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DCORTEX_USE_BASEPRI=TRUE - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -ifeq ($(USE_FWLIB),yes) - include $(CHIBIOS)/ext/stm32lib/stm32lib.mk - CSRC += $(STM32SRC) - INCDIR += $(STM32INC) - USE_OPT += -DUSE_STDPERIPH_DRIVER -endif - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ch.ld deleted file mode 100644 index d64ee32..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ch.ld +++ /dev/null @@ -1,120 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * ST32F103 memory setup. - */ -__main_stack_size__ = 0x0400; -__process_stack_size__ = 0x0400; -__stacks_total_size__ = __main_stack_size__ + __process_stack_size__; - -MEMORY -{ - flash : org = 0x08000000, len = 128k - ram : org = 0x20000000, len = 20k -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - } > flash - - .ctors : - { - PROVIDE(_ctors_start_ = .); - KEEP(*(SORT(.ctors.*))) - KEEP(*(.ctors)) - PROVIDE(_ctors_end_ = .); - } > flash - - .dtors : - { - PROVIDE(_dtors_start_ = .); - KEEP(*(SORT(.dtors.*))) - KEEP(*(.dtors)) - PROVIDE(_dtors_end_ = .); - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/halconf.h deleted file mode 100644 index 40b1798..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/main.c b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/main.c deleted file mode 100644 index 2473b8a..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/main.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -/* - * Red LEDs blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 128); -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palClearPad(IOPORT3, GPIOC_LED); - chThdSleepMilliseconds(500); - palSetPad(IOPORT3, GPIOC_LED); - chThdSleepMilliseconds(500); - } - return 0; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD2, NULL); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Normal main() thread activity, in this demo it does nothing except - * sleeping in a loop and check the button state. - */ - while (TRUE) { - if (palReadPad(IOPORT1, GPIOA_BUTTON)) - TestThread(&SD2); - chThdSleepMilliseconds(500); - } - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/mcuconf.h deleted file mode 100644 index c862cf9..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/mcuconf.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * STM32 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - * - * IRQ priorities: - * 15...0 Lowest...Highest. - * - * DMA priorities: - * 0...3 Lowest...Highest. - */ - -/* - * HAL driver system settings. - */ -#define STM32_SW STM32_SW_PLL -#define STM32_PLLSRC STM32_PLLSRC_HSE -#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 -#define STM32_PLLMUL_VALUE 9 -#define STM32_HPRE STM32_HPRE_DIV1 -#define STM32_PPRE1 STM32_PPRE1_DIV2 -#define STM32_PPRE2 STM32_PPRE2_DIV2 -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_MCO STM32_MCO_NOCLOCK - -/* - * ADC driver system settings. - */ -#define USE_STM32_ADC1 TRUE -#define STM32_ADC1_DMA_PRIORITY 3 -#define STM32_ADC1_IRQ_PRIORITY 5 -#define STM32_ADC1_DMA_ERROR_HOOK() chSysHalt() - -/* - * CAN driver system settings. - */ -#define USE_STM32_CAN1 TRUE -#define STM32_CAN1_IRQ_PRIORITY 11 - -/* - * PWM driver system settings. - */ -#define USE_STM32_PWM1 TRUE -#define USE_STM32_PWM2 FALSE -#define USE_STM32_PWM3 FALSE -#define USE_STM32_PWM4 FALSE -#define STM32_PWM1_IRQ_PRIORITY 7 -#define STM32_PWM2_IRQ_PRIORITY 7 -#define STM32_PWM3_IRQ_PRIORITY 7 -#define STM32_PWM4_IRQ_PRIORITY 7 - -/* - * SERIAL driver system settings. - */ -#define USE_STM32_USART1 FALSE -#define USE_STM32_USART2 TRUE -#define USE_STM32_USART3 FALSE -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#define USE_STM32_UART4 FALSE -#define USE_STM32_UART5 FALSE -#endif -#define STM32_USART1_PRIORITY 12 -#define STM32_USART2_PRIORITY 12 -#define STM32_USART3_PRIORITY 12 -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#define STM32_UART4_PRIORITY 12 -#define STM32_UART5_PRIORITY 12 -#endif - -/* - * SPI driver system settings. - */ -#define USE_STM32_SPI1 TRUE -#define USE_STM32_SPI2 TRUE -#define STM32_SPI1_DMA_PRIORITY 2 -#define STM32_SPI2_DMA_PRIORITY 2 -#define STM32_SPI1_IRQ_PRIORITY 10 -#define STM32_SPI2_IRQ_PRIORITY 10 -#define STM32_SPI1_DMA_ERROR_HOOK() chSysHalt() diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/readme.txt b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/readme.txt deleted file mode 100644 index c373926..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/readme.txt +++ /dev/null @@ -1,28 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for ARM-Cortex-M3 STM32F103. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex STM32-P103 board. - -** The Demo ** - -The demo flashes the board LED using a thread, by pressing the button located -on the board the test procedure is activated with output on the serial port -COM2 (USART2). - -** Build Procedure ** - -The demo has been tested by using the free Codesourcery GCC-based toolchain, -YAGARTO and an experimental WinARM build including GCC 4.3.0. -Just modify the TRGT line in the makefile in order to use different GCC ports. - -** Notes ** - -Some files used by the demo are not part of ChibiOS/RT but are copyright of -ST Microelectronics and are licensed under a different license. -Also note that not all the files present in the ST library are distribited -with ChibiOS/RT, you can find the whole library on the ST web site: - - http://www.st.com diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ride7/ch.rapp b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ride7/ch.rapp deleted file mode 100644 index a0ae9e6..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ride7/ch.rapp +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - -
-
- - - - - -
- - - -
- - -
-
- - -
-
- - -
- -
- -
- - - -
-
- - - -
-
- - - -
-
- - -
- -
- -
- - -
-
- - -
- -
- - - \ No newline at end of file diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ride7/ch.rprj b/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ride7/ch.rprj deleted file mode 100644 index a63dc4d..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F103-GCC/ride7/ch.rprj +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/Makefile b/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/Makefile deleted file mode 100644 index 147b8c8..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/Makefile +++ /dev/null @@ -1,205 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16 -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = yes -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Architecture or project specific options -# - -# Enable this if you really want to use the STM FWLib. -ifeq ($(USE_FWLIB),) - USE_FWLIB = no -endif - -# -# Architecture or project specific options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/ST_STM3210C_EVAL/board.mk -include $(CHIBIOS)/os/hal/platforms/STM32/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(CHIBIOS)/os/various/evtimer.c \ - $(CHIBIOS)/os/various/syscalls.c \ - main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = cortex-m3 - -#TRGT = arm-elf- -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DCORTEX_USE_BASEPRI=TRUE - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -ifeq ($(USE_FWLIB),yes) - include $(CHIBIOS)/ext/stm32lib/stm32lib.mk - CSRC += $(STM32SRC) - INCDIR += $(STM32INC) - USE_OPT += -DUSE_STDPERIPH_DRIVER -endif - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/ch.ld b/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/ch.ld deleted file mode 100644 index d5c4f5b..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/ch.ld +++ /dev/null @@ -1,120 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * ST32F107 memory setup. - */ -__main_stack_size__ = 0x0200; -__process_stack_size__ = 0x0400; -__stacks_total_size__ = __main_stack_size__ + __process_stack_size__; - -MEMORY -{ - flash : org = 0x08000000, len = 256k - ram : org = 0x20000000, len = 64k -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - } > flash - - .ctors : - { - PROVIDE(_ctors_start_ = .); - KEEP(*(SORT(.ctors.*))) - KEEP(*(.ctors)) - PROVIDE(_ctors_end_ = .); - } > flash - - .dtors : - { - PROVIDE(_dtors_start_ = .); - KEEP(*(SORT(.dtors.*))) - KEEP(*(.dtors)) - PROVIDE(_dtors_end_ = .); - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/chconf.h b/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/halconf.h b/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/halconf.h deleted file mode 100644 index 40b1798..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/main.c b/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/main.c deleted file mode 100644 index 404eb3c..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/main.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -/* - * Red LEDs blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 128); -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palClearPad(IOPORT4, 7); - chThdSleepMilliseconds(500); - palSetPad(IOPORT4, 7); - chThdSleepMilliseconds(500); - } - return 0; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD2, NULL); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Normal main() thread activity, in this demo it does nothing except - * sleeping in a loop and check the button state. - */ - while (TRUE) { - if (palReadPad(IOPORT2, 9) == 0) - TestThread(&SD2); - chThdSleepMilliseconds(500); - } - return 0; -} diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/mcuconf.h deleted file mode 100644 index 3094692..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/mcuconf.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * STM32 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - * - * IRQ priorities: - * 15...0 Lowest...Highest. - * - * DMA priorities: - * 0...3 Lowest...Highest. - */ - -/* - * HAL driver system settings. - */ -#define STM32_SW STM32_SW_PLL -#define STM32_PLLSRC STM32_PLLSRC_PREDIV1 -#define STM32_PREDIV1SRC STM32_PREDIV1SRC_PLL2 -#define STM32_PREDIV1_VALUE 5 -#define STM32_PLLMUL_VALUE 9 -#define STM32_PREDIV2_VALUE 5 -#define STM32_PLL2MUL_VALUE 8 -#define STM32_HPRE STM32_HPRE_DIV1 -#define STM32_PPRE1 STM32_PPRE1_DIV2 -#define STM32_PPRE2 STM32_PPRE2_DIV2 -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_MCO STM32_MCO_NOCLOCK - -/* - * ADC driver system settings. - */ -#define USE_STM32_ADC1 TRUE -#define STM32_ADC1_DMA_PRIORITY 3 -#define STM32_ADC1_IRQ_PRIORITY 5 -#define STM32_ADC1_DMA_ERROR_HOOK() chSysHalt() - -/* - * CAN driver system settings. - */ -#define USE_STM32_CAN1 TRUE -#define STM32_CAN1_IRQ_PRIORITY 11 - -/* - * PWM driver system settings. - */ -#define USE_STM32_PWM1 TRUE -#define USE_STM32_PWM2 FALSE -#define USE_STM32_PWM3 FALSE -#define USE_STM32_PWM4 FALSE -#define STM32_PWM1_IRQ_PRIORITY 7 -#define STM32_PWM2_IRQ_PRIORITY 7 -#define STM32_PWM3_IRQ_PRIORITY 7 -#define STM32_PWM4_IRQ_PRIORITY 7 - -/* - * SERIAL driver system settings. - */ -#define USE_STM32_USART1 FALSE -#define USE_STM32_USART2 TRUE -#define USE_STM32_USART3 FALSE -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#define USE_STM32_UART4 FALSE -#define USE_STM32_UART5 FALSE -#endif -#define STM32_USART1_PRIORITY 12 -#define STM32_USART2_PRIORITY 12 -#define STM32_USART3_PRIORITY 12 -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#define STM32_UART4_PRIORITY 12 -#define STM32_UART5_PRIORITY 12 -#endif - -/* - * SPI driver system settings. - */ -#define USE_STM32_SPI1 TRUE -#define USE_STM32_SPI2 TRUE -#define STM32_SPI1_DMA_PRIORITY 2 -#define STM32_SPI2_DMA_PRIORITY 2 -#define STM32_SPI1_IRQ_PRIORITY 10 -#define STM32_SPI2_IRQ_PRIORITY 10 -#define STM32_SPI1_DMA_ERROR_HOOK() chSysHalt() diff --git a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/readme.txt b/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/readme.txt deleted file mode 100644 index 165869e..0000000 --- a/ChibiOS_2.0.8/demos/ARMCM3-STM32F107-GCC/readme.txt +++ /dev/null @@ -1,25 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for ARM-Cortex-M3 STM32F107. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an ST STM3210C-EVAL board. - -** The Demo ** - - -** Build Procedure ** - -The demo has been tested by using the free Codesourcery GCC-based toolchain, -YAGARTO and an experimental WinARM build including GCC 4.3.0. -Just modify the TRGT line in the makefile in order to use different GCC ports. - -** Notes ** - -Some files used by the demo are not part of ChibiOS/RT but are copyright of -ST Microelectronics and are licensed under a different license. -Also note that not all the files present in the ST library are distribited -with ChibiOS/RT, you can find the whole library on the ST web site: - - http://www.st.com diff --git a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/Makefile b/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/Makefile deleted file mode 100644 index 90a3798..0000000 --- a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/Makefile +++ /dev/null @@ -1,652 +0,0 @@ -# Hey Emacs, this is a -*- makefile -*- -#---------------------------------------------------------------------------- -# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. -# -# Released to the Public Domain -# -# Additional material for this makefile was written by: -# Peter Fleury -# Tim Henigan -# Colin O'Flynn -# Reiner Patommel -# Markus Pfaff -# Sander Pool -# Frederik Rouleau -# Carlos Lamas -# -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF. -# -# make extcoff = Convert ELF to AVR Extended COFF. -# -# make program = Download the hex file to the device, using avrdude. -# Please customize the avrdude settings below first! -# -# make debug = Start either simulavr or avarice as specified for debugging, -# with avr-gdb or avr-insight as the front end for debugging. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- - - -# MCU name -MCU = at90can128 - - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# Typical values are: -# F_CPU = 1000000 -# F_CPU = 1843200 -# F_CPU = 2000000 -# F_CPU = 3686400 -# F_CPU = 4000000 -# F_CPU = 7372800 -# F_CPU = 8000000 -# F_CPU = 11059200 -# F_CPU = 14745600 -# F_CPU = 16000000 -# F_CPU = 18432000 -# F_CPU = 20000000 -F_CPU = 16000000 - - -# Output format. (can be srec, ihex, binary) -FORMAT = ihex - - -# Target file name (without extension). -TARGET = ch - - -# Object files directory -# To put object files in current directory, use a dot (.), do NOT make -# this an empty or blank macro! -OBJDIR = . - - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_AVR_CAN/board.mk -include $(CHIBIOS)/os/hal/platforms/AVR/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/AVR/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - - -# List C source files here. (C dependencies are automatically generated.) -SRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(CHIBIOS)/os/various/evtimer.c \ - main.c - - -# List C++ source files here. (C dependencies are automatically generated.) -CPPSRC = - - -# List Assembler source files here. -# Make them always end in a capital .S. Files ending in a lowercase .s -# will not be considered source files but generated files (assembler -# output from the compiler), and will be deleted upon "make clean"! -# Even though the DOS/Win* filesystem matches both .s and .S the same, -# it will preserve the spelling of the filenames, and gcc itself does -# care about how the name is spelled on its command-line. -ASRC = - - -# Optimization level, can be [0, 1, 2, 3, s]. -# 0 = turn off optimization. s = optimize for size. -# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) -OPT = s - - -# Debugging format. -# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. -# AVR Studio 4.10 requires dwarf-2. -# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. -DEBUG = dwarf-2 - - -# List any extra directories to look for include files here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various - - -# Compiler flag to set the C Standard level. -# c89 = "ANSI" C -# gnu89 = c89 plus GCC extensions -# c99 = ISO C99 standard (not yet fully implemented) -# gnu99 = c99 plus GCC extensions -CSTANDARD = -std=gnu99 - - -# Place -D or -U options here for C sources -CDEFS = -DF_CPU=$(F_CPU)UL - - -# Place -D or -U options here for ASM sources -ADEFS = -DF_CPU=$(F_CPU) - - -# Place -D or -U options here for C++ sources -CPPDEFS = -DF_CPU=$(F_CPU)UL -#CPPDEFS += -D__STDC_LIMIT_MACROS -#CPPDEFS += -D__STDC_CONSTANT_MACROS - - - -#---------------- Compiler Options C ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CFLAGS = -g$(DEBUG) -CFLAGS += $(CDEFS) -CFLAGS += -O$(OPT) -CFLAGS += -funsigned-char -CFLAGS += -funsigned-bitfields -CFLAGS += -fpack-struct -CFLAGS += -fshort-enums -#CFLAGS += -fno-strict-aliasing -CFLAGS += -Wall -CFLAGS += -Wstrict-prototypes -#CFLAGS += -mshort-calls -#CFLAGS += -fno-unit-at-a-time -#CFLAGS += -Wundef -#CFLAGS += -Wunreachable-code -#CFLAGS += -Wsign-compare -CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) -CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -CFLAGS += $(CSTANDARD) - - -#---------------- Compiler Options C++ ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CPPFLAGS = -g$(DEBUG) -CPPFLAGS += $(CPPDEFS) -CPPFLAGS += -O$(OPT) -CPPFLAGS += -funsigned-char -CPPFLAGS += -funsigned-bitfields -CPPFLAGS += -fpack-struct -CPPFLAGS += -fshort-enums -CPPFLAGS += -fno-exceptions -CPPFLAGS += -Wall -CFLAGS += -Wundef -#CPPFLAGS += -mshort-calls -#CPPFLAGS += -fno-unit-at-a-time -#CPPFLAGS += -Wstrict-prototypes -#CPPFLAGS += -Wunreachable-code -#CPPFLAGS += -Wsign-compare -CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) -CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -#CPPFLAGS += $(CSTANDARD) - - -#---------------- Assembler Options ---------------- -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns: create listing -# -gstabs: have the assembler create line number information; note that -# for use in COFF files, additional information about filenames -# and function names needs to be present in the assembler source -# files -- see avr-libc docs [FIXME: not yet described there] -# -listing-cont-lines: Sets the maximum number of continuation lines of hex -# dump that will be displayed for a given single line of source input. -ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 - - -#---------------- Library Options ---------------- -# Minimalistic printf version -PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min - -# Floating point printf version (requires MATH_LIB = -lm below) -PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt - -# If this is left blank, then it will use the Standard printf version. -PRINTF_LIB = $(PRINTF_LIB_MIN) -#PRINTF_LIB = $(PRINTF_LIB_MIN) -#PRINTF_LIB = $(PRINTF_LIB_FLOAT) - - -# Minimalistic scanf version -SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min - -# Floating point + %[ scanf version (requires MATH_LIB = -lm below) -SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt - -# If this is left blank, then it will use the Standard scanf version. -SCANF_LIB = $(SCANF_LIB_MIN) -#SCANF_LIB = $(SCANF_LIB_MIN) -#SCANF_LIB = $(SCANF_LIB_FLOAT) - - -MATH_LIB = -lm - - -# List any extra directories to look for libraries here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRALIBDIRS = - - - -#---------------- External Memory Options ---------------- - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# used for variables (.data/.bss) and heap (malloc()). -#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# only used for heap (malloc()). -#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff - -EXTMEMOPTS = - - - -#---------------- Linker Options ---------------- -# -Wl,...: tell GCC to pass this to linker. -# -Map: create map file -# --cref: add cross reference to map file -LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += $(EXTMEMOPTS) -LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) -LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) -#LDFLAGS += -T linker_script.x - - - -#---------------- Programming Options (avrdude) ---------------- - -# Programming hardware: alf avr910 avrisp bascom bsd -# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 -# -# Type: avrdude -c ? -# to get a full listing. -# -AVRDUDE_PROGRAMMER = stk500 - -# com1 = serial port. Use lpt1 to connect to parallel port. -AVRDUDE_PORT = com1 # programmer connected to serial device - -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex -#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep - - -# Uncomment the following if you want avrdude's erase cycle counter. -# Note that this counter needs to be initialized first using -Yn, -# see avrdude manual. -#AVRDUDE_ERASE_COUNTER = -y - -# Uncomment the following if you do /not/ wish a verification to be -# performed after programming the device. -#AVRDUDE_NO_VERIFY = -V - -# Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See -# to submit bug reports. -#AVRDUDE_VERBOSE = -v -v - -AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - - - -#---------------- Debugging Options ---------------- - -# For simulavr only - target MCU frequency. -DEBUG_MFREQ = $(F_CPU) - -# Set the DEBUG_UI to either gdb or insight. -# DEBUG_UI = gdb -DEBUG_UI = insight - -# Set the debugging back-end to either avarice, simulavr. -DEBUG_BACKEND = avarice -#DEBUG_BACKEND = simulavr - -# GDB Init Filename. -GDBINIT_FILE = __avr_gdbinit - -# When using avarice settings for the JTAG -JTAG_DEV = /dev/com1 - -# Debugging port used to communicate between GDB / avarice / simulavr. -DEBUG_PORT = 4242 - -# Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when -# avarice is running on a different computer. -DEBUG_HOST = localhost - - - -#============================================================================ - - -# Define programs and commands. -SHELL = sh -CC = avr-gcc -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump -SIZE = avr-size -AR = avr-ar rcs -NM = avr-nm -AVRDUDE = avrdude -REMOVE = rm -f -REMOVEDIR = rm -rf -COPY = cp -WINSHELL = cmd - - -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_COFF = Converting to AVR COFF: -MSG_EXTENDED_COFF = Converting to AVR Extended COFF: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling C: -MSG_COMPILING_CPP = Compiling C++: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: -MSG_CREATING_LIBRARY = Creating library: - - - - -# Define all object files. -OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) - -# Define all listing files. -LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) - - -# Compiler flags to generate dependency files. -GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d - - -# Combine all necessary flags and optional flags. -# Add target processor to flags. -ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) -ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) -ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) - - - - - -# Default target. -all: begin gccversion sizebefore build sizeafter end - -# Change the build target to build a HEX file or a library. -build: elf hex bin eep lss sym -#build: lib - - -elf: $(TARGET).elf -hex: $(TARGET).hex -bin: $(TARGET).bin -eep: $(TARGET).eep -lss: $(TARGET).lss -sym: $(TARGET).sym -LIBNAME=lib$(TARGET).a -lib: $(LIBNAME) - - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. -begin: - @echo - @echo $(MSG_BEGIN) - -end: - @echo $(MSG_END) - @echo - - -# Display size of file. -HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex -ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf - -sizebefore: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ - 2>/dev/null; echo; fi - -sizeafter: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ - 2>/dev/null; echo; fi - - - -# Display compiler version information. -gccversion : - @$(CC) --version - - - -# Program the device. -program: $(TARGET).hex $(TARGET).eep - $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) - - -# Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set -# a breakpoint at main(). -gdb-config: - @$(REMOVE) $(GDBINIT_FILE) - @echo define reset >> $(GDBINIT_FILE) - @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) - @echo end >> $(GDBINIT_FILE) - @echo file $(TARGET).elf >> $(GDBINIT_FILE) - @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) -ifeq ($(DEBUG_BACKEND),simulavr) - @echo load >> $(GDBINIT_FILE) -endif - @echo break main >> $(GDBINIT_FILE) - -debug: gdb-config $(TARGET).elf -ifeq ($(DEBUG_BACKEND), avarice) - @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. - @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ - $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) - @$(WINSHELL) /c pause - -else - @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ - $(DEBUG_MFREQ) --port $(DEBUG_PORT) -endif - @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) - - - - -# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. -COFFCONVERT = $(OBJCOPY) --debugging -COFFCONVERT += --change-section-address .data-0x800000 -COFFCONVERT += --change-section-address .bss-0x800000 -COFFCONVERT += --change-section-address .noinit-0x800000 -COFFCONVERT += --change-section-address .eeprom-0x810000 - - - -coff: $(TARGET).elf - @echo - @echo $(MSG_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(TARGET).cof - - -extcoff: $(TARGET).elf - @echo - @echo $(MSG_EXTENDED_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof - - - -# Create final output files (.hex, .eep) from ELF output file. -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ - -%.bin: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O binary -R .eeprom $< $@ - -%.eep: %.elf - @echo - @echo $(MSG_EEPROM) $@ - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ - --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 - -# Create extended listing file from ELF output file. -%.lss: %.elf - @echo - @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -S $< > $@ - -# Create a symbol table from ELF output file. -%.sym: %.elf - @echo - @echo $(MSG_SYMBOL_TABLE) $@ - $(NM) -n $< > $@ - - - -# Create library from object files. -.SECONDARY : $(TARGET).a -.PRECIOUS : $(OBJ) -%.a: $(OBJ) - @echo - @echo $(MSG_CREATING_LIBRARY) $@ - $(AR) $@ $(OBJ) - - -# Link: create ELF output file from object files. -.SECONDARY : $(TARGET).elf -.PRECIOUS : $(OBJ) -%.elf: $(OBJ) - @echo - @echo $(MSG_LINKING) $@ - $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) - - -# Compile: create object files from C source files. -$(OBJDIR)/%.o : %.c - @echo - @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ - - -# Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp - @echo - @echo $(MSG_COMPILING_CPP) $< - $(CC) -c $(ALL_CPPFLAGS) $< -o $@ - - -# Compile: create assembler files from C source files. -%.s : %.c - $(CC) -S $(ALL_CFLAGS) $< -o $@ - - -# Compile: create assembler files from C++ source files. -%.s : %.cpp - $(CC) -S $(ALL_CPPFLAGS) $< -o $@ - - -# Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S - @echo - @echo $(MSG_ASSEMBLING) $< - $(CC) -c $(ALL_ASFLAGS) $< -o $@ - - -# Create preprocessed source for use in sending a bug report. -%.i : %.c - $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ - - -# Target: clean project. -clean: begin clean_list end - -clean_list : - @echo - @echo $(MSG_CLEANING) - $(REMOVE) $(TARGET).hex - $(REMOVE) $(TARGET).bin - $(REMOVE) $(TARGET).eep - $(REMOVE) $(TARGET).cof - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lss - $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) - $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) - $(REMOVE) $(SRC:.c=.s) - $(REMOVE) $(SRC:.c=.d) - $(REMOVE) $(SRC:.c=.i) - $(REMOVEDIR) .dep - - -# Create object files directory -$(shell mkdir $(OBJDIR) 2>/dev/null) - - -# Include the dependency files. --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - - -# Listing of phony targets. -.PHONY : all begin finish end sizebefore sizeafter gccversion \ -build elf hex bin eep lss sym coff extcoff \ -clean clean_list program debug gdb-config - - - - - - diff --git a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/chconf.h b/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/chconf.h deleted file mode 100644 index 15e6d4a..0000000 --- a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 128 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC FALSE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/halconf.h b/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/halconf.h deleted file mode 100644 index 255b1a7..0000000 --- a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL FALSE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -#define SERIAL_BUFFERS_SIZE 16 - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/main.c b/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/main.c deleted file mode 100644 index 9ed2d52..0000000 --- a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/main.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "evtimer.h" - -static WORKING_AREA(waThread1, 32); -static msg_t Thread1(void *arg) { - - while (TRUE) { - PORTE ^= PORTE_LED; - chThdSleepMilliseconds(500); - } - return 0; -} - -static void TimerHandler(eventid_t id) { - msg_t TestThread(void *p); - - if (!(PORTE & PORTE_BUTTON)) - TestThread(&SD2); -} - -int main(int argc, char **argv) { - static EvTimer evt; - static evhandler_t handlers[1] = { - TimerHandler - }; - static EventListener el0; - - hwinit(); - - /* - * The main() function becomes a thread here then the interrupts are - * enabled and ChibiOS/RT goes live. - */ - chSysInit(); - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD2, NULL); - - /* - * Event Timer initialization. - */ - evtInit(&evt, MS2ST(500)); /* Initializes an event timer object. */ - evtStart(&evt); /* Starts the event timer. */ - chEvtRegister(&evt.et_es, &el0, 0); /* Registers on the timer event source. */ - - /* - * Starts the LED blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - while(TRUE) - chEvtDispatch(handlers, chEvtWaitOne(ALL_EVENTS)); - - return 0; -} diff --git a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/mcuconf.h deleted file mode 100644 index 9ecd104..0000000 --- a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/mcuconf.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * AVR drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * MAC driver system settings. - */ - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ -#define USE_AVR_USART0 FALSE -#define USE_AVR_USART1 TRUE - -/* - * SPI driver system settings. - */ diff --git a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/readme.txt b/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/readme.txt deleted file mode 100644 index 4d2202a..0000000 --- a/ChibiOS_2.0.8/demos/AVR-AT90CANx-GCC/readme.txt +++ /dev/null @@ -1,25 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for Atmel AVR AT90CAN128. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex AVR-CAN board. - -** The Demo ** - -The demo currently just flashes the board LED using a thread. It will be -expanded in next releases. -By pressing the board button the test suite is activated, output on serial -port 2. - -** Build Procedure ** - -The demo was built using the WinAVR toolchain. - -** Notes ** - -The demo requires include files from WinAVR that are not part of the ChibiOS/RT -distribution, please install WinAVR. - - http://winavr.sourceforge.net/ diff --git a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/Makefile b/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/Makefile deleted file mode 100644 index 69247ad..0000000 --- a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/Makefile +++ /dev/null @@ -1,652 +0,0 @@ -# Hey Emacs, this is a -*- makefile -*- -#---------------------------------------------------------------------------- -# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. -# -# Released to the Public Domain -# -# Additional material for this makefile was written by: -# Peter Fleury -# Tim Henigan -# Colin O'Flynn -# Reiner Patommel -# Markus Pfaff -# Sander Pool -# Frederik Rouleau -# Carlos Lamas -# -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF. -# -# make extcoff = Convert ELF to AVR Extended COFF. -# -# make program = Download the hex file to the device, using avrdude. -# Please customize the avrdude settings below first! -# -# make debug = Start either simulavr or avarice as specified for debugging, -# with avr-gdb or avr-insight as the front end for debugging. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- - - -# MCU name -MCU = atmega128 - - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# Typical values are: -# F_CPU = 1000000 -# F_CPU = 1843200 -# F_CPU = 2000000 -# F_CPU = 3686400 -# F_CPU = 4000000 -# F_CPU = 7372800 -# F_CPU = 8000000 -# F_CPU = 11059200 -# F_CPU = 14745600 -# F_CPU = 16000000 -# F_CPU = 18432000 -# F_CPU = 20000000 -F_CPU = 16000000 - - -# Output format. (can be srec, ihex, binary) -FORMAT = ihex - - -# Target file name (without extension). -TARGET = ch - - -# Object files directory -# To put object files in current directory, use a dot (.), do NOT make -# this an empty or blank macro! -OBJDIR = . - - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_AVR_MT_128/board.mk -include $(CHIBIOS)/os/hal/platforms/AVR/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/AVR/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - - -# List C source files here. (C dependencies are automatically generated.) -SRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(CHIBIOS)/os/various/evtimer.c \ - lcd.c main.c - - -# List C++ source files here. (C dependencies are automatically generated.) -CPPSRC = - - -# List Assembler source files here. -# Make them always end in a capital .S. Files ending in a lowercase .s -# will not be considered source files but generated files (assembler -# output from the compiler), and will be deleted upon "make clean"! -# Even though the DOS/Win* filesystem matches both .s and .S the same, -# it will preserve the spelling of the filenames, and gcc itself does -# care about how the name is spelled on its command-line. -ASRC = - - -# Optimization level, can be [0, 1, 2, 3, s]. -# 0 = turn off optimization. s = optimize for size. -# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) -OPT = 2 - - -# Debugging format. -# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. -# AVR Studio 4.10 requires dwarf-2. -# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. -DEBUG = dwarf-2 - - -# List any extra directories to look for include files here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various - - -# Compiler flag to set the C Standard level. -# c89 = "ANSI" C -# gnu89 = c89 plus GCC extensions -# c99 = ISO C99 standard (not yet fully implemented) -# gnu99 = c99 plus GCC extensions -CSTANDARD = -std=gnu99 - - -# Place -D or -U options here for C sources -CDEFS = -DF_CPU=$(F_CPU)UL - - -# Place -D or -U options here for ASM sources -ADEFS = -DF_CPU=$(F_CPU) - - -# Place -D or -U options here for C++ sources -CPPDEFS = -DF_CPU=$(F_CPU)UL -#CPPDEFS += -D__STDC_LIMIT_MACROS -#CPPDEFS += -D__STDC_CONSTANT_MACROS - - - -#---------------- Compiler Options C ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CFLAGS = -g$(DEBUG) -CFLAGS += $(CDEFS) -CFLAGS += -O$(OPT) -CFLAGS += -funsigned-char -CFLAGS += -funsigned-bitfields -CFLAGS += -fpack-struct -CFLAGS += -fshort-enums -#CFLAGS += -fno-strict-aliasing -CFLAGS += -Wall -CFLAGS += -Wstrict-prototypes -#CFLAGS += -mshort-calls -#CFLAGS += -fno-unit-at-a-time -#CFLAGS += -Wundef -#CFLAGS += -Wunreachable-code -#CFLAGS += -Wsign-compare -CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) -CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -CFLAGS += $(CSTANDARD) - - -#---------------- Compiler Options C++ ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CPPFLAGS = -g$(DEBUG) -CPPFLAGS += $(CPPDEFS) -CPPFLAGS += -O$(OPT) -CPPFLAGS += -funsigned-char -CPPFLAGS += -funsigned-bitfields -CPPFLAGS += -fpack-struct -CPPFLAGS += -fshort-enums -CPPFLAGS += -fno-exceptions -CPPFLAGS += -Wall -CFLAGS += -Wundef -#CPPFLAGS += -mshort-calls -#CPPFLAGS += -fno-unit-at-a-time -#CPPFLAGS += -Wstrict-prototypes -#CPPFLAGS += -Wunreachable-code -#CPPFLAGS += -Wsign-compare -CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) -CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -#CPPFLAGS += $(CSTANDARD) - - -#---------------- Assembler Options ---------------- -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns: create listing -# -gstabs: have the assembler create line number information; note that -# for use in COFF files, additional information about filenames -# and function names needs to be present in the assembler source -# files -- see avr-libc docs [FIXME: not yet described there] -# -listing-cont-lines: Sets the maximum number of continuation lines of hex -# dump that will be displayed for a given single line of source input. -ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 - - -#---------------- Library Options ---------------- -# Minimalistic printf version -PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min - -# Floating point printf version (requires MATH_LIB = -lm below) -PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt - -# If this is left blank, then it will use the Standard printf version. -PRINTF_LIB = $(PRINTF_LIB_MIN) -#PRINTF_LIB = $(PRINTF_LIB_MIN) -#PRINTF_LIB = $(PRINTF_LIB_FLOAT) - - -# Minimalistic scanf version -SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min - -# Floating point + %[ scanf version (requires MATH_LIB = -lm below) -SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt - -# If this is left blank, then it will use the Standard scanf version. -SCANF_LIB = $(SCANF_LIB_MIN) -#SCANF_LIB = $(SCANF_LIB_MIN) -#SCANF_LIB = $(SCANF_LIB_FLOAT) - - -MATH_LIB = -lm - - -# List any extra directories to look for libraries here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRALIBDIRS = - - - -#---------------- External Memory Options ---------------- - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# used for variables (.data/.bss) and heap (malloc()). -#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# only used for heap (malloc()). -#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff - -EXTMEMOPTS = - - - -#---------------- Linker Options ---------------- -# -Wl,...: tell GCC to pass this to linker. -# -Map: create map file -# --cref: add cross reference to map file -LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += $(EXTMEMOPTS) -LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) -LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) -#LDFLAGS += -T linker_script.x - - - -#---------------- Programming Options (avrdude) ---------------- - -# Programming hardware: alf avr910 avrisp bascom bsd -# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 -# -# Type: avrdude -c ? -# to get a full listing. -# -AVRDUDE_PROGRAMMER = stk500 - -# com1 = serial port. Use lpt1 to connect to parallel port. -AVRDUDE_PORT = com1 # programmer connected to serial device - -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex -#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep - - -# Uncomment the following if you want avrdude's erase cycle counter. -# Note that this counter needs to be initialized first using -Yn, -# see avrdude manual. -#AVRDUDE_ERASE_COUNTER = -y - -# Uncomment the following if you do /not/ wish a verification to be -# performed after programming the device. -#AVRDUDE_NO_VERIFY = -V - -# Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See -# to submit bug reports. -#AVRDUDE_VERBOSE = -v -v - -AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - - - -#---------------- Debugging Options ---------------- - -# For simulavr only - target MCU frequency. -DEBUG_MFREQ = $(F_CPU) - -# Set the DEBUG_UI to either gdb or insight. -# DEBUG_UI = gdb -DEBUG_UI = insight - -# Set the debugging back-end to either avarice, simulavr. -DEBUG_BACKEND = avarice -#DEBUG_BACKEND = simulavr - -# GDB Init Filename. -GDBINIT_FILE = __avr_gdbinit - -# When using avarice settings for the JTAG -JTAG_DEV = /dev/com1 - -# Debugging port used to communicate between GDB / avarice / simulavr. -DEBUG_PORT = 4242 - -# Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when -# avarice is running on a different computer. -DEBUG_HOST = localhost - - - -#============================================================================ - - -# Define programs and commands. -SHELL = sh -CC = avr-gcc -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump -SIZE = avr-size -AR = avr-ar rcs -NM = avr-nm -AVRDUDE = avrdude -REMOVE = rm -f -REMOVEDIR = rm -rf -COPY = cp -WINSHELL = cmd - - -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_COFF = Converting to AVR COFF: -MSG_EXTENDED_COFF = Converting to AVR Extended COFF: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling C: -MSG_COMPILING_CPP = Compiling C++: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: -MSG_CREATING_LIBRARY = Creating library: - - - - -# Define all object files. -OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) - -# Define all listing files. -LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) - - -# Compiler flags to generate dependency files. -GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d - - -# Combine all necessary flags and optional flags. -# Add target processor to flags. -ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) -ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) -ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) - - - - - -# Default target. -all: begin gccversion sizebefore build sizeafter end - -# Change the build target to build a HEX file or a library. -build: elf hex bin eep lss sym -#build: lib - - -elf: $(TARGET).elf -hex: $(TARGET).hex -bin: $(TARGET).bin -eep: $(TARGET).eep -lss: $(TARGET).lss -sym: $(TARGET).sym -LIBNAME=lib$(TARGET).a -lib: $(LIBNAME) - - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. -begin: - @echo - @echo $(MSG_BEGIN) - -end: - @echo $(MSG_END) - @echo - - -# Display size of file. -HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex -ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf - -sizebefore: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ - 2>/dev/null; echo; fi - -sizeafter: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ - 2>/dev/null; echo; fi - - - -# Display compiler version information. -gccversion : - @$(CC) --version - - - -# Program the device. -program: $(TARGET).hex $(TARGET).eep - $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) - - -# Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set -# a breakpoint at main(). -gdb-config: - @$(REMOVE) $(GDBINIT_FILE) - @echo define reset >> $(GDBINIT_FILE) - @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) - @echo end >> $(GDBINIT_FILE) - @echo file $(TARGET).elf >> $(GDBINIT_FILE) - @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) -ifeq ($(DEBUG_BACKEND),simulavr) - @echo load >> $(GDBINIT_FILE) -endif - @echo break main >> $(GDBINIT_FILE) - -debug: gdb-config $(TARGET).elf -ifeq ($(DEBUG_BACKEND), avarice) - @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. - @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ - $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) - @$(WINSHELL) /c pause - -else - @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ - $(DEBUG_MFREQ) --port $(DEBUG_PORT) -endif - @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) - - - - -# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. -COFFCONVERT = $(OBJCOPY) --debugging -COFFCONVERT += --change-section-address .data-0x800000 -COFFCONVERT += --change-section-address .bss-0x800000 -COFFCONVERT += --change-section-address .noinit-0x800000 -COFFCONVERT += --change-section-address .eeprom-0x810000 - - - -coff: $(TARGET).elf - @echo - @echo $(MSG_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(TARGET).cof - - -extcoff: $(TARGET).elf - @echo - @echo $(MSG_EXTENDED_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof - - - -# Create final output files (.hex, .eep) from ELF output file. -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ - -%.bin: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O binary -R .eeprom $< $@ - -%.eep: %.elf - @echo - @echo $(MSG_EEPROM) $@ - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ - --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 - -# Create extended listing file from ELF output file. -%.lss: %.elf - @echo - @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -S $< > $@ - -# Create a symbol table from ELF output file. -%.sym: %.elf - @echo - @echo $(MSG_SYMBOL_TABLE) $@ - $(NM) -n $< > $@ - - - -# Create library from object files. -.SECONDARY : $(TARGET).a -.PRECIOUS : $(OBJ) -%.a: $(OBJ) - @echo - @echo $(MSG_CREATING_LIBRARY) $@ - $(AR) $@ $(OBJ) - - -# Link: create ELF output file from object files. -.SECONDARY : $(TARGET).elf -.PRECIOUS : $(OBJ) -%.elf: $(OBJ) - @echo - @echo $(MSG_LINKING) $@ - $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) - - -# Compile: create object files from C source files. -$(OBJDIR)/%.o : %.c - @echo - @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ - - -# Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp - @echo - @echo $(MSG_COMPILING_CPP) $< - $(CC) -c $(ALL_CPPFLAGS) $< -o $@ - - -# Compile: create assembler files from C source files. -%.s : %.c - $(CC) -S $(ALL_CFLAGS) $< -o $@ - - -# Compile: create assembler files from C++ source files. -%.s : %.cpp - $(CC) -S $(ALL_CPPFLAGS) $< -o $@ - - -# Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S - @echo - @echo $(MSG_ASSEMBLING) $< - $(CC) -c $(ALL_ASFLAGS) $< -o $@ - - -# Create preprocessed source for use in sending a bug report. -%.i : %.c - $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ - - -# Target: clean project. -clean: begin clean_list end - -clean_list : - @echo - @echo $(MSG_CLEANING) - $(REMOVE) $(TARGET).hex - $(REMOVE) $(TARGET).bin - $(REMOVE) $(TARGET).eep - $(REMOVE) $(TARGET).cof - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lss - $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) - $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) - $(REMOVE) $(SRC:.c=.s) - $(REMOVE) $(SRC:.c=.d) - $(REMOVE) $(SRC:.c=.i) - $(REMOVEDIR) .dep - - -# Create object files directory -$(shell mkdir $(OBJDIR) 2>/dev/null) - - -# Include the dependency files. --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - - -# Listing of phony targets. -.PHONY : all begin finish end sizebefore sizeafter gccversion \ -build elf hex bin eep lss sym coff extcoff \ -clean clean_list program debug gdb-config - - - - - - diff --git a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/chconf.h b/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/chconf.h deleted file mode 100644 index 15e6d4a..0000000 --- a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 128 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC FALSE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/halconf.h b/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/halconf.h deleted file mode 100644 index 255b1a7..0000000 --- a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL FALSE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -#define SERIAL_BUFFERS_SIZE 16 - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/lcd.c b/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/lcd.c deleted file mode 100644 index 9aabee1..0000000 --- a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/lcd.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "lcd.h" - -static void e_pulse(void) { - volatile uint8_t i; - - PORTC |= PORTC_44780_E; - for (i = 0; i < ELOOPVALUE; i++); - ; - PORTC &= ~PORTC_44780_E; -} - -static void wait_not_busy(void) { - - chThdSleep(2); -} - -/* - * 44780 soft reset procedure. - */ -void lcdInit(void) { - - PORTC = (PORTC & ~(PORTC_44780_DATA | PORTC_44780_RS | PORTC_44780_E | PORTC_44780_RW)) | - (LCD_CMD_INIT8 & PORTC_44780_DATA); - chThdSleep(50); - e_pulse(); - chThdSleep(10); - e_pulse(); - chThdSleep(2); - e_pulse(); - wait_not_busy(); - PORTC = (PORTC & ~(PORTC_44780_DATA | PORTC_44780_RS | PORTC_44780_E | PORTC_44780_RW)) | - (LCD_CMD_INIT4 & PORTC_44780_DATA); - e_pulse(); - lcdCmd(LCD_CMD_INIT4); - lcdCmd(LCD_SET_DM | LCD_DM_DISPLAY_ON); - lcdCmd(LCD_SET_INCREMENT_MODE); -} - -/* - * Sends a command byte to the 44780. - */ -void lcdCmd(uint8_t cmd) { - - wait_not_busy(); - PORTC = (PORTC | PORTC_44780_DATA) & (cmd | (0x0F & ~PORTC_44780_RS)); - e_pulse(); - PORTC = (PORTC | PORTC_44780_DATA) & ((cmd << 4) | (0x0F & ~PORTC_44780_RS)); - e_pulse(); -} - -/* - * Writes a char on the LCD at the current position. - */ -void lcdPutc(char c) { - uint8_t b; - - wait_not_busy(); - b = c | 0x0F; - PORTC = (PORTC | PORTC_44780_DATA | PORTC_44780_RS) & (c | 0x0F); - e_pulse(); - PORTC = (PORTC | PORTC_44780_DATA | PORTC_44780_RS) & ((c << 4) | 0x0F); - e_pulse(); -} - -/* - * Writes a string on the LCD at an absolute address. - */ -void lcdPuts(uint8_t pos, char *p) { - - lcdCmd(LCD_SET_DDRAM_ADDRESS | pos); - while (*p) - lcdPutc(*p++); -} diff --git a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/lcd.h b/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/lcd.h deleted file mode 100644 index a782f73..0000000 --- a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/lcd.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _LCD_H_ -#define _LCD_H_ - -#define ELOOPVALUE 10 - -#define LCD_CLEAR 0x01 - -#define LCD_RETURN_HOME 0x02 - -#define LCD_SET_INCREMENT_MODE 0x06 - -#define LCD_SET_DM 0x08 -#define LCD_DM_DISPLAY_ON 4 -#define LCD_DM_DISPLAY_OFF 0 -#define LCD_DM_CURSOR_ON 2 -#define LCD_DM_CURSOR_OFF 0 -#define LCD_DM_BLINK_ON 1 -#define LCD_DM_BLINK_OFF 0 - -#define LCD_CMD_INIT4 0x28 -#define LCD_CMD_INIT8 0x38 - -#define LCD_SET_DDRAM_ADDRESS 0x80 - -#define LCD_LINE1 0 -#define LCD_LINE2 40 - -void lcdInit(void); -void lcdCmd(uint8_t cmd); -void lcdPutc(char c); -void lcdPuts(uint8_t pos, char *p); - -#endif /* _LCD_H_ */ diff --git a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/main.c b/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/main.c deleted file mode 100644 index 5a0d1a9..0000000 --- a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/main.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "evtimer.h" - -#include "lcd.h" - -static WORKING_AREA(waThread1, 32); -static msg_t Thread1(void *arg) { - - while (TRUE) { - if (!(PINA & PORTA_BUTTON2)) - PORTA ^= PORTA_RELAY; - chThdSleepMilliseconds(1000); - } - return 0; -} - -static void TimerHandler(eventid_t id) { - msg_t TestThread(void *p); - - if (!(PINA & PORTA_BUTTON1)) - TestThread(&SD2); -} - -int main(int argc, char **argv) { - static EvTimer evt; - static evhandler_t handlers[1] = { - TimerHandler - }; - static EventListener el0; - - hwinit(); - - /* - * The main() function becomes a thread here then the interrupts are - * enabled and ChibiOS/RT goes live. - */ - chSysInit(); - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD2, NULL); - - /* - * This initialization requires the OS already active because it uses delay - * APIs inside. - */ - lcdInit(); - lcdCmd(LCD_CLEAR); - lcdPuts(LCD_LINE1, " ChibiOS/RT "); - lcdPuts(LCD_LINE2, " Hello World! "); - - /* - * Event Timer initialization. - */ - evtInit(&evt, MS2ST(500)); /* Initializes an event timer object. */ - evtStart(&evt); /* Starts the event timer. */ - chEvtRegister(&evt.et_es, &el0, 0); /* Registers on the timer event source. */ - - /* - * Starts the LED blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - while(TRUE) - chEvtDispatch(handlers, chEvtWaitOne(ALL_EVENTS)); - - return 0; -} diff --git a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/mcuconf.h deleted file mode 100644 index 9ecd104..0000000 --- a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/mcuconf.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * AVR drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * MAC driver system settings. - */ - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ -#define USE_AVR_USART0 FALSE -#define USE_AVR_USART1 TRUE - -/* - * SPI driver system settings. - */ diff --git a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/readme.txt b/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/readme.txt deleted file mode 100644 index d4a8c5e..0000000 --- a/ChibiOS_2.0.8/demos/AVR-ATmega128-GCC/readme.txt +++ /dev/null @@ -1,24 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for Atmel AVR ATmega128. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex AVR-MT-128 board. - -** The Demo ** - -The demo currently just writes a hello world on the LCD and toggles the relay -using a thread while button 2 is pressed. -By pressing the button 1 the test suite is activated, output on serial port 2. - -** Build Procedure ** - -The demo was built using the WinAVR toolchain. - -** Notes ** - -The demo requires include files from WinAVR that are not part of the ChibiOS/RT -distribution, please install WinAVR. - - http://winavr.sourceforge.net/ diff --git a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/Makefile b/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/Makefile deleted file mode 100644 index 2695202..0000000 --- a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/Makefile +++ /dev/null @@ -1,150 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = no -endif - -# Enable register caching optimization (read documentation). -# Option not tested on MSP430, DO NOT USE. -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT = mspgcc/msp430x1611.x - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_MSP430_P1611/board.mk -include $(CHIBIOS)/os/hal/platforms/MSP430/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/MSP430/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources here. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(CHIBIOS)/os/various/evtimer.c \ - main.c - -# C++ sources here. -CPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = msp430x1611 - -TRGT = msp430- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/MSP430/rules.mk diff --git a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/chconf.h b/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/chconf.h deleted file mode 100644 index a7c4e75..0000000 --- a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 100 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 10 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 512 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/halconf.h b/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/halconf.h deleted file mode 100644 index 40b1798..0000000 --- a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/main.c b/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/main.c deleted file mode 100644 index af50ac7..0000000 --- a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/main.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -/* - * Red LEDs blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 64); -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palSetPad(IOPORT6, P6_O_LED); - chThdSleepMilliseconds(500); - palClearPad(IOPORT6, P6_O_LED); - chThdSleepMilliseconds(500); - } - return 0; -} - -/* - * Entry point, the interrupts are disabled on entry. - */ -int main(int argc, char **argv) { - - (void)argc; - (void)argv; - - /* - * Hardware initialization, see board.c. - */ - hwinit(); - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * The main() function becomes a thread here then the interrupts are - * enabled and ChibiOS/RT goes live. - */ - chSysInit(); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Normal main() thread activity, in this demo it does nothing except - * sleeping in a loop. - */ - while (TRUE) { - if (!palReadPad(IOPORT6, P6_I_BUTTON)) - TestThread(&SD1); - chThdSleepMilliseconds(500); - } - return 0; -} diff --git a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/mcuconf.h b/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/mcuconf.h deleted file mode 100644 index b5b6a47..0000000 --- a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/mcuconf.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * MSP430 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * HAL driver system settings. - */ -#define MSP430_USE_CLOCK MSP430_CLOCK_SOURCE_XT2CLK - -/* - * ADC driver system settings. - */ - -/* - * CAN driver system settings. - */ - -/* - * MAC driver system settings. - */ - -/* - * PWM driver system settings. - */ - -/* - * SERIAL driver system settings. - */ -#define USE_MSP430_USART0 TRUE -#define USE_MSP430_USART1 FALSE - -/* - * SPI driver system settings. - */ diff --git a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/mspgcc/msp430x1611.x b/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/mspgcc/msp430x1611.x deleted file mode 100644 index 774cfe9..0000000 --- a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/mspgcc/msp430x1611.x +++ /dev/null @@ -1,201 +0,0 @@ -/* Default linker script, for normal executables */ -OUTPUT_FORMAT("elf32-msp430","elf32-msp430","elf32-msp430") -OUTPUT_ARCH(msp:16) -MEMORY -{ - text (rx) : ORIGIN = 0x4000, LENGTH = 0xbfe0 - data (rwx) : ORIGIN = 0x1100, LENGTH = 0x2800 - vectors (rw) : ORIGIN = 0xffe0 LENGTH = 32 - bootloader(rx) : ORIGIN = 0x0c00, LENGTH = 1K - infomem(rx) : ORIGIN = 0x1000, LENGTH = 256 - infomemnobits(rx) : ORIGIN = 0x1000, LENGTH = 256 -} -SECTIONS -{ - /* Read-only sections, merged into text segment. */ - .hash : { *(.hash) } - .dynsym : { *(.dynsym) } - .dynstr : { *(.dynstr) } - .gnu.version : { *(.gnu.version) } - .gnu.version_d : { *(.gnu.version_d) } - .gnu.version_r : { *(.gnu.version_r) } - .rel.init : { *(.rel.init) } - .rela.init : { *(.rela.init) } - .rel.text : - { - *(.rel.text) - *(.rel.text.*) - *(.rel.gnu.linkonce.t*) - } - .rela.text : - { - *(.rela.text) - *(.rela.text.*) - *(.rela.gnu.linkonce.t*) - } - .rel.fini : { *(.rel.fini) } - .rela.fini : { *(.rela.fini) } - .rel.rodata : - { - *(.rel.rodata) - *(.rel.rodata.*) - *(.rel.gnu.linkonce.r*) - } - .rela.rodata : - { - *(.rela.rodata) - *(.rela.rodata.*) - *(.rela.gnu.linkonce.r*) - } - .rel.data : - { - *(.rel.data) - *(.rel.data.*) - *(.rel.gnu.linkonce.d*) - } - .rela.data : - { - *(.rela.data) - *(.rela.data.*) - *(.rela.gnu.linkonce.d*) - } - .rel.ctors : { *(.rel.ctors) } - .rela.ctors : { *(.rela.ctors) } - .rel.dtors : { *(.rel.dtors) } - .rela.dtors : { *(.rela.dtors) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.bss : { *(.rel.bss) } - .rela.bss : { *(.rela.bss) } - .rel.plt : { *(.rel.plt) } - .rela.plt : { *(.rela.plt) } - /* Internal text space. */ - .text : - { - . = ALIGN(2); - *(.init) - *(.init0) /* Start here after reset. */ - *(.init1) - *(.init2) /* Copy data loop */ - *(.init3) - *(.init4) /* Clear bss */ - *(.init5) - *(.init6) /* C++ constructors. */ - *(.init7) - *(.init8) - *(.init9) /* Call main(). */ - __ctors_start = . ; - *(.ctors) - __ctors_end = . ; - __dtors_start = . ; - *(.dtors) - __dtors_end = . ; - . = ALIGN(2); - *(.text) - . = ALIGN(2); - *(.text.*) - . = ALIGN(2); - *(.fini9) /* */ - *(.fini8) - *(.fini7) - *(.fini6) /* C++ destructors. */ - *(.fini5) - *(.fini4) - *(.fini3) - *(.fini2) - *(.fini1) - *(.fini0) /* Infinite loop after program termination. */ - *(.fini) - _etext = .; - } > text - .data : AT (ADDR (.text) + SIZEOF (.text)) - { - PROVIDE (__data_start = .) ; - . = ALIGN(2); - *(.data) - . = ALIGN(2); - *(.gnu.linkonce.d*) - . = ALIGN(2); - _edata = . ; - } > data - /* Bootloader. */ - .bootloader : - { - PROVIDE (__boot_start = .) ; - *(.bootloader) - . = ALIGN(2); - *(.bootloader.*) - } > bootloader - /* Information memory. */ - .infomem : - { - *(.infomem) - . = ALIGN(2); - *(.infomem.*) - } > infomem - /* Information memory (not loaded into MPU). */ - .infomemnobits : - { - *(.infomemnobits) - . = ALIGN(2); - *(.infomemnobits.*) - } > infomemnobits - .bss SIZEOF(.data) + ADDR(.data) : - { - PROVIDE (__bss_start = .) ; - *(.bss) - *(COMMON) - PROVIDE (__bss_end = .) ; - _end = . ; - } > data - .noinit SIZEOF(.bss) + ADDR(.bss) : - { - PROVIDE (__noinit_start = .) ; - *(.noinit) - *(COMMON) - PROVIDE (__noinit_end = .) ; - _end = . ; - } > data - .vectors : - { - PROVIDE (__vectors_start = .) ; - *(.vectors*) - _vectors_end = . ; - } > vectors - /* Stabs for profiling information*/ - .profiler 0 : { *(.profiler) } - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - PROVIDE (__stack = 0x3900) ; - PROVIDE (__data_start_rom = _etext) ; - PROVIDE (__data_end_rom = _etext + SIZEOF (.data)) ; - PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ; - PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ; - PROVIDE (__subdevice_has_heap = 0) ; -} diff --git a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/readme.txt b/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/readme.txt deleted file mode 100644 index 8c27398..0000000 --- a/ChibiOS_2.0.8/demos/MSP430-MSP430x1611-GCC/readme.txt +++ /dev/null @@ -1,24 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for Texas Instruments MSP430. ** -***************************************************************************** - -** TARGET ** - -The demo runs on an Olimex MSP430-P1611 board. - -** The Demo ** - -The demo flashes the board LED using a thread, by pressing the button located -on the board the test procedure is activated with output on the serial port -COM1 (USART0). - -** Build Procedure ** - -The demo was built using the MSPGCC toolchain. - -** Notes ** - -The demo requires include files from MSPGCC that are not part of the ChibiOS/RT -distribution, please install MSPGCC. - - http://mspgcc.sourceforge.net/ diff --git a/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/Makefile b/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/Makefile deleted file mode 100644 index 061b4fb..0000000 --- a/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/Makefile +++ /dev/null @@ -1,154 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16 -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = no -endif - -# Enable register caching optimization (read documentation). -# Option not tested on MSP430, DO NOT USE. -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT = ./ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/GENERIC_SPC563/board.mk -include $(CHIBIOS)/os/hal/platforms/SPC56x/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/PPC/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources here. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(CHIBIOS)/os/various/evtimer.c \ - $(CHIBIOS)/os/various/shell.c \ - $(CHIBIOS)/os/various/syscalls.c \ - main.c - -# C++ sources here. -CPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/PPC/SPC56x/ivor.s \ - $(CHIBIOS)/os/ports/GCC/PPC/SPC56x/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = e500mc -meabi -msdata=none -mnew-mnemonics -mregnames - -TRGT = powerpc-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DPPC_VARIANT=PPC_VARIANT_e200z3 - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -include $(CHIBIOS)/os/ports/GCC/PPC/rules.mk diff --git a/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/ch.ld b/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/ch.ld deleted file mode 100644 index 759d7a0..0000000 --- a/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/ch.ld +++ /dev/null @@ -1,118 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * SPC563M64 memory setup. - */ -__irq_stack_size__ = 0x0400; -__process_stack_size__ = 0x0800; -__stacks_total_size__ = __irq_stack_size__ + __process_stack_size__; - -MEMORY -{ - flash : org = 0x00000000, len = 1536k - ram : org = 0x40000000, len = 94k -} - -/* - * Derived constants. - */ -__flash_size__ = LENGTH(flash); -__flash_start__ = ORIGIN(flash); -__flash_end__ = ORIGIN(flash) + LENGTH(flash); - -__ram_size__ = LENGTH(ram); -__ram_start__ = ORIGIN(ram); -__ram_end__ = ORIGIN(ram) + LENGTH(ram); - -SECTIONS -{ - . = ORIGIN(flash); - - .text : ALIGN(16) SUBALIGN(16) - { - __ivpr_base__ = .; - KEEP(*(.bam)) - KEEP(*(.handlers)) - . = ALIGN(0x800); - KEEP(*(.vectors)) - *(.text .stub .text.* .gnu.linkonce.t.*) - *(.glue_7t); - *(.glue_7); - *(.ctors); - *(.dtors); - } > flash - - .rodata : ALIGN(16) SUBALIGN(16) - { - *(.rodata .rodata.* .gnu.linkonce.r.*) - *(.rodata1) - } > flash - - .sdata2 : ALIGN(16) SUBALIGN(16) - { - __sdata2_start__ = . + 0x8000; - *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) - *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) - } > flash - - .romdata : ALIGN(16) SUBALIGN(16) - { - __romdata_start__ = .; - } > flash - - .data : AT(__romdata_start__) - { - . = ALIGN(4); - __data_start__ = .; - *(.data .data.* .gnu.linkonce.d.*) - __sdata_start__ = . + 0x8000; - *(.sdata .sdata.* .gnu.linkonce.s.*) - __data_end__ = .; - } > ram - - .sbss : - { - __bss_start__ = .; - *(.sbss .sbss.* .gnu.linkonce.sb.*) - *(.scommon) - } > ram - - .bss : - { - *(.bss .bss.* .gnu.linkonce.b.*) - *(COMMON) - __bss_end__ = .; - } > ram - - /DISCARD/ : - { - *(.eh_*) - } - - __heap_base__ = __bss_end__; - __heap_end__ = __ram_end__ - __stacks_total_size__; -} diff --git a/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/chconf.h b/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/halconf.h b/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/halconf.h deleted file mode 100644 index cee4c0d..0000000 --- a/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -/*#include "mcuconf.h"*/ - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL FALSE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/main.c b/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/main.c deleted file mode 100644 index e927a6a..0000000 --- a/ChibiOS_2.0.8/demos/PPC-SPC563-GCC/main.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include - -#include "ch.h" -#include "hal.h" -#include "test.h" -#include "shell.h" - -#define SHELL_WA_SIZE THD_WA_SIZE(1024) -#define TEST_WA_SIZE THD_WA_SIZE(256) - -static void cmd_mem(BaseChannel *chp, int argc, char *argv[]) { - size_t n, size; - char buf[52]; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: mem"); - return; - } - n = chHeapStatus(NULL, &size); - siprintf(buf, "core free memory : %i bytes", chCoreStatus()); - shellPrintLine(chp, buf); - siprintf(buf, "heap fragments : %i", n); - shellPrintLine(chp, buf); - siprintf(buf, "heap free total : %i bytes", size); - shellPrintLine(chp, buf); -} - -static void cmd_threads(BaseChannel *chp, int argc, char *argv[]) { - static const char *states[] = { - "READY", - "CURRENT", - "SUSPENDED", - "WTSEM", - "WTMTX", - "WTCOND", - "SLEEPING", - "WTEXIT", - "WTOREVT", - "WTANDEVT", - "SNDMSG", - "WTMSG", - "FINAL" - }; - Thread *tp; - char buf[60]; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: threads"); - return; - } - shellPrintLine(chp, " addr stack prio refs state time"); - tp = chRegFirstThread(); - do { - siprintf(buf, "%8lx %8lx %4u %4i %9s %u", - (uint32_t)tp, (uint32_t)tp->p_ctx.sp, - (unsigned int)tp->p_prio, tp->p_refs - 1, - states[tp->p_state], (unsigned int)tp->p_time); - shellPrintLine(chp, buf); - tp = chRegNextThread(tp); - } while (tp != NULL); -} - -static void cmd_test(BaseChannel *chp, int argc, char *argv[]) { - Thread *tp; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: test"); - return; - } - tp = chThdCreateFromHeap(NULL, TEST_WA_SIZE, chThdGetPriority(), - TestThread, chp); - if (tp == NULL) { - shellPrintLine(chp, "out of memory"); - return; - } - chThdWait(tp); -} - -static const ShellCommand commands[] = { - {"mem", cmd_mem}, - {"threads", cmd_threads}, - {"test", cmd_test}, - {NULL, NULL} -}; - -static const ShellConfig shell_cfg1 = { - (BaseChannel *)&SD1, - commands -}; - -/* - * LEDs blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 128); -static msg_t Thread1(void *arg) { - - (void)arg; - - SIU.GPDO[GPIO_LED1].R = 1; - SIU.GPDO[GPIO_LED2].R = 1; - SIU.GPDO[GPIO_LED3].R = 1; - SIU.GPDO[GPIO_LED4].R = 1; - - while (TRUE) { - SIU.GPDO[GPIO_LED1].R = 0; - chThdSleepMilliseconds(100); - SIU.GPDO[GPIO_LED2].R = 0; - chThdSleepMilliseconds(100); - SIU.GPDO[GPIO_LED3].R = 0; - chThdSleepMilliseconds(100); - SIU.GPDO[GPIO_LED4].R = 0; - chThdSleepMilliseconds(100); - SIU.GPDO[GPIO_LED1].R = 1; - chThdSleepMilliseconds(100); - SIU.GPDO[GPIO_LED2].R = 1; - chThdSleepMilliseconds(100); - SIU.GPDO[GPIO_LED3].R = 1; - chThdSleepMilliseconds(100); - SIU.GPDO[GPIO_LED4].R = 1; - chThdSleepMilliseconds(300); - } - return 0; -} - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - Thread *shelltp = NULL; - - (void)argc; - (void)argv; - - /* - * Activates the serial driver 1 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * Shell manager initialization. - */ - shellInit(); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Normal main() thread activity. - */ - while (TRUE) { - - if (!shelltp) - shelltp = shellCreate(&shell_cfg1, SHELL_WA_SIZE, NORMALPRIO); - else if (chThdTerminated(shelltp)) { - chThdRelease(shelltp); /* Recovers memory of the previous shell. */ - shelltp = NULL; /* Triggers spawning of a new shell. */ - } -#if 0 - if (SIU.GPDI[GPIO_BUTTON1].B.PDI) { - volatile msg_t result; -#if 0 - MemoryStream report; - - msObjectInit(&report, report_buffer, sizeof(report_buffer), 0); - result = TestThread(&report); -#else - result = TestThread(&SD1); -#endif - } -#endif - chThdSleepMilliseconds(1000); - } - return 0; -} diff --git a/ChibiOS_2.0.8/demos/Posix-GCC/Makefile b/ChibiOS_2.0.8/demos/Posix-GCC/Makefile deleted file mode 100644 index a3d1f12..0000000 --- a/ChibiOS_2.0.8/demos/Posix-GCC/Makefile +++ /dev/null @@ -1,156 +0,0 @@ -# -# !!!! Do NOT edit this makefile with an editor which replace tabs by spaces !!!! -# -############################################################################################## -# -# On command line: -# -# make all = Create project -# -# make clean = Clean project files. -# -# To rebuild project do "make clean" and "make all". -# - -############################################################################################## -# Start of default section -# - -TRGT = -CC = $(TRGT)gcc -AS = $(TRGT)gcc -x assembler-with-cpp - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DSIMULATOR -DSHELL_USE_IPRINTF=FALSE - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################################## - -############################################################################################## -# Start of user section -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT = - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# Imported source files -CHIBIOS = ../.. -include ${CHIBIOS}/os/hal/hal.mk -include ${CHIBIOS}/os/hal/platforms/Posix/platform.mk -include ${CHIBIOS}/os/ports/GCC/SIMIA32/port.mk -include ${CHIBIOS}/os/kernel/kernel.mk -include ${CHIBIOS}/test/test.mk - -# List C source files here -SRC = ${PORTSRC} \ - ${KERNSRC} \ - ${TESTSRC} \ - ${HALSRC} \ - ${PLATFORMSRC} \ - ${CHIBIOS}/os/various/shell.c \ - main.c - -# List ASM source files here -ASRC = - -# List all user directories here -UINCDIR = $(PORTINC) $(KERNINC) $(TESTINC) $(HALINC) $(PLATFORMINC) \ - ${CHIBIOS}/os/various - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# Define optimisation level here -OPT = -ggdb -O2 -fomit-frame-pointer - -# -# End of user defines -############################################################################################## - -INCDIR = $(patsubst %,-I%,$(DINCDIR) $(UINCDIR)) -LIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) -DEFS = $(DDEFS) $(UDEFS) -ADEFS = $(DADEFS) $(UADEFS) -OBJS = $(ASRC:.s=.o) $(SRC:.c=.o) -LIBS = $(DLIBS) $(ULIBS) - -ASFLAGS = -Wa,-amhls=$(<:.s=.lst) $(ADEFS) -CPFLAGS = $(OPT) -Wall -Wextra -Wstrict-prototypes -fverbose-asm $(DEFS) - -ifeq ($(HOST_OSX),yes) - OSX_SDK = /Developer/SDKs/MacOSX10.5.sdk - OSX_ARCH = -mmacosx-version-min=10.3 -arch i386 - - CPFLAGS += -isysroot $(OSX_SDK) $(OSX_ARCH) - LDFLAGS = -Wl -Map=$(PROJECT).map,-syslibroot,$(OSX_SDK),$(LIBDIR) - LIBS += $(OSX_ARCH) -else - # Linux, or other - CPFLAGS += -Wa,-alms=$(<:.c=.lst) - LDFLAGS += -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch $(LIBDIR) -endif - -# Generate dependency information -CPFLAGS += -MD -MP -MF .dep/$(@F).d - -# -# makefile rules -# - -all: $(OBJS) $(PROJECT) - -%o : %c - $(CC) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ - -%o : %s - $(AS) -c $(ASFLAGS) $< -o $@ - -$(PROJECT): $(OBJS) - $(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ - -gcov: - -mkdir gcov - $(COV) -u $(subst /,\,$(SRC)) - -mv *.gcov ./gcov - -clean: - -rm -f $(OBJS) - -rm -f $(PROJECT) - -rm -f $(PROJECT).map - -rm -f $(SRC:.c=.c.bak) - -rm -f $(SRC:.c=.lst) - -rm -f $(ASRC:.s=.s.bak) - -rm -f $(ASRC:.s=.lst) - -rm -fR .dep - -# -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - -# *** EOF *** diff --git a/ChibiOS_2.0.8/demos/Posix-GCC/board.h b/ChibiOS_2.0.8/demos/Posix-GCC/board.h deleted file mode 100644 index b57abb9..0000000 --- a/ChibiOS_2.0.8/demos/Posix-GCC/board.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/demos/Posix-GCC/chconf.h b/ChibiOS_2.0.8/demos/Posix-GCC/chconf.h deleted file mode 100644 index 0828377..0000000 --- a/ChibiOS_2.0.8/demos/Posix-GCC/chconf.h +++ /dev/null @@ -1,496 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0x20000 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -#define chThdGetExitEventSource(tp) (&(tp)->p_exitesource) - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/Posix-GCC/halconf.h b/ChibiOS_2.0.8/demos/Posix-GCC/halconf.h deleted file mode 100644 index 91658d0..0000000 --- a/ChibiOS_2.0.8/demos/Posix-GCC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -/*#include "mcuconf.h"*/ - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/Posix-GCC/main.c b/ChibiOS_2.0.8/demos/Posix-GCC/main.c deleted file mode 100644 index 420a250..0000000 --- a/ChibiOS_2.0.8/demos/Posix-GCC/main.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include - -#include "ch.h" -#include "hal.h" -#include "test.h" -#include "shell.h" - -#define SHELL_WA_SIZE THD_WA_SIZE(4096) -#define CONSOLE_WA_SIZE THD_WA_SIZE(4096) -#define TEST_WA_SIZE THD_WA_SIZE(4096) - -#define cputs(msg) chMsgSend(cdtp, (msg_t)msg) - -static Thread *cdtp; -static Thread *shelltp1; -static Thread *shelltp2; - -void cmd_test(BaseChannel *chp, int argc, char *argv[]) { - Thread *tp; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: test"); - return; - } - tp = chThdCreateFromHeap(NULL, TEST_WA_SIZE, chThdGetPriority(), - TestThread, chp); - if (tp == NULL) { - shellPrintLine(chp, "out of memory"); - return; - } - chThdWait(tp); -} - -static const ShellCommand commands[] = { - {"test", cmd_test}, - {NULL, NULL} -}; - -static const ShellConfig shell_cfg1 = { - (BaseChannel *)&SD1, - commands -}; - -static const ShellConfig shell_cfg2 = { - (BaseChannel *)&SD2, - commands -}; - -/* - * Console print server done using synchronous messages. This makes the access - * to the C printf() thread safe and the print operation atomic among threads. - * In this example the message is the zero termitated string itself. - */ -static msg_t console_thread(void *arg) { - - (void)arg; - while (!chThdShouldTerminate()) { - puts((char *)chMsgWait()); - fflush(stdout); - chMsgRelease(RDY_OK); - } - return 0; -} - -/** - * @brief Shell termination handler. - * - * @param[in] id event id. - */ -static void termination_handler(eventid_t id) { - - (void)id; - if (shelltp1 && chThdTerminated(shelltp1)) { - chThdWait(shelltp1); - shelltp1 = NULL; - chThdSleepMilliseconds(10); - cputs("Init: shell on SD1 terminated"); - chSysLock(); - chOQResetI(&SD1.oqueue); - chSysUnlock(); - } - if (shelltp2 && chThdTerminated(shelltp2)) { - chThdWait(shelltp2); - shelltp2 = NULL; - chThdSleepMilliseconds(10); - cputs("Init: shell on SD2 terminated"); - chSysLock(); - chOQResetI(&SD2.oqueue); - chSysUnlock(); - } -} - -/** - * @brief SD1 status change handler. - * - * @param[in] id event id. - */ -static void sd1_handler(eventid_t id) { - - sdflags_t flags; - - (void)id; - flags = sdGetAndClearFlags(&SD1); - if ((flags & SD_CONNECTED) && (shelltp1 == NULL)) { - cputs("Init: connection on SD1"); - shelltp1 = shellCreate(&shell_cfg1, SHELL_WA_SIZE, NORMALPRIO + 1); - } - if (flags & SD_DISCONNECTED) { - cputs("Init: disconnection on SD1"); - chSysLock(); - chIQResetI(&SD1.iqueue); - chSysUnlock(); - } -} - -/** - * @brief SD2 status change handler. - * - * @param[in] id event id. - */ -static void sd2_handler(eventid_t id) { - - sdflags_t flags; - - (void)id; - flags = sdGetAndClearFlags(&SD2); - if ((flags & SD_CONNECTED) && (shelltp2 == NULL)) { - cputs("Init: connection on SD2"); - shelltp2 = shellCreate(&shell_cfg2, SHELL_WA_SIZE, NORMALPRIO + 10); - } - if (flags & SD_DISCONNECTED) { - cputs("Init: disconnection on SD2"); - chSysLock(); - chIQResetI(&SD2.iqueue); - chSysUnlock(); - } -} - -static evhandler_t fhandlers[] = { - termination_handler, - sd1_handler, - sd2_handler -}; - -/*------------------------------------------------------------------------* - * Simulator main. * - *------------------------------------------------------------------------*/ -int main(void) { - EventListener sd1fel, sd2fel, tel; - - /* - * HAL initialization. - */ - halInit(); - - /* - * ChibiOS/RT initialization. - */ - chSysInit(); - - /* - * Serial ports (simulated) initialization. - */ - sdStart(&SD1, NULL); - sdStart(&SD2, NULL); - - /* - * Shell manager initialization. - */ - shellInit(); - chEvtRegister(&shell_terminated, &tel, 0); - - /* - * Console thread started. - */ - cdtp = chThdCreateFromHeap(NULL, CONSOLE_WA_SIZE, NORMALPRIO + 1, - console_thread, NULL); - - /* - * Initializing connection/disconnection events. - */ - cputs("Shell service started on SD1, SD2"); - cputs(" - Listening for connections on SD1"); - (void) sdGetAndClearFlags(&SD1); - chEvtRegister(&SD1.sevent, &sd1fel, 1); - cputs(" - Listening for connections on SD2"); - (void) sdGetAndClearFlags(&SD2); - chEvtRegister(&SD2.sevent, &sd2fel, 2); - - /* - * Events servicing loop. - */ - while (!chThdShouldTerminate()) - chEvtDispatch(fhandlers, chEvtWaitOne(ALL_EVENTS)); - - /* - * Clean simulator exit. - */ - chEvtUnregister(&SD1.sevent, &sd1fel); - chEvtUnregister(&SD2.sevent, &sd2fel); - return 0; -} diff --git a/ChibiOS_2.0.8/demos/Posix-GCC/readme.txt b/ChibiOS_2.0.8/demos/Posix-GCC/readme.txt deleted file mode 100644 index 111e220..0000000 --- a/ChibiOS_2.0.8/demos/Posix-GCC/readme.txt +++ /dev/null @@ -1,27 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for x86 into a Linux process ** -***************************************************************************** - -** TARGET ** - -The demo runs under x86 Linux as an application program. The serial -I/O is simulated over TCP/IP sockets. - -** The Demo ** - -The demo listens on the two serial ports, when a connection is detected a -thread is started that serves a small command shell. -The demo shows how create/terminate threads at runtime, how listen to events, -how ho work with serial ports, how use the messages. -You can develop your ChibiOS/RT application using this demo as a simulator -then you can recompile it for a different architecture. -See demo.c for details. - -** Build Procedure ** - -GCC required. The Makefile defaults to building for a Linux host. -To build on OS X, use the following command: `make HOST_OSX=yes` - -** Connect to the demo ** - -In order to connect to the demo use telnet on the listening ports. diff --git a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/ch.rapp b/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/ch.rapp deleted file mode 100644 index 0cc2ddb..0000000 --- a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/ch.rapp +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - -
- - -
- -
- -
- -
- -
- - - - - - - - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- - - - - -
- -
- -
- - -
-
- - - - -
-
- - - -
- -
- -
- - -
-
- - - -
-
- - - -
- -
- -
- - -
- -
-
-
-
\ No newline at end of file diff --git a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/ch.rprj b/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/ch.rprj deleted file mode 100644 index a2452b4..0000000 --- a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/ch.rprj +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/chconf.h b/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/chconf.h deleted file mode 100644 index 9f77ef6..0000000 --- a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/chconf.h +++ /dev/null @@ -1,492 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 100 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 10 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 3072 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED FALSE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES FALSE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS FALSE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES FALSE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ - /* Add threads custom fields here.*/ -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/halconf.h b/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/halconf.h deleted file mode 100644 index 40b1798..0000000 --- a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/main.c b/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/main.c deleted file mode 100644 index 11aac51..0000000 --- a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/main.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" - -/* - * LEDs blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 64); -static msg_t Thread1(void *arg) { - - (void)arg; - while (TRUE) { - palClearPad(IOPORT2, PB_LED(7)); - chThdSleepMilliseconds(500); - palSetPad(IOPORT2, PB_LED(7)); - chThdSleepMilliseconds(500); - } - return 0; -} - -/* - * Entry point. - */ -void main(void) { - - /* - * Board/HAL initialization. - */ - hwinit(); - - /* - * OS initialization. - */ - chSysInit(); - - /* - * Activates the serial driver 1 using the driver default configuration. - */ - sdStart(&SD1, NULL); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Normal main() thread activity. - */ - while (TRUE) { - if (palReadPad(IOPORT7, PG_BT5) == PAL_LOW) - TestThread(&SD1); - if (palReadPad(IOPORT7, PG_BT6) == PAL_LOW) - sdWriteTimeout(&SD1, "Hello World!\r\n", 14, TIME_INFINITE); - chThdSleepMilliseconds(1000); - } -} diff --git a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/mcuconf.h b/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/mcuconf.h deleted file mode 100644 index 9b6354a..0000000 --- a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/mcuconf.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * STM8 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - */ - -/* - * HAL general settings. - */ -#define STM8_CLOCK_SOURCE CLK_SOURCE_HSI -#define STM8_HSI_DIVIDER CLK_HSI_DIV1 -#define STM8_CPU_DIVIDER CLK_CPU_DIV1 - -/* - * SERIAL driver system settings. - */ -#define USE_STM8_UART1 TRUE -#define USE_STM8_UART3 FALSE diff --git a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/readme.txt b/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/readme.txt deleted file mode 100644 index 00eb565..0000000 --- a/ChibiOS_2.0.8/demos/STM8S-STM8S208-RC/readme.txt +++ /dev/null @@ -1,16 +0,0 @@ -***************************************************************************** -** ChibiOS/RT demo for STM8S208RB. ** -***************************************************************************** - -** TARGET ** - -The demo runs on a Raisonance REva+STM8S208RB board. - -** The Demo ** - -The demo flashes the board LED using a thread, by pressing the button located -on the board the test procedure is activated with output on the serial port. - -** Build Procedure ** - -From withing the Ride7 IDE open the project, compile and run it. diff --git a/ChibiOS_2.0.8/demos/Win32-MinGW/Makefile b/ChibiOS_2.0.8/demos/Win32-MinGW/Makefile deleted file mode 100644 index 653f6c7..0000000 --- a/ChibiOS_2.0.8/demos/Win32-MinGW/Makefile +++ /dev/null @@ -1,145 +0,0 @@ -# -# !!!! Do NOT edit this makefile with an editor which replace tabs by spaces !!!! -# -############################################################################################## -# -# On command line: -# -# make all = Create project -# -# make clean = Clean project files. -# -# To rebuild project do "make clean" and "make all". -# - -############################################################################################## -# Start of default section -# - -TRGT = mingw32- -CC = $(TRGT)gcc -AS = $(TRGT)gcc -x assembler-with-cpp - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DSIMULATOR -DSHELL_USE_IPRINTF=FALSE - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = -lws2_32 - -# -# End of default section -############################################################################################## - -############################################################################################## -# Start of user section -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT = - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# Imported source files -CHIBIOS = ../.. -include ${CHIBIOS}/os/hal/hal.mk -include ${CHIBIOS}/os/hal/platforms/Win32/platform.mk -include ${CHIBIOS}/os/ports/GCC/SIMIA32/port.mk -include ${CHIBIOS}/os/kernel/kernel.mk -include ${CHIBIOS}/test/test.mk - -# List C source files here -SRC = ${PORTSRC} \ - ${KERNSRC} \ - ${TESTSRC} \ - ${HALSRC} \ - ${PLATFORMSRC} \ - ${CHIBIOS}/os/various/shell.c \ - main.c - -# List ASM source files here -ASRC = - -# List all user directories here -UINCDIR = $(PORTINC) $(KERNINC) $(TESTINC) $(HALINC) $(PLATFORMINC) \ - ${CHIBIOS}/os/various - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# Define optimisation level here -OPT = -ggdb -O2 -fomit-frame-pointer - -# -# End of user defines -############################################################################################## - - -INCDIR = $(patsubst %,-I%,$(DINCDIR) $(UINCDIR)) -LIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) -DEFS = $(DDEFS) $(UDEFS) -ADEFS = $(DADEFS) $(UADEFS) -OBJS = $(ASRC:.s=.o) $(SRC:.c=.o) -LIBS = $(DLIBS) $(ULIBS) - -LDFLAGS = -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch $(LIBDIR) -ASFLAGS = -Wa,-amhls=$(<:.s=.lst) $(ADEFS) -CPFLAGS = $(OPT) -Wall -Wextra -Wstrict-prototypes -fverbose-asm -Wa,-alms=$(<:.c=.lst) $(DEFS) - -# Generate dependency information -CPFLAGS += -MD -MP -MF .dep/$(@F).d - -# -# makefile rules -# - -all: $(OBJS) $(PROJECT).exe - -%o : %c - $(CC) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ - -%o : %s - $(AS) -c $(ASFLAGS) $< -o $@ - -%exe: $(OBJS) - $(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ - -gcov: - -mkdir gcov - $(COV) -u $(subst /,\,$(SRC)) - -mv *.gcov ./gcov - -clean: - -rm -f $(OBJS) - -rm -f $(PROJECT).exe - -rm -f $(PROJECT).map - -rm -f $(SRC:.c=.c.bak) - -rm -f $(SRC:.c=.lst) - -rm -f $(ASRC:.s=.s.bak) - -rm -f $(ASRC:.s=.lst) - -rm -fR .dep - -# -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - -# *** EOF *** diff --git a/ChibiOS_2.0.8/demos/Win32-MinGW/board.h b/ChibiOS_2.0.8/demos/Win32-MinGW/board.h deleted file mode 100644 index b57abb9..0000000 --- a/ChibiOS_2.0.8/demos/Win32-MinGW/board.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/demos/Win32-MinGW/chconf.h b/ChibiOS_2.0.8/demos/Win32-MinGW/chconf.h deleted file mode 100644 index 0828377..0000000 --- a/ChibiOS_2.0.8/demos/Win32-MinGW/chconf.h +++ /dev/null @@ -1,496 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
- * For performance and code size reasons the recommended setting - * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0x20000 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -#define chThdGetExitEventSource(tp) (&(tp)->p_exitesource) - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/Win32-MinGW/halconf.h b/ChibiOS_2.0.8/demos/Win32-MinGW/halconf.h deleted file mode 100644 index 91658d0..0000000 --- a/ChibiOS_2.0.8/demos/Win32-MinGW/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -/*#include "mcuconf.h"*/ - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/demos/Win32-MinGW/main.c b/ChibiOS_2.0.8/demos/Win32-MinGW/main.c deleted file mode 100644 index f8d0dc7..0000000 --- a/ChibiOS_2.0.8/demos/Win32-MinGW/main.c +++ /dev/null @@ -1,280 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "test.h" -#include "shell.h" - -#define SHELL_WA_SIZE THD_WA_SIZE(4096) -#define CONSOLE_WA_SIZE THD_WA_SIZE(4096) -#define TEST_WA_SIZE THD_WA_SIZE(4096) - -#define cputs(msg) chMsgSend(cdtp, (msg_t)msg) - -static Thread *cdtp; -static Thread *shelltp1; -static Thread *shelltp2; - -static void cmd_mem(BaseChannel *chp, int argc, char *argv[]) { - size_t n, size; - char buf[52]; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: mem"); - return; - } - n = chHeapStatus(NULL, &size); - sprintf(buf, "core free memory : %i bytes", chCoreStatus()); - shellPrintLine(chp, buf); - sprintf(buf, "heap fragments : %i", n); - shellPrintLine(chp, buf); - sprintf(buf, "heap free total : %i bytes", size); - shellPrintLine(chp, buf); -} - -static void cmd_threads(BaseChannel *chp, int argc, char *argv[]) { - static const char *states[] = { - "READY", - "CURRENT", - "SUSPENDED", - "WTSEM", - "WTMTX", - "WTCOND", - "SLEEPING", - "WTEXIT", - "WTOREVT", - "WTANDEVT", - "SNDMSG", - "WTMSG", - "FINAL" - }; - Thread *tp; - char buf[60]; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: threads"); - return; - } - shellPrintLine(chp, " addr stack prio refs state time"); - tp = chRegFirstThread(); - do { - sprintf(buf, "%8p %8p %4i %4i %9s %i", - tp, tp->p_ctx.esp, tp->p_prio, tp->p_refs - 1, - states[tp->p_state], tp->p_time); - shellPrintLine(chp, buf); - tp = chRegNextThread(tp); - } while (tp != NULL); -} - -static void cmd_test(BaseChannel *chp, int argc, char *argv[]) { - Thread *tp; - - (void)argv; - if (argc > 0) { - shellPrintLine(chp, "Usage: test"); - return; - } - tp = chThdCreateFromHeap(NULL, TEST_WA_SIZE, chThdGetPriority(), - TestThread, chp); - if (tp == NULL) { - shellPrintLine(chp, "out of memory"); - return; - } - chThdWait(tp); -} - -static const ShellCommand commands[] = { - {"mem", cmd_mem}, - {"threads", cmd_threads}, - {"test", cmd_test}, - {NULL, NULL} -}; - -static const ShellConfig shell_cfg1 = { - (BaseChannel *)&SD1, - commands -}; - -static const ShellConfig shell_cfg2 = { - (BaseChannel *)&SD2, - commands -}; - -/* - * Console print server done using synchronous messages. This makes the access - * to the C printf() thread safe and the print operation atomic among threads. - * In this example the message is the zero termitated string itself. - */ -static msg_t console_thread(void *arg) { - - (void)arg; - while (!chThdShouldTerminate()) { - puts((char *)chMsgWait()); - fflush(stdout); - chMsgRelease(RDY_OK); - } - return 0; -} - -/** - * @brief Shell termination handler. - * - * @param[in] id event id. - */ -static void termination_handler(eventid_t id) { - - (void)id; - if (shelltp1 && chThdTerminated(shelltp1)) { - chThdWait(shelltp1); - shelltp1 = NULL; - chThdSleepMilliseconds(10); - cputs("Init: shell on SD1 terminated"); - chSysLock(); - chOQResetI(&SD1.oqueue); - chSysUnlock(); - } - if (shelltp2 && chThdTerminated(shelltp2)) { - chThdWait(shelltp2); - shelltp2 = NULL; - chThdSleepMilliseconds(10); - cputs("Init: shell on SD2 terminated"); - chSysLock(); - chOQResetI(&SD2.oqueue); - chSysUnlock(); - } -} - -/** - * @brief SD1 status change handler. - * - * @param[in] id event id. - */ -static void sd1_handler(eventid_t id) { - sdflags_t flags; - - (void)id; - flags = sdGetAndClearFlags(&SD1); - if ((flags & SD_CONNECTED) && (shelltp1 == NULL)) { - cputs("Init: connection on SD1"); - shelltp1 = shellCreate(&shell_cfg1, SHELL_WA_SIZE, NORMALPRIO + 1); - } - if (flags & SD_DISCONNECTED) { - cputs("Init: disconnection on SD1"); - chSysLock(); - chIQResetI(&SD1.iqueue); - chSysUnlock(); - } -} - -/** - * @brief SD2 status change handler. - * - * @param[in] id event id. - */ -static void sd2_handler(eventid_t id) { - sdflags_t flags; - - (void)id; - flags = sdGetAndClearFlags(&SD2); - if ((flags & SD_CONNECTED) && (shelltp2 == NULL)) { - cputs("Init: connection on SD2"); - shelltp2 = shellCreate(&shell_cfg2, SHELL_WA_SIZE, NORMALPRIO + 10); - } - if (flags & SD_DISCONNECTED) { - cputs("Init: disconnection on SD2"); - chSysLock(); - chIQResetI(&SD2.iqueue); - chSysUnlock(); - } -} - -static evhandler_t fhandlers[] = { - termination_handler, - sd1_handler, - sd2_handler -}; - -/*------------------------------------------------------------------------* - * Simulator main. * - *------------------------------------------------------------------------*/ -int main(void) { - EventListener sd1fel, sd2fel, tel; - - /* - * HAL initialization. - */ - halInit(); - - /* - * ChibiOS/RT initialization. - */ - chSysInit(); - - /* - * Serial ports (simulated) initialization. - */ - sdStart(&SD1, NULL); - sdStart(&SD2, NULL); - - /* - * Shell manager initialization. - */ - shellInit(); - chEvtRegister(&shell_terminated, &tel, 0); - - /* - * Console thread started. - */ - cdtp = chThdCreateFromHeap(NULL, CONSOLE_WA_SIZE, NORMALPRIO + 1, - console_thread, NULL); - - /* - * Initializing connection/disconnection events. - */ - cputs("Shell service started on SD1, SD2"); - cputs(" - Listening for connections on SD1"); - (void) sdGetAndClearFlags(&SD1); - chEvtRegister(&SD1.sevent, &sd1fel, 1); - cputs(" - Listening for connections on SD2"); - (void) sdGetAndClearFlags(&SD2); - chEvtRegister(&SD2.sevent, &sd2fel, 2); - - /* - * Events servicing loop. - */ - while (!chThdShouldTerminate()) - chEvtDispatch(fhandlers, chEvtWaitOne(ALL_EVENTS)); - - /* - * Clean simulator exit. - */ - chEvtUnregister(&SD1.sevent, &sd1fel); - chEvtUnregister(&SD2.sevent, &sd2fel); - return 0; -} diff --git a/ChibiOS_2.0.8/demos/Win32-MinGW/readme.txt b/ChibiOS_2.0.8/demos/Win32-MinGW/readme.txt deleted file mode 100644 index 918c020..0000000 --- a/ChibiOS_2.0.8/demos/Win32-MinGW/readme.txt +++ /dev/null @@ -1,33 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for x86 into a Win32 process ** -***************************************************************************** - -** TARGET ** - -The demo runs under any Windows version as an application program. The serial -I/O is simulated over TCP/IP sockets. - -** The Demo ** - -The demo listens on the two serial ports, when a connection is detected a -thread is started that serves a small command shell. -The demo shows how create/terminate threads at runtime, how listen to events, -how ho work with serial ports, how use the messages. -You can develop your ChibiOS/RT application using this demo as a simulator -then you can recompile it for a different architecture. -See demo.c for details. - -** Build Procedure ** - -The demo was built using the MinGW toolchain. - -** Connect to the demo ** - -In order to connect to the demo a telnet client is required. A good choice -is PuTTY: - -http://www.putty.org/ - -Host Name: 127.0.0.1 -Port: 29001 and/or 29002 -Connection Type: Raw diff --git a/ChibiOS_2.0.8/docs/Doxyfile b/ChibiOS_2.0.8/docs/Doxyfile deleted file mode 100644 index 8998d37..0000000 --- a/ChibiOS_2.0.8/docs/Doxyfile +++ /dev/null @@ -1,1658 +0,0 @@ -# Doxyfile 1.6.3 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = ChibiOS/RT - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 2.0.8 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = . - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = "C:/Documents and Settings/Administrator/" - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 2 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it parses. -# With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this tag. -# The format is ext=language, where ext is a file extension, and language is one of -# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, -# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. Note that for custom extensions you also need to set -# FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = NO - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = YES - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = NO - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -# doxygen. The layout file controls the global structure of the generated output files -# in an output format independent way. The create the layout file that represents -# doxygen's defaults, run doxygen with the -l option. You can optionally specify a -# file name after the option, if omitted DoxygenLayout.xml will be used as the name -# of the layout file. - -LAYOUT_FILE = ./rsc/layout.xml - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = ../docs/src \ - ../os/kernel \ - ../os/kernel/include \ - ../os/kernel/src \ - ../os/kernel/templates \ - ../os/ports \ - ../os/ports/GCC/AVR \ - ../os/ports/GCC/ARM7 \ - ../os/ports/GCC/ARM7/crt0.s \ - ../os/ports/GCC/ARM7/chcoreasm.s \ - ../os/ports/GCC/ARMCMx \ - ../os/ports/GCC/ARMCMx/crt0.s \ - ../os/ports/GCC/ARMCMx/STM32F10x \ - ../os/ports/GCC/ARMCMx/LPC11xx \ - ../os/ports/GCC/ARMCMx/LPC13xx \ - ../os/ports/GCC/PPC \ - ../os/ports/GCC/PPC/crt0.s \ - ../os/ports/GCC/MSP430 \ - ../os/ports/RC/STM8 \ - ../os/hal \ - ../os/hal/include \ - ../os/hal/src \ - ../os/hal/templates \ - ../os/hal/platforms/AT91SAM7 \ - ../os/hal/platforms/AVR \ - ../os/hal/platforms/LPC11xx \ - ../os/hal/platforms/LPC13xx \ - ../os/hal/platforms/LPC214x \ - ../os/hal/platforms/MSP430 \ - ../os/hal/platforms/SPC56x \ - ../os/hal/platforms/STM32 \ - ../os/hal/platforms/STM8 \ - ../os/various \ - ../test \ - ../ext/ext.dox - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ - *.cpp \ - *.c++ \ - *.d \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ - *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.idl \ - *.odl \ - *.cs \ - *.php \ - *.php3 \ - *.inc \ - *.m \ - *.mm \ - *.dox \ - *.py \ - *.ddf - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = ../os/hal/platforms/STM32/stm32f10x.h \ - ../os/hal/platforms/LPC11xx/LPC11xx.h \ - ../os/hal/platforms/LPC11xx/system_LPC11xx.h \ - ../os/hal/platforms/LPC13xx/LPC13xx.h \ - ../os/hal/platforms/LPC13xx/system_LPC13xx.h - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = ./rsc - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = NO - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = NO - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = ./rsc/header.html - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = ./rsc/footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = ./rsc/custom.css - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = YES - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = ../ChibiOS_RT.chm - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = "\"C:/Program Files/HTML Help Workshop/hhc.exe\"" - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -# are set, an additional index file will be generated that can be used as input for -# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -# HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. -# For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's -# filter section matches. -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = YES - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = NO - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a PHP enabled web server instead of at the web client -# using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server -# based approach is that it scales better to large projects and allows -# full text search. The disadvances is that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = __DOXYGEN__ \ - CH_USE_WAITEXIT=1 \ - CH_USE_SEMAPHORES=1 \ - CH_USE_SEMSW=1 \ - CH_USE_MUTEXES=1 \ - CH_USE_CONDVARS=1 \ - CH_USE_CONDVARS_TIMEOUT=1 \ - CH_USE_EVENTS=1 \ - CH_USE_EVENTS_TIMEOUT=1 \ - CH_USE_QUEUES=1 \ - CH_USE_MEMCORE=1 \ - CH_USE_HEAP=1 \ - CH_USE_MEMPOOLS=1 \ - CH_USE_MESSAGES=1 \ - CH_USE_MAILBOXES=1 \ - CH_USE_DYNAMIC=1 \ - CH_USE_REGISTRY=1 \ - CH_DBG_ENABLE_ASSERTS=1 \ - CH_DBG_ENABLE_CHECKS=1 \ - CH_DBG_ENABLE_TRACE=1 \ - CH_DBG_ENABLE_STACK_CHECK=1 \ - CH_DBG_FILL_THREADS=1 \ - CH_DBG_THREADS_PROFILING=1 \ - CH_USE_ROUNDROBIN=1 - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = NO - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = NO - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 8 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = YES - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = NO - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = YES - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = NO - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 20 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 3 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = YES - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/ChibiOS_2.0.8/docs/html/_a_r_m7_2crt0_8s.html b/ChibiOS_2.0.8/docs/html/_a_r_m7_2crt0_8s.html deleted file mode 100644 index bc941a2..0000000 --- a/ChibiOS_2.0.8/docs/html/_a_r_m7_2crt0_8s.html +++ /dev/null @@ -1,56 +0,0 @@ - - -ChibiOS/RT: crt0.s File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

crt0.s File Reference

-
-
- -

Generic ARM7 startup file for ChibiOS/RT. -More...

- -

Go to the source code of this file.

- -
-

Detailed Description

-

Generic ARM7 startup file for ChibiOS/RT.

-

Startup code.

- -

Definition in file ARM7/crt0.s.

-
-
-Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_a_r_m7_2crt0_8s_source.html b/ChibiOS_2.0.8/docs/html/_a_r_m7_2crt0_8s_source.html deleted file mode 100644 index 6f509e0..0000000 --- a/ChibiOS_2.0.8/docs/html/_a_r_m7_2crt0_8s_source.html +++ /dev/null @@ -1,235 +0,0 @@ - - -ChibiOS/RT: crt0.s Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_a_r_m_c_mx_2crt0_8s.html b/ChibiOS_2.0.8/docs/html/_a_r_m_c_mx_2crt0_8s.html deleted file mode 100644 index e21e6cb..0000000 --- a/ChibiOS_2.0.8/docs/html/_a_r_m_c_mx_2crt0_8s.html +++ /dev/null @@ -1,56 +0,0 @@ - - -ChibiOS/RT: crt0.s File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

crt0.s File Reference

-
-
- -

Generic ARM Cortex-Mx startup file for ChibiOS/RT. -More...

-#include "cmparams.h"
- -

Go to the source code of this file.

- -
-

Detailed Description

-

Generic ARM Cortex-Mx startup file for ChibiOS/RT.

- -

Definition in file ARMCMx/crt0.s.

-
-
-Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_a_r_m_c_mx_2crt0_8s_source.html b/ChibiOS_2.0.8/docs/html/_a_r_m_c_mx_2crt0_8s_source.html deleted file mode 100644 index e37cddb..0000000 --- a/ChibiOS_2.0.8/docs/html/_a_r_m_c_mx_2crt0_8s_source.html +++ /dev/null @@ -1,213 +0,0 @@ - - -ChibiOS/RT: crt0.s Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_l_p_c11xx_2cmparams_8h.html b/ChibiOS_2.0.8/docs/html/_l_p_c11xx_2cmparams_8h.html deleted file mode 100644 index 0de2a19..0000000 --- a/ChibiOS_2.0.8/docs/html/_l_p_c11xx_2cmparams_8h.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: cmparams.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

cmparams.h File Reference

-
-
- -

ARM Cortex-M0 LPC11xx Specific Parameters. -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Defines

#define CORTEX_MODEL   CORTEX_M0
 Cortex core model.
#define CORTEX_HAS_ST   TRUE
 Systick unit presence.
#define CORTEX_HAS_MPU   FALSE
 Memory Protection unit presence.
#define CORTEX_PRIORITY_BITS   2
 Number of bits in priority masks.
-

Detailed Description

-

ARM Cortex-M0 LPC11xx Specific Parameters.

- -

Definition in file LPC11xx/cmparams.h.

-
-
-Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_l_p_c11xx_2cmparams_8h_source.html b/ChibiOS_2.0.8/docs/html/_l_p_c11xx_2cmparams_8h_source.html deleted file mode 100644 index ef25a58..0000000 --- a/ChibiOS_2.0.8/docs/html/_l_p_c11xx_2cmparams_8h_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - -ChibiOS/RT: cmparams.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_l_p_c13xx_2cmparams_8h.html b/ChibiOS_2.0.8/docs/html/_l_p_c13xx_2cmparams_8h.html deleted file mode 100644 index 9c1ee4b..0000000 --- a/ChibiOS_2.0.8/docs/html/_l_p_c13xx_2cmparams_8h.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: cmparams.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

cmparams.h File Reference

-
-
- -

ARM Cortex-M3 LPC13xx Specific Parameters. -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Defines

#define CORTEX_MODEL   CORTEX_M3
 Cortex core model.
#define CORTEX_HAS_ST   TRUE
 Systick unit presence.
#define CORTEX_HAS_MPU   FALSE
 Memory Protection unit presence.
#define CORTEX_PRIORITY_BITS   3
 Number of bits in priority masks.
-

Detailed Description

-

ARM Cortex-M3 LPC13xx Specific Parameters.

- -

Definition in file LPC13xx/cmparams.h.

-
-
-Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_l_p_c13xx_2cmparams_8h_source.html b/ChibiOS_2.0.8/docs/html/_l_p_c13xx_2cmparams_8h_source.html deleted file mode 100644 index 2f920ac..0000000 --- a/ChibiOS_2.0.8/docs/html/_l_p_c13xx_2cmparams_8h_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - -ChibiOS/RT: cmparams.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_p_p_c_2crt0_8s.html b/ChibiOS_2.0.8/docs/html/_p_p_c_2crt0_8s.html deleted file mode 100644 index 91e4553..0000000 --- a/ChibiOS_2.0.8/docs/html/_p_p_c_2crt0_8s.html +++ /dev/null @@ -1,56 +0,0 @@ - - -ChibiOS/RT: crt0.s File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

crt0.s File Reference

-
-
- -

Generic PowerPC startup file for ChibiOS/RT. -More...

- -

Go to the source code of this file.

- -
-

Detailed Description

-

Generic PowerPC startup file for ChibiOS/RT.

-

Startup code.

- -

Definition in file PPC/crt0.s.

-
-
-Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_p_p_c_2crt0_8s_source.html b/ChibiOS_2.0.8/docs/html/_p_p_c_2crt0_8s_source.html deleted file mode 100644 index 1c117c6..0000000 --- a/ChibiOS_2.0.8/docs/html/_p_p_c_2crt0_8s_source.html +++ /dev/null @@ -1,170 +0,0 @@ - - -ChibiOS/RT: crt0.s Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_s_t_m32_f10x_2cmparams_8h.html b/ChibiOS_2.0.8/docs/html/_s_t_m32_f10x_2cmparams_8h.html deleted file mode 100644 index c90bee0..0000000 --- a/ChibiOS_2.0.8/docs/html/_s_t_m32_f10x_2cmparams_8h.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: cmparams.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

cmparams.h File Reference

-
-
- -

ARM Cortex-M3 STM32F10x Specific Parameters. -More...

- -

Go to the source code of this file.

- - - - - - - - - - -

-Defines

#define CORTEX_MODEL   CORTEX_M3
 Cortex core model.
#define CORTEX_HAS_ST   TRUE
 Systick unit presence.
#define CORTEX_HAS_MPU   FALSE
 Memory Protection unit presence.
#define CORTEX_PRIORITY_BITS   4
 Number of bits in priority masks.
-

Detailed Description

-

ARM Cortex-M3 STM32F10x Specific Parameters.

- -

Definition in file STM32F10x/cmparams.h.

-
-
-Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/_s_t_m32_f10x_2cmparams_8h_source.html b/ChibiOS_2.0.8/docs/html/_s_t_m32_f10x_2cmparams_8h_source.html deleted file mode 100644 index 6a3b928..0000000 --- a/ChibiOS_2.0.8/docs/html/_s_t_m32_f10x_2cmparams_8h_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - -ChibiOS/RT: cmparams.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/adc_8c.html b/ChibiOS_2.0.8/docs/html/adc_8c.html deleted file mode 100644 index c83254e..0000000 --- a/ChibiOS_2.0.8/docs/html/adc_8c.html +++ /dev/null @@ -1,75 +0,0 @@ - - -ChibiOS/RT: adc.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

adc.c File Reference

-
-
- -

ADC Driver code. -More...

-#include "ch.h"
-#include "hal.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - -

-Functions

void adcInit (void)
 ADC Driver initialization.
void adcObjectInit (ADCDriver *adcp)
 Initializes the standard part of a ADCDriver structure.
void adcStart (ADCDriver *adcp, const ADCConfig *config)
 Configures and activates the ADC peripheral.
void adcStop (ADCDriver *adcp)
 Deactivates the ADC peripheral.
bool_t adcStartConversion (ADCDriver *adcp, const ADCConversionGroup *grpp, adcsample_t *samples, size_t depth, adccallback_t callback)
 Starts an ADC conversion.
void adcStopConversion (ADCDriver *adcp)
 Stops an ongoing conversion.
msg_t adcWaitConversion (ADCDriver *adcp, systime_t timeout)
 Waits for completion.
-

Detailed Description

-

ADC Driver code.

- -

Definition in file adc.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/adc_8c_source.html b/ChibiOS_2.0.8/docs/html/adc_8c_source.html deleted file mode 100644 index 5b4d478..0000000 --- a/ChibiOS_2.0.8/docs/html/adc_8c_source.html +++ /dev/null @@ -1,286 +0,0 @@ - - -ChibiOS/RT: adc.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/adc_8h.html b/ChibiOS_2.0.8/docs/html/adc_8h.html deleted file mode 100644 index 366d283..0000000 --- a/ChibiOS_2.0.8/docs/html/adc_8h.html +++ /dev/null @@ -1,88 +0,0 @@ - - -ChibiOS/RT: adc.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

adc.h File Reference

-
-
- -

ADC Driver macros and structures. -More...

-#include "adc_lld.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - -

-Enumerations

enum  adcstate_t {
-  ADC_UNINIT = 0, -ADC_STOP = 1, -ADC_READY = 2, -ADC_RUNNING = 3, -
-  ADC_COMPLETE = 4 -
- }
 

Driver state machine possible states.

- More...

-Functions

void adcInit (void)
 ADC Driver initialization.
void adcObjectInit (ADCDriver *adcp)
 Initializes the standard part of a ADCDriver structure.
void adcStart (ADCDriver *adcp, const ADCConfig *config)
 Configures and activates the ADC peripheral.
void adcStop (ADCDriver *adcp)
 Deactivates the ADC peripheral.
bool_t adcStartConversion (ADCDriver *adcp, const ADCConversionGroup *grpp, adcsample_t *samples, size_t depth, adccallback_t callback)
 Starts an ADC conversion.
void adcStopConversion (ADCDriver *adcp)
 Stops an ongoing conversion.
msg_t adcWaitConversion (ADCDriver *adcp, systime_t timeout)
 Waits for completion.
-

Detailed Description

-

ADC Driver macros and structures.

- -

Definition in file adc.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/adc_8h_source.html b/ChibiOS_2.0.8/docs/html/adc_8h_source.html deleted file mode 100644 index 505efc2..0000000 --- a/ChibiOS_2.0.8/docs/html/adc_8h_source.html +++ /dev/null @@ -1,147 +0,0 @@ - - -ChibiOS/RT: adc.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/annotated.html b/ChibiOS_2.0.8/docs/html/annotated.html deleted file mode 100644 index 0c06e09..0000000 --- a/ChibiOS_2.0.8/docs/html/annotated.html +++ /dev/null @@ -1,129 +0,0 @@ - - -ChibiOS/RT: Data Structures - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Data Structures

-
-
-Here are the data structures with brief descriptions: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
__ioportGeneric MSP430 I/O port
_SerialDriverFull duplex serial driver class
ADCConfigDriver configuration structure
ADCConversionGroupConversion group configuration structure
ADCDriverStructure representing an ADC driver
at91sam7_pio_setup_tPIO port setup info
BaseAsynchronousChannelBase asynchronous channel class
BaseAsynchronousChannelVMTBaseAsynchronousChannel virtual methods table
BaseChannelBase channel class
BaseChannelVMTBaseChannel virtual methods table
BaseSequentialStreamBase stream class
BaseSequentialStreamVMTBaseSequentialStream virtual methods table
chibios_rt::BaseThreadBase class for a ChibiOS/RT thread
CANConfigDriver configuration structure
CANDriverStructure representing an CAN driver
CANFilterCAN filter
CANRxFrameCAN received frame
CANTxFrameCAN transmission frame
CM3_NVICStructure representing the NVIC I/O space
CM3_SCBStructure representing the System Control Block I/O space
CM3_STStructure representing the SYSTICK I/O space
cmxctxCortex-Mx exception context
CondVarCondVar structure
chibios_rt::CondVarClass encapsulating a conditional variable
contextPlatform dependent part of the Thread structure
CtxSwcEventTrace buffer record
eabi_frameMandatory part of a stack frame
EMACDescriptorStructure representing a buffer physical descriptor
chibios_rt::EnhancedThread< N >Enhanced threads template class
chibios_rt::EventClass encapsulating an event source
EventListenerEvent Listener structure
EventSourceEvent Source structure
EvTimerEvent timer structure
extctxInterrupt saved context
GenericConfigGeneric I/O ports static initializer
GenericQueueGeneric I/O queue structure
gpio_tGPIO port representation
heap_headerMemory heap block header
intctxSystem saved context
IOBusI/O bus descriptor
lpc111x_gpio_setup_tGPIO port setup info
LPC13xx_gpio_setup_tGPIO port setup info
lpc214x_fio_setup_tFIO port setup info
MACDriverStructure representing a MAC driver
MACReceiveDescriptorStructure representing a receive descriptor
MACTransmitDescriptorStructure representing a transmit descriptor
memory_heapStructure describing a memory heap
MemoryPoolMemory pool descriptor
MemoryStreamMemory stream object
MemStreamVMTMemStream virtual methods table
MMCConfigDriver configuration structure
MMCDriverStructure representing a MMC driver
msp430_dio_setup_tSetup registers common to all the MSP430 ports
chibios_rt::MutexClass encapsulating a mutex
MutexMutex structure
PALConfigAT91SAM7 PIO static initializer
pool_headerMemory pool free object header
port_common_tSimplified MSP430 I/O port representation
PWMChannelConfigPWM driver channel configuration structure
PWMConfigDriver configuration structure
PWMDriverStructure representing an PWM driver
ReadyListReady list header
chibios_rt::SemaphoreClass encapsulating a semaphore
SemaphoreSemaphore structure
SerialConfigGeneric Serial Driver configuration structure
SerialDriverVMTSerialDriver virtual methods table
ShellCommandCustom command entry type
ShellConfigShell descriptor type
SPIConfigDriver configuration structure
SPIDriverStructure representing a SPI driver
stkalign_tBase type for stack and memory alignment
stm32_gpio_setup_tGPIO port setup info
stm8_startctxStart context
chibios_rt::SystemClass encapsulating the base system functionalities
testcaseStructure representing a test case
ThreadStructure representing a thread
ThreadsListGeneric threads single link list, it works like a stack
ThreadsQueueGeneric threads bidirectional linked list header and element
chibios_rt::TimerTimer class
TraceBufferTrace buffer header
VirtualTimerVirtual Timer descriptor structure
VTListVirtual timers list header
-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/architecture.html b/ChibiOS_2.0.8/docs/html/architecture.html deleted file mode 100644 index ba7c14c..0000000 --- a/ChibiOS_2.0.8/docs/html/architecture.html +++ /dev/null @@ -1,136 +0,0 @@ - - -ChibiOS/RT: Architecture - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Architecture

-
-
-

ChibiOS/RT General Architecture

- -

-Components

-

ChibiOS/RT is composed of several major components, each component can be composed of one of more subsystems. The main components are:

-
    -
  • Kernel, this is the platform independent part of the OS kernel.
  • -
  • HAL, this component contains a set of abstract device drivers that offer a common I/O API to the application across all the support platforms. The HAL code is totally portable across platforms.
  • -
  • Port, this is the platform dependent part of the OS kernel. This component is responsible of the system startup, interrupts abstraction, lock/unlock primitives, context switch related structures and code.
    - The component usually contains very little code because the OS is very portable but the quality of the implementation of the Port component affects heavily the performance of the ported OS. It is probably the most critical part of the whole OS.
  • -
  • Platform, this component contains a set of device drivers implementations.
  • -
  • Various, a library of various extra components that do not belong to any particular component but can make life easier while developing an embedded application.
  • -
-

-Dependencies

-

The following diagram shows the relationships among the various components that compose the system:
-
-

-
-inline_dotgraph_1.dot - -
-

-Kernel Architecture

-

The kernel itself is very modular and is composed of several subsystems, most subsystems are optional and can be switched of in the kernel configuration file chconf.h.
- The current kernel subsystems are divided in five categories:

-
    -
  • Base Kernel Services, this category contains the mandatory kernel subsystems:
      -
    • System Management, low level locks, initialization.
    • -
    • Time and Virtual Timers, virtual timers and time APIs.
    • -
    • Scheduler, scheduler APIs, all the higher level synchronization mechanism are implemented through this subsystem, it is very flexible but not recommended for direct use in user code.
    • -
    • Threads, thread-related APIs.
    • -
    -Base services diagram:
    -
    -
    -inline_dotgraph_2.dot - -
    -
  • -
  • Synchronization, this category contains the synchronization-related subsystems, each one of the provided mechanism can be configured out of the kernel if not needed.
      -
    • Semaphores, counter semaphores subsystem.
    • -
    • Mutexes, mutexes subsystem with support to the priority inheritance algorithm (fully implemented, any depht).
    • -
    • Condition Variables, condition variables, together with mutexes the condition variables allow the implementation of monitor constructs.
    • -
    • Event Flags, event sources and event flags with flexible support for and/or conditions and automatic dispatching to handler functions.
    • -
    • Synchronous Messages, lightweight synchronous messages.
    • -
    • Mailboxes, asynchronous messages queues.
    • -
    -All the synchronization mechanisms are built on top of the Scheduler APIs except Mailboxes that are build on top of Semaphores and Condition Variables that implicitly refer to Mutexes:
    -
    -
    -inline_dotgraph_3.dot - -
    -
  • -
  • Memory Management, memory management, multiple non-alternative schemes are available:
      -
    • Core Memory Manager, centralized core memory manager, this subsystems is used by the other allocators in order to get chunks of memory in a consistent way.
    • -
    • Heaps, central heap manager using a first fit strategy, it also allow the creation of multiple heaps in order to handle non uniform memory areas.
    • -
    • Memory Pools, very fast fixed size objects allocator.
    • -
    • Threads (dynamic), usually threads are static objects in ChibiOS/RT but there is the option for dynamic threads management, please see the article Threads Lifecycle.
    • -
    -The various allocators follow a precise hierarchy:
    -
    -
    -inline_dotgraph_4.dot - -
    - Please also see the article How to manage memory.
  • -
  • I/O Support, the kernel also provides mechanisms and abstract data interfaces that can be used by non-kernel components, the HAL as example.
      -
    • Data Streams, abstract streams interface.
    • -
    • I/O Channels, abstract I/O channels that inherits from the abstract stream interface.
    • -
    • I/O Queues, generic, byte wide, I/O queues APIs.
    • -
    -
  • -
  • Debug, debug services and APIs. The Registry susystem can be seen as part of the debug category even if it finds use in non-debug roles.
  • -
-

-HAL Architecture

-

The HAL is a collection of abstract device drivers, it relies on the Platform component for the low level implementation on specific hardware.
- The current internal HAL organization is the following:
-
-

-
-inline_dotgraph_5.dot - -
-


- See HAL for details about the various HAL subsystems.

-
-
-Generated on Sun Nov 28 2010 14:09:53 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_atomic.html b/ChibiOS_2.0.8/docs/html/article_atomic.html deleted file mode 100644 index 9bc6ffc..0000000 --- a/ChibiOS_2.0.8/docs/html/article_atomic.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: Invoking multiple primitives as a single atomic operation - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Invoking multiple primitives as a single atomic operation

-
-
-

It is often necessary to invoke multiple operations involving a reschedule as a single atomic operation.
- ChibiOS/RT already implements APIs that perform complex operations, as example the API chSemSignalWait() performs two operations atomically.
- If more complex operations are required in your application then it is possible to build macro-operations, see the following example:

-
  chSysLock();
-
-  chSemSignalI(&sem1);
-  chSemSignalI(&sem2);
-  chMtxUnlockS();
-  chSchRescheduleS();
-
-  chSysUnlock();
-

The above example performs a signal operation on two semaphores, unlocks the last acquired mutex and finally performs a reschedule. All the operations are performed atomically.
- An hypothetical chSemSignalSignalWait() operation could be implemented as follow:

-
  chSysLock();
-
-  chSemSignalI(&sem1);
-  chSemSignalI(&sem2);
-  chSemWaitS(&Sem3);  /* May reschedule or not. */
-  chSchRescheduleS(); /* This one reschedules if necessary. */
-
-  chSysUnlock();
-

In general multiple I-Class and (non rescheduling) S-Class APIs can be included and the block is terminated by a rescheduling S-Class API. An extra chSchRescheduleS() can be present at the very end of the block, it only reschedules if a reschedule is still required.

-
-
-Generated on Sun Nov 28 2010 14:09:53 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_create_thread.html b/ChibiOS_2.0.8/docs/html/article_create_thread.html deleted file mode 100644 index fcd7c05..0000000 --- a/ChibiOS_2.0.8/docs/html/article_create_thread.html +++ /dev/null @@ -1,175 +0,0 @@ - - -ChibiOS/RT: How to create a thread - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

How to create a thread

-
-
-

At the system startup there are already two active threads:

-
    -
  • Idle thread. This thread has the lowest priority in the system so it runs only when the other threads in the system are sleeping. This threads usually switches the system in a low power mode and does nothing else.
  • -
  • Main thread. This thread executes your main() function at startup. The main thread is created at the NORMALPRIO level but it can change its own priority if required. It is from the main thread that the other threads are usually created.
  • -
-

There are two kind of threads in ChibiOS/RT:

-
    -
  • Static Threads. This kind of threads are statically allocated in memory. The memory used by the thread cannot reused except for restarting the threads.
  • -
  • Dynamic Threads. Threads created by allocating memory from a memory heap or a memory pool.
  • -
-

Creating a static thread

-

In order to create a static thread a working area must be declared using the macro WORKING_AREA as shown:

-
static WORKING_AREA(myThreadWorkingArea, 128);
-

This macro reserves 128 bytes of stack for the thread and space for all the required thread related structures. The total size and the alignment problems are handled inside the macro, you only need to specify the pure stack size.
- A thread can be started by invoking chThdCreateStatic() as shown in this example:

-
  Thread *tp = chThdCreateStatic(myThreadWorkingArea,
-                                 sizeof(myThreadWorkingArea),
-                                 NORMALPRIO,    /* Initial priority.    */
-                                 myThread,      /* Thread function.     */
-                                 NULL);         /* Thread parameter.    */
-

The variable tp receives the pointer to the thread object, it is taken by other APIs as parameter.
- Now a complete example:

-
/*
- * My simple application.
- */
-
-#include <ch.h>
-
-/*
- * Working area for the LED flashing thread.
- */
-static WORKING_AREA(myThreadWorkingArea, 128);
-
-/*
- * LED flashing thread.
- */
-static msg_t myThread(void *arg) {
-
-  while (TRUE) {
-    LED_ON();
-    chThdSleepMilliseconds(500);
-    LED_OFF();
-    chThdSleepMilliseconds(500);
-  }
-}
-
-int main(int argc, char *argv[]) {
-
-  /* Starting the flashing LEDs thread.*/
-  (void)chThdCreateStatic(myThreadWorkingArea, sizeof(myThreadWorkingArea),
-                          NORMALPRIO, myThread, NULL);
-  .
-  .
-  .
-}
-

Note that the memory allocated to myThread() is statically defined and cannot be reused. Static threads are ideal for safety applications because there is no risk of a memory allocation failure because progressive heap fragmentation.

-

Creating a dynamic thread using the heap allocator

-

In order to create a thread from a memory heap is very easy:

-
  Thread *tp = chThdCreateFromHeap(NULL,            /* NULL = Default heap. */
-                                   THD_WA_SIZE(128),/* Stack size.          */
-                                   NORMALPRIO,      /* Initial priority.    */
-                                   myThread,        /* Thread function.     */
-                                   NULL);           /* Thread parameter.    */
-

The memory is allocated from the spawned heap and the thread is started. Note that the memory is not freed when the thread terminates but when the thread final status (its return value) is collected by the spawning thread. As example:

-
static msg_t myThread(void *arg) {
-
-  unsigned i = 10;
-  while (i > 0) {
-    LED_ON();
-    chThdSleepMilliseconds(500);
-    LED_OFF();
-    chThdSleepMilliseconds(500);
-    i--;
-  }
-  return (msg_t)i;
-}
-
-int main(int argc, char *argv[]) {
-
-  Thread *tp = chThdCreateFromHeap(NULL, THD_WA_SIZE(128), NORMALPRIO+1,
-                                   myThread, NULL);
-  if (tp == NULL)
-    chSysHalt();    /* Memory exausted. */
-  
-  /* The main thread continues its normal execution.*/
-  .
-  .
-  /*
-   * Now waits for the spawned thread to terminate (if it has not terminated
-   * already) then gets the thread exit message (msg) and returns the
-   * terminated thread memory to the heap (default system heap in this
-   * example).
-   */
-  msg_t msg = chThdWait(tp);
-  .
-  .
-}
-

Creating a dynamic thread using the heap allocator

-

A pool is a collection of equally sized memory blocks, creating a thread from a memry pool is very similar to the previous example but the memory of terminated threads is returned to the memory pool rather than to a heap:

-
static msg_t myThread(void *arg) {
-
-  unsigned i = 10;
-  while (i > 0) {
-    LED_ON();
-    chThdSleepMilliseconds(500);
-    LED_OFF();
-    chThdSleepMilliseconds(500);
-    i--;
-  }
-  return (msg_t)i;
-}
-
-int main(int argc, char *argv[]) {
-
-  Thread *tp = chThdCreateFromMemoryPool(myPool, NORMALPRIO+1, myThread, NULL);
-  if (tp == NULL)
-    chSysHalt();    /* Pool empty. */
-  
-  /* The main thread continues its normal execution.*/
-  .
-  .
-  /*
-   * Now waits for the spawned thread to terminate (if it has not terminated
-   * already) then gets the thread exit message (msg) and returns the
-   * terminated thread memory to the original memory pool.
-   */
-  msg_t msg = chThdWait(tp);
-  .
-  .
-}
-
-
-Generated on Sun Nov 28 2010 14:09:54 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_debug.html b/ChibiOS_2.0.8/docs/html/article_debug.html deleted file mode 100644 index 20e32fa..0000000 --- a/ChibiOS_2.0.8/docs/html/article_debug.html +++ /dev/null @@ -1,125 +0,0 @@ - - -ChibiOS/RT: Debugging ChibiOS/RT applications - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Debugging ChibiOS/RT applications

-
-
-

ChibiOS/RT offers several mechanisms that can help in the debug phase of the development cycle.

-

What this guide does not cover

-

This guide assumes knowledge in following areas:

-
    -
  • General knowledge of embedded development.
  • -
  • RTOS concepts.
  • -
  • Setup of your specific target hardware and toolchain.
  • -
  • Knowledge of your toolchain. The guide will explain what you need to do, not how it is done using you specific debugger, compiler, JTAG probe and target hardware.
  • -
-

Helpful debugging configuration settings

-

There are several settings in your kernel configuration file (see templates/chconf.h) that you may want to enable during debugging and in general during the whole development process.

-
    -
  • CH_OPTIMIZE_SPEED=FALSE, this disables inlining into the kernel code and makes it easier to debug using your debugger, you may also want to reduce or disable compiler optimizations (-O0 using GCC).
  • -
  • CH_DBG_ENABLE_CHECKS=TRUE, this setting enables the checks on the API parameters, useful to understand if you are passing wrong parameters to the OS functions.
  • -
  • CH_DBG_ENABLE_ASSERTS=TRUE, this setting enables the OS internal consistency checks, this can trap several kind of errors in the user code (or in the kernel itself).
  • -
  • CH_DBG_ENABLE_STACK_CHECK=TRUE, this setting enables checks on threads stack overflow. Note that this option is not available in all ports, check your port documentation. If not supported then it is silently ignored, see also the article Stacks and stack sizes.
  • -
  • CH_DBG_FILL_THREADS=TRUE, this setting enables the threads workspace filling, this can help examining the stack usage from your debugger.
  • -
-

Note that all the failed checks lock the kernel into the port_halt() function. In order to assess what triggered the lock the global variable panic_msg must be inspected using the debugger, the variable is a pointer to an error message (a zero terminated string), the pointer may contain NULL if the lock was triggered by a stack overflow.

-

Common errors and symptoms

-

There are some common errors while using an RTOS, use the following table as a check list, if your problem is not a generic programming error then probably it is one of the following common RTOS/embedded related mistakes:

-
    -
  • Insufficient stack allocated to one or more threads.
    - Common symptoms:
      -
    • Target instability.
    • -
    • Target locked into the port_halt() function.
    • -
    • Target trapped into an exception handler (architecture dependent).
    • -
    • Target apparent self reset (not real resets usually).
    • -
    -
  • -
  • Insufficient stack allocated to the IRQ stack (in those architectures that have a separate IRQ stack, ARM as example).
    - Common symptoms:
      -
    • Target instability.
    • -
    • Target trapped into an exception handler (architecture dependent).
    • -
    • Target apparent self reset (not real resets usually).
    • -
    -
  • -
  • Use of a non reentrant function from within an interrupt handler, as example most C runtime functions.
    - Common symptoms:
      -
    • Target instability.
    • -
    • Unexpected application behavior.
    • -
    -
  • -
  • Missing use of a mutual exclusion mechanism to protect data (or non reentrant code) shared among multiple threads and/or threads and interrupt handlers, see also the article Mutual Exclusion guide.
    - Common symptoms:
      -
    • Target instability.
    • -
    • Unexpected application behavior.
    • -
    -
  • -
  • Use of S-class or I-class APIs outside a proper lock state, see the Kernel Concepts article, specifically the API Names Suffixes and System States sections.
    - Common symptoms:
      -
    • Target instability.
    • -
    • Target trapped into an exception handler (architecture dependent).
    • -
    • Target apparent self reset (not real resets usually).
    • -
    -
  • -
  • Use of a non I-class API from an interrupt handler, see the Kernel Concepts article, specifically the API Names Suffixes and System States sections.
    - Common symptoms:
      -
    • Target instability.
    • -
    • Target trapped into an exception handler (architecture dependent).
    • -
    • Target apparent self reset (not real resets usually).
    • -
    -
  • -
  • Wrong threads priority assignment. One of the most critical things to do when designing an RTOS based application is to assign correct priorities to the threads in the system.
    - Common symptoms:
      -
    • Excessive or unpredictable response times.
    • -
    • Threads that appear to be never executed (CPU intensive threads at higher priority).
    • -
    -
  • -
-

General suggestions

-

For the less expert users, there are several things you may do in order to minimize the need for debugging:

-
    -
  • Read carefully the documentation first.
  • -
  • Try to find a code examples for things are you going to do, good sources are: the documentation, the test code, under "./test" you will find examples for almost any API in the ChibiOS/RT kernel and most common RTOS related tasks, under "./testhal" there are examples regarding the various device drivers, the various demos contain good code samples too).
  • -
  • Start your application from an existing demo, add things one at a time and test often, if you add too many things at once then finding a small problem can become a debugging nightmare. Follow the cycle: think, implement, test, repeat.
  • -
  • If you are stuck for too much time then consider asking for advice.
  • -
  • Report bugs and problems, bugs can be fixed, problems can become new articles in the documentation (this and other documentation articles spawned from questions in the forum or in the tracker).
  • -
  • Never give up :-)
  • -
-
-
-Generated on Sun Nov 28 2010 14:09:54 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_design.html b/ChibiOS_2.0.8/docs/html/article_design.html deleted file mode 100644 index 744ef54..0000000 --- a/ChibiOS_2.0.8/docs/html/article_design.html +++ /dev/null @@ -1,98 +0,0 @@ - - -ChibiOS/RT: Designing an embedded application - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Designing an embedded application

-
-
-

ChibiOS/RT offers a variety of mechanisms and primitives, often it is better to focus on a single approach for the system design and use only part of the available subsystems.
- When designing your application you may choose among several design alternatives:

- -

-Single threaded superloop

-

Correct, single thread, it is not mandatory to use the multithreading features of the OS. You may choose to implements everything as a complex state machine handled in the main thread alone. In this scenario the OS still offers a variety of useful mechanisms:

-
    -
  • Interrupt handling.
  • -
  • Virtual Timers, very useful in state machines in order to handle time triggered state transitions.
  • -
  • Power management.
  • -
  • Event Flags and/or Semaphores as communication mechanism between interrupt handlers and the main.
  • -
  • I/O queues.
  • -
  • Memory allocation.
  • -
  • System time.
  • -
-

In this configuration the kernel size is really minimal, everything else is disabled and takes no space. You always have the option to use more threads at a later time in order to perform separate tasks.

-

-Message Passing

-

In this scenario there are multiple threads in the system that never share data, everything is done by exchanging messages. Each thread represents a service, the other threads can request the service by sending a message.
- In this scenario the following subsystems can be used:

-
    -
  • Synchronous Messages.
  • -
  • Mailboxes (asynchronous message queues).
  • -
-

The advantage of this approach is to not have to deal with mutual exclusion, each functionality is encapsulated into a server thread that sequentially serves all the requests. As example, you can have the following scenario:

-
    -
  • A buffers allocator server.
  • -
  • A disk driver server.
  • -
  • A file system server.
  • -
  • One or more client threads.
  • -
-

Example:
-
-

-
-inline_dotgraph_10.dot - -
-


-
- Note that the threads should not exchange complex messages but just pointers to data structures in order to optimize the performance. Also note that a thread can be both client and server at the same time, the FS service in the previous scenario as example.

-

-Threads sharing data

-

This is the most common scenario, several threads have access to both their private data and shared data. Synchronization happens with one of the mechanisms described in the Mutual Exclusion guide article.
-

-

-Mixed

-

All the above approaches can be freely mixed in a single application but usually I prefer to choose a way and consistently design the system around it. The OS is a toolbox that offers a lot of tools but you don't have to use them all necessarily.

-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_eclipse.html b/ChibiOS_2.0.8/docs/html/article_eclipse.html deleted file mode 100644 index d85a60c..0000000 --- a/ChibiOS_2.0.8/docs/html/article_eclipse.html +++ /dev/null @@ -1,143 +0,0 @@ - - -ChibiOS/RT: Setting up a free embedded IDE - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Setting up a free embedded IDE

-
-
-

Free advanced embedded IDE for ChibiOS/RT. details This article will explain how to setup a free toolchain for use with ChibiOS/RT and general embedded development.
- The guide is meant mainly for Windows users but notes about Linux and MAC OSX are present where the setup differs, mostly the toolchain is exactly the same.

-

What this guide does not cover

-

We will not enter in details of common system tasks like and not limited to:

-
    -
  • Installing applications (unless a special procedure is required).
  • -
  • Creating desktop shortcuts.
  • -
  • Adding paths to the PATH variable.
  • -
  • Creating environment variables.
  • -
  • Any other normal PC usage task.
  • -
  • Use of the toolchain, the use is covered by the Embedded development using Eclipse article.
  • -
-

Article Index

- -

-Required Components

-

The first thing to do is to download all the required components, beginners should avoid the optional components initially:

-
    -
  • A JTAG probe supporting GDB and OpenOCD, a list of compatible devices is available on the OpenOCD home page, more exactly here.
  • -
  • ChibiOS/RT latest stable release.
  • -
  • Java runtime, you probably already have this installed.
  • -
  • Eclipse IDE for C/C++ Developers
  • -
  • YAGARTO ARM toolchain for Windows, note that you need both the compiler and the tools (make and binutils).
  • -
  • Zylin plugin for on-board debugging, see Zylin Plugin Installation section.
  • -
  • OpenOCD binaries for Windows, YAGARTO does not provide those anymore but you can download them from here. Linux users can try here.
  • -
  • Optional, MinGW compiler, needed if you want to compile, debug and run the simulator from within Eclipse. Linux users do not need this one because all Linux distributions include the native GCC.
  • -
  • Optional, Doxygen, it is only required if you want to generate documentation from source files.
  • -
  • Optional, Graphwiz, it is only required if you want to generate diagrams within documentation from source files.
  • -
  • Optional, Eclox, it is only required if you want to generate documentation from source files from within Eclipse.
  • -
-

-ChibiOS/RT Installation

-

Just unzip it into a directory in your home folder, Windows users may consider c:\projects\chibios. It is strongly suggested to not put version numbers into the ChibiOS/RT directory name because Eclipse workspaces have absolute paths inside and you don't want to setup everything again each time a new ChibiOS/RT version is released, use plain "chibios".

-

-GCC ARM Compiler Installation

-

Simply follow the YAGARTO installation guide. Linux/MACOS users have several other options:

-
    -
  • Download the latest CodeSourcery free Linux package.
  • -
  • Build it yourself, Liam recommended a build script here, it looks interesting.
  • -
-

Make sure that the compiler binaries directory is listed in the PATH variable or Eclipse would not be able to locate it.

-

-Eclipse Installation

-

Eclipse is distributed into a compressed archive, there is no installation procedure:

-
    -
  • Verify if you have Java installed, if not install the runtime. You may verify this using the command: "java -version". Make sure you have at least version 1.6.
  • -
  • Create an eclipse directory in your home and unpack the archive there. Windows users may unpack it into c:\program files\eclipse.
  • -
  • Create a desktop shortcut or other way to launch the Eclipse executable easily.
  • -
  • Launch Eclipse.
  • -
  • Eclipse will ask you a directory for its initial workspace, make it point to the ChibiOS/RT root directory (you may have as many workspaces you want, keep this for later), make sure to select the check box or it will ask you again each time.
    -
    -
    -tool001.jpg -
    -
    -
  • -
  • Now you should see the welcome screen, close it and you will be in the normal C/C++ perspective.
  • -
  • Unselect "Project->Build Automatically" unless you like insanity.
  • -
  • Disable the "usage collector" in "Window->Preferences->Usage_Data_Collector" by unselecting "Enable - capture".
  • -
  • If you are behind a proxy or firewall (corporate users usually are) configure the correct parameters in "Window->Preferences->General->Network_Connections".
  • -
  • Let Eclipse auto update to the latest version "Help->Check_for_Updates".
  • -
-

-Zylin Plugin Installation

-

Eclipse requires an hardware debugger component in order to perform on board execution and debug.

-
    -
  • Open Eclipse, then "Help->Install_New_Software...".
  • -
  • Press the "Add..." button and put http://opensource.zylin.com/zylincdt into the location field, then press OK. The Zylin plugin will appear in the available plugins view, select and install it.
    -
    -
    -tool002.jpg -
    -
  • -
-

-OpenOCD Installation

-

Windows users just have to use the installer. Linux user should follow the normal installation procedure for deb or rpm packages, of course it is also possible to build it from the source code.

-

-Doxygen Installation

-

Just use the installer, Linux users probably have Doxygen already available from the repositories. Make sure that the Doxygen binaries directory is listed in the PATH variable or Eclipse would not be able to locate it.

-

-Graphviz Installation

-

Just use the installer, Linux users probably have Graphviz already available from the repositories. Make sure that the Graphviz binaries directory is listed in the PATH variable or Doxygen would not be able to locate it.

-

-Eclox Installation

-

Use the same installation steps used for the Zylin plugin except use http://download.gna.org/eclox/update as URL. Install "Eclox" not "Eclox - Hot". After installing Eclox you will be able to compile Doxygen documentation using the button with the blue @ inside.

-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_eclipse2.html b/ChibiOS_2.0.8/docs/html/article_eclipse2.html deleted file mode 100644 index 47ef6ed..0000000 --- a/ChibiOS_2.0.8/docs/html/article_eclipse2.html +++ /dev/null @@ -1,229 +0,0 @@ - - -ChibiOS/RT: Embedded development using Eclipse - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Embedded development using Eclipse

-
-
-

Compiling and debugging ChibiOS/RT applications using Eclipse.

-

This article will explain how to use an Eclipse based toolchain (see Setting up a free embedded IDE) to develop ChibiOS/RT based applications. This guide will allow you to:

-
    -
  • Importing ChibiOS/RT demos into the Eclipse environment.
  • -
  • Edit and reformat your source code.
  • -
  • Compile and examine errors and warnings.
  • -
  • Upload your program on the target board.
  • -
  • Debug your code on the target board both in high level language and assembler.
  • -
  • Develop embedded applications with or without ChibiOS/RT.
  • -
-

What this guide does not cover

-

This guide assumes knowledge in following areas:

-
    -
  • OpenOCD setup is not covered by this guide because the setup changes depending on the JTAG probe used, the target MCU and also the target board. The guide will show the setup for a specific JTAG probe and a specific target, a valuable source for the OpenOCD setup is the dedicated forum, most questions you may have about OpenOCD have most likely already been answered there.
  • -
  • Hardware setup.
  • -
-

In general this guide is not a replacement for the Eclipse, GCC, Make, binutils, newlib, GDB, OpenOCD user manuals, the guide simply aims to give you a faster start.

-

Article Index

- -

-Required Components

-

This guide requires:

-
    -
  • An Eclipse/GCC/OpenOCD based toolchain, as example the one described in the article Setting up a free embedded IDE.
  • -
  • An Olimex ARM-USB-OCD JTAG probe, this guide applies to any other ARM JTAG probe as long it is supported by OpenOCD.
  • -
  • An Olimex STM32-P103 target board, this guide applies to any other ARM target except for the OpenOCD setup part.
  • -
  • A terminal emulator for capturing the board serial output, Windows users may use Hyper Terminal, Linux and MAC OS-X users may use CuteCom. All ChibiOS/RT demos generate on the serial port a test report when a button on the target board is pressed, other demos may activate a command shell on the serial port, in both cases a terminal emulator is required.
  • -
-

-Importing existing ChibiOS/RT demos into Eclipse

-

The first step is to import a project into the Eclipse environment. ChibiOS/RT demos do not include Eclipse project files but just a normal Makefile. Eclipse is able to import a Makefile project and create its own project file so this is not a problem. This is how it is done:

-
    -
  • Open you Eclipse environment and select the workspace created into the ChibiOS/RT project directory.
  • -
  • From within Eclipse select "File->New->C_Project", a dialog box will show.
  • -
  • Select "Makefile_project->Empty_Project" in the "Project type:" box.
  • -
  • Select "-- Other Toolchain --" in the "Toolchains:" box.
  • -
  • Unselect the "Use default location" check box.
  • -
  • Select the demo directory using the "Browse..." button. Something like "C:\Projects\ChibiOS-RT\demos\ARMCM3-STM32F103-GCC" will appear in the "Location:" box.
  • -
  • In the project name box put the same name of the directory containing the demo, ARMCM3-STM32F103-GCC in this example.
    -
    -
    -eclipse003.jpg -
    -
    -
  • -
  • Press the "Finish" button and the project will be created and shown in the "Project Explorer".
  • -
  • Right click on the imported project and select "Index->Rebuild", this will make Eclipse build its internal symbols database.
  • -
  • Repeat the above steps for each ChibiOS/RT demo you want to import in Eclipse, all the demos that have a makefile can be imported.
  • -
-

-Creating a new ChibiOS/RT application

-

If you want to create a new application it is recommended that you create a Makefile project first then you can import it into eclipse using the above procedure. Makefile projects have the advantage that can be compiled everywhere even without Eclipse. Creation steps:

-
    -
  • Create your own development directory under the ChibiOS/RT installation directory, as example "chibios/myprojects".
  • -
  • Copy an existing demo, of course choose a demo using your same target, under the new directory and rename it, as example "chibios/myprojects/myapplication".
  • -
  • Customize the Makefile if needed, usually you just need to do this if your application is composed by more than one source file. You may also want to remove the ChibiOS/RT test code from your application.
  • -
  • Once your makefile is ready, import the project under the Eclipse workspace using the procedure described in Importing existing ChibiOS/RT demos into Eclipse.
  • -
-

-Compiling and Cleaning applications

-

Once imported, an application can be compiled by using the "Build All" in the toolbar or by right clicking on the project and selecting "Build - Project". In order to clean a project (removing all the temporary and binary files) right click on the project and select "Clean Project".
-
-

-
-eclipse004.jpg -
-


- The compilation result is visible as a complete log in the "Console" window, the detail of all errors an warnings is available in the "Problems" window.
-
-

-
-eclipse005.jpg -
-


- The build process produces the binary files specified in the Makefile, all the ChibiOS/RT demos produce binary files named ch.elf, ch.bin and/or ch.hex. The image must be loaded on the target board in order to execute it. The build process usually creates also some other useful files containing details about the built application (usually named ch.map and ch.dmp).

-

-Preparing for Debug

-

In order to debug your application a debug configuration must be created. The configuration instructs GDB (the source debugger used by Eclipse) on how to load the image, load the symbols and place the initial breakpoint in the make function. Note that GDB performs its function by connecting to a "GDB server", the DGB server implements the low level communication with the target device through the JTAG probe. In our scenario the GDB server functionality is performed by OpenOCD, this mean that OpenOCD must be running while performing a debug session within Eclipse.

-

-Creating a GDB Debug Configuration

-

A target specific debug configuration is required in order to:

-
    -
  • Establish a connection with the GDB server.
  • -
  • Stop and reset the target.
  • -
  • Upload the binary code in Flash or RAM.
  • -
  • Set an initial breakpoint in the main function.
  • -
  • Start the target (which will immediately stop on the breakpoint).
  • -
-

The first thing to do is to open the "Debug Configurations..." dialog:
-
-

-
-eclipse006.jpg -
-


- The configuration dialog will appear, we must create a native Zylin configuration:
-
-

-
-eclipse007.jpg -
-


- Now we must give the configuration a name, "ARMCM3-STM32F103-GCC (flash and - run)" in this example, then setup the various configuration pages as follow:
-
- The "Main" tab:

-
-eclipse008.jpg -
-


-
- The "Debugger" tab:

-
-eclipse009.jpg -
-


-
- The "Commands" tab:

-
-eclipse010.jpg -
-


- Note that the "Commands" tab contains the part that changes depending on the target. The complete commands sequence (it is not fully visible in the image) for STM32 is:

-
 monitor soft_reset_halt
- monitor wait_halt
- monitor poll
- monitor flash probe 0
- monitor stm32x mass_erase 0
- monitor flash write_bank 0 ch.bin 0
- monitor soft_reset_halt
- symbol-file ch.elf
- thbreak main
- continue
-


-
- The "Common" tab:

-
-eclipse011.jpg -
-


- Now the debug configuration is complete.

-

-Configuring and running OpenOCD

-

OpenOCD must be run, with appropriate parameters, before starting your debug session. Please refer to the OpenOCD documentation in order to properly launch it for your target.
-**To be completed**

-

-Debugging

-

Now we are ready to debug an application on the target. Note that Eclipse have a mechanism called "Perspectives", you edit and compile your source code while you are in the "C/C++ perspective" while the debugging is performed in the "Debug perspective". You can switch perspective at any time, even while there is an active debug session. If you install more of the many Eclipse extension plugins (there are thousands) you may have even more perspectives available.

-

-Starting a Debug Session

-

In order to start a debugging session first make sure that OpenOCD is running then press the drop down menu on the right side of the debug icon in the toolbar (the small green bug) and select your debug configuration (we created just one but you may have multiple debug configurations in your project, as example I usually create another debug configuration that just starts the target without uploading the code).
-
-

-
-eclipse012.jpg -
-


- The debugger will be initialized, you will see the operation in progress on the console then Eclipse will switch to the debug perspective and you will see your program stopped on the default breakpoint in the main function.
-
-

-
-eclipse013.jpg -
-


- From there you can perform all the usual debugging tasks, set breakpoints, single step execution, variables, memory and registers inspection etc. Please refer to the Eclipse documentation about those "normal" operations. Note that if the debugging start procedure hangs then there is probably an error in your configuration or problems with the target, read the console log and/or the OpenOCD output in order to understand where the problem is.

-

-Stopping a Debug Session

-

From the debug perspective press the stop button (small red square) in the debug window, the target will be stopped and you may both return to the C/C++ perspective or start it again.

-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_events.html b/ChibiOS_2.0.8/docs/html/article_events.html deleted file mode 100644 index 02127f8..0000000 --- a/ChibiOS_2.0.8/docs/html/article_events.html +++ /dev/null @@ -1,73 +0,0 @@ - - -ChibiOS/RT: Events Explained - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Events Explained

-
-
-

Events are an important feature in ChibiOS/RT, most device drivers generate events in order to notify the application that something happened at the I/O level.
- While event flags are not something unknown in other operating systems, their peculiar implementation in ChibiOS/RT requires a more in depth explanation.
- Lets start with the events related terminology:

-
    -
  • Event Source, an EventSource is a system object that can be broadcasted asynchronously in response of a system event, as example, when the CAN driver receives a packet from the CAN bus it broadcasts an event source in order to inform the registered threads that a packet has just arrived.
  • -
  • Broadcast, the operation performed on an event source in order to inform the registered threads that an event just occurred. Broadcasting can happened both in interrupt handlers and in threads.
  • -
  • Event Listener, a system object that associates a Thread object to an event source. The process of associating a Thread to an EventSource using an EventListener is called registration.
  • -
  • Registration, action performed by a thread in order to be informed of events from a specific event source. Of course a thread can be registered on more than one event source by using multiple EventListener objects. Threads can also unregister from an event source.
  • -
  • Pend, each thread has a mask of pending events. The broadcast operation pends an event mask on all the registered threads.
  • -
  • Wait, synchronous operation performed by a thread in order to wait a specific combination of events. The API offers a variety of wait functions, please refer to the events API documentation.
  • -
-

Note that events are asynchronously generated, as example in an interrupt handler, but are synchronously served.

-

Events related data structures

-

The following diagram explains the relationship between an event source, its list of event listeners and the registered threads.

-
-inline_dotgraph_11.dot - -
-

Note that each event listener has a different bit mask to be pended on its associated thread when the event source is broadcasted, this means that each thread can define its own event identifiers independently. A broadcast operation can also pend more than one bit on the registered threads.
- The threads have a variety of wait primitives, they can wait for one or more event flags to become pending, and can also specify AND/OR conditions, as example a thread can wait for any event to become pending or wait for all the specified events to become pending.
- The field p_epending is the mask of the currently pending events, the field p_ewmask is the mask of the events the thread is interested on in that moment (AND or OR condition depending on the invoked wait API).

-

Use Scenarios

-

Events are best used when one of more of the following conditions are required:

-
    -
  • Having to wait on multiple conditions, Events are the only mechanism that easily allow that.
  • -
  • Synchronous response to one or more asynchronous events.
  • -
  • Single threaded applications working in a event driver environment (but events are not limited to single threaded applications).
  • -
-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_integrationguide.html b/ChibiOS_2.0.8/docs/html/article_integrationguide.html deleted file mode 100644 index 89de6d6..0000000 --- a/ChibiOS_2.0.8/docs/html/article_integrationguide.html +++ /dev/null @@ -1,94 +0,0 @@ - - -ChibiOS/RT: Integration Guide - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Integration Guide

-
-
-

All the delivered ChibiOS/RT demos are stand alone applications so if you just start your application from an existing demo there isn't any integration effort, you are simply using the existing makefiles, the default startup files etc, minimal effort.
- The matter is very different if you are going to integrate the OS into a different runtime framework or if you want to use a different build system, in that case you have the problem to integrate the OS source code into your application.

-

What this guide does not cover

-

This guide has a limited scope, the following topics are handled elsewhere:

-
    -
  • Porting the OS to different architectures or different compilers is not covered in this guide, see Porting ChibiOS/RT for Dummies instead.
  • -
  • This guide does not describe any specific environment or development tool, it is assumed you already know in detail the environment you want to work with.
  • -
-

Article Index

- -

-Integrating the Kernel

-

This section covers the scenario where you want to use the ChibiOS/RT kernel into an existing application. In order to accomplish this you need to import in your project two components:

-
    -
  • The portable kernel.
  • -
  • The port layer for your microcontroller.
  • -
-

See the Architecture for more details. You need to add the following files to your build process:

-
    -
  • All the source files contained under ./os/kernel/src, note that you should add all of them even if you don't plan to use some of the subsystems. Unused subsystems can be excluded from the kernel configuration file chconf.h.
  • -
  • All the source files contained under ./os/ports/<compiler>/<architecture>. Note that those could be both C source files and assembler source files and that some architectures have an extra directories layer containing files required for a specific platform.
  • -
-

You also need to add to the compiler options the following paths for searching header files:

-
    -
  • The portable kernel headers ./os/kernel/include.
  • -
  • The port layer headers ./os/ports/<compiler>/<architecture>.
  • -
-

-Integrating the HAL

-

If, in addition to the kernel as described in the previous section, you also need to integrate the HAL into your application you also need to import the following components:

-
    -
  • HAL portable files.
  • -
  • Platform specific files.
  • -
-

See the Architecture for more details. You need to add the following files to your build process:

-
    -
  • All the source files contained under ./os/hal/src, note that you should add all of them even if you don't plan to use some of the subsystems. Unused drivers can be excluded from the HAL configuration file halconf.h.
  • -
  • All the source files contained under ./os/hal/platforms/<platform>.
  • -
  • All the source files contained under ./boards/<board_model>.
  • -
-

You also need to add to the compiler options the following paths for searching header files:

-
    -
  • The portable HAL headers ./os/hal/include.
  • -
  • The platform layer headers ./os/hal/platforms/<platform>.
  • -
  • The board description headers ./boards/<board_model>.
  • -
-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_interrupts.html b/ChibiOS_2.0.8/docs/html/article_interrupts.html deleted file mode 100644 index 6b5e942..0000000 --- a/ChibiOS_2.0.8/docs/html/article_interrupts.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: How to write interrupt handlers - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

How to write interrupt handlers

-
-
-

Since version 1.1.0 ChibiOS/RT offers a cross-platform method for writing interrupt handlers. Port-related and compiler-related details are encapsulated within standard system macros.

-

Writing Regular Interrupt handlers

-

A Regular Interrupts handler (see Interrupt Classes) must be written using the following general form:

-
CH_IRQ_HANDLER(myIRQ) {
-  CH_IRQ_PROLOGUE();
-  
-  // IRQ handling code, preemptable if the architecture supports it.
-  
-  chSysLockFromIsr();
-  // Invocation of some I-Class system APIs, never preemptable.
-  chSysUnlockFromIsr();
-  
-  // More IRQ handling code, again preemptable.
-
-  CH_IRQ_EPILOGUE();
-}
-

Writing Fast Interrupt handlers

-

In those architectures (ARM7TDMI and ARM Cortex-Mx) supporting Fast Interrupts (see Interrupt Classes) handlers must be written using the following general form:

-
CH_FAST_IRQ_HANDLER(myIRQ) {
-
-  // Fast IRQ handling code, preemptable if the architecture supports it.
-  // The invocation of any API is forbidden here because fast interrupt
-  // handlers can preempt the kernel even within its critical zones in
-  // order to minimize latency.
-}
-

Handlers naming

-

A note about the handler name "myIRQ", in some ports it must be a vector number rather than a function name, it could also be a name from within a predefined set, see the notes about the various ports.

-

Important Notes

-
    -
  • There is an important application note about ARM7 interrupt handlers, please read about it in the ARM7 port section: ARM7 Interrupt Handlers
  • -
-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_jitter.html b/ChibiOS_2.0.8/docs/html/article_jitter.html deleted file mode 100644 index aae22f3..0000000 --- a/ChibiOS_2.0.8/docs/html/article_jitter.html +++ /dev/null @@ -1,87 +0,0 @@ - - -ChibiOS/RT: Response Time and Jitter - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Response Time and Jitter

-
-
-

Response time jitter is one of the most sneaky source of problems when designing a real time system. When using a RTOS like ChibiOS/RT one must be aware of what the jitter is and how it can affect the performance of the system. A good place to start is this Wikipedia article.

-

Interrupt handlers execution time

-

The total execution time of an interrupt handler includes:

-
    -
  • Hardware interrupts latency, this parameter is pretty much fixed and characteristic of the system.
  • -
  • Fixed handler overhead, as example registers stacking/unstacking.
  • -
  • Interrupt specific handler code execution time, as example, in a serial driver, this is the time used by the handler to transfer data from/to the UART.
  • -
  • OS overhead. Any operating system requires to run some extra code in interrupt handlers in order to handle correct preemption and Context Switching.
  • -
-

Interrupt Response Time

-

The Interrupt Response Time is the time from an interrupt event and the execution of the handler code. Unfortunately this time is not constant in most cases, see the following graph:

-
-inline_dotgraph_12.dot - -
-

In this scenario the jitter (busy state) is represented by the sum of:

-
    -
  • Higher or equal priority interrupt handlers execution time combined. This time can go from zero to the maximum randomly. This value can be guaranteed to be zero only if the interrupt has the highest priority in the system.
  • -
  • Highest execution time among lower priority handlers. This value is zero on those architectures (Cortex-M3 as example) where interrupt handlers can be preempted by higher priority sources.
  • -
  • Longest time in a kernel lock zone that can delay interrupt servicing. This value is zero for fast interrupt sources, see System States.
  • -
-

Threads Flyback Time

-

This is the time between an event, as example an interrupt, and the execution of the thread that will process it. Imagine the following graph as the continuation of the previous one.

-
-inline_dotgraph_13.dot - -
-

In this scenario all the jitter sources previously discussed are also present and there is the added jitter caused by the activity of the higher priority threads.

-

Jitter Mitigation

-

For each of the previously described jitter sources there are possible mitigation actions.

-

Interrupt handlers optimization

-

An obvious mitigation action is to optimize the interrupt handler code as much as possible for speed.
- Complex actions should never be performed in interrupt handlers. An handler should just serve the interrupt and wakeup a dedicated thread in order to handle the bulk of the work.
- Another possible mitigation action is to evaluate if a specific interrupt handler really needs to interact with the OS, if the handler uses full stand-alone code then it is possible to remove the OS related overhead.
-

-

Kernel lock zones

-

The OS kernel protects some critical internal data structure by disabling (fully in simple architecture, to some extent in more advanced microcontrollers) the interrupt sources. Because of this the kernel itself is a jitter cause, a good OS design minimizes the jitter generated by the kernel by using adequate data structures, algorithms and coding practices.
- A good OS design is not the whole story, some OS primitives may generate more or less jitter depending on the system state, as example the maximum number of threads on a certain queue, the maximum number of nested mutexes and so on. Some algorithms employed internally can have constant execution time but others may have linear execution time or be even more complex.

-

Higher priority threads activity

-

At thread level, the response time is affected by the interrupt-related jitter but mainly by the activity of the higher priority threads and contention on protected resources.
- It is possible to improve the system overall response time and reduce jitter by carefully assigning priorities to the various threads and carefully designing mutual exclusion zones.
- The use of the proper synchronization mechanism (semaphores, mutexes, events, messages and so on) also helps to improve the overall system performance. The use of the Priority Inheritance algorithm implemented in the mutexes subsystem can improve the overall response time and reduce jitter but it is not a magic wand, a proper system design comes first.

-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_lifecycle.html b/ChibiOS_2.0.8/docs/html/article_lifecycle.html deleted file mode 100644 index 4ab9f00..0000000 --- a/ChibiOS_2.0.8/docs/html/article_lifecycle.html +++ /dev/null @@ -1,60 +0,0 @@ - - -ChibiOS/RT: Threads Lifecycle - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Threads Lifecycle

-
-
-

In ChibiOS/RT threads are divided in two categories:

-
    -
  • Static threads. The memory used for static threads is allocated at compile time so static threads are always there, there is no management to be done.
  • -
  • Dynamic threads. Dynamic threads are allocated at runtime from one of the available allocators (see Heaps, Memory Pools).
  • -
-

Dynamic threads create the problem of who is responsible of releasing their memory because a thread cannot dispose its own memory.
- This is handled in ChibiOS/RT through the mechanism of "thread references", When the CH_USE_DYNAMIC option is enabled the threads become objects with a reference counter. The memory of a thread, if dynamic, is freed when the last reference to the thread is released while the thread is in its THD_STATE_FINAL state.
- The following diagram explains the mechanism:

-
-inline_dotgraph_14.dot - -
-


- As you can see the easiest way to ensure that the memory is released is to make another thread perform a chThdWait() on the dynamic thread.
- If all the references to the threads are released while the thread is still alive then the thread goes in a "detached" state and its memory cannot be recovered unless there is a dedicated task in the system that scans the threads through the Registry subsystem, scanning the registry has the side effect to release the zombies (detached and then terminated threads).

-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_manage_memory.html b/ChibiOS_2.0.8/docs/html/article_manage_memory.html deleted file mode 100644 index 649369b..0000000 --- a/ChibiOS_2.0.8/docs/html/article_manage_memory.html +++ /dev/null @@ -1,80 +0,0 @@ - - -ChibiOS/RT: How to manage memory - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

How to manage memory

-
-
-

ChibiOS/RT is a static kernel so you don't need to manage memory at all if your application doesn't really require it. This doesn't mean that the OS is unable to manage memory but just that memory management is an optional part of the whole.
- The OS offers three distinct ways to manage memory, each one with its weaknesses and strengths:

- -

The three mechanisms are able to coexist and are well integrated, as example the heap allocator uses the core memory manager in order to get more memory blocks, memory pools can optionally do the same thing.

-

The three subsystems

-

This is a small comparison table regarding the three subsystems, C-runtime and static objects are thrown in there for comparison:
-
-

- - - - - - - - - - - - - -
Subsystem Free capable Constant time Safe From IRQ Notes
Static Objects N/A N/A YES YES Preferred solution for safety applications.
Core Memory Manager NO YES YES YES Fast and safe but unable to free allocated memory.
Heap Allocator YES NO NO NO Unsafe because fragmentation and not constant time, cannot be used from IRQ handlers.
Memory Pools YES YES YES YES Fast and safe but it can handle fixed size objects only, you may have multiple memory pools however.
C-Runtime YES NO NO NO Unsafe because fragmentation, not constant time, cannot be used from IRQ handlers and not thread safe. The C runtime must also be modified in order to work with the other allocators.
-


- When designing a system it is recommended to proceed as follow:

-
    -
  1. Use static objects and initializers whenever possible.
  2. -
  3. Where dynamic allocation is required without have to free the allocated memory then use the Core Memory Manager allocation APIs.
  4. -
  5. Where dynamic allocation is required evaluate if one or more memory pools can be used.
  6. -
  7. If all the above points do not satisfy your requirements then use the heap allocator.
  8. -
  9. Consider the C-runtime allocator only for legacy code.
  10. -
-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_mutual_exclusion.html b/ChibiOS_2.0.8/docs/html/article_mutual_exclusion.html deleted file mode 100644 index fb08c95..0000000 --- a/ChibiOS_2.0.8/docs/html/article_mutual_exclusion.html +++ /dev/null @@ -1,174 +0,0 @@ - - -ChibiOS/RT: Mutual Exclusion guide - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Mutual Exclusion guide

-
-
-

The most common problem when writing multithreaded code is the synchronization on the shared resources/services.
- ChibiOS/RT offers a rich variety of mechanisms that apparently solve the same problem. I wrote apparently because each mechanism has its pro and cons. This article will introduce the various mechanisms and the explain the right scenarios for each one.

-

Basics

-

Some of the concepts mentioned in this article can be found in the following Wikipedia articles:

- -

Mutual exclusion by System Locks

-

This is the lowest level mechanism, the system is locked by invoking the chSysLock() API and then unlocked by invoking chSysUnlock().
- The implementation is architecture dependent but it is guaranteed to, at least, disable the interrupt sources with hardware priority below or equal the kernel level.

-

Advantages

-
    -
  • It is the lightest as execution time, often a lock or unlock becomes just a single inlined assembler instruction.
  • -
  • It ensures mutual exclusion among threads but also interrupt handling code.
  • -
  • The implementation would ensure mutual exclusion even on multicore architectures where multiple hardware threads are present.
  • -
-

Disadvantages

-
    -
  • Disabling interrupts for a long period of time can deteriorate the overall system response time and/or introduce jitter.
  • -
-

When use Locks

-
    -
  • When mutual exclusion with interrupt handlers is required.
  • -
  • When the operation within the lock zone is very simple and has finite time.
  • -
-

Example

-
 ...
- chSysLock();
- /* Protected code */
- chSysUnlock();
- ...
-

Mutual exclusion by Semaphores

-

In ChibiOS/RT the counting semaphores are mainly meant as a synchronization mechanism between interrupt handlers and high level code running at thread level. Usually a thread waits on a semaphore that is signaled asynchronously by an interrupt handler.
- The semaphores can, however, be used as simple mutexes by initializing the semaphore counter to one.

-

Advantages

-
    -
  • The semaphores code is "already there" if you use the I/O queues or mailboxes and you don't want to enable the mutexes too in order to save space.
  • -
  • Semaphores are lighter than mutexes because their queues are FIFO ordered and do not have any overhead caused by the priority inheritance algorithm.
  • -
  • A semaphore takes less RAM than a mutex (12 vs 16 bytes on 32 bit architectures).
  • -
-

Disadvantages

-
    -
  • Semaphore queues are FIFO ordered by default, an option exist to make them priority ordered but this can impact I/O performance because semaphores are used in I/O queues.
  • -
  • Semaphores do not implement the Priority Inheritance algorithm.
  • -
-

When use Semaphores

-
    -
  • When you don't need queuing by priority nor the Priority Inheritance algorithm.
  • -
  • When RAM/ROM space is scarce.
  • -
-

Example

-
 static Semaphore sem; /* Semaphore declaration */
- ...
- chSemInit(&sem, 1); /* Semaphore initialization before use */
- ...
- chSemWait(&sem);
- /* Protected code */
- chSemSignal(&sem);
- ...
-

Mutual exclusion by Mutexes

-

The mutexes are the mechanism intended as the most general solution for Mutual Exclusion.

-

Advantages

-
    -
  • Mutexes implement the Priority Inheritance algorithm that is an important tool in reducing jitter and improve overall system response time (it is not a magic solution, just another tool for the system designer).
  • -
-

Disadvantages

-
    -
  • Heaviest among all the possible choices. The Priority Inheritance method is efficiently implemented but nothing is more efficient than no code at all.
  • -
-

When use Mutexes

-
    -
  • When you are designing a very complex system with hard realtime requirements.
  • -
-

Example

-
 static Mutex mtx; /* Mutex declaration */
- ...
- chMtxInit(&mtx); /* Mutex initialization before use */
- ...
- chMtxLock(&mtx);
- /* Protected code */
- chMtxUnlock();
- ...
-

Mutual exclusion by priority boost

-

Another way to implement mutual exclusion is to boost the thread priority to a level higher than all of the threads competing for a certain resource. This solution effectively implements an Immediate Priority Ceiling algorithm.

-

Advantages

-
    -
  • Almost free as code size, you need no semaphores nor mutexes.
  • -
  • No RAM overhead.
  • -
  • Fast execution, priority change is a quick operation under ChibiOS/RT.
  • -
  • The Priority Ceiling protocol can help mitigate potential Priority Inversion problems.
  • -
-

Disadvantages

-
    -
  • Makes the design more complicated because priorities must be assigned to not just threads but also assigned to the resources to be protected.
  • -
  • Locking a resource affects all the threads with lower priority even if not interested to the resource.
  • -
  • All the threads that can access the resource must have lower priority than the resource itself.
  • -
  • The mechanism is not easy to understand in the code unless it is clearly documented.
  • -
  • This method does not work in on multicore architectures where multiple hardware threads are present.
  • -
  • Only useful in very simple applications.
  • -
-

Example

-
 /* Priority assigned to the resource, threads must have lower
-    priority than this.*/
- #define AAA_RESOURCE_PRIORITY NORMALPRIO+10
- ...
- /* Locks the resources AAA.*/
- tprio_t aaa_old_prio = chThdSetPriority(AAA_RESOURCE_PRIORITY);
- /* Accessing resource AAA */
- chThdSetPriority(aaa_old_prio); /* Unlocks AAA.*/
- ...
-

Mutual exclusion by message passing

-

Another method is to make a single dedicated thread execute the critical code and make it work as a messages server. The other threads can request the service to the server by sending a properly formatted message and then wait for the answer with the result.
- This method is very useful when integrating into the system components not designed to be reentrant or to be executed in a multithreaded environment, as example a 3rd part file system or a networking protocol stack.

-

Advantages

-
    -
  • It is possible to encapsulate very complex logic without worry about about concurrent accesses.
  • -
  • If the encapsulate code uses a large stack area only the server thread have to allocate enough RAM, the client threads save RAM by just requesting the service to the server.
  • -
  • Clean system architecture.
  • -
  • This method also implements a form of Priority Ceiling. The ceiling is the priority of the server thread itself.
  • -
-

Disadvantages

-
    -
  • More complex implementation, a protocol must be created between clients and server.
  • -
  • Two context switches are required for each request to the server (but ChibiOSRT is very efficient at that).
  • -
  • Requires a dedicated thread as server.
  • -
-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_portguide.html b/ChibiOS_2.0.8/docs/html/article_portguide.html deleted file mode 100644 index c0f348b..0000000 --- a/ChibiOS_2.0.8/docs/html/article_portguide.html +++ /dev/null @@ -1,95 +0,0 @@ - - -ChibiOS/RT: Porting ChibiOS/RT for Dummies - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Porting ChibiOS/RT for Dummies

-
-
-

Porting the operating system on a new platform is one of the most common tasks. The difficulty can range from easy to very difficult depending on several factors.
- We can divide in problem in several classes of progressively increasing difficulty:

- -

Another kind of port type is porting to another compiler and this is an added complexity level on the above classes. The kernel itself is portable but the port-specific code usually contains compiler specific extensions to the C language and the asm files syntax is almost never compatible.

-

-Porting the OS to a new board

-

This is the easiest port type, the scenario is that the specific microcontroller is already supported and a demo exists. This scenario also applies when porting the OS on a custom hardware using a supported microcontroller. This task can be easily performed with the following steps:

-
    -
  1. Create a new directory under ./boards and copy inside the board files from another board using the same microcontroller.
  2. -
  3. Customize the board files:
      -
    • board.h This file contains the I/O pins setup for the uC, it may also contain other board-dependent settings, as example, the clock frequency. Customize this file depending on your target hardware.
    • -
    • board.c This file contains the initialization code, it is possible you just need to customize board.h and not this file. If you have some hardware specific initialization code then put it here.
    • -
    -
  4. -
  5. Create a new directory under the ChibiOS/RT installation directory: ./projects/<my_app_name>
  6. -
  7. Copy an existing demo code under the newly created directory.
  8. -
  9. Customize the demo:
      -
    • Makefile You may edit this file in order to remove the test related sources and/or add you application source files.
    • -
    • main.c It contains the demo simple code, clean it and write your own main() function here, use this file just as a template.
    • -
    -
  10. -
  11. Compile your application and debug.
  12. -
-

-Porting the OS to a closely related microcontroller

-

In this scenario all the above steps are required but an analysis must be performed to evaluate the differences between from the supported micro and the target micro. Often the micros just differ for the memory area sizes and a change to the linker script is enough (the file is usually named ch.ld). Chips having more or less peripherals, everything else being the same or compatible are not a problem also as long the timer and the serial peripherals used by the port do not change.
- If there are differences in the internal peripherals, as example non compatible interrupt controllers (this happens in the LPC2000 family) or differences in UARTS, timers etc then the port falls in the following category.

-

-Porting the OS to another microcontroller using the same core

-

This kind of port is required when a target microcontroller has the same core (a common example: ARM7) of a supported microcontroller but has differences in the internal peripherals.
- If this is your case proceed as follow:

-
    -
  1. Create a new directory under ./os/io/platforms and name it with the microcontroller name (or family name).
    - In case of the ARM-based microcontroller you also need to create a equally named directory under ./os/ports/<compiler>/<arch> and put there the microcontroller related files such as the vectors table, see the existing ports as example.
  2. -
  3. Copy into the newly created directory the most closely related existing chip port or the naked template files from ./os/io/templates.
  4. -
  5. Work out the differences in the drivers or implement them if you started from the templates.
  6. -
  7. Edit/create the documentation file platform.dox, this is required if you want to regenerate this documentation including your work.
  8. -
-

Usually this kind of port just requires a serial driver (and those are very similar each other) and some code for the interrupt controller (this one can be part of the core port, as example the Cortex-M3 has this as standard part of the core).
- When the chip port is completed created your application as seen in the previous sections.

-

-Porting the OS to a whole new architecture

-

This is the hardest scenario, the time required by core ports depends strongly by the target architecture complexity and the level of support you need for the architecture specific features.
- As a reference, the MSP430 port took me 2 hours and it worked at the first run, it can be a reference for simple architectures, the ARM Cortex-M3 was painful instead, the architecture enforces you to implement things in a very specific way and I spent 2 week to go through all the documentation and figure out the correct way to implement the port (you can see that the preemption context switch is done in a very peculiar way because the exceptions architecture).
- One thing is sure, port an OS to a new architecture is not an easy task and if you have the required experience for such an effort then probably you don't need any advice from me. Just follow the directory patterns and fill the OS template files, the hardest part is decide the correct and efficient way to implement the context switching.

-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_roundrobin.html b/ChibiOS_2.0.8/docs/html/article_roundrobin.html deleted file mode 100644 index 5aaff2f..0000000 --- a/ChibiOS_2.0.8/docs/html/article_roundrobin.html +++ /dev/null @@ -1,55 +0,0 @@ - - -ChibiOS/RT: Round Robin scheduling explained - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Round Robin scheduling explained

-
-
-

Unlike many other RTOSes, ChibiOS/RT supports multiple threads at the same priority level and schedules them using an aggressive round-robin strategy.
- The strategy is defined as aggressive because any scheduling event causes the round-robin threads to rotate.
- A round-robin rotation can happen because of the following events:

-
    -
  • The currently executed thread voluntarily invokes the chThdYield() API in order to allow the execution of another thread at the same priority level, if any.
  • -
  • The currently executed thread voluntarily goes into a sleep state (see Threads States), when the thread is awakened it goes behind any other thread at the same priority level.
  • -
  • The currently executed thread is preempted by an higher priority thread, the thread is reinserted in the ready list (see Scheduling) behind any other thread at the same priority level.
  • -
  • If the CH_TIME_QUANTUM configuration constant is set to a value greater than zero and if the specified time quantum expired and if a thread with equal priority is ready then the currently executing thread is automatically reinserted in the ready list behind any other thread at the same priority level.
  • -
-

As you can see the CH_TIME_QUANTUM setting is really useful only if there are threads at the same priority level that can run not preempted for long periods of time and that do not explicitly yield using chThdYield(). Because of this you should consider setting CH_TIME_QUANTUM to zero in your configuration file, this makes the kernel much faster and smaller and does not forbid the use of multiple threads at the same priority level.

-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_saveram.html b/ChibiOS_2.0.8/docs/html/article_saveram.html deleted file mode 100644 index f257f5a..0000000 --- a/ChibiOS_2.0.8/docs/html/article_saveram.html +++ /dev/null @@ -1,90 +0,0 @@ - - -ChibiOS/RT: Saving RAM by declaring thread functions "noreturn" - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Saving RAM by declaring thread functions "noreturn"

-
-
-

One of the problems, when writing embedded multi-threaded applications, is that the thread functions do save the registers in the function entry code even if the system does not require it, exiting such a function would terminate the thread so there is no need to preserve the register values. This can waste tens of bytes for each thread.
- Consider the following code:

-
#include <ch.h>
-
-static WORKING_AREA(waMyThread, 64);
-
-static t_msg MyThread(void *arg) {
-  while (!chThdShoudTerminate()) {
-    /* Do thread inner work */
-  }
-  return 1;
-}
-
-main() {
-  chSysInit();
-  ...
-  chThdCreateStatic(waMyThread, sizeof(waMyThread), NORMALPRIO, MyThread, NULL);
-  ...
-}
-

The resulting ASM code for the thread function would be something like this:

-
MyThread:
-        stmfd   sp!, {r4, r5, r6, lr}
-        ...
-        ldmfd   sp!, {r4, r5, r6, pc}
-

Being that function a thread there is no need to save those registers, in embedded applications often the RAM is a scarce resource. That space can be saved by modifying the code as follow, using some advanced GCC extensions:

-
#include <ch.h>
-
-static WORKING_AREA(waMyThread, 64);
-
-__attribute__((noreturn))
-static void MyThread(void *arg) {
-  while (!chThdShoudTerminate()) {
-    /* Do thread inner work */
-  }
-  chThdExit(1);
-}
-
-main() {
-  chSysInit();
-  ...
-  chThdCreateStatic(waMyThread, sizeof(waMyThread), NORMALPRIO,
-                    (tfunc_t)MyThread, NULL);
-  ...
-}
-

This will make GCC believe that the function cannot return and there is no need to save registers. The code will be a bit less readable and less portable on other compilers however.

-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_stacks.html b/ChibiOS_2.0.8/docs/html/article_stacks.html deleted file mode 100644 index 1d5dfe3..0000000 --- a/ChibiOS_2.0.8/docs/html/article_stacks.html +++ /dev/null @@ -1,86 +0,0 @@ - - -ChibiOS/RT: Stacks and stack sizes - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Stacks and stack sizes

-
-
-

In an RTOS like ChibiOS/RT there are several dedicated stacks, each stack has a dedicated RAM space that must have a correctly sized assigned area.

-

The stacks

-

There are several stacks in the systems, some are always present, some others are present only in some architectures:

-
    -
  • Main stack, this stack is used by the main() function and the thread that execute it. It is not a normal thread stack because it is initialized in the startup code and its size is defined in a port dependent way. Details are in the various ports documentation.
  • -
  • Interrupt Stack, some architectures have a dedicated interrupt stack. This is an important feature in a multithreaded environment, without a dedicated interrupt stack each thread has to reserve enough space, for interrupts servicing, within its own stack. This space, multiplied by the total threads number, can amount to a significant RAM overhead.
  • -
  • Thread Stack, each thread has a dedicated stack for its own execution and context switch.
  • -
  • Other Stacks, some architectures (ARM) can have other stacks but the OS does not directly use any of them.
  • -
-

Risks

-

The most critical thing when writing an embedded multithreaded application is to determine the correct stack size for main, threads and, when present, interrupts.
- Assigning too much space to a stack is a waste of RAM, assigning too little space leads to crashes or, worst scenario, hard to track instability.

-

Assigning the correct size

-

You may try to examine the asm listings in order to calculate the exact stack requirements but this requires much time, experience and patience.
- An alternative way is to use an interactive method. Follow this procedure for each thread in the system:

-
    -
  • Enable the following debug options in the kernel:
      -
    • CH_DBG_ENABLE_STACK_CHECK, this enables a stack check before any context switch. This option halts the system in chSysHalt() just before a stack overflow happens. The halt condition is caused by a stack overflow when the global variable panic_msg is set to NULL, normally it would point to a panic message.
    • -
    • CH_DBG_FILL_THREADS, this option fills the threads working area with an easily recognizable pattern (0x55).
    • -
    -
  • -
  • Assign a large and safe size to the thread stack, as example 256 bytes on 32 MCUs, 128 bytes on 8/16 bit MCUs. This is almost always too much for simple threads.
  • -
  • Run the application, if the application crashes or halts then increase the stack size and repeat (you know how to use the debugger right?).
  • -
  • Let the application run and make sure to trigger the thread in a way to make it follow most or all its code paths. If the application crashes or halts then increase the stack size and repeat.
  • -
  • Stop the application using the debugger and examine the thread working area (you know what a map file is, right?). You can see that the thread stack overwrote the fill pattern (0x55) from the top of the working area downward. You can estimate the excess stack by counting the untouched locations.
  • -
  • Trim down the stack size and repeat until the application still runs correctly and you have a decent margin in the stack.
  • -
  • Repeat for all the thread classes in the system.
  • -
  • Turn off the debug options.
  • -
  • Done.
  • -
-

Final Notes

-

Some useful info:

-
    -
  • Stack overflows are the most common problems source during development, when in trouble with crashes or anomalous behaviors always first verify stack sizes.
  • -
  • The required stack size can, and very often does change when changing compiler vendor, compiler version, compiler options, code type (ARM or THUMB as example).
  • -
  • Code compiled in THUMB mode uses more stack space compared to the same code compiled in ARM mode. In GCC this is related to lack of tail calls optimizations in THUMB mode, this is probably true also in other compilers.
  • -
  • Speed optimized code often requires less stack space compared to space optimized code. Be careful when changing optimizations.
  • -
  • The interrupts space overhead on the thread stacks (INT_REQUIRED_STACK defined in chcore.h) is included in the total working area size by the system macros THD_WA_SIZE() and WORKING_AREA().
    - The correct way to reserve space into the thread stacks for interrupts processing is to override the INT_REQUIRED_STACK default value. Architectures with a dedicated interrupt stack do not require changes to this value. Resizing of the global interrupt stack may be required instead.
  • -
  • Often is a good idea to have some extra space in stacks unless you are really starved on RAM. Anyway, it is best to optimize stack space at the very end of your development cycle.
  • -
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_stop_os.html b/ChibiOS_2.0.8/docs/html/article_stop_os.html deleted file mode 100644 index ce94cec..0000000 --- a/ChibiOS_2.0.8/docs/html/article_stop_os.html +++ /dev/null @@ -1,132 +0,0 @@ - - -ChibiOS/RT: How to cleanly stop the OS - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

How to cleanly stop the OS

-
-
-

Stopping the OS should not be normally required but there are scenarios where one might want the complete control over the system again. As example entering into a bootload mode, or invoking some flashing algorithm locked in ROM.
- ChibiOS/RT does not have a shutdown API and there is a reason for this, stopping the kernel would not be enough, a well defined operations sequence is required.
- The shutdown operation should always be implemented into the main() function because in that context the stack pointer is guaranteed to be in the area allocated by the startup code. Stopping from a thread would leave the stack pointer "somewhere".
- The shutdown sequence should include the following steps, some steps are optional and depend on the application:

-
    -
  • Safely stop critical threads. As example a thread that uses a File System should flush all the modified buffers to the persistent storage before terminating.
    - The system should be designed to request the thread termination using chThdTerminate() and then wait its termination using chThdWait(). This phase can be skipped for non-critical threads.
  • -
  • Invoke the xxxStop() method on all the active device drivers, this disables the interrupt sources used by the various peripherals. This is required in order to not have interrupts after the shutdown that may invoke OS primitives.
  • -
  • Invoke chSysDisable().
  • -
  • Stop the system timer whose service routine invokes chSysTimerHandlerI().
  • -
  • Disable any other interrupt source that may invoke OS APIs. In general all the interrupt sources that have handlers declared by using the CH_IRQ_HANDLER() macro.
  • -
  • Perform any application related de-initialization.
  • -
  • Invoke chSysEnable().
  • -
-

Now the OS is stopped and you can safely assume there are nothing going on under the hood. From here you can also restart the OS after finishing your critical operations using the following sequence:

-
    -
  • Invoke chSysDisable().
  • -
  • Restart the system timer.
  • -
  • Reinitialize the OS by invoking chSysInit().
  • -
  • Restart your device drivers using the xxxStart() methods.
  • -
  • Restart all your threads.
  • -
-

Example

-

This is an example of an hypothetical application that have to shutdown the OS when a certain event is generated.

-
#include "ch.h"
-#include "hal.h"
-
-/* A shutdown flag.*/
-bool_t shutdown_required;
-
-/* Critical thread.*/
-static void my_thread(void *p) {
-
-  while (!chThdShouldTerminate()) {
-    /* Normal thread activity code.*/
-  }
-  /* Thread de-initialization before terminating, here you put the critical
-     thread finalization code.*/
-  return 0;
-}
-
-/* Main program, it is entered with interrupts disabled.*/
-void main(void) {
-
-  /* HAL initialization, you need to do this just once.*/
-  halInit();
-
-  /* Main loop, the main() function never exits.*/
-  while (TRUE) {
-    Thread *tp;
-
-    shutdown_required = FALSE;
-
-    /* ChibiOS/RT initialization. This function becomes an OS thread.*/
-    chSysInit();
-
-    /* Starting a device driver, SD2 in this case.*/
-    sdStart(&SD2, NULL);
-
-    /* Starting our critical thread.*/
-    tp = chThdCreateFromHeap(NULL, THD_WA_SIZE(256),
-                             NORMALPRIO, my_thread, &SD2);
-
-    /* Main thread activity into a loop.*/
-    while (!shutdown_required) {
-      /* Main activity, OS active until a shutdown becomes necessary.*/
-    }
-
-    /* Starting the shutdown sequence.*/
-    chThdTerminate(tp);     /* Requesting termination.                  */
-    chThdWait(tp);          /* Waiting for the actual termination.      */
-    sdStop(&SD2);           /* Stopping serial port 2.                  */
-    chSysDisable();
-    stop_system_timer();
-    stop_any_other_interrupt();
-    chSysEnable();
-
-    /* Now the main function is again a normal function, no more a
-       OS thread.*/
-    do_funny_stuff();
-
-    /* Restarting the OS but you could also stop the system or trigger a
-       reset instead.*/
-    chSysDisable();
-  }
-}
-

As you can see it is possible to jump in and out of the "OS mode" quite easily. Note that this is just an example, the real code could be very different depending on your requirements.

-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_timing.html b/ChibiOS_2.0.8/docs/html/article_timing.html deleted file mode 100644 index c60621a..0000000 --- a/ChibiOS_2.0.8/docs/html/article_timing.html +++ /dev/null @@ -1,91 +0,0 @@ - - -ChibiOS/RT: Reliable timings using Threads - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Reliable timings using Threads

-
-
-

One common task is to have threads do something at regular, scheduled, intervals. An obvious solution is to write something like this:

-
msg_t my_thread(void *param) {
-
-  while (TRUE) {
-    do_something();
-    chThdSleepMilliseconds(1000);   // Fixed interval
-  }
-}
-

This example works well assuming that the do_something() execution time is well below the system tick period and that my_thread() is not preempted by other threads that could insert long intervals.
- If the above conditions are not satisfied you may have do_something() executed at irregular intervals, as example:
-
- T0...T0+1000...T0+2002...T0+3002...T0+4005...etc.
-
- Also note that the error increases over time and this kind of behavior can lead to anomalies really hard to debug.

-

A better solution

-

It is possible to rewrite the above code using absolute deadlines rather than fixed intervals:

-
msg_t my_thread(void *param) {
-
-  systick_t time = chTimeNow();     // T0
-  while (TRUE) {
-    time += MS2ST(1000);            // Next deadline
-    do_something();
-    chThdSleepUntil(time);
-  }
-}
-

Using this code do_something() will always be executed at an absolute deadline time and the error will not accumulate over time regardless of the execution time and delays inserted by other threads.
- Note that this solution requires that the do_something() execution time must not exceed the deadline or the thread would stay sleeping into chThdSleepUntil().

-

A different way

-

Another way to perform activities at regular intervals is the use of a virtual timer. Virtual timers are able to generate callbacks at scheduled intervals. Virtual timers are one shot timers so you need to restart them from within the callback if you need a periodic timer like in this case.

-
VirtualTimer vt;
-
-void do_something(void *p) {
-
-  chVTSetI(&vt, MS2ST(1000), do_something, p);      // Restarts the timer.
-  // Periodic code here.
-}
-
-int main(int argc, char **argv) {
-
-  chSysLock();
-  chVTSetI(&vt, MS2ST(1000), do_something, NULL);   // Starts the timer.
-  chSysUnlock();
-  ...
-}
-

Note that the callback code is executed from within the I-Locked state (see System States) so you can only execute I-Class APIs from there (see API Names Suffixes).
- This solution has the advantage to not require a dedicated thread and thus uses much less RAM but the periodic code must have a very short execution time or it would degrade the overall system response time.

-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/article_wakeup.html b/ChibiOS_2.0.8/docs/html/article_wakeup.html deleted file mode 100644 index 892a1a8..0000000 --- a/ChibiOS_2.0.8/docs/html/article_wakeup.html +++ /dev/null @@ -1,142 +0,0 @@ - - -ChibiOS/RT: How to wake up a thread from an interrupt handler - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

How to wake up a thread from an interrupt handler

-
-
-

Waking up a thread after an hardware event is one of the most common tasks that an RTOS must be able to perform efficiently. In ChibiOS/RT there are several mechanisms that can be used, often each mechanism is best suited in a specific scenario.

-

Synchronously waking up a specific thread

-

A common situation is to have to synchronously wake up a specific thread. This can be accomplished without the use of any specific synchronization primitive, it uses the very efficient low level scheduler APIs, note that you can also optionally send a simple message from the IRQ handler to the thread.

-
static Thread *tp = NULL;
-
-void mythread(void *p) {
-
-  while (TRUE) {
-    msg_t msg;
-
-    // Waiting for the IRQ to happen.
-    chSysLock();
-    tp = chThdSelf();
-    chSchGoSleepS(PRSUSPENDED);
-    msg = chThdSelf()->p_rdymsg;    // Retrieving the message, optional
-    chSysUnlock();
-    // Perform processing here.
-  }
-}
-
-CH_IRQ_HANDLER(myIRQ) {
-  CH_IRQ_PROLOGUE();
-
-  // Wakes up the thread.
-  chSysLockFromIsr();
-  if (tp != NULL) {
-    tp->p_rdymsg = (msg_t)55;       // Sending the message, optional
-    chSchReadyI(tp);
-    tp = NULL;
-  }
-  chSysUnlockFromIsr().
-
-  CH_IRQ_EPILOGUE();
-}
-

Synchronously waking up one of the waiting threads

-

Lets assume you have a queue of waiting threads, you want to wake up the threads one by one in FIFO order, if there are no waiting threads then nothing happens.
- This can be accomplished using a Semaphore object initialized to zero:

-
CH_IRQ_HANDLER(myIRQ) {
-  CH_IRQ_PROLOGUE();
-
-  // If there is at least one waiting thread then signal it.
-  chSysLockFromIsr();
-  if (chSemGetCounterI(&mysem) < 0)
-    chSemSignalI(&mysem);
-  chSysUnlockFromIsr().
-
-  CH_IRQ_EPILOGUE();
-}
-

Synchronously waking up all the waiting threads

-

In this scenario you want to synchronously wake up all the waiting threads, if there are no waiting threads then nothing happens.
- This can be accomplished using a Semaphore object initialized to zero:

-
CH_IRQ_HANDLER(myIRQ) {
-  CH_IRQ_PROLOGUE();
-
-  // Wakes up all the threads waiting on the semaphore.
-  chSysLockFromIsr();
-  chSemResetI(&mysem);
-  chSysUnlockFromIsr().
-
-  CH_IRQ_EPILOGUE();
-}
-

Asynchronously waking up a specific thread

-

If you have to asynchronously wake up a specific thread then a simple event flags can be used.

-
static Thread *tp;
-
-void mythread(void *p) {
-
-  tp = chThdSelf();
-  while (TRUE) {
-    // Checks if an IRQ happened else wait.
-    chEvtWaitAny((eventmask_t)1);
-    // Perform processing here.
-  }
-}
-
-CH_IRQ_HANDLER(myIRQ) {
-  CH_IRQ_PROLOGUE();
-
-  // Wakes up the thread.
-  chSysLockFromIsr();
-  chEvtSignalI(tp, (eventmask_t)1);
-  chSysUnlockFromIsr().
-
-  CH_IRQ_EPILOGUE();
-}
-

Asynchronously waking up one or more threads

-

By using event sources it is possible to asynchronously wake up one or more listener threads. The mechanism requires a single initialized EventSource object, all the threads registered as listeners on the event source will be broadcasted.

-
CH_IRQ_HANDLER(myIRQ) {
-  CH_IRQ_PROLOGUE();
-
-  // Pends an event flag on all the listening threads.
-  chSysLockFromIsr();
-  chEvtBroadcastI(&my_event_source);
-  chSysUnlockFromIsr().
-
-  CH_IRQ_EPILOGUE();
-}
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/articles.html b/ChibiOS_2.0.8/docs/html/articles.html deleted file mode 100644 index c4f8a89..0000000 --- a/ChibiOS_2.0.8/docs/html/articles.html +++ /dev/null @@ -1,49 +0,0 @@ - - -ChibiOS/RT: Articles and Code Samples - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Articles and Code Samples

-
-
-

ChibiOS/RT Articles and Code Samples:

- -
-
-Generated on Sun Nov 28 2010 14:09:53 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/at91sam7_8h_source.html b/ChibiOS_2.0.8/docs/html/at91sam7_8h_source.html deleted file mode 100644 index 82f0abe..0000000 --- a/ChibiOS_2.0.8/docs/html/at91sam7_8h_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - -ChibiOS/RT: at91sam7.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/at91sam7__mii_8c.html b/ChibiOS_2.0.8/docs/html/at91sam7__mii_8c.html deleted file mode 100644 index 0155140..0000000 --- a/ChibiOS_2.0.8/docs/html/at91sam7__mii_8c.html +++ /dev/null @@ -1,70 +0,0 @@ - - -ChibiOS/RT: at91sam7_mii.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

at91sam7_mii.c File Reference

-
-
- -

AT91SAM7 low level MII driver code. -More...

-#include "ch.h"
-#include "hal.h"
-#include "at91sam7_mii.h"
- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

void miiInit (void)
 Low level MII driver initialization.
void miiReset (MACDriver *macp)
 Resets a PHY device.
phyreg_t miiGet (MACDriver *macp, phyaddr_t addr)
 Reads a PHY register through the MII interface.
void miiPut (MACDriver *macp, phyaddr_t addr, phyreg_t value)
 Writes a PHY register through the MII interface.
-

Detailed Description

-

AT91SAM7 low level MII driver code.

- -

Definition in file at91sam7_mii.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/at91sam7__mii_8c_source.html b/ChibiOS_2.0.8/docs/html/at91sam7__mii_8c_source.html deleted file mode 100644 index 6ac85b0..0000000 --- a/ChibiOS_2.0.8/docs/html/at91sam7__mii_8c_source.html +++ /dev/null @@ -1,189 +0,0 @@ - - -ChibiOS/RT: at91sam7_mii.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/at91sam7__mii_8h.html b/ChibiOS_2.0.8/docs/html/at91sam7__mii_8h.html deleted file mode 100644 index 6cc0a07..0000000 --- a/ChibiOS_2.0.8/docs/html/at91sam7__mii_8h.html +++ /dev/null @@ -1,81 +0,0 @@ - - -ChibiOS/RT: at91sam7_mii.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

at91sam7_mii.h File Reference

-
-
- -

AT91SAM7 low level MII driver header. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - -

-Defines

#define PHY_HARDWARE   PHY_MICREL_KS8721
 PHY manufacturer and model.
#define PHY_ADDRESS   1
 Pins latched by the PHY at reset.

-Typedefs

typedef uint16_t phyreg_t
 Type of a PHY register value.
typedef uint8_t phyaddr_t
 Type of a PHY register address.

-Functions

void miiInit (void)
 Low level MII driver initialization.
void miiReset (MACDriver *macp)
 Resets a PHY device.
phyreg_t miiGet (MACDriver *macp, phyaddr_t addr)
 Reads a PHY register through the MII interface.
void miiPut (MACDriver *macp, phyaddr_t addr, phyreg_t value)
 Writes a PHY register through the MII interface.
-

Detailed Description

-

AT91SAM7 low level MII driver header.

- -

Definition in file at91sam7_mii.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/at91sam7__mii_8h_source.html b/ChibiOS_2.0.8/docs/html/at91sam7__mii_8h_source.html deleted file mode 100644 index 170c5d1..0000000 --- a/ChibiOS_2.0.8/docs/html/at91sam7__mii_8h_source.html +++ /dev/null @@ -1,164 +0,0 @@ - - -ChibiOS/RT: at91sam7_mii.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/bc_s.png b/ChibiOS_2.0.8/docs/html/bc_s.png deleted file mode 100644 index 51ba0066debbeac813d4014d805dc95ebd5b532e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 705 zcmeAS@N?(olHy`uVBq!ia0y~yVBlb2U{K&-V_;y=|6qB6fq|*R)5S5Qg7NL$yWW!n zW!OKww>*FIn@#cU&FTB56`wPWk1iD!ROE6j5mb__n&=o26pAue)Wl2TD^z^9+plaqQ24}sV(g+Rljbh@c+K6Ep~3o^kMqu(E2I^8&F|;4X!)?^ zPS!pBV{YCQrWKoJRA>q{`uN?eSkC9_bRucv;ij$X)}DXAZqF((^A&n!q;k;ORD6xv z@u>SN8joihOPlmu^FPmOKVk9pxZ~|htLE8m&No}@cb4@tW5eyhG8MTk=}VWskX#(= zrD4Owuw>iQRFf?QQ+{w2sWNEHna8ik$gq8_$+d-!MjtJi&by^QbH2N=az)|(j%&u} zWHuitTvB#TzKfSLeADv}QEhvh`a-+iVk@r67pb2~x%#t?;l;)@DekXKuc!T8$j5=DKI$yJYO8H-8z!);`_3jyIVp%$i@`B - -ChibiOS/RT: can.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

can.c File Reference

-
-
- -

CAN Driver code. -More...

-#include "ch.h"
-#include "hal.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - -

-Functions

void canInit (void)
 CAN Driver initialization.
void canObjectInit (CANDriver *canp)
 Initializes the standard part of a CANDriver structure.
void canStart (CANDriver *canp, const CANConfig *config)
 Configures and activates the CAN peripheral.
void canStop (CANDriver *canp)
 Deactivates the CAN peripheral.
msg_t canTransmit (CANDriver *canp, const CANTxFrame *ctfp, systime_t timeout)
 Can frame transmission.
msg_t canReceive (CANDriver *canp, CANRxFrame *crfp, systime_t timeout)
 Can frame receive.
canstatus_t canGetAndClearFlags (CANDriver *canp)
 Returns the current status mask and clears it.
void canSleep (CANDriver *canp)
 Enters the sleep mode.
void canWakeup (CANDriver *canp)
 Enforces leaving the sleep mode.
-

Detailed Description

-

CAN Driver code.

- -

Definition in file can.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/can_8c_source.html b/ChibiOS_2.0.8/docs/html/can_8c_source.html deleted file mode 100644 index a84b5ac..0000000 --- a/ChibiOS_2.0.8/docs/html/can_8c_source.html +++ /dev/null @@ -1,322 +0,0 @@ - - -ChibiOS/RT: can.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/can_8h.html b/ChibiOS_2.0.8/docs/html/can_8h.html deleted file mode 100644 index 934a4cd..0000000 --- a/ChibiOS_2.0.8/docs/html/can_8h.html +++ /dev/null @@ -1,105 +0,0 @@ - - -ChibiOS/RT: can.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

can.h File Reference

-
-
- -

CAN Driver macros and structures. -More...

-#include "can_lld.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Defines

#define CAN_LIMIT_WARNING   1
 Errors rate warning.
#define CAN_LIMIT_ERROR   2
 Errors rate error.
#define CAN_BUS_OFF_ERROR   4
 Bus off condition reached.
#define CAN_FRAMING_ERROR   8
 Framing error of some kind on the CAN bus.
#define CAN_OVERFLOW_ERROR   16
 Overflow in receive queue.
#define CAN_USE_SLEEP_MODE   TRUE
 Sleep mode related APIs inclusion switch.
#define canAddFlagsI(canp, mask)   ((canp)->cd_status |= (mask))
 Adds some flags to the CAN status mask.

-Enumerations

enum  canstate_t {
-  CAN_UNINIT = 0, -CAN_STOP = 1, -CAN_STARTING = 2, -CAN_READY = 3, -
-  CAN_SLEEP = 4 -
- }
 

Driver state machine possible states.

- More...

-Functions

void canInit (void)
 CAN Driver initialization.
void canObjectInit (CANDriver *canp)
 Initializes the standard part of a CANDriver structure.
void canStart (CANDriver *canp, const CANConfig *config)
 Configures and activates the CAN peripheral.
void canStop (CANDriver *canp)
 Deactivates the CAN peripheral.
msg_t canTransmit (CANDriver *canp, const CANTxFrame *ctfp, systime_t timeout)
 Can frame transmission.
msg_t canReceive (CANDriver *canp, CANRxFrame *crfp, systime_t timeout)
 Can frame receive.
canstatus_t canGetAndClearFlags (CANDriver *canp)
 Returns the current status mask and clears it.
-

Detailed Description

-

CAN Driver macros and structures.

- -

Definition in file can.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/can_8h_source.html b/ChibiOS_2.0.8/docs/html/can_8h_source.html deleted file mode 100644 index ef5595a..0000000 --- a/ChibiOS_2.0.8/docs/html/can_8h_source.html +++ /dev/null @@ -1,183 +0,0 @@ - - -ChibiOS/RT: can.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/ch_8cpp.html b/ChibiOS_2.0.8/docs/html/ch_8cpp.html deleted file mode 100644 index 50e2782..0000000 --- a/ChibiOS_2.0.8/docs/html/ch_8cpp.html +++ /dev/null @@ -1,56 +0,0 @@ - - -ChibiOS/RT: ch.cpp File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

ch.cpp File Reference

-
-
- -

C++ wrapper code. -More...

-#include "ch.hpp"
- -

Go to the source code of this file.

- -
-

Detailed Description

-

C++ wrapper code.

- -

Definition in file ch.cpp.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/ch_8cpp_source.html b/ChibiOS_2.0.8/docs/html/ch_8cpp_source.html deleted file mode 100644 index 22c03ff..0000000 --- a/ChibiOS_2.0.8/docs/html/ch_8cpp_source.html +++ /dev/null @@ -1,386 +0,0 @@ - - -ChibiOS/RT: ch.cpp Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/ch_8h.html b/ChibiOS_2.0.8/docs/html/ch_8h.html deleted file mode 100644 index bef5897..0000000 --- a/ChibiOS_2.0.8/docs/html/ch_8h.html +++ /dev/null @@ -1,93 +0,0 @@ - - -ChibiOS/RT: ch.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

ch.h File Reference

-
-
- -

ChibiOS/RT main include file. -More...

-#include "chconf.h"
-#include "chtypes.h"
-#include "chlists.h"
-#include "chcore.h"
-#include "chsys.h"
-#include "chvt.h"
-#include "chschd.h"
-#include "chsem.h"
-#include "chmtx.h"
-#include "chcond.h"
-#include "chevents.h"
-#include "chmsg.h"
-#include "chmboxes.h"
-#include "chmemcore.h"
-#include "chheap.h"
-#include "chmempools.h"
-#include "chthreads.h"
-#include "chregistry.h"
-#include "chinline.h"
-#include "chqueues.h"
-#include "chstreams.h"
-#include "chioch.h"
-#include "chdebug.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - -

-Defines

#define _CHIBIOS_RT_
 ChibiOS/RT identification macro.
#define CH_KERNEL_VERSION   "2.0.8"
 Kernel version string.
#define CH_KERNEL_MAJOR   2
 Kernel version major number.
#define CH_KERNEL_MINOR   0
 Kernel version minor number.
#define CH_KERNEL_PATCH   8
 Kernel version patch number.
-

Detailed Description

-

ChibiOS/RT main include file.

-

This header includes all the required kernel headers so it is the only kernel header you usually want to include in your application.

- -

Definition in file ch.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/ch_8h_source.html b/ChibiOS_2.0.8/docs/html/ch_8h_source.html deleted file mode 100644 index 627b20a..0000000 --- a/ChibiOS_2.0.8/docs/html/ch_8h_source.html +++ /dev/null @@ -1,146 +0,0 @@ - - -ChibiOS/RT: ch.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/ch_8hpp.html b/ChibiOS_2.0.8/docs/html/ch_8hpp.html deleted file mode 100644 index db76ab9..0000000 --- a/ChibiOS_2.0.8/docs/html/ch_8hpp.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: ch.hpp File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

ch.hpp File Reference

-
-
- -

C++ wrapper classes and definitions. -More...

-#include <ch.h>
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Data Structures

class  chibios_rt::System
 Class encapsulating the base system functionalities. More...
class  chibios_rt::Timer
 Timer class. More...
class  chibios_rt::BaseThread
 Base class for a ChibiOS/RT thread. More...
class  chibios_rt::EnhancedThread< N >
 Enhanced threads template class. More...
class  chibios_rt::Semaphore
 Class encapsulating a semaphore. More...
class  chibios_rt::Mutex
 Class encapsulating a mutex. More...
class  chibios_rt::CondVar
 Class encapsulating a conditional variable. More...
class  chibios_rt::Event
 Class encapsulating an event source. More...
-

Detailed Description

-

C++ wrapper classes and definitions.

- -

Definition in file ch.hpp.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/ch_8hpp_source.html b/ChibiOS_2.0.8/docs/html/ch_8hpp_source.html deleted file mode 100644 index 213857a..0000000 --- a/ChibiOS_2.0.8/docs/html/ch_8hpp_source.html +++ /dev/null @@ -1,669 +0,0 @@ - - -ChibiOS/RT: ch.hpp Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcond_8c.html b/ChibiOS_2.0.8/docs/html/chcond_8c.html deleted file mode 100644 index ab3a6f6..0000000 --- a/ChibiOS_2.0.8/docs/html/chcond_8c.html +++ /dev/null @@ -1,78 +0,0 @@ - - -ChibiOS/RT: chcond.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chcond.c File Reference

-
-
- -

Condition Variables code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - -

-Functions

void chCondInit (CondVar *cp)
 Initializes s CondVar structure.
void chCondSignal (CondVar *cp)
 Signals one thread that is waiting on the condition variable.
void chCondSignalI (CondVar *cp)
 Signals one thread that is waiting on the condition variable.
void chCondBroadcast (CondVar *cp)
 Signals all threads that are waiting on the condition variable.
void chCondBroadcastI (CondVar *cp)
 Signals all threads that are waiting on the condition variable.
msg_t chCondWait (CondVar *cp)
 Waits on the condition variable releasing the mutex lock.
msg_t chCondWaitS (CondVar *cp)
 Waits on the condition variable releasing the mutex lock.
msg_t chCondWaitTimeout (CondVar *cp, systime_t time)
 Waits on the condition variable releasing the mutex lock.
msg_t chCondWaitTimeoutS (CondVar *cp, systime_t time)
 Waits on the condition variable releasing the mutex lock.
-

Detailed Description

-

Condition Variables code.

- -

Definition in file chcond.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcond_8c_source.html b/ChibiOS_2.0.8/docs/html/chcond_8c_source.html deleted file mode 100644 index 9298ff6..0000000 --- a/ChibiOS_2.0.8/docs/html/chcond_8c_source.html +++ /dev/null @@ -1,296 +0,0 @@ - - -ChibiOS/RT: chcond.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcond_8h.html b/ChibiOS_2.0.8/docs/html/chcond_8h.html deleted file mode 100644 index 7ab794f..0000000 --- a/ChibiOS_2.0.8/docs/html/chcond_8h.html +++ /dev/null @@ -1,94 +0,0 @@ - - -ChibiOS/RT: chcond.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chcond.h File Reference

-
-
- -

Condition Variables macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  CondVar
 CondVar structure. More...

-Defines

#define _CONDVAR_DATA(name)   {_THREADSQUEUE_DATA(name.c_queue)}
 Data part of a static condition variable initializer.
#define CONDVAR_DECL(name)   CondVar name = _CONDVAR_DATA(name)
 Static condition variable initializer.

-Typedefs

typedef struct CondVar CondVar
 CondVar structure.

-Functions

void chCondInit (CondVar *cp)
 Initializes s CondVar structure.
void chCondSignal (CondVar *cp)
 Signals one thread that is waiting on the condition variable.
void chCondSignalI (CondVar *cp)
 Signals one thread that is waiting on the condition variable.
void chCondBroadcast (CondVar *cp)
 Signals all threads that are waiting on the condition variable.
void chCondBroadcastI (CondVar *cp)
 Signals all threads that are waiting on the condition variable.
msg_t chCondWait (CondVar *cp)
 Waits on the condition variable releasing the mutex lock.
msg_t chCondWaitS (CondVar *cp)
 Waits on the condition variable releasing the mutex lock.
msg_t chCondWaitTimeout (CondVar *cp, systime_t time)
 Waits on the condition variable releasing the mutex lock.
msg_t chCondWaitTimeoutS (CondVar *cp, systime_t time)
 Waits on the condition variable releasing the mutex lock.
-

Detailed Description

-

Condition Variables macros and structures.

- -

Definition in file chcond.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcond_8h_source.html b/ChibiOS_2.0.8/docs/html/chcond_8h_source.html deleted file mode 100644 index 2edbdac..0000000 --- a/ChibiOS_2.0.8/docs/html/chcond_8h_source.html +++ /dev/null @@ -1,142 +0,0 @@ - - -ChibiOS/RT: chcond.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chconf_8h.html b/ChibiOS_2.0.8/docs/html/chconf_8h.html deleted file mode 100644 index 8f24dbd..0000000 --- a/ChibiOS_2.0.8/docs/html/chconf_8h.html +++ /dev/null @@ -1,130 +0,0 @@ - - -ChibiOS/RT: chconf.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chconf.h File Reference

-
-
- -

Configuration file template. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Defines

#define CH_FREQUENCY   1000
 System tick frequency.
#define CH_TIME_QUANTUM   20
 Round robin interval.
#define CH_USE_NESTED_LOCKS   FALSE
 Nested locks.
#define CH_MEMCORE_SIZE   0
 Managed RAM size.
#define CH_OPTIMIZE_SPEED   TRUE
 OS optimization.
#define CH_CURRP_REGISTER_CACHE   "reg"
 Exotic optimization.
#define CH_USE_REGISTRY   TRUE
 Threads registry APIs.
#define CH_USE_WAITEXIT   TRUE
 Threads synchronization APIs.
#define CH_USE_SEMAPHORES   TRUE
 Semaphores APIs.
#define CH_USE_SEMAPHORES_PRIORITY   FALSE
 Semaphores queuing mode.
#define CH_USE_SEMSW   TRUE
 Atomic semaphore API.
#define CH_USE_MUTEXES   TRUE
 Mutexes APIs.
#define CH_USE_CONDVARS   TRUE
 Conditional Variables APIs.
#define CH_USE_CONDVARS_TIMEOUT   TRUE
 Conditional Variables APIs with timeout.
#define CH_USE_EVENTS   TRUE
 Events Flags APIs.
#define CH_USE_EVENTS_TIMEOUT   TRUE
 Events Flags APIs with timeout.
#define CH_USE_MESSAGES   TRUE
 Synchronous Messages APIs.
#define CH_USE_MESSAGES_PRIORITY   FALSE
 Synchronous Messages queuing mode.
#define CH_USE_MAILBOXES   TRUE
 Mailboxes APIs.
#define CH_USE_QUEUES   TRUE
 I/O Queues APIs.
#define CH_USE_MEMCORE   TRUE
 Core Memory Manager APIs.
#define CH_USE_HEAP   TRUE
 Heap Allocator APIs.
#define CH_USE_MALLOC_HEAP   FALSE
 C-runtime allocator.
#define CH_USE_MEMPOOLS   TRUE
 Memory Pools Allocator APIs.
#define CH_USE_DYNAMIC   TRUE
 Dynamic Threads APIs.
#define CH_DBG_ENABLE_CHECKS   FALSE
 Debug option, parameters checks.
#define CH_DBG_ENABLE_ASSERTS   FALSE
 Debug option, consistency checks.
#define CH_DBG_ENABLE_TRACE   FALSE
 Debug option, trace buffer.
#define CH_DBG_ENABLE_STACK_CHECK   FALSE
 Debug option, stack checks.
#define CH_DBG_FILL_THREADS   FALSE
 Debug option, stacks initialization.
#define CH_DBG_THREADS_PROFILING   TRUE
 Debug option, threads profiling.
#define THREAD_EXT_FIELDS
 Threads descriptor structure hook.
#define THREAD_EXT_INIT(tp)
 Threads initialization hook.
#define THREAD_EXT_EXIT(tp)
 Threads finalization hook.
#define IDLE_LOOP_HOOK()
 Idle Loop hook.
-

Detailed Description

-

Configuration file template.

-

A copy of this file must be placed in each project directory, it contains the application specific kernel settings.

- -

Definition in file chconf.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chconf_8h_source.html b/ChibiOS_2.0.8/docs/html/chconf_8h_source.html deleted file mode 100644 index 9bcc782..0000000 --- a/ChibiOS_2.0.8/docs/html/chconf_8h_source.html +++ /dev/null @@ -1,538 +0,0 @@ - - -ChibiOS/RT: chconf.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcore__v6m_8c.html b/ChibiOS_2.0.8/docs/html/chcore__v6m_8c.html deleted file mode 100644 index 81ef7e0..0000000 --- a/ChibiOS_2.0.8/docs/html/chcore__v6m_8c.html +++ /dev/null @@ -1,75 +0,0 @@ - - -ChibiOS/RT: chcore_v6m.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chcore_v6m.c File Reference

-
-
- -

ARMv6-M architecture port code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - -

-Functions

 CH_IRQ_HANDLER (SysTickVector)
 System Timer vector.
void _port_switch_from_irq (void)
 Post-IRQ switch code.
void port_switch (Thread *ntp, Thread *otp)
 Performs a context switch between two threads.
void _port_thread_start (void)
 Start a thread by invoking its work function.

-Variables

regarm_t _port_saved_pc
 PC register temporary storage.
unsigned _port_irq_nesting
 IRQ nesting counter.
-

Detailed Description

-

ARMv6-M architecture port code.

- -

Definition in file chcore_v6m.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcore__v6m_8c_source.html b/ChibiOS_2.0.8/docs/html/chcore__v6m_8c_source.html deleted file mode 100644 index c19e9d3..0000000 --- a/ChibiOS_2.0.8/docs/html/chcore__v6m_8c_source.html +++ /dev/null @@ -1,204 +0,0 @@ - - -ChibiOS/RT: chcore_v6m.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcore__v6m_8h.html b/ChibiOS_2.0.8/docs/html/chcore__v6m_8h.html deleted file mode 100644 index 3b24b68..0000000 --- a/ChibiOS_2.0.8/docs/html/chcore__v6m_8h.html +++ /dev/null @@ -1,107 +0,0 @@ - - -ChibiOS/RT: chcore_v6m.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chcore_v6m.h File Reference

-
-
- -

ARMv6-M architecture port macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  cmxctx
 Cortex-Mx exception context. More...

-Defines

#define SETUP_CONTEXT(workspace, wsize, pf, arg)
 Platform dependent part of the chThdInit() API.
#define IDLE_THREAD_STACK_SIZE   8
 Stack size for the system idle thread.
#define INT_REQUIRED_STACK   16
 Per-thread stack overhead for interrupts servicing.
#define PORT_IRQ_PROLOGUE()
 IRQ prologue code.
#define PORT_IRQ_EPILOGUE()
 IRQ epilogue code.
#define PORT_IRQ_HANDLER(id)   void id(void)
 IRQ handler function declaration.
#define PORT_FAST_IRQ_HANDLER(id)   void id(void)
 Fast IRQ handler function declaration.
#define port_init()
 Port-related initialization code.
#define port_lock()   asm volatile ("cpsid i" : : : "memory")
 Kernel-lock action.
#define port_unlock()   asm volatile ("cpsie i" : : : "memory")
 Kernel-unlock action.
#define port_lock_from_isr()   port_lock()
 Kernel-lock action from an interrupt handler.
#define port_unlock_from_isr()   port_unlock()
 Kernel-unlock action from an interrupt handler.
#define port_disable()   asm volatile ("cpsid i" : : : "memory")
 Disables all the interrupt sources.
#define port_suspend()   asm volatile ("cpsid i" : : : "memory")
 Disables the interrupt sources below kernel-level priority.
#define port_enable()   asm volatile ("cpsie i" : : : "memory")
 Enables all the interrupt sources.
#define port_wait_for_interrupt()   asm volatile ("wfi" : : : "memory")
 Enters an architecture-dependent IRQ-waiting mode.

-Functions

void port_halt (void)
 Halts the system.
void port_switch (Thread *ntp, Thread *otp)
 Performs a context switch between two threads.
void _port_switch_from_irq (void)
 Post-IRQ switch code.
void _port_thread_start (void)
 Start a thread by invoking its work function.
-

Detailed Description

-

ARMv6-M architecture port macros and structures.

- -

Definition in file chcore_v6m.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcore__v6m_8h_source.html b/ChibiOS_2.0.8/docs/html/chcore__v6m_8h_source.html deleted file mode 100644 index 37c288e..0000000 --- a/ChibiOS_2.0.8/docs/html/chcore__v6m_8h_source.html +++ /dev/null @@ -1,311 +0,0 @@ - - -ChibiOS/RT: chcore_v6m.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcore__v7m_8c.html b/ChibiOS_2.0.8/docs/html/chcore__v7m_8c.html deleted file mode 100644 index 1e37f1c..0000000 --- a/ChibiOS_2.0.8/docs/html/chcore__v7m_8c.html +++ /dev/null @@ -1,72 +0,0 @@ - - -ChibiOS/RT: chcore_v7m.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chcore_v7m.c File Reference

-
-
- -

ARMv7-M architecture port code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Functions

 CH_IRQ_HANDLER (SysTickVector)
 System Timer vector.
void SVCallVector (void)
 SVC vector.
void _port_irq_epilogue (void)
 Reschedule verification and setup after an IRQ.
void _port_switch_from_isr (void)
 Post-IRQ switch code.
void port_switch (Thread *ntp, Thread *otp)
 Performs a context switch between two threads.
void _port_thread_start (void)
 Start a thread by invoking its work function.
-

Detailed Description

-

ARMv7-M architecture port code.

- -

Definition in file chcore_v7m.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcore__v7m_8c_source.html b/ChibiOS_2.0.8/docs/html/chcore__v7m_8c_source.html deleted file mode 100644 index 3c1e324..0000000 --- a/ChibiOS_2.0.8/docs/html/chcore__v7m_8c_source.html +++ /dev/null @@ -1,234 +0,0 @@ - - -ChibiOS/RT: chcore_v7m.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcore__v7m_8h.html b/ChibiOS_2.0.8/docs/html/chcore__v7m_8h.html deleted file mode 100644 index b925a66..0000000 --- a/ChibiOS_2.0.8/docs/html/chcore__v7m_8h.html +++ /dev/null @@ -1,104 +0,0 @@ - - -ChibiOS/RT: chcore_v7m.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chcore_v7m.h File Reference

-
-
- -

ARMv7-M architecture port macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Defines

#define SETUP_CONTEXT(workspace, wsize, pf, arg)
 Platform dependent part of the chThdInit() API.
#define IDLE_THREAD_STACK_SIZE   8
 Stack size for the system idle thread.
#define INT_REQUIRED_STACK   16
 Per-thread stack overhead for interrupts servicing.
#define PORT_IRQ_PROLOGUE()
 IRQ prologue code.
#define PORT_IRQ_EPILOGUE()   _port_irq_epilogue()
 IRQ epilogue code.
#define PORT_IRQ_HANDLER(id)   void id(void)
 IRQ handler function declaration.
#define PORT_FAST_IRQ_HANDLER(id)   void id(void)
 Fast IRQ handler function declaration.
#define port_init()
 Port-related initialization code.
#define port_lock()
 Kernel-lock action.
#define port_unlock()
 Kernel-unlock action.
#define port_lock_from_isr()   port_lock()
 Kernel-lock action from an interrupt handler.
#define port_unlock_from_isr()   port_unlock()
 Kernel-unlock action from an interrupt handler.
#define port_disable()   asm volatile ("cpsid i" : : : "memory")
 Disables all the interrupt sources.
#define port_suspend()
 Disables the interrupt sources below kernel-level priority.
#define port_enable()
 Enables all the interrupt sources.
#define port_wait_for_interrupt()
 Enters an architecture-dependent IRQ-waiting mode.

-Functions

void port_halt (void)
 Halts the system.
void port_switch (Thread *ntp, Thread *otp)
 Performs a context switch between two threads.
void _port_irq_epilogue (void)
 Reschedule verification and setup after an IRQ.
void _port_switch_from_isr (void)
 Post-IRQ switch code.
void _port_thread_start (void)
 Start a thread by invoking its work function.
-

Detailed Description

-

ARMv7-M architecture port macros and structures.

- -

Definition in file chcore_v7m.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcore__v7m_8h_source.html b/ChibiOS_2.0.8/docs/html/chcore__v7m_8h_source.html deleted file mode 100644 index b327e50..0000000 --- a/ChibiOS_2.0.8/docs/html/chcore__v7m_8h_source.html +++ /dev/null @@ -1,322 +0,0 @@ - - -ChibiOS/RT: chcore_v7m.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcoreasm_8s.html b/ChibiOS_2.0.8/docs/html/chcoreasm_8s.html deleted file mode 100644 index 2972e41..0000000 --- a/ChibiOS_2.0.8/docs/html/chcoreasm_8s.html +++ /dev/null @@ -1,56 +0,0 @@ - - -ChibiOS/RT: chcoreasm.s File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

chcoreasm.s File Reference

-
-
- -

ARM7 architecture port low level code. -More...

-#include "chconf.h"
- -

Go to the source code of this file.

- -
-

Detailed Description

-

ARM7 architecture port low level code.

- -

Definition in file chcoreasm.s.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chcoreasm_8s_source.html b/ChibiOS_2.0.8/docs/html/chcoreasm_8s_source.html deleted file mode 100644 index 8b33c64..0000000 --- a/ChibiOS_2.0.8/docs/html/chcoreasm_8s_source.html +++ /dev/null @@ -1,288 +0,0 @@ - - -ChibiOS/RT: chcoreasm.s Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chdebug_8c.html b/ChibiOS_2.0.8/docs/html/chdebug_8c.html deleted file mode 100644 index e33e178..0000000 --- a/ChibiOS_2.0.8/docs/html/chdebug_8c.html +++ /dev/null @@ -1,73 +0,0 @@ - - -ChibiOS/RT: chdebug.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chdebug.c File Reference

-
-
- -

ChibiOS/RT Debug code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - -

-Functions

void trace_init (void)
 Trace circular buffer subsystem initialization.
void chDbgTrace (Thread *otp)
 Inserts in the circular debug trace buffer a context switch record.
void chDbgPanic (char *msg)
 Prints a panic message on the console and then halts the system.

-Variables

TraceBuffer trace_buffer
 Public trace buffer.
char * panic_msg
 Pointer to the panic message.
-

Detailed Description

-

ChibiOS/RT Debug code.

- -

Definition in file chdebug.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chdebug_8c_source.html b/ChibiOS_2.0.8/docs/html/chdebug_8c_source.html deleted file mode 100644 index 2d8c87d..0000000 --- a/ChibiOS_2.0.8/docs/html/chdebug_8c_source.html +++ /dev/null @@ -1,138 +0,0 @@ - - -ChibiOS/RT: chdebug.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chdebug_8h.html b/ChibiOS_2.0.8/docs/html/chdebug_8h.html deleted file mode 100644 index 68a2c8a..0000000 --- a/ChibiOS_2.0.8/docs/html/chdebug_8h.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: chdebug.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chdebug.h File Reference

-
-
- -

Debug macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - -

-Data Structures

struct  CtxSwcEvent
 Trace buffer record. More...
struct  TraceBuffer
 Trace buffer header. More...

-Defines

#define TRACE_BUFFER_SIZE   64
 Trace buffer entries.
#define STACK_FILL_VALUE   0x55
 Fill value for thread stack area in debug mode.
#define THREAD_FILL_VALUE   0xFF
 Fill value for thread area in debug mode.
#define chDbgCheck(c, func)
 Function parameter check.
#define chDbgAssert(c, m, r)
 Condition assertion.
-

Detailed Description

-

Debug macros and structures.

- -

Definition in file chdebug.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chdebug_8h_source.html b/ChibiOS_2.0.8/docs/html/chdebug_8h_source.html deleted file mode 100644 index 02dcd2b..0000000 --- a/ChibiOS_2.0.8/docs/html/chdebug_8h_source.html +++ /dev/null @@ -1,214 +0,0 @@ - - -ChibiOS/RT: chdebug.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chevents_8c.html b/ChibiOS_2.0.8/docs/html/chevents_8c.html deleted file mode 100644 index b38af41..0000000 --- a/ChibiOS_2.0.8/docs/html/chevents_8c.html +++ /dev/null @@ -1,90 +0,0 @@ - - -ChibiOS/RT: chevents.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chevents.c File Reference

-
-
- -

Events code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

void chEvtRegisterMask (EventSource *esp, EventListener *elp, eventmask_t mask)
 Registers an Event Listener on an Event Source.
void chEvtUnregister (EventSource *esp, EventListener *elp)
 Unregisters an Event Listener from its Event Source.
eventmask_t chEvtClear (eventmask_t mask)
 Clears the pending events specified in the mask.
eventmask_t chEvtPend (eventmask_t mask)
 Pends a set of event flags on the current thread, this is much faster than using chEvtBroadcast() or chEvtSignal().
void chEvtSignal (Thread *tp, eventmask_t mask)
 Pends a set of event flags on the specified Thread.
void chEvtSignalI (Thread *tp, eventmask_t mask)
 Pends a set of event flags on the specified Thread.
void chEvtBroadcast (EventSource *esp)
 Signals all the Event Listeners registered on the specified Event Source.
void chEvtBroadcastI (EventSource *esp)
 Signals all the Event Listeners registered on the specified Event Source.
void chEvtDispatch (const evhandler_t *handlers, eventmask_t mask)
 Invokes the event handlers associated to an event flags mask.
eventmask_t chEvtWaitOne (eventmask_t mask)
 Waits for exactly one of the specified events.
eventmask_t chEvtWaitAny (eventmask_t mask)
 Waits for any of the specified events.
eventmask_t chEvtWaitAll (eventmask_t mask)
 Waits for all the specified events.
eventmask_t chEvtWaitOneTimeout (eventmask_t mask, systime_t time)
 Waits for exactly one of the specified events.
eventmask_t chEvtWaitAnyTimeout (eventmask_t mask, systime_t time)
 Waits for any of the specified events.
eventmask_t chEvtWaitAllTimeout (eventmask_t mask, systime_t time)
 Waits for all the specified events.
-

Detailed Description

-

Events code.

- -

Definition in file chevents.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chevents_8c_source.html b/ChibiOS_2.0.8/docs/html/chevents_8c_source.html deleted file mode 100644 index 8a61de6..0000000 --- a/ChibiOS_2.0.8/docs/html/chevents_8c_source.html +++ /dev/null @@ -1,493 +0,0 @@ - - -ChibiOS/RT: chevents.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chevents_8h.html b/ChibiOS_2.0.8/docs/html/chevents_8h.html deleted file mode 100644 index f840b67..0000000 --- a/ChibiOS_2.0.8/docs/html/chevents_8h.html +++ /dev/null @@ -1,112 +0,0 @@ - - -ChibiOS/RT: chevents.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chevents.h File Reference

-
-
- -

Events macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  EventListener
 Event Listener structure. More...
struct  EventSource
 Event Source structure. More...

-Defines

#define _EVENTSOURCE_DATA(name)   {(void *)(&name)}
 Data part of a static event source initializer.
#define EVENTSOURCE_DECL(name)   EventSource name = _EVENTSOURCE_DATA(name)
 Static event source initializer.
#define ALL_EVENTS   ((eventmask_t)-1)
#define EVENT_MASK(eid)   ((eventmask_t)(1 << (eid)))
#define chEvtRegister(esp, elp, eid)   chEvtRegisterMask(esp, elp, EVENT_MASK(eid))
 Registers an Event Listener on an Event Source.
#define chEvtInit(esp)   ((esp)->es_next = (EventListener *)(void *)(esp))
 Initializes an Event Source.
#define chEvtIsListening(esp)   ((void *)(esp) != (void *)(esp)->es_next)
 Verifies if there is at least one EventListener registered.

-Typedefs

typedef struct EventSource EventSource
 Event Source structure.
typedef void(* evhandler_t )(eventid_t)
 Event Handler callback function.

-Functions

void chEvtRegisterMask (EventSource *esp, EventListener *elp, eventmask_t mask)
 Registers an Event Listener on an Event Source.
void chEvtUnregister (EventSource *esp, EventListener *elp)
 Unregisters an Event Listener from its Event Source.
eventmask_t chEvtClear (eventmask_t mask)
 Clears the pending events specified in the mask.
eventmask_t chEvtPend (eventmask_t mask)
 Pends a set of event flags on the current thread, this is much faster than using chEvtBroadcast() or chEvtSignal().
void chEvtSignal (Thread *tp, eventmask_t mask)
 Pends a set of event flags on the specified Thread.
void chEvtSignalI (Thread *tp, eventmask_t mask)
 Pends a set of event flags on the specified Thread.
void chEvtBroadcast (EventSource *esp)
 Signals all the Event Listeners registered on the specified Event Source.
void chEvtBroadcastI (EventSource *esp)
 Signals all the Event Listeners registered on the specified Event Source.
void chEvtDispatch (const evhandler_t *handlers, eventmask_t mask)
 Invokes the event handlers associated to an event flags mask.
eventmask_t chEvtWaitOneTimeout (eventmask_t mask, systime_t time)
 Waits for exactly one of the specified events.
eventmask_t chEvtWaitAnyTimeout (eventmask_t mask, systime_t time)
 Waits for any of the specified events.
eventmask_t chEvtWaitAllTimeout (eventmask_t mask, systime_t time)
 Waits for all the specified events.
-

Detailed Description

-

Events macros and structures.

- -

Definition in file chevents.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chevents_8h_source.html b/ChibiOS_2.0.8/docs/html/chevents_8h_source.html deleted file mode 100644 index 7b20a27..0000000 --- a/ChibiOS_2.0.8/docs/html/chevents_8h_source.html +++ /dev/null @@ -1,208 +0,0 @@ - - -ChibiOS/RT: chevents.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chheap_8c.html b/ChibiOS_2.0.8/docs/html/chheap_8c.html deleted file mode 100644 index 62c23cc..0000000 --- a/ChibiOS_2.0.8/docs/html/chheap_8c.html +++ /dev/null @@ -1,70 +0,0 @@ - - -ChibiOS/RT: chheap.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chheap.c File Reference

-
-
- -

Heaps code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - -

-Functions

void heap_init (void)
 Initializes the default heap.
void chHeapInit (MemoryHeap *heapp, void *buf, size_t size)
 Initializes a memory heap from a static memory area.
void * chHeapAlloc (MemoryHeap *heapp, size_t size)
 Allocates a block of memory from the heap by using the first-fit algorithm.
void chHeapFree (void *p)
 Frees a previously allocated memory block.
size_t chHeapStatus (MemoryHeap *heapp, size_t *sizep)
 Reports the heap status.
-

Detailed Description

-

Heaps code.

- -

Definition in file chheap.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chheap_8c_source.html b/ChibiOS_2.0.8/docs/html/chheap_8c_source.html deleted file mode 100644 index a014689..0000000 --- a/ChibiOS_2.0.8/docs/html/chheap_8c_source.html +++ /dev/null @@ -1,357 +0,0 @@ - - -ChibiOS/RT: chheap.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chheap_8h.html b/ChibiOS_2.0.8/docs/html/chheap_8h.html deleted file mode 100644 index 32fd3f5..0000000 --- a/ChibiOS_2.0.8/docs/html/chheap_8h.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: chheap.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chheap.h File Reference

-
-
- -

Heaps macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - -

-Data Structures

union  heap_header
 Memory heap block header. More...
struct  memory_heap
 Structure describing a memory heap. More...

-Functions

void heap_init (void)
 Initializes the default heap.
void chHeapInit (MemoryHeap *heapp, void *buf, size_t size)
 Initializes a memory heap from a static memory area.
void * chHeapAlloc (MemoryHeap *heapp, size_t size)
 Allocates a block of memory from the heap by using the first-fit algorithm.
void chHeapFree (void *p)
 Frees a previously allocated memory block.
size_t chHeapStatus (MemoryHeap *heapp, size_t *sizep)
 Reports the heap status.
-

Detailed Description

-

Heaps macros and structures.

- -

Definition in file chheap.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chheap_8h_source.html b/ChibiOS_2.0.8/docs/html/chheap_8h_source.html deleted file mode 100644 index 4d77f80..0000000 --- a/ChibiOS_2.0.8/docs/html/chheap_8h_source.html +++ /dev/null @@ -1,141 +0,0 @@ - - -ChibiOS/RT: chheap.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chinline_8h.html b/ChibiOS_2.0.8/docs/html/chinline_8h.html deleted file mode 100644 index 90b930e..0000000 --- a/ChibiOS_2.0.8/docs/html/chinline_8h.html +++ /dev/null @@ -1,56 +0,0 @@ - - -ChibiOS/RT: chinline.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

chinline.h File Reference

-
-
- -

Kernel inlined functions. -More...

- -

Go to the source code of this file.

- -
-

Detailed Description

-

Kernel inlined functions.

-

In this file there are a set of inlined functions if the CH_OPTIMIZE_SPEED is enabled.

- -

Definition in file chinline.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chinline_8h_source.html b/ChibiOS_2.0.8/docs/html/chinline_8h_source.html deleted file mode 100644 index 47bebf3..0000000 --- a/ChibiOS_2.0.8/docs/html/chinline_8h_source.html +++ /dev/null @@ -1,137 +0,0 @@ - - -ChibiOS/RT: chinline.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chioch_8h.html b/ChibiOS_2.0.8/docs/html/chioch_8h.html deleted file mode 100644 index 9dfdedf..0000000 --- a/ChibiOS_2.0.8/docs/html/chioch_8h.html +++ /dev/null @@ -1,99 +0,0 @@ - - -ChibiOS/RT: chioch.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chioch.h File Reference

-
-
- -

I/O channels. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  BaseChannelVMT
 BaseChannel virtual methods table. More...
struct  BaseChannel
 Base channel class. More...
struct  BaseAsynchronousChannelVMT
 BaseAsynchronousChannel virtual methods table. More...
struct  BaseAsynchronousChannel
 Base asynchronous channel class. More...

-Defines

#define _base_channel_methods
 BaseChannel specific methods.
#define _base_channel_data   _base_sequential_stream_data
 BaseChannel specific data.
#define chIOPutWouldBlock(ip)   ((ip)->vmt->putwouldblock(ip))
 Channel output check.
#define chIOGetWouldBlock(ip)   ((ip)->vmt->getwouldblock(ip))
 Channel input check.
#define chIOPut(ip, b)   ((ip)->vmt->put(ip, b, TIME_INFINITE))
 Channel blocking byte write.
#define chIOPutTimeout(ip, b, time)   ((ip)->vmt->put(ip, b, time))
 Channel blocking byte write with timeout.
#define chIOGet(ip)   ((ip)->vmt->get(ip, TIME_INFINITE))
 Channel blocking byte read.
#define chIOGetTimeout(ip, time)   ((ip)->vmt->get(ip, time))
 Channel blocking byte read with timeout.
#define chIOWriteTimeout(ip, bp, n, time)   ((ip)->vmt->writet(ip, bp, n, time))
 Channel blocking write with timeout.
#define chIOReadTimeout(ip, bp, n, time)   ((ip)->vmt->readt(ip, bp, n, time))
 Channel blocking read with timeout.
#define _base_asynchronous_channel_methods   _base_channel_methods
 BaseAsynchronousChannel specific methods.
#define _base_asynchronous_channel_data
 BaseAsynchronousChannel specific data.
#define chIOGetWriteEventSource(ip)   (&((ip)->vmt->oevent))
 Returns the write event source.
#define chIOGetReadEventSource(ip)   (&((ip)->vmt->ievent))
 Returns the read event source.
-

Detailed Description

-

I/O channels.

-

This header defines abstract interfaces useful to access generic I/O resources in a standardized way.

- -

Definition in file chioch.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chioch_8h_source.html b/ChibiOS_2.0.8/docs/html/chioch_8h_source.html deleted file mode 100644 index efe1c1c..0000000 --- a/ChibiOS_2.0.8/docs/html/chioch_8h_source.html +++ /dev/null @@ -1,328 +0,0 @@ - - -ChibiOS/RT: chioch.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chlists_8c.html b/ChibiOS_2.0.8/docs/html/chlists_8c.html deleted file mode 100644 index 2ac64e2..0000000 --- a/ChibiOS_2.0.8/docs/html/chlists_8c.html +++ /dev/null @@ -1,74 +0,0 @@ - - -ChibiOS/RT: chlists.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chlists.c File Reference

-
-
- -

Thread queues/lists code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - -

-Functions

void prio_insert (Thread *tp, ThreadsQueue *tqp)
 Inserts a thread into a priority ordered queue.
void queue_insert (Thread *tp, ThreadsQueue *tqp)
 Inserts a Thread into a queue.
Threadfifo_remove (ThreadsQueue *tqp)
 Removes the first-out Thread from a queue and returns it.
Threadlifo_remove (ThreadsQueue *tqp)
 Removes the last-out Thread from a queue and returns it.
Threaddequeue (Thread *tp)
 Removes a Thread from a queue and returns it.
void list_insert (Thread *tp, ThreadsList *tlp)
 Pushes a Thread on top of a stack list.
Threadlist_remove (ThreadsList *tlp)
 Pops a Thread from the top of a stack list and returns it.
-

Detailed Description

-

Thread queues/lists code.

- -

Definition in file chlists.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chlists_8c_source.html b/ChibiOS_2.0.8/docs/html/chlists_8c_source.html deleted file mode 100644 index ac54602..0000000 --- a/ChibiOS_2.0.8/docs/html/chlists_8c_source.html +++ /dev/null @@ -1,199 +0,0 @@ - - -ChibiOS/RT: chlists.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chlists_8h.html b/ChibiOS_2.0.8/docs/html/chlists_8h.html deleted file mode 100644 index 43fa673..0000000 --- a/ChibiOS_2.0.8/docs/html/chlists_8h.html +++ /dev/null @@ -1,96 +0,0 @@ - - -ChibiOS/RT: chlists.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chlists.h File Reference

-
-
- -

Thread queues/lists macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  ThreadsQueue
 Generic threads bidirectional linked list header and element. More...
struct  ThreadsList
 Generic threads single link list, it works like a stack. More...

-Defines

#define queue_init(tqp)   ((tqp)->p_next = (tqp)->p_prev = (Thread *)(tqp));
 Threads queue initialization.
#define list_init(tlp)   ((tlp)->p_next = (Thread *)(tlp))
 Threads list initialization.
#define isempty(p)   ((p)->p_next == (Thread *)(p))
 Evaluates to TRUE if the specified threads queue or list is empty.
#define notempty(p)   ((p)->p_next != (Thread *)(p))
 Evaluates to TRUE if the specified threads queue or list is not empty.
#define _THREADSQUEUE_DATA(name)   {(Thread *)&name, (Thread *)&name}
 Data part of a static threads queue initializer.
#define THREADSQUEUE_DECL(name)   ThreadsQueue name = _THREADSQUEUE_DATA(name)
 Static threads queue initializer.

-Functions

void prio_insert (Thread *tp, ThreadsQueue *tqp)
 Inserts a thread into a priority ordered queue.
void queue_insert (Thread *tp, ThreadsQueue *tqp)
 Inserts a Thread into a queue.
Threadfifo_remove (ThreadsQueue *tqp)
 Removes the first-out Thread from a queue and returns it.
Threadlifo_remove (ThreadsQueue *tqp)
 Removes the last-out Thread from a queue and returns it.
Threaddequeue (Thread *tp)
 Removes a Thread from a queue and returns it.
void list_insert (Thread *tp, ThreadsList *tlp)
 Pushes a Thread on top of a stack list.
Threadlist_remove (ThreadsList *tlp)
 Pops a Thread from the top of a stack list and returns it.
-

Detailed Description

-

Thread queues/lists macros and structures.

-
Note:
All the macros present in this module, while public, are not an OS API and should not be directly used in the user applications code.
- -

Definition in file chlists.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chlists_8h_source.html b/ChibiOS_2.0.8/docs/html/chlists_8h_source.html deleted file mode 100644 index f8801c7..0000000 --- a/ChibiOS_2.0.8/docs/html/chlists_8h_source.html +++ /dev/null @@ -1,169 +0,0 @@ - - -ChibiOS/RT: chlists.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmboxes_8c.html b/ChibiOS_2.0.8/docs/html/chmboxes_8c.html deleted file mode 100644 index 0a3a654..0000000 --- a/ChibiOS_2.0.8/docs/html/chmboxes_8c.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: chmboxes.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chmboxes.c File Reference

-
-
- -

Mailboxes code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

void chMBInit (Mailbox *mbp, msg_t *buf, cnt_t n)
 Initializes a Mailbox object.
void chMBReset (Mailbox *mbp)
 Resets a Mailbox object.
msg_t chMBPost (Mailbox *mbp, msg_t msg, systime_t time)
 Posts a message into a mailbox.
msg_t chMBPostS (Mailbox *mbp, msg_t msg, systime_t time)
 Posts a message into a mailbox.
msg_t chMBPostAhead (Mailbox *mbp, msg_t msg, systime_t time)
 Posts an high priority message into a mailbox.
msg_t chMBPostAheadS (Mailbox *mbp, msg_t msg, systime_t time)
 Posts an high priority message into a mailbox.
msg_t chMBFetch (Mailbox *mbp, msg_t *msgp, systime_t time)
 Retrieves a message from a mailbox.
msg_t chMBFetchS (Mailbox *mbp, msg_t *msgp, systime_t time)
 Retrieves a message from a mailbox.
-

Detailed Description

-

Mailboxes code.

- -

Definition in file chmboxes.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmboxes_8c_source.html b/ChibiOS_2.0.8/docs/html/chmboxes_8c_source.html deleted file mode 100644 index 940cdf3..0000000 --- a/ChibiOS_2.0.8/docs/html/chmboxes_8c_source.html +++ /dev/null @@ -1,320 +0,0 @@ - - -ChibiOS/RT: chmboxes.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmboxes_8h.html b/ChibiOS_2.0.8/docs/html/chmboxes_8h.html deleted file mode 100644 index b6cef70..0000000 --- a/ChibiOS_2.0.8/docs/html/chmboxes_8h.html +++ /dev/null @@ -1,90 +0,0 @@ - - -ChibiOS/RT: chmboxes.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chmboxes.h File Reference

-
-
- -

Mailboxes macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Defines

#define chMBSize(mbp)   ((mbp)->mb_top - (mbp)->mb_buffer)
 Returns the mailbox buffer size.
#define chMBGetEmpty(mbp)   chSemGetCounterI(&(mbp)->mb_emptysem)
 Returns the free space into the mailbox.
#define chMBGetFull(mbp)   chSemGetCounterI(&(mbp)->mb_fullsem)
 Returns the number of messages into the mailbox.
#define chMBPeek(mbp)   (*(mbp)->mb_rdptr)
 Returns the next message in the queue without removing it.
#define _MAILBOX_DATA(name, buffer, size)
 Data part of a static mailbox initializer.
#define MAILBOX_DECL(name, buffer, size)   Mailbox name = _MAILBOX_DATA(name, buffer, size)
 Static mailbox initializer.

-Functions

void chMBInit (Mailbox *mbp, msg_t *buf, cnt_t n)
 Initializes a Mailbox object.
void chMBReset (Mailbox *mbp)
 Resets a Mailbox object.
msg_t chMBPost (Mailbox *mbp, msg_t msg, systime_t time)
 Posts a message into a mailbox.
msg_t chMBPostS (Mailbox *mbp, msg_t msg, systime_t time)
 Posts a message into a mailbox.
msg_t chMBPostAhead (Mailbox *mbp, msg_t msg, systime_t time)
 Posts an high priority message into a mailbox.
msg_t chMBPostAheadS (Mailbox *mbp, msg_t msg, systime_t time)
 Posts an high priority message into a mailbox.
msg_t chMBFetch (Mailbox *mbp, msg_t *msgp, systime_t time)
 Retrieves a message from a mailbox.
msg_t chMBFetchS (Mailbox *mbp, msg_t *msgp, systime_t time)
 Retrieves a message from a mailbox.
-

Detailed Description

-

Mailboxes macros and structures.

- -

Definition in file chmboxes.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmboxes_8h_source.html b/ChibiOS_2.0.8/docs/html/chmboxes_8h_source.html deleted file mode 100644 index f0fd2f9..0000000 --- a/ChibiOS_2.0.8/docs/html/chmboxes_8h_source.html +++ /dev/null @@ -1,194 +0,0 @@ - - -ChibiOS/RT: chmboxes.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmemcore_8c.html b/ChibiOS_2.0.8/docs/html/chmemcore_8c.html deleted file mode 100644 index 97f5cbd..0000000 --- a/ChibiOS_2.0.8/docs/html/chmemcore_8c.html +++ /dev/null @@ -1,68 +0,0 @@ - - -ChibiOS/RT: chmemcore.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chmemcore.c File Reference

-
-
- -

Core memory manager code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

void core_init (void)
 Low level memory manager initialization.
void * chCoreAlloc (size_t size)
 Allocates a memory block.
void * chCoreAllocI (size_t size)
 Allocates a memory block.
size_t chCoreStatus (void)
 Core memory status.
-

Detailed Description

-

Core memory manager code.

- -

Definition in file chmemcore.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmemcore_8c_source.html b/ChibiOS_2.0.8/docs/html/chmemcore_8c_source.html deleted file mode 100644 index 410ab29..0000000 --- a/ChibiOS_2.0.8/docs/html/chmemcore_8c_source.html +++ /dev/null @@ -1,173 +0,0 @@ - - -ChibiOS/RT: chmemcore.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmemcore_8h.html b/ChibiOS_2.0.8/docs/html/chmemcore_8h.html deleted file mode 100644 index f45b20a..0000000 --- a/ChibiOS_2.0.8/docs/html/chmemcore_8h.html +++ /dev/null @@ -1,81 +0,0 @@ - - -ChibiOS/RT: chmemcore.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chmemcore.h File Reference

-
-
- -

Core memory manager macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - -

-Defines

#define MEM_ALIGN_MASK   (sizeof(stkalign_t) - 1)
 Alignment mask constant.
#define MEM_ALIGN_SIZE(p)   (((size_t)(p) + MEM_ALIGN_MASK) & ~MEM_ALIGN_MASK)
 Alignment helper macro.
#define MEM_IS_ALIGNED(p)   (((size_t)(p) & MEM_ALIGN_MASK) == 0)
 Returns whatever a pointer or memory size is aligned to the type align_t.

-Typedefs

typedef void *(* memgetfunc_t )(size_t size)
 Memory get function.

-Functions

void core_init (void)
 Low level memory manager initialization.
void * chCoreAlloc (size_t size)
 Allocates a memory block.
void * chCoreAllocI (size_t size)
 Allocates a memory block.
size_t chCoreStatus (void)
 Core memory status.
-

Detailed Description

-

Core memory manager macros and structures.

- -

Definition in file chmemcore.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmemcore_8h_source.html b/ChibiOS_2.0.8/docs/html/chmemcore_8h_source.html deleted file mode 100644 index ac9f4cf..0000000 --- a/ChibiOS_2.0.8/docs/html/chmemcore_8h_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - -ChibiOS/RT: chmemcore.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmempools_8c.html b/ChibiOS_2.0.8/docs/html/chmempools_8c.html deleted file mode 100644 index a89e5a2..0000000 --- a/ChibiOS_2.0.8/docs/html/chmempools_8c.html +++ /dev/null @@ -1,70 +0,0 @@ - - -ChibiOS/RT: chmempools.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chmempools.c File Reference

-
-
- -

Memory Pools code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - -

-Functions

void chPoolInit (MemoryPool *mp, size_t size, memgetfunc_t provider)
 Initializes an empty memory pool.
void * chPoolAllocI (MemoryPool *mp)
 Allocates an object from a memory pool.
void * chPoolAlloc (MemoryPool *mp)
 Allocates an object from a memory pool.
void chPoolFreeI (MemoryPool *mp, void *objp)
 Releases (or adds) an object into (to) a memory pool.
void chPoolFree (MemoryPool *mp, void *objp)
 Releases (or adds) an object into (to) a memory pool.
-

Detailed Description

-

Memory Pools code.

- -

Definition in file chmempools.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmempools_8c_source.html b/ChibiOS_2.0.8/docs/html/chmempools_8c_source.html deleted file mode 100644 index 2d3dcae..0000000 --- a/ChibiOS_2.0.8/docs/html/chmempools_8c_source.html +++ /dev/null @@ -1,184 +0,0 @@ - - -ChibiOS/RT: chmempools.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmempools_8h.html b/ChibiOS_2.0.8/docs/html/chmempools_8h.html deleted file mode 100644 index 0853016..0000000 --- a/ChibiOS_2.0.8/docs/html/chmempools_8h.html +++ /dev/null @@ -1,83 +0,0 @@ - - -ChibiOS/RT: chmempools.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chmempools.h File Reference

-
-
- -

Memory Pools macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  pool_header
 Memory pool free object header. More...
struct  MemoryPool
 Memory pool descriptor. More...

-Defines

#define _MEMORYPOOL_DATA(name, size, provider)   {NULL, MEM_ALIGN_SIZE(size), provider}
 Data part of a static memory pool initializer.
#define MEMORYPOOL_DECL(name, size, provider)   MemoryPool name = _MEMORYPOOL_DATA(name, size, provider)
 Static memory pool initializer in hungry mode.

-Functions

void chPoolInit (MemoryPool *mp, size_t size, memgetfunc_t provider)
 Initializes an empty memory pool.
void * chPoolAllocI (MemoryPool *mp)
 Allocates an object from a memory pool.
void * chPoolAlloc (MemoryPool *mp)
 Allocates an object from a memory pool.
void chPoolFreeI (MemoryPool *mp, void *objp)
 Releases (or adds) an object into (to) a memory pool.
void chPoolFree (MemoryPool *mp, void *objp)
 Releases (or adds) an object into (to) a memory pool.
-

Detailed Description

-

Memory Pools macros and structures.

- -

Definition in file chmempools.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmempools_8h_source.html b/ChibiOS_2.0.8/docs/html/chmempools_8h_source.html deleted file mode 100644 index 9a24586..0000000 --- a/ChibiOS_2.0.8/docs/html/chmempools_8h_source.html +++ /dev/null @@ -1,144 +0,0 @@ - - -ChibiOS/RT: chmempools.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmsg_8c.html b/ChibiOS_2.0.8/docs/html/chmsg_8c.html deleted file mode 100644 index 3cc5b50..0000000 --- a/ChibiOS_2.0.8/docs/html/chmsg_8c.html +++ /dev/null @@ -1,68 +0,0 @@ - - -ChibiOS/RT: chmsg.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chmsg.c File Reference

-
-
- -

Messages code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - -

-Functions

msg_t chMsgSend (Thread *tp, msg_t msg)
 Sends a message to the specified thread.
msg_t chMsgWait (void)
 Suspends the thread and waits for an incoming message.
msg_t chMsgGet (void)
 Returns the next message in the queue.
void chMsgRelease (msg_t msg)
 Releases the thread waiting on top of the messages queue.
-

Detailed Description

-

Messages code.

- -

Definition in file chmsg.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmsg_8c_source.html b/ChibiOS_2.0.8/docs/html/chmsg_8c_source.html deleted file mode 100644 index 20a72f6..0000000 --- a/ChibiOS_2.0.8/docs/html/chmsg_8c_source.html +++ /dev/null @@ -1,201 +0,0 @@ - - -ChibiOS/RT: chmsg.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmsg_8h.html b/ChibiOS_2.0.8/docs/html/chmsg_8h.html deleted file mode 100644 index 4db8a3d..0000000 --- a/ChibiOS_2.0.8/docs/html/chmsg_8h.html +++ /dev/null @@ -1,74 +0,0 @@ - - -ChibiOS/RT: chmsg.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chmsg.h File Reference

-
-
- -

Messages macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - -

-Defines

#define chMsgIsPendingI(tp)   ((tp)->p_msgqueue.p_next != (Thread *)&(tp)->p_msgqueue)
 Evaluates to TRUE if the thread has pending messages.
#define chMsgGetI(tp)   ((tp)->p_msgqueue.p_next->p_msg)
 Returns the first message in the queue.

-Functions

msg_t chMsgSend (Thread *tp, msg_t msg)
 Sends a message to the specified thread.
msg_t chMsgWait (void)
 Suspends the thread and waits for an incoming message.
msg_t chMsgGet (void)
 Returns the next message in the queue.
void chMsgRelease (msg_t msg)
 Releases the thread waiting on top of the messages queue.
-

Detailed Description

-

Messages macros and structures.

- -

Definition in file chmsg.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmsg_8h_source.html b/ChibiOS_2.0.8/docs/html/chmsg_8h_source.html deleted file mode 100644 index c899c94..0000000 --- a/ChibiOS_2.0.8/docs/html/chmsg_8h_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - -ChibiOS/RT: chmsg.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmtx_8c.html b/ChibiOS_2.0.8/docs/html/chmtx_8c.html deleted file mode 100644 index d22c3f1..0000000 --- a/ChibiOS_2.0.8/docs/html/chmtx_8c.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: chmtx.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chmtx.c File Reference

-
-
- -

Mutexes code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Functions

void chMtxInit (Mutex *mp)
 Initializes s Mutex structure.
void chMtxLock (Mutex *mp)
 Locks the specified mutex.
void chMtxLockS (Mutex *mp)
 Locks the specified mutex.
bool_t chMtxTryLock (Mutex *mp)
 Tries to lock a mutex.
bool_t chMtxTryLockS (Mutex *mp)
 Tries to lock a mutex.
MutexchMtxUnlock (void)
 Unlocks the next owned mutex in reverse lock order.
MutexchMtxUnlockS (void)
 Unlocks the next owned mutex in reverse lock order.
void chMtxUnlockAll (void)
 Unlocks all the mutexes owned by the invoking thread.
-

Detailed Description

-

Mutexes code.

- -

Definition in file chmtx.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmtx_8c_source.html b/ChibiOS_2.0.8/docs/html/chmtx_8c_source.html deleted file mode 100644 index fb387c0..0000000 --- a/ChibiOS_2.0.8/docs/html/chmtx_8c_source.html +++ /dev/null @@ -1,392 +0,0 @@ - - -ChibiOS/RT: chmtx.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmtx_8h.html b/ChibiOS_2.0.8/docs/html/chmtx_8h.html deleted file mode 100644 index c287ff1..0000000 --- a/ChibiOS_2.0.8/docs/html/chmtx_8h.html +++ /dev/null @@ -1,94 +0,0 @@ - - -ChibiOS/RT: chmtx.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chmtx.h File Reference

-
-
- -

Mutexes macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  Mutex
 Mutex structure. More...

-Defines

#define _MUTEX_DATA(name)   {_THREADSQUEUE_DATA(name.m_queue), NULL, NULL}
 Data part of a static mutex initializer.
#define MUTEX_DECL(name)   Mutex name = _MUTEX_DATA(name)
 Static mutex initializer.
#define chMtxQueueNotEmptyS(mp)   notempty(&(mp)->m_queue)
 Returns TRUE if the mutex queue contains at least a waiting thread.

-Typedefs

typedef struct Mutex Mutex
 Mutex structure.

-Functions

void chMtxInit (Mutex *mp)
 Initializes s Mutex structure.
void chMtxLock (Mutex *mp)
 Locks the specified mutex.
void chMtxLockS (Mutex *mp)
 Locks the specified mutex.
bool_t chMtxTryLock (Mutex *mp)
 Tries to lock a mutex.
bool_t chMtxTryLockS (Mutex *mp)
 Tries to lock a mutex.
MutexchMtxUnlock (void)
 Unlocks the next owned mutex in reverse lock order.
MutexchMtxUnlockS (void)
 Unlocks the next owned mutex in reverse lock order.
void chMtxUnlockAll (void)
 Unlocks all the mutexes owned by the invoking thread.
-

Detailed Description

-

Mutexes macros and structures.

- -

Definition in file chmtx.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chmtx_8h_source.html b/ChibiOS_2.0.8/docs/html/chmtx_8h_source.html deleted file mode 100644 index 4c8cad1..0000000 --- a/ChibiOS_2.0.8/docs/html/chmtx_8h_source.html +++ /dev/null @@ -1,139 +0,0 @@ - - -ChibiOS/RT: chmtx.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chqueues_8c.html b/ChibiOS_2.0.8/docs/html/chqueues_8c.html deleted file mode 100644 index 2f7cf02..0000000 --- a/ChibiOS_2.0.8/docs/html/chqueues_8c.html +++ /dev/null @@ -1,80 +0,0 @@ - - -ChibiOS/RT: chqueues.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chqueues.c File Reference

-
-
- -

I/O Queues code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - -

-Functions

void chIQInit (InputQueue *iqp, uint8_t *bp, size_t size, qnotify_t infy)
 Initializes an input queue.
void chIQResetI (InputQueue *iqp)
 Resets an input queue.
msg_t chIQPutI (InputQueue *iqp, uint8_t b)
 Input queue write.
msg_t chIQGetTimeout (InputQueue *iqp, systime_t time)
 Input queue read with timeout.
size_t chIQReadTimeout (InputQueue *iqp, uint8_t *bp, size_t n, systime_t time)
 Input queue read with timeout.
void chOQInit (OutputQueue *oqp, uint8_t *bp, size_t size, qnotify_t onfy)
 Initializes an output queue.
void chOQResetI (OutputQueue *oqp)
 Resets an output queue.
msg_t chOQPutTimeout (OutputQueue *oqp, uint8_t b, systime_t time)
 Output queue write with timeout.
msg_t chOQGetI (OutputQueue *oqp)
 Output queue read.
size_t chOQWriteTimeout (OutputQueue *oqp, const uint8_t *bp, size_t n, systime_t time)
 Output queue write with timeout.
-

Detailed Description

-

I/O Queues code.

- -

Definition in file chqueues.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chqueues_8c_source.html b/ChibiOS_2.0.8/docs/html/chqueues_8c_source.html deleted file mode 100644 index 64c1e23..0000000 --- a/ChibiOS_2.0.8/docs/html/chqueues_8c_source.html +++ /dev/null @@ -1,407 +0,0 @@ - - -ChibiOS/RT: chqueues.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chqueues_8h.html b/ChibiOS_2.0.8/docs/html/chqueues_8h.html deleted file mode 100644 index 0714b9c..0000000 --- a/ChibiOS_2.0.8/docs/html/chqueues_8h.html +++ /dev/null @@ -1,131 +0,0 @@ - - -ChibiOS/RT: chqueues.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chqueues.h File Reference

-
-
- -

Queues macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  GenericQueue
 Generic I/O queue structure. More...

-Defines

#define Q_OK   RDY_OK
 Returned by the queue functions if the operation is successful.
#define Q_TIMEOUT   RDY_TIMEOUT
 Returned by the queue functions if a timeout occurs.
#define Q_RESET   RDY_RESET
 Returned by the queue functions if the queue is reset.
#define Q_EMPTY   -3
 Returned by the queue functions if the queue is empty.
#define Q_FULL   -4
 Returned by the queue functions if the queue is full.
#define chQSize(q)   ((q)->q_top - (q)->q_buffer)
 Returns the queue's buffer size.
#define chQSpace(q)   chSemGetCounterI(&(q)->q_sem)
 Queue space.
#define chIQIsEmpty(q)   ((bool_t)(chQSpace(q) <= 0))
 Evaluates to TRUE if the specified Input Queue is empty.
#define chIQIsFull(q)   ((bool_t)(chQSpace(q) >= chQSize(q)))
 Evaluates to TRUE if the specified Input Queue is full.
#define chIQGet(iqp)   chIQGetTimeout(iqp, TIME_INFINITE)
 Input queue read.
#define _INPUTQUEUE_DATA(name, buffer, size, inotify)
 Data part of a static input queue initializer.
#define INPUTQUEUE_DECL(name, buffer, size, inotify)   InputQueue name = _INPUTQUEUE_DATA(name, buffer, size, inotify)
 Static input queue initializer.
#define chOQIsEmpty(q)   ((bool_t)(chQSpace(q) >= chQSize(q)))
 Evaluates to TRUE if the specified Output Queue is empty.
#define chOQIsFull(q)   ((bool_t)(chQSpace(q) <= 0))
 Evaluates to TRUE if the specified Output Queue is full.
#define chOQPut(oqp, b)   chOQPutTimeout(oqp, b, TIME_INFINITE)
 Output queue write.
#define _OUTPUTQUEUE_DATA(name, buffer, size, onotify)
 Data part of a static output queue initializer.
#define OUTPUTQUEUE_DECL(name, buffer, size, onotify)   InputQueue name = _OUTPUTQUEUE_DATA(name, buffer, size, onotify)
 Static output queue initializer.

-Typedefs

typedef void(* qnotify_t )(void)
 Queue notification callback type.
typedef GenericQueue InputQueue
 Input queue structure.
typedef GenericQueue OutputQueue
 Output queue structure.

-Functions

void chIQInit (InputQueue *iqp, uint8_t *bp, size_t size, qnotify_t infy)
 Initializes an input queue.
void chIQResetI (InputQueue *iqp)
 Resets an input queue.
msg_t chIQPutI (InputQueue *iqp, uint8_t b)
 Input queue write.
msg_t chIQGetTimeout (InputQueue *iqp, systime_t time)
 Input queue read with timeout.
size_t chIQReadTimeout (InputQueue *iqp, uint8_t *bp, size_t n, systime_t time)
 Input queue read with timeout.
void chOQInit (OutputQueue *oqp, uint8_t *bp, size_t size, qnotify_t onfy)
 Initializes an output queue.
void chOQResetI (OutputQueue *oqp)
 Resets an output queue.
msg_t chOQPutTimeout (OutputQueue *oqp, uint8_t b, systime_t time)
 Output queue write with timeout.
msg_t chOQGetI (OutputQueue *oqp)
 Output queue read.
size_t chOQWriteTimeout (OutputQueue *oqp, const uint8_t *bp, size_t n, systime_t time)
 Output queue write with timeout.
-

Detailed Description

-

Queues macros and structures.

-

I/O

- -

Definition in file chqueues.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chqueues_8h_source.html b/ChibiOS_2.0.8/docs/html/chqueues_8h_source.html deleted file mode 100644 index 08b2284..0000000 --- a/ChibiOS_2.0.8/docs/html/chqueues_8h_source.html +++ /dev/null @@ -1,293 +0,0 @@ - - -ChibiOS/RT: chqueues.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chregistry_8c.html b/ChibiOS_2.0.8/docs/html/chregistry_8c.html deleted file mode 100644 index af8e2e0..0000000 --- a/ChibiOS_2.0.8/docs/html/chregistry_8c.html +++ /dev/null @@ -1,64 +0,0 @@ - - -ChibiOS/RT: chregistry.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chregistry.c File Reference

-
-
- -

Threads registry code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - -

-Functions

ThreadchRegFirstThread (void)
 Returns the first thread in the system.
ThreadchRegNextThread (Thread *tp)
 Returns the thread next to the specified one.
-

Detailed Description

-

Threads registry code.

- -

Definition in file chregistry.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chregistry_8c_source.html b/ChibiOS_2.0.8/docs/html/chregistry_8c_source.html deleted file mode 100644 index 1328bfc..0000000 --- a/ChibiOS_2.0.8/docs/html/chregistry_8c_source.html +++ /dev/null @@ -1,158 +0,0 @@ - - -ChibiOS/RT: chregistry.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chregistry_8h.html b/ChibiOS_2.0.8/docs/html/chregistry_8h.html deleted file mode 100644 index e1be38b..0000000 --- a/ChibiOS_2.0.8/docs/html/chregistry_8h.html +++ /dev/null @@ -1,70 +0,0 @@ - - -ChibiOS/RT: chregistry.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chregistry.h File Reference

-
-
- -

Threads registry macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - -

-Defines

#define REG_REMOVE(tp)
 Removes a thread from the registry list.
#define REG_INSERT(tp)
 Adds a thread to the registry list.

-Functions

ThreadchRegFirstThread (void)
 Returns the first thread in the system.
ThreadchRegNextThread (Thread *tp)
 Returns the thread next to the specified one.
-

Detailed Description

-

Threads registry macros and structures.

- -

Definition in file chregistry.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chregistry_8h_source.html b/ChibiOS_2.0.8/docs/html/chregistry_8h_source.html deleted file mode 100644 index 24143ba..0000000 --- a/ChibiOS_2.0.8/docs/html/chregistry_8h_source.html +++ /dev/null @@ -1,120 +0,0 @@ - - -ChibiOS/RT: chregistry.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chschd_8c.html b/ChibiOS_2.0.8/docs/html/chschd_8c.html deleted file mode 100644 index ba35e5f..0000000 --- a/ChibiOS_2.0.8/docs/html/chschd_8c.html +++ /dev/null @@ -1,81 +0,0 @@ - - -ChibiOS/RT: chschd.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chschd.c File Reference

-
-
- -

Scheduler code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - -

-Functions

void scheduler_init (void)
 Scheduler initialization.
ThreadchSchReadyI (Thread *tp)
 Inserts a thread in the Ready List.
void chSchGoSleepS (tstate_t newstate)
 Puts the current thread to sleep into the specified state.
msg_t chSchGoSleepTimeoutS (tstate_t newstate, systime_t time)
 Puts the current thread to sleep into the specified state with timeout specification.
void chSchWakeupS (Thread *ntp, msg_t msg)
 Wakes up a thread.
void chSchDoRescheduleI (void)
 Switches to the first thread on the runnable queue.
void chSchRescheduleS (void)
 Performs a reschedule if a higher priority thread is runnable.
bool_t chSchIsRescRequiredExI (void)
 Evaluates if a reschedule is required.

-Variables

ReadyList rlist
 Ready list header.
-

Detailed Description

-

Scheduler code.

- -

Definition in file chschd.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chschd_8c_source.html b/ChibiOS_2.0.8/docs/html/chschd_8c_source.html deleted file mode 100644 index a3aafd6..0000000 --- a/ChibiOS_2.0.8/docs/html/chschd_8c_source.html +++ /dev/null @@ -1,326 +0,0 @@ - - -ChibiOS/RT: chschd.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chschd_8h.html b/ChibiOS_2.0.8/docs/html/chschd_8h.html deleted file mode 100644 index 8654c65..0000000 --- a/ChibiOS_2.0.8/docs/html/chschd_8h.html +++ /dev/null @@ -1,117 +0,0 @@ - - -ChibiOS/RT: chschd.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chschd.h File Reference

-
-
- -

Scheduler macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  ReadyList
 Ready list header. More...

-Defines

#define RDY_OK   0
 Default thread wakeup low level message.
#define RDY_TIMEOUT   -1
 Low level message sent to a thread awakened by a timeout.
#define RDY_RESET   -2
 Low level message sent to a thread awakened by a reset operation.
#define NOPRIO   0
 Ready list header priority.
#define IDLEPRIO   1
 Idle thread priority.
#define LOWPRIO   2
 Lowest user priority.
#define NORMALPRIO   64
 Normal user priority.
#define HIGHPRIO   127
 Highest user priority.
#define ABSPRIO   255
 Greatest possible priority.
#define TIME_IMMEDIATE   ((systime_t)-1)
 Zero time specification for some syscalls with a timeout specification.
#define TIME_INFINITE   ((systime_t)0)
 Infinite time specification for all the syscalls with a timeout specification.
#define firstprio(rlp)   ((rlp)->p_next->p_prio)
 Returns the priority of the first thread on the given ready list.
#define currp   rlist.r_current
 Current thread pointer access macro.
#define setcurrp(tp)   (currp = (tp))
 Current thread pointer change macro.
#define chSchIsRescRequiredI()   (firstprio(&rlist.r_queue) > currp->p_prio)
 Determines if the current thread must reschedule.
#define chSchCanYieldS()   (firstprio(&rlist.r_queue) >= currp->p_prio)
 Determines if yielding is possible.
#define chSchDoYieldS()
 Yields the time slot.

-Functions

void scheduler_init (void)
 Scheduler initialization.
ThreadchSchReadyI (Thread *tp)
 Inserts a thread in the Ready List.
void chSchGoSleepS (tstate_t newstate)
 Puts the current thread to sleep into the specified state.
msg_t chSchGoSleepTimeoutS (tstate_t newstate, systime_t time)
 Puts the current thread to sleep into the specified state with timeout specification.
void chSchWakeupS (Thread *ntp, msg_t msg)
 Wakes up a thread.
void chSchDoRescheduleI (void)
 Switches to the first thread on the runnable queue.
void chSchRescheduleS (void)
 Performs a reschedule if a higher priority thread is runnable.
bool_t chSchIsRescRequiredExI (void)
 Evaluates if a reschedule is required.
-

Detailed Description

-

Scheduler macros and structures.

- -

Definition in file chschd.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chschd_8h_source.html b/ChibiOS_2.0.8/docs/html/chschd_8h_source.html deleted file mode 100644 index aa6c3c5..0000000 --- a/ChibiOS_2.0.8/docs/html/chschd_8h_source.html +++ /dev/null @@ -1,234 +0,0 @@ - - -ChibiOS/RT: chschd.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chsem_8c.html b/ChibiOS_2.0.8/docs/html/chsem_8c.html deleted file mode 100644 index 54889ff..0000000 --- a/ChibiOS_2.0.8/docs/html/chsem_8c.html +++ /dev/null @@ -1,80 +0,0 @@ - - -ChibiOS/RT: chsem.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chsem.c File Reference

-
-
- -

Semaphores code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - -

-Functions

void chSemInit (Semaphore *sp, cnt_t n)
 Initializes a semaphore with the specified counter value.
void chSemReset (Semaphore *sp, cnt_t n)
 Performs a reset operation on the semaphore.
void chSemResetI (Semaphore *sp, cnt_t n)
 Performs a reset operation on the semaphore.
msg_t chSemWait (Semaphore *sp)
 Performs a wait operation on a semaphore.
msg_t chSemWaitS (Semaphore *sp)
 Performs a wait operation on a semaphore.
msg_t chSemWaitTimeout (Semaphore *sp, systime_t time)
 Performs a wait operation on a semaphore with timeout specification.
msg_t chSemWaitTimeoutS (Semaphore *sp, systime_t time)
 Performs a wait operation on a semaphore with timeout specification.
void chSemSignal (Semaphore *sp)
 Performs a signal operation on a semaphore.
void chSemSignalI (Semaphore *sp)
 Performs a signal operation on a semaphore.
msg_t chSemSignalWait (Semaphore *sps, Semaphore *spw)
 Performs atomic signal and wait operations on two semaphores.
-

Detailed Description

-

Semaphores code.

- -

Definition in file chsem.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chsem_8c_source.html b/ChibiOS_2.0.8/docs/html/chsem_8c_source.html deleted file mode 100644 index 10a3313..0000000 --- a/ChibiOS_2.0.8/docs/html/chsem_8c_source.html +++ /dev/null @@ -1,335 +0,0 @@ - - -ChibiOS/RT: chsem.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chsem_8h.html b/ChibiOS_2.0.8/docs/html/chsem_8h.html deleted file mode 100644 index e1cd67f..0000000 --- a/ChibiOS_2.0.8/docs/html/chsem_8h.html +++ /dev/null @@ -1,102 +0,0 @@ - - -ChibiOS/RT: chsem.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chsem.h File Reference

-
-
- -

Semaphores macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  Semaphore
 Semaphore structure. More...

-Defines

#define _SEMAPHORE_DATA(name, n)   {_THREADSQUEUE_DATA(name.s_queue), n}
 Data part of a static semaphore initializer.
#define SEMAPHORE_DECL(name, n)   Semaphore name = _SEMAPHORE_DATA(name, n)
 Static semaphore initializer.
#define chSemFastWaitI(sp)   ((sp)->s_cnt--)
 Decreases the semaphore counter.
#define chSemFastSignalI(sp)   ((sp)->s_cnt++)
 Increases the semaphore counter.
#define chSemGetCounterI(sp)   ((sp)->s_cnt)
 Returns the semaphore counter current value.

-Typedefs

typedef struct Semaphore Semaphore
 Semaphore structure.

-Functions

void chSemInit (Semaphore *sp, cnt_t n)
 Initializes a semaphore with the specified counter value.
void chSemReset (Semaphore *sp, cnt_t n)
 Performs a reset operation on the semaphore.
void chSemResetI (Semaphore *sp, cnt_t n)
 Performs a reset operation on the semaphore.
msg_t chSemWait (Semaphore *sp)
 Performs a wait operation on a semaphore.
msg_t chSemWaitS (Semaphore *sp)
 Performs a wait operation on a semaphore.
msg_t chSemWaitTimeout (Semaphore *sp, systime_t time)
 Performs a wait operation on a semaphore with timeout specification.
msg_t chSemWaitTimeoutS (Semaphore *sp, systime_t time)
 Performs a wait operation on a semaphore with timeout specification.
void chSemSignal (Semaphore *sp)
 Performs a signal operation on a semaphore.
void chSemSignalI (Semaphore *sp)
 Performs a signal operation on a semaphore.
msg_t chSemSignalWait (Semaphore *sps, Semaphore *spw)
 Performs atomic signal and wait operations on two semaphores.
-

Detailed Description

-

Semaphores macros and structures.

- -

Definition in file chsem.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chsem_8h_source.html b/ChibiOS_2.0.8/docs/html/chsem_8h_source.html deleted file mode 100644 index baaab38..0000000 --- a/ChibiOS_2.0.8/docs/html/chsem_8h_source.html +++ /dev/null @@ -1,155 +0,0 @@ - - -ChibiOS/RT: chsem.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chstreams_8h.html b/ChibiOS_2.0.8/docs/html/chstreams_8h.html deleted file mode 100644 index fc673dc..0000000 --- a/ChibiOS_2.0.8/docs/html/chstreams_8h.html +++ /dev/null @@ -1,75 +0,0 @@ - - -ChibiOS/RT: chstreams.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chstreams.h File Reference

-
-
- -

Data streams. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - -

-Data Structures

struct  BaseSequentialStreamVMT
 BaseSequentialStream virtual methods table. More...
struct  BaseSequentialStream
 Base stream class. More...

-Defines

#define _base_sequential_stream_methods
 BaseSequentialStream specific methods.
#define _base_sequential_stream_data
 BaseSequentialStream specific data.
#define chSequentialStreamWrite(ip, bp, n)   ((ip)->vmt->write(ip, bp, n))
 Sequential Stream write.
#define chSequentialStreamRead(ip, bp, n)   ((ip)->vmt->read(ip, bp, n))
 Sequential Stream read.
-

Detailed Description

-

Data streams.

-

This header defines abstract interfaces useful to access generic data streams in a standardized way.

- -

Definition in file chstreams.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chstreams_8h_source.html b/ChibiOS_2.0.8/docs/html/chstreams_8h_source.html deleted file mode 100644 index 4b54da2..0000000 --- a/ChibiOS_2.0.8/docs/html/chstreams_8h_source.html +++ /dev/null @@ -1,155 +0,0 @@ - - -ChibiOS/RT: chstreams.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chsys_8c.html b/ChibiOS_2.0.8/docs/html/chsys_8c.html deleted file mode 100644 index 57ba4ac..0000000 --- a/ChibiOS_2.0.8/docs/html/chsys_8c.html +++ /dev/null @@ -1,64 +0,0 @@ - - -ChibiOS/RT: chsys.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chsys.c File Reference

-
-
- -

System related code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - -

-Functions

void chSysInit (void)
 ChibiOS/RT initialization.
void chSysTimerHandlerI (void)
 Handles time ticks for round robin preemption and timer increments.
-

Detailed Description

-

System related code.

- -

Definition in file chsys.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chsys_8c_source.html b/ChibiOS_2.0.8/docs/html/chsys_8c_source.html deleted file mode 100644 index 300cfa4..0000000 --- a/ChibiOS_2.0.8/docs/html/chsys_8c_source.html +++ /dev/null @@ -1,189 +0,0 @@ - - -ChibiOS/RT: chsys.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chsys_8h.html b/ChibiOS_2.0.8/docs/html/chsys_8h.html deleted file mode 100644 index 49a7600..0000000 --- a/ChibiOS_2.0.8/docs/html/chsys_8h.html +++ /dev/null @@ -1,92 +0,0 @@ - - -ChibiOS/RT: chsys.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chsys.h File Reference

-
-
- -

System related macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Defines

#define chSysHalt()   port_halt()
 Halts the system.
#define chSysSwitchI(ntp, otp)   port_switch(ntp, otp)
 Performs a context switch.
#define chSysDisable()   port_disable()
 Raises the system interrupt priority mask to the maximum level.
#define chSysSuspend()   port_suspend()
 Raises the system interrupt priority mask to system level.
#define chSysEnable()   port_enable()
 Lowers the system interrupt priority mask to user level.
#define chSysLock()
 Enters the kernel lock mode.
#define chSysUnlock()
 Leaves the kernel lock mode.
#define chSysLockFromIsr()   port_lock_from_isr()
 Enters the kernel lock mode from within an interrupt handler.
#define chSysUnlockFromIsr()   port_unlock_from_isr()
 Leaves the kernel lock mode from within an interrupt handler.
#define CH_IRQ_PROLOGUE()   PORT_IRQ_PROLOGUE()
 IRQ handler enter code.
#define CH_IRQ_EPILOGUE()   PORT_IRQ_EPILOGUE()
 IRQ handler exit code.
#define CH_IRQ_HANDLER(id)   PORT_IRQ_HANDLER(id)
 Standard normal IRQ handler declaration.
#define CH_FAST_IRQ_HANDLER(id)   PORT_FAST_IRQ_HANDLER(id)
 Standard fast IRQ handler declaration.

-Functions

void chSysInit (void)
 ChibiOS/RT initialization.
void chSysTimerHandlerI (void)
 Handles time ticks for round robin preemption and timer increments.
-

Detailed Description

-

System related macros and structures.

- -

Definition in file chsys.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chsys_8h_source.html b/ChibiOS_2.0.8/docs/html/chsys_8h_source.html deleted file mode 100644 index b30df37..0000000 --- a/ChibiOS_2.0.8/docs/html/chsys_8h_source.html +++ /dev/null @@ -1,237 +0,0 @@ - - -ChibiOS/RT: chsys.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chthreads_8c.html b/ChibiOS_2.0.8/docs/html/chthreads_8c.html deleted file mode 100644 index 6e7ce49..0000000 --- a/ChibiOS_2.0.8/docs/html/chthreads_8c.html +++ /dev/null @@ -1,90 +0,0 @@ - - -ChibiOS/RT: chthreads.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chthreads.c File Reference

-
-
- -

Threads code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

Threadinit_thread (Thread *tp, tprio_t prio)
 Initializes a thread structure.
ThreadchThdCreateI (void *wsp, size_t size, tprio_t prio, tfunc_t pf, void *arg)
 Creates a new thread into a static memory area.
ThreadchThdCreateStatic (void *wsp, size_t size, tprio_t prio, tfunc_t pf, void *arg)
 Creates a new thread into a static memory area.
ThreadchThdCreateFromHeap (MemoryHeap *heapp, size_t size, tprio_t prio, tfunc_t pf, void *arg)
 Creates a new thread allocating the memory from the heap.
ThreadchThdCreateFromMemoryPool (MemoryPool *mp, tprio_t prio, tfunc_t pf, void *arg)
 Creates a new thread allocating the memory from the specified memory pool.
tprio_t chThdSetPriority (tprio_t newprio)
 Changes the running thread priority level then reschedules if necessary.
ThreadchThdResume (Thread *tp)
 Resumes a suspended thread.
void chThdTerminate (Thread *tp)
 Requests a thread termination.
void chThdSleep (systime_t time)
 Suspends the invoking thread for the specified time.
void chThdSleepUntil (systime_t time)
 Suspends the invoking thread until the system time arrives to the specified value.
void chThdYield (void)
 Yields the time slot.
void chThdExit (msg_t msg)
 Terminates the current thread by specifying an exit status code.
ThreadchThdAddRef (Thread *tp)
 Adds a reference to a thread object.
void chThdRelease (Thread *tp)
 Releases a reference to a thread object.
msg_t chThdWait (Thread *tp)
 Blocks the execution of the invoking thread until the specified thread terminates then the exit code is returned.
-

Detailed Description

-

Threads code.

- -

Definition in file chthreads.c.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chthreads_8c_source.html b/ChibiOS_2.0.8/docs/html/chthreads_8c_source.html deleted file mode 100644 index 20c23b5..0000000 --- a/ChibiOS_2.0.8/docs/html/chthreads_8c_source.html +++ /dev/null @@ -1,566 +0,0 @@ - - -ChibiOS/RT: chthreads.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chthreads_8h.html b/ChibiOS_2.0.8/docs/html/chthreads_8h.html deleted file mode 100644 index 21a8e42..0000000 --- a/ChibiOS_2.0.8/docs/html/chthreads_8h.html +++ /dev/null @@ -1,158 +0,0 @@ - - -ChibiOS/RT: chthreads.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chthreads.h File Reference

-
-
- -

Threads macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  Thread
 Structure representing a thread. More...

-Defines

#define THD_STATE_READY   0
 Thread state: Ready to run, waiting on the ready list.
#define THD_STATE_CURRENT   1
 Thread state: Currently running.
#define THD_STATE_SUSPENDED   2
 Thread state: Thread created in suspended state.
#define THD_STATE_WTSEM   3
 Thread state: Waiting on a semaphore.
#define THD_STATE_WTMTX   4
 Thread state: Waiting on a mutex.
#define THD_STATE_WTCOND   5
 Thread state: Waiting in chCondWait().
#define THD_STATE_SLEEPING   6
 Thread state: Waiting in chThdSleep() or chThdSleepUntil().
#define THD_STATE_WTEXIT   7
 Thread state: Waiting in chThdWait().
#define THD_STATE_WTOREVT   8
 Thread state: Waiting in chEvtWaitXXX().
#define THD_STATE_WTANDEVT   9
 Thread state: Waiting in chEvtWaitAllTimeout().
#define THD_STATE_SNDMSG   10
 Thread state: Waiting in chMsgSend().
#define THD_STATE_WTMSG   11
 Thread state: Waiting in chMsgWait().
#define THD_STATE_FINAL   12
 Thread state: After termination.
#define THD_MEM_MODE_MASK   3
 Thread memory mode mask.
#define THD_MEM_MODE_STATIC   0
 Thread memory mode: static.
#define THD_MEM_MODE_HEAP   1
 Thread memory mode: heap.
#define THD_MEM_MODE_MEMPOOL   2
 Thread memory mode: pool.
#define THD_TERMINATE   4
 Termination requested.
#define chThdSelf()   currp
 Returns a pointer to the current Thread.
#define chThdGetPriority()   (currp->p_prio)
 Returns the current thread priority.
#define chThdLS()   (void *)(currp + 1)
 Returns the pointer to the Thread local storage area, if any.
#define chThdTerminated(tp)   ((tp)->p_state == THD_STATE_FINAL)
 Verifies if the specified thread is in the THD_STATE_FINAL state.
#define chThdShouldTerminate()   (currp->p_flags & THD_TERMINATE)
 Verifies if the current thread has a termination request pending.
#define chThdResumeI(tp)   chSchReadyI(tp)
 Resumes a thread created with chThdInit().
#define chThdSleepS(time)   chSchGoSleepTimeoutS(THD_STATE_SLEEPING, time)
 Suspends the invoking thread for the specified time.
#define chThdSleepSeconds(sec)   chThdSleep(S2ST(sec))
 Delays the invoking thread for the specified number of seconds.
#define chThdSleepMilliseconds(msec)   chThdSleep(MS2ST(msec))
 Delays the invoking thread for the specified number of milliseconds.
#define chThdSleepMicroseconds(usec)   chThdSleep(US2ST(usec))
 Delays the invoking thread for the specified number of microseconds.

-Typedefs

typedef msg_t(* tfunc_t )(void *)
 Thread function.

-Functions

Threadinit_thread (Thread *tp, tprio_t prio)
 Initializes a thread structure.
ThreadchThdCreateI (void *wsp, size_t size, tprio_t prio, tfunc_t pf, void *arg)
 Creates a new thread into a static memory area.
ThreadchThdCreateStatic (void *wsp, size_t size, tprio_t prio, tfunc_t pf, void *arg)
 Creates a new thread into a static memory area.
ThreadchThdCreateFromHeap (MemoryHeap *heapp, size_t size, tprio_t prio, tfunc_t pf, void *arg)
 Creates a new thread allocating the memory from the heap.
ThreadchThdCreateFromMemoryPool (MemoryPool *mp, tprio_t prio, tfunc_t pf, void *arg)
 Creates a new thread allocating the memory from the specified memory pool.
tprio_t chThdSetPriority (tprio_t newprio)
 Changes the running thread priority level then reschedules if necessary.
ThreadchThdResume (Thread *tp)
 Resumes a suspended thread.
void chThdTerminate (Thread *tp)
 Requests a thread termination.
void chThdSleep (systime_t time)
 Suspends the invoking thread for the specified time.
void chThdSleepUntil (systime_t time)
 Suspends the invoking thread until the system time arrives to the specified value.
void chThdYield (void)
 Yields the time slot.
void chThdExit (msg_t msg)
 Terminates the current thread by specifying an exit status code.
ThreadchThdAddRef (Thread *tp)
 Adds a reference to a thread object.
void chThdRelease (Thread *tp)
 Releases a reference to a thread object.
msg_t chThdWait (Thread *tp)
 Blocks the execution of the invoking thread until the specified thread terminates then the exit code is returned.
-

Detailed Description

-

Threads macros and structures.

- -

Definition in file chthreads.h.

-
-
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chthreads_8h_source.html b/ChibiOS_2.0.8/docs/html/chthreads_8h_source.html deleted file mode 100644 index 7734beb..0000000 --- a/ChibiOS_2.0.8/docs/html/chthreads_8h_source.html +++ /dev/null @@ -1,381 +0,0 @@ - - -ChibiOS/RT: chthreads.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chvt_8c.html b/ChibiOS_2.0.8/docs/html/chvt_8c.html deleted file mode 100644 index 13e7ecf..0000000 --- a/ChibiOS_2.0.8/docs/html/chvt_8c.html +++ /dev/null @@ -1,73 +0,0 @@ - - -ChibiOS/RT: chvt.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chvt.c File Reference

-
-
- -

Time and Virtual Timers related code. -More...

-#include "ch.h"
- -

Go to the source code of this file.

- - - - - - - - - - - - - -

-Functions

void vt_init (void)
 Virtual Timers initialization.
void chVTSetI (VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par)
 Enables a virtual timer.
void chVTResetI (VirtualTimer *vtp)
 Disables a Virtual Timer.
bool_t chTimeIsWithin (systime_t start, systime_t end)
 Checks if the current system time is within the specified time window.

-Variables

VTList vtlist
 Virtual timers delta list header.
-

Detailed Description

-

Time and Virtual Timers related code.

- -

Definition in file chvt.c.

-
-
-Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chvt_8c_source.html b/ChibiOS_2.0.8/docs/html/chvt_8c_source.html deleted file mode 100644 index 68cdc7f..0000000 --- a/ChibiOS_2.0.8/docs/html/chvt_8c_source.html +++ /dev/null @@ -1,173 +0,0 @@ - - -ChibiOS/RT: chvt.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chvt_8h.html b/ChibiOS_2.0.8/docs/html/chvt_8h.html deleted file mode 100644 index 361ab24..0000000 --- a/ChibiOS_2.0.8/docs/html/chvt_8h.html +++ /dev/null @@ -1,101 +0,0 @@ - - -ChibiOS/RT: chvt.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chvt.h File Reference

-
-
- -

Time macros and structures. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  VirtualTimer
 Virtual Timer descriptor structure. More...
struct  VTList
 Virtual timers list header. More...

-Defines

#define S2ST(sec)   ((systime_t)((sec) * CH_FREQUENCY))
 Time conversion utility.
#define MS2ST(msec)   ((systime_t)(((((msec) - 1L) * CH_FREQUENCY) / 1000L) + 1L))
 Time conversion utility.
#define US2ST(usec)   ((systime_t)(((((usec) - 1L) * CH_FREQUENCY) / 1000000L) + 1L))
 Time conversion utility.
#define chVTDoTickI()
 Virtual timers ticker.
#define chVTIsArmedI(vtp)   ((vtp)->vt_func != NULL)
 Returns TRUE if the speciified timer is armed.
#define chTimeNow()   (vtlist.vt_systime)
 Current system time.

-Typedefs

typedef void(* vtfunc_t )(void *)
 Virtual Timer callback function.
typedef struct VirtualTimer VirtualTimer
 Virtual Timer structure type.

-Functions

void vt_init (void)
 Virtual Timers initialization.
void chVTSetI (VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par)
 Enables a virtual timer.
void chVTResetI (VirtualTimer *vtp)
 Disables a Virtual Timer.
bool_t chTimeIsWithin (systime_t start, systime_t end)
 Checks if the current system time is within the specified time window.

-Variables

VTList vtlist
 Virtual timers delta list header.
-

Detailed Description

-

Time macros and structures.

- -

Definition in file chvt.h.

-
-
-Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/chvt_8h_source.html b/ChibiOS_2.0.8/docs/html/chvt_8h_source.html deleted file mode 100644 index 0402499..0000000 --- a/ChibiOS_2.0.8/docs/html/chvt_8h_source.html +++ /dev/null @@ -1,198 +0,0 @@ - - -ChibiOS/RT: chvt.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread.html b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread.html deleted file mode 100644 index 5359ab1..0000000 --- a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread.html +++ /dev/null @@ -1,708 +0,0 @@ - - -ChibiOS/RT: chibios_rt::BaseThread Class Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chibios_rt::BaseThread Class Reference

-
-
- -

Base class for a ChibiOS/RT thread. -More...

- -

#include <ch.hpp>

- -

Inherited by chibios_rt::EnhancedThread< N >.

-
-Collaboration diagram for chibios_rt::BaseThread:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 BaseThread (void *workspace, size_t wsize, tprio_t prio)
 Thread constructor.
msg_t Wait (void)
 Synchronization on Thread exit.
void Resume (void)
 Resumes the thread.
void Terminate (void)
 Requests thread termination.
msg_t SendMessage (msg_t msg)
 Sends a message to the thread and returns the answer.
virtual msg_t Main (void)
 Thread body function.

-Static Public Member Functions

static void Exit (msg_t msg)
 Thread exit.
static void SetPriority (tprio_t newprio)
 Changes the thread priority.
static void Sleep (systime_t n)
 Suspends the thread execution for the specified number of system ticks.
static void SleepUntil (systime_t time)
 Suspends the thread execution until the specified time arrives.
static msg_t SendMessage (::Thread *tp, msg_t msg)
 Sends a message to the thread and returns the answer.
static msg_t WaitMessage (void)
 Waits for a message and returns it.
static msg_t GetMessage (void)
 Returns an enqueued message or NULL.
static void ReleaseMessage (msg_t msg)
 Releases the next message in queue with a reply.
static bool IsPendingMessage (void)
 Returns true if there is at least one message in queue.

-Data Fields

::Threadthread_ref
 Pointer to the system thread.
-

Detailed Description

-

Base class for a ChibiOS/RT thread.

-

The thread body is the virtual function Main().

- -

Definition at line 120 of file ch.hpp.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
chibios_rt::BaseThread::BaseThread (void *  workspace,
size_t  wsize,
tprio_t  prio 
)
-
-
- -

Thread constructor.

-

The thread object is initialized and a system thread is started.

-
Parameters:
- - - - -
workspace pointer to the workspace area
wsize size of the workspace area
prio thread priority
-
-
- -

Definition at line 85 of file ch.cpp.

- -

References chThdCreateStatic(), and thread_ref.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
void chibios_rt::BaseThread::Exit (msg_t  msg )  [static]
-
-
- -

Thread exit.

-
Parameters:
- - -
msg the exit message
-
-
- -

Definition at line 90 of file ch.cpp.

- -

References chThdExit().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
msg_t chibios_rt::BaseThread::Wait (void  ) 
-
-
- -

Synchronization on Thread exit.

-
Returns:
the exit message from the thread
- -

Definition at line 96 of file ch.cpp.

- -

References chThdWait(), and thread_ref.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void chibios_rt::BaseThread::Resume (void  ) 
-
-
- -

Resumes the thread.

-

The thread encapsulated into the object is resumed.

- -

Definition at line 107 of file ch.cpp.

- -

References chThdResume(), and thread_ref.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void chibios_rt::BaseThread::SetPriority (tprio_t  newprio )  [static]
-
-
- -

Changes the thread priority.

-
Parameters:
- - -
newprio the new priority level
-
-
- -

Definition at line 102 of file ch.cpp.

- -

References chThdSetPriority().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void chibios_rt::BaseThread::Terminate (void  ) 
-
-
- -

Requests thread termination.

-

A termination flag is pended on the thread, it is thread responsibility to detect it and exit.

- -

Definition at line 112 of file ch.cpp.

- -

References chThdTerminate(), and thread_ref.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void chibios_rt::BaseThread::Sleep (systime_t  n )  [static]
-
-
- -

Suspends the thread execution for the specified number of system ticks.

-
Parameters:
- - -
n the number of system ticks
-
-
- -

Definition at line 117 of file ch.cpp.

- -

References chThdSleep().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void chibios_rt::BaseThread::SleepUntil (systime_t  time )  [static]
-
-
- -

Suspends the thread execution until the specified time arrives.

-
Parameters:
- - -
time the system time
-
-
- -

Definition at line 122 of file ch.cpp.

- -

References chThdSleepUntil().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
msg_t chibios_rt::BaseThread::SendMessage (::Thread tp,
msg_t  msg 
) [static]
-
-
- -

Sends a message to the thread and returns the answer.

-
Parameters:
- - - -
tp the target thread
msg the sent message
-
-
-
Returns:
The returned message.
- -

Definition at line 128 of file ch.cpp.

- -

References chMsgSend().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
msg_t chibios_rt::BaseThread::SendMessage (msg_t  msg ) 
-
-
- -

Sends a message to the thread and returns the answer.

-
Parameters:
- - -
msg the sent message
-
-
-
Returns:
The returned message.
- -

Definition at line 133 of file ch.cpp.

- -

References chMsgSend(), and thread_ref.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
msg_t chibios_rt::BaseThread::WaitMessage (void  )  [static]
-
-
- -

Waits for a message and returns it.

-
Returns:
The incoming message.
- -

Definition at line 138 of file ch.cpp.

- -

References chMsgWait().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
msg_t chibios_rt::BaseThread::GetMessage (void  )  [static]
-
-
- -

Returns an enqueued message or NULL.

-
Returns:
The incoming message.
-
Return values:
- - -
NULL No incoming message.
-
-
- -

Definition at line 143 of file ch.cpp.

- -

References chMsgGet().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void chibios_rt::BaseThread::ReleaseMessage (msg_t  msg )  [static]
-
-
- -

Releases the next message in queue with a reply.

-
Parameters:
- - -
msg the answer message
-
-
- -

Definition at line 148 of file ch.cpp.

- -

References chMsgRelease().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
bool chibios_rt::BaseThread::IsPendingMessage (void  )  [static]
-
-
- -

Returns true if there is at least one message in queue.

-
Return values:
- - - -
TRUE A message is waiting in queue.
FALSE A message is not waiting in queue.
-
-
- -

Definition at line 153 of file ch.cpp.

- -

References chMsgIsPendingI, and currp.

- -
-
- -
-
- - - - - - - - - -
msg_t chibios_rt::BaseThread::Main (void  )  [virtual]
-
-
- -

Thread body function.

-
Returns:
The exit message.
- -

Definition at line 159 of file ch.cpp.

- -
-
-

Field Documentation

- -
- -
- -

Pointer to the system thread.

- -

Definition at line 125 of file ch.hpp.

- -

Referenced by BaseThread(), Resume(), SendMessage(), Terminate(), and Wait().

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread__coll__graph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread__coll__graph.png deleted file mode 100644 index 6b54c92733ac3bd565c40a25062cd02c0ff52a36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56356 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 f2y!qgPU!i|Z+-VGtJt+UZ$UDiu6{1-oD!Mt~S zOdGylP~?g_^5Cb})eU_I?=P?S)#S6{Pe{zm%M)qrXu5gxCS$|o1BRz6I1ey2ti9mK z!Of7jw0sqp4nsm}>d|beMHjNRN=2;=dm)jU%T!@n!qF7+w#RL5Q^$+IgG}BoPdK@C z1ShKNY;bXzx8Z=0VCAE=2aXly+?ijxU%&EL|KlI^@peTko_+ZHWAf+cmTslIG3g<_ z(@op8&aYTEH+%Eu{CzhvbnfSvOw)_sQSfvlgW#0+4fc2D|1*-!mkKxSI~!5C^4RHF z&Qp(j>b+f``E%3Wy|J(U1$sX3czh#s+rx-;$4gzOu3i`%Lg(5w0>Q>MTAvnl!4Ba_LK`L11gnObVU?04zoTP4#@ zzEivVQsnKaoMO?JEv46&p80z5ZE)`D6Rx$T{`*;CufWIetP3?XLi?AV&39iX0Gd9uO(kNX?$E|qR{1L-H#z6 zo!6K4+{-YVUO!#P{MX-q&+hJiZ7(J(^a{jG28~CGCG6*&)aSbAm%_e0Szp>%`u(v1cjynbYriE?sNOGI^I} zhMMx4skI-}=S>vKcMbgFw|QrcyI0}j%RgUyjCT*=U zM4p4aHN4kaC%m4%>Ya}E^z}Wvn!=aunEfm;_Wd4vo>i~j-2B;{er`_rU$<`2nZ;#_ zY;)I6so5?Oz0yD&z z_TSmRzkTuI{JK|P--+t3v%8<+wSM}obBnE)pV;JJu#`LJ*VAQZCm-K(Zn^aKGd0e; zNsaXZfYQIpwN*udTXu?d;mqX{Xji-9BqPy=!{X zTB#4B4AP;mj53Tu)>g+xM?0^+%JnZZq?t*3pVzy|LGw5imob(wWo}JB|K(Lt-?a>X*yX5|_dS(b!*xGoVWGOJU#o-4QVXUHs;OTJcmI8&SFlvxN?O#| zkab$?mR~h>G%Aw z(f%S=(IZUWA~zmB+`8W>UBUiGW)v*P9ztZ}Tjo3E{>}gBBAi`bZeGG7F2-<&OSb9C w7S^)T($XoG9V=#JGR$w~b96xl!jI(Vgxy@tbG5&lfq{X+)78&qol`;+0IBetsQ>@~ diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a1557c9e6e0b61a7eb848ce928115973d_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a1557c9e6e0b61a7eb848ce928115973d_cgraph.png deleted file mode 100644 index 213977346f1e08f48f892e8ef2bc99a57663d8fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3508 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 diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a44de1239fc6517ddf735405dd7fc8463_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a44de1239fc6517ddf735405dd7fc8463_cgraph.png deleted file mode 100644 index b8dd2f4fc60fed2e76714e8acf24c62c0294a265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1285 zcmeAS@N?(olHy`uVBq!ia0y~yU^Hf6U{K{?V_;y=TfmpYz`($k|H*Y zfq{X&#M9T6{T8a&N2{&?-+1K#i zRI^5Xt=i}N-%r1Of4#!S`t$tvW%>K&9?#-eXc2JYP=pa4PXnC(r89_q7IE@m$z!UB z*wVqWpo~1geUXIJs)C8|^p1S1eBb!W<2^5XvzO(1D8JkwbtXGdF?mj) zSN#f8J1d(tU&X}M>3_@A$OIr0Vj$s!5#ffA>_r;4R*F=!rL5%Ccr3^>gWc)y$TR zR~Q{M_blGJ>zT!mB{yr{GeqR}AFsMxy1!P$c%7w`(elPXx1?>KE^RUDdFgTM(iNF5 zpJg-a*dB(PdDY~ra|4 zT)m#3bQ=6+-DC63!sj!+Y8Th9v$_2K{a!DjI1l%=+OpH#LV{{vuB_3tpPZScn4Ojx z@MLc6EVbV+PkANJ;GMF9mi_e@q?KmX{?&g@)9eYG zTQc>1ZspqsTCoS3%=kJfhasc3C2#xZ6}R7t{5#h9^XJxXub+MAep$#(-Py2jZOGca z+rMAU@331nWm#Qj;=10Omx69jGP6HBGl#*W@z&a~*U9@#o0s@r3VeBlW&NWcYlT~l z?Dv;lEc_yW&t|P*02lAti=kfmS#NXRy`NvnP-FK^WcI9^nKjvNmjY+D75w#oGizq= zTh4|U9}ZWjGdAm?=r7qsB(R+aQwqsNz}Y|;S7i3 zREIkZH}2j&`bepM`IHGg0`>nV9&t9={IH;-x3|}3t3c7L42B;oGX!D91hl|d`pll& Y?!wCV3i~WU|?WN@^*J&_z!{$_AZ~y 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 Iol`;+0GB4HPyhe` diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a4ecedb2d2b646ea4a9261c0e62f16945_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a4ecedb2d2b646ea4a9261c0e62f16945_cgraph.png deleted file mode 100644 index 0bc04704eb8363f49b1f498a901ac62d4fa0ac0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3620 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 diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a5c7600b2472318e1406d5c5dbc1a73d5_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a5c7600b2472318e1406d5c5dbc1a73d5_cgraph.png deleted file mode 100644 index 213977346f1e08f48f892e8ef2bc99a57663d8fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3508 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 diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a6cde6d5b592476aded69ee10b5adc912_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a6cde6d5b592476aded69ee10b5adc912_cgraph.png deleted file mode 100644 index f965fd934f6fa1219b37a408875715f0177fe292..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1930 zcmeAS@N?(olHy`uVBq!ia0y~yV7$%1z@W;(#=yY9HP!hg0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj+4^FU7wwFtF=*x;TbZ%z1m)KSv}~hW*3)*-P)Xuq7!>$TK{W z(KE+J;!p7dhKCPMx~Q58_K4fA;M_9fg(F{sknIeQXeD>%Bt~za4)(?E%ht})IOMuW zNJ&lLblGXIWUubEci){qTvlqd&;0YV`{(k0|5a&8Ec>?ie)Z>Hb-&Y=={UHcgDpOq zXZPhYd^5EYSTv=EJ3-;Kg3_(_Tj!Nck1=FDUiy^7U`i>^7kO5j=XbYz72io?xO;nh zzQ3))B9q>}KBfas#}bcxv}nj4Uf6cQ9%+H-PRM~6o0vE>sV-`beW?&jv!^Se1Nza-{f@}5b3CqvwC zy)D1~KHOjVSHjX4Z|?k`5mX^O;quQvw(&9h>oV3IROI-wKX`pLQ}|Dre68yte61lG zU-s!W{gzo?wJk#C2VZZk*RA(^svmP$?ccTO(VNYcx}1r(Gj+G7WDA)jnxAfY*Q@+e zB|?97;7QZ2Ex!|%7R<@o-EoUG;rgFH^EbCTolp0&Y(Dzvhe1J};o%Ffggu3XBW7?; z=9v;Sx8aRw;kUBVulGbIPQJQo&dfP7KQs?-IHY!D!&9@<5uU5(G6;EXdlxz(uc_?) zcfT8T>t~<(y4qhny7uUb+v2J(TYI&A_T2kk@wof4{XL_*Pph`)KHj`Cy8PVT+>h%P zJ^mIu`E>x-`R)_lt%sIrPP})pCEW0xQHgMSUVT8MRzm!h8705>PM%%v^ewvb$JV{7 z9UmzI8w6AhH_KJhYW<@+k3(4E^B_XyvvE1#Y^IpXem_POU5 zBxP9ODyLK5r=eD=GE_=-Wrf$AJ?=7N>k^&$8tr zw-_8)_&ZN1E-hHHdGq&4j~|3ARdU{*_toD`!|aX4M{gg`KFixh&8PaT_T>r}sC34= zeVe`KZy#^)zUtPrV7Dt(ckYz_x|@IXXsXwpZKdo-Q@ReXubDlg$xh?v)Y(^da^5aq z>-OaS$t#{FA;lKZpd*83C@7iIgT9~>Z^Q!Rr zpiQAJwv$e;+;{HWUu6bAUw^sdQ8W8vwj@TE`ve$mk}ZB$xajwWCA+&8RvDL|l6p zca))`{BWCiz)GK~;cKJzmnJ=Wu~fv_XHw=P6It%F9}8dgsZ5V-D|Nq*(y8n$Qrm8t@ z(|Eckw{%H@qvjUP*45?j|E)?(+xLHI&`w#?i_0t(-TpEx-u)(f*L3mc&Os}-g|Dtp zEc%b6=wCrv#m6sJQm%g4VQO?k;-!il4t$pEqasw~Nn?S_cZ{2E@0%JiQ>< z_xY{&b$K@m6O5<%9AEN{QK@Xx*SJYM#*$U~*0-ieFW+Z1n|+DTckR7~v-R}VCD-@) z)|%bk#_zH7w{}kS-(Q+u(uZfv-)|VI^)>yMuSRUF?d?C|+h657++w^_AX6ITa!#zf zHe8@?YU-{nvqj!7jSpUZM|ioW+U&n|r9X~7(>veg!Fu_!viP#)?nbiOtxo5a?G|=( zh)ta|r(+kxgAl##1|^@LwQrAKxApF~@KcArO?_v>GWYn7relsb43}9St6q6y{oIW& zxo+_$6j<7HIBDOWsO)ZFV>9RH_Gecnt^IXuufL1fl%QOOQw(g`{xiSDf7!EjUe3?8 z_AiC6{Ia~9e^yhZ>K^lzI)l|JGW39beQ1ro5 zLH|N#eTx1xZ*5=Z)+7A9S9G#g3t1>-xoJuY6|#9R-I{!0Vb-;cfyDu*PIh|4m2XW> zTJ+xQ+Q-0>(`q-3Rt9Yj_NrYM^3}!t_@nUa>twtCywK2%_uik*?a{(W3 zb4z)yNS%86-8=HQ!^;QT{|O)pWuI*>E-sqMn^cvQyk>r6TzT>0MYcA_DSI|<+_=Ws z!^ynib0oW??!xGX)-}x$4|nv9GL1_n=8KbLh*2~7Z`61N`! diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a8b4a3de70b98980e6836a48f3e97969c_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a8b4a3de70b98980e6836a48f3e97969c_cgraph.png deleted file mode 100644 index 90e87f6f291ac9b3710eb9a9105d040507961010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4594 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 diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a9391836cb66a13932044703d1833ae64_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_a9391836cb66a13932044703d1833ae64_cgraph.png deleted file mode 100644 index 6c4f64284e8b281858d853e676117aced17904af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1339 zcmeAS@N?(olHy`uVBq!ia0y~yV2og3U{K{?V_;xlU;gnm0|NtFlDE4H!+#K5uy^@n zkVJ{6uPgg4ZW&%K!LFC$Ul+&-qK^*5mG9!$YCGT z20<$qzv%`R@tGz$2_JrcS)X~>OPoPRUq>fIutQ_U+_|z07MwDRJDxM>FyG*lZP~!{ zVB5V6tqlwfSFeVy&+KrTJ!_WJ;)@)zi&y9}=(qAY3Ir#IlyWI8`p+#Ep`_#=kLo0;d|-Q8UjQ^?Zz)Ar*s^~YL?wbA>x)t!1YYx$bDb1Jnr zm}ROTUopp~s&AA3o5c9VQ3f^7rH|I~sdoJ`72L|QVrky@{>49ko}SNevtGP5z;Gp*B&tLDmhUK{h{tsKd zwUB+<_oy_H_s;r0Ntynyy_arDJuAHb)7AY-skN7jE?Wp?hfgcz(vC^+WxX7xGkG1? zd^%wEF+A%%Yv8R;+Z zSIquN?!wGCbKU9d_iWRYxV_8nxbE!idp41Mef#!CueSY}HZSJs#N|`F?iEG_7c3G< zn{vpXU;f?04 z-MRDfd3E*mT?;=46bc6?bRN6?p@vsj?@UY0_zeEqs?MBwr<_3 pRV)x_XUt&7C)?D44AhR?->%4XKKoete+C8y22WQ%mvv4FO#nd*l~w=% diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_aa824957049b5d62a4d23b0c9758b30a5_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_aa824957049b5d62a4d23b0c9758b30a5_cgraph.png deleted file mode 100644 index 1f3d790b7ad33262bef5f7a6f24c9b8ebdcce887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2037 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 KKbLh*2~7Zc&WR}i diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_abc119aef948c9050d2e18a5a2686d88d_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_abc119aef948c9050d2e18a5a2686d88d_cgraph.png deleted file mode 100644 index ba3755fd10c8d099ae40a965cc62ae7105db616a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4559 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 diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_ae960dbec72042a9072e35984523694b8_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_base_thread_ae960dbec72042a9072e35984523694b8_cgraph.png deleted file mode 100644 index e759872df54825087e2ee9738d9463b59b59fc93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2001 zcmeAS@N?(olHy`uVBq!ia0y~yV0^*Az@W;(#=yYP8CZ3Rfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM|6|m*QU-7}$$FT^vIy=DfY@-ystz%l_g0`sy^XW1V^y+L!kl ziaUPT)HI`8%BOky1Jw;Z?WN*^{)b*|VP|zb!RB(K`B{J7kvofKzL~Y4#dR~sDV`PW zF=F2qX=txYyKFp{ceaI^_2iQBzcxPK^KyU2U9Y|x`Zp_UpS;Af;J>f-#$R1sxxa3` z)m;Wb3=ld^Vp}cW0rTau9D%HJSU)Vk;FwZkS;A0#X1Wvmgw~=O{mq*vN!X|HwDK`V z*j0Ub5u&8Ds_E<3QidH;7CoLi{PppiQm#LBmy2s|b-rQC_N{oQ&S8VP8A2uu4~}#S zx4Jops2*n7d%afjz|sqjQ|<&aggLVtYTjI|%@De@Vb-?m%VaqO1qGKTH>oKpX(_5@ zC@C!xNvqj}`#@48v$IMn~zpv^x=(?yL z7QHh?*5};Mps9x$`1sjA-A&v4w>)&Gfa_lI-FN5zF)qod_|LBV)O14cE8lDOec3xN zbuC)Kcfye2cv`x=U5?2u{qBU)y1EaiUa$ZE!|}icpT7?-n`eIAd1Y!j&%s-#R2`4A zM+PT#=Wpk|unro^!9Tl#Ti=j5`3Ab zWL8i6^{8~G+T$OemsL$RUbT1LhUW}2;YTNbe|Po0zV6zXmDfwZK0Di6`rwp8`!Dsk z*|)hjZ`tKjJNeE3!ml@zJi3pTo#pt`U#=vqo)LU#tLp8-&6f(l9{E2vOi%aNkH>9S~}QWXhSIYHQ()Q|SRmZAoe^#qo~gav=G#qsyAv~CbxfD^^xm`TEVt{FiewlDN6s3m+UvZ&s@- z&5M2B_SBy1#rJ(5Ul{)R!aU!t_?>e6ixR)T`*v_JKDoa|i?Plcsvmh6$gG7Ns` zzq?=m_RXI^!jAjTdb#Z5eXzm#B4Zi*L_3A+@9)(zF6yM&3+) zX=z!#iFe1gh$8P5*4FpQ)x_4+U0Q-2`bo|}1dYux?f8P_dOEbb4HPsq-G`|H}Zs0;a=S!TE6C5?A? zl|7GRVyI{MBL27T{j2Ewxx3r%HZFU9!>8zF#U;j5Vev&TZ=0Xo_2#|pfp5R_lZ!w5 zJgAGaT$05f9a^nq#Jzy~g{$DsD=+8NZQcAkRo>lZ)~C1Gmn+S_F87Yj{JkT_eA~8| z?_0M%zZ{mftZN?AhN!9LCk1Xk**VM5=flDMysK{J{C5+LugULTwTj0jApGj!|AsjINwxOx%G$K@I&+a6_n$qjRSETQ(I{^<6Vi`1JULvuPGsD|#`vh(Lcd#3ZQ z@25!~(|>sWaa{0=t;-MZxA*+>_wC8*3u@a`z4u*MAb5L~$J7;%E z0tfZY&CdO?E~%NvHG5{riGrN4eFmN*C}IQe}~7qm2&xDx-a%>ORGtWPWJPBHDt3pzOjR@Sb){PSY( zg~EW1&z>)SckbMo_WL!TuiRdkyzr5Mqi`t4 - -ChibiOS/RT: chibios_rt::CondVar Class Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- -
-
- -
-

chibios_rt::CondVar Class Reference

-
-
- -

Class encapsulating a conditional variable. -More...

- -

#include <ch.hpp>

- - - - - - - - - - - - - - - -

-Public Member Functions

 CondVar (void)
 CondVar constructor.
void Signal (void)
 Signals the CondVar.
void Broadcast (void)
 Broadcasts the CondVar.
msg_t Wait (void)
 Waits on the CondVar while releasing the controlling mutex.
msg_t WaitTimeout (systime_t time)
 Waits on the CondVar while releasing the controlling mutex.

-Data Fields

struct::CondVar condvar
 Embedded CondVar structure.
-

Detailed Description

-

Class encapsulating a conditional variable.

- -

Definition at line 410 of file ch.hpp.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
CondVar::CondVar (void  ) 
-
-
- -

CondVar constructor.

-

The embedded CondVar structure is initialized.

- -

Definition at line 234 of file ch.cpp.

- -

References chCondInit(), and condvar.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
void CondVar::Signal (void  ) 
-
-
- -

Signals the CondVar.

-

The next thread waiting on the CondVar, if any, is awakened.

- -

Definition at line 239 of file ch.cpp.

- -

References chCondSignal(), and condvar.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void CondVar::Broadcast (void  ) 
-
-
- -

Broadcasts the CondVar.

-

All the threads waiting on the CondVar, if any, are awakened.

- -

Definition at line 244 of file ch.cpp.

- -

References chCondBroadcast(), and condvar.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
msg_t CondVar::Wait (void  ) 
-
-
- -

Waits on the CondVar while releasing the controlling mutex.

-
Returns:
The wakep mode.
-
Return values:
- - - -
RDY_OK if the condvar was signaled using chCondSignal().
RDY_RESET if the condvar was signaled using chCondBroadcast().
-
-
- -

Definition at line 249 of file ch.cpp.

- -

References chCondWait(), and condvar.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
msg_t CondVar::WaitTimeout (systime_t  time ) 
-
-
- -

Waits on the CondVar while releasing the controlling mutex.

-
Parameters:
- - -
time the number of ticks before the operation fails
-
-
-
Returns:
The wakep mode.
-
Return values:
- - - - -
RDY_OK if the condvar was signaled using chCondSignal().
RDY_RESET if the condvar was signaled using chCondBroadcast().
RDY_TIMEOUT if the condvar was not signaled within the specified timeout.
-
-
- -

Definition at line 255 of file ch.cpp.

- -

References chCondWaitTimeout(), and condvar.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
-

Field Documentation

- -
- -
- -

Embedded CondVar structure.

- -

Definition at line 415 of file ch.hpp.

- -

Referenced by Broadcast(), CondVar(), Signal(), Wait(), and WaitTimeout().

- -
-
-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a0111c4947178c9ef6b15e03f24d2e861_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a0111c4947178c9ef6b15e03f24d2e861_cgraph.png deleted file mode 100644 index 2fe9786281c790f948a4765e1ffa1a3f09910039..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3477 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 diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a075c5724485b6f47bdf6f1f003154f02_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a075c5724485b6f47bdf6f1f003154f02_cgraph.png deleted file mode 100644 index b48e139b24e8b093b08c117cc49e726a1a7f99e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3337 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 VFRpuiCIbTlgQu&X%Q~loCIA?ZP4)l) diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a1b9e183dd1c97f1a0104f57f47197ecc_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a1b9e183dd1c97f1a0104f57f47197ecc_cgraph.png deleted file mode 100644 index 82e95fc496a9145d28ec14bac58a22912f1a81f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1159 zcmeAS@N?(olHy`uVBq!ia0y~yVAN({U{K{?V_;yAx_Q2Ufq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM?Zw2X1~03@n1XK%k#p<6`;{->UA^n`cjjZe>fisJ_u==;^7GqR1O(wAFvV$ey_|#YX@?G_ z9o!GrzEntB^{}EYaKr3Ze9^^^rZYTCOHU8(ZPQqF^=c?XMVduVU=33O-+``|4#%#{ zdDoy9xiD^ha$%w2+=7mzSL&;ke#Ad@U}(6_FsqJzO%Jo8QdjHAu8yKcR6_A;%2Nx! z2mca}Ulv+gd%V!DM)hue*kk=e62}6UUaE*)t9QoVzdqjV!d{-jm^KT2zxj#3_=@9H zZrR6r1h2j-^|B&N=D4L`_pZ6@t`dhOc55x&k#+lS{Hdqb+0$Ct+1V%i-+nv)pP|h3 zBPZ>Dgl)e(%`3h$G|X}Ry;pT#=PY=x+*AMU&BMH%dp_)m$-6US=FVchg>_AdkTiO<<`kFOLf`CGA`JGzkNtG&*>726ji&bzMEqxk(hduOdG}{i{HNOzt3R*CCNl4MD?ZI@yyft`)}==zu=qD+805Q zo4brEAN|?Dr*=N!QcGrXj9P2_(#LC!t~~b(e>y|PU+~xjHN}L-6_cj5OxVuwb5&IC z|Jb!=)6UP||L5h3v)OXXbx-fBk&N8zwAUtj;#S)|hyGAVQli;()w729<(Ro3j-KKt+w z-)jcR9mXfS4cMl>-go@pzxn0fOV9W0f8CV&uw2v7@Qsb;MNy`7hBrI&(ih*Y`{}xU zx3GC2@9wRicK`KyRHk$B{+pu{JvIf2M=thZd%x9jyZF7wi@%sJi0=NlyH#>)eQ8gk zdhU(aT?TC%me{x~zg%_w<(8iP*^Wyu{m^|-z<;1+$_@4>U8yIZJ$v>|Yr`keMWL7!t`q|yS{rl(Mizm2N1f1;h?Bx03?e*Gy!S+p?i}SCS7`TS5NO7H_di!1Mts4>d zjAV~z9;{DM>+0;(iuMU}nZk`m+`7-UZtdEIVUM5B5nAf<`)9@Sm@nsf-+Zl#h>G%3 mmr<(9v0_j{04vsi%xASj?-oz|YsSF9z~JfX=d#Wzp$P!2fi;By diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a37e0b0cb4ac5cbe6bbb56c51539284c8_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a37e0b0cb4ac5cbe6bbb56c51539284c8_cgraph.png deleted file mode 100644 index 381c71c8aaaba7d18b1734b00a39a344d91368c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1744 zcmeAS@N?(olHy`uVBq!ia0y~yU|h<;z@W;(#=yYvNc7tw1_lPUByV>YhW{YAVDIwD z3=9nHC7!;n?6g8jpP;`@#;XNtc2GSzKpz zhw!R;PF|LIbc)*9wC5iu9LZ^$d3WZ`nR9QR{m-tr`}48u1==k4~uFfO8Z(nI!=gA77`RxWy2udmUwE; zKOa6PF1Ie^&y@M+pa1{Qx%;2S_WLV&)?a?}dC@)jK;yIbmK)EUr@#5;yLI2b-P1K} zSs?dpb^Fsl*ItIqyPo;2GVxeg`LdgT1I=z1Tg-l2r`7gqcHw{RMV+_*DnAUAl9OAP zS-1De=bxn;Z`?PZboIvH9OuP(tLG+0=&srn9{O#X*NpQieDlJ${#w55-G7ETJ-@3> zy1vFIZQtL&NYB31MbtaC^91**3YiJpjc2~gUUf`;wwZ3NpHK3+6mpC$@gC&GM&vt_0^w&pEYC zd;RK5-)_9l$l2w3^_F^5_p+ZKe9UeaD@}e`EB4ToW$HS)x0mPorBpLN-O?8=`z`a) zhMr)bpl`R<+AXMx>|Cli#H~MAm1i7AQ+o!K9-%5t8+8?#2E?>6l=We!}Z1%S=pRjdNSMpf@Cy(`m z)`IovMt6gij-@ME85kD6+1}t9zUx(Kwd@j|*X3h@r1$TNk{Xac9_Qi1*mF@5Um`rk%+Wjf+z=sbTmK#mF zwBlB^!PDM-dq1wfa{J?E+pCj$rpJYD4vO^)XqdsUOP4!;X4?5u!M`PC-#)vGi7$Vi zr4bhs=YIAj*UqR(AB#fombhHIt6LQp`h7{zOV`V9e%>-zvcF<8f2J<0-o2-#S6*%W z|CZAr(srpu$g5gY?&Wem%2zL6n&cXNd*2OdtFID`tF|#TaLi+QGI!gy@Bpp5bA6Xa z&7V2v&2FjG9?l0POJg?Y-i~|cvHa|fentj<8=cLU%x8GO&aOYia^K)Cz@v(V& zoZakP0(_8{VT%%YXGx$YLD^07~^}~sRqw6e9{6ql zD{7iTT=^763@>EzhQUQqP;*;?`A$N2P*$nsz9=Xl285ZXV*>)Ood z?S20x%YB}#Svg5);^bD=*X0ar%iqcTH-8tQA=egIrOCM1d;+_V*Of0bdOA2)78Xn? zP*U>ZQBy@Huk%~Q>?+~h8MAKQ#sFbSNy$#@mJK2dHKL&Ml0o6yMH#1n0EKt|cVErn z$}^5}FFEkZJg+lL^mhlJ>4VCE-Ha*;F6|3SnEU3$`THqb380qpf~GzH8RXqP@-MEv SYstXCz~JfX=d#Wzp$PzYojC{q diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a866a352fb3bc95f07abda728d4ae4906_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_cond_var_a866a352fb3bc95f07abda728d4ae4906_cgraph.png deleted file mode 100644 index b877f51c19eb87b117c099194a789033552379cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1889 zcmeAS@N?(olHy`uVBq!ia0y~yU=n3uU{K{?V_;zT$|(Jdfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM?Zw2X1~04D8IFE{-7;bKc&K&xj6{VgK-6|KzT*o_9bAWI80WaNHLoBwCr^A zqhOhUl#7 z4_^6(Q&2K0CdR_d@Z-s|8x9}d8{f0so^O$^d9K9TaJ|c~Ikn!ksWyo-l!$b1+!vzt z+q&UkMGRkmAKxG0qKr4w{~6p;yZ>!zzOiVSa@F3L_~ThSBlqT|323=r{&nKks@T6y zE7c|33U41>eLa24yvb#6wjErN7n>R#c6;&m#IWiAuD{*5`Bs>|p{s{XK=hQL=FTHs zohe4YORe^P{>dx-YgWyw`&llFrc2L_`69gYV)2<<7fv5ZkX<}O%l}x~TgG#*F8#lC z^wp9(S=Ni~qCbWo{oBs?Mo-Lp`sJ5zR+d=pK6`wo>9^CrUQXYqYPs)BNJQ_8v+r)N z&Hj4hG*45cb)4Jnu(!95zW%mUT>bafTawJX-xgXsCvUqOcKqB~!>>ZYe<%OAbU#$7 z!c+5V_1~&GwW+7%0=W)9e*Aqd(=RVMt!+|wXWsoDG(B)<-2UjYw>xEHXC6%rnI5}S zP~Y&XHRA*Z7O#hy4E~~AuP&z)9q)|LG2=KRCoOGl@O)w1H}Bs&nqEzx$~onIt?7j6 z_IF~Q?1_=ka(}op=3Joc*CNJC=>l5%6WsJQXQ(R1>3yoI_Ph1*kY|(oG$96srmbEN zO$Bqjmwvk5@a96V^v;z#cYeNlMfRG=nu{J6-le=r`SQYyO*?RYB1aSt!;^DyHEt^} z6+4_>n^JWA``^va-R{q|WIo`1kGtXTB`<-$LH?^=WiM0W3EM2+dnn_J+|#mChwS1` zK9TKWW zF1>j1LbmN>xcv1SrN2W@8E0p0?bx%Y{;b=Z_|1Zu6aQ`7c8y;z=EZK=oQ{QAOX^;x zxt*BkFp0}tyh`8GaqH#JeigMdkM><;y?xTGV&{d~SF^9iNz8v#a5?;sf%Wg>;<~#1 z^S&-MI-hh_>6N#7cGrpAr6H3!)`@WaJpJ>}M|ClA^*w4LW$OIfgIDL>+M0EERZM-I z?v9(!RwZkTEHkjKu8S}J?7Z;5*UFAB%r7=X`)i802(TN>*SY(ry8PdB_U$@0-~QdW z;c(G;^PB1Ceq7XNuI)TGeaWE=uluKq&+64x?Y+7sJnieQ{rBI#zWw6MqZeN)%ic$S zTr9g^$b9?nD_Umj4bPsL^Dj5;S;>n1%Whoz=J$G4=(EkDUWtX7)0Ft9@O3@7aO1{3 zV}`iK-51x`g}#20lJrexd+E#dcX!z`T37CiSNGU{J4bZ(>lt24D}DT**Ug=GuJxbx z{FNc!az8I!wPFfK!y=A8<}3rbep&nSr<=tYd6>oLs)@Xr{_eJxeOXlAHT~YCZ@MQ9 zR%h(ky}Mewe(4mcvq3?hv>KWdk8PY1@?`5HrUr|K=!RcmnwA!JcHe~y5;i8y{j{FB z%`DWvF7egIOipInP{EHV?KRevlHBCE`U!x--P*a6rj&NYSD3?Xe z+gtZmC%U_TUAu4+mm0r_?Wg4&b}>7J-1TE`Ej}M3aCJ^lmK#fe*DtT7N1emh*OeH) znW14NrL|I_t83-TtD9e6(_Nyj&c3cimOF5%i_^Td&H3k-bR-2iigfKe^h9MwK)~HZ zC&#M~)=v=<6r89(BSZj`^0~jF^3xN~lG4(vMq)}u>(t*cbd+@cE!t^ddv2Mh>%sts x`uci - -ChibiOS/RT: chibios_rt::EnhancedThread< N > Class Template Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chibios_rt::EnhancedThread< N > Class Template Reference

-
-
- -

Enhanced threads template class. -More...

- -

#include <ch.hpp>

- -

Inherits chibios_rt::BaseThread.

-
-Collaboration diagram for chibios_rt::EnhancedThread< N >:
-
-
Collaboration graph
- - -
[legend]
- - - - - - - - - -

-Public Member Functions

 EnhancedThread (const char *tname, tprio_t prio)
 Full constructor.
 EnhancedThread (const char *tname)
 Simplified constructor.

-Data Fields

const char * name
 The thread name.
-

Detailed Description

-

template<int N>
- class chibios_rt::EnhancedThread< N >

- -

Enhanced threads template class.

-

This class introduces thread names and static working area allocation.

-
Parameters:
- - -
N the working area size for the thread class
-
-
- -

Definition at line 254 of file ch.hpp.

-

Constructor & Destructor Documentation

- -
-
-
-template<int N>
- - - - - - - - - - - - - - - - - - -
chibios_rt::EnhancedThread< N >::EnhancedThread (const char *  tname,
tprio_t  prio 
) [inline]
-
-
- -

Full constructor.

-

This constructor allows to set a priority level for the new thread.

-
Parameters:
- - - -
tname the name to be assigned to the thread
prio the priority to be assigned to the thread
-
-
- -

Definition at line 271 of file ch.hpp.

- -

References chibios_rt::EnhancedThread< N >::name.

- -
-
- -
-
-
-template<int N>
- - - - - - - - - -
chibios_rt::EnhancedThread< N >::EnhancedThread (const char *  tname )  [inline]
-
-
- -

Simplified constructor.

-

This constructor allows to create a thread by simply specifying a name. In is assumed NORMALPRIO as initial priority.

-
Parameters:
- - -
tname the name to be assigned to the thread
-
-
- -

Definition at line 284 of file ch.hpp.

- -

References chibios_rt::EnhancedThread< N >::name.

- -
-
-

Field Documentation

- -
-
-
-template<int N>
- - - - -
const char* chibios_rt::EnhancedThread< N >::name
-
-
- -

The thread name.

- -

Definition at line 262 of file ch.hpp.

- -

Referenced by chibios_rt::EnhancedThread< N >::EnhancedThread().

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_enhanced_thread__coll__graph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_enhanced_thread__coll__graph.png deleted file mode 100644 index ef49cb839c94218e6da5214d1e7b7d571c38922c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12352 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 FO#qd7Ai)3t diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event.html b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event.html deleted file mode 100644 index 3183a25..0000000 --- a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event.html +++ /dev/null @@ -1,741 +0,0 @@ - - -ChibiOS/RT: chibios_rt::Event Class Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chibios_rt::Event Class Reference

-
-
- -

Class encapsulating an event source. -More...

- -

#include <ch.hpp>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Event (void)
 Event constructor.
void Register (EventListener *elp, eventid_t eid)
 Registers a listener on the event source.
void RegisterMask (EventListener *elp, eventmask_t emask)
 Registers an Event Listener on an Event Source.
void Unregister (EventListener *elp)
 Unregisters a listener.
void Broadcast (void)
 Broadcasts an event.

-Static Public Member Functions

static eventmask_t Clear (eventmask_t mask)
 Clears specified events from the pending events mask.
static eventmask_t Pend (eventmask_t mask)
 Makes an events mask pending in the current thread.
static void Dispatch (const evhandler_t handlers[], eventmask_t mask)
 Invokes the event handlers associated with a mask.
static eventmask_t WaitOne (eventmask_t ewmask)
 Waits for a single event.
static eventmask_t WaitAny (eventmask_t ewmask)
 Waits for any of the specified events.
static eventmask_t WaitAll (eventmask_t ewmask)
 Waits for all the specified event flags then clears them.
static eventmask_t WaitOneTimeout (eventmask_t ewmask, systime_t time)
 Waits for a single event.
static eventmask_t WaitAnyTimeout (eventmask_t ewmask, systime_t time)
 Waits for any of the specified events.
static eventmask_t WaitAllTimeout (eventmask_t ewmask, systime_t time)
 Waits for all the specified event flags then clears them.

-Data Fields

struct::EventSource event
 Embedded EventSource structure.
-

Detailed Description

-

Class encapsulating an event source.

- -

Definition at line 465 of file ch.hpp.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
chibios_rt::Event::Event (void  ) 
-
-
- -

Event constructor.

-

The embedded EventSource structure is initialized.

- -

Definition at line 267 of file ch.cpp.

- -

References chEvtInit, and event.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void chibios_rt::Event::Register (EventListener elp,
eventid_t  eid 
)
-
-
- -

Registers a listener on the event source.

-
Parameters:
- - - -
elp pointer to the EventListener structure
eid numeric identifier assigned to the Event Listener
-
-
- -

Definition at line 272 of file ch.cpp.

- -

References chEvtRegister, and event.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void chibios_rt::Event::RegisterMask (EventListener elp,
eventmask_t  emask 
)
-
-
- -

Registers an Event Listener on an Event Source.

-
Parameters:
- - - -
elp pointer to the EventListener structure
emask the mask of event flags to be pended to the thread when the event source is broadcasted
-
-
-
Note:
Multiple Event Listeners can specify the same bits to be pended.
- -

Definition at line 277 of file ch.cpp.

- -

References chEvtRegisterMask(), and event.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void chibios_rt::Event::Unregister (EventListener elp ) 
-
-
- -

Unregisters a listener.

-

The specified listeners is no more signaled by the event source.

-
Parameters:
- - -
elp the listener to be unregistered
-
-
- -

Definition at line 282 of file ch.cpp.

- -

References chEvtUnregister(), and event.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void chibios_rt::Event::Broadcast (void  ) 
-
-
- -

Broadcasts an event.

-

All the listeners registered on the event source are signaled.

- -

Definition at line 287 of file ch.cpp.

- -

References chEvtBroadcast(), and event.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
eventmask_t chibios_rt::Event::Clear (eventmask_t  mask )  [static]
-
-
- -

Clears specified events from the pending events mask.

-
Parameters:
- - -
mask the events to be cleared
-
-
-
Returns:
The pending events that were cleared.
- -

Definition at line 292 of file ch.cpp.

- -

References chEvtClear().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
eventmask_t chibios_rt::Event::Pend (eventmask_t  mask )  [static]
-
-
- -

Makes an events mask pending in the current thread.

-

This functon is much faster than using Broadcast().

-
Parameters:
- - -
mask the events to be pended
-
-
-
Returns:
The current pending events mask.
- -

Definition at line 297 of file ch.cpp.

- -

References chEvtPend().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void chibios_rt::Event::Dispatch (const evhandler_t  handlers[],
eventmask_t  mask 
) [static]
-
-
- -

Invokes the event handlers associated with a mask.

-
Parameters:
- - - -
mask mask of the events to be dispatched
handlers an array of evhandler_t. The array must be have indexes from zero up the higher registered event identifier.
-
-
- -

Definition at line 302 of file ch.cpp.

- -

References chEvtDispatch().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
eventmask_t chibios_rt::Event::WaitOne (eventmask_t  ewmask )  [static]
-
-
- -

Waits for a single event.

-

A pending event among those specified in ewmask is selected, cleared and its mask returned.

-
Parameters:
- - -
ewmask mask of the events that the function should wait for, ALL_EVENTS enables all the events
-
-
-
Returns:
The mask of the lowest id served and cleared event.
-
Note:
One and only one event is served in the function, the one with the lowest event id. The function is meant to be invoked into a loop in order to serve all the pending events.
- This means that Event Listeners with a lower event identifier have an higher priority.
- -

Definition at line 307 of file ch.cpp.

- -

References chEvtWaitOne().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
eventmask_t chibios_rt::Event::WaitAny (eventmask_t  ewmask )  [static]
-
-
- -

Waits for any of the specified events.

-

The function waits for any event among those specified in ewmask to become pending then the events are cleared and returned.

-
Parameters:
- - -
ewmask mask of the events that the function should wait for, ALL_EVENTS enables all the events
-
-
-
Returns:
The mask of the served and cleared events.
- -

Definition at line 312 of file ch.cpp.

- -

References chEvtWaitAny().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
eventmask_t chibios_rt::Event::WaitAll (eventmask_t  ewmask )  [static]
-
-
- -

Waits for all the specified event flags then clears them.

-

The function waits for all the events specified in ewmask to become pending then the events are cleared and returned.

-
Parameters:
- - -
ewmask mask of the event ids that the function should wait for
-
-
-
Returns:
The mask of the served and cleared events.
- -

Definition at line 317 of file ch.cpp.

- -

References chEvtWaitAll().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
eventmask_t chibios_rt::Event::WaitOneTimeout (eventmask_t  ewmask,
systime_t  time 
) [static]
-
-
- -

Waits for a single event.

-

A pending event among those specified in ewmask is selected, cleared and its mask returned.

-
Parameters:
- - - -
ewmask mask of the events that the function should wait for, ALL_EVENTS enables all the events
time the number of ticks before the operation timouts
-
-
-
Returns:
The mask of the lowest id served and cleared event.
-
Return values:
- - -
0 if the specified timeout expired.
-
-
-
Note:
One and only one event is served in the function, the one with the lowest event id. The function is meant to be invoked into a loop in order to serve all the pending events.
- This means that Event Listeners with a lower event identifier have an higher priority.
- -

Definition at line 323 of file ch.cpp.

- -

References chEvtWaitOneTimeout().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
eventmask_t chibios_rt::Event::WaitAnyTimeout (eventmask_t  ewmask,
systime_t  time 
) [static]
-
-
- -

Waits for any of the specified events.

-

The function waits for any event among those specified in ewmask to become pending then the events are cleared and returned.

-
Parameters:
- - - -
ewmask mask of the events that the function should wait for, ALL_EVENTS enables all the events
time the number of ticks before the operation timouts
-
-
-
Returns:
The mask of the served and cleared events.
-
Return values:
- - -
0 if the specified timeout expired.
-
-
- -

Definition at line 328 of file ch.cpp.

- -

References chEvtWaitAnyTimeout().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
eventmask_t chibios_rt::Event::WaitAllTimeout (eventmask_t  ewmask,
systime_t  time 
) [static]
-
-
- -

Waits for all the specified event flags then clears them.

-

The function waits for all the events specified in ewmask to become pending then the events are cleared and returned.

-
Parameters:
- - - -
ewmask mask of the event ids that the function should wait for
time the number of ticks before the operation timouts
-
-
-
Returns:
The mask of the served and cleared events.
-
Return values:
- - -
0 if the specified timeout expired.
-
-
- -

Definition at line 333 of file ch.cpp.

- -

References chEvtWaitAllTimeout().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
-

Field Documentation

- -
- -
- -

Embedded EventSource structure.

- -

Definition at line 470 of file ch.hpp.

- -

Referenced by Broadcast(), Event(), Register(), RegisterMask(), and Unregister().

- -
-
-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_a177bc72df220068c9d620b8e9f42f2f5_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_a177bc72df220068c9d620b8e9f42f2f5_cgraph.png deleted file mode 100644 index e6f0835936d389c25981568f6c261727da232ced..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1295 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 RatsU%44$rjF6*2UngAIEtdIZz diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_a4870dfce1f2ace0ab434718b0960b960_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_a4870dfce1f2ace0ab434718b0960b960_cgraph.png deleted file mode 100644 index ef2117dbf3ca1ed2a3735765e01b0806cda5c95b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2044 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 T2Z?wF1_lOCS3j3^P6H=O_FLRCyj()U58V717F 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 diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_aca48258fbffb54c6e19bbb9016c4cee1_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_aca48258fbffb54c6e19bbb9016c4cee1_cgraph.png deleted file mode 100644 index f8eef1992c145244862a54db8a3c53cbca1da774..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1178 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 XRa|SCh>!>a0|SGntDnm{r-UW|?Vl=@ diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_aeb53e2435cf8f614ea51e3c90334d5ae_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_aeb53e2435cf8f614ea51e3c90334d5ae_cgraph.png deleted file mode 100644 index 321ff02d5e2c72d187ac9ef910411977438a98be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1862 zcmeAS@N?(olHy`uVBq!ia0y~yU_8LUz@W;(#=yXE^|s|V1_lPUByV>YhW{YAVDIwD z3=9nHC7!;n?6}^DTe=_+?W1_Ln7g_dXjIr=9y#Z*XSj=Z|~N&$KL__j#YOHMf8u8Ys0W zobjEdA$P4`%dSHL4f7}YDJ@y-seU1Kp0`z_!IbCc%gj`^efIA^?3K;%CI7~Tg{qQ) zu0gp?bE~>J(ntioduVmIOyV@xrD7ckb%t1-%m6uL~i_4X%5e%Ij zE3`K<2nhy;XGJl-dHwqHocG)JMEX4X{`KqM_t#Fz%$YX(+-806SCx6;KWiR3=!I9@ z-c)8Y!Qpe?eV5hex8L`9WU)5g>b%Od``cEgMYj6utTwoCd-vOWEVI5>pY`b%-5>F- zV%eRdjAI{#O6q%e{*!dsEYf|{<8<`W*iQ`4x*)nqe)e91Q?5NebKgDJ+-J`ffrG{j?^cExTYvs}X#FaQb7`q1 zNlEWpSuPh<=`Px1_bt~q>F8YNq}-#In7_Qzy!rh0^^Z~S#LPX;ui2=c@?Ny^=~L0u zCgIEDmU!}gK6+Ar`p-vCuWoy}Z|Bq3+waeHV_DkP{(W_lcz|toWNYxW(2CTrudat3 zy)xyxX!Z^5@5kOsbx)4x$(&KPE9v`dR;!~XJAb|Za__PHXW>;95(nmGZT*&R7yrX> zzW$yow|6I}`n+|q4SU0S#$;Ns;zs%4Ww!duo1Sc2dwrwuwzUCD-x=QS<@nusGxJt{ z?E2$%uYW$hVR3iI+~B-kpQ;eQ{=eT2YO@R1<+8th%37OeJ@>?&Y6q8VjJv{?7)?1X zS{HEj;mw=3Hm(l;{$EsS&Gpc&*T2*U6?@-Qth+Mj&=H4Psn zj?4~LXS{Og7+=wvAEIoNBYLI!`6pk$rO&?o@!8zED}Q;{Je|*Y?BMF~nNya0;t1}T zEOlthn(6mNcN#yOzw^@Vy7%&eDX%AYGu-7#*qpkzt7zwz(u<3B_qXo3|N+s-GzELh2WK$&fIm_hl{c(yNBzP^rMKYy;Rebm}}eaSPlIriV1a=U2#+dqB< zakp7tvbGr+7xS%}^&>yCE5V%MetyHMMM3*BcBNj;n|HtX@9*F9=0t8^9db)L?Sz7d zzkQa@e#Mg(MIUY-%g@-hQkioi_kvmuy%*1Ydk@c4D_p$A{CuXx`St2gulmiH<5Ogi zSkHHNU&j?b+ovm6PF}uznV;G(?Vmei9=dK%UA3Z9N2L9|%aeeeHpPEVP5qvq^sYC; zFz1-v9f^`3CsSq{%)hzvaLJSzzJY7+9eDC&-;w{bo%F&h?$)jh3w31(aV=oF@G!@$ zIO)%$e3ZV>=p*^WaMK7+cb&ZeNz3ut2LsDP=Eam<5-oSV7k4wLPhv&S% z-}i^-Lg(!d^4yg+x0Z@aHcw?((6x!<9m5wMh52blTQ72pfAd$F8^g85Ro_T%6IVdT zf;C-o43Cw5MJ{c+czXKxST8Hd O1_n=8KbLh*2~7Ybl#k{B diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_afde2cfb76dbd552ebb05bc6c6c8b2969_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_event_afde2cfb76dbd552ebb05bc6c6c8b2969_cgraph.png deleted file mode 100644 index 6ebc4e710713cec89ae210aff80be11b3063b1e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 zcmeAS@N?(olHy`uVBq!ia0y~yVAN$`U{K{?V_;wqKfd3bfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM?Zw2X1~03@m+~E{-7;bKc%PoiFVw!~Ws@jgUnfwbsRXzuoVU zFEh(IY@fop7WZm*k3Dm$^&TE$`=FHfZ{D2IkAA;?|IHhm4lW3=G_dX4bw(XOV}V)P@0o9` zvFhj%Gu&sFVP$4mx7X&&jD?Sb8KzC2HtiH&$FnoXjmy^1eXspLas8@fkLnu9k7p+3l|NnfeC?V!w!gF1H@!T1X-qaG>Yr8JX;O+KMsdb_OTQ*%@Z4(`{ZDUMw@9JrrjtQ_d zew4UuSz=kfF8S5(v;z-+IBE*U2pn`z)L5KX{vme#_D@dhzh824{Cs1T+VrffOXo}G zysSulAuQgX@%z!UOUJ#WjP9vFYo@7x(-RsQ2%&zU{c>*2V3) z=NJ2gUQ*Fqx^mH_W67`bt=ltZOn~F z{?_feXKpUO_1N7~w<&$7V=iR#{w{(`}^^b-wy-@B-Q2g1wnRT<((!EVWvLAG=pF z1?bPWEM}a0u2SP_WvWTl_vXwakxeF3{bNK!R|ZWAo8>Y|_2moi)tTyg(=AVTXl7Q< z-EyW|TL1N)N*TF-zdjy1^fR7I+F}+3zQ-rrrCTy?ML&o~_%>*ZkS8QgQEr@nt(fQ7zS6hVL##Nz{XS=&H^}ni5U3T#L z@4x?C|4nOuw(9aG%U3FraZCkE9|b(9Y-VPd>v4G_hls*)ua)l^f3CWl_jkkA(x3A^ z=66e|ubo-ReXuiV_2M42?E-qP($dxb+I^WjgO7Jl&q|!M!HGdvkcY9RvgFH;?Ynp9 z-(721I52OUI>vRi$~=zvtdx z-Pe5SA^Wn-Ji|m&;mKlxrd+5**T?1UhaU=bcmJtg>%w+Al-+HoeZhMBF29b30< p4N_Lh+ORs59l1yd+3}wt|9AT9)Mw1685kHCJYD@<);T3K0RWwcUeEvl diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex.html b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex.html deleted file mode 100644 index 4a58044..0000000 --- a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex.html +++ /dev/null @@ -1,269 +0,0 @@ - - -ChibiOS/RT: chibios_rt::Mutex Class Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chibios_rt::Mutex Class Reference

-
-
- -

Class encapsulating a mutex. -More...

- -

#include <ch.hpp>

- - - - - - - - - - - - - - - - -

-Public Member Functions

 Mutex (void)
 Mutex constructor.
bool TryLock (void)
 Tries a lock operation on the mutex.
void Lock (void)
 Locks the mutex.

-Static Public Member Functions

static void Unlock (void)
 Unlocks the mutex.
static void UnlockAll (void)
 Unlocks all the mutexes owned by the invoking thread.

-Data Fields

struct::Mutex mutex
 Embedded Mutex structure.
-

Detailed Description

-

Class encapsulating a mutex.

- -

Definition at line 361 of file ch.hpp.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
Mutex::Mutex (void  ) 
-
-
- -

Mutex constructor.

-

The embedded Mutex structure is initialized.

- -

Definition at line 205 of file ch.cpp.

- -

References chMtxInit(), and mutex.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
bool Mutex::TryLock (void  ) 
-
-
- -

Tries a lock operation on the mutex.

-
Return values:
- - - -
TRUE if the mutex was successfully acquired
FALSE if the lock attempt failed.
-
-
- -

Definition at line 210 of file ch.cpp.

- -

References chMtxTryLock(), and mutex.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void Mutex::Lock (void  ) 
-
-
- -

Locks the mutex.

-

Performs a lock operation on the mutex, if the mutex is already locked then the thread enters the mutex priority queue and waits.

- -

Definition at line 215 of file ch.cpp.

- -

References chMtxLock(), and mutex.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void Mutex::Unlock (void  )  [static]
-
-
- -

Unlocks the mutex.

-

Performs an unlock operation on the mutex, the next waiting thread, if any, is resumed and locks the mutex.

- -

Definition at line 220 of file ch.cpp.

- -

References chMtxUnlock().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
static void chibios_rt::Mutex::UnlockAll (void  )  [static]
-
-
- -

Unlocks all the mutexes owned by the invoking thread.

-

This operation is MUCH MORE efficient than releasing the mutexes one by one and not just because the call overhead, this function does not have any overhead related to the priority inheritance mechanism.

- -
-
-

Field Documentation

- -
-
- - - - -
struct ::Mutex chibios_rt::Mutex::mutex
-
-
- -

Embedded Mutex structure.

- -

Definition at line 366 of file ch.hpp.

- -

Referenced by Lock(), Mutex(), and TryLock().

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a00b2ff557451955a905ecdca2855389b_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a00b2ff557451955a905ecdca2855389b_cgraph.png deleted file mode 100644 index b6d4579ee9021cafff90405f2d3b1a8de0458659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1127 zcmeAS@N?(olHy`uVBq!ia0y~yU}R-rU{K{?V_;zL_WdKwz`($k|H*Y zfq{X&#M9T6{T83KfTIkWcS9wu~56{{o`$e}-a9hMJ9K?RQGm6tHw2Ot~#Q}lvJZ%Au zE~Qtu^qt?ns`Cb<9PJ6ri^KaX*ch$9aKcgBtU_e9FP$!zLVC4%1lg)X| zKhBhPwCFv2`LAw{?f37|COKc&8jhVh94-}bmooVC z*T)Y6&wn0j?tGs53)!dNR-9qz1^wc9~ZklpsHN!pOgZx`>T~a=uUH7yy`?SG-i}e`~ zPtLmeME2w#+q6p}HTUbwHm~Kj>)(AZ%sk8H@{fmwKJMC=eYULl{$bIdZJcq-bc|nd zGITsJWe^W}I_Ovzv3IPN{r*sOc}G@6UX`!X%Gpitf4?ZP zI-mD&?zt^C=c=ObuK4&Uh2_JY+8-Z(R92kPcsOg@oNc>OPZ_-q36#BioiUfMeMj_a z)Bh{3U$?U=URG-6n`!emMehEg$(Og-{HWQ(tMh%?+oqi4_Uxree_fM<0zN8)EtAYYVkvcBRl|i-SC=r;K_JAKv@-@L}8K;gVHx zt5i&*^3v^WyBRO$Bj_wTni zN;6-tOuKr=gw<-Fi`@N~s8xGv-rsxvf9E+P{u?40&q{a4|9fh6*ydsABo~uLlw_V@ zd(q;T`QOepW##3u?kAj>4}4$eY?1WGUVn{mVsf(bbrToWK-Ld)UkkXvLGjaiolupS U!1fcI3=9kmp00i_>zopr0Duf1+W-In diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a03150e8fa423f7e042661d350d238b84_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a03150e8fa423f7e042661d350d238b84_cgraph.png deleted file mode 100644 index b8ec50bae530b7c232fe0c0d2fe2dc60db1f128d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3249 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 N@O1TaS?83{1OVuy7uNs) diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a1726d7244983f7be74fcfa9cfb63745f_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a1726d7244983f7be74fcfa9cfb63745f_cgraph.png deleted file mode 100644 index 99bfdefb587295e81533828ee60886134720bd1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1658 zcmeAS@N?(olHy`uVBq!ia0y~yVC-dJU{K{?V_;y|H-GCh1_lPUByV>YhW{YAVDIwD z3=9nHC7!;n?6w|qXAbAIn~@!iXd51)DW=FOXbWzY7>N0gHD>9GN{d*MFDfW4x)5Q~(V<}?#;c^n z)$7{a(czRGdGW;a&!+L~zt^p9$+XYf7M9Y#`fOPJ`nO59Ti5Q4dAK0=yFKTZ(yf)> zq&|LK@crd*lwB8IOJ6bFeuaeVNujU5JslbML{?7Pt>YaRy0!0lQ7iYhyZ`IdHve5X<5^&~ z_S%VS&EH>3pK?x3!+WppNxxSoW^D~&IluDM#g{MNdES2a-(q&HGXI;d?8D}7Pg`&6 zU3H-Q_n}kIKXZTMyYtxb@YiK)P2=)+RY~4G{BHl}Z4c*7|83b}9v$GfzwCAD%I`Dp zJWkwyd`rMp)v4)smTTolPTMp2w5Z?eQ_ELbJ+fe~ch3~#u1|UQaY15XFS{+fuehrB z+Mc?{nHP8&l&Y3%#R<%;zPW9^A5-hYQ=9IU8zt?|jK25Iw)@8Q#%0}Y;mUL4r<^-| zxAJ`Xq283NBP>;TK2QyVcM3)|oZ_d&TJ3Y;|;p*!7Qf}#Yk{+e)<$T87!C|&4DOv3^*Quu~&0WL( zniy{Up7UB+>S~C3XzVrFf(-31f(uozHkPjX^=|X`oMXFYhp$iB9roSooWn-fhgP0z zpT6Bb{mPUZ-EPWrgQoDEsrFbtwN=^Ycki6~4`RE^ME34@7O2&mnD*?-gHKQSrT3m* z+hN1_V5z|5Ra&Q%Zn2(N`SPW3|Gga_ue)#FJbkf9&j$M)Zv2i%c7BzNj$V36B4n%Z zyQ1A;E@kaA16Ve%dJ%Z^X3a~Pd-MK%{O;~0e6-`U@2^jJFXyFQc0F9ZX8%OKQ`IXp zeRiKclRqzh`CX6aug<=;?R;xj{_w11$d^}h`9GesfAw8>YsA#k*9}Zfe|^4kWyMA7 z_O#8d)vit5ZCYuot0n6hEHo~aKDo5iRy^RRqHp`0-tYT;AN^pwW_{1rzSrD6U|N-= za(U3xPo@^<>>ihQoJ}dq5#YRcd&k~2R~gqRp1w43+1=}^v&eIoClglH+1c5BSpM8!RCa-%~QVos!GA`wWHGc z%pWUDFU<^E9vzy#THRTlQ8sMq;l9n^TV5uJ*oUs*U^u}m_%o{X-G;|8|K%(UvaN0> zO_{am;G+#UPE1(!b>`zWe-7@Q>iJT+DOu@PW9mtBas78cub0d_s%PrjEY|%gTs!Q+ zWaIR2|I@8Fw?O?pf>6canjDfx*+&&t;ucLK6U_ C)I$yc diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a787ecfd207fd25760a3c07517b69c148_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_mutex_a787ecfd207fd25760a3c07517b69c148_cgraph.png deleted file mode 100644 index 15ead5422e2fdacf8d8733b7d01c9ae632311473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1733 zcmeAS@N?(olHy`uVBq!ia0y~yVBE{Vz@W;(#=yXEEyw&G0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj()U58V717}(N1T^vIy=DfY@+aaAQ!T#a@DeYvscGv&(3Gyn5Xt2w*p^ZYMoZ9bn{BHYk{23D|l zoG#wYAoHe7z^g@=L2m}1;DyM`j6%;`FEct>blfVNa%T5>`P_n;FB}<^tG~T@Ss~@s z_w#2Z!wgdy<(`SZ-dZl!e3ZZBtBUP=%`4ZMYmdsDuX_^qg@NJm#_SUysieYQR&^5@~1XKpNJ6I;(X|9jP4%e9}+^Y6c0zDxG; zrkfkZb+qj>Ba_cFzpt#jytjGMo%lm3*{fdvpHN&}yfE(lv>3hZdfh8~>y(>~`B{V4 zCT-`C6TVokt6k4~KvTiC_Vcs${nCBQBI-AC?3e#?Y|ptejUB!Wd<<0wHcgxE>b9J5 zrk+S&Y}3z2a?k%gnx?sF&cvQCvwEH8oVQ+{`E6JD?m9QyZxfdmPr0cRZk@Ypt@G+X zd7s%%UdoC6vqkX9-?z^L=W}pvYwut2sCL1pXtl}v=bU_U|HihrYu5_uuDThwYX08v z=l6CO?+bg|GIzgWZ}hXU>PO4Cokgy_+8)hN87eAnH1lGsPuiOk-`=*%^%q#a(LZ~; zZ;e5_+{>N49e3Q+^OUEit*^GtGmTx{^X>PypL23=Oi$ha_0gGUQ!lT*8y0yhQh$Hb zzWs&Lg=b^GR<7w3njZi<>ZGwI`t^^UXIes@QwEnu$I z_;h%7o!LD{vw7bhUDi;lGb)`NKCwhw&(Y$3_WDDjSB)NpeYkeH+TAu}BJ-1*z0#NG zM_s!i&fur3H?JW}HRJK4LVKU;Iy0YhPk-O#_!aB+hHKvBRXkVn<;4zGXf18m&HfTC zI7dfJyyw@}d^|39Qn zewn50;83G-v^`io=q?#W1?d?FMj^2E$HQJdF`n|7n-Jj`FH7}GV8+bd7opZ&*xq8IUv>gZChkqbM(cJn+waI zmDO<`t$TNF=H=BH>}N0Wr6=Z1TYvSp^s)`pyu{Z}@e=QitGu`A)B1|N%eq#b*n3zr zzVpP(qMz@cZ_lg!!=EL8WLov#(r?8=y~h)`TEz>qK7Zl$V6WcVYla2ewr*9`(UUX( z$IW{4&5Z^vo9=m9r<5cZ3UsGln#_>K)tYSn;D6K2H~OzPTP`o1ZD+8(?Hl8auGM9!;Uo6rYkC)nFOQFWarNJ$qnqWwKDD$p zKfBLllE~hu4^?NF8*24q*E4;J)C#rz{CvJJ_p-yKp8InT_}og6zWA5*Mab4w#z!B0 zJiV;BG;qx?@0>0<^KUi$w-#!t3c6~w@-xiU6zTh)Vl|m@UgMWHjBo% - -ChibiOS/RT: chibios_rt::Semaphore Class Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- -
-
- -
-

chibios_rt::Semaphore Class Reference

-
-
- -

Class encapsulating a semaphore. -More...

- -

#include <ch.hpp>

- - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Semaphore (cnt_t n)
 Semaphore constructor.
void Reset (cnt_t n)
 Resets a semaphore.
msg_t Wait (void)
 Wait operation on the semaphore.
msg_t WaitTimeout (systime_t time)
 Wait operation on the semaphore with timeout.
void Signal (void)
 Signal operation on the semaphore.

-Static Public Member Functions

static msg_t SignalWait (Semaphore *ssem, Semaphore *wsem)
 Atomic signal and wait operations.

-Data Fields

struct::Semaphore sem
 Embedded Semaphore structure.
-

Detailed Description

-

Class encapsulating a semaphore.

- -

Definition at line 295 of file ch.hpp.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
Semaphore::Semaphore (cnt_t  n ) 
-
-
- -

Semaphore constructor.

-

The embedded Semaphore structure is initialized.

-
Parameters:
- - -
n the semaphore counter value, must be greater or equal to zero
-
-
- -

Definition at line 168 of file ch.cpp.

- -

References chSemInit(), and sem.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
void Semaphore::Reset (cnt_t  n ) 
-
-
- -

Resets a semaphore.

-
Parameters:
- - -
n the new semaphore counter value, must be greater or equal to zero
-
-
- -

Definition at line 173 of file ch.cpp.

- -

References chSemReset(), and sem.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
msg_t Semaphore::Wait (void  ) 
-
-
- -

Wait operation on the semaphore.

-
Return values:
- - - -
RDY_OK if the semaphore was signaled or not taken.
RDY_RESET if the semaphore was reset.
-
-
- -

Definition at line 178 of file ch.cpp.

- -

References chSemWait(), and sem.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
msg_t Semaphore::WaitTimeout (systime_t  time ) 
-
-
- -

Wait operation on the semaphore with timeout.

-
Parameters:
- - -
time the number of ticks before the operation fails
-
-
-
Return values:
- - - - -
RDY_OK if the semaphore was signaled or not taken.
RDY_RESET if the semaphore was reset.
RDY_TIMEOUT if the semaphore was not signaled or reset within the specified timeout.
-
-
- -

Definition at line 183 of file ch.cpp.

- -

References chSemWaitTimeout(), and sem.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void Semaphore::Signal (void  ) 
-
-
- -

Signal operation on the semaphore.

-

The semaphore is signaled, the next thread in queue, if any, is awakened.

- -

Definition at line 188 of file ch.cpp.

- -

References chSemSignal(), and sem.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
msg_t Semaphore::SignalWait (Semaphore ssem,
Semaphore wsem 
) [static]
-
-
- -

Atomic signal and wait operations.

-
Parameters:
- - - -
ssem pointer to a Semaphore to be signaled
wsem pointer to a Semaphore to be wait on
-
-
-
Return values:
- - - -
RDY_OK if the semaphore was signaled or not taken.
RDY_RESET if the semaphore was reset.
-
-
- -

Definition at line 194 of file ch.cpp.

- -

References chSemSignalWait(), and sem.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
-

Field Documentation

- -
- -
- -

Embedded Semaphore structure.

- -

Definition at line 300 of file ch.hpp.

- -

Referenced by Reset(), Semaphore(), Signal(), SignalWait(), Wait(), and WaitTimeout().

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a0804607c066a7a373188cb8220203f8f_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a0804607c066a7a373188cb8220203f8f_cgraph.png deleted file mode 100644 index 0ddf66694c08a7dbac477d2f616558f3707315f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189 zcmeAS@N?(olHy`uVBq!ia0y~yV02($U{K{?V_;w~zGv{Afq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM|6|m*QU-7+BmrT^vIy=DfYTH(SPCg6%{4w`*n{OFAYWSo_z0 zNvU%4H1Age9a7Tf@9wCiUs@G7``8ga%{#}^omm|HM13ACS#T^>VJ@%Y4ZD*a9E;}o zoZG(KbK&j{QD@&=e|x9y%xC6>d*{wAzZY2@|Nh<2ZwyKZu!v1)*4KE3h`1Cb7ttc| z1AaF>&omx?A8Bpzv)K0N)tnmE1Fue<>N?rdp_QJU&COuu?Ux)E&aj5*hKBXTt_W6x zFw+-Y3RZLZu3fv8Ti1E!%qixL5oHQrI_J*kJ^J;G9~3x_ z&HnxSKCkx~&qr_CH9}r@rKpr8vKsu+-~LL0Ykj|5Na5REI|?7KEPDO@_wrvY*I$0> z@{)=-^_y4c`CH$2&W^w7kLO4)VD0Eu*TNoDbR3&+iDVefj>g(~0v-jyylS&^l-PZt0*!-+z5wotuz6NjY!Jf|mHz z(+;=lyz~jU8ZTb&cHRC~d7hhIV<~&YrEQUq+WD`T7=G$wR+-1u}QO>^c40VS9POhaZ10zUbfotV7r2^s3yD)`0T)=boq* z=`Fp(tmAac+afsmsbp~Z%lx2wwaJg?FgkQ_XKc^^D)9N^%2k3)&zE(}Grfr0^Fvc@ z^5XiK?{l-856*30);|AV-@KJqn zuWtA5Enfmv=dmfb{7^hw7L-&I#PRgr?d`iCKm73W{o;%BE4$+_rKU|geZfgTvOCO! zu_x|X%1>_b^823RZD+gYO?i~B*eB0ev1Rw~dwd_xewS?T+-Es4WW%F-XHH0I_aEw7rRTB! z^2?aVmlMPmCz`(sUioUy@}r-v{N^nSvO53TjoX*ugxG^W+$VfBFW$ag{h4KleBGVP zZ$8cSZ?;@`SAOeW_7#(!tJwzn`YbtO*r49`*oL96PKxK!4bP0l+XkK4;w)B diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a202630db53afefbe5c419ee6d2eddab1_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a202630db53afefbe5c419ee6d2eddab1_cgraph.png deleted file mode 100644 index c8d1921ca9ed991ab1b10011d9d983267e9e8136..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3380 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 ZPfT8SvAtgZCIbTlgQu&X%Q~loCIH6fY}x<- diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a3f2ad5962e43c82fc56b1e0e76a58c9a_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a3f2ad5962e43c82fc56b1e0e76a58c9a_cgraph.png deleted file mode 100644 index a2b5fd769b8a4c458fd3ba709de311471f0c9ee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9924 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 diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a589b4780f60d73929bd77a652b526868_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_a589b4780f60d73929bd77a652b526868_cgraph.png deleted file mode 100644 index 8256004595f65c2bf1c16f8942b6baa5b929d76d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1831 zcmeAS@N?(olHy`uVBq!ia0y~yV3J^9U{K{?V_;xl_&>pmfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM|6|m*QU-7}!pFx;TbZ%z1m)KPSXhhW*3)J==A~g*=r{Mho>` zoc!SI15ZwE3EPZEjkX-ey48JG<=RwSVCi^pu(>74Mq&{YeQ; z$Ch|Sd#xyFm~|=l`}2jd6+X}Z&aZv{_S`mlrX`fOMz{h zmNV{|TCU)tTFQ7J;G$zn!J-!oC%XF1IVZ}kV{y(h^nbrfLd%wC!M@7R&tjC6v{qld z7|4(zBI6eJb!ol7m=tSjAp7SDr`Ga4*bFE)XZR53O z;1QQ)Sz5N{1%uAbg)`b?JsAwAT350=xwyF8?HA@zQc~K~hmBg7E8G*cRxC=cbWiM~ zZSkwGzWaSDdS30UUtQ75j_NbF9ntE`PMSlC?Fp zaK@=!p|4{m&)K{(ZnaN-`qCKp-AmXWa4x;`ef8Dt_2FK!OixaqJo)#(h@{B0{~PUs zBd>j%yd`thb*;;{H;O*@`lO>EE%v$K!K4nEA{m)C+j=PX@6{dMV~ zKK8A%Q_>Ia&$|5f&dkIjyz|C*`t_Q=ZT^>=3Zw0!gzYP!|C+c~jH zZj#;gz~|FUmTe05^8K-|cF)Ztae}7LDx2*q?>(43@B030LE(woGcB}b{vSxm^5!`n zmCAMT?Qiz|3%)&G$Mdx+QG2J#Q^(RrM?$i^693#Q-y|0xfA93+M)PZHtDif1#~Si? zpLWg`o_EGt;@7K?{erA(lNR@}*UE?LYq|Y@ydZSz|2FBZlM}P7SLwVf-E_6@|L--{ zoQZ$c?|$X5TEC*$cM@}El9v6_DN%p+ubyJVdcy61?5Z$!HwKwplPZ6I|N0Vb*TcU~ zxyrkIJ^ruJB1<&o*UtstHXoZ+vQ<(vI3PaJ@WrJgAw{P@2c$f7(B^;s{Q16}b$>74 z)|5(~qLO(n~Ar zkU;u&ekto?I)t?YHR_n$SYo-bVgerfOOFx#-U*{7$j;PN^cTXlmwVK&FM$~b$e z-ji=vhp)FcHQScGt@q>1u!grWYiEb$z72VC?(nUx>utkVewnJs|M-o^owLqMm*_S9 zQjW7XJLkJ+)4|&xt}gZ7{p^;6{AYve+t=IH*aYWdppUdfUceNrL^oefv%F+5^8C%fS1>9e!%=g*oe zYi(y+t915>Qq}@bBY~r9rMIk=*>-o%_g?dtmFZ=#ubmgazNYe_v2U^ylr33^vb4%`7_mb2Da_JuDIf^ z&fl#qd*9{1I_&oU*UneDEV1ny$_~9^zuH|D?=$Ul#zxabuUX8A8<+OJJU4fLzK`!) z{XfDAtFJa*cjhx^?BHOTu(@w>pPtT+^mVbf&6|%hs=T|mW#3(C(+@MYwfnArdn{91 z^Y7N=%M4lBA9$>$TRg3r8)A6&T--i0)6$*Ip9Ionk6SXGnKN^a&5!%tXAWVyvpK2w}o za+YOru)5G(Df6e^nx)Y$7jlx;zqX3^@u~Uae$nt^mkBe&*=4t)SDLgRKi>XN$4WtK z{koY60;R^+bN5s|J*7U`^|+&U^ire!&6OU79}l1Fuwq~@)nb08sCtl-O;AuU@;Ek1 z{71CP;>C+C+Z;peo}ZtuZ^aV*ib2Yi-ErkrMv;HvHo7agKNq-i&PjN4Z?E-vi;fkw nadE$tw1hrS=)eM2Wc+8I6V6!3KdnR#Q~`Rr`njxgN@xNA*>!Aj diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_abfb1b068e95063f490b27cc3b467f63f_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_semaphore_abfb1b068e95063f490b27cc3b467f63f_cgraph.png deleted file mode 100644 index f4a028cfd14ba6643548c7b288f2bb1107e113d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1731 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 diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_system.html b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_system.html deleted file mode 100644 index 891b396..0000000 --- a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_system.html +++ /dev/null @@ -1,184 +0,0 @@ - - -ChibiOS/RT: chibios_rt::System Class Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

chibios_rt::System Class Reference

-
-
- -

Class encapsulating the base system functionalities. -More...

- -

#include <ch.hpp>

- - - - - - - - - - -

-Static Public Member Functions

static void Init (void)
 ChibiOS/RT initialization.
static void Lock (void)
 Kernel lock.
static void Unlock (void)
 Kernel unlock.
static systime_t GetTime (void)
 Returns the system time as system ticks.
-

Detailed Description

-

Class encapsulating the base system functionalities.

- -

Definition at line 44 of file ch.hpp.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void chibios_rt::System::Init (void  )  [static]
-
-
- -

ChibiOS/RT initialization.

-

The system is initialized, the idle thread is spawned and the current instruction flow becomes the main thread with priority NORMALPRIO.

- -

Definition at line 39 of file ch.cpp.

- -

References chSysInit().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void chibios_rt::System::Lock (void  )  [static]
-
-
- -

Kernel lock.

-
Note:
On some ports it is faster to invoke chSysLock() directly because inlining.
- -

Definition at line 44 of file ch.cpp.

- -

References chSysLock.

- -
-
- -
-
- - - - - - - - - -
void chibios_rt::System::Unlock (void  )  [static]
-
-
- -

Kernel unlock.

-
Note:
On some ports it is faster to invoke chSysUnlock() directly because inlining.
- -

Definition at line 49 of file ch.cpp.

- -

References chSysUnlock.

- -
-
- -
-
- - - - - - - - - -
systime_t chibios_rt::System::GetTime (void  )  [static]
-
-
- -

Returns the system time as system ticks.

-
Note:
the system tick time interval is implementation dependent.
- -

Definition at line 54 of file ch.cpp.

- -

References chTimeNow.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_system_a368a84ccf6f537f7ba732829cbb29281_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_system_a368a84ccf6f537f7ba732829cbb29281_cgraph.png deleted file mode 100644 index b1989cba7074e8aadb593162e6a665afc29700a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18383 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 - -ChibiOS/RT: chibios_rt::Timer Class Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- -
-
- -
-

chibios_rt::Timer Class Reference

-
-
- -

Timer class. -More...

- -

#include <ch.hpp>

- - - - - - - - - - - -

-Public Member Functions

void Set (systime_t time, vtfunc_t vtfunc, void *par)
 Starts the timer.
void Reset ()
 Resets the timer.
bool IsArmed (void)
 Returns the timer status.

-Data Fields

struct::VirtualTimer timer
 Embedded VirtualTimer structure.
-

Detailed Description

-

Timer class.

- -

Definition at line 81 of file ch.hpp.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void chibios_rt::Timer::Set (systime_t  time,
vtfunc_t  vtfunc,
void *  par 
)
-
-
- -

Starts the timer.

-
Parameters:
- - - - -
time the time in system ticks
vtfunc the timer callback function
par the parameter for the callback function
-
-
-
Note:
It must be called with the interrupts disabled.
-
-The associated function is invoked by an interrupt handler.
- -

Definition at line 62 of file ch.cpp.

- -

References chVTSetI(), and timer.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - -
void chibios_rt::Timer::Reset ( ) 
-
-
- -

Resets the timer.

-
Note:
It must be called with the interrupts disabled.
-
-The timer MUST be active when this function is invoked.
- -

Definition at line 67 of file ch.cpp.

- -

References chVTResetI(), and timer.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
bool chibios_rt::Timer::IsArmed (void  ) 
-
-
- -

Returns the timer status.

-
Return values:
- - - -
TRUE The timer is armed.
FALSE The timer already fired its callback.
-
-
- -

Definition at line 72 of file ch.cpp.

- -

References chVTIsArmedI, and timer.

- -
-
-

Field Documentation

- -
- -
- -

Embedded VirtualTimer structure.

- -

Definition at line 86 of file ch.hpp.

- -

Referenced by IsArmed(), Reset(), and Set().

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_timer_a065b7fbc2a055152c39505ae91ea9754_cgraph.png b/ChibiOS_2.0.8/docs/html/classchibios__rt_1_1_timer_a065b7fbc2a055152c39505ae91ea9754_cgraph.png deleted file mode 100644 index 4c8a393ad9c936a8772000426b5468c4f2bb38f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1174 zcmeAS@N?(olHy`uVBq!ia0y~yU=(IxU{K{?V_;xN{L8zCfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM|6|m*QU-7+5SkT^vIy=DfXYo3HFD!T#a@<}!g@kGcx z$f0C;cF>VcCHEE1wklnBEKXO^n(`|^`5$VGZ? zi_4*x50aiQ>1&2*V&dYTc{;Q*va`7v_Gw!7tXan#!Stc@W@E?&A)WR6 zb!RTP{4$}m)O35tidk+aQ>1Db6L!8)(DKM--=nlxVbRN@DNZha1~UaF3j3(JJYkv4 zDQGz{+bDDU?TJqdkAI%Dn*b0wO_TIKIg2@qH_z>3MuRGEFw|qe`b?=Kp67{nhg} zO$(o^^~~-2dWL(u=PiG~HL6^0^{F;3v)cdv@+X`1UhYh&xxdX;vv|SnTYTR(PqUtU z`uH3Z=8{R~#RdXRZ&h-i7-mdT*`TxWi0Z=)zqUP3AQoZl` z=Pj51{d@ji3z>g^^V^Oc-IRN6W(tG5>aq=zM}O#e6qq%NESq8~EWU{CR^>yjbsHjE z*1p|yz3SCh?;SNi&&oB-o6Kf>Iq{B#sO8L!9S>%$irHQCRIIP>&)ulCKVSX(*S=p& zD6J~dQ$wpz(e-c4lSw|8cs_VeYW!*V&_;cV!#u;b+MLd+xJ^flWaJ*bygdK9eoV#U zFRR;JpRhGVbFNyY#ikU+zGwbC+uJj(ZEC)pF8FbNNvFz7ALaA?qKTX5t@u|If1-4f z&#~p#5B^i>H8buFG8+4+v)lf#m4Pw(AhuUGoJ=2T38?yDaAc``YMOLWo4-QDiGp)Xk7wbCw1|7Wa=9K*e5_wN1f?`>y0*%HpXeEEhw z|E9(ob51TjI9Y4ux>fEKn6H=rzGbK0s&oRg2`2pw!&b^Y_-?%N0M zKHl_rW@zwKpNwlf^5@R)|8nx&xx3F(-JN{YLK64=|0sN4-UB3qNbBA9dii( z0|NtliKnkC`z>x6UM|6|m*QU-7+APHT^vIy=DfXQoi7tA!v5jEWU{-W(?lVz_Zo{h zoE~w1(1@w9V+fMcZn|P3vN3kaq76LjdOchiWjT%uiZyBRuF2t^us|hfmW_yOSMvIf z*aX!+dF$y(n=bw^>fil&*Y5ED^S69DGk16SxpmLa%$#{QvY`V8ye776<7AjVo3CZf zPuT;Zw;e@FBrksRnz*{--+cYOlPgXrx> zo(4?@``5jmoO}#3X3t)2Dzzy;C57c}+3hlk)L8a{lVt+T4yvYAzV41LXA_%*Eqgfq zo*1ZEOguc}feYVi-Gj{vCvwh5$B9q=*sSp5{^HIXo01G(+OIiwJpF#|*0j1$e_wV# zKX-QC76GS6q8ZI)Q$IMI+EkZh@G@WJYx1UDYu2rs7Im*Bj>l0zrhECy8(+RI+q(16 z=R<}|pELy(Exa9Cz4qFhey^3UqodE)vF?+6a{gs?yhyOczomw?c5By`O%3_5#%uBR z*R`9bE$@w9vPm`c(V88fj$L|e(7Ex-htM2J>{_Rp*wU4=Dz4!m013yC>mUICG!=VIP*o`v2y!JxN~rq4WLu9HviuJ9Kh$bpFK_yjbHk+bq_l=J(y|k5EA#)TC12V2aQ2&!Q%8jEE50~iyd+3EP|K@q=>?%cH8Pyh|_aoO1Rl@6L)>uKTxVOX2A?>(yWX*~zucFm3Ma z*X zyw)t~E}pbW=l!edmkuTJj1f{_R(U+t)zMjSH!pg>w6<5lPu+WJO^07hh{+M|0H*d)sS6wL%#YKxg>+oFddR}?DUp{|Jjz5gz%gbi7Ul##{Ee%v&^Zjy<5f+>hZ_6plgZRk3WBECKn2b nnsPm0zwIa>2n7=t|6|rp`L%h - -ChibiOS/RT: Alphabetical List - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Data Structure Index

-
-
-
A | B | C | E | G | H | I | L | M | P | R | S | T | V | _
- -
  A  
-
CM3_SCB   
  H  
-
msp430_dio_setup_t   SPIConfig   
ADCConfig   CM3_ST   heap_header   Mutex   SPIDriver   
ADCConversionGroup   cmxctx   
  I  
-
Mutex (chibios_rt)   stkalign_t   
ADCDriver   CondVar (chibios_rt)   intctx   
  P  
-
stm32_gpio_setup_t   
at91sam7_pio_setup_t   CondVar   IOBus   PALConfig   stm8_startctx   
  B  
-
context   
  L  
-
pool_header   System (chibios_rt)   
BaseAsynchronousChannel   CtxSwcEvent   lpc111x_gpio_setup_t   port_common_t   
  T  
-
BaseAsynchronousChannelVMT   
  E  
-
LPC13xx_gpio_setup_t   PWMChannelConfig   testcase   
BaseChannel   eabi_frame   lpc214x_fio_setup_t   PWMConfig   Thread   
BaseChannelVMT   EMACDescriptor   
  M  
-
PWMDriver   ThreadsList   
BaseSequentialStream   EnhancedThread (chibios_rt)   MACDriver   
  R  
-
ThreadsQueue   
BaseSequentialStreamVMT   Event (chibios_rt)   MACReceiveDescriptor   ReadyList   Timer (chibios_rt)   
BaseThread (chibios_rt)   EventListener   MACTransmitDescriptor   
  S  
-
TraceBuffer   
  C  
-
EventSource   memory_heap   Semaphore   
  V  
-
CANConfig   EvTimer   MemoryPool   Semaphore (chibios_rt)   VirtualTimer   
CANDriver   extctx   MemoryStream   SerialConfig   VTList   
CANFilter   
  G  
-
MemStreamVMT   SerialDriverVMT   
  _  
-
CANRxFrame   GenericConfig   MMCConfig   ShellCommand   __ioport   
CANTxFrame   GenericQueue   MMCDriver   ShellConfig   _SerialDriver   
CM3_NVIC   gpio_t   
A | B | C | E | G | H | I | L | M | P | R | S | T | V | _
-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/closed.png b/ChibiOS_2.0.8/docs/html/closed.png deleted file mode 100644 index b7d4bd9fef2272c74b94762c9e2496177017775e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0y~yVBiE{4mJh`h6fYb1Q-|?Ts>VJLn;{G-gV@4P~>3_ z=vtdOt5H9J?Lv#*340yI=2EVzoO{!}G7Rs}&@THM#LvOz!}@Z0g~P - -ChibiOS/RT: Kernel Concepts - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Kernel Concepts

-
-
-

ChibiOS/RT Kernel Concepts

- -

-Naming Conventions

-

ChibiOS/RT APIs are all named following this convention: ch<group><action><suffix>(). The possible groups are: Sys, Sch, Time, VT, Thd, Sem, Mtx, Cond, Evt, Msg, SequentialStream, IO, IQ, OQ, Dbg, Core, Heap, Pool.

-

-API Names Suffixes

-

The suffix can be one of the following:

-
    -
  • None, APIs without any suffix can be invoked only from the user code in the Normal state unless differently specified. See System States.
  • -
  • "I", I-Class APIs are invokable only from the I-Locked or S-Locked states. See System States.
  • -
  • "S", S-Class APIs are invokable only from the S-Locked state. See System States.
  • -
-

Examples: chThdCreateStatic(), chSemSignalI(), chIQGetTimeout().

-

-Interrupt Classes

-

In ChibiOS/RT there are three logical interrupt classes:

-
    -
  • Regular Interrupts. Maskable interrupt sources that cannot preempt (small parts of) the kernel code and are thus able to invoke operating system APIs from within their handlers. The interrupt handlers belonging to this class must be written following some rules. See the System Management APIs group and How to write interrupt handlers.
  • -
  • Fast Interrupts. Maskable interrupt sources with the ability to preempt the kernel code and thus have a lower latency and are less subject to jitter, see Response Time and Jitter. Such sources are not supported on all the architectures.
    - Fast interrupts are not allowed to invoke any operating system API from within their handlers. Fast interrupt sources may, however, pend a lower priority regular interrupt where access to the operating system is possible.
  • -
  • Non Maskable Interrupts. Non maskable interrupt sources are totally out of the operating system control and have the lowest latency. Such sources are not supported on all the architectures.
  • -
-

The mapping of the above logical classes into physical interrupts priorities is, of course, port dependent. See the documentation of the various ports for details.

-

-System States

-

When using ChibiOS/RT the system can be in one of the following logical operating states:

-
    -
  • Init. When the system is in this state all the maskable interrupt sources are disabled. In this state it is not possible to use any system API except chSysInit(). This state is entered after a physical reset.
  • -
  • Normal. All the interrupt sources are enabled and the system APIs are accessible, threads are running.
  • -
  • Suspended. In this state the fast interrupt sources are enabled but the regular interrupt sources are not. In this state it is not possible to use any system API except chSysDisable() or chSysEnable() in order to change state.
  • -
  • Disabled. When the system is in this state both the maskable regular and fast interrupt sources are disabled. In this state it is not possible to use any system API except chSysSuspend() or chSysEnable() in order to change state.
  • -
  • Sleep. Architecture-dependent low power mode, the idle thread goes in this state and waits for interrupts, after servicing the interrupt the Normal state is restored and the scheduler has a chance to reschedule.
  • -
  • S-Locked. Kernel locked and regular interrupt sources disabled. Fast interrupt sources are enabled. S-Class and I-Class APIs are invokable in this state.
  • -
  • I-Locked. Kernel locked and regular interrupt sources disabled. I-Class APIs are invokable from this state.
  • -
  • Serving Regular Interrupt. No system APIs are accessible but it is possible to switch to the I-Locked state using chSysLockFromIsr() and then invoke any I-Class API. Interrupt handlers can be preemptable on some architectures thus is important to switch to I-Locked state before invoking system APIs.
  • -
  • Serving Fast Interrupt. System APIs are not accessible.
  • -
  • Serving Non-Maskable Interrupt. System APIs are not accessible.
  • -
  • Halted. All interrupt sources are disabled and system stopped into an infinite loop. This state can be reached if the debug mode is activated and an error is detected or after explicitly invoking chSysHalt().
  • -
-

Note that the above states are just Logical States that may have no real associated machine state on some architectures. The following diagram shows the possible transitions between the states:

-
-inline_dotgraph_6.dot - -
-

Note, the SFI, Halted and SNMI states were not shown because those are reachable from most states:

-
-inline_dotgraph_7.dot - -
-
Attention:
* except: Init, Halt, SNMI, Disabled.
-

-Scheduling

-

The strategy is very simple the currently ready thread with the highest priority is executed. If more than one thread with equal priority are eligible for execution then they are executed in a round-robin way, the CPU time slice constant is configurable. The ready list is a double linked list of threads ordered by priority.
-
-

-
-inline_dotgraph_8.dot - -
-


- Note that the currently running thread is not in the ready list, the list only contains the threads ready to be executed but still actually waiting.

-

-Threads States

-

The image shows how threads can change their state in ChibiOS/RT.
-

-
-inline_dotgraph_9.dot - -
-

-Priority Levels

-

Priorities in ChibiOS/RT are a contiguous numerical range but the initial and final values are not enforced.
- The following table describes the various priority boundaries (from lowest to highest):

-
    -
  • IDLEPRIO, this is the lowest priority level and is reserved for the idle thread, no other threads should share this priority level. This is the lowest numerical value of the priorities space.
  • -
  • LOWPRIO, the lowest priority level that can be assigned to an user thread.
  • -
  • NORMALPRIO, this is the central priority level for user threads. It is advisable to assign priorities to threads as values relative to NORMALPRIO, as example NORMALPRIO-1 or NORMALPRIO+4, this ensures the portability of code should the numerical range change in future implementations.
  • -
  • HIGHPRIO, the highest priority level that can be assigned to an user thread.
  • -
  • ABSPRO, absolute maximum software priority level, it can be higher than HIGHPRIO but the numerical values above HIGHPRIO up to ABSPRIO (inclusive) are reserved. This is the highest numerical value of the priorities space.
  • -
-

-Threads Working Area

-

Each thread has its own stack, a Thread structure and some preemption areas. All the structures are allocated into a "Thread Working Area", a thread private heap, usually statically declared in your code. Threads do not use any memory outside the allocated working area except when accessing static shared data.
-
-

-
-workspace.png -
-


- Note that the preemption area is only present when the thread is not running (switched out), the context switching is done by pushing the registers on the stack of the switched-out thread and popping the registers of the switched-in thread from its stack. The preemption area can be divided in up to three structures:

-
    -
  • External Context.
  • -
  • Interrupt Stack.
  • -
  • Internal Context.
  • -
-

See the Port Templates documentation for details, the area may change on the various ports and some structures may not be present (or be zero-sized).

-
-
-Generated on Sun Nov 28 2010 14:09:54 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/credits.html b/ChibiOS_2.0.8/docs/html/credits.html deleted file mode 100644 index 7109f13..0000000 --- a/ChibiOS_2.0.8/docs/html/credits.html +++ /dev/null @@ -1,81 +0,0 @@ - - -ChibiOS/RT: Copyright and Credits - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Copyright and Credits

-
-
-

Copyright and Credits

-

Copyright Statement

-
-    ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio.
-

Contributions and Copyright Assignment

-

If you plan to contribute code to the ChibiOS/RT project then there is a requirement you should be aware of: contributing code for inclusion in the ChibiOS/RT main line requires assigning the copyright on the contributed code to me (Giovanni Di Sirio).
- This may sound a bit strange but is pretty standard for this kind of projects, there are several reasons for this requirement:

-
    -
  • ChibiOS/RT will probably also become a commercial product and it would not be possible to re-license the code without ownership. Note that the commercial product would not be a different or better product, just the same GPL product made available, on request, under a different license. The code will always be available to you under the current licensing terms.
  • -
  • Ownership is required when changing the licensing terms and this happens each time the project goes from development/unstable to stable and back because the addition/removal of the GPL linking exception.
  • -
  • It will be easier for the project adopters to have a single ownership point in case of licensing issues (both GPL or commercial).
  • -
  • Losing the ownership on the code could preclude me the opportunity to make this project a full time job as I hope.
  • -
  • I definitely don't want to have to sort out copyright related issues in the future so better be clear than sorry.
  • -
-

Note that contributions will always be welcome even without such copyright assignment, the difference is that the contributed code would not be merged into the main line, it will still made available as contributed code with the contributor(s) copyright notice intact.
- Submissions of code with copyright notice should only happen through email, please do not commit code with copyright notices directly on the repository.
- When submitting code please state clearly your intention to keep the copyright on your work by adding your own copyright notice within the source code and by clearly mentioning your intentions in the message. Code contributed without copyright notice will be considered donated.
- If in doubt with licensing issues please don't hesitate to contact me in order to sort out any problem you may have.
- Of course the copyright assignment does not mean you would not be recognized for your hard work, see the following section.

-

Credits

-

I want to thank all the people that directly or indirectly contributed to the project, I beg pardon if someone is missing:

-
    -
  • Adamo Reggiani, working on the Fujitsu port.
  • -
  • Alexander Kozaruk, AT91SAM7S256 demo and description files for the Olimex SAM7-P256 board.
  • -
  • Brian Weaver, STM8 port, STM8 and STM32 testing and improvements.
  • -
  • Egon Carusi, STM32 port improvements, testing and bug fixes.
  • -
  • Enrico Cavazza, working on the Fujitsu port and a GUI subsystem.
  • -
  • Eric Weddington, because his work on WinAVR and helping me sorting out issues with the ChibiOS/RT license.
  • -
  • Isidoro Orabona, co-developer of the ChibiOS/RT grandfather back in 1988, it is a long long story involving a 6502 and a Z80...
  • -
  • Jacek, Ride7 demo for STM32 Primer.
  • -
  • Leon Woestenberg, CondVars idea and implementation, documentation improvements and a lot of other ideas, he also helped with the lwIP port (he is one of the developers of that project too).
  • -
  • Leszek Bednarz, H8S and ColdFire ports and drivers maintainer.
  • -
  • Liam Staskawicz, Posix simulator, AT91SAM7x and STM32 related contributions, general improvements, many bug fixes and excellent suggestions.
  • -
  • Michael Fischer, because the work on YAGARTO and the excellent feedback.
  • -
  • Riccardo Scanu, another long story, this time involving reverse engineering and giant robots...
  • -
  • Vladimir, first tested and fixed the AVR port, I don't know the surname but he has been the first contributor.
  • -
  • Walter Goossens, several fixes to the LPC21xx support.
  • -
-
-
-Generated on Sun Nov 28 2010 14:09:54 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/custom.css b/ChibiOS_2.0.8/docs/html/custom.css deleted file mode 100644 index 9c847c6..0000000 --- a/ChibiOS_2.0.8/docs/html/custom.css +++ /dev/null @@ -1,441 +0,0 @@ -body, table, div, p, dl { - font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; - font-size: 12px; -} - -/* @group Heading Levels */ - -h1 { - text-align: center; - font-size: 150%; -} - -h2 { - font-size: 120%; -} - -h3 { - font-size: 100%; -} - -/* @end */ - -caption { - font-weight: bold; -} - -div.qindex, div.navpath, div.navtab{ - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - padding: 2px; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #153788; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #1b77c5; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #6666cc; - color: #ffffff; - border: 1px double #9295C2; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code { -} - -a.codeRef { -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -.fragment { - font-family: monospace, fixed; - font-size: 105%; -} - -pre.fragment { - border: 1px solid #CCCCCC; - background-color: #f5f5f5; - padding: 4px 6px; - margin: 4px 8px 4px 2px; -} - -div.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - margin-bottom: 6px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background: white; - color: black; - margin-right: 20px; - margin-left: 20px; -} - -td.indexkey { - background-color: #e8eef2; - font-weight: bold; - border: 1px solid #CCCCCC; - margin: 2px 0px 2px 0; - padding: 2px 10px; -} - -td.indexvalue { - background-color: #e8eef2; - border: 1px solid #CCCCCC; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #f0f0f0; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -/* @end */ - -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #84b0c7; -} - -th.dirtab { - background: #e8eef2; - font-weight: bold; -} - -hr { - height: 0; - border: none; - border-top: 1px solid #666; -} - -/* @group Member Descriptions */ - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #FAFAFA; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #ccc; -} - -.memTemplParams { - color: #606060; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtemplate { - font-size: 80%; - color: #606060; - font-weight: normal; - margin-left: 3px; -} - -.memnav { - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.memitem { - padding: 0; -} - -.memname { - white-space: nowrap; - font-weight: bold; -} - -.memproto, .memdoc { - border: 1px solid #84b0c7; -} - -.memproto { - padding: 0; - background-color: #d5e1e8; - font-weight: bold; - -webkit-border-top-left-radius: 8px; - -webkit-border-top-right-radius: 8px; - -moz-border-radius-topleft: 8px; - -moz-border-radius-topright: 8px; -} - -.memdoc { - padding: 2px 5px; - background-color: #eef3f5; - border-top-width: 0; - -webkit-border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomleft: 8px; - -moz-border-radius-bottomright: 8px; -} - -.memdoc p, .memdoc dl, .memdoc ul { - margin: 6px 0; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} - -/* @end */ - -/* @group Directory (tree) */ - -/* for the tree view */ - -.ftvtree { - font-family: sans-serif; - margin: 0.5em; -} - -/* these are for tree view when used as main index */ - -.directory { - font-size: 9pt; - font-weight: bold; -} - -.directory h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -/* -The following two styles can be used to replace the root node title -with an image of your choice. Simply uncomment the next two styles, -specify the name of your image and be sure to set 'height' to the -proper pixel height of your image. -*/ - -/* -.directory h3.swap { - height: 61px; - background-repeat: no-repeat; - background-image: url("yourimage.gif"); -} -.directory h3.swap span { - display: none; -} -*/ - -.directory > h3 { - margin-top: 0; -} - -.directory p { - margin: 0px; - white-space: nowrap; -} - -.directory div { - display: none; - margin: 0px; -} - -.directory img { - vertical-align: -30%; -} - -/* these are for tree view when not used as main index */ - -.directory-alt { - font-size: 100%; - font-weight: bold; -} - -.directory-alt h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -.directory-alt > h3 { - margin-top: 0; -} - -.directory-alt p { - margin: 0px; - white-space: nowrap; -} - -.directory-alt div { - display: none; - margin: 0px; -} - -.directory-alt img { - vertical-align: -30%; -} - -/* @end */ - -address { - font-style: normal; - color: #333; -} diff --git a/ChibiOS_2.0.8/docs/html/doxygen.png b/ChibiOS_2.0.8/docs/html/doxygen.png deleted file mode 100644 index 635ed52fce7057ac24df92ec7664088a881fa5d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3942 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 Bq}%`i diff --git a/ChibiOS_2.0.8/docs/html/eclipse003.jpg b/ChibiOS_2.0.8/docs/html/eclipse003.jpg deleted file mode 100644 index a5cee7998a89cc3e5c07b1846a59c29fd5bfac8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42621 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 z 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 T%nyi-o?k8p%X(DF|Gx^mzNh7 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 diff --git a/ChibiOS_2.0.8/docs/html/eclipse006.jpg b/ChibiOS_2.0.8/docs/html/eclipse006.jpg deleted file mode 100644 index fd56acdb50fbf6e272da55830d391667c63bb02c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15292 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%0A{*JPlk&r#?*F;u4}1P*lG}+V3VtnMv-Ip z^dR$-hbFCgxP(=;yKzFtfxd@~0?sa7I}cp#IlSv!$Fo(DtBx(2cVfv(H`^?mGtn*4 zL4h~cO1@1MPF~cpM14!BnBI+3J_*zA7)`ivvUGFlwvdZF2SNfm*^jO0O6c0}_VCxG z9c#Wzlvlf0Z{7LMMsp2I$GhCXdpElTrils$YpmE2;<{?xhV9&Yl`^BZEX!NXWh}IK z@dPgSX4UJ9gq>a)>0)* z-JYP>VdlPfvYX7zwi#h(wmq;>U={7&cC$$NaL1RO`CH|z8T_nXFKgm$SQgS5K1oSQ zYt`D)HPdI?ep2+_bT{G7v8roTI#+l9d$04#j(cq{%v;~`rhDnl z;}3ngi#)cUNPNuH+rpUVyzZpV&LhV~%eB_AT4dZ>ueNPt)-=g?EARc7lx8nydh&JZ zCXeodnVf3(u0_2}QxF?U}dxcK3t=HIJPX?6R)mEL@H=BmNv%*ecX z%_~o=6H<@=Dy%4UfR*u6)3bAi)|RaI)+|YT-Ee91CpVYWX;&|X3zQu`GNG|_^WlBl z*C^jU+ugbS%CmbhRhf*Af;F>TBX#;)J}k~laV=Wmy2oSJvBs)pGgf_jD69WE@Ai*d z$I7n8_qOr=wU~tK#_Q}UGvOHj-R(|>(08JcW&(9 z4>-*eeZO?N^aJB-+bwP%<|uj|1uJd30u^*ln>M*VT$@nNVLWrMwyUo3lU<^AwHof*{pL&e-}v_DN$D@HJ@)9=+*)S*){ZId*5tI7js!0? zOaCPvA)$7yuC5=$b<-UA!*^WVbZ7Mp)>kFJv!A{0TX-NN-NWpO$^IXaJ?lDVJr%hm zrIdTNL^?fU*^1qEZ-0H{a*{niBYUl2pHB+sW(mN-i*N5IHF*^vT7=H8k{NxahKKaqsHj z#pasZ=AOGaRrJO?HPOJL+l$m}F28g+l^8r}(KY2&Z+~6Ncr7+}cGX1HAJf~q?p<9M zx#>wz=Ep9jm$p|!L&c018C;k2KB)gEY3175%qtt#Z+vi5U;M|kZwc&0o!iv!%qhy+ z^=aqcgA*7}irHDcnrsoH#wz3bJn3!K)Cu==e{Cq)yea5)eQs)2VR3grJg#?y)+1ku@?dh8@ z@{K1XpuXc#-#M*3C8>zr8B0^XC+?Ho9ne!=s%*6|bw}ThwdaZ?qN{#9j1*8znB!4h zY2fi|-5V|Io!L`l_TIMQyA~9)`)+LE4B@%kz3Oy2@=cVbH5N>gE%H|nJnB?3Ve{ue zM(NOq-N8#!jQyTW`@LFB>}$Zw?Z0M}u6$Tp6yrWIUi}W+ltbAKyA!u>-Q?h>C~hJ? zF}r-_uhw~e>ppMQ*&BD!b<>%5A~SMgl2+N>>FnsU(_OWL^Pq%Ex6brw;e}eeyf&6E zSQ(i%Ejg?vZO`9hFH8S39g-@ zyIA*!Oyyr|z+YPF`{7=C!NQz^%C{!xMD1E#mmGKtAK<0wa4yU7CgVL8LCX~O{o~yp z9TMs;`ytTt>a#8mi&ILPT?v95PEotcl8ibY?a=4?I{h+VCugFZiL37s@2$aH-E*`O z16d6;FHR3iJ$38t!P&gmte7VsJ-6=2L}p2iTkHNPY5izr*`rfr_$y$dv0U4`paqd@ z3X_+x&D^bf^m@v!Lo5F@cW(`uFp;CcW6mEB?ep_>gT5wjjSHOj(wV)tH8k^xDl^aH zB1Nu+N_xVYbM%Bwqpnm%J^Q@vn2w;1pu%m|AT7I_f=sIt3pzl{m;3FP|6Y>#e0A-N zLp{6PJ7ZjqxCYA4?47$j%h@GMvwVA+`%H<5I_aFkKt}h&1tC)ncNTQa4nF?(KZBpp ze%{wx_@otNYWt=k+owViu`cCAk`guDtWocvjw-$0cVi7M#xt>#tJ1B)xI!IV=Apo{IO2 zUrkc6`J#3&b>XXZ3oQ?*9rfHZOKHd2?^Z_FHm&>hIpF4$nX~-;va&4h9*pgj)4H|x zX-A*N@(9t&C-Dp}0Wsmc4s$YMHyB@>HZ6UvaDG-|RXnTwL` z?bREtTSGRjSkngpfEY+ssvX9c)f-yybbHY?6_ldN{x`=o(Ffk~tSdijUeI&Z| z%3YmP8*k->e>b_T9~o8lT8O#1Fl5r7)zv|BN@BBHw=U~mal)}6reNo`Rh&B}=v7U2 zk9hyNspQJe!tHs>cq_v{CRrWwQOGvLPzlK)&cIj?g>wb4ByGLJ-Ji9Gd zxw<(>y3Wvl;?>r8CiXj-y?@MN4GXWRM+=%h+OaCq_(aH7zFpUOvUZEjNIRa|TW>vC zRY~FQ*%Ltv_i{Z+=vGWx+&jyXr86KZe%7tL5F^KTx2*hk#+BCGmR;`dTV>!mn@#6> z^o-lyYDT+M*6+R=W}P#+XNKao&&wy}>n>W^5v_mA-0$9Vd%GI*U7ybyTsqxv_~QMx zp4F#rZF}sda#209CZy5TBUVv0FeaQc!`5iKr@2VC>Gmas-Pz%q3YYn;RP^>7c6!9j zFC;y)av{5DOksJ-$q=pZwUw*%j7l!w3OaFG=gbwpXx{E67ZX!v8$1`8)-yZzoxqka zg(8M`mgP#RpVZj#&_QpnM2{jSUIN8@^{`Rk!|g-MdCa~XUc6SzAhsv) zUEZ$83*N_7eKb7zc7>wC;-ZsRYd5+SUU6i0Iec!J!NYglsi>1?q@7=^=oPf#V&M1N zsjlIEFFp!gFVxTzJ%K7i3CM;!|0!8d1CoV2KQYCZZtw+!A zl*?y!aU?ttN@!`V)Y8&gwCKm{X;T)23%d0b-JTJ6OHR2?X^}M z4iAJ9T_!@DcD4M`XNTHjm*q|-Zw{*p_cAQh_|Fiv%wA}+pw{uD&l-OBF0-9nLCEwI3%R29s9dYOLJ)eyS`SULAin}e8VqG?SvvaTIK9Ow^O}7&j3|4ME=;&f{ zP$;qZ^Yqs%yMlIxhK8PfHT&d_rJ9jJQa@?YWa_yS!VCo@Z=7H<|IAj`9T*tGFkMo=SeU{A!R0 z%5t23Ec2&knA5CeoH(&4!8=VRJ-V>dX~pk%TIRfmTwMzTJ&>-RZYucX4lz{Pw%H_rbh7LE@K;eJwV1 z#7}tKvtq&GB(2^ZtJbdCrk;IyTDM;N#WT@LdnW3J9pgFs(qD}wSnY9Jc8gz@%j%QD z+AS_Vs@(o@R(6}RG^a=WwQ#Ppxq1HV#QeI~*=jN7Mjb7WO!`+edxdKl9JhN9Oyj0$%#g_Hv%QJpJQB*GFEnE!(80i+-DSv2ez1hZPUr zo4mSsFTgoBL^l1fW3g%4#*$XPmo<6!%A~JwT+$2HEm&t%wd?pyElnG}Z5+3ky!h1f zQ_+G!t9QN4iiPQc4@%q%UfkoGweL&&l1H9#o0STq@(msL+04j4Qn+pVvI<>O#i&$H zBi>C1)&&@B%P6nwc=TPn{gP{A_4Ml5)ybuw^jrR{+j>Ok`5EDL)?0g` zE9slfd0BR`BJHNamv;-cyYDdN{8ANgEHHKE^204J7w1dn*4{na#U;qpw7TiWDxqWB zD_;CETe~Cv?OhA!hO4KFgVUm;cHKH~CX%-MY7yuY|v_scdLzwR~V zYb&{)=g#>zzq`QGXxD=6B|)#=O808#tuWF0GEMmD4vmgaT5knSIcM{GU(+4^2hHuWzyr1$twm0A1 z-SI@)@57GXg5FJi40~f+59cyH-Sb@S(QIg#?+TkYMSt=yvrGJk+lyxx*50)^`tH;1 zLN{Z6?;^oH7aJvJP28+fx#c3q$95Ji)lF#!FYjyJH)X*#t1r_Xm)&i-Y^1d3$(O=! zGjds^D>|Fh;}Zf>mASg!o4BxxC@4hlQrzyiEn4@kp>t<;%iFEr7qq^+<9n`($z4pg zq<3o}r<+QlO3rLix1U^^LhH+vzW5!Ty<_QR7W1_iqY_uUB=0}u_EzI?@2*2znmUiF zot+lq@ z&QI}&pVgy;o(&oE-L5q3EZMWGJT&ffcvN1QhVH?wt^01b;3qrd99vD$8}cwzTx{E^E85oZID`d+wyNyn1n=wGi5eDuz?lEZSbzn)fgay>7)_$KqmbWWk9uTFW_7OOqDvRpP!OL)=TNZ}_ICsv$V zk#|R{>~z0pRNn36wC@F;8y8p>?YMpRQYv>-fLo;9LxokV+HUA;ymeJQQK32YsNAFT zuEkG0Ep5$=a_;0V%-Q2^{dLc=7YBCyoMh#~mHRHzUrj=7g3E+x2S*vbja9O{e8Qf8 zS)W^VY*X5)Xz_A|9zUI9DW(eB7cA-LUwcBQaDz%6pMXo?!=$3~$+k98dXuj%uh|!~ zX0plESBLHHOPMUrdKB2*arw!IMy}(PSAJf+}S~arqAh>gg}SFrbUme+7IMD4Jps(g*rc6bJp>_9mR=R%d5WL;@zspQK0a( zU}s*%Z80U2$H&}0i8F5Hef{u6qEXk2F1IYd>A7Nx6OH`lUg5uav#grABqdp!-xMj(fVD7`$cvaZ(7XRtf)}FnaO2qDWfc_*~Fw1 z>Cc%~pRu~pR!#eEyypN7U|3myH(}T<9*NqVnqfjMZlq zv`o*>bk;?~v^FZm8c=S*75cPjdf>O|!=oSdgiuG(079+|Y_(el2SsUdNi zAv5EubX(atZ(BKC4pP0f?(_QzQ4?1ro88{DRAukk9Z4;VuBBOYEYfo7(0-U0Fb|sC zD_(s1uJxZ`$)a;Rww*2)n_DM(P{P%%>PmW_^{Z>4-Yx64WJ&MQU1jMKvnWDq;YFLd zX0sAk`*w#$m8#5`S@m3xr|o>V=4bP`ng))E>$I1=T%h#UXBEGqi+62OQc|w2%l)FM zmxw%kb=&To*u6iTujfAIGd<*c zG_s%bfO4JF9zVUu6(72aWOR}_ANi zSmEKh@?PT9L)Xn28Xt3s#vqAd1q&^9JIeY4GNzb>% zm-nP*tjqH#GnqQUI{wbG$NgNzK`i0?SxW3Chn6pP?Xf)4arEx?kJY~GbGPkXe^G1i zHp|k#w|CEF$~wKgI4|s+ZPVjFVh@h9e*3oR#Sh1+#|o!Be-sk+VeN9aTl!I@oo3ZX zZ=OD~lE<-~D|F+sh?%B`b3EJTy=Gaxk-uoxHl@yuoQ^Rp@kOtroxjO9-&?lj)b6u; zJo=ZXFW#IcHF>?zriWUqR;_xh-QpU0NJ%YRay|R~uWYk-W@d=(*e1P2Ga$LaWN}%} zqQa@neZMwey>R7j;Hg!+R?TBr^d^VV?)uC9e~*d1xp)8E{l66@yW{i^-hT1gasMhs zuPLvK4lcfNgt=#}ptbV4g9(QdCp>2~2{m%)^0E_B5_P#-lD2T`%|oyCO#Idb-kjoa z_K@}YEvFBu-0m}CTW7-3XZ}#4E9Ia~O2_u}U!m{HJtynun%+Ip^R-NQ_wLoDeY{6! zo;z{uOuOu}d&No1Pk!xPIWd=Q)#R~M#lJQsi;5DIpSB~5{k>}yA6e0LRXO>54L+(wlA8&%x zj)otIQEqNgeX{ZUyuPiui`Ol=A!zRONcq9hQ^wC)?o}*My4|uYS1GT+Rb-Z^lZjwR zsP`4AyoXEPhTWdp_NLrAbnlJArN?)h-R9oq{Jv9KRi?ARf0dSU=M;H~XG`;9RZCAV z`MLM#&1>((f6lhLR#qOQv2nY#<%e(Y&VTyc!{0a2;-c-3db#Cq3bWVs=8NTK7j21( z$|_-7H%ZC8a(7Sq)dftZqLX~5DX-_D4 z*U>!5g)0>nc&ZCd4h_5GB4`@3{|SVsFl-`x0F5WJRTD^N9>tFw!j6CD=7$09Z{UHjkhun$eLtLX z7cFAS_0gJc`hA(?_0E@i+2K2rHBYh^^y~e4eDR=s;xk!}T#W_pzLR8c@0ANYoH^CS zq$t?RrK-Mq%`th=^zawY-<-?r5DZ>_=e^iJ%dLFg!3_5zCrL7-%m@-XvE{x>Q0yts zzb6&V7iZ6o%Db%Dp8Nj%bfXLpv-Jjd+79!y__pPDcir|{uIO4mD>ZbB%Sp9&OWtNm z_Bt>Ev8?`UHbCD>zsoPq>WKct8s#q2)|Oj(4&OOv6`j(`N|#g8mA|{Uo>S5`@cG5H556pk zoOmlU?`g?Y!4rKk$z1yw&V)-w99Yt-8uNJ4a_-K(qI*|9RGL~jS9Qg_8DGqF^Y*LG zC|ovKS77GqpwKCaF0P@TzA2kJlqY@oxhS!)P;QE%rIzTa(n)X4UT5x}dhMo`>&MvB zb2JukYIj_e{`1Jpb;B*!J02RhavdLSDw!#D!Lz(~`CVI&32!f2ot}I#@lDH@;LNIB zX6;iYaye_Zn<|I6oZ`}4EvKAQpZ`v-{4hXuBljHEr#_KiiIc>bT{eXZ&(% zu)FBg!1yVQ>y~>4n>0t|om_4*WqPW)P|C?oa*=93Qa|)CX{1Y8rdsVY6eEvM5Qh^F+VHvO<`M$%Lnugh0mmunSw2WqK<)&_MX}PRP%D_l1#IiXLT1| z+;K-|;+jwMUuPb?DSM*pWOIz|p*R8;W0iN;+x<)Lq#dmYKX@(Q zEL^J2+s4ssZp*t1;eShiM9XIE*%@Y<>_qymp@O7)pT6EEgiYzV|SY8R7bt+Ek!&0*X>+X za{Tg=<+oG&`W6W8c(Bd#^82nl)ms{?mbRQ)XL;%EiRq+M#d{+ zxlUZ}#h2L5!uwqPpMi7Ugc}t%tBx<7Rk|tAz&ddur_#f~K>tZgYwB-R$Nx*eRCiAQ zUbyC8dC%23(Yp(mB_6&~vR)5KF8JT&TmKn8+fDvfSodk3_mU5N&vv(bmDN5y|J%Il z{~2a}nZLRF`;`9-TfXi8bAHL+Iq`dzPkL#iymQ?{TX(Nd&;Ksp`k&!ht@@isf1ldF zwO#+8!T6Z_|09%e|Y0mv5B3ly`4MhT4O!Ra&!_73|s69rfI$ z*vYLwb5mu^gh@{)@1Cx*YEx{?`rn`9bhVw2TwJCseDyxJ)SURQF_~WBQ?HP6iXWEM z-*Q;)Y0bgB&h_QJGw-U5-u?`We|i31)Rq_iN;>urH~wb`F%8>Y7drh{@%L#+OR}SE zgO;4t^m=j93v}#ZBQ7#Fd-`vKy1DDG@s?$;E&9)p#(#P1uY*e_eCT&q-Tbho^=p>p zzRz3V%DVHs^D%gm-ng?+R{X}JF5wi96}vq}#q$bVOneW{S>7916U}#fmC5@wcU$f`qw}_~ zkNfG9iy!&P{%0`yyu-uS@x!!jhGj`C+r)$2njWyI-OBvthqBem+db%2J;wp;7Ab6h_AEYi_K<&5_1&xuV9@+{^Xw3IX+a;r<6@Ga2x+?~0$ z>fM^@wcB3Wh6`SvSM=CQ?D@fKoiV{et|A{iE%gE`wJKisi8e2_2)NnKcY4iZx1@w~ zsnZsnWXSVa#`;jiN4cY;qixRR*X!4}w!6vknj~Hoxusnr!>zt(R~x%E)I?J>jQMXNuzUR3$uk-fWML&@^OnP#bnPOo`-a?Xvd zhR+|JG@ih;V3D5CGGD>y+(2=Q8}>orL2E@yIh*cN^_4y-nOceecF zhM$XfOKLq>cWF)R!`J;gXLaA~FU!0qx8wKB6?ks<-E$I@2|Z!==GJvZS1}zHfO4~=lvOpv$urHmYyzN z#GvtF)udH@f`XQ-*5=P;t@+)*Wbdy_>(Bn%8EYEu7rF2F#S2MEYH#DFEUgg-Zzrc< z^8?LxJ9q`{GQ!_O4Uc;I?~MHN?61wSvtGySzuEldZQX`U72{h$Q=gX>oSPu<&|de7 zDx0)AC;PD#np2N||Fr(lYM|C%)A5ARY&S#^1o@2+eeKtb+e}Z4HzxK3i&OCkIWjBmPjY@(i zFsrz>9(w$A^3geop@paRD;Srx7nm;=VXeF{>2aHooY+mFR}Oaa>{?!H^>z2D#?`Fu zGhLFnh2i$b`w}ni9SBr(pSth)kDq#1OuL?i&srp;Ct4Y{=}=ruXW{l08$9i_mb3<@ zRviA+)!pj&{A}^*sWqmh+h^-r1>MMrFk+u@S0wBzPxGPY51zUf&Pg@=dj07u-D^*- zwB4I8b7vyYj8k`1nsc6dia*=d^)Ar0Y*Mc8>c@Asp0_hTH#yhjv9_4%!Iy%wCG!oB zJQ6;-Gj!wW44agnt5!u9ww%|@(ANv=k;l&)*TxV5yc1Jp0At-|wq!HJX1GZ~moN{dMQYr!x0l`rq%3 zNIx|Hl(qdL@%_=utBrTQIF0T0?kH?^MaEaJ$tFv+7ptPqTcYp%D_s}==HRcg{Sl@& z*KIxhcZR*+_1A2ZoNbqC#+3(6y?BK!HzJR3OA4D{tfFF!#wwNM7A@!_s4GD;#AH$ro_cR1_|4KzwU zt=-RQSah2nHNe^t{F zSqi?*F4EmG-tO^B{kkoy!`Cccuzr5wm+AYXLX(U9zODBPS~LYbEef9>C6z(LQyG?O z#!719E%me!75KWdCHdE8n4fm(4m}}jF-eg1V&>23Lz8&AQcK*msi=4|)x+(L5Fte+Wkk3M; z9~XmPE$6awvB*8#b|yJAICaK@8&a#14+*-sK0Q4*U25^dC);BexTd`{W&I{!u)lTJ zo&&R7K2HD7Aa%ud@uKglQHiIlw_H`9!Os07c%G?9{Ogbz+gIIt+vqrN-NrVZup42W z>x2srFeeHLs$FsM%Tk`do^w`Ca!T1H8I>%CYqgZF!$H+hTgwmoszbinl33XW4yrLdBij{R4Eh!p6$7|?zGZPub@pAaW%t; z6K}G`JmBNbjZb~~i`>88TVwpt|EcW!i`@6uUfw(N&X-i!u3O9H@2;(ucbitd^xbo= zn~dE#aXKseyLHWXFa#G)TBPO~D6IWB#H$(BhTOGl(_Oo_7pBc=&edF~^5o?w_rxuF zRtI`swB&UOO!&d1lC?xjqiL1Lif+&jzqI~KeC<-mO{so2qv`JB;H-?;)R{(eYumPMbFADnA>ZT7w)+h?JWYZ`RpgAGXX$AbyqVQ> z_2RXz4M%3K&bg3#!Ov`gb8FR{2Y02@6qs{W!f)5FUZgU2$;mZ7%Tyg~x;#DQtdpAcL zGJP#FJzk^zdyWd)tRan#{9V1I%ZBdUT*!spO^3 z(N4)lmEZ3bGHz=KR!Q+b;VLK^8a_!W+_duiQjS}ney@1{ZFflZ1>4Hr(ye>5UWGGv zZ2Ub}BiZ`e-O}90M+=nZN#|}BDo>PJWxelt&MVt*Q5O3pWZ#u$+&y^z?%coSYdv1u zmfLG@mJOCIe)26nz4^$3%R1p6;-_V}@2>r~k?Eo2&cN6k&POs2Ix!to(n<*x=jzxW zTb_Nc?5_RVE%)7|-0m(D4|Xcbo7h)=aMF{La|4gv-`3s4D?G=IS9!NR&vCUmx~m!= zZoAbpcW(D(f!u?u^s1gcUNZIOD!v2T?=JFo-zdDgtHI{&(Wvt!;>AyzcLo}6R9@9~ zmgzr3+U%vtucqbc^iKVuT)^3{&$^}0@rXNjof+TJQ}2!mAMbj1cDk6b(wCDu$1>*T zPBf2k5H;szU=*#N;^w3=&os!zFFWGzvvVJ7c%nDl$uUkn|6Z|Uaqhd~{u7>^0;~%k zbgW$1eOuh(gGjmF-Bl~kUv`^yW!FL-t7(S|Qyv*wo%>>)^P2nJZozjijMDY9Y%Ve? zXK7?S$YZ-*;xg-z)hemKZtnY|RbFYDNxa+h<;7a%Nfw23)FMM~t+=_T`LKA|3~^5H zx=TX0w+3b{y)<8V_q4cI-_PFLA2$8k@5bv@$7Amt54(G%z9r}3*FFCk9zM@|&)pt4 zmo*~)E?v%ZpTp*`Yp1x3tegg4jgW|rnuZC-ueO8g zfu5HqzMpn{ePERPlIYpfSXC#)u4>CwdMEhd@T_GvioY)H-uU$Bq%YHwPo_Rk+SPM{ z?T(Y0uY)hcMZ3%#108)Ef%Tn1o6h?3)jp5By>?dO?5lktlE!oFY^MaV?!BJuBe=`t z6_dH*<1**U?4FE8A6IVCc3Vjmp#$AV>xmwl)(c*9UG$vm!HGAgC&r7rns4K4Hw^XX+%9eM>&VgI zNsF$R?YX_=t<)*8);%63S2vorUgMqReSVMdz1&0A)lta3Q_|nV_#1y3U_r3mP7rypwUevTdJDP57X`JvS zRh#YV$F07*d|vw)UEOY7!o7QKlrG2DD>6G954R+(E>8?S<|1Dfr0AiPF{MM)QA#+w z5@mr6c?WV)R`nw{707A^#GX}O_2xp!+GQe(c9<*Kh((oH&r~g&(4@31aF4#pFYV=J ze;{|~macLQ(=A=RKiBr#cK+0pfA3m;p;9Jc6yI13;7S9ap`@7})tvj~U)xVd# zzwKYU_VCT3`ts1KV9Ti)2)-X&QEB*6<55l1)xU!SBIee#_gtUrw_E4Gb`gAZQk?Tf z-=>ZwId6StEDJ50-u-IT+rCFz2b))qJ|i(Iw=GsHNALv)7bP{Cnf_ zTe^Mo{Wrn81?`SKeDnRcsG?U_|GOjp8+TOO{yS>DQTR=s-1+*AK_UxAMMuMdaC+$8 zwrf&;u!`B0hRkFG4!;e#PbSO_b-B|yf6n~RYn&fKTYc*tug|v=`4@QeufX14ccpKx zF1`pqj^%pPZgbetEZ3tpYV#iraRHs6_Hos9C);;t)x6yL%eU|OwN7x`lSZ-nJKeMX zY6Rtlot}Glbw%v1g{#eeS57LJR}w04r%*JIJ2THk^xvZOrXfefmhFBu*EV;{&XsDn z^?GAs#pZ6@Ex4a0)UL(ldB0fjkyZ1ozFb`VtoL`!s-v53dOeuPzvKFpZO!XsG=){v*Ot&ZH|3Yt0<|sew zo4WO+*~N=#Dc@!qv4*;+2&shnELv8-Gt2(5^5XsbcZJ{j_`CG(hCQEURbEX_y)LD? z`R2qB&cMQBJO75Jy=(c;U^n^4(%)HcT#XUxOMaYq@&5h0so(b0-HrLZ(Ej|Af0}i- zUT?0Q^l=f-=`OAvzTItl&1p%iT9mRnR90@;skHuV{L0J?p>{@A*1vx*tz9p_-M^== z@87?d@!7}UUOo7F&9@!(hn~*b@j0i9d-a)~3+%`C=}Zd0U!wl=%lxDIw|$#tew=vm z{{6e!Z!7-ps!1s+|Nh37p*ovkGaXAi3$=;#s)4Gk3(v?cuRC6lCFVrnzG_WWnqTeoYYpmIo(P5bu(iPF3KY#WyL{|r|ze*Uv({vrLF zZvPon?SGZ+y{^4Bpsaen{h5@1f_10L?doTo{G;@D>a}%iZ$0L_nqOA)eTR>EOQ>Uz zl2V8uqoAv@k*cGhNRU#9i)*OMg30e{{xcX({^9yt^UlwI$?6}vzlFwKUY$GLdrx#u z#`Unfla90>Ouap?voT?Y@P{}7(^DsSw79w+?0jk%{6%)&^Yfo2?OWnE%{@Q=nNdB* z{?yWyfw6GW9Z!!>UmvTcNW$OySB#b@N5?=-X*6srMf>pu~gg=7vnas zV9uTSQHm40{zmw()!MpzZCLkm@9RH{=1;ULVab)s{c$_G|D@rD?Rxc(njeSy{CE|W zqNXbBC-f~m;2f6A ze;=*be?M-PVUkkJszrIv_SzYJ_1JQ7A?w!W+@~M^tX_39*Y(#CN73N_3`eAXt{@9Y$tm##U(spmkj&6CYz3BH|smHku7wtCB$dodZnXyFL=V)lC3e)qWCxho- zl)j(uv;Ss5wV(d`*I~P2SBLwFWa@3?vzgIxCgZY~^ST|MUHX{3%_q1BOu6bQ5`4(f z<5iPg=iZVL>LZ@1NGS-hmB@<+#{PWg;Gu}vCo zT@BATKlv!urtElktmTU*x2A6I!d?B$ff0p`4>(IxU7uuJShQMSYr(Xl%qh=yoc;aw z<@DcL{Fz7p{-&XErdEdR6^_v!an-hQkirk{)rLxJjm;PRR@n`MCwbOS@mZ`}T^km&oyU8@feQG$9 z)}D#szgG%oszu+fpEUokb=>Qz*VeWEdR??VdgAP~`BN)OpSN^MO}OlIqf4kboYQF4 zk{K?pAN4{l)7bav#{Qjm_S>AeyJ@GkU18g}-Dgr+^%AzK%il6zn<^RYF7ulO4BL!52P z(L>CFNp@#eOjdEbueo(*Ud2t9+{;YvGn1Svj2z=Ks$Dj1*j_7MI+6PaTmQoi#rMjt zCe1k_{x*PRX5Xzf+bnj-Ps#nxvS^~f;$^E^mgP=;k8r2;qpSCCzPX=y^zGGK+E&qS zv56(KzP?K~52{T+Q+xA|hoa<6Nu=e#O*H0s2v#krhWr9tnz!|T&G z*De>|?)PJB`L}BGTZPr7YAVrLOD~K6JF|XY?|+6@UI-tpsLfW7$dc7A+_ZgR>T%1Q z72K_bJs#Rq;xhODUUei_ElL+rY@k%#Tk^fOBkq|jU2Qz^lIzExd^Ux-C;X%)Ei$V( zwXS}BOua<;deiOyB)_fl)h=7;b^4#d`?&1;E{s zw{q?N59hb~_gG(_b^AX9&+m{^u`7Z${bxW3z!i<^Ilpx@3`WBMlwpQrIzSXUtLGn+ yeSJ3fKSNvXs?)pj_ng}2yUlyrZH0u}y^Bn`I$J{Gmxj+bU3*z<%FG-8Zvp^WkLK6_ diff --git a/ChibiOS_2.0.8/docs/html/eclipse008.jpg b/ChibiOS_2.0.8/docs/html/eclipse008.jpg deleted file mode 100644 index f602fa81e44584ccc3409cac89047d7bb5e4f9ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19051 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

Q=W6yx)*%D@mA~56wyBq z^;f);tCn4Ac_=>cj?Fh~uMJCC>n*%rS+~zSp6ORG{Yp8%ZQrFenxlpek1(D3?9i#n mRY}g%ehNlq882A!(ro8M;jE5Xo^@GQmufBa3R<-P|4jfN{SQX~ diff --git a/ChibiOS_2.0.8/docs/html/eclipse010.jpg b/ChibiOS_2.0.8/docs/html/eclipse010.jpg deleted file mode 100644 index d92381ba2c6fdc69f8d78a058f62b733210f81ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29039 zcmex=Bm<7<_#hv=|r|I2gd-|33zC=c3fa zlGGH1^30M9g^-L?1$R&1fd97{oEcb|Sy)(@Sy@lpt#g$Z)$59pwN;ji#J_THZn1D3=RvQJayVd z6{nEIvWb&68=Dt5HmjNzmU1L5QcG@HxaI#51_?$m09ggYj7-cd|Bo=}2r@D-F)=c+ zuz{QemShxS5;SBM7EuhG$l@53*!Y39(8y`w!HfTIG4L=mGB61;3o_U<{9>BAx?;!S zEm3N*>-2LJof4jS6njl;I}p;b$t5&qqG*vz=vwbI#m#rV#~aPudhY_)W9~a=$~GQP zo%zw_@;~bsZq;|YEcD{aL)L0~v1*1k9G=z_e43{^_HFwTXCAvREx9}WHot3DT<98_ z(;BW~^kDULsU63js+DZMw56KmN%iKwLp#^p{m-zwe7VWJ;D6j(Z|0i5HL3n5Rebf+ z)9F%eTcdum?~HhQ??%#>GaTD4?^?a-+*|Qn9#)R~sj`9L2V7l4qn%Diq`yCI`|akY z^Ik2p{~3Pda|$;ujaG6Jy)v^)Yw@-= ztMyHlY7ZH|kx~+Cmn=DY?4(P}M2^4^A5UW;*YKRpNmJwc+jojjIWzs?jgL7y-k9{O zbX?T$H~OL3p}66JQcq)SlE+%jMSW>AyEN6LW!F!rK6A!iNLYMfwcy)n=ZyT`%FpB0 z={}aQZpE_RnVpKiFP#kt4HXrp zR^K_jP&C+Nj_!%gX4b9`6z(l^+jC5^>_gMrYa#770)=iZ=GC-n=*WHMrO~vEV^x<& z*V}2nmlm?~6v;ikWWvUjGp~4~+tcIo3(JIr52>6GSzwyLd&KMtLodg+wJF_Oc!Me? zPoC#h@I_#H@wS)?v89r!D?Yyyim$mUvc>GQo1cY;lFJIERZT436S`Jer_L5x;aL$r z@x-z~8t7`oB697%+?(Rqg7wPN?q%rTEHpmv z)gv^?#O=M&5~GXH7tG6C>vn9ZlZ!h`Xb7)xhmi8NNOQ02`#xo#>|OXerTk5~`I1<5 z9*v%@Wz$!jb-1G%sy-pWaoOF%;+U(_AtFkFLT!h3L{Hk|Y;{x4Oyr2*tlbAE7H;#H zSXL`NU2thn$BzXkl?3g|ZgtG)e4@I-F;Fme(`jDq;w|^p=c&*Be&pP?MIWxK?U`}^ z?YVR9$vd}Q4qkdlrR=RPcT6UqyQ$B-xTn60LVgy7oE5B4-WIvh>&{#Alg~S!{rzaX zc6sJLe;a@E_nmWdty5=}tgSXz+cV>Cp7{>LH|2(9XDt#v!u2j)@Hk~{B zb(!fVdXg!tHE-olJ}-Rs_oMV^znf`uwRQe^6tH9%sTjBG70YHWGUz+|%**1_qO=CB z{EmhCPFadR*Si)Kt})Z|{;9h!;z8WovX`3_VwBCbw0B=Ccq>&9(6C8eFxW68W~yNI zm$%dEE^W8={Z#p=a(|7_>r6DekUTzj*-x8~Huv|bm2P=EEpxbQ%0AOAx}MLGJ9M7W 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

)0Vo}fuPiKFr`-W3|;=8xA>?=6i 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 diff --git a/ChibiOS_2.0.8/docs/html/eclipse011.jpg b/ChibiOS_2.0.8/docs/html/eclipse011.jpg deleted file mode 100644 index 1da3052794bdd7dfd1a540c7bc4b514316f9153c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34286 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 diff --git a/ChibiOS_2.0.8/docs/html/eclipse013.jpg b/ChibiOS_2.0.8/docs/html/eclipse013.jpg deleted file mode 100644 index bc8441eef78427c65ae3917df23cb87b7edf5eea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60847 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

e$ab?;Zp*-VU^)l6h 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 diff --git a/ChibiOS_2.0.8/docs/html/evtimer_8c.html b/ChibiOS_2.0.8/docs/html/evtimer_8c.html deleted file mode 100644 index e462e62..0000000 --- a/ChibiOS_2.0.8/docs/html/evtimer_8c.html +++ /dev/null @@ -1,65 +0,0 @@ - - -ChibiOS/RT: evtimer.c File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- -
-
- -
-

evtimer.c File Reference

-
-
- -

Events Generator Timer code. -More...

-#include "ch.h"
-#include "evtimer.h"
- -

Go to the source code of this file.

- - - - - - -

-Functions

void evtStart (EvTimer *etp)
 Starts the timer.
void evtStop (EvTimer *etp)
 Stops the timer.
-

Detailed Description

-

Events Generator Timer code.

- -

Definition in file evtimer.c.

-
-
-Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/evtimer_8c_source.html b/ChibiOS_2.0.8/docs/html/evtimer_8c_source.html deleted file mode 100644 index dcdea34..0000000 --- a/ChibiOS_2.0.8/docs/html/evtimer_8c_source.html +++ /dev/null @@ -1,120 +0,0 @@ - - -ChibiOS/RT: evtimer.c Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/evtimer_8h.html b/ChibiOS_2.0.8/docs/html/evtimer_8h.html deleted file mode 100644 index 013b78e..0000000 --- a/ChibiOS_2.0.8/docs/html/evtimer_8h.html +++ /dev/null @@ -1,73 +0,0 @@ - - -ChibiOS/RT: evtimer.h File Reference - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

evtimer.h File Reference

-
-
- -

Events Generator Timer structures and macros. -More...

- -

Go to the source code of this file.

- - - - - - - - - - - - -

-Data Structures

struct  EvTimer
 Event timer structure. More...

-Defines

#define evtInit(etp, time)
 Initializes an EvTimer structure.

-Functions

void evtStart (EvTimer *etp)
 Starts the timer.
void evtStop (EvTimer *etp)
 Stops the timer.
-

Detailed Description

-

Events Generator Timer structures and macros.

- -

Definition in file evtimer.h.

-
-
-Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/evtimer_8h_source.html b/ChibiOS_2.0.8/docs/html/evtimer_8h_source.html deleted file mode 100644 index f17f993..0000000 --- a/ChibiOS_2.0.8/docs/html/evtimer_8h_source.html +++ /dev/null @@ -1,113 +0,0 @@ - - -ChibiOS/RT: evtimer.h Source File - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/files.html b/ChibiOS_2.0.8/docs/html/files.html deleted file mode 100644 index e466ca7..0000000 --- a/ChibiOS_2.0.8/docs/html/files.html +++ /dev/null @@ -1,263 +0,0 @@ - - -ChibiOS/RT: File Index - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

File List

-
-
-Here is a list of all documented files with brief descriptions: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
adc.c [code]ADC Driver code
adc.h [code]ADC Driver macros and structures
templates/adc_lld.c [code]ADC Driver subsystem low level driver source template
platforms/STM32/adc_lld.c [code]STM32 ADC subsystem low level driver source
templates/adc_lld.h [code]ADC Driver subsystem low level driver header template
platforms/STM32/adc_lld.h [code]STM32 ADC subsystem low level driver header
at91sam7.h [code]
at91sam7_mii.c [code]AT91SAM7 low level MII driver code
at91sam7_mii.h [code]AT91SAM7 low level MII driver header
can.c [code]CAN Driver code
can.h [code]CAN Driver macros and structures
templates/can_lld.c [code]CAN Driver subsystem low level driver source template
platforms/STM32/can_lld.c [code]STM32 CAN subsystem low level driver source
templates/can_lld.h [code]CAN Driver subsystem low level driver header template
platforms/STM32/can_lld.h [code]STM32 CAN subsystem low level driver header
ch.cpp [code]C++ wrapper code
ch.h [code]ChibiOS/RT main include file
ch.hpp [code]C++ wrapper classes and definitions
chcond.c [code]Condition Variables code
chcond.h [code]Condition Variables macros and structures
chconf.h [code]Configuration file template
kernel/templates/chcore.c [code]Port related template code
ports/GCC/AVR/chcore.c [code]AVR architecture port code
ports/GCC/ARM7/chcore.c [code]ARM7 architecture port code
ports/GCC/ARMCMx/chcore.c [code]ARM Cortex-Mx port code
ports/GCC/PPC/chcore.c [code]PowerPC architecture port code
ports/GCC/MSP430/chcore.c [code]MSP430 architecture port code
ports/RC/STM8/chcore.c [code]STM8 architecture port code
kernel/templates/chcore.h [code]Port related template macros and structures
ports/GCC/AVR/chcore.h [code]AVR architecture port macros and structures
ports/GCC/ARM7/chcore.h [code]ARM7 architecture port macros and structures
ports/GCC/ARMCMx/chcore.h [code]ARM Cortex-Mx port macros and structures
ports/GCC/PPC/chcore.h [code]PowerPC architecture port macros and structures
ports/GCC/MSP430/chcore.h [code]MSP430 architecture port macros and structures
ports/RC/STM8/chcore.h [code]STM8 architecture port macros and structures
chcore_v6m.c [code]ARMv6-M architecture port code
chcore_v6m.h [code]ARMv6-M architecture port macros and structures
chcore_v7m.c [code]ARMv7-M architecture port code
chcore_v7m.h [code]ARMv7-M architecture port macros and structures
chcoreasm.s [code]ARM7 architecture port low level code
chdebug.c [code]ChibiOS/RT Debug code
chdebug.h [code]Debug macros and structures
chevents.c [code]Events code
chevents.h [code]Events macros and structures
chheap.c [code]Heaps code
chheap.h [code]Heaps macros and structures
chinline.h [code]Kernel inlined functions
chioch.h [code]I/O channels
chlists.c [code]Thread queues/lists code
chlists.h [code]Thread queues/lists macros and structures
chmboxes.c [code]Mailboxes code
chmboxes.h [code]Mailboxes macros and structures
chmemcore.c [code]Core memory manager code
chmemcore.h [code]Core memory manager macros and structures
chmempools.c [code]Memory Pools code
chmempools.h [code]Memory Pools macros and structures
chmsg.c [code]Messages code
chmsg.h [code]Messages macros and structures
chmtx.c [code]Mutexes code
chmtx.h [code]Mutexes macros and structures
chqueues.c [code]I/O Queues code
chqueues.h [code]Queues macros and structures
chregistry.c [code]Threads registry code
chregistry.h [code]Threads registry macros and structures
chschd.c [code]Scheduler code
chschd.h [code]Scheduler macros and structures
chsem.c [code]Semaphores code
chsem.h [code]Semaphores macros and structures
chstreams.h [code]Data streams
chsys.c [code]System related code
chsys.h [code]System related macros and structures
chthreads.c [code]Threads code
chthreads.h [code]Threads macros and structures
kernel/templates/chtypes.h [code]System types template
ports/GCC/AVR/chtypes.h [code]AVR architecture port system types
ports/GCC/ARM7/chtypes.h [code]ARM7 architecture port system types
ports/GCC/ARMCMx/chtypes.h [code]ARM Cortex-Mx port system types
ports/GCC/PPC/chtypes.h [code]PowerPC architecture port system types
ports/GCC/MSP430/chtypes.h [code]MSP430 architecture port system types
ports/RC/STM8/chtypes.h [code]STM8 port system types
chvt.c [code]Time and Virtual Timers related code
chvt.h [code]Time macros and structures
STM32F10x/cmparams.h [code]ARM Cortex-M3 STM32F10x Specific Parameters
LPC11xx/cmparams.h [code]ARM Cortex-M0 LPC11xx Specific Parameters
LPC13xx/cmparams.h [code]ARM Cortex-M3 LPC13xx Specific Parameters
ARM7/crt0.s [code]Generic ARM7 startup file for ChibiOS/RT
ARMCMx/crt0.s [code]Generic ARM Cortex-Mx startup file for ChibiOS/RT
PPC/crt0.s [code]Generic PowerPC startup file for ChibiOS/RT
evtimer.c [code]Events Generator Timer code
evtimer.h [code]Events Generator Timer structures and macros
hal.c [code]HAL subsystem code
hal.h [code]HAL subsystem header
templates/hal_lld.c [code]HAL Driver subsystem low level driver source template
platforms/AT91SAM7/hal_lld.c [code]AT91SAM7 HAL subsystem low level driver source
platforms/AVR/hal_lld.c [code]AVR HAL subsystem low level driver code
platforms/LPC11xx/hal_lld.c [code]LPC11xx HAL subsystem low level driver source
platforms/LPC13xx/hal_lld.c [code]LPC13xx HAL subsystem low level driver source
platforms/LPC214x/hal_lld.c [code]LPC214x HAL subsystem low level driver source
platforms/MSP430/hal_lld.c [code]MSP430 HAL subsystem low level driver source
platforms/SPC56x/hal_lld.c [code]SPC563 HAL subsystem low level driver source
platforms/STM32/hal_lld.c [code]STM32 HAL subsystem low level driver source
platforms/STM8/hal_lld.c [code]STM8 HAL subsystem low level driver source
templates/hal_lld.h [code]HAL subsystem low level driver header template
platforms/AT91SAM7/hal_lld.h [code]AT91SAM7 HAL subsystem low level driver header
platforms/AVR/hal_lld.h [code]AVR HAL subsystem low level driver header
platforms/LPC11xx/hal_lld.h [code]HAL subsystem low level driver header template
platforms/LPC13xx/hal_lld.h [code]HAL subsystem low level driver header template
platforms/LPC214x/hal_lld.h [code]LPC214x HAL subsystem low level driver header
platforms/MSP430/hal_lld.h [code]MSP430 HAL subsystem low level driver header
platforms/SPC56x/hal_lld.h [code]SPC563 HAL subsystem low level driver header
platforms/STM32/hal_lld.h [code]STM32 HAL subsystem low level driver header
platforms/STM8/hal_lld.h [code]STM8 HAL subsystem low level driver source
hal_lld_f103.h [code]STM32F103 HAL subsystem low level driver header
hal_lld_f105_f107.h [code]STM32F10x Connectivity Line HAL subsystem low level driver header
halconf.h [code]HAL configuration header
lpc214x.h [code]LPC214x register definitions
mac.c [code]MAC Driver code
mac.h [code]MAC Driver macros and structures
templates/mac_lld.c [code]MAC Driver subsystem low level driver source template
platforms/AT91SAM7/mac_lld.c [code]AT91SAM7 low level MAC driver code
templates/mac_lld.h [code]MAC Driver subsystem low level driver header template
platforms/AT91SAM7/mac_lld.h [code]AT91SAM7 low level MAC driver header
memstreams.c [code]Memory streams code
memstreams.h [code]Memory streams structures and macros
mii.h [code]
mmc_spi.c [code]MMC over SPI driver code
mmc_spi.h [code]MMC over SPI driver header
mpc563m.h [code]
nvic.c [code]Cortex-Mx NVIC support code
nvic.h [code]Cortex-Mx NVIC support macros and structures
pal.c [code]I/O Ports Abstraction Layer code
pal.h [code]I/O Ports Abstraction Layer macros, types and structures
templates/pal_lld.c [code]PAL subsystem low level driver template
platforms/AT91SAM7/pal_lld.c [code]AT91SAM7 PIO low level driver code
platforms/LPC11xx/pal_lld.c [code]LPC11xx GPIO low level driver code
platforms/LPC13xx/pal_lld.c [code]LPC13xx GPIO low level driver code
platforms/LPC214x/pal_lld.c [code]LPC214x FIO low level driver code
platforms/MSP430/pal_lld.c [code]MSP430 Digital I/O low level driver code
platforms/STM32/pal_lld.c [code]STM32 GPIO low level driver code
platforms/STM8/pal_lld.c [code]STM8 GPIO low level driver code
templates/pal_lld.h [code]PAL subsystem low level driver header template
platforms/AT91SAM7/pal_lld.h [code]AT91SAM7 PIO low level driver header
platforms/LPC11xx/pal_lld.h [code]LPC11xx GPIO low level driver header
platforms/LPC13xx/pal_lld.h [code]LPC13xx GPIO low level driver header
platforms/LPC214x/pal_lld.h [code]LPC214x FIO low level driver header
platforms/MSP430/pal_lld.h [code]MSP430 Digital I/O low level driver header
platforms/STM32/pal_lld.h [code]STM32 GPIO low level driver header
platforms/STM8/pal_lld.h [code]STM8 GPIO low level driver header
pwm.c [code]PWM Driver code
pwm.h [code]PWM Driver macros and structures
templates/pwm_lld.c [code]PWM Driver subsystem low level driver source template
platforms/STM32/pwm_lld.c [code]STM32 PWM subsystem low level driver header
templates/pwm_lld.h [code]PWM Driver subsystem low level driver header template
platforms/STM32/pwm_lld.h [code]STM32 PWM subsystem low level driver header
serial.c [code]Serial Driver code
serial.h [code]Serial Driver macros and structures
templates/serial_lld.c [code]Serial Driver subsystem low level driver source template
platforms/AT91SAM7/serial_lld.c [code]AT91SAM7 low level serial driver code
platforms/AVR/serial_lld.c [code]AVR low level serial driver code
platforms/LPC11xx/serial_lld.c [code]LPC11xx low level serial driver code
platforms/LPC13xx/serial_lld.c [code]LPC13xx low level serial driver code
platforms/LPC214x/serial_lld.c [code]LPC214x low level serial driver code
platforms/MSP430/serial_lld.c [code]MSP430 low level serial driver code
platforms/SPC56x/serial_lld.c [code]SPC563 low level serial driver code
platforms/STM32/serial_lld.c [code]STM32 low level serial driver code
platforms/STM8/serial_lld.c [code]STM8 low level serial driver code
templates/serial_lld.h [code]Serial Driver subsystem low level driver header template
platforms/AT91SAM7/serial_lld.h [code]AT91SAM7 low level serial driver header
platforms/AVR/serial_lld.h [code]AVR low level serial driver header
platforms/LPC11xx/serial_lld.h [code]LPC11xx low level serial driver header
platforms/LPC13xx/serial_lld.h [code]LPC13xx low level serial driver header
platforms/LPC214x/serial_lld.h [code]LPC214x low level serial driver header
platforms/MSP430/serial_lld.h [code]MSP430 low level serial driver header
platforms/SPC56x/serial_lld.h [code]SPC563 low level serial driver header
platforms/STM32/serial_lld.h [code]STM32 low level serial driver header
platforms/STM8/serial_lld.h [code]STM8 low level serial driver header
shell.c [code]Simple CLI shell code
shell.h [code]Simple CLI shell header
spi.c [code]SPI Driver code
spi.h [code]SPI Driver macros and structures
templates/spi_lld.c [code]SPI Driver subsystem low level driver source template
platforms/LPC214x/spi_lld.c [code]LPC214x low level SPI driver code
platforms/STM32/spi_lld.c [code]STM32 SPI subsystem low level driver source
templates/spi_lld.h [code]SPI Driver subsystem low level driver header template
platforms/LPC214x/spi_lld.h [code]LPC214x low level SPI driver header
platforms/STM32/spi_lld.h [code]STM32 SPI subsystem low level driver header
stm32_dma.c [code]STM32 DMA helper driver code
stm32_dma.h [code]STM32 DMA helper driver header
stm8.h [code]
syscalls.c [code]
test.c [code]Tests support code
test.h [code]Tests support header
testbmk.c [code]Kernel Benchmarks source file
testbmk.h [code]Kernel Benchmarks header file
testdyn.c [code]Dynamic thread APIs test source file
testdyn.h [code]Dynamic thread APIs test header file
testevt.c [code]Events test source file
testevt.h [code]Events test header file
testheap.c [code]Heap test source file
testheap.h [code]Heap header file
testmbox.c [code]Mailboxes test source file
testmbox.h [code]Mailboxes header file
testmsg.c [code]Messages test source file
testmsg.h [code]Messages header file
testmtx.c [code]Mutexes and CondVars test source file
testmtx.h [code]Mutexes and CondVars test header file
testpools.c [code]Memory Pools test source file
testpools.h [code]Memory Pools test header file
testqueues.c [code]I/O Queues test source file
testqueues.h [code]I/O Queues test header file
testsem.c [code]Semaphores test source file
testsem.h [code]Semaphores test header file
testthd.c [code]Threads and Scheduler test source file
testthd.h [code]Threads and Scheduler test header file
typedefs.h [code]Dummy typedefs file
vic.c [code]LPC214x VIC peripheral support code
vic.h [code]LPC214x VIC peripheral support header
-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/ftv2blank.png b/ChibiOS_2.0.8/docs/html/ftv2blank.png deleted file mode 100644 index 493c3c0b615ade5b22027bde773faf2c0e076d66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=U+uU|?XJc1_Tofq{XkB*-tAfst{_-*q6V z64!{5;QX|b^2DN4hV;xdqk_D21tUEZJ)^~O?tBak45}a%&iT2ysd*&~p*g9EDGKhM zZVJJ@(yAR&O9+iq9rIu=x8RF*@GoZmSi*?32e${ yDHQQd^b2MAlpv$-svy)?W@X4anIt1pNvHM<2`r2RZdViYnJxJ!F$W?+fT*b ziB%~4oF3=E7VL4Lsu4$p3+fwY#mMwA5Sr6z#mEsk^NV_;yY@pN$vskqhJ>&Vw+AmAF$@l{SY_}Vdv>%9`!*)GW~*m&YoK`nosTiy`+1cn%g!X{uhTOer>K@A@y2( zsauGfpVp&uQ*C!`NSWL^o4dHMx%B#{6BP>9zCEzn^%QXo{S^<-W#+fq{X+ M)78&qol`;+02~`k=uu3)5RqGz-?&Yh2e zfk6$V!Z|-TH#M(>Av7m7F-5`M(@h~bH?gQBII%3XNFgk>NWngp=g9H9N%q%C2zopr0EW7H!~g&Q diff --git a/ChibiOS_2.0.8/docs/html/ftv2mlastnode.png b/ChibiOS_2.0.8/docs/html/ftv2mlastnode.png deleted file mode 100644 index 09ceb6adb01054ce799ad20c0e818ab9272f2df2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=U+sW?*1EeE3Ku0|NtRfKQ0)|Ns9R8X6cF z7;NHp>o71dFqQ=Q1v5B2yO9P`Ug8>25}cn_Ql40p%8;I!W>k=uu3)5RqGz-?&Yh2e zfkD~R#WAGfR&s&@HwTA;09QhbV9&yZ3TzWjuGktNaEhrjk&z)+oN3pAJDDdK7#J8l MUHx3vIVCg!0ORy6RsaA1 diff --git a/ChibiOS_2.0.8/docs/html/ftv2mnode.png b/ChibiOS_2.0.8/docs/html/ftv2mnode.png deleted file mode 100644 index 3254c05112199fbc80aad313611c58a5b388792d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=U+rW?*3SX*Rscz`&pq;1l9{;J^U}yr7|> zA$XtMOa=x9#*!evUk=uu3)5RqGz-?&Yh2e zfk6$V!Z|-TH#M(>Av7m7F-5`M(@h~bH?gQBII%3XNFgk>NWngp=g9H9N%q$&YJ%<<=^nw^3{c^Q>2y(HftDnm{r-UW|J~lV1 diff --git a/ChibiOS_2.0.8/docs/html/ftv2plastnode.png b/ChibiOS_2.0.8/docs/html/ftv2plastnode.png deleted file mode 100644 index 0b07e00913d8069ebbb51bd7fd6d70d8bba88f75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=U+sW?*1EeE3Ku0|NtRfKQ0)|Ns9R8X6cF z7;NHp>o71dFqQ=Q1v5B2yO9P`Ug8>25}cn_Ql40p%8;I!W>k=uu3)5RqGz-?&Yh2e zfkDI5#WAGfR&s&@HwT9SN2B0`Mka|wmgEeL2?mdKI;Vst0C@~7wg3PC diff --git a/ChibiOS_2.0.8/docs/html/ftv2pnode.png b/ChibiOS_2.0.8/docs/html/ftv2pnode.png deleted file mode 100644 index 2001b797ba2b98a4127f1d3efca64aef08bf6d51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=U+rW?*3SX*Rscz`&pq;1l9{;J^U}yr7|> zA$XtMOa=x9#*!evUaSW-rm7K6Z?*W?=Tb`N)gTe~DWM4fk=uu3)5RqGz-?&Yh2e zfk6$V!Z|-TH#M(>Av7m7F-5`M(@h~bH?gQBII%3XNFgk>NWngp=g9HB2Yz&Gb49lL{ys!ef)zj6_Wt~$(69DWxH7Ec8 diff --git a/ChibiOS_2.0.8/docs/html/functions.html b/ChibiOS_2.0.8/docs/html/functions.html deleted file mode 100644 index 4af375f..0000000 --- a/ChibiOS_2.0.8/docs/html/functions.html +++ /dev/null @@ -1,133 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- a -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x62.html b/ChibiOS_2.0.8/docs/html/functions_0x62.html deleted file mode 100644 index d37bd7c..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x62.html +++ /dev/null @@ -1,92 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- b -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x63.html b/ChibiOS_2.0.8/docs/html/functions_0x63.html deleted file mode 100644 index 794a741..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x63.html +++ /dev/null @@ -1,204 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- c -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x64.html b/ChibiOS_2.0.8/docs/html/functions_0x64.html deleted file mode 100644 index 2e5c453..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x64.html +++ /dev/null @@ -1,88 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- d -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x65.html b/ChibiOS_2.0.8/docs/html/functions_0x65.html deleted file mode 100644 index 599f23f..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x65.html +++ /dev/null @@ -1,109 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- e -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x67.html b/ChibiOS_2.0.8/docs/html/functions_0x67.html deleted file mode 100644 index 63a2c2d..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x67.html +++ /dev/null @@ -1,85 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- g -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x68.html b/ChibiOS_2.0.8/docs/html/functions_0x68.html deleted file mode 100644 index d5dc3af..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x68.html +++ /dev/null @@ -1,88 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- h -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x69.html b/ChibiOS_2.0.8/docs/html/functions_0x69.html deleted file mode 100644 index 42e989b..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x69.html +++ /dev/null @@ -1,85 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- i -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x6c.html b/ChibiOS_2.0.8/docs/html/functions_0x6c.html deleted file mode 100644 index f110c4c..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x6c.html +++ /dev/null @@ -1,80 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- l -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x6d.html b/ChibiOS_2.0.8/docs/html/functions_0x6d.html deleted file mode 100644 index 5d2b1ca..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x6d.html +++ /dev/null @@ -1,145 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- m -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x6e.html b/ChibiOS_2.0.8/docs/html/functions_0x6e.html deleted file mode 100644 index 10c35a9..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x6e.html +++ /dev/null @@ -1,82 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- n -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x6f.html b/ChibiOS_2.0.8/docs/html/functions_0x6f.html deleted file mode 100644 index 905dab0..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x6f.html +++ /dev/null @@ -1,85 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- o -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x70.html b/ChibiOS_2.0.8/docs/html/functions_0x70.html deleted file mode 100644 index 34950eb..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x70.html +++ /dev/null @@ -1,241 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- p -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x71.html b/ChibiOS_2.0.8/docs/html/functions_0x71.html deleted file mode 100644 index 580bfaf..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x71.html +++ /dev/null @@ -1,94 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- q -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x72.html b/ChibiOS_2.0.8/docs/html/functions_0x72.html deleted file mode 100644 index b62325c..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x72.html +++ /dev/null @@ -1,122 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- r -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x73.html b/ChibiOS_2.0.8/docs/html/functions_0x73.html deleted file mode 100644 index cd9df78..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x73.html +++ /dev/null @@ -1,212 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- s -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x74.html b/ChibiOS_2.0.8/docs/html/functions_0x74.html deleted file mode 100644 index c974c2b..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x74.html +++ /dev/null @@ -1,109 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- t -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x75.html b/ChibiOS_2.0.8/docs/html/functions_0x75.html deleted file mode 100644 index 6229777..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x75.html +++ /dev/null @@ -1,89 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- u -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x76.html b/ChibiOS_2.0.8/docs/html/functions_0x76.html deleted file mode 100644 index 85df330..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x76.html +++ /dev/null @@ -1,104 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- v -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_0x77.html b/ChibiOS_2.0.8/docs/html/functions_0x77.html deleted file mode 100644 index 09ba6ae..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_0x77.html +++ /dev/null @@ -1,109 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: - -

- w -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_func.html b/ChibiOS_2.0.8/docs/html/functions_func.html deleted file mode 100644 index c9b6c6f..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_func.html +++ /dev/null @@ -1,262 +0,0 @@ - - -ChibiOS/RT: Data Fields - Functions - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- g -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- u -

- - -

- w -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars.html b/ChibiOS_2.0.8/docs/html/functions_vars.html deleted file mode 100644 index 46d25f2..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars.html +++ /dev/null @@ -1,131 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- a -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x62.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x62.html deleted file mode 100644 index 816092e..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x62.html +++ /dev/null @@ -1,83 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- b -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x63.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x63.html deleted file mode 100644 index fe0f2a5..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x63.html +++ /dev/null @@ -1,196 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- c -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x64.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x64.html deleted file mode 100644 index 557d59b..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x64.html +++ /dev/null @@ -1,83 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - - -
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x65.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x65.html deleted file mode 100644 index c1fbe34..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x65.html +++ /dev/null @@ -1,98 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- e -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x67.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x67.html deleted file mode 100644 index 04b5ada..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x67.html +++ /dev/null @@ -1,77 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- g -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x68.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x68.html deleted file mode 100644 index 24497b6..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x68.html +++ /dev/null @@ -1,86 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- h -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x6d.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x6d.html deleted file mode 100644 index 1e9eae3..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x6d.html +++ /dev/null @@ -1,137 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- m -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x6e.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x6e.html deleted file mode 100644 index f218e38..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x6e.html +++ /dev/null @@ -1,80 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- n -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x6f.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x6f.html deleted file mode 100644 index 564d324..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x6f.html +++ /dev/null @@ -1,83 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- o -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x70.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x70.html deleted file mode 100644 index cd123db..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x70.html +++ /dev/null @@ -1,236 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- p -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x71.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x71.html deleted file mode 100644 index c50cab0..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x71.html +++ /dev/null @@ -1,92 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- q -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x72.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x72.html deleted file mode 100644 index 38e2f86..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x72.html +++ /dev/null @@ -1,104 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- r -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x73.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x73.html deleted file mode 100644 index 6dd4df2..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x73.html +++ /dev/null @@ -1,185 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- s -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x74.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x74.html deleted file mode 100644 index 5a24ba1..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x74.html +++ /dev/null @@ -1,101 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- t -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x75.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x75.html deleted file mode 100644 index 8f0804a..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x75.html +++ /dev/null @@ -1,77 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- u -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x76.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x76.html deleted file mode 100644 index 4b67d82..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x76.html +++ /dev/null @@ -1,102 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- v -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/functions_vars_0x77.html b/ChibiOS_2.0.8/docs/html/functions_vars_0x77.html deleted file mode 100644 index b7ab757..0000000 --- a/ChibiOS_2.0.8/docs/html/functions_vars_0x77.html +++ /dev/null @@ -1,77 +0,0 @@ - - -ChibiOS/RT: Data Fields - Variables - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- w -

-
-
-Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals.html b/ChibiOS_2.0.8/docs/html/globals.html deleted file mode 100644 index bf0aa93..0000000 --- a/ChibiOS_2.0.8/docs/html/globals.html +++ /dev/null @@ -1,196 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- _ -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x61.html b/ChibiOS_2.0.8/docs/html/globals_0x61.html deleted file mode 100644 index 0b9bcde..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x61.html +++ /dev/null @@ -1,236 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- a -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x62.html b/ChibiOS_2.0.8/docs/html/globals_0x62.html deleted file mode 100644 index e7f6d6f..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x62.html +++ /dev/null @@ -1,206 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- b -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x63.html b/ChibiOS_2.0.8/docs/html/globals_0x63.html deleted file mode 100644 index f5f6533..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x63.html +++ /dev/null @@ -1,1077 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- c -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x64.html b/ChibiOS_2.0.8/docs/html/globals_0x64.html deleted file mode 100644 index bae0c7d..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x64.html +++ /dev/null @@ -1,150 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- d -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x65.html b/ChibiOS_2.0.8/docs/html/globals_0x65.html deleted file mode 100644 index 84dd6a1..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x65.html +++ /dev/null @@ -1,165 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- e -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x66.html b/ChibiOS_2.0.8/docs/html/globals_0x66.html deleted file mode 100644 index 2fac984..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x66.html +++ /dev/null @@ -1,97 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- f -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x68.html b/ChibiOS_2.0.8/docs/html/globals_0x68.html deleted file mode 100644 index a929e7a..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x68.html +++ /dev/null @@ -1,125 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- h -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x69.html b/ChibiOS_2.0.8/docs/html/globals_0x69.html deleted file mode 100644 index f5af819..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x69.html +++ /dev/null @@ -1,241 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- i -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x6c.html b/ChibiOS_2.0.8/docs/html/globals_0x6c.html deleted file mode 100644 index 99892dc..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x6c.html +++ /dev/null @@ -1,221 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- l -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x6d.html b/ChibiOS_2.0.8/docs/html/globals_0x6d.html deleted file mode 100644 index 31c63b4..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x6d.html +++ /dev/null @@ -1,296 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- m -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x6e.html b/ChibiOS_2.0.8/docs/html/globals_0x6e.html deleted file mode 100644 index 22f5939..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x6e.html +++ /dev/null @@ -1,107 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- n -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x6f.html b/ChibiOS_2.0.8/docs/html/globals_0x6f.html deleted file mode 100644 index 555cbd3..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x6f.html +++ /dev/null @@ -1,92 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- o -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x70.html b/ChibiOS_2.0.8/docs/html/globals_0x70.html deleted file mode 100644 index 2acf012..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x70.html +++ /dev/null @@ -1,714 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- p -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x71.html b/ChibiOS_2.0.8/docs/html/globals_0x71.html deleted file mode 100644 index 3991750..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x71.html +++ /dev/null @@ -1,104 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- q -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x72.html b/ChibiOS_2.0.8/docs/html/globals_0x72.html deleted file mode 100644 index d3a90a5..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x72.html +++ /dev/null @@ -1,146 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- r -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x73.html b/ChibiOS_2.0.8/docs/html/globals_0x73.html deleted file mode 100644 index f9cacfd..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x73.html +++ /dev/null @@ -1,942 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- s -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x74.html b/ChibiOS_2.0.8/docs/html/globals_0x74.html deleted file mode 100644 index 3981537..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x74.html +++ /dev/null @@ -1,319 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- t -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x75.html b/ChibiOS_2.0.8/docs/html/globals_0x75.html deleted file mode 100644 index 952c60d..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x75.html +++ /dev/null @@ -1,235 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- u -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x76.html b/ChibiOS_2.0.8/docs/html/globals_0x76.html deleted file mode 100644 index 5396ed6..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x76.html +++ /dev/null @@ -1,114 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- v -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_0x77.html b/ChibiOS_2.0.8/docs/html/globals_0x77.html deleted file mode 100644 index 213b573..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_0x77.html +++ /dev/null @@ -1,97 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: - -

- w -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs.html b/ChibiOS_2.0.8/docs/html/globals_defs.html deleted file mode 100644 index 9c74e6a..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs.html +++ /dev/null @@ -1,148 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- _ -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x61.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x61.html deleted file mode 100644 index 55123cb..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x61.html +++ /dev/null @@ -1,158 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- a -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x62.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x62.html deleted file mode 100644 index 953aca3..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x62.html +++ /dev/null @@ -1,196 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- b -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x63.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x63.html deleted file mode 100644 index 036b8f4..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x63.html +++ /dev/null @@ -1,646 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- c -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x64.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x64.html deleted file mode 100644 index 4f2c91d..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x64.html +++ /dev/null @@ -1,137 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- d -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x65.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x65.html deleted file mode 100644 index 4b195bb..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x65.html +++ /dev/null @@ -1,131 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- e -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x66.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x66.html deleted file mode 100644 index b6a2768..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x66.html +++ /dev/null @@ -1,93 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- f -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x68.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x68.html deleted file mode 100644 index 833d30c..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x68.html +++ /dev/null @@ -1,106 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- h -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x69.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x69.html deleted file mode 100644 index 9b9e291..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x69.html +++ /dev/null @@ -1,199 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- i -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x6c.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x6c.html deleted file mode 100644 index 874fcf8..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x6c.html +++ /dev/null @@ -1,202 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- l -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x6d.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x6d.html deleted file mode 100644 index fba053b..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x6d.html +++ /dev/null @@ -1,142 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- m -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x6e.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x6e.html deleted file mode 100644 index 9ca2957..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x6e.html +++ /dev/null @@ -1,97 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- n -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x6f.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x6f.html deleted file mode 100644 index 5953218..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x6f.html +++ /dev/null @@ -1,88 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- o -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x70.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x70.html deleted file mode 100644 index c43cd39..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x70.html +++ /dev/null @@ -1,514 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- p -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x71.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x71.html deleted file mode 100644 index eff1165..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x71.html +++ /dev/null @@ -1,97 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- q -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x72.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x72.html deleted file mode 100644 index 771d62a..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x72.html +++ /dev/null @@ -1,127 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- r -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x73.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x73.html deleted file mode 100644 index 10b856e..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x73.html +++ /dev/null @@ -1,662 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- s -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x74.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x74.html deleted file mode 100644 index 3abad80..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x74.html +++ /dev/null @@ -1,237 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- t -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x75.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x75.html deleted file mode 100644 index 6b0b2f7..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x75.html +++ /dev/null @@ -1,216 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- u -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_defs_0x77.html b/ChibiOS_2.0.8/docs/html/globals_defs_0x77.html deleted file mode 100644 index 7640c20..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_defs_0x77.html +++ /dev/null @@ -1,96 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - - -
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_enum.html b/ChibiOS_2.0.8/docs/html/globals_enum.html deleted file mode 100644 index 5ee912f..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_enum.html +++ /dev/null @@ -1,74 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_eval.html b/ChibiOS_2.0.8/docs/html/globals_eval.html deleted file mode 100644 index 10c9dd5..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_eval.html +++ /dev/null @@ -1,143 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func.html b/ChibiOS_2.0.8/docs/html/globals_func.html deleted file mode 100644 index fb4d459..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func.html +++ /dev/null @@ -1,114 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - - -
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x61.html b/ChibiOS_2.0.8/docs/html/globals_func_0x61.html deleted file mode 100644 index 19f7a48..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x61.html +++ /dev/null @@ -1,120 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- a -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x63.html b/ChibiOS_2.0.8/docs/html/globals_func_0x63.html deleted file mode 100644 index bc91911..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x63.html +++ /dev/null @@ -1,471 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- c -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x64.html b/ChibiOS_2.0.8/docs/html/globals_func_0x64.html deleted file mode 100644 index 48d9462..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x64.html +++ /dev/null @@ -1,88 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- d -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x65.html b/ChibiOS_2.0.8/docs/html/globals_func_0x65.html deleted file mode 100644 index 8ba08ce..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x65.html +++ /dev/null @@ -1,82 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- e -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x66.html b/ChibiOS_2.0.8/docs/html/globals_func_0x66.html deleted file mode 100644 index 5474acf..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x66.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- f -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x68.html b/ChibiOS_2.0.8/docs/html/globals_func_0x68.html deleted file mode 100644 index 4b7d0cd..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x68.html +++ /dev/null @@ -1,94 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - - -
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x69.html b/ChibiOS_2.0.8/docs/html/globals_func_0x69.html deleted file mode 100644 index d0d9a5b..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x69.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- i -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x6c.html b/ChibiOS_2.0.8/docs/html/globals_func_0x6c.html deleted file mode 100644 index 9f42361..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x6c.html +++ /dev/null @@ -1,94 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- l -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x6d.html b/ChibiOS_2.0.8/docs/html/globals_func_0x6d.html deleted file mode 100644 index 101232a..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x6d.html +++ /dev/null @@ -1,187 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- m -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x6e.html b/ChibiOS_2.0.8/docs/html/globals_func_0x6e.html deleted file mode 100644 index 6b2b489..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x6e.html +++ /dev/null @@ -1,85 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- n -

    -
  • NVICDisableVector() -: nvic.c -
  • -
  • NVICEnableVector() -: nvic.c -
  • -
  • NVICSetSystemHandlerPriority() -: nvic.c -
  • -
-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x70.html b/ChibiOS_2.0.8/docs/html/globals_func_0x70.html deleted file mode 100644 index e5b15a5..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x70.html +++ /dev/null @@ -1,180 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- p -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x71.html b/ChibiOS_2.0.8/docs/html/globals_func_0x71.html deleted file mode 100644 index 830151d..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x71.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- q -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x72.html b/ChibiOS_2.0.8/docs/html/globals_func_0x72.html deleted file mode 100644 index 5bf3ee4..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x72.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- r -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x73.html b/ChibiOS_2.0.8/docs/html/globals_func_0x73.html deleted file mode 100644 index ba2895e..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x73.html +++ /dev/null @@ -1,247 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- s -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x74.html b/ChibiOS_2.0.8/docs/html/globals_func_0x74.html deleted file mode 100644 index 677cea8..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x74.html +++ /dev/null @@ -1,112 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- t -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_func_0x76.html b/ChibiOS_2.0.8/docs/html/globals_func_0x76.html deleted file mode 100644 index 3ff3411..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_func_0x76.html +++ /dev/null @@ -1,82 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- v -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_type.html b/ChibiOS_2.0.8/docs/html/globals_type.html deleted file mode 100644 index cec4475..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_type.html +++ /dev/null @@ -1,409 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- _ -

- - -

- a -

- - -

- b -

- - -

- c -

- - -

- e -

- - -

- i -

- - -

- m -

- - -

- o -

- - -

- p -

- - -

- q -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- u -

- - -

- v -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/globals_vars.html b/ChibiOS_2.0.8/docs/html/globals_vars.html deleted file mode 100644 index b46d7ca..0000000 --- a/ChibiOS_2.0.8/docs/html/globals_vars.html +++ /dev/null @@ -1,240 +0,0 @@ - - -ChibiOS/RT: Data Fields - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-  - -

- _ -

- - -

- a -

- - -

- c -

- - -

- e -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- v -

-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/goals.html b/ChibiOS_2.0.8/docs/html/goals.html deleted file mode 100644 index e935144..0000000 --- a/ChibiOS_2.0.8/docs/html/goals.html +++ /dev/null @@ -1,71 +0,0 @@ - - -ChibiOS/RT: Project Goals - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Project Goals

-
-
-

Another RTOS?

-

The first question to be answered is: there was really the need for YET ANOTHER RTOS?
- There are several reasons:

-
    -
  • The ChibiOS/RT ancestor was created more than 15 years ago and while it had far less features than the current product it was complete and functioning. ChibiOS/RT is just a new (and silly) name given to something created when there were not many free RTOSes around (actually none, at least none in my knowledge, there was no widespread Internet at that time).
  • -
  • When, after a while, I needed a RTOS again, none of the existing FOSS projects met my expectations or my ideas of how a RTOS should be, not even close (see below). I decided that work on that old project was a better idea than contribute to, or fork, something else.
  • -
  • I wanted another toy.
  • -
-

Why is it different?

-

Well, there are some design choices that should be explained and contribute to make ChibiOS/RT a peculiar design. Nothing really new in itself but the whole is interesting:

-

Static design

-

Everything in the kernel is static, nowhere memory is allocated or freed, there are three allocator subsystems but those are options and not part of core OS. Safety is something you design in, not something you can add later.

-

No tables, arrays or other fixed structures

-

The kernel has no internal tables, there is nothing that must be configured at compile time or that can overflow at run time. No upper bounds, the internal structures are all dynamic even if all the objects are statically allocated.

-

No error conditions and no error checks

-

All the system APIs have no error conditions, all the previous points are finalized to this objective. Everything you can invoke in the kernel is designed to not fail unless you pass garbage as parameters, stray pointers as examples. The APIs are not slowed down by parameter checks, parameter checks (and consistency checks) do exist but only when the debug switch is activated.
- All the static core APIs always succeed if correct parameters are passed. Exception to this are the optional allocators APIs that, of course, can report memory exhausted.

-

Very simple APIs

-

Each API should have the parameters you would expect for that function and do just one thing with no options.

-

Fast and compact

-

Note, first "fast" then "compact", the focus is on speed and execution efficiency and then on code size. This does not mean that the OS is large, the kernel size with all the subsystems activated weighs around 5.3KiB and can shrink down around to 1.2Kib in a minimal configuration (STM32, Cortex-M3). It would be possible to make something even smaller but:

-
    -
  1. It would be pointless, it is already really small.
  2. -
  3. I would not trade efficiency or features in order to save few bytes.
  4. -
-

About the "fast" part, the kernel is able to start/exit over 220,000 threads per second on a 72MHz STM32. The Context Switch takes 1.2 microseconds on the same STM32.

-

Tests and metrics

-

I think it is nice to know how an OS is tested and how it performs before committing to use it. Test results on all the supported platforms and performance metrics are included in each ChibiOS/RT release. The test code is released as well, all the included demos are capable of executing the test suite and the OS benchmarks, see Testing Strategy.

-
-
-Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/graph_legend.html b/ChibiOS_2.0.8/docs/html/graph_legend.html deleted file mode 100644 index 79ddfb1..0000000 --- a/ChibiOS_2.0.8/docs/html/graph_legend.html +++ /dev/null @@ -1,102 +0,0 @@ - - -ChibiOS/RT: Graph Legend - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Graph Legend

-
-
-

This page explains how to interpret the graphs that are generated by doxygen.

-

Consider the following example:

-
/*! Invisible class because of truncation */
-class Invisible { };
-
-/*! Truncated class, inheritance relation is hidden */
-class Truncated : public Invisible { };
-
-/* Class not documented with doxygen comments */
-class Undocumented { };
-
-/*! Class that is inherited using public inheritance */
-class PublicBase : public Truncated { };
-
-/*! A template class */
-template<class T> class Templ { };
-
-/*! Class that is inherited using protected inheritance */
-class ProtectedBase { };
-
-/*! Class that is inherited using private inheritance */
-class PrivateBase { };
-
-/*! Class that is used by the Inherited class */
-class Used { };
-
-/*! Super class that inherits a number of other classes */
-class Inherited : public PublicBase,
-                  protected ProtectedBase,
-                  private PrivateBase,
-                  public Undocumented,
-                  public Templ<int>
-{
-  private:
-    Used *m_usedClass;
-};
-

This will result in the following graph:

-
-graph_legend.png -
-

The boxes in the above graph have the following meaning:

-
    -
  • -A filled gray box represents the struct or class for which the graph is generated.
  • -
  • -A box with a black border denotes a documented struct or class.
  • -
  • -A box with a grey border denotes an undocumented struct or class.
  • -
  • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • -
-

The arrows have the following meaning:

-
    -
  • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • -
  • -A dark green arrow is used for protected inheritance.
  • -
  • -A dark red arrow is used for private inheritance.
  • -
  • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • -
  • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • -
-
-
-Generated on Sun Nov 28 2010 14:10:00 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/graph_legend.png b/ChibiOS_2.0.8/docs/html/graph_legend.png deleted file mode 100644 index 7dbbd052fffae8c5043002a00199f04da9296971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13377 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 diff --git a/ChibiOS_2.0.8/docs/html/group___a_d_c.html b/ChibiOS_2.0.8/docs/html/group___a_d_c.html deleted file mode 100644 index ba61ceb..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_d_c.html +++ /dev/null @@ -1,491 +0,0 @@ - - -ChibiOS/RT: ADC Driver - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- -
-
- -
-

ADC Driver
- -[HAL] -

-
-
- -

Generic ADC Driver. -More...

- -

-Collaboration diagram for ADC Driver:
-
-
- - -
-
-

-

Description

-

Generic ADC Driver.

-

This module implements a generic ADC driver. The driver implements a state machine internally:

-
-inline_dotgraph_16.dot - -
-

The driver supports a continuous conversion mode with circular buffer, callback functions allow to process the converted data in real time. Please refer to the documentation of the function adcStartConversion().

- - - - -

-

- - - - - - - - - - - - - - - - - - -

-Modules

 ADC Low Level Driver
 

ADC Driver low level driver template.

-

-Enumerations

enum  adcstate_t {
-  ADC_UNINIT = 0, -ADC_STOP = 1, -ADC_READY = 2, -ADC_RUNNING = 3, -
-  ADC_COMPLETE = 4 -
- }
 

Driver state machine possible states.

- More...

-Functions

void adcInit (void)
 ADC Driver initialization.
void adcObjectInit (ADCDriver *adcp)
 Initializes the standard part of a ADCDriver structure.
void adcStart (ADCDriver *adcp, const ADCConfig *config)
 Configures and activates the ADC peripheral.
void adcStop (ADCDriver *adcp)
 Deactivates the ADC peripheral.
bool_t adcStartConversion (ADCDriver *adcp, const ADCConversionGroup *grpp, adcsample_t *samples, size_t depth, adccallback_t callback)
 Starts an ADC conversion.
void adcStopConversion (ADCDriver *adcp)
 Stops an ongoing conversion.
msg_t adcWaitConversion (ADCDriver *adcp, systime_t timeout)
 Waits for completion.
-

Enumeration Type Documentation

- -
-
- - - - -
enum adcstate_t
-
-
- -

Driver state machine possible states.

-
Enumerator:
- - - - - -
ADC_UNINIT  -

Not initialized.

-
ADC_STOP  -

Stopped.

-
ADC_READY  -

Ready.

-
ADC_RUNNING  -

Conversion running.

-
ADC_COMPLETE  -

Conversion complete.

-
-
-
- -

Definition at line 63 of file adc.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
void adcInit (void  ) 
-
-
- -

ADC Driver initialization.

- -

Definition at line 59 of file adc.c.

- -

References adc_lld_init().

- -

Referenced by halInit().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void adcObjectInit (ADCDriver adcp ) 
-
-
- -

Initializes the standard part of a ADCDriver structure.

-
Parameters:
- - -
[in] adcp pointer to the ADCDriver object
-
-
- -

Definition at line 69 of file adc.c.

- -

References ADCDriver::ad_callback, ADCDriver::ad_config, ADCDriver::ad_depth, ADCDriver::ad_grpp, ADCDriver::ad_samples, ADCDriver::ad_sem, ADCDriver::ad_state, and chSemInit().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void adcStart (ADCDriver adcp,
const ADCConfig config 
)
-
-
- -

Configures and activates the ADC peripheral.

-
Parameters:
- - - -
[in] adcp pointer to the ADCDriver object
[in] config pointer to the ADCConfig object
-
-
- -

Definition at line 86 of file adc.c.

- -

References ADCDriver::ad_config, ADCDriver::ad_state, adc_lld_start(), ADC_READY, ADC_STOP, chDbgAssert, chDbgCheck, chSysLock, and chSysUnlock.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void adcStop (ADCDriver adcp ) 
-
-
- -

Deactivates the ADC peripheral.

-
Parameters:
- - -
[in] adcp pointer to the ADCDriver object
-
-
- -

Definition at line 105 of file adc.c.

- -

References ADCDriver::ad_state, ADC_COMPLETE, adc_lld_stop(), ADC_READY, ADC_STOP, chDbgAssert, chDbgCheck, chSysLock, and chSysUnlock.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool_t adcStartConversion (ADCDriver adcp,
const ADCConversionGroup grpp,
adcsample_t samples,
size_t  depth,
adccallback_t  callback 
)
-
-
- -

Starts an ADC conversion.

-

Starts a conversion operation, there are two kind of conversion modes:

-
    -
  • LINEAR, in this mode the buffer is filled once and then the conversion stops automatically.
  • -
  • CIRCULAR, in this mode the conversion never stops and the buffer is filled circularly.
    - During the conversion the callback function is invoked when the buffer is 50% filled and when the buffer is 100% filled, this way is possible to process the conversion stream in real time. This kind of conversion can only be stopped by explicitly invoking adcStopConversion().
  • -
-
Note:
The buffer is organized as a matrix of M*N elements where M is the channels number configured into the conversion group and N is the buffer depth. The samples are sequentially written into the buffer with no gaps.
-
Parameters:
- - - - - - -
[in] adcp pointer to the ADCDriver object
[in] grpp pointer to a ADCConversionGroup object
[out] samples pointer to the samples buffer
[in] depth buffer depth (matrix rows number). The buffer depth must be one or an even number.
[in] callback pointer to the conversion callback function, this parameter can be NULL if a callback is not required
-
-
-
Returns:
The operation status.
-
Return values:
- - - -
FALSE the conversion has been started.
TRUE the driver is busy, conversion not started.
-
-
- -

Definition at line 150 of file adc.c.

- -

References ADCDriver::ad_callback, ADCDriver::ad_depth, ADCDriver::ad_grpp, ADCDriver::ad_samples, ADCDriver::ad_state, ADC_COMPLETE, adc_lld_start_conversion(), ADC_READY, ADC_RUNNING, chDbgAssert, chDbgCheck, chSysLock, and chSysUnlock.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void adcStopConversion (ADCDriver adcp ) 
-
-
- -

Stops an ongoing conversion.

-
Parameters:
- - -
[in] adcp pointer to the ADCDriver object
-
-
- -

Definition at line 185 of file adc.c.

- -

References ADCDriver::ad_grpp, ADCDriver::ad_sem, ADCDriver::ad_state, ADC_COMPLETE, adc_lld_stop_conversion(), ADC_READY, ADC_RUNNING, chDbgAssert, chDbgCheck, chSchRescheduleS(), chSemResetI(), chSysLock, and chSysUnlock.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
msg_t adcWaitConversion (ADCDriver adcp,
systime_t  timeout 
)
-
-
- -

Waits for completion.

-

If the conversion is not completed or not yet started then the invoking thread waits for a conversion completion event.

-
Parameters:
- - - -
[in] adcp pointer to the ADCDriver object
[in] timeout the number of ticks before the operation timeouts, the following special values are allowed:

-
    -
  • TIME_IMMEDIATE immediate timeout.
  • -
  • TIME_INFINITE no timeout.
  • -
-
-
-
-
Returns:
The operation result.
-
Return values:
- - - -
RDY_OK conversion finished.
RDY_TIMEOUT conversion not finished within the specified time.
-
-
- -

Definition at line 222 of file adc.c.

- -

References ADCDriver::ad_sem, ADCDriver::ad_state, ADC_COMPLETE, ADC_READY, ADC_RUNNING, chDbgAssert, chSemWaitTimeoutS(), chSysLock, chSysUnlock, and RDY_TIMEOUT.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_d_c.png b/ChibiOS_2.0.8/docs/html/group___a_d_c.png deleted file mode 100644 index f60fcc1e6006491e4e34d9a8f9ffd903e9caa4ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yU`%CTU{K{?V_;yIwdzMQ0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj&dbn)aJ8FtE0Ix;TbZ%z1m~w0BIn4Eu-o{^?r`mqjhM=bNa=%pYCZcOrh;&(m6(;&VUii=F=?QpONBW7e!g4<01kNIY_=ENC5T zVMhED{nLL!#Y;q7Tteg~8wm!s7-$L$x^f_x9e3Yw$8uFax85E3e0IsN)n$hb&ULPM z7?by{BH-z-#DoL}Zf@@CYcr?j>EB&`>08n78%G69@7|p+Yu3}ov%sxr=gsej`i?Ix z$~|#rm91v)+q&(}`%kanE!whj^b){J#Ih9vcIL z50BQDRKG0D%engVXYk4^N4~l&dMMZ+&oJkR-Rj~uDtQZvn65AMsee|w^!E+j>e#lc z|E#?1rFZ||^>mu`x~#abQ*60cRL%T#?%X?JrL3G>Un3<8jYV8H_PKSQsWrGahbQvJ z*E4%1f6Z9uz4V{0Vvs~^^yFft46%dVR{a6b)z_6&-OQWcH22$+y>EV6TV7ii<3HbS zkJqWPWXop_w(^HEa%%n-MBjcH$*`E=*3?ORI40em-7Gbav&VAgROv$>f_FabD{|I) zT6H)tDKD$)cki@m|MDBvlNqe0IQd?;tjTi@-O#;o){Qk*rO%Ak2rUv{^JvYo82{Hw zCk#{lOH1d7`|VYE z+grWe;`Q#?ui5KWg>?5eEO7~mTlwS4&tJdpALn^IbMp2hmbuPTtFFd<-Q<1#Z7Bb} zmzH;V9H%@k-Pz~zF!21zEmLF7%--4DyRqZ5y20N-t*>8pbV!A99agH?`D9{Q|J148 zra!0Y?bghHrvG-$w%2nGbKd)WvB8t;}@uhG*#Rj_M+_{ZwMkvGIbvRI9>`!xVA%9J`bSKjnb!5?Kc-pK-uA2$IdI-O`}pLQA)h@3dl+8nEQn)T!muKC zZePch$~m{hf1XyVcU`>v&BmR7n%Q@7K1j2&y~koQ*Nn%M?Ln;|$G7_;D{B+<_HSy6 zX2|>c#YfJ7r!;Hzxl|99(&*1qW-@EaWf^F`-%($mCwst@;d)h-+HD@^xuIO~%oVzK zPMpy9_BKAx5W`-ucm4ax;q&bCEmlv7Vfc`CVxeH>%9l%Wwrw%_%-^8RuI%rSdo jpb?Q1?}7rhKB}))`y0R%zcz`1fq}u()z4*}Q$iB}im=AP diff --git a/ChibiOS_2.0.8/docs/html/group___a_d_c___l_l_d.html b/ChibiOS_2.0.8/docs/html/group___a_d_c___l_l_d.html deleted file mode 100644 index 9119fe7..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_d_c___l_l_d.html +++ /dev/null @@ -1,285 +0,0 @@ - - -ChibiOS/RT: ADC Low Level Driver - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

ADC Low Level Driver
- -[ADC Driver] -

-
-
- -

ADC Driver low level driver template. -More...

- -

-Collaboration diagram for ADC Low Level Driver:
-
-
- - -
-
-

-

Description

-

ADC Driver low level driver template.

-

This file is a template for a ADC low level driver.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  ADCConversionGroup
 Conversion group configuration structure. More...
struct  ADCConfig
 Driver configuration structure. More...
struct  ADCDriver
 Structure representing an ADC driver. More...

-Typedefs

typedef uint16_t adcsample_t
 ADC sample data type.
typedef uint16_t adc_channels_num_t
 Channels number in a conversion group.
typedef void(* adccallback_t )(adcsample_t *buffer, size_t n)
 ADC notification callback type.

-Functions

void adc_lld_init (void)
 Low level ADC driver initialization.
void adc_lld_start (ADCDriver *adcp)
 Configures and activates the ADC peripheral.
void adc_lld_stop (ADCDriver *adcp)
 Deactivates the ADC peripheral.
void adc_lld_start_conversion (ADCDriver *adcp)
 Starts an ADC conversion.
void adc_lld_stop_conversion (ADCDriver *adcp)
 Stops an ongoing conversion.
-

Typedef Documentation

- -
-
- - - - -
typedef uint16_t adcsample_t
-
-
- -

ADC sample data type.

- -

Definition at line 63 of file templates/adc_lld.h.

- -
-
- -
-
- - - - -
typedef uint16_t adc_channels_num_t
-
-
- -

Channels number in a conversion group.

- -

Definition at line 68 of file templates/adc_lld.h.

- -
-
- -
-
- - - - -
typedef void(* adccallback_t)(adcsample_t *buffer, size_t n)
-
-
- -

ADC notification callback type.

-
Parameters:
- - - -
[in] buffer pointer to the most recent samples data
[in] n number of buffer rows available starting from buffer
-
-
- -

Definition at line 76 of file templates/adc_lld.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
void adc_lld_init (void  ) 
-
-
- -

Low level ADC driver initialization.

- -

Referenced by adcInit().

- -
-
- -
-
- - - - - - - - - -
void adc_lld_start (ADCDriver adcp ) 
-
-
- -

Configures and activates the ADC peripheral.

-
Parameters:
- - -
[in] adcp pointer to the ADCDriver object
-
-
- -

Referenced by adcStart().

- -
-
- -
-
- - - - - - - - - -
void adc_lld_stop (ADCDriver adcp ) 
-
-
- -

Deactivates the ADC peripheral.

-
Parameters:
- - -
[in] adcp pointer to the ADCDriver object
-
-
- -

Referenced by adcStop().

- -
-
- -
-
- - - - - - - - - -
void adc_lld_start_conversion (ADCDriver adcp ) 
-
-
- -

Starts an ADC conversion.

-
Parameters:
- - -
[in] adcp pointer to the ADCDriver object
-
-
- -

Referenced by adcStartConversion().

- -
-
- -
-
- - - - - - - - - -
void adc_lld_stop_conversion (ADCDriver adcp ) 
-
-
- -

Stops an ongoing conversion.

-
Parameters:
- - -
[in] adcp pointer to the ADCDriver object
-
-
- -

Referenced by adcStopConversion(), and CH_IRQ_HANDLER().

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_d_c___l_l_d.png b/ChibiOS_2.0.8/docs/html/group___a_d_c___l_l_d.png deleted file mode 100644 index 7097f89eb725bdca3875230230df2392f7836fab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2104 zcmeAS@N?(olHy`uVBq!ia0y~yU{YmZU~u7JV_;y2i*mJPU|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my6?F(|!{M2KHN?E{-7;bKc%Pn=j@nbKv9sDNRSTgo561&zR9+ zc#-2{OTLPYxNr}8r8Ekx4SGe!3Fk8ZVtoz`! zCAAgDm}?7erl*yq&A&N4{rhiEv$yZ|ybGH5({^*d5(8F{bJ)Izs zd^>OT?Wy<8?{E0KajW#DeQRwF@-ZwZJ;md-iS4n(ZD;oXiMM>YbMJ4ttIol+NNW8q zW(I}+xafsJuS+Mq3Eq{zjWK#@-Sy7<$?s>syfrED_KM3N-Ms~-Fs$ef{A>2ky5jq1 zQNaS$*KBUrBCg6ZT&Vi%Xtj68y4fD*S1q}``O>EkGY_8Jb?xxA^?PbPw+p`Zle=sc zV3Fp<(8F|n?fRFDx5{p*%zUOLd}#Z;H8qvLgoBPfx0vziMMxb3Lqm|EcavAaFHoGJ zh0KPB_lg;EQ>$)7{0fV>oWA7sO$EbwwUgGY?(4t9&cGn}bKf8R6x(OQft7w73=Fz~ z&!jtlzg%YiJ}uY(dhTsL6Q=%|>!P0s%$>#!}@drt*_?=j(6#x1_rxc|B_ zUZ1gG;tWm33vP=gIv9G7`*1dxdCpVv)Z3<@njLoZTU)H*n&U13t!_!nSQzA|33U;U0r zYuknm3U~9izseKw?EY(Oysi9d%G%wZZoWFMaBP0sZ1IWZzMSh8q!ea5nms-!o9f;# zw{{oziW{FkZPL-z4ZYiI<-w*G$>QvaP2=kwjuxKt+P&Snz4ytAB1$VALomEqQ^9)}bO7WoX> zG%toNzV&WO-)1+(K8>kaC%Cejfz`z^AZX#qljrB%+5G&=x>dg!6C6HW>3r*Za9K(C zPJwl14ac+|ed&E^KjFM(;N_{$7MAY#6~N8TH>WNqH}_Aj;NOKOju|dJ*4J^O=<46D zg_mERI6K>%eVgji%a<#2UM_oUD0o@9}T!zLy`&jPYNdzSey1`+eJA&R}TFVctK~8Ov{wGuVyH9HEC->iz?k?G#pY@Ta;pNNC`kG7qHB^^xnU?O7;_UKPK=5MJw&!cb zn`_b{V~i~}-jYzO_qbj8`{uTr>RbGZ0{DNv*=Bo2Pt$*I>WSUww{1N4W%qlF$lI6A zPxk$c@s*qXwxs_x!|!X4P3-I}H)dbY)_-^B=N?os*Vp`2Vzd%Dg0Zj z^mJ*kmu9`XvpVYk-(%ZytJS_^iuKM`-0vF$FFHM^|>8x42|D#<`%_|F+Yu*iUx1XPX)8_A)+in^E zBL4Q*>NE%@?GjTt*1B$);h~bm^m*IbWcg!%&)IiRC3gDDlK#x<6Bd%XD>jB+`oHYV z>cxL=^i7{N_wScdLEH6PXNga|>-Exi?bX8!OV=5z@?`BOc{xc(S2tGJjy*u{*!-j` znbVfoE8Abl)6VzSofsFn^Uvc`r>6Rcg_pk<4LrUj?0(mYy{oL*7#!}Jyqxx6*6%&L zcWGUBee&zy-*o#|W!3LBRMo5YZtPuE&Blu)z5BtY0r)LJ*E@cKudAjDvGR diff --git a/ChibiOS_2.0.8/docs/html/group___a_d_c_ga026ac46dfe36031ab177e35f3aff5b09_cgraph.png b/ChibiOS_2.0.8/docs/html/group___a_d_c_ga026ac46dfe36031ab177e35f3aff5b09_cgraph.png deleted file mode 100644 index f60b6781b89312b1aaa4d243587e0a3b85177f0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1900 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 RF)%PNc)I$ztaD0e0s!7a_Qe1I diff --git a/ChibiOS_2.0.8/docs/html/group___a_d_c_ga92f8b4434b8199323b1469e0479de7f8_cgraph.png b/ChibiOS_2.0.8/docs/html/group___a_d_c_ga92f8b4434b8199323b1469e0479de7f8_cgraph.png deleted file mode 100644 index 7dc45b9cc20e66646c8a5f48dc8a29bf17e5f9b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1060 zcmeAS@N?(olHy`uVBq!ia0y~yV7S1*z@W;(#=yW}{5$;~0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj&dbn)aJ8FfbqUba4!+nDh3IufMRP1p9~oI{LmQjv8`N26Zg! zV=OLwX%H9I-+RKbzsli5mc;?_53MeIa#vR|@@Fl2n8ej-Xjo-9(ORf7ut||uB15~M zJ!*4a*{Qtr?YpP^*H_FbfBuy5+0B`HlbKwgKu+WA&)E!Yvn4&w_%K(cdUAJG|oB#d0 zSp4$Kj~cDg*I7oEw?s>A7>;b1w{BnN?!@aCFWDXIb5fh^xG=!t(;ZL6q)3LgsgoYM zEP9)0Rr{J(!C$EJ-S*R`Cszj^cV|?a@Ha1C{=?SKd7Tf#?yU^a_@kZeueSZy*4O7| zu67mLAUwgFLGS(h{QrJSk3G{lUA1l7x4*Im-_;wwy)93BT6Aw`wrlvk{Q9`pR=+o& z&+-aBR(H4VY}|1V1bChTSDSOHN-tK_*|V>>y?3u=h}O}!-@X}(U%&qTTy-YX zyVKh&EVI};pQLmAQEbXHxGw!9&)e?uKPlCqWAENge;K@7??{6AHmlVlX*Sbz8859A z3H$afjIXTBu10sN*&dbtU}gVPKGR(5rWc%B8ofA|P3eQ`ocoV&WpDrdExY00-bvG+ ze0j%kH0fdT#)ys@_2T&ZH!21HS_n?u6ts%@fSN+T>yw|qe*N|TU|(%D-J`BAdwuhZ z^WK%|^;=UuT~14Q-(1rBWb@58Qz!3`-aV^F+2YPwnUz^gwZ(JRF=PlI>kp^Rm3W+&gPLA%wR3cLcT31TN&hUHY$@~q{Pu3{x9M*(g;xZvOvuX8 p+R~v>BFm7rn6Ie=3K;&dE(lx{v*_hb0|o{L22WQ%mvv4FO#nG?=xP7} diff --git a/ChibiOS_2.0.8/docs/html/group___a_d_c_gabce14d8f240e85715cded02c85b6585a_cgraph.png b/ChibiOS_2.0.8/docs/html/group___a_d_c_gabce14d8f240e85715cded02c85b6585a_cgraph.png deleted file mode 100644 index 5e30504bb0f6d31f660e3409ded602acb6407905..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9232 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 D0_!j> diff --git a/ChibiOS_2.0.8/docs/html/group___a_d_c_gac7f619e304c79c17f19221d05138d405_cgraph.png b/ChibiOS_2.0.8/docs/html/group___a_d_c_gac7f619e304c79c17f19221d05138d405_cgraph.png deleted file mode 100644 index c39ff7f1b374fafa38785aa66ec2157653fe4297..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1077 zcmeAS@N?(olHy`uVBq!ia0y~yV7SV_z@W;(24Y=WGmC+Nfi20~-G$*l2rk&Wd@=(A z1AB?5uPgg4ZW&%Kj(1J_O&A!MuY0;UhE&XXJI6m;*iqux{F^3Cyhpp+bvoud?x`?v za^Axcw>sc2lTyZ>?<%%kU0hw_AN^l1?PqO*QgZP0#g zHQCo}^G)ARe-cid+hhEGkIv^eXZ+e&ITTw2oWMj-lhKrThJY8T3eE?Z8l*khFS4@! zkraOt@5jpR#v|I#FhfFKzTb3KVq#sL9K$wYzQxgeOfwh^rk5yaCLT&L=;T@FkM z{ISJ2CB;ZGL~H7j!yAs)`#)1m6*|y!?!gxe0Vg)Ot}cPo0U<3BZHttS7>S4~PJ6j> zMc2`!+h6xw@%vr&cUzYDv%{O+-)j5r$oskUb=7gTd@{24r__UBu(U%$Ew zy=^tSjw-FXy2^09@|nEmxGxu-`gC zlGK~PH09X42KKuwqNY~QsM(fv`M5|1?UiB$p(X-mZKuX%HCUQg*!gjp)J5 zr3Gg5<^MjjczW~e*X!|SX7|b-$4IU#EiHLuwD$(Vj^EOA0)H{RmKF^xdtno} zEo#-wPl+2}yi(iP^84T4ud_F9e6)66S(bz5o&5A3E!EpfTHFa+Z~pm~nEUqV!nbeF zmn)S?Z#(iTg;VT1n_GB9{J+www@*v=HJQzopL{ky|EY1;fkj&~O~hXJ9!t{ltJt0Q zGmiVSK7%BKeOZ~obBk9Wm-~O^GANg-=bNx?_g|Si4jjUct9je~YF!V`3h?zy^ICc- zW&fNY|KHCJe)(deHT9HEgR$pvCWdv<_ZTL8{-l(_6yWtxe8D{CPa4y+?dre3dp2$T z%yKR3t;R0>hWGlf{Pn-8nJFIP^^xUi=SnRl{_We!=B-eYe%YvmXnTipkR_D zC=pAP|IgYg#l>3Zf0=D-lbP0l+XkK8s+x^ diff --git a/ChibiOS_2.0.8/docs/html/group___a_d_c_gadb9905e3fcd0f053ca1e07e9686bf641_cgraph.png b/ChibiOS_2.0.8/docs/html/group___a_d_c_gadb9905e3fcd0f053ca1e07e9686bf641_cgraph.png deleted file mode 100644 index a4a2252767edebc5f75aed410d25b9c119671ed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1274 zcmeAS@N?(olHy`uVBq!ia0y~yV030+U{K{?V_;yo@v{310|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj&dbn)aJ8FtE(=ba4!+nDh3oeU5af4Eu-o#ht5{IV*=ciLXvd zN=Rbitn7F#TIxOF*2Ki7SC%su>FIdtRudwcJn&wY2hyzC8w3ljJulX~NyUBfdK>4lw9 z>>u{NS2N0b^yBwrjegbI!`^L;`AiWp5fK_&rDyGV`!<*1$EjlJ$~{a8f(K;p_g)Bz zGI?vzs(9CE;$mYjz#KWP1bvr{LAb%Wsc#byuPIy$sE6Fpp5+7tx^8Q??% zXM5u6tDB^R|2{5S)&IzS8z#5YinXj=wkN1eY%-@)?I#SBQ4Fle#hhEzrTt;t(YCBzRtgP z-;R%-3uj%Me%9i8-Lm;}geR&lEzspi%VN@7 zzBavjO`QI&TOnm9@zRvdxA%Va zKDN?VeeKI7-c~1LU*C-Rbo1ME5u0U&k*{Aqj`?S|>D#L!`}6zz0~HfjtUnfW{KY}` z8R1j(il?edohv*z_1bi~U&~c5bSZy*yk3hT#ggY^qJWM)!-tm#58kckvVCAiNoV2?X}a+KAyMYQdnE1>e_dwR)mY(PAHDuE4DN)|G}f9 zOL-;kO)}9;`f0NB#AeaQs~Pgno!#5}`T6&N_51%^d-v{Fzgh5scP?Kwb5qTE`xQ@_ z-G~X>vQ+yIt4OecDr?xK&sCAHU;3=xvBojw^7_pEbvLa~I>_)qp)FFPF#(SQHgZ}$Dtn83dg#-cYew%-o_xzcp`dCwDZ%o|>A?tg3$a^H2krYf_b zDRV+Ri*)+Agw?nAeifc)uX${~)uX?gx|U7)_Y|Ur5V^>}F?%v^c^S+wzlMh^9z3p;P{wqVC zliiCKe=whTb7$Q9#mx8j3NZ3Ge@dzU|9IbfxsF9YR+_rFBuEGeG9n0%3dYp*boR4q z_5C)X(>{K`FQi)VfA7h|4+XNbv!8Bpo^t>BK4}FdBw%&*A9JUCx^v_HdP4>V1_n=8 KKbLh*2~7YfyK5!@ diff --git a/ChibiOS_2.0.8/docs/html/group___a_d_c_gafd645b17cf0581bcaa22c56011c775e4_cgraph.png b/ChibiOS_2.0.8/docs/html/group___a_d_c_gafd645b17cf0581bcaa22c56011c775e4_cgraph.png deleted file mode 100644 index 9b732f95be2a5995821c3a4b8a731bf859a603ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 965 zcmeAS@N?(olHy`uVBq!ia0y~yVA##Tz@W;(#=yWJ^=C#T0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj&dbn)aJ8FfgZkx;TbZ%z1lff3|R<1p9~g#lCMYII=D+7yZR< zQ8s~(uebTXql}Ut-=Zd8Gx3#^A1t`~Xi?abquZ|N{bRo5)V;tvP=I}*bF^L%7vDw? zpR`^vuy?EC)d-ct^R76B&?#TEf46^6<+yEz{C-Dy3N z!gpZWJ0+*8)w>()ijVG9dVDcc#-T1NYt{3sM>3O>nHlb7>M3{Ce6ID)7CkvV+_a)q zmchW-`10%^lgzfg_hVT%tl8bsqRkNTDa#;9&xIpb<&BalGEU;I)|>v?t9p5zr@2{} zRzz54UCEXT&J+BZdhN=2%Wv(wT=#cd``Yut_j}&Fe*Jov_lvHox&BNwcMU$=+jMTK z?rMwdSxdQhz3!TMy?>_TE$6^{>HLQ*Z&^9tjC#+vYSsSTXK%iXnSc7}FWWz%42K!c zG3{_Y;(B`4J=I05X=|pO_TN|fP~u$RM4M~7nU}tj|58!6?P;3*_Y=N-W##uzD7D{} z-E%Gd`L8m^uUzX^-Q9biv2f8xx5rx;3sFu zg@%>iUbny6@vcg_TjpCB!{Kj|8y>hhwd53kv~l2{@pECOUp-64#|IBAUwys5ue|l# z!tCqnUI+fjM0d~YdE=QnYy0z#P4nzkkFUA4aBjy0Mh+Jn&V-_pFKm7N_0u-p434&Q zt6o3R>gz6}^!z~9y>~eUo^N^b;>GFL6DM~1ZA$C3? ztF863w;o<_d6q%B&mtdrq3Wd4QYqn*onI|iY*6=Dx@l+Z%ABm)tP3XH=^a-R)gMV2 zr!xNHxsaq*yl2<;?`PbUUG~?=9kZOuvFpw+8JFF)u2;8K?!NBF#W0O6SMRRP!7cWt z8MBVgcA4S&IFE;+q2r&yXHEv|GkYeS{BY{uzdPmEm-Vn*xz8TuZ~Jfh+jV})E%}Gf ztT5H{_{rX2?s9BXuKm4hu`|4{aNmfFVQ5!Nyx!6g&lsUO-9Ml4`|Dk=13RR=bQgwA z+;IGiLEE*Q-A4R-R=ixNnyd20aPwRD_FdT?tM^r!xpk~SPFGXJS1^CNF5Ilf@9^%? zmgRr$OX#zj)bU6h30FKJKG9&;{@r!eoS?)GO7SPZ@b9?1EK_5~s*el|3=E#GelF{r G5}E)XKgK=) diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m7.html b/ChibiOS_2.0.8/docs/html/group___a_r_m7.html deleted file mode 100644 index ffe8015..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_r_m7.html +++ /dev/null @@ -1,144 +0,0 @@ - - -ChibiOS/RT: ARM7TDMI - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

ARM7TDMI
- -[Ports] -

-
-
- -

-Collaboration diagram for ARM7TDMI:
-
-
- - -
-
-

-

Description

-

The ARM7 architecture is quite complex for a microcontroller and some explanations are required about the port choices.

-

-The ARM7 modes

-

The ARM7 port supports three modes:

-
    -
  • Pure ARM mode, this is the preferred mode for code speed. The code size is larger however. This mode is enabled when all the modules are compiled in ARM mode, see the Makefiles.
  • -
  • Pure THUMB mode, this is the preferred mode for code size. In this mode the execution speed is slower than the ARM mode. This mode is enabled when all the modules are compiled in THUMB mode, see the Makefiles.
  • -
  • Interworking mode, when in the system there are ARM modules mixed with THUMB modules then the interworking compiler option is enabled. This is usually the slowest mode and the code size is not as good as in pure THUMB mode.
  • -
-

-Mapping of the System States in the ARM7 port

-

The ChibiOS/RT logical System States are mapped as follow in the ARM7 port:

-
    -
  • Init. This state is represented by the startup code and the initialization code before chSysInit() is executed. It has not a special hardware state associated, usually the CPU goes through several hardware states during the startup phase.
  • -
  • Normal. This is the state the system has after executing chSysInit(). In this state the ARM7TDMI has both the interrupt sources (IRQ and FIQ) enabled and is running in ARM System Mode.
  • -
  • Suspended. In this state the IRQ sources are disabled but the FIQ sources are served, the core is running in ARM System Mode.
  • -
  • Disabled. Both the IRQ and FIQ sources are disabled, the core is running in ARM System Mode.
  • -
  • Sleep. The ARM7 code does not have any built-in low power mode but there are clock stop modes implemented in custom ways by the various silicon vendors. This state is implemented in each microcontroller support code in a different way, the core is running (or freezed...) in ARM System Mode.
  • -
  • S-Locked. IRQ sources disabled, core running in ARM System Mode.
  • -
  • I-Locked. IRQ sources disabled, core running in ARM IRQ Mode. Note that this state is not different from the SRI state in this port, the chSysLockI() and chSysUnlockI() APIs do nothing (still use them in order to formally change state because this may change).
  • -
  • Serving Regular Interrupt. IRQ sources disabled, core running in ARM IRQ Mode. See also the I-Locked state.
  • -
  • Serving Fast Interrupt. IRQ and FIQ sources disabled, core running in ARM FIQ Mode.
  • -
  • Serving Non-Maskable Interrupt. There are no asynchronous NMI sources in ARM7 architecture but synchronous SVC, ABT and UND exception handlers can be seen as belonging to this category.
  • -
  • Halted. Implemented as an infinite loop after disabling both IRQ and FIQ sources. The ARM state is whatever the processor was running when chSysHalt() was invoked.
  • -
-

-The ARM7 modes

-

The ARM7 port makes some assumptions on the application code organization:

-
    -
  • The main() function is invoked in system mode.
  • -
  • Each thread has a private user/system stack, the system has a single interrupt stack where all the interrupts are processed.
  • -
  • The threads are started in system mode.
  • -
  • The threads code can run in system mode or user mode, however the code running in user mode cannot invoke the ChibiOS/RT APIs directly because privileged instructions are used inside.
    - The kernel APIs can be eventually invoked by using a SWI entry point that handles the switch in system mode and the return in user mode.
  • -
  • Other modes are not preempt-able because the system code assumes the threads running in system mode. When running in supervisor or other modes make sure that the interrupts are globally disabled.
  • -
  • Interrupts nesting is not supported in the ARM7 code because their implementation, even if possible, is not really efficient in this architecture.
  • -
  • FIQ sources can preempt the kernel (by design) so it is not possible to invoke the kernel APIs from inside a FIQ handler. FIQ handlers are not affected by the kernel activity so there is not added jitter.
  • -
-

-ARM7 Interrupt Handlers

-

ARM7 Interrupt handlers do not save function-saved registers so you need to make sure your code saves them or does not use them (this happens because in the ARM7 port all the OS interrupt handler functions are declared naked).
- Function-trashed registers (R0-R3, R12, LR, SR) are saved/restored by the system macros CH_IRQ_PROLOGUE() and CH_IRQ_EPILOGUE().
- The easiest way to ensure this is to just invoke a normal function from within the interrupt handler, the function code will save all the required registers.
- Example:

-
 CH_IRQ_HANDLER(irq_handler) {
-   CH_IRQ_PROLOGUE();
-
-   serve_interrupt();
-
-   VICVectAddr = 0; // This is LPC214x-specific.
-   CH_IRQ_EPILOGUE();
- }
-

This is not a bug but an implementation choice, this solution allows to have interrupt handlers compiled in thumb mode without have to use an interworking mode (the mode switch is hidden in the macros), this greatly improves code efficiency and size. You can look at the serial driver for real examples of interrupt handlers.
- It is important that the serve_interrupt() interrupt function is not inlined by the compiler into the ISR or the code could still modify the unsaved registers, this can be accomplished using GCC by adding the attribute "noinline" to the function:

-
 #if defined(__GNUC__)
- __attribute__((noinline))
- #endif
- static void serve_interrupt(void) {
- }
-

Note that several commercial compilers support a GNU-like functions attribute mechanism.
- Alternative ways are to use an appropriate pragma directive or disable inlining optimizations in the modules containing the interrupt handlers.

- - - - -

-

- - -

-

- - -

-

- - -

-

- - -

-

-

-Modules

 Configuration Options
 

ARM7 specific configuration options.

-
 Core Port Implementation
 

ARM7 specific port code, structures and macros.

-
 Startup Support
 

ARM7 startup code support.

-
 AT91SAM7 Support
 

AT91SAM7 specific support.

-
 LPC214x Support
 

LPC214x specific support.

-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m7.png b/ChibiOS_2.0.8/docs/html/group___a_r_m7.png deleted file mode 100644 index 26467ee8ce7ef3051ec56a209f35e13ba414a6cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9150 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 E0NU2dpa1{> diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_n_f.html b/ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_n_f.html deleted file mode 100644 index 4fab97f..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_n_f.html +++ /dev/null @@ -1,66 +0,0 @@ - - -ChibiOS/RT: Configuration Options - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Configuration Options
- -[ARM7TDMI] -

-
-
- -

ARM7 specific configuration options. -More...

- -

-Collaboration diagram for Configuration Options:
-
-
- - -
-
-

-

ARM7 specific configuration options.

-

The ARM7 port allows some architecture-specific configurations settings that can be overridden by redefining them in chconf.h. Usually there is no need to change the default values.

-
    -
  • INT_REQUIRED_STACK, this value represent the amount of stack space used by an interrupt handler between the extctx and intctx structures.
    - In practice this value is the stack space used by the chSchDoReschedule() stack frame.
    - This value can be affected by a variety of external things like compiler version, compiler options, kernel settings (speed/size) and so on.
    - The default for this value is 0x10 which should be a safe value, you can trim this down by defining the macro externally. This would save some valuable RAM space for each thread present in the system.
    - The default value is set into ./os/ports/GCC/ARM7/chcore.h.
  • -
  • IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE thread. Usually there is no need to change this value unless inserting code in the IDLE thread hook macro.
  • -
- -
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_n_f.png b/ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_n_f.png deleted file mode 100644 index a9a062b93b644738d0fe094176d9d3c607d71756..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1146 zcmeAS@N?(olHy`uVBq!ia0y~yU}R-rU{K{?V_;zL_WdKwz`($k|H*Y zfq{X&#M9T6{T8qiRP zT)EJ_F?Ra%H!|P{C@M`_nGNw=`jr*FrcBDnlYPg!<2Fb z<{bG0ZWkSwd`Q2@7_ji&YhL9xzv~QF7;{qP&OKPooFOXf;#JBpW9Cdv3!YQKi!XBg zovW$&LoZce*OSPLj5jvy+SPUQ=FLTi7s&Yf`zP1d-u+>%{yd^%#giE#9V@seGYOU^ z1}QAk^Wk#2a-Tt$ZgBH^DS=U%jDEIiKRtFKj*z(_vc-u_Wcz5IJ2y+ zw|=+xma^8TsqUzooveCSEb?e#@D=w-o}7AmZJ+AdUaoJh{qpbN$(7r+*Y3R@v8=Sc zcj`pbNUrR20pLNjea@?g5O_twnp+bez z_+JZOHP?D(ar=--m{{SBHP=eav|BZP9SONry!VvB)PKvoH%;y`4!gf>*)%(A`|x50 zF;}bkTCHLWRxvCPS+(t$=HeB5m#w@z-{IF0u5GHCC!0^tIQH5!Y|f0yMn_YX`DS08 z)wy=bg6ZFWsq|@mXTNpgg!|&hkMHX<|5$hTSa_eZ?!;~v1*1Ei3fTv3^VipTPCw}! z*3N$L`wR7m**WurU#PyBGVHiIW6kUKm+CEXE>C8@))TLr z`Q_tBdDr%YshRp#J%_ZErE^qTH+arYG5S7P=Mjgs;LNHuX`f&2pL*)X!KvEY^LzU4 zuPZ`KtSZQ5&K`0sI%**FLtpy1S$tS`yH3`0&zopr0QVm) A761SM diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_r_e.html b/ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_r_e.html deleted file mode 100644 index f1287f8..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_r_e.html +++ /dev/null @@ -1,1057 +0,0 @@ - - -ChibiOS/RT: Core Port Implementation - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

Core Port Implementation
- -[ARM7TDMI] -

-
-
- -

ARM7 specific port code, structures and macros. -More...

- -

-Collaboration diagram for Core Port Implementation:
-
-
- - -
-
-

-

Description

-

ARM7 specific port code, structures and macros.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Defines

#define ENABLE_WFI_IDLE   0
 If enabled allows the idle thread to enter a low power mode.
#define CH_ARCHITECTURE_ARM7
 Macro defining the ARM7 architecture.
#define CH_ARCHITECTURE_NAME   "ARM"
 Name of the implemented architecture.
#define CH_CORE_VARIANT_NAME   "ARM7TDMI"
 Name of the architecture variant (optional).
#define SETUP_CONTEXT(workspace, wsize, pf, arg)
 Platform dependent part of the chThdInit() API.
#define IDLE_THREAD_STACK_SIZE   4
 Stack size for the system idle thread.
#define INT_REQUIRED_STACK   0x10
 Per-thread stack overhead for interrupts servicing.
#define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
 Enforces a correct alignment for a stack area size value.
#define THD_WA_SIZE(n)
 Computes the thread working area global size.
#define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
 Static working area allocation.
#define PORT_IRQ_PROLOGUE()
 IRQ prologue code.
#define PORT_IRQ_EPILOGUE()
 IRQ epilogue code.
#define PORT_IRQ_HANDLER(id)   __attribute__((naked)) void id(void)
 IRQ handler function declaration.
#define PORT_FAST_IRQ_HANDLER(id)   __attribute__((interrupt("FIQ"))) void id(void)
 Fast IRQ handler function declaration.
#define port_init()
 Port-related initialization code.
#define port_lock()   asm volatile ("msr CPSR_c, #0x9F" : : : "memory")
 Kernel-lock action.
#define port_unlock()   asm volatile ("msr CPSR_c, #0x1F" : : : "memory")
 Kernel-unlock action.
#define port_lock_from_isr()
 Kernel-lock action from an interrupt handler.
#define port_unlock_from_isr()
 Kernel-unlock action from an interrupt handler.
#define port_disable()
 Disables all the interrupt sources.
#define port_suspend()   asm volatile ("msr CPSR_c, #0x9F" : : : "memory")
 Disables the interrupt sources below kernel-level priority.
#define port_enable()   asm volatile ("msr CPSR_c, #0x1F" : : : "memory")
 Enables all the interrupt sources.
#define port_switch(ntp, otp)
 Performs a context switch between two threads.
#define INLINE   inline
 Inline function modifier.
#define ROMCONST   const
 ROM constant modifier.
#define PACK_STRUCT_STRUCT   __attribute__((packed))
 Packed structure modifier (within).
#define PACK_STRUCT_BEGIN
 Packed structure modifier (before).
#define PACK_STRUCT_END
 Packed structure modifier (after).

-Typedefs

typedef uint32_t stkalign_t
 32 bits stack and memory alignment enforcement.
typedef void * regarm_t
 Generic ARM register.
typedef int32_t bool_t
typedef uint8_t tmode_t
typedef uint8_t tstate_t
typedef uint8_t trefs_t
typedef uint32_t tprio_t
typedef int32_t msg_t
typedef int32_t eventid_t
typedef uint32_t eventmask_t
typedef uint32_t systime_t
typedef int32_t cnt_t

-Functions

void port_halt (void)
void _port_thread_start (void)
 Start a thread by invoking its work function.
-

Define Documentation

- -
-
- - - - -
#define ENABLE_WFI_IDLE   0
-
-
- -

If enabled allows the idle thread to enter a low power mode.

- -

Definition at line 42 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - -
#define CH_ARCHITECTURE_ARM7
-
-
- -

Macro defining the ARM7 architecture.

- -

Definition at line 49 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - -
#define CH_ARCHITECTURE_NAME   "ARM"
-
-
- -

Name of the implemented architecture.

- -

Definition at line 54 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - -
#define CH_CORE_VARIANT_NAME   "ARM7TDMI"
-
-
- -

Name of the architecture variant (optional).

- -

Definition at line 59 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define SETUP_CONTEXT( workspace,
 wsize,
 pf,
 arg 
)
-
-
-Value:
{                          \
-  tp->p_ctx.r13 = (struct intctx *)((uint8_t *)workspace +                  \
-                                     wsize -                                \
-                                     sizeof(struct intctx));                \
-  tp->p_ctx.r13->r4 = pf;                                                   \
-  tp->p_ctx.r13->r5 = arg;                                                  \
-  tp->p_ctx.r13->lr = _port_thread_start;                                   \
-}
-
-

Platform dependent part of the chThdInit() API.

-

This code usually setup the context switching frame represented by an intctx structure.

- -

Definition at line 127 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - -
#define IDLE_THREAD_STACK_SIZE   4
-
-
- -

Stack size for the system idle thread.

-

This size depends on the idle thread implementation, usually the idle thread should take no more space than those reserved by INT_REQUIRED_STACK.

-
Note:
In this port it is set to 4 because the idle thread does have a stack frame when compiling without optimizations.
- -

Definition at line 145 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - -
#define INT_REQUIRED_STACK   0x10
-
-
- -

Per-thread stack overhead for interrupts servicing.

-

This constant is used in the calculation of the correct working area size. This value can be zero on those architecture where there is a separate interrupt stack and the stack space between intctx and extctx is known to be zero.

-
Note:
In this port 0x10 is a safe value, it can be reduced after careful analysis of the generated code.
- -

Definition at line 159 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define STACK_ALIGN( n )    ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
-
-
- -

Enforces a correct alignment for a stack area size value.

- -

Definition at line 165 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define THD_WA_SIZE( n ) 
-
-
-Value:
STACK_ALIGN(sizeof(Thread) +                         \
-                                   sizeof(struct intctx) +                  \
-                                   sizeof(struct extctx) +                  \
-                                  (n) + (INT_REQUIRED_STACK))
-
-

Computes the thread working area global size.

- -

Definition at line 170 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define WORKING_AREA( s,
 n 
)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
-
-
- -

Static working area allocation.

-

This macro is used to allocate a static thread working area aligned as both position and size.

- -

Definition at line 180 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - -
#define PORT_IRQ_PROLOGUE( ) 
-
-
-Value:
{                                               \
-  asm volatile ("stmfd    sp!, {r0-r3, r12, lr}" : : : "memory");           \
-}
-
-

IRQ prologue code.

-

This macro must be inserted at the start of all IRQ handlers enabled to invoke system APIs.

-
Note:
This macro has a different implementation depending if compiled in ARM or THUMB mode.
-
-The THUMB implementation starts with ARM code because interrupt vectors are always invoked in ARM mode regardless the bit 0 value. The switch in THUMB mode is done in the function prologue so it is transparent to the user code.
- -

Definition at line 202 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - -
#define PORT_IRQ_EPILOGUE( ) 
-
-
-Value:
{                                               \
-  asm volatile ("b       _port_irq_common" : : : "memory");                 \
-}
-
-

IRQ epilogue code.

-

This macro must be inserted at the end of all IRQ handlers enabled to invoke system APIs.

-
Note:
This macro has a different implementation depending if compiled in ARM or THUMB mode.
- -

Definition at line 220 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define PORT_IRQ_HANDLER( id )    __attribute__((naked)) void id(void)
-
-
- -

IRQ handler function declaration.

-
Note:
id can be a function name or a vector number depending on the port implementation.
- -

Definition at line 230 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define PORT_FAST_IRQ_HANDLER( id )    __attribute__((interrupt("FIQ"))) void id(void)
-
-
- -

Fast IRQ handler function declaration.

-
Note:
id can be a function name or a vector number depending on the port implementation.
- -

Definition at line 237 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define port_init( void ) 
-
-
- -

Port-related initialization code.

-
Note:
This function is empty in this port.
- -

Definition at line 244 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define port_lock( void )    asm volatile ("msr CPSR_c, #0x9F" : : : "memory")
-
-
- -

Kernel-lock action.

-

Usually this function just disables interrupts but may perform more actions.

-
Note:
In this port it disables the IRQ sources and keeps FIQ sources enabled.
- -

Definition at line 258 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define port_unlock( void )    asm volatile ("msr CPSR_c, #0x1F" : : : "memory")
-
-
- -

Kernel-unlock action.

-

Usually this function just disables interrupts but may perform more actions.

-
Note:
In this port it enables both the IRQ and FIQ sources.
- -

Definition at line 272 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define port_lock_from_isr( void ) 
-
-
- -

Kernel-lock action from an interrupt handler.

-

This function is invoked before invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

-
Note:
Empty in this port.
- -

Definition at line 282 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define port_unlock_from_isr( void ) 
-
-
- -

Kernel-unlock action from an interrupt handler.

-

This function is invoked after invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

-
Note:
Empty in this port.
- -

Definition at line 291 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define port_disable( void ) 
-
-
-Value:
{                                                    \
-  asm volatile ("mrs     r3, CPSR                       \n\t"               \
-                "orr     r3, #0x80                      \n\t"               \
-                "msr     CPSR_c, r3                     \n\t"               \
-                "orr     r3, #0x40                      \n\t"               \
-                "msr     CPSR_c, r3" : : : "r3", "memory");                 \
-}
-
-

Disables all the interrupt sources.

-
Note:
Of course non maskable interrupt sources are not included.
-
-In this port it disables both the IRQ and FIQ sources.
-
-Implements a workaround for spurious interrupts taken from the NXP LPC214x datasheet.
- -

Definition at line 305 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define port_suspend( void )    asm volatile ("msr CPSR_c, #0x9F" : : : "memory")
-
-
- -

Disables the interrupt sources below kernel-level priority.

-
Note:
Interrupt sources above kernel level remains enabled.
-
-In this port it disables the IRQ sources and enables the FIQ sources.
- -

Definition at line 325 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define port_enable( void )    asm volatile ("msr CPSR_c, #0x1F" : : : "memory")
-
-
- -

Enables all the interrupt sources.

-
Note:
In this port it enables both the IRQ and FIQ sources.
- -

Definition at line 337 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define port_switch( ntp,
 otp 
)
-
-
-Value:
{                                             \
-  register Thread *_ntp asm ("r0") = (ntp);                                 \
-  register Thread *_otp asm ("r1") = (otp);                                 \
-  register char *sp asm ("sp");                                             \
-  if (sp - sizeof(struct intctx) - sizeof(Thread) < (char *)_otp)           \
-    asm volatile ("mov     r0, #0                               \n\t"       \
-                  "b       chDbgPanic");                                    \
-  _port_switch_arm(_ntp, _otp);                                             \
-}
-
-

Performs a context switch between two threads.

-

This is the most critical code in any port, this function is responsible for the context switch between 2 threads.

-
Note:
The implementation of this code affects directly the context switch performance so optimize here as much as you can.
-
-Implemented as inlined code for performance reasons.
-
Parameters:
- - - -
[in] ntp the thread to be switched in
[in] otp the thread to be switched out
-
-
- -

Definition at line 368 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - -
#define INLINE   inline
-
-
- -

Inline function modifier.

- -

Definition at line 61 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
#define ROMCONST   const
-
-
- -

ROM constant modifier.

-
Note:
It is set to use the "const" keyword in this port.
- -

Definition at line 67 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
#define PACK_STRUCT_STRUCT   __attribute__((packed))
-
-
- -

Packed structure modifier (within).

-
Note:
It uses the "packed" GCC attribute.
- -

Definition at line 73 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
#define PACK_STRUCT_BEGIN
-
-
- -

Packed structure modifier (before).

-
Note:
Empty in this port.
- -

Definition at line 79 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
#define PACK_STRUCT_END
-
-
- -

Packed structure modifier (after).

-
Note:
Empty in this port.
- -

Definition at line 85 of file ports/GCC/ARM7/chtypes.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef uint32_t stkalign_t
-
-
- -

32 bits stack and memory alignment enforcement.

- -

Definition at line 64 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - -
typedef void* regarm_t
-
-
- -

Generic ARM register.

- -

Definition at line 69 of file ports/GCC/ARM7/chcore.h.

- -
-
- -
-
- - - - -
typedef int32_t bool_t
-
-
-

Fast boolean type.

- -

Definition at line 47 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t tmode_t
-
-
-

Thread flags.

- -

Definition at line 48 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t tstate_t
-
-
-

Thread state.

- -

Definition at line 49 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t trefs_t
-
-
-

Thread references counter.

- -

Definition at line 50 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint32_t tprio_t
-
-
-

Thread priority.

- -

Definition at line 51 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
typedef int32_t msg_t
-
-
-

Inter-thread message.

- -

Definition at line 52 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
typedef int32_t eventid_t
-
-
-

Event Id.

- -

Definition at line 53 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint32_t eventmask_t
-
-
-

Events mask.

- -

Definition at line 54 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint32_t systime_t
-
-
-

System time.

- -

Definition at line 55 of file ports/GCC/ARM7/chtypes.h.

- -
-
- -
-
- - - - -
typedef int32_t cnt_t
-
-
-

Resources counter.

- -

Definition at line 56 of file ports/GCC/ARM7/chtypes.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
void port_halt (void  ) 
-
-
-

Halts the system.

- -
-
- -
-
- - - - - - - - - -
void _port_thread_start (void  ) 
-
-
- -

Start a thread by invoking its work function.

-

If the work function returns chThdExit() is automatically invoked.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_r_e.png b/ChibiOS_2.0.8/docs/html/group___a_r_m7___c_o_r_e.png deleted file mode 100644 index 30111ebe92130e79ebf9c696a9952ce7bd78b2b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1139 zcmeAS@N?(olHy`uVBq!ia0y~yU=(IxU{K{?V_;xN{L8zCfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM@CHt4YQT3@oCaE{-7;bKc%Pn=R}p!S*4&$1wC2`^V-bE51B) z?2mJq*w!^qBv2_syFy6t%C|==+1JY*d3CYbob~n5*~i(=$UnHac)0XHMVTa#iWTujc)@aZ_gr6#Pjsp(`($C?BqMJ4SV zb>WX1m*wleR-fK`t4)``%lG~1mCfww-A_NgSzA=OEKKL#&8NHU!?mWKn&1BVulvix zt9|cO#LDK+`B(K?MRxwV_ty&cv%Jo4dj0Rs(*5t&F24SL?~1QQOQ*7bO}(`}Jl^lk z{rYN?`T8*e6JKsMwd7V{XHc^C$(J~@$7^ZR(W9>CuWwViczlEBZ<(7uYLQQ--kD=n z_2u9;x5u}4`nfNga>!NiB=d^|<%v96mtEJ!f2pe6?wcPSytgjt!|TKPVYRdWO}~>} zzwB>IuXFzUtA6Y6>wdP*ubR7{_>K5UP5;;)ciwCF)I8~9RbJKGMg03~TW`7toLRQZF}2D%xN?Ss&+%LN z_SeDROqMgs2n6OXopAq#%^T(Y0Y3ZRIR28|`=vUN z7_SQ{ht5+8IxC{-cWq^(>#|)*(pn|>P%0c zb5#7=t5@wuewR#?nIvYqZ^c`m#l34bPW0KM_pNSH!|JWP>sfEzsMXcCkJAw0yDK4U zTev1b;7BS8Nx43aYb7hlSnKXE^SBl~-z&`^2k9uUcHz7q5Nsc9TYL z;*Qs@f$MiWUfUWqUux~O<>d^^jvsqBm!%-o#aFZSu2RPD-k_+px%pDP?e}AjJ#VtR z^KNc;`^;G_YsI(c-cfnFok9Am#G);)<=W-??z)^7tq&>+WyyEFz?P!>_C-g`!@F$lcJ+08xE_c$gg<_4TwV7! zXu3;*{DFy6oR#Hern($XnKYqa{`qW%dCV32^6&fXym({Zq%t2DGsBrn9-N;3bLp03 zg-yNLYAz|PlQ{(=52iS|gc-~fm?&Duz2WMSMG`U2AOAXSjpE&T$KiiD%PEHaDTnf_ qe*0f}U3%s9{~AYWK?F!Wm>=cHyKDa~o%0L~3=E#GelF{r5}E*%#ThvO diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m7___s_t_a_r_t_u_p.html b/ChibiOS_2.0.8/docs/html/group___a_r_m7___s_t_a_r_t_u_p.html deleted file mode 100644 index 26556cd..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_r_m7___s_t_a_r_t_u_p.html +++ /dev/null @@ -1,86 +0,0 @@ - - -ChibiOS/RT: Startup Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Startup Support
- -[ARM7TDMI] -

-
-
- -

ARM7 startup code support. -More...

- -

-Collaboration diagram for Startup Support:
-
-
- - -
-
-

-

ARM7 startup code support.

-

ChibiOS/RT provides its own generic startup file for the ARM7 port. Of course it is not mandatory to use it but care should be taken about the startup phase details.

-

Startup Process

-

The startup process, as implemented, is the following:

-
    -
  1. The stacks are initialized by assigning them the sizes defined in the linker script (usually named ch.ld). Stack areas are allocated from the highest RAM location downward.
  2. -
  3. The ARM state is switched to System with both IRQ and FIQ sources disabled.
  4. -
  5. An early initialization routine hwinit0 is invoked, if the symbol is not defined then an empty default routine is executed (weak symbol).
  6. -
  7. DATA and BSS segments are initialized.
  8. -
  9. A late initialization routine hwinit1 is invoked, if the symbol not defined then an empty default routine is executed (weak symbol).
    - This late initialization function is also the proper place for a bootloader, if your application requires one.
  10. -
  11. The main() function is invoked with the parameters argc and argv set to zero.
  12. -
  13. Should the main() function return a branch is performed to the weak symbol MainExitHandler. The default code is an endless empty loop.
  14. -
-

Expected linker symbols

-

The startup code starts at the symbol ResetHandler and expects the following symbols to be defined in the linker script:

-
    -
  • __ram_end__ RAM end location +1.
  • -
  • __und_stack_size__ Undefined Instruction stack size.
  • -
  • __abt_stack_size__ Memory Abort stack size.
  • -
  • __fiq_stack_size__ FIQ service stack size.
  • -
  • __irq_stack_size__ IRQ service stack size.
  • -
  • __svc_stack_size__ SVC service stack size.
  • -
  • __sys_stack_size__ System/User stack size. This is the stack area used by the main() function.
  • -
  • _textdata address of the data segment source read only data.
  • -
  • _data data segment start location.
  • -
  • _edata data segment end location +1.
  • -
  • _bss_start BSS start location.
  • -
  • _bss_end BSS end location +1.
  • -
- -
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m7___s_t_a_r_t_u_p.png b/ChibiOS_2.0.8/docs/html/group___a_r_m7___s_t_a_r_t_u_p.png deleted file mode 100644 index c069fc5d7a195b439bfe47c67a290d09d090f882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1115 zcmeAS@N?(olHy`uVBq!ia0y~yV0gj6z@W;(#=yYfaet{00|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj*OYR+Eew7?}Thx;TbZ%z1m~Y_^D}1lxz@Rg*f|_Xh}H;_|+c zePFK+hm^`;84*EI#a*5v?{{U0d{nShsc-Cbx7A)DZp#^`b}?qpE60ANNrB>?e-1Pl z&n)ME+)}pY-OHCRU#;_-C*R_;YWJ#pYJY>|&zd;6K!NnUOH+6mcg!eJkle=bAnlf; zONrpu|K>Lzs=fMtd6wQ;&w2(4#t#ae9Y%R94ytbztTyl;IPu{_!L7oaisIs8h7TKd z#!O$pyWEF$bKf0L>jpp3ZdV^azh$z=+P)h*)<0H}W)s}n%;}Y4sHQRT=!^v}V#!TH zkvbXT=3EEgpAT~_p7%-SvTb+nl;2l*qu=FP`^4{hyz%8*+x-ckEizN*cPZ(>!g2nb^P zntJ5HgOIw+m!B6#`5v1(>9Nu#PKGSg(z_-13oqZTDZD=+@P<^l%(dSl*YmfS=A3%@ ze!fK6-Ok(d?R5XEEA`8;t21uZ{26gZYpPfF;_2lg+9F)p_VvggJ zeL7EAI2n8T`Tb3!k*U_M5?Nz%tQ`wL*4f-i3~Z(z%n8vQ)giWjJqT zm7DMc?_N+8++ zjrW=p&-d>NzO8rnmi~(SWy?+_zPdT(j^|p(y*~DrKHO&Qi{1L` zW;-gnG&XkUy1dodUCr;<?DUT1K5y^UzGP?!6f|W^*j>JP#lo=Q zYF&>D)<=^H&pgZDJVWYijp|Q{7(E7j0kO z-R%{D= zpMU&7Z - -ChibiOS/RT: ARM Cortex-Mx - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

ARM Cortex-Mx
- -[Ports] -

-
-
- -

-Collaboration diagram for ARM Cortex-Mx:
-
-
- - -
-
-

-

Description

-

This port supports the ARMv6-M and ARMv7-M architectures (all the Cortex-Mx cores).

-

-System logical states in ARMv6-M

-
    -
  • Init. This state is represented by the startup code and the initialization code before chSysInit() is executed. It has not a special hardware state associated.
  • -
  • Normal. This is the state the system has after executing chSysInit(). In this state interrupts are enabled. The processor is running in thread-privileged mode.
  • -
  • Suspended. In this state the interrupt sources are globally disabled. The processor is running in thread-privileged mode. In this mode this state is not different from the Disabled state.
  • -
  • Disabled. In this state the interrupt sources are globally disabled. The processor is running in thread-privileged mode. In this mode this state is not different from the Suspended state.
  • -
  • Sleep. This state is entered with the execution of the specific instruction wfi.
  • -
  • S-Locked. In this state the interrupt sources are globally disabled. The processor is running in thread-privileged mode.
  • -
  • I-Locked. In this state the interrupt sources are globally disabled. The processor is running in exception-privileged mode.
  • -
  • Serving Regular Interrupt. In this state the interrupt sources are not globally masked but only interrupts with higher priority can preempt the current handler. The processor is running in exception-privileged mode.
  • -
  • Serving Fast Interrupt. This state is not implemented in the ARMv6-M implementation.
  • -
  • Serving Non-Maskable Interrupt. The Cortex-M3 has a specific asynchronous NMI vector and several synchronous fault vectors that can be considered belonging to this category.
  • -
  • Halted. Implemented as an infinite loop after globally masking all the maskable interrupt sources. The ARM state is whatever the processor was running when chSysHalt() was invoked.
  • -
-

-System logical states in ARMv7-M

-

The ChibiOS/RT logical System States are mapped as follow in the ARM Cortex-M3 port:

-
    -
  • Init. This state is represented by the startup code and the initialization code before chSysInit() is executed. It has not a special hardware state associated.
  • -
  • Normal. This is the state the system has after executing chSysInit(). In this state the ARM Cortex-M3 has the BASEPRI register set at CORTEX_BASEPRI_USER level, interrupts are not masked. The processor is running in thread-privileged mode.
  • -
  • Suspended. In this state the interrupt sources are not globally masked but the BASEPRI register is set to CORTEX_BASEPRI_KERNEL thus masking any interrupt source with lower or equal priority. The processor is running in thread-privileged mode.
  • -
  • Disabled. Interrupt sources are globally masked. The processor is running in thread-privileged mode.
  • -
  • Sleep. This state is entered with the execution of the specific instruction wfi.
  • -
  • S-Locked. In this state the interrupt sources are not globally masked but the BASEPRI register is set to CORTEX_BASEPRI_KERNEL thus masking any interrupt source with lower or equal priority. The processor is running in thread-privileged mode.
  • -
  • I-Locked. In this state the interrupt sources are not globally masked but the BASEPRI register is set to CORTEX_BASEPRI_KERNEL thus masking any interrupt source with lower or equal priority. The processor is running in exception-privileged mode.
  • -
  • Serving Regular Interrupt. In this state the interrupt sources are not globally masked but only interrupts with higher priority can preempt the current handler. The processor is running in exception-privileged mode.
  • -
  • Serving Fast Interrupt. It is basically the same of the SRI state but it is not possible to switch to the I-Locked state because fast interrupts can preempt the kernel critical zone.
  • -
  • Serving Non-Maskable Interrupt. The Cortex-M3 has a specific asynchronous NMI vector and several synchronous fault vectors that can be considered belonging to this category.
  • -
  • Halted. Implemented as an infinite loop after globally masking all the maskable interrupt sources. The ARM state is whatever the processor was running when chSysHalt() was invoked.
  • -
-

-The ARM Cortex-Mx port notes

-

The ARM Cortex-Mx port is organized as follow:

-
    -
  • The main() function is invoked in thread-privileged mode.
  • -
  • Each thread has a private process stack, the system has a single main stack where all the interrupts and exceptions are processed.
  • -
  • The threads are started in thread-privileged mode.
  • -
  • Interrupt nesting and the other advanced core/NVIC features are supported.
  • -
- - - - -

-

- - -

-

- - -

-

- - -

-

- - - - - -

-

- - -

-

- - -

-

-

-Modules

 Configuration Options
 

ARM Cortex-Mx Configuration Options.

-
 Core Port Implementation
 

ARM Cortex-Mx specific port code, structures and macros.

-
 Startup Support
 

ARM Cortex-Mx startup code support.

-
 NVIC Support
 

ARM Cortex-Mx NVIC support.

-
 STM32F10x Specific Parameters
 LPC11xx Specific Parameters
 LPC13xx Specific Parameters
 LPC11xx Support
 

LPC11xx specific support.

-
 LPC13xx Support
 

LPC13xx specific support.

-
 STM32 Support
 

STM32 specific support.

-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx.png b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx.png deleted file mode 100644 index 3a38620edb92148f656110fc6f927cb6fb5ba2e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26733 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 X#=jbec7`!9Ffe$!`njxgN@xNA**sV9 diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_n_f.html b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_n_f.html deleted file mode 100644 index f3bc110..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_n_f.html +++ /dev/null @@ -1,68 +0,0 @@ - - -ChibiOS/RT: Configuration Options - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-


- - -
-
-

Configuration Options
- -[ARM Cortex-Mx] -

-
-
- -

ARM Cortex-Mx Configuration Options. -More...

- -

-Collaboration diagram for Configuration Options:
-
-
- - -
-
-

-

ARM Cortex-Mx Configuration Options.

-

The ARMCMx port allows some architecture-specific configurations settings that can be overridden by redefining them in chconf.h. Usually there is no need to change the default values.

-
    -
  • INT_REQUIRED_STACK, this value represent the amount of stack space used by an interrupt handler between the extctx and intctx structures.
    - In the current implementation this value is guaranteed to be zero so there is no need to modify this value unless changes are done at the interrupts handling code.
  • -
  • IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE thread. Usually there is no need to change this value unless inserting code in the IDLE thread hook macro.
  • -
  • CORTEX_BASEPRI_KERNEL, this is the BASEPRI value for the kernel lock code. Code running at higher priority levels must not invoke any OS API. This setting is specific to the ARMv7-M architecture.
  • -
  • CORTEX_PRIORITY_SYSTICK, priority of the SYSTICK handler.
  • -
  • CORTEX_PRIORITY_SVCALL, priority of the SVCALL handler.
  • -
  • CORTEX_PRIORITY_PENDSV, priority of the PENDSV handler.
  • -
  • CORTEX_ENABLE_WFI_IDLE, if set to TRUE enables the use of the wfi instruction from within the idle loop. This is defaulted to FALSE because it can create problems with some debuggers. Setting this option to TRUE reduces the system power requirements.
  • -
- -
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_n_f.png b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_n_f.png deleted file mode 100644 index 6f24a0610887b6832eec8165cae47005251db4f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 zcmeAS@N?(olHy`uVBq!ia0y~yV3cKGU{K{?V_;yYH?iesU|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my3etu`U+nUqC1r9_UC2y%Q>g?ciS{TP%5m3^> z6DK0uz*QQVFJYEr!nT0%LF&6g4L{}seis#uvKS6rxe{{F@Wj%z&62-ntb9=-vm)Th zoz07wZ*17Jr|0F%my41oI8UBDIU+LB(9Z0M1-GDVk&czi6OnE{LCd3yoL&4jz7Uug zysf*hWy{O>z}xOyUq8Ni;`-XWP0!an3|-wVzWVCYf?9k=^->mIzgJU(v ztYpN!VlsomqI;qfR5w@c?fd%m>xJKU`>wu~xVvHN`ZdQ7Jv~3C?d+n-+jk_XwS7xa zH0c$-s-Cs~?vt%i3hwUW=YQ_owQ9@}K75@$zKKeFQrFc?u;;E_be3!p%+o5Iki^m~z``5^zTawOKIOjbn z`>;>bf5wV8na4br#QgjI9~mvt*VnjmUFz&+pC8 zub-zf4|s?&s6fcX`iCS6Ul=y8ixnzyFVhIl_(Wr&Kg}8C??=jP%`n z-XLA=TP--o@aMq#_3z(wB`mzU>-&w+3mlhDhtGU&Ir&uZ`sZ=c(XV4t>lXBVxg7oM zOYrKiAA}pM8Qz6xZT}bIm9{Z_MqT%8M%gmYd+V0fY<%%$XV~j^)eP?&kG(DWd4+YU z0sDjZi;BOla?~{X`=@xr3!a|o|DLJEF;6AM@TuNM8< ynevMF{K8tLo##b9wx3;5{^1mx5*&CvuXm5ua%b8URK&o*z~JfX=d#Wzp$P!vAxj+q diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_r_e.html b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_r_e.html deleted file mode 100644 index 315d394..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_r_e.html +++ /dev/null @@ -1,912 +0,0 @@ - - -ChibiOS/RT: Core Port Implementation - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

Core Port Implementation
- -[ARM Cortex-Mx] -

-
-
- -

ARM Cortex-Mx specific port code, structures and macros. -More...

- -

-Collaboration diagram for Core Port Implementation:
-
-
- - -
-
-

-

Description

-

ARM Cortex-Mx specific port code, structures and macros.

- - - - -

-

- - -

-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Modules

 ARMv6-M Specific Implementation
 

ARMv6-M specific port code, structures and macros.

-
 ARMv7-M Specific Implementation
 

ARMv7-M specific port code, structures and macros.

-

-Defines

#define CORTEX_M0   0
 Cortex-M0 variant.
#define CORTEX_M1   1
 Cortex-M1 variant.
#define CORTEX_M3   3
 Cortex-M3 variant.
#define CORTEX_M4   4
 Cortex-M4 variant.
#define CORTEX_PRIORITY_LEVELS   (1 << CORTEX_PRIORITY_BITS)
 Total priority levels.
#define CORTEX_MINIMUM_PRIORITY   (CORTEX_PRIORITY_LEVELS - 1)
 Minimum priority level.
#define CORTEX_MAXIMUM_PRIORITY   0
 Maximum priority level.
#define CORTEX_BASEPRI_DISABLED   0
 Disabled value for BASEPRI register.
#define CORTEX_IS_VALID_PRIORITY(n)   (((n) >= 0) && ((n) < CORTEX_PRIORITY_LEVELS))
 Priority level verification macro.
#define CORTEX_PRIORITY_MASK(n)   ((n) << (8 - CORTEX_PRIORITY_BITS))
 Priority level to priority mask conversion macro.
#define CORTEX_ENABLE_WFI_IDLE   FALSE
 Enables the use of the WFI instruction in the idle thread loop.
#define CORTEX_PRIORITY_SYSTICK   (CORTEX_PRIORITY_LEVELS >> 1)
 SYSTICK handler priority.
#define CORTEX_PRIORITY_SVCALL   (CORTEX_MAXIMUM_PRIORITY + 1)
 SVCALL handler priority.
#define CORTEX_PRIORITY_PENDSV   CORTEX_MINIMUM_PRIORITY
 PENDSV handler priority.
#define CORTEX_BASEPRI_KERNEL   CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_SVCALL+1)
 BASEPRI level within kernel lock.
#define CORTEX_STACK_ALIGNMENT   64
 Stack alignment enforcement.
#define CH_ARCHITECTURE_ARM
 Macro defining a generic ARM architecture.
#define CH_ARCHITECTURE_ARM_vxm
 Macro defining the specific ARM architecture.
#define CH_ARCHITECTURE_NAME   "ARMvx-M"
 Name of the implemented architecture.
#define CH_CORE_VARIANT_NAME   "Cortex-Mx"
 Name of the architecture variant (optional).
#define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
 Enforces a correct alignment for a stack area size value.
#define THD_WA_SIZE(n)
 Computes the thread working area global size.
#define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
 Static working area allocation.
#define INLINE   inline
 Inline function modifier.
#define ROMCONST   const
 ROM constant modifier.
#define PACK_STRUCT_STRUCT   __attribute__((packed))
 Packed structure modifier (within).
#define PACK_STRUCT_BEGIN
 Packed structure modifier (before).
#define PACK_STRUCT_END
 Packed structure modifier (after).

-Typedefs

typedef uint64_t stkalign_t __attribute__ ((aligned(8)))
 Stack and memory alignment enforcement.
typedef void * regarm_t
 Generic ARM register.
typedef int32_t bool_t
typedef uint8_t tmode_t
typedef uint8_t tstate_t
typedef uint8_t trefs_t
typedef uint32_t tprio_t
typedef int32_t msg_t
typedef int32_t eventid_t
typedef uint32_t eventmask_t
typedef uint32_t systime_t
typedef int32_t cnt_t

-Functions

void port_halt (void)
 Halts the system.
-

Define Documentation

- -
-
- - - - -
#define CORTEX_M0   0
-
-
- -

Cortex-M0 variant.

- -

Definition at line 44 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_M1   1
-
-
- -

Cortex-M1 variant.

- -

Definition at line 45 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_M3   3
-
-
- -

Cortex-M3 variant.

- -

Definition at line 46 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_M4   4
-
-
- -

Cortex-M4 variant.

- -

Definition at line 47 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_PRIORITY_LEVELS   (1 << CORTEX_PRIORITY_BITS)
-
-
- -

Total priority levels.

- -

Definition at line 67 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_MINIMUM_PRIORITY   (CORTEX_PRIORITY_LEVELS - 1)
-
-
- -

Minimum priority level.

-

This minimum priority level is calculated from the number of priority bits supported by the specific Cortex-Mx implementation.

- -

Definition at line 74 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_MAXIMUM_PRIORITY   0
-
-
- -

Maximum priority level.

-

The maximum allowed priority level is always zero.

- -

Definition at line 80 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_BASEPRI_DISABLED   0
-
-
- -

Disabled value for BASEPRI register.

-
Note:
ARMv7-M architecture only.
- -

Definition at line 86 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define CORTEX_IS_VALID_PRIORITY( n )    (((n) >= 0) && ((n) < CORTEX_PRIORITY_LEVELS))
-
-
- -

Priority level verification macro.

- -

Definition at line 95 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define CORTEX_PRIORITY_MASK( n )    ((n) << (8 - CORTEX_PRIORITY_BITS))
-
-
- -

Priority level to priority mask conversion macro.

- -

Definition at line 101 of file ports/GCC/ARMCMx/chcore.h.

- -

Referenced by pwm_lld_start().

- -
-
- -
-
- - - - -
#define CORTEX_ENABLE_WFI_IDLE   FALSE
-
-
- -

Enables the use of the WFI instruction in the idle thread loop.

- -

Definition at line 111 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_PRIORITY_SYSTICK   (CORTEX_PRIORITY_LEVELS >> 1)
-
-
- -

SYSTICK handler priority.

-
Note:
The default SYSTICK handler priority is calculated as the priority level in the middle of the numeric priorities range.
- -

Definition at line 120 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_PRIORITY_SVCALL   (CORTEX_MAXIMUM_PRIORITY + 1)
-
-
- -

SVCALL handler priority.

-
Note:
The default SVCALL handler priority is calculated as CORTEX_MAXIMUM_PRIORITY+1, in the ARMv7-M port this reserves the CORTEX_MAXIMUM_PRIORITY priority level as fast interrupts priority level.
-
-The SVCALL vector is only used in the ARMv7-M port, it is available to user in the ARMv6-M port.
- -

Definition at line 138 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_PRIORITY_PENDSV   CORTEX_MINIMUM_PRIORITY
-
-
- -

PENDSV handler priority.

-
Note:
The default PENDSV handler priority is set at the CORTEX_MINIMUM_PRIORITY priority level.
-
-The PENDSV vector is only used in the ARMv7-M legacy port, it is available to user in the ARMv6-M and ARMv7-M ports.
-
-In the ARMv7-M legacy port this value should be not changed from the minimum priority level.
- -

Definition at line 156 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_BASEPRI_KERNEL   CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_SVCALL+1)
-
-
- -

BASEPRI level within kernel lock.

-
Note:
This value must not mask the SVCALL priority level or the kernel would hard fault.
-
-ARMv7-M architecture only.
- -

Definition at line 171 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CORTEX_STACK_ALIGNMENT   64
-
-
- -

Stack alignment enforcement.

-
Note:
The default value is 64 in order to comply with EABI, reducing the value to 32 can save some RAM space if you don't care about binary compatibility with EABI compiled libraries.
-
-Allowed values are 32 or 64.
- -

Definition at line 182 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CH_ARCHITECTURE_ARM
-
-
- -

Macro defining a generic ARM architecture.

- -

Definition at line 192 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CH_ARCHITECTURE_ARM_vxm
-
-
- -

Macro defining the specific ARM architecture.

- -

Definition at line 198 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CH_ARCHITECTURE_NAME   "ARMvx-M"
-
-
- -

Name of the implemented architecture.

- -

Definition at line 203 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define CH_CORE_VARIANT_NAME   "Cortex-Mx"
-
-
- -

Name of the architecture variant (optional).

- -

Definition at line 208 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define STACK_ALIGN( n )    ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
-
-
- -

Enforces a correct alignment for a stack area size value.

- -

Definition at line 261 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define THD_WA_SIZE( n ) 
-
-
-Value:
STACK_ALIGN(sizeof(Thread) +                     \
-                                   sizeof(struct intctx) +              \
-                                   sizeof(struct extctx) +              \
-                                   (n) + (INT_REQUIRED_STACK))
-
-

Computes the thread working area global size.

- -

Definition at line 266 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define WORKING_AREA( s,
 n 
)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
-
-
- -

Static working area allocation.

-

This macro is used to allocate a static thread working area aligned as both position and size.

- -

Definition at line 276 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
#define INLINE   inline
-
-
- -

Inline function modifier.

- -

Definition at line 59 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
#define ROMCONST   const
-
-
- -

ROM constant modifier.

-
Note:
It is set to use the "const" keyword in this port.
- -

Definition at line 65 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
#define PACK_STRUCT_STRUCT   __attribute__((packed))
-
-
- -

Packed structure modifier (within).

-
Note:
It uses the "packed" GCC attribute.
- -

Definition at line 71 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
#define PACK_STRUCT_BEGIN
-
-
- -

Packed structure modifier (before).

-
Note:
Empty in this port.
- -

Definition at line 77 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
#define PACK_STRUCT_END
-
-
- -

Packed structure modifier (after).

-
Note:
Empty in this port.
- -

Definition at line 83 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef uint64_t stkalign_t __attribute__((aligned(8)))
-
-
- -

Stack and memory alignment enforcement.

- -

Definition at line 235 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
typedef void* regarm_t
-
-
- -

Generic ARM register.

- -

Definition at line 245 of file ports/GCC/ARMCMx/chcore.h.

- -
-
- -
-
- - - - -
typedef int32_t bool_t
-
-
-

Fast boolean type.

- -

Definition at line 45 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t tmode_t
-
-
-

Thread flags.

- -

Definition at line 46 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t tstate_t
-
-
-

Thread state.

- -

Definition at line 47 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t trefs_t
-
-
-

Thread references counter.

- -

Definition at line 48 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint32_t tprio_t
-
-
-

Thread priority.

- -

Definition at line 49 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
typedef int32_t msg_t
-
-
-

Inter-thread message.

- -

Definition at line 50 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
typedef int32_t eventid_t
-
-
-

Event Id.

- -

Definition at line 51 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint32_t eventmask_t
-
-
-

Events mask.

- -

Definition at line 52 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint32_t systime_t
-
-
-

System time.

- -

Definition at line 53 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
- -
-
- - - - -
typedef int32_t cnt_t
-
-
-

Resources counter.

- -

Definition at line 54 of file ports/GCC/ARMCMx/chtypes.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
void port_halt (void  ) 
-
-
- -

Halts the system.

-
Note:
The function is declared as a weak symbol, it is possible to redefine it in your application code.
- -

Definition at line 45 of file ports/GCC/ARMCMx/chcore.c.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_r_e.png b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___c_o_r_e.png deleted file mode 100644 index 6bde825767547978116f80673ccf3fb51260e5e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3593 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 - -ChibiOS/RT: LPC11xx Specific Parameters - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

LPC11xx Specific Parameters
- -[ARM Cortex-Mx] -

-
-
- -

-Collaboration diagram for LPC11xx Specific Parameters:
-
-
- - -
-
-

-

Description

-

This file contains the Cortex-M0 specific parameters for the LPC11xx platform.

- - - - - - - - - - -

-Defines

#define CORTEX_MODEL   CORTEX_M0
 Cortex core model.
#define CORTEX_HAS_ST   TRUE
 Systick unit presence.
#define CORTEX_HAS_MPU   FALSE
 Memory Protection unit presence.
#define CORTEX_PRIORITY_BITS   2
 Number of bits in priority masks.
-

Define Documentation

- -
-
- - - - -
#define CORTEX_MODEL   CORTEX_M0
-
-
- -

Cortex core model.

- -

Definition at line 44 of file LPC11xx/cmparams.h.

- -
-
- -
-
- - - - -
#define CORTEX_HAS_ST   TRUE
-
-
- -

Systick unit presence.

- -

Definition at line 49 of file LPC11xx/cmparams.h.

- -
-
- -
-
- - - - -
#define CORTEX_HAS_MPU   FALSE
-
-
- -

Memory Protection unit presence.

- -

Definition at line 54 of file LPC11xx/cmparams.h.

- -
-
- -
-
- - - - -
#define CORTEX_PRIORITY_BITS   2
-
-
- -

Number of bits in priority masks.

- -

Definition at line 59 of file LPC11xx/cmparams.h.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___l_p_c11xx.png b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___l_p_c11xx.png deleted file mode 100644 index 6d75ec2fa80f5eb8cf2d8cb681bd771c0cd3fea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1320 zcmeAS@N?(olHy`uVBq!ia0y~yV030+U{K{?V_;yo@v{310|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj*OYR+Eew7+6kux;TbZ%z1nFe6~!g1p9~g#=cRj1eBJgln1-8 zh%UY1%)dxyQYrtVwbM0jE_k+t-EiC2kP{0VWsd&)knb_E>Z8Jz=^Hph4o((1xPQUj zx4H|bcip^u-8sg3-|v0K@2x+-JD2zAuS3G~x#jo1&-8uvu=f7VGfXZ>;ER2d#%iVr z=~9K1QuzaG7d4;A;BBw>cX|9wd2hn0fS0Na-VAjzRTfjyI1e~pbbRu`tYPWVqemA# zR$yXy^X5&&_nDIt?>jtOGV!*SRl}ZFU#+fPzuwK)%)t<_Hf-b0otbyUdo9G27HvF| z;^D%g=B%W|;M3;f!Z3rUvx7n9zVA7w#1EUhPX+iV{q~t(x@GF?w>MwiP}%xg+xw04 zx1V4B{CUa0$U{nL$K|ZMKUU7L*tGI$R)*Q^W1lSc`qk{uoWIsLxH2r$ur0&>URwR_ z=QeG!i`QS+-@M03?Qortfhu!w(-u{i;7=y9>9^!e=ig|55*4ELcE9=}DX){qm1bD# zOrP&AfBM4=p~io=wwyl_HgD?7MSQgjZ=bukoj=;zB=Yi;Eh?*%>^~Z1JpEO7+i+WM z_`+L;TGOxVg=odsN9(=c?s6f7YxQ}dhaVGm&B*mMdO4$RXXfp&d2aqEwnm-3F)e$i zT)(DWbhTd0uacF|tNbEw@fFVVbn>5^`^81!R(5U3%h?u_+wOcpQJARVBRp9K|$$qiwQa&YS8sDUAQL(Rfew)42Z%^C{)AIr+4UWWy z-q*~WW_M}EvJ1aDuAA!Z^?h$4Z~yP#d13Xm`nfYJpZ5kYk9*(sU=9ag%w$D{?NeUe z{r=K;i@JZ=^#<|wZ&#$IXD;Qxuem0BzMf(0zSnb~@0jp4=XhI%ea-u2%O$VQN{pFz zapAssEBw!XEfTKH4X{_sJ@sCz-1_djfAQ7T<@N0E)}1*YU#Hr2WmCs5AI-{8m!r#1 zGrN3<-d(%-g*tyM%d0r{A9a76=kI#z+w#$D@-_a+Nf#a)tkt~r=vgTZXGBo(F2p1KF)*BzSc6R)>+nduFeg$qxm;e0cbEIm0|LS@w%64^3uva3C_IfuxWiqsP9+ zO(vT(PNY5BzrU)yT>Prme)oCDoUgt2-6w1#WL0K0m(R@1tc$O?0~yr(W$u` - -ChibiOS/RT: LPC13xx Specific Parameters - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

LPC13xx Specific Parameters
- -[ARM Cortex-Mx] -

-
-
- -

-Collaboration diagram for LPC13xx Specific Parameters:
-
-
- - -
-
-

-

Description

-

This file contains the Cortex-M3 specific parameters for the LPC13xx platform.

- - - - - - - - - - -

-Defines

#define CORTEX_MODEL   CORTEX_M3
 Cortex core model.
#define CORTEX_HAS_ST   TRUE
 Systick unit presence.
#define CORTEX_HAS_MPU   FALSE
 Memory Protection unit presence.
#define CORTEX_PRIORITY_BITS   3
 Number of bits in priority masks.
-

Define Documentation

- -
-
- - - - -
#define CORTEX_MODEL   CORTEX_M3
-
-
- -

Cortex core model.

- -

Definition at line 44 of file LPC13xx/cmparams.h.

- -
-
- -
-
- - - - -
#define CORTEX_HAS_ST   TRUE
-
-
- -

Systick unit presence.

- -

Definition at line 49 of file LPC13xx/cmparams.h.

- -
-
- -
-
- - - - -
#define CORTEX_HAS_MPU   FALSE
-
-
- -

Memory Protection unit presence.

- -

Definition at line 54 of file LPC13xx/cmparams.h.

- -
-
- -
-
- - - - -
#define CORTEX_PRIORITY_BITS   3
-
-
- -

Number of bits in priority masks.

- -

Definition at line 59 of file LPC13xx/cmparams.h.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___l_p_c13xx.png b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___l_p_c13xx.png deleted file mode 100644 index 4359f9b97875fb5c191bcc95655b685e86912ac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1323 zcmeAS@N?(olHy`uVBq!ia0y~yV030+U{K{?V_;yo@v{310|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj*OYR+Eew7+B7Fx;TbZ%z1nFeD`cu3HA@~KW~Z-aMW6pGf7ve zNzUfQ!Day)gH+=M87^ZxL_!|F?;*6z6aKwkbt?)dSD2MHTsz z?`^UzEu7rbZu+g%=<`0~_tus7Q@;Ohbhuafd~T)M+usJpC)F4Pk-*=6iBqo_%)0nm z*1Tif5m_c6nfu_!f8mQ;b}kSk6v#hc$4bTBY{t&+Wc`}VQoz=InF1btQ2oRyRe zB!vVS6O2@pm=2_PxUeYvy!%8)bdTP7Z{FHI-=N+5HXX4`oPSPV z&+c=bh^IHpcB{Fs?WYO5oAtUezb(5RA-DW`=X~?IpI6Qgjp|Xn)xX`+YTMql)FUrW ztAA5!@o8JElHkR*j3v{%W7(6;UFS+-Oy=KEf8rIgQf80#qA0JE?MfB@cEsd~%b$KS zL#XlJof5z4A@B3rrOnr+`= zc6@mmbiULl@)n=rIhBRePnuOJ3B28DxB82(jHj{N^yeRwgKf+_H~!x8I3@Gtr|jl~ z1)(l$nLlj``XPNll0jhN&pmJFt7IC_yVxr-KXK-?dE1Ki>hHDPt8eSMTd(?SauW z=Wjo3zKFx!>+kd*=brTBr?uRBZhSXpo6F-(=F88sd}T>{WVHFDRoHa9uZ7FEK915~ z8-L$wo5ZcRWfxNGUf3QsIhf|z_~XdL=e^STQ%{Mn|NeXL_h-+=wHmC}|9cy&X>pce zYLNBSS4TB}6z{v=w8cofIy&=oN$_2zrDtQ@kE^Zw8uR;Xkb0c{mwD+OwugUwGWz!+ z^3^XL&#(KOFMj9!`tMP)@zJSY&TT56(=S*1+kJic@8^dP@BbIVwV%16M6x%fG+-S#~@BWgpeIY`#|V@%wg8X@6n7*6&*FM$h=^>HGDryq@?af0Aopbz5O& zTKh7VsUdlb-t)e?zC`zD?9;q-0}G2cU*G-Vx)T{4v*(MK$jVT`ubn}kR&{jgPe0!A zV0zwnx10BEO5`%CVjuke$p5$PMAZG%`3AX?x!t$7EYIjZTyB&3_|smqT+KH@=he4e zeEm|YeqP}+!@F~IW$L3(ZP7{f-+a-iTsLmVmXe=m4?3)6I^6HFM6F4=_NR_g_S|z@ z-*a_e$yt6gXPe*W?bll3P6gWS-o1Nq{#wb?`Kf1kG?%yY@88M)z^-9^_SWwA469f@ zxDVXiBB?Am^X#SPJehM|m8|=J<>j3pdv4qQR#K4HP`y80R>bybH4K?YDp zWjL9?V2y|v>&-KN-iN<`|9)}Y^Y - -ChibiOS/RT: NVIC Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

NVIC Support
- -[ARM Cortex-Mx] -

-
-
- -

ARM Cortex-Mx NVIC support. -More...

- -

-Collaboration diagram for NVIC Support:
-
-
- - -
-
-

-

Description

-

ARM Cortex-Mx NVIC support.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  CM3_ST
 Structure representing the SYSTICK I/O space. More...
struct  CM3_NVIC
 Structure representing the NVIC I/O space. More...
struct  CM3_SCB
 Structure representing the System Control Block I/O space. More...

-Defines

#define HANDLER_MEM_MANAGE   0
#define HANDLER_BUS_FAULT   1
#define HANDLER_USAGE_FAULT   2
#define HANDLER_SVCALL   7
#define HANDLER_DEBUG_MONITOR   8
#define HANDLER_PENDSV   10
#define HANDLER_SYSTICK   11
#define NVIC_ITCR   (*((IOREG32 *)0xE000E004))
 NVIC ITCR register.
#define NVIC_STIR   (*((IOREG32 *)0xE000EF00))
 NVIC STIR register.
#define STBase   ((CM3_ST *)0xE000E010)
 SYSTICK peripheral base address.
#define NVICBase   ((CM3_NVIC *)0xE000E100)
 NVIC peripheral base address.
#define SCBBase   ((CM3_SCB *)0xE000ED00)
 SCB peripheral base address.

-Typedefs

typedef volatile uint8_t IOREG8
typedef volatile uint32_t IOREG32

-Functions

void NVICEnableVector (uint32_t n, uint32_t prio)
 Sets the priority of an interrupt handler and enables it.
void NVICDisableVector (uint32_t n)
 Disables an interrupt handler.
void NVICSetSystemHandlerPriority (uint32_t handler, uint32_t prio)
 Changes the priority of a system handler.
-

Define Documentation

- -
-
- - - - -
#define HANDLER_MEM_MANAGE   0
-
-
-

MEM MANAGE vector id.

- -

Definition at line 41 of file nvic.h.

- -
-
- -
-
- - - - -
#define HANDLER_BUS_FAULT   1
-
-
-

BUS FAULT vector id.

- -

Definition at line 42 of file nvic.h.

- -
-
- -
-
- - - - -
#define HANDLER_USAGE_FAULT   2
-
-
-

USAGE FAULT vector id.

- -

Definition at line 43 of file nvic.h.

- -
-
- -
-
- - - - -
#define HANDLER_SVCALL   7
-
-
-

SVCALL vector id.

- -

Definition at line 48 of file nvic.h.

- -
-
- -
-
- - - - -
#define HANDLER_DEBUG_MONITOR   8
-
-
-

DEBUG MONITOR vector id.

- -

Definition at line 49 of file nvic.h.

- -
-
- -
-
- - - - -
#define HANDLER_PENDSV   10
-
-
-

PENDSV vector id.

- -

Definition at line 51 of file nvic.h.

- -
-
- -
-
- - - - -
#define HANDLER_SYSTICK   11
-
-
-

SYS TCK vector id.

- -

Definition at line 52 of file nvic.h.

- -
-
- -
-
- - - - -
#define NVIC_ITCR   (*((IOREG32 *)0xE000E004))
-
-
- -

NVIC ITCR register.

- -

Definition at line 60 of file nvic.h.

- -
-
- -
-
- - - - -
#define NVIC_STIR   (*((IOREG32 *)0xE000EF00))
-
-
- -

NVIC STIR register.

- -

Definition at line 65 of file nvic.h.

- -
-
- -
-
- - - - -
#define STBase   ((CM3_ST *)0xE000E010)
-
-
- -

SYSTICK peripheral base address.

- -

Definition at line 80 of file nvic.h.

- -
-
- -
-
- - - - -
#define NVICBase   ((CM3_NVIC *)0xE000E100)
-
-
- -

NVIC peripheral base address.

- -

Definition at line 125 of file nvic.h.

- -
-
- -
-
- - - - -
#define SCBBase   ((CM3_SCB *)0xE000ED00)
-
-
- -

SCB peripheral base address.

- -

Definition at line 156 of file nvic.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef volatile uint8_t IOREG8
-
-
-

8 bits I/O register type.

- -

Definition at line 54 of file nvic.h.

- -
-
- -
-
- - - - -
typedef volatile uint32_t IOREG32
-
-
-

32 bits I/O register type.

- -

Definition at line 55 of file nvic.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void NVICEnableVector (uint32_t  n,
uint32_t  prio 
)
-
-
- -

Sets the priority of an interrupt handler and enables it.

-
Parameters:
- - - -
n the interrupt number
prio the interrupt priority mask
-
-
-
Note:
The parameters are not tested for correctness.
- -

Referenced by pwm_lld_start().

- -
-
- -
-
- - - - - - - - - -
void NVICDisableVector (uint32_t  n ) 
-
-
- -

Disables an interrupt handler.

-
Parameters:
- - -
n the interrupt number
-
-
-
Note:
The parameters are not tested for correctness.
- -

Referenced by pwm_lld_stop().

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void NVICSetSystemHandlerPriority (uint32_t  handler,
uint32_t  prio 
)
-
-
- -

Changes the priority of a system handler.

-
Parameters:
- - - -
handler the system handler number
prio the system handler priority mask
-
-
-
Note:
The parameters are not tested for correctness.
- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___n_v_i_c.png b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___n_v_i_c.png deleted file mode 100644 index bbfa070473cd756742927a4214ae39cce3e97ea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1135 zcmeAS@N?(olHy`uVBq!ia0y~yVED?wz@W;(#=yWZtAD*00|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj*OYR+Eew7+3^7T^vIy=DfY*pDpb!!S*42NtEYG-$x1plVra$ zf4Sl8WN@TgzjLxPN9e)A%*_7QYi5n#9xXnp7_ee;{)G!NNghQWdW`N?Oa6+yQ?%@m z@KLZ}cXz9-7RWN6e6#-28n;DA_U> zoGuk$-tpXu;e72{@tUL+ChQCN60E-$Xn4vVnD|y@)Axy_n(4&!8CP89B?bvs z9xDs-cA5FFYqfm%y6x%8`|7?5SFc;Pyxul&_1gOQwd-tW&it8qEmY<&SChh~Gh6iX zY6V#S?|t-b`m(rtIq$9CX|G+wa(8xQ)%(O>&kJPt)&)7eF7-9Pz~epbMzNvw?thuf zKj(R}+-J(y?@C}|aN$a}us zn7motf9|hWZ5=i0O|ybl={5;5d=a{3zO3cK>0Fhjd&bK%^;h{_i})n-?Do81^^H?? zwxx6`|M~t@u72sJs>mm2mnIdyVrfuax@)({#GqMkU9Wu3D%CwN5Nv7j<8&!U=ciYO zu^T5|3G|$$TDh68^!H77q01Ly0XWBGBb$+FV&7bA#mv5Q$>{_91+J5mrUi-wM?yv*ABeha(nId^>KIqOCRuBx~XbeK)`8+For3v1tR5%YXT-5UwiFZx7{N- z$-vIJrPjflX5M;t_44!ERnf~H?pkT%D`RWs&$X=ijnpoG_TEzhKa;Ojdu2cUzo=?s z&`itqQ)-x3>ON-j2t_%%t&)vKC z-amfdonMJXn}Wl*!dia#0D{VLKum8+&K$f9AYwPQ$L7A_5U(YzftG2a0YVG|w@n6--Etac& z;+Z__gt1SS(s_fGoi@Vd3)k3f(a`7;-@pG}j#;3N7$}eIxc|3r_u?M6!?AnH-EZD_ mc-G+Oqq*~4U_k9ZlkWV@YOkeI;ushh7(8A5T-G@yGywqQG7y&l diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_a_r_t_u_p.html b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_a_r_t_u_p.html deleted file mode 100644 index dd091b5..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_a_r_t_u_p.html +++ /dev/null @@ -1,83 +0,0 @@ - - -ChibiOS/RT: Startup Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Startup Support
- -[ARM Cortex-Mx] -

-
-
- -

ARM Cortex-Mx startup code support. -More...

- -

-Collaboration diagram for Startup Support:
-
-
- - -
-
-

-

ARM Cortex-Mx startup code support.

-

ChibiOS/RT provides its own generic startup file for the ARM Cortex-Mx port. Of course it is not mandatory to use it but care should be taken about the startup phase details.

-

Startup Process

-

The startup process, as implemented, is the following:

-
    -
  1. Interrupts are masked globally.
  2. -
  3. The two stacks are initialized by assigning them the sizes defined in the linker script (usually named ch.ld). Stack areas are allocated from the highest RAM location downward.
  4. -
  5. An early initialization routine hwinit0 is invoked, if the symbol is not defined then an empty default routine is executed (weak symbol).
  6. -
  7. DATA and BSS segments are initialized.
  8. -
  9. The CPU state is switched to Privileged and the PSP stack is used.
  10. -
  11. A late initialization routine hwinit1 is invoked, if the symbol not defined then an empty default routine is executed (weak symbol).
    - This late initialization function is also the proper place for a bootloader, if your application requires one.
  12. -
  13. The main() function is invoked with the parameters argc and argv set to zero.
  14. -
  15. Should the main() function return a branch is performed to the weak symbol MainExitHandler. The default code is an endless empty loop.
  16. -
-

Expected linker symbols

-

The startup code starts at the symbol ResetHandler and expects the following symbols to be defined in the linker script:

-
    -
  • __ram_end__ RAM end location +1.
  • -
  • __main_stack_size__ Exception stack size.
  • -
  • __process_stack_size__ Process stack size. This is the stack area used by the main() function.
  • -
  • _textdata address of the data segment source read only data.
  • -
  • _data data segment start location.
  • -
  • _edata data segment end location +1.
  • -
  • _bss_start BSS start location.
  • -
  • _bss_end BSS end location +1.
  • -
- -
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_a_r_t_u_p.png b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_a_r_t_u_p.png deleted file mode 100644 index 9f65a3dcfab4d4d549cc8031e54563356635c872..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1197 zcmeAS@N?(olHy`uVBq!ia0y~yU}RumU{K{?V_;xdn_?c$z`($k|H*Y zfq{X&#M9T6{T8Y={0n|+ z9v&@83ntIJ?rQY#+mk!*i|y6E|8z`vcBlGWE&I9J^T+2ZG6=$eZ04x|GsXnF*A6Ex zOEoOr)7+6MSN*rME0MGM?@NcP1(&KBmND3zQd0V4%DP~3xd3MjgMq1~<;-%KrQ0`c zVq)n3S`^ImV)v{t1Cd+Jdzd{|UCc;GOjLYt;FWLBC=+zjj7LdJNR45UP%@K(mLZ(6 ze>p=T2Vebm2cGAe*9|Y13+_4f_1m6vA0J)M3n@(Uzq+${d)xMH|Nc6;EUUJ?bN|MU z&+c-CDuL^-->DZ*_^kfOD~8VoD(GBx{veXuC&dS2ETT>KdjnY_u;u- zvHa!JcYKb2EpB?$b$Q+WuZ!x`q;vEc_q>=JpSk|)P3J4KkLITdJlpzvucn-S-A4CJ z^(j$rZ$&!zcAt<@c+XtHn;^k3b<%bswql8)b`+&3G1c_?w)AK=$H=s)3I@HvN>i`Qyi*pKznKwn?nGoVmTBKI!UL>5o2(Q^PJvb$(7#X1sBOx8Le+ zUvaO(vZsx9n>nSY-%ER9VQw~U9zU<_|KgG_oBQ3|&Xr9)RJrtmAgA@!>GNGaluyaN z_3hQw`1=g$S&8TScVCvDn)&u^`CSd~PJ^#qQ*1WfVlMDD;=b^m{Yz?lT;8JfU%y&8 zo}RfuX#3^2dGB*_b?sTFr5``G?|(wZ3M1YX>ltb!rtr92iP~NJ{JTWq?GjcC;a@42 zuiV?BckTLJC zOK!hC8>00ih@~&+)z*$Z8|4+6PP2M2@Jsa`^O;!BJL6hL%$AGw_B+oo{kR%C?>J9` zP}R>*&(j&^G5**Xw)>lekHr9$0e!WTw6vD>2wD7V|)E}_ogzOUhaSY$F``c6Za@DdX&s$(G<7mM=JXP zzk7uN9}77hLXvzKTvU&-KpD@rb6QM|6nT>R;J^LhSFg0x)PC%D>^h~-Xmdt~%W6|u ldHKd2J7$zixWK{FFZOmOZ~NHxnRkFnBTrX9mvv4FO#rlgHB|rr diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_m32_f10x.html b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_m32_f10x.html deleted file mode 100644 index 8336275..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_m32_f10x.html +++ /dev/null @@ -1,136 +0,0 @@ - - -ChibiOS/RT: STM32F10x Specific Parameters - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

STM32F10x Specific Parameters
- -[ARM Cortex-Mx] -

-
-
- -

-Collaboration diagram for STM32F10x Specific Parameters:
-
-
- - -
-
-

-

Description

-

This file contains the Cortex-M3 specific parameters for the STM32F10x platform.

- - - - - - - - - - -

-Defines

#define CORTEX_MODEL   CORTEX_M3
 Cortex core model.
#define CORTEX_HAS_ST   TRUE
 Systick unit presence.
#define CORTEX_HAS_MPU   FALSE
 Memory Protection unit presence.
#define CORTEX_PRIORITY_BITS   4
 Number of bits in priority masks.
-

Define Documentation

- -
-
- - - - -
#define CORTEX_MODEL   CORTEX_M3
-
-
- -

Cortex core model.

- -

Definition at line 44 of file STM32F10x/cmparams.h.

- -
-
- -
-
- - - - -
#define CORTEX_HAS_ST   TRUE
-
-
- -

Systick unit presence.

- -

Definition at line 49 of file STM32F10x/cmparams.h.

- -
-
- -
-
- - - - -
#define CORTEX_HAS_MPU   FALSE
-
-
- -

Memory Protection unit presence.

- -

Definition at line 54 of file STM32F10x/cmparams.h.

- -
-
- -
-
- - - - -
#define CORTEX_PRIORITY_BITS   4
-
-
- -

Number of bits in priority masks.

- -

Definition at line 59 of file STM32F10x/cmparams.h.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_m32_f10x.png b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___s_t_m32_f10x.png deleted file mode 100644 index 06cccf3bb9e771f9f99dacc78b80daf09389ca84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1367 zcmeAS@N?(olHy`uVBq!ia0y~yU<_bjU{K{?V_;wqDcC5_z`($k|H*Y zfq{X&#M9T6{T8GHl4WE<*DIx zaB_Q-x*+pifdKt~44qeU7S7{pdb5h7D&mOkw=3`B{&25)5ESrX5y#C|tw(|U^QKM; z&{z_6@vxdC|I6Kb=AJuaZTwy(f70K&1v&Rl{;5#A`~BujPYwqcB(Owa)+VWjUQc!> zx9tpX#AIC-@b=Wr?|61l&+Yr;iLSm&mou6$zVTI3+LXm)p<~q{Gmrg3Omwui72l$m zZ{NQ&KFHo0Gu=TrzgJtLsBG~IhEG{0Qa5hh(z4=N6eFi{!F`IFG@IbXKM72#N?b=+ zyj(;&IHz=I2ncHk1}fa%{XtPh?r+Y@D_4Y9J};T?YC3iG-*$|M<%-OjjMmL>uz55>B-Muef6t-9OQadEo;o5y0tjcT3F(;Z4YuTF6(S8khWx3T}^RN<$eK6y9n zQAvGS>M&1;NrLa_ncA`wQ|8=y`^}m2T!?yYZnfWZhfCL&%?_R(llwQNaHe-UwvL?wk$h*f28KGErFBQ>ixX+$m`Yh*QL4f>z=->E3wc0yR$&@^3r*)=Q#c9GxVQ) zBf3J^w36fL#$8okea*H_U3vQPm#uno!qIQ+{#vXIv#;Tk*tX^!R-a|mZ&xgHk=1_r^j&)9%av0vFW0ZrV!1c5sKSp!hAAm;(lW2u#-q2i ze#tN%kuiSlw)O1w=NbpEtk<7zc)32rXXA@W=VDm$#2-f{ z&bxo(@%k|H?7#o^P8Syoo6qp!RiMBn-OOoTpRRj7{k!q#^CW{GzvVu-2Si67>duTh z_qpa-w9B4I?I%y7j&Gg!dWT}^rLRf<<{$T1u&m|9WR2SGrxlY^F6O?!I(2JyOxFB+ zg=JRO+r`As|JkwW)1%Gm{_~mzD%`wecCE8oIz^uG$K~`hH{RX<|1);MqnhncejY8m zyXctIdDm-VcG)%4e>nX?3t=%+YICQ@B1s>@Oi~!qI+H|#8y7EpZ7|U?AJBH zxsyv}9%_}_|NVEjzG`oN9pi?&Z*QLcJm?T3;uJS6D5Ukk!dz3W)R(`l%h&xC6Daq| zXApgUYS-Gh9`lJMxBc(V=21+(`Rn|y#LdrETPvIPrfc!{-rt^k&Ft>ddHy*kU%!;9 zpI3S7McxZBxBE;cy0_mv*7<3+>}$x(6=CLa3|_jLsoVmqccoa#bbSt<;E-=3)ho8Y z_vHO8GP)N|G(XwR_n^Dvr%r88r(4SM&A)?}7ysRxxBatR}*7ByS8qB|J%237adkmLI$&X{xd$G`23jK UslEFc7#J8lUHx3vIVCg!0N%rx!vFvP diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v6_m___c_o_r_e.html b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v6_m___c_o_r_e.html deleted file mode 100644 index 3de13f1..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v6_m___c_o_r_e.html +++ /dev/null @@ -1,707 +0,0 @@ - - -ChibiOS/RT: ARMv6-M Specific Implementation - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

ARMv6-M Specific Implementation
- -[Core Port Implementation] -

-
-
- -

ARMv6-M specific port code, structures and macros. -More...

- -

-Collaboration diagram for ARMv6-M Specific Implementation:
-
-
- - -
-
-

-

Description

-

ARMv6-M specific port code, structures and macros.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  cmxctx
 Cortex-Mx exception context. More...

-Defines

#define SETUP_CONTEXT(workspace, wsize, pf, arg)
 Platform dependent part of the chThdInit() API.
#define IDLE_THREAD_STACK_SIZE   8
 Stack size for the system idle thread.
#define INT_REQUIRED_STACK   16
 Per-thread stack overhead for interrupts servicing.
#define PORT_IRQ_PROLOGUE()
 IRQ prologue code.
#define PORT_IRQ_EPILOGUE()
 IRQ epilogue code.
#define PORT_IRQ_HANDLER(id)   void id(void)
 IRQ handler function declaration.
#define PORT_FAST_IRQ_HANDLER(id)   void id(void)
 Fast IRQ handler function declaration.
#define port_init()
 Port-related initialization code.
#define port_lock()   asm volatile ("cpsid i" : : : "memory")
 Kernel-lock action.
#define port_unlock()   asm volatile ("cpsie i" : : : "memory")
 Kernel-unlock action.
#define port_lock_from_isr()   port_lock()
 Kernel-lock action from an interrupt handler.
#define port_unlock_from_isr()   port_unlock()
 Kernel-unlock action from an interrupt handler.
#define port_disable()   asm volatile ("cpsid i" : : : "memory")
 Disables all the interrupt sources.
#define port_suspend()   asm volatile ("cpsid i" : : : "memory")
 Disables the interrupt sources below kernel-level priority.
#define port_enable()   asm volatile ("cpsie i" : : : "memory")
 Enables all the interrupt sources.
#define port_wait_for_interrupt()   asm volatile ("wfi" : : : "memory")
 Enters an architecture-dependent IRQ-waiting mode.

-Functions

 CH_IRQ_HANDLER (SysTickVector)
 System Timer vector.
void _port_switch_from_irq (void)
 Post-IRQ switch code.
void port_switch (Thread *ntp, Thread *otp)
 Performs a context switch between two threads.
void _port_thread_start (void)
 Start a thread by invoking its work function.
void port_halt (void)
 Halts the system.

-Variables

regarm_t _port_saved_pc
 PC register temporary storage.
unsigned _port_irq_nesting
 IRQ nesting counter.
-

Define Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define SETUP_CONTEXT( workspace,
 wsize,
 pf,
 arg 
)
-
-
-Value:
{                          \
-  tp->p_ctx.r13 = (struct intctx *)((uint8_t *)workspace +                  \
-                                     wsize -                                \
-                                     sizeof(struct intctx));                \
-  tp->p_ctx.r13->r4 = pf;                                                   \
-  tp->p_ctx.r13->r5 = arg;                                                  \
-  tp->p_ctx.r13->lr = _port_thread_start;                                   \
-}
-
-

Platform dependent part of the chThdInit() API.

-

This code usually setup the context switching frame represented by an intctx structure.

- -

Definition at line 98 of file chcore_v6m.h.

- -
-
- -
-
- - - - -
#define IDLE_THREAD_STACK_SIZE   8
-
-
- -

Stack size for the system idle thread.

-

This size depends on the idle thread implementation, usually the idle thread should take no more space than those reserved by INT_REQUIRED_STACK.

-
Note:
In this port it is set to 8 because the idle thread does have a stack frame when compiling without optimizations. You may reduce this value to zero when compiling with optimizations.
- -

Definition at line 117 of file chcore_v6m.h.

- -
-
- -
-
- - - - -
#define INT_REQUIRED_STACK   16
-
-
- -

Per-thread stack overhead for interrupts servicing.

-

This constant is used in the calculation of the correct working area size. This value can be zero on those architecture where there is a separate interrupt stack and the stack space between intctx and extctx is known to be zero.

-
Note:
In this port it is conservatively set to 16 because the function chSchDoRescheduleI() can have a stack frame, expecially with compiler optimizations disabled.
- -

Definition at line 132 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - -
#define PORT_IRQ_PROLOGUE( ) 
-
-
-Value: -

IRQ prologue code.

-

This macro must be inserted at the start of all IRQ handlers enabled to invoke system APIs.

- -

Definition at line 140 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - -
#define PORT_IRQ_EPILOGUE( ) 
-
-
-Value:
{                                               \
-  port_lock_from_isr();                                                     \
-  if ((--_port_irq_nesting == 0) && chSchIsRescRequiredExI()) {             \
-    register struct cmxctx *ctxp;                                           \
-                                                                            \
-    asm volatile ("mrs     %0, PSP" : "=r" (ctxp) : );                      \
-    _port_saved_pc = ctxp->pc;                                              \
-    ctxp->pc = _port_switch_from_irq;                                       \
-    return;                                                                 \
-  }                                                                         \
-  port_unlock_from_isr();                                                   \
-}
-
-

IRQ epilogue code.

-

This macro must be inserted at the end of all IRQ handlers enabled to invoke system APIs.

- -

Definition at line 151 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define PORT_IRQ_HANDLER( id )    void id(void)
-
-
- -

IRQ handler function declaration.

-
Note:
id can be a function name or a vector number depending on the port implementation.
- -

Definition at line 169 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define PORT_FAST_IRQ_HANDLER( id )    void id(void)
-
-
- -

Fast IRQ handler function declaration.

-
Note:
id can be a function name or a vector number depending on the port implementation.
- -

Definition at line 176 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_init( void ) 
-
-
-Value:
{                                                       \
-  _port_irq_nesting = 0;                                                    \
-  SCB_AIRCR = AIRCR_VECTKEY | AIRCR_PRIGROUP(0);                            \
-  NVICSetSystemHandlerPriority(HANDLER_SYSTICK,                             \
-    CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_SYSTICK));                         \
-}
-
-

Port-related initialization code.

- -

Definition at line 181 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_lock( void )    asm volatile ("cpsid i" : : : "memory")
-
-
- -

Kernel-lock action.

-

Usually this function just disables interrupts but may perform more actions.

- -

Definition at line 193 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_unlock( void )    asm volatile ("cpsie i" : : : "memory")
-
-
- -

Kernel-unlock action.

-

Usually this function just disables interrupts but may perform more actions.

- -

Definition at line 200 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_lock_from_isr( void )    port_lock()
-
-
- -

Kernel-lock action from an interrupt handler.

-

This function is invoked before invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

-
Note:
Same as port_lock() in this port.
- -

Definition at line 209 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_unlock_from_isr( void )    port_unlock()
-
-
- -

Kernel-unlock action from an interrupt handler.

-

This function is invoked after invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

-
Note:
Same as port_lock() in this port.
- -

Definition at line 218 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_disable( void )    asm volatile ("cpsid i" : : : "memory")
-
-
- -

Disables all the interrupt sources.

- -

Definition at line 223 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_suspend( void )    asm volatile ("cpsid i" : : : "memory")
-
-
- -

Disables the interrupt sources below kernel-level priority.

- -

Definition at line 228 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_enable( void )    asm volatile ("cpsie i" : : : "memory")
-
-
- -

Enables all the interrupt sources.

- -

Definition at line 233 of file chcore_v6m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_wait_for_interrupt( void )    asm volatile ("wfi" : : : "memory")
-
-
- -

Enters an architecture-dependent IRQ-waiting mode.

-

The function is meant to return when an interrupt becomes pending. The simplest implementation is an empty function or macro but this would not take advantage of architecture-specific power saving modes.

-
Note:
Implemented as an inlined WFI instruction.
- -

Definition at line 244 of file chcore_v6m.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
CH_IRQ_HANDLER (SysTickVector  ) 
-
-
- -

System Timer vector.

-

This interrupt is used as system tick.

-
Note:
The timer must be initialized in the startup code.
- -

Definition at line 52 of file chcore_v6m.c.

- -

References CH_IRQ_EPILOGUE, CH_IRQ_PROLOGUE, chSysLockFromIsr, chSysTimerHandlerI(), and chSysUnlockFromIsr.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void _port_switch_from_irq (void  ) 
-
-
- -

Post-IRQ switch code.

-

On entry the stack and the registers are restored by the exception return, the PC value is stored in _port_saved_pc, the interrupts are disabled.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void port_switch (Thread ntp,
Thread otp 
)
-
-
- -

Performs a context switch between two threads.

-

This is the most critical code in any port, this function is responsible for the context switch between 2 threads.

-
Note:
The implementation of this code affects directly the context switch performance so optimize here as much as you can.
-
Parameters:
- - - -
[in] ntp the thread to be switched in
[in] otp the thread to be switched out
-
-
- -
-
- -
-
- - - - - - - - - -
void _port_thread_start (void  ) 
-
-
- -

Start a thread by invoking its work function.

-

If the work function returns chThdExit() is automatically invoked.

- -
-
- -
-
- - - - - - - - - -
void port_halt (void  ) 
-
-
- -

Halts the system.

-

This function is invoked by the operating system when an unrecoverable error is detected (as example because a programming error in the application code that triggers an assertion while in debug mode).

-

This function is invoked by the operating system when an unrecoverable error is detected (as example because a programming error in the application code that triggers an assertion while in debug mode).

-
Note:
The function is declared as a weak symbol, it is possible to redefine it in your application code.
-
-The function is declared as a weak symbol, it is possible to redefine it in your application code.
- -

Definition at line 45 of file ports/GCC/ARMCMx/chcore.c.

- -
-
-

Variable Documentation

- -
- -
- -

PC register temporary storage.

- -

Definition at line 40 of file chcore_v6m.c.

- -
-
- -
-
- - - - -
unsigned _port_irq_nesting
-
-
- -

IRQ nesting counter.

- -

Definition at line 45 of file chcore_v6m.c.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v6_m___c_o_r_e.png b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v6_m___c_o_r_e.png deleted file mode 100644 index cba41fa901d943db47e76ed6b4f4ac6fb556a806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1383 zcmeAS@N?(olHy`uVBq!ia0y~yU~FJuU{K{?V_;zLPP7YSU|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my3rJ z>nm}@i5z)!%+^Ejji#6Rm1KS|Ro$lPwjzI+wQRqw6RFPNcRkWP+lg=9SNjQ3vrY$X z)tNE1(l%xDvi0wOpZk5z+BknwrQL=S73>}~pVq3EYtS%XbZetvRsv2hvCqC2u84gXh8m2U3nc*e@jAQ4O1vfQtB*R`y#`rD%ZzK>q}Z}rB{ zEiX!}ZsopeU%NMVcV^6do6Os>$Ig1m7XP}DzV1Sd>znWwHG1*FsT=-EtkCaVUcb?& zcFuI8XAx!>`!CKko*w@F+pFi3Tyi)S&ogH*I85r$S9U+W=JLyg^z`Q+?nl0QeA6te z`Z}xg+r{S+vtM7*%e|xHGxPJDteE#*rIp$NnXRWwmOUv>OP+Q9>E|uSw-x68 zz0}wG`lHwB=fyoWQvw-sO1ML$?r&zf->S2AuQ%h#&GAxqXS%+W>it%%?pO0iRKcF{ zi8sSBiydc-WB*L={PpOHZbg>0_^zYTvc{)(Z2P(F@yg;GdWJjuW}Es4o}axb{q6K) zTX!56+Rd<{E8@cGX{Pbl>UO<<<$XEl+kNjz_UG5Gk*SxPAb-Z@YQf9+)hFYl*48<` zyklGUr@37IdaJ?v*RPiGC>H+^S>w8|Eo2M7Dg>_d2n3rP8y2 z-&3IIGsFop{a!b{YRQy%h97HhOnG_i@%_2?d9Q5o_@(n@ z+o1=+CO)|_$2e;5T~o`x$gMlg?(gYy7Wv)w6W&WURB1Xb$tiy;Z?xSnBXQ$hmUFxK zBY*jRcRs6Zn(OpAviJDn{bl9v|L`oho)=%s?6Hj@hULPMGfNd@HM8ye+^*N3RX)Dw z)MFioy;CM!e=0w{T6FVmU&~F;PFL^G`EGjZjK$yoVV_sn|I4(xXZO=-hFHVP-PWJ( zI?Oj)pRT$wb6?!LtJkjox6pPea`Y;6EAnhcZPv;CT{q#rGsDrh|Y z>4FVk3@WETcm7<)-!Sdi)+ZO0@30rh?2XVV=Uq(K-(H?Z_{DJ*e=G(zT(qeus5LKRTcq`PccTzW9)@J+n|Vy-jCXXkIdr$^HQe6l+#+DyAT(@JX(^0fq}u()z4*} HQ$iB}!i( z0|NtliKnkC`z>x6UM@CHt4YQT3@qKAE{-7;bKc%PpDmLr!T#aBv9!jr_6yNz@8d*m zDxwM=$F+WZpJUM^voZp^|U((xKXW86aWy)2QTllHs*^fDf zQzdxVB4T5|iV6O_`ugjJZQH`iCD!d>ec*Q2aYC@Sh2)<(f*~>-f`Mvks!CZRXvE{I z+l|D;#Qdgj-@e`d`q9%T-+n30T(AE6^6Rr%#`Zt%ua?~``|>MhtKjwEEq2R)ztGWq zDXXvl@y01Ho_)7`)MhDhZuQYID-~V2ex=J3p#^%Z2hT)F=>6AGig%fKtL96_-wnq$ z#FTy5(G$1t?R(+Xb0)uxj%xpSx6vneS+7ydrrgC{5w~1e_8;wLhzsPBFSXiaZ@+)j z)wlaTe{1Cqe=cLXRLFkWbt7lroYm8}W-71s{d+OQE_ZL-y=8m1Sbe&s6BR#k23Mg~ zt?|rd#c96XF;^qiFaP^_HOtsk5_Uf*e^Pnb$DA&l+Lz|$Io{ko3<@3f3ZjHy5&okYk7J_K5xu9y=%_C zl%tb#j+?X^uPqns-nZ}VWixJBL52wqntK$L#NCy@>hMh8&sOmG!GmOTTFy{Ae^`;y`3ZKiKm#OdXpl3cI<`?S&2t-U8_dQF?|H|9lT(&yUHSCgh)xTAo%5xrmV4M=fyVJX&hT*`oJ%KC>7EiGe zmAr3l^=p~E%)9%H`*bHy_%zAw-s{TCTJqu7bCNe}zOSmz58kGduB^Iu@~;;Ysy=yV zZ$6c>VEg>7|1Zz6*4iDv_@b~)&5nB={@2TQYroh2oM?aO)!Q!&)BA>B^yZSeAHunyLIbU z(fg_k1g9_AeRpd7)I;5!p~(&_PZs`HZg?G7^5^d3 - -ChibiOS/RT: ARMv7-M Specific Implementation - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

ARMv7-M Specific Implementation
- -[Core Port Implementation] -

-
-
- -

ARMv7-M specific port code, structures and macros. -More...

- -

-Collaboration diagram for ARMv7-M Specific Implementation:
-
-
- - -
-
-

-

Description

-

ARMv7-M specific port code, structures and macros.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Defines

#define SETUP_CONTEXT(workspace, wsize, pf, arg)
 Platform dependent part of the chThdInit() API.
#define IDLE_THREAD_STACK_SIZE   8
 Stack size for the system idle thread.
#define INT_REQUIRED_STACK   16
 Per-thread stack overhead for interrupts servicing.
#define PORT_IRQ_PROLOGUE()
 IRQ prologue code.
#define PORT_IRQ_EPILOGUE()   _port_irq_epilogue()
 IRQ epilogue code.
#define PORT_IRQ_HANDLER(id)   void id(void)
 IRQ handler function declaration.
#define PORT_FAST_IRQ_HANDLER(id)   void id(void)
 Fast IRQ handler function declaration.
#define port_init()
 Port-related initialization code.
#define port_lock()
 Kernel-lock action.
#define port_unlock()
 Kernel-unlock action.
#define port_lock_from_isr()   port_lock()
 Kernel-lock action from an interrupt handler.
#define port_unlock_from_isr()   port_unlock()
 Kernel-unlock action from an interrupt handler.
#define port_disable()   asm volatile ("cpsid i" : : : "memory")
 Disables all the interrupt sources.
#define port_suspend()
 Disables the interrupt sources below kernel-level priority.
#define port_enable()
 Enables all the interrupt sources.
#define port_wait_for_interrupt()
 Enters an architecture-dependent IRQ-waiting mode.

-Functions

 CH_IRQ_HANDLER (SysTickVector)
 System Timer vector.
void SVCallVector (void)
 SVC vector.
void _port_irq_epilogue (void)
 Reschedule verification and setup after an IRQ.
void _port_switch_from_isr (void)
 Post-IRQ switch code.
void port_switch (Thread *ntp, Thread *otp)
 Performs a context switch between two threads.
void _port_thread_start (void)
 Start a thread by invoking its work function.
void port_halt (void)
 Halts the system.
-

Define Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define SETUP_CONTEXT( workspace,
 wsize,
 pf,
 arg 
)
-
-
-Value:
{                          \
-  tp->p_ctx.r13 = (struct intctx *)((uint8_t *)workspace +                  \
-                                     wsize -                                \
-                                     sizeof(struct intctx));                \
-  tp->p_ctx.r13->r4 = pf;                                                   \
-  tp->p_ctx.r13->r5 = arg;                                                  \
-  tp->p_ctx.r13->lr = _port_thread_start;                                   \
-}
-
-

Platform dependent part of the chThdInit() API.

-

This code usually setup the context switching frame represented by an intctx structure.

- -

Definition at line 87 of file chcore_v7m.h.

- -
-
- -
-
- - - - -
#define IDLE_THREAD_STACK_SIZE   8
-
-
- -

Stack size for the system idle thread.

-

This size depends on the idle thread implementation, usually the idle thread should take no more space than those reserved by INT_REQUIRED_STACK.

-
Note:
In this port it is set to 8 because the idle thread does have a stack frame when compiling without optimizations. You may reduce this value to zero when compiling with optimizations.
- -

Definition at line 106 of file chcore_v7m.h.

- -
-
- -
-
- - - - -
#define INT_REQUIRED_STACK   16
-
-
- -

Per-thread stack overhead for interrupts servicing.

-

This constant is used in the calculation of the correct working area size. This value can be zero on those architecture where there is a separate interrupt stack and the stack space between intctx and extctx is known to be zero.

-
Note:
In this port it is conservatively set to 16 because the function chSchDoRescheduleI() can have a stack frame, expecially with compiler optimizations disabled.
- -

Definition at line 121 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - -
#define PORT_IRQ_PROLOGUE( ) 
-
-
- -

IRQ prologue code.

-

This macro must be inserted at the start of all IRQ handlers enabled to invoke system APIs.

- -

Definition at line 129 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - -
#define PORT_IRQ_EPILOGUE( )    _port_irq_epilogue()
-
-
- -

IRQ epilogue code.

-

This macro must be inserted at the end of all IRQ handlers enabled to invoke system APIs.

- -

Definition at line 136 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define PORT_IRQ_HANDLER( id )    void id(void)
-
-
- -

IRQ handler function declaration.

-
Note:
id can be a function name or a vector number depending on the port implementation.
- -

Definition at line 143 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define PORT_FAST_IRQ_HANDLER( id )    void id(void)
-
-
- -

Fast IRQ handler function declaration.

-
Note:
id can be a function name or a vector number depending on the port implementation.
- -

Definition at line 150 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_init( void ) 
-
-
-Value: -

Port-related initialization code.

- -

Definition at line 155 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_lock( void ) 
-
-
-Value:
{                                                       \
-  asm volatile ("bl      _port_lock" : : : "r3", "lr", "memory");           \
-}
-
-

Kernel-lock action.

-

Usually this function just disables interrupts but may perform more actions.

-
Note:
In this port this it raises the base priority to kernel level.
- -

Definition at line 175 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_unlock( void ) 
-
-
-Value:
{                                                     \
-  asm volatile ("bl      _port_unlock" : : : "r3", "lr", "memory");         \
-}
-
-

Kernel-unlock action.

-

Usually this function just disables interrupts but may perform more actions.

-
Note:
In this port this it lowers the base priority to user level.
- -

Definition at line 192 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_lock_from_isr( void )    port_lock()
-
-
- -

Kernel-lock action from an interrupt handler.

-

This function is invoked before invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

-
Note:
Same as port_lock() in this port.
- -

Definition at line 204 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_unlock_from_isr( void )    port_unlock()
-
-
- -

Kernel-unlock action from an interrupt handler.

-

This function is invoked after invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

-
Note:
Same as port_unlock() in this port.
- -

Definition at line 213 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_disable( void )    asm volatile ("cpsid i" : : : "memory")
-
-
- -

Disables all the interrupt sources.

-
Note:
Of course non maskable interrupt sources are not included.
-
-In this port it disables all the interrupt sources by raising the priority mask to level 0.
- -

Definition at line 221 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_suspend( void ) 
-
-
-Value:
{                                                    \
-  register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_KERNEL;                 \
-  asm volatile ("msr     BASEPRI, %0                    \n\t"               \
-                "cpsie   i" : : "r" (tmp) : "memory");                      \
-}
-
-

Disables the interrupt sources below kernel-level priority.

-
Note:
Interrupt sources above kernel level remains enabled.
-
-In this port it raises/lowers the base priority to kernel level.
- -

Definition at line 228 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_enable( void ) 
-
-
-Value:
{                                                     \
-  register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_DISABLED;               \
-  asm volatile ("msr     BASEPRI, %0                    \n\t"               \
-                "cpsie   i" : : "r" (tmp) : "memory");                      \
-}
-
-

Enables all the interrupt sources.

-
Note:
In this port it lowers the base priority to user level.
- -

Definition at line 238 of file chcore_v7m.h.

- -
-
- -
-
- - - - - - - - - -
#define port_wait_for_interrupt( void ) 
-
-
-Value:
{                                         \
-  asm volatile ("wfi" : : : "memory");                                      \
-}
-
-

Enters an architecture-dependent IRQ-waiting mode.

-

The function is meant to return when an interrupt becomes pending. The simplest implementation is an empty function or macro but this would not take advantage of architecture-specific power saving modes.

-
Note:
Implemented as an inlined WFI instruction.
- -

Definition at line 253 of file chcore_v7m.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
CH_IRQ_HANDLER (SysTickVector  ) 
-
-
- -

System Timer vector.

-

This interrupt is used as system tick.

-
Note:
The timer must be initialized in the startup code.
- -

Definition at line 82 of file chcore_v7m.c.

- -

References CH_IRQ_EPILOGUE, CH_IRQ_PROLOGUE, chSysLockFromIsr, chSysTimerHandlerI(), and chSysUnlockFromIsr.

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void SVCallVector (void  ) 
-
-
- -

SVC vector.

-

The SVC vector is used for exception mode re-entering after a context switch.

- -

Definition at line 98 of file chcore_v7m.c.

- -

References port_unlock_from_isr().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
- -
-
- - - - - - - - - -
void _port_irq_epilogue (void  ) 
-
-
- -

Reschedule verification and setup after an IRQ.

- -
-
- -
-
- - - - - - - - - -
void _port_switch_from_isr (void  ) 
-
-
- -

Post-IRQ switch code.

-

Exception handlers return here for context switching.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void port_switch (Thread ntp,
Thread otp 
)
-
-
- -

Performs a context switch between two threads.

-

This is the most critical code in any port, this function is responsible for the context switch between 2 threads.

-
Note:
The implementation of this code affects directly the context switch performance so optimize here as much as you can.
-
Parameters:
- - - -
[in] ntp the thread to be switched in
[in] otp the thread to be switched out
-
-
- -
-
- -
-
- - - - - - - - - -
void _port_thread_start (void  ) 
-
-
- -

Start a thread by invoking its work function.

-

If the work function returns chThdExit() is automatically invoked.

- -
-
- -
-
- - - - - - - - - -
void port_halt (void  ) 
-
-
- -

Halts the system.

-

This function is invoked by the operating system when an unrecoverable error is detected (as example because a programming error in the application code that triggers an assertion while in debug mode).

-

This function is invoked by the operating system when an unrecoverable error is detected (as example because a programming error in the application code that triggers an assertion while in debug mode).

-
Note:
The function is declared as a weak symbol, it is possible to redefine it in your application code.
-
-The function is declared as a weak symbol, it is possible to redefine it in your application code.
- -

Definition at line 45 of file ports/GCC/ARMCMx/chcore.c.

- -

References port_disable().

- -

-Here is the call graph for this function:
-
-
- - -
-

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v7_m___c_o_r_e.png b/ChibiOS_2.0.8/docs/html/group___a_r_m_c_mx___v7_m___c_o_r_e.png deleted file mode 100644 index 2746d49cbaee523103499d9bdc4934df3cc54a19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1376 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 - -ChibiOS/RT: AT91SAM7 Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

AT91SAM7 Support
- -[ARM7TDMI] -

-
-
- -

AT91SAM7 specific support. -More...

- -

-Collaboration diagram for AT91SAM7 Support:
-
-
- - -
-
-

-

Description

-

AT91SAM7 specific support.

-

The AT91SAM7 support includes:

-
    -
  • Buffered, interrupt driven, serial driver.
  • -
  • EMAC driver with MII support.
  • -
  • A demo supporting the kernel test suite.
  • -
  • A Web server demo using the uIP TCP/IP stack.
  • -
  • A Web server demo using the lwIP TCP/IP stack.
  • -
- - - - -

-

- - -

-

- - -

-

- - -

-

- - -

-

-

-Modules

 AT91SAM7 HAL Support
 

HAL support.

-
 AT91SAM7 I/O Ports Support
 

I/O Ports peripherals support.

-
 AT91SAM7 USART Support
 

USART peripherals support.

-
 AT91SAM7 EMAC Support
 

EMAC peripheral support.

-
 AT91SAM7 MII Support
 

EMAC+PHY peripheral support.

-
-
-
-Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7.png b/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7.png deleted file mode 100644 index 507da371dadad5a85c80110d6cc29570e47bc035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10298 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 diff --git a/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___h_a_l.html b/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___h_a_l.html deleted file mode 100644 index b7fbe65..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___h_a_l.html +++ /dev/null @@ -1,207 +0,0 @@ - - -ChibiOS/RT: AT91SAM7 HAL Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

AT91SAM7 HAL Support
- -[AT91SAM7 Support] -

-
-
- -

HAL support. -More...

- -

-Collaboration diagram for AT91SAM7 HAL Support:
-
-
- - -
-
-

-

Description

-

HAL support.

- - - - - - - - - - - - - - - - -

-Defines

#define PLATFORM_NAME   "AT91SAM7x"
 Platform name.
#define AT91SAM7_SPURIOUS_HANDLER_HOOK()
 Default action for the spurious handler, nothing.
#define AT91SAM7_USBDIV   AT91C_CKGR_USBDIV_1
 Default divider for the USB clock - half the PLL clock.

-Functions

void hal_lld_init (void)
 Low level HAL driver initialization.
void at91sam7_clock_init (void)
 AT91SAM7 clocks and PLL initialization.

-Variables

const PALConfig pal_default_config
 PAL setup.
-

Define Documentation

- -
-
- - - - -
#define PLATFORM_NAME   "AT91SAM7x"
-
-
- -

Platform name.

- -

Definition at line 47 of file platforms/AT91SAM7/hal_lld.h.

- -
-
- -
-
- - - - - - - - -
#define AT91SAM7_SPURIOUS_HANDLER_HOOK( ) 
-
-
- -

Default action for the spurious handler, nothing.

- -

Definition at line 57 of file platforms/AT91SAM7/hal_lld.h.

- -
-
- -
-
- - - - -
#define AT91SAM7_USBDIV   AT91C_CKGR_USBDIV_1
-
-
- -

Default divider for the USB clock - half the PLL clock.

- -

Definition at line 64 of file platforms/AT91SAM7/hal_lld.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
void hal_lld_init (void  ) 
-
-
- -

Low level HAL driver initialization.

- -
-
- -
-
- - - - - - - - - -
void at91sam7_clock_init (void  ) 
-
-
- -

AT91SAM7 clocks and PLL initialization.

-
Note:
All the involved constants come from the file board.h.
- -
-
-

Variable Documentation

- -
-
- - - - -
const PALConfig pal_default_config
-
-
-Initial value:
-{
-  {VAL_PIOA_ODSR, VAL_PIOA_OSR, VAL_PIOA_PUSR},
-
-
-  {VAL_PIOB_ODSR, VAL_PIOB_OSR, VAL_PIOB_PUSR}
-
-}
-
-

PAL setup.

-

Digital I/O ports static configuration as defined in board.h.

- -

Definition at line 49 of file platforms/AT91SAM7/hal_lld.c.

- -

Referenced by halInit().

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___h_a_l.png deleted file mode 100644 index a8c1e77b451033db2c91591ef5e9f2340a740089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1320 zcmeAS@N?(olHy`uVBq!ia0y~yV030+U{K{?V_;yo@v{310|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj)xiJ@+IS7+6kux;TbZ%z1nFZ1xm)8TJqFbIh*J@Ve^UbX)Z0 zLiOl1a<3Lzs=QgK@TJwsYwbk2s45{}hZhF}d{#Cs|5c__aj9AE)_;Z0FCo=aD>pEo|=_Wt>%-)D?JpUIzITW4*2ejkGi68OTDsA12X zuUFh7~ya6vLd+VbVglaD(( zr=_N{8tnP!ds2WQkJ%#9!A4|ykE{d7+A!|!?(U6;7btF?%Cj}=X{)14NUTqri%Wu$ ziW1X-6b~1chLaOII2!(D6~zhZ*VhG>vj%5;dwDBW*86*;XRvj2Y;@1QztazXsc6bF zJHKb9$|Dv9zIE&4e{Op5uglEXxcTYRr_)be`c-Gwq_fRF+gjUu>`!>_u|IoNBqNy%Bqy{_)v9lMm3`xR72=9_U+#+RQQ5rVfXs_`=M1X zxx43^N}2aQa^{%Hb9M4%6JKBBwO3QOzWlyC?|JXR>1+S5F$Dhu__OFDof; z|EqDz*8YZjeu@{EkDPdLe4XCcCxvs>W?g%=>DHIu!P`F{dvJPNo8+SU+mDNTHCNyH zZn02gW7><;TiTxAI=7AQh4%R`H5%7=_+@u}@LImPFwTpU;klXj{PuT~IPTxtU%yW% z{%Q4}AJ>0Z-g+u&I`i6xnA~_6u zUGV!$LNA-y#pf|@zW?^d$J^Vhzip{oe>KjQBf-b3q_v<*_K)t;HAkj5&bRrQ%vW)H zXWg}_QTNL#U+q2?aHYfWees0l>t0{km(^+VZB}B{tU2jXvCmeVxmI6gYxs9Z$>prr zo#%@m&GdO+Hs6l*)?4}g`DWsEuga>Aw+bv@GUYg(!UdH@~|jD*WB&IqiPSmI=SSc1^c_Yg)lY_tsf;{z;$1 zI~f?Nzt?@fb>qfn|0-Kcb(Up}Ul=Sml`1ZM|L<^n_&r_Au*uPD!(JEv%kupinj5lX zYDRp;-|t7|B!gH>tfre=$=+cpC{B9xCS|Xl-Bh7?1`90~Ax%TBj?No}LZY1~H&iTK zr!xJ~#l@?08Ll(N%%5ZP*KMs?71IRqrBnVN?dxsxU!i?6HNi+_aoO)<@eF#5JFevD z?UA#VTci~FRazs&Fgx4+kFYh{A|*pfA;CsahGdwmC@9FF=B%W|@NM - -ChibiOS/RT: AT91SAM7 EMAC Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

AT91SAM7 EMAC Support
- -[AT91SAM7 Support] -

-
-
- -

EMAC peripheral support. -More...

- -

-Collaboration diagram for AT91SAM7 EMAC Support:
-
-
- - -
-
-

-

Description

-

EMAC peripheral support.

-

the MAC Driver supports the AT91SAM7 EMAC peripheral.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  EMACDescriptor
 Structure representing a buffer physical descriptor. More...
struct  MACDriver
 Structure representing a MAC driver. More...
struct  MACTransmitDescriptor
 Structure representing a transmit descriptor. More...
struct  MACReceiveDescriptor
 Structure representing a receive descriptor. More...

-Defines

#define MAC_TRANSMIT_BUFFERS   2
 Number of available transmit buffers.
#define MAC_RECEIVE_BUFFERS   2
 Number of available receive buffers.
#define MAC_BUFFERS_SIZE   1518
 Maximum supported frame size.
#define EMAC_INTERRUPT_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 3)
 Interrupt priority level for the EMAC device.

-Functions

 CH_IRQ_HANDLER (irq_handler)
 EMAC IRQ veneer handler.
void mac_lld_init (void)
 Low level MAC initialization.
void mac_lld_set_address (MACDriver *macp, const uint8_t *p)
 Low level MAC address setup.
msg_t max_lld_get_transmit_descriptor (MACDriver *macp, MACTransmitDescriptor *tdp)
 Returns a transmission descriptor.
size_t mac_lld_write_transmit_descriptor (MACTransmitDescriptor *tdp, uint8_t *buf, size_t size)
 Writes to a transmit descriptor's stream.
void mac_lld_release_transmit_descriptor (MACTransmitDescriptor *tdp)
 Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.
msg_t max_lld_get_receive_descriptor (MACDriver *macp, MACReceiveDescriptor *rdp)
 Returns a receive descriptor.
size_t mac_lld_read_receive_descriptor (MACReceiveDescriptor *rdp, uint8_t *buf, size_t size)
 Reads from a receive descriptor's stream.
void mac_lld_release_receive_descriptor (MACReceiveDescriptor *rdp)
 Releases a receive descriptor.
bool_t mac_lld_poll_link_status (MACDriver *macp)
 Updates and returns the link status.

-Variables

MACDriver ETH1
 Ethernet driver 1.
-

Define Documentation

- -
-
- - - - -
#define MAC_TRANSMIT_BUFFERS   2
-
-
- -

Number of available transmit buffers.

- -

Definition at line 94 of file platforms/AT91SAM7/mac_lld.h.

- -
-
- -
-
- - - - -
#define MAC_RECEIVE_BUFFERS   2
-
-
- -

Number of available receive buffers.

- -

Definition at line 101 of file platforms/AT91SAM7/mac_lld.h.

- -
-
- -
-
- - - - -
#define MAC_BUFFERS_SIZE   1518
-
-
- -

Maximum supported frame size.

- -

Definition at line 108 of file platforms/AT91SAM7/mac_lld.h.

- -
-
- -
-
- - - - -
#define EMAC_INTERRUPT_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 3)
-
-
- -

Interrupt priority level for the EMAC device.

- -

Definition at line 115 of file platforms/AT91SAM7/mac_lld.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
CH_IRQ_HANDLER (irq_handler  ) 
-
-
- -

EMAC IRQ veneer handler.

- -

Definition at line 149 of file platforms/AT91SAM7/mac_lld.c.

- -

References CH_IRQ_EPILOGUE, and CH_IRQ_PROLOGUE.

- -
-
- -
-
- - - - - - - - - -
void mac_lld_init (void  ) 
-
-
- -

Low level MAC initialization.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void mac_lld_set_address (MACDriver macp,
const uint8_t p 
)
-
-
- -

Low level MAC address setup.

-
Parameters:
- - - -
[in] macp pointer to the MACDriver object
[in] p pointer to a six bytes buffer containing the MAC address. If this parameter is set to NULL then a system default MAC is used. The MAC address must be aligned with the most significant byte first.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
msg_t max_lld_get_transmit_descriptor (MACDriver macp,
MACTransmitDescriptor tdp 
)
-
-
- -

Returns a transmission descriptor.

-

One of the available transmission descriptors is locked and returned.

-
Parameters:
- - - -
[in] macp pointer to the MACDriver object
[out] tdp pointer to a MACTransmitDescriptor structure
-
-
-
Returns:
The operation status.
-
Return values:
- - - -
RDY_OK the descriptor was obtained.
RDY_TIMEOUT descriptor not available.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
size_t mac_lld_write_transmit_descriptor (MACTransmitDescriptor tdp,
uint8_t buf,
size_t  size 
)
-
-
- -

Writes to a transmit descriptor's stream.

-
Parameters:
- - - - -
[in] tdp pointer to a MACTransmitDescriptor structure
[in] buf pointer to the buffer cointaining the data to be written
[in] size number of bytes to be written
-
-
-
Returns:
The number of bytes written into the descriptor's stream, this value can be less than the amount specified in the parameter size if the maximum frame size is reached.
- -
-
- -
-
- - - - - - - - - -
void mac_lld_release_transmit_descriptor (MACTransmitDescriptor tdp ) 
-
-
- -

Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.

-
Parameters:
- - -
[in] tdp the pointer to the MACTransmitDescriptor structure
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
msg_t max_lld_get_receive_descriptor (MACDriver macp,
MACReceiveDescriptor rdp 
)
-
-
- -

Returns a receive descriptor.

-
Parameters:
- - - -
[in] macp pointer to the MACDriver object
[out] rdp pointer to a MACReceiveDescriptor structure
-
-
-
Returns:
The operation status.
-
Return values:
- - - -
RDY_OK the descriptor was obtained.
RDY_TIMEOUT descriptor not available.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
size_t mac_lld_read_receive_descriptor (MACReceiveDescriptor rdp,
uint8_t buf,
size_t  size 
)
-
-
- -

Reads from a receive descriptor's stream.

-
Parameters:
- - - - -
[in] rdp pointer to a MACReceiveDescriptor structure
[in] buf pointer to the buffer that will receive the read data
[in] size number of bytes to be read
-
-
-
Returns:
The number of bytes read from the descriptor's stream, this value can be less than the amount specified in the parameter size if there are no more bytes to read.
- -
-
- -
-
- - - - - - - - - -
void mac_lld_release_receive_descriptor (MACReceiveDescriptor rdp ) 
-
-
- -

Releases a receive descriptor.

-

The descriptor and its buffer are made available for more incoming frames.

-
Parameters:
- - -
[in] rdp the pointer to the MACReceiveDescriptor structure
-
-
- -
-
- -
-
- - - - - - - - - -
bool_t mac_lld_poll_link_status (MACDriver macp ) 
-
-
- -

Updates and returns the link status.

-
Parameters:
- - -
[in] macp pointer to the MACDriver object
-
-
-
Returns:
The link status.
-
Return values:
- - - -
TRUE if the link is active.
FALSE if the link is down.
-
-
- -
-
-

Variable Documentation

- -
-
- - - - -
MACDriver ETH1
-
-
- -

Ethernet driver 1.

- -

Definition at line 65 of file platforms/AT91SAM7/mac_lld.c.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___m_a_c.png b/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___m_a_c.png deleted file mode 100644 index 4433e0df78a1e877cd5aab4c2f13c59b38e2c713..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2465 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 - -ChibiOS/RT: AT91SAM7 MII Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

AT91SAM7 MII Support
- -[AT91SAM7 Support] -

-
-
- -

EMAC+PHY peripheral support. -More...

- -

-Collaboration diagram for AT91SAM7 MII Support:
-
-
- - -
-
-

-

Description

-

EMAC+PHY peripheral support.

-

This driver supports the AT91SAM7 EMAC peripheral communicating with an external PHY transceiver. The driver currently supports the Micrel KS8721 PHY and the Davicom DV9161 modules.

- - - - - - - - - - - - - - - - - - - - -

-Defines

#define PHY_HARDWARE   PHY_MICREL_KS8721
 PHY manufacturer and model.
#define PHY_ADDRESS   1
 Pins latched by the PHY at reset.

-Typedefs

typedef uint16_t phyreg_t
 Type of a PHY register value.
typedef uint8_t phyaddr_t
 Type of a PHY register address.

-Functions

void miiInit (void)
 Low level MII driver initialization.
void miiReset (MACDriver *macp)
 Resets a PHY device.
phyreg_t miiGet (MACDriver *macp, phyaddr_t addr)
 Reads a PHY register through the MII interface.
void miiPut (MACDriver *macp, phyaddr_t addr, phyreg_t value)
 Writes a PHY register through the MII interface.
-

Define Documentation

- -
-
- - - - -
#define PHY_HARDWARE   PHY_MICREL_KS8721
-
-
- -

PHY manufacturer and model.

- -

Definition at line 54 of file at91sam7_mii.h.

- -
-
- -
-
- - - - -
#define PHY_ADDRESS   1
-
-
- -

Pins latched by the PHY at reset.

- -

Definition at line 65 of file at91sam7_mii.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef uint16_t phyreg_t
-
-
- -

Type of a PHY register value.

- -

Definition at line 90 of file at91sam7_mii.h.

- -
-
- -
-
- - - - -
typedef uint8_t phyaddr_t
-
-
- -

Type of a PHY register address.

- -

Definition at line 95 of file at91sam7_mii.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
void miiInit (void  ) 
-
-
- -

Low level MII driver initialization.

- -
-
- -
-
- - - - - - - - - -
void miiReset (MACDriver macp ) 
-
-
- -

Resets a PHY device.

-
Parameters:
- - -
[in] macp pointer to the MACDriver object
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
phyreg_t miiGet (MACDriver macp,
phyaddr_t  addr 
)
-
-
- -

Reads a PHY register through the MII interface.

-
Parameters:
- - - -
[in] macp pointer to the MACDriver object
addr the register address
-
-
-
Returns:
The register value.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void miiPut (MACDriver macp,
phyaddr_t  addr,
phyreg_t  value 
)
-
-
- -

Writes a PHY register through the MII interface.

-
Parameters:
- - - - -
[in] macp pointer to the MACDriver object
addr the register address
value the new register value
-
-
- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___m_i_i.png b/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___m_i_i.png deleted file mode 100644 index fe72f4735070a058946cad4ccc09ed51a2fed429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1284 zcmeAS@N?(olHy`uVBq!ia0y~yV6H=O_FLRCyj)xiJ@+IS7+98hx;TbZ%z1m)Hebe7g8jq)$)`_kdL%LTiAH(5 zujofc0ij;koTUs-j81d7)lIJKv2fZGI_)-xiu0llrXT^<&I>L63F2Qww!GAtyY_)z zkxR`-zSg}-5$DgmJM;GKyS4xJKP%b%`BTN#-x+D&YS;w?5r9>|`=>gC*lC^?udlWZ z_N(}mE-3Y__g}On`1;pK@1xflzA*kVd)Kj|q?UnyHD3~oKI030UENSw_NynpeKSkg zu`ZXBkD-pSAlK((KxxQTMv=tY+P$v?R=D{I-O)@x#oOGm!p5h-UB`=k2CnMzzz~x9?Aw^qSi@gm7Ve+*D)nd_TXfCBF291RO&9X*JZ1f_ zo9{JOonzB^TC90(o|W5ei^}8kE8c#auJ7Y7zfb)54~LYBNX?l)X6}2-c75{9xOY|g zUKW)?)3r~|c(p8fOYh|6{NnSMSZBVfdiYDFch%%>T}AD~t2fD*Z#^5lf5Z7LXV2fC z@vh|Bz4s+{e`~W|-MnA8rcR_Y{&@ZM6OMt&zDDz<>n91f=+0Ds|22GX-`W`c)2rs2 z8$J)b&XVpOb@GhPmt)taFS6UbCGfcaFCYC@-=|eGSKApB6}{iS>#lTu+3sw6dD)e< zf;J3KR&gi^&S6|)8ukBdGDPdME7KQ6o<1A+t6=NrURz1!y**}AU#G77pz~4{CWeU{ z-<%Hf+J7_lcYxLHd*NZTQ*8d$X7HpI9i4YoEq`aey{p7=xjFi`=SAErTUTouuju`_ z^Jeqwuh;Bq{{7*MTKoC67o+D5&!S>M$188wh5pNr^ZL7a^Y-t}<+~@$3_Vdd?VetV z|CuFgS~9w8gG8r3aGF+K+4uX(dFjI%#=G~t^{LKMe7-!O`QWp=8n6Cb$&3HH`Rc4# z27~1yZAvG63K;sP1Zh9+Gdz9pVElT9A6of;FFc+1p7-76pZVJQNonGj-0%HbX1jGl zarClP)0JPUW}TR{?aa-|*)@M>ynJt@o9X-1?)edGN51yzia$TznLGTy-Yp)#M`zJG zZPi-AIm`ttr%e}%JlebW{i_dejVdR7JaNhU$^_Ni*t}0V>u!8aURInGb!pbA+H>g> zIWLtJ-?6WJy1lb!o!I8>S9V-4_>*hM(BM7YZeG=|EnmZAPOs{yVm}bMbb-qP`xJ{C zckj;8w2o*FW%#bHT4@q`H!WZN`m!EeTpWGA;7@E6|MO@2EaY9=-*-K* zYS31%+`;-FW~rkPYeJLs{zdZ^OiQZ&|4f+SJHwsVU+rdhKdx|fspU=B_vpe3x2~!t zt302A6jOVQ%nmwhuHbgbBjM#T6Bs{j3N zyz*dzopr E05$h-%K!iX diff --git a/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___p_a_l.html b/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___p_a_l.html deleted file mode 100644 index 31f1691..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___p_a_l.html +++ /dev/null @@ -1,689 +0,0 @@ - - -ChibiOS/RT: AT91SAM7 I/O Ports Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

AT91SAM7 I/O Ports Support
- -[AT91SAM7 Support] -

-
-
- -

I/O Ports peripherals support. -More...

- -

-Collaboration diagram for AT91SAM7 I/O Ports Support:
-
-
- - -
-
-

-

Description

-

I/O Ports peripherals support.

-

This module supports the AT91SAM7 PIO controller. The controller supports the following features (see PAL Driver):

-
    -
  • 32 bits wide ports.
  • -
  • Atomic set/reset functions.
  • -
  • Output latched regardless of the pad setting.
  • -
  • Direct read of input pads regardless of the pad setting.
  • -
-

Supported Setup Modes

-
    -
  • PAL_MODE_RESET.
  • -
  • PAL_MODE_UNCONNECTED.
  • -
  • PAL_MODE_INPUT.
  • -
  • PAL_MODE_INPUT_ANALOG (same as PAL_MODE_INPUT).
  • -
  • PAL_MODE_INPUT_PULLUP.
  • -
  • PAL_MODE_OUTPUT_PUSHPULL.
  • -
  • PAL_MODE_OUTPUT_OPENDRAIN.
  • -
-

Any attempt to setup an invalid mode is ignored.

-

Suboptimal Behavior

-

Some PIO features are less than optimal:

-
    -
  • Pad/port toggling operations are not atomic.
  • -
  • Pad/group mode setup is not atomic.
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  at91sam7_pio_setup_t
 PIO port setup info. More...
struct  PALConfig
 AT91SAM7 PIO static initializer. More...

-Defines

#define PAL_IOPORTS_WIDTH   32
 Width, in bits, of an I/O port.
#define IOPORT1   AT91C_BASE_PIOA
 PIO port A identifier.
#define IOPORT2   AT91C_BASE_PIOB
 PIO port B identifier.
#define pal_lld_init(config)   _pal_lld_init(config)
 Low level PAL subsystem initialization.
#define pal_lld_readport(port)   ((port)->PIO_PDSR)
 Reads the physical I/O port states.
#define pal_lld_readlatch(port)   ((port)->PIO_ODSR)
 Reads the output latch.
#define pal_lld_writeport(port, bits)
 Writes a bits mask on a I/O port.
#define pal_lld_setport(port, bits)
 Sets a bits mask on a I/O port.
#define pal_lld_clearport(port, bits)
 Clears a bits mask on a I/O port.
#define pal_lld_writegroup(port, mask, offset, bits)
 Writes a group of bits.
#define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
 Pads group mode setup.
#define pal_lld_writepad(port, pad, bit)   pal_lld_writegroup(port, 1, pad, bit)
 Writes a logical state on an output pad.

-Typedefs

typedef uint32_t ioportmask_t
 Digital I/O port sized unsigned type.
typedef AT91PS_PIO ioportid_t
 Port Identifier.

-Functions

void _pal_lld_init (const PALConfig *config)
 AT91SAM7 I/O ports configuration.
void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
 Pads mode setup.

-Variables

const PALConfig pal_default_config
 PAL setup.
-

Define Documentation

- -
-
- - - - -
#define PAL_IOPORTS_WIDTH   32
-
-
- -

Width, in bits, of an I/O port.

- -

Definition at line 81 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - -
#define IOPORT1   AT91C_BASE_PIOA
-
-
- -

PIO port A identifier.

- -

Definition at line 103 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - -
#define IOPORT2   AT91C_BASE_PIOB
-
-
- -

PIO port B identifier.

- -

Definition at line 110 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - - - - - - -
#define pal_lld_init( config )    _pal_lld_init(config)
-
-
- -

Low level PAL subsystem initialization.

- -

Definition at line 121 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - - - - - - -
#define pal_lld_readport( port )    ((port)->PIO_PDSR)
-
-
- -

Reads the physical I/O port states.

-

This function is implemented by reading the PIO_PDSR register, the implementation has no side effects.

-
Parameters:
- - -
[in] port the port identifier
-
-
-
Returns:
The port bits.
-
Note:
This function is not meant to be invoked directly by the application code.
- -

Definition at line 134 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - - - - - - -
#define pal_lld_readlatch( port )    ((port)->PIO_ODSR)
-
-
- -

Reads the output latch.

-

This function is implemented by reading the PIO_ODSR register, the implementation has no side effects.

-
Parameters:
- - -
[in] port the port identifier
-
-
-
Returns:
The latched logical states.
-
Note:
This function is not meant to be invoked directly by the application code.
- -

Definition at line 147 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define pal_lld_writeport( port,
 bits 
)
-
-
-Value:
{                                 \
-  (port)->PIO_ODSR = (bits);                                            \
-}
-
-

Writes a bits mask on a I/O port.

-

This function is implemented by writing the PIO_ODSR register, the implementation has no side effects.

-
Parameters:
- - - -
[in] port the port identifier
[in] bits the bits to be written on the specified port
-
-
-
Note:
This function is not meant to be invoked directly by the application code.
- -

Definition at line 160 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define pal_lld_setport( port,
 bits 
)
-
-
-Value:
{                                   \
-  (port)->PIO_SODR = (bits);                                            \
-}
-
-

Sets a bits mask on a I/O port.

-

This function is implemented by writing the PIO_SODR register, the implementation has no side effects.

-
Parameters:
- - - -
[in] port the port identifier
[in] bits the bits to be ORed on the specified port
-
-
-
Note:
This function is not meant to be invoked directly by the application code.
- -

Definition at line 175 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define pal_lld_clearport( port,
 bits 
)
-
-
-Value:
{                                 \
-  (port)->PIO_CODR = (bits);                                            \
-}
-
-

Clears a bits mask on a I/O port.

-

This function is implemented by writing the PIO_CODR register, the implementation has no side effects.

-
Parameters:
- - - -
[in] port the port identifier
[in] bits the bits to be cleared on the specified port
-
-
-
Note:
This function is not meant to be invoked directly by the application code.
- -

Definition at line 191 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define pal_lld_writegroup( port,
 mask,
 offset,
 bits 
)
-
-
-Value:
{                  \
-  (port)->PIO_OWER = (mask) << (offset);                                \
-  (port)->PIO_ODSR = (bits) << (offset);                                \
-  (port)->PIO_OWDR = (mask) << (offset);                                \
-}
-
-

Writes a group of bits.

-

This function is implemented by writing the PIO_OWER, PIO_ODSR and PIO_OWDR registers, the implementation is not atomic because the multiple accesses.

-
Parameters:
- - - - - -
[in] port the port identifier
[in] mask the group mask
[in] offset the group bit offset within the port
[in] bits the bits to be written. Values exceeding the group width are masked.
-
-
-
Note:
This function is not meant to be invoked directly by the application code.
- -

Definition at line 210 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define pal_lld_setgroupmode( port,
 mask,
 mode 
)   _pal_lld_setgroupmode(port, mask, mode)
-
-
- -

Pads group mode setup.

-

This function programs a pads group belonging to the same port with the specified mode.

-
Parameters:
- - - - -
[in] port the port identifier
[in] mask the group mask
[in] mode the mode
-
-
-
Note:
This function is not meant to be invoked directly by the application code.
-
-PAL_MODE_UNCONNECTED is implemented as push pull output with high state.
- -

Definition at line 230 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define pal_lld_writepad( port,
 pad,
 bit 
)   pal_lld_writegroup(port, 1, pad, bit)
-
-
- -

Writes a logical state on an output pad.

-
Parameters:
- - - - -
[in] port the port identifier
[in] pad the pad number within the port
[out] bit the logical value, the value must be 0 or 1
-
-
-
Note:
This function is not meant to be invoked directly by the application code.
- -

Definition at line 243 of file platforms/AT91SAM7/pal_lld.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef uint32_t ioportmask_t
-
-
- -

Digital I/O port sized unsigned type.

- -

Definition at line 86 of file platforms/AT91SAM7/pal_lld.h.

- -
-
- -
-
- - - - -
typedef AT91PS_PIO ioportid_t
-
-
- -

Port Identifier.

-

This type can be a scalar or some kind of pointer, do not make any assumption about it, use the provided macros when populating variables of this type.

- -

Definition at line 94 of file platforms/AT91SAM7/pal_lld.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
void _pal_lld_init (const PALConfig config ) 
-
-
- -

AT91SAM7 I/O ports configuration.

-

PIO registers initialization.

-
Parameters:
- - -
[in] config the AT91SAM7 ports configuration
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void _pal_lld_setgroupmode (ioportid_t  port,
ioportmask_t  mask,
uint_fast8_t  mode 
)
-
-
- -

Pads mode setup.

-

This function programs a pads group belonging to the same port with the specified mode.

-
Parameters:
- - - - -
[in] port the port identifier
[in] mask the group mask
[in] mode the mode
-
-
-
Note:
This function is not meant to be invoked directly by the application code.
-
-PAL_MODE_RESET is implemented as input with pull-up.
-
-PAL_MODE_UNCONNECTED is implemented as push pull output with high state.
-
-PAL_MODE_OUTPUT_OPENDRAIN also enables the pull-up resistor.
- -
-
-

Variable Documentation

- -
-
- - - - -
const PALConfig pal_default_config
-
-
- -

PAL setup.

-

Digital I/O ports static configuration as defined in board.h.

- -

Definition at line 49 of file platforms/AT91SAM7/hal_lld.c.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___p_a_l.png b/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___p_a_l.png deleted file mode 100644 index 755cf6d867fc538a15440ff475f98595440484a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11740 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 - -ChibiOS/RT: AT91SAM7 USART Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-


- - -
- -
-

AT91SAM7 USART Support
- -[AT91SAM7 Support] -

-
-
- -

USART peripherals support. -More...

- -

-Collaboration diagram for AT91SAM7 USART Support:
-
-
- - -
-
-

-

Description

-

USART peripherals support.

-

The serial driver supports the AT91SAM7 USART peripherals.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  SerialConfig
 Generic Serial Driver configuration structure. More...

-Defines

#define USE_SAM7_USART0   TRUE
 UART0 driver enable switch.
#define USE_SAM7_USART1   TRUE
 UART1 driver enable switch.
#define USE_SAM7_DBGU_UART   TRUE
 DBGU UART driver enable switch.
#define SAM7_USART0_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 2)
 UART1 interrupt priority level setting.
#define SAM7_USART1_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 2)
 UART2 interrupt priority level setting.
#define SAM7_DBGU_UART_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 2)
 DBGU_UART interrupt priority level setting.
#define _serial_driver_data
 SerialDriver specific data.

-Typedefs

typedef uint32_t sdflags_t
 Serial Driver condition flags type.

-Functions

void sd_lld_init (void)
 Low level serial driver initialization.
void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
 Low level serial driver configuration and (re)start.
void sd_lld_stop (SerialDriver *sdp)
 Low level serial driver stop.

-Variables

SerialDriver SD1
 USART0 serial driver identifier.
SerialDriver SD2
 USART1 serial driver identifier.
SerialDriver SD3
 DBGU_UART serial driver identifier.
-

Define Documentation

- -
-
- - - - -
#define USE_SAM7_USART0   TRUE
-
-
- -

UART0 driver enable switch.

-

If set to TRUE the support for USART1 is included.

-
Note:
The default is TRUE.
- -

Definition at line 54 of file platforms/AT91SAM7/serial_lld.h.

- -
-
- -
-
- - - - -
#define USE_SAM7_USART1   TRUE
-
-
- -

UART1 driver enable switch.

-

If set to TRUE the support for USART2 is included.

-
Note:
The default is TRUE.
- -

Definition at line 63 of file platforms/AT91SAM7/serial_lld.h.

- -
-
- -
-
- - - - -
#define USE_SAM7_DBGU_UART   TRUE
-
-
- -

DBGU UART driver enable switch.

-

If set to TRUE the support for the DBGU UART is included.

-
Note:
The default is TRUE.
- -

Definition at line 72 of file platforms/AT91SAM7/serial_lld.h.

- -
-
- -
-
- - - - -
#define SAM7_USART0_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 2)
-
-
- -

UART1 interrupt priority level setting.

- -

Definition at line 79 of file platforms/AT91SAM7/serial_lld.h.

- -
-
- -
-
- - - - -
#define SAM7_USART1_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 2)
-
-
- -

UART2 interrupt priority level setting.

- -

Definition at line 86 of file platforms/AT91SAM7/serial_lld.h.

- -
-
- -
-
- - - - -
#define SAM7_DBGU_UART_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 2)
-
-
- -

DBGU_UART interrupt priority level setting.

- -

Definition at line 93 of file platforms/AT91SAM7/serial_lld.h.

- -
-
- -
-
- - - - -
#define _serial_driver_data
-
-
-Value:
_base_asynchronous_channel_data                                           \
-  /* Driver state.*/                                                        \
-  sdstate_t                 state;                                          \
-  /* Input queue.*/                                                         \
-  InputQueue                iqueue;                                         \
-  /* Output queue.*/                                                        \
-  OutputQueue               oqueue;                                         \
-  /* Status Change @p EventSource.*/                                        \
-  EventSource               sevent;                                         \
-  /* I/O driver status flags.*/                                             \
-  sdflags_t                 flags;                                          \
-  /* Input circular buffer.*/                                               \
-  uint8_t                   ib[SERIAL_BUFFERS_SIZE];                        \
-  /* Output circular buffer.*/                                              \
-  uint8_t                   ob[SERIAL_BUFFERS_SIZE];                        \
-  /* End of the mandatory fields.*/                                         \
-  /* Pointer to the USART registers block.*/                                \
-  AT91PS_USART              usart;
-
-

SerialDriver specific data.

- -

Definition at line 130 of file platforms/AT91SAM7/serial_lld.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef uint32_t sdflags_t
-
-
- -

Serial Driver condition flags type.

- -

Definition at line 107 of file platforms/AT91SAM7/serial_lld.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
void sd_lld_init (void  ) 
-
-
- -

Low level serial driver initialization.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void sd_lld_start (SerialDriver sdp,
const SerialConfig config 
)
-
-
- -

Low level serial driver configuration and (re)start.

-
Parameters:
- - - -
[in] sdp pointer to a SerialDriver object
[in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
-
-
- -
-
- -
-
- - - - - - - - - -
void sd_lld_stop (SerialDriver sdp ) 
-
-
- -

Low level serial driver stop.

-

De-initializes the USART, stops the associated clock, resets the interrupt vector.

-
Parameters:
- - -
[in] sdp pointer to a SerialDriver object
-
-
- -
-
-

Variable Documentation

- -
-
- - - - -
SerialDriver SD1
-
-
- -

USART0 serial driver identifier.

- -

Definition at line 68 of file platforms/AT91SAM7/serial_lld.c.

- -
-
- -
-
- - - - -
SerialDriver SD2
-
-
- -

USART1 serial driver identifier.

- -

Definition at line 73 of file platforms/AT91SAM7/serial_lld.c.

- -
-
- -
-
- - - - -
SerialDriver SD3
-
-
- -

DBGU_UART serial driver identifier.

- -

Definition at line 78 of file platforms/AT91SAM7/serial_lld.c.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___s_e_r_i_a_l.png b/ChibiOS_2.0.8/docs/html/group___a_t91_s_a_m7___s_e_r_i_a_l.png deleted file mode 100644 index a50de521b36ff1d657899c270f6a9ea96c517465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18482 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%0D0|;M-{C5 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 X?kvCZ+I}Mg0|SGntDnm{r-UW|aV>E= diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r.html b/ChibiOS_2.0.8/docs/html/group___a_v_r.html deleted file mode 100644 index 93064b2..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_v_r.html +++ /dev/null @@ -1,95 +0,0 @@ - - -ChibiOS/RT: MegaAVR - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

MegaAVR
- -[Ports] -

-
-
- -

-Collaboration diagram for MegaAVR:
-
-
- - -
-
-

-

Description

-

AVR port details. This section how the ChibiOS/RT features are implemented on this architecture.

-

-Mapping of the System States in the AVR port

-

The ChibiOS/RT logical System States are mapped as follow in the AVR port:

-
    -
  • Init. This state is represented by the startup code and the initialization code before chSysInit() is executed. It has not a special hardware state associated.
  • -
  • Normal. This is the state the system has after executing chSysInit(). Interrupts are enabled.
  • -
  • Suspended. Interrupts are disabled.
  • -
  • Disabled. Interrupts are disabled. This state is equivalent to the Suspended state because there are no fast interrupts in this architecture.
  • -
  • Sleep. This state is entered with the execution of the specific instruction sleep.
  • -
  • S-Locked. Interrupts are disabled.
  • -
  • I-Locked. This state is equivalent to the SRI state, the chSysLockI() and chSysUnlockI() APIs do nothing (still use them in order to formally change state because this may change).
  • -
  • Serving Regular Interrupt. Normal interrupt service code.
  • -
  • Serving Fast Interrupt. Not present in this architecture.
  • -
  • Serving Non-Maskable Interrupt. Not present in this architecture.
  • -
  • Halted. Implemented as an infinite loop with interrupts disabled.
  • -
-

-The AVR port notes

-
    -
  • The AVR does not have a dedicated interrupt stack, make sure to reserve enough stack space for interrupts in each thread stack. This can be done by modifying the INT_REQUIRED_STACK macro into ./ports/AVR/chcore.h.
  • -
- - - - -

-

- - -

-

- - -

-

-

-Modules

 Configuration Options
 

AVR Configuration Options.

-
 AVR Core Implementation
 

AVR specific port code, structures and macros.

-
 AVR Drivers
 

Device drivers included in the AVR support.

-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r.png b/ChibiOS_2.0.8/docs/html/group___a_v_r.png deleted file mode 100644 index 279da9764aafa63d6cf6c2e18dd1497af012e9fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4673 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 E08-o6%m4rY diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_n_f.html b/ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_n_f.html deleted file mode 100644 index 0348b88..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_n_f.html +++ /dev/null @@ -1,64 +0,0 @@ - - -ChibiOS/RT: Configuration Options - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
-
-

Configuration Options
- -[MegaAVR] -

-
-
- -

AVR Configuration Options. -More...

- -

-Collaboration diagram for Configuration Options:
-
-
- - -
-
-

-

AVR Configuration Options.

-

The AVR port allows some architecture-specific configurations settings that can be overridden by redefining them in chconf.h. Usually there is no need to change the default values.

-
    -
  • INT_REQUIRED_STACK, this value represent the amount of stack space used by the interrupt handlers.
    - The default for this value is 32, this space is allocated for each thread so be careful in order to not waste precious RAM space.
    - The default value is set into ./os/ports/GCC/AVR/chcore.h.
  • -
  • IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE thread. Usually there is no need to change this value unless inserting code in the IDLE thread hook macro.
  • -
- -
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_n_f.png b/ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_n_f.png deleted file mode 100644 index 757c8c134083c403242002be643c74e2dc252a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1169 zcmeAS@N?(olHy`uVBq!ia0y~yU}R=sU{K{?V_;x#3+@SFU|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my3bu#h?)ko~eb0@P7N5WEy*tx9|N49OX?ORWnf?9rlfQM=*1P*zJK#X4CH1#CL)s~x zlmmY_9&Eqh_@(jx{qM6s{*m2kGLOxG{lUuf9c))*8seSVFD}nyDBiqz^TNjqCaqn! zj%nKG>tQ?$4>%jv+Z-`|k@A8eCS&{Uh?p22S+=PM+KOIt7q?K%_pv0iV<}xJ- z#wZHq$9uef;jb89Fv!YIW{Mt-W@8cK5z3)$v#U#mcRI z5%Htz@X|Hg#kwcm_^qgRztusaZ)W?webeoXOlODpyIg!B-mpjH_@^BLObvHf3T{3v zJar{&>xNC6lK$?zzOU--V)1o-SKmiW`DrfxaFayIVlnpMix(!}zGm0G(!s*NZ1Q6F z^*$~a|9x)QA>#VUq(S09$E7Fv_YHp}S>61aa$)=H^L4+z-L<>Aue^SF-gecvYyYz3 z@Ageqe`b@M*mc@nX4$uOJ9OBxlvaIjuyxEm`QCWpS4r>lfBpRQY9^?heD10AZ2R^? zH;yZ1zl50%WN?~l>{yfTdATgO>Gf~XnN_QQr-=5}CFz|Knci&?bMBmv(^(#$D~}f1 znSE8>QkHdXX4j-TnZ5IwvMee-Tz>rcvHJOA8*TVIn4LN#CZzT~4G5m^yL+qlE`Q0I zy*wAvWkTmkmISMO+_lzzM?}BIj%OQ8qSoi%6S7{L&(JC5H?Pp*FmSeVt770JNrJo!R=j+W^&i6O{zuu+TYhbmE?|3UcA3Y;>vW+Ut8km zKYL#LMtj{H*Tr&SY5(%+Y595v8>SC0K0K6`@9%MmSL1xvdVo_?kh8J2VMTl2 z=2M^ctaYzz)nj9x`6trMY~O$J1I!HkufDzxc6z|nu)Co~)?$m7^t31PPxdR97)oT# zJ@>bs;SO`b`kQ;IR0=FyW>zc=^1ODvzDmxDZIO-+n+r?B(T0v7I3x1C8qeYH%oC2@ zx+RsC_QO`|%l$|^y$+J4=X6az#_*F@{b$%T(W+j - -ChibiOS/RT: AVR Core Implementation - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

AVR Core Implementation
- -[MegaAVR] -

-
-
- -

AVR specific port code, structures and macros. -More...

- -

-Collaboration diagram for AVR Core Implementation:
-
-
- - -
-
-

-

Description

-

AVR specific port code, structures and macros.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Defines

#define ENABLE_WFI_IDLE   0
 If enabled allows the idle thread to enter a low power mode.
#define CH_ARCHITECTURE_AVR
 Macro defining the AVR architecture.
#define CH_ARCHITECTURE_NAME   "AVR"
 Name of the implemented architecture.
#define CH_CORE_VARIANT_NAME   "MegaAVR"
 Name of the architecture variant (optional).
#define SETUP_CONTEXT(workspace, wsize, pf, arg)
 Platform dependent part of the chThdInit() API.
#define IDLE_THREAD_STACK_SIZE   8
 Stack size for the system idle thread.
#define INT_REQUIRED_STACK   32
 Per-thread stack overhead for interrupts servicing.
#define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
 Enforces a correct alignment for a stack area size value.
#define THD_WA_SIZE(n)
 Computes the thread working area global size.
#define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
 Static working area allocation.
#define PORT_IRQ_PROLOGUE()
 IRQ prologue code.
#define PORT_IRQ_EPILOGUE()
 IRQ epilogue code.
#define PORT_IRQ_HANDLER(id)   ISR(id)
 IRQ handler function declaration.
#define port_init()
 Port-related initialization code.
#define port_lock()   asm volatile ("cli" : : : "memory")
 Kernel-lock action.
#define port_unlock()   asm volatile ("sei" : : : "memory")
 Kernel-unlock action.
#define port_lock_from_isr()
 Kernel-lock action from an interrupt handler.
#define port_unlock_from_isr()
 Kernel-unlock action from an interrupt handler.
#define port_disable()   asm volatile ("cli" : : : "memory")
 Disables all the interrupt sources.
#define port_suspend()   asm volatile ("cli" : : : "memory")
 Disables the interrupt sources below kernel-level priority.
#define port_enable()   asm volatile ("sei" : : : "memory")
 Enables all the interrupt sources.
#define port_wait_for_interrupt()
 Enters an architecture-dependent IRQ-waiting mode.
#define INLINE   inline
 Inline function modifier.
#define ROMCONST   const
 ROM constant modifier.
#define PACK_STRUCT_STRUCT   __attribute__((packed))
 Packed structure modifier (within).
#define PACK_STRUCT_BEGIN
 Packed structure modifier (before).
#define PACK_STRUCT_END
 Packed structure modifier (after).

-Typedefs

typedef uint8_t stkalign_t
 8 bits stack and memory alignment enforcement.
typedef int8_t bool_t
typedef uint8_t tmode_t
typedef uint8_t tstate_t
typedef uint8_t trefs_t
typedef uint8_t tprio_t
typedef int16_t msg_t
typedef uint8_t eventid_t
typedef uint8_t eventmask_t
typedef uint16_t systime_t
typedef int8_t cnt_t

-Functions

void port_switch (Thread *ntp, Thread *otp)
 Performs a context switch between two threads.
void port_halt (void)
 Halts the system.
void _port_thread_start (void)
 Start a thread by invoking its work function.
-

Define Documentation

- -
-
- - - - -
#define ENABLE_WFI_IDLE   0
-
-
- -

If enabled allows the idle thread to enter a low power mode.

- -

Definition at line 45 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - -
#define CH_ARCHITECTURE_AVR
-
-
- -

Macro defining the AVR architecture.

- -

Definition at line 51 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - -
#define CH_ARCHITECTURE_NAME   "AVR"
-
-
- -

Name of the implemented architecture.

- -

Definition at line 56 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - -
#define CH_CORE_VARIANT_NAME   "MegaAVR"
-
-
- -

Name of the architecture variant (optional).

- -

Definition at line 61 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define SETUP_CONTEXT( workspace,
 wsize,
 pf,
 arg 
)
-
-
-Value:
{                      \
-  tp->p_ctx.sp = (struct intctx*)((uint8_t *)workspace + wsize  -       \
-                                  sizeof(struct intctx));               \
-  tp->p_ctx.sp->r2  = (int)pf;                                          \
-  tp->p_ctx.sp->r3  = (int)pf >> 8;                                     \
-  tp->p_ctx.sp->r4  = (int)arg;                                         \
-  tp->p_ctx.sp->r5  = (int)arg >> 8;                                    \
-  tp->p_ctx.sp->pcl = (int)_port_thread_start >> 8;                     \
-  tp->p_ctx.sp->pch = (int)_port_thread_start;                          \
-}
-
-

Platform dependent part of the chThdInit() API.

-

This code usually setup the context switching frame represented by an intctx structure.

- -

Definition at line 149 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - -
#define IDLE_THREAD_STACK_SIZE   8
-
-
- -

Stack size for the system idle thread.

-

This size depends on the idle thread implementation, usually the idle thread should take no more space than those reserved by INT_REQUIRED_STACK.

-
Note:
In this port it is set to 8.
- -

Definition at line 168 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - -
#define INT_REQUIRED_STACK   32
-
-
- -

Per-thread stack overhead for interrupts servicing.

-

This constant is used in the calculation of the correct working area size. This value can be zero on those architecture where there is a separate interrupt stack and the stack space between intctx and extctx is known to be zero.

-
Note:
In this port the default is 32 bytes per thread.
- -

Definition at line 181 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define STACK_ALIGN( n )    ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
-
-
- -

Enforces a correct alignment for a stack area size value.

- -

Definition at line 187 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define THD_WA_SIZE( n ) 
-
-
-Value:
STACK_ALIGN(sizeof(Thread) +                     \
-                                   (sizeof(struct intctx) - 1) +        \
-                                   (sizeof(struct extctx) - 1) +        \
-                                   (n) + (INT_REQUIRED_STACK))
-
-

Computes the thread working area global size.

- -

Definition at line 192 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define WORKING_AREA( s,
 n 
)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
-
-
- -

Static working area allocation.

-

This macro is used to allocate a static thread working area aligned as both position and size.

- -

Definition at line 202 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
#define PORT_IRQ_PROLOGUE( ) 
-
-
-Value:
{                                           \
-  asm ("" : : : "r18", "r19", "r20", "r21", "r22", "r23", "r24",        \
-                "r25", "r26", "r27", "r30", "r31");                     \
-}
-
-

IRQ prologue code.

-

This macro must be inserted at the start of all IRQ handlers enabled to invoke system APIs.

-
Note:
This code tricks the compiler to save all the specified registers by "touching" them.
- -

Definition at line 211 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
#define PORT_IRQ_EPILOGUE( ) 
-
-
-Value:
{                                           \
-  if (chSchIsRescRequiredExI())                                         \
-    chSchDoRescheduleI();                                               \
-}
-
-

IRQ epilogue code.

-

This macro must be inserted at the end of all IRQ handlers enabled to invoke system APIs.

- -

Definition at line 221 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - - -
#define PORT_IRQ_HANDLER( id )    ISR(id)
-
-
- -

IRQ handler function declaration.

-
Note:
id can be a function name or a vector number depending on the port implementation.
- -

Definition at line 231 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
void port_init( ) 
-
-
- -

Port-related initialization code.

-
Note:
This function is empty in this port.
- -

Definition at line 237 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
void port_lock( )    asm volatile ("cli" : : : "memory")
-
-
- -

Kernel-lock action.

-

Usually this function just disables interrupts but may perform more actions.

-
Note:
Implemented as global interrupt disable.
- -

Definition at line 245 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
void port_unlock( )    asm volatile ("sei" : : : "memory")
-
-
- -

Kernel-unlock action.

-

Usually this function just disables interrupts but may perform more actions.

-
Note:
Implemented as global interrupt enable.
- -

Definition at line 253 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
void port_lock_from_isr( ) 
-
-
- -

Kernel-lock action from an interrupt handler.

-

This function is invoked before invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

-
Note:
This function is empty in this port.
- -

Definition at line 262 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
void port_unlock_from_isr( ) 
-
-
- -

Kernel-unlock action from an interrupt handler.

-

This function is invoked after invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

-
Note:
This function is empty in this port.
- -

Definition at line 271 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
void port_disable( )    asm volatile ("cli" : : : "memory")
-
-
- -

Disables all the interrupt sources.

-
Note:
Of course non maskable interrupt sources are not included.
-
-Implemented as global interrupt disable.
- -

Definition at line 278 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
void port_suspend( )    asm volatile ("cli" : : : "memory")
-
-
- -

Disables the interrupt sources below kernel-level priority.

-
Note:
Interrupt sources above kernel level remains enabled.
-
-Same as port_disable() in this port, there is no difference between the two states.
- -

Definition at line 286 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
void port_enable( )    asm volatile ("sei" : : : "memory")
-
-
- -

Enables all the interrupt sources.

-
Note:
Implemented as global interrupt enable.
- -

Definition at line 292 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - - - - - -
void port_wait_for_interrupt( ) 
-
-
- -

Enters an architecture-dependent IRQ-waiting mode.

-

The function is meant to return when an interrupt becomes pending. The simplest implementation is an empty function or macro but this would not take advantage of architecture-specific power saving modes.

-
Note:
This port function is implemented as inlined code for performance reasons.
- -

Definition at line 308 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - -
#define INLINE   inline
-
-
- -

Inline function modifier.

- -

Definition at line 61 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
#define ROMCONST   const
-
-
- -

ROM constant modifier.

-
Note:
It is set to use the "const" keyword in this port.
- -

Definition at line 67 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
#define PACK_STRUCT_STRUCT   __attribute__((packed))
-
-
- -

Packed structure modifier (within).

-
Note:
It uses the "packed" GCC attribute.
- -

Definition at line 73 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
#define PACK_STRUCT_BEGIN
-
-
- -

Packed structure modifier (before).

-
Note:
Empty in this port.
- -

Definition at line 79 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
#define PACK_STRUCT_END
-
-
- -

Packed structure modifier (after).

-
Note:
Empty in this port.
- -

Definition at line 85 of file ports/GCC/AVR/chtypes.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef uint8_t stkalign_t
-
-
- -

8 bits stack and memory alignment enforcement.

- -

Definition at line 66 of file ports/GCC/AVR/chcore.h.

- -
-
- -
-
- - - - -
typedef int8_t bool_t
-
-
-

Fast boolean type.

- -

Definition at line 47 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t tmode_t
-
-
-

Thread flags.

- -

Definition at line 48 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t tstate_t
-
-
-

Thread state.

- -

Definition at line 49 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t trefs_t
-
-
-

Thread references counter.

- -

Definition at line 50 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t tprio_t
-
-
-

Thread priority.

- -

Definition at line 51 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
typedef int16_t msg_t
-
-
-

Inter-thread message.

- -

Definition at line 52 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t eventid_t
-
-
-

Event Id.

- -

Definition at line 53 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint8_t eventmask_t
-
-
-

Events mask.

- -

Definition at line 54 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
typedef uint16_t systime_t
-
-
-

System time.

- -

Definition at line 55 of file ports/GCC/AVR/chtypes.h.

- -
-
- -
-
- - - - -
typedef int8_t cnt_t
-
-
-

Resources counter.

- -

Definition at line 56 of file ports/GCC/AVR/chtypes.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void port_switch (Thread ntp,
Thread otp 
)
-
-
- -

Performs a context switch between two threads.

-

This is the most critical code in any port, this function is responsible for the context switch between 2 threads.

-
Note:
The implementation of this code affects directly the context switch performance so optimize here as much as you can.
-
-The function is declared as a weak symbol, it is possible to redefine it in your application code.
-
Parameters:
- - - -
[in] ntp the thread to be switched in
[in] otp the thread to be switched out
-
-
- -
-
- -
-
- - - - - - - - - -
void port_halt (void  ) 
-
-
- -

Halts the system.

-

This function is invoked by the operating system when an unrecoverable error is detected (as example because a programming error in the application code that triggers an assertion while in debug mode).

-
Note:
The function is declared as a weak symbol, it is possible to redefine it in your application code.
- -
-
- -
-
- - - - - - - - - -
void _port_thread_start (void  ) 
-
-
- -

Start a thread by invoking its work function.

-

If the work function returns chThdExit() is automatically invoked.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_r_e.png b/ChibiOS_2.0.8/docs/html/group___a_v_r___c_o_r_e.png deleted file mode 100644 index 5d26d696fc6e2cdf63807c7ccded936651f38f00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1191 zcmeAS@N?(olHy`uVBq!ia0y~yU=(IxU{K{?V_;xN{L8zCfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM@CHt4YQT3@o0WE{-7;bKc%Poh{-i!~P-P*JzSMz>$g>CzE<;vZyXcQ%LH?PYN7n zwv&!|1fLJPSJ&O8eZJzNRqAnZ(d{O4rXJb;pC!CRNpP0o<$%|>zX-05+ixP$_VB#Z z19JxDATNeb6HgnS5@TT$6BFBKm%i|t`PYThZuflM`+4Wy7`4eN7oRNhw#q6pxZ1zi z+u+>f)^i6A{ES__`f4G=@+C2U1qD_!>{422t8K+5U&47zjq}B=6}79L?qXTKTHJiz zujw(@x365kWX7gCv8{C_W$C|avgR(y6%-GT)0^!1#i7rR`5E(_DK=d`9Itv#?z(?> z_xZ1-<>CEI7Lsj`CJ0FX)$AucE`vSNh~G*Y+1~ zepj3(dz>}iSa@#6r_O!XzA8_ty4bS7JL{E2mi+^O^S^ul_HMlkhs@DiW>bEo ziEY}t!g|pzX1CLi(j;8xYSb+j^aO$1eMw@==TAyR+oAzTUdyDZ8E- z85LFDo^Aeq-MaI3b=xK0C#*HQDE7bW|F5q(&&>47l5S_~MIP7aejBmvZOP`|vPV`k zm)JU#mR?%JG4og7?70>n9~^w@e_*D4b=AMW$;bO1Brd(Qoqd9B_I0} zqWx?6<=>ef`jGr;ciZJSowKtwVq&X1yEmTrwk`Q-=JmW&vu3VXuKOy}>(+JGqf?Du z{`p#&${G<_X=Q6+QK`;zbfUo&bw(L6rm0`+cuv19`gwKr>$e5sWmlg+DD-rndu;Xc zu&l~k-zt-@eoeKW=DWN1?b2h5^*CQos=oH)lYy*D@$2)c_f2C?o$~e*%D(;do7=$; zA8yWFdu>~C!;es}n-TNZmM|*)ihQT5d-hLA)t1?^>;}hGuUEuOyEc3N{QEnyD=rtl zsy=$~=BY0K^YialaVLl!cyr-GYt`zjwtNpv8fu*$Y@V`$Y194uDK1Ap&GoS|sytHp z@zJyY3~3B!c=+P}EW9eTpF?q$!_&R*Z)n(_^V;-zuFtkD)AjRh7zhW)YZ&Tkjq%=yLF*nt3-elYO_NKS66%HU;SU|{fc^>bP0l+XkK1JFQe diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r___d_r_i_v_e_r_s.html b/ChibiOS_2.0.8/docs/html/group___a_v_r___d_r_i_v_e_r_s.html deleted file mode 100644 index d16f47a..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_v_r___d_r_i_v_e_r_s.html +++ /dev/null @@ -1,72 +0,0 @@ - - -ChibiOS/RT: AVR Drivers - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

AVR Drivers
- -[MegaAVR] -

-
-
- -

Device drivers included in the AVR support. -More...

- -

-Collaboration diagram for AVR Drivers:
-
-
- - -
-
-

-

Description

-

Device drivers included in the AVR support.

- - - - -

-

- - -

-

-

-Modules

 AVR HAL Support
 

HAL support.

-
 AVR USART Support
 

USART support.

-
-
-
-Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r___d_r_i_v_e_r_s.png b/ChibiOS_2.0.8/docs/html/group___a_v_r___d_r_i_v_e_r_s.png deleted file mode 100644 index 8a269f1b523f07f1fc50f974d517bac5626e1659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2719 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 U`|gVpj0A~#y85}Sb4q9e0J_*dl>h($ diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r___h_a_l.html b/ChibiOS_2.0.8/docs/html/group___a_v_r___h_a_l.html deleted file mode 100644 index faef8ac..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_v_r___h_a_l.html +++ /dev/null @@ -1,108 +0,0 @@ - - -ChibiOS/RT: AVR HAL Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

AVR HAL Support
- -[AVR Drivers] -

-
-
- -

HAL support. -More...

- -

-Collaboration diagram for AVR HAL Support:
-
-
- - -
-
-

-

Description

-

HAL support.

- - - - - - - -

-Defines

#define PLATFORM_NAME   "ATmega128"
 Platform name.

-Functions

void hal_lld_init (void)
 Low level HAL driver initialization.
-

Define Documentation

- -
-
- - - - -
#define PLATFORM_NAME   "ATmega128"
-
-
- -

Platform name.

- -

Definition at line 44 of file platforms/AVR/hal_lld.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
void hal_lld_init (void  ) 
-
-
- -

Low level HAL driver initialization.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___a_v_r___h_a_l.png deleted file mode 100644 index ff7c4965c6ecadac4c628e5979b7227c77005ace..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1148 zcmeAS@N?(olHy`uVBq!ia0y~yVED_xz@W;(#=yYP8S#D}0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj)xiJ@+IS7+B;yT^vIy=DfYTKVLdkg8jq$M^?5RnY7TkO>f0QWn+7m*lwfNiVlf|%=J#vJDaC= zG%ncn?XbYQIePE!?tTCBjrIKf@+UX_{k8Xdt>i4(f>woCt< zsrj;2+>N8?TkSo@l*IIO_SdgpSGGIyg@uQ2+`T*d&l;nr5gi)oK2?h>4=+)lWejIT zs_%`O#(MhdhmKYAL)2HEcZ!bOS-bM)o0@?2<#jPpw`RS({B+*)$f>NSZO`xiAhA4m zx`fZyNsnf(Z|J$gbarS_~^}I{QJnwy1vt2IR zwwhc0Yt{3&Zppu2yFK2bZuBcubbe<7qp@ki&X1D~GQuXE?7t{d|HCpueU(kbv=IB( zH|ybNLY8G+(`DCQEtH<#Vz+#&0idv)-NgGgrE~_rsaI z&9xzO3;7E-P5Wy2cgLl9!XCG$d)qGGAtt^(ugC50*QmFzlp6T|`u_L-(c;I-FV&lS z`<>dd`{n!Zt93_O)PR@MO+Y*>$|HeHvuWuDt{E7%Qb1m?7nYYSK z|9$Aw71wY7KDu=OrkPhBOenc`pyZHY&5nds;-z{ALh^2z>D|+*XJ0mVNAKs|hrO!B zD!cydeq+|u>g|0yf2Ei71^#p9at6BFFCp7PPzqfz4Qvarp%ueA?&d!+mM@*@zFZ`O2 fAQYTkRL}UZ?s&3e=9!xe3=9mOu6{1-oD!M<42m!i diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r___s_e_r_i_a_l.html b/ChibiOS_2.0.8/docs/html/group___a_v_r___s_e_r_i_a_l.html deleted file mode 100644 index b7a4250..0000000 --- a/ChibiOS_2.0.8/docs/html/group___a_v_r___s_e_r_i_a_l.html +++ /dev/null @@ -1,330 +0,0 @@ - - -ChibiOS/RT: AVR USART Support - - - - - - - - - - - -
ChibiOS/RT LogoChibiOS/RT

Architecture - Reference Manual - Guides
-
- - -
- -
-

AVR USART Support
- -[AVR Drivers] -

-
-
- -

USART support. -More...

- -

-Collaboration diagram for AVR USART Support:
-
-
- - -
-
-

-

Description

-

USART support.

-

The serial driver supports both the AVR USARTs in asynchronous mode.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  SerialConfig
 Generic Serial Driver configuration structure. More...

-Defines

#define USE_AVR_USART0   TRUE
 USART0 driver enable switch.
#define USE_AVR_USART1   TRUE
 USART1 driver enable switch.
#define _serial_driver_data
 SerialDriver specific data.
#define UBRR(b)   ((F_CPU / (b << 4)) - 1)
 Macro for baud rate computation.

-Typedefs

typedef uint8_t sdflags_t
 Serial Driver condition flags type.

-Functions

void sd_lld_init (void)
 Low level serial driver initialization.
void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
 Low level serial driver configuration and (re)start.
void sd_lld_stop (SerialDriver *sdp)
 Low level serial driver stop.

-Variables

SerialDriver SD1
 USART0 serial driver identifier.
SerialDriver SD2
 USART1 serial driver identifier.
-

Define Documentation

- -
-
- - - - -
#define USE_AVR_USART0   TRUE
-
-
- -

USART0 driver enable switch.

-

If set to TRUE the support for USART0 is included.

-
Note:
The default is FALSE.
- -

Definition at line 54 of file platforms/AVR/serial_lld.h.

- -
-
- -
-
- - - - -
#define USE_AVR_USART1   TRUE
-
-
- -

USART1 driver enable switch.

-

If set to TRUE the support for USART1 is included.

-
Note:
The default is TRUE.
- -

Definition at line 63 of file platforms/AVR/serial_lld.h.

- -
-
- -
-
- - - - -
#define _serial_driver_data
-
-
-Value:
_base_asynchronous_channel_data                                           \
-  /* Driver state.*/                                                        \
-  sdstate_t                 state;                                          \
-  /* Input queue.*/                                                         \
-  InputQueue                iqueue;                                         \
-  /* Output queue.*/                                                        \
-  OutputQueue               oqueue;                                         \
-  /* Status Change @p EventSource.*/                                        \
-  EventSource               sevent;                                         \
-  /* I/O driver status flags.*/                                             \
-  sdflags_t                 flags;                                          \
-  /* Input circular buffer.*/                                               \
-  uint8_t                   ib[SERIAL_BUFFERS_SIZE];                        \
-  /* Output circular buffer.*/                                              \
-  uint8_t                   ob[SERIAL_BUFFERS_SIZE];                        \
-
-

SerialDriver specific data.

- -

Definition at line 98 of file platforms/AVR/serial_lld.h.

- -
-
- -
-
- - - - - - - - - -
#define UBRR( b )    ((F_CPU / (b << 4)) - 1)
-
-
- -

Macro for baud rate computation.

-
Note:
Make sure the final baud rate is within tolerance.
- -

Definition at line 124 of file platforms/AVR/serial_lld.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef uint8_t sdflags_t
-
-
- -

Serial Driver condition flags type.

- -

Definition at line 77 of file platforms/AVR/serial_lld.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - -
void sd_lld_init (void  ) 
-
-
- -

Low level serial driver initialization.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void sd_lld_start (SerialDriver sdp,
const SerialConfig config 
)
-
-
- -

Low level serial driver configuration and (re)start.

-
Parameters:
- - - -
[in] sdp pointer to a SerialDriver object
[in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
-
-
- -
-
- -
-
- - - - - - - - - -
void sd_lld_stop (SerialDriver sdp ) 
-
-
- -

Low level serial driver stop.

-

De-initializes the USART, stops the associated clock, resets the interrupt vector.

-
Parameters:
- - -
[in] sdp pointer to a SerialDriver object
-
-
- -
-
-

Variable Documentation

- -
-
- - - - -
SerialDriver SD1
-
-
- -

USART0 serial driver identifier.

-
Note:
The name does not follow the convention used in the other ports (COMn) because a name conflict with the AVR headers.
- -

Definition at line 50 of file platforms/AVR/serial_lld.c.

- -
-
- -
-
- - - - -
SerialDriver SD2
-
-
- -

USART1 serial driver identifier.

-
Note:
The name does not follow the convention used in the other ports (COMn) because a name conflict with the AVR headers.
- -

Definition at line 59 of file platforms/AVR/serial_lld.c.

- -
-
-
-
-Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
- - diff --git a/ChibiOS_2.0.8/docs/html/group___a_v_r___s_e_r_i_a_l.png b/ChibiOS_2.0.8/docs/html/group___a_v_r___s_e_r_i_a_l.png deleted file mode 100644 index 40c10388f6dfc13e83490acdfd58419eceedfdf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17769 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
  • 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 e8Q|bR+dt-=ZIc*c+@H6D1U+5-T-G@yGywpC - -ChibiOS/RT: CAN Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    CAN Driver
    - -[HAL] -

    -
    -
    - -

    Generic CAN Driver. -More...

    - -

    -Collaboration diagram for CAN Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Generic CAN Driver.

    -

    This module implements a generic ADC driver. The driver implements a state machine internally:

    -
    -inline_dotgraph_17.dot - -
    - - - - -

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Modules

     CAN Low Level Driver
     

    CAN Driver low level driver template.

    -

    -Defines

    #define CAN_LIMIT_WARNING   1
     Errors rate warning.
    #define CAN_LIMIT_ERROR   2
     Errors rate error.
    #define CAN_BUS_OFF_ERROR   4
     Bus off condition reached.
    #define CAN_FRAMING_ERROR   8
     Framing error of some kind on the CAN bus.
    #define CAN_OVERFLOW_ERROR   16
     Overflow in receive queue.
    #define CAN_USE_SLEEP_MODE   TRUE
     Sleep mode related APIs inclusion switch.
    #define canAddFlagsI(canp, mask)   ((canp)->cd_status |= (mask))
     Adds some flags to the CAN status mask.

    -Enumerations

    enum  canstate_t {
    -  CAN_UNINIT = 0, -CAN_STOP = 1, -CAN_STARTING = 2, -CAN_READY = 3, -
    -  CAN_SLEEP = 4 -
    - }
     

    Driver state machine possible states.

    - More...

    -Functions

    void canInit (void)
     CAN Driver initialization.
    void canObjectInit (CANDriver *canp)
     Initializes the standard part of a CANDriver structure.
    void canStart (CANDriver *canp, const CANConfig *config)
     Configures and activates the CAN peripheral.
    void canStop (CANDriver *canp)
     Deactivates the CAN peripheral.
    msg_t canTransmit (CANDriver *canp, const CANTxFrame *ctfp, systime_t timeout)
     Can frame transmission.
    msg_t canReceive (CANDriver *canp, CANRxFrame *crfp, systime_t timeout)
     Can frame receive.
    canstatus_t canGetAndClearFlags (CANDriver *canp)
     Returns the current status mask and clears it.
    void canSleep (CANDriver *canp)
     Enters the sleep mode.
    void canWakeup (CANDriver *canp)
     Enforces leaving the sleep mode.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define CAN_LIMIT_WARNING   1
    -
    -
    - -

    Errors rate warning.

    - -

    Definition at line 47 of file can.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_LIMIT_ERROR   2
    -
    -
    - -

    Errors rate error.

    - -

    Definition at line 51 of file can.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_BUS_OFF_ERROR   4
    -
    -
    - -

    Bus off condition reached.

    - -

    Definition at line 55 of file can.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_FRAMING_ERROR   8
    -
    -
    - -

    Framing error of some kind on the CAN bus.

    - -

    Definition at line 59 of file can.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_OVERFLOW_ERROR   16
    -
    -
    - -

    Overflow in receive queue.

    - -

    Definition at line 63 of file can.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_USE_SLEEP_MODE   TRUE
    -
    -
    - -

    Sleep mode related APIs inclusion switch.

    - -

    Definition at line 73 of file can.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define canAddFlagsI( canp,
     mask 
    )   ((canp)->cd_status |= (mask))
    -
    -
    - -

    Adds some flags to the CAN status mask.

    -
    Parameters:
    - - - -
    [in] canp pointer to the CANDriver object
    [in] mask flags to be added to the status mask
    -
    -
    - -

    Definition at line 111 of file can.h.

    - -
    -
    -

    Enumeration Type Documentation

    - -
    -
    - - - - -
    enum canstate_t
    -
    -
    - -

    Driver state machine possible states.

    -
    Enumerator:
    - - - - - -
    CAN_UNINIT  -

    Not initialized.

    -
    CAN_STOP  -

    Stopped.

    -
    CAN_STARTING  -

    Starting.

    -
    CAN_READY  -

    Ready.

    -
    CAN_SLEEP  -

    Sleep state.

    -
    -
    -
    - -

    Definition at line 91 of file can.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void canInit (void  ) 
    -
    -
    - -

    CAN Driver initialization.

    - -

    Definition at line 59 of file can.c.

    - -

    References can_lld_init().

    - -

    Referenced by halInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void canObjectInit (CANDriver canp ) 
    -
    -
    - -

    Initializes the standard part of a CANDriver structure.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -

    Definition at line 69 of file can.c.

    - -

    References CANDriver::cd_config, CANDriver::cd_error_event, CANDriver::cd_rxfull_event, CANDriver::cd_rxsem, CANDriver::cd_sleep_event, CANDriver::cd_state, CANDriver::cd_status, CANDriver::cd_txempty_event, CANDriver::cd_txsem, CANDriver::cd_wakeup_event, chEvtInit, and chSemInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void canStart (CANDriver canp,
    const CANConfig config 
    )
    -
    -
    - -

    Configures and activates the CAN peripheral.

    -
    Parameters:
    - - - -
    [in] canp pointer to the CANDriver object
    [in] config pointer to the CANConfig object
    -
    -
    - -

    Definition at line 91 of file can.c.

    - -

    References can_lld_start(), CAN_READY, CAN_STARTING, CAN_STOP, CANDriver::cd_config, CANDriver::cd_state, chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, and chThdSleepS.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void canStop (CANDriver canp ) 
    -
    -
    - -

    Deactivates the CAN peripheral.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -

    Definition at line 116 of file can.c.

    - -

    References can_lld_stop(), CAN_READY, CAN_STOP, CANDriver::cd_rxsem, CANDriver::cd_state, CANDriver::cd_status, CANDriver::cd_txsem, chDbgAssert, chDbgCheck, chSchRescheduleS(), chSemResetI(), chSysLock, and chSysUnlock.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t canTransmit (CANDriver canp,
    const CANTxFrame ctfp,
    systime_t  timeout 
    )
    -
    -
    - -

    Can frame transmission.

    -

    The specified frame is queued for transmission, if the hardware queue is full then the invoking thread is queued.

    -
    Note:
    Trying to transmit while in sleep mode simply enqueues the thread.
    -
    Parameters:
    - - - - -
    [in] canp pointer to the CANDriver object
    [in] ctfp pointer to the CAN frame to be transmitted
    [in] timeout the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation result.
    -
    Return values:
    - - - - -
    RDY_OK the frame has been queued for transmission.
    RDY_TIMEOUT operation not finished within the specified time.
    RDY_RESET driver stopped while waiting.
    -
    -
    - -

    Definition at line 151 of file can.c.

    - -

    References can_lld_can_transmit(), can_lld_transmit(), CAN_READY, CAN_SLEEP, CANDriver::cd_state, CANDriver::cd_txsem, chDbgAssert, chDbgCheck, chSemWaitTimeoutS(), chSysLock, chSysUnlock, and RDY_OK.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t canReceive (CANDriver canp,
    CANRxFrame crfp,
    systime_t  timeout 
    )
    -
    -
    - -

    Can frame receive.

    -

    The function waits until a frame is received.

    -
    Note:
    Trying to receive while in sleep mode simply enqueues the thread.
    -
    Parameters:
    - - - - -
    [in] canp pointer to the CANDriver object
    [out] crfp pointer to the buffer where the CAN frame is copied
    [in] timeout the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout (useful in an event driven scenario where a thread never blocks for I/O).
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation result.
    -
    Return values:
    - - - - -
    RDY_OK a frame has been received and placed in the buffer.
    RDY_TIMEOUT operation not finished within the specified time or frame not immediately available if invoked using TIME_IMMEDIATE.
    RDY_RESET driver stopped while waiting.
    -
    -
    - -

    Definition at line 192 of file can.c.

    - -

    References can_lld_can_receive(), can_lld_receive(), CAN_READY, CAN_SLEEP, CANDriver::cd_rxsem, CANDriver::cd_state, chDbgAssert, chDbgCheck, chSemWaitTimeoutS(), chSysLock, chSysUnlock, and RDY_OK.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    canstatus_t canGetAndClearFlags (CANDriver canp ) 
    -
    -
    - -

    Returns the current status mask and clears it.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    -
    Returns:
    The status flags mask.
    - -

    Definition at line 218 of file can.c.

    - -

    References CANDriver::cd_status, chSysLock, and chSysUnlock.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void canSleep (CANDriver canp ) 
    -
    -
    - -

    Enters the sleep mode.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -

    Definition at line 234 of file can.c.

    - -

    References can_lld_sleep(), CAN_READY, CAN_SLEEP, CANDriver::cd_sleep_event, CANDriver::cd_state, chDbgAssert, chDbgCheck, chEvtBroadcastI(), chSchRescheduleS(), chSysLock, and chSysUnlock.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void canWakeup (CANDriver canp ) 
    -
    -
    - -

    Enforces leaving the sleep mode.

    -
    Note:
    The sleep mode is supposed to be usually exited automatically by an hardware event.
    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -

    Definition at line 258 of file can.c.

    - -

    References can_lld_wakeup(), CAN_READY, CAN_SLEEP, CANDriver::cd_state, CANDriver::cd_wakeup_event, chDbgAssert, chDbgCheck, chEvtBroadcastI(), chSchRescheduleS(), chSysLock, and chSysUnlock.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___c_a_n.png b/ChibiOS_2.0.8/docs/html/group___c_a_n.png deleted file mode 100644 index acb7d69be3c1a24a3e709ba898f9b3196306b009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1505 zcmeAS@N?(olHy`uVBq!ia0y~yU`%CTU{K{?V_;yIwdzMQ0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj&dbn)aJ8Ft9dzx;TbZ%z1m~wzo{U4Eu-o{^eT@mqjhM*d14; z_+{;vjV;Su1YbL6iX<|}an(*T+v}qFWT{ijzHnhK)=mMh+gH9U<Kwz5 zOYa?QJeYS#l?ce);jwDq*wyv6uz%5tv-(!~J+EtCCS82Cd;#-?#F`qJ*w|Rdc0o>S z&z&+ZiC{JBx%MwsP*SS)IpyM_cxZ`_i--~u(`wSDOEFo;#|KBj-)GksIiTk%_VIZ;t|)-yeNYA1R0+~c$o>!0%S{JYAzsk^4`;@|yO>)S5T zTXq7iew~*+6MwgB?cTmGGiOhUlHC1Q%m!;hwt2Hmt^2kY2o?-sg*w-U0JEW zYVyg8c84W)OZMm6vK7Q?mM}h@I)Smgv(P+pcjCQeH`ZGEeg69=bo<@1xSalfPcEiOJCDQLQ9pPr_mjCf$=n>UMFp4A%MnzL@(+E=sWcV`~I=hB+^r#ei< zddoh&=dJA&)Rl?7k_6Y+YvV65lOtOaMj9}V$; z%@-2Bzi!jQh2>la1RC6yswg-8ICr^Db{;2d@uJPvEs5dprd%z1X0}#nLk?Oqz4P+0XTDOWJQ!F#Af=FODbP`ftnv5Z)=?z*$sa{uiQK0Uo3 z82|rZ{Kkk_X@$0qQyQXk4e#Ih@!Lo5`(>?U_P(BVCwF!npW}^- zch_qt{#Y^nfB&NjcXRXiwm0wWDQBPY$YrW|VEh&%V&qx!(9Q&TEuXs14FmBDiC^*Tm|I(jD zmo}YeZ8o>^hro7*J6>w;Sq-!9#rW|uSH!b4y_m1$%I=dM7FHmA;O(_*8X**W1riW-@C^oifmT9~m|49zy~1f!=G^Hnzq1ebsJV&$ve{CnZFSn|tzk zhBHhva`XRxnfmR(eQc{AMOu`p3`KV_vkTUW>DAM*pLhU~R#lXV@BJ1;H&|L?m$ z!x@Gdnc2T>Bui{u{H8qB|J4;4F(Zb@itW?&X7>BKtg_4#h24!bg#}whCmRU{b{K$| z9AKu1)o-Pz(IV~BnFQM6Gb@ek?fXx8&9kdL0xM>mJa2w9l{_)K#HzQ%O14DeiT*i# gC1kLu=%f9e72jW*&-k;Afq{X+)78&qol`;+0F4gO$N&HU diff --git a/ChibiOS_2.0.8/docs/html/group___c_a_n___l_l_d.html b/ChibiOS_2.0.8/docs/html/group___c_a_n___l_l_d.html deleted file mode 100644 index 5526ad9..0000000 --- a/ChibiOS_2.0.8/docs/html/group___c_a_n___l_l_d.html +++ /dev/null @@ -1,446 +0,0 @@ - - -ChibiOS/RT: CAN Low Level Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    CAN Low Level Driver
    - -[CAN Driver] -

    -
    -
    - -

    CAN Driver low level driver template. -More...

    - -

    -Collaboration diagram for CAN Low Level Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    CAN Driver low level driver template.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  CANTxFrame
     CAN transmission frame. More...
    struct  CANRxFrame
     CAN received frame. More...
    struct  CANFilter
     CAN filter. More...
    struct  CANConfig
     Driver configuration structure. More...
    struct  CANDriver
     Structure representing an CAN driver. More...

    -Defines

    #define CAN_SUPPORTS_SLEEP   TRUE
     This switch defines whether the driver implementation supports a low power switch mode with automatic an wakeup feature.
    #define CAN_USE_SLEEP_MODE   TRUE
     Sleep mode related APIs inclusion switch.

    -Typedefs

    typedef uint32_t canstatus_t
     CAN status flags.

    -Functions

    void can_lld_init (void)
     Low level CAN driver initialization.
    void can_lld_start (CANDriver *canp)
     Configures and activates the CAN peripheral.
    void can_lld_stop (CANDriver *canp)
     Deactivates the CAN peripheral.
    bool_t can_lld_can_transmit (CANDriver *canp)
     Determines whether a frame can be transmitted.
    void can_lld_transmit (CANDriver *canp, const CANTxFrame *ctfp)
     Inserts a frame into the transmit queue.
    bool_t can_lld_can_receive (CANDriver *canp)
     Determines whether a frame has been received.
    void can_lld_receive (CANDriver *canp, CANRxFrame *crfp)
     Receives a frame from the input queue.
    void can_lld_sleep (CANDriver *canp)
     Enters the sleep mode.
    void can_lld_wakeup (CANDriver *canp)
     Enforces leaving the sleep mode.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define CAN_SUPPORTS_SLEEP   TRUE
    -
    -
    - -

    This switch defines whether the driver implementation supports a low power switch mode with automatic an wakeup feature.

    - -

    Definition at line 48 of file templates/can_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_USE_SLEEP_MODE   TRUE
    -
    -
    - -

    Sleep mode related APIs inclusion switch.

    -
    Note:
    This switch is enforced to FALSE if the driver implementation does not support the sleep mode.
    - -

    Definition at line 61 of file templates/can_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t canstatus_t
    -
    -
    - -

    CAN status flags.

    - -

    Definition at line 82 of file templates/can_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void can_lld_init (void  ) 
    -
    -
    - -

    Low level CAN driver initialization.

    - -

    Referenced by canInit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void can_lld_start (CANDriver canp ) 
    -
    -
    - -

    Configures and activates the CAN peripheral.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -

    Referenced by canStart().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void can_lld_stop (CANDriver canp ) 
    -
    -
    - -

    Deactivates the CAN peripheral.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -

    Referenced by canStop().

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t can_lld_can_transmit (CANDriver canp ) 
    -
    -
    - -

    Determines whether a frame can be transmitted.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    -
    Returns:
    The queue space availability.
    -
    Return values:
    - - - -
    FALSE no space in the transmit queue.
    TRUE transmit slot available.
    -
    -
    - -

    Referenced by canTransmit().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void can_lld_transmit (CANDriver canp,
    const CANTxFrame ctfp 
    )
    -
    -
    - -

    Inserts a frame into the transmit queue.

    -
    Parameters:
    - - - -
    [in] canp pointer to the CANDriver object
    [in] ctfp pointer to the CAN frame to be transmitted
    -
    -
    - -

    Referenced by canTransmit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t can_lld_can_receive (CANDriver canp ) 
    -
    -
    - -

    Determines whether a frame has been received.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    -
    Returns:
    The queue space availability.
    -
    Return values:
    - - - -
    FALSE no space in the transmit queue.
    TRUE transmit slot available.
    -
    -
    - -

    Referenced by canReceive().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void can_lld_receive (CANDriver canp,
    CANRxFrame crfp 
    )
    -
    -
    - -

    Receives a frame from the input queue.

    -
    Parameters:
    - - - -
    [in] canp pointer to the CANDriver object
    [out] crfp pointer to the buffer where the CAN frame is copied
    -
    -
    - -

    Referenced by canReceive().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void can_lld_sleep (CANDriver canp ) 
    -
    -
    - -

    Enters the sleep mode.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -

    Definition at line 142 of file templates/can_lld.c.

    - -

    Referenced by canSleep().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void can_lld_wakeup (CANDriver canp ) 
    -
    -
    - -

    Enforces leaving the sleep mode.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -

    Definition at line 151 of file templates/can_lld.c.

    - -

    Referenced by canWakeup().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___c_a_n___l_l_d.png b/ChibiOS_2.0.8/docs/html/group___c_a_n___l_l_d.png deleted file mode 100644 index dffc131137ba9306bedc975b5db8c00dc818d41c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2364 zcmeAS@N?(olHy`uVBq!ia0y~yVEoO%z>vtn#=yXEk&(lhfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM`MzP5Vt47&z{Ex;TbZ%z1nFe7@XK$patL9M}zdN&M{oC5Iv~PFaSs1VY zkrj7j85;gyY@MHbTrF4g`_#;zcJ~eS%c>a|1P=0SS$BNfrwg^ozZrOrX_T`woUyt6 z!Y0k-t<=%qw?5mJ<*x5F`t0HyJ+FA~oPs1qh8dcQjpxlbnV)uUs*GgVK6U!l^+)f| zUuDeako$S3H3NfcmvVio&9q5H;_2Py@}etdY;U0ra+0C%rBUXKZMCLwzGVgklJ{`EXhwI zXs;UWhU2C3)t~Kt>^ow`z@V^k+os2%H~C)Zyj#G&K>yaczUQaX!gW5U?q#-Wwtm6r z@H6&pOyrv*pJw=!y^v|LZCL0rQC5GOtu&LZReJ(|g2$~ncIqn@n@4PBzaYMI)8p2J zUb(r)PRKdT-!f75{PKz*$8T0xoWj7s;2<2dd<*Ydb2iQb28IyJ^t?`cHHLOUEoZ+~x+s&`*MAmFs$%b;5Crj_l^+*WitNY(@qTt`U zblLycH$PUj{IUNp-}UEj-V04E6|CHQQjYh;u8x?qcROA3L??btKHm5A9lO!(n>Pht z9=l(9^ZC8g?|k#89gWevV0zMr+>N#$f<1_egE>C{Kp#1@>rxL@+Y*@=5s z%PDZXePj5whWqjpmeLYAu|Df=e&a^%tHucu7C`u_HQ z(2cZ`R?D64coST`>%ifv*zib>|MOqUu#w0ulaqxBeP*{ z-BnM^=qZcNW$s=1>Xp=W!|OWwyCpWhNpg$dx!ylD_vo~lU!V6VpSLizTf+v=NKL=&B?bqcBRvI?)0pb``6r4 zVt$u=eQcDKnp#|%n);dl^y&HWVi)T}z3Nnz+J&#qpR4O|lx5jVPlvhR&Q9DI8GrNf zmE4xTYraRnFM3m*v3uR$2Ci3Zd##!`%NQ=Z(UxzS`RlHzw^N#7&TVzsyZkSi_RcUi zxG$OX)_CXa{JKx)K1Rrk&-@dWy>-!)7}1H&N=i|yol9RG+kPrdq$@QvUBKzqip{k? zw?lthzTT|9Vu^&zYL?K?)qzv1ZU=ld-TkQj?ehyaCfB$vT$>R8W=Hlc)hCa{dA?QAmlvJ)yG|^geDcY+iypOWx9;+Damk)}lOdkRWZi;jb&17*M5ILd-m=Q1*QFSre&{P&wVpK`|Gz)pM*7cO*-@R^m>)G>)!{T*m%$=ydZbc z-RE*sZqMI$|M&ji?pqc27uv2ofBLb~C!^ob@Bcrp?rQgU`f|1H$J}PO?fSaB$1r#A zvujJZzU_P2d7)dk>uXEL&K2u(ZlBtJ!FzgKMSfk~!@JUXJD&HwUcWzg(bhjM**jN- z+{lP~ebQLz)%?&~d56N|Yj;@5#dDtPdn%Q9tZ&`xb$6$K)xP@1F=uY+vPZE&+h2cP z&Y$xB@ zjNdnx$lRQrpLEw=WVXoH+qYJH<=$DA`~UQLyWgkTl{RhMQu1oK*UQIVCzYd4_q$xV zuJkVOU&fMc<>lvV^<@*?E_(B&Em$X&Qp0#(=l;EWe%JC&nI&!azxw~m`=eLv?I!A9 zar^3%`AYF;#1a*SjrG#MkN=Cm-FH}1@4{x;@?7yHKc}U>{&rk6xn}*%nDgep6K8+h zKK1yXwk7J^>$;Xj-Z@bve(YDBu3p|fQ>m4Ym3}1(esx~@WYx~P^;7n3Pd@msrDIO| zT=Det^QNv{tGg+l?=YvOg8sh6Kk93*)-+kaFnw`pY4Q8_Z~wmQ+`IR# z>(VRwYQlfJu6=5i`QxOv^EW%g3|^MsVSDWE-L3t℘wXZP}9(6^<^p3QF~-?`ktR z=&oFMB>&C?yY&0q^0i-n|L-~>t@P>Gp+mv;GkpGC-f7RpaA1SL8{=E|>;HMZvtwXr z>(8uVU|{P@;Ac2+K=2JCgM>wsEdvAd^W6^lu`c&=Rx8_X*9-cqmmIrg^XAFBxlg<~ z)XKeccf*%!#pMi@Kbrn33RbRN+qWS4+#JivySW)IJ)XgbR7^84FibdQF1qOb$wm{i PvmgmiS3j3^P6H=O_FLRCyj&dbn)aJ8Ffd>9ba4!+nDh3|?)=LRGVCAT@9g(*eRQ$xh4&xM zH9E3UsST{1s@$;>i4V3e;(Kd(5r5tzux)^UP?*(IfcQORh*UlBdc!-o&= zj=Q~W@8x}eZO%j_p7)&m?;khwRIk&vf?sz;=-9`{?v3@>wM>e0+rHvEbysB9m)_ZN z{-RfC!ydJo#q9@LI#L-e7EYOSA|>kGw{LNkyeAI(Jo_+vef)8=N$dKRcqV*4^>EII zxVO7j_lV!#R{qQS@Dl0kH}BW_HD|Lw5ox$Qdv^Bz>MA|osA*p->i!*%PWa@{^0@o) z&RdJ`-hB2>{@dTCd9T+w%e;*%)x2K#eB+6AP7_&9*m}+tzPVcVhkeSn-1oEooO}Fk z_TT(Fjyu$+BZhaO3}vsYuPqyPDz zHZ|MwuXMA_*`<`R+K!LmRaSU7-_xSRwOhYlIN93zI#^BBVgH=f+xM5hqb)1;o+B#ca;NPp4asMiGA1;bH*D4zxF8@K_C-GR%8#@nk54+iC z=iThzy>WG-%)x7U&s;*8znr}q!*)TbsdVX+l^))8g&!aA7=#smxydI`p6u@Y`@7H8 z?+#0pnKT#!gbsS2o>Y_meBw&|_+wq3;m?w)gyX;SGx``h@H*Cpc-_^QY8J1n@4trm zz@M5+rjU##Tq;$xnY^!BZL-88S$cZ-Y5!zQh3-DBvW8FqKwVO?v@V|Q=3ut_K= zF+)>w!#C%anKLDM_&#m_DHXxj`~P=Y=EA?dwz& bVgE+&g@Tm|Q@t1%7#KWV{an^LB{Ts5{E+$; diff --git a/ChibiOS_2.0.8/docs/html/group___c_a_n_ga09737d4ae5be724bf791a309e8a28dff_cgraph.png b/ChibiOS_2.0.8/docs/html/group___c_a_n_ga09737d4ae5be724bf791a309e8a28dff_cgraph.png deleted file mode 100644 index b6bce34a6913e1349411c9a19a30d2782bff4f58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4997 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 AmjD0& diff --git a/ChibiOS_2.0.8/docs/html/group___c_a_n_ga4e89a7d246119e077d27431a02586133_cgraph.png b/ChibiOS_2.0.8/docs/html/group___c_a_n_ga4e89a7d246119e077d27431a02586133_cgraph.png deleted file mode 100644 index b2d9acb95c22222065866dd95b2c50c2f6df13cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8590 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 diff --git a/ChibiOS_2.0.8/docs/html/group___c_a_n_ga557d845167f6ab4f224b036860411db5_cgraph.png b/ChibiOS_2.0.8/docs/html/group___c_a_n_ga557d845167f6ab4f224b036860411db5_cgraph.png deleted file mode 100644 index 9c1a01d38b99cffcd98abf7a137eb925f7cf392a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4665 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 WvrfKroXx<%z~JfX=d#Wzp$P!m<(}FA diff --git a/ChibiOS_2.0.8/docs/html/group___c_a_n_ga97caf4f277c09588c225ea2328a74cba_cgraph.png b/ChibiOS_2.0.8/docs/html/group___c_a_n_ga97caf4f277c09588c225ea2328a74cba_cgraph.png deleted file mode 100644 index f13ea74e18349291a240fc694b9282b928b355ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4974 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 diff --git a/ChibiOS_2.0.8/docs/html/group___c_a_n_gad9c686d19b4319ef586af3631b779c6c_cgraph.png b/ChibiOS_2.0.8/docs/html/group___c_a_n_gad9c686d19b4319ef586af3631b779c6c_cgraph.png deleted file mode 100644 index bb564c5a537fe51dd97a0b6b4753368afbbe256b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3688 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 - -ChibiOS/RT: HAL Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    HAL Driver
    - -[HAL] -

    -
    -
    - -

    Hardware Abstraction Layer. -More...

    - -

    -Collaboration diagram for HAL Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Hardware Abstraction Layer.

    -

    The HAL driver performs the system initialization and includes the platform support code shared by the other drivers.

    - - - - -

    -

    - - -

    -

    - - - -

    -Modules

     HAL Low Level Driver
     

    HAL Driver low level driver template.

    -
     Configuration
     

    HAL Driver Configuration.

    -

    -Functions

    void halInit (void)
     HAL initialization.
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void halInit (void  ) 
    -
    -
    - -

    HAL initialization.

    - -

    Definition at line 57 of file hal.c.

    - -

    References adcInit(), canInit(), hal_lld_init(), macInit(), mmcInit(), pal_default_config, palInit, pwmInit(), sdInit(), and spiInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___h_a_l.png deleted file mode 100644 index 6a1b67bda0b4bf251da89e53c9c553bc7ee48c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3079 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 Jmvv4FO#psLwzdEO diff --git a/ChibiOS_2.0.8/docs/html/group___h_a_l___c_o_n_f.html b/ChibiOS_2.0.8/docs/html/group___h_a_l___c_o_n_f.html deleted file mode 100644 index 8311217..0000000 --- a/ChibiOS_2.0.8/docs/html/group___h_a_l___c_o_n_f.html +++ /dev/null @@ -1,215 +0,0 @@ - - -ChibiOS/RT: Configuration - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Configuration
    - -[HAL Driver] -

    -
    -
    - -

    HAL Driver Configuration. -More...

    - -

    -Collaboration diagram for Configuration:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL Driver Configuration.

    - - - - - - - - - - - - - - - - - - -

    -Defines

    #define CH_HAL_USE_PAL   TRUE
     Enables the PAL subsystem.
    #define CH_HAL_USE_ADC   TRUE
     Enables the ADC subsystem.
    #define CH_HAL_USE_CAN   TRUE
     Enables the CAN subsystem.
    #define CH_HAL_USE_MAC   TRUE
     Enables the MAC subsystem.
    #define CH_HAL_USE_PWM   TRUE
     Enables the PWM subsystem.
    #define CH_HAL_USE_SERIAL   TRUE
     Enables the SERIAL subsystem.
    #define CH_HAL_USE_SPI   TRUE
     Enables the SPI subsystem.
    #define CH_HAL_USE_MMC_SPI   TRUE
     Enables the MMC_SPI subsystem.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define CH_HAL_USE_PAL   TRUE
    -
    -
    - -

    Enables the PAL subsystem.

    - -

    Definition at line 60 of file halconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_HAL_USE_ADC   TRUE
    -
    -
    - -

    Enables the ADC subsystem.

    - -

    Definition at line 71 of file halconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_HAL_USE_CAN   TRUE
    -
    -
    - -

    Enables the CAN subsystem.

    - -

    Definition at line 82 of file halconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_HAL_USE_MAC   TRUE
    -
    -
    - -

    Enables the MAC subsystem.

    - -

    Definition at line 98 of file halconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_HAL_USE_PWM   TRUE
    -
    -
    - -

    Enables the PWM subsystem.

    - -

    Definition at line 109 of file halconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_HAL_USE_SERIAL   TRUE
    -
    -
    - -

    Enables the SERIAL subsystem.

    - -

    Definition at line 120 of file halconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_HAL_USE_SPI   TRUE
    -
    -
    - -

    Enables the SPI subsystem.

    - -

    Definition at line 137 of file halconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_HAL_USE_MMC_SPI   TRUE
    -
    -
    - -

    Enables the MMC_SPI subsystem.

    - -

    Definition at line 153 of file halconf.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___h_a_l___c_o_n_f.png b/ChibiOS_2.0.8/docs/html/group___h_a_l___c_o_n_f.png deleted file mode 100644 index 0ae89980023c75a9fc3843cf4c908947d7aa989f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV7SY`z@W;(#=yXEjP*?(0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj<*cwu_cBFfbqXba4!+nDh3Ix4&?p1lxn}5gOAKygXaPRNma( zVXPK=p+q^WgFE|BYGP8-A*P*2RJp}+O!BVOJD8{?b?j16e9QEoUD{J&vb8~(=J$q}u*N0IF3W{7cj$LAy#~SO=lFMANcy|X|&6QY( z?&=izjNmmUObYA?dtW|viRW{OEEnWG#dzSxjTz63qP!Od6x8^LS_Qj0tvpnHm-R^4dnd zuh)d6l$AHvuDtSRa!6L9_QV;lug3O=&-8g#^D$ZPb?)Yf=lS3EWv%=+v2ni2IlB(? z{MV^>m)(+ydzQEA;lrbPhYi$toPFfwANL7lurp}xb`D=HJ=2HnXU)Bj`>yZYbMB$* zgx^7(k6td7jN7rJ_0hgn*;cvFFJAt3@L=o5l%kh+UuxEQXxeco9y@!$b*fgvH-=l* z3rc;i=7!8Yw`*OnddcR!m#wZ|TN}1H{?DrtEC1K8Ue5bgy7v3tvc${t#Rtkk_|AOcmDZQ#ch2%Z6Cb7z2aMVc6?sex9)iMroRbW%LNl7 z*I#VjeQn>{-+`=W-`bd#mc+b&{l5N(&;;Y4Qz{Lg7r5@-{4%ZW=-H~Td5eQ5tbcjv z(DVb#gFXwZtM7k*JZXCM(kYLh?U?ee>DtXmD<3uSKN?FFk3JH=tNO$1>fS@kZZ0f- zmDO8fz5VvCm#gNzzHztquc@5;t#>bX)-K*$yu;UvhqH0h?F*ioa?Ho#^?!d0-nr-f zFD>S)nX~RMj|=l_T={&9anGR-R)_Dg&UK1*&cG>)Ow!+m4<vr$q;5@s&Oh#d7lu- z6Qj!$EByA&8X3kL3>zkTocVg}@pL(cB*6o|XP35yX}6u}TgdIP@y9pu22+M?X6Ezj zWo1hKUW^rfdGJE!hV9?8;>&rL_>1gka}&wrkqtZ`VYR3MlyFynbMw;MptWeVYMuO+ z01XAP?w5Ltmxlbl>pfL7ByR25qm`Y%^5b9q`@i* - -ChibiOS/RT: HAL Low Level Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    HAL Low Level Driver
    - -[HAL Driver] -

    -
    -
    - -

    HAL Driver low level driver template. -More...

    - -

    -Collaboration diagram for HAL Low Level Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL Driver low level driver template.

    - - - - - - - -

    -Defines

    #define PLATFORM_NAME   ""
     Platform name.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PLATFORM_NAME   ""
    -
    -
    - -

    Platform name.

    - -

    Definition at line 45 of file templates/hal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void hal_lld_init (void  ) 
    -
    -
    - -

    Low level HAL driver initialization.

    - -

    Referenced by halInit().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___h_a_l___l_l_d.png b/ChibiOS_2.0.8/docs/html/group___h_a_l___l_l_d.png deleted file mode 100644 index f9b4d22384fde842a4e952ffc64922316ab097f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1100 zcmeAS@N?(olHy`uVBq!ia0y~yVB}z6U{K{?V_;y|x4C>V0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj<*cwu_cBFfhOKba4!+nDh4T{%qky3HA@~FE0_B(v-CEXQ0dy zJ}r)>9U3ELM`^)}2TQI776`ePY)#IHdbH}%6ZwEidO@vOnU|lH zuF!m5m|tXn@5$aR_xW40-yQ#LV_S6Iw)}cPLkA3;Q2IEdob`aua^aUrsSNr#>VgNW zZ*vCdRMhoNmeZccGJ*ZW!n=}hnJXDgZ+p5-VQ-i?QSfx;1l^@UoEK{P_Hwx#UR$QJ z`TU-Za~n7}Z{92+E4y_rTjV4Ul>i+v+v#6REX0*wDd`BfEIG>L=n@5IsByIz*__Xo zeXgCMx6#n1X1)I8N`q-$qW4la8^?aXp)mclkqTZ%}x9<9h2#ekHvgk>v{){(f$5ULWJF#_q=;aa;OM`f`P) z{+A^OU9=|V4|3T~jYqu32OAf0~cn z-z)d)fBMAVFNk$H*R^6+(4)^mPPTzu^A8^}d-?tS`uC096OS8Ks_`GHZ8N>PlSS6} zRBBV-%N>a&tC};8-Hm<0<+b@~on?N3n=JS3+xF(yu8G+(&ybOtWx02+?qj7HYz1B} z+olBF^5$8(WX~?E{Q|0W+Y8IZcQrkVJ6;*=zdiPfP17-sUHex4@qOPNwuf&5=bJij z!?u2&jJxlQ)V%#EEUOm=gq&gKv|8|>ErD=?6>dSk?A`6D0+w8 zaffodXFYqpp1z#!mHIDmYn2Z7iq%T5rUrd_egBc{>XU-30`1;CwQmadMjbV3NPY0m zN2~P5E{=B$J2EW|mEt25te&OjmWpySh#Ae?-CkWST)WL!DXW$BP?Oiwr}7N-InN!h zaJ_dFm?*~0BAB_+0m?Al?K$&(gxKBe_&@(A1g&gwQA)Jt-IS7<>A8DNWaESS7%PQS pPmNAJ-SpN3mhCz^I{tkZKYx0P@|7U*vV_;yoy7iAd0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj<*cwu_cBFeos1x;TbZ%z1OSvf|E_tM(t>U+j5%#Ba_Kl?s*F z0=GmmG@~1*w``cQsbrx;B+p;giqo^E9sTHY$d7v&cdECIpMt}JRDN%b3$5Rl>gH;) zoC&)oqM^yML3JjJb?5dQa(6%fK3w)%qTg1|TlwsnpEmvSx20a*OZF~)=Cx~=xPTLf zVhe)sVE!rFAhDg9QRj;_N52m9hc)*dQ!Y4tdFwxMR$xEBu5%;D`!g&7Ps;`5Ryf_i zKh6J}d)_;5{Us$eEye;JCweCT;X9D}rkueplJ$Ye{^k=*nzHhjnuML6=y(=5b<9!a z^y8SgS>+(7V$n1e3q_Z6lXkCAl00_euS#%j?Ut`aey&Fk9iGB9m;1x2NkY#%OJ7eb z|1A@=>vzJIT8SUYE<$rYc*Uu1Jt*To+u?{hgT=zd%2xzCudKOd@|N*(P7PPY+aI#= zY`tYX6?Hu)G_&d+ImRE>^)LOqaQ#Pv(~W=LUS?xZoz)gR7V@Rjt|Vf z!Q8ycw@#e-Zjik?XLnxiF4x0z>K| zd*9+olH!6Nqj$;uUB1p;pSyke^q!3t_TN*(WY{AGmq=W!Vfe26wRYyI<^McRAKw*w zOMHj&MEM#Ylf-tDZD*r8k1U@rB9imn_j1pF<<_frZ%to3)jn$H%DnkmJ69en+R(i_&Iu$|KEvz_C{r=ZeINO?60co?`5Cd_(hazSQmH)M^2aA>!P7>X!qQ??*prU z7ytKBiMsrAw((y5&5w4iQrYpx_(SK+bLW}&_lHL1FWI)uG=JOHwUKk(YWH=yEShWb zDBjzaL7eGFz~ut*1N<}6{_cK}-P!ND?E6!X)ZXdp@^dCV_$1u>`1!)qlkOIHe5;C+ z%2>(xgXO{R89yCwud6@Vy6EnW>5He%&5PV8uRQ5N%Lfi)8KsOf8Oo2Yo>}-iclVdf z1z|sBZwtJidQrc9$-Oqa`;M^_CNnMUxfF|D@ZU z4anI2=+Y%i_ME%F{#nPy=9~YLoFcJVi=qFwtjoFyEYpo&JY2L$*0Au=bc4c2=U%)t zym8q8?_leY`E|Er0YQ01>u#3Jx6zIE%j4>WXyO*BEoM;?NO8I`(7nyIQ{U8 zDu~Q@cBXjw*Kd9+lAaaMm|M&EWzqY|@@HOLHHlL@>C53+5V=H4r1Q;(QYE|1%iH@E zlX_RIXTA4dz??xtY0I~7->&@+7Tq|Y?Bw*sdMBHB z!bFb}F+n?z)L5l2Oc@4ee;kx+S9Q5Ip{{^2?e@p7XMUIkNkmMLob`CcXCr}W0+Gs3 z${CVU-oE91?>ozi?#;nM>LsOnUwr3z<;2o8XHgpaB@+?G7ccf-+xE8G<>ItyPorx(ygM8wvrK2@ zQLZvJ_G2huGxkYS`4#WQP;t)WwcH0o8$~8>p_l_NtG+Bh6XDP@Sy%htilA4wT_h|- zuTBZFcbMk$P|anTXA`%<;f^ro9djhpXQ%xsWXQ;i`zB`W_b&cv-?L|_`9H-M3OFq} zXpq%+;cLbrgQUZL3ON!NjZdFiE z-90n=laC2*+xx_M|6@TXj&K*Hi}|mrOcuW0D78OXP$~R`ZyUpkH9cp;y5iYB%*Z@; z{)4rgVo~dt=FgFlk)Z zj|G*cdo+EXn0RH*(H@X%}Q2>y{Sj_zk`gP*u(z3 z`R3-;-Bnc|R0Pc)gC2%mD_kaJ@96SZdkTelCJ3nfl_Z1K5q>U_!jxjoMo=bKE7 z`EzRf@hk7z|NsA-^GoXMj|tfYl4%kf7tj1z)9}pP{Qj55ZrAxwk|G@^tlzx*JCnuH z_X?XFypFf4?BKbT*v{SK()2#%*xYHM-xr)dy1s0u&BOky6KY>dS-PH`u_{1GaG(4G z-ZKwd>)e%H>?VlCw7sZ0x|HErmekpeYox9J^tpG`C~)dAm()JAW60{PC=3q%n_YKY z*=65^;E?{a^I~INmfSt*<3Bs?ZxJXo=6f`Kj&N@;Q#DRwtTFqQm)k94Ui@t5<+L*v z`IGJ!a(EWZdu469w3~6?iEWQx|Lr@Tx>z+^?vri)moFl+0(|1zURJ#cJlr9>_jcaa z*1F?UmRUo)cwptq)T`^iSj)*j`J3EuriRD(|F6sb=D8QX z&azgT=-SS-_2-v)(r+a`{E;}hyuQqB>$bdoO_J7z-{&pS1i?z3Hh$qNQ79?T(_)LV{es>hH)c;O^MqaecA8&_lfj zd4sdR$}ekN>qb;ClODuu1Nm<4+S%_yy8h+eF4g|ir_SokzvaLTo639dR8@b6{ggc( zA^0)et#1FP1ExD=ryhFhQZhBs<^J0@HT}14&;OmSba7VM)#iQGd-a*i_wcw2%{k3B zca~hYjs*joX#x`8s3g^bRhD zJ-iR@@k+nDZ9nnG4Mv5#Po|x$mF!4PF`4w>jS&RL{tqntOfi+xnmXHj1^Md3Sn^wVTSpoi5k2ʯE8||vdhmaV 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 dfYN*Q>t# - -ChibiOS/RT: HAL - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    HAL

    -
    -
    - -

    Hardware Abstraction Layer. -More...

    - -

    -Collaboration diagram for HAL:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Hardware Abstraction Layer.

    -

    Under ChibiOS/RT the set of the various device driver interfaces is called the HAL subsystem: Hardware Abstraction Layer.
    - A device driver is usually split in two layers:

    -
      -
    • High Level Device Driver (HLD). This layer contains the definitions of the driver's APIs and the platform independent part of the driver.
      - An HLD is composed by two files:
        -
      • <driver>.c, the HLD implementation file. This file must be included in the Makefile in order to use the driver.
      • -
      • <driver>.h, the HLD header file. This file is implicitly included by the HAL header file hal.h.
      • -
      -
    • -
    • Low Level Device Driver (LLD). This layer contains the platform dependent part of the driver.
      - A LLD is composed by two files:
        -
      • <driver>_lld.c, the LLD implementation file. This file must be included in the Makefile in order to use the driver.
      • -
      • <driver>_lld.h, the LLD header file. This file is implicitly included by the HLD header file.
      • -
      -The LLD may be not present in those drivers that do not access the hardware directly but through other device drivers, as example the MMC over SPI Driver driver uses the SPI Driver and PAL Driver drivers in order to implement its functionalities.
    • -
    -

    Available Device Drivers

    -

    The I/O subsystem currently includes support for:

    - - - - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     HAL Driver
     

    Hardware Abstraction Layer.

    -
     PAL Driver
     

    I/O Ports Abstraction Layer.

    -
     Serial Driver
     

    Generic Serial Driver.

    -
     SPI Driver
     

    Generic SPI Driver.

    -
     ADC Driver
     

    Generic ADC Driver.

    -
     CAN Driver
     

    Generic CAN Driver.

    -
     PWM Driver
     

    Generic PWM Driver.

    -
     MAC Driver
     

    Generic MAC driver.

    -
     MMC over SPI Driver
     

    Generic MMC driver.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___i_o.png b/ChibiOS_2.0.8/docs/html/group___i_o.png deleted file mode 100644 index 8e979b5fbdc6b64af79afebeea8370aa063088ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18059 zcmeAS@N?(olHy`uVBq!ia0y~yV7SY`z_^=(je&u|U2eil1_lPUByV>YhW{YAVDIwD z3=9nHC7!;n?6ux5BpE(h^<$h|@`1XcPB}wYjF-vi2qjKML*ou6vK&e(Tp&VF$CeYIW_e zTA*UQTgK9d!?JAN`}h4Srbq6kn9saB^KR|E_1E_tI%o5_){gV@&F3?pv#1Dlx+qQb zfKi@~dE670w7N3z6-K*E`>53*I`f3bNf)(AJ;tI3bhf*u2yVXc)%-NaKA%*TlNR5Z zX1v|jq4RK_Pnw#yRj0~fkISAal5Vs7lujC4DiQK*o49PUhf$Bo+$H9BUVD_(YCLD_ zx_|$#WwXiLCG2k36FTQDe&2ka^PKX*ofTii_vi1L<2uWasU~&By(OO>@TV+ld?)!r z{ZUO{c$V6(^T8+16?TSqr2k2|{O#WyFPZQOs&iE&tL#s7dTl*8rL6Y-d;K(<#Yd~{ zzifHP5P8XS((&w2v-7jH1vf33%+M+AS5+4@Cwaxv*iBat%$xCd>DOE0PWw+x^1I|5 zf0$>R%FFW=enPdho=VmFSNge|zJE#YX^irld*ZP1iC0TqCM7O;sWOR2 z*;jpHibN)chb=p2iTXbO+4W}mX+<98AGV4Gnbp6KY4Y;+uPu)5SFyWPV%e}x|JMA- zol_)_3qCx%ZCk(j!ff5+$M0O5rh0~HgH`ZM&&#QXwrR|}&K&D`tUPhm@{3#hk{KJ= z?}lo0wy*h}uGqFQMP~C3t_Q^odrq#25$n{6f4oi4v*^Smz11_8W<}l9pZQjsAxC}D z&1I7N?&pS1x-vmEc3Of&H(%1S*Nn3c^=RFG_v7(2UGr@_)_PB}+O*`e#p7eK5g`E= z3T2I-G5(OAxT`-^_x6KrdM6)DT=vd6Fo|gMcq(&>0BD!pdvT5 zYuVf1)(v^-$FiM17+%cyDxJ4_l0|dP^3M{D2Y&A62rSTVILycu74{=-yQ$|K*D!tC zmizLzygBNG6c`@}oaWm9a+_M`=Mx*J%Q;@x?h6z7$KKGps*8Ea!y@raEB*zU3pX=V zb#d@dpVs%cFgJI{y&*xA4*xxtt1IMrE?MHB z`C`GXTeEcYv?uN8H;I+H_;uN7hBFL5+_!EGmEXPAUFl?|$=al8>)2ZpTh0|m zcOQv9q1S8@5Eiy^d+z1e3~M*7DQLZ2rE<^doJ_fdueSX8HG3RdzU!=hSMq@Qrm4bB z&YP(ZG&YAQeT`#q;`lv9Wf$8!$ME{OHbvieu-8uD)#OW(NS$u*`CwO5^Q%{r@>afK zF|eMyOJ&_h)5DCHO8OSQ7IioN{GQ=oXl(3PYt1{mq$Fe9<0l3Bb(9B%>B}xyqa(ub zLa*W7)-|v8?^x^pD0j)rHlL;ExBaYZ*d~zsf9dTkm3!`C`t2QwCV%Hi{$~7BdwGiU z9u;O~Uvn0w#s?*eKejXIZdmi7J@56z6!uFc%}cgy*%QHW=XB3<<%u7>wtw~5#Gbj! z(I{s|m91c#rq}a1JZYyp?7LPx|Ko7Iy8hk4vw@zq?0f-2&ws!2onjVPx32%tq-D}9 zv&5_7(2U7yhL8fueiQfAyX0^K0LC)kB=YU#9%{_{o3C@t5}($1iyqXPLr1@(oxQ@5=ABd4jndb(zU z#KPbim1@Sag1vFu@8;U-UHHAXa6wki`|4la*MHwD*;D>4y<&M?|C9;KyoL7Hzhrq9 z!P_8pnrr`~ZF2mNS`3BuUQV5~<+=9i>7GtkBJYN-{qpx(uI`KdOE>L*{c%;-%CPrr zr>t+zc)2P}Et@@{j&j=j_+2#`TNns zlu(nmcQr4SFhBUNFY79@dm=}9#I;Z2vD2KH|5Pt{-D$@^CEV!xB-`m{zJ{DzzQ}my z{=*3%7hXNhsL&P5lwh(T?!h)O&pZY1U3DBRV(*n(BF>yC*3G^dw*9L|5p(1v)wUJ^ zbA!vLCwhF1&Fh}{gm2Rl?}lZq=TsgscTU+m@gHA|r<|g%c>ASGpOTacMH@ty?aXPu zU8SJ+et=Sq31JL zAKcrgzVzk3rj8?~XTD^_#$J6bd8$~pEn`RG;WBMqEvpy1Sy}7;Z_DMkxqLCv)Ov}p zQAyb1*Z(Wjm%Q9{@oU%2GbIdy_2$ht*S)X{a=Yvl+;K#n(Q1-pcI$ymS=npce6J@j zVa&8*a9GNpu}A1Z=(5Pa6K`kzO8)bM+a&buo~DlTY%gq;e$7m6onI0?U8Qo#ONNZ7 z$2JU&5o{7Y}FZT>B@&APP%!IzU#{_)!69Y z@#6e4$$eLHZ9iW4dST(28e73{EI+Iixz?R&)O4%#zBj$ZWv(~FqQ1VS*LSX6nttih zr$>p0YfdxHb3Sr@mDc=_=-rR(^IlKl>D^-%d;L`0#-(R|oV~X8dc~@%=MA*@62soH zREQkdth4%8BB+>FT<^Pl)kg0Y2NR*puV=W<1}_T{yLR0?=9rJT!Dp$o`#UebD4l)x znrdO+9@DvrI`dBGJk#Ww&$;GJNi;vhl&QME=KuQD#?CN{=R@Vhjyq-A;wPgoGk#mo z`0I#?x6MYy#fc$*PHdaX&hW24_xA7HdoiCoZ_iSBsi>bW*&{7}W#&s6hVY7oC+`|) zi5Xs&YPilLZT77obH^PueeYdOOggGfH?N+5Di`}c-}k!l=NP4ZH%wNqFAMHhF@7@l zB~S86i?rX<8N?W;8g4J?k>8(C;_UqRF~dH6mj60ZYwJ$w>P|W{sr;&UTD4)rT2GioBGT*gOQNW^JT#;)Y z^8@vudX4GLC+t71s=9ftjmy>X^@oSad8Nw#KR(vK(DLGscEd%dBYeGXtL=)N+mFP4 zT2^J5cc<0WCE|$B^}IU~H>bV)!@D>seE#~+sSK>!=|pZ zS?;q^C*syGQ8D4ytXmVM^Q!fCs5qaSCv9{lHY zVc|59i<&*#mI%#LcO`-{Pf7jhXR-Hx@nJj-$Rik3dddST%zuUqV9zyFE` zcfKfVSgka1)$B`i` z{0$!GPfI;jds3Bo(&S~vJIv3rz{Q8xV^&X!|d!NjCX`*Yvd4PZB)W?_SoL4>bsQt{T zhnqe}PvWvnw^EwL{b8BMk{>fmo`Nc4<{!3#b(xV5%`Z*uS1~`iv3!@8{DJ2NkGGYq z{j~J8cNy~wxwJcpv#xGmqRcPeaeb-Ll;V$uFw7Wo;mSOD$7?*cQKjI@qhL@&qZIq_L?%h zRdmUzKfTH?JKUx3a`K*(x^EYL7w2CNn*X}?{bw1=aa;^7K4d$5_FSjult*FYpU1N42+P8Sk?s|p}?v58er@8V=jLP~Z`k3m+ zJwBfBB6{yxt;39#0ej!Xo&QwPAT!rDAWTe4Rj8a{$9oEXH>*@F_bOTY{%hl^ z>c6r6UyJWo{9XE4B{Ke!s7T2ih7FglsmT=?t;_v9pYg`qx8Io5AA6}p=36nOGkgiD ztvx&4kM+uy3y}=-JyiILjn=s^rBr?`0@WD|?m`dcmM8hm*>OR^N#en3-{Pa$en+Qz zRGrAW{Ih26a)t~oP08KIR?e6^ci(JAGxuJh`U0(GE|+HOtdG0&lEHpUU2ST+@Wqn7 zk4hMh8(nskuaCL>&c&y5iGF1CB}uoV+Zpc3C%CVg78@G6D(%=N4;R1d6PNU_F_m@L z%vh5bd3C*o;MwP|cL+W>d$_%S@0HF9Ay1`ETdO?J%;5b{TaXYjDY3;b@!5PWF22&_ z_g0>D6Q`=qy}!Rgt0AAm@XM;y$jB8_W`;AYShsq0RqcycDwF=5JT=KL^zGysFAryw z9R2Own|k|?Iz#Tp2zS2_ZBUt#laXOldwZMv#e4sL+BOv5)f7rU;dR+i+xX#u!y+6k z%efni8Lcu;Pm_+8nea>s)K7Wxx%Axn_4z!E682SJ{(axJz5d^f+q+ca)nEH8f8G6! zy`o&{>BNPutG;kvtPmDlYk2m<;&Urb+tmHP#MzZJomrNfL4+w{rAArB?QQN)xKia* zU;D6Ys5AYzVlsWd?G%k&_d@s{)aUH}?2=xRI?dt1pV*w;AD9;1aAH_{X2qwUFWPS1 zD%gAbmdfABt;-I3x<~|RUf;XruslP|yj*YnDbuEji;JyNRNOG5<2GZA)0L{tsV9%- zZEjs-G~LcuxQRqJ%$BLJJiHpuQ>Ou z{9=vDYLK%SSM<6~=dXHiewgF$gqii{*2r+Kc~cS)vr8d%{S4j-d9(W&b;~VTGFW>K+!rXSN zK;~wu>7kNQN`4P=9pUXY(({?V+A? zRI`1K_dI5_F}xwV^VaP^&VqEEYn4kkpPHj65b?)XQ7W9#q?aRHlk4xwZQH!oDa~z8 zX?=O>l+)5}XD@ed$T9dXeQc5~V|Al|$^GiJwVOkHwYj+z|8aa^Q~LV5wDk1`Ep1KuvcJj`SAEUPo|Mw2 zV{lhTbb+Kx%}s?oHP?ez&r}!*aatSQEL~AjTGYR%Q8Jw|CNvf8?CWe7P%=B)q?+Yzt?;(D{Sq@|wCsxxSOmJpSpq=FAVy z1JY*s>wcB#-bZKvaH;x7qa^kRWkSP-HYH&kUJ2%Omp?*pMA@H(6{`gP zFd1JvmL%Kmb=b4&apL8(L5wnt4|ayU%gSG_%JAmgxu#hqE2J2VdLGEnDCD0QB;46! zd$C$MK_&0;%~z=k0u})rJ)t6Bf2O>DDW|usqvPL}($}VEUtYOB-E*>5`}VD-ci0|0 zcbSntEAe=F>(nP~^GxRo)QC9D_9?#EmhygM?nagcX1BwPqfYh8*Ee3fc=3aVU~MqR z(-%22R;w5CpP$9IK;E$UQnD^DsFk>Tj%0m@+xpw{{8IOR{Ow$=>GeGL%$0SklA>~R zuhtt)-L7K&ammYL{qY7;2TWWS&Yry2o#Qu?(iSbR*S(ojwh6awe4&tL!}=gLbm`2k zTebJ>5W23&AhuKY(Bd@=1}lEfbUrwlS96us9|H!~jS~AO_*D67%lo%{W{gRmH8WDw z`?|C7jH&yX{ybU{`0b)x+^@WFhRt`x9y+Eie4RhJ&?fSdV5dA|MfvAvuQG~WPE}}l zyUNRaX?UdgUFp6%2YYraPu%shd2Yn)M8C4=hT{^Sju|%}oxF_sgR@ed+02&M(*_BQ zg0ZpD(tf{vvSa!GcFkO`zUb*R(S00x|DJnp5km27{pXb|hlkFNNx@3j^dJ>|w>)sZj z2gWmgUh!B`Rr>4Gq$kYtR>x^^$@{fTXZJEs^-5Jd;LY&osLAwP-~L%%u9v047;B^s z*iUVnY|*&f=lWJ{tz`^04=!=t-ex+F?ZEm~Q=l>(|;|&j}A&nGy9kzN0|vfcle#4_C}D zHgULhPi6MD{Sub#%YBZYX=ki>->sjQ^+JE{y6`^|5AwMc>mKguk~{n{li}0Zg3f|N zA}#BC%rBgmtEzt&D-|^VHS^5-!4<2jI3F0K{i$8x;!>j6@chz-Z=AKM7OMAGO|kuA zbL8c^PfL@g%-dq?et%W&H3_~C6JC0GpYCRS!~P}T>Ttv!dE-8nMNj#>6@0nZ{W?|f zFkPl^zVDa19lvL-|6YA7K<-<`_itt)dxG@m&0Aw6^I+ktryCOYH8X_Gto=KyZ>Bi& zpKY08OHFo`GI(5XHfNl{tD*j6=fkSY+oi7mo)aClN$&iNK90++2abb!Zo*4nMy=@Z zPdpZ*{`uOL3-cN5+B?!`riJd4){DKmHRZ9|=e}vBp{MRuEUP+s=5l97?*GgW-by() zQ>Rb*J@?dg1E>9JkGL7mOw0~sy0J6L@=Df{$)SPElXmvG`-HC)c<7Mkm$7Tzxq?~j z2~U50ohs}1WL4(D&oh2{rRi*0v#NSd$4upb`HR2*ba^?sS5W`2!~EaJq&@nVe{6Ya zvi9ZeGZKqec^%?x{ra_cKSRK!i;ecy6PG8p_$fQ_Hr#hp3YDBGq%x5~&T#Ic44wY{1r{cRGh7}$j$_PR`VG* zn>I_0g|||Z&6ittoyHf225VpAnu`ICJyljd;=F8_Tvh+R*y)24!+Uq7hm7n_-`%e( zIsLH^w9Sny-S0H7_vhpa=Ig%UVPaaWAAFTm*S%zF{9OK0uB7H~z$Z?YQ>R5*uQODv zUXpU=W#pzKO)Bh#d*`3qcJw==l44S!Z~AT4=K>3D#a_#lyiNl3IcMCyF0e51cweHi z@8y}-{5w+&cEnv`{9)H{UU}jy-T3_>D+M0fG`y2}^XUnw3*IMj@gIk=SI3*=%QlB& zlq3bNds{VpV}EhBBK*(4wq(Xzb3J&rF}A*XEuF7=2;2b+4Yp=kDAcK3aiHYJe2zlj zr5YCU2jYD<|5|*I<=WRSZN@X3a%F^j+wMzuop`hSgGi|CyUlO)Z{H1@^nORyu6I-S zt1PqNZ1%NaLjiP`WUaAi2x;kJ5G)D|;wNyDT~&pu~LSbnnpo_qfv zUsTk+g6N=ok5|1EY2|zItF!*=Ua{_vHcD4!rM(SadF<+zqsN6hrIdEvFgaXlzGrpy z)Gad^o-tbR98gob6BlDs8|r;pI(~Td&b{z^>J6F+4H8xs@yx6d%2eXKymB;Gd^A}%b6xdvS>^}ZtLK0JJ>5^COZNDg;-Jp!7cT6W#8G|Q zOjfG**z3=y>p*EpaM1^!hUZ+3nhblrkL>^W)9RgMhM{_AdBNF|u0?N7^V}#qxWC*^ z-g>U2bw`=aq#T{Y9Dirc^iL0~lj_wwzj0lo*HMF6eIiZgMVZtY?(jXRYdF{Ea;WgP zx$3=Rrk6PvzVTI2s-2#$aOmcl9ribCpYbeywERqsrGvN9#HZPp7Mp$cnX}_U$I&a6 zF1_i-$@~oKg)dglo%?n*yS0`3Bi__(dwwuRwt{R-`6K;BbEXhL5LD~5JNu4lPB~$qwYyBSatee><`I}+OWhI9$ zr{@Nb4`-BA?$2Jz5ZgSX^OijGi@%pH8FH^x^v^Br=M+BmJs`AH&-h$YS}%vbz{fWe zm5(ON*T*QkPk16BX>eC3^!n+#BWI+QCayZq_~A&W_#46QQa{B*r{;xBRtx3J&(F7N zjr=m}Wb8_YsgGV8YEKnZmU^Ff?8G@gJ5A|mEp>lA`D?dUofBz#CiHRQnGGE;!W0Xl zO{D%^$*rCAW#Yuv*b>_tcU#WpGSr^waZ{4HRQoPB?T*)yGNwmWx1VjA_fOTAJ8rGU zo|7i4%V&9~OB}Q}c&wy2nHf${83O|c6rN# zC?%h_rCtjEwk&#kCgR3DyEhlx+E(ws@-?Ac)180&_T$g4T)$qk^7X-)401|`YA&yd znp*eOIsMNM*2UahTy+;iS0!2r+9e*-wTpk#=R14d`DVQu&wQgKtHT^|r+Zu(xPE&d z@0qu13GV}6B_DPMrFSAtuR1oc9C*v{ZtI#=@k@g@3;*~l8Z7EMll#L;1}=uWh`=A$ zcI^_?cPLAEt}B`8k$7zPnGY8k#MFP~zg*4`+xB|be6EgwV?FF0AL=q+-f)e}wb0b& zp2~G_Gvk@$V{tBjUO+O1$f=Z9h1a48;$4GFUO*S+B8U>$-KXN~dr2v~hFuxo)esNwndWi%r@QhJSNr z`g9J1TUI^Lme3z5jecyy-}CN={_fVUD^ZJ^5-AP1r6} zGx#55c;CRFz~bNSw)#46Y~rRfL8iI}%^aUQ3UrKTG46`ySTkw!Wz~}tHl8a?tK&W( z$Dpe7w&TLdp06%8U6vak&ba8w!dOtbjOY1x{X4Otwa+;kce-5Y{GeofPSW&Lokv-M zcaUQ8GUY|(Gd>optV`lb%li1!#Z||xQ*7$fbrBVTp_zWUxuKVS_fDVM>Q%eXaILg? z*f!Pb^G{AbJscG^WxmkG8U}Z+Mh?OInYWX!K09kVUq#wo>7_55w^fz+gSu7SEQ&u= zZZFHcs~UOm-1o)83(OkCU6n$&FQ4?ih4X3kjcpa-9m^^i-pOk0UB|wk_rspIw_oxo zO%b^GpJ_&B~>xJEx*R+&JWyaJnDxYGyFYja(s_K{hj45MkYp9ryT-6 zx*Yq_ll|cCYVm zShtSt_A|@LYOL#DzIbqXW~N?4Eo03IpXq{{HC{`bgqmk5DQp0x5SKUsI#6^R~5XIOBr)l!gaM&P}BeF_d{f^tfS zm~J-eo>cj`YWi|UkJC{T7rVV}e)LE_;q)|XgStPF8Cg|wYuCocMt2zr)%~yGxY(u} z{jN#i_GI2_{f3(i8(yz_KDDHTr+!KYzvH8@Ahk!c%ic)T752T)Ryba^%QBp7jo`e@g*OVDdcE4^sa54qgoNRBb|0ashN$I3c z-ue$V8TTsFjc?s@JG5=~{*bE|zZ+@$y4+#>P{v^0F~v-23&+8^U5iWvZ*CLF2oZ_b z5qtcsiD?V-)J+>5ClzkGR`UCuHDhXO{DZ~)^Xj<{ROY>&=rKuEe|5O9x}M3MYYHdh z+j4fv|9QaPH_uyq_q(dN&cu*2SHC`R-#A16dbDnE>u;IPODe^A1{;Grr+-aZQuVW0 z{ttuxz8{b3>(jb6ZMwjrc*MW;z)M-#l9KCEI&0D@PGoMo@VoyIr`>nk_bzW-UKUMT zQ@h;z%pWFS>A%WKbFOWb*5p-Jl78^+zN!Ad_`N>)pZUIQZofCbdV1TH=f4v6ix_n& zFFT!LYG^mLYn{2Q&ynR^jh8!)%$WQ9Ng-d|&L=!8B~lfPtL_yvI4^r0o%$yC(7jNv z<*R4p<{sX7T2Ea*D&j@}`vkTEbwN>v*yh>4cZXlrO0!ftv^eKxk#&ys(usK=y(Y~2 zeC73?%lzegBABOEojmqYMY4K%@vQ6d>z#Ao=4t5Y%(+qAH*=EgL?)%G3x$DlNjEm! zy>RPSp4Rp+-!D|HY*fxZGqq#OEWN;$&s;LiYpWQ}+y57gtNl7T-P^nV8>7Q=W{LBE zLNl++PYa#;^?xPvgO)&{saejNZzt_FpBZGDy=uzd!oRW0^EGFzlDvJ}Ja6-wS4SP5 z2KoN}RG?ICX6&bSD5FI8{JUT8XFUF5TCOztTe)pyRnH3-o$C^xm?h7v?7jc+*Y4vt z-!*#)c0O=r(D$1cQ&*S0x@e1l$!rdL=j(P%ckX|xuk>5x`@`hG*Oa6qyUi{<4>?yk zZH^A>uImeHm<|Yo%ConhMgQ>}c*#)5(jGQ*ng^S=->h}!cfB3&Fh7_F8qsUfm~(Y+ zcc056F3bE~_pV&MyMgz>*}Ls7kGLYOAI!Yzz4nHX=cklh&+qT+^N+Rh-fvv@zEtYK za-oSQ&&V?5rY{Rqx_7Wg&2?c}S{_q^aj>%B@s1rcBQrOzx%K+#w8N8pCU0GKyFA`r z&G(nc{JLNE3>`BBUt}Ipdh~Aoe_g?3mxKmZ27}864fol@!gs60Pdc8G`&EdcjX(eJ zG~Ml>)@kR3`*O^7X(9{~*Gdh9FU~ho30At<*)uEe_cyV{>BpGQESiw9d|`YOhdg&9ugee42DOIw0!{g)#qWze>n1*I z6S*hOP}RfAaHb|(VME3Icb~T}T;37%B4a+kbct<++p3*2(tda}6) zJeIslw~NmSZmgYO`wWQvb_R(Yw{BzuRIj zE9f(SeeL~-GkNK9k^Sq!+)8+Z*chsgJ@1}7`_;3aMu*Co0;e{+{FuLPXW5p;n>QcW z4;tdyJ85EKOP`R_8P!F?j3o>^`e){Kx*W>qc^N*<%R8=o{kX1Ff9;1w zslB#t*QMpzUhKH%ty8o0tKli-i63NFKCuSPGP1JD@-zN0Jn%g#?CTqs%+uh()O4m9 z+z)oURPaBT+O_CTbhPw3f7SR-6+ubkxrrfvnk2uMmPXdgrg69~JU#PhJ;N^M_|?CR z%KevD`Grp1xia^kp|>edGOOU-xo_f18XXFD4)+kKDbx`*n@2WBAG&jxJA^N$%72E&A_${mO#G<%~As z2O7`(hzP6*O;3L)8@(+?+Oz!Mq&v#Z%U1u0XK+{7dbul+VJ*Xc=7d`gll^9X+_&o1 z@hexaUa?wfDp*&ap|5mC{n6!)fFnJoXHK2+NV&YZh-bM^SPLu~td#B?TXQcd^0eLgC1Rf6CJJ7DyX$qO z>fE`9gEBihO4lEe@t@D&zz`mJt*^Ub>fhd-KGwo&Q{FGs*jL$gDBb8V|AWf3f2Utu zeAFrPu3|b*W6un~%TDdWAHAD*lrFzIZ(r5?!!MUbew~rbB%4^*nAl@AE%FTeiwuU_ z4Ex$oY`(AT4A>8-F#JzArsbMhd%+}p+b$jdM@Ev86A$_P7EnztNJ~31Hm)2hVmzOdQU z?)bna7-w>JRqzDW+O%0=cJoe@TPZwa-lBdW-}tib+qZ|`P=rZpYWA0 zs*<&hw`y|PvwdiHx}c%-NAAJ-8JRN${scHO);e?SVe4Sl$vzs*u;BH$g*;#F(W0_^>UQAyw|cZ{|IXlG}~M?|_!>+yr$9AKW^%W0zcwzRtA3@Pw>-=d zcfx1CoLNrK#=_*M4Z$Z%_db$qNV~DE_5r9_za+F^mSNA)-<$`FMOx1@7)+WuFX36V z(!`DDnWi4ftrdD+klQPgRyDoj`@7n8n>Ro3Yv{JJn&s!A#&)rwC7ZRcd*^3HeF!?d;>Ok7UZM1YwM&e9x^|uk$&F0z zuCAY)9rb}ziD&zoRr2b>%d>y={Zcc&*WvQY@66JN5ugP%if@WL3d|Y`8RoJ65IcSA zW6SMkCY9#nTPOK(?BPxbQTXum$-U>DFU%O+Rezt23l9(0X8GU4;r_Df!K{*uQtrz! z+Z2UX?mDq4>NLZ8VmJSj9mDNyZ)>aO>+8yX zHfhK`V_|$V;$p^ED~8XEEhT%C=56-cd*GDc=~Z<%Hm&MYeROwbp|YS~;x_vWUmu*_ zC1w8!C@|6s+mRVP}T;G--|2wj3%5LxC&%2gQo3>Sd`<62ihE*lEt(1O=3F@V| z9bFN4nfd5ZcGp?65iHmSP%%wx%~sMD+d@f~Pq{=?|-@ZsUx zuX&U!qRZ3w98um8b%~Yf;7g|mrnk4Le}9{PdCP-Jmx!={3vw?c#irHV`DCPc<$C9b zdR5ir{>c6NHXV+9Ixj7pAvm;j`b1Y(c3G>O8HGz0_1uW<__k}?w*GhdSyhR1Z!_7R zv0^y6Zo5@R%w30;onP-CI5A_9#(m}ulV9fSeylft{fAY3eGiKnbi7sbVq<;R-j}xu z3;j9u*RNyIjB^_QNXC_NG*stQOG`=5XJHT#@i}l}Vm0fn+xsIPtur}qEFG)ewp=uP z_4H*sH%*n4*Xa86ci;7GIXgGDN|rPH(OzJbI`?A658KA&D?0w|r&XO*ErMRRl zZ`rbC&sVN}oBXOaPR?3Z@-Xx6Zy%y#AM-sWRo9I^D z6L9fT>3hg{Su=mpYQv}5_su}7PR@L3TJ+%0LAUK|R#kVrNK(2Y;da!&eNl)~Art=$ zzI>zPp2UzE<9n{I4`0tLJOk=Y^O!MT=81Q0nR=#V{{48v(hotZlNLVS^|I_{>KSW> z?VOI6AIF-X-RRG_;_J^V@w}??m)B^gAG+gewI_G+2p;IByHBs=40qM^4dY^GUJ(VUJQ#{ z9|X5g>d#!46Dndgjl$ z{>sYKjXDX-w|egOJZ7@D*ZhM2k)JZ_ulSVAU;d%xr~z zf2Sq6>|lH_`FJn)E59d_y>0h}oBGucJ&ZkkG;OEZ)sv6E)J*cUU8ztaU34+%r9ul{tG3UP|tnr+o3g-b@p}XU{!tl6S2O-Sfj#N#<6(*5#OOQ#fgMxmkHH0bt*wA>1Yhlb$pUWk-SMp0sHk9OAc`g@t zIQ>$Ekow0dFR!g%|3=}^t&~+W?#_Lx&;007$;*vvJ}kC9X57>DdTw3&lqc%*sykW^ z+-Ky8xWvdH7|(d2rzCGvM&v{H&I&Q(XD_M_#~%2jQa*XA$D_xVml-Q04=hQU7HWR> z)qbW5;eh(devZo`|FRg%GG8ccGrV+p_W`dx{m*@#f4;bDo#$E$rJdFPwi+$sXpJ?smqYHC|SqCqL1fXB?ZGTfx5h6Ti|^_mfMuuQBXr{vmK+{pHm> z8`g;C3$AQuys>t#tbU(-edDxuHmW<@pZl;gbT#c4{21u5>ga|bh8od^%YXj0?p_`} zJ5%qr!;y9-o0w4R_={T}EGc=ec~aLV(<<#xujH=#`!l?ZUh1xXQkRw!GNtMMvS?|B z8EId|&pa|v%3}J!zrX%sx$(sOt}k;}>h}NZ?|FD}-*PY4>(b`TJML^+wQAB%=gV5> zR2D_IEXa3V{LufhjsQbIR8*Wz&Wv9cg5Q{5r1Zb3-KV`PE!!hVUHSB?>MJD;i7j#| zVvBWF|587B*U`iutk+wZ37+}`wbsmeB!e+}K;%dZ(|ng;)IWy9KXZ=z<%4> zxJh=Yg^8!R;!pNWW}LVDb))+6-rXBC4oj&-Hl_QD_s0E~6trWU^xEphq9B2fsSNY8 zBt-9f&ENIIMJbfu@Uo!GjqMvYJeJ?JFJ-$=_Jj)g^RxI~WFCF8IB4f_6YntLhsXEa?^lU1=rI;_CFOp$!u@<6=A*5p2~tWf@=%*&-^Wq)`bd^pZ{Jl*#$({jCW_v%Y3 zxelN@NL6U1^~8>KtUuIZ`R~omFpTxAdzg7S_hwNtcf<6Vu9NPv#XG9#F@1RKkPzr~ zH8?#ocXrxURhJT;2KnDLtpC4cxbISFuDDgg;BdsB*+luOsiyDdU!iF>nk_}5G4J|K z&VDFf<@K9!i)-MN(ph3Qw|#Ae%0KRTnPm9Uq#@|A0oz3d$Nh{O<|l^Cd9!6*$jY_6 z*CVgpP@cK6jbr<(st?y*mJ5{ZG*_D+c1&sF zhxIcHZ5onOOO5S6?s>`3z~L_(cxoA_jL=toWOP{KqxbSs-f137US%r%lQTBe==!v5 z9eX`<$gexsR8R6mCR!<8Sw3@PxY6d5zmsO2HfP+@GgB-0b(M!cXpy3d(Kmy%f3^+x zUspZewP{n=-n-XSJ?$eCcX=#%dUai|414&kqe-&ihKuiRd+60(nWU9G(c|k@mp$?h zx!ZjIU)l0tY307=fOC^YmobNxF@2E{?2|upH#U~P#P9$&Px8rmeygRmmPP)ZnA&S8 zvVgm@;NiC1UXV7yyw{VKwCfnk9yrs_Y*Dnqdbyj@Lu<(Y0Ju6->Y-bBzI;~>%8pGJ=+Z&cMB>edB?J=8VQ>P27gM0R^N6E5No@s#UqNK>H z#~Dg^4pbXoW{c&Id-q*m_USgWPUDo`mr_#e@|b>9G8nTyktGtH`Kl2R3DfzWZf7lkpn&zgoHeb4Q z=-1b&vJ*WjX6AmL$1qQMQFO`PkF~z5XRz|0|26%K|FoIwJ{K~yc3qlziQ&b)8EId| zUH-5u#Yk~XnQp0}pPO?pMt19(Rh3DV^D(#BD-u(a5Z*8{dtJ8LPgw0&H?p<5% znJ-4heo|gCm+x$pS)kt%uzK#LX`HWKP5VDTHT1lg(;Mc5#fvTow*`Kz`fj~S=jW!D zHAb=Ge+&d=tt*RuZa8>6;wERuXNEZ|G7ma_{kzlCWY?qG)2plm7ckEZ^jDd8Y0Cra zU2=1D-M3ZDU-P?6#$0cOxX6NO9exI9KTLM+OqDozd*(}nMQ`t$o}IeZFY}B^# ztILG<+kfE=74>d;Q2F-l{Mw5bK0Mif=h_t4JzNQ{YDS;l2-W-z3^B>&5j>lpdDEI_ zk1Ct=@}*CEuPs{ivX?#Etqw=nOpMG)3G3^3nYLas$>P%23#%EpPfJx-e3#O`dCvB( zefsWIO4TP`+}Gxo4ysDydmyTGyVG7sShJYX&f)s(Q?ecE6Tf(e&EjL|_@UQO_w2}r z73=0!ya;MoKf_>Q4Zr#qPnFISQI|!&yu*5d|L?!0!gD&rI$N$Y ze_>aOncB&#rux$}Yn z!CLC+mp=E%++F?l>oVCtOehZZVOY__nK=LK8TQPmg3jW?%}j3B#eMg*&#RKHUH_Tk z`sB`w=CS7{T?IA9c1a%q6|g7$j`p~P@8Q?juXaeZ(V-xI`J-n7dwnk_@7Q-excB0H ze|QVc=33A2VUIw~{KPZzFH>?nV;;>cU$Et)*V&LqJDje~ z=360hrbOR(K41F(8#3LZXBbzsR30&6e_S>79{+2HtNTj?-v3{>U&s{F!h6#4k|A_y zG~*jN4jrpYCwG9xfdre*v%Z+#7Wgq(J-K>HinP@phOd^J+U6L<#@_w(U-{AWoZ06} zt;#?xG2^=je75&Vi(i@B_g?T<*mbt7HxesCe2#578OB`w==*dt>3u5yy!~dZ<4zS7 zJZsXU`gl&?o6irO7$!C`-I;%UvP<>!rjJs7zjn{_=?U>Lv-h85yi8k1<}*iwSlYvk zW-f*+*V@V#WdAz;ooDgEt-WfOJr=cZE6+3w2-TbVnt5xP+GQyz{jjhZ`sqH~3zJi& z8>|`UP4D|LE%d9R@!8a6M|Z`2{9N)x@g#rIu@VM_mL04Iw(~B2G@;~3zsn(hrWI^2 z!Va(a5oYyi!V^2o)Lo!8vS%t}3-&oKZNGGBqc~$l|4g}Qf6FHwoDd8u^B3+nNWQkj z^Wesp9s5Bmeb0+qOCGRzHgWZ(iR~)ePg-8Sx$T!iLqxQ+rG;E^x>@e7dnwD}87v~N zH+NqKFCw?R?7H}RF8hx-rFrwu)hJE;aGGHn(+)L%t8=P+6N^EKBak`aeaZWeX_29! zE)gevzW@BYaPOs=(^bk(cwPog=Nnw+cHvlNtqOh+8;%+*E4QxeP2=a@wfIeEv~&h57F*h_d9V#}O z7;h4_x3A+oQ^3N^gZI;w{5`)-oLViZ;+_54-ny%Md9N^2`qnLHb}&|Gz75^?>{;pS z?yhA~E?d^@sEDd9{(Q^)(%j`LyH8|ZW^@R=c%`3V*OnbS{@y=(HrxJ`%RF7(*Z)kb zzHE8RFs)zC_Uqv#67Te%|RmmP!r%}blU_4z!#eQDFTt&0|| zY;`HgE&RBpeD>_?c_%{d3FS||{JzB2;PY38z6)DEy-zWUKfUUouHgTflKemZI=WAv zG$BR55>zk0Qf2tB5>!9;eJuA}DE;Km@?CPXW?%oed_~4BAJ@Qr7cXrp^QfM>{2cq8OPgLlc6B|v zTj=4bi;I`nUAeT$@7<(X%b)bVWJvh(V&(0Q7n>eEYJQiISNHeynP>kPw{KZfyJ|(o zFAJrZ*btMqo2O0N`aUhJ`3U!usV}3V`fdh)5RJ6-bIf$x#NBMvaj28)AH`c$d(58 ztNeZ9JKZtg%ggH>(}v!gWwo`!r@8EzS6pV0Tfgdy|KW%|^FdpbRP}wg*VU%78^`*# zu)d5k)e!})JZ)^B?F>}cZ%-6dC(_UK4!+wEN{=O$mjzid~WA^(C^=lp!`?b>>(DB7QYmYCIqj`vIk zeKYGtJ44o&MNd9r`Dxn{W`@&RJ9!U0XJsv!c{{2~xU=QHLe^dW2kf0M7=5|#%|Cp* z?OvAL>B*qV_6K<(P3BH^IpH~Ue}(+P{Z87d1i->Q07{;u(Dliy^Sh9t((72 z|Loapa}iPB`HTrs-luP|-??^q`m||V<@;r=|LVV3HTBQB6)QeW30%A^_r|{3x9NG= zlX?2~=)Yt*V9>;F{5VueCTUjaJXzUC-`n>&9tm}^kbB@h^XPk}iBgsYR;MQ{d+m0; zxu418;HE?DyVs^FfC7K!dbLC4jCYh-LfsZW^ar&#`}X8{ygYoAL4L*Sg~E5mj0C2M z)~N|e?v@wyV>j>({NWtCeut)Pw7s`Vrt5WQ?b5xE4!^k-zUNZ9#KGdf|2}7lrneYv1CRux2{+bBd zgwXNAsX_e5-|l^{x5;_FQ}h*Qzsz%={XuEyQqjEZiBIG%m3&NeJ*bps<#SmpZKtl= zq-c-JsteYwdnKE8$HV2}rAwcZKpQ66Gk4WxqT4t&52bGWpjPsZWEVzgtJb~YktnW&PT^itIw{F4 zqTEmUdnPS<|2wY!i*BKjreW!=%eNb9tNFI1eG513F1L%DweO|i^K`AsWuGh~=gxDQrI#9Zd)2BrXM5gD zxm|vLH%$4Y-IAAVj-aLlbB3Yu|7!+fvQM_jd6p^qntSMI?-4o>eCCvGQO+_I(Iqe2 z8WxqDQ$4gH@$i+`cdsd(lw0z$%^~(K?`;Mv=>sokg%vKlU8Qof(d4dx;n@$x4Dr4$ z=9y6$U7&s1?z7G@>YV-~+pxXkh%$zVncA6Dj51lppdaYU27ZbHZQ(avz z$LD26{&r>CEYG|^qxt7kEqR6tK8IWX-rLy5sCg^K^4qaI2yorFKRi4<`1Ll0&g~Q4 zmz+E7^y8e0lMBb!!oxG{FXcK4yesT2VBehFj zUh?rieapPNYZ)K=i&cS(m+e*i&Ncl+dG8sAU2=Q6IgZ~1t$A!q?VNu6MB9`z2bL~P ze$G(g9azzu81m-THigdW6O;6s!SgXkI=+Rs9N{P(!ESS|SKaXIGZt8HqY&nBqO<(~2ElW*4|nWH`V2K_a+ z-p5;=0&Tib^nES_+CSnSI7OcEN8h3&^CrGt^Mrp>)k~vYa(~PO=cT)?71;MU<+0a0 zWpAtL8`rGj7j5NZHV6xRvvrr;pKYMZz;)I+<}26Q?8Byb|xskDjekn&LS<^~c|Z`75;6Cmh@8@Nj8^CBD)g*)K{1HTsGioOZ>sD&^B+u+Y=tD>khRAsEd_VF*P0GjhHxNhJ~<< zf^<^f84=A*N#=#O?F)a~1zl0|P2&HTV%>M;?AqdYp_jHUIlpUN{Hj-PqlNfm%RZOB zVB(0qc53s}Pv7rZe%E>FrDeD3)!&Wl{vTTxaqa}mFAe=?pO?2EP5Nv+`>uuO>y6n{ z7H(CEb2(tJIL)bJ1G!!`>xaU$dP1kAJbDHs{`d zwq3d=_qS%M58Gky0}>0FdjzepQxRg?KO|IEe-}`H@nGfy(+!V{&C6IBz@TC85B7jR WxA*d=YJm=!VeoYIb6Mw<&;$UflahV_ diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c11xx.html b/ChibiOS_2.0.8/docs/html/group___l_p_c11xx.html deleted file mode 100644 index eef71d0..0000000 --- a/ChibiOS_2.0.8/docs/html/group___l_p_c11xx.html +++ /dev/null @@ -1,83 +0,0 @@ - - -ChibiOS/RT: LPC11xx Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC11xx Support
    - -[ARM Cortex-Mx] -

    -
    -
    - -

    LPC11xx specific support. -More...

    - -

    -Collaboration diagram for LPC11xx Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    LPC11xx specific support.

    -

    The LPC11xx support includes:

    -
      -
    • I/O ports driver.
    • -
    • Buffered, interrupt driven, serial driver.
    • -
    • A demo supporting the kernel test suite.
    • -
    - - - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     LPC11xx HAL Support
     

    HAL support.

    -
     LPC11xx I/O Ports Support
     

    I/O Ports peripherals support.

    -
     LPC11xx UART Support
     

    UART peripherals support.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c11xx.png b/ChibiOS_2.0.8/docs/html/group___l_p_c11xx.png deleted file mode 100644 index 738df2f36d53a28ff80a3c6ee1d1b24d88aecb6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 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 - -ChibiOS/RT: LPC11xx HAL Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC11xx HAL Support
    - -[LPC11xx Support] -

    -
    -
    - -

    HAL support. -More...

    - -

    -Collaboration diagram for LPC11xx HAL Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL support.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define FLASHCFG   (*((volatile uint32_t *)0x4003C010))
     Register missing in NXP header file.
    #define PLATFORM_NAME   "LPC11xx"
     Platform name.
    #define IRCOSCCLK   12000000
    #define WDGOSCCLK   1600000
    #define SYSPLLCLKSEL_IRCOSC   0
    #define SYSPLLCLKSEL_SYSOSC   1
    #define SYSMAINCLKSEL_IRCOSC   0
    #define SYSMAINCLKSEL_PLLIN   1
    #define SYSMAINCLKSEL_WDGOSC   2
    #define SYSMAINCLKSEL_PLLOUT   3
    #define LPC11xx_PLLCLK_SOURCE   SYSPLLCLKSEL_SYSOSC
     System PLL clock source.
    #define LPC11xx_SYSPLL_MUL   4
     System PLL multiplier.
    #define LPC11xx_SYSPLL_DIV   4
     System PLL divider.
    #define LPC11xx_MAINCLK_SOURCE   SYSMAINCLKSEL_PLLOUT
     System main clock source.
    #define LPC11xx_SYSABHCLK_DIV   1
     AHB clock divider.
    #define LPC11xx_UART_PCLK_DIV   1
     UART clock divider.
    #define LPC11xx_SYSOSCCTRL   0
     Calculated SYSOSCCTRL setting.
    #define LPC11xx_SYSPLLCLKIN   SYSOSCCLK
     PLL input clock frequency.
    #define LPC11xx_SYSPLLCTRL_MSEL   (LPC11xx_SYSPLL_MUL - 1)
     MSEL mask in SYSPLLCTRL register.
    #define LPC11xx_SYSPLLCTRL_PSEL   (0 << 5)
     PSEL mask in SYSPLLCTRL register.
    #define LPC11xx_SYSPLLCCO
     CCP frequency.
    #define LPC11xx_SYSPLLCLKOUT   (LPC11xx_SYSPLLCCO / LPC11xx_SYSPLL_DIV)
     PLL output clock frequency.
    #define LPC11xx_SYSCLK   (LPC11xx_MAINCLK / LPC11xx_SYSABHCLK_DIV)
     AHB clock.
    #define LPC11xx_FLASHCFG_FLASHTIM   0
     Flash wait states.
    #define LPC11xx_UART_PCLK   (LPC11xx_MAINCLK / LPC11xx_UART_PCLK_DIV)
     UART clock.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void lpc111x_clock_init (void)
     LPC11xx clocks and PLL initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define FLASHCFG   (*((volatile uint32_t *)0x4003C010))
    -
    -
    - -

    Register missing in NXP header file.

    - -

    Definition at line 41 of file platforms/LPC11xx/hal_lld.c.

    - -
    -
    - -
    -
    - - - - -
    #define PLATFORM_NAME   "LPC11xx"
    -
    -
    - -

    Platform name.

    - -

    Definition at line 48 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IRCOSCCLK   12000000
    -
    -
    -

    High speed internal clock.

    - -

    Definition at line 50 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define WDGOSCCLK   1600000
    -
    -
    -

    Watchdog internal clock.

    - -

    Definition at line 51 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSPLLCLKSEL_IRCOSC   0
    -
    -
    -

    Internal RC oscillator clock source.

    - -

    Definition at line 53 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSPLLCLKSEL_SYSOSC   1
    -
    -
    -

    System oscillator clock source.

    - -

    Definition at line 55 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSMAINCLKSEL_IRCOSC   0
    -
    -
    -

    Clock source is IRC.

    - -

    Definition at line 58 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSMAINCLKSEL_PLLIN   1
    -
    -
    -

    Clock source is PLLIN.

    - -

    Definition at line 59 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSMAINCLKSEL_WDGOSC   2
    -
    -
    -

    Clock source is WDGOSC.

    - -

    Definition at line 60 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSMAINCLKSEL_PLLOUT   3
    -
    -
    -

    Clock source is PLLOUT.

    - -

    Definition at line 61 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_PLLCLK_SOURCE   SYSPLLCLKSEL_SYSOSC
    -
    -
    - -

    System PLL clock source.

    - -

    Definition at line 71 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_SYSPLL_MUL   4
    -
    -
    - -

    System PLL multiplier.

    -
    Note:
    The value must be in the 1..32 range and the final frequency must not exceed the CCO ratings.
    - -

    Definition at line 80 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_SYSPLL_DIV   4
    -
    -
    - -

    System PLL divider.

    -
    Note:
    The value must be chosen between (2, 4, 8, 16).
    - -

    Definition at line 88 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_MAINCLK_SOURCE   SYSMAINCLKSEL_PLLOUT
    -
    -
    - -

    System main clock source.

    - -

    Definition at line 95 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_SYSABHCLK_DIV   1
    -
    -
    - -

    AHB clock divider.

    -
    Note:
    The value must be chosen between (1...255).
    - -

    Definition at line 103 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_UART_PCLK_DIV   1
    -
    -
    - -

    UART clock divider.

    -
    Note:
    The value must be chosen between (1...255).
    - -

    Definition at line 111 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_SYSOSCCTRL   0
    -
    -
    - -

    Calculated SYSOSCCTRL setting.

    - -

    Definition at line 122 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_SYSPLLCLKIN   SYSOSCCLK
    -
    -
    - -

    PLL input clock frequency.

    - -

    Definition at line 131 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_SYSPLLCTRL_MSEL   (LPC11xx_SYSPLL_MUL - 1)
    -
    -
    - -

    MSEL mask in SYSPLLCTRL register.

    - -

    Definition at line 143 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_SYSPLLCTRL_PSEL   (0 << 5)
    -
    -
    - -

    PSEL mask in SYSPLLCTRL register.

    - -

    Definition at line 152 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_SYSPLLCCO
    -
    -
    -Value:
    (LPC11xx_SYSPLLCLKIN * LPC11xx_SYSPLL_MUL *    \
    -                              LPC11xx_SYSPLL_DIV)
    -
    -

    CCP frequency.

    - -

    Definition at line 166 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_SYSPLLCLKOUT   (LPC11xx_SYSPLLCCO / LPC11xx_SYSPLL_DIV)
    -
    -
    - -

    PLL output clock frequency.

    - -

    Definition at line 176 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_SYSCLK   (LPC11xx_MAINCLK / LPC11xx_SYSABHCLK_DIV)
    -
    -
    - -

    AHB clock.

    - -

    Definition at line 193 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_FLASHCFG_FLASHTIM   0
    -
    -
    - -

    Flash wait states.

    - -

    Definition at line 202 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_UART_PCLK   (LPC11xx_MAINCLK / LPC11xx_UART_PCLK_DIV)
    -
    -
    - -

    UART clock.

    - -

    Definition at line 212 of file platforms/LPC11xx/hal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void hal_lld_init (void  ) 
    -
    -
    - -

    Low level HAL driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void lpc111x_clock_init (void  ) 
    -
    -
    - -

    LPC11xx clocks and PLL initialization.

    -
    Note:
    All the involved constants come from the file board.h.
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    const PALConfig pal_default_config
    -
    -
    -Initial value:
     {
    - {VAL_GPIO0DATA, VAL_GPIO0DIR},
    - {VAL_GPIO1DATA, VAL_GPIO1DIR},
    - {VAL_GPIO2DATA, VAL_GPIO2DIR},
    - {VAL_GPIO3DATA, VAL_GPIO3DIR},
    -}
    -
    -

    PAL setup.

    -

    Digital I/O ports static configuration as defined in board.h.

    - -

    Definition at line 55 of file platforms/LPC11xx/hal_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c11xx___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___l_p_c11xx___h_a_l.png deleted file mode 100644 index fa0cf4bd5eec714970821bbc0d017188e5e57d2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1234 zcmeAS@N?(olHy`uVBq!ia0y~yVANn>U{K{?V_;zT_^zawfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM?<%o_i7u3@jy{E{-7;bKc%Pn;jD>!S>;~&+#oByZOSOi+aiDZUG$2)7>!7^#s`;zF8t!(Qn-ub ztd_Ex@%rwPQxB`o*?vDW=eOb6&&?OC-{0vscYZgy*iVhu!37RVd^DYN`3@xA>%DMb z8{-|#U7d`&k6yg)<*@i=b?+K?=wZKn<_xAEn*Dtl8omtduI7d<{fs8hpFi(@*UYtT z=T1%r`{S>dHN5(*vpP*trO$THc~sw)*8VbnJN--LGu1C!C*MmGX!_?Ca8a)NvE^i)Lz@5GLW6UU z++E@0_bxWXYu(#-?@Xs2%4Aq|du`93Xps_WX=(lKufP5}ef-z9mzI;2@;=nXf2^zR zE4}I#C>U%L%yFYh`{j(fyI*dEm2YfK`LpMv;PkcYuE+dl=Y4SUU2H}mE# z*>&Wf@2c5-zE=A?b5$~KmGz3m9(=PjEP58>6;Z(&#s{(t|CuD18J2#ywc&aF)EjQ% zo~4&Hj)(Q1Hrny)`n&w)snVIVw#6z3hJWDKdfjlzoi(!d`L@=8Ad92bpE$Md3w*Wh zpPuz~?e+6>B7eB8yw}uWrQXD>+jGn*CRyYK(W_tDx+v>9C{le<^{^ZvD`SV-d z|J;`;ht>pH2zXjgo&4VAL-n>;wcGdq7c{9ji^94tPG0sutZ`c0 zoLRqqISXbo7WuMF)Li58A(NBoRovo>J5K#St5BaRZM&CazgWZXs=Yb(M;9~9v-|r{ zu)&>S-`cCw^cZ$1EsFAb*n30CDsbh;@Yp{szc}OKQqrG)`*!Z!+x55J{@twf!$q?) zpd>hCPk{Zw(^BpM$B*4@E|Y%EaBcbW@O^7S{#k~WxVz}_tVn)wa`J3hhPjJ=D-=Bx z>4)Z?qYX-nE+sh#24<@2PBJfk-Na`4seXS!b~bl$@t@msQ>KXo*gw0*DjVJ2-X0Mh jt-Xs^2>})r{p9~&&n5kKIok&Y1_lOCS3j3^P6 - -ChibiOS/RT: LPC11xx I/O Ports Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC11xx I/O Ports Support
    - -[LPC11xx Support] -

    -
    -
    - -

    I/O Ports peripherals support. -More...

    - -

    -Collaboration diagram for LPC11xx I/O Ports Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    I/O Ports peripherals support.

    -

    This module supports the LPC11xx GPIO controller. The controller supports the following features (see PAL Driver):

    -
      -
    • 12 bits wide ports.
    • -
    • Atomic set/reset functions.
    • -
    • Atomic set+reset function (atomic bus operations).
    • -
    • Output latched regardless of the pad setting.
    • -
    • Direct read of input pads regardless of the pad setting.
    • -
    -

    Supported Setup Modes

    -
      -
    • PAL_MODE_RESET.
    • -
    • PAL_MODE_UNCONNECTED.
    • -
    • PAL_MODE_INPUT.
    • -
    • PAL_MODE_OUTPUT_PUSHPULL.
    • -
    -

    Any attempt to setup an invalid mode is ignored.

    -

    Suboptimal Behavior

    -

    Some GPIO features are less than optimal:

    -
      -
    • Pad/port toggling operations are not atomic.
    • -
    • Pull-up and Pull-down resistors cannot be programmed through the PAL driver and must be programmed separately.
    • -
    • Reading of the output latch for pads programmed as input is not possible, the input pin value is returned instead.
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  lpc111x_gpio_setup_t
     GPIO port setup info. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_IOPORTS_WIDTH   32
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFF)
     Whole port mask.
    #define IOPORT1   LPC_GPIO0
     GPIO0 port identifier.
    #define IOPORT2   LPC_GPIO1
     GPIO1 port identifier.
    #define IOPORT3   LPC_GPIO2
     GPIO2 port identifier.
    #define IOPORT4   LPC_GPIO3
     GPIO3 port identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     Low level PAL subsystem initialization.
    #define pal_lld_readport(port)   ((port)->DATA)
     Reads the physical I/O port states.
    #define pal_lld_readlatch(port)   ((port)->DATA)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)   ((port)->DATA = (bits))
     Writes a bits mask on a I/O port.
    #define pal_lld_setport(port, bits)   ((port)->MASKED_ACCESS[bits] = 0xFFFFFFFF)
     Sets a bits mask on a I/O port.
    #define pal_lld_clearport(port, bits)   ((port)->MASKED_ACCESS[bits] = 0)
     Clears a bits mask on a I/O port.
    #define pal_lld_readgroup(port, mask, offset)   ((port)->MASKED_ACCESS[(mask) << (offset)])
     Reads a group of bits.
    #define pal_lld_writegroup(port, mask, offset, bits)   ((port)->MASKED_ACCESS[(mask) << (offset)] = (bits))
     Writes a group of bits.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.
    #define pal_lld_writepad(port, pad, bit)   ((port)->MASKED_ACCESS[(mask) << (pad)] = (bit) << (pad))
     Writes a logical state on an output pad.
    #define pal_lld_setpad(port, pad)   ((port)->MASKED_ACCESS[1 << (pad)] = 1 << (pad))
     Sets a pad logical state to PAL_HIGH.
    #define pal_lld_clearpad(port, pad)   ((port)->MASKED_ACCESS[1 << (pad)] = 0)
     Clears a pad logical state to PAL_LOW.

    -Typedefs

    typedef uint32_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef LPC_GPIO_TypeDef * ioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     LPC11xx I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PAL_IOPORTS_WIDTH   32
    -
    -
    - -

    Width, in bits, of an I/O port.

    - -

    Definition at line 89 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFF)
    -
    -
    - -

    Whole port mask.

    -

    This macro specifies all the valid bits into a port.

    - -

    Definition at line 95 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT1   LPC_GPIO0
    -
    -
    - -

    GPIO0 port identifier.

    - -

    Definition at line 114 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT2   LPC_GPIO1
    -
    -
    - -

    GPIO1 port identifier.

    - -

    Definition at line 120 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT3   LPC_GPIO2
    -
    -
    - -

    GPIO2 port identifier.

    - -

    Definition at line 126 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT4   LPC_GPIO3
    -
    -
    - -

    GPIO3 port identifier.

    - -

    Definition at line 132 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_init( config )    _pal_lld_init(config)
    -
    -
    - -

    Low level PAL subsystem initialization.

    -
    Parameters:
    - - -
    [in] config architecture-dependent ports configuration
    -
    -
    - -

    Definition at line 145 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readport( port )    ((port)->DATA)
    -
    -
    - -

    Reads the physical I/O port states.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - -
    [in] port port identifier
    -
    -
    -
    Returns:
    The port bits.
    - -

    Definition at line 155 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readlatch( port )    ((port)->DATA)
    -
    -
    - -

    Reads the output latch.

    -

    The purpose of this function is to read back the latched output value.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - -
    [in] port port identifier
    -
    -
    -
    Returns:
    The latched logical states.
    - -

    Definition at line 167 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writeport( port,
     bits 
    )   ((port)->DATA = (bits))
    -
    -
    - -

    Writes a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be written on the specified port
    -
    -
    - -

    Definition at line 177 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setport( port,
     bits 
    )   ((port)->MASKED_ACCESS[bits] = 0xFFFFFFFF)
    -
    -
    - -

    Sets a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be ORed on the specified port
    -
    -
    - -

    Definition at line 190 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_clearport( port,
     bits 
    )   ((port)->MASKED_ACCESS[bits] = 0)
    -
    -
    - -

    Clears a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be cleared on the specified port
    -
    -
    - -

    Definition at line 203 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_readgroup( port,
     mask,
     offset 
    )   ((port)->MASKED_ACCESS[(mask) << (offset)])
    -
    -
    - -

    Reads a group of bits.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] offset group bit offset within the port
    -
    -
    -
    Returns:
    The group logical states.
    - -

    Definition at line 218 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writegroup( port,
     mask,
     offset,
     bits 
    )   ((port)->MASKED_ACCESS[(mask) << (offset)] = (bits))
    -
    -
    - -

    Writes a group of bits.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] offset group bit offset within the port
    [in] bits bits to be written. Values exceeding the group width are masked.
    -
    -
    - -

    Definition at line 235 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setgroupmode( port,
     mask,
     mode 
    )   _pal_lld_setgroupmode(port, mask, mode)
    -
    -
    - -

    Pads group mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -Programming an unknown or unsupported mode is silently ignored.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] mode group mode
    -
    -
    - -

    Definition at line 250 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writepad( port,
     pad,
     bit 
    )   ((port)->MASKED_ACCESS[(mask) << (pad)] = (bit) << (pad))
    -
    -
    - -

    Writes a logical state on an output pad.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] pad pad number within the port
    [out] bit logical value, the value must be PAL_LOW or PAL_HIGH
    -
    -
    - -

    Definition at line 266 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setpad( port,
     pad 
    )   ((port)->MASKED_ACCESS[1 << (pad)] = 1 << (pad))
    -
    -
    - -

    Sets a pad logical state to PAL_HIGH.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    - -

    Definition at line 280 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_clearpad( port,
     pad 
    )   ((port)->MASKED_ACCESS[1 << (pad)] = 0)
    -
    -
    - -

    Clears a pad logical state to PAL_LOW.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    - -

    Definition at line 294 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t ioportmask_t
    -
    -
    - -

    Digital I/O port sized unsigned type.

    - -

    Definition at line 100 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef LPC_GPIO_TypeDef* ioportid_t
    -
    -
    - -

    Port Identifier.

    - -

    Definition at line 105 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void _pal_lld_init (const PALConfig config ) 
    -
    -
    - -

    LPC11xx I/O ports configuration.

    -

    GPIO unit registers initialization.

    -
    Parameters:
    - - -
    [in] config the LPC11xx ports configuration
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void _pal_lld_setgroupmode (ioportid_t  port,
    ioportmask_t  mask,
    uint_fast8_t  mode 
    )
    -
    -
    - -

    Pads mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] mask the group mask
    [in] mode the mode
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -PAL_MODE_UNCONNECTED is implemented as push pull output with high state.
    -
    -This function does not alter the PINSELx registers. Alternate functions setup must be handled by device-specific code.
    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c11xx___p_a_l.png b/ChibiOS_2.0.8/docs/html/group___l_p_c11xx___p_a_l.png deleted file mode 100644 index 0ae09afbdda26e0a134196a86fd8e0bc9c127733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11747 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 diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c11xx___s_e_r_i_a_l.html b/ChibiOS_2.0.8/docs/html/group___l_p_c11xx___s_e_r_i_a_l.html deleted file mode 100644 index e63920f..0000000 --- a/ChibiOS_2.0.8/docs/html/group___l_p_c11xx___s_e_r_i_a_l.html +++ /dev/null @@ -1,332 +0,0 @@ - - -ChibiOS/RT: LPC11xx UART Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC11xx UART Support
    - -[LPC11xx Support] -

    -
    -
    - -

    UART peripherals support. -More...

    - -

    -Collaboration diagram for LPC11xx UART Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    UART peripherals support.

    -

    The serial driver supports the LPC11xx UART taking advantage of its deep hardware buffers.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_LPC11xx_UART0   TRUE
     UART0 driver enable switch.
    #define LPC11xx_UART_FIFO_PRELOAD   16
     FIFO preload parameter.
    #define LPC11xx_UART0_PRIORITY   3
     UART0 interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.

    -Typedefs

    typedef uint32_t sdflags_t
     Serial Driver condition flags type.

    -Functions

     CH_IRQ_HANDLER (Vector94)
     UART0 IRQ handler.
    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     UART0 serial driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define USE_LPC11xx_UART0   TRUE
    -
    -
    - -

    UART0 driver enable switch.

    -

    If set to TRUE the support for UART0 is included.

    -
    Note:
    The default is TRUE .
    - -

    Definition at line 99 of file platforms/LPC11xx/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_UART_FIFO_PRELOAD   16
    -
    -
    - -

    FIFO preload parameter.

    -

    Configuration parameter, this values defines how many bytes are preloaded in the HW transmit FIFO for each interrupt, the maximum value is 16 the minimum is 1.

    -
    Note:
    An high value reduces the number of interrupts generated but can also increase the worst case interrupt response time because the preload loops.
    - -

    Definition at line 112 of file platforms/LPC11xx/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC11xx_UART0_PRIORITY   3
    -
    -
    - -

    UART0 interrupt priority level setting.

    - -

    Definition at line 119 of file platforms/LPC11xx/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define _serial_driver_data
    -
    -
    -Value:
    _base_asynchronous_channel_data                                           \
    -  /* Driver state.*/                                                        \
    -  sdstate_t                 state;                                          \
    -  /* Input queue.*/                                                         \
    -  InputQueue                iqueue;                                         \
    -  /* Output queue.*/                                                        \
    -  OutputQueue               oqueue;                                         \
    -  /* Status Change @p EventSource.*/                                        \
    -  EventSource               sevent;                                         \
    -  /* I/O driver status flags.*/                                             \
    -  sdflags_t                 flags;                                          \
    -  /* Input circular buffer.*/                                               \
    -  uint8_t                   ib[SERIAL_BUFFERS_SIZE];                        \
    -  /* Output circular buffer.*/                                              \
    -  uint8_t                   ob[SERIAL_BUFFERS_SIZE];                        \
    -  /* End of the mandatory fields.*/                                         \
    -  /* Pointer to the USART registers block.*/                                \
    -  LPC_UART_TypeDef        *uart;
    -
    -

    SerialDriver specific data.

    - -

    Definition at line 162 of file platforms/LPC11xx/serial_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t sdflags_t
    -
    -
    - -

    Serial Driver condition flags type.

    - -

    Definition at line 137 of file platforms/LPC11xx/serial_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (Vector94  ) 
    -
    -
    - -

    UART0 IRQ handler.

    - -

    Definition at line 222 of file platforms/LPC11xx/serial_lld.c.

    - -

    References CH_IRQ_EPILOGUE, and CH_IRQ_PROLOGUE.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_init (void  ) 
    -
    -
    - -

    Low level serial driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sd_lld_start (SerialDriver sdp,
    const SerialConfig config 
    )
    -
    -
    - -

    Low level serial driver configuration and (re)start.

    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver object
    [in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_stop (SerialDriver sdp ) 
    -
    -
    - -

    Low level serial driver stop.

    -

    De-initializes the UART, stops the associated clock, resets the interrupt vector.

    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDriver object
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    SerialDriver SD1
    -
    -
    - -

    UART0 serial driver identifier.

    - -

    Definition at line 46 of file platforms/LPC11xx/serial_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c11xx___s_e_r_i_a_l.png b/ChibiOS_2.0.8/docs/html/group___l_p_c11xx___s_e_r_i_a_l.png deleted file mode 100644 index 5ce74ab911b9512bcf36b4d62d87b5c1ee137b61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18198 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 - -ChibiOS/RT: LPC13xx Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC13xx Support
    - -[ARM Cortex-Mx] -

    -
    -
    - -

    LPC13xx specific support. -More...

    - -

    -Collaboration diagram for LPC13xx Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    LPC13xx specific support.

    -

    The LPC13xx support includes:

    -
      -
    • I/O ports driver.
    • -
    • Buffered, interrupt driven, serial driver.
    • -
    • A demo supporting the kernel test suite.
    • -
    - - - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     LPC13xx HAL Support
     

    HAL support.

    -
     LPC13xx I/O Ports Support
     

    I/O Ports peripherals support.

    -
     LPC13xx UART Support
     

    UART peripherals support.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c13xx.png b/ChibiOS_2.0.8/docs/html/group___l_p_c13xx.png deleted file mode 100644 index 4a8c67d5557a5fdd6fc855c6e44d45eea5979ab4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4119 zcmeAS@N?(olHy`uVBq!ia0y~yV7$PH=O_FLRCyj)xiJ@+IS82ER3x;TbZ%z1k^I!ESu?eUNIXWkXfoj55YQfIoh zYbb+x!6YWFs^FCYOoWu5X$Ki(^4%yv%}Y6wI$&0a8FL|5Q+ zVG@gJki~^=1$N&FtN2+jDK$3l>U|)6(ra33^dcX9t zTX4M~!;gl`+2#tT1U=1OJBBP^V0hxd#LA$+E~LT0U^&5ok>Nxm3m1a}-_=db3=MM0 zPyhAQ{Lni4!Oko(dfMO59aiqwA`TfI&Fy}@c+Gpsj$c1T`&hUbUb3=3d*C1|x8?Bd zLyx|_U-I?yj&tHuGZxD&&c457TjL=SJ%%mndXlcH6L+{g*(HDV-swg699rZj^S%|n zDwpGZYrpn+eo+mE62BnUZFU!CAK1T6%W&0RkGDPt*Bzhwb;k;=dtd)A(X#hl8lxek z!LTI!%dVx_7y4%><*Hk%%w2q!MP!}DXWri!kss zOM0F!U-URCH_3Z*<;S~zUwYTgJXtKjDRRJIh3Bs@L0QS*z_r&d_?p*7C@WV#shqua z!-ws!Ca=$TZT$6&c{M}8w5q>9KWqhX%Q)Xq3}Ce{nWD~vAYdn{n^a-P~*=f=c( z!8By1go;W4gRJY+PDfWJ)(wt(>vEPweLc7D+pWpdKg;+}?MyrKETMS-d8dDNiLJfx}el_`d^D z?=_Qiu0~z8+tD7m?OL3<+wC1mVg<^LOwLO#R;09VUAx|Mm;1;4|HF*zw_cN5bc*Fp z1T$-!%i_XE3%0Jkd@XCXVQ2ol-W2S%0 zKEqF!uSsve+&4dPzs1^5^Y<^@cQwoU&DL!F_~|7f zlX@nmuhn0vnjJmq&yM-?pa1@Mafj?LfydI@AFN&b(R3Zt-t}|)0z2yb=1p3XwRP2T z`T9L?4BD=3&E7X{+LG`0K3~m=GM#pa0gX;?q%^ zuSQv?^&AVc-?r)FV;$zEkG#44>kB!*>@2f(zx__vx}ofD<@33_Ua#AIijSFd+4AM8 zFS{qr;nL0`y9y+O=dYs|Qsw?8c3=9q5CnCxsl?#kpvaff} zO+DW5@WVp>zn+WVNHlB`sTG`fm3_b5nbM!TIdh6@mAyi$ckEvi?<#RUKddt8{fyY% zemVJD|JVbV)CdNp^{R z9Cc^L+;2CQY-_ycAH2h})AGk#p@U|vw+`Q4+}F8lepuk&7MqCKb8NoNtonPy+-800 z$*AgE5}!4bL#{Tco!3~WB04qV@a@>zo$uVYs&{%ldRVu7`Ev6&kb>7fx96nXnyasm z^ZWb$eR+B9w0m2w)g-^&8aCPF%}HagI~Jl-6E2ejq=t-@s!L;kK+pZWFgxw+Qm$}ia_=Z94PhTuc>rx+b>DUpFiIwC;zT1yu3_1-(%L6Yi7NMrk+u& zEtIdmKA!ez&SsDBb$bi~L*iZ6NAD8y3z^j8J#XE=OUER(`d>R9e&loDYTt~SKOa73 zeO;^Xz3koZT@y|2`_IeU`yt9ZyYQp^_t?F^-hcX=?OGx(W8WolJ?3%BolOz5%zrpO z)Y5w?6ZxoguD-92=iA8NFIO$P?l4(o>Wr>QU*`tTdt5Ygmese0_woA=e>UsCYwwS~kw`MJqyz}gt-?u~DKev=T@K|o;KkHUW=k0kW zu~Owz3udLfjJlk&eE*_1_xA_)+kW%EwWsoZe9mpN+SOt4*}?}U`z>rgMR~vOu=?#T z^{FS=^YVtm+Gmo?-4dHGzk3~ZIp_Nw+r>R!d&*W_`0y*Ef=lVnJE6GOJo3RuuDB)s z)zSU?=IqX$laDW*>0b73&aTy0jojCo8XwCD3G!zCR(mYco=+&IJ}3RZ$?JKZ!F$&2 z09D7uyO-6(zKxVizsIs?$B)JTV`KhYoWA6y`>U_z?@X4JUWqE6Z&>ET{3GhL!W@=K zb^V)r+zWp%kNp1T%9^-K$$ZCU?x^pvld8*Erx_n!J+E-@>KOHy`u1z(@7dTc{IY(^ zTR-{Zw%c-YkuhszHifyX-c4S+YSJ3R_whbgltT}`WM=1+seII_eyVTr^DkasC2iJ+ z#ivXElREt>`|R&2?`JPQ_G0s-tVvrZz1(^|Dyk>{>C3IJE?e$PGhFjtdll;$KmE(ss=p68S6U_a?A`xnhrs$3+6B8`K03NSZt9mUOO}_vt9cQ2|GtUx z&AzpT$qzt{kMjzRd=q~DT(0N!>(wpZ7c;KM|35W*(!aE~Y&=WreyJ%jFjTQ|ia?qx zum+)?5|cu5)~Yb|W9n+}_V2wKbu(;b#_IRkcO-hxpS}Bu|I(WHvL1)^o!$#-KmVP^ zoa45Tf7|!jo72y)x|%gr_Sl7}m^+J(9yQd}>&v{nEOl$tyqf)srcPZ|vtQ}{_ms8E ztNto_{_5JQTRAWC@2Zxo{Ngdw)Bf+f!hTV*CqJXQrd0JpxQgv{zvUWdiYJ|$F6$zF z&U@9~ACJ0Ij~gD*y0lt=2F!E$n%$5w!Zwos(myw3nzCp)Ez62WO9DA_j}!jlCQ6R=I7tt^?&)bS9#|r2Y!**kkk_=ExY!b zo4ftTcU!anf2+USBl?2f=OL5xii;N8ZbyCY*?KF#r&w)OYL8|9+P|!x!js~rzTrMr zkv{9}(#_fTySaHxg)|Jdr0sQk{MLQ#*7!@Wro3zG=30Gq>fH7Fb|u#peVQA;KID&o z^y=NJf4jm~Uw;34pKbEm^0dT76@+>*eaNtZ^^x zN_1mlEjaw-$;R^)^L|dZk&jF4iGrCkR>O}E03 ztb1Lon=g7o*Ve<;Vi>EynF#KY z+@#RR)F6CS^AV_x*>rc(x6)56TW>wNcJbog>g=s6<5z`jduO_A)74wgX0N>#{lD<% zC;R`&t4nK_PJZsbGHznYzBdXC3xxYTHr?GV8NJ%~rf&4N+tGQJcaDB8(tcSM#TOc` z%!*J&aQ3_M)uT_Q*`T`Pv+@QG8kN7wP*<$s?n zye;*neg6l`rtg>MXutfJYFmFR`IcpR;HM*U-7H)T(nnQSn4CPl^=|2YkH~XZ*Unh< z>-`tY-EEpN3?9#w-^rE|a3U$4zfRyzNwV$&RZ|2M4)jZ6pJ zK-C!Ahb5;rUcS8Q;f+T}d|BBiCtsRUIL&2N+AquAzI~jEAZ5%O?Zg+KI6i&puGbN& z5n|UI7!_t_`x>5=O1-mfh27;f@w-;tT=90U(7KexdP`2-3cpj>x-M~BH?)XaVt4(l((`MAcSa^>KmYM{$0eD^UTfAJdH?FP>C@L)=Y^{kJr*#u1>Q5=w&QK) z`Xjx&W|^ - -ChibiOS/RT: LPC13xx HAL Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC13xx HAL Support
    - -[LPC13xx Support] -

    -
    -
    - -

    HAL support. -More...

    - -

    -Collaboration diagram for LPC13xx HAL Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL support.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define FLASHCFG   (*((volatile uint32_t *)0x4003C010))
     Register missing in NXP header file.
    #define PLATFORM_NAME   "LPC13xx"
     Platform name.
    #define IRCOSCCLK   12000000
    #define WDGOSCCLK   1600000
    #define SYSPLLCLKSEL_IRCOSC   0
    #define SYSPLLCLKSEL_SYSOSC   1
    #define SYSMAINCLKSEL_IRCOSC   0
    #define SYSMAINCLKSEL_PLLIN   1
    #define SYSMAINCLKSEL_WDGOSC   2
    #define SYSMAINCLKSEL_PLLOUT   3
    #define LPC13xx_PLLCLK_SOURCE   SYSPLLCLKSEL_SYSOSC
     System PLL clock source.
    #define LPC13xx_SYSPLL_MUL   6
     System PLL multiplier.
    #define LPC13xx_SYSPLL_DIV   4
     System PLL divider.
    #define LPC13xx_MAINCLK_SOURCE   SYSMAINCLKSEL_PLLOUT
     System main clock source.
    #define LPC13xx_SYSABHCLK_DIV   1
     AHB clock divider.
    #define LPC13xx_UART_PCLK_DIV   1
     UART clock divider.
    #define LPC13xx_SYSOSCCTRL   0
     Calculated SYSOSCCTRL setting.
    #define LPC13xx_SYSPLLCLKIN   SYSOSCCLK
     PLL input clock frequency.
    #define LPC13xx_SYSPLLCTRL_MSEL   (LPC13xx_SYSPLL_MUL - 1)
     MSEL mask in SYSPLLCTRL register.
    #define LPC13xx_SYSPLLCTRL_PSEL   (0 << 5)
     PSEL mask in SYSPLLCTRL register.
    #define LPC13xx_SYSPLLCCO
     CCP frequency.
    #define LPC13xx_SYSPLLCLKOUT   (LPC13xx_SYSPLLCCO / LPC13xx_SYSPLL_DIV)
     PLL output clock frequency.
    #define LPC13xx_SYSCLK   (LPC13xx_MAINCLK / LPC13xx_SYSABHCLK_DIV)
     AHB clock.
    #define LPC13xx_FLASHCFG_FLASHTIM   0
     Flash wait states.
    #define LPC13xx_UART_PCLK   (LPC13xx_MAINCLK / LPC13xx_UART_PCLK_DIV)
     UART clock.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void LPC13xx_clock_init (void)
     LPC13xx clocks and PLL initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define FLASHCFG   (*((volatile uint32_t *)0x4003C010))
    -
    -
    - -

    Register missing in NXP header file.

    - -

    Definition at line 41 of file platforms/LPC13xx/hal_lld.c.

    - -
    -
    - -
    -
    - - - - -
    #define PLATFORM_NAME   "LPC13xx"
    -
    -
    - -

    Platform name.

    - -

    Definition at line 48 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IRCOSCCLK   12000000
    -
    -
    -

    High speed internal clock.

    - -

    Definition at line 50 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define WDGOSCCLK   1600000
    -
    -
    -

    Watchdog internal clock.

    - -

    Definition at line 51 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSPLLCLKSEL_IRCOSC   0
    -
    -
    -

    Internal RC oscillator clock source.

    - -

    Definition at line 53 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSPLLCLKSEL_SYSOSC   1
    -
    -
    -

    System oscillator clock source.

    - -

    Definition at line 55 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSMAINCLKSEL_IRCOSC   0
    -
    -
    -

    Clock source is IRC.

    - -

    Definition at line 58 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSMAINCLKSEL_PLLIN   1
    -
    -
    -

    Clock source is PLLIN.

    - -

    Definition at line 59 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSMAINCLKSEL_WDGOSC   2
    -
    -
    -

    Clock source is WDGOSC.

    - -

    Definition at line 60 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SYSMAINCLKSEL_PLLOUT   3
    -
    -
    -

    Clock source is PLLOUT.

    - -

    Definition at line 61 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_PLLCLK_SOURCE   SYSPLLCLKSEL_SYSOSC
    -
    -
    - -

    System PLL clock source.

    - -

    Definition at line 71 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_SYSPLL_MUL   6
    -
    -
    - -

    System PLL multiplier.

    -
    Note:
    The value must be in the 1..32 range and the final frequency must not exceed the CCO ratings.
    - -

    Definition at line 80 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_SYSPLL_DIV   4
    -
    -
    - -

    System PLL divider.

    -
    Note:
    The value must be chosen between (2, 4, 8, 16).
    - -

    Definition at line 88 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_MAINCLK_SOURCE   SYSMAINCLKSEL_PLLOUT
    -
    -
    - -

    System main clock source.

    - -

    Definition at line 95 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_SYSABHCLK_DIV   1
    -
    -
    - -

    AHB clock divider.

    -
    Note:
    The value must be chosen between (1...255).
    - -

    Definition at line 103 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_UART_PCLK_DIV   1
    -
    -
    - -

    UART clock divider.

    -
    Note:
    The value must be chosen between (1...255).
    - -

    Definition at line 111 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_SYSOSCCTRL   0
    -
    -
    - -

    Calculated SYSOSCCTRL setting.

    - -

    Definition at line 122 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_SYSPLLCLKIN   SYSOSCCLK
    -
    -
    - -

    PLL input clock frequency.

    - -

    Definition at line 131 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_SYSPLLCTRL_MSEL   (LPC13xx_SYSPLL_MUL - 1)
    -
    -
    - -

    MSEL mask in SYSPLLCTRL register.

    - -

    Definition at line 143 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_SYSPLLCTRL_PSEL   (0 << 5)
    -
    -
    - -

    PSEL mask in SYSPLLCTRL register.

    - -

    Definition at line 152 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_SYSPLLCCO
    -
    -
    -Value:
    (LPC13xx_SYSPLLCLKIN * LPC13xx_SYSPLL_MUL *    \
    -                              LPC13xx_SYSPLL_DIV)
    -
    -

    CCP frequency.

    - -

    Definition at line 166 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_SYSPLLCLKOUT   (LPC13xx_SYSPLLCCO / LPC13xx_SYSPLL_DIV)
    -
    -
    - -

    PLL output clock frequency.

    - -

    Definition at line 176 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_SYSCLK   (LPC13xx_MAINCLK / LPC13xx_SYSABHCLK_DIV)
    -
    -
    - -

    AHB clock.

    - -

    Definition at line 193 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_FLASHCFG_FLASHTIM   0
    -
    -
    - -

    Flash wait states.

    - -

    Definition at line 202 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_UART_PCLK   (LPC13xx_MAINCLK / LPC13xx_UART_PCLK_DIV)
    -
    -
    - -

    UART clock.

    - -

    Definition at line 212 of file platforms/LPC13xx/hal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void hal_lld_init (void  ) 
    -
    -
    - -

    Low level HAL driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void LPC13xx_clock_init (void  ) 
    -
    -
    - -

    LPC13xx clocks and PLL initialization.

    -
    Note:
    All the involved constants come from the file board.h.
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    const PALConfig pal_default_config
    -
    -
    -Initial value:
     {
    - {VAL_GPIO0DATA, VAL_GPIO0DIR},
    - {VAL_GPIO1DATA, VAL_GPIO1DIR},
    - {VAL_GPIO2DATA, VAL_GPIO2DIR},
    - {VAL_GPIO3DATA, VAL_GPIO3DIR},
    -}
    -
    -

    PAL setup.

    -

    Digital I/O ports static configuration as defined in board.h.

    - -

    Definition at line 55 of file platforms/LPC13xx/hal_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___h_a_l.png deleted file mode 100644 index 2362d6680bd065312e274868dd7cf59114851201..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1255 zcmeAS@N?(olHy`uVBq!ia0y~yVANn>U{K{?V_;zT_^zawfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM?<%o_i7u3@n|VE{-7;bKc%PpFPJ_g8jq$oa1%I`&hm?E`E#Lpy3DNE;`LjO--})mXQN@M*7zV$^T%WPjK|*u zW(9}&l*#kIoR&DJ@_Ft3x!;eQ-REz4bI#iO^P5SPzs|f_#@K-XewwM7(F_}6N))Et z)N6=NWuJJ_$gl2RN5ka#k7M^P%zOETtHG>6zN@3d?Gjr-NST0g1-nCaVd2I%7AsP2 z-@eW8Ve!p8?*M1{r=mQp#mnC?xLwWKx?$hGxH5^5P3oMl>a&ivIl4@d5f%{)6+(kzJLa-@f$Ic&@C9OrSmV9%j-tM+4z@zJm6Pno%O6lyqfnc+3*KgPSZ4L{(d|5l+{opp%mm=oP^&KbTmbNAcTF14NZtM>>`i4$%4G5z+o1+ktQdX_hjc}p!` z?SJdJ_>xI0ugBN@`}1?D{uC*l&K2EC7MCVnbm_1>);N#BNk`yzQ?cqom1yJJVm|xd z&Q|u_v+d`kBTusZt^GJ$=Q)N(UhrDR5gdG4oW1#P*xtHCt_i0PZSyzV*qR^0BGn%ZqF8 z)6ebsa{9@W-T8BDt<3|tK6^d%PKc`k!u+?>~I#S50_#cF(czxxP6yx3}yt zbe1hp?=<#~zdiHPisI+GAx%c&8}k>wdTzh?i+|C(C%2hyJu*AL{LIeWXs77vS&=_9*MI%p+|O7ld*JoH6xBs#yYIfQ^D~a;(_=1PDVLyUbl>UH z`E<9J^Pk+&%%1e=qiwoz+TQ+3yHq>#+tV&woA<1g=cm*Su_K{#{!IH5kyFYQ*7?fQ z_|FOl_xw3CfBw-Ge92Jc%Q8_nvhzVRm&yw3wPCNd{+l;H3SC=OHR+EP!@E~+L#xI6 znJRvKnEjjK9rKS(7b7b94~Pn04dl|7YJcG}^;mqVr}`D^3fGBy_s-s3U2Sgvx{P1H z<3a7xCvi6&1AjX0ZJur(7O?!-+r@d}vl-0N)34jDz535Gyv)VL&L?2`g=Y5q-x$7} z>T5pH9&MwvN=HotnOL*K`BPb9U_e;%|L@%8Wn~*S9N2%?v#gNw)$c=#76iZk@k2sd kS~|7e(FFlQbpJE%^ihdSubRxrz`(%Z>FVdQ&MBb@0NU?j8UO$Q diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___p_a_l.html b/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___p_a_l.html deleted file mode 100644 index a5e440d..0000000 --- a/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___p_a_l.html +++ /dev/null @@ -1,851 +0,0 @@ - - -ChibiOS/RT: LPC13xx I/O Ports Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC13xx I/O Ports Support
    - -[LPC13xx Support] -

    -
    -
    - -

    I/O Ports peripherals support. -More...

    - -

    -Collaboration diagram for LPC13xx I/O Ports Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    I/O Ports peripherals support.

    -

    This module supports the LPC13xx GPIO controller. The controller supports the following features (see PAL Driver):

    -
      -
    • 12 bits wide ports.
    • -
    • Atomic set/reset functions.
    • -
    • Atomic set+reset function (atomic bus operations).
    • -
    • Output latched regardless of the pad setting.
    • -
    • Direct read of input pads regardless of the pad setting.
    • -
    -

    Supported Setup Modes

    -
      -
    • PAL_MODE_RESET.
    • -
    • PAL_MODE_UNCONNECTED.
    • -
    • PAL_MODE_INPUT.
    • -
    • PAL_MODE_OUTPUT_PUSHPULL.
    • -
    -

    Any attempt to setup an invalid mode is ignored.

    -

    Suboptimal Behavior

    -

    Some GPIO features are less than optimal:

    -
      -
    • Pad/port toggling operations are not atomic.
    • -
    • Pull-up and Pull-down resistors cannot be programmed through the PAL driver and must be programmed separately.
    • -
    • Reading of the output latch for pads programmed as input is not possible, the input pin value is returned instead.
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  LPC13xx_gpio_setup_t
     GPIO port setup info. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_IOPORTS_WIDTH   32
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFF)
     Whole port mask.
    #define IOPORT1   LPC_GPIO0
     GPIO0 port identifier.
    #define IOPORT2   LPC_GPIO1
     GPIO1 port identifier.
    #define IOPORT3   LPC_GPIO2
     GPIO2 port identifier.
    #define IOPORT4   LPC_GPIO3
     GPIO3 port identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     Low level PAL subsystem initialization.
    #define pal_lld_readport(port)   ((port)->DATA)
     Reads the physical I/O port states.
    #define pal_lld_readlatch(port)   ((port)->DATA)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)   ((port)->DATA = (bits))
     Writes a bits mask on a I/O port.
    #define pal_lld_setport(port, bits)   ((port)->MASKED_ACCESS[bits] = 0xFFFFFFFF)
     Sets a bits mask on a I/O port.
    #define pal_lld_clearport(port, bits)   ((port)->MASKED_ACCESS[bits] = 0)
     Clears a bits mask on a I/O port.
    #define pal_lld_readgroup(port, mask, offset)   ((port)->MASKED_ACCESS[(mask) << (offset)])
     Reads a group of bits.
    #define pal_lld_writegroup(port, mask, offset, bits)   ((port)->MASKED_ACCESS[(mask) << (offset)] = (bits))
     Writes a group of bits.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.
    #define pal_lld_writepad(port, pad, bit)   ((port)->MASKED_ACCESS[(mask) << (pad)] = (bit) << (pad))
     Writes a logical state on an output pad.
    #define pal_lld_setpad(port, pad)   ((port)->MASKED_ACCESS[1 << (pad)] = 1 << (pad))
     Sets a pad logical state to PAL_HIGH.
    #define pal_lld_clearpad(port, pad)   ((port)->MASKED_ACCESS[1 << (pad)] = 0)
     Clears a pad logical state to PAL_LOW.

    -Typedefs

    typedef uint32_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef LPC_GPIO_TypeDef * ioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     LPC13xx I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PAL_IOPORTS_WIDTH   32
    -
    -
    - -

    Width, in bits, of an I/O port.

    - -

    Definition at line 89 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFF)
    -
    -
    - -

    Whole port mask.

    -

    This macro specifies all the valid bits into a port.

    - -

    Definition at line 95 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT1   LPC_GPIO0
    -
    -
    - -

    GPIO0 port identifier.

    - -

    Definition at line 114 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT2   LPC_GPIO1
    -
    -
    - -

    GPIO1 port identifier.

    - -

    Definition at line 120 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT3   LPC_GPIO2
    -
    -
    - -

    GPIO2 port identifier.

    - -

    Definition at line 126 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT4   LPC_GPIO3
    -
    -
    - -

    GPIO3 port identifier.

    - -

    Definition at line 132 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_init( config )    _pal_lld_init(config)
    -
    -
    - -

    Low level PAL subsystem initialization.

    -
    Parameters:
    - - -
    [in] config architecture-dependent ports configuration
    -
    -
    - -

    Definition at line 145 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readport( port )    ((port)->DATA)
    -
    -
    - -

    Reads the physical I/O port states.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - -
    [in] port port identifier
    -
    -
    -
    Returns:
    The port bits.
    - -

    Definition at line 155 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readlatch( port )    ((port)->DATA)
    -
    -
    - -

    Reads the output latch.

    -

    The purpose of this function is to read back the latched output value.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - -
    [in] port port identifier
    -
    -
    -
    Returns:
    The latched logical states.
    - -

    Definition at line 167 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writeport( port,
     bits 
    )   ((port)->DATA = (bits))
    -
    -
    - -

    Writes a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be written on the specified port
    -
    -
    - -

    Definition at line 177 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setport( port,
     bits 
    )   ((port)->MASKED_ACCESS[bits] = 0xFFFFFFFF)
    -
    -
    - -

    Sets a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be ORed on the specified port
    -
    -
    - -

    Definition at line 190 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_clearport( port,
     bits 
    )   ((port)->MASKED_ACCESS[bits] = 0)
    -
    -
    - -

    Clears a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be cleared on the specified port
    -
    -
    - -

    Definition at line 203 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_readgroup( port,
     mask,
     offset 
    )   ((port)->MASKED_ACCESS[(mask) << (offset)])
    -
    -
    - -

    Reads a group of bits.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] offset group bit offset within the port
    -
    -
    -
    Returns:
    The group logical states.
    - -

    Definition at line 218 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writegroup( port,
     mask,
     offset,
     bits 
    )   ((port)->MASKED_ACCESS[(mask) << (offset)] = (bits))
    -
    -
    - -

    Writes a group of bits.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] offset group bit offset within the port
    [in] bits bits to be written. Values exceeding the group width are masked.
    -
    -
    - -

    Definition at line 235 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setgroupmode( port,
     mask,
     mode 
    )   _pal_lld_setgroupmode(port, mask, mode)
    -
    -
    - -

    Pads group mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -Programming an unknown or unsupported mode is silently ignored.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] mode group mode
    -
    -
    - -

    Definition at line 250 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writepad( port,
     pad,
     bit 
    )   ((port)->MASKED_ACCESS[(mask) << (pad)] = (bit) << (pad))
    -
    -
    - -

    Writes a logical state on an output pad.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] pad pad number within the port
    [out] bit logical value, the value must be PAL_LOW or PAL_HIGH
    -
    -
    - -

    Definition at line 266 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setpad( port,
     pad 
    )   ((port)->MASKED_ACCESS[1 << (pad)] = 1 << (pad))
    -
    -
    - -

    Sets a pad logical state to PAL_HIGH.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    - -

    Definition at line 280 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_clearpad( port,
     pad 
    )   ((port)->MASKED_ACCESS[1 << (pad)] = 0)
    -
    -
    - -

    Clears a pad logical state to PAL_LOW.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    - -

    Definition at line 294 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t ioportmask_t
    -
    -
    - -

    Digital I/O port sized unsigned type.

    - -

    Definition at line 100 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef LPC_GPIO_TypeDef* ioportid_t
    -
    -
    - -

    Port Identifier.

    - -

    Definition at line 105 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void _pal_lld_init (const PALConfig config ) 
    -
    -
    - -

    LPC13xx I/O ports configuration.

    -

    GPIO unit registers initialization.

    -
    Parameters:
    - - -
    [in] config the LPC13xx ports configuration
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void _pal_lld_setgroupmode (ioportid_t  port,
    ioportmask_t  mask,
    uint_fast8_t  mode 
    )
    -
    -
    - -

    Pads mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] mask the group mask
    [in] mode the mode
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -PAL_MODE_UNCONNECTED is implemented as push pull output with high state.
    -
    -This function does not alter the PINSELx registers. Alternate functions setup must be handled by device-specific code.
    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___p_a_l.png b/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___p_a_l.png deleted file mode 100644 index ba9b2d2416ee5ec46c7999c084bfbf11080fd867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11771 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 Wo>kQBiDY14VDNPHb6Mw<&;$U?j}H(4 diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___s_e_r_i_a_l.html b/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___s_e_r_i_a_l.html deleted file mode 100644 index bc0ca74..0000000 --- a/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___s_e_r_i_a_l.html +++ /dev/null @@ -1,332 +0,0 @@ - - -ChibiOS/RT: LPC13xx UART Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC13xx UART Support
    - -[LPC13xx Support] -

    -
    -
    - -

    UART peripherals support. -More...

    - -

    -Collaboration diagram for LPC13xx UART Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    UART peripherals support.

    -

    The serial driver supports the LPC13xx UART taking advantage of its deep hardware buffers.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_LPC13xx_UART0   TRUE
     UART0 driver enable switch.
    #define LPC13xx_UART_FIFO_PRELOAD   16
     FIFO preload parameter.
    #define LPC13xx_UART0_PRIORITY   3
     UART0 interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.

    -Typedefs

    typedef uint32_t sdflags_t
     Serial Driver condition flags type.

    -Functions

     CH_IRQ_HANDLER (VectorF8)
     UART0 IRQ handler.
    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     UART0 serial driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define USE_LPC13xx_UART0   TRUE
    -
    -
    - -

    UART0 driver enable switch.

    -

    If set to TRUE the support for UART0 is included.

    -
    Note:
    The default is TRUE .
    - -

    Definition at line 99 of file platforms/LPC13xx/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_UART_FIFO_PRELOAD   16
    -
    -
    - -

    FIFO preload parameter.

    -

    Configuration parameter, this values defines how many bytes are preloaded in the HW transmit FIFO for each interrupt, the maximum value is 16 the minimum is 1.

    -
    Note:
    An high value reduces the number of interrupts generated but can also increase the worst case interrupt response time because the preload loops.
    - -

    Definition at line 112 of file platforms/LPC13xx/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC13xx_UART0_PRIORITY   3
    -
    -
    - -

    UART0 interrupt priority level setting.

    - -

    Definition at line 119 of file platforms/LPC13xx/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define _serial_driver_data
    -
    -
    -Value:
    _base_asynchronous_channel_data                                           \
    -  /* Driver state.*/                                                        \
    -  sdstate_t                 state;                                          \
    -  /* Input queue.*/                                                         \
    -  InputQueue                iqueue;                                         \
    -  /* Output queue.*/                                                        \
    -  OutputQueue               oqueue;                                         \
    -  /* Status Change @p EventSource.*/                                        \
    -  EventSource               sevent;                                         \
    -  /* I/O driver status flags.*/                                             \
    -  sdflags_t                 flags;                                          \
    -  /* Input circular buffer.*/                                               \
    -  uint8_t                   ib[SERIAL_BUFFERS_SIZE];                        \
    -  /* Output circular buffer.*/                                              \
    -  uint8_t                   ob[SERIAL_BUFFERS_SIZE];                        \
    -  /* End of the mandatory fields.*/                                         \
    -  /* Pointer to the USART registers block.*/                                \
    -  LPC_UART_TypeDef        *uart;
    -
    -

    SerialDriver specific data.

    - -

    Definition at line 162 of file platforms/LPC13xx/serial_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t sdflags_t
    -
    -
    - -

    Serial Driver condition flags type.

    - -

    Definition at line 137 of file platforms/LPC13xx/serial_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (VectorF8  ) 
    -
    -
    - -

    UART0 IRQ handler.

    - -

    Definition at line 222 of file platforms/LPC13xx/serial_lld.c.

    - -

    References CH_IRQ_EPILOGUE, and CH_IRQ_PROLOGUE.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_init (void  ) 
    -
    -
    - -

    Low level serial driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sd_lld_start (SerialDriver sdp,
    const SerialConfig config 
    )
    -
    -
    - -

    Low level serial driver configuration and (re)start.

    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver object
    [in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_stop (SerialDriver sdp ) 
    -
    -
    - -

    Low level serial driver stop.

    -

    De-initializes the UART, stops the associated clock, resets the interrupt vector.

    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDriver object
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    SerialDriver SD1
    -
    -
    - -

    UART0 serial driver identifier.

    - -

    Definition at line 46 of file platforms/LPC13xx/serial_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___s_e_r_i_a_l.png b/ChibiOS_2.0.8/docs/html/group___l_p_c13xx___s_e_r_i_a_l.png deleted file mode 100644 index a89f72bc31cd8ce061303daa955bbadd17d3c6a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18196 zcmeAS@N?(olHy`uVBq!ia0y~yV6tXlVBF2Y#=yX!+7}|nz`($k|H*Y zfq{X&#M9T6{T8&pinS1_cIB7srr_IdAS(&XEb-`Tyhjmoq(?SU6@oI5YmDAx9d;2itV&pcX5l_& z0l|s$$|VYRy;oS0`*qF9?rWZ~&4k}#$3?ea!5l6wE-Jju`!E4#bwEA&6|RPf)m#*OL2E`aoII%lB}Sh;L9v8h~ YMjDE@D-0lTN8` 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 RLk0#022WQ%mvv4FO#pv%7{&kq diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c214x.html b/ChibiOS_2.0.8/docs/html/group___l_p_c214x.html deleted file mode 100644 index f7d06ae..0000000 --- a/ChibiOS_2.0.8/docs/html/group___l_p_c214x.html +++ /dev/null @@ -1,97 +0,0 @@ - - -ChibiOS/RT: LPC214x Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC214x Support
    - -[ARM7TDMI] -

    -
    -
    - -

    LPC214x specific support. -More...

    - -

    -Collaboration diagram for LPC214x Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    LPC214x specific support.

    -

    The LPC214x support includes:

    -
      -
    • VIC support code.
    • -
    • I/O ports driver.
    • -
    • Buffered, interrupt driven, serial driver.
    • -
    • SPI driver.
    • -
    • A demo supporting the kernel test suite.
    • -
    • A C++ demo supporting the kernel test suite.
    • -
    • A demo integrating ChibiOS/RT with FatFS.
    • -
    - - - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     VIC Support
     

    VIC peripheral support.

    -
     LPC214x HAL Support
     

    HAL support.

    -
     LPC214x I/O Ports Support
     

    I/O Ports peripherals support.

    -
     LPC214x UART Support
     

    UART peripherals support.

    -
     LPC214x SPI Support
     

    SSP peripheral support.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c214x.png b/ChibiOS_2.0.8/docs/html/group___l_p_c214x.png deleted file mode 100644 index 21d2ce629870e6762cd15136c95eb88030c85955..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8858 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 - -ChibiOS/RT: LPC214x HAL Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC214x HAL Support
    - -[LPC214x Support] -

    -
    -
    - -

    HAL support. -More...

    - -

    -Collaboration diagram for LPC214x HAL Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL support.

    - - - - - - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "LPC214x"
     Platform name.
    #define LPC214x_NON_VECTORED_IRQ_HOOK()
     Default action for the non vectored IRQ handler, nothing.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void lpc214x_clock_init (void)
     LPC214x clocks and PLL initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PLATFORM_NAME   "LPC214x"
    -
    -
    - -

    Platform name.

    - -

    Definition at line 47 of file platforms/LPC214x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define LPC214x_NON_VECTORED_IRQ_HOOK( ) 
    -
    -
    - -

    Default action for the non vectored IRQ handler, nothing.

    - -

    Definition at line 57 of file platforms/LPC214x/hal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void hal_lld_init (void  ) 
    -
    -
    - -

    Low level HAL driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void lpc214x_clock_init (void  ) 
    -
    -
    - -

    LPC214x clocks and PLL initialization.

    -
    Note:
    All the involved constants come from the file board.h.
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    const PALConfig pal_default_config
    -
    -
    -Initial value:
    -{
    -  VAL_PINSEL0,
    -  VAL_PINSEL1,
    -  VAL_PINSEL2,
    -  {VAL_FIO0PIN, VAL_FIO0DIR},
    -  {VAL_FIO1PIN, VAL_FIO1DIR}
    -}
    -
    -

    PAL setup.

    -

    Digital I/O ports static configuration as defined in board.h.

    - -

    Definition at line 49 of file platforms/LPC214x/hal_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c214x___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___l_p_c214x___h_a_l.png deleted file mode 100644 index 72ca527d2843c155c6fa7ff1b7637a855d446e7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1271 zcmeAS@N?(olHy`uVBq!ia0y~yVANn>U{K{?V_;zT_^zawfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM?<%o_i7u3@kG}T^vIy=DfXoIy)v*hW*3)nSCoc+*+rls5!=H z2nH9ZDzTk3unv5YcBIVf?5W-f?Xf#fF1oq%<3+u@+ZW`;Xhfk7K zPAVFOTVC6*du;c1-M&eEJJ%I{4WHulD=ub_<<*?LJ@+%#+@Cu;I#>K+y2skE)3?_B z-_iGb%kE!ZR?n*cY2ORV-6kkkoH?eMjHSRYvmLQZ(A!H_Cip$>IB)eeI&O^y~LBOs?(EFzNdj z#AU7YYFE&VWB>ISZ_i}Q+>$T7XI*2iH_N)en{G_X-Ll^P)$<#-zHVFc*?AvZWq82C zC9)w^rfJ@J7dLMCzCE;Q+1n*u7s3M5F6FG#Wq8%aVaN1AsG*+0hp{23BJ0X;|E4XW z?QvgKRJZSOsdc}-FK6nqOzV}8wuG)(e9GGKWvJsV#uvsJvCnr*3bt8h(s}A?yp*HX z%&Nbw>3T5{I~QIlaCM0lI@md_XPMI%L%uI80!dv{p2^H#Idk==OY6^Co$U_yvAe!| zp8vFcp97vqg-B&;b^W-a={?_3d#2KvGi&0c`1o&s{dH8*LC-z$cbJ#g!{ctrw$~*l zfB9Yik8uv$&hTrFlhh<{O!DGbsI_K~*33;)43BynfBm>~`b)WA``*^=`#a;>6t|u6 z0{rs#{=L1k^LhQed3CR^ets_A=9L(zIj7@?-_s|>f`2CEPsuxeeE)g|?)6Vg|C#?0X{o}M2}zxnQ8GEx0GVk)?F`-Msjx z@x~f)S63}ResVqcgLU`p^xi)TjBspLOk%P`+`c6L7V4y8rAydLhnp=1@f^y6y1 zmn~K7>otlB3bOw{cyLX9@4b(%f_qj^sfjKN2-z3#{=w5;(JM!OJX>=8uvx>~pFey1 zv$yV_uV<~aNW~{W_{G1!>whu)N - -ChibiOS/RT: LPC214x I/O Ports Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - -
    -
    - -
    -

    LPC214x I/O Ports Support
    - -[LPC214x Support] -

    -
    -
    - -

    I/O Ports peripherals support. -More...

    - -

    -Collaboration diagram for LPC214x I/O Ports Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    I/O Ports peripherals support.

    -

    This module supports the LPC214x FIO controller. The controller supports the following features (see PAL Driver):

    -
      -
    • 32 bits wide ports.
    • -
    • Atomic set/reset functions.
    • -
    • Output latched regardless of the pad setting.
    • -
    • Direct read of input pads regardless of the pad setting.
    • -
    -

    Supported Setup Modes

    -
      -
    • PAL_MODE_RESET.
    • -
    • PAL_MODE_UNCONNECTED.
    • -
    • PAL_MODE_INPUT.
    • -
    • PAL_MODE_INPUT_ANALOG (same as PAL_MODE_INPUT).
    • -
    • PAL_MODE_OUTPUT_PUSHPULL.
    • -
    -

    Any attempt to setup an invalid mode is ignored.

    -

    Suboptimal Behavior

    -
      -
    • Pad/port toggling operations are not atomic.
    • -
    • Pad/group mode setup is not atomic.
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  lpc214x_fio_setup_t
     FIO port setup info. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_IOPORTS_WIDTH   32
     Width, in bits, of an I/O port.
    #define IOPORT1   FIO0Base
     FIO port 0 identifier.
    #define IOPORT2   FIO1Base
     FIO port 1 identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     FIO subsystem initialization.
    #define pal_lld_readport(port)   ((port)->FIO_PIN)
     Reads an I/O port.
    #define pal_lld_readlatch(port)   ((port)->FIO_SET)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)   ((port)->FIO_PIN = (bits))
     Writes a bits mask on a I/O port.
    #define pal_lld_setport(port, bits)   ((port)->FIO_SET = (bits))
     Sets a bits mask on a I/O port.
    #define pal_lld_clearport(port, bits)   ((port)->FIO_CLR = (bits))
     Clears a bits mask on a I/O port.
    #define pal_lld_writegroup(port, mask, offset, bits)
     Writes a value on an I/O bus.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.
    #define pal_lld_writepad(port, pad, bit)   pal_lld_writegroup(port, 1, pad, bit)
     Writes a logical state on an output pad.
    #define pal_lld_lpc214x_set_direction(port, dir)
     FIO port setup.

    -Typedefs

    typedef uint32_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef FIO * ioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     LPC214x I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PAL_IOPORTS_WIDTH   32
    -
    -
    - -

    Width, in bits, of an I/O port.

    - -

    Definition at line 84 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT1   FIO0Base
    -
    -
    - -

    FIO port 0 identifier.

    - -

    Definition at line 103 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT2   FIO1Base
    -
    -
    - -

    FIO port 1 identifier.

    - -

    Definition at line 108 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_init( config )    _pal_lld_init(config)
    -
    -
    - -

    FIO subsystem initialization.

    -

    Enables the access through the fast registers.

    - -

    Definition at line 119 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readport( port )    ((port)->FIO_PIN)
    -
    -
    - -

    Reads an I/O port.

    -

    This function is implemented by reading the FIO PIN register, the implementation has no side effects.

    -
    Parameters:
    - - -
    [in] port the port identifier
    -
    -
    -
    Returns:
    the port bits
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    - -

    Definition at line 132 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readlatch( port )    ((port)->FIO_SET)
    -
    -
    - -

    Reads the output latch.

    -

    This function is implemented by reading the FIO SET register, the implementation has no side effects.

    -
    Parameters:
    - - -
    [in] port the port identifier
    -
    -
    -
    Returns:
    The latched logical states.
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    - -

    Definition at line 145 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writeport( port,
     bits 
    )   ((port)->FIO_PIN = (bits))
    -
    -
    - -

    Writes a bits mask on a I/O port.

    -

    This function is implemented by writing the FIO PIN register, the implementation has no side effects.

    -
    Parameters:
    - - - -
    [in] port the port identifier
    [in] bits the bits to be written on the specified port
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    - -

    Definition at line 158 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setport( port,
     bits 
    )   ((port)->FIO_SET = (bits))
    -
    -
    - -

    Sets a bits mask on a I/O port.

    -

    This function is implemented by writing the FIO SET register, the implementation has no side effects.

    -
    Parameters:
    - - - -
    [in] port the port identifier
    [in] bits the bits to be ORed on the specified port
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    - -

    Definition at line 171 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_clearport( port,
     bits 
    )   ((port)->FIO_CLR = (bits))
    -
    -
    - -

    Clears a bits mask on a I/O port.

    -

    This function is implemented by writing the FIO CLR register, the implementation has no side effects.

    -
    Parameters:
    - - - -
    [in] port the port identifier
    [in] bits the bits to be cleared on the specified port
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    - -

    Definition at line 184 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writegroup( port,
     mask,
     offset,
     bits 
    )
    -
    -
    -Value:
    {                  \
    -  (port)->FIO_MASK = ~((mask) << (offset));                             \
    -  (port)->FIO_PIN = (bits) << (offset);                                 \
    -  (port)->FIO_MASK = 0;                                                 \
    -}
    -
    -

    Writes a value on an I/O bus.

    -

    This function is implemented by writing the FIO PIN and MASK registers, the implementation is not atomic because the multiple accesses.

    -
    Parameters:
    - - - - - -
    [in] port the port identifier
    [in] mask the group mask, a logical AND is performed on the output data
    [in] offset the group bit offset within the port
    [in] bits the bits to be written. Values exceeding the group width are masked.
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    - -

    Definition at line 202 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setgroupmode( port,
     mask,
     mode 
    )   _pal_lld_setgroupmode(port, mask, mode)
    -
    -
    - -

    Pads group mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] mask the group mask
    [in] mode the mode
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -PAL_MODE_UNCONNECTED is implemented as push pull output with high state.
    -
    -This function does not alter the PINSELx registers. Alternate functions setup must be handled by device-specific code.
    - -

    Definition at line 224 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writepad( port,
     pad,
     bit 
    )   pal_lld_writegroup(port, 1, pad, bit)
    -
    -
    - -

    Writes a logical state on an output pad.

    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] pad the pad number within the port
    [out] bit the logical value, the value must be 0 or 1
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    - -

    Definition at line 237 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_lpc214x_set_direction( port,
     dir 
    )
    -
    -
    -Value:
    {                      \
    -  (port)->FIO_DIR = (dir);                                              \
    -}
    -
    -

    FIO port setup.

    -

    This function programs the pins direction within a port.

    - -

    Definition at line 243 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t ioportmask_t
    -
    -
    - -

    Digital I/O port sized unsigned type.

    - -

    Definition at line 89 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef FIO* ioportid_t
    -
    -
    - -

    Port Identifier.

    - -

    Definition at line 94 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void _pal_lld_init (const PALConfig config ) 
    -
    -
    - -

    LPC214x I/O ports configuration.

    -

    FIO units and PINSEL registers initialization.

    -
    Parameters:
    - - -
    [in] config the LPC214x ports configuration
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void _pal_lld_setgroupmode (ioportid_t  port,
    ioportmask_t  mask,
    uint_fast8_t  mode 
    )
    -
    -
    - -

    Pads mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] mask the group mask
    [in] mode the mode
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -PAL_MODE_UNCONNECTED is implemented as push pull output with high state.
    -
    -This function does not alter the PINSELx registers. Alternate functions setup must be handled by device-specific code.
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    const PALConfig pal_default_config
    -
    -
    - -

    PAL setup.

    -

    Digital I/O ports static configuration as defined in board.h.

    - -

    Definition at line 49 of file platforms/AT91SAM7/hal_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c214x___p_a_l.png b/ChibiOS_2.0.8/docs/html/group___l_p_c214x___p_a_l.png deleted file mode 100644 index 9f025f3de9e08677a8fd94922d7e283a10dfd607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11763 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 diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_e_r_i_a_l.html b/ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_e_r_i_a_l.html deleted file mode 100644 index 4daa2bf..0000000 --- a/ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_e_r_i_a_l.html +++ /dev/null @@ -1,417 +0,0 @@ - - -ChibiOS/RT: LPC214x UART Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC214x UART Support
    - -[LPC214x Support] -

    -
    -
    - -

    UART peripherals support. -More...

    - -

    -Collaboration diagram for LPC214x UART Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    UART peripherals support.

    -

    The serial driver supports the LPC214x UART peripherals.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_LPC214x_UART0   TRUE
     UART0 driver enable switch.
    #define USE_LPC214x_UART1   TRUE
     UART1 driver enable switch.
    #define LPC214x_UART_FIFO_PRELOAD   16
     FIFO preload parameter.
    #define LPC214x_UART0_PRIORITY   1
     UART0 interrupt priority level setting.
    #define LPC214x_UART1_PRIORITY   2
     UART1 interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.

    -Typedefs

    typedef uint32_t sdflags_t
     Serial Driver condition flags type.

    -Functions

     CH_IRQ_HANDLER (UART0IrqHandler)
     UART0 IRQ handler.
     CH_IRQ_HANDLER (UART1IrqHandler)
     UART1 IRQ handler.
    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     UART0 serial driver identifier.
    SerialDriver SD2
     UART1 serial driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define USE_LPC214x_UART0   TRUE
    -
    -
    - -

    UART0 driver enable switch.

    -

    If set to TRUE the support for UART0 is included.

    -
    Note:
    The default is TRUE .
    - -

    Definition at line 54 of file platforms/LPC214x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_LPC214x_UART1   TRUE
    -
    -
    - -

    UART1 driver enable switch.

    -

    If set to TRUE the support for UART1 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 63 of file platforms/LPC214x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC214x_UART_FIFO_PRELOAD   16
    -
    -
    - -

    FIFO preload parameter.

    -

    Configuration parameter, this values defines how many bytes are preloaded in the HW transmit FIFO for each interrupt, the maximum value is 16 the minimum is 1.

    -
    Note:
    An high value reduces the number of interrupts generated but can also increase the worst case interrupt response time because the preload loops.
    - -

    Definition at line 76 of file platforms/LPC214x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC214x_UART0_PRIORITY   1
    -
    -
    - -

    UART0 interrupt priority level setting.

    - -

    Definition at line 83 of file platforms/LPC214x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LPC214x_UART1_PRIORITY   2
    -
    -
    - -

    UART1 interrupt priority level setting.

    - -

    Definition at line 90 of file platforms/LPC214x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define _serial_driver_data
    -
    -
    -Value:
    _base_asynchronous_channel_data                                           \
    -  /* Driver state.*/                                                        \
    -  sdstate_t                 state;                                          \
    -  /* Input queue.*/                                                         \
    -  InputQueue                iqueue;                                         \
    -  /* Output queue.*/                                                        \
    -  OutputQueue               oqueue;                                         \
    -  /* Status Change @p EventSource.*/                                        \
    -  EventSource               sevent;                                         \
    -  /* I/O driver status flags.*/                                             \
    -  sdflags_t                 flags;                                          \
    -  /* Input circular buffer.*/                                               \
    -  uint8_t                   ib[SERIAL_BUFFERS_SIZE];                        \
    -  /* Output circular buffer.*/                                              \
    -  uint8_t                   ob[SERIAL_BUFFERS_SIZE];                        \
    -  /* End of the mandatory fields.*/                                         \
    -  /* Pointer to the USART registers block.*/                                \
    -  UART                      *uart;
    -
    -

    SerialDriver specific data.

    - -

    Definition at line 133 of file platforms/LPC214x/serial_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t sdflags_t
    -
    -
    - -

    Serial Driver condition flags type.

    - -

    Definition at line 108 of file platforms/LPC214x/serial_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (UART0IrqHandler  ) 
    -
    -
    - -

    UART0 IRQ handler.

    - -

    Definition at line 238 of file platforms/LPC214x/serial_lld.c.

    - -

    References CH_IRQ_EPILOGUE, and CH_IRQ_PROLOGUE.

    - -
    -
    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (UART1IrqHandler  ) 
    -
    -
    - -

    UART1 IRQ handler.

    - -

    Definition at line 253 of file platforms/LPC214x/serial_lld.c.

    - -

    References CH_IRQ_EPILOGUE, and CH_IRQ_PROLOGUE.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_init (void  ) 
    -
    -
    - -

    Low level serial driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sd_lld_start (SerialDriver sdp,
    const SerialConfig config 
    )
    -
    -
    - -

    Low level serial driver configuration and (re)start.

    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver object
    [in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_stop (SerialDriver sdp ) 
    -
    -
    - -

    Low level serial driver stop.

    -

    De-initializes the UART, stops the associated clock, resets the interrupt vector.

    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDriver object
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    SerialDriver SD1
    -
    -
    - -

    UART0 serial driver identifier.

    - -

    Definition at line 46 of file platforms/LPC214x/serial_lld.c.

    - -
    -
    - -
    -
    - - - - -
    SerialDriver SD2
    -
    -
    - -

    UART1 serial driver identifier.

    - -

    Definition at line 51 of file platforms/LPC214x/serial_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_e_r_i_a_l.png b/ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_e_r_i_a_l.png deleted file mode 100644 index db00e0d3ec3ea68b884bdf774e1a7edbfac60643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18203 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 - -ChibiOS/RT: LPC214x SPI Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC214x SPI Support
    - -[LPC214x Support] -

    -
    -
    - -

    SSP peripheral support. -More...

    - -

    -Collaboration diagram for LPC214x SPI Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    SSP peripheral support.

    -

    The SPI driver supports the LPC214x SSP, the driver works in polling mode.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SPIConfig
     Driver configuration structure. More...
    struct  SPIDriver
     Structure representing a SPI driver. More...

    -Defines

    #define USE_LPC214x_SPI1   TRUE
     SPI1 (SSP) driver enable switch.

    -Functions

    void rw8 (size_t n, const uint8_t *txbuf, uint8_t *rxbuf)
     Synchronous SSP transfer.
    void spi_lld_init (void)
     Low level SPI driver initialization.
    void spi_lld_start (SPIDriver *spip)
     Configures and activates the SPI peripheral.
    void spi_lld_stop (SPIDriver *spip)
     Deactivates the SPI peripheral.
    void spi_lld_select (SPIDriver *spip)
     Asserts the slave select signal and prepares for transfers.
    void spi_lld_unselect (SPIDriver *spip)
     Deasserts the slave select signal.
    void spi_lld_ignore (SPIDriver *spip, size_t n)
     Ignores data on the SPI bus.
    void spi_lld_exchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
     Exchanges data on the SPI bus.
    void spi_lld_send (SPIDriver *spip, size_t n, const void *txbuf)
     Sends data ever the SPI bus.
    void spi_lld_receive (SPIDriver *spip, size_t n, void *rxbuf)
     Receives data from the SPI bus.

    -Variables

    SPIDriver SPID1
     SPI1 driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define USE_LPC214x_SPI1   TRUE
    -
    -
    - -

    SPI1 (SSP) driver enable switch.

    -

    If set to TRUE the support for SPI0 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 53 of file platforms/LPC214x/spi_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void rw8 (size_t  n,
    const uint8_t txbuf,
    uint8_t rxbuf 
    )
    -
    -
    - -

    Synchronous SSP transfer.

    -
    Parameters:
    - - - - -
    [in] n number of bytes to be exchanged
    [in] txbuf the pointer to the transmit buffer or NULL
    [out] rxbuf the pointer to the receive buffer or NULL
    -
    -
    - -

    Definition at line 64 of file platforms/LPC214x/spi_lld.c.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_init (void  ) 
    -
    -
    - -

    Low level SPI driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_start (SPIDriver spip ) 
    -
    -
    - -

    Configures and activates the SPI peripheral.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_stop (SPIDriver spip ) 
    -
    -
    - -

    Deactivates the SPI peripheral.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_select (SPIDriver spip ) 
    -
    -
    - -

    Asserts the slave select signal and prepares for transfers.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_unselect (SPIDriver spip ) 
    -
    -
    - -

    Deasserts the slave select signal.

    -

    The previously selected peripheral is unselected.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void spi_lld_ignore (SPIDriver spip,
    size_t  n 
    )
    -
    -
    - -

    Ignores data on the SPI bus.

    -

    This function transmits a series of idle words on the SPI bus and ignores the received data. This function can be invoked even when a slave select signal has not been yet asserted.

    -
    Parameters:
    - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to be ignored
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void spi_lld_exchange (SPIDriver spip,
    size_t  n,
    const void *  txbuf,
    void *  rxbuf 
    )
    -
    -
    - -

    Exchanges data on the SPI bus.

    -

    This function performs a simultaneous transmit/receive operation.

    -
    Parameters:
    - - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to be exchanged
    [in] txbuf the pointer to the transmit buffer
    [out] rxbuf the pointer to the receive buffer
    -
    -
    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void spi_lld_send (SPIDriver spip,
    size_t  n,
    const void *  txbuf 
    )
    -
    -
    - -

    Sends data ever the SPI bus.

    -
    Parameters:
    - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to send
    [in] txbuf the pointer to the transmit buffer
    -
    -
    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void spi_lld_receive (SPIDriver spip,
    size_t  n,
    void *  rxbuf 
    )
    -
    -
    - -

    Receives data from the SPI bus.

    -
    Parameters:
    - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to receive
    [out] rxbuf the pointer to the receive buffer
    -
    -
    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    SPIDriver SPID1
    -
    -
    - -

    SPI1 driver identifier.

    - -

    Definition at line 45 of file platforms/LPC214x/spi_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_p_i.png b/ChibiOS_2.0.8/docs/html/group___l_p_c214x___s_p_i.png deleted file mode 100644 index db45bad506bb529dd5e804c171ea0795a1e7f044..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3935 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 diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c214x___v_i_c.html b/ChibiOS_2.0.8/docs/html/group___l_p_c214x___v_i_c.html deleted file mode 100644 index e793c99..0000000 --- a/ChibiOS_2.0.8/docs/html/group___l_p_c214x___v_i_c.html +++ /dev/null @@ -1,132 +0,0 @@ - - -ChibiOS/RT: VIC Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    VIC Support
    - -[LPC214x Support] -

    -
    -
    - -

    VIC peripheral support. -More...

    - -

    -Collaboration diagram for VIC Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    VIC peripheral support.

    - - - - - - -

    -Functions

    void vic_init (void)
     VIC Initialization.
    void SetVICVector (void *handler, int vector, int source)
     Initializes a VIC vector.
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void vic_init (void  ) 
    -
    -
    - -

    VIC Initialization.

    -
    Note:
    Better reset everything in the VIC, it is a HUGE source of trouble.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void SetVICVector (void *  handler,
    int  vector,
    int  source 
    )
    -
    -
    - -

    Initializes a VIC vector.

    -

    Set a vector for an interrupt source and enables it.

    -
    Parameters:
    - - - - -
    [in] handler the pointer to the IRQ service routine
    [in] vector the vector number
    [in] source the IRQ source to be associated to the vector
    -
    -
    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___l_p_c214x___v_i_c.png b/ChibiOS_2.0.8/docs/html/group___l_p_c214x___v_i_c.png deleted file mode 100644 index f0a970db9e04109481575f60bd56cbb13112a390..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1184 zcmeAS@N?(olHy`uVBq!ia0y~yVED?wz@W;(#=yWZtAD*00|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj)xiJ@+IS7+9Pf+%^ zM*{?kU*>J=Z#S^=x&M7`dD?S!clGk;@m_!OsOaWQ*p4}RWe_p;2qJ~HZ8 z(#{UU%};*s+iDZ_{`bFn{^@X6?V7W>t1*+L~f6n=j;m?bYU;D!cEA4a`&c_^(<;r!2VM!eyUvTXOJ05X z>_0spae<3A-3#xfK3$kS|6$JE?6Td_`K7yO+xsjpVp(D9uvWWt)`ifk@4s)|ywN*p zms-{ZKXbn?mUoVY$mw-w&%c^8_q)&BsY^DeS6nlX6=>SE1ZeSWUongwtbv*B4uX%yE~swi|gl7TbIru{7$U-7ndAs&?yQM(`Frtg z-ZROhH7B1GaQq3);%T%=JF{uZMiuW(I;AhYue<-)yVCx8VafLso4-u&yqNLbarIN% zIrHoPUj6)B-_-R3SA!wL@g>KeH^@AdUV8WA$M^FYr|(@dzkBx5$J6$1Gm@SD`-jTk zr@E_`^v(NGs9ye~&g@Ry_RJ}2frmKLyxwH+JlweG`|XPrC8tYccfNez(|z+~h0UMe zCnxXT&$#2_%bb`@lPjeR<_ue04L0WXm`Z*6T(IMJ`lOFV1-v`vcpty$YZ|-hrP;lv zvWvgpX2kD$x@+AX)jo$X@m8HlR&Q;WWq#H=8*$O<^1CX@zdNU#wK?4Hw!5FfhN)`1 z)!e1#Qz!AehWKmlVM*wEmD6QqsG1ogJ-x1^bY1Q4BU6{`H_7@N`}F1(bJ^Z~f4_bx z_ zhg^nFQ8zb+hK5<+uS^P>FX-+b|DX8*UxW3$^3`{ - -ChibiOS/RT: MAC Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MAC Driver
    - -[HAL] -

    -
    -
    - -

    Generic MAC driver. -More...

    - -

    -Collaboration diagram for MAC Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Generic MAC driver.

    -

    This module implements a generic interface for MAC (Media Access Control) drivers, as example Ethernet controllers.

    - - - - -

    -

    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Modules

     MAC Low Level Driver
     

    MAC Driver low level driver template.

    -

    -Defines

    #define macGetReceiveEventSource(macp)   (&(macp)->md_rdevent)
     Returns the received frames event source.
    #define macWriteTransmitDescriptor(tdp, buf, size)   mac_lld_write_transmit_descriptor(tdp, buf, size)
     Writes to a transmit descriptor's stream.
    #define macReadReceiveDescriptor(rdp, buf, size)   mac_lld_read_receive_descriptor(rdp, buf, size)
     Reads from a receive descriptor's stream.

    -Functions

    void macInit (void)
     MAC Driver initialization.
    void macObjectInit (MACDriver *macp)
     Initialize the standard part of a MACDriver structure.
    void macSetAddress (MACDriver *macp, const uint8_t *p)
     MAC address setup.
    msg_t macWaitTransmitDescriptor (MACDriver *macp, MACTransmitDescriptor *tdp, systime_t time)
     Allocates a transmission descriptor.
    void macReleaseTransmitDescriptor (MACTransmitDescriptor *tdp)
     Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.
    msg_t macWaitReceiveDescriptor (MACDriver *macp, MACReceiveDescriptor *rdp, systime_t time)
     Waits for a received frame.
    void macReleaseReceiveDescriptor (MACReceiveDescriptor *rdp)
     Releases a receive descriptor.
    bool_t macPollLinkStatus (MACDriver *macp)
     Updates and returns the link status.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - -
    #define macGetReceiveEventSource( macp )    (&(macp)->md_rdevent)
    -
    -
    - -

    Returns the received frames event source.

    -
    Parameters:
    - - -
    [in] macp pointer to the MACDriver object
    -
    -
    -
    Returns:
    The pointer to the EventSource structure.
    - -

    Definition at line 72 of file mac.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define macWriteTransmitDescriptor( tdp,
     buf,
     size 
    )   mac_lld_write_transmit_descriptor(tdp, buf, size)
    -
    -
    - -

    Writes to a transmit descriptor's stream.

    -
    Parameters:
    - - - - -
    [in] tdp pointer to a MACTransmitDescriptor structure
    [in] buf pointer to the buffer containing the data to be written
    [in] size number of bytes to be written
    -
    -
    -
    Returns:
    The number of bytes written into the descriptor's stream, this value can be less than the amount specified in the parameter size if the maximum frame size is reached.
    - -

    Definition at line 86 of file mac.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define macReadReceiveDescriptor( rdp,
     buf,
     size 
    )   mac_lld_read_receive_descriptor(rdp, buf, size)
    -
    -
    - -

    Reads from a receive descriptor's stream.

    -
    Parameters:
    - - - - -
    [in] rdp pointer to a MACReceiveDescriptor structure
    [in] buf pointer to the buffer that will receive the read data
    [in] size number of bytes to be read
    -
    -
    -
    Returns:
    The number of bytes read from the descriptor's stream, this value can be less than the amount specified in the parameter size if there are no more bytes to read.
    - -

    Definition at line 99 of file mac.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void macInit (void  ) 
    -
    -
    - -

    MAC Driver initialization.

    - -

    Definition at line 63 of file mac.c.

    - -

    References mac_lld_init().

    - -

    Referenced by halInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void macObjectInit (MACDriver macp ) 
    -
    -
    - -

    Initialize the standard part of a MACDriver structure.

    -
    Parameters:
    - - -
    [in] macp pointer to the MACDriver object
    -
    -
    - -

    Definition at line 73 of file mac.c.

    - -

    References chEvtInit, chSemInit(), MACDriver::md_rdevent, MACDriver::md_rdsem, and MACDriver::md_tdsem.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void macSetAddress (MACDriver macp,
    const uint8_t p 
    )
    -
    -
    - -

    MAC address setup.

    -
    Note:
    This function must be invoked only with the driver in the stopped state. If invoked on an active interface then it is ignored.
    -
    Parameters:
    - - - -
    [in] macp pointer to the MACDriver object
    [in] p pointer to a six bytes buffer containing the MAC address. If this parameter is set to NULL then MAC a system default is used.
    -
    -
    - -

    Definition at line 93 of file mac.c.

    - -

    References mac_lld_set_address().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t macWaitTransmitDescriptor (MACDriver macp,
    MACTransmitDescriptor tdp,
    systime_t  time 
    )
    -
    -
    - -

    Allocates a transmission descriptor.

    -

    One of the available transmission descriptors is locked and returned. If a descriptor is not currently available then the invoking thread is queued until one is freed.

    -
    Parameters:
    - - - - -
    [in] macp pointer to the MACDriver object
    [out] tdp pointer to a MACTransmitDescriptor structure
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    RDY_OK the descriptor was obtained.
    RDY_TIMEOUT the operation timed out, descriptor not initialized.
    -
    -
    - -

    Definition at line 115 of file mac.c.

    - -

    References chSemWaitTimeoutS(), chSysLock, chSysUnlock, chTimeNow, max_lld_get_transmit_descriptor(), MACDriver::md_tdsem, RDY_OK, RDY_TIMEOUT, and TIME_INFINITE.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void macReleaseTransmitDescriptor (MACTransmitDescriptor tdp ) 
    -
    -
    - -

    Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.

    -
    Parameters:
    - - -
    [in] tdp the pointer to the MACTransmitDescriptor structure
    -
    -
    - -

    Definition at line 139 of file mac.c.

    - -

    References mac_lld_release_transmit_descriptor().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t macWaitReceiveDescriptor (MACDriver macp,
    MACReceiveDescriptor rdp,
    systime_t  time 
    )
    -
    -
    - -

    Waits for a received frame.

    -

    Stops until a frame is received and buffered. If a frame is not immediately available then the invoking thread is queued until one is received.

    -
    Parameters:
    - - - - -
    [in] macp pointer to the MACDriver object
    [out] rdp pointer to a MACReceiveDescriptor structure
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    RDY_OK the descriptor was obtained.
    RDY_TIMEOUT the operation timed out, descriptor not initialized.
    -
    -
    - -

    Definition at line 161 of file mac.c.

    - -

    References chSemWaitTimeoutS(), chSysLock, chSysUnlock, chTimeNow, max_lld_get_receive_descriptor(), MACDriver::md_rdsem, RDY_OK, RDY_TIMEOUT, and TIME_INFINITE.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void macReleaseReceiveDescriptor (MACReceiveDescriptor rdp ) 
    -
    -
    - -

    Releases a receive descriptor.

    -

    The descriptor and its buffer are made available for more incoming frames.

    -
    Parameters:
    - - -
    [in] rdp the pointer to the MACReceiveDescriptor structure
    -
    -
    - -

    Definition at line 186 of file mac.c.

    - -

    References mac_lld_release_receive_descriptor().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t macPollLinkStatus (MACDriver macp ) 
    -
    -
    - -

    Updates and returns the link status.

    -
    Parameters:
    - - -
    [in] macp pointer to the MACDriver object
    -
    -
    -
    Returns:
    The link status.
    -
    Return values:
    - - - -
    TRUE if the link is active.
    FALSE if the link is down.
    -
    -
    - -

    Definition at line 199 of file mac.c.

    - -

    References mac_lld_poll_link_status().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___m_a_c.png b/ChibiOS_2.0.8/docs/html/group___m_a_c.png deleted file mode 100644 index 25d8b8fbe9c9030858d5e5f1a7554f9f6f125f88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1599 zcmeAS@N?(olHy`uVBq!ia0y~yU`%CTU{K{?V_;yIwdzMQ0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj+|!Tl*I=Ft9%Kba4!+nDh3Ie~w6~4Eu-o`QDMbuDl}KcB}sL z^ypDkY0LN!;PhIp$e=AwZ1a{wYZZkSOg&QZAYjtH%w9()iwq^hgWBqoP9>Shm{b|a z_}Fw@dne?g{Ivh?=FguQ7GF+HD=&Ng_K)U$|4TVDYd_!1FZ*5h`PtcI1|?+RB~y6w z8vlcg8;vXVh@kAGq0LBAB zR~%V32s4O5D1ir*$=NPcjg)lrLp)eEPX^jzyu;D+8g$ z`}fOFo;*3QJ<&<%m-yD{+5fy+WmyFUE0crNl)41fQk51-BqEqAxBoh%e{}Kdxy?D* zvt!;>^ruGtcG(i4=l_;#b!;#jJA2{JPpR>@_nx}-{^p)n#h+F!548Rm@Z!YNqV>^Y zT}np5dj6`pNBhF%Gq>5Vd|bZ&>&$EK%=Xv`FRyyrKC6Gv43ATFH`t|rIe!1LXaBy< z#f2OPII$i(6TX|7ZBnsrAWW zlW7e-3@iU9~ED3ue)BSYiJr|Cgfw#+UK(@ ze|tyYot?_8f@_2?YRSnhKJrLLVoov3n;PC=<6yC`ZqL+~*=@S{_bgy&utaSMpMEE{)OEl#~R?6KFi3?*bArvZX4{$t zt-V*hdU5jIDu(JeZ~I#AB>dla!u|WS(*JrNHh-)-EN5w+^lC}L=V!JtyGrC|p3z{a zNy*ZhSFg_uc74mO-u>3^l-l_v+EY$n zp1<_+`M2-i-P>9F_EwB~L(eL`pR$@Ov!0xn+fn;_c6s9&ht0o#?(GcUeK%X=wnpYJ z+1%ffGub6~=HI%~dUyBy12c`|7w!JNRi5E>>eY}?7wZS_-@lx*DlThfq4T?Ye+$_g z_@i!Ieeb*H*4wznw!$ZuZp#Z^{3Y!*j}hy`qb0ld9ewy|-%M3)Z5^GM|JjKTe}x}7 zV!d~7{d=K{i?q6wD!fF!zq*~Bda6Wb-X&9(6sOz`WqiA?rWP-|{aJgi*qQV3NB{h} zDqCCYzAa?+%I&TN0iw5G*FRsh>W3ZM{c4fR+FOe+)J;2k^XZ>=ucvpK&C<=+s=GYD zHC=h@x5o!BcTXzFJ`-1L_2>Vxi|2fvowQYw5cA|^43lbLJ<&B){OP92Xc03Shh+ov#eQR}$-PhQiHl=%F>eNCD&x|-=G9AXrA14SN*pkAVwL$Xu7$1_cQG}r z_}?C;5WX(PvA(|kN}`I}%8)KAmf%Sj_OI9*^ErI)lA49J8z - -ChibiOS/RT: MAC Low Level Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MAC Low Level Driver
    - -[MAC Driver] -

    -
    -
    - -

    MAC Driver low level driver template. -More...

    - -

    -Collaboration diagram for MAC Low Level Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    MAC Driver low level driver template.

    -

    This file is a template for a MAC low level driver.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  MACDriver
     Structure representing a MAC driver. More...
    struct  MACTransmitDescriptor
     Structure representing a transmit descriptor. More...
    struct  MACReceiveDescriptor
     Structure representing a receive descriptor. More...

    -Defines

    #define MAC_TRANSMIT_BUFFERS   2
     Number of available transmit buffers.
    #define MAC_RECEIVE_BUFFERS   2
     Number of available receive buffers.
    #define MAC_BUFFERS_SIZE   1518
     Maximum supported frame size.

    -Functions

    void mac_lld_init (void)
     Low level MAC initialization.
    void mac_lld_set_address (MACDriver *macp, const uint8_t *p)
     Low level MAC address setup.
    msg_t max_lld_get_transmit_descriptor (MACDriver *macp, MACTransmitDescriptor *tdp)
     Returns a transmission descriptor.
    size_t mac_lld_write_transmit_descriptor (MACTransmitDescriptor *tdp, uint8_t *buf, size_t size)
     Writes to a transmit descriptor's stream.
    void mac_lld_release_transmit_descriptor (MACTransmitDescriptor *tdp)
     Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.
    msg_t max_lld_get_receive_descriptor (MACDriver *macp, MACReceiveDescriptor *rdp)
     Returns a receive descriptor.
    size_t mac_lld_read_receive_descriptor (MACReceiveDescriptor *rdp, uint8_t *buf, size_t size)
     Reads from a receive descriptor's stream.
    void mac_lld_release_receive_descriptor (MACReceiveDescriptor *rdp)
     Releases a receive descriptor.
    bool_t mac_lld_poll_link_status (MACDriver *macp)
     Updates and returns the link status.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define MAC_TRANSMIT_BUFFERS   2
    -
    -
    - -

    Number of available transmit buffers.

    - -

    Definition at line 52 of file templates/mac_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define MAC_RECEIVE_BUFFERS   2
    -
    -
    - -

    Number of available receive buffers.

    - -

    Definition at line 59 of file templates/mac_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define MAC_BUFFERS_SIZE   1518
    -
    -
    - -

    Maximum supported frame size.

    - -

    Definition at line 66 of file templates/mac_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void mac_lld_init (void  ) 
    -
    -
    - -

    Low level MAC initialization.

    - -

    Referenced by macInit().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void mac_lld_set_address (MACDriver macp,
    const uint8_t p 
    )
    -
    -
    - -

    Low level MAC address setup.

    -
    Parameters:
    - - - -
    [in] macp pointer to the MACDriver object
    [in] p pointer to a six bytes buffer containing the MAC address. If this parameter is set to NULL then a system default MAC is used.
    -
    -
    - -

    Referenced by macSetAddress().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t max_lld_get_transmit_descriptor (MACDriver macp,
    MACTransmitDescriptor tdp 
    )
    -
    -
    - -

    Returns a transmission descriptor.

    -

    One of the available transmission descriptors is locked and returned.

    -
    Parameters:
    - - - -
    [in] macp pointer to the MACDriver object
    [out] tdp pointer to a MACTransmitDescriptor structure
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    RDY_OK a descriptor was obtained.
    RDY_TIMEOUT descriptor not available.
    -
    -
    - -

    Referenced by macWaitTransmitDescriptor().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    size_t mac_lld_write_transmit_descriptor (MACTransmitDescriptor tdp,
    uint8_t buf,
    size_t  size 
    )
    -
    -
    - -

    Writes to a transmit descriptor's stream.

    -
    Parameters:
    - - - - -
    [in] tdp pointer to a MACTransmitDescriptor structure
    [in] buf pointer to the buffer containing the data to be written
    [in] size number of bytes to be written
    -
    -
    -
    Returns:
    The number of bytes written into the descriptor's stream, this value can be less than the amount specified in the parameter size if the maximum frame size is reached.
    - -
    -
    - -
    -
    - - - - - - - - - -
    void mac_lld_release_transmit_descriptor (MACTransmitDescriptor tdp ) 
    -
    -
    - -

    Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.

    -
    Parameters:
    - - -
    [in] tdp pointer to a MACTransmitDescriptor structure
    -
    -
    - -

    Referenced by macReleaseTransmitDescriptor().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t max_lld_get_receive_descriptor (MACDriver macp,
    MACReceiveDescriptor rdp 
    )
    -
    -
    - -

    Returns a receive descriptor.

    -
    Parameters:
    - - - -
    [in] macp pointer to a MACDriver object
    [out] rdp pointer to a MACReceiveDescriptor structure
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    RDY_OK a descriptor was obtained.
    RDY_TIMEOUT descriptor not available.
    -
    -
    - -

    Referenced by macWaitReceiveDescriptor().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    size_t mac_lld_read_receive_descriptor (MACReceiveDescriptor rdp,
    uint8_t buf,
    size_t  size 
    )
    -
    -
    - -

    Reads from a receive descriptor's stream.

    -
    Parameters:
    - - - - -
    [in] rdp pointer to a MACReceiveDescriptor structure
    [in] buf pointer to a buffer that will receive the read data
    [in] size number of bytes to be read
    -
    -
    -
    Returns:
    The number of bytes read from the descriptor's stream, this value can be less than the amount specified in the parameter size if there are no more bytes to read.
    - -
    -
    - -
    -
    - - - - - - - - - -
    void mac_lld_release_receive_descriptor (MACReceiveDescriptor rdp ) 
    -
    -
    - -

    Releases a receive descriptor.

    -

    The descriptor and its buffer are made available for more incoming frames.

    -
    Parameters:
    - - -
    [in] rdp pointer to a MACReceiveDescriptor structure
    -
    -
    - -

    Referenced by macReleaseReceiveDescriptor().

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t mac_lld_poll_link_status (MACDriver macp ) 
    -
    -
    - -

    Updates and returns the link status.

    -
    Parameters:
    - - -
    [in] macp pointer to a MACDriver object
    -
    -
    -
    Returns:
    The link status.
    -
    Return values:
    - - - -
    TRUE if the link is active.
    FALSE if the link is down.
    -
    -
    - -

    Referenced by macPollLinkStatus().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___m_a_c___l_l_d.png b/ChibiOS_2.0.8/docs/html/group___m_a_c___l_l_d.png deleted file mode 100644 index ac5a7d0d53845cb307464b991d4904c77a275d90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2329 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 diff --git a/ChibiOS_2.0.8/docs/html/group___m_a_c_ga151a33674ef86c2403ac7797fa87805c_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_a_c_ga151a33674ef86c2403ac7797fa87805c_cgraph.png deleted file mode 100644 index a4b049faaaeec66648cb4fab76d999d00ea0dd3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3705 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 diff --git a/ChibiOS_2.0.8/docs/html/group___m_a_c_ga2f76703cfc76da57feedb57e9d37c8a4_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_a_c_ga2f76703cfc76da57feedb57e9d37c8a4_cgraph.png deleted file mode 100644 index 76efe7b045c4ad3c54157d4a1f0b387fdad48fc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 994 zcmeAS@N?(olHy`uVBq!ia0y~yU^u|Qz@W;(#=yWJ68g-Hfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM|j=t^JD_7?@i;T^vIy=DfXg-diM5g8jpL&cw^}T=hZXB`NbN;n{Sv13f=w_ z`0m_g$JWHT<>hJRbIQw~|BRVad%yhN_r}WkGt27~6j}tFI22n1oLX2kPvtYc;4zxe zz{~h!iFF58Y0~!}9PjyLzOPvHu#&+xHa50hHsHasWy=^6f{G=sS}-nPKOlX#@ybj& z3z_mzCWV?{T5hdtjc0?4QlpPr@q?b6`76FznLj;R z`mL(^=f4|YJH;5cFftgQGk9FGFu}I#c<^S1I4L&Yl+DfiSIM+&w65$rKPTkMG4Gwz zH{N|0t>;&k5p8;Z9m6-34gOai8JRyVTUE9E?`s)BMJ|CEg@OlKYv#?Lk#?W`@B+bv z&u=eXx_p-F_cnh$t-xo??!2Dy`*z%lW2IfIwf3nxtn7SIQu^VR`w0mKhu!Tzg^bIY z&(`~H&M!(%wwrzWEYpTPU&6BvS;Ot5`&cC=X|9G$;{KI`q!?p`M1nkO?=hd6{e+6C$U`6 zkXrg~!oII-B~5?o21J~Aa@`*}u}xx7x-!MTaoO_a7jND?@n3rNyRR?!76@txE6hKy tJlBt1vin0?OgRH2A8;tPtWf^X*ge;(?AR6ODh37y22WQ%mvv4FO#mVq#mE2v diff --git a/ChibiOS_2.0.8/docs/html/group___m_a_c_ga34d60b00ad9794d52da6833e18c9ec70_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_a_c_ga34d60b00ad9794d52da6833e18c9ec70_cgraph.png deleted file mode 100644 index 733060bcde25f93394f8bbb2172ed4158fcc5fd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1098 zcmeAS@N?(olHy`uVBq!ia0y~yV7S4+z@W;(#=yX!prfwEz`($k|H*Y zfq{X&#M9T6{T8|l9x#&9flpVOB6LX zGCc6Op1>vHwNxl9ENo4v$to*GX*P349ko~&uPMH~ese+vdZpNUPADPaMIr2KB6R91 zer%upt9|bB`-XSEZ75!P^2(L#^Us{qv!63}Z_Ud$H!^~})UJ=!bK~9yb|m-h=y)>K<1fKm0rUlKXFW8SH%g`rFmF*WcIN6Fqt5ynXxs=W=Xbi82B6 zJ0E;b6J|FyzJFIZ^X{#?wcinl-Djqc0dXee12-7kD}D zBEwPx#YK9In@o&@?}om*{d#@eU#rOV`&aN8?RmI!UB6z&vg@8^{)*0>Pfa7%U)Gnt zBqg`BNJC`WsTW1nzBR9EzfJDH6(8#8vTy#ZUrcA8)o8*$5Bt*3dD?3ec^`m6uGnK$`_;J5Gd*FFFIJgC5Y@8oc=x|hqB2U!Rm+!0h! zS@2=e$8T@r&-3xexABIrzq~?H8^s`gH2Z%gfI~eKakF0v|KPZI9Bh_Iv&9+qYlB4CYLJPxt@0 zpe=A$FN{T2yXS;cw$zdst*QG?-MafFa>s`YoIjLql`mFbCA^`&cD6LbF@`%21?y9+#_yjW^Qh1e*FA2mBp+n|3AwvPWsd1k$ga^m+jiM sYimMXW}5Ro@Vn$HAP510Jpb5VO71MXysz1jfq{X+)78&qol`;+09*(Sga7~l diff --git a/ChibiOS_2.0.8/docs/html/group___m_a_c_ga4c6470b965aef1ee65bc6dd24c71bc5c_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_a_c_ga4c6470b965aef1ee65bc6dd24c71bc5c_cgraph.png deleted file mode 100644 index b355979a6f06d38f075c5e4c84042aa577341948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1446 zcmeAS@N?(olHy`uVBq!ia0y~yU|h|>z@W;(#=yYv=gzT01_lPUByV>YhW{YAVDIwD z3=9nHC7!;n?6z*vR+51P!vU3|9;G<;3yd2itvLdH zOG>Omj&d<<*tRXqPh^q9tg~uWd*j|nxZY(dP%YzFG;0UXg4MS!uCU+`6r5-*rmdv3 z$`+G+yPGjNGBVO~>)QM8qi^5n<2%rkQpHfbL3v@HPdi~3d%A(ij%KJGyS$(xCvFP8QSKoWv z-stJ+<=x$1|93^g{gl)+7&sb>gC5l?E|XU|c{w)W>$89V z?oL1UI6gN1zR}-LtHWZ~)jr95ZQQoDH*0_1nm3DU@19cRzdq-t*|Nu>t3{?4`qa+) zWf(jEP2sBByOLvAwL=_O*GG!Z%m@|UnwzxQ_SN~c3!?LF9`D$8a`M(SW!sdD*RP(v zbm{i^=!lA|-^KR_Idy#dJX@dnM?vOGSs8hGyX>uTHTf2M3at+aEL1yUbVE(=_TpbR zzu$bk`MAhjh1lD_`^2-9wu{bOuzL0kt=iYSRtB_2>E8IZe0ys5v~~L@+>F`wyi)i0 zmHF#pe|=r@CPFWHhg@*m;luOmCI-cI{ngKpQ}nZ|22y{>@6W{Dm0$mWl*Bey=ikE_ooywY5;xPPtCZsqRW%|9hK?4_D|bnxs>{ojhEPrMHb?_pqIVDNPH Kb6Mw<&;$V0-O7{z diff --git a/ChibiOS_2.0.8/docs/html/group___m_a_c_ga7304721038db1d7c0cb616c9c4d3f0ce_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_a_c_ga7304721038db1d7c0cb616c9c4d3f0ce_cgraph.png deleted file mode 100644 index 6933dd3fcc44f141d83e3708a35620ae83b0c53f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3756 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 yU;0uwUfj)A5|H*Y zfq{X&#M9T6{T83G9R?C8Xf7OMq%Q>R9-s+fgr3|yjg>q?@> zlvS#leeVr-xSe}^clY-<<#pel{+_6G`}zI9@5JcF?>a86S^T-u{^`_~2j3aaoIiUuHBz8*)8@_03~LXh^1Lc#_{^}) zN!&>}SMEUWU1`s=JXft+@S#%^OZW{B2?3y~k8}%iFha|IZ88ni{;m_Q{r|x3{gY`lQkIsAHFtp^v|xb-f=auJ?dt3Pe|LJ=dwy=%sg|1Pju&mQYksg#U}f09HLCt^ zWkJF7pxuA3xGVpT57d0mTeSC-nckN-XWa7Vn(FxCm$zNEed_%?$+6r4=fe5Kj@uJZfV{yloHf2=q>)%UZ()hn^rxBSmEocXReXj5<2 z)?Eko&oY#|cI{fg`s>*Y>sr?>y?o}#-g~J|C$61-o%%Z{$@$cZZQH*eJ#X>%U>w7S z#*Z@&?vR)sd2`2v7d7XyUr8%h&zI~q*A(PtWPI@6;#inS=h?e=-AfZz%kJ97;%TgN z+il8K)18j5rNYiVxN$~9*y({@!|dQ-<8nE>J#{j>?xw<)NPef-+v>Hv?pW)~7r0Z-?M^Pi3Q2fZ<;I_E2Xy$+R3KiA%j(su53gzEVA#hS%OHpZdOPYFFRj%GTwguah=GBD!PC{x JWt~$(69Al{b#DLw diff --git a/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i.html b/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i.html deleted file mode 100644 index c74ae5f..0000000 --- a/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i.html +++ /dev/null @@ -1,958 +0,0 @@ - - -ChibiOS/RT: MMC over SPI Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MMC over SPI Driver
    - -[HAL] -

    -
    -
    - -

    Generic MMC driver. -More...

    - -

    -Collaboration diagram for MMC over SPI Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Generic MMC driver.

    -

    This module implements a portable MMC driver that uses a SPI driver as physical layer.
    - The driver implements the following state machine:

    -
    -inline_dotgraph_19.dot - -
    -

    The MMC drivers currently supports only cards with capacity up to 2GB and does not implement CRC checking. Hot plugging and removal are supported through kernel events.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  MMCConfig
     Driver configuration structure. More...
    struct  MMCDriver
     Structure representing a MMC driver. More...

    -Defines

    #define MMC_SECTOR_SIZE   512
     Block size for MMC transfers.
    #define MMC_NICE_WAITING   TRUE
     Delays insertions.
    #define MMC_POLLING_INTERVAL   10
     Number of positive insertion queries before generating the insertion event.
    #define MMC_POLLING_DELAY   10
     Interval, in milliseconds, between insertion queries.
    #define mmcGetDriverState(mmcp)   ((mmcp)->mmc_state)
     Returns the driver state.
    #define mmcIsWriteProtected(mmcp)   ((mmcp)->mmc_is_protected())
     Returns the write protect status.

    -Typedefs

    typedef bool_t(* mmcquery_t )(void)
     Function used to query some hardware status bits.

    -Enumerations

    enum  mmcstate_t {
    -  MMC_UNINIT = 0, -MMC_STOP = 1, -MMC_WAIT = 2, -MMC_INSERTED = 3, -
    -  MMC_READY = 4, -MMC_READING = 5, -MMC_WRITING = 6 -
    - }
     

    Driver state machine possible states.

    - More...

    -Functions

    void mmcInit (void)
     MMC over SPI driver initialization.
    void mmcObjectInit (MMCDriver *mmcp, SPIDriver *spip, const SPIConfig *lscfg, const SPIConfig *hscfg, mmcquery_t is_protected, mmcquery_t is_inserted)
     Initializes an instance.
    void mmcStart (MMCDriver *mmcp, const MMCConfig *config)
     Configures and activates the MMC peripheral.
    void mmcStop (MMCDriver *mmcp)
     Disables the MMC peripheral.
    bool_t mmcConnect (MMCDriver *mmcp)
     Performs the initialization procedure on the inserted card.
    bool_t mmcDisconnect (MMCDriver *mmcp)
     Brings the driver in a state safe for card removal.
    bool_t mmcStartSequentialRead (MMCDriver *mmcp, uint32_t startblk)
     Starts a sequential read.
    bool_t mmcSequentialRead (MMCDriver *mmcp, uint8_t *buffer)
     Reads a block within a sequential read operation.
    bool_t mmcStopSequentialRead (MMCDriver *mmcp)
     Stops a sequential read gracefully.
    bool_t mmcStartSequentialWrite (MMCDriver *mmcp, uint32_t startblk)
     Starts a sequential write.
    bool_t mmcSequentialWrite (MMCDriver *mmcp, const uint8_t *buffer)
     Writes a block within a sequential write operation.
    bool_t mmcStopSequentialWrite (MMCDriver *mmcp)
     Stops a sequential write gracefully.
    void tmrfunc (void *p)
     Inserion monitor timer callback function.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define MMC_SECTOR_SIZE   512
    -
    -
    - -

    Block size for MMC transfers.

    - -

    Definition at line 66 of file mmc_spi.h.

    - -

    Referenced by mmcConnect(), mmcSequentialRead(), mmcSequentialWrite(), mmcStartSequentialRead(), and mmcStartSequentialWrite().

    - -
    -
    - -
    -
    - - - - -
    #define MMC_NICE_WAITING   TRUE
    -
    -
    - -

    Delays insertions.

    -

    If enabled this options inserts delays into the MMC waiting routines releasing some extra CPU time for the threads with lower priority, this may slow down the driver a bit however. This option is recommended also if the SPI driver does not use a DMA channel and heavily loads the CPU.

    - -

    Definition at line 78 of file mmc_spi.h.

    - -
    -
    - -
    -
    - - - - -
    #define MMC_POLLING_INTERVAL   10
    -
    -
    - -

    Number of positive insertion queries before generating the insertion event.

    - -

    Definition at line 86 of file mmc_spi.h.

    - -
    -
    - -
    -
    - - - - -
    #define MMC_POLLING_DELAY   10
    -
    -
    - -

    Interval, in milliseconds, between insertion queries.

    - -

    Definition at line 93 of file mmc_spi.h.

    - -

    Referenced by mmcStart(), and tmrfunc().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define mmcGetDriverState( mmcp )    ((mmcp)->mmc_state)
    -
    -
    - -

    Returns the driver state.

    - -

    Definition at line 192 of file mmc_spi.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define mmcIsWriteProtected( mmcp )    ((mmcp)->mmc_is_protected())
    -
    -
    - -

    Returns the write protect status.

    - -

    Definition at line 197 of file mmc_spi.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef bool_t(* mmcquery_t)(void)
    -
    -
    - -

    Function used to query some hardware status bits.

    -
    Returns:
    The status.
    - -

    Definition at line 126 of file mmc_spi.h.

    - -
    -
    -

    Enumeration Type Documentation

    - -
    -
    - - - - -
    enum mmcstate_t
    -
    -
    - -

    Driver state machine possible states.

    -
    Enumerator:
    - - - - - - - -
    MMC_UNINIT  -

    Not initialized.

    -
    MMC_STOP  -

    Stopped.

    -
    MMC_WAIT  -

    Waiting card.

    -
    MMC_INSERTED  -

    Card inserted.

    -
    MMC_READY  -

    Card ready.

    -
    MMC_READING  -

    Reading.

    -
    MMC_WRITING  -

    Writing.

    -
    -
    -
    - -

    Definition at line 111 of file mmc_spi.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void mmcInit (void  ) 
    -
    -
    - -

    MMC over SPI driver initialization.

    - -

    Definition at line 193 of file mmc_spi.c.

    - -

    Referenced by halInit().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void mmcObjectInit (MMCDriver mmcp,
    SPIDriver spip,
    const SPIConfig lscfg,
    const SPIConfig hscfg,
    mmcquery_t  is_protected,
    mmcquery_t  is_inserted 
    )
    -
    -
    - -

    Initializes an instance.

    -
    Parameters:
    - - - - - - - -
    [in] mmcp pointer to the MMCDriver object
    [in] spip pointer to the SPI driver to be used as interface
    [in] lscfg low speed configuration for the SPI driver
    [in] hscfg high speed configuration for the SPI driver
    [in] is_protected function that returns the card write protection setting
    [in] is_inserted function that returns the card insertion sensor status
    -
    -
    - -

    Definition at line 209 of file mmc_spi.c.

    - -

    References chEvtInit, MMCDriver::mmc_config, MMCDriver::mmc_hscfg, MMCDriver::mmc_inserted_event, MMCDriver::mmc_is_inserted, MMCDriver::mmc_is_protected, MMCDriver::mmc_lscfg, MMCDriver::mmc_removed_event, MMCDriver::mmc_spip, and MMCDriver::mmc_state.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void mmcStart (MMCDriver mmcp,
    const MMCConfig config 
    )
    -
    -
    - -

    Configures and activates the MMC peripheral.

    -
    Parameters:
    - - - -
    [in] mmcp pointer to the MMCDriver object
    [in] config pointer to the MMCConfig object
    -
    -
    - -

    Definition at line 230 of file mmc_spi.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, chVTSetI(), MMCDriver::mmc_cnt, MMCDriver::mmc_config, MMC_POLLING_DELAY, MMCDriver::mmc_state, MMC_STOP, MMCDriver::mmc_vt, MS2ST, and tmrfunc().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void mmcStop (MMCDriver mmcp ) 
    -
    -
    - -

    Disables the MMC peripheral.

    -
    Parameters:
    - - -
    [in] mmcp pointer to the MMCDriver object
    -
    -
    - -

    Definition at line 248 of file mmc_spi.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, chVTResetI(), MMC_READING, MMCDriver::mmc_spip, MMCDriver::mmc_state, MMC_STOP, MMC_UNINIT, MMCDriver::mmc_vt, MMC_WRITING, and spiStop().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t mmcConnect (MMCDriver mmcp ) 
    -
    -
    - -

    Performs the initialization procedure on the inserted card.

    -

    This function should be invoked when a card is inserted and brings the driver in the MMC_READY state where it is possible to perform read and write operations.

    -
    Note:
    It is possible to invoke this function from the insertion event handler.
    -
    Parameters:
    - - -
    [in] mmcp pointer to the MMCDriver object
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    FALSE the operation was successful and the driver is now in the MMC_READY state.
    TRUE the operation failed.
    -
    -
    - -

    Definition at line 280 of file mmc_spi.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, chThdSleepMilliseconds, MMCDriver::mmc_hscfg, MMC_INSERTED, MMCDriver::mmc_lscfg, MMC_READY, MMC_SECTOR_SIZE, MMCDriver::mmc_spip, MMCDriver::mmc_state, MMC_STOP, MMC_UNINIT, spiIgnore(), and spiStart().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t mmcDisconnect (MMCDriver mmcp ) 
    -
    -
    - -

    Brings the driver in a state safe for card removal.

    -
    Parameters:
    - - -
    [in] mmcp pointer to the MMCDriver object
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    FALSE the operation was successful and the driver is now in the MMC_INSERTED state.
    TRUE the operation failed.
    -
    -
    - -

    Definition at line 352 of file mmc_spi.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, MMC_INSERTED, MMC_READY, MMCDriver::mmc_spip, MMCDriver::mmc_state, MMC_STOP, MMC_UNINIT, and spiStop().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool_t mmcStartSequentialRead (MMCDriver mmcp,
    uint32_t  startblk 
    )
    -
    -
    - -

    Starts a sequential read.

    -
    Parameters:
    - - - -
    [in] mmcp pointer to the MMCDriver object
    [in] startblk first block to read
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    FALSE the operation was successful.
    TRUE the operation failed.
    -
    -
    - -

    Definition at line 387 of file mmc_spi.c.

    - -

    References chDbgCheck, chSysLock, chSysUnlock, MMCDriver::mmc_hscfg, MMC_READING, MMC_READY, MMC_SECTOR_SIZE, MMCDriver::mmc_spip, MMCDriver::mmc_state, spiSelect(), spiStart(), and spiUnselect().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool_t mmcSequentialRead (MMCDriver mmcp,
    uint8_t buffer 
    )
    -
    -
    - -

    Reads a block within a sequential read operation.

    -
    Parameters:
    - - - -
    [in] mmcp pointer to the MMCDriver object
    [out] buffer pointer to the read buffer
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    FALSE the operation was successful.
    TRUE the operation failed.
    -
    -
    - -

    Definition at line 422 of file mmc_spi.c.

    - -

    References chDbgCheck, chSysLock, chSysUnlock, MMC_READING, MMC_SECTOR_SIZE, MMCDriver::mmc_spip, MMCDriver::mmc_state, spiIgnore(), spiReceive(), and spiUnselect().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t mmcStopSequentialRead (MMCDriver mmcp ) 
    -
    -
    - -

    Stops a sequential read gracefully.

    -
    Parameters:
    - - -
    [in] mmcp pointer to the MMCDriver object
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    FALSE the operation was successful.
    TRUE the operation failed.
    -
    -
    - -

    Definition at line 460 of file mmc_spi.c.

    - -

    References chDbgCheck, chSysLock, chSysUnlock, MMC_READING, MMCDriver::mmc_spip, MMCDriver::mmc_state, spiSend(), and spiUnselect().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool_t mmcStartSequentialWrite (MMCDriver mmcp,
    uint32_t  startblk 
    )
    -
    -
    - -

    Starts a sequential write.

    -
    Parameters:
    - - - -
    [in] mmcp pointer to the MMCDriver object
    [in] startblk first block to write
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    FALSE the operation was successful.
    TRUE the operation failed.
    -
    -
    - -

    Definition at line 496 of file mmc_spi.c.

    - -

    References chDbgCheck, chSysLock, chSysUnlock, MMCDriver::mmc_hscfg, MMC_READY, MMC_SECTOR_SIZE, MMCDriver::mmc_spip, MMCDriver::mmc_state, MMC_WRITING, spiSelect(), spiStart(), and spiUnselect().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool_t mmcSequentialWrite (MMCDriver mmcp,
    const uint8_t buffer 
    )
    -
    -
    - -

    Writes a block within a sequential write operation.

    -
    Parameters:
    - - - -
    [in] mmcp pointer to the MMCDriver object
    [out] buffer pointer to the write buffer
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    FALSE the operation was successful.
    TRUE the operation failed.
    -
    -
    - -

    Definition at line 531 of file mmc_spi.c.

    - -

    References chDbgCheck, chSysLock, chSysUnlock, MMC_SECTOR_SIZE, MMCDriver::mmc_spip, MMCDriver::mmc_state, MMC_WRITING, spiIgnore(), spiReceive(), spiSend(), and spiUnselect().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t mmcStopSequentialWrite (MMCDriver mmcp ) 
    -
    -
    - -

    Stops a sequential write gracefully.

    -
    Parameters:
    - - -
    [in] mmcp pointer to the MMCDriver object
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    FALSE the operation was successful.
    TRUE the operation failed.
    -
    -
    - -

    Definition at line 570 of file mmc_spi.c.

    - -

    References chDbgCheck, chSysLock, chSysUnlock, MMCDriver::mmc_spip, MMCDriver::mmc_state, MMC_WRITING, spiSend(), and spiUnselect().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void tmrfunc (void *  p ) 
    -
    -
    - -

    Inserion monitor timer callback function.

    -
    Parameters:
    - - -
    [in] p pointer to the MMCDriver object
    -
    -
    - -

    Definition at line 57 of file mmc_spi.c.

    - -

    References chEvtBroadcastI(), chVTSetI(), MMCDriver::mmc_cnt, MMCDriver::mmc_inserted_event, MMCDriver::mmc_is_inserted, MMC_POLLING_DELAY, MMCDriver::mmc_removed_event, MMCDriver::mmc_state, MMCDriver::mmc_vt, and MS2ST.

    - -

    Referenced by mmcStart().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i.png b/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i.png deleted file mode 100644 index e7c6a4111f0cdee4cbb3673c25bb3860db36e5d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1044 zcmeAS@N?(olHy`uVBq!ia0y~yV7SY`z@W;(#=yXEjP*?(0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj+|!Tl*I=FfecPba4!+nDh3|S#Oa<8TJqFAMX>*b?Mx&ds#_G z%L}=Q3r;J|yTlPzwE2a|m%QnIaw0a%T?JU;n3P|?%e}btU+b%NkE%GT9EA$+E^qGb zdws@Y_vbUluit%VUS#+A%(?t0Ki_>m^JX1`AQbFW(z&&Z(dJ@o2YWoj9uwij186}TTv?(4ES#dL#f7YDx{^NDZYzOlu!|4b+>6x<*&KWw2f&(F{v zr_GMy4?@)@AG~oR;zH^Key4>3pML&n{5FjtOED{pM|NTwGWILizdOm|N7el4X7{&j zx6jd?zBtl>PrUoG?XJGnURHCD9XiyM`#bUW+5OUMe!Wgw$9!Y;(Up5Q#qHi#cAWcD z4X>8d^EN@fwTjFQ+qSWPEU>WRI5Dv(@(ZKUlFvU@S+cIU_STWdWjBLl?$s+Vw&mNh z@MTB=ikp)b~~yL!f+JJ^1y_nC+{F|TJDH|saV zD>K|$a%7r7$DjLavVYzYS;LgOfqUER)Pu1&Xy8OkPG}H5&@4k9< zr9EQJV?Ud^r$HvOdKi=xTkcG{6#HVyl*awrzr4S{zPxc=_tkgLOO{{C+3quJ@Zek=z$GWPH;8`i=IBi zeC=A?wZqFb)-lIM@n@9sMtIBX|6Tj7aQA%CsosII`pYADKgg8b+gmU4&PHOs(T=Ux zOY|ps9Qobiz&F91p^``7cEg?TEWtW{*AM?Zn`Sgq#y<7J3^jH2iRYi+PrmC961!}*wS%P@o-v#$ExTtQ ztL2*Sp*fFvhd@E*l_OGCC28K?`E^V)7!598{HP&XVtZwe)F)ZZ_Q<%py;3E-SN6;@ zDsgd4deLE$48_H}s%KsebA8))>i_dCp&B9=?wux;NPF@Y643Z*uPd}XJBAp@O1TaS?83{1ORgW^ezAZ diff --git a/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga076506461b42641a9fe632cc3e72dab5_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga076506461b42641a9fe632cc3e72dab5_cgraph.png deleted file mode 100644 index 577c423e8ca8ae349d0ce817fcb0b5cfcfa5e618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4579 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 diff --git a/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga6aae8e8af4ea0c35c677fa472fb36318_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga6aae8e8af4ea0c35c677fa472fb36318_cgraph.png deleted file mode 100644 index 8a69b3407252ee641cd8cbbbbe68a2a5b8390a75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3034 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 Yy2}-~bXis~FfcH9y85}Sb4q9e0D8G`YXATM diff --git a/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga8031c8222f92a0c6632b36ff943fe825_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga8031c8222f92a0c6632b36ff943fe825_cgraph.png deleted file mode 100644 index 958b73418712f81d1b5643e9259d128aff378bf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5588 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 V{$stH0SpWb44$rjF6*2Ung9^Il*Ir5 diff --git a/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga9ce0adb181138efc1f835aff6d8eb203_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga9ce0adb181138efc1f835aff6d8eb203_cgraph.png deleted file mode 100644 index 7bc3b51bd557bb692333ad9094365b268212c6fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7973 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 Gp$P!FhF32D diff --git a/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga9ff4f12fa759c3cb4aca2b64b11f1d22_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_ga9ff4f12fa759c3cb4aca2b64b11f1d22_cgraph.png deleted file mode 100644 index ae9fd22e6c29b949e716ef0910f8c7bdbcad52a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3440 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 diff --git a/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_gaf55b97f76be81f4ce5cde415f3131400_cgraph.png b/ChibiOS_2.0.8/docs/html/group___m_m_c___s_p_i_gaf55b97f76be81f4ce5cde415f3131400_cgraph.png deleted file mode 100644 index 11db4695a76b302edf9ae7925db70a03f5084698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3711 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 DXYwL$ diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430.html b/ChibiOS_2.0.8/docs/html/group___m_s_p430.html deleted file mode 100644 index 4db65f5..0000000 --- a/ChibiOS_2.0.8/docs/html/group___m_s_p430.html +++ /dev/null @@ -1,97 +0,0 @@ - - -ChibiOS/RT: MSP430 - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - -
    -
    - -
    -

    MSP430
    - -[Ports] -

    -
    -
    - -

    -Collaboration diagram for MSP430:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    MSP430 port details. This section how the ChibiOS/RT features are implemented on this architecture.

    -

    -Mapping of the System States in the MSP430 port

    -

    The ChibiOS/RT logical System States are mapped as follow in the MSP430 port:

    -
      -
    • Init. This state is represented by the startup code and the initialization code before chSysInit() is executed. It has not a special hardware state associated.
    • -
    • Normal. This is the state the system has after executing chSysInit(). Interrupts are enabled.
    • -
    • Suspended. Interrupts are disabled.
    • -
    • Disabled. Interrupts are disabled. This state is equivalent to the Suspended state because there are no fast interrupts in this architecture.
    • -
    • Sleep. Not yet implemented.
    • -
    • S-Locked. Interrupts are disabled.
    • -
    • I-Locked. This state is equivalent to the SRI state, the chSysLockI() and chSysUnlockI() APIs do nothing (still use them in order to formally change state because this may change).
    • -
    • Serving Regular Interrupt. Normal interrupt service code.
    • -
    • Serving Fast Interrupt. Not present in this architecture.
    • -
    • Serving Non-Maskable Interrupt. The MSP430 has several non maskable interrupt sources that can be associated to this state.
    • -
    • Halted. Implemented as an infinite loop with interrupts disabled.
    • -
    -

    -The MSP430 port notes

    -
      -
    • The MSP430 does not have a dedicated interrupt stack, make sure to reserve enough stack space for interrupts in each thread stack. This can be done by modifying the INT_REQUIRED_STACK macro into ./ports/MSP430/chcore.h.
    • -
    • The state of the hardware multiplier is not saved in the thread context, make sure to use it in Suspended state (interrupts masked).
    • -
    • The port code does not define the switch to a low power mode for the idle thread because the MSP430 has several low power modes. You can select the proper low power mode for you application by defining the macro port_wait_for_interrupt().
    • -
    - - - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     Configuration Options
     

    MSP430 Configuration Options.

    -
     Core Port Implementation
     

    MSP430 specific port code, structures and macros.

    -
     MSP430 Drivers
     

    Device drivers included in the MSP430 support.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430.png b/ChibiOS_2.0.8/docs/html/group___m_s_p430.png deleted file mode 100644 index 568cdfc6b9a7d4ed00d97bf42c85014e21976c62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4515 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 - -ChibiOS/RT: Configuration Options - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    Configuration Options
    - -[MSP430] -

    -
    -
    - -

    MSP430 Configuration Options. -More...

    - -

    -Collaboration diagram for Configuration Options:
    -
    -
    - - -
    -
    -

    -

    MSP430 Configuration Options.

    -

    The MSP430 port allows some architecture-specific configurations settings that can be overridden by redefining them in chconf.h. Usually there is no need to change the default values.

    -
      -
    • INT_REQUIRED_STACK, this value represent the amount of stack space used by the interrupt handlers.
      - The default for this value is 32, this space is allocated for each thread so be careful in order to not waste precious RAM space.
      - The default value is set into ./os/ports/GCC/MSP430/chcore.h.
    • -
    • IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE thread. Usually there is no need to change this value unless inserting code in the IDLE thread hook macro.
    • -
    - -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_n_f.png b/ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_n_f.png deleted file mode 100644 index d4adb34124fda1d58b441e976a55f73b3826d82d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1118 zcmeAS@N?(olHy`uVBq!ia0y~yVEDnnz@W;(#=yXkU#Rknfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM@CHt4YQT3@i+uE{-7;bKc%LpDmIu!T#a>;~gFbZemJ>+dI`? z#y@ZsI1^OWA?|&;>PDMf)jBE7P@7fmHwAEzBgD-`o>&1 zd+xGx%-lWuK4*WQD=)cUp5x{o%g_6PG9 zbxT}+{-=2H-_PIX-K@B>>9Hh3E<=54Y~aZ)j5hkaIymPrUWki{(b>g!>gKa&Y79I% zw{sZfcTRFOR9)sO{@~E7S6LTT1J2o;ciw(`Yo7I_VqKRh%4~C19Fizl#Fc!YQ>%wj zeU*VYBmeGSYmPmB;2u+b#wzwgM;7i`&t_- zCaJUP)WSH%tx>u;IXNwLw(lYy_ZjkqpErHE@xOQ^W~r8ukZ-?1wN zFXDra@*lXZdcR$L5mybz_t|^0iw>4C%~s!WGw)nb+V6}r4{j{ZJ@{>df$LZPKEdxX zo>_iHIyt4Of$h2V;W4Z>7TvQBn#k{dP-WwMJKN;hezq;fGOx-Td>AFVdiuiOtvBA; zHS287+ie$S{k^19-CVmUjzevwrEYYr-m8M0U7Jp3v&pL-67#vuBfI^G->!JA%a@<; zn=^Cg2ZjrMtFE~k1i11t*tN|*COGHoqi^1~)%hcJ51yUs7@7WINzOqY?u1dxe^Hct)^iTfAZpV9PiRtmL=Gldz z?W>bzkBPPLHK;4zUgg7B!~fvriidA*u0H;&Hvi=JrOJz@Gs=Xvb{*jUQoVU^ZMoI^ zBwZ_pc~ic=l~TAZ>NM?C-1lFL2@; YM&2{>8>37Z7#J8lUHx3vIVCg!0JJ_JiU0rr diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_r_e.html b/ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_r_e.html deleted file mode 100644 index 773a8a4..0000000 --- a/ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_r_e.html +++ /dev/null @@ -1,1039 +0,0 @@ - - -ChibiOS/RT: Core Port Implementation - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Core Port Implementation
    - -[MSP430] -

    -
    -
    - -

    MSP430 specific port code, structures and macros. -More...

    - -

    -Collaboration diagram for Core Port Implementation:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    MSP430 specific port code, structures and macros.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define ENABLE_WFI_IDLE   0
     Enables the use of a wait state in the idle thread loop.
    #define CH_ARCHITECTURE_MSP430
     Macro defining the MSP430 architecture.
    #define CH_ARCHITECTURE_NAME   "MSP430"
     Name of the implemented architecture.
    #define CH_CORE_VARIANT_NAME   "MSP430"
     Name of the architecture variant (optional).
    #define SETUP_CONTEXT(workspace, wsize, pf, arg)
     Platform dependent part of the chThdInit() API.
    #define IDLE_THREAD_STACK_SIZE   0
     Stack size for the system idle thread.
    #define INT_REQUIRED_STACK   32
     Per-thread stack overhead for interrupts servicing.
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
     Static working area allocation.
    #define PORT_IRQ_PROLOGUE()
     IRQ prologue code.
    #define PORT_IRQ_EPILOGUE()
     IRQ epilogue code.
    #define PORT_IRQ_HANDLER(id)   interrupt(id) _vect_##id(void)
     IRQ handler function declaration.
    #define port_init()
     Port-related initialization code.
    #define port_lock()   asm volatile ("dint" : : : "memory")
     Kernel-lock action.
    #define port_unlock()   asm volatile ("eint" : : : "memory")
     Kernel-unlock action.
    #define port_lock_from_isr()
     Kernel-lock action from an interrupt handler.
    #define port_unlock_from_isr()
     Kernel-unlock action from an interrupt handler.
    #define port_disable()   asm volatile ("dint" : : : "memory")
     Disables all the interrupt sources.
    #define port_suspend()   asm volatile ("dint" : : : "memory")
     Disables the interrupt sources below kernel-level priority.
    #define port_enable()   asm volatile ("eint" : : : "memory")
     Enables all the interrupt sources.
    #define port_wait_for_interrupt()
     Enters an architecture-dependent IRQ-waiting mode.
    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   const
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef uint16_t stkalign_t
     16 bits stack and memory alignment enforcement.
    typedef void * regmsp_t
     Generic MSP430 register.
    typedef int16_t bool_t
    typedef uint8_t tmode_t
    typedef uint8_t tstate_t
    typedef uint8_t trefs_t
    typedef uint16_t tprio_t
    typedef int16_t msg_t
    typedef int16_t eventid_t
    typedef uint16_t eventmask_t
    typedef uint16_t systime_t
    typedef int16_t cnt_t

    -Functions

    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    void port_halt (void)
     Halts the system.
    void _port_thread_start (void)
     Start a thread by invoking its work function.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define ENABLE_WFI_IDLE   0
    -
    -
    - -

    Enables the use of a wait state in the idle thread loop.

    - -

    Definition at line 45 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_ARCHITECTURE_MSP430
    -
    -
    - -

    Macro defining the MSP430 architecture.

    - -

    Definition at line 51 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_ARCHITECTURE_NAME   "MSP430"
    -
    -
    - -

    Name of the implemented architecture.

    - -

    Definition at line 56 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_CORE_VARIANT_NAME   "MSP430"
    -
    -
    - -

    Name of the architecture variant (optional).

    - -

    Definition at line 61 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define SETUP_CONTEXT( workspace,
     wsize,
     pf,
     arg 
    )
    -
    -
    -Value:
    {                      \
    -  tp->p_ctx.sp = (struct intctx *)((uint8_t *)workspace +               \
    -                                   wsize -                              \
    -                                   sizeof(struct intctx));              \
    -  tp->p_ctx.sp->r10 = pf;                                               \
    -  tp->p_ctx.sp->r11 = arg;                                              \
    -  tp->p_ctx.sp->pc = _port_thread_start;                                \
    -}
    -
    -

    Platform dependent part of the chThdInit() API.

    -

    This code usually setup the context switching frame represented by an intctx structure.

    - -

    Definition at line 124 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define IDLE_THREAD_STACK_SIZE   0
    -
    -
    - -

    Stack size for the system idle thread.

    -

    This size depends on the idle thread implementation, usually the idle thread should take no more space than those reserved by INT_REQUIRED_STACK.

    - -

    Definition at line 140 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define INT_REQUIRED_STACK   32
    -
    -
    - -

    Per-thread stack overhead for interrupts servicing.

    -

    This constant is used in the calculation of the correct working area size. This value can be zero on those architecture where there is a separate interrupt stack and the stack space between intctx and extctx is known to be zero.

    -
    Note:
    In this port the default is 32 bytes per thread.
    - -

    Definition at line 153 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define STACK_ALIGN( n )    ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
    -
    -
    - -

    Enforces a correct alignment for a stack area size value.

    - -

    Definition at line 159 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define THD_WA_SIZE( n ) 
    -
    -
    -Value:
    STACK_ALIGN(sizeof(Thread) +                     \
    -                                   sizeof(struct intctx) +              \
    -                                   sizeof(struct extctx) +              \
    -                                  (n) + (INT_REQUIRED_STACK))
    -
    -

    Computes the thread working area global size.

    - -

    Definition at line 164 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define WORKING_AREA( s,
     n 
    )   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
    -
    -
    - -

    Static working area allocation.

    -

    This macro is used to allocate a static thread working area aligned as both position and size.

    - -

    Definition at line 174 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define PORT_IRQ_PROLOGUE( ) 
    -
    -
    - -

    IRQ prologue code.

    -

    This macro must be inserted at the start of all IRQ handlers enabled to invoke system APIs.

    - -

    Definition at line 181 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define PORT_IRQ_EPILOGUE( ) 
    -
    -
    -Value:
    {                                           \
    -  if (chSchIsRescRequiredExI())                                         \
    -    chSchDoRescheduleI();                                               \
    -}
    -
    -

    IRQ epilogue code.

    -

    This macro must be inserted at the end of all IRQ handlers enabled to invoke system APIs.

    - -

    Definition at line 188 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define PORT_IRQ_HANDLER( id )    interrupt(id) _vect_##id(void)
    -
    -
    - -

    IRQ handler function declaration.

    -
    Note:
    id can be a function name or a vector number depending on the port implementation.
    - -

    Definition at line 198 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_init( void ) 
    -
    -
    - -

    Port-related initialization code.

    -
    Note:
    This function is empty in this port.
    - -

    Definition at line 204 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_lock( void )    asm volatile ("dint" : : : "memory")
    -
    -
    - -

    Kernel-lock action.

    -

    Usually this function just disables interrupts but may perform more actions.

    -
    Note:
    Implemented as global interrupt disable.
    - -

    Definition at line 212 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_unlock( void )    asm volatile ("eint" : : : "memory")
    -
    -
    - -

    Kernel-unlock action.

    -

    Usually this function just disables interrupts but may perform more actions.

    -
    Note:
    Implemented as global interrupt enable.
    - -

    Definition at line 220 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_lock_from_isr( void ) 
    -
    -
    - -

    Kernel-lock action from an interrupt handler.

    -

    This function is invoked before invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

    -
    Note:
    This function is empty in this port.
    - -

    Definition at line 229 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_unlock_from_isr( void ) 
    -
    -
    - -

    Kernel-unlock action from an interrupt handler.

    -

    This function is invoked after invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

    -
    Note:
    This function is empty in this port.
    - -

    Definition at line 238 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_disable( void )    asm volatile ("dint" : : : "memory")
    -
    -
    - -

    Disables all the interrupt sources.

    -
    Note:
    Of course non maskable interrupt sources are not included.
    -
    -Implemented as global interrupt disable.
    - -

    Definition at line 245 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_suspend( void )    asm volatile ("dint" : : : "memory")
    -
    -
    - -

    Disables the interrupt sources below kernel-level priority.

    -
    Note:
    Interrupt sources above kernel level remains enabled.
    -
    -Same as port_disable() in this port, there is no difference between the two states.
    - -

    Definition at line 253 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_enable( void )    asm volatile ("eint" : : : "memory")
    -
    -
    - -

    Enables all the interrupt sources.

    -
    Note:
    Implemented as global interrupt enable.
    - -

    Definition at line 259 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_wait_for_interrupt( void ) 
    -
    -
    - -

    Enters an architecture-dependent IRQ-waiting mode.

    -

    The function is meant to return when an interrupt becomes pending. The simplest implementation is an empty function or macro but this would not take advantage of architecture-specific power saving modes.

    -
    Note:
    This port function is implemented as inlined code for performance reasons.
    -
    -The port code does not define a low power mode, this macro has to be defined externally. The default implementation is a "nop", not a real low power mode.
    - -

    Definition at line 280 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define INLINE   inline
    -
    -
    - -

    Inline function modifier.

    - -

    Definition at line 61 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define ROMCONST   const
    -
    -
    - -

    ROM constant modifier.

    -
    Note:
    It is set to use the "const" keyword in this port.
    - -

    Definition at line 67 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
    -
    -
    - -

    Packed structure modifier (within).

    -
    Note:
    It uses the "packed" GCC attribute.
    - -

    Definition at line 73 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_BEGIN
    -
    -
    - -

    Packed structure modifier (before).

    -
    Note:
    Empty in this port.
    - -

    Definition at line 79 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_END
    -
    -
    - -

    Packed structure modifier (after).

    -
    Note:
    Empty in this port.
    - -

    Definition at line 85 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint16_t stkalign_t
    -
    -
    - -

    16 bits stack and memory alignment enforcement.

    - -

    Definition at line 66 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    typedef void* regmsp_t
    -
    -
    - -

    Generic MSP430 register.

    - -

    Definition at line 71 of file ports/GCC/MSP430/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int16_t bool_t
    -
    -
    -

    Fast boolean type.

    - -

    Definition at line 47 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t tmode_t
    -
    -
    -

    Thread flags.

    - -

    Definition at line 48 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t tstate_t
    -
    -
    -

    Thread state.

    - -

    Definition at line 49 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t trefs_t
    -
    -
    -

    Thread references counter.

    - -

    Definition at line 50 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint16_t tprio_t
    -
    -
    -

    Thread priority.

    - -

    Definition at line 51 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int16_t msg_t
    -
    -
    -

    Inter-thread message.

    - -

    Definition at line 52 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int16_t eventid_t
    -
    -
    -

    Event Id.

    - -

    Definition at line 53 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint16_t eventmask_t
    -
    -
    -

    Events mask.

    - -

    Definition at line 54 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint16_t systime_t
    -
    -
    -

    System time.

    - -

    Definition at line 55 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int16_t cnt_t
    -
    -
    -

    Resources counter.

    - -

    Definition at line 56 of file ports/GCC/MSP430/chtypes.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void port_switch (Thread ntp,
    Thread otp 
    )
    -
    -
    - -

    Performs a context switch between two threads.

    -

    This is the most critical code in any port, this function is responsible for the context switch between 2 threads.

    -
    Note:
    The implementation of this code affects directly the context switch performance so optimize here as much as you can.
    -
    -The function is declared as a weak symbol, it is possible to redefine it in your application code.
    -
    Parameters:
    - - - -
    [in] ntp the thread to be switched in
    [in] otp the thread to be switched out
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_halt (void  ) 
    -
    -
    - -

    Halts the system.

    -

    This function is invoked by the operating system when an unrecoverable error is detected (as example because a programming error in the application code that triggers an assertion while in debug mode).

    -
    Note:
    The function is declared as a weak symbol, it is possible to redefine it in your application code.
    - -

    Definition at line 45 of file ports/GCC/ARMCMx/chcore.c.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void _port_thread_start (void  ) 
    -
    -
    - -

    Start a thread by invoking its work function.

    -

    If the work function returns chThdExit() is automatically invoked.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_r_e.png b/ChibiOS_2.0.8/docs/html/group___m_s_p430___c_o_r_e.png deleted file mode 100644 index cf9b2c6be3f86dfe21ffcde02126a4831af79a3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1105 zcmeAS@N?(olHy`uVBq!ia0y~yU}R-rU{K{?V_;zL_WdKwz`($k|H*Y zfq{X&#M9T6{T8SW?u!zK=#}Pqt(WBfFg&`sc+w(;MIl#a^{~g@ zoO^EH`F&gd)dzT_J%4)B;_IBd$b2w2=S6>P^iaFYEv94Xm2} zrD@l~OM(ot4CjmZmq%GK#7&WPVRL6FadUG!)z@s+@bu}^1If#lJcyd^Xl5B&#$e{- z>pNAJDVJew7`L&p@v&rP*5ghtqQ{pwxY+q{xjZ=xVe{dU`T^;I@&{xA3y z_%~u}{{5E67L(0o(jTP?K7P9NZr=ajCwKohNoLu4QYt_0`Rr7i{JD!Bf9Cq_VZ_P$ zzct|3k?Z=CK23Z1w&@qAm7e0$Fj-rxjjx~k$GrGn80zB3l;ymB%dNL&)22;hdVf3U zh{SB)nf(*jE}0NAhx7H^51zLoujcsW{r|eUUTnhZ`}>naTzES=DufPYT{OIzFl)}Q zCs$A3HM_TMS(RrJhqSUz*xwodPDx#vzjFSL!WVCwZ@v6_chiRBzUzg*O0*xHI(6-m z2en(Tsc){k&35~5X5Q8IcKi8afysO4?b1-X&G3cciuVccR_B;a9Sn&8Mb^EL|da=M}%8iA?$;q3IswyUV%cjr%?0wru&hG&jBK>w2Nto(H!) zY;V|PQ9JY2^GPzh?%rhYZ7Z(-{_f)St+y^DI(*Ao-C|(7H00%d;h*2$`Yy`%bkl9T zyyBHw(zNZSl|2i$ub!n8#`P<0VRYJJ{Z5Vk+}yR@{PJ@5*sT2dLDxzN&EApTgIvxwB1gw&a>Dvu!tdd*}0o$DFrA z&VG_uo;u4WnL&)HFE@?rKq^E3-KON@$F{FqckTQi&G6?_oMan>9M4|P+j@JiaYVry zwPXgdRX@C9m#tbCcWT>?9WUyZzDW-1czJpGPJISB#tIV~n|<;tVucR+GO&B`^*R+yogg#WiA!6%Sf23= z^Nf5mb^fWc{1bhpe;M7?s`#Gwt@fs&z|AAD6b?`7!rxvxFW;bXV%CQJ&;6fx{jQgv q7uDZVWNvF4TgKr62VeI8<}LO9z-{y>JDY)lfx*+&&t;ucLK6Th+X>15 diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430___d_r_i_v_e_r_s.html b/ChibiOS_2.0.8/docs/html/group___m_s_p430___d_r_i_v_e_r_s.html deleted file mode 100644 index 5132e20..0000000 --- a/ChibiOS_2.0.8/docs/html/group___m_s_p430___d_r_i_v_e_r_s.html +++ /dev/null @@ -1,77 +0,0 @@ - - -ChibiOS/RT: MSP430 Drivers - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MSP430 Drivers
    - -[MSP430] -

    -
    -
    - -

    Device drivers included in the MSP430 support. -More...

    - -

    -Collaboration diagram for MSP430 Drivers:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Device drivers included in the MSP430 support.

    - - - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     MSP430 HAL Support
     

    HAL support.

    -
     MSP430 I/O Ports Support
     

    I/O Ports peripherals support.

    -
     MSP430 USART Support
     

    USART support.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430___d_r_i_v_e_r_s.png b/ChibiOS_2.0.8/docs/html/group___m_s_p430___d_r_i_v_e_r_s.png deleted file mode 100644 index bac4971fabcc4e558e224abecaf38e933e769788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4946 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 pf?0)p2Uad - -ChibiOS/RT: MSP430 HAL Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MSP430 HAL Support
    - -[MSP430 Drivers] -

    -
    -
    - -

    HAL support. -More...

    - -

    -Collaboration diagram for MSP430 HAL Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL support.

    - - - - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "MSP430x16x"
     Platform name.
    #define MSP430_USE_CLOCK   MSP430_CLOCK_SOURCE_XT2CLK
     Clock source.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PLATFORM_NAME   "MSP430x16x"
    -
    -
    - -

    Platform name.

    - -

    Definition at line 46 of file platforms/MSP430/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define MSP430_USE_CLOCK   MSP430_CLOCK_SOURCE_XT2CLK
    -
    -
    - -

    Clock source.

    -

    The clock source can be selected from:

    -
      -
    • MSP430_CLOCK_SOURCE_XT2CLK.
    • -
    • MSP430_CLOCK_SOURCE_DCOCLK.
    • -
    - -

    Definition at line 63 of file platforms/MSP430/hal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void hal_lld_init (void  ) 
    -
    -
    - -

    Low level HAL driver initialization.

    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    const PALConfig pal_default_config
    -
    -
    -Initial value:
    -{
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -}
    -
    -

    PAL setup.

    -

    Digital I/O ports static configuration as defined in board.h.

    - -

    Definition at line 45 of file platforms/MSP430/hal_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___m_s_p430___h_a_l.png deleted file mode 100644 index 50e25994b2d14e3fd45d16f26343d8fa6107216b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1223 zcmeAS@N?(olHy`uVBq!ia0y~yV3cKGU{K{?V_;yYH?iesU|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my5f+`&}Oc152i-i(^Q|oVR!F^JQEm*gmA!6e_fe2Hq^+)H6Y6 zLdTRQw#JwrDRzvP8sB(uin1zgd+D2g(Mm1o(uI%9749E6u~WOrK}19(WSQ|T?nN7( z9P6yD)4bp{`Qw>4Z|>cBGxzf!mDkrcZ+^co`b@QP^>#A{7dUvbP$$=$;aae|lb=6B zO>DW4^N)@1SXP9|&*Tl)nJdOn!eAp+X%(`B`N5WVDs5L78=gLWI_vU+DOG#t70+M$ z;)z~}hS$5_yM#Luv$MIiwY5u^J96sk>LylK-`>zpwwE-m!g)%HnJO&X`bkyDnV*x~00y@{2j!>=>>{DcGmpd{O((yOu??P5@{b|<_Dj3OpC7VHEQQcb0^6*_sMk9lwhG|`#e$`x3@!$-rtd5+rnCQAy-)vs z-@>dtH<$y%zgnG5U6Fs=d~tE^aiP^OL=4|Q6uH~2DK%%|-%|y;$7{TIEV4*Ds5>`% zapB*qH*fl1b1je#c(0+F9@V%r%Iw|}&Gwh~vJ^AxTyjxxU=BF=TV!T=8pS@jZEVcB*f}3}0 z1giE0TH5`qR4L3oddM`Q>m7Hm)0&wVG}2{CJ0nYSHZxk>a!R_{*B@Eql)Q7Dw#u}~ znC8#+Hg_yDOw#IR&a8aDHv4)W55rE)rpBO43?Uvp`7SB?Phu9A6nzSRx%^D*=H|pS zo@XByOC3?1e;~9s@wNExJDN*oynNx!vsc$mr`SRKDE~`iAGy%qk-Tij&-e9x`)6Tw zYxmWxT%C>w$qsiJ3!GV&d+kiORr;~_{{6in^_mX*uP@wwv?Eooy{-3sa0&0e*Clr! zZ+iQA>-3%HZn&N{&))4@du3|qgFj{q#29RjcYiNG z=d$76`}@^1v;z4b20vSDp0|0<-@kwVXny7{ZMp9;&*AUCzxJDRo}bpaT^sANm-~TY zLp`Gd%W{wU^?e!=-RD|fe=n~)y{US3gv!mks=Esl2*Il10IFYyeoN7ry!GFny`d81cs{z{`^0aP&WWc% zfBtWbTi@=sIIvu5%7pj-<9_a&==1m?yTpBuc?N<1`viPt>~11u_NRZ?3;E=Jo#GGv R&A`CG;OXk;vd$@?2>`KiU?%_o diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430___p_a_l.html b/ChibiOS_2.0.8/docs/html/group___m_s_p430___p_a_l.html deleted file mode 100644 index 3433fa3..0000000 --- a/ChibiOS_2.0.8/docs/html/group___m_s_p430___p_a_l.html +++ /dev/null @@ -1,600 +0,0 @@ - - -ChibiOS/RT: MSP430 I/O Ports Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MSP430 I/O Ports Support
    - -[MSP430 Drivers] -

    -
    -
    - -

    I/O Ports peripherals support. -More...

    - -

    -Collaboration diagram for MSP430 I/O Ports Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    I/O Ports peripherals support.

    -

    This module supports the MSP430 Digital I/O controller. The controller supports the following features (see PAL Driver):

    -
      -
    • 8 bits wide ports.
    • -
    • Atomic set/reset/toggle functions because special MSP430 instruction set.
    • -
    • Output latched regardless of the pad setting.
    • -
    • Direct read of input pads regardless of the pad setting.
    • -
    -

    Supported Setup Modes

    -
      -
    • PAL_MODE_RESET.
    • -
    • PAL_MODE_UNCONNECTED.
    • -
    • PAL_MODE_INPUT.
    • -
    • PAL_MODE_OUTPUT_PUSHPULL.
    • -
    -

    Any attempt to setup an invalid mode is ignored.

    -

    Suboptimal Behavior

    -

    Some MSP430 I/O ports features are less than optimal:

    -
      -
    • Bus/group writing is not atomic.
    • -
    • Pad/group mode setup is not atomic.
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  port_common_t
     Simplified MSP430 I/O port representation. More...
    union  __ioport
     Generic MSP430 I/O port. More...
    struct  msp430_dio_setup_t
     Setup registers common to all the MSP430 ports. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_IOPORTS_WIDTH   8
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFF)
     Whole port mask.
    #define IOPORT1   ((ioportid_t)0x0020)
     I/O port A identifier.
    #define IOPORT2   ((ioportid_t)0x0028)
     I/O port B identifier.
    #define IOPORT3   ((ioportid_t)0x0018)
     I/O port C identifier.
    #define IOPORT4   ((ioportid_t)0x001c)
     I/O port D identifier.
    #define IOPORT5   ((ioportid_t)0x0030)
     I/O port E identifier.
    #define IOPORT6   ((ioportid_t)0x0034)
     I/O port F identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     Low level PAL subsystem initialization.
    #define pal_lld_readport(port)   ((port)->iop_common.in.reg_p)
     Reads the physical I/O port states.
    #define pal_lld_readlatch(port)   ((port)->iop_common.out.reg_p)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)
     Writes a bits mask on a I/O port.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.

    -Typedefs

    typedef uint8_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef union __ioportioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     MSP430 I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PAL_IOPORTS_WIDTH   8
    -
    -
    - -

    Width, in bits, of an I/O port.

    - -

    Definition at line 129 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFF)
    -
    -
    - -

    Whole port mask.

    -

    This macro specifies all the valid bits into a port.

    - -

    Definition at line 135 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT1   ((ioportid_t)0x0020)
    -
    -
    - -

    I/O port A identifier.

    -

    This port identifier is mapped on the MSP430 port 1 (P1).

    - -

    Definition at line 161 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT2   ((ioportid_t)0x0028)
    -
    -
    - -

    I/O port B identifier.

    -

    This port identifier is mapped on the MSP430 port 2 (P2).

    - -

    Definition at line 171 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT3   ((ioportid_t)0x0018)
    -
    -
    - -

    I/O port C identifier.

    -

    This port identifier is mapped on the MSP430 port 3 (P3).

    - -

    Definition at line 181 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT4   ((ioportid_t)0x001c)
    -
    -
    - -

    I/O port D identifier.

    -

    This port identifier is mapped on the MSP430 port 4 (P4).

    - -

    Definition at line 191 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT5   ((ioportid_t)0x0030)
    -
    -
    - -

    I/O port E identifier.

    -

    This port identifier is mapped on the MSP430 port 5 (P5).

    - -

    Definition at line 201 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT6   ((ioportid_t)0x0034)
    -
    -
    - -

    I/O port F identifier.

    -

    This port identifier is mapped on the MSP430 port 6 (P6).

    - -

    Definition at line 211 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_init( config )    _pal_lld_init(config)
    -
    -
    - -

    Low level PAL subsystem initialization.

    -

    In MSP430 programs all the ports as input.

    -
    Parameters:
    - - -
    [in] config the MSP430 ports configuration
    -
    -
    - -

    Definition at line 225 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readport( port )    ((port)->iop_common.in.reg_p)
    -
    -
    - -

    Reads the physical I/O port states.

    -

    This function is implemented by reading the PxIN register, the implementation has no side effects.

    -
    Parameters:
    - - -
    [in] port the port identifier
    -
    -
    -
    Returns:
    The port bits.
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    - -

    Definition at line 238 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readlatch( port )    ((port)->iop_common.out.reg_p)
    -
    -
    - -

    Reads the output latch.

    -

    This function is implemented by reading the PxOUT register, the implementation has no side effects.

    -
    Parameters:
    - - -
    [in] port the port identifier
    -
    -
    -
    Returns:
    The latched logical states.
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    - -

    Definition at line 251 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writeport( port,
     bits 
    )
    -
    -
    -Value:
    {                                 \
    -  (port)->iop_common.out.reg_p = (bits);                                \
    -}
    -
    -

    Writes a bits mask on a I/O port.

    -

    This function is implemented by writing the PxOUT register, the implementation has no side effects.

    -
    Parameters:
    - - - -
    [in] port the port identifier
    [in] bits the bits to be written on the specified port
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    - -

    Definition at line 264 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setgroupmode( port,
     mask,
     mode 
    )   _pal_lld_setgroupmode(port, mask, mode)
    -
    -
    - -

    Pads group mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] mask the group mask
    [in] mode the mode
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -PAL_MODE_UNCONNECTED is implemented as output as recommended by the MSP430x1xx Family User's Guide.
    -
    -This function does not alter the PxSEL registers. Alternate functions setup must be handled by device-specific code.
    - -

    Definition at line 284 of file platforms/MSP430/pal_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint8_t ioportmask_t
    -
    -
    - -

    Digital I/O port sized unsigned type.

    - -

    Definition at line 140 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef union __ioport* ioportid_t
    -
    -
    - -

    Port Identifier.

    -

    This type can be a scalar or some kind of pointer, do not make any assumption about it, use the provided macros when populating variables of this type.

    - -

    Definition at line 148 of file platforms/MSP430/pal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void _pal_lld_init (const PALConfig config ) 
    -
    -
    - -

    MSP430 I/O ports configuration.

    -
    Parameters:
    - - -
    [in] config the MSP430 ports configuration
    -
    -
    -
    Note:
    The PxIFG, PxIE and PxSEL registers are cleared. PxOUT and PxDIR are configured as specified.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void _pal_lld_setgroupmode (ioportid_t  port,
    ioportmask_t  mask,
    uint_fast8_t  mode 
    )
    -
    -
    - -

    Pads mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] mask the group mask
    [in] mode the mode
    -
    -
    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -PAL_MODE_UNCONNECTED is implemented as output as recommended by the MSP430x1xx Family User's Guide. Unconnected pads are set to high logic state by default.
    -
    -This function does not alter the PxSEL registers. Alternate functions setup must be handled by device-specific code.
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    const PALConfig pal_default_config
    -
    -
    - -

    PAL setup.

    -

    Digital I/O ports static configuration as defined in board.h.

    - -

    Definition at line 49 of file platforms/AT91SAM7/hal_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430___p_a_l.png b/ChibiOS_2.0.8/docs/html/group___m_s_p430___p_a_l.png deleted file mode 100644 index 1451f3da5a4aff09a25d957e8ca68e4a5d38d997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11629 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 diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430___s_e_r_i_a_l.html b/ChibiOS_2.0.8/docs/html/group___m_s_p430___s_e_r_i_a_l.html deleted file mode 100644 index 5b4c7d0..0000000 --- a/ChibiOS_2.0.8/docs/html/group___m_s_p430___s_e_r_i_a_l.html +++ /dev/null @@ -1,328 +0,0 @@ - - -ChibiOS/RT: MSP430 USART Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MSP430 USART Support
    - -[MSP430 Drivers] -

    -
    -
    - -

    USART support. -More...

    - -

    -Collaboration diagram for MSP430 USART Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    USART support.

    -

    The serial driver supports both the MSP430 USARTs in asynchronous mode.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_MSP430_USART0   TRUE
     USART0 driver enable switch.
    #define USE_MSP430_USART1   TRUE
     USART1 driver enable switch.
    #define _serial_driver_data
     SerialDriver specific data.
    #define UBR(b)   (SMCLK / (b))
     Macro for baud rate computation.

    -Typedefs

    typedef uint8_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     USART0 serial driver identifier.
    SerialDriver SD2
     USART1 serial driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define USE_MSP430_USART0   TRUE
    -
    -
    - -

    USART0 driver enable switch.

    -

    If set to TRUE the support for USART0 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 54 of file platforms/MSP430/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_MSP430_USART1   TRUE
    -
    -
    - -

    USART1 driver enable switch.

    -

    If set to TRUE the support for USART1 is included.

    -
    Note:
    The default is FALSE.
    - -

    Definition at line 63 of file platforms/MSP430/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define _serial_driver_data
    -
    -
    -Value:
    _base_asynchronous_channel_data                                           \
    -  /* Driver state.*/                                                        \
    -  sdstate_t                 state;                                          \
    -  /* Input queue.*/                                                         \
    -  InputQueue                iqueue;                                         \
    -  /* Output queue.*/                                                        \
    -  OutputQueue               oqueue;                                         \
    -  /* Status Change @p EventSource.*/                                        \
    -  EventSource               sevent;                                         \
    -  /* I/O driver status flags.*/                                             \
    -  sdflags_t                 flags;                                          \
    -  /* Input circular buffer.*/                                               \
    -  uint8_t                   ib[SERIAL_BUFFERS_SIZE];                        \
    -  /* Output circular buffer.*/                                              \
    -  uint8_t                   ob[SERIAL_BUFFERS_SIZE];                        \
    -
    -

    SerialDriver specific data.

    - -

    Definition at line 102 of file platforms/MSP430/serial_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define UBR( b )    (SMCLK / (b))
    -
    -
    - -

    Macro for baud rate computation.

    -
    Note:
    Make sure the final baud rate is within tolerance.
    - -

    Definition at line 128 of file platforms/MSP430/serial_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint8_t sdflags_t
    -
    -
    - -

    Serial Driver condition flags type.

    - -

    Definition at line 77 of file platforms/MSP430/serial_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void sd_lld_init (void  ) 
    -
    -
    - -

    Low level serial driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sd_lld_start (SerialDriver sdp,
    const SerialConfig config 
    )
    -
    -
    - -

    Low level serial driver configuration and (re)start.

    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver object
    [in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_stop (SerialDriver sdp ) 
    -
    -
    - -

    Low level serial driver stop.

    -

    De-initializes the USART, stops the associated clock, resets the interrupt vector.

    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDriver object
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    SerialDriver SD1
    -
    -
    - -

    USART0 serial driver identifier.

    - -

    Definition at line 48 of file platforms/MSP430/serial_lld.c.

    - -
    -
    - -
    -
    - - - - -
    SerialDriver SD2
    -
    -
    - -

    USART1 serial driver identifier.

    - -

    Definition at line 52 of file platforms/MSP430/serial_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___m_s_p430___s_e_r_i_a_l.png b/ChibiOS_2.0.8/docs/html/group___m_s_p430___s_e_r_i_a_l.png deleted file mode 100644 index 74c5572d6f78a2e057630458d8906f162af1812c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18237 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 Xe``%nYnCuDFfe$!`njxgN@xNA2Gk%E diff --git a/ChibiOS_2.0.8/docs/html/group___p_a_l.html b/ChibiOS_2.0.8/docs/html/group___p_a_l.html deleted file mode 100644 index 1023333..0000000 --- a/ChibiOS_2.0.8/docs/html/group___p_a_l.html +++ /dev/null @@ -1,1348 +0,0 @@ - - -ChibiOS/RT: PAL Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    PAL Driver
    - -[HAL] -

    -
    -
    - -

    I/O Ports Abstraction Layer. -More...

    - -

    -Collaboration diagram for PAL Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    I/O Ports Abstraction Layer.

    -

    This module defines an abstract interface for digital I/O ports. Note that most I/O ports functions are just macros. The macros have default software implementations that can be redefined in a PAL Low Level Driver if the target hardware supports special features like, as example, atomic bit set/reset/masking. Please refer to the ports specific documentation for details.
    - The PAL Driver has the advantage to make the access to the I/O ports platform independent and still be optimized for the specific architectures.
    - Note that the PAL Low Level Driver may also offer non standard macro and functions in order to support specific features but, of course, the use of such interfaces would not be portable. Such interfaces shall be marked with the architecture name inside the function names.

    -

    Implementation Rules

    -

    In implementing an PAL Low Level Driver there are some rules/behaviors that should be respected.

    -

    Writing on input pads

    -

    The behavior is not specified but there are implementations better than others, this is the list of possible implementations, preferred options are on top:

    -
      -
    1. The written value is not actually output but latched, should the pads be reprogrammed as outputs the value would be in effect.
    2. -
    3. The write operation is ignored.
    4. -
    5. The write operation has side effects, as example disabling/enabling pull up/down resistors or changing the pad direction. This scenario is discouraged, please try to avoid this scenario.
    6. -
    -

    Reading from output pads

    -

    The behavior is not specified but there are implementations better than others, this is the list of possible implementations, preferred options are on top:

    -
      -
    1. The actual pads states are read (not the output latch).
    2. -
    3. The output latch value is read (regardless of the actual pads states).
    4. -
    5. Unspecified, please try to avoid this scenario.
    6. -
    -

    Writing unused or unimplemented port bits

    -

    The behavior is not specified.

    -

    Reading from unused or unimplemented port bits

    -

    The behavior is not specified.

    -

    Reading or writing on pins associated to other functionalities

    -

    The behavior is not specified.

    -

    Usage

    -

    The use of I/O ports requires the inclusion of the header file pal.h, this file is not automatically included ch.h like the other header files.

    - - - - - - - -

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  IOBus
     I/O bus descriptor. More...

    -Modules

     PAL Low Level Driver
     

    PAL Driver low level driver template.

    -

    -Defines

    #define PAL_MODE_MASK   0xF
     Bits in a mode word dedicated as mode selector.
    #define PAL_MODE_RESET   0
     After reset state.
    #define PAL_MODE_UNCONNECTED   1
     Safe state for unconnected pads.
    #define PAL_MODE_INPUT   2
     Regular input high-Z pad.
    #define PAL_MODE_INPUT_PULLUP   3
     Input pad with weak pull up resistor.
    #define PAL_MODE_INPUT_PULLDOWN   4
     Input pad with weak pull down resistor.
    #define PAL_MODE_INPUT_ANALOG   5
     Analog input mode.
    #define PAL_MODE_OUTPUT_PUSHPULL   6
     Push-pull output pad.
    #define PAL_MODE_OUTPUT_OPENDRAIN   7
     Open-drain output pad.
    #define PAL_LOW   0
     Logical low state.
    #define PAL_HIGH   1
     Logical high state.
    #define PAL_PORT_BIT(n)   ((ioportmask_t)(1 << (n)))
     Port bit helper macro.
    #define PAL_GROUP_MASK(width)   ((ioportmask_t)(1 << (width)) - 1)
     Bits group mask helper.
    #define _IOBUS_DATA(name, port, width, offset)   {port, PAL_GROUP_MASK(width), offset}
     Data part of a static I/O bus initializer.
    #define IOBUS_DECL(name, port, width, offset)   IOBus name = _IOBUS_DATA(name, port, width, offset)
     Static I/O bus initializer.
    #define palInit(config)   pal_lld_init(config)
     PAL subsystem initialization.
    #define palReadPort(port)   ((void)(port), 0)
     Reads the physical I/O port states.
    #define palReadLatch(port)   ((void)(port), 0)
     Reads the output latch.
    #define palWritePort(port, bits)   ((void)(port), (void)(bits))
     Writes a bits mask on a I/O port.
    #define palSetPort(port, bits)
     Sets a bits mask on a I/O port.
    #define palClearPort(port, bits)
     Clears a bits mask on a I/O port.
    #define palTogglePort(port, bits)
     Toggles a bits mask on a I/O port.
    #define palReadGroup(port, mask, offset)   ((palReadPort(port) >> (offset)) & (mask))
     Reads a group of bits.
    #define palWriteGroup(port, mask, offset, bits)
     Writes a group of bits.
    #define palSetGroupMode(port, mask, mode)
     Pads group mode setup.
    #define palReadPad(port, pad)   ((palReadPort(port) >> (pad)) & 1)
     Reads an input pad logical state.
    #define palWritePad(port, pad, bit)
     Writes a logical state on an output pad.
    #define palSetPad(port, pad)   palSetPort(port, PAL_PORT_BIT(pad))
     Sets a pad logical state to PAL_HIGH.
    #define palClearPad(port, pad)   palClearPort(port, PAL_PORT_BIT(pad))
     Clears a pad logical state to PAL_LOW.
    #define palTogglePad(port, pad)   palTogglePort(port, PAL_PORT_BIT(pad))
     Toggles a pad logical state.
    #define palSetPadMode(port, pad, mode)   palSetGroupMode(port, PAL_PORT_BIT(pad), mode)
     Pad mode setup.

    -Functions

    ioportmask_t palReadBus (IOBus *bus)
     Read from an I/O bus.
    void palWriteBus (IOBus *bus, ioportmask_t bits)
     Write to an I/O bus.
    void palSetBusMode (IOBus *bus, uint_fast8_t mode)
     Programs a bus with the specified mode.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PAL_MODE_MASK   0xF
    -
    -
    - -

    Bits in a mode word dedicated as mode selector.

    -

    The other bits are not defined and may be used as device-specific option bits.

    - -

    Definition at line 49 of file pal.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_MODE_RESET   0
    -
    -
    - -

    After reset state.

    -

    The state itself is not specified and is architecture dependent, it is guaranteed to be equal to the after-reset state. It is usually an input state.

    - -

    Definition at line 57 of file pal.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_MODE_UNCONNECTED   1
    -
    -
    - -

    Safe state for unconnected pads.

    -

    The state itself is not specified and is architecture dependent, it may be mapped on PAL_MODE_INPUT_PULLUP, PAL_MODE_INPUT_PULLDOWN or PAL_MODE_OUTPUT_PUSHPULL as example.

    - -

    Definition at line 66 of file pal.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_MODE_INPUT   2
    -
    -
    - -

    Regular input high-Z pad.

    - -

    Definition at line 71 of file pal.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_MODE_INPUT_PULLUP   3
    -
    -
    - -

    Input pad with weak pull up resistor.

    - -

    Definition at line 76 of file pal.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_MODE_INPUT_PULLDOWN   4
    -
    -
    - -

    Input pad with weak pull down resistor.

    - -

    Definition at line 81 of file pal.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_MODE_INPUT_ANALOG   5
    -
    -
    - -

    Analog input mode.

    - -

    Definition at line 86 of file pal.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_MODE_OUTPUT_PUSHPULL   6
    -
    -
    - -

    Push-pull output pad.

    - -

    Definition at line 91 of file pal.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_MODE_OUTPUT_OPENDRAIN   7
    -
    -
    - -

    Open-drain output pad.

    - -

    Definition at line 96 of file pal.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_LOW   0
    -
    -
    - -

    Logical low state.

    - -

    Definition at line 101 of file pal.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_HIGH   1
    -
    -
    - -

    Logical high state.

    - -

    Definition at line 106 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define PAL_PORT_BIT( n )    ((ioportmask_t)(1 << (n)))
    -
    -
    - -

    Port bit helper macro.

    -

    This macro calculates the mask of a bit within a port.

    -
    Parameters:
    - - -
    [in] n bit position within the port
    -
    -
    -
    Returns:
    The bit mask.
    - -

    Definition at line 157 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define PAL_GROUP_MASK( width )    ((ioportmask_t)(1 << (width)) - 1)
    -
    -
    - -

    Bits group mask helper.

    -

    This macro calculates the mask of a bits group.

    -
    Parameters:
    - - -
    [in] width group width
    -
    -
    -
    Returns:
    The group mask.
    - -

    Definition at line 167 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define _IOBUS_DATA( name,
     port,
     width,
     offset 
    )   {port, PAL_GROUP_MASK(width), offset}
    -
    -
    - -

    Data part of a static I/O bus initializer.

    -

    This macro should be used when statically initializing an I/O bus that is part of a bigger structure.

    -
    Parameters:
    - - - - - -
    [in] name name of the IOBus variable
    [in] port I/O port descriptor
    [in] width bus width in bits
    [in] offset bus bit offset within the port
    -
    -
    - -

    Definition at line 179 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define IOBUS_DECL( name,
     port,
     width,
     offset 
    )   IOBus name = _IOBUS_DATA(name, port, width, offset)
    -
    -
    - -

    Static I/O bus initializer.

    -
    Parameters:
    - - - - - -
    [in] name name of the IOBus variable
    [in] port I/O port descriptor
    [in] width bus width in bits
    [in] offset bus bit offset within the port
    -
    -
    - -

    Definition at line 190 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define palInit( config )    pal_lld_init(config)
    -
    -
    - -

    PAL subsystem initialization.

    -
    Parameters:
    - - -
    [in] config pointer to an architecture specific configuration structure. This structure is defined in the low level driver header.
    -
    -
    - -

    Definition at line 200 of file pal.h.

    - -

    Referenced by halInit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define palReadPort( port )    ((void)(port), 0)
    -
    -
    - -

    Reads the physical I/O port states.

    -
    Note:
    The default implementation always return zero and computes the parameter eventual side effects.
    -
    Parameters:
    - - -
    [in] port port identifier
    -
    -
    -
    Returns:
    The port logical states.
    - -

    Definition at line 211 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define palReadLatch( port )    ((void)(port), 0)
    -
    -
    - -

    Reads the output latch.

    -

    The purpose of this function is to read back the latched output value.

    -
    Note:
    The default implementation always return zero and computes the parameter eventual side effects.
    -
    Parameters:
    - - -
    [in] port port identifier
    -
    -
    -
    Returns:
    The latched logical states.
    - -

    Definition at line 227 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define palWritePort( port,
     bits 
    )   ((void)(port), (void)(bits))
    -
    -
    - -

    Writes a bits mask on a I/O port.

    -
    Note:
    The default implementation does nothing except computing the parameters eventual side effects.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be written on the specified port
    -
    -
    - -

    Definition at line 241 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define palSetPort( port,
     bits 
    )
    -
    -
    -Value:
    {                                        \
    -  palWritePort(port, palReadLatch(port) | (bits));                      \
    -}
    -
    -

    Sets a bits mask on a I/O port.

    -
    Note:
    The operation is not guaranteed to be atomic on all the architectures, for atomicity and/or portability reasons you may need to enclose port I/O operations between chSysLock() and chSysUnlock().
    -
    -The default implementation is non atomic and not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be ORed on the specified port
    -
    -
    - -

    Definition at line 260 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define palClearPort( port,
     bits 
    )
    -
    -
    -Value:
    {                                      \
    -  palWritePort(port, palReadLatch(port) & ~(bits));                     \
    -}
    -
    -

    Clears a bits mask on a I/O port.

    -
    Note:
    The operation is not guaranteed to be atomic on all the architectures, for atomicity and/or portability reasons you may need to enclose port I/O operations between chSysLock() and chSysUnlock().
    -
    -The default implementation is non atomic and not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be cleared on the specified port
    -
    -
    - -

    Definition at line 282 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define palTogglePort( port,
     bits 
    )
    -
    -
    -Value:
    {                                     \
    -  palWritePort(port, palReadLatch(port) ^ (bits));                      \
    -}
    -
    -

    Toggles a bits mask on a I/O port.

    -
    Note:
    The operation is not guaranteed to be atomic on all the architectures, for atomicity and/or portability reasons you may need to enclose port I/O operations between chSysLock() and chSysUnlock().
    -
    -The default implementation is non atomic and not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be XORed on the specified port
    -
    -
    - -

    Definition at line 303 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define palReadGroup( port,
     mask,
     offset 
    )   ((palReadPort(port) >> (offset)) & (mask))
    -
    -
    - -

    Reads a group of bits.

    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] mask group mask, a logical AND is performed on the input data
    [in] offset group bit offset within the port
    -
    -
    -
    Returns:
    The group logical states.
    - -

    Definition at line 320 of file pal.h.

    - -

    Referenced by palReadBus().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define palWriteGroup( port,
     mask,
     offset,
     bits 
    )
    -
    -
    -Value:
    {                       \
    -  palWritePort(port, (palReadLatch(port) & ~((mask) << (offset))) |     \
    -                     (((bits) & (mask)) << (offset)));                  \
    -}
    -
    -

    Writes a group of bits.

    -
    Parameters:
    - - - - - -
    [in] port port identifier
    [in] mask group mask, a logical AND is performed on the output data
    [in] offset group bit offset within the port
    [in] bits bits to be written. Values exceeding the group width are masked.
    -
    -
    - -

    Definition at line 337 of file pal.h.

    - -

    Referenced by palWriteBus().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define palSetGroupMode( port,
     mask,
     mode 
    )
    -
    -
    - -

    Pads group mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Note:
    Programming an unknown or unsupported mode is silently ignored.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] mode group mode
    -
    -
    - -

    Definition at line 359 of file pal.h.

    - -

    Referenced by palSetBusMode().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define palReadPad( port,
     pad 
    )   ((palReadPort(port) >> (pad)) & 1)
    -
    -
    - -

    Reads an input pad logical state.

    -
    Note:
    The default implementation not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    -The default implementation internally uses the palReadPort().
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    -
    Returns:
    The logical state.
    -
    Return values:
    - - - -
    PAL_LOW low logical state.
    PAL_HIGH high logical state.
    -
    -
    - -

    Definition at line 379 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define palWritePad( port,
     pad,
     bit 
    )
    -
    -
    -Value:
    {                                   \
    -  palWritePort(port, (palReadLatch(port) & ~PAL_PORT_BIT(pad)) |        \
    -                     (((bit) & 1) << pad));                             \
    -}
    -
    -

    Writes a logical state on an output pad.

    -
    Note:
    The operation is not guaranteed to be atomic on all the architectures, for atomicity and/or portability reasons you may need to enclose port I/O operations between chSysLock() and chSysUnlock().
    -
    -The default implementation is non atomic and not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    -The default implementation internally uses the palReadLatch() and palWritePort().
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] pad pad number within the port
    [in] bit logical value, the value must be PAL_LOW or PAL_HIGH
    -
    -
    - -

    Definition at line 402 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define palSetPad( port,
     pad 
    )   palSetPort(port, PAL_PORT_BIT(pad))
    -
    -
    - -

    Sets a pad logical state to PAL_HIGH.

    -
    Note:
    The operation is not guaranteed to be atomic on all the architectures, for atomicity and/or portability reasons you may need to enclose port I/O operations between chSysLock() and chSysUnlock().
    -
    -The default implementation is non atomic and not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    -The default implementation internally uses the palSetPort().
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    - -

    Definition at line 425 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define palClearPad( port,
     pad 
    )   palClearPort(port, PAL_PORT_BIT(pad))
    -
    -
    - -

    Clears a pad logical state to PAL_LOW.

    -
    Note:
    The operation is not guaranteed to be atomic on all the architectures, for atomicity and/or portability reasons you may need to enclose port I/O operations between chSysLock() and chSysUnlock().
    -
    -The default implementation is non atomic and not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    -The default implementation internally uses the palClearPort().
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    - -

    Definition at line 445 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define palTogglePad( port,
     pad 
    )   palTogglePort(port, PAL_PORT_BIT(pad))
    -
    -
    - -

    Toggles a pad logical state.

    -
    Note:
    The operation is not guaranteed to be atomic on all the architectures, for atomicity and/or portability reasons you may need to enclose port I/O operations between chSysLock() and chSysUnlock().
    -
    -The default implementation is non atomic and not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    -The default implementation internally uses the palTogglePort().
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    - -

    Definition at line 465 of file pal.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define palSetPadMode( port,
     pad,
     mode 
    )   palSetGroupMode(port, PAL_PORT_BIT(pad), mode)
    -
    -
    - -

    Pad mode setup.

    -

    This function programs a pad with the specified mode.

    -
    Note:
    The default implementation not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    -Programming an unknown or unsupported mode is silently ignored.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] pad pad number within the port
    [in] mode pad mode
    -
    -
    - -

    Definition at line 484 of file pal.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    ioportmask_t palReadBus (IOBus bus ) 
    -
    -
    - -

    Read from an I/O bus.

    -
    Note:
    The operation is not guaranteed to be atomic on all the architectures, for atomicity and/or portability reasons you may need to enclose port I/O operations between chSysLock() and chSysUnlock().
    -
    -The function internally uses the palReadGroup() macro. The use of this function is preferred when you value code size, readability and error checking over speed.
    -
    Parameters:
    - - -
    [in] bus the I/O bus, pointer to a IOBus structure
    -
    -
    -
    Returns:
    The bus logical states.
    - -

    Definition at line 69 of file pal.c.

    - -

    References IOBus::bus_mask, IOBus::bus_offset, IOBus::bus_portid, chDbgCheck, PAL_IOPORTS_WIDTH, and palReadGroup.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void palWriteBus (IOBus bus,
    ioportmask_t  bits 
    )
    -
    -
    - -

    Write to an I/O bus.

    -
    Note:
    The operation is not guaranteed to be atomic on all the architectures, for atomicity and/or portability reasons you may need to enclose port I/O operations between chSysLock() and chSysUnlock().
    -
    -The default implementation is non atomic and not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    Parameters:
    - - - -
    [in] bus the I/O bus, pointer to a IOBus structure
    [in] bits the bits to be written on the I/O bus. Values exceeding the bus width are masked so most significant bits are lost.
    -
    -
    - -

    Definition at line 92 of file pal.c.

    - -

    References IOBus::bus_mask, IOBus::bus_offset, IOBus::bus_portid, chDbgCheck, PAL_IOPORTS_WIDTH, and palWriteGroup.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void palSetBusMode (IOBus bus,
    uint_fast8_t  mode 
    )
    -
    -
    - -

    Programs a bus with the specified mode.

    -
    Note:
    The operation is not guaranteed to be atomic on all the architectures, for atomicity and/or portability reasons you may need to enclose port I/O operations between chSysLock() and chSysUnlock().
    -
    -The default implementation is non atomic and not necessarily optimal. Low level drivers may optimize the function by using specific hardware or coding.
    -
    Parameters:
    - - - -
    [in] bus the I/O bus, pointer to a IOBus structure
    [in] mode the mode
    -
    -
    - -

    Definition at line 113 of file pal.c.

    - -

    References IOBus::bus_mask, IOBus::bus_offset, IOBus::bus_portid, chDbgCheck, PAL_IOPORTS_WIDTH, and palSetGroupMode.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___p_a_l.png b/ChibiOS_2.0.8/docs/html/group___p_a_l.png deleted file mode 100644 index 548454e49afb21d796869bd9f0fc077876f00a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1542 zcmeAS@N?(olHy`uVBq!ia0y~yU`$|OU{K{?V_;yYX*O18U|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my5m5cF|G>2G$jxE{-7;bKc%LpDmLr!T#aB@!Tsn+RU=1y~(*9 z)6@0HRbZ)FFbmTg}+JUcGc%CnWC*uf)l+~itB1sWk!W)Ev;{8 zZ@Q6GcKbp^F7K7UAFEE}&CN+qOD{`%e)n#Ty}-1}&*%1>fA{A1ley(;`VKD0V4_g_ zCP9YaLUy4;{tSFC`4)KwNBrA!a=vqf-Tk>QcD!To*d4uZ|1#&LiVTtr@y7%MJtP@i z?>e@8&}caG;>C)07Ps!L3|`LgK>KWB%fyxY%AEEudXf6z!{1V`1E%`h^`@PWxhm@r z@v=m!`un@9vTnCmt3B{D=X}6@*KvZ_sg)NxthtnwqK>inxGdomHV~Ys=5xTsWtIV> zuwdq+uOcn+T-)vZWtOc;HOrs3b8pN#8+MN{&7TVbPR#9H{Z^x=w|DK0d9!C1uL+KS z7jo^)#%3A+?IEw;HhL|cBY4oo&i?n3cNI*l_9wr);y&xGf8m#%VcQ>myZ3g_t$x$@ z6`e|qzXPieOWmtT>rGv{jq${^)2~z=t}!w>|qhbLZ8|tD=`Hs7#$zr89GmT}tFi zR)>A!6FC`Pm$F~e%<7bJIDB2|_qQ82Zk(O}>;Cok;>SLGn0Gs9<@RmrlZ}u27QYpB zuwzbQ~s;&JzufH$+6Se)_!rkV1HCpU3b6F+?c!|2^&3l~Z zz3-ddlW9DUX0(0CT0C>xT(<0QW^*RRi_CeHv+S;i{cDTo4a%vJ#{AR0!snTtwH9u; zwQiN}4XY*P4qkOz*1TMCm}^PQzu#IPsu$Es-Id7}4^;baoc_;2X`}G6oB#Lijd7`& zn|*rLwYt`AJARnv-T9$=La*1YZLU@Z(`D0mY46=@{SE~Fdm5uS|NLCzv%Bl=ZAg60 zym#;60Iu&^t&9G%#8mQ6h(CNp;M&&g{co7oT!_4!yG1%p`%YqzY=4$_J1OETRu?dx*3SMD8wy?dJFjL(=f&0cYvcZsat z?Is($O-?IIQZoxb&Msz9)6M=>cX&ehlvQt7QaBFmXSlZOZMKAwxqW@W_e*V$8$`XG z>*NzZ|Job>O}ZknKQve;?%1J2%PkZB8=n64x^SXbm}at*OK#4T9`4rW)tRhD`};Rs zy*_c*CyhzjH_V!@^=tiGVb6WO?N#c=J*OgW+pK!HaGTVvC3_8K&Z%^9@eMh>y0}$a zKiu_-aPEYL{$-b6>V!LIubFk>b(nDVV)dCZ-+MYz822!&h-27(r|0zZ^xF@2uQ_n_ zLYVRK&-bVHFBIk4x%uaxH$Hav=dTHw!1kng=@Ti2r6Q+xJzl&*Mo)}u^ZjR^cY02& zXLC_mEmF7QUWab^w-C*>Y;O%%FFO6!p04*$rD5{n!_{T_x{~LaK3O#s-klh@<=Jz7 zeMSqm2RANUSZD3EbgRBrYdOQ6#g-;Y;j!}?{+Ivz({9c%hoL}e;*GoEdh1`Fx@gZR zu2=I(y+N6wFX!f`G_P_Sm%K1vrfty?KYr|bC!rxHu3u-e-kMFxT!vLhF!K;vAyRR- z<@6CT*Uv@_R=@Vo@tbegJ8`1m-NXPJBZjVB%?rLgoZ7JX$Nkc*1tD4w4>U6GI=rBw kr}_K>VL@cD^<4eAo4@{kY1%fIfq{X+)78&qol`;+0Fa#R4*&oF diff --git a/ChibiOS_2.0.8/docs/html/group___p_a_l___l_l_d.html b/ChibiOS_2.0.8/docs/html/group___p_a_l___l_l_d.html deleted file mode 100644 index 42df447..0000000 --- a/ChibiOS_2.0.8/docs/html/group___p_a_l___l_l_d.html +++ /dev/null @@ -1,880 +0,0 @@ - - -ChibiOS/RT: PAL Low Level Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    PAL Low Level Driver
    - -[PAL Driver] -

    -
    -
    - -

    PAL Driver low level driver template. -More...

    - -

    -Collaboration diagram for PAL Low Level Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    PAL Driver low level driver template.

    -

    This file is a template for an I/O port low level driver.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  GenericConfig
     Generic I/O ports static initializer. More...

    -Defines

    #define PAL_IOPORTS_WIDTH   32
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFFFFFFF)
     Whole port mask.
    #define IOPORT1   0
     First I/O port identifier.
    #define pal_lld_init(config)
     Low level PAL subsystem initialization.
    #define pal_lld_readport(port)
     Reads the physical I/O port states.
    #define pal_lld_readlatch(port)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)
     Writes a bits mask on a I/O port.
    #define pal_lld_setport(port, bits)
     Sets a bits mask on a I/O port.
    #define pal_lld_clearport(port, bits)
     Clears a bits mask on a I/O port.
    #define pal_lld_toggleport(port, bits)
     Toggles a bits mask on a I/O port.
    #define pal_lld_readgroup(port, mask, offset)
     Reads a group of bits.
    #define pal_lld_writegroup(port, mask, offset, bits)
     Writes a group of bits.
    #define pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.
    #define pal_lld_readpad(port, pad)
     Reads a logical state from an I/O pad.
    #define pal_lld_writepad(port, pad, bit)
     Writes a logical state on an output pad.
    #define pal_lld_setpad(port, pad)
     Sets a pad logical state to PAL_HIGH.
    #define pal_lld_clearpad(port, pad)
     Clears a pad logical state to PAL_LOW.
    #define pal_lld_togglepad(port, pad)
     Toggles a pad logical state.
    #define pal_lld_setpadmode(port, pad, mode)
     Pad mode setup.

    -Typedefs

    typedef uint32_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef uint32_t ioportid_t
     Port Identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PAL_IOPORTS_WIDTH   32
    -
    -
    - -

    Width, in bits, of an I/O port.

    - -

    Definition at line 70 of file templates/pal_lld.h.

    - -

    Referenced by palReadBus(), palSetBusMode(), and palWriteBus().

    - -
    -
    - -
    -
    - - - - -
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFFFFFFF)
    -
    -
    - -

    Whole port mask.

    -

    This macro specifies all the valid bits into a port.

    - -

    Definition at line 76 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT1   0
    -
    -
    - -

    First I/O port identifier.

    -

    Low level drivers can define multiple ports, it is suggested to use this naming convention.

    - -

    Definition at line 100 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_init( config ) 
    -
    -
    - -

    Low level PAL subsystem initialization.

    -
    Parameters:
    - - -
    [in] config architecture-dependent ports configuration
    -
    -
    - -

    Definition at line 112 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readport( port ) 
    -
    -
    - -

    Reads the physical I/O port states.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - -
    [in] port port identifier
    -
    -
    -
    Returns:
    The port bits.
    - -

    Definition at line 122 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readlatch( port ) 
    -
    -
    - -

    Reads the output latch.

    -

    The purpose of this function is to read back the latched output value.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - -
    [in] port port identifier
    -
    -
    -
    Returns:
    The latched logical states.
    - -

    Definition at line 134 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writeport( port,
     bits 
    )
    -
    -
    - -

    Writes a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be written on the specified port
    -
    -
    - -

    Definition at line 144 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setport( port,
     bits 
    )
    -
    -
    - -

    Sets a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be ORed on the specified port
    -
    -
    - -

    Definition at line 157 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_clearport( port,
     bits 
    )
    -
    -
    - -

    Clears a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be cleared on the specified port
    -
    -
    - -

    Definition at line 170 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_toggleport( port,
     bits 
    )
    -
    -
    - -

    Toggles a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be XORed on the specified port
    -
    -
    - -

    Definition at line 183 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_readgroup( port,
     mask,
     offset 
    )
    -
    -
    - -

    Reads a group of bits.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] offset group bit offset within the port
    -
    -
    -
    Returns:
    The group logical states.
    - -

    Definition at line 198 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writegroup( port,
     mask,
     offset,
     bits 
    )
    -
    -
    - -

    Writes a group of bits.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] offset group bit offset within the port
    [in] bits bits to be written. Values exceeding the group width are masked.
    -
    -
    - -

    Definition at line 214 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setgroupmode( port,
     mask,
     mode 
    )
    -
    -
    - -

    Pads group mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -Programming an unknown or unsupported mode is silently ignored.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] mode group mode
    -
    -
    - -

    Definition at line 228 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_readpad( port,
     pad 
    )
    -
    -
    - -

    Reads a logical state from an I/O pad.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    -
    Returns:
    The logical state.
    -
    Return values:
    - - - -
    PAL_LOW low logical state.
    PAL_HIGH high logical state.
    -
    -
    - -

    Definition at line 244 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writepad( port,
     pad,
     bit 
    )
    -
    -
    - -

    Writes a logical state on an output pad.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] pad pad number within the port
    [out] bit logical value, the value must be PAL_LOW or PAL_HIGH
    -
    -
    - -

    Definition at line 259 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setpad( port,
     pad 
    )
    -
    -
    - -

    Sets a pad logical state to PAL_HIGH.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    - -

    Definition at line 272 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_clearpad( port,
     pad 
    )
    -
    -
    - -

    Clears a pad logical state to PAL_LOW.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    - -

    Definition at line 285 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_togglepad( port,
     pad 
    )
    -
    -
    - -

    Toggles a pad logical state.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] pad pad number within the port
    -
    -
    - -

    Definition at line 298 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setpadmode( port,
     pad,
     mode 
    )
    -
    -
    - -

    Pad mode setup.

    -

    This function programs a pad with the specified mode.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -The PAL Driver provides a default software implementation of this functionality, implement this function if can optimize it by using special hardware functionalities or special coding.
    -
    -Programming an unknown or unsupported mode is silently ignored.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] pad pad number within the port
    [in] mode pad mode
    -
    -
    - -

    Definition at line 314 of file templates/pal_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t ioportmask_t
    -
    -
    - -

    Digital I/O port sized unsigned type.

    - -

    Definition at line 81 of file templates/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t ioportid_t
    -
    -
    - -

    Port Identifier.

    -

    This type can be a scalar or some kind of pointer, do not make any assumption about it, use the provided macros when populating variables of this type.

    - -

    Definition at line 89 of file templates/pal_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___p_a_l___l_l_d.png b/ChibiOS_2.0.8/docs/html/group___p_a_l___l_l_d.png deleted file mode 100644 index c6d7f50172bb94ddcfaa1df438cbfa6c671b3520..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1131 zcmeAS@N?(olHy`uVBq!ia0y~yU}R-rU{K{?V_;zL_WdKwz`($k|H*Y zfq{X&#M9T6{T8H&gO{xzYZz`*+`bXZAMAzgKxb-Q4*6?|sI*bsSt^V9JC`Q+$~; zzFJLS{Kjx#)?0-nt%ZO8FMIg)-bd?2D@#NUm^9qp+mUg=mwCl)KBdOX49k`;Tb6U& zQ7k7fk7?H9@aZB}`(B0_{64YkEyE-&vF?bNm@TqwkrPg)1n5n_uU)Ql#L1<$$Fs4+ zW`;<|iDno>xp#@ezV?-VGd5Y|x@Vr>^nR1DF!%G~ov-&l{d`^jMxWX$r-ctHXS{0B z><(66nfE=h>Rt8TG{@h!1xmb)xW3O`aAd<BFT8o}td-Ai)k)|7e+aeP zUtm1__j6T+@2*$2zin{{eCZbTf5oorWw&ZuWdHuP^1OU^-plkGb-urkPQB)HaGJ(u z{>waSS=Mgt{L}qRq_Wr!?D2RVyflD4M2umIlUe5P!zWCnFJA4mcILe7KIvEBuRiJY zS(`U+nbcH0#dL0k=QIJeUEA*beIev{qs&QC@@Ga#&YM$A4X4kl?JJR4*}X-$@x(uG zmUkCVlr(%x;uO5%K4)L);x)VZ?{dy$i=9*W%lGrvcgIXw_t))Wm=Wc4>Uq7*&fU99 z&1TEaW++%Wx!#I1QD14(ywkc7wX?tMF0Z#^zvp%! zwQs)1Ex%dHWg`D3nyi)dx?(n2htcQKJ9Dnv*G2wp<_H$z{8b(Cu6v5-Z6*ej+3U-< zZGUff@7_LZbGy2?!pBdZ(@_1a^uvec>jIXAB63%=_TTuY^2+r=g}>FO^GZIRN8*py zCZ5|8f5~FeH^HrSQ6HE8jhgYouP1Vg{om`$xBvL%mHx~Axt@%?e(ghxb8CWTh#x%e zwK7)l=Yd#vP1EqT|7upJPkgmjy!&WmomY{?+BIty#OU2`djCUqOY|h>hgVl`UB30! ztKO{AuN^^ajn_{5!}TDaA>;l;g;()DTz6HkzPfdI?b@qBYrlOGPe6_1E>a8P-ZlvTCf{aeE?eF>Xk<=2Mc@lSfL~;3VFpXX5u= zr|Y2Uhx`43D?E_PtR?4gylpRm)|G%=RVwZ Wc< - -ChibiOS/RT: PowerPC - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    PowerPC
    - -[Ports] -

    -
    -
    - -

    -Collaboration diagram for PowerPC:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    PowerPC port details. This section describes how the ChibiOS/RT features are implemented on this architecture.

    -

    -Mapping of the System States in the PowerPC port

    -

    The ChibiOS/RT logical System States are mapped as follow in the PowerPC port:

    -
      -
    • Init. This state is represented by the startup code and the initialization code before chSysInit() is executed. It has not a special hardware state associated.
    • -
    • Normal. This is the state the system has after executing chSysInit(). Interrupts are enabled.
    • -
    • Suspended. Interrupts are disabled.
    • -
    • Disabled. Interrupts are disabled. This state is equivalent to the Suspended state because there are no fast interrupts in this architecture.
    • -
    • Sleep. This state is entered with the execution of the specific instruction wait.
    • -
    • S-Locked. Interrupts are disabled.
    • -
    • I-Locked. This state is equivalent to the SRI state, the chSysLockI() and chSysUnlockI() APIs do nothing (still use them in order to formally change state because this may change).
    • -
    • Serving Regular Interrupt. Normal interrupt service code.
    • -
    • Serving Fast Interrupt. Not present in this architecture.
    • -
    • Serving Non-Maskable Interrupt. The PowerPC has several non maskable interrupt sources that can be associated to this state.
    • -
    • Halted. Implemented as an infinite loop with interrupts disabled.
    • -
    -

    -The PowerPC port notes

    -

    The PowerPC port is organized as follow:

    -
      -
    • The main() function is invoked in privileged mode.
    • -
    • Each thread has a private stack with extra storage for interrupts servicing.
    • -
    • The Book-E Decrementer Timer, mapped on IVOR10, is used for system tick.
    • -
    • Interrupt nesting is not currently supported.
    • -
    - - - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     Configuration Options
     

    PowerPC Configuration Options.

    -
     Core Port Implementation
     

    PowerPC specific port code, structures and macros.

    -
     Startup Support
     

    PPC startup code support.

    -
     SPC563 Drivers
     

    Device drivers included in the SPC563 support.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___p_p_c.png b/ChibiOS_2.0.8/docs/html/group___p_p_c.png deleted file mode 100644 index f5a2b73bcbe6f0fd6c8e9145feb9893cda950ee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6553 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 - -ChibiOS/RT: Configuration Options - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    Configuration Options
    - -[PowerPC] -

    -
    -
    - -

    PowerPC Configuration Options. -More...

    - -

    -Collaboration diagram for Configuration Options:
    -
    -
    - - -
    -
    -

    -

    PowerPC Configuration Options.

    -

    The PowerPC port allows some architecture-specific configurations settings that can be overridden by redefining them in chconf.h. Usually there is no need to change the default values.

    -
      -
    • INT_REQUIRED_STACK, this value represent the amount of stack space used by an interrupt handler between the extctx and intctx structures. The default for this value is 128 bytes, this space is allocated for each thread so be careful in order to not waste precious RAM space.
      - The default value is set into ./os/ports/GCC/PPC/chcore.h.
    • -
    • IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE thread. Usually there is no need to change this value unless inserting code in the IDLE thread hook macro.
    • -
    • ENABLE_WFI_IDLE, if set to TRUE enables the use of the wait instruction from within the idle loop. This is defaulted to 0 because it can create problems with some debuggers. Setting this option to 1 reduces the system power requirements.
    • -
    - -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_n_f.png b/ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_n_f.png deleted file mode 100644 index 65adb55d3853120785855d49035381439140750b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmeAS@N?(olHy`uVBq!ia0y~yVED_xz@W;(#=yYP8S#D}0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj*OYR+Eew7?^K(x;TbZ%z1m~tiQ0M1lxynouzCSn4L1TGdwJ+ zz6UAub{=U?^2y?n4;Si{m&k8xW`Ec5(ZynwV#PC$j4QM28{L^0{iKAM6qi`bWfk5$ zmsfs!=G~>g|4d@Dx;?Y<=9}HdZ{CS0C_%xZ8^T?im>R?r*@cqtGw$iP>JVGwD$C&d zYU1Vv&L0Ry^+HBA9$hSe0k;JdMN|UtBm3FH!fBkoDA;UBAKf zmHn0*pMGAiz4_+OTIvJ^XvN_*Xo?VfBmbitS<307%Hcx`fw~M*(Sd&X=BIPv%c5ApWSvfNBZoAtKqAE zE1lVI$r0=M{+QjaU%oEsmv&vvpK@T;+bE&BlqZ$XJ{Xi<-*jY&KoQf`zZ#9-yeb$< z+4pX~V>!$6baw8o+v{>SPv5ONBfPd+y7$*7;mz}F7j~U?ky&;Ab&}D`zdf7cIPbhj z5%`p|Xo{4?j;d%5A6c1>NdlYPIU*Z>3a9H-^j57Z3RSXx%{tTQ_UnqdGEtqD8lf>( zk1kl=4!T%+V3k{ndEDYHS{Lu$%Gmbb!D!|~?Y(=2yBU@-e(~%SR!sSI|Cx)*9?fqT zH(q?+bd9rl<;&g0Y=YM(-n+8m_4e4ef1elWFV~)WxO!#CcU6YR%Vjy2*si+y>bz@V z;O27&5B9HczTjobwM}{Z%wE30-jH(__uc$|vH6SOir&3@m-f#*^Y!Gsd9%%}tcx=p zQdTeCvwz9-pkqmI4_&-?-t<6xQj6i%Eydn9($-CR{VY9x#x3)6FY9BLf7jZ&Wb=Oh z&2^`9W#se!+S%Rv#kObe$+Z7>gbr2dES(|3G+lZw!?*9#&pp+0eg5TU*2t*a^M2FayHA}NRx^aLv&VmpnpUH+w1WA>!xhQh ztIIq;eg0E!@Y3|=&B#Bj39JWBUAVBh=E_Hboe!I&nYV4Xf8!?0JW*QBHt>+a%TA#- zPyZo9!r1xaF|q4`+o0r;mVM&lIinKSeGYl{Lro> jJYC(nvjYk=I`(f+`jBt2$Y2En0|SGntDnm{r-UW|!vzDr diff --git a/ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_r_e.html b/ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_r_e.html deleted file mode 100644 index a7b0a62..0000000 --- a/ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_r_e.html +++ /dev/null @@ -1,1146 +0,0 @@ - - -ChibiOS/RT: Core Port Implementation - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Core Port Implementation
    - -[PowerPC] -

    -
    -
    - -

    PowerPC specific port code, structures and macros. -More...

    - -

    -Collaboration diagram for Core Port Implementation:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    PowerPC specific port code, structures and macros.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  stkalign_t
     Base type for stack and memory alignment. More...
    struct  eabi_frame
     Mandatory part of a stack frame. More...

    -Defines

    #define ENABLE_WFI_IDLE   0
     Enables the use of the WFI instruction.
    #define PPC_VARIANT_e200z3   3
    #define PPC_VARIANT_e200z4   4
    #define PPC_VARIANT   PPC_VARIANT_e200z3
     Core variant selector.
    #define CH_ARCHITECTURE_PPC
     Unique macro for the implemented architecture.
    #define CH_ARCHITECTURE_NAME   "PowerPC"
     Name of the implemented architecture.
    #define CH_CORE_VARIANT_NAME   "e200z3"
     Name of the architecture variant.
    #define SETUP_CONTEXT(workspace, wsize, pf, arg)
     Platform dependent part of the chThdInit() API.
    #define IDLE_THREAD_STACK_SIZE   0
     Stack size for the system idle thread.
    #define INT_REQUIRED_STACK   128
     Per-thread stack overhead for interrupts servicing.
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
     Static working area allocation.
    #define PORT_IRQ_PROLOGUE()
     IRQ prologue code.
    #define PORT_IRQ_EPILOGUE()
     IRQ epilogue code.
    #define PORT_IRQ_HANDLER(id)   void id(void)
     IRQ handler function declaration.
    #define port_init()
     Kernel port layer initialization.
    #define port_lock()   asm volatile ("wrteei 0" : : : "memory")
    #define port_unlock()   asm volatile("wrteei 1" : : : "memory")
    #define port_lock_from_isr()
    #define port_unlock_from_isr()
    #define port_disable()   asm volatile ("wrteei 0" : : : "memory")
    #define port_suspend()   asm volatile ("wrteei 0" : : : "memory")
    #define port_enable()   asm volatile ("wrteei 1" : : : "memory")
    #define port_wait_for_interrupt()
    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   const
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef void * regppc_t
     Generic PPC register.
    typedef volatile int8_t vint8_t
    typedef volatile uint8_t vuint8_t
    typedef volatile int16_t vint16_t
    typedef volatile uint16_t vuint16_t
    typedef volatile int32_t vint32_t
    typedef volatile uint32_t vuint32_t
    typedef int32_t bool_t
    typedef uint8_t tmode_t
    typedef uint8_t tstate_t
    typedef uint8_t trefs_t
    typedef uint32_t tprio_t
    typedef int32_t msg_t
    typedef int32_t eventid_t
    typedef uint32_t eventmask_t
    typedef uint32_t systime_t
    typedef int32_t cnt_t

    -Functions

    void port_halt (void)
     Halts the system.
    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    void _port_thread_start (void)
     Start a thread by invoking its work function.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define ENABLE_WFI_IDLE   0
    -
    -
    - -

    Enables the use of the WFI instruction.

    - -

    Definition at line 46 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define PPC_VARIANT_e200z3   3
    -
    -
    -

    e200z3 core identifier.

    - -

    Definition at line 50 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define PPC_VARIANT_e200z4   4
    -
    -
    -

    e200z4 core identifier.

    - -

    Definition at line 51 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define PPC_VARIANT   PPC_VARIANT_e200z3
    -
    -
    - -

    Core variant selector.

    -

    This setting affects the predefined architecture strings and possibly code paths and structures into the port layer.

    - -

    Definition at line 59 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_ARCHITECTURE_PPC
    -
    -
    - -

    Unique macro for the implemented architecture.

    - -

    Definition at line 65 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_ARCHITECTURE_NAME   "PowerPC"
    -
    -
    - -

    Name of the implemented architecture.

    - -

    Definition at line 70 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_CORE_VARIANT_NAME   "e200z3"
    -
    -
    - -

    Name of the architecture variant.

    - -

    Definition at line 76 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define SETUP_CONTEXT( workspace,
     wsize,
     pf,
     arg 
    )
    -
    -
    -Value:
    {                          \
    -  uint8_t *sp = (uint8_t *)workspace + wsize - sizeof(struct eabi_frame);   \
    -  ((struct eabi_frame *)sp)->slink = 0;                                     \
    -  ((struct eabi_frame *)sp)->shole = _port_thread_start;                    \
    -  tp->p_ctx.sp = (struct intctx *)(sp - sizeof(struct intctx));             \
    -  tp->p_ctx.sp->r31 = arg;                                                  \
    -  tp->p_ctx.sp->r30 = pf;                                                   \
    -}
    -
    -

    Platform dependent part of the chThdInit() API.

    -

    This code usually setup the context switching frame represented by an intctx structure.

    - -

    Definition at line 187 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define IDLE_THREAD_STACK_SIZE   0
    -
    -
    - -

    Stack size for the system idle thread.

    -

    This size depends on the idle thread implementation, usually the idle thread should take no more space than those reserved by INT_REQUIRED_STACK.

    - -

    Definition at line 203 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define INT_REQUIRED_STACK   128
    -
    -
    - -

    Per-thread stack overhead for interrupts servicing.

    -

    This constant is used in the calculation of the correct working area size. This value can be zero on those architecture where there is a separate interrupt stack and the stack space between intctx and extctx is known to be zero.

    - -

    Definition at line 215 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define STACK_ALIGN( n )    ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
    -
    -
    - -

    Enforces a correct alignment for a stack area size value.

    - -

    Definition at line 221 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define THD_WA_SIZE( n ) 
    -
    -
    -Value:
    STACK_ALIGN(sizeof(Thread) +                     \
    -                                   sizeof(struct intctx) +              \
    -                                   sizeof(struct extctx) +              \
    -                                  (n) + (INT_REQUIRED_STACK))
    -
    -

    Computes the thread working area global size.

    - -

    Definition at line 226 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define WORKING_AREA( s,
     n 
    )   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
    -
    -
    - -

    Static working area allocation.

    -

    This macro is used to allocate a static thread working area aligned as both position and size.

    - -

    Definition at line 236 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define PORT_IRQ_PROLOGUE( ) 
    -
    -
    - -

    IRQ prologue code.

    -

    This macro must be inserted at the start of all IRQ handlers enabled to invoke system APIs.

    - -

    Definition at line 243 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define PORT_IRQ_EPILOGUE( ) 
    -
    -
    - -

    IRQ epilogue code.

    -

    This macro must be inserted at the end of all IRQ handlers enabled to invoke system APIs.

    - -

    Definition at line 250 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define PORT_IRQ_HANDLER( id )    void id(void)
    -
    -
    - -

    IRQ handler function declaration.

    -
    Note:
    id can be a function name or a vector number depending on the port implementation.
    - -

    Definition at line 257 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_init( void ) 
    -
    -
    -Value:
    {                                                       \
    -  asm volatile ("li          %r3, IVOR4@l         \t\n"                   \
    -                  "mtIVOR4     %r3                  \t\n"                   \
    -                  "li          %r3, IVOR10@l        \t\n"                   \
    -                  "mtIVOR10    %r3");                                       \
    -}
    -
    -

    Kernel port layer initialization.

    -

    IVPR4 and IVPR10 initialization, INTC_IACKR_PRC0 initialization.

    - -

    Definition at line 263 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_lock( void )    asm volatile ("wrteei 0" : : : "memory")
    -
    -
    -

    Implemented as global interrupt disable.

    - -

    Definition at line 273 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_unlock( void )    asm volatile("wrteei 1" : : : "memory")
    -
    -
    -

    Implemented as global interrupt enable.

    - -

    Definition at line 278 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_lock_from_isr( void ) 
    -
    -
    -

    Implemented as global interrupt disable.

    - -

    Definition at line 283 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_unlock_from_isr( void ) 
    -
    -
    -

    Implemented as global interrupt enable.

    - -

    Definition at line 288 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_disable( void )    asm volatile ("wrteei 0" : : : "memory")
    -
    -
    -

    Implemented as global interrupt disable.

    - -

    Definition at line 293 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_suspend( void )    asm volatile ("wrteei 0" : : : "memory")
    -
    -
    -

    Same as port_disable() in this port, there is no difference between the two states.

    - -

    Definition at line 299 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_enable( void )    asm volatile ("wrteei 1" : : : "memory")
    -
    -
    -

    Implemented as global interrupt enable.

    - -

    Definition at line 304 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_wait_for_interrupt( void ) 
    -
    -
    -

    This port function is implemented as inlined code for performance reasons.

    - -

    Definition at line 317 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define INLINE   inline
    -
    -
    - -

    Inline function modifier.

    - -

    Definition at line 73 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define ROMCONST   const
    -
    -
    - -

    ROM constant modifier.

    -
    Note:
    It is set to use the "const" keyword in this port.
    - -

    Definition at line 79 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
    -
    -
    - -

    Packed structure modifier (within).

    -
    Note:
    It uses the "packed" GCC attribute.
    - -

    Definition at line 85 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_BEGIN
    -
    -
    - -

    Packed structure modifier (before).

    -
    Note:
    Empty in this port.
    - -

    Definition at line 91 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_END
    -
    -
    - -

    Packed structure modifier (after).

    -
    Note:
    Empty in this port.
    - -

    Definition at line 97 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef void* regppc_t
    -
    -
    - -

    Generic PPC register.

    - -

    Definition at line 93 of file ports/GCC/PPC/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    typedef volatile int8_t vint8_t
    -
    -
    -

    Volatile signed 8 bits.

    - -

    Definition at line 49 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef volatile uint8_t vuint8_t
    -
    -
    -

    Volatile unsigned 8 bits.

    - -

    Definition at line 50 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef volatile int16_t vint16_t
    -
    -
    -

    Volatile signed 16 bits.

    - -

    Definition at line 51 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef volatile uint16_t vuint16_t
    -
    -
    -

    Volatile unsigned 16 bits.

    - -

    Definition at line 52 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef volatile int32_t vint32_t
    -
    -
    -

    Volatile signed 32 bits.

    - -

    Definition at line 53 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef volatile uint32_t vuint32_t
    -
    -
    -

    Volatile unsigned 32 bits.

    - -

    Definition at line 54 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t bool_t
    -
    -
    -

    Fast boolean type.

    - -

    Definition at line 59 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t tmode_t
    -
    -
    -

    Thread flags.

    - -

    Definition at line 60 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t tstate_t
    -
    -
    -

    Thread state.

    - -

    Definition at line 61 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t trefs_t
    -
    -
    -

    Thread references counter.

    - -

    Definition at line 62 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t tprio_t
    -
    -
    -

    Thread priority.

    - -

    Definition at line 63 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t msg_t
    -
    -
    -

    Inter-thread message.

    - -

    Definition at line 64 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t eventid_t
    -
    -
    -

    Event Id.

    - -

    Definition at line 65 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t eventmask_t
    -
    -
    -

    Events mask.

    - -

    Definition at line 66 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t systime_t
    -
    -
    -

    System time.

    - -

    Definition at line 67 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t cnt_t
    -
    -
    -

    Resources counter.

    - -

    Definition at line 68 of file ports/GCC/PPC/chtypes.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void port_halt (void  ) 
    -
    -
    - -

    Halts the system.

    -

    This function is invoked by the operating system when an unrecoverable error is detected (as example because a programming error in the application code that triggers an assertion while in debug mode).

    - -

    Definition at line 45 of file ports/GCC/ARMCMx/chcore.c.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void port_switch (Thread ntp,
    Thread otp 
    )
    -
    -
    - -

    Performs a context switch between two threads.

    -

    This is the most critical code in any port, this function is responsible for the context switch between 2 threads.

    -
    Note:
    The implementation of this code affects directly the context switch performance so optimize here as much as you can.
    -
    Parameters:
    - - - -
    [in] ntp the thread to be switched in
    [in] otp the thread to be switched out
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void _port_thread_start (void  ) 
    -
    -
    - -

    Start a thread by invoking its work function.

    -

    If the work function returns chThdExit() is automatically invoked.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_r_e.png b/ChibiOS_2.0.8/docs/html/group___p_p_c___c_o_r_e.png deleted file mode 100644 index 3fd5f3742c74a95d062d24397b18de4b609ce261..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1100 zcmeAS@N?(olHy`uVBq!ia0y~yVB}_CU{K{?V_;wiZ8@`mfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM@CHt4YQT49xF5T^vIy=DfXoI$PLLhW*2P6W_%Wf>WKgZ9Urj z;As5;_8S3S{!tnsTh_`QHUIWtZTmmgeF7{87bm?w8oa)D#(sxC+-t7fs|iqAntRN7 z_AI~j^7Qib_>aFEoiH2!X#?rCK= z^}73V$1U|cy`BE2uD96vb^Wm<+imymSwDUEZl0lopZV-0mIR>TTAP%adGhO4 zUC%EUGcVb>Z=2LQ``hZBFB!tvcSqOmZ(M&nUo~)!Rq6gK86~}Dvy;3ydKfj{eYqak z$#lbh#nrcKt=^WFK5aVk;A(sLnpbvTz201#w@&u5#g$)qU$1;xn;ZAsSNCyw-`+=? z6wjq37KMJ7`cdbp^6=*AnDC{aelHS;4$jVg)Fq(7-KhI!-r*(c!6!e>D%|mReYLE+ zd|d9#Ef2*vuUm89Z0o$d-JU$Vl6i0S>u#IWn#cCwSa#R~Z-Knrmbdm3f?huPn0)-0 z9JBp$#xGu-yov#LZpwZ?qa$9DpJwlvF7J5%OWjl7Nxf&Q>Pn2Kt?5iYdr0ka+1l^- zubUT_78kz_T3GPHpyA@(z7~zDklRl!_%BDixx4)0k2w|d3wi!6Y3w`Ig zk^5JcNJPf&=_#rfahK29tJ7s1xrHtJ_iL5c?s>_zwLg#l`t?aY;oYvsf2{Z)%$hPo zgvou%?TNKv;q#wwyeBv#b+wF{^%Wz=N4Rd zAIv=R?ees_dy~?aeZBJX%6?z-?x|jtE*w5gMKTlE88)(>u!xo`qrYhMQBS&-S(C?Fdx7u=THP_nIf1O4T!T zlzx1Bds3d^Gs81>_I&xfciu=&53*q@uzGso1arFRLxaeOPhVf3mS>1#uCO&ISg-%K zq9f;VbBbX^T;0Y=Wjrq13?l_53Zf+Jj_b=6g*#m*#>#&Dt+_Rdx7BIg{CUfHK6r`! vQC-a!xc++J`uD#ZHDNhVNompl!|_3fUq&{@1=KJwFfe$!`njxgN@xNAWiJgN diff --git a/ChibiOS_2.0.8/docs/html/group___p_p_c___s_t_a_r_t_u_p.html b/ChibiOS_2.0.8/docs/html/group___p_p_c___s_t_a_r_t_u_p.html deleted file mode 100644 index 7e3d5a7..0000000 --- a/ChibiOS_2.0.8/docs/html/group___p_p_c___s_t_a_r_t_u_p.html +++ /dev/null @@ -1,84 +0,0 @@ - - -ChibiOS/RT: Startup Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    Startup Support
    - -[PowerPC] -

    -
    -
    - -

    PPC startup code support. -More...

    - -

    -Collaboration diagram for Startup Support:
    -
    -
    - - -
    -
    -

    -

    PPC startup code support.

    -

    ChibiOS/RT provides its own generic startup file for the PowerPC port. Of course it is not mandatory to use it but care should be taken about the startup phase details.

    -

    Startup Process

    -

    The startup process, as implemented, is the following:

    -
      -
    1. The stacks pointer is initialized into the area defined in the linker script.
    2. -
    3. The IVPR register is setup according to the linker script.
    4. -
    5. The R2 and R13 registers are set to pointer to the SDA areas according to the EABI specification.
    6. -
    7. An early initialization routine hwinit0 is invoked, if the symbol is not defined then an empty default routine is executed (weak symbol).
    8. -
    9. DATA and BSS segments are initialized.
    10. -
    11. A late initialization routine hwinit1 is invoked, if the symbol not defined then an empty default routine is executed (weak symbol).
      - This late initialization function is also the proper place for a bootloader, if your application requires one.
    12. -
    13. The main() function is invoked with the parameters argc and argv set to zero.
    14. -
    15. Should the main() function return a branch is performed to the weak symbol main_exit. The default code is an endless empty loop.
    16. -
    -

    Expected linker symbols

    -

    The startup code starts at the symbol _boot_address and expects the following symbols to be defined in the linker script:

    -
      -
    • __ram_end__ RAM end location +1.
    • -
    • __sdata2_start__ small constants data area
    • -
    • __sdata_start__ small variables data area
    • -
    • __romdata_start__ address of the data segment source read only data.
    • -
    • __data_start__ data segment start location.
    • -
    • __data_end__ data segment end location +1.
    • -
    • __bss_start__ BSS start location.
    • -
    • __bss_end__ BSS end location +1.
    • -
    • __ivpr_base__ IVPR register initialization address.
    • -
    - -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___p_p_c___s_t_a_r_t_u_p.png b/ChibiOS_2.0.8/docs/html/group___p_p_c___s_t_a_r_t_u_p.png deleted file mode 100644 index 7c7b2cea466df77856ae6e826ffcbdde9dc75a3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1108 zcmeAS@N?(olHy`uVBq!ia0y~yV0gg5z@W;(#=yW3&GGaZ0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj*OYR+Eew7?{6#x;TbZ%z1m~V75%C4Eu-o`jOFsQle3le48sY zTzn2r_Q*V-Q?1d_9=Gkrnj3Sf1Sf^@?|pLN&Yl&yeM^sr1?bD^SiV#fu-PV(^Ot?r z4%-$N{+mggK7XE&H>W2*Jw5IIZ1c?h@)0*Gjom4=&p zm^C+qGIZ~2K9M0-ZSSwu=K3bq|F>6L^F5{j<`2nof}%0J2m0PC{QAJyaO=vIDeo=f zs!pFi&F~?3%iSprvf?qU#T|FP$~x>{bye%x^XIkgA1_tUYxr+GAz#8pOmr{wcbt6b#I~3D-FjbV#V3D@G&L;zd*a!%_~%UuGvs8h+|JJK-oInc z`Btx`MG3nvX1v*6es8&?cJBNwg-_2uvt%q260oR9)c)juDDSg-a-qQOuZ-J+TQxz_4Xm3-;0lb z>C!&Eqww=mTXpH2P>0DXSC?NF+kSq_+r_7nN=ou%CUmdb!SW#2;UD7{4u*~gQ};aH zs5>X;;j2rT@3+ak-KL*8_0`qo(J_(7P4{lE_4B;xb-?6%pZ0&2N+5y9%w%aaSKD>E(bHd^%t+^6xUux33mQ3|yv7dfAJg0rC*XpmwlM~E?@9(((V_DWj@$ji9 z#HV{-u(+rt5iV+dNzd9hSxxTo%gaaav$Nm-k(=@2jJ11zAG^{FfrEWnmzFN8TiW$o z^U>D4>faZ64F2U^dc4{0rO)Y-_oC+cvzF#es&n;*>m7Aw$ z%P{R#a&ox;*4qcwR~31(EU!{sylRcvZ1Z=i9XFSKK2Y(f+1K0qa&6$3c{+NWlfS$y z?H3mhpH}GmcG(96+!2h$+s~V|Aa(OnDpSr(?Y~_2ge3i!RNr9sB z;tGuK!&YB?sZ=j@DAZId>TC79JEaWwTW{CuI`VJbx;0;pse+Ak?>+i?J#_#`Gxp`-;lc;>>iSPTGt$boam81O~Vv||7JiF$%xl@(F zJ2^RApP$F3`f9mLNR5vJ`#hVU+gKMowdT{Z({t>!Nn#SJJOWMHfp?r|MCApFTwnOV z?#k4uqCS3~c2{<5=`q%y(B&#hD=!!4=H}jaSV0L2K0S|T)j!jn$!`CTfq{X+)78&q Iol`;+0N=0;ivR!s diff --git a/ChibiOS_2.0.8/docs/html/group___p_w_m.html b/ChibiOS_2.0.8/docs/html/group___p_w_m.html deleted file mode 100644 index c6a9902..0000000 --- a/ChibiOS_2.0.8/docs/html/group___p_w_m.html +++ /dev/null @@ -1,1249 +0,0 @@ - - -ChibiOS/RT: PWM Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    PWM Driver
    - -[HAL] -

    -
    -
    - -

    Generic PWM Driver. -More...

    - -

    -Collaboration diagram for PWM Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Generic PWM Driver.

    -

    This module implements a generic PWM driver. The driver implements a state machine internally:

    -
    -inline_dotgraph_18.dot - -
    - - - - - - - - - - - -

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  PWMChannelConfig
     PWM driver channel configuration structure. More...
    struct  PWMConfig
     Driver configuration structure. More...
    struct  PWMDriver
     Structure representing an PWM driver. More...

    -Modules

     PWM Low Level Driver
     

    PWM Driver low level driver template.

    -

    -Defines

    #define pwmEnableChannelI(pwmp, channel, width)   pwm_lld_enable_channel(pwmp, channel, width)
     Enables a PWM channel.
    #define pwmDisableChannelI(pwmp, channel)   pwm_lld_disable_channel(pwmp, channel)
     Disables a PWM channel.
    #define PWM_CHANNELS   4
     Number of PWM channels per PWM driver.
    #define USE_STM32_PWM1   TRUE
     PWM1 driver enable switch.
    #define USE_STM32_PWM2   TRUE
     PWM2 driver enable switch.
    #define USE_STM32_PWM3   TRUE
     PWM3 driver enable switch.
    #define USE_STM32_PWM4   TRUE
     PWM4 driver enable switch.
    #define STM32_PWM1_IRQ_PRIORITY   7
     PWM1 interrupt priority level setting.
    #define STM32_PWM2_IRQ_PRIORITY   7
     PWM2 interrupt priority level setting.
    #define STM32_PWM3_IRQ_PRIORITY   7
     PWM3 interrupt priority level setting.
    #define STM32_PWM4_IRQ_PRIORITY   7
     PWM4 interrupt priority level setting.
    #define PWM_COMPUTE_PSC(clksrc, pwmclk)   ((uint16_t)(((clksrc) / (pwmclk)) - 1))
     PWM clock prescaler initialization utility.
    #define PWM_COMPUTE_ARR(pwmclk, pwmperiod)   ((uint16_t)(((pwmclk) / (1000000000 / (pwmperiod))) - 1))
     PWM cycle period initialization utility.
    #define PWM_FRACTION_TO_WIDTH(pwmp, numerator, denominator)
     Converts from fraction to pulse width.
    #define PWM_DEGREES_TO_WIDTH(pwmp, degrees)   PWM_FRACTION_TO_WIDTH(pwmp, 36000, degrees)
     Converts from degrees to pulse width.
    #define PWM_PERCENTAGE_TO_WIDTH(pwmp, percentage)   PWM_FRACTION_TO_WIDTH(pwmp, 10000, percentage)
     Converts from percentage to pulse width.

    -Typedefs

    typedef uint8_t pwmchannel_t
     PWM channel type.
    typedef uint16_t pwmcnt_t
     PWM counter type.
    typedef struct PWMDriver PWMDriver
     Type of a structure representing an PWM driver.
    typedef void(* pwmcallback_t )(PWMDriver *pwmp)
     PWM notification callback type.

    -Enumerations

    enum  pwmstate_t { PWM_UNINIT = 0, -PWM_STOP = 1, -PWM_READY = 2 - }
     

    Driver state machine possible states.

    - More...
    enum  pwmmode_t { PWM_OUTPUT_DISABLED = 0, -PWM_OUTPUT_ACTIVE_HIGH = 1, -PWM_OUTPUT_ACTIVE_LOW = 2 - }
     

    PWM logic mode.

    - More...

    -Functions

    void pwmInit (void)
     PWM Driver initialization.
    void pwmObjectInit (PWMDriver *pwmp)
     Initializes the standard part of a PWMDriver structure.
    void pwmStart (PWMDriver *pwmp, const PWMConfig *config)
     Configures and activates the PWM peripheral.
    void pwmStop (PWMDriver *pwmp)
     Deactivates the PWM peripheral.
    void pwmEnableChannel (PWMDriver *pwmp, pwmchannel_t channel, pwmcnt_t width)
     Enables a PWM channel.
    void pwmDisableChannel (PWMDriver *pwmp, pwmchannel_t channel)
     Disables a PWM channel.
    void pwm_lld_init (void)
     Low level PWM driver initialization.
    void pwm_lld_start (PWMDriver *pwmp)
     Configures and activates the PWM peripheral.
    void pwm_lld_stop (PWMDriver *pwmp)
     Deactivates the PWM peripheral.
    void pwm_lld_enable_channel (PWMDriver *pwmp, pwmchannel_t channel, pwmcnt_t width)
     Enables a PWM channel.
    void pwm_lld_disable_channel (PWMDriver *pwmp, pwmchannel_t channel)
     Disables a PWM channel.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pwmEnableChannelI( pwmp,
     channel,
     width 
    )   pwm_lld_enable_channel(pwmp, channel, width)
    -
    -
    - -

    Enables a PWM channel.

    -

    Programs (or reprograms) a PWM channel.

    -
    Note:
    This function has to be invoked from a lock zone.
    -
    Parameters:
    - - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] channel PWM channel identifier
    [in] width PWM pulse width as clock pulses number
    -
    -
    - -

    Definition at line 89 of file pwm.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pwmDisableChannelI( pwmp,
     channel 
    )   pwm_lld_disable_channel(pwmp, channel)
    -
    -
    - -

    Disables a PWM channel.

    -

    The channel is disabled and its output line returned to the idle state.

    -
    Note:
    This function has to be invoked from a lock zone.
    -
    Parameters:
    - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] channel PWM channel identifier
    -
    -
    - -

    Definition at line 101 of file pwm.h.

    - -
    -
    - -
    -
    - - - - -
    #define PWM_CHANNELS   4
    -
    -
    - -

    Number of PWM channels per PWM driver.

    - -

    Definition at line 40 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_PWM1   TRUE
    -
    -
    - -

    PWM1 driver enable switch.

    -

    If set to TRUE the support for PWM1 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 52 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_PWM2   TRUE
    -
    -
    - -

    PWM2 driver enable switch.

    -

    If set to TRUE the support for PWM2 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 61 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_PWM3   TRUE
    -
    -
    - -

    PWM3 driver enable switch.

    -

    If set to TRUE the support for PWM3 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 70 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_PWM4   TRUE
    -
    -
    - -

    PWM4 driver enable switch.

    -

    If set to TRUE the support for PWM4 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 79 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PWM1_IRQ_PRIORITY   7
    -
    -
    - -

    PWM1 interrupt priority level setting.

    - -

    Definition at line 86 of file platforms/STM32/pwm_lld.h.

    - -

    Referenced by pwm_lld_start().

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PWM2_IRQ_PRIORITY   7
    -
    -
    - -

    PWM2 interrupt priority level setting.

    - -

    Definition at line 93 of file platforms/STM32/pwm_lld.h.

    - -

    Referenced by pwm_lld_start().

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PWM3_IRQ_PRIORITY   7
    -
    -
    - -

    PWM3 interrupt priority level setting.

    - -

    Definition at line 100 of file platforms/STM32/pwm_lld.h.

    - -

    Referenced by pwm_lld_start().

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PWM4_IRQ_PRIORITY   7
    -
    -
    - -

    PWM4 interrupt priority level setting.

    - -

    Definition at line 107 of file platforms/STM32/pwm_lld.h.

    - -

    Referenced by pwm_lld_start().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define PWM_COMPUTE_PSC( clksrc,
     pwmclk 
    )   ((uint16_t)(((clksrc) / (pwmclk)) - 1))
    -
    -
    - -

    PWM clock prescaler initialization utility.

    -
    Note:
    The real clock value is rounded to the lower valid value, please make sure that the source clock frequency is a multiple of the requested PWM clock frequency.
    -
    -The calculated value must fit into an unsigned 16 bits integer.
    -
    Parameters:
    - - - -
    [in] clksrc clock source frequency, depending on the target timer cell it can be one of:

    -
      -
    • STM32_TIMCLK1
    • -
    • STM32_TIMCLK2
    • -
    -

    Please refer to the STM32 HAL driver documentation and/or the STM32 Reference Manual for the right clock source.

    [in] pwmclk PWM clock frequency in cycles
    -
    -
    -
    Returns:
    The value to be stored in the pc_psc field of the PWMConfig structure.
    - -

    Definition at line 245 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define PWM_COMPUTE_ARR( pwmclk,
     pwmperiod 
    )   ((uint16_t)(((pwmclk) / (1000000000 / (pwmperiod))) - 1))
    -
    -
    - -

    PWM cycle period initialization utility.

    -
    Note:
    The calculated value must fit into an unsigned 16 bits integer.
    -
    Parameters:
    - - - -
    [in] pwmclk PWM clock frequency in cycles
    [in] pwmperiod PWM cycle period in nanoseconds
    -
    -
    -
    Returns:
    The value to be stored in the pc_arr field of the PWMConfig structure.
    - -

    Definition at line 257 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define PWM_FRACTION_TO_WIDTH( pwmp,
     numerator,
     denominator 
    )
    -
    -
    -Value:
    ((uint16_t)((((uint32_t)(pwmp)->pd_config->pc_arr + 1UL) *                \
    -               (uint32_t)(denominator)) / (uint32_t)(numerator)))
    -
    -

    Converts from fraction to pulse width.

    -
    Note:
    Be careful with rounding errors, this is integer math not magic. You can specify tenths of thousandth but make sure you have the proper hardware resolution by carefully choosing the clock source and prescaler settings, see PWM_COMPUTE_PSC.
    -
    Parameters:
    - - - -
    [in] numerator numerator of the fraction
    [in] denominator percentage as an integer between 0 and numerator
    -
    -
    -
    Returns:
    The pulse width to be passed to pwmEnableChannel().
    - -

    Definition at line 273 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define PWM_DEGREES_TO_WIDTH( pwmp,
     degrees 
    )   PWM_FRACTION_TO_WIDTH(pwmp, 36000, degrees)
    -
    -
    - -

    Converts from degrees to pulse width.

    -
    Note:
    Be careful with rounding errors, this is integer math not magic. You can specify hundredths of degrees but make sure you have the proper hardware resolution by carefully choosing the clock source and prescaler settings, see PWM_COMPUTE_PSC.
    -
    Parameters:
    - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] degrees degrees as an integer between 0 and 36000
    -
    -
    -
    Returns:
    The pulse width to be passed to pwmEnableChannel().
    - -

    Definition at line 290 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define PWM_PERCENTAGE_TO_WIDTH( pwmp,
     percentage 
    )   PWM_FRACTION_TO_WIDTH(pwmp, 10000, percentage)
    -
    -
    - -

    Converts from percentage to pulse width.

    -
    Note:
    Be careful with rounding errors, this is integer math not magic. You can specify tenths of thousandth but make sure you have the proper hardware resolution by carefully choosing the clock source and prescaler settings, see PWM_COMPUTE_PSC.
    -
    Parameters:
    - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] percentage percentage as an integer between 0 and 10000
    -
    -
    -
    Returns:
    The pulse width to be passed to pwmEnableChannel().
    - -

    Definition at line 306 of file platforms/STM32/pwm_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint8_t pwmchannel_t
    -
    -
    - -

    PWM channel type.

    - -

    Definition at line 130 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint16_t pwmcnt_t
    -
    -
    - -

    PWM counter type.

    - -

    Definition at line 135 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef struct PWMDriver PWMDriver
    -
    -
    - -

    Type of a structure representing an PWM driver.

    - -

    Definition at line 140 of file platforms/STM32/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef void(* pwmcallback_t)(PWMDriver *pwmp)
    -
    -
    - -

    PWM notification callback type.

    -
    Parameters:
    - - -
    [in] pwmp pointer to a PWMDriver object
    -
    -
    - -

    Definition at line 147 of file platforms/STM32/pwm_lld.h.

    - -
    -
    -

    Enumeration Type Documentation

    - -
    -
    - - - - -
    enum pwmstate_t
    -
    -
    - -

    Driver state machine possible states.

    -
    Enumerator:
    - - - -
    PWM_UNINIT  -

    Not initialized.

    -
    PWM_STOP  -

    Stopped.

    -
    PWM_READY  -

    Ready.

    -
    -
    -
    - -

    Definition at line 59 of file pwm.h.

    - -
    -
    - -
    -
    - - - - -
    enum pwmmode_t
    -
    -
    - -

    PWM logic mode.

    -
    Enumerator:
    - - - -
    PWM_OUTPUT_DISABLED  -

    Output not driven, callback only.

    -
    PWM_OUTPUT_ACTIVE_HIGH  -

    Idle is logic level 0.

    -
    PWM_OUTPUT_ACTIVE_LOW  -

    Idle is logic level 1.

    -
    -
    -
    - -

    Definition at line 68 of file pwm.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void pwmInit (void  ) 
    -
    -
    - -

    PWM Driver initialization.

    - -

    Definition at line 59 of file pwm.c.

    - -

    References pwm_lld_init().

    - -

    Referenced by halInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void pwmObjectInit (PWMDriver pwmp ) 
    -
    -
    - -

    Initializes the standard part of a PWMDriver structure.

    -
    Parameters:
    - - -
    [in] pwmp pointer to a PWMDriver object
    -
    -
    - -

    Definition at line 69 of file pwm.c.

    - -

    References PWMDriver::pd_config, and PWMDriver::pd_state.

    - -

    Referenced by pwm_lld_init().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void pwmStart (PWMDriver pwmp,
    const PWMConfig config 
    )
    -
    -
    - -

    Configures and activates the PWM peripheral.

    -
    Parameters:
    - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] config pointer to a PWMConfig object
    -
    -
    - -

    Definition at line 84 of file pwm.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, PWMDriver::pd_config, PWMDriver::pd_state, pwm_lld_start(), PWM_READY, and PWM_STOP.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void pwmStop (PWMDriver pwmp ) 
    -
    -
    - -

    Deactivates the PWM peripheral.

    -
    Parameters:
    - - -
    [in] pwmp pointer to a PWMDriver object
    -
    -
    - -

    Definition at line 102 of file pwm.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, PWMDriver::pd_state, pwm_lld_stop(), PWM_READY, and PWM_STOP.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void pwmEnableChannel (PWMDriver pwmp,
    pwmchannel_t  channel,
    pwmcnt_t  width 
    )
    -
    -
    - -

    Enables a PWM channel.

    -

    Programs (or reprograms) a PWM channel.

    -
    Parameters:
    - - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] channel PWM channel identifier (0...PWM_CHANNELS-1)
    [in] width PWM pulse width as clock pulses number
    -
    -
    - -

    Definition at line 122 of file pwm.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, PWMDriver::pd_state, PWM_CHANNELS, pwm_lld_enable_channel(), and PWM_READY.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void pwmDisableChannel (PWMDriver pwmp,
    pwmchannel_t  channel 
    )
    -
    -
    - -

    Disables a PWM channel.

    -

    The channel is disabled and its output line returned to the idle state.

    -
    Parameters:
    - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] channel PWM channel identifier (0...PWM_CHANNELS-1)
    -
    -
    - -

    Definition at line 144 of file pwm.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, PWMDriver::pd_state, PWM_CHANNELS, pwm_lld_disable_channel(), and PWM_READY.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void pwm_lld_init (void  ) 
    -
    -
    - -

    Low level PWM driver initialization.

    - -

    Definition at line 206 of file platforms/STM32/pwm_lld.c.

    - -

    References PWMDriver::pd_enabled_channels, PWMDriver::pd_tim, and pwmObjectInit().

    - -

    Referenced by pwmInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void pwm_lld_start (PWMDriver pwmp ) 
    -
    -
    - -

    Configures and activates the PWM peripheral.

    -
    Parameters:
    - - - -
    [in] pwmp pointer to the PWMDriver object
    [in] pwmp pointer to a PWMDriver object
    -
    -
    - -

    Definition at line 258 of file platforms/STM32/pwm_lld.c.

    - -

    References CORTEX_PRIORITY_MASK, NVICEnableVector(), PWMConfig::pc_arr, PWMConfig::pc_callback, PWMConfig::pc_channels, PWMConfig::pc_cr2, PWMConfig::pc_psc, PWMChannelConfig::pcc_mode, PWMDriver::pd_config, PWMDriver::pd_enabled_channels, PWMDriver::pd_state, PWMDriver::pd_tim, PWM_OUTPUT_ACTIVE_HIGH, PWM_OUTPUT_ACTIVE_LOW, PWM_STOP, STM32_PWM1_IRQ_PRIORITY, STM32_PWM2_IRQ_PRIORITY, STM32_PWM3_IRQ_PRIORITY, and STM32_PWM4_IRQ_PRIORITY.

    - -

    Referenced by pwmStart().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void pwm_lld_stop (PWMDriver pwmp ) 
    -
    -
    - -

    Deactivates the PWM peripheral.

    -
    Parameters:
    - - - -
    [in] pwmp pointer to the PWMDriver object
    [in] pwmp pointer to a PWMDriver object
    -
    -
    - -

    Definition at line 370 of file platforms/STM32/pwm_lld.c.

    - -

    References NVICDisableVector(), PWMDriver::pd_enabled_channels, PWMDriver::pd_state, PWMDriver::pd_tim, and PWM_READY.

    - -

    Referenced by pwmStop().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void pwm_lld_enable_channel (PWMDriver pwmp,
    pwmchannel_t  channel,
    pwmcnt_t  width 
    )
    -
    -
    - -

    Enables a PWM channel.

    -
    Parameters:
    - - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] channel PWM channel identifier (0...PWM_CHANNELS-1)
    [in] width PWM pulse width as clock pulses number
    -
    -
    - -

    Definition at line 421 of file platforms/STM32/pwm_lld.c.

    - -

    References PWMConfig::pc_channels, PWMChannelConfig::pcc_callback, PWMDriver::pd_config, PWMDriver::pd_enabled_channels, and PWMDriver::pd_tim.

    - -

    Referenced by pwmEnableChannel().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void pwm_lld_disable_channel (PWMDriver pwmp,
    pwmchannel_t  channel 
    )
    -
    -
    - -

    Disables a PWM channel.

    -

    The channel is disabled and its output line returned to the idle state.

    -
    Parameters:
    - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] channel PWM channel identifier (0...PWM_CHANNELS-1)
    -
    -
    - -

    Definition at line 446 of file platforms/STM32/pwm_lld.c.

    - -

    References PWMDriver::pd_enabled_channels, and PWMDriver::pd_tim.

    - -

    Referenced by pwmDisableChannel().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___p_w_m.png b/ChibiOS_2.0.8/docs/html/group___p_w_m.png deleted file mode 100644 index 78cb6ea1096eb6cddb46b544e240b9f93f442b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4270 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 - -ChibiOS/RT: PWM Low Level Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - -
    -
    - -
    -

    PWM Low Level Driver
    - -[PWM Driver] -

    -
    -
    - -

    PWM Driver low level driver template. -More...

    - -

    -Collaboration diagram for PWM Low Level Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    PWM Driver low level driver template.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  PWMChannelConfig
     PWM driver channel configuration structure. More...
    struct  PWMConfig
     Driver configuration structure. More...
    struct  PWMDriver
     Structure representing an PWM driver. More...

    -Defines

    #define PWM_CHANNELS   1
     Number of PWM channels per PWM driver.
    #define PWM_FRACTION_TO_WIDTH(pwmp, numerator, denominator)   0
     Converts from fraction to pulse width.
    #define PWM_DEGREES_TO_WIDTH(pwmp, degrees)   PWM_FRACTION_TO_WIDTH(pwmp, 36000, degrees)
     Converts from degrees to pulse width.
    #define PWM_PERCENTAGE_TO_WIDTH(pwmp, percentage)   PWM_FRACTION_TO_WIDTH(pwmp, 10000, percentage)
     Converts from percentage to pulse width.

    -Typedefs

    typedef uint8_t pwmchannel_t
     PWM channel type.
    typedef uint16_t pwmcnt_t
     PWM counter type.
    typedef struct PWMDriver PWMDriver
     Type of a structure representing an PWM driver.
    typedef void(* pwmcallback_t )(PWMDriver *pwmp)
     PWM notification callback type.

    -Functions

    void pwm_lld_init (void)
     Low level PWM driver initialization.
    void pwm_lld_start (PWMDriver *pwmp)
     Configures and activates the PWM peripheral.
    void pwm_lld_stop (PWMDriver *pwmp)
     Deactivates the PWM peripheral.
    bool_t pwm_lld_is_enabled (PWMDriver *pwmp, pwmchannel_t channel)
     Determines whatever the PWM channel is already enabled.
    void pwm_lld_enable_channel (PWMDriver *pwmp, pwmchannel_t channel, pwmcnt_t width)
     Enables a PWM channel.
    void pwm_lld_disable_channel (PWMDriver *pwmp, pwmchannel_t channel)
     Disables a PWM channel.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PWM_CHANNELS   1
    -
    -
    - -

    Number of PWM channels per PWM driver.

    - -

    Definition at line 52 of file templates/pwm_lld.h.

    - -

    Referenced by pwmDisableChannel(), and pwmEnableChannel().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define PWM_FRACTION_TO_WIDTH( pwmp,
     numerator,
     denominator 
    )   0
    -
    -
    - -

    Converts from fraction to pulse width.

    -
    Note:
    Be careful with rounding errors, this is integer math not magic. You can specify tenths of thousandth but make sure you have the proper hardware resolution by carefully choosing the clock source and prescaler settings, see PWM_COMPUTE_PSC.
    -
    Parameters:
    - - - -
    [in] numerator numerator of the fraction
    [in] denominator percentage as an integer between 0 and numerator
    -
    -
    -
    Returns:
    The pulse width to be passed to pwmEnableChannel().
    - -

    Definition at line 160 of file templates/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define PWM_DEGREES_TO_WIDTH( pwmp,
     degrees 
    )   PWM_FRACTION_TO_WIDTH(pwmp, 36000, degrees)
    -
    -
    - -

    Converts from degrees to pulse width.

    -
    Note:
    Be careful with rounding errors, this is integer math not magic. You can specify hundredths of degrees but make sure you have the proper hardware resolution by carefully choosing the clock source and prescaler settings, see PWM_COMPUTE_PSC.
    -
    Parameters:
    - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] degrees degrees as an integer between 0 and 36000
    -
    -
    -
    Returns:
    The pulse width to be passed to pwmEnableChannel().
    - -

    Definition at line 175 of file templates/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define PWM_PERCENTAGE_TO_WIDTH( pwmp,
     percentage 
    )   PWM_FRACTION_TO_WIDTH(pwmp, 10000, percentage)
    -
    -
    - -

    Converts from percentage to pulse width.

    -
    Note:
    Be careful with rounding errors, this is integer math not magic. You can specify tenths of thousandth but make sure you have the proper hardware resolution by carefully choosing the clock source and prescaler settings, see PWM_COMPUTE_PSC.
    -
    Parameters:
    - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] percentage percentage as an integer between 0 and 10000
    -
    -
    -
    Returns:
    The pulse width to be passed to pwmEnableChannel().
    - -

    Definition at line 191 of file templates/pwm_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint8_t pwmchannel_t
    -
    -
    - -

    PWM channel type.

    - -

    Definition at line 66 of file templates/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint16_t pwmcnt_t
    -
    -
    - -

    PWM counter type.

    - -

    Definition at line 71 of file templates/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef struct PWMDriver PWMDriver
    -
    -
    - -

    Type of a structure representing an PWM driver.

    - -

    Definition at line 76 of file templates/pwm_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef void(* pwmcallback_t)(PWMDriver *pwmp)
    -
    -
    - -

    PWM notification callback type.

    -
    Parameters:
    - - -
    [in] pwmp pointer to a PWMDriver object
    -
    -
    - -

    Definition at line 83 of file templates/pwm_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void pwm_lld_init (void  ) 
    -
    -
    - -

    Low level PWM driver initialization.

    - -

    Referenced by pwmInit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void pwm_lld_start (PWMDriver pwmp ) 
    -
    -
    - -

    Configures and activates the PWM peripheral.

    -
    Parameters:
    - - -
    [in] pwmp pointer to the PWMDriver object
    -
    -
    - -

    Referenced by pwmStart().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void pwm_lld_stop (PWMDriver pwmp ) 
    -
    -
    - -

    Deactivates the PWM peripheral.

    -
    Parameters:
    - - -
    [in] pwmp pointer to the PWMDriver object
    -
    -
    - -

    Referenced by pwmStop().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool_t pwm_lld_is_enabled (PWMDriver pwmp,
    pwmchannel_t  channel 
    )
    -
    -
    - -

    Determines whatever the PWM channel is already enabled.

    -
    Parameters:
    - - - -
    [in] pwmp pointer to the PWMDriver object
    [in] channel PWM channel identifier
    -
    -
    -
    Returns:
    The PWM channel status.
    -
    Return values:
    - - - -
    FALSE the channel is not enabled.
    TRUE the channel is enabled.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void pwm_lld_enable_channel (PWMDriver pwmp,
    pwmchannel_t  channel,
    pwmcnt_t  width 
    )
    -
    -
    - -

    Enables a PWM channel.

    -
    Parameters:
    - - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] channel PWM channel identifier (0...PWM_CHANNELS-1)
    [in] width PWM pulse width as clock pulses number
    -
    -
    - -

    Referenced by pwmEnableChannel().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void pwm_lld_disable_channel (PWMDriver pwmp,
    pwmchannel_t  channel 
    )
    -
    -
    - -

    Disables a PWM channel.

    -

    The channel is disabled and its output line returned to the idle state.

    -
    Parameters:
    - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] channel PWM channel identifier (0...PWM_CHANNELS-1)
    -
    -
    - -

    Referenced by pwmDisableChannel().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:58 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___p_w_m___l_l_d.png b/ChibiOS_2.0.8/docs/html/group___p_w_m___l_l_d.png deleted file mode 100644 index 2d2ec49040ade0913354af45280bc707c9d0130b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3738 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 Y)Aj9+k?Vyn1_lNOPgg&ebxsLQ0IBFPLjV8( diff --git a/ChibiOS_2.0.8/docs/html/group___p_w_m_ga1c8ae46921c4ae7d57bd44dd994e10bd_cgraph.png b/ChibiOS_2.0.8/docs/html/group___p_w_m_ga1c8ae46921c4ae7d57bd44dd994e10bd_cgraph.png deleted file mode 100644 index 948a0fe54de76767411a3dfd7290bd10303813bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1006 zcmeAS@N?(olHy`uVBq!ia0y~yU^v0Rz@W;(#=yY9-n8rx0|NtFlDE4H!+#K5uy^@n zkVJ{6uPgg4ZW&%Kj(1J_O&A!MCwRIzhE&XXd*^)iKiOSe7Xf_jN

    -e*!NOF zX@-%k!}Jet*)8YGo@dbD=_|GJ!~ZXMD?j6tS$>p7U$Pa8ZpRBQV?Sn- zq}xyRd)aJHrIp9)>HA;tIX;b{u0EqYs4iimyTEtJJGElp=Uohaeec)3vOB+jPu+d} zvQ3x4|1y zlPpj%8!hW{qhOZM$wayFLsO#gj;+4DL?JpkfSK^yprkMI^Hpn$ zDb-e~SyhjF9n&Xe_-5q>>x3TvlE)wQ{r9?E4Ef>n>dr7+Wjtl@I9aXvWb*M3X@!M< zmbV=Xl|8ZBHe>JP*FyWbU#$50cU!jq59NB^NisED3>_N|_sBKaF`Mk%d^mXZ>c{te z-Nh$msc_sbTzu`iUQtuY{h7CUl>RU=q{*$mE`2^cOl{w>!Wj~`uH3A9^e*Eh$0UK7 zK7UvJ$)0D^Sugf_#e^pwY8YuQ;NH<&)#)MOv**q=m2J{H_1&s7pzFnhy-BKX>fh~~ yZGWmV0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj+|!Tl*I=Ft8|kx;TbZ%y~O^f4+#j$npL8=EqoPm~g!3>YR7Q z(e0F|-5>KAOj0bNN~&{Ko9HPe27c0xouaVl$VLH?pX^GvnKT1uH7L0@u?gKg?ivsk zk?_V-FgmJj?#-LGBhSCR`(1f$+4r+&X218a&cA==XAOg5i+~dclwfh;`KHgX zmFrfw8GVg4opI_^mTUpvn|b}(OZSO%KEM3sQoPs0GLeUV+p8bXU+`+xM03xhN!w$0 z-}!y%;i`jM>(%$@8h%ncelO*;^ZbB)>eIXT+tyY~oz9Y2)R5r9lDvDmI>XLIQ*68^ z?TnwC@@})mJc;+$b-Olmtmm)tlh-OkERu3TI!{_&Y_d2Wr3?Y#|a4w)Kjyj~wK%j~V| z-J?@=Dlay#^!3GOxAfMZnKt*u^xG3x18zbPNu5tQZaa*W{*_X>H}M@RF%zmi|rI3&XYm=hZ}8%I;z``6+NO(z^| zxqnolMIx~Qg)qzuTDNZ9qN|Vc7hO3z;g23$!VgH=O_FLRCyj+|!Tl*I=FfiZtba4!+nDh3IzrV1f1lx!7Z6QpCiXZ(ivFfYE zd_A?4JV$tA+CBBP_DGnXeEVrj@^SbxcH3BM2XjSu-(L^V!5H4+mS7e2dU zx@fnnj;`*~xow=U8Qv|M>monFQF?A(x}(d*jSihU$Cy+%NpMd&k)#u#)SbG^!F%bY zndx``eLi-)cfRVn=$o1%@9t}hJX^PHZZ~64<&W*J`}(c@uSi__p40Mef8?*m=asT= z&(BySu!-Y|-0r+o;R9KV3lkqdc<^xj7UAs4M{e40__&|1=w6+$(9FXg?4j1Zw{ri? zb^m_L{+|5uyD^LUZ1dy3mg<*W47St^oF;Vs)6d7u*Vpcml3nZ5+kc){s$*^0#0~Ej zSHG2)7dal!;Uw&DULWy2bo*v@yH{*f&087L^t|$ejsAy}ytn+(ecPo1g4zY)Guut3K0{ZP~{TACBeW zy}RL2o|xj1(;CM;HKm<8Y#MHT{J7n1@4w9NFJ5?CA6@zTf?CE)iKoo-Hb^*r-YOhi zp0m4B^;ksXs?#^OOq>2s#z!o3j`>u#$JVQ^x`*B2e6&mSt)1pY0j5gLkHH)toxC>2 zt?hfmpnX2sXQ^KLWQ&uf*J}fx@$XK%alYTxlW9-N#fzV|7I`TG^+XK#IaKU00`0v(a%(mdKI;Vst0R4~y$N&HU diff --git a/ChibiOS_2.0.8/docs/html/group___p_w_m_ga8a4d0d8a47883efe286a332cade14080_cgraph.png b/ChibiOS_2.0.8/docs/html/group___p_w_m_ga8a4d0d8a47883efe286a332cade14080_cgraph.png deleted file mode 100644 index 69d01cef82b882e80bf60c6f1dda440bb7fe7a59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1058 zcmeAS@N?(olHy`uVBq!ia0y~yV7Se|z@W;(#=yXET6&Hq0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj+|!Tl*I=FfbqSba4!+nDchd-u%lB636Cu3r`4em9)B|oAgSa zAt|BLWpR&AY?IZO_yuR>FD&I|_V&IhA>jN|Ky*ct15@DAP|3)f5)w@w8Le6zkCZd} z7E0`F*Z+9@X5ZxJ+iyJIUHx~-UibIaebEg9P8^CYAR^_6;H=l(3|*dFCmHe?)-2am zVse%FALsdJ&Etx_a}?G~*04IHmX(?LInGQ>PiJSirFpvJ6f1)$!|Y6M$s#R=ZF{Ur z(wuk39Q*XCD5q;vOKRked-wdJ+ceiL*G)JvaaUi=BrOif)C@Bxp{6ut6-78>i@!2^ zZ_vt;MX{@|{);U?=gxY2-8)ZBImWqX-5#H-yH&-bT=?hj`r<2J+k0nA%`})jeWBaM z6umB|6G{ndZe-bmU)?!#ruQ;ilK1t%s+jlJ!=A4$Y|7#^3g0`w z>WkFkKJL|_-5YIZPtLrf_Tkla-Lmp!L60q-?+Oai)!bY1eLdISUOk_iX9lRt)%2ZN-?7S@TEh*fG6Bo6hOg{3@wd z_RZy7khY=mz>J$E-SwP@C;#V8UD7U(kKY*>7#KWV{an^LB{Ts5QnlkL diff --git a/ChibiOS_2.0.8/docs/html/group___p_w_m_ga8a4d803d25a5326b48b3713ffd5fce53_cgraph.png b/ChibiOS_2.0.8/docs/html/group___p_w_m_ga8a4d803d25a5326b48b3713ffd5fce53_cgraph.png deleted file mode 100644 index 37b02a32958e7d6b3d67c1fc36a201a406e3593c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1178 zcmeAS@N?(olHy`uVBq!ia0y~yU}R-rU{K{?V_;zL_WdKwz`($k|H*Y zfq{X&#M9T6{T8N=jb*xYtWyUbM~*Y{$ZG=GV6=y_&*3|ZL0rMot6(pxdX?v`ac z%If82tu(&;J?+`sGjHCc?U&~`d2aUiXXYE;oA0l@naHRF1B;rDYsOWO!VAIs-Y>rX`l_s(n zB+cFPUsp`s^v`?Jvvb@HTWtB?E?s)LzPn`IDz9>bil0&inIVq~MV|4W6_r%}wd=)= z;`Ief1@c7I~ zaqGuc!)0@uS29^^+o0MR$9TRQhFV3wmR};#QG0EB6{WTcFxq*~ z?n&qBRi@2{4@>XY(b;oxWl90N(!ENDVq015riEI5D<3^?=dZ8%`r^gA@WYAsO%+o@ zxwoC19Qv(a`+SvK)cqIxBA-tv?Fq_fkC{42WYKo6(y3QZN^DXqERw%`tMT-V$7;LX z```UBl*qaEuO(4njp?N>RzcZSUd}ArLkm+)CcXXrUH^ZZdj13UWVvh8Bw~IqjeUDr zExbhL@{Ehy_8j+5em%X^Zqi2ol|Ibd8FQZ2HqSrey3Oa{ioaOfSce(!>X4!c-PY$=x46)tW)p!2nd$-VaOqbq%7vIOO_cyxS#-uVhUh_gq z$Dhx0pWBvK)&Kt#cz0vK-Wehs3(GKp@X#Cc&d1Mo;O& zk3XzAS2$HySC_U2OcOox?|b+e>DS-wBJ3|l#Oh2j5S^c)(;%NUD>wLmgP0%;oL%sr aVdH=O_FLRCyj+|!Tl*I=Fff1fba4!+nDh3It-p-B1p9~oo7n}6dK*e79tw=| z_ME6SY3I5429fFh0&7~F^VSCJ@^H$L+Px`7sYgVrzDeejccX|(aKyw#OFB}{BnB)= zh*V_!R#>?Go6(tfZ#Pw2fB*E~bNTMscV||Y%xbSJi(u%0g0?vkx9r$I_}*;%(y7Ye zAH!bgXTO^-;Y3ZMSx({RtK3pi2s64Y}{`EO-hCk9C@!goj z%dla?h6{58euY@y{B?IagWL|jqytwO*4*H$P-S;A*)k)?MKy7g;MA6rZXrTy(t(~y z<;vBbTcd2h?z@<=C!0S$T~a%Hew>l1Y5m>LP2LP)@%#4t6=~Sjx6+~O+WWf0&v!h2 zF1!79tzh^(bVItLQ{P(Qkq(`q!>hy&#I=JvNI*9Ijo@mF>l)f+i|K0D;^L%`2 z{suD2FP@mbbxV0w{x|dEC#Afn?R)lo=J{>KXFliD7HL13r5lsE$TPuO&iv$J?WvZ2 zKdjbGG4b|_mbsXG(XQD+bn)Bi^4%x4PxX4re}8@cuYZ5;{HVBl-q<86H6-HNQQ7|4 z6D}I*WX`cMRGFJUZSkanzP0sR{1v%0m2)SX&-t(|Ijws6NqOHDe)FfB?Q{HM_wkD` z!*qA|)WWQ+e;c2_EZSVj?)V{o+QS@S-P2z~77B~L6w<5mGs(Qv7hG~?`IkSY(IJ

    t}!^rZdXkY*TeQZAeHf{eNyLpPiU4w9g z$v5L}u>~uh6x-f3b9MBktm&n1{AzbSJUe^sQf_fQ>%FhzSxgzigXc&su$>sP@#n9v zi_i1%|KC$y^vVC0OZV(G+di%NFn9Niic51QtF8+wFXGl#p6s<}(Xqa5tvT1bJylb; z_=mBx_x3h7w_V=-thWALu!_oTtv=U)z@zIKriHp+D=Xh$-+JxHFZ09hGgW7Dr}0Fd zI`N_QMA_f#nP;5pJ8rP8VvO*#mTXUz-Zyv8x%aca|J^xTX~pVO5jU2ta#u3qdSEUX z8TK`-ysYlW=@+X!+9qr5RT}Vw7P1VBf&+@`Y95duZy`n}0s; zeEi|ksojnbQ<|06-#KZYq^Zx#=LRsdy{O^CMYjIBQU7_M*wrG;U%?>Z2-Ht{I z|9AEJ&1NikV%5PY{<~f|H_PI8xkt?wxve_!DgA|i@ABSmhUUEvpM1vnY?I^4-E~(O Q7#J8lUHx3vIVCg!05qZ(82|tP diff --git a/ChibiOS_2.0.8/docs/html/group___p_w_m_gac2679d11833a4ea9df5a9ed2e4a2c2e7_cgraph.png b/ChibiOS_2.0.8/docs/html/group___p_w_m_gac2679d11833a4ea9df5a9ed2e4a2c2e7_cgraph.png deleted file mode 100644 index a47053c70c2c1014fd8a619767936ae3f9ba30d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1303 zcmeAS@N?(olHy`uVBq!ia0y~yV02|*U{K{?V_;yo`u+E21_lPUByV>YhW{YAVDIwD z3=9nHC7!;n?6EaktG3V{w^Vu?~66_z|8+SgN5UuCCE#Siv zcK)Ru3Qs2Ntq>I9{}{mk$Ub2E1II4{Oqxm^+y3nc(cj9lcJG%9vs+l+9Bh8zxkMn~ zV##GOO|xYZ<(vE4OCG;IZEgJC`u&-6IluloWPU#P`|<3|?(;2-Q3*Vi#c4Bw{6@QSl$w$&Y;7zBdT0L zs=Aw@s%-IU4JL+Z)23aCt`>~zL$Iscs zmQUka@wNKa$4$>Z%gWDQ{K6_!JNNFD|C27Oyng+JCDtL%>P*YjF8c_tM|`jrfvGY) zp6~8kU4N_ctkwO6md#T(1#jt|ygJ~9tIqq16MQ=BA3S^dMfZWCWsOnG7JDx15J8)7 zAHJuD6l!_?dY+zsejW3UJ=?$k*joMl-tWy1u9PVj?rl(g8gc96mVNsqlYT!J{kWyl zX}`vgC!ZtLSJ!(~XPiq|D&l&*`|@&*v|j$$`*#-3JgWM3Ui7_LuJ5j<&TTj9`TX~= z15*MMgG-5{=-ZVm_uJ2&ZCzbk{=GfEye!XQtGw0x)w=6B(t7(J-l}Z-w!M7+q>I;O zCaXT%7jy3?*WWptL#pl<>AchY_2DjK+c|MJe1e1h6Vje7-IdoNA9S?OeLJTh z!vvNK)0Z#zPpbN*!ce2}>A~FS?Rs`AOj0)ge8=GYe6^F0Ui8xMq2Bvz%x>;Jy5?^3 znJByL9rI$^C{QUC?_gnd5P1#*} z3t4lPGp-ShtE+qP|HHPh$p>N>nIY;|$0sJ?{ns;+$9l#Bf*9y_1VASvh|y0=;V{4ZsN=`L#PN_NZt2`jhr zca_hYV!AKO_k8%S7mH5BDv7E##WHvZRfdP|e^sXcC*-J+=$Xi8e|+`ze9wnly%Sk! z=DF$ruWQ$i@4r5``NWkU?`xMW?q;1htHX6-$B6@|nKEd;oqXebejh&f7w=0qzGE=? yHpkxHW~+vtzJBi( z0|NtliKnkC`z>x6UM|j=t^JD_7+8uuT^vIy=DfXoHcvWKg#E++nN~VYENfQX;8u}i zxWfKIsgfxyF>xA4r>Lij+0+S4{0vPT5eM419)*+~7HfIp5wa@c!^KtHF5-80tc&Ih zl~A3y;mu*CGQ;iVcJI#2)j$7VJ+kxo_j%RFq~zy*bP;aoK!6O^&eYqf4Ef@7IYb{Z z9O&IN+2iHxO~MOqRloX?AIY|tBcZyucymX~3Wejxk28G8J(-!Z(e{7k-YYsQ)@@6) z{Florz_4Ne{`uKvA!{lb*X+K|_~n#eQ5`~pd2({C&Zf)3yz6@1&j07w zW3Fv&nKkVUYe687m~2o)xyZLWbM^~_CoDR4dzb0wtsC+#%t_ZS^Gs?xy6LFrZv9gA zrsp9~c?D}%->tI|y7^a%qw4U(_Wfx*d+&5I{x9WDdoJ+p&Yb@$Pp9nMaV9n{Sm*Yc zh;1J|ul3EEZnAzwY0Nj}xBpU~EoF|;6WZ34D7JgU&&0w*TrMGwy{C0E8~rxF58N2D z&3xf!k%PDXZ0BXLUbVUW*4w$&tA1>{dTH^&2M_X2T{wO8Y}u(PUrJ2%`n>t{9-n<4 z*lLwyd;QRSHT~P~*ZmgUcGuKDJ&tR^Tj!Ze9=M+E@0K^c_HA$CB#Xq)kFFJ;JUDf| zMd^ZHOC5*gBDLp!-ur)S4_3SP?>kUZ^+@R4H^;)Cb?3^rC%)Fmoz&wgWUN;| zy>wBM``+_*Kf01byWca!-q^KlNlj^ZWRbzoH$QH@z3a@-evfI{f?01W!lqUlUh!^- z*;Vn;*JpWseCF1;AE_399(cWz(^usxH-MO^Mi`)6_cea0S{;%J@ zG)LUAEA5#;IL{fw!byiPfLy7l$0m0|{^j552*yh3t6J4OAv8)7wg@48k0 z-kbc{bNTSB4!+Q*uUfgQat(g`*k%|y(dNIBmDMWo*B>_*-DeE4)#;L3(9ig?^Gwy@ zhX;M1{8_qPJyYN2$E^9&S3R3L`wZ)ZyYfpHu5xFn;+Ny8XISTN+kXBx^K8?)P;Rf# z&!>2;9kiyLu)oiG(D-%pLHG33=T1kMJX&|v|G#X1`dnj1V|laUqGL&nD#!%aUXD#l z|J^2roi=L--PNcS8X*3>Uf|^MSGK!WtlxCs+V0i=6`w!)yCA@nJNuKaS}`-H%{b1$ Pz`)??>gTe~DWM4fq0C(< diff --git a/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l.html b/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l.html deleted file mode 100644 index a1bd4e9..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l.html +++ /dev/null @@ -1,1223 +0,0 @@ - - -ChibiOS/RT: Serial Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -


    - - -
    - -
    -

    Serial Driver
    - -[HAL] -

    -
    -
    - -

    Generic Serial Driver. -More...

    - -

    -Collaboration diagram for Serial Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Generic Serial Driver.

    -

    This module implements a generic full duplex serial driver. The driver implements a SerialDriver interface and uses I/O Queues for communication between the upper and the lower driver. Event flags are used to notify the application about incoming data, outgoing data and other I/O events.
    - The module also contains functions that make the implementation of the interrupt service routines much easier.

    - - - - - - - - - -

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialDriverVMT
     SerialDriver virtual methods table. More...
    struct  _SerialDriver
     Full duplex serial driver class. More...

    -Modules

     Serial Low Level Driver
     

    Serial Driver low level driver template.

    -

    -Defines

    #define SD_NO_ERROR   0
     No pending conditions.
    #define SD_CONNECTED   1
     Connection happened.
    #define SD_DISCONNECTED   2
     Disconnection happened.
    #define SD_PARITY_ERROR   4
     Parity error happened.
    #define SD_FRAMING_ERROR   8
     Framing error happened.
    #define SD_OVERRUN_ERROR   16
     Overflow happened.
    #define SD_NOISE_ERROR   32
     Noise on the line.
    #define SD_BREAK_DETECTED   64
     Break detected.
    #define SERIAL_DEFAULT_BITRATE   38400
     Default bit rate.
    #define SERIAL_BUFFERS_SIZE   64
     Serial buffers size.
    #define _serial_driver_methods   _base_asynchronous_channel_methods
     SerialDriver specific methods.
    #define sdPutWouldBlock(sdp)   chOQIsFull(&(sdp)->oqueue)
     Direct output check on a SerialDriver.
    #define sdGetWouldBlock(sdp)   chIQIsEmpty(&(sdp)->iqueue)
     Direct input check on a SerialDriver.
    #define sdPut(sdp, b)   chOQPut(&(sdp)->oqueue, b)
     Direct write to a SerialDriver.
    #define sdPutTimeout(sdp, b, t)   chOQPutTimeout(&(sdp)->iqueue, b, t)
     Direct write to a SerialDriver with timeout specification.
    #define sdGet(sdp)   chIQGet(&(sdp)->iqueue)
     Direct read from a SerialDriver.
    #define sdGetTimeout(sdp, t)   chIQGetTimeout(&(sdp)->iqueue, t)
     Direct read from a SerialDriver with timeout specification.
    #define sdWrite(sdp, b, n)   chOQWriteTimeout(&(sdp)->oqueue, b, n, TIME_INFINITE)
     Direct blocking write to a SerialDriver.
    #define sdWriteTimeout(sdp, b, n, t)   chOQWriteTimeout(&(sdp)->oqueue, b, n, t)
     Direct blocking write to a SerialDriver with timeout specification.
    #define sdAsynchronousWrite(sdp, b, n)   chOQWriteTimeout(&(sdp)->oqueue, b, n, TIME_IMMEDIATE)
     Direct non-blocking write to a SerialDriver.
    #define sdRead(sdp, b, n)   chIQReadTimeout(&(sdp)->iqueue, b, n, TIME_INFINITE)
     Direct blocking read from a SerialDriver.
    #define sdReadTimeout(sdp, b, n, t)   chIQReadTimeout(&(sdp)->iqueue, b, n, t)
     Direct blocking read from a SerialDriver with timeout specification.
    #define sdAsynchronousRead(sdp, b, n)   chIQReadTimeout(&(sdp)->iqueue, b, n, TIME_IMMEDIATE)
     Direct non-blocking read from a SerialDriver.
    #define sdGetStatusChangeEventSource(ip)   (&((ip)->vmt->sevent))
     Returns the status change event source.

    -Typedefs

    typedef struct _SerialDriver SerialDriver
     Structure representing a serial driver.

    -Enumerations

    enum  sdstate_t { SD_UNINIT = 0, -SD_STOP = 1, -SD_READY = 2 - }
     

    Driver state machine possible states.

    - More...

    -Functions

    void sdInit (void)
     Serial Driver initialization.
    void sdObjectInit (SerialDriver *sdp, qnotify_t inotify, qnotify_t onotify)
     Initializes a generic full duplex driver object.
    void sdStart (SerialDriver *sdp, const SerialConfig *config)
     Configures and starts the driver.
    void sdStop (SerialDriver *sdp)
     Stops the driver.
    void sdIncomingDataI (SerialDriver *sdp, uint8_t b)
     Handles incoming data.
    msg_t sdRequestDataI (SerialDriver *sdp)
     Handles outgoing data.
    void sdAddFlagsI (SerialDriver *sdp, sdflags_t mask)
     Handles communication events/errors.
    sdflags_t sdGetAndClearFlags (SerialDriver *sdp)
     Returns and clears the errors mask associated to the driver.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define SD_NO_ERROR   0
    -
    -
    - -

    No pending conditions.

    - -

    Definition at line 45 of file serial.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_CONNECTED   1
    -
    -
    - -

    Connection happened.

    - -

    Definition at line 47 of file serial.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_DISCONNECTED   2
    -
    -
    - -

    Disconnection happened.

    - -

    Definition at line 49 of file serial.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_PARITY_ERROR   4
    -
    -
    - -

    Parity error happened.

    - -

    Definition at line 51 of file serial.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_FRAMING_ERROR   8
    -
    -
    - -

    Framing error happened.

    - -

    Definition at line 53 of file serial.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_OVERRUN_ERROR   16
    -
    -
    - -

    Overflow happened.

    - -

    Definition at line 55 of file serial.h.

    - -

    Referenced by sdIncomingDataI().

    - -
    -
    - -
    -
    - - - - -
    #define SD_NOISE_ERROR   32
    -
    -
    - -

    Noise on the line.

    - -

    Definition at line 57 of file serial.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_BREAK_DETECTED   64
    -
    -
    - -

    Break detected.

    - -

    Definition at line 59 of file serial.h.

    - -
    -
    - -
    -
    - - - - -
    #define SERIAL_DEFAULT_BITRATE   38400
    -
    -
    - -

    Default bit rate.

    -

    Configuration parameter, this is the baud rate selected for the default configuration.

    - -

    Definition at line 71 of file serial.h.

    - -
    -
    - -
    -
    - - - - -
    #define SERIAL_BUFFERS_SIZE   64
    -
    -
    - -

    Serial buffers size.

    -

    Configuration parameter, you can change the depth of the queue buffers depending on the requirements of your application.

    -
    Note:
    The default is 64 bytes for both the transmission and receive buffers.
    - -

    Definition at line 82 of file serial.h.

    - -

    Referenced by sdObjectInit().

    - -
    -
    - -
    -
    - - - - -
    #define _serial_driver_methods   _base_asynchronous_channel_methods
    -
    -
    - -

    SerialDriver specific methods.

    - -

    Definition at line 116 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define sdPutWouldBlock( sdp )    chOQIsFull(&(sdp)->oqueue)
    -
    -
    - -

    Direct output check on a SerialDriver.

    -

    This function bypasses the indirect access to the channel and checks directly the output queue. This is faster but cannot be used to check different channels implementations.

    -
    See also:
    chIOPutWouldBlock()
    - -

    Definition at line 151 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define sdGetWouldBlock( sdp )    chIQIsEmpty(&(sdp)->iqueue)
    -
    -
    - -

    Direct input check on a SerialDriver.

    -

    This function bypasses the indirect access to the channel and checks directly the input queue. This is faster but cannot be used to check different channels implementations.

    -
    See also:
    chIOGetWouldBlock()
    - -

    Definition at line 161 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define sdPut( sdp,
     b 
    )   chOQPut(&(sdp)->oqueue, b)
    -
    -
    - -

    Direct write to a SerialDriver.

    -

    This function bypasses the indirect access to the channel and writes directly on the output queue. This is faster but cannot be used to write to different channels implementations.

    -
    See also:
    chIOPut()
    - -

    Definition at line 171 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define sdPutTimeout( sdp,
     b,
     t 
    )   chOQPutTimeout(&(sdp)->iqueue, b, t)
    -
    -
    - -

    Direct write to a SerialDriver with timeout specification.

    -

    This function bypasses the indirect access to the channel and writes directly on the output queue. This is faster but cannot be used to write to different channels implementations.

    -
    See also:
    chIOPutTimeout()
    - -

    Definition at line 181 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define sdGet( sdp )    chIQGet(&(sdp)->iqueue)
    -
    -
    - -

    Direct read from a SerialDriver.

    -

    This function bypasses the indirect access to the channel and reads directly from the input queue. This is faster but cannot be used to read from different channels implementations.

    -
    See also:
    chIOGet()
    - -

    Definition at line 191 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define sdGetTimeout( sdp,
     t 
    )   chIQGetTimeout(&(sdp)->iqueue, t)
    -
    -
    - -

    Direct read from a SerialDriver with timeout specification.

    -

    This function bypasses the indirect access to the channel and reads directly from the input queue. This is faster but cannot be used to read from different channels implementations.

    -
    See also:
    chIOGetTimeout()
    - -

    Definition at line 201 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define sdWrite( sdp,
     b,
     n 
    )   chOQWriteTimeout(&(sdp)->oqueue, b, n, TIME_INFINITE)
    -
    -
    - -

    Direct blocking write to a SerialDriver.

    -

    This function bypasses the indirect access to the channel and writes directly to the output queue. This is faster but cannot be used to write from different channels implementations.

    -
    See also:
    chIOWriteTimeout()
    - -

    Definition at line 211 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define sdWriteTimeout( sdp,
     b,
     n,
     t 
    )   chOQWriteTimeout(&(sdp)->oqueue, b, n, t)
    -
    -
    - -

    Direct blocking write to a SerialDriver with timeout specification.

    -

    This function bypasses the indirect access to the channel and writes directly to the output queue. This is faster but cannot be used to write from different channels implementations.

    -
    See also:
    chIOWriteTimeout()
    - -

    Definition at line 223 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define sdAsynchronousWrite( sdp,
     b,
     n 
    )   chOQWriteTimeout(&(sdp)->oqueue, b, n, TIME_IMMEDIATE)
    -
    -
    - -

    Direct non-blocking write to a SerialDriver.

    -

    This function bypasses the indirect access to the channel and writes directly to the output queue. This is faster but cannot be used to write from different channels implementations.

    -
    See also:
    chIOWriteTimeout()
    - -

    Definition at line 234 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define sdRead( sdp,
     b,
     n 
    )   chIQReadTimeout(&(sdp)->iqueue, b, n, TIME_INFINITE)
    -
    -
    - -

    Direct blocking read from a SerialDriver.

    -

    This function bypasses the indirect access to the channel and reads directly from the input queue. This is faster but cannot be used to read from different channels implementations.

    -
    See also:
    chIOReadTimeout()
    - -

    Definition at line 245 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define sdReadTimeout( sdp,
     b,
     n,
     t 
    )   chIQReadTimeout(&(sdp)->iqueue, b, n, t)
    -
    -
    - -

    Direct blocking read from a SerialDriver with timeout specification.

    -

    This function bypasses the indirect access to the channel and reads directly from the input queue. This is faster but cannot be used to read from different channels implementations.

    -
    See also:
    chIOReadTimeout()
    - -

    Definition at line 257 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define sdAsynchronousRead( sdp,
     b,
     n 
    )   chIQReadTimeout(&(sdp)->iqueue, b, n, TIME_IMMEDIATE)
    -
    -
    - -

    Direct non-blocking read from a SerialDriver.

    -

    This function bypasses the indirect access to the channel and reads directly from the input queue. This is faster but cannot be used to read from different channels implementations.

    -
    See also:
    chIOReadTimeout()
    - -

    Definition at line 268 of file serial.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define sdGetStatusChangeEventSource( ip )    (&((ip)->vmt->sevent))
    -
    -
    - -

    Returns the status change event source.

    -

    The status change event source is broadcasted when the channel status is updated, the status flags can then be fetched and cheared by using sdGetAndClearFlags().

    -
    Parameters:
    - - -
    [in] ip pointer to a SerialDriver object
    -
    -
    -
    Returns:
    A pointer to an EventSource object.
    - -

    Definition at line 280 of file serial.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef struct _SerialDriver SerialDriver
    -
    -
    - -

    Structure representing a serial driver.

    - -

    Definition at line 109 of file serial.h.

    - -
    -
    -

    Enumeration Type Documentation

    - -
    -
    - - - - -
    enum sdstate_t
    -
    -
    - -

    Driver state machine possible states.

    -
    Enumerator:
    - - - -
    SD_UNINIT  -

    Not initialized.

    -
    SD_STOP  -

    Stopped.

    -
    SD_READY  -

    Ready.

    -
    -
    -
    - -

    Definition at line 100 of file serial.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void sdInit (void  ) 
    -
    -
    - -

    Serial Driver initialization.

    - -

    Definition at line 110 of file serial.c.

    - -

    References sd_lld_init().

    - -

    Referenced by halInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void sdObjectInit (SerialDriver sdp,
    qnotify_t  inotify,
    qnotify_t  onotify 
    )
    -
    -
    - -

    Initializes a generic full duplex driver object.

    -

    The HW dependent part of the initialization has to be performed outside, usually in the hardware initialization code.

    -
    Parameters:
    - - - - -
    [out] sdp pointer to a SerialDriver structure
    [in] inotify pointer to a callback function that is invoked when some data is read from the Queue. The value can be NULL.
    [in] onotify pointer to a callback function that is invoked when some data is written in the Queue. The value can be NULL.
    -
    -
    - -

    Definition at line 128 of file serial.c.

    - -

    References chEvtInit, chIQInit(), chOQInit(), SERIAL_BUFFERS_SIZE, and _SerialDriver::vmt.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sdStart (SerialDriver sdp,
    const SerialConfig config 
    )
    -
    -
    - -

    Configures and starts the driver.

    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver object
    [in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
    -
    -
    - -

    Definition at line 148 of file serial.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, sd_lld_start(), SD_READY, and SD_STOP.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void sdStop (SerialDriver sdp ) 
    -
    -
    - -

    Stops the driver.

    -

    Any thread waiting on the driver's queues will be awakened with the message Q_RESET.

    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDrive object
    -
    -
    - -

    Definition at line 168 of file serial.c.

    - -

    References chDbgAssert, chDbgCheck, chIQResetI(), chOQResetI(), chSchRescheduleS(), chSysLock, chSysUnlock, sd_lld_stop(), SD_READY, and SD_STOP.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sdIncomingDataI (SerialDriver sdp,
    uint8_t  b 
    )
    -
    -
    - -

    Handles incoming data.

    -

    This function must be called from the input interrupt service routine in order to enqueue incoming data and generate the related events.

    -
    Note:
    The incoming data event is only generated when the input queue becomes non-empty.
    -
    -In order to gain some performance it is suggested to not use this function directly but copy this code directly into the interrupt service routine.
    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver structure
    [in] b the byte to be written in the driver's Input Queue
    -
    -
    - -

    Definition at line 198 of file serial.c.

    - -

    References chDbgCheck, chEvtBroadcastI(), chIQIsEmpty, chIQPutI(), Q_OK, SD_OVERRUN_ERROR, and sdAddFlagsI().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    msg_t sdRequestDataI (SerialDriver sdp ) 
    -
    -
    - -

    Handles outgoing data.

    -

    Must be called from the output interrupt service routine in order to get the next byte to be transmitted.

    -
    Note:
    In order to gain some performance it is suggested to not use this function directly but copy this code directly into the interrupt service routine.
    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDriver structure
    -
    -
    -
    Returns:
    The byte value read from the driver's output queue.
    -
    Return values:
    - - -
    Q_EMPTY if the queue is empty (the lower driver usually disables the interrupt source when this happens).
    -
    -
    - -

    Definition at line 221 of file serial.c.

    - -

    References chDbgCheck, chEvtBroadcastI(), chOQGetI(), and Q_OK.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sdAddFlagsI (SerialDriver sdp,
    sdflags_t  mask 
    )
    -
    -
    - -

    Handles communication events/errors.

    -

    Must be called from the I/O interrupt service routine in order to notify I/O conditions as errors, signals change etc.

    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver structure
    [in] mask condition flags to be added to the mask
    -
    -
    - -

    Definition at line 240 of file serial.c.

    - -

    References chDbgCheck, and chEvtBroadcastI().

    - -

    Referenced by sdIncomingDataI().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    sdflags_t sdGetAndClearFlags (SerialDriver sdp ) 
    -
    -
    - -

    Returns and clears the errors mask associated to the driver.

    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDriver structure
    -
    -
    -
    Returns:
    The condition flags modified since last time this function was invoked.
    - -

    Definition at line 255 of file serial.c.

    - -

    References chDbgCheck, chSysLock, and chSysUnlock.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l.png deleted file mode 100644 index 2604cacddcb56afc7067dd13f60a77e0b10dd4ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1621 zcmeAS@N?(olHy`uVBq!ia0y~yU@Tx@U{K{?V_;y2*4=cTfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}`J+eJ$m7+Al1x;TbZ%z1mqHzOugg#E++%FCHqlf70-8X0qL zyXGPICWs|-qiJ`O!pc)3pA}1=I%UpQ;7FRNx2x##lBVt;M;F~Iv4t1)oPy4J#g?iD zd1+^+-RkPw;+A&oOyR}8eLeYU_m0o~KJj0@KwG)-_qm_rp3U3&{@fEr7ZhNq#Ftym zAj4}tkwJ`cPM=jL!#Vf42dpN3x$b!Bm~89mk6-s5eAwB~tikYO*KJA30EU2WtIh^4 zh7I}m_jO$MSl8Ohs_=7tvr4ZuSNLhG=OG8A`AXHr7w_w_VifL^x9^)capH>09&19h zT6gZ;x#F^cD(B*Vy=icyYuk-x<{eApqTYLNWJL`Ab`R)HMwE6PC#|g*#glB6_{p8)y zv-;8EpqE#^2R?r?*(|qO)_d-;_>kmnw+*9Yr_a6qS%_1Z^-k|G#`d}gfB(ME^<2K1 zozZ92y1ott(X^V$QKI4cte5i(w|>tSH{N%2_k>f=+ucH53s3d>Y09v-;n1cMwO40q zi~?hl16z`g)Y;vdd-}$l?WH?gjBIL_sL!8oHRG(`eE;RE_cQ(Q5mk05>Mqwl+q(5* za(;1D&exjlhS6`YYxd3FvGy0M%FjO+pKrdo^776*4{}5Isx%og>{V+%;!(_)_2Uel$YL9J7@p0i>opfPSK(MP6Lx`%Z zg@ervZlC2dchufKd*<%>sheikvg{T5K5KdB<4>2bzyA6CYzSli_IWA(H+~p-`JWf= z&%JGC#hk$8uz%GRmkSb05_JVzkHx)tbNk!2u-aL-ea@EMetZAl3w8hPW;rk3pG{G_ zFMcpF^bOOJRjZ^K7XzoA^-O6sIQrMudk`BxjW_MF`RnZz3-Rh*{HoD4%=O~O8cyv z9KSp4*w@$oN|SHeawUZP|GWC0{=K;?PL=PxGi75<(~jET!E4st`+E6mX4&(l0VS(n zlr~>ylDN9HT%&Mz>;d0>pVtNIoU6Ndd2{Wa_3wAyl{SBNnSqTVgmH(=4yo>HzmV1D zvG;ooP6W9we_r*l?7rXT{QbYPQlFn&D{*_u z-{+Lrw5cf7fA7EP({~H9?OgKyOU&h2=_{74JF@rPX6ff=N@DyUZ8-Aa>1*rk5H0h% z^&xpR+;b|FXa7xJ?@{X$dd%fR#&X9Pt+Q(H*5&)1miu;d``_}pT}hv-s+KFgOTC}> znC))3vsJ9~&YF+MizJ12-nnvln(F%1uM!z^(OGVB^sCfnVPV5PcK1X6Ej#ae+u`i7!vF8WJ%8L-UpReT=l@yvy!d%+ ziX2#km9A+7+-F(9cVbrl0+DXxLQA`+cR89ZD?h0`d-iPKp;^}%C!Ce54s$ssza>3n ztJ%`Z@((7 z4HcDVxFMLECbCZWYY^vWhG*^V{d+cVN|I$*W6oHs`sz$aQ^a-FJ9(KeujDhFW3sR| zF|m~>wG-)G9d5slVF$wlC$-OI^Rwiq>u7A0o5hs3eM`x!v@4bYU*6sM`6TX&r2y+j zzUv1%JLLFu9=N!09%b@#nGyhIUVZ0$#wjE6M>xZT9sgJ4Y}>G*AtdYW-Ir!2)Ai%~ ztXL;cGI*yEqx(8$H`BXcaoUdXKf|&`KD{kW_g*qE PFfe$!`njxgN@xNA(6|;p diff --git a/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l___l_l_d.html b/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l___l_l_d.html deleted file mode 100644 index 38a457e..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l___l_l_d.html +++ /dev/null @@ -1,225 +0,0 @@ - - -ChibiOS/RT: Serial Low Level Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Serial Low Level Driver
    - -[Serial Driver] -

    -
    -
    - -

    Serial Driver low level driver template. -More...

    - -

    -Collaboration diagram for Serial Low Level Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Serial Driver low level driver template.

    -

    This file is a template for a serial low level driver.

    - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define _serial_driver_data
     SerialDriver specific data.

    -Typedefs

    typedef uint8_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define _serial_driver_data
    -
    -
    -Value:
    _base_asynchronous_channel_data                                           \
    -  /* Driver state.*/                                                        \
    -  sdstate_t                 state;                                          \
    -  /* Input queue.*/                                                         \
    -  InputQueue                iqueue;                                         \
    -  /* Output queue.*/                                                        \
    -  OutputQueue               oqueue;                                         \
    -  /* Status Change @p EventSource.*/                                        \
    -  EventSource               sevent;                                         \
    -  /* I/O driver status flags.*/                                             \
    -  sdflags_t                 flags;                                          \
    -  /* Input circular buffer.*/                                               \
    -  uint8_t                   ib[SERIAL_BUFFERS_SIZE];                        \
    -  /* Output circular buffer.*/                                              \
    -  uint8_t                   ob[SERIAL_BUFFERS_SIZE];                        \
    -
    -

    SerialDriver specific data.

    - -

    Definition at line 76 of file templates/serial_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint8_t sdflags_t
    -
    -
    - -

    Serial Driver condition flags type.

    - -

    Definition at line 59 of file templates/serial_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void sd_lld_init (void  ) 
    -
    -
    - -

    Low level serial driver initialization.

    - -

    Referenced by sdInit().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sd_lld_start (SerialDriver sdp,
    const SerialConfig config 
    )
    -
    -
    - -

    Low level serial driver configuration and (re)start.

    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver object
    [in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
    -
    -
    - -

    Referenced by sdStart().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_stop (SerialDriver sdp ) 
    -
    -
    - -

    Low level serial driver stop.

    -

    De-initializes the USART, stops the associated clock, resets the interrupt vector.

    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDriver object
    -
    -
    - -

    Referenced by sdStop().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l___l_l_d.png b/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l___l_l_d.png deleted file mode 100644 index e4ba7452ab569865c4f153bcd12190f675d90691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18151 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 diff --git a/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_ga5e77658b4f3b559927705dc8fbfbdfad_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_ga5e77658b4f3b559927705dc8fbfbdfad_cgraph.png deleted file mode 100644 index 7e9901caaeecba16358f64899b1c4285ff04dda9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1040 zcmeAS@N?(olHy`uVBq!ia0y~yU^vRaz@W;(#=yYvsYbVmfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}`J+eJ$m7??MCx;TbZ%z1mq*I(FCg8jpPowaS!orW(Di96WN zda<=9V(DV)#6d2#hY2PJ{Wr+xWbk5qhk(mGpw!5$R{iv*?2 zOnLqQ$+nqq%gRr^oA!MAgm>r8`OLpiS(dhaHdBw`F^OalvDr=Hlsw~!d1(rQQe9RJ z6Vev(DLnM6`L}Gz3?_p+*RNl{l(ERf-ah`m$zT3SO?>g`%DqaJZ2a;5HUBh&yZ`;G z>*?#;rn6{8>gGrhuGSTYH$2sAc)6n4V@9IPoIm~rewG5qlKLk%8M3OgCUg059TS-& z(xd5Ts#&!2&c@uI{^9B#`#qoTQht2*uJZX<^Lou!5d|f)w_hv_-s|?ZdEff8-;Ip! zP0C#wqt~9a@y3QXJ(3EG;u!p6&G&n>Z0~!#CqBA*r%-7^dhgbmPUY98pO)4X>;C_G zW}3)OpSRXOH?!(`T2E)(qp(UZ)##`EI_skS%by=)jm}s3`|{M`Z_*}wci$}To;oEt zYxadTXGC5_?%St7{d9AfAH&YM>w4G4uYYT%*y6w?Ai#8;aaY*trRp)?KbkWH|NcF- zfA;M4|5;v4FZd&U=hwa%xf0IHKGpjRU%aZwjZRe6yyCb{dO^|LUv><+MKf-#IDU>J z(@fl)k!MNJbFG;^|0X}aaOKx8mX1|*zgO|^`L!+2;ACmjhs$<3GP<=U$8VXsUf8@X z-1@FhVsLu8{;pklk^2Lfdjuqugq&xdah`H|^>*W#+Qr@7=TF)F%D5@H z&9nE>g|i~d5B>V&8OwCCwB+mTO8(oYo`wnp>dc!YdZ?1=La4mycg9x?N8}pjTU*EH zy?Lv9HaGwLFHerj1uIXB?(~y5t2f`L@J7!{&1=*Bzt(QOvt{iz#=c3*0;MA-xU3E< z-?-6Gu6wz6ta<(U#|69$f(zL$gdbm6-luFg-D~~7M+pah#M-a)7Aj46^~&US{^rx_ zmV6I19A~|}{Ax{l?awEndAGj3a=(6Twcl?ACKu5Ke2PcP8`Lhp{M7#RskybHwHdG6 z!^M47cdi^e&tMwsZqjvfb)V?O8vlb^^q3k1RtPBaJ`is>8M4Z1^CqK>Vu3!1`X$Oc z1NgcpE14b9b69b8#RMBm9o*9Y?tc?t?o<+^+GmQ-}V72h#_mSb${ zE;R)~2Fo5SN$@%7d2mM4fZ;=C{ALCNIn9-#Vz!;C01O<;;SY4bS@* zZdIFh!}H1B63-a944+j?>i>cA4Jh+O?D@<5!lJ39XYb}O3=9kmp00i_>zopr0Q?y0 A%m4rY diff --git a/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_ga6c0462b840ea6364ca266a8d3fcb0945_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_ga6c0462b840ea6364ca266a8d3fcb0945_cgraph.png deleted file mode 100644 index b5e4715f28b7a564920a0e409098c84d97082098..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1701 zcmeAS@N?(olHy`uVBq!ia0y~yU@T@}U{K{?V_;y|AjNrxfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}`J+eJ$m7}(rBT^vIy=DfY*pCJ<}!~WrYzWMI8W?Orwl%z*D zU1%0()mPdgx9P^@`UBoeLiThl70)%RT2bMtZ7U*p+f*TnCDT(l$5v#`mj#NNA%PlG zmE@L)X8D?(G+WD>d^fH9d8LP0?6H|Qe{TOh>Ew6j(|Pgtt3S^^GyDF&+RfGsg2*7y zr^EN=W(K}3))ORlvph(?>&Q~V(EYeEY+iT?yFg1)U1!S;ng4vVt85v5RaI9<%LUx= z_3>eFa4nWdv|(Pre<1R1}42?Tk4W zJoCEM*H1Be-}kp)-}kp;*Zwl2o_~Ma3=5PdpZw0$Ub3fAdwS99!`b$Ax7!3u?_c{H zQMxU+I(v8Gll^DYKCdq?mA$h>u_dfWbN9Ei+r+1AvT1+ze^;g z?-2GZ(OmkiGhu$>9bLwsi4Jbdm-okBla+o`ze8-xTCSV&l}kdD7!$S!-PoIV_piV4 z%zxYrZPr#o&(+oY|E{*&vmp6E-k&R{!~X2(QkiLfE=pQBd+(k6O{H1l+w8ahkh&i- z=hgZ&uZ2oYA`N*A`An~J55L&2sHDzl8l@vv*PRv2yZ)^o&+ek#c1J$tFaKYheLv#5 z=DM_}e!m}VpI=q^xF_eRI)}d4@u@ca50*yxPUThpFRGw?`SR?2%zUBBH(Jgas+yHb zZNF)8?ai&o?N>J?%UR8gPQO-WoM-PX;`jE>uVU|gb&rcz$s4~ss$O}<!p0v$B z<9&kt)FxlmU%sqOjrm)4`5}wBJY}9@1@~?cYWz+FbdL<`_FiAn#e87Wm1zj1xv5LooU9VBwqD*%RGs@X=n2|x81w9 zGGG7cimS@-waTg9~3+B4_Rth-P*$4-{z+RdLPW_fp(R{B(~ zo6f`_c#`SW1M7a9c42<|*0r7P@pIhQFJZ6vq&o0*LByKMuUH$l zTm0&#Zuz%yeFau0_vk&nadrD|4*9D3Q%~<-yty;@^IqSSZVtPT5#@{lnSws=R@~Y7 z^Je`0H#K{z)H9UwpU(Jnd;9$(dp4y%yOt`n`>F8ur6Sw^?b*|}%YOM^&Q&q{>ax?8 zE%?e;c=OExzNK^CZ&PbJ^@zu-j_pav(naUaoRyv5_Fvj6QlF*L(s0kZe6wr(yUeoI zrpGFO{d_Cm{@M>F^`%)~`M&h8{3o|`&f$84Wmj?;4li5jmY&XS@2h)HBWroT@77|U z$nB}uuf6?o>tnRN!S1Pnl7p`^R%&WK0y>EQ|tkvfJ-?OK41SxG=FvY7o;g-qM5F^dS!NKye zS7oKwW_f9@IGSzrX={hny$uV?9{&2e@b@m}Y{C7T|80xheA4FK$=maO?&NUmK6>bT z#>Zc>YekD(T|~8}e%ZNmC;z`|vcA%5W<1H=nl|}oRM6U4@l(8F<=wt8^C>O49J{pW zXW92NXD;a8-FQJs?X&5E5Un$>`WhcSJ=W`-%8+`u@B;ImY$d@!9)p>}f=3x9Tf&$P zk6ABtc6OSz3Hpoc$6b+i68Xh2=dvt|Zt)-0_gRaQHpxp_{JSeN`RBvK?a{(qYt1wn n(o5JKHy$>0bwL5&{xRP$*!e|H*Y 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 ZZ}nY%BsDI2%D}+D;OXk;vd$@?2>{AEB@zGt diff --git a/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_gacb9838adcf51106f4e481f41a851cc34_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_gacb9838adcf51106f4e481f41a851cc34_cgraph.png deleted file mode 100644 index 919a9457f02749ce4c7c2864f6058719b98f80f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3720 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 diff --git a/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_gaced9c1cfde941c7614183b1c887e862b_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_e_r_i_a_l_gaced9c1cfde941c7614183b1c887e862b_cgraph.png deleted file mode 100644 index 34e571b19b8862bcee04b2c9ac4695bdd7e2a8f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 954 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 - -ChibiOS/RT: Command Shell - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Command Shell
    - -[Various] -

    -
    -
    - -

    Small extendible command line shell. -More...

    - -

    -Collaboration diagram for Command Shell:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Small extendible command line shell.

    -

    This module implements a generic extendible command line interface. The CLI just requires an I/O channel (BaseChannel), more commands can be added to the shell using the configuration structure.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  ShellCommand
     Custom command entry type. More...
    struct  ShellConfig
     Shell descriptor type. More...

    -Defines

    #define SHELL_MAX_LINE_LENGTH   64
     Shell maximum input line length.
    #define SHELL_MAX_ARGUMENTS   4
     Shell maximum arguments per command.
    #define SHELL_USE_IPRINTF   TRUE
     Enforces the use of iprintf() on newlib.

    -Typedefs

    typedef void(* shellcmd_t )(BaseChannel *chp, int argc, char *argv[])
     Command handler function type.

    -Functions

    void shellInit (void)
     Shell manager initialization.
    ThreadshellCreate (const ShellConfig *scp, size_t size, tprio_t prio)
     Spawns a new shell.
    void shellPrint (BaseChannel *chp, const char *msg)
     Prints a string.
    void shellPrintLine (BaseChannel *chp, const char *msg)
     Prints a string with a final newline.
    bool_t shellGetLine (BaseChannel *chp, char *line, unsigned size)
     Reads a whole line from the input channel.

    -Variables

    EventSource shell_terminated
     Shell termination event source.
    EventSource shell_terminated
     Shell termination event source.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define SHELL_MAX_LINE_LENGTH   64
    -
    -
    - -

    Shell maximum input line length.

    - -

    Definition at line 41 of file shell.h.

    - -
    -
    - -
    -
    - - - - -
    #define SHELL_MAX_ARGUMENTS   4
    -
    -
    - -

    Shell maximum arguments per command.

    - -

    Definition at line 48 of file shell.h.

    - -
    -
    - -
    -
    - - - - -
    #define SHELL_USE_IPRINTF   TRUE
    -
    -
    - -

    Enforces the use of iprintf() on newlib.

    - -

    Definition at line 55 of file shell.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef void(* shellcmd_t)(BaseChannel *chp, int argc, char *argv[])
    -
    -
    - -

    Command handler function type.

    - -

    Definition at line 61 of file shell.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void shellInit (void  ) 
    -
    -
    - -

    Shell manager initialization.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    Thread * shellCreate (const ShellConfig scp,
    size_t  size,
    tprio_t  prio 
    )
    -
    -
    - -

    Spawns a new shell.

    -
    Parameters:
    - - - - -
    [in] scp pointer to a ShellConfig object
    [in] size size of the shell working area to be allocated
    [in] prio the priority level for the new shell
    -
    -
    -
    Returns:
    A pointer to the shell thread.
    -
    Return values:
    - - -
    NULL thread creation failed because memory allocation.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void shellPrint (BaseChannel chp,
    const char *  msg 
    )
    -
    -
    - -

    Prints a string.

    -
    Parameters:
    - - - -
    [in] chp pointer to a BaseChannel object
    [in] msg pointer to the string
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void shellPrintLine (BaseChannel chp,
    const char *  msg 
    )
    -
    -
    - -

    Prints a string with a final newline.

    -
    Parameters:
    - - - -
    [in] chp pointer to a BaseChannel object
    [in] msg pointer to the string
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool_t shellGetLine (BaseChannel chp,
    char *  line,
    unsigned  size 
    )
    -
    -
    - -

    Reads a whole line from the input channel.

    -
    Parameters:
    - - - - -
    [in] chp pointer to a BaseChannel object
    [in] line pointer to the line buffer
    [in] size buffer maximum length
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - -
    TRUE the channel was reset or CTRL-D pressed.
    FALSE operation successful.
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    - -
    - -

    Shell termination event source.

    - -

    Definition at line 48 of file shell.c.

    - -
    -
    - -
    - -
    - -

    Shell termination event source.

    - -

    Definition at line 48 of file shell.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_h_e_l_l.png b/ChibiOS_2.0.8/docs/html/group___s_h_e_l_l.png deleted file mode 100644 index 2c70c18793b434674fc9ef15e8c8c979d20db529..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmeAS@N?(olHy`uVBq!ia0y~yV7S4+z@W;(#=yX!prfwEz`($k|H*Y zfq{X&#M9T6{T8T^vIy=DfY*?JXTB!}_84vq9~WDOygCxVg%1 zmTHP-EqJj?!^x|5%ju@tg{$>K3-Y76oDME^z2$4J*UbNm^Os;xM%gykAg4!n^h}KA z-m5e<-kDrfC*YHo_wJASxs!8e`Y;IyLcmsrMB~4v4GYu6gc$EL?71H6!rWHyt6tf5 z%5DEc%Rb67R5HXLTBG6giDA{Q?u-iz4Szm-*znHk*12!r%n~;Ly}`=EV8=LvZ{a+R zsOzx~0b*ieCDSjIJ^ELzv=S~oFWLXs z#Vh}P_d1`nJhRzzZ(oh|UR<>E&QIM}Z?a6*H}CAdU%F~L|EH}5R=(?-@3P;&Ra$QE zuP$`5kioc3QI4Z=$GcflQ%^tLuyt$d?;lD5S7nxd<9;^=8DI;ylW2nn=tngQr=Yp??SRc&a5V`#N{N&p9?^gF$#&7>t$F!Jh z&UC9o7uE=#(UrL7u%q>=|9?B(V@5OMzcVI3`w{V^bwZ|MLDP%gZwm{hZk|!x8#krTHoKp*ZhiBs_I~ZMAoJZ;*2lvd?SB(9Nrt*ChMRRgSnY$IT_$*7kFM_SVPkAAelU zW^g-iEv)qN!sX&P?%Iz012`iIip25~;wux7u`HG^}*fU%kN0BXehb{Icm% z=VWEpwo#>?(NoAn>Za(mb6rUDbjN~<-TtfpXbg$wH~KdJzxED_TJSgU-zf~ z2)Qi1_UEEEN>&@+9opG?=GHMOx$SnfZ!Q(yrar`}{FLLY;BVaqm3E&zJ7KUD6f3Kkkk@xx3@Ue|{)qW{#(mt~vw?CEh@xZuw>PX2qj zwQHt%-C)^p^SXKcO@kvd5>H4nC_5>zov3KB-?q3T;egGJ`|&?{6POPiJ81>VJ(B85CN{Hv>1yE9y4So8J!{x=t6`CX;;zvVh?{PEDCoL3|lIVmO`=x};c zB4)_{AbT^{#WksQ%%9$v|60*mR#ukt+>%v?^Fi^0s{t#fO`BFS-N6M4);{BZ{JvUr U!JAtW3=9kmp00i_>zopr0GO@d+5i9m diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_c563___d_r_i_v_e_r_s.html b/ChibiOS_2.0.8/docs/html/group___s_p_c563___d_r_i_v_e_r_s.html deleted file mode 100644 index e7849ef..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_p_c563___d_r_i_v_e_r_s.html +++ /dev/null @@ -1,72 +0,0 @@ - - -ChibiOS/RT: SPC563 Drivers - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    SPC563 Drivers
    - -[PowerPC] -

    -
    -
    - -

    Device drivers included in the SPC563 support. -More...

    - -

    -Collaboration diagram for SPC563 Drivers:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Device drivers included in the SPC563 support.

    - - - - -

    -

    - - -

    -

    -

    -Modules

     SPC563 HAL Support
     

    HAL support.

    -
     SPC563 ESCI Support
     

    ESCI support.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_c563___d_r_i_v_e_r_s.png b/ChibiOS_2.0.8/docs/html/group___s_p_c563___d_r_i_v_e_r_s.png deleted file mode 100644 index 1d37ffadec0ab6ac1d71f54df512e08aba8e548e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3235 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 C?F)ne diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_c563___h_a_l.html b/ChibiOS_2.0.8/docs/html/group___s_p_c563___h_a_l.html deleted file mode 100644 index 6e8da3b..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_p_c563___h_a_l.html +++ /dev/null @@ -1,1031 +0,0 @@ - - -ChibiOS/RT: SPC563 HAL Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    SPC563 HAL Support
    - -[SPC563 Drivers] -

    -
    -
    - -

    HAL support. -More...

    - -

    -Collaboration diagram for SPC563 HAL Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL support.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "SPC563M64"
     Platform name.
    #define RFD_DIV2   0
    #define RFD_DIV4   1
    #define RFD_DIV8   2
    #define RFD_DIV16   3
    #define BIUCR_BANK1_TOO   0x01000000
    #define BIUCR_MASTER7_PREFETCH   0x00800000
    #define BIUCR_MASTER6_PREFETCH   0x00400000
    #define BIUCR_MASTER5_PREFETCH   0x00200000
    #define BIUCR_MASTER4_PREFETCH   0x00100000
    #define BIUCR_MASTER3_PREFETCH   0x00080000
    #define BIUCR_MASTER2_PREFETCH   0x00040000
    #define BIUCR_MASTER1_PREFETCH   0x00020000
    #define BIUCR_MASTER0_PREFETCH   0x00010000
    #define BIUCR_APC_MASK   0x0000E000
    #define BIUCR_APC_0   (0 << 13)
    #define BIUCR_APC_1   (1 << 13)
    #define BIUCR_APC_2   (2 << 13)
    #define BIUCR_APC_3   (3 << 13)
    #define BIUCR_APC_4   (4 << 13)
    #define BIUCR_APC_5   (5 << 13)
    #define BIUCR_APC_6   (6 << 13)
    #define BIUCR_WWSC_MASK   0x00001800
    #define BIUCR_WWSC_0   (0 << 11)
    #define BIUCR_WWSC_1   (1 << 11)
    #define BIUCR_WWSC_2   (2 << 11)
    #define BIUCR_WWSC_3   (3 << 11)
    #define BIUCR_RWSC_MASK   0x00001800
    #define BIUCR_RWSC_0   (0 << 8)
    #define BIUCR_RWSC_1   (1 << 8)
    #define BIUCR_RWSC_2   (2 << 8)
    #define BIUCR_RWSC_3   (3 << 8)
    #define BIUCR_RWSC_4   (4 << 8)
    #define BIUCR_RWSC_5   (5 << 8)
    #define BIUCR_RWSC_6   (6 << 8)
    #define BIUCR_RWSC_7   (7 << 8)
    #define BIUCR_DPFEN   0x00000040
    #define BIUCR_IPFEN   0x00000010
    #define BIUCR_PFLIM_MASK   0x00000060
    #define BIUCR_PFLIM_NO   (0 << 1)
    #define BIUCR_PFLIM_ON_MISS   (1 << 1)
    #define BIUCR_PFLIM_ON_HITMISS   (2 << 1)
    #define BIUCR_BFEN   0x00000001
    #define SPC563_CLK_BYPASS   FALSE
     Clock bypass.
    #define SPC563_ALLOW_OVERCLOCK   FALSE
     Disables the overclock checks.
    #define SPC563_CLK_PREDIV   0
     External clock pre-divider.
    #define SPC563_CLK_MFD   40
     Multiplication factor divider.
    #define SPC563_CLK_RFD   RFD_DIV4
     Reduced frequency divider.
    #define SPC563_FLASH_BIUCR
     Flash buffer and prefetching settings.
    #define SPC563_PLLCLK   ((EXTCLK / (SPC563_CLK_PREDIV + 1)) * SPC563_CLK_MFD)
     PLL output clock.
    #define SPC563_SYSCLK   (SPC563_PLLCLK / (1 << (SPC563_CLK_RFD + 1)))
     PLL output clock.
    #define SPC563_FLASH_WS   (BIUCR_APC_0 | BIUCR_RWSC_0 | BIUCR_WWSC_1)
     Flash wait states are a function of the system clock.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void spc563_clock_init (void)
     SPC563 clocks and PLL initialization.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PLATFORM_NAME   "SPC563M64"
    -
    -
    - -

    Platform name.

    - -

    Definition at line 47 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define RFD_DIV2   0
    -
    -
    -

    Divide VCO frequency by 2.

    - -

    Definition at line 49 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define RFD_DIV4   1
    -
    -
    -

    Divide VCO frequency by 4.

    - -

    Definition at line 50 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define RFD_DIV8   2
    -
    -
    -

    Divide VCO frequency by 8.

    - -

    Definition at line 51 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define RFD_DIV16   3
    -
    -
    -

    Divide VCO frequency by 16.

    - -

    Definition at line 52 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_BANK1_TOO   0x01000000
    -
    -
    -

    Use settings for bank1 too.

    - -

    Definition at line 56 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_MASTER7_PREFETCH   0x00800000
    -
    -
    -

    Enable master 7 prefetch.

    - -

    Definition at line 57 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_MASTER6_PREFETCH   0x00400000
    -
    -
    -

    Enable master 6 prefetch.

    - -

    Definition at line 58 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_MASTER5_PREFETCH   0x00200000
    -
    -
    -

    Enable master 5 prefetch.

    - -

    Definition at line 59 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_MASTER4_PREFETCH   0x00100000
    -
    -
    -

    Enable master 4 prefetch.

    - -

    Definition at line 60 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_MASTER3_PREFETCH   0x00080000
    -
    -
    -

    Enable master 3 prefetch.

    - -

    Definition at line 61 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_MASTER2_PREFETCH   0x00040000
    -
    -
    -

    Enable master 2 prefetch.

    - -

    Definition at line 62 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_MASTER1_PREFETCH   0x00020000
    -
    -
    -

    Enable master 1 prefetch.

    - -

    Definition at line 63 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_MASTER0_PREFETCH   0x00010000
    -
    -
    -

    Enable master 0 prefetch.

    - -

    Definition at line 64 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_APC_MASK   0x0000E000
    -
    -
    -

    APC field mask.

    - -

    Definition at line 65 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_APC_0   (0 << 13)
    -
    -
    -

    No additional hold cycles.

    - -

    Definition at line 66 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_APC_1   (1 << 13)
    -
    -
    -

    1 additional hold cycle.

    - -

    Definition at line 67 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_APC_2   (2 << 13)
    -
    -
    -

    2 additional hold cycles.

    - -

    Definition at line 68 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_APC_3   (3 << 13)
    -
    -
    -

    3 additional hold cycles.

    - -

    Definition at line 69 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_APC_4   (4 << 13)
    -
    -
    -

    4 additional hold cycles.

    - -

    Definition at line 70 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_APC_5   (5 << 13)
    -
    -
    -

    5 additional hold cycles.

    - -

    Definition at line 71 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_APC_6   (6 << 13)
    -
    -
    -

    6 additional hold cycles.

    - -

    Definition at line 72 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_WWSC_MASK   0x00001800
    -
    -
    -

    WWSC field mask.

    - -

    Definition at line 73 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_WWSC_0   (0 << 11)
    -
    -
    -

    No write wait states.

    - -

    Definition at line 74 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_WWSC_1   (1 << 11)
    -
    -
    -

    1 write wait state.

    - -

    Definition at line 75 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_WWSC_2   (2 << 11)
    -
    -
    -

    2 write wait states.

    - -

    Definition at line 76 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_WWSC_3   (3 << 11)
    -
    -
    -

    3 write wait states.

    - -

    Definition at line 77 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_RWSC_MASK   0x00001800
    -
    -
    -

    RWSC field mask.

    - -

    Definition at line 78 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_RWSC_0   (0 << 8)
    -
    -
    -

    No read wait states.

    - -

    Definition at line 79 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_RWSC_1   (1 << 8)
    -
    -
    -

    1 read wait state.

    - -

    Definition at line 80 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_RWSC_2   (2 << 8)
    -
    -
    -

    2 read wait states.

    - -

    Definition at line 81 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_RWSC_3   (3 << 8)
    -
    -
    -

    3 read wait states.

    - -

    Definition at line 82 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_RWSC_4   (4 << 8)
    -
    -
    -

    4 read wait states.

    - -

    Definition at line 83 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_RWSC_5   (5 << 8)
    -
    -
    -

    5 read wait states.

    - -

    Definition at line 84 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_RWSC_6   (6 << 8)
    -
    -
    -

    6 read wait states.

    - -

    Definition at line 85 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_RWSC_7   (7 << 8)
    -
    -
    -

    7 read wait states.

    - -

    Definition at line 86 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_DPFEN   0x00000040
    -
    -
    -

    Data prefetch enable.

    - -

    Definition at line 87 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_IPFEN   0x00000010
    -
    -
    -

    Instr. prefetch enable.

    - -

    Definition at line 88 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_PFLIM_MASK   0x00000060
    -
    -
    -

    PFLIM field mask.

    - -

    Definition at line 89 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_PFLIM_NO   (0 << 1)
    -
    -
    -

    No prefetching.

    - -

    Definition at line 90 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_PFLIM_ON_MISS   (1 << 1)
    -
    -
    -

    Prefetch on miss.

    - -

    Definition at line 91 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_PFLIM_ON_HITMISS   (2 << 1)
    -
    -
    -

    Prefetch on hit and miss.

    - -

    Definition at line 92 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define BIUCR_BFEN   0x00000001
    -
    -
    -

    Flash buffering enable.

    - -

    Definition at line 93 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_CLK_BYPASS   FALSE
    -
    -
    - -

    Clock bypass.

    -
    Note:
    If set to TRUE then the PLL is not started and initialized, the external clock is used as-is and the other clock-related settings are ignored.
    - -

    Definition at line 106 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_ALLOW_OVERCLOCK   FALSE
    -
    -
    - -

    Disables the overclock checks.

    - -

    Definition at line 113 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_CLK_PREDIV   0
    -
    -
    - -

    External clock pre-divider.

    -
    Note:
    Must be in range 0...14.
    -
    -The effective divider factor is this value plus one.
    - -

    Definition at line 122 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_CLK_MFD   40
    -
    -
    - -

    Multiplication factor divider.

    -
    Note:
    Must be in range 32...96.
    - -

    Definition at line 130 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_CLK_RFD   RFD_DIV4
    -
    -
    - -

    Reduced frequency divider.

    - -

    Definition at line 137 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_FLASH_BIUCR
    -
    -
    -Value: -

    Flash buffer and prefetching settings.

    -
    Note:
    Please refer to the SPC563M64 reference manual about the meaning of the following bits, if in doubt DO NOT MODIFY IT.
    -
    -Do not specify the APC, WWSC, RWSC bits in this value because those are calculated from the system clock and ORed with this value.
    - -

    Definition at line 149 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_PLLCLK   ((EXTCLK / (SPC563_CLK_PREDIV + 1)) * SPC563_CLK_MFD)
    -
    -
    - -

    PLL output clock.

    - -

    Definition at line 178 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_SYSCLK   (SPC563_PLLCLK / (1 << (SPC563_CLK_RFD + 1)))
    -
    -
    - -

    PLL output clock.

    - -

    Definition at line 188 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_FLASH_WS   (BIUCR_APC_0 | BIUCR_RWSC_0 | BIUCR_WWSC_1)
    -
    -
    - -

    Flash wait states are a function of the system clock.

    - -

    Definition at line 201 of file platforms/SPC56x/hal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void hal_lld_init (void  ) 
    -
    -
    - -

    Low level HAL driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spc563_clock_init (void  ) 
    -
    -
    - -

    SPC563 clocks and PLL initialization.

    -
    Note:
    All the involved constants come from the file board.h and hal_lld.h
    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_c563___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_p_c563___h_a_l.png deleted file mode 100644 index a5bbe9a5ca9bcf477ae4df38573c0d294b17c570..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1259 zcmeAS@N?(olHy`uVBq!ia0y~yV3cNHU{K{?V_;w?((?6SU|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my5f+`&}Oc152-`i(^Q|oVRz+XU}n!VE^#`O;*OipoJ}I=B}?j zRk`B41jT%B)H}3E^Nd5PI33sz@VB-*>&Y@SuWCN=K&#>0r%y#!3j;i>_Rjk{ zOY>%r?c|v&O1`h+Q&?TLyZ7wbv#Sm-n6xEI_syF(66>#e^|f}SiA?4doZ57ib@{=;*@hy}RuWT76CX9AwRNxPMB} zZpRCAcZF{b3k#dKYybA`;?a3o;(Mnpv5&5;?fF=G`9|hxpP2rwI-ZYxwfa+%XU(~2 zWUHxhIQR139d?Vq$Nru1tJ_=S^0bUAN4w+W)?Q5!<+$$hq$!9?>BrJn2Wobzt(YgW zsPk}{Z@zf={j2@&AA4N3^PV)T#5H$ujPNy+o4KAROxBDB!g=(5WeRmJNPldTr!uHOCe?~C&p zveA`W&VX}hPWvdv!`e8=ll`qO7?FYfrdDd^#vR2}@vbCIR# zm;I0Io@;K~x9Dwbw2>{_WsAb+uD>KQ)pG6>KggQA<<9o`HczJJ9P<&byLHZClE<$Z zLFxxuTYFD8JAQa~Cnj0&z;A!65YM{wMN@*xrF(mK+a*8qO)+5j=W+F#$wT$h*^5tS zKMlUZwOGqlR$%uL**CwwO;4+tU#u7&d%M*3Vb#%_@5}$Mx*lIq@b1p-^>b~1A7kLS zFSN3E%A~48b^Amo%1`bKZ*lLh`z11?UOn^gmembQ*!Q{i%wMwCe}88D##6~}7Co&^ z6W0BlyWIcGnx|Ix-_G&9^l{R)%~HMptnI9J{r`RO;@_=DkDk}-b=%56^$@S%9?ho4 zpba^Tr*u5nUiZK3>ij$P{2A)&WNg=WO#8X*@^-_>)1RMI)fAp@tedy^c-F15nWt*y z(&wE#Wx}}b;gie9mKXju&OP>ia%8ud+3flIxmJV<-eD+^JYYD_PC>3KVekF-b-{i! z!oJ^n`^~iO)$WMNTUOn?dsnvp)$f^q4weh}FKlkUT`wn7vb|}+Z>|OF7DaKEm9;}XUUQn&g5tq}E;Hp^@Ug{IFZckjNmehZyc~a4d`}^e@?p?Zc z?d;*hhd+n9yNDc3Ddw`R*-^^#;Qp$|3SE!Px{x!N!A*fc%}0D4)=OO-&4T~`js5-m zcgEHqwxyeu-hOwhonNhDQrvb}aohIotNEHc5Mb3O`wt~n$J{g-m>3us7(8A5T-G@y GGywp>?s%^N diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_c563___s_e_r_i_a_l.html b/ChibiOS_2.0.8/docs/html/group___s_p_c563___s_e_r_i_a_l.html deleted file mode 100644 index 3341954..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_p_c563___s_e_r_i_a_l.html +++ /dev/null @@ -1,509 +0,0 @@ - - -ChibiOS/RT: SPC563 ESCI Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    SPC563 ESCI Support
    - -[SPC563 Drivers] -

    -
    -
    - -

    ESCI support. -More...

    - -

    -Collaboration diagram for SPC563 ESCI Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    ESCI support.

    -

    The serial driver supports both the SPC563 ESCIs in asynchronous mode.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define SD_MODE_PARITY   0x03
     Parity field mask.
    #define SD_MODE_PARITY_NONE   0x00
     No parity.
    #define SD_MODE_PARITY_EVEN   0x01
     Even parity.
    #define SD_MODE_PARITY_ODD   0x02
     Odd parity.
    #define SD_MODE_NORMAL   0x00
     Normal operations.
    #define SD_MODE_LOOPBACK   0x80
     Internal loopback.
    #define USE_SPC563_ESCIA   TRUE
     eSCI-A driver enable switch.
    #define USE_SPC563_ESCIB   TRUE
     eSCI-B driver enable switch.
    #define SPC563_ESCIA_PRIORITY   8
     eSCI-A interrupt priority level setting.
    #define SPC563_ESCIB_PRIORITY   8
     eSCI-B interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.

    -Typedefs

    typedef uint8_t sdflags_t
     Serial Driver condition flags type.

    -Functions

     CH_IRQ_HANDLER (vector146)
     eSCI-A interrupt handler.
     CH_IRQ_HANDLER (vector149)
     eSCI-B interrupt handler.
    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     eSCI-A serial driver identifier.
    SerialDriver SD2
     eSCI-B serial driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define SD_MODE_PARITY   0x03
    -
    -
    - -

    Parity field mask.

    - -

    Definition at line 44 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_PARITY_NONE   0x00
    -
    -
    - -

    No parity.

    - -

    Definition at line 45 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_PARITY_EVEN   0x01
    -
    -
    - -

    Even parity.

    - -

    Definition at line 46 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_PARITY_ODD   0x02
    -
    -
    - -

    Odd parity.

    - -

    Definition at line 47 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_NORMAL   0x00
    -
    -
    - -

    Normal operations.

    - -

    Definition at line 49 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_LOOPBACK   0x80
    -
    -
    - -

    Internal loopback.

    - -

    Definition at line 50 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_SPC563_ESCIA   TRUE
    -
    -
    - -

    eSCI-A driver enable switch.

    -

    If set to TRUE the support for eSCI-A is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 62 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_SPC563_ESCIB   TRUE
    -
    -
    - -

    eSCI-B driver enable switch.

    -

    If set to TRUE the support for eSCI-B is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 71 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_ESCIA_PRIORITY   8
    -
    -
    - -

    eSCI-A interrupt priority level setting.

    - -

    Definition at line 78 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPC563_ESCIB_PRIORITY   8
    -
    -
    - -

    eSCI-B interrupt priority level setting.

    - -

    Definition at line 85 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define _serial_driver_data
    -
    -
    -Value:
    _base_asynchronous_channel_data                                           \
    -  /* Driver state.*/                                                        \
    -  sdstate_t                 state;                                          \
    -  /* Input queue.*/                                                         \
    -  InputQueue                iqueue;                                         \
    -  /* Output queue.*/                                                        \
    -  OutputQueue               oqueue;                                         \
    -  /* Status Change @p EventSource.*/                                        \
    -  EventSource               sevent;                                         \
    -  /* I/O driver status flags.*/                                             \
    -  sdflags_t                 flags;                                          \
    -  /* Input circular buffer.*/                                               \
    -  uint8_t                   ib[SERIAL_BUFFERS_SIZE];                        \
    -  /* Output circular buffer.*/                                              \
    -  uint8_t                   ob[SERIAL_BUFFERS_SIZE];                        \
    -  /* End of the mandatory fields.*/                                         \
    -  /* Pointer to the volatile eSCI registers block.*/                        \
    -  volatile struct ESCI_tag  *escip;
    -
    -

    SerialDriver specific data.

    - -

    Definition at line 123 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint8_t sdflags_t
    -
    -
    - -

    Serial Driver condition flags type.

    - -

    Definition at line 99 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (vector146  ) 
    -
    -
    - -

    eSCI-A interrupt handler.

    - -

    Definition at line 226 of file platforms/SPC56x/serial_lld.c.

    - -

    References CH_IRQ_EPILOGUE, and CH_IRQ_PROLOGUE.

    - -
    -
    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (vector149  ) 
    -
    -
    - -

    eSCI-B interrupt handler.

    - -

    Definition at line 240 of file platforms/SPC56x/serial_lld.c.

    - -

    References CH_IRQ_EPILOGUE, and CH_IRQ_PROLOGUE.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_init (void  ) 
    -
    -
    - -

    Low level serial driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sd_lld_start (SerialDriver sdp,
    const SerialConfig config 
    )
    -
    -
    - -

    Low level serial driver configuration and (re)start.

    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver object
    [in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_stop (SerialDriver sdp ) 
    -
    -
    - -

    Low level serial driver stop.

    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDriver object
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    SerialDriver SD1
    -
    -
    - -

    eSCI-A serial driver identifier.

    - -

    Definition at line 48 of file platforms/SPC56x/serial_lld.c.

    - -
    -
    - -
    -
    - - - - -
    SerialDriver SD2
    -
    -
    - -

    eSCI-B serial driver identifier.

    - -

    Definition at line 55 of file platforms/SPC56x/serial_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_c563___s_e_r_i_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_p_c563___s_e_r_i_a_l.png deleted file mode 100644 index a156347758889888be3809f6edb1bbaa9b47ae0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17995 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 diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i.html b/ChibiOS_2.0.8/docs/html/group___s_p_i.html deleted file mode 100644 index 2ed8bd0..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_p_i.html +++ /dev/null @@ -1,733 +0,0 @@ - - -ChibiOS/RT: SPI Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    SPI Driver
    - -[HAL] -

    -
    -
    - -

    Generic SPI Driver. -More...

    - -

    -Collaboration diagram for SPI Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Generic SPI Driver.

    -

    This module implements a generic SPI driver. The driver implements a state machine internally:

    -
    -inline_dotgraph_15.dot - -
    -

    The driver is not thread safe for performance reasons, if you need to access the SPI bus from multiple thread then use the spiAcquireBus() and spiReleaseBus() APIs in order to gain exclusive access.

    - - - - -

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Modules

     SPI Low Level Driver
     

    SPI Driver low level driver template.

    -

    -Defines

    #define SPI_USE_MUTUAL_EXCLUSION   TRUE
     Enables the mutual exclusion APIs on the SPI bus.

    -Enumerations

    enum  spistate_t { SPI_UNINIT = 0, -SPI_STOP = 1, -SPI_READY = 2, -SPI_ACTIVE = 3 - }
     

    Driver state machine possible states.

    - More...

    -Functions

    void spiInit (void)
     SPI Driver initialization.
    void spiObjectInit (SPIDriver *spip)
     Initializes the standard part of a SPIDriver structure.
    void spiStart (SPIDriver *spip, const SPIConfig *config)
     Configures and activates the SPI peripheral.
    void spiStop (SPIDriver *spip)
     Deactivates the SPI peripheral.
    void spiSelect (SPIDriver *spip)
     Asserts the slave select signal and prepares for transfers.
    void spiUnselect (SPIDriver *spip)
     Deasserts the slave select signal.
    void spiIgnore (SPIDriver *spip, size_t n)
     Ignores data on the SPI bus.
    void spiExchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
     Exchanges data on the SPI bus.
    void spiSend (SPIDriver *spip, size_t n, const void *txbuf)
     Sends data over the SPI bus.
    void spiReceive (SPIDriver *spip, size_t n, void *rxbuf)
     Receives data from the SPI bus.
    void spiAcquireBus (SPIDriver *spip)
     Gains exclusive access to the SPI bus.
    void spiReleaseBus (SPIDriver *spip)
     Releases exclusive access to the SPI bus.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define SPI_USE_MUTUAL_EXCLUSION   TRUE
    -
    -
    - -

    Enables the mutual exclusion APIs on the SPI bus.

    - -

    Definition at line 52 of file spi.h.

    - -
    -
    -

    Enumeration Type Documentation

    - -
    -
    - - - - -
    enum spistate_t
    -
    -
    - -

    Driver state machine possible states.

    -
    Enumerator:
    - - - - -
    SPI_UNINIT  -

    Not initialized.

    -
    SPI_STOP  -

    Stopped.

    -
    SPI_READY  -

    Ready.

    -
    SPI_ACTIVE  -

    Slave selected.

    -
    -
    -
    - -

    Definition at line 70 of file spi.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void spiInit (void  ) 
    -
    -
    - -

    SPI Driver initialization.

    - -

    Definition at line 59 of file spi.c.

    - -

    References spi_lld_init().

    - -

    Referenced by halInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spiObjectInit (SPIDriver spip ) 
    -
    -
    - -

    Initializes the standard part of a SPIDriver structure.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -

    Definition at line 69 of file spi.c.

    - -

    References chMtxInit(), chSemInit(), SPIDriver::spd_config, SPIDriver::spd_mutex, and SPIDriver::spd_state.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void spiStart (SPIDriver spip,
    const SPIConfig config 
    )
    -
    -
    - -

    Configures and activates the SPI peripheral.

    -
    Parameters:
    - - - -
    [in] spip pointer to the SPIDriver object
    [in] config pointer to the SPIConfig object
    -
    -
    - -

    Definition at line 88 of file spi.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, SPIDriver::spd_config, SPIDriver::spd_state, spi_lld_start(), SPI_READY, and SPI_STOP.

    - -

    Referenced by mmcConnect(), mmcStartSequentialRead(), and mmcStartSequentialWrite().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spiStop (SPIDriver spip ) 
    -
    -
    - -

    Deactivates the SPI peripheral.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -

    Definition at line 107 of file spi.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, SPIDriver::spd_state, spi_lld_stop(), SPI_READY, and SPI_STOP.

    - -

    Referenced by mmcDisconnect(), and mmcStop().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spiSelect (SPIDriver spip ) 
    -
    -
    - -

    Asserts the slave select signal and prepares for transfers.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -

    Definition at line 125 of file spi.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, SPIDriver::spd_state, SPI_ACTIVE, spi_lld_select(), and SPI_READY.

    - -

    Referenced by mmcStartSequentialRead(), and mmcStartSequentialWrite().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spiUnselect (SPIDriver spip ) 
    -
    -
    - -

    Deasserts the slave select signal.

    -

    The previously selected peripheral is unselected.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -

    Definition at line 145 of file spi.c.

    - -

    References chDbgAssert, chDbgCheck, chSysLock, chSysUnlock, SPIDriver::spd_state, SPI_ACTIVE, spi_lld_unselect(), and SPI_READY.

    - -

    Referenced by mmcSequentialRead(), mmcSequentialWrite(), mmcStartSequentialRead(), mmcStartSequentialWrite(), mmcStopSequentialRead(), and mmcStopSequentialWrite().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void spiIgnore (SPIDriver spip,
    size_t  n 
    )
    -
    -
    - -

    Ignores data on the SPI bus.

    -

    This function transmits a series of idle words on the SPI bus and ignores the received data. This function can be invoked even when a slave select signal has not been yet asserted.

    -
    Parameters:
    - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to be ignored
    -
    -
    - -

    Definition at line 168 of file spi.c.

    - -

    References chDbgAssert, chDbgCheck, SPIDriver::spd_state, SPI_ACTIVE, spi_lld_ignore(), and SPI_READY.

    - -

    Referenced by mmcConnect(), mmcSequentialRead(), and mmcSequentialWrite().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void spiExchange (SPIDriver spip,
    size_t  n,
    const void *  txbuf,
    void *  rxbuf 
    )
    -
    -
    - -

    Exchanges data on the SPI bus.

    -

    This function performs a simultaneous transmit/receive operation.

    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    -
    Parameters:
    - - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to be exchanged
    [in] txbuf the pointer to the transmit buffer
    [out] rxbuf the pointer to the receive buffer
    -
    -
    - -

    Definition at line 189 of file spi.c.

    - -

    References chDbgAssert, chDbgCheck, SPIDriver::spd_state, SPI_ACTIVE, and spi_lld_exchange().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void spiSend (SPIDriver spip,
    size_t  n,
    const void *  txbuf 
    )
    -
    -
    - -

    Sends data over the SPI bus.

    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    -
    Parameters:
    - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to send
    [in] txbuf the pointer to the transmit buffer
    -
    -
    - -

    Definition at line 209 of file spi.c.

    - -

    References chDbgAssert, chDbgCheck, SPIDriver::spd_state, SPI_ACTIVE, and spi_lld_send().

    - -

    Referenced by mmcSequentialWrite(), mmcStopSequentialRead(), and mmcStopSequentialWrite().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void spiReceive (SPIDriver spip,
    size_t  n,
    void *  rxbuf 
    )
    -
    -
    - -

    Receives data from the SPI bus.

    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    -
    Parameters:
    - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to receive
    [out] rxbuf the pointer to the receive buffer
    -
    -
    - -

    Definition at line 229 of file spi.c.

    - -

    References chDbgAssert, chDbgCheck, SPIDriver::spd_state, SPI_ACTIVE, and spi_lld_receive().

    - -

    Referenced by mmcSequentialRead(), and mmcSequentialWrite().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spiAcquireBus (SPIDriver spip ) 
    -
    -
    - -

    Gains exclusive access to the SPI bus.

    -

    This function tries to gain ownership to the SPI bus, if the bus is already being used then the invoking thread is queued.

    -
    Note:
    This function is only available when the SPI_USE_MUTUAL_EXCLUSION option is set to TRUE.
    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -

    Definition at line 251 of file spi.c.

    - -

    References chDbgCheck, chMtxLock(), chSemWait(), and SPIDriver::spd_mutex.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spiReleaseBus (SPIDriver spip ) 
    -
    -
    - -

    Releases exclusive access to the SPI bus.

    -
    Note:
    This function is only available when the SPI_USE_MUTUAL_EXCLUSION option is set to TRUE.
    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -

    Definition at line 269 of file spi.c.

    - -

    References chDbgCheck, chMtxUnlock(), and chSemSignal().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i.png b/ChibiOS_2.0.8/docs/html/group___s_p_i.png deleted file mode 100644 index 2f9d63f291fc47884ae352b82f00fc2e9a48cc86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1620 zcmeAS@N?(olHy`uVBq!ia0y~yU<_qoU{K{?V_;zT6j>F`z`($k|H*Y zfq{X&#M9T6{T8OWfdRCec)X;}-9;$@|W-vpciYUT9CVIPx~p zS#YMlk($~|E$P`QdAUXPc3Wm{FE>B=w|LU*l>7WszTK-Xs@p&N+n=g;JEw~&C?SEa zh8=IbnI*DIloaQ%7U;ZEVUjw0=(q3pTT-P=j9YL0SXl6GrTtvJ-fIjJYz38~FU9iP21-E1E4=y&kt8DqL%y=el)`Xd0LLVn2m7XJ?xyCnYJp zGMVLOHTT%V!|jXx4!49!*o*XK|Lruj;#OKzc5IQCONv0Zmf%E3omDO_Y#Uby2}*{% zeYZcnt9pJp@8(;9aXeb%w^OxGDZ- zO_S@i=Xu!tSj4eys@E?q1#JcevCVdwIdTs}wI)2R{g%A7YvJ{6XQKjs|1P%=)k<^` zUA)SJv7w_zrZkT6iq?dn#c%%}cwK!#S}p1yvo-SnH=+uPdS)mijg$BVng-=Ei*QdCo~W%{prrHXxb!uk#! zv5>jpTfL4oxt=a547lB1JAbq9*4)d6cWzY&&YN@aaQgZ}?Y(*e!N#G=CtJ2wef@EH z)h6GszxW)48qRfl$S}AF^jq!U@aE|HdBz_0)Bl{?_AOV~n|<%z_o|OR?p(V{g7u4} zph&3rzUiwjeYzj4qbu}vMy6$Y+10dTj_HTul3Fs~t8bgX?OSegIODRetgWR2&zJUG z^q#S9-M)A8=1pW~aMR`P?@ZvEptm5G?XJ){(~xw>;%(f*hj*@zQMt>t@_OAKfylO$ zPjlx^Yn4^{tiPg*bpdn36z;6qh3ghtvG3bFcjb(!$C4%(zB1dm>3D&5hT4v&k}B&q ze&04RdzIVLpk(Q;qtek(wXuhg3J+Otvp8TW59q?%u?LpPv|6KUgRfH(XzowU__IQUlAD zP>q-xVTp*>TWj~eJ5v4jdhRr-E&Ar#;bn=Bk3HQ{@iDrj+`itA<-Fd%6&zV&VXO`7 zLq57Lc+hrd*H`aboBnF1 zlt29Sb^Uqf8~3i8e@oF(Q&uus)m0~WCVY2D&(RdC*>kO=O){P17};#hx2<1!>pN>= z(aHlM@eBg}%&mu5MYzPTsSE9{YCM<7VC_;eSIbN3*2ajGyD_JpFJJWUbwJ&8^*7n8 zzSTPJ`1<(GeV2ng(ueb_gMZGh(~p^{v1;ly6D`@#MR&H(oSD3z=>~toqV@0ZmMUE{ z6U<@1u(=?8hwZiSzjnVuGHb77|KGZ;`N#*Y`Sy0)4_F$6S6+E%s`P1>);)#~En3fR zKYaFBX@5UQsC04NuR`mzRr8~cA9}O8|74ZFfQss84hD^qjIJ}r*P%L>?PqM;<;_27K#Vx#3+g%cy(w?qnUO%L2^ z8G0(Mzi#?@|F<#Q-Yg7dh!Z~eJuuz%;giqD>rX%JlRJ^7em!E^I`%KY3>k}`hpcQh zJv=MRIc8tY2eXFD41V9gyor)5wM#j6=FAmKhUX0r_wL=BUA_2R`-^>=tIDpglie>_ z%9nC$<)t?|p90ezuRNRn-^Hc(C|aQux;xPH&IX;P?4SSF*F8HUx#aT86_+!lX8NeT z67k7w{pkE~$F=!cu3u08dg_#VG)b_XPqxd7*Qoz-dj~R*dT!5pME~M*C*BSQ1_lOC LS3j3^P6 - -ChibiOS/RT: SPI Low Level Driver - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    SPI Low Level Driver
    - -[SPI Driver] -

    -
    -
    - -

    SPI Driver low level driver template. -More...

    - -

    -Collaboration diagram for SPI Low Level Driver:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    SPI Driver low level driver template.

    -

    This file is a template for a SPI low level driver.

    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SPIConfig
     Driver configuration structure. More...
    struct  SPIDriver
     Structure representing a SPI driver. More...

    -Functions

    void spi_lld_init (void)
     Low level SPI driver initialization.
    void spi_lld_start (SPIDriver *spip)
     Configures and activates the SPI peripheral.
    void spi_lld_stop (SPIDriver *spip)
     Deactivates the SPI peripheral.
    void spi_lld_select (SPIDriver *spip)
     Asserts the slave select signal and prepares for transfers.
    void spi_lld_unselect (SPIDriver *spip)
     Deasserts the slave select signal.
    void spi_lld_ignore (SPIDriver *spip, size_t n)
     Ignores data on the SPI bus.
    void spi_lld_exchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
     Exchanges data on the SPI bus.
    void spi_lld_send (SPIDriver *spip, size_t n, const void *txbuf)
     Sends data ever the SPI bus.
    void spi_lld_receive (SPIDriver *spip, size_t n, void *rxbuf)
     Receives data from the SPI bus.
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void spi_lld_init (void  ) 
    -
    -
    - -

    Low level SPI driver initialization.

    - -

    Referenced by spiInit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_start (SPIDriver spip ) 
    -
    -
    - -

    Configures and activates the SPI peripheral.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -

    Referenced by spiStart().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_stop (SPIDriver spip ) 
    -
    -
    - -

    Deactivates the SPI peripheral.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -

    Referenced by spiStop().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_select (SPIDriver spip ) 
    -
    -
    - -

    Asserts the slave select signal and prepares for transfers.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -

    Referenced by spiSelect().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_unselect (SPIDriver spip ) 
    -
    -
    - -

    Deasserts the slave select signal.

    -

    The previously selected peripheral is unselected.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -

    Referenced by spiUnselect().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void spi_lld_ignore (SPIDriver spip,
    size_t  n 
    )
    -
    -
    - -

    Ignores data on the SPI bus.

    -

    This function transmits a series of idle words on the SPI bus and ignores the received data. This function can be invoked even when a slave select signal has not been yet asserted.

    -
    Parameters:
    - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to be ignored
    -
    -
    - -

    Referenced by spiIgnore().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void spi_lld_exchange (SPIDriver spip,
    size_t  n,
    const void *  txbuf,
    void *  rxbuf 
    )
    -
    -
    - -

    Exchanges data on the SPI bus.

    -

    This function performs a simultaneous transmit/receive operation.

    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    -
    Parameters:
    - - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to be exchanged
    [in] txbuf the pointer to the transmit buffer
    [out] rxbuf the pointer to the receive buffer
    -
    -
    - -

    Referenced by spiExchange().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void spi_lld_send (SPIDriver spip,
    size_t  n,
    const void *  txbuf 
    )
    -
    -
    - -

    Sends data ever the SPI bus.

    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    -
    Parameters:
    - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to send
    [in] txbuf the pointer to the transmit buffer
    -
    -
    - -

    Referenced by spiSend().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void spi_lld_receive (SPIDriver spip,
    size_t  n,
    void *  rxbuf 
    )
    -
    -
    - -

    Receives data from the SPI bus.

    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    -
    Parameters:
    - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to receive
    [out] rxbuf the pointer to the receive buffer
    -
    -
    - -

    Referenced by spiReceive().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i___l_l_d.png b/ChibiOS_2.0.8/docs/html/group___s_p_i___l_l_d.png deleted file mode 100644 index 1aefb0f642380576d3bc5263ef772259e98c9eac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3758 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 diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_ga1b04a2410ef4323ee4e37c63f320c18f_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_ga1b04a2410ef4323ee4e37c63f320c18f_cgraph.png deleted file mode 100644 index 728fe14102ecae2fe9805fabe7839d79d11b17d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5359 zcmeAS@N?(olHy`uVBq!ia0y~yU~Fb!V2I#gV_;wqe>K~Sfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM`MzP5Vt47(^y|x;TbZ%z1mavOp$$F8hb~@4sfKMB6=i5OG;I z{947?nGr@;!j_61W;@R9x@UHa_XG4JAVA*DNWZK@& zLOwoW53$WloIdEOOk~+ue3R{%vGVPWDK}5Om{GU?Z?fCdlS`_Xr7wFvscyd3)Mqd1 z{=S}R{{H&i^}kIOS_GUp6j2C<1zGG0X={J4mOY^Jd14lO0N1o%0l_C0+IboYJU#UC z|L)aNu76+q{9ph2zLt0G3emX?4yAGPU1}2w$qBvh^V^qQBE{`D%R35Q)4l@%PD zf4e&Fbm6c0fA?LFxU;Oh`u^#f((Vp_W{+j_*9LHzXRV#TdCdn0jVqfge}0;0HeW0> ztM)d|C{~sm#Sx<&&aR1 zT)+I~r^0Ua@I5=PExz#dI%}HAlK<=3en@Xy`#&f0;c?&1>6bq}wS6uUt;4mN-?;y- z)NiNPVJi*O_PtNNRr9nu^86%EBY~|QF>=#`;!LF;y;*xXaw^9r0YN5)iPtLF50u|D zljm;TRi703P&;dV}V6R zU49;)pY4^@)qTIZ^RV}vE~S~-Qj0cA&ve<+C@CG*YS+%atiSe?%->z|^KB}BM@TxK zxhJJRJ*GCy@BY^N8-MJZH;KnZ_fynCZrkD&m!hBV)5*_zr7>ftnwzfbB7epm7XPQ@ z7z;CQ==`vM``oIWx7BL=`SEG};*&Z4*qqkBza{UhO88&RZvw&Vj85H(eB&~yaRsa2 zU&f_HUJNtO-!1#Qx1ihnewE172|2$_9(~L;HN3Svwe`B;ZZ&4M1m=JoDnCD^g zPEvB`&nw5SR0qq62WQlt_!>KHabD{5*{=;IMc0S#Gum|j^j4X8438vMVZHFU&fw-lcxhVaKL5 zA8yb5D57#y;ePde=Aa@i)w+j=P3CBo#hl%N#D9?l2m2FX$m%nPOl&C=DDxh};%<Uoy2Tc--_`?OHs;fjVQo09rcg9AO~mU~$j7(TW%Jgm}ml1C?I zhgjzk?$iErX3Sp^u)?WB=!EDACG|8L*8b%zMxRZLC%ODN`|x3Ya>*C8d2f@Fg$p*P3X{GZ$P+I2P3R9o=RZ zbTCxF>Bk9O$rz3Yd%W0`;!^D!?0<%cZQT~P*=c2)>6t21!BT;R&6QcIo0S@lGw^5} z^*4TOzxCLHM3uHh7k9@qHiWLWyKiBaS0mLhF*Hx;fMi2n&rz}aZ;LEe2p`zu|Jv}i z)?+Ue?C_?FXyX~4Nl3iS@4Y2y{GbEU>;AJzxh(8S1nnyrvH?3 z7Iggldh+sPdh=|G78M1ak6QQj!Rv=mCWuDqtOv?AKT4*>Td1?yLxu0qw)j$^u)A?P?_3j$TWmT{uk0Vc8sDSY%jKMv zy}wV6Ke5nmr<_{U{yN*dT`!k?a#M**zPqb*-ZJjiL)udwm8C`TCh#_tDeUA@VEvGp zX3Fxyk->V(qJt|}u3Y%|_ZNZxxZ`&U{ zo@Ocdw@tGCbkFHWA9MGASsn8+>+s>*-78X5>Tpn`Zg) za(;h!cIWwjsJw117xDJ#v)?7C+ z|IeCGF8ESUY1c86!{?2Y*^R$m|D{lPGDRUn!e+uQ+h^H+ZXU_AIsV%kUMz8~+Uv^d zX|%#nSh!uF|GuP~pzMjHvhJh%e!4TnGk-9>{N|^2!|sj(UcvgSCWrkQ_8d02@-E8r z-s$Pz=Oo|WCA>hd;d+)YJA+!$J+ z`t$SiI~0>8gwwo)HmWW1Kav!k%Dkd$)g+#4Yopt1e}A)_XSq55zMcQ)Y0-uoIRh*A zo~)3mW_%O7>&vg!#sgQ{8LqN^nD?zP^K9Y0_~P2~QzElJtk62CusQH-UV`@3 z8`XiQH*!wYz5C)G^MiR$PgmdC@@zFjiQ(hR%OvewTI!Ux9$w#fbKAD;`zO}yo>3@j z943^=ap0_1V74g6)O~p|t+D3w@yFeDd9xNXyg10pJt;iw zm%+4x=iWvqu3J3wV!GL$d}rC$Uw77DpPQupv{+zK)TQ1p3>PY!QzONVgT)=&uCm_g zM-;VAPfwY!_v`%E1`{stY1r;E@$B0jb^ESwPA-Y|Tln!wRGYxn?YH~fK58_$M@O&! zy(Z}7ci}?uhPhFXeKbVwF<;pG@yDa%j0z%Bf2A41v(L&a9b#&bPhIApAzQIx%I;g9 zN-KQ#$*O665twlK&&|(OzA7{4Y&-Y)=!^8lv9F#hxTr3X{#?iK_xZfvtpN%X_83i- z_#yAS@Z!cVFXwkN*c|nV_f=!w{X{Q)^K5+>2Vl1^7< zUAy*r)>N;3@(=V9e%ZQMEH?eda6_hl`yVcg>KPuI|GX3oYFB5L*>hd!3*r~1{qkwcCLj6B@b0|L)+saV(2`pOomF*l~i22t#2CfU$j9(uRv8Cg+| zXMP=a`QmyztSz&zPq;Nbui7%;fTftoiuAzkrYtySMN zm)gtq=KY==|CGyowv^85N@nA7#>vx}mUMnlzWwZUTf4A5^SgQL%34~J%*>1qtDU<0 zY>D->^P6-3T3>$ivIo?tS}5?`#*@udPipUPQHGbhqvncowT5dPeY>*y)Fr93eM|>@ z+Y&V{^UP<<;JDDtFfXu+ZTYfgZGH0lU;8XPy?xEQ&oda6;*R_1&q(`mEv4v{^wBA* zMcKJ;_gygfV3@Y6X=XITpDvF1zA94Rul!CFUi&gW?H9WZhrmL~2lHp8Re0-M+rD$n zK~4tCbq;JBHco2n2-keY^#qg~8((ry36gc$)jabS;}&Jp2Q$%@PlJWLD zIT^Wqj|8}25lvY*o%+h$0i-hVS-isNhZT0?21l4zKNIAKbgC%N$hm4C-p}@9U ztIu!edR*<^bs64Xa(SfSH@AxCjHmtKS!=u2spp-1;KcA;RJKp!Y8^wJY~R9b*RsPj zu5M_HT(7o>PpQNpSvBbXe~AW0CAp+y#!<-^41}Ct+6v7``{Aba%gC7hyx2(|0prK~ zXRcIsw4f*<%9Ey!9vvP_)o#;H}60_ZFmAa)>@sXTuB`?2nHy`Z0 zddAKAK=zD_el1rS#279x#HlP|blBfHQ?KDL$M%CW@k{ZUo^i7%U2>-TP1`BFFEq-R?B@yE6Mb>eHBIQDxO z39OqEB+H=w@mAF$MjvIW1pTF8CGoZ^U z|LUy$*Kb(-l)cRJp0#3k;)=a_+pp^cJ^QZKxqxL7kIUK%*lpLM1BdCt#tV|XU~kgGv%qt5FcsjcrftoaZna{YtlTS1Gxac90yxa%MuyqqgG zFZ6Zy8_A9+7rp+u%L;F07swjle_XWpUFVbE8-IOko@ZZwwz69+_R355$fxF}_Sbix zF}}X^f{;>9(y`|{tF5gpC4J{vetz;^U0r!9r?L6=y_ah)SL#}a+q;K)7zunmmwA2n zmAl#dt@>(zFVv6w^RAq!BAs(%$b|1#&v@{J8Qf?)+O3}%xa#NOj}`a%Pl?49YL%W? zmenq#D%lY=Wxb%@l8N7}au@Q}FXXNEjIP-j5r4NQYSu2r^G{Z^doE{SVdN1`{C!&A zzT)4LC-UwLSE7_oJad1(<#L>(<+R5$RhR?0H}Nm8u$=SwT4s1gWZbEeS<5aQb}8O< zK7kEXs~zYuRJwO`P1(`M-SYnYt@q|{Z+IjUt?o5<|COrPi+fo-*%pOagw|~DbKL%N z@3f~+3l&d)m0BL(zVQ{$Z3dAAY7BojTzm2TV_$CE{?kr&#rpR*UQeAKyYbcXqvlZz4 zGIvdxkKU8tXB0r=4XY=s=gTt}6mESi&^odET#JB{hY@I$?xX{UA`5u@tU-lYu|;6Q z=1!NNIWDiZ%~(`2m!T}ox`S(CRq&okuR0$lD>$8r;CtY+wRwi?Jk}2?4S%olEjhE~ o-juX;SAursugNvqO?fq{X+)78&qol`;+0LZ%~Qvd(} diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_ga382cfbdffd2df57cf3843d45164e8bfc_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_ga382cfbdffd2df57cf3843d45164e8bfc_cgraph.png deleted file mode 100644 index dbd0be18ef5a25b3153284ad0857e7785e818493..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1058 zcmeAS@N?(olHy`uVBq!ia0y~yU^vadz@W;(#=yYvW~=N$1_lPUByV>YhW{YAVDIwD z3=9nHC7!;n?6Gt>EaktG3V_Z>kN@Vk+%QFlb3L?tT~jIoG!h= z?9j3;95-B4#Kg*!W|>S|wn6Zs#3Y4l-f|NfShRERG?*>o&^+RF&n~p@oCtG(P zKh*29t~~9%O<8(cv0a4G&hO_e?N9$qKW7u+Ai&}XMJ-pHXKk!w*dDE`qUgg^A-%n$ zLFb6>g0njo@s(tV&1E&1a{B44b!whE`ufZVg3cHnG6?yp3yrxM5^{3Z zSOy7s-POr_F4eGehwG9#i42=}ajrh<#G<&hBa-EyfMK_Sgi@Lyi}Mkkri6~ycQ>RN z8W=PIBy7sf&dbfMQO&b0mH3rj^lH!TU2eb4yFET{yQAZ` zcm?a+XG;BCO7EBpR)(#J*nXLi!pDp{7BjDeQ4)JZ<)au+Op4jNyXIOM*hHwN$MUEf8rCYl38+-uSht4t$3NU<(|rVeW%&3x>Z*NdcU!LNpD@?`u@u0I042N z3=%FoPMrDs`}Y@}$&!_v7tZ|pB{D<%*ujEN96qOFrdSlSUKHN)!uQiJrAcOImK^=G zyMFa;&D-xB^WXPI?%4C{f>RmqwFrhr4zmWw26p3_(H1s$cH~8-$K~YN{mm6nesfbf z>&_PyN9l%++Xk`TPr|;`^*k-l70B9Z`{vy`pR)4rNB>+iysP50?xI#&2%~_Y7Q?;w zZ}#jesQ8h)F6yqiVb`s5E*GmRpK>ieo*OGtSu2<+UG`^xo}X@6?CvGA{KPj;Y+H~k zQOx?Z=wa;6n2xV&@8*0vm)c*oVqqMM%b!`2#_a4{m%e?wvZ(gY34`8Si&nUQ+8};1 zi^o29hVlC8=QKY3Qo3YzCgt3hS#IX(QrdsZkN6$x;S$VAt6`Xs{w^XWzJ80K(VFmw zD~r`!SFQVe+iU0Ai@nt^v!l4Le|oOdWPav~GmF7zLBUd{A32dz(ziYHUV8lg<7v;0 zKYNl}`o#I{&TU9sis z7jcTOaI!d}!?`$O&OgEJY>xeVN_9BeP!nv7{)gL7mN)uII~&w@>Axuad)Gkr@Q>=- vpG@l7{?-I?D!+Tb?yg;v0tXCjQLbl*H&9=v|D+X^=@~p-{an^LB{Ts5eT(Hn diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_ga3c484a97cdec02c5dbf46a11245e3395_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_ga3c484a97cdec02c5dbf46a11245e3395_cgraph.png deleted file mode 100644 index ff35bba5b97f2e26caa7ce2537b69ab1dd8849ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmeAS@N?(olHy`uVBq!ia0y~yVA#sQz@W;(#=yY9V!GlL0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj<*cwu_cBFff;Sx;TbZ%y~O!zrS#z#PR*-Bd4%L$Q;={)&9VY z6Dfu!XZkE2WG&)zGVPN!Nqo(sc=4!&VN>J(gF(rU7Iijr8@4fKWEf5|@R)q>?qdh< zzSprk@4b(kcm7k{{rUdY_p9GkuFK~WU~z;Y?k7R^{0j2R6$Oj*Gntt-P29q$x%~B? zU7f#}8+N{Y`O;%;=cKi3*PdH=yIe+OM{J&2mg}z>xzl5xn?E;8N=su~8l-8|y-02T z`Q*Yv!%X8tkL((@F6s4m>8Ko@6;*J%qXC`*6;BGy% z(UzP zTh?bD-L%Yh_slJUoag0F{#ti_g$Oh_i1L;d*}b$+p~H7>y+tx^Anr| zw@&t$%W}tiM&4s<@uLddw>Z=G)kGyZ1qK-LJYBjBMRDPw%u|!XP8p@_tLy&qW0NQ9~&3Nyi8x! z=P+ka=8f&YuH@Ns=>GZesP}PN&Kol~cXel9C#DN~c5n+e$T%b%6KPoa@#ArWp2g~C zuG`7VP2;y&BYZ`g-)3RE{I>!{&x!Nr#tMiHeCKD)VBBRYi0B8H}0ITSpF;E@RAEIx?kF6axO?z z+A_n?rKOf(^|H)$S6`pDpKNx1>AlrAn)>*sdbrLF<$uktl$6$%`Dp8+8S>d%pRVuF z*X#Y|KOsbQ$)lCYPS?+F?{!FNAiqkWJ zK<=4`O#|12tv>Ob{d=w1wC{B(jgbs%K}m64G+))eGip-NN$R2J18OJSvK7-zyl{TK h0!I@B37Gz8e7Ve>_nqp6p9~BP44$rjF6*2UngB=9$`k+q diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_ga43889a7d4c473f653596f8c0acafce2a_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_ga43889a7d4c473f653596f8c0acafce2a_cgraph.png deleted file mode 100644 index 76f4e070207781d84060442d0380914d705de5af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1085 zcmeAS@N?(olHy`uVBq!ia0y~yV7SV_z@W;(24Y=WGmC+Nfi20~-G$*l2rk&Wd@=(A z1AB?5uPgg4ZW&%Kj(1J_O&A!M?|Zs9hE&XXduMNcaJU59hvzpu54S7a5IS*kLj7Xz z_KFozrOYS2wKq;#D9g1nWM%TCjjw_vCY(C*ppEND`-BLAmBO7|rE70B_VOK36WX-G zHO0C!o=vEvxai&T^Lvk9udM5yTzvj`_0!M4=2X|FHgrHhhKq*tO?3vnblDRe)m#r| zy;cy~)${$m`qJkY{>(54nZ+D1d;a|MN(&}#+qR93;db9)iDSnZvKZd&;7jqjnlM9t z*%BrO9X-8eQoeE`-L7lat=q+y9HGsyuSoXDj9+I%B2HLwEh;>|L}^oxr)!Gjk9&YkV5*FRQx9C=*#bqErk#JN`S?Wx_du`u~`V#cy|_D@&pwbrOiEx&rxe^%Dk zF1N)WAI^x&%i14*|F++I^HUY~jDmmL1anPhuoIrB-!S>^%$e`scc1WDz4fcaj>N~^ zS?^yhut_~t?4$30seVe?y?=Y(eyR9U(fHx>h2OnW!7CO{_VO314PsZFys~fl%KJ+m z|LmO~T>XBwjJTt(W=-VEIW>!~OpSI(TzYfPKj8=|l^5auLbacGC;Ke3%h_UlboLjU zN%O8VI;&6JCsnDQcgHg)YT=`8->tZ==T>WrPnnb{_;qX0r?Y2#b}zl+^!MxQ-%I1( z?=PG4uAsm*;FjTRA8p@RZ}+_2yC!~n|(X7_wQpDD8O2H%yg-tsqa z2zB}3yt77b_wKp>yN?Eo&pI3b&Q&Jo##N2{HS-r=eLMf#O4HCsfSAGQP)8GHFI4T*QL6Pnoj_U&}*x#u?5|N1*UQ25krk7e2XvxN;_vWL!+ zFIc?&@9qEhOU~pwy)Hc@q@A%x75*~%D17;`#L#4>1~eRfRv!MS%6{<8V%{EfJw5^^j1!u`a@GheYC6<%65MI!0+ zpK7hx3$pfBJ}k@*WmALt8CLrHPL@@$%E1c5T>|XTUKjEpna*-PQWQ}R{ zj9-h_n}1z!_uot3w#UaJ1Kl?M_pyv$sS&fg_Rrg$#dl9Vdv-N^UGl;LpH(ptw{G5H z5!O=wF~w?Ps*je^=@}s|(+pR3=zQKAxbge!a`#)me(icKkh6lZ;(=9%Vd@`W*ZWJN s;^O>FrB0nuX}G;M1& diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_ga6752c9f736f8de774a5bef6dfe2aae2e_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_ga6752c9f736f8de774a5bef6dfe2aae2e_cgraph.png deleted file mode 100644 index feec1ccbc219d42cf3c4f88dcefc53382d895c03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1037 zcmeAS@N?(olHy`uVBq!ia0y~yU^vRaz@W;(#=yYvsYbVmfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}`J+eJ$m7?{_4x;TbZ%z1m~e73No2>XZk-ck$0wj^+$4BEr_ zkM(N;|I3@f{Edss^_?bHeT>kax5s0xdcNzdCfAQ)EZ$K9jvqrdu&-73o;)jJNmysu z6DqBZeK`(DB=;B|0};6%g*iM2LUs#xUdU$PU+kx} zKvQOKyv`2c_x1B1E#hV{dRekdmeVyWHkPBHJ0D;0{(3M@6a_D)CQbxDj!kLL~ziOB_l25Ju%CHP$W zwn#!=KL5tH{UO&`I&bGrI{ETqh}LhLnP<}6+?M@beD1hgh0Xht*v-G2x2@j1R#@i0 z>TRu7C&mMT>f5&Iu1fyj9I>X(i({6;A(ypkbxVVGrZYV4K3crK!8)yF=3T}l|6jje z{e1g&XYYcA7b9Z6)h>U#;N#wsfaNuJiZ0Im%(<}J>D`?o_WUw^hSb6pkF4+BKi%TM z#L#gCT;NFK1rZb+!smj^gM`_tsJl|;f*8kds zSx*;BX-0Xy{<8AsmE$k%>~mk16@2)2_`!p#bG{we*WvB5areA+A{Hu6O&s#8ub$ts z|9{$Lll_&t9M$aEX1<)K-+%Eur=D@^5(kPU0>5Y@yqqx z+x~WWl`C$2xiw8a_y3%xovWA?6h8Te^#AVOw^g!&QKI`7fAF}-xa#UJH=S$s+k$rfSAG>EA@1sa6X@tn; v&6{=4wq;Ic_+au%1(a*RS?Ac4e@xGpPLYjXIpZS(0|SGntDnm{r-UW|HFxX_ diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_ga803cec73f6dd8d3d1f18fb6a61b8255a_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_ga803cec73f6dd8d3d1f18fb6a61b8255a_cgraph.png deleted file mode 100644 index 7aab4cec6ae8a245068ead7b8d7a14c0b1736648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3477 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 diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_ga87a7bdc554b8e8fdfc77064e67689fcf_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_ga87a7bdc554b8e8fdfc77064e67689fcf_cgraph.png deleted file mode 100644 index abf1b9af6eff64eba05e9cabcb0ae86a560f2145..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2222 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 Tsn%m)U|{fc^>bP0l+XkKiTD*= diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_gad3a359eea03e68e95899886ae93a06e4_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_gad3a359eea03e68e95899886ae93a06e4_cgraph.png deleted file mode 100644 index a7b5fcfaeef43b7b80796b5b2a59683f14506d0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1026 zcmeAS@N?(olHy`uVBq!ia0y~yU^vRaz@W;(#=yYvsYbVmfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}`J+eJ$m7?_uMx;TbZ%z1m~e73No2>XZkr}YC4ehcuP)TDks zslTcH$(w`Sf-CoShWqk0iD!O%;h62nU$yCi%bWNG0++g)+MC!#U9`Sj*plh$n(3Y4 zF|XY$)%vcl+3v|cb$j@AcF(*yvvNx1?#a0k4jhUt0!|>})&$?1stnt$Wjh?-GoG2n zcc}gPGUgYB*RM29IP00txJ0Pa<@RF3+`>XZ2CcTkAGAw1#2ZMtzW1~Yy`jp=kdT$N z%64JN!~}zm8oPWe9@#vG6SMdh9rt0Fv3)g1iG_gTu6Zi00$iS4iXxLloHSH4TLLWX zYO|)N7bJ^GKz21>~ z_2ZHZlaK6%k~)5jHl8gfGrl~z@1QU@b=jR`$1boZ>`K#6OBTMYqI-IIic#f`$kS^| zvv$sPT3E1T?(~1Z83o&Byi_~zK53)<(F&W-1vxskj=|q^Zmvnq2za-&e*MQ4)w_$Y zeBN{9<%#ceo%ZfpeOh_Bb+aksn^SXd?R>lcdtpkwe_+Gqty1sY7QYl_C|)S=^x8GK z^%XBg+}HoRcHZxJ-0yPZz`2hyMY`Y3=>IrZH5Qmr(fP@by2B6@IlXParFVX{g0o)K%eb7k@8 zxr+m5haG!Y>axN>*{4OR_-*RiV>{2Dy{TWfJ9pu_n=Z*ulmt@Wy0&x`N0EB@b8)bMt>`St5on+*YP zuPm^8{rB5_-CCvz)~?qTZdD6+&avFM%PQ7P_Vj|uOI`>aeRMf~S+cCYpG zW8s7)0!|Nqxc+`H*P}K!GxKB#$F3z8e!pM;%H;TWyPGo)T)e;j`|q^h@8-)T{d#}> j^=wF9apF+C_0rzGQQUfV#SaAr1_lOCS3j3^P6~ diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_gadd99ad823b391dde114f04dedafe5e80_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_gadd99ad823b391dde114f04dedafe5e80_cgraph.png deleted file mode 100644 index 3b9c4962444d706ed5d762eeefcfd0b26caaaec6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1120 zcmeAS@N?(olHy`uVBq!ia0y~yV0g;Fz@W;(#=yX^S5a>f0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj&dbn)aJ8Ft9Lrx;TbZ%y~PcMOhh$GHc)6HinwYqF_W871k@4~D4T%p-PHo!qy-GPlZ1eF+ zYY(b;F&y~xsmONamJW-)joY?~S@mjJ@IJ_Tp_0}U%wT6`>cT#ULvaa1*Q5z;j)6j# z3^cr)q}W_NJq~ZUSG%@b#dE?k%}FXh#n=^RF_`Kf4p&5+5dm1$`^jV z>3s0d{tr33*T!G`v5P}g+<_tRmC{MBWm$q}yA&85H1{x^*r+jSySP|YIpZ3w*6ir$ z_x~ge)+Pw=R&o5iZb^;rq$ekr-Tty|O|8)UePy=oIro+7FSl{L%WOZd-TGPS$HL1m z@4hOjS}$)~mA7wEfY7qB2f0VzS-J5*s{Pny~uceloEDb;P=G8L!+uy$Kv)Z<= z>g4NW{mH+#C^s$t9@o!op|)xBrI&Mj8Q1W!SGz`}G7J2eEN;Hs)A(>heO2DO6X}2dJ>4(EG&Pp@ z^)d71p63^CD_*~)=4{vMRYez`9Y3BYv~Tr(8#()b&u$-XkNNz4`eapZL$&9bTue|4j~_ z?X9_6pKG>%eD%ybu{ZDSE6%U}?e`%*qGb18<5NbxQx8QvIjQnL$R(`(aJ^mqhX>8} z8>|<`yuO~}Ia4=&>cMx;*V@+`*KjNl zY1>^McQuzmzVpcS-+#;N_~y*ZJz6~XM(S~Y(XE}Ej%o)e3m%-$AmCcWC=vhm`~Bbl z6b?_%(SN-^v|wotXP`+{Y4PVr`U^iRJbfsBDVmA(rW`yiFVNu3ln_x>-r}2{3 Xd5`=VzO7|oU|{fc^>bP0l+XkK!mAhM diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_gae291c012872da9c89dec23581f701b5f_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_gae291c012872da9c89dec23581f701b5f_cgraph.png deleted file mode 100644 index ae78471459a52e65e5d253760a59cc064fa7b49f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1105 zcmeAS@N?(olHy`uVBq!ia0y~yV0g>Gz@W;(#=yX^?pt0M0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj<*cwu_cBFff1iba4!+nDh3|`D~GN3HA@~tyjigSm4XIt6AWM z{RKH24k5+U^Nz+TCF$LBo$b(XIb*i^#3|n{OitL|`fj0C2kFGKtKieaOH{Qa)N}(68f12I zwRw7n82C-v7Ph+f!}jZjx088S-8K05cW3;!xKrx0=JHHNn5SN8Fp;mefwu+^5fUr4lgK)f1&7nZIYRlap~ku zVXGB6n!X>uQgr#>qTJHtqf?jXipO$JdBXIVv53oIZII;8bKjrWF+TY|^^`h)Sor$= z8!yzChzU+K60}@4E&b*FC3A1>mui<%zhM1u$EPiC7p-o;Bd)9Mxq9B6i?w&Rb;i}c zI@Z;#n0J56o);|#PW*dzyupV3LHFFbXWwRhJ-zICrTw<3dV9uM`Nkz{y(jH>yXNon z*rZpJEPX34?aQo83!4-+*LSh{?zh7Bd25z@U#Rvz`1F(&hP(cMSDx1{srfYZzWq+c zr#Xx7*8MvF?c4jzUqR`?3uQL1yxxSMgxAyH zp8omy4xdH0Bq}ep*s|YJk7b>lb(z@W#q$q;?u(0y-d%co!|XkqS7z_}F*&Y#^7X9R z$~Ahrx$1>?B6d}I{#}weU4{_So(fFn!G{ zpQ+E(f`b05oqlZdb@%VWr0rLa);|mXbPoF9r zwvV-iLBOlCdY-y;a&mHiSlGJvZd$R2;x0Y2-PyG(L{9B)_j8{u7fwFkVp4E-_o4n) zf$~EI&;R}UwS7I~f~!Shlk?b2e822@%e{KNXZ3}&n-5j~u@oHsTsB)juIBT51@?25 zHu?XT9-X=ENXrMcsI{}t#~ybq``FkhlzeEK@Z@PL5@u|1VTGsejQ4W-`ufR5llF(# zHTdr4YpDAFZ;M%`^;|wNF|l7#g1n}S-|GqsLP4PCU;d1`^{=n^HLPP`U|{fc^>bP0 Hl+XkKBhMm~ diff --git a/ChibiOS_2.0.8/docs/html/group___s_p_i_gaf1c59f3fd2f85620a5253c23d9586095_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_p_i_gaf1c59f3fd2f85620a5253c23d9586095_cgraph.png deleted file mode 100644 index 956366c3db568c2fc45d293439877b151cb089de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1194 zcmeAS@N?(olHy`uVBq!ia0y~yVEE0zz@W;(#=yYP;x_*$0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj&dbn)aJ8FtGS|x;TbZ%y~Q4K1aq?FFU_tN&q7w_um+tI22n1AcRM1$I`#T45v4X zTw-{~v?FY5hs>QdQ4BM?zE9$9RQ-_4aChp|sXV^IS@8Y#qf2}ByCSb@wtAhBGgtGqigx+J8@gw4*ZD&QZ|xRDJ6^bDY4PJz z-PBE5Ywk*L8CTa#ngKI8Y%Qz(H~Vb=I{VBksqC)J zZ@GU=keO}jUn{^Uz`zu$!(5bSVpVL*b3Jc+)UK~TK3)%ytyVu=pRVWmMbvZ8H16o0 zY<&f}WUF~$&8z>ltf>sr%#nP*+hxA$GD%DA%KO0*ac{bGVopq5BJicrJ%F3RhsP!Q+2!3XuHHV+?(eJoewoVj_lq=xn={?cd1YF0#~)j+yLb87ms0k=?=pMe zb)Ek-Z=UV$&xao+r6;d)R8?r|XV~*hP->+UL$Aw|gBa+A>6+pFjWSzYiZi#V@bjxBrf}p6}$-4>HZK$Na3FcEQYc z8^7xGe~Z5EICkzno9qKKhfU|Vcs>)(mwqgrzxws&;|BWE)lwI9i7Ro0d<kd0 zpCr$^KQoQjzBet1%Gq+Y%t8wvpPam!f7P_~%=5cj=C#{4Tda#NS{k_O=IgX+yI!6>VXv-#JiM>} z>#>A_x7Q`FeVcpm^eKD&kVTV?s}Dy+NYwAzzyG71*Pf%!&xB{~O%(a^)*{IH$7*vY zDW - -ChibiOS/RT: STM32 Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM32 Support
    - -[ARM Cortex-Mx] -

    -
    -
    - -

    STM32 specific support. -More...

    - -

    -Collaboration diagram for STM32 Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    STM32 specific support.

    -

    The STM32 support includes:

    -
      -
    • I/O ports driver.
    • -
    • Buffered, interrupt driven, serial driver.
    • -
    • Interrupt driver CAN driver.
    • -
    • DMA capable, high performance, ADC driver.
    • -
    • DMA capable, high performance, SPI driver.
    • -
    • PWM driver.
    • -
    • A demo supporting the kernel test suite.
    • -
    • A demo that demonstrate the FatFs use with the MMC driver.
    • -
    - - - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     STM32 HAL Support
     

    HAL support.

    -
     STM32 I/O Ports Support
     

    I/O Ports peripherals support.

    -
     STM32 USART Support
     

    USART peripherals support.

    -
     STM32 DMA Support
     

    DMA support.

    -
     STM32 ADC Support
     

    ADC peripherals support.

    -
     STM32 CAN Support
     

    CAN peripheral support.

    -
     STM32 PWM Support
     

    TIMx peripherals as PWM generators support.

    -
     STM32 SPI Support
     

    SPI peripherals support.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32.png deleted file mode 100644 index 60f479e4ae21411569fbf840bf33d9495b4e56d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19398 zcmeAS@N?(olHy`uVBq!ia0y~yVBF2Xz}UgT#=yXEquo!Ifq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}wP?st6*32YlpS zE565J>NKT*Ni%OQGs&F1ZReXapMNX!>YaX%-&j&Y4?$ZnNT<$;Hp+ zNIGyRwg@<(5gklQ>zM_dI&^Bd4kWE_7EpcN&k&Ys<)9g);KVVpeo>+V3YXxmP_WVqV1bNqwH7^H%jvymfYKZ;Ep5xsbPgB|e5r ze*fI4#1_^L5GGT$z_bpEB&y^=iXeW*!r9>Jj}p@4)4& z`YuTyjBYNGmMrS3pZs6KBXnMb*`<#w-4?H#FcD-9Z+}x;{PQUNpZ8rBXPVEpbHANt zcX`6%x7L+hW|v?4DBmwxAFF=Sk0Ws9BzKKGwdD`X?#^O5Ba)pod*vkeeJ7Jl?A5os z?R1qs=(S1MDP-589+{Xd``9%%ecq==rA+p}FY37NCa0oSpxyPlORBv-xz8pmY|1qM zd3tSj^v!LP^R&vhycM0>^QJ{$sz#_&LGqQUS>2ASj*6}f^I6t?{A@(A?A=u9@KxvM zW!*9kt=u&~T8mXW6l~S1iGH(YPWzDl+3I%PCQH5R*$Gn~{++l@E#Whtj_tm2jM80G*`f>qf34EsaAofDS7*NLqgx0CKh~{J2#I-+3QdY zL$;fh2PhWi*x2mKYAJl2mT;)WIq|mbi&s^L?yhh-sr}No!HHucf9!nwdxgj5JGZDZ z*g3Sg&zSpk+0Iw%Mbi61YIxhI?qzTd%&vUcE_LV z(#L$G_xAZrVe>3=>e#ew)xyOc0;~lJ#`jlibV#_}PFw$2XsIhG!JV44E`E=B!uo_` zH(e@D6~3vQw)Izh+;LT}$tu>0E;|)t`Rki+?h|y7Z}@N8^I~xvyQyd!}Y?> zPioiSvjY`i&CGYHxn{_6kQIQn(3|CoLk3qzS((7wfplYcG0_q|9<2Bq9}m%jddJd=GM(~7{r zANBX@cE9NK>-at~yUdB>`k7gxE7RouOB}ddYxi8@aK`O7r9Ms!pn`IT+N1jCbKjY| zl)SiLx+`>jrR+q3!=R!w#^Cz$%)8~x7PkuLJWkrUZTj9mj}8~3Ud@&h;+avGbs7AU z!~A-W-nv#PJ3-(iD5g(zuVc?oIc9n0$E4J?HRoPexHV4Rx7_6E;rE6?_p=N)+HBNQ zm7Tn*#^j^QwB_CES3e$|rnheqC{Ib4#`4D=>k%+MyLrtu^}T)RB0+OI+D{v)PJUt} z_i%5Br_t=P$*0{`&CkA_+y=@LZm!pxmm55;O4||<_WE$#@yCm5gq?Q%TAX`*Ez8ur zmJ^!)eEsgNJSBYE&C2eo#?BQW4;6`Vu%sJbZf3Zpqg^%o`o|}U6-TDNK3TCtZbGG$ z;q{AGG9DMMo_i!Pch$wLRp)IleRSaL(MXjF=9oD7*|QHNx1Xuc_$Yn))s8c-D`Fh)&Bncb zCtX*%X|zswo1q_S)2X~NNAz{^R1;9tt^q}kocX%{feepjj@#Wd$h-fv)JN}xI^&Y) znKM_OohURnnp5+3*`?V1(z(^D-k=0?b3yLyUGJ3+E$nl4KbExGdN1Dz)s=2Gc{%}} zrgvv#ZFDP&&pSGK<=i9RgO1LE6yxV-c0Jd2RK3Zm=(c3lLT$z~TXW|~bZ-s2bvJO+ z-fvT1{mzL?zkS~0_|DLIf8v&%HxH^bOI0oW>o;kxfReH=cb%jI%YmC4BfdoT9~Mjs zc`|FRfRb)#t|h|)dBMWfnQpPQGnQ#s=Dp|F(F7$%O*I!q(6m)~CGKPk>wrQSyhwYg^@L#@D zy7Kx*j)!WXN}s_YckO?_w0Tb~{w;32&Azu!-Cxn~@<95MMN!~XjBoWkmLkDN_S<>$DCgqj*8 z*vR&mztah-QL4^nSW~=uW7iEGjTVW$4hnw)T_2XZ{E0oB5&f*xrd2R7Wb1Dir8tfY zoD4i^cjWpXpIaNfc-i%forfl;s2`D7_WJX2nzWm&oi-_0B%?y5i1)*9TXg*>Yst&l;sy z>WgN}s@HAK=@B>T)jT3`<<6cThqtZ$BYNQMGReQ&u77-zt#MK_T=3(~GX{)Xtor`< zMdY;V*a$L!OnwGRy7#uN{q4%I+h_CR6-E2rF9p?cn`>DcSQ#YG{8*Rzwq^m-Hb0K( zCry?KB%j%qd-pV>kMg7D)20_qO}6-~TKhHrOpd;yQ~%=!kM@3>Rdf8;*NKellZBUh zx|KQgDDIN8>6x9+Q->J#2I(PNWvQqK&l zQpdj!63*IpeuzHYQFr)tMbXmN2mKjKw2jjk?nDJUpT1XPeCus#%p#i;Ag3I8knmQk zVeZ}C*-dfBCv`hKm{eP{??+ME9Nq`vcJj3=_uB3{`Fe*-#KCdAMcTCcs?ubwsM@i>Z!>-$y|XCrKI&k|Nc7|&amsgN%ZNY zkmaw%-}B!nH-4Ou=8{|epnC4y?cb_or)$I;Z4zE|C^VG!-pQV|cJg}Pt)@+M74dx? zcP1yEKVk1ZW3oG5pLMdkh(2(?Vs7# z4LeUMo%HKC<zh5@uj}8tUHE1m541=H9ls zyBX`;17CdT>w9s3Z=Yw6tWmF~OKV0RpSi%tETubX5*Pn}wwlMXWYxjd9dpzf{us&0 z|5>796_^9E+R1`%JystTa-%Z5;^p6|9(q1wx@M=AJ=-NYT|)R8lTUrd;g0m*eVhxI|@6DQ9yrzwV@a`%D20rALd zul)3rGjn1ho_{aD&;H>fL+w?Q#ou>dDLFNHx`1ZEE>Qjt+}ClUocln%>DgcMRgxX+ z*q0k!PG&H1U6}mj*BlMgNpD&-f@g`%Vt?S#z{jlA7hcH1|GZmbho$t20 zTmE3o{AH$hnI6EUds;_YK=T`CTmEdDOK`?JG?Nt`Yp*%@UH z_XO*%etRt^d-eBN=hMzo&6hJmp02!gV%ym#zfOL9rgS%5dZnLT z?XFaljp-^U{W^>my*^kx^P}hSLO!>))N8E^R_XS33Dq}A{xVV7r^cD896QOS?bF0t-hHYY`=8WZzAEXt%U)=b zJ^yk`yPY*#Ha_w$}o*>lISzGoVjFGb4#-O=g;0b*0DM#?eE7VmACf1Y0+T*{pRu~ z#k9CHJq3p1OEaQ=cpQItoH363&A&~FclNE0sO=B>q;YJmaGKub1$n1RO{Qh4%=%$0 znR#T^>GS8;Ud(s=KLONbO+E1Z^IC=vvr>IEZ=G@vjr~;FFhA|ta%rho{<_UB(={%0 z9P@3Jd#l>lbSF!D_I%Hcb#<=F%GQcrb5`kDN)_z$I5PkA=VhlNFMqu-^US%s4EIwb zk13tb+T49Hf8Hlgo0scmr)C-7{wLIby1ejoMz4soUZINmft;`{RiNgFYVNxJ6Pc;U zgqPj?_B!dyid73)&+L#qV01ZWH`CM4*K1cz?2zUTxum!8Tj-^f$jScLv zi#5A+((tO+iI}+b+y0LXe_lKPZLiP#vv2J-=UU%BZ#OHV7*u8oUA=I@i1R`A%#FMD z)?UqSedizA9BvrQ@_=>P)o;yC-_>0VJvRw2atRIpy^f(_mQ>C93$>Y1AFLXt34LU3 zyZG$o<0hBL!fe&FgCJ!rFMmy{o%!~tOT@2dvvXPRW-WOA@adU7ED!P}+@de$JF2-D zp18)W=ryUBSFrTT_3QQf8|F?})fUDmleDaInP#V7h@Rw4&cGz5#t-f@f95DzW&izk z!l7}OqA&M7t_Lv;%cH|ypXa{PFQDo;X|90kvFDGaXMCKLxaHpxhu8`0+QW<=#~gpC ze>^F7zea$)(-a<10V5E~D|@s@--55tHSyc_iOX7}W)?CE&XwzSRlV402pU}owCdnE z&G5%atlKWSgU>{_LRe6Y$>Op>l)Sc!ywemVkdu@`On>ZWuv@5cO0hK~{(7_ajLeOX zA81b#t=%F}%MrNBD^I^gAo=nitx(zj>uvoN{_ncImjC_YlAu#r#mW zkY-R{|IUv71*>0+7tATz^?xfvfmj3kB<|D{br;SHTR5LH*oc0pz4mrnscns=aXjCL z>$=)eew};_e)@jqcBzk!_{)Yw|87+N`|sCb1_inIap9p$?XKMaKmXjLBMLE_^gIRM-6C&2POHycU1|-r}4&!#^oO zle9Iei+2D1wW|Ko)vYCb4u@xV}N*KGqedu|t*^~xfxs>;@iHl}rg z4V>HF#=i^eUM2O9NAN$(f@+?{r7NS~PFoCal@^|3EKqyEGUKC-vEG)qjq}UO?%jG_ zTC=D^#849&`qzBt#d+)4(~TZyGGt3jEvq?euxOj~+iBdf z@kIukZRHnKo>{?|!TTU4M1Bx0!$O zPCXf3$&?(@TW-@aYTjXSRH)eZ_n2b(zI zG`E_94a;=zZwuMF^kU(hbjF<5@7MpU2@lUcs%{mUYv~YJ)6H-u*-iIAzk&Aj$gnTp z{sMbrVt<6wWdiQ$uKFj%Kpb>`h(o*|VJ#0!(ISzM( zJ(+8_%r7>;-XNe@?&7!BGhY}P&Ko@Do@V+~@}`l(Ce@RE9ZFdl88cm664UZd7mK*v z-d1|wwZ&Psy|3qJ*uJ+>6I7EjZZkx&vH#RjIx_R8+^)jizzE+ymY-C6P99wfXyk z_a)^_PEmK62#Q(e4K0%9`+ufwsowH-MOFr5!%~KQVJn{B6ODJdxMkgChFv@l4$t_w z=kW*4jS;sePsn9H#0qLW2+d!g#n=$#Dw!jjE4@q3rd4uv=Zo8I7pwMnKdel;wZ$X1 z{{OelGk5E=zG!BsduQQgAQrvz+UpxGsh|N85y#@9lCPsqpsepT>P{&XVE55$@@U5?%6x< z8HLMJ*Pg4ab^tYPw%z@2A-Lx5?(B0+*QVUfJ@9SKnms%Zj2R*rl$x8bmY-N89H;~G zvq9+FS?m-1o}B(EH-oeKrJB&q_UX5m6^6zZnM^F!JfO}H@!q1OG4*W?!;abuuWuZ= z0jf6+DJi9D9^jw#%s2mOlzE~4+{|@(`W`K;3sx=E7kH?3z>?>{`D%OfzCkkH_ zG5AM>z5W&RDl_VZ4ukj1mvbW4Y`yaR(!_P`eyPXGXZ%cH=ofxCdzobI$=3&3B-Bp& zbuiuheB{GnQC9aSLHYt5=hzC^1@nx~UaRI3nJ4XW*=afBjxI@g<`2fM2P`DKWXjX~;$_@4pJ_mN@ z8g^*x+V@xc%-wLKWVHkQj3(DNE&Bh>YLjgm^9=5U-s_DWO*3cbGf#TcQZN(TN&Oq@ zdhk-t{O!wD9ei)_xVx`e*mrYj@WSLXen-}4#>O-5TAy;Pq(M%l$WQxXbd@c`1D*BF z0<6aT4sqX`rlzR3oSyMmoau_ag~f-(Iepi+JebbdW$<{>rHU>`my2KD8PC|Q%uqXl zA~V>PbHi@x7n@u7`K5nAj2CUy`FxaMG?%xW0)an|HBY zM9+^)nORXaI-84Rjro)pxzBu@9(C$)kDwV|PZ|8u)MI@)Cz7##efAT8##g$3J#<%~}aF6aF17T?Gb=m83_&Q)!FOa&Wq zwUzC%-_0%G6)x~lq2XE1y_)Fohl{J%FI%R{eskMr+v5jMGR$Ltae0|!?Y6zUzHorsRh5&hu??JyX+`>RP<3H)3Cjt;OZS7rXl&pHW@3pV8u?N%VZZG#*u@ zpKVv5t@-v?^=azYmM%#Snws8~xny6Fu6JJjk_ax%*cw)FfV`>P@#WHJgwqDxy?_BOCV82wXVHeVZq76hy>wD_o{#eRiLaKvvbWq= zH0$x?(~VaaUw-m9_-karq&F=m92GXyPFut>UwP5fE~oNs+qdV_<5@wN{j2Si8e|??U==3dG z?b6&8o7Ya)66BHg-F?*H*7-R$zO!GJF1why>$@nelVuq_fW} zu6u40R#M-$>tQjgV5p&WykgKQhMae=56@(X_h@-p_y0jvEdTsWiM9JLef_ZVObx4G ze8Q~UdOe>Q=kM$9Y+L)=ih(h0&APQmdGq&4zSZ-o7hN2&xVPqZ`R7}!mMiP5_t+$? z#C|4b`VU*d(6^O4^##M2Kk&-B2Qxg+jOD+__92qtZmPsZ`Dd4=uhX}@VG#B&_sQc! z^ON8Gsy|aAVEisjL^Wxa_Wg59*Bh$MpZq67tTV;<(Wz8NuU%%rzN^!uogWq6yrR9^ zMH3Wu2F0?1H*ZY7A{3A$DX7iRC@C&fSf0D~ef7>Si&s5dZ){!uezX7SFD2VwU;3)b zZft#e#!m~Sr{aCW|5x4ls-nGeQWLmya?WAa_f0G3=gZ7IHF>$)<)ah9qq2JQ7rr1Glw)_;!@j*~LW;Tzp9t$@hEo&X-24CEKyVeqyfbfX)~;HZdf?8Jz=yj*9SKp^ zerA(7rv6vIUii=8+|PGuOTg+yKjK+Ga5ngx_iR(vS^f2UWvzzdF@~APM3mUioI4Wu zFK`tDi&D(8%(MA3)b`D!*x^YV+%qzHdJJ4>vl<>tN_9J^)P4^1=u zS+@S&a?N8r+ryHkv3Qm_J#ksd?2vhlamlV}>5}f@Bh7(z8ODOP)e;oUYOT$oIO14^9u#VBh{c0MoWpP-jgT)-!~9sn`m{>()sI$ zg3!?a|E7u7#xI&}svQ&?ef$58#~0dX1b+Rec7UP$>a}b7(_Pe$ya1=DE+^rS_ap_S zA1n`6)lB1Iy5o9e`K+`rt25{2Ie;2tybn4SW>>G=oqEi!wl-GxXFZeRF*Qg4*rfh2 z6=aiT-_JBfx9bs)5&!$0%IW7{ybql3A9>^6y5^YyuV{z*wtyf zxhvVH6>WIGulvivgRf?~eB)s--o3m2_Ll1J+OnW|!PzR-ibV%}CU;hxU%{(?{IT`9 zHS6a6xK^+z`Iv&>cZMAYHZ97`=i+5pB^AZ+py<@UqW>%h>O~v6tX6OHh61MrT zST(D{!1yZj83sW?TfZeS84~8XXRq|FWA{&7Hal3iMDda1@xYFb?|=S#M$h~?-{lX# zQr$`hd2WUacVzN5|u2p{lCo5h&GCNTdL4}*yM zA!(OWYzKbIZZ5JmHnZsa{A!wR?nYbQyYW9FTz7g;eY1>dM(i60m#Eo{Yd%|b1kUPR zcz?OqCq{-B@9I7+ySqEyT1&v`wT61JYHK-lU-f^|MhHkcI(OFOV6BDyeC*+4{Bt7w9wz0 z%g4Ba?T0ACI@R5omz{!t{mNhyJkL^5-;idI%occ^ry=Y6oy;`thH%DP4oCL0Z4msh zH%r2HJ@a<{w2NnB80^cn(*lc%e$MsR4Bhlw$pic}9oA>Y~O%Y?B@w`+ZZ_``Z z7q6>bJ=cWyIp;6WqbUtm*hh& zSwCu69$Y!Z%Jtw@_WGmw^}la_pL%|l=*qh1bKh}y2r%xL_hNsv+Kj-XKI}`fgF~aG zI;ZsWs2a~Yc*dCFjeiTjRbMbGgG+|`quw)r^c{X$Hq=}5nH@`dn=kspvMzmL&3^?E zSEcK3T235nWH;OQd)LN78!74I&qL}jEs@&pe995jC#j5$y?dQG!)ex9cNdF<7u!vB)doU||xw+rWqDxUqXO3NX zduG$F$2P|ER%JPri&nWlsxy|9_IZ0w!B}z%G>HKw0L`2>|S?d-~x|D z!c$%H#MN9_gRXMksD7_|W9#er|5-jTEB%sgc=+V0z(s~jc2{Sy$+8=F3$GM7`taKc zy}OTJO;)u#YJS~)-}BEV@#gdUq9^sQ&d=lP?>;_vGDCW;rQMm&FBae5?fQ1-^LgHp zc7N_&beI48&hX^hC97svhEvq`Z8K`Utiv` zOw#4Yj>jL4cNTC6%AfJ6e!J4_0FS-ks?LIz-}9X~-tU6h$@=X$d0c%u|NiOg z{`z#@)&(_V80Ovk%*rssOgHFtmAg~LiineXl}DUC*H3nD-Pt$6NOf9HoO<1St$8Iz zN9TE4M`mY56-~(fJhSUiy0NqLu5X8~GJLqd``z^AB_|bbSFN0Mc0dniDWIi zKGSW+%Q*4Fv-914bzPe&;QAnJlef*xE7|6Dxu`E_#=Kn%ll`_uJ{GLLNt${khUy{{F?h ztVXX@uglI@oZPf%p8D?Oe%rD*Rokx#DmUN!)}ChTZ>#a#-G%evtgfhKc48$ZYyPyS zZjH;6xTvONCsgo`~Q{;dmVsJZg`MoU4r%I+?K&S?e|*Y*x3C)OpUL- z)!epuweJ&)f@S{sD>Wk;oJ3~!ylGjHP+L3ON>}^WP6vgGNsBHNG5k)>IG=vZzNGWT z!@1VAeal+!GgT-zgwNb~@OiPB(Qk99W2d%v3+@-l1J7{^bZ`C3)M2wUGxl@Gi>l*} z!hyG1wjV8gvAOHf8HNnChM6uij7##vmdX_@$Xqy=!3przZt!z-jC0t65U((v#vQ=q!r3hp1P~KOM~}m4SUaT!!N%>48Prc9#c|k+j`KEn?Zm> zhvC4BH+#hUHfJCCRrfzGBg2B%E?&0meVypXA7MOvd9F79_;PkH7f@XO_b+5t?Yd6d zvwXpYVh!^-ni=jVO5}<^y>|A`s%6V|{hd*{?D2;)3sX)Q8=BqZ4LYRbJic57C4_jSatVGhE4nCFVxs^_P}m#o>OOYc>daj^7wMw z@-W=J>#uij?{8CWNQ1_D!p)mIv#)D!e}CiSn{MT;f#KyZ&U6a*|B+)bP=1&xhO0UA zd8U}m$M4H`THX=p{~V;$VzA|J!p20G@aGqwSNqHsn|0~ByKzT_+JWE9Ce4z@9TjX2 zhs(2Way( z%(V-bqGwey3mHU0?zk>`W=Iyg{X0KOTWZHJ|*KDURAL9gFLw7G1`skx{hQ(lV zWk#0B|G&zbd=Ge)ZZTL$&zRbK=EehybE~7bZ8@s&{gbTsz4G-BVovCH2v`PO{a~eJ z*CW~NQc+n@a6ItpRpI+d%c>Y|1m9zRz;wCCZr0AV7nqdp%<}$!ret&K)@@Hd3Z8OO zC^*S7|NKnG8^$v2X#x+Gov(9LvNd!vIJCUocK5Pi_umf;CwAuOfVxT>GooIEGxRYt zDDhbF)v1#V*(Dhxv^^-)T{jKCqr)&WxHj z7c~0I1s=v6&ZxHWoxCJ-;cvz>uFtMsG&8P0z3En-OzDTIp34l6_wAW9_l~1$hl~Z^ z_knme=8ThsPzW*@m;+5d*8j9z-(Zgyfbs#{fVy{`ueWEJyRmn zW)^Sl{C6Y&0j0}1yQiJ_o|yKhr6byO?eF+mVtJecjnaiTnjwY?u zx90O>toY&bdq$$me|`p@$II3(ljODbtEp$GXMB+u%fD~Is)y%${t0tF`OoeQT7G6e zTg7C~j!&j{+;+9h{E=VO*~7&H1N}T`Lxf@KlP6_xV~Sxro}Gp_ImxMl>*(a z^HamlF*4lVreFF0xB33WSr;o^PN~mW+1^pV{PjcikgZP}WFASaZWH!gr+zC$d0Wby zhkKn)sck#*xajYjPUS--%C~adHg~>fbp2-u8hBxM<_-ypo1Ls;qu)1EreS8se*OvT z*Ps9Cr}sA^?6s}SDaGh*YwB$88n$ixl)p^!uZ*DV`8OtlKjXr#Uf?gSJ-Kh^7gILX zc^!9UVpEJoXL>#I(D*syh>`g+S@+L3?@H~gvU;iq8X9@yS@u5Z*~6=o^Nkm?9>{h+ zUT8kC=+Fh;sV`qM%wPTb;OC;3rwzjX>F$0URi8TR>wJYp>jfW5q@_2nYMbUeTWr=O z@A~9`jq9R&O>TM1aEf-vY!-G(N!maA&5X(k9+e$8cd|M-=jzI(ER#2QJpW_G)in<@ zy$@&9@+^2g<7HSVZ`~$?LRXo?8MO-*CZ6(XSf_Ak=ik2-v7ye>P0ZVmi!M9AY0CMN zwHB63q-s-N<(qiw#K!NOrha@ziA*o|?*V z;d=XLcD6_55n;y_L5<1IuRfb?nLccG`O>j!n~9j#K2Y9RcJo$La5F#ipIRlCoZ0c0 zw|r;?jjD2A&6o6?bEx>WRCLkolihY+i7V|V{M;PewJGFlM$4xX`|gmgU!NzWo_2bo zvWQ{g_qjVlOt*A#ET8pk3P0n-idD1Do_)x6`&fL(9CO~o7V9MVjdFALgna$Uw%@lU zpD82#+54!lzqJl3mB}?bC*5up4O@29;^@Dbr{5lG(U{lKEK)!5*WWE%4x3ly{SVqT z>+RdMw?$g_AMx2-8XF&WLZiL3>|RD>Sc#!v{S3+d%8TT)Zhf1c+CNVs8#Mjb^zGX< zUxs-BBI@A#n@F+^Fr7BU^rlK%Pb=7i+0x{ znL}sT4(z|O<$}D4ZcU2eV}V6CK-LSL?)t~~VE@mWneOEb8?MI%>oI=dZ>XR5ER%!v z>cx$pL`*|$- z{(HNu=sliY_v&izTx+XE`ciIRB3ujYyj{LB{P(3dsPtH8s>lX$8S|3O^zRVQLtE=JGGgHFt_Ty=$PZN}CL=WW5 zKmUEzy7qT@Sy4uZU*Bjs(XL{x7~}Tjzg@$uRjXbVZ?e2+a$7F(8HeDaMu!(OnA)ee zb|gz&WcMvTrPFXe@tDl?BB!BL>h_wDj-myb4{y)>nQ?lSk@0EX zJ4;?KY@bosbKbrE{moMWN=jYp^8a%g$8#ot=0r-?X1e`u4SO2q1 z=PheJ$MhjN&Fc83sP~#aCF>Mp`RAVMdCy=Wap1Abj$;Ok^ebg&2pkTwEsW%NILUKz zS~*imY3$vH_HW-z#vSbV;EdGoic_wH>i z_nB4l!<)g6O_T>N|&-}=YGPHtsRB4U|QKSUe;XU)2}xp=+wFGE4U zO}SQ^=B(>nne~F(We3-RM25QaJ<__`zeM)bFPkl~IK_0CK z`S6rt#y_EfKUOYVHtiYHk#K=&qP3Sy7H^(8HJRa!(jnnlV!xKJYTM6uX8k8CJHu}$ zPWW{+b^kD3`@1yFCN1*f(Vf@Ut&g|bxoz8jSEVE6@7GywTAh9Ko0ChVN29}!#a&IO zJAUw_MKCM^&1>e|-L>a9XqpnV(oX5Z*8pzgX@|lD8NXZl+8vpBdAI*C3H}S& z6)ohp?DfHwXGGWvhk}LjKzckbMxQty8kSy z{&?Tk+iE^D{<14|`OGr$eE%}?cZ%X8oh|d`mENwdzHVondg`Hl!ZJn%ZjqxqYaSi3 z{Ovc(+$#XKF{EL^7zmGc|iQ=&?TXXmB?cLvg?)`4}Fzxm`^BEsQ8`jOSC_LvVtR}Ou z^7%RO+k5*0L&QAGoJ3CUC~W^199Yvmqc(K!-t76ZzS6d~ug$JpJ^PYnL(!unmb0s> zuTMM6bv9(z?t1a}Z)1O7zjseKZ>B}zcWs8b9!J9c=U6TY)Z=<2Y7Z45PH4Hm}lKK`6C+uABD z?~9dLU>!(H$||W}e1fgNf35m{I$iqUn#hT-)~$ONZ2!RKeUcYVtBzus&-^JOK2zNv|i zW$NEwCmOgDr}4rUr7&bML@`^G&q%xdd4hC6f90e%Egw!?IOTJ{o}uQx$>Q)`7niMT z=VSb!(~!=yI5}?Ty)Yel=f!(ptv7f)o59YpzLUIX5@`Dqa6r_}+vR^_KP$ z+Y(9RbtN+Yzd%;h-1*${WjT0V@cvFin^lsx_C1)x{J^JyiD6#)vHqOu2g~Pz7YEPR zkOO(aOw?yL$hu~I8x7Vq8Tch_q`xR1p|FLN6{)1_~JG-+6P}sx~o!hhk|l zDUla%-^tl6^y1gi-`0Jfc^me-vGhu2cfNSHZ{Mr=J*~Pj$(<_Jie3%NTAwrTk@|4f z;Oy*sMVoVD`Qy)>xz6~f^m5Mb^JlktpSbg9)$b{t!uF*Bxo_F~zWjd8&)iV4r}}Q6 z?0I|8+AOYnE8@ehG2VDnD&W+y=gj(`s~56oiS1f0ur@pDgOxA$(NNQxD#cs+jBl=q z2lDpI{|~&Ez5a4!;IZA;*3~@yYs&A`@oD+0gF9!5ZJIr6noLN?w^G|3Ng5AZ|7{m| zTkYf5HdXii|9xHFjU0-fQX+HhSwDy$FXY-ZBPC<2`uZRdn+2H*^+gx)D|$@@d57IN zS+hZyx$%Nw>x%;>xAoGFt!0qA^7X^Y))&qlL7*k2LP?Pq?+ZTkbUkP!lEx@GJI%zW z#d^lihYkuAL5#ly7CixFuOm0iYPk<6?vk@x>=3&l(IuK;pLgI3!C3yZK6W|b|UE*`U)^=qcx z`x)R>l%@s=@$3wL|Nih>_}l30HtiWdrP6jeUv9duQ&O+0asQ~p%U9E1#ja|5>^1#> z@PA*wS1ZAraqdla(FQHT+?sp)l`KQ7XUnu_&yLFLmDEqWTE;6_&%NMwi0PAC!V+E= zKAcdyJ~?ldV6@S>4{>U(bJAqqKKGRoTqb=q&A7?8hX2D0e$d9KDF&Bw{wo^)6YbYF z7hPLWPBjqpyY}@#;n5ctH!a#O_;59Y-nA_c)*gt7H~jV0W8=ES-n1>#WA67J z(E;stTY7R+m>v6r=V!JEb^PeQxIEECJ|)bL`9)6X)%V&D#5nYy6fctZ6ItmNKl7J# z?jrB4J5;WxOg-IoHs{sU)J0QL)LkSu(9sCSIZk!{hs%Jle+DZtESJO`DD}oiR-?n{@OETkxr2 z@7Zv^y_KQw!j^!G?^7ka*WSpClwHoaqo1QcGipNycN(Pae9Fh&{mXlXyG##`CFzCz zTyMH9(@meHz|_J1!q*Q)3QEs~0xvxg59u(vay`6O^ni^)L-yXTgC>iw3qI6ITkaaV zyZ+vd9UIQAj%bkpm0G6)K-)VQVh{Cjm)e$egcnMxGwwTjI`c?G&eJHRGiptTed@EaxMbgj>NqU{Exh=2^vpL`2H91a zvGeTO&l%h@JN}s2ohjnA#h*3HTF-qll2e>C_3b=P#Ulc-{QBw7if6voF>QR4R#?_B~s~(vtfC^WwESpf&8`95F_Yfp4ZWK6kyGqunVu zbshWpgk{!@ds1%K`~uCSGL>6yKk%0O{aWS?m0PB&-sB8qEU~SSF}6M2Gg(*r*OKcW z85|Tg{BUp$lw&oB3pCiiSoznY>xP{hz1M-%@+^LP-DSsgj_q&veoqzN+sDq3v@vx3 zl`9Vn()K*DsPGGQ=HAoi*%LeUPk@`^u_-4f^Z#cyZmQeA_Uo55wWnTJFf7C$7@_ zX*03d{J?t+uDO;a>Jo}w&dUs2S13%o`pdw$?qH8KXyE&!)jXGJTR&;e@8@GXQ6y6r z80suuDLYxhIz=kDgUh(`llp%S4R3a~nyq{HX3zg@HP6MmY|Y!3Z|{EJw`-Rtmtfuu zi^6ZmrKR|OUj6pA{^e&Yv%s5RtxGZ=a(7lt&Aq%3+&4KsxocIMz4MXp%o{rA81p7y z<&Hb9qBR|~%SJde>V+kPuut)I!2@rbyuPqAsO#;N#F(=9%7 zJldaBFVAoa*%7-t?#0^Gv;VRQ=FKrkJonkUd|mC~*E8HMUH<&&+Przf?^dmTUEj_z zU9;Sox{=2ua-}6ChRXsr)*py9l|0Flq-@P9GdE-L$xzpRxc3|md<>%jhQW~>p z4|uzlOK9l*B!*Kv3jgND9iP+IIy*%i!fb>7#TgJ(`% z-SHzQZ3aV>?D6_`pZqS+`bLSxCAK#GGwXd^j!V0}&fn8_oY&d2e;R{@yo0^q-8U8= zXX|E{F2BB!Gauv@p37T4%x(D0di&V%?KzphG8mDl4mP zUL`yGLz{}V;xU8R`S$ZF|HL!w$(?mkm|??p!=0YjpZBvLn|sNMv58Z~_KE2ydSbqC6XWFg%{$Bt^@cPFm5B_C%#uzc#TUBYlQQjS$-0SP=r@UF* ze`NQwcR$OoSbBr@YaY1Z_I8%k|89nS)3dSjbrW}(!H0=W*1)y-&N$N;eXw4)vlMnPN}WSNj|%^ zKj)SvoBywApgES)o5KEcKPaA|xh8X=SLChp5>bcd{V=UzlKW@(({zGW=hE!S?i%Ms z!dE35ZJp>VKhy5>3{a>2|NVP^+fNi;E0p2fttUmHk)ySN6cnjIF%elzeCZxmdNLlE0g~y8WA7^UN~8&3wG!?d^{`#Q`(SE6kR zm?$QmzF+fYiP~ayH}~av#j*aA%?>ZRC!7~@B1exu`gzde<1v;>JklqRNgfSbH(BOS zEr&Hj;f=Sq+wGNKHa)+2f7t`Rv!{fMwB02OmkBk8tjoSGlB|6E&MLvxpFgO-VK`Fs z@zIxGw{G#ypR(myDpU9^^!z_7wnX*?dfeQ`>woOqdsssD z#M8351+o6jTFXC0mG-W!nt#>2-o!d ztm=~z)zg=B=9GQ+^%dm#g%8d!7FM?L(To zifowhOxGKX8MABtHO{@Z?;rcgHwMS*wgk-BeWxwY?`7{~#Y_Dgm@mxy_HM3BT>SR) z5v%v^%eUXO<;#co*y}C#oNq8@?4CIBH~X(&zs`H?^8J*rFDAe5!7jBgVtE0K7s^hb zw%15CdNyIn^xlu>o_!XUFNhVc;!b2&5ai}I&c3~!Uw&Iy`dZWd=bta<+p&&wZ*!&( z1E=))Cq=vKwSLYwI<|XrzzoaByOfs1o9|1Na0uU>;=Q!lpO5cf`SvA`ot=}9UcLI$ ze)l@Amu@#03m(kTo%*ca+`u4B#n!~aV%yS?S@riyLp}5l@iiDPz4Yhj!i9g=OD$$+ zXFHa6Z}am9mrtL5ernxor(XqU`5KCM-Z}Dil4WkszbBPxHHnGO;@4$6?Gh+susXCZ z_V~TmzyAdv%Q*b~w0wL_&67#5XHAf^sbW~59JBM&-Tgo6?%QQ=eNj16eDlrZ_L%D} zUmnboZRjg}d#n5Urkl0P&CK@9R{j0p!i9fduU`Er9&^3*-EkAOhQ2AMeSIa9`=eJs zui5|p-O{C#{};px?-EaBUyz)-IrzP?+x}^P)*h>vuP2f=uQXP8m+<8o3|3()P3o8K zufM-|X3uvy&--#RGS%KIOFrx=IaeMly^CAfnjuzk{`@~{w$7Sd;`zz`_-x?-{zH5Y z*H1iE%b)l~+4Hw*ZGH0M|F6T>&xAjtd#E(< zMNW%s!@4Qw?KcE#&EFDMF1>hp?fyTaaxU%?hxi=APp7HdXY{10?!6uLyZHR&l7$A} zSH0eKA(F$ILDS&v)1v?Tyf2xn%%1+mIr-PVPz{@stEH(gcv@r|uI%`F?d89zQ>Xr3 zV;Vns%Tx2l?#|C0dp{ntPTKPP z^1}JSSpo5jrI{SqcW(ZcwR-E;(^1j8*XTxH|9 z*zBmkZePW(sAWZF8TN86xNcf~i2wG!iGTCj!h{aFZ83Y0Ub=%_cYTc5RlAkRf9yeK z+~k>D<-cvJVn}w?#;c2$TKv7Xd45&@?xHKwCbM`~>95-RB*EpRiCRNku0Me|{Nsh|gjDDp9|+Q;z(5J@HCmxyUj@#xIl7)`_Nh-hk*j(1TB}=ya z>8=IIoU^|1M9FF0ypMGvWhX_&k8;lT%C31=E3?82EjO1qpk)`njxgN@xNA DF{(k( diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___a_d_c.html b/ChibiOS_2.0.8/docs/html/group___s_t_m32___a_d_c.html deleted file mode 100644 index d5b74d8..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m32___a_d_c.html +++ /dev/null @@ -1,807 +0,0 @@ - - -ChibiOS/RT: STM32 ADC Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM32 ADC Support
    - -[STM32 Support] -

    -
    -
    - -

    ADC peripherals support. -More...

    - -

    -Collaboration diagram for STM32 ADC Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    ADC peripherals support.

    -

    The ADC driver supports the STM32 ADCs using DMA channels for improved performance.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  ADCConversionGroup
     Conversion group configuration structure. More...
    struct  ADCConfig
     Driver configuration structure. More...
    struct  ADCDriver
     Structure representing an ADC driver. More...

    -Defines

    #define ADC_CR2_EXTSEL_SRC(n)   ((n) << 17)
     Trigger source.
    #define ADC_CR2_EXTSEL_SWSTART   (7 << 17)
     Software trigger.
    #define ADC_CHANNEL_IN0   0
     External analog input 0.
    #define ADC_CHANNEL_IN1   1
     External analog input 1.
    #define ADC_CHANNEL_IN2   2
     External analog input 2.
    #define ADC_CHANNEL_IN3   3
     External analog input 3.
    #define ADC_CHANNEL_IN4   4
     External analog input 4.
    #define ADC_CHANNEL_IN5   5
     External analog input 5.
    #define ADC_CHANNEL_IN6   6
     External analog input 6.
    #define ADC_CHANNEL_IN7   7
     External analog input 7.
    #define ADC_CHANNEL_IN8   8
     External analog input 8.
    #define ADC_CHANNEL_IN9   9
     External analog input 9.
    #define ADC_CHANNEL_IN10   10
     External analog input 10.
    #define ADC_CHANNEL_IN11   11
     External analog input 11.
    #define ADC_CHANNEL_IN12   12
     External analog input 12.
    #define ADC_CHANNEL_IN13   13
     External analog input 13.
    #define ADC_CHANNEL_IN14   14
     External analog input 14.
    #define ADC_CHANNEL_IN15   15
     External analog input 15.
    #define ADC_CHANNEL_SENSOR   16
     Internal temperature sensor.
    #define ADC_CHANNEL_VREFINT   17
     Internal reference.
    #define USE_STM32_ADC1   TRUE
     ADC1 driver enable switch.
    #define STM32_ADC1_DMA_PRIORITY   3
     ADC1 DMA priority (0..3|lowest..highest).
    #define STM32_ADC1_IRQ_PRIORITY   5
     ADC1 interrupt priority level setting.
    #define STM32_ADC1_DMA_ERROR_HOOK()   chSysHalt()
     ADC1 DMA error hook.

    -Typedefs

    typedef uint16_t adcsample_t
     ADC sample data type.
    typedef uint16_t adc_channels_num_t
     Channels number in a conversion group.
    typedef void(* adccallback_t )(adcsample_t *buffer, size_t n)
     ADC notification callback type.

    -Functions

     CH_IRQ_HANDLER (Vector6C)
     ADC1 DMA interrupt handler (channel 1).
    void adc_lld_init (void)
     Low level ADC driver initialization.
    void adc_lld_start (ADCDriver *adcp)
     Configures and activates the ADC peripheral.
    void adc_lld_stop (ADCDriver *adcp)
     Deactivates the ADC peripheral.
    void adc_lld_start_conversion (ADCDriver *adcp)
     Starts an ADC conversion.
    void adc_lld_stop_conversion (ADCDriver *adcp)
     Stops an ongoing conversion.

    -Variables

    ADCDriver ADCD1
     ADC1 driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - -
    #define ADC_CR2_EXTSEL_SRC( n )    ((n) << 17)
    -
    -
    - -

    Trigger source.

    - -

    Definition at line 43 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CR2_EXTSEL_SWSTART   (7 << 17)
    -
    -
    - -

    Software trigger.

    - -

    Definition at line 44 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN0   0
    -
    -
    - -

    External analog input 0.

    - -

    Definition at line 46 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN1   1
    -
    -
    - -

    External analog input 1.

    - -

    Definition at line 47 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN2   2
    -
    -
    - -

    External analog input 2.

    - -

    Definition at line 48 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN3   3
    -
    -
    - -

    External analog input 3.

    - -

    Definition at line 49 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN4   4
    -
    -
    - -

    External analog input 4.

    - -

    Definition at line 50 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN5   5
    -
    -
    - -

    External analog input 5.

    - -

    Definition at line 51 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN6   6
    -
    -
    - -

    External analog input 6.

    - -

    Definition at line 52 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN7   7
    -
    -
    - -

    External analog input 7.

    - -

    Definition at line 53 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN8   8
    -
    -
    - -

    External analog input 8.

    - -

    Definition at line 54 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN9   9
    -
    -
    - -

    External analog input 9.

    - -

    Definition at line 55 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN10   10
    -
    -
    - -

    External analog input 10.

    - -

    Definition at line 56 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN11   11
    -
    -
    - -

    External analog input 11.

    - -

    Definition at line 57 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN12   12
    -
    -
    - -

    External analog input 12.

    - -

    Definition at line 58 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN13   13
    -
    -
    - -

    External analog input 13.

    - -

    Definition at line 59 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN14   14
    -
    -
    - -

    External analog input 14.

    - -

    Definition at line 60 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_IN15   15
    -
    -
    - -

    External analog input 15.

    - -

    Definition at line 61 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_SENSOR   16
    -
    -
    - -

    Internal temperature sensor.

    - -

    Definition at line 62 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC_CHANNEL_VREFINT   17
    -
    -
    - -

    Internal reference.

    - -

    Definition at line 63 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_ADC1   TRUE
    -
    -
    - -

    ADC1 driver enable switch.

    -

    If set to TRUE the support for ADC1 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 75 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADC1_DMA_PRIORITY   3
    -
    -
    - -

    ADC1 DMA priority (0..3|lowest..highest).

    - -

    Definition at line 82 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADC1_IRQ_PRIORITY   5
    -
    -
    - -

    ADC1 interrupt priority level setting.

    - -

    Definition at line 89 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define STM32_ADC1_DMA_ERROR_HOOK( )    chSysHalt()
    -
    -
    - -

    ADC1 DMA error hook.

    -
    Note:
    The default action for DMA errors is a system halt because DMA error can only happen because programming errors.
    - -

    Definition at line 98 of file platforms/STM32/adc_lld.h.

    - -

    Referenced by CH_IRQ_HANDLER().

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint16_t adcsample_t
    -
    -
    - -

    ADC sample data type.

    - -

    Definition at line 112 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint16_t adc_channels_num_t
    -
    -
    - -

    Channels number in a conversion group.

    - -

    Definition at line 117 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef void(* adccallback_t)(adcsample_t *buffer, size_t n)
    -
    -
    - -

    ADC notification callback type.

    -
    Parameters:
    - - - -
    [in] buffer pointer to the most recent samples data
    [in] n number of buffer rows available starting from buffer
    -
    -
    - -

    Definition at line 124 of file platforms/STM32/adc_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (Vector6C  ) 
    -
    - -
    - -
    -
    - - - - - - - - - -
    void adc_lld_init (void  ) 
    -
    -
    - -

    Low level ADC driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void adc_lld_start (ADCDriver adcp ) 
    -
    -
    - -

    Configures and activates the ADC peripheral.

    -
    Parameters:
    - - -
    [in] adcp pointer to the ADCDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void adc_lld_stop (ADCDriver adcp ) 
    -
    -
    - -

    Deactivates the ADC peripheral.

    -
    Parameters:
    - - -
    [in] adcp pointer to the ADCDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void adc_lld_start_conversion (ADCDriver adcp ) 
    -
    -
    - -

    Starts an ADC conversion.

    -
    Parameters:
    - - -
    [in] adcp pointer to the ADCDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void adc_lld_stop_conversion (ADCDriver adcp ) 
    -
    -
    - -

    Stops an ongoing conversion.

    -
    Parameters:
    - - -
    [in] adcp pointer to the ADCDriver object
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    ADCDriver ADCD1
    -
    -
    - -

    ADC1 driver identifier.

    - -

    Definition at line 45 of file platforms/STM32/adc_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___a_d_c.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___a_d_c.png deleted file mode 100644 index e0755e41b3cab9bef910537718351d5a570c8a55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2210 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 diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___a_d_c_ga727ca25370379b53e77a820e7bfee540_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___a_d_c_ga727ca25370379b53e77a820e7bfee540_cgraph.png deleted file mode 100644 index 12303ace9a6db065ded1700c3342284591f36dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4592 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 VmVa2?$-uzC;OXk;vd$@?2>=+<&A - -ChibiOS/RT: STM32 CAN Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM32 CAN Support
    - -[STM32 Support] -

    -
    -
    - -

    CAN peripheral support. -More...

    - -

    -Collaboration diagram for STM32 CAN Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    CAN peripheral support.

    -

    The CAN driver supports the STM32 bxCAN unit.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  CANTxFrame
     CAN transmission frame. More...
    struct  CANRxFrame
     CAN received frame. More...
    struct  CANFilter
     CAN filter. More...
    struct  CANConfig
     Driver configuration structure. More...
    struct  CANDriver
     Structure representing an CAN driver. More...

    -Defines

    #define CAN_SUPPORTS_SLEEP   TRUE
     This switch defines whether the driver implementation supports a low power switch mode with automatic an wakeup feature.
    #define CAN_MAX_FILTERS   28
     Minimum number of CAN filters.
    #define CAN_BTR_BRP(n)   (n)
     BRP field macro.
    #define CAN_BTR_TS1(n)   ((n) << 16)
     TS1 field macro.
    #define CAN_BTR_TS2(n)   ((n) << 20)
     TS2 field macro.
    #define CAN_BTR_SJW(n)   ((n) << 24)
     SJW field macro.
    #define CAN_IDE_STD   0
     Standard id.
    #define CAN_IDE_EXT   1
     Extended id.
    #define CAN_RTR_DATA   0
     Data frame.
    #define CAN_RTR_REMOTE   1
     Remote frame.
    #define USE_STM32_CAN1   TRUE
     CAN1 driver enable switch.
    #define STM32_CAN1_IRQ_PRIORITY   11
     CAN1 interrupt priority level setting.

    -Typedefs

    typedef uint32_t canstatus_t
     CAN status flags.

    -Functions

    void can_lld_init (void)
     Low level CAN driver initialization.
    void can_lld_start (CANDriver *canp)
     Configures and activates the CAN peripheral.
    void can_lld_stop (CANDriver *canp)
     Deactivates the CAN peripheral.
    bool_t can_lld_can_transmit (CANDriver *canp)
     Determines whether a frame can be transmitted.
    void can_lld_transmit (CANDriver *canp, const CANTxFrame *ctfp)
     Inserts a frame into the transmit queue.
    bool_t can_lld_can_receive (CANDriver *canp)
     Determines whether a frame has been received.
    void can_lld_receive (CANDriver *canp, CANRxFrame *crfp)
     Receives a frame from the input queue.
    void can_lld_sleep (CANDriver *canp)
     Enters the sleep mode.
    void can_lld_wakeup (CANDriver *canp)
     Enforces leaving the sleep mode.

    -Variables

    CANDriver CAND1
     ADC1 driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define CAN_SUPPORTS_SLEEP   TRUE
    -
    -
    - -

    This switch defines whether the driver implementation supports a low power switch mode with automatic an wakeup feature.

    - -

    Definition at line 56 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_MAX_FILTERS   28
    -
    -
    - -

    Minimum number of CAN filters.

    - -

    Definition at line 62 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define CAN_BTR_BRP( n )    (n)
    -
    -
    - -

    BRP field macro.

    - -

    Definition at line 67 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define CAN_BTR_TS1( n )    ((n) << 16)
    -
    -
    - -

    TS1 field macro.

    - -

    Definition at line 68 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define CAN_BTR_TS2( n )    ((n) << 20)
    -
    -
    - -

    TS2 field macro.

    - -

    Definition at line 69 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define CAN_BTR_SJW( n )    ((n) << 24)
    -
    -
    - -

    SJW field macro.

    - -

    Definition at line 70 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_IDE_STD   0
    -
    -
    - -

    Standard id.

    - -

    Definition at line 72 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_IDE_EXT   1
    -
    -
    - -

    Extended id.

    - -

    Definition at line 73 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_RTR_DATA   0
    -
    -
    - -

    Data frame.

    - -

    Definition at line 75 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN_RTR_REMOTE   1
    -
    -
    - -

    Remote frame.

    - -

    Definition at line 76 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_CAN1   TRUE
    -
    -
    - -

    CAN1 driver enable switch.

    -

    If set to TRUE the support for ADC1 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 88 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_CAN1_IRQ_PRIORITY   11
    -
    -
    - -

    CAN1 interrupt priority level setting.

    - -

    Definition at line 95 of file platforms/STM32/can_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t canstatus_t
    -
    -
    - -

    CAN status flags.

    - -

    Definition at line 113 of file platforms/STM32/can_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void can_lld_init (void  ) 
    -
    -
    - -

    Low level CAN driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void can_lld_start (CANDriver canp ) 
    -
    -
    - -

    Configures and activates the CAN peripheral.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void can_lld_stop (CANDriver canp ) 
    -
    -
    - -

    Deactivates the CAN peripheral.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t can_lld_can_transmit (CANDriver canp ) 
    -
    -
    - -

    Determines whether a frame can be transmitted.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    -
    Returns:
    The queue space availability.
    -
    Return values:
    - - - -
    FALSE no space in the transmit queue.
    TRUE transmit slot available.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void can_lld_transmit (CANDriver canp,
    const CANTxFrame ctfp 
    )
    -
    -
    - -

    Inserts a frame into the transmit queue.

    -
    Parameters:
    - - - -
    [in] canp pointer to the CANDriver object
    [in] ctfp pointer to the CAN frame to be transmitted
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t can_lld_can_receive (CANDriver canp ) 
    -
    -
    - -

    Determines whether a frame has been received.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    -
    Returns:
    The queue space availability.
    -
    Return values:
    - - - -
    FALSE no space in the transmit queue.
    TRUE transmit slot available.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void can_lld_receive (CANDriver canp,
    CANRxFrame crfp 
    )
    -
    -
    - -

    Receives a frame from the input queue.

    -
    Parameters:
    - - - -
    [in] canp pointer to the CANDriver object
    [out] crfp pointer to the buffer where the CAN frame is copied
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void can_lld_sleep (CANDriver canp ) 
    -
    -
    - -

    Enters the sleep mode.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -

    Definition at line 373 of file platforms/STM32/can_lld.c.

    - -

    References CANDriver::cd_can.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void can_lld_wakeup (CANDriver canp ) 
    -
    -
    - -

    Enforces leaving the sleep mode.

    -
    Parameters:
    - - -
    [in] canp pointer to the CANDriver object
    -
    -
    - -

    Definition at line 383 of file platforms/STM32/can_lld.c.

    - -

    References CANDriver::cd_can.

    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    CANDriver CAND1
    -
    -
    - -

    ADC1 driver identifier.

    - -

    Definition at line 45 of file platforms/STM32/can_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___c_a_n.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___c_a_n.png deleted file mode 100644 index a6017f6abdd47d5afde3d3956a1a70837ee966b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2408 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 - -ChibiOS/RT: STM32 DMA Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM32 DMA Support
    - -[STM32 Support] -

    -
    -
    - -

    DMA support. -More...

    - -

    -Collaboration diagram for STM32 DMA Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    DMA support.

    -

    The DMA helper driver allows to stop the DMA clock when no other driver requires its services.

    - - - - - - - - - - - - - -

    -Defines

    #define DMA1_ID   0
     DMA1 identifier.
    #define DMA2_ID   1
     DMA2 identifier.

    -Functions

    void dmaInit (void)
     STM32 DMA helper initialization.
    void dmaEnable (uint32_t dma)
     Enables the specified DMA controller clock.
    void dmaDisable (uint32_t dma)
     Disables the specified DMA controller clock.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define DMA1_ID   0
    -
    -
    - -

    DMA1 identifier.

    - -

    Definition at line 43 of file stm32_dma.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA2_ID   1
    -
    -
    - -

    DMA2 identifier.

    - -

    Definition at line 47 of file stm32_dma.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void dmaInit (void  ) 
    -
    -
    - -

    STM32 DMA helper initialization.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void dmaEnable (uint32_t  dma ) 
    -
    -
    - -

    Enables the specified DMA controller clock.

    -
    Parameters:
    - - -
    [in] dma the DMA controller id
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void dmaDisable (uint32_t  dma ) 
    -
    -
    - -

    Disables the specified DMA controller clock.

    -
    Parameters:
    - - -
    [in] dma the DMA controller id
    -
    -
    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___d_m_a.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___d_m_a.png deleted file mode 100644 index c995aab5402fc819c7278dabc2bfbc9d20a4f4dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1231 zcmeAS@N?(olHy`uVBq!ia0y~yU=(FwU{K{?V_;y&d0hLOfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}wP?st6*3@nA7E{-7;bKc%PpDmLr!T#a>?(8KVnqQKvygdb* z6qJ;jf<8<*`j0#CQqxY&j$Y0RGnS_7dC?xCd!~L%_}_fWj5EZMUny?SleD)vuRVj9 z(k9p1l(@&;-}C-YO}g6VpLKehf1k5{Z?pN$?=!#mZB}FugoCSIk*Dr4ZwM(>C^^Dj z%05AOzrFftX9n{xP2xIJ(-_V$?+ABwDLGPemr=xoIiW5uZ{0hK6)Dlt(F_JAr*l13 zFI}-ty&TI{u>74uS5$25T5A@q$lZ6{_TRS;y0=PEOlekvkCw|5(aBtbl}DF2xx^W+ z6qp!Z=wH7{;PKv~Dek{nzTH3Z;_0uAr&c6u`wRPDjk*5vVvRM2)$}Pr+)6*}c&dA= zi>|ya`~SVJxcG9E+}qb>yZ>J`yuDF&_4U%J>PM5dy|>B_y1V81s-RgBn?Fnp$&ppp z3f6q};{D@qHzx(oDvM3^U1l|RY4_s5YR8oqMIGjfGP-;SzT228dR_4=%fu_0U-`0b zr+d4tJ0}vZ{%()wbMNZAzTwxtEYDyslbydk_WB7=ooM5oH&1=twB*;ei&1))FKg$s z9Q+hM_uMCWrM2==x<6S0(vR=vubI0%&((U`>mN36-A*p#S|=FwCGP$#⊁rmJ54 zUfFBsrgf1+scP<5i{jPVm-4PXKC?3X&g&h5lV6wWUA{bj@1-nXT@BT4rBACk+8CBG zI6V2e?c^7~*-J0KR%WbSefsjc{?BQd>e)5VMD*X4-qASy^%i@4w$?L`1J^^8Pk&jN zVYAQ8y>5AyUFgS(!he5Gz4`a=e*Bi(=?YEKSu%yY1UogBUU3u9$)6&f zI_dCUgFQ1}pV;(n&N8iA=NGMdz0NC=du!&-c`Qe_&Meut<>QTIQJ(%wyuQA;xOMKz zmDBfImS%l>eR=u)pQ01YU9T(*%1}SPfaSn;rK0^^5wYLC)$Qg;P|f|TBzw|S=)^9E zS*H8eJl8b}+T{E4(!9lb`>uz4F`Az{>$2qSeI_4gyw**#-u80R+B>52eU~jUk+Hig z%Qru%{QL3kR&&p%yF77r&}FKKWjVa#Wj{xqB+t6*f3H8Cxh#E~DW^R5)@|;`x4E8N za{N?k>6IO?&8|nEsmQsk8ol#%@rI8xr{u(cd$B&H|8L2`#kbrwrCvXmXF0uIvz1ja zlI03dLoI`TRw$p#1`~-dd7%=k&!#ez_nnR{o+Pt9@YJtgR=@uKi)9G^QuJ@pHpN35 zzW;uFe6RlD55HIizv?ycGSo93_|ZAx{a3?9F*8Eueg3<9Mi4LC^*X-8_q-(jN%pu^ z$RBvSD|ykUpMU=P&a5cU-csG}Kkor!1N-L9;r6xPc+y|>b#!>9I=y*w=MVeimjZ!v zE&eJht)CInaY9>7ROwTfXKTlvuILrHzy8n9T-EvG&hh`kZE82ZecQIxMsHmdKI;Vst0LA}V{{R30 diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___h_a_l.html b/ChibiOS_2.0.8/docs/html/group___s_t_m32___h_a_l.html deleted file mode 100644 index b6310ff..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m32___h_a_l.html +++ /dev/null @@ -1,182 +0,0 @@ - - -ChibiOS/RT: STM32 HAL Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM32 HAL Support
    - -[STM32 Support] -

    -
    -
    - -

    HAL support. -More...

    - -

    -Collaboration diagram for STM32 HAL Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL support.

    - - - - -

    -

    - - -

    -

    - - - - - - - - - - - -

    -Modules

     STM32F103 HAL Support
     

    HAL support for STM32 LD, MD and HD families.

    -
     STM32F105/F107 HAL Support
     

    HAL support for STM32 CL (Connectivity Line) family.

    -

    -Defines

    #define PLATFORM_NAME   "STM32 MD"
     Platform name.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void stm32_clock_init (void)
     STM32 clocks and PLL initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PLATFORM_NAME   "STM32 MD"
    -
    -
    - -

    Platform name.

    - -

    Definition at line 53 of file platforms/STM32/hal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void hal_lld_init (void  ) 
    -
    -
    - -

    Low level HAL driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void stm32_clock_init (void  ) 
    -
    -
    - -

    STM32 clocks and PLL initialization.

    -
    Note:
    All the involved constants come from the file board.h.
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    const PALConfig pal_default_config
    -
    -
    -Initial value:
    -{
    -  {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
    -  {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
    -  {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
    -  {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
    -
    -  {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
    -
    -
    -
    -
    -
    -}
    -
    -

    PAL setup.

    -

    Digital I/O ports static configuration as defined in board.h.

    - -

    Definition at line 52 of file platforms/STM32/hal_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___h_a_l.png deleted file mode 100644 index 0bc38e3fa1e8a67942c200c45494d4b41d30051a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3482 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 d{gZ^QKlbx7eYQ? - -ChibiOS/RT: STM32 I/O Ports Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM32 I/O Ports Support
    - -[STM32 Support] -

    -
    -
    - -

    I/O Ports peripherals support. -More...

    - -

    -Collaboration diagram for STM32 I/O Ports Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    I/O Ports peripherals support.

    -

    This module supports the STM3 GPIO controller. The controller supports the following features (see PAL Driver):

    -
      -
    • 16 bits wide ports.
    • -
    • Atomic set/reset functions.
    • -
    • Atomic set+reset function (atomic bus operations).
    • -
    • Output latched regardless of the pad setting.
    • -
    • Direct read of input pads regardless of the pad setting.
    • -
    -

    Supported Setup Modes

    -
      -
    • PAL_MODE_RESET.
    • -
    • PAL_MODE_UNCONNECTED.
    • -
    • PAL_MODE_INPUT.
    • -
    • PAL_MODE_INPUT_PULLUP.
    • -
    • PAL_MODE_INPUT_PULLDOWN.
    • -
    • PAL_MODE_INPUT_ANALOG.
    • -
    • PAL_MODE_OUTPUT_PUSHPULL.
    • -
    • PAL_MODE_OUTPUT_OPENDRAIN.
    • -
    -

    Any attempt to setup an invalid mode is ignored.

    -

    Suboptimal Behavior

    -

    Some GPIO features are less than optimal:

    -
      -
    • Pad/port toggling operations are not atomic.
    • -
    • Pad/group mode setup is not atomic.
    • -
    • Writing on pads/groups/ports programmed as input with pull-up/down resistor can change the resistor setting because the output latch is used for resistor selection.
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  stm32_gpio_setup_t
     GPIO port setup info. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_MODE_STM32_ALTERNATE_PUSHPULL   16
     STM32 specific alternate push-pull output mode.
    #define PAL_MODE_STM32_ALTERNATE_OPENDRAIN   17
     STM32 specific alternate open-drain output mode.
    #define PAL_IOPORTS_WIDTH   16
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFFF)
     Whole port mask.
    #define IOPORT1   GPIOA
     GPIO port A identifier.
    #define IOPORT2   GPIOB
     GPIO port B identifier.
    #define IOPORT3   GPIOC
     GPIO port C identifier.
    #define IOPORT4   GPIOD
     GPIO port D identifier.
    #define IOPORT5   GPIOE
     GPIO port E identifier.
    #define IOPORT6   GPIOF
     GPIO port F identifier.
    #define IOPORT7   GPIOG
     GPIO port G identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     GPIO ports subsystem initialization.
    #define pal_lld_readport(port)   ((port)->IDR)
     Reads an I/O port.
    #define pal_lld_readlatch(port)   ((port)->ODR)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)   ((port)->ODR = (bits))
     Writes on a I/O port.
    #define pal_lld_setport(port, bits)   ((port)->BSRR = (bits))
     Sets a bits mask on a I/O port.
    #define pal_lld_clearport(port, bits)   ((port)->BRR = (bits))
     Clears a bits mask on a I/O port.
    #define pal_lld_writegroup(port, mask, offset, bits)
     Writes a group of bits.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.
    #define pal_lld_writepad(port, pad, bit)   pal_lld_writegroup(port, 1, pad, bit)
     Writes a logical state on an output pad.

    -Typedefs

    typedef uint32_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef GPIO_TypeDef * ioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     STM32 I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PAL_MODE_STM32_ALTERNATE_PUSHPULL   16
    -
    -
    - -

    STM32 specific alternate push-pull output mode.

    - -

    Definition at line 47 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_MODE_STM32_ALTERNATE_OPENDRAIN   17
    -
    -
    - -

    STM32 specific alternate open-drain output mode.

    - -

    Definition at line 52 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_IOPORTS_WIDTH   16
    -
    -
    - -

    Width, in bits, of an I/O port.

    - -

    Definition at line 101 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFFF)
    -
    -
    - -

    Whole port mask.

    -

    This macro specifies all the valid bits into a port.

    - -

    Definition at line 107 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT1   GPIOA
    -
    -
    - -

    GPIO port A identifier.

    - -

    Definition at line 131 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT2   GPIOB
    -
    -
    - -

    GPIO port B identifier.

    - -

    Definition at line 136 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT3   GPIOC
    -
    -
    - -

    GPIO port C identifier.

    - -

    Definition at line 141 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT4   GPIOD
    -
    -
    - -

    GPIO port D identifier.

    - -

    Definition at line 146 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT5   GPIOE
    -
    -
    - -

    GPIO port E identifier.

    - -

    Definition at line 152 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT6   GPIOF
    -
    -
    - -

    GPIO port F identifier.

    - -

    Definition at line 159 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT7   GPIOG
    -
    -
    - -

    GPIO port G identifier.

    - -

    Definition at line 164 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_init( config )    _pal_lld_init(config)
    -
    -
    - -

    GPIO ports subsystem initialization.

    - -

    Definition at line 175 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readport( port )    ((port)->IDR)
    -
    -
    - -

    Reads an I/O port.

    -

    This function is implemented by reading the GPIO IDR register, the implementation has no side effects.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - -
    [in] port the port identifier
    -
    -
    -
    Returns:
    The port bits.
    - -

    Definition at line 187 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readlatch( port )    ((port)->ODR)
    -
    -
    - -

    Reads the output latch.

    -

    This function is implemented by reading the GPIO ODR register, the implementation has no side effects.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - -
    [in] port the port identifier
    -
    -
    -
    Returns:
    The latched logical states.
    - -

    Definition at line 199 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writeport( port,
     bits 
    )   ((port)->ODR = (bits))
    -
    -
    - -

    Writes on a I/O port.

    -

    This function is implemented by writing the GPIO ODR register, the implementation has no side effects.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -Writing on pads programmed as pull-up or pull-down has the side effect to modify the resistor setting because the output latched data is used for the resistor selection.
    -
    Parameters:
    - - - -
    [in] port the port identifier
    [in] bits the bits to be written on the specified port
    -
    -
    - -

    Definition at line 214 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setport( port,
     bits 
    )   ((port)->BSRR = (bits))
    -
    -
    - -

    Sets a bits mask on a I/O port.

    -

    This function is implemented by writing the GPIO BSRR register, the implementation has no side effects.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -Writing on pads programmed as pull-up or pull-down has the side effect to modify the resistor setting because the output latched data is used for the resistor selection.
    -
    Parameters:
    - - - -
    [in] port the port identifier
    [in] bits the bits to be ORed on the specified port
    -
    -
    - -

    Definition at line 229 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_clearport( port,
     bits 
    )   ((port)->BRR = (bits))
    -
    -
    - -

    Clears a bits mask on a I/O port.

    -

    This function is implemented by writing the GPIO BRR register, the implementation has no side effects.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -Writing on pads programmed as pull-up or pull-down has the side effect to modify the resistor setting because the output latched data is used for the resistor selection.
    -
    Parameters:
    - - - -
    [in] port the port identifier
    [in] bits the bits to be cleared on the specified port
    -
    -
    - -

    Definition at line 244 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writegroup( port,
     mask,
     offset,
     bits 
    )
    -
    -
    -Value:
    {                      \
    -  (port)->BSRR = ((~(bits) & (mask)) << (16 + (offset))) |                  \
    -                 (((bits) & (mask)) << (offset));                           \
    -}
    -
    -

    Writes a group of bits.

    -

    This function is implemented by writing the GPIO BSRR register, the implementation has no side effects.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -Writing on pads programmed as pull-up or pull-down has the side effect to modify the resistor setting because the output latched data is used for the resistor selection.
    -
    Parameters:
    - - - - - -
    [in] port the port identifier
    [in] mask the group mask
    [in] offset the group bit offset within the port
    [in] bits the bits to be written. Values exceeding the group width are masked.
    -
    -
    - -

    Definition at line 262 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setgroupmode( port,
     mask,
     mode 
    )   _pal_lld_setgroupmode(port, mask, mode)
    -
    -
    - -

    Pads group mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -Writing on pads programmed as pull-up or pull-down has the side effect to modify the resistor setting because the output latched data is used for the resistor selection.
    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] mask the group mask
    [in] mode the mode
    -
    -
    - -

    Definition at line 281 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writepad( port,
     pad,
     bit 
    )   pal_lld_writegroup(port, 1, pad, bit)
    -
    -
    - -

    Writes a logical state on an output pad.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -Writing on pads programmed as pull-up or pull-down has the side effect to modify the resistor setting because the output latched data is used for the resistor selection.
    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] pad the pad number within the port
    [in] bit logical value, the value must be PAL_LOW or PAL_HIGH
    -
    -
    - -

    Definition at line 297 of file platforms/STM32/pal_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t ioportmask_t
    -
    -
    - -

    Digital I/O port sized unsigned type.

    - -

    Definition at line 112 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef GPIO_TypeDef* ioportid_t
    -
    -
    - -

    Port Identifier.

    -

    This type can be a scalar or some kind of pointer, do not make any assumption about it, use the provided macros when populating variables of this type.

    - -

    Definition at line 120 of file platforms/STM32/pal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void _pal_lld_init (const PALConfig config ) 
    -
    -
    - -

    STM32 I/O ports configuration.

    -

    Ports A-D(E, F, G) clocks enabled, AFIO clock enabled.

    -
    Parameters:
    - - -
    [in] config the STM32 ports configuration
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void _pal_lld_setgroupmode (ioportid_t  port,
    ioportmask_t  mask,
    uint_fast8_t  mode 
    )
    -
    -
    - -

    Pads mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -PAL_MODE_UNCONNECTED is implemented as push pull output at 2MHz.
    -
    -Writing on pads programmed as pull-up or pull-down has the side effect to modify the resistor setting because the output latched data is used for the resistor selection.
    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] mask the group mask
    [in] mode the mode
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    const PALConfig pal_default_config
    -
    -
    - -

    PAL setup.

    -

    Digital I/O ports static configuration as defined in board.h.

    - -

    Definition at line 49 of file platforms/AT91SAM7/hal_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___p_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___p_a_l.png deleted file mode 100644 index bcb2abb134c76cd450aa5a0bdcab9b8110ca068e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11302 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 - -ChibiOS/RT: STM32 PWM Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - -
    -
    - -
    -

    STM32 PWM Support
    - -[STM32 Support] -

    -
    -
    - -

    TIMx peripherals as PWM generators support. -More...

    - -

    -Collaboration diagram for STM32 PWM Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    TIMx peripherals as PWM generators support.

    -

    The PWM driver supports the STM32 TIMx units as PWM generators.

    - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    void pwm_lld_init (void)
     Low level PWM driver initialization.
    void pwm_lld_start (PWMDriver *pwmp)
     Configures and activates the PWM peripheral.
    void pwm_lld_stop (PWMDriver *pwmp)
     Deactivates the PWM peripheral.
    void pwm_lld_enable_channel (PWMDriver *pwmp, pwmchannel_t channel, pwmcnt_t width)
     Enables a PWM channel.
    void pwm_lld_disable_channel (PWMDriver *pwmp, pwmchannel_t channel)
     Disables a PWM channel.

    -Variables

    PWMDriver PWMD1
     PWM1 driver identifier.
    PWMDriver PWMD2
     PWM2 driver identifier.
    PWMDriver PWMD3
     PWM3 driver identifier.
    PWMDriver PWMD4
     PWM4 driver identifier.
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void pwm_lld_init (void  ) 
    -
    -
    - -

    Low level PWM driver initialization.

    - -

    Definition at line 206 of file platforms/STM32/pwm_lld.c.

    - -

    References PWMDriver::pd_enabled_channels, PWMDriver::pd_tim, and pwmObjectInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void pwm_lld_start (PWMDriver pwmp ) 
    -
    - -
    - -
    -
    - - - - - - - - - -
    void pwm_lld_stop (PWMDriver pwmp ) 
    -
    -
    - -

    Deactivates the PWM peripheral.

    -
    Parameters:
    - - -
    [in] pwmp pointer to a PWMDriver object
    -
    -
    - -

    Definition at line 370 of file platforms/STM32/pwm_lld.c.

    - -

    References NVICDisableVector(), PWMDriver::pd_enabled_channels, PWMDriver::pd_state, PWMDriver::pd_tim, and PWM_READY.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void pwm_lld_enable_channel (PWMDriver pwmp,
    pwmchannel_t  channel,
    pwmcnt_t  width 
    )
    -
    -
    - -

    Enables a PWM channel.

    -
    Parameters:
    - - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] channel PWM channel identifier (0...PWM_CHANNELS-1)
    [in] width PWM pulse width as clock pulses number
    -
    -
    - -

    Definition at line 421 of file platforms/STM32/pwm_lld.c.

    - -

    References PWMConfig::pc_channels, PWMChannelConfig::pcc_callback, PWMDriver::pd_config, PWMDriver::pd_enabled_channels, and PWMDriver::pd_tim.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void pwm_lld_disable_channel (PWMDriver pwmp,
    pwmchannel_t  channel 
    )
    -
    -
    - -

    Disables a PWM channel.

    -

    The channel is disabled and its output line returned to the idle state.

    -
    Parameters:
    - - - -
    [in] pwmp pointer to a PWMDriver object
    [in] channel PWM channel identifier (0...PWM_CHANNELS-1)
    -
    -
    - -

    Definition at line 446 of file platforms/STM32/pwm_lld.c.

    - -

    References PWMDriver::pd_enabled_channels, and PWMDriver::pd_tim.

    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    PWMDriver PWMD1
    -
    -
    - -

    PWM1 driver identifier.

    -
    Note:
    The driver PWM1 allocates the complex timer TIM1 when enabled.
    - -

    Definition at line 49 of file platforms/STM32/pwm_lld.c.

    - -
    -
    - -
    -
    - - - - -
    PWMDriver PWMD2
    -
    -
    - -

    PWM2 driver identifier.

    -
    Note:
    The driver PWM2 allocates the timer TIM2 when enabled.
    - -

    Definition at line 57 of file platforms/STM32/pwm_lld.c.

    - -
    -
    - -
    -
    - - - - -
    PWMDriver PWMD3
    -
    -
    - -

    PWM3 driver identifier.

    -
    Note:
    The driver PWM3 allocates the timer TIM3 when enabled.
    - -

    Definition at line 65 of file platforms/STM32/pwm_lld.c.

    - -
    -
    - -
    -
    - - - - -
    PWMDriver PWMD4
    -
    -
    - -

    PWM4 driver identifier.

    -
    Note:
    The driver PWM4 allocates the timer TIM4 when enabled.
    - -

    Definition at line 73 of file platforms/STM32/pwm_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m.png deleted file mode 100644 index f1c60e207661c45e4c2b9b762c134bb1ea9c9799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1241 zcmeAS@N?(olHy`uVBq!ia0y~yU=(FwU{K{?V_;y&d0hLOfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}wP?st6*3@p{2E{-7;bKc%PpDmLr!T#a>?(8KVnqQK3d3SO+ z3J3~1YF3WRUS^2E?{!M{~4mikKs+CD>v+mTqt+6!qjJ!O5k@|-0|9k%Ka`Q{7H0hqLyYBd;Tesb^cl!9R z-*fAwPW{EVdjAzK{aSc+Qa?j!-JYKYR|;Q+eOXfUcK-JJI~snpXtAvejQSH*Z^FG2 ztXF;S@hwh0A&&%I{@A>(d$xF;$NtFg#>?aOJ>Mrd`E{k<<;(N;+{p6P)lltL`ZS57 zjbRys!;_cElV7UmOq(1eulb^Xm(Aa{32NqhW3S1a&7AjsXMV}Es<@C9rlQ3v0$Hmj zrv3^snIEut@uBy7uU7Gi>(x}0njB*HddR!V97tP-JP3Q5d%*j{kWwWJ1_kP!!vNd4#wAX$U)}LSUc>v-DTl6N=U?~M&)4?<)tSbd?Z?Zl4O#L_GuF(n zU%vUzrl1IciLMT387vq+thx3ifW^D{;IXw_#anmsJUHjMBgt>kWD~E*_;~mI_xE!@ z=#qP`pCzr-WmZ@Jqu}vpja~nmI;yx2s5R_oNT_kw`0`64P)|q8zx7|N&q}uDYu%qaGtw5S5UC~RLhOK zdw=pDyR5j#s_>UHM%Id6k^Afa{LEFIKkgj=FWjbfV0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj}su{jR*W?EBd>v)_AI=ifi`vxY&jMZk#zO0c-_eA8#x@-6rT zN3q(L2Cfg5l6rYe6%$Nr5>{BSCX`iG?aFghK7HzxR|cou3?>8a2YDHaON=%%)LrXc z#?Ux(rsSFP=dZ8In3B0QDk36+L-#PdJ)?zq6wAtxE~( z`}%Fy{7q4(wp{&v`n1<4lbOfvB*eX+*U#|7r0dCcled57E-Ris`N`*gn{SK#V`kUt z3y9qGnQZ_1@|4UM`#!(faKra)%(2I-4wv${-i*lXsn-adR<^tM>C>m**M0r8$0&H` z%5|&TjK0R2&Ny`{OSXXT&Afi?rTauWpI`oRDcaMi)B_3C?c4L_+Jzn5~_d49k?_37RFZELHgPG?ChYDjQlN!~qOonhyqDK_4d zcE(RmdAHeOp2Yj>x?P(&*7H~S$!is_zg?Q^YL)Xg=kdl=oprV0Yx9prvt0~vN@EZf zp8w#&!pV+i^G(dUS9f&$`M;;*%^apDS1v9V|M<+eJh#Ti_TGjyhfIw%UayarW%kzf z?$N0_l^31%W62w##qzPC$2ac$DZ$QPC-dj_93>;>2YZ}Dmx^q26<~h#aCLb7F=^@j z_BZd{d!cS2k}Bx>n@caV_M%+dO8x131%#{aF8V0)H85Q5Y0GwoiLrhyUVBS|1ejayrkGgr+-1mtst*sE+04!@E6M5jf~#CjW1zi()DEu zf!pT3JUic9EBN*r+x30>R0=O99d>Phr~muq*?l!mk4rlfXQ}METNa-duk`!d`{jFA z`b~_xzDZ5FNq4CM+luAZ)}Lx++`V7F4xb-V`ugItTYBryOq=`S`mdcm`;GpJ-dx?c zUtek?d*UgU81?k4-;@vS2+HzyImYmZdxgB~qoaA>U&$|Qomf!8DNyRaW!1me7tDJO zy0UDaGHGet`@_Evgj+BCI^lzfQnNzo=Gyl^KVQGkbU&vx%!!SgjiV{<{cG`srV|df z+&`+&B9YjDLKx-+ty{Nl(bY%!i>@4<@JEj=;fF1&(H)&ffB&C5ym;Q?lOHT4*FDyO jWlsSo4#kuSKltYgTe~DWM4f0i_%E diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m_ga7cb5729a65c0996584808e4f93b28a0d_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m_ga7cb5729a65c0996584808e4f93b28a0d_cgraph.png deleted file mode 100644 index f4b49e36782b106d5aef51b2234ff5842599cb45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1081 zcmeAS@N?(olHy`uVBq!ia0y~yV0gj6z@W;(#=yYfaet{00|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyjh=RKJ!+y}eM?HbfH)+)+vNm{V*vEwYB z*XK6fJy(`~`}uT}t-Gz??`f?4eJ*SpgCG=qwOx4Aj(@?8vo2LP=57&w!EnC$T@}xR z#k&$6iXX5vygYgGB)F%XNYV*V>Q3F|;Jx(H z%=EkeJ|8>YJ70BO^i55XclWhLo~>Ipx0^Aj^2heqef`${S0pZd&uRI#Kk`@O^Geyb z=VvSu*u?QfZg*a)@PVwwg^7E~nS>udK&$*%S3?LW^e)v>m0;)ZvN ztKZ7YiyV*Va1!=6uaEd1y8X3PQbgXd-77Y#=B*5AdS3a#M*l-f-dq0YzHL@v5p(>C zI4(;)mtXztigt^GABP2l9>a`DLiw-0-f>*G;X_GI&ORQW=T;o|wH7Tn6!^Ve*FD-* zLQMVKpI3IJ^%u%a+4nDyc(w7^u9X{^c&!>2i!I69^Rh@@kfU{{5W$)q=N2Ud-CJkInbii4(d!{P#_MEp(jJ;_&aw z{BQ=Hm|Z2(XP+hBEo@8s{#}0UvYE3TuZhHq9OJrjUobi$QQ;_;;sWIocDv<``Fuc*@!sz4I=6XD^kOHOw|MH;*pg z9P!cb%`VaZLBClh@I8?6ym@DWQ1;ea^UDuRZYw%->t*qk-H~fv+SqM-wsg{u@5OQ9 z=4p?lLauWz-lth&weR>G4^GY#-}{uq{QZjZv$sCIpQ%1|fsV-XX%m@zf4RIjshcmB zG~s+hje)^~J@;-$|D5PhBh7vA*c_$PF6>LsJuP~4>)yRj*SCCL@Ga$6exat7Sh^WT zD$cY&diUNvw~Z&>>-4R5-zP49p(b8?X*Tcw``?eb?{S~@(dNawWVKuCTRWiO*QxmB Y{{^QmnACiMfq{X+)78&qol`;+0KZ@Z`2YX_ diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m_ga8a4d803d25a5326b48b3713ffd5fce53_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___p_w_m_ga8a4d803d25a5326b48b3713ffd5fce53_cgraph.png deleted file mode 100644 index 4aae0e364a5e24f4bb0700ce0c7b95b1a6b1cd98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1178 zcmeAS@N?(olHy`uVBq!ia0y~yU}R-rU{K{?V_;zL_WdKwz`($k|H*Y zfq{X&#M9T6{T8wB?Hn!m(3^gJ^@hAiyh(p?)j>8+SxcgwOJ zW%Y8iRvKUap7!kRnKy6J_RDjeJU9FMGxH7a&G%Q{Ok`AofkjP6HoUcI=$_1%(ihAA zq4KVy$OqrMi~)-I>gIEd-jwhiIQ8jM(bJ1(cHg}l%OG)0#w}3$`2PKCO}UD;CS@C_ zvN9a_^{dKs;f3IR?-yTxeO1;?@*eAjwbmR(m)JI>W_?hT;Slt-RAW`@N(@q1Bmra0 znCZ*4Hcb25?Q3@Lc7%SPY38`$TiE8EySDDw@k{MP-Qq=uGftTWM@Q{;tMj=%DOYb( zlIHIDuPdf*`sY3A**WfpEw=n`moB|r-(9k9l~=hz#ZRe%%#cTgBG35Gib^W~+V$c_ z@%nMS z2M?xi&*r_LXKCpp>S7UiS&Q%X{mQuIN1q9~-;+4CV&6QiRNsRpiibGUCe3k4^YvKJDlYX2O zZhv{|ZBXruV?5stL#-lT%dUGK`%3q6%zDj~*q6Rjoo=3+Q<=W=V#KOcM@=u&c#g!T zfTP(AcDB{unB?s3{+#$cZ@;BP&ByGihG7RvzMjp#(`oTFTW;xnI~Uc{AGbtz811}g z_oQ?6D%0k}ho$%H=0YHnv8}9j(?Tu3m5-jc^VipWeevR5_~FF+riv+{ z+}lo04*k}zeZI;q>i&y;kS3>C~$yB{r!Q7Rg_})p&ZwW3}Dx z{qO!5O5|Mo*ODl(#`IDbtDx*EFK3qRp@pd?livRRuK&MHJ^ulFvfQ<45;4D*#=gC* z7G5HAdB(+Udye}jzn)%dH)*5)N+0I!j5$who97>K-R61o#tnz{*Iz$68Qiv&t7+@D zRmbMdvR=m_wd$7mLDBoizy167%)fITmz}C*_o3w~^G`Ac?_ZX%+iJJUTBX0w&;A!} z{Kx7M&T{+vyWD>bv+O*aCx=^ThS=`x>N|h(y<6xyrb}i>TVyt^@A?+g(RhJu0*Pv@5&cetFGCf}j7D9b=oAdqJ=li*Phqo;J? z#~;?5E1asUt4rGhriq^U_dWcK^y}|-5%w1&Vs)k%h|bT@X^_vFl^guOK}-+^&Mx@R auyoCtika*Wix?Of7(8A5T-G@yGywol)-sC# diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___s_e_r_i_a_l.html b/ChibiOS_2.0.8/docs/html/group___s_t_m32___s_e_r_i_a_l.html deleted file mode 100644 index 35e1f62..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m32___s_e_r_i_a_l.html +++ /dev/null @@ -1,597 +0,0 @@ - - -ChibiOS/RT: STM32 USART Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM32 USART Support
    - -[STM32 Support] -

    -
    -
    - -

    USART peripherals support. -More...

    - -

    -Collaboration diagram for STM32 USART Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    USART peripherals support.

    -

    The serial driver supports the STM32 USARTs in asynchronous mode.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_STM32_USART1   TRUE
     USART1 driver enable switch.
    #define USE_STM32_USART2   TRUE
     USART2 driver enable switch.
    #define USE_STM32_USART3   TRUE
     USART3 driver enable switch.
    #define USE_STM32_UART4   TRUE
     UART4 driver enable switch.
    #define USE_STM32_UART5   TRUE
     UART5 driver enable switch.
    #define STM32_USART1_PRIORITY   12
     USART1 interrupt priority level setting.
    #define STM32_USART2_PRIORITY   12)
     USART2 interrupt priority level setting.
    #define STM32_USART3_PRIORITY   12
     USART3 interrupt priority level setting.
    #define STM32_UART4_PRIORITY   12
     UART4 interrupt priority level setting.
    #define STM32_UART5_PRIORITY   12
     UART5 interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.
    #define USART_CR2_STOP1_BITS   (0 << 12)
     CR2 1 stop bit value.
    #define USART_CR2_STOP0P5_BITS   (1 << 12)
     CR2 0.5 stop bit value.
    #define USART_CR2_STOP2_BITS   (2 << 12)
     CR2 2 stop bit value.
    #define USART_CR2_STOP1P5_BITS   (3 << 12)
     CR2 1.5 stop bit value.

    -Typedefs

    typedef uint32_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     USART1 serial driver identifier.
    SerialDriver SD2
     USART2 serial driver identifier.
    SerialDriver SD3
     USART3 serial driver identifier.
    SerialDriver SD4
     UART4 serial driver identifier.
    SerialDriver SD5
     UART5 serial driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define USE_STM32_USART1   TRUE
    -
    -
    - -

    USART1 driver enable switch.

    -

    If set to TRUE the support for USART1 is included.

    -
    Note:
    The default is FALSE.
    - -

    Definition at line 54 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_USART2   TRUE
    -
    -
    - -

    USART2 driver enable switch.

    -

    If set to TRUE the support for USART2 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 63 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_USART3   TRUE
    -
    -
    - -

    USART3 driver enable switch.

    -

    If set to TRUE the support for USART3 is included.

    -
    Note:
    The default is FALSE.
    - -

    Definition at line 72 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_UART4   TRUE
    -
    -
    - -

    UART4 driver enable switch.

    -

    If set to TRUE the support for UART4 is included.

    -
    Note:
    The default is FALSE.
    - -

    Definition at line 83 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_UART5   TRUE
    -
    -
    - -

    UART5 driver enable switch.

    -

    If set to TRUE the support for UART5 is included.

    -
    Note:
    The default is FALSE.
    - -

    Definition at line 92 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_USART1_PRIORITY   12
    -
    -
    - -

    USART1 interrupt priority level setting.

    - -

    Definition at line 100 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_USART2_PRIORITY   12)
    -
    -
    - -

    USART2 interrupt priority level setting.

    - -

    Definition at line 107 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_USART3_PRIORITY   12
    -
    -
    - -

    USART3 interrupt priority level setting.

    - -

    Definition at line 114 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_UART4_PRIORITY   12
    -
    -
    - -

    UART4 interrupt priority level setting.

    - -

    Definition at line 122 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_UART5_PRIORITY   12
    -
    -
    - -

    UART5 interrupt priority level setting.

    - -

    Definition at line 129 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define _serial_driver_data
    -
    -
    -Value:
    _base_asynchronous_channel_data                                           \
    -  /* Driver state.*/                                                        \
    -  sdstate_t                 state;                                          \
    -  /* Input queue.*/                                                         \
    -  InputQueue                iqueue;                                         \
    -  /* Output queue.*/                                                        \
    -  OutputQueue               oqueue;                                         \
    -  /* Status Change @p EventSource.*/                                        \
    -  EventSource               sevent;                                         \
    -  /* I/O driver status flags.*/                                             \
    -  sdflags_t                 flags;                                          \
    -  /* Input circular buffer.*/                                               \
    -  uint8_t                   ib[SERIAL_BUFFERS_SIZE];                        \
    -  /* Output circular buffer.*/                                              \
    -  uint8_t                   ob[SERIAL_BUFFERS_SIZE];                        \
    -  /* End of the mandatory fields.*/                                         \
    -  /* Pointer to the USART registers block.*/                                \
    -  USART_TypeDef             *usart;
    -
    -

    SerialDriver specific data.

    - -

    Definition at line 176 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USART_CR2_STOP1_BITS   (0 << 12)
    -
    -
    - -

    CR2 1 stop bit value.

    - -

    Definition at line 203 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USART_CR2_STOP0P5_BITS   (1 << 12)
    -
    -
    - -

    CR2 0.5 stop bit value.

    - -

    Definition at line 204 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USART_CR2_STOP2_BITS   (2 << 12)
    -
    -
    - -

    CR2 2 stop bit value.

    - -

    Definition at line 205 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USART_CR2_STOP1P5_BITS   (3 << 12)
    -
    -
    - -

    CR2 1.5 stop bit value.

    - -

    Definition at line 206 of file platforms/STM32/serial_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint32_t sdflags_t
    -
    -
    - -

    Serial Driver condition flags type.

    - -

    Definition at line 144 of file platforms/STM32/serial_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void sd_lld_init (void  ) 
    -
    -
    - -

    Low level serial driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sd_lld_start (SerialDriver sdp,
    const SerialConfig config 
    )
    -
    -
    - -

    Low level serial driver configuration and (re)start.

    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver object
    [in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_stop (SerialDriver sdp ) 
    -
    -
    - -

    Low level serial driver stop.

    -

    De-initializes the USART, stops the associated clock, resets the interrupt vector.

    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDriver object
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    SerialDriver SD1
    -
    -
    - -

    USART1 serial driver identifier.

    - -

    Definition at line 46 of file platforms/STM32/serial_lld.c.

    - -
    -
    - -
    -
    - - - - -
    SerialDriver SD2
    -
    -
    - -

    USART2 serial driver identifier.

    - -

    Definition at line 51 of file platforms/STM32/serial_lld.c.

    - -
    -
    - -
    -
    - - - - -
    SerialDriver SD3
    -
    -
    - -

    USART3 serial driver identifier.

    - -

    Definition at line 56 of file platforms/STM32/serial_lld.c.

    - -
    -
    - -
    -
    - - - - -
    SerialDriver SD4
    -
    -
    - -

    UART4 serial driver identifier.

    - -

    Definition at line 62 of file platforms/STM32/serial_lld.c.

    - -
    -
    - -
    -
    - - - - -
    SerialDriver SD5
    -
    -
    - -

    UART5 serial driver identifier.

    - -

    Definition at line 67 of file platforms/STM32/serial_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___s_e_r_i_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___s_e_r_i_a_l.png deleted file mode 100644 index 464856dd004cf7faa96797f679dceb47b38dc2da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18110 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 diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___s_p_i.html b/ChibiOS_2.0.8/docs/html/group___s_t_m32___s_p_i.html deleted file mode 100644 index 7a7bbaf..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m32___s_p_i.html +++ /dev/null @@ -1,713 +0,0 @@ - - -ChibiOS/RT: STM32 SPI Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM32 SPI Support
    - -[STM32 Support] -

    -
    -
    - -

    SPI peripherals support. -More...

    - -

    -Collaboration diagram for STM32 SPI Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    SPI peripherals support.

    -

    The SPI driver supports the STM32 SPIs using DMA channels for improved performance.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SPIConfig
     Driver configuration structure. More...
    struct  SPIDriver
     Structure representing a SPI driver. More...

    -Defines

    #define USE_STM32_SPI1   TRUE
     SPI1 driver enable switch.
    #define USE_STM32_SPI2   TRUE
     SPI2 driver enable switch.
    #define STM32_SPI1_DMA_PRIORITY   2
     SPI1 DMA priority (0..3|lowest..highest).
    #define STM32_SPI2_DMA_PRIORITY   2
     SPI2 DMA priority (0..3|lowest..highest).
    #define STM32_SPI1_IRQ_PRIORITY   10
     SPI1 interrupt priority level setting.
    #define STM32_SPI2_IRQ_PRIORITY   10
     SPI2 interrupt priority level setting.
    #define STM32_SPI1_DMA_ERROR_HOOK()   chSysHalt()
     SPI1 DMA error hook.
    #define STM32_SPI2_DMA_ERROR_HOOK()   chSysHalt()
     SPI2 DMA error hook.

    -Functions

     CH_IRQ_HANDLER (Vector70)
     SPI1 RX DMA interrupt handler (channel 2).
     CH_IRQ_HANDLER (Vector74)
     SPI1 TX DMA interrupt handler (channel 3).
     CH_IRQ_HANDLER (Vector78)
     SPI2 RX DMA interrupt handler (channel 4).
     CH_IRQ_HANDLER (Vector7C)
     SPI2 TX DMA interrupt handler (channel 5).
    void spi_lld_init (void)
     Low level SPI driver initialization.
    void spi_lld_start (SPIDriver *spip)
     Configures and activates the SPI peripheral.
    void spi_lld_stop (SPIDriver *spip)
     Deactivates the SPI peripheral.
    void spi_lld_select (SPIDriver *spip)
     Asserts the slave select signal and prepares for transfers.
    void spi_lld_unselect (SPIDriver *spip)
     Deasserts the slave select signal.
    void spi_lld_ignore (SPIDriver *spip, size_t n)
     Ignores data on the SPI bus.
    void spi_lld_exchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
     Exchanges data on the SPI bus.
    void spi_lld_send (SPIDriver *spip, size_t n, const void *txbuf)
     Sends data ever the SPI bus.
    void spi_lld_receive (SPIDriver *spip, size_t n, void *rxbuf)
     Receives data from the SPI bus.

    -Variables

    SPIDriver SPID1
     SPI1 driver identifier.
    SPIDriver SPID2
     SPI2 driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define USE_STM32_SPI1   TRUE
    -
    -
    - -

    SPI1 driver enable switch.

    -

    If set to TRUE the support for SPI1 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 54 of file platforms/STM32/spi_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM32_SPI2   TRUE
    -
    -
    - -

    SPI2 driver enable switch.

    -

    If set to TRUE the support for SPI2 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 63 of file platforms/STM32/spi_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SPI1_DMA_PRIORITY   2
    -
    -
    - -

    SPI1 DMA priority (0..3|lowest..highest).

    -
    Note:
    The priority level is used for both the TX and RX DMA channels but because of the channels ordering the RX channel has always priority over the TX channel.
    - -

    Definition at line 73 of file platforms/STM32/spi_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SPI2_DMA_PRIORITY   2
    -
    -
    - -

    SPI2 DMA priority (0..3|lowest..highest).

    -
    Note:
    The priority level is used for both the TX and RX DMA channels but because of the channels ordering the RX channel has always priority over the TX channel.
    - -

    Definition at line 83 of file platforms/STM32/spi_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SPI1_IRQ_PRIORITY   10
    -
    -
    - -

    SPI1 interrupt priority level setting.

    - -

    Definition at line 90 of file platforms/STM32/spi_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SPI2_IRQ_PRIORITY   10
    -
    -
    - -

    SPI2 interrupt priority level setting.

    - -

    Definition at line 97 of file platforms/STM32/spi_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define STM32_SPI1_DMA_ERROR_HOOK( )    chSysHalt()
    -
    -
    - -

    SPI1 DMA error hook.

    -
    Note:
    The default action for DMA errors is a system halt because DMA error can only happen because programming errors.
    - -

    Definition at line 106 of file platforms/STM32/spi_lld.h.

    - -

    Referenced by CH_IRQ_HANDLER().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define STM32_SPI2_DMA_ERROR_HOOK( )    chSysHalt()
    -
    -
    - -

    SPI2 DMA error hook.

    -
    Note:
    The default action for DMA errors is a system halt because DMA error can only happen because programming errors.
    - -

    Definition at line 115 of file platforms/STM32/spi_lld.h.

    - -

    Referenced by CH_IRQ_HANDLER().

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (Vector70  ) 
    -
    -
    - -

    SPI1 RX DMA interrupt handler (channel 2).

    - -

    Definition at line 120 of file platforms/STM32/spi_lld.c.

    - -

    References CH_IRQ_EPILOGUE, CH_IRQ_PROLOGUE, and STM32_SPI1_DMA_ERROR_HOOK.

    - -
    -
    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (Vector74  ) 
    -
    -
    - -

    SPI1 TX DMA interrupt handler (channel 3).

    - -

    Definition at line 137 of file platforms/STM32/spi_lld.c.

    - -

    References CH_IRQ_EPILOGUE, CH_IRQ_PROLOGUE, and STM32_SPI1_DMA_ERROR_HOOK.

    - -
    -
    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (Vector78  ) 
    -
    -
    - -

    SPI2 RX DMA interrupt handler (channel 4).

    - -

    Definition at line 153 of file platforms/STM32/spi_lld.c.

    - -

    References CH_IRQ_EPILOGUE, CH_IRQ_PROLOGUE, and STM32_SPI2_DMA_ERROR_HOOK.

    - -
    -
    - -
    -
    - - - - - - - - - -
    CH_IRQ_HANDLER (Vector7C  ) 
    -
    -
    - -

    SPI2 TX DMA interrupt handler (channel 5).

    - -

    Definition at line 170 of file platforms/STM32/spi_lld.c.

    - -

    References CH_IRQ_EPILOGUE, CH_IRQ_PROLOGUE, and STM32_SPI2_DMA_ERROR_HOOK.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_init (void  ) 
    -
    -
    - -

    Low level SPI driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_start (SPIDriver spip ) 
    -
    -
    - -

    Configures and activates the SPI peripheral.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_stop (SPIDriver spip ) 
    -
    -
    - -

    Deactivates the SPI peripheral.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_select (SPIDriver spip ) 
    -
    -
    - -

    Asserts the slave select signal and prepares for transfers.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void spi_lld_unselect (SPIDriver spip ) 
    -
    -
    - -

    Deasserts the slave select signal.

    -

    The previously selected peripheral is unselected.

    -
    Parameters:
    - - -
    [in] spip pointer to the SPIDriver object
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void spi_lld_ignore (SPIDriver spip,
    size_t  n 
    )
    -
    -
    - -

    Ignores data on the SPI bus.

    -

    This function transmits a series of idle words on the SPI bus and ignores the received data. This function can be invoked even when a slave select signal has not been yet asserted.

    -
    Parameters:
    - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to be ignored
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void spi_lld_exchange (SPIDriver spip,
    size_t  n,
    const void *  txbuf,
    void *  rxbuf 
    )
    -
    -
    - -

    Exchanges data on the SPI bus.

    -

    This function performs a simultaneous transmit/receive operation.

    -
    Parameters:
    - - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to be exchanged
    [in] txbuf the pointer to the transmit buffer
    [out] rxbuf the pointer to the receive buffer
    -
    -
    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void spi_lld_send (SPIDriver spip,
    size_t  n,
    const void *  txbuf 
    )
    -
    -
    - -

    Sends data ever the SPI bus.

    -
    Parameters:
    - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to send
    [in] txbuf the pointer to the transmit buffer
    -
    -
    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void spi_lld_receive (SPIDriver spip,
    size_t  n,
    void *  rxbuf 
    )
    -
    -
    - -

    Receives data from the SPI bus.

    -
    Parameters:
    - - - - -
    [in] spip pointer to the SPIDriver object
    [in] n number of words to receive
    [out] rxbuf the pointer to the receive buffer
    -
    -
    -
    Note:
    The buffers are organized as uint8_t arrays for data sizes below or equal to 8 bits else it is organized as uint16_t arrays.
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    SPIDriver SPID1
    -
    -
    - -

    SPI1 driver identifier.

    - -

    Definition at line 45 of file platforms/STM32/spi_lld.c.

    - -
    -
    - -
    -
    - - - - -
    SPIDriver SPID2
    -
    -
    - -

    SPI2 driver identifier.

    - -

    Definition at line 50 of file platforms/STM32/spi_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32___s_p_i.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32___s_p_i.png deleted file mode 100644 index 96b2bf67a1989f3488eb71fac83512dd87f95b7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3770 zcmeAS@N?(olHy`uVBq!ia0y~yV0_EKz>vbh#=yX^x+Wu@fq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM`-O@2hng82Dm5T^vIy=DfX|+Y=Kid;H`3nWSVB7A>E=d=}uS;}tKu2H=iJd2vLYaFr- zrmW~FTfFpJV)llu8Y@e77uOhCe=Vv$S39HnncbN`b|+KP&h34E=YP)j-}8&#?R?(U zffHP5S!u-}IFUoTI^SrD`~SYk<94n|hJDE$9UVP;E0X%A9o@e3RPFDUuBBPBRfR7N z<@(L|mha?pb;(l7=D%+B&G&WVapB@Ud+skQ%~`#QeILu2sWm>D_sj0Hspbl|Cl!DyXb*6=? zXH7h{brqk3ON#5nd8=1Hw>~p(L)Fb7&aYcsm*~ZGn)|=Eio3sL%5zcs=j)E>E)BjU zHqq*%>XkK5D_^N!J^LwYNr~4jC8e7plB_GdZl&g~`?MtT^I@Ym$v^DELoR(>y<^XL zPtRxQcU|ieraj$xzFd9%j}Jw`dK0yFMfhIY zSGm14OFcJwqS5_rI`dWE8?r3|#evZo$@5$1@ajxzpR}#x%GnKRHrI>HHh9Q^Vk12C zd_`E%v|AV76bi1KJYjR5w4ro_3O^`bC)Y9c+I{*`!M=97nETSbdAobH?e{l^he$SG zX>L32x+ITn?#DYjZXPI`ciG~|&n*>a&Juib|@Kz zy?MJPsVUPh`lasosx$pFzUF+p_ESwfX$Qw)rpY=pBL4*^olsI=xm;IC`F!3}QwclQ ze2w2W2NE_Ou;bxA;1pC_ELzX@&*qPZ>m<$0ZV%;~Z|5AmbaLLOmdNvS|IM{@>Sle= zejv|p!vQ1iXHoy6!}cgC?r1w6&k_?>rcl%+8_F(lAoWY#{1lTnM~dg=-pFZBPyV5> zK`df-(akHfrk;)E*>9A4FTyoPDYfY9mirCs*w-`%&d4ud-g|SMk<_z>+=bFxqb(6_&KdvP~Y=&+FVOWx%Fjbh~+&oE7X^UUX8*1dC+7d{qRxp>LLkAWUizE{#(_L;1W z-rg6Tw{z($gCz@Q&YbD=b?wm)x^cecPlYr;PjPjd*PeRvT=A}%4_j96oB7n>!z3ri zjvj`&m&GP7G-k`TzQaC;&!#Jt@o;lQS;7zQ4YSQR#}v*`+PZv+uF}k#Z`asa{(Sx4 zyJ(-tjAciUKJ)tbZtb2kt}>4o{8aEh_qN!XD=MW$BeUB>jeXyV;^2@!Gz*Ipx%Xws#lJG|%4~@b*aikI8ZBy)r-Ix;;L(SS^=* zf3i)g>zwhPIFoq+dw(m;|2wDHY_7FsX4=BtiIq3wl6oSWf`z`G==|=`esS|z~9m*PTZ=C{K!&xkahMsyQ(k#`EgrcJ!N2Dvo$uk zs&Kh_R(6l!bzk4R5wka*Pd+YJsVXDCA}`YR@S3-~A4#g{eXVd^(joACOZS}3U(c%e zXBq1>RL=!GuiL!svGgVREqmKGZFHYj6#rLXprhqtY3eA-r4_5b!_&(4p=_Vne~dd z|2FRd)ngl`+_`ObEoz&L&5xb>sg_}$RvX?ujVv#l+s$Vvc-FM%?W`%H_F*e3Cf(|s z|Gw||V=2G#slV-(d-qoV%v^r(Q=DZ`O3T^un2BCH>m+}d&y-poA9BC`omSgb|DQkI z)fY(~-lE<(f5S9sF>&+jTAAykx362fyXNWir@uaLdYtI7{aKI4um8`yPwYFnaNV!k zeXBiVo_^f+IR4l1m+zNcIj}+R=cI;jZ-3u8bg+4QZBb$2=UZXj-Uo8b+L{@T&Dry_ zDQx@XWv|r_T{wL4?~_~gMq=ezUG`@!@Lg~9cbmsd3laULms z>VCB|YDtmTE#-&W-re1QHoVes;nFJVv&g-;_`;Rb)4V`AJ62?`(9!Zx_j#*rH*H)0 zuyADysMhhk_fvJ9x83Gz{;Os`-RkiYRP1l!+$-1Wkq55HH9WnamdxGO(c#g&)v|PM zyzQy_o+iGl|7F}ieY|75@q3L(^;zkS>1(v!?syygzteSz&$@^6#2KegmF<|5 z!^eqDI_5u4RQGQ8y{V_9WK{DlEUIkZ#_+ZsZQs_WNAJ0_y;dY+-Ngz!zl&G?-%xs# zn75R>r1tjOqZb|)?fP>g=B%)4o7oBh@7c?2zq{Ud|DUm|>TBqiE9u%6%ciX7jd^!# z!4h4gymt?rc&ukU*m3umZOKow56qkA9be7I`(4+_`Q+q`%abZYonJ3Da16cV`^fXw zF2CrMGc(Nk6C#=)vgw>Z@}ZQc{f*habnBSZ{O500IUlLdfBWJ>;=Lm;qfc$A=Lug_ zc634U!yrl3+=+%Mw`|gGGiypuw$N{@By)T$BwV+%Xc-YJbwC=$DFpJesv|K zNpttk-Tby}UUVu4XX?35OU~PCpO;SjzE7fUt-YY{vF7jhqn~eaeWFsV``_#K@v&K&7bO=Q!_T#S$3`$exTjHyl&r;)Y9hK#DGg;6F>PRY}~S8 zkNoNGmrZw1DYdmX+-J5oD!vn4I%CpFh3hAmuhkIGDxB+h`(v-oj=1#L2K5a7c+Y4T zujF+p>L2tNZa=&k5yu+CvxlpKyMX17XZ6x^MZRJA*{hT`KiaIaU`g#J9Y$&SD*x9v z`7ZfI&0X`f^0uarXS9n};xh}TJKH~0x}DSJ*I;0w|}bv2mxs$Vjwp;8=?ci4b`j(lZISE883bWSs-_^)C2k4bNs)BRAs z#PW<$dnH@@S)Jpjell#Gn!dx_J9?ejqW86LTfNpq-Yz^lNj@#66=Y8GjIVE)zwO+1 zb9bfHf6twF&U~_aAf?0R{9gZo&<(!h1~O?gU!M)FxgY(PFRuM*jE;Ne$NXJ3oHl;l zda->*Cxz3dJ#MZ)wBVCo(BtTUV_T)}C~)fBOaA6t$G!1db&&PP&v!qbe+nvMpGP*h z3tx0`S#;)hrBUg8%X{h1Z=P_R=iGgDPJ*d!*yU8y4N?^r8yQdcM%-hz`TA`6-|NRK z#XrR6f8~pAnAxHnlm2Xm|8E&do~pdE39PA`^s*+WI?gsa_4szzk*P~{GWcUXqg{@5 z&3wpGknwcl`n=iNZ`N*!I320;S%>HRf}@fVQ4;4C9bI>XP3L>UjkkC04&K{i*xAwH zvG+xr;^U*g->-ej=IY`i<>VRd;<7{$RJLK~fJ!)z;+*wX44Owp_wfp+x+y9tFzopr0E1v{xBvhE diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32_f103___h_a_l.html b/ChibiOS_2.0.8/docs/html/group___s_t_m32_f103___h_a_l.html deleted file mode 100644 index 7e39ac2..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m32_f103___h_a_l.html +++ /dev/null @@ -1,2139 +0,0 @@ - - -ChibiOS/RT: STM32F103 HAL Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM32F103 HAL Support
    - -[STM32 HAL Support] -

    -
    -
    - -

    HAL support for STM32 LD, MD and HD families. -More...

    - -

    -Collaboration diagram for STM32F103 HAL Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL support for STM32 LD, MD and HD families.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define STM32_HSICLK   8000000
    #define STM32_LSICLK   40000
    #define STM32_SW_HSI   (0 << 0)
    #define STM32_SW_HSE   (1 << 0)
    #define STM32_SW_PLL   (2 << 0)
    #define STM32_HPRE_DIV1   (0 << 4)
    #define STM32_HPRE_DIV2   (8 << 4)
    #define STM32_HPRE_DIV4   (9 << 4)
    #define STM32_HPRE_DIV8   (10 << 4)
    #define STM32_HPRE_DIV16   (11 << 4)
    #define STM32_HPRE_DIV64   (12 << 4)
    #define STM32_HPRE_DIV128   (13 << 4)
    #define STM32_HPRE_DIV256   (14 << 4)
    #define STM32_HPRE_DIV512   (15 << 4)
    #define STM32_PPRE1_DIV1   (0 << 8)
    #define STM32_PPRE1_DIV2   (4 << 8)
    #define STM32_PPRE1_DIV4   (5 << 8)
    #define STM32_PPRE1_DIV8   (6 << 8)
    #define STM32_PPRE1_DIV16   (7 << 8)
    #define STM32_PPRE2_DIV1   (0 << 11)
    #define STM32_PPRE2_DIV2   (4 << 11)
    #define STM32_PPRE2_DIV4   (5 << 11)
    #define STM32_PPRE2_DIV8   (6 << 11)
    #define STM32_PPRE2_DIV16   (7 << 11)
    #define STM32_ADCPRE_DIV2   (0 << 14)
    #define STM32_ADCPRE_DIV4   (1 << 14)
    #define STM32_ADCPRE_DIV6   (2 << 14)
    #define STM32_ADCPRE_DIV8   (3 << 14)
    #define STM32_PLLSRC_HSI   (0 << 16)
    #define STM32_PLLSRC_HSE   (1 << 16)
    #define STM32_PLLXTPRE_DIV1   (0 << 17)
    #define STM32_PLLXTPRE_DIV2   (1 << 17)
    #define STM32_MCO_NOCLOCK   (0 << 24)
    #define STM32_MCO_SYSCLK   (4 << 24)
    #define STM32_MCO_HSI   (5 << 24)
    #define STM32_MCO_HSE   (6 << 24)
    #define STM32_MCO_PLLDIV2   (7 << 24)
    #define WWDG_IRQHandler   Vector40
    #define PVD_IRQHandler   Vector44
    #define TAMPER_IRQHandler   Vector48
    #define RTC_IRQHandler   Vector4C
    #define FLASH_IRQHandler   Vector50
    #define RCC_IRQHandler   Vector54
    #define EXTI0_IRQHandler   Vector58
    #define EXTI1_IRQHandler   Vector5C
    #define EXTI2_IRQHandler   Vector60
    #define EXTI3_IRQHandler   Vector64
    #define EXTI4_IRQHandler   Vector68
    #define DMA1_Ch1_IRQHandler   Vector6C
    #define DMA1_Ch2_IRQHandler   Vector70
    #define DMA1_Ch3_IRQHandler   Vector74
    #define DMA1_Ch4_IRQHandler   Vector78
    #define DMA1_Ch5_IRQHandler   Vector7C
    #define DMA1_Ch6_IRQHandler   Vector80
    #define DMA1_Ch7_IRQHandler   Vector84
    #define ADC1_2_IRQHandler   Vector88
    #define CAN1_TX_IRQHandler   Vector8C
    #define USB_HP_IRQHandler   Vector8C
    #define CAN1_RX0_IRQHandler   Vector90
    #define USB_LP_IRQHandler   Vector90
    #define CAN1_RX1_IRQHandler   Vector94
    #define CAN1_SCE_IRQHandler   Vector98
    #define EXTI9_5_IRQHandler   Vector9C
    #define TIM1_BRK_IRQHandler   VectorA0
    #define TIM1_UP_IRQHandler   VectorA4
    #define TIM1_TRG_COM_IRQHandler   VectorA8
    #define TIM1_CC_IRQHandler   VectorAC
    #define TIM2_IRQHandler   VectorB0
    #define TIM3_IRQHandler   VectorB4
    #define TIM4_IRQHandler   VectorB8
    #define I2C1_EV_IRQHandler   VectorBC
    #define I2C1_ER_IRQHandler   VectorC0
    #define I2C2_EV_IRQHandler   VectorC4
    #define I2C2_ER_IRQHandler   VectorC8
    #define SPI1_IRQHandler   VectorCC
    #define SPI2_IRQHandler   VectorD0
    #define USART1_IRQHandler   VectorD4
    #define USART2_IRQHandler   VectorD8
    #define USART3_IRQHandler   VectorDC
    #define EXTI15_10_IRQHandler   VectorE0
    #define RTCAlarm_IRQHandler   VectorE4
    #define USBWakeUp_IRQHandler   VectorE8
    #define TIM8_BRK_IRQHandler   VectorEC
    #define TIM8_UP_IRQHandler   VectorF0
    #define TIM8_TRG_COM_IRQHandler   VectorF4
    #define TIM8_CC_IRQHandler   VectorF8
    #define ADC3_IRQHandler   VectorFC
    #define FSMC_IRQHandler   Vector100
    #define SDIO_IRQHandler   Vector104
    #define TIM5_IRQHandler   Vector108
    #define SPI3_IRQHandler   Vector10C
    #define UART4_IRQHandler   Vector110
    #define UART5_IRQHandler   Vector114
    #define TIM6_IRQHandler   Vector118
    #define TIM7_IRQHandler   Vector11C
    #define DMA2_Ch1_IRQHandler   Vector120
    #define DMA2_Ch2_IRQHandler   Vector124
    #define DMA2_Ch3_IRQHandler   Vector128
    #define DMA2_Ch4_5_IRQHandler   Vector12C
    #define STM32_SW   STM32_SW_PLL
     Main clock source selection.
    #define STM32_PLLSRC   STM32_PLLSRC_HSE
     Clock source for the PLL.
    #define STM32_PLLXTPRE   STM32_PLLXTPRE_DIV1
     Crystal PLL pre-divider.
    #define STM32_PLLMUL_VALUE   9
     PLL multiplier value.
    #define STM32_HPRE   STM32_HPRE_DIV1
     AHB prescaler value.
    #define STM32_PPRE1   STM32_PPRE1_DIV2
     APB1 prescaler value.
    #define STM32_PPRE2   STM32_PPRE2_DIV2
     APB2 prescaler value.
    #define STM32_ADCPRE   STM32_ADCPRE_DIV4
     ADC prescaler value.
    #define STM32_MCO   STM32_MCO_NOCLOCK
     MCO pin setting.
    #define STM32_PLLMUL   ((STM32_PLLMUL_VALUE - 2) << 18)
     PLLMUL field.
    #define STM32_PLLCLKIN   (STM32_HSECLK / 1)
     PLL input clock frequency.
    #define STM32_PLLCLKOUT   (STM32_PLLCLKIN * STM32_PLLMUL_VALUE)
     PLL output clock frequency.
    #define STM32_SYSCLK   STM32_PLLCLKOUT
     System clock source.
    #define STM32_HCLK   (STM32_SYSCLK / 1)
     AHB frequency.
    #define STM32_PCLK1   (STM32_HCLK / 1)
     APB1 frequency.
    #define STM32_PCLK2   (STM32_HCLK / 1)
     APB2 frequency.
    #define STM32_ADCCLK   (STM32_PCLK2 / 2)
     ADC frequency.
    #define STM32_TIMCLK1   (STM32_PCLK1 * 1)
     Timers 2, 3, 4, 5, 6, 7, 12, 13, 14 clock.
    #define STM32_TIMCLK2   (STM32_PCLK2 * 1)
     Timers 1, 8, 9, 10 and 11 clock.
    #define STM32_FLASHBITS   0x00000010
     Flash settings.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define STM32_HSICLK   8000000
    -
    -
    -

    High speed internal clock.

    - -

    Definition at line 42 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_LSICLK   40000
    -
    -
    -

    Low speed internal clock.

    - -

    Definition at line 43 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SW_HSI   (0 << 0)
    -
    -
    -

    SYSCLK source is HSI.

    - -

    Definition at line 46 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SW_HSE   (1 << 0)
    -
    -
    -

    SYSCLK source is HSE.

    - -

    Definition at line 47 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SW_PLL   (2 << 0)
    -
    -
    -

    SYSCLK source is PLL.

    - -

    Definition at line 48 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV1   (0 << 4)
    -
    -
    -

    SYSCLK divided by 1.

    - -

    Definition at line 50 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV2   (8 << 4)
    -
    -
    -

    SYSCLK divided by 2.

    - -

    Definition at line 51 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV4   (9 << 4)
    -
    -
    -

    SYSCLK divided by 4.

    - -

    Definition at line 52 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV8   (10 << 4)
    -
    -
    -

    SYSCLK divided by 8.

    - -

    Definition at line 53 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV16   (11 << 4)
    -
    -
    -

    SYSCLK divided by 16.

    - -

    Definition at line 54 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV64   (12 << 4)
    -
    -
    -

    SYSCLK divided by 64.

    - -

    Definition at line 55 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV128   (13 << 4)
    -
    -
    -

    SYSCLK divided by 128.

    - -

    Definition at line 56 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV256   (14 << 4)
    -
    -
    -

    SYSCLK divided by 256.

    - -

    Definition at line 57 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV512   (15 << 4)
    -
    -
    -

    SYSCLK divided by 512.

    - -

    Definition at line 58 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1_DIV1   (0 << 8)
    -
    -
    -

    HCLK divided by 1.

    - -

    Definition at line 60 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1_DIV2   (4 << 8)
    -
    -
    -

    HCLK divided by 2.

    - -

    Definition at line 61 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1_DIV4   (5 << 8)
    -
    -
    -

    HCLK divided by 4.

    - -

    Definition at line 62 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1_DIV8   (6 << 8)
    -
    -
    -

    HCLK divided by 8.

    - -

    Definition at line 63 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1_DIV16   (7 << 8)
    -
    -
    -

    HCLK divided by 16.

    - -

    Definition at line 64 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2_DIV1   (0 << 11)
    -
    -
    -

    HCLK divided by 1.

    - -

    Definition at line 66 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2_DIV2   (4 << 11)
    -
    -
    -

    HCLK divided by 2.

    - -

    Definition at line 67 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2_DIV4   (5 << 11)
    -
    -
    -

    HCLK divided by 4.

    - -

    Definition at line 68 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2_DIV8   (6 << 11)
    -
    -
    -

    HCLK divided by 8.

    - -

    Definition at line 69 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2_DIV16   (7 << 11)
    -
    -
    -

    HCLK divided by 16.

    - -

    Definition at line 70 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCPRE_DIV2   (0 << 14)
    -
    -
    -

    HCLK divided by 2.

    - -

    Definition at line 72 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCPRE_DIV4   (1 << 14)
    -
    -
    -

    HCLK divided by 4.

    - -

    Definition at line 73 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCPRE_DIV6   (2 << 14)
    -
    -
    -

    HCLK divided by 6.

    - -

    Definition at line 74 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCPRE_DIV8   (3 << 14)
    -
    -
    -

    HCLK divided by 8.

    - -

    Definition at line 75 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLSRC_HSI   (0 << 16)
    -
    -
    -

    PLL clock source is HSI.

    - -

    Definition at line 77 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLSRC_HSE   (1 << 16)
    -
    -
    -

    PLL clock source is HSE.

    - -

    Definition at line 78 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLXTPRE_DIV1   (0 << 17)
    -
    -
    -

    HSE divided by 1.

    - -

    Definition at line 80 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLXTPRE_DIV2   (1 << 17)
    -
    -
    -

    HSE divided by 2.

    - -

    Definition at line 81 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_NOCLOCK   (0 << 24)
    -
    -
    -

    No clock on MCO pin.

    - -

    Definition at line 83 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_SYSCLK   (4 << 24)
    -
    -
    -

    SYSCLK on MCO pin.

    - -

    Definition at line 84 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_HSI   (5 << 24)
    -
    -
    -

    HSI clock on MCO pin.

    - -

    Definition at line 85 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_HSE   (6 << 24)
    -
    -
    -

    HSE clock on MCO pin.

    - -

    Definition at line 86 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_PLLDIV2   (7 << 24)
    -
    -
    -

    PLL/2 clock on MCO pin.

    - -

    Definition at line 87 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define WWDG_IRQHandler   Vector40
    -
    -
    -

    Window Watchdog.

    - -

    Definition at line 93 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define PVD_IRQHandler   Vector44
    -
    -
    -

    PVD through EXTI Line detect.

    - -

    Definition at line 94 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TAMPER_IRQHandler   Vector48
    -
    -
    -

    Tamper.

    - -

    Definition at line 96 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define RTC_IRQHandler   Vector4C
    -
    -
    -

    RTC.

    - -

    Definition at line 97 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define FLASH_IRQHandler   Vector50
    -
    -
    -

    Flash.

    - -

    Definition at line 98 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define RCC_IRQHandler   Vector54
    -
    -
    -

    RCC.

    - -

    Definition at line 99 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI0_IRQHandler   Vector58
    -
    -
    -

    EXTI Line 0.

    - -

    Definition at line 100 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI1_IRQHandler   Vector5C
    -
    -
    -

    EXTI Line 1.

    - -

    Definition at line 101 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI2_IRQHandler   Vector60
    -
    -
    -

    EXTI Line 2.

    - -

    Definition at line 102 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI3_IRQHandler   Vector64
    -
    -
    -

    EXTI Line 3.

    - -

    Definition at line 103 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI4_IRQHandler   Vector68
    -
    -
    -

    EXTI Line 4.

    - -

    Definition at line 104 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch1_IRQHandler   Vector6C
    -
    -
    -

    DMA1 Channel 1.

    - -

    Definition at line 105 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch2_IRQHandler   Vector70
    -
    -
    -

    DMA1 Channel 2.

    - -

    Definition at line 106 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch3_IRQHandler   Vector74
    -
    -
    -

    DMA1 Channel 3.

    - -

    Definition at line 107 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch4_IRQHandler   Vector78
    -
    -
    -

    DMA1 Channel 4.

    - -

    Definition at line 108 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch5_IRQHandler   Vector7C
    -
    -
    -

    DMA1 Channel 5.

    - -

    Definition at line 109 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch6_IRQHandler   Vector80
    -
    -
    -

    DMA1 Channel 6.

    - -

    Definition at line 110 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch7_IRQHandler   Vector84
    -
    -
    -

    DMA1 Channel 7.

    - -

    Definition at line 111 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC1_2_IRQHandler   Vector88
    -
    -
    -

    ADC1_2.

    - -

    Definition at line 112 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN1_TX_IRQHandler   Vector8C
    -
    -
    -

    CAN1 TX.

    - -

    Definition at line 113 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define USB_HP_IRQHandler   Vector8C
    -
    -
    -

    USB High Priority, CAN1 TX.

    - -

    Definition at line 114 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN1_RX0_IRQHandler   Vector90
    -
    -
    -

    CAN1 RX0.

    - -

    Definition at line 115 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define USB_LP_IRQHandler   Vector90
    -
    -
    -

    USB Low Priority, CAN1 RX0.

    - -

    Definition at line 116 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN1_RX1_IRQHandler   Vector94
    -
    -
    -

    CAN1 RX1.

    - -

    Definition at line 117 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN1_SCE_IRQHandler   Vector98
    -
    -
    -

    CAN1 SCE.

    - -

    Definition at line 118 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI9_5_IRQHandler   Vector9C
    -
    -
    -

    EXTI Line 9..5.

    - -

    Definition at line 119 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM1_BRK_IRQHandler   VectorA0
    -
    -
    -

    TIM1 Break.

    - -

    Definition at line 120 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM1_UP_IRQHandler   VectorA4
    -
    -
    -

    TIM1 Update.

    - -

    Definition at line 121 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM1_TRG_COM_IRQHandler   VectorA8
    -
    -
    -

    TIM1 Trigger and Commutation.

    - -

    Definition at line 122 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM1_CC_IRQHandler   VectorAC
    -
    -
    -

    TIM1 Capture Compare.

    - -

    Definition at line 124 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM2_IRQHandler   VectorB0
    -
    -
    -

    TIM2.

    - -

    Definition at line 125 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM3_IRQHandler   VectorB4
    -
    -
    -

    TIM3.

    - -

    Definition at line 126 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM4_IRQHandler   VectorB8
    -
    -
    -

    TIM4.

    - -

    Definition at line 128 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define I2C1_EV_IRQHandler   VectorBC
    -
    -
    -

    I2C1 Event.

    - -

    Definition at line 130 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define I2C1_ER_IRQHandler   VectorC0
    -
    -
    -

    I2C1 Error.

    - -

    Definition at line 131 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define I2C2_EV_IRQHandler   VectorC4
    -
    -
    -

    I2C2 Event.

    - -

    Definition at line 133 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define I2C2_ER_IRQHandler   VectorC8
    -
    -
    -

    I2C2 Error.

    - -

    Definition at line 134 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPI1_IRQHandler   VectorCC
    -
    -
    -

    SPI1.

    - -

    Definition at line 136 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPI2_IRQHandler   VectorD0
    -
    -
    -

    SPI2.

    - -

    Definition at line 138 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define USART1_IRQHandler   VectorD4
    -
    -
    -

    USART1.

    - -

    Definition at line 140 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define USART2_IRQHandler   VectorD8
    -
    -
    -

    USART2.

    - -

    Definition at line 141 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define USART3_IRQHandler   VectorDC
    -
    -
    -

    USART3.

    - -

    Definition at line 143 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI15_10_IRQHandler   VectorE0
    -
    -
    -

    EXTI Line 15..10.

    - -

    Definition at line 145 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define RTCAlarm_IRQHandler   VectorE4
    -
    -
    -

    RTC Alarm through EXTI.

    - -

    Definition at line 146 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define USBWakeUp_IRQHandler   VectorE8
    -
    -
    -

    USB Wakeup from suspend.

    - -

    Definition at line 147 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM8_BRK_IRQHandler   VectorEC
    -
    -
    -

    TIM8 Break.

    - -

    Definition at line 149 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM8_UP_IRQHandler   VectorF0
    -
    -
    -

    TIM8 Update.

    - -

    Definition at line 150 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM8_TRG_COM_IRQHandler   VectorF4
    -
    -
    -

    TIM8 Trigger and Commutation.

    - -

    Definition at line 151 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM8_CC_IRQHandler   VectorF8
    -
    -
    -

    TIM8 Capture Compare.

    - -

    Definition at line 153 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC3_IRQHandler   VectorFC
    -
    -
    -

    ADC3.

    - -

    Definition at line 154 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define FSMC_IRQHandler   Vector100
    -
    -
    -

    FSMC.

    - -

    Definition at line 155 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define SDIO_IRQHandler   Vector104
    -
    -
    -

    SDIO.

    - -

    Definition at line 156 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM5_IRQHandler   Vector108
    -
    -
    -

    TIM5.

    - -

    Definition at line 157 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPI3_IRQHandler   Vector10C
    -
    -
    -

    SPI3.

    - -

    Definition at line 158 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define UART4_IRQHandler   Vector110
    -
    -
    -

    UART4.

    - -

    Definition at line 159 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define UART5_IRQHandler   Vector114
    -
    -
    -

    UART5.

    - -

    Definition at line 160 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM6_IRQHandler   Vector118
    -
    -
    -

    TIM6.

    - -

    Definition at line 161 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM7_IRQHandler   Vector11C
    -
    -
    -

    TIM7.

    - -

    Definition at line 162 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA2_Ch1_IRQHandler   Vector120
    -
    -
    -

    DMA2 Channel1.

    - -

    Definition at line 163 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA2_Ch2_IRQHandler   Vector124
    -
    -
    -

    DMA2 Channel2.

    - -

    Definition at line 164 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA2_Ch3_IRQHandler   Vector128
    -
    -
    -

    DMA2 Channel3.

    - -

    Definition at line 165 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA2_Ch4_5_IRQHandler   Vector12C
    -
    -
    -

    DMA2 Channel4 & Channel5.

    - -

    Definition at line 166 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SW   STM32_SW_PLL
    -
    -
    - -

    Main clock source selection.

    -
    Note:
    If the selected clock source is not the PLL then the PLL is not initialized and started.
    -
    -The default value is calculated for a 72MHz system clock from a 8MHz crystal using the PLL.
    - -

    Definition at line 181 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLSRC   STM32_PLLSRC_HSE
    -
    -
    - -

    Clock source for the PLL.

    -
    Note:
    This setting has only effect if the PLL is selected as the system clock source.
    -
    -The default value is calculated for a 72MHz system clock from a 8MHz crystal using the PLL.
    - -

    Definition at line 192 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLXTPRE   STM32_PLLXTPRE_DIV1
    -
    -
    - -

    Crystal PLL pre-divider.

    -
    Note:
    This setting has only effect if the PLL is selected as the system clock source.
    -
    -The default value is calculated for a 72MHz system clock from a 8MHz crystal using the PLL.
    - -

    Definition at line 203 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLMUL_VALUE   9
    -
    -
    - -

    PLL multiplier value.

    -
    Note:
    The allowed range is 2...16.
    -
    -The default value is calculated for a 72MHz system clock from a 8MHz crystal using the PLL.
    - -

    Definition at line 213 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE   STM32_HPRE_DIV1
    -
    -
    - -

    AHB prescaler value.

    -
    Note:
    The default value is calculated for a 72MHz system clock from a 8MHz crystal using the PLL.
    - -

    Definition at line 222 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1   STM32_PPRE1_DIV2
    -
    -
    - -

    APB1 prescaler value.

    - -

    Definition at line 229 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2   STM32_PPRE2_DIV2
    -
    -
    - -

    APB2 prescaler value.

    - -

    Definition at line 236 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCPRE   STM32_ADCPRE_DIV4
    -
    -
    - -

    ADC prescaler value.

    - -

    Definition at line 243 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO   STM32_MCO_NOCLOCK
    -
    -
    - -

    MCO pin setting.

    - -

    Definition at line 250 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLMUL   ((STM32_PLLMUL_VALUE - 2) << 18)
    -
    -
    - -

    PLLMUL field.

    - -

    Definition at line 267 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLCLKIN   (STM32_HSECLK / 1)
    -
    -
    - -

    PLL input clock frequency.

    - -

    Definition at line 277 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLCLKOUT   (STM32_PLLCLKIN * STM32_PLLMUL_VALUE)
    -
    -
    - -

    PLL output clock frequency.

    - -

    Definition at line 295 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SYSCLK   STM32_PLLCLKOUT
    -
    -
    - -

    System clock source.

    - -

    Definition at line 306 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HCLK   (STM32_SYSCLK / 1)
    -
    -
    - -

    AHB frequency.

    - -

    Definition at line 324 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PCLK1   (STM32_HCLK / 1)
    -
    -
    - -

    APB1 frequency.

    - -

    Definition at line 354 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PCLK2   (STM32_HCLK / 1)
    -
    -
    - -

    APB2 frequency.

    - -

    Definition at line 376 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCCLK   (STM32_PCLK2 / 2)
    -
    -
    - -

    ADC frequency.

    - -

    Definition at line 398 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_TIMCLK1   (STM32_PCLK1 * 1)
    -
    -
    - -

    Timers 2, 3, 4, 5, 6, 7, 12, 13, 14 clock.

    - -

    Definition at line 418 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_TIMCLK2   (STM32_PCLK2 * 1)
    -
    -
    - -

    Timers 1, 8, 9, 10 and 11 clock.

    - -

    Definition at line 427 of file hal_lld_f103.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_FLASHBITS   0x00000010
    -
    -
    - -

    Flash settings.

    - -

    Definition at line 436 of file hal_lld_f103.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32_f103___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32_f103___h_a_l.png deleted file mode 100644 index cd1a565942375509c6d27d04a88117bec5c68458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1305 zcmeAS@N?(olHy`uVBq!ia0y~yV030+U{K{?V_;yo@v{310|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj1yK{VPOh;Si%1A47 ztrBtc@O=7cU6+W8604=sL}f04(3Bj`&Za|}K1)I@xUQ@WTDoB2)|`x&0-2o?dTRPa zBwK=1-n*6rDIXU@I*rtbUMcTaf)1QFn3@sxmVJPB*xH3q!Z zGq-JMs;Ha9uRrHM^TJC)4WbO+wdMIt6PLbZoU(-_A=O06)Rynng1vifUt4KP9NRU^ za>DIUhVQfFTq0-Bp6$!uXq8b}DH$Cd{b*O**FYSn}uY37__tja99c_1PC{z}oEh0N3OUaem{L*%KlagXtu3d?-!&!#Iq_Ma>Z)!4QFnJ&ZiP1?-c zbj6Ki>V9c`xb-`5N%-M_`QcjUUQA^&$aw$U->i^LME`ki`aZR%FT-cu6XVUxy!};D z!N;|Kd1d#(t#3{>p2xcV*p+kew&~{W?`IZ=W7W{e1DTxiWc8eEd>-_Btc$Z=yWO z_l%~Ar2hUs)$-cb{c&^bYLm;1em-r!d6R)*pSc~k5sOplvnMCNYHfZO67~OYh0)J# z0k>BfaRuLgzwqZNnb%hHN>{#O^a|T{=FHXfnQw32diK&dJ2vxFeA(@#HWdYrB`^Gc zcVpvH@6Vsb>lq5f4$QeWLu=~Om<#(e*Y00aHAl~X-k%!21J5I0Pv04kJ9F~t^IFW# zH}`F}QT=Yp_Hvrj&D`*_-)#@4%sg**Hgn~cbJMrf7QS6yX@5~>xyjmTr*ePiOXv3` z8}!bztL;JiKk!4tBlQs=pZkJR6P ze0+aJZQi?^OEoU7_DWhPkL$1P zDY*M{U%H2EX-UcJ^NW@5uojdjKHPltphN66DS5_-S%MO - -ChibiOS/RT: STM32F105/F107 HAL Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM32F105/F107 HAL Support
    - -[STM32 HAL Support] -

    -
    -
    - -

    HAL support for STM32 CL (Connectivity Line) family. -More...

    - -

    -Collaboration diagram for STM32F105/F107 HAL Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL support for STM32 CL (Connectivity Line) family.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define STM32_HSICLK   8000000
    #define STM32_LSICLK   40000
    #define STM32_SW_HSI   (0 << 0)
    #define STM32_SW_HSE   (1 << 0)
    #define STM32_SW_PLL   (2 << 0)
    #define STM32_HPRE_DIV1   (0 << 4)
    #define STM32_HPRE_DIV2   (8 << 4)
    #define STM32_HPRE_DIV4   (9 << 4)
    #define STM32_HPRE_DIV8   (10 << 4)
    #define STM32_HPRE_DIV16   (11 << 4)
    #define STM32_HPRE_DIV64   (12 << 4)
    #define STM32_HPRE_DIV128   (13 << 4)
    #define STM32_HPRE_DIV256   (14 << 4)
    #define STM32_HPRE_DIV512   (15 << 4)
    #define STM32_PPRE1_DIV1   (0 << 8)
    #define STM32_PPRE1_DIV2   (4 << 8)
    #define STM32_PPRE1_DIV4   (5 << 8)
    #define STM32_PPRE1_DIV8   (6 << 8)
    #define STM32_PPRE1_DIV16   (7 << 8)
    #define STM32_PPRE2_DIV1   (0 << 11)
    #define STM32_PPRE2_DIV2   (4 << 11)
    #define STM32_PPRE2_DIV4   (5 << 11)
    #define STM32_PPRE2_DIV8   (6 << 11)
    #define STM32_PPRE2_DIV16   (7 << 11)
    #define STM32_ADCPRE_DIV2   (0 << 14)
    #define STM32_ADCPRE_DIV4   (1 << 14)
    #define STM32_ADCPRE_DIV6   (2 << 14)
    #define STM32_ADCPRE_DIV8   (3 << 14)
    #define STM32_PLLSRC_HSI   (0 << 16)
    #define STM32_PLLSRC_PREDIV1   (1 << 16)
    #define STM32_OTGFSPRE_DIV2   (1 << 22)
    #define STM32_OTGFSPRE_DIV3   (0 << 22)
    #define STM32_MCO_NOCLOCK   (0 << 24)
    #define STM32_MCO_SYSCLK   (4 << 24)
    #define STM32_MCO_HSI   (5 << 24)
    #define STM32_MCO_HSE   (6 << 24)
    #define STM32_MCO_PLLDIV2   (7 << 24)
    #define STM32_MCO_PLL2   (8 << 24)
    #define STM32_MCO_PLL3DIV2   (9 << 24)
    #define STM32_MCO_XT1   (10 << 24)
    #define STM32_MCO_PLL3   (11 << 24)
    #define STM32_PREDIV1SRC_HSE   (0 << 16)
    #define STM32_PREDIV1SRC_PLL2   (1 << 16)
    #define WWDG_IRQHandler   Vector40
    #define PVD_IRQHandler   Vector44
    #define TAMPER_IRQHandler   Vector48
    #define RTC_IRQHandler   Vector4C
    #define FLASH_IRQHandler   Vector50
    #define RCC_IRQHandler   Vector54
    #define EXTI0_IRQHandler   Vector58
    #define EXTI1_IRQHandler   Vector5C
    #define EXTI2_IRQHandler   Vector60
    #define EXTI3_IRQHandler   Vector64
    #define EXTI4_IRQHandler   Vector68
    #define DMA1_Ch1_IRQHandler   Vector6C
    #define DMA1_Ch2_IRQHandler   Vector70
    #define DMA1_Ch3_IRQHandler   Vector74
    #define DMA1_Ch4_IRQHandler   Vector78
    #define DMA1_Ch5_IRQHandler   Vector7C
    #define DMA1_Ch6_IRQHandler   Vector80
    #define DMA1_Ch7_IRQHandler   Vector84
    #define ADC1_2_IRQHandler   Vector88
    #define CAN1_TX_IRQHandler   Vector8C
    #define CAN1_RX0_IRQHandler   Vector90
    #define CAN1_RX1_IRQHandler   Vector94
    #define CAN1_SCE_IRQHandler   Vector98
    #define EXTI9_5_IRQHandler   Vector9C
    #define TIM1_BRK_IRQHandler   VectorA0
    #define TIM1_UP_IRQHandler   VectorA4
    #define TIM1_TRG_COM_IRQHandler   VectorA8
    #define TIM1_CC_IRQHandler   VectorAC
    #define TIM2_IRQHandler   VectorB0
    #define TIM3_IRQHandler   VectorB4
    #define TIM4_IRQHandler   VectorB8
    #define I2C1_EV_IRQHandler   VectorBC
    #define I2C1_ER_IRQHandler   VectorC0
    #define I2C2_EV_IRQHandler   VectorC4
    #define I2C2_ER_IRQHandler   VectorC8
    #define SPI1_IRQHandler   VectorCC
    #define SPI2_IRQHandler   VectorD0
    #define USART1_IRQHandler   VectorD4
    #define USART2_IRQHandler   VectorD8
    #define USART3_IRQHandler   VectorDC
    #define EXTI15_10_IRQHandler   VectorE0
    #define RTCAlarm_IRQHandler   VectorE4
    #define OTG_FS_WKUP_IRQHandler   VectorE8
    #define TIM5_IRQHandler   Vector108
    #define SPI3_IRQHandler   Vector10C
    #define UART4_IRQHandler   Vector110
    #define UART5_IRQHandler   Vector114
    #define TIM6_IRQHandler   Vector118
    #define TIM7_IRQHandler   Vector11C
    #define DMA2_Ch1_IRQHandler   Vector120
    #define DMA2_Ch2_IRQHandler   Vector124
    #define DMA2_Ch3_IRQHandler   Vector128
    #define DMA2_Ch4_IRQHandler   Vector12C
    #define DMA2_Ch5_IRQHandler   Vector130
    #define ETH_IRQHandler   Vector134
    #define ETH_WKUP_IRQHandler   Vector138
    #define CAN2_TX_IRQHandler   Vector13C
    #define CAN2_RX0_IRQHandler   Vector140
    #define CAN2_RX1_IRQHandler   Vector144
    #define CAN2_SCE_IRQHandler   Vector148
    #define OTG_FS_IRQHandler   Vector14C
    #define STM32_SW   STM32_SW_PLL
     Main clock source selection.
    #define STM32_PLLSRC   STM32_PLLSRC_PREDIV1
     Clock source for the PLL.
    #define STM32_PREDIV1SRC   STM32_PREDIV1SRC_PLL2
     PREDIV1 clock source.
    #define STM32_PREDIV1_VALUE   5
     PREDIV1 division factor.
    #define STM32_PLLMUL_VALUE   9
     PLL multiplier value.
    #define STM32_PREDIV2_VALUE   5
     PREDIV2 division factor.
    #define STM32_PLL2MUL_VALUE   8
     PLL2 multiplier value.
    #define STM32_HPRE   STM32_HPRE_DIV1
     AHB prescaler value.
    #define STM32_PPRE1   STM32_PPRE1_DIV2
     APB1 prescaler value.
    #define STM32_PPRE2   STM32_PPRE2_DIV2
     APB2 prescaler value.
    #define STM32_ADCPRE   STM32_ADCPRE_DIV4
     ADC prescaler value.
    #define STM32_MCO   STM32_MCO_NOCLOCK
     MCO pin setting.
    #define STM32_PREDIV1   ((STM32_PREDIV1_VALUE - 1) << 0)
     PREDIV1 field.
    #define STM32_PREDIV2   ((STM32_PREDIV2_VALUE - 1) << 4)
     PREDIV2 field.
    #define STM32_PLLMUL   ((STM32_PLLMUL_VALUE - 2) << 18)
     PLLMUL field.
    #define STM32_PLL2MUL   ((STM32_PLL2MUL_VALUE - 2) << 8)
     PLL2MUL field.
    #define STM32_PLL2CLKIN   (STM32_HSECLK / STM32_PREDIV2_VALUE)
     PLL2 input frequency.
    #define STM32_PLL2CLKOUT   (STM32_PLL2CLKIN * STM32_PLL2MUL_VALUE)
     PLL2 output clock frequency.
    #define STM32_PREDIV1CLK   STM32_PLL2CLKOUT
     PREDIV1 input frequency.
    #define STM32_PLLCLKIN   (STM32_PREDIV1CLK / STM32_PREDIV1_VALUE)
     PLL input clock frequency.
    #define STM32_PLLCLKOUT   (STM32_PLLCLKIN * STM32_PLLMUL_VALUE)
     PLL output clock frequency.
    #define STM32_SYSCLK   STM32_PLLCLKOUT
     System clock source.
    #define STM32_HCLK   (STM32_SYSCLK / 1)
     AHB frequency.
    #define STM32_PCLK1   (STM32_HCLK / 1)
     APB1 frequency.
    #define STM32_PCLK2   (STM32_HCLK / 1)
     APB2 frequency.
    #define STM32_ADCCLK   (STM32_PCLK2 / 2)
     ADC frequency.
    #define STM32_TIMCLK1   (STM32_PCLK1 * 1)
     Timers 2, 3, 4, 5, 6, 7 clock.
    #define STM32_TIMCLK2   (STM32_PCLK2 * 1)
     Timer 1 clock.
    #define STM32_FLASHBITS   0x00000010
     Flash settings.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define STM32_HSICLK   8000000
    -
    -
    -

    High speed internal clock.

    - -

    Definition at line 42 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_LSICLK   40000
    -
    -
    -

    Low speed internal clock.

    - -

    Definition at line 43 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SW_HSI   (0 << 0)
    -
    -
    -

    SYSCLK source is HSI.

    - -

    Definition at line 46 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SW_HSE   (1 << 0)
    -
    -
    -

    SYSCLK source is HSE.

    - -

    Definition at line 47 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SW_PLL   (2 << 0)
    -
    -
    -

    SYSCLK source is PLL.

    - -

    Definition at line 48 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV1   (0 << 4)
    -
    -
    -

    SYSCLK divided by 1.

    - -

    Definition at line 50 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV2   (8 << 4)
    -
    -
    -

    SYSCLK divided by 2.

    - -

    Definition at line 51 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV4   (9 << 4)
    -
    -
    -

    SYSCLK divided by 4.

    - -

    Definition at line 52 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV8   (10 << 4)
    -
    -
    -

    SYSCLK divided by 8.

    - -

    Definition at line 53 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV16   (11 << 4)
    -
    -
    -

    SYSCLK divided by 16.

    - -

    Definition at line 54 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV64   (12 << 4)
    -
    -
    -

    SYSCLK divided by 64.

    - -

    Definition at line 55 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV128   (13 << 4)
    -
    -
    -

    SYSCLK divided by 128.

    - -

    Definition at line 56 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV256   (14 << 4)
    -
    -
    -

    SYSCLK divided by 256.

    - -

    Definition at line 57 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE_DIV512   (15 << 4)
    -
    -
    -

    SYSCLK divided by 512.

    - -

    Definition at line 58 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1_DIV1   (0 << 8)
    -
    -
    -

    HCLK divided by 1.

    - -

    Definition at line 60 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1_DIV2   (4 << 8)
    -
    -
    -

    HCLK divided by 2.

    - -

    Definition at line 61 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1_DIV4   (5 << 8)
    -
    -
    -

    HCLK divided by 4.

    - -

    Definition at line 62 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1_DIV8   (6 << 8)
    -
    -
    -

    HCLK divided by 8.

    - -

    Definition at line 63 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1_DIV16   (7 << 8)
    -
    -
    -

    HCLK divided by 16.

    - -

    Definition at line 64 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2_DIV1   (0 << 11)
    -
    -
    -

    HCLK divided by 1.

    - -

    Definition at line 66 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2_DIV2   (4 << 11)
    -
    -
    -

    HCLK divided by 2.

    - -

    Definition at line 67 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2_DIV4   (5 << 11)
    -
    -
    -

    HCLK divided by 4.

    - -

    Definition at line 68 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2_DIV8   (6 << 11)
    -
    -
    -

    HCLK divided by 8.

    - -

    Definition at line 69 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2_DIV16   (7 << 11)
    -
    -
    -

    HCLK divided by 16.

    - -

    Definition at line 70 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCPRE_DIV2   (0 << 14)
    -
    -
    -

    HCLK divided by 2.

    - -

    Definition at line 72 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCPRE_DIV4   (1 << 14)
    -
    -
    -

    HCLK divided by 4.

    - -

    Definition at line 73 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCPRE_DIV6   (2 << 14)
    -
    -
    -

    HCLK divided by 6.

    - -

    Definition at line 74 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCPRE_DIV8   (3 << 14)
    -
    -
    -

    HCLK divided by 8.

    - -

    Definition at line 75 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLSRC_HSI   (0 << 16)
    -
    -
    -

    PLL clock source is HSI.

    - -

    Definition at line 77 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLSRC_PREDIV1   (1 << 16)
    -
    -
    -

    PLL clock source is PREDIV1.

    - -

    Definition at line 78 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_OTGFSPRE_DIV2   (1 << 22)
    -
    -
    -

    HCLK*2 divided by 2.

    - -

    Definition at line 81 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_OTGFSPRE_DIV3   (0 << 22)
    -
    -
    -

    HCLK*2 divided by 3.

    - -

    Definition at line 82 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_NOCLOCK   (0 << 24)
    -
    -
    -

    No clock on MCO pin.

    - -

    Definition at line 84 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_SYSCLK   (4 << 24)
    -
    -
    -

    SYSCLK on MCO pin.

    - -

    Definition at line 85 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_HSI   (5 << 24)
    -
    -
    -

    HSI clock on MCO pin.

    - -

    Definition at line 86 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_HSE   (6 << 24)
    -
    -
    -

    HSE clock on MCO pin.

    - -

    Definition at line 87 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_PLLDIV2   (7 << 24)
    -
    -
    -

    PLL/2 clock on MCO pin.

    - -

    Definition at line 88 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_PLL2   (8 << 24)
    -
    -
    -

    PLL2 clock on MCO pin.

    - -

    Definition at line 89 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_PLL3DIV2   (9 << 24)
    -
    -
    -

    PLL3/2 clock on MCO pin.

    - -

    Definition at line 90 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_XT1   (10 << 24)
    -
    -
    -

    XT1 clock on MCO pin.

    - -

    Definition at line 91 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO_PLL3   (11 << 24)
    -
    -
    -

    PLL3 clock on MCO pin.

    - -

    Definition at line 92 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PREDIV1SRC_HSE   (0 << 16)
    -
    -
    -

    PREDIV1 source is HSE.

    - -

    Definition at line 95 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PREDIV1SRC_PLL2   (1 << 16)
    -
    -
    -

    PREDIV1 source is PLL2.

    - -

    Definition at line 96 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define WWDG_IRQHandler   Vector40
    -
    -
    -

    Window Watchdog.

    - -

    Definition at line 102 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define PVD_IRQHandler   Vector44
    -
    -
    -

    PVD through EXTI Line detect.

    - -

    Definition at line 103 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TAMPER_IRQHandler   Vector48
    -
    -
    -

    Tamper.

    - -

    Definition at line 105 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define RTC_IRQHandler   Vector4C
    -
    -
    -

    RTC.

    - -

    Definition at line 106 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define FLASH_IRQHandler   Vector50
    -
    -
    -

    Flash.

    - -

    Definition at line 107 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define RCC_IRQHandler   Vector54
    -
    -
    -

    RCC.

    - -

    Definition at line 108 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI0_IRQHandler   Vector58
    -
    -
    -

    EXTI Line 0.

    - -

    Definition at line 109 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI1_IRQHandler   Vector5C
    -
    -
    -

    EXTI Line 1.

    - -

    Definition at line 110 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI2_IRQHandler   Vector60
    -
    -
    -

    EXTI Line 2.

    - -

    Definition at line 111 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI3_IRQHandler   Vector64
    -
    -
    -

    EXTI Line 3.

    - -

    Definition at line 112 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI4_IRQHandler   Vector68
    -
    -
    -

    EXTI Line 4.

    - -

    Definition at line 113 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch1_IRQHandler   Vector6C
    -
    -
    -

    DMA1 Channel 1.

    - -

    Definition at line 114 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch2_IRQHandler   Vector70
    -
    -
    -

    DMA1 Channel 2.

    - -

    Definition at line 115 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch3_IRQHandler   Vector74
    -
    -
    -

    DMA1 Channel 3.

    - -

    Definition at line 116 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch4_IRQHandler   Vector78
    -
    -
    -

    DMA1 Channel 4.

    - -

    Definition at line 117 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch5_IRQHandler   Vector7C
    -
    -
    -

    DMA1 Channel 5.

    - -

    Definition at line 118 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch6_IRQHandler   Vector80
    -
    -
    -

    DMA1 Channel 6.

    - -

    Definition at line 119 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA1_Ch7_IRQHandler   Vector84
    -
    -
    -

    DMA1 Channel 7.

    - -

    Definition at line 120 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define ADC1_2_IRQHandler   Vector88
    -
    -
    -

    ADC1 and ADC2.

    - -

    Definition at line 121 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN1_TX_IRQHandler   Vector8C
    -
    -
    -

    CAN1 TX.

    - -

    Definition at line 122 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN1_RX0_IRQHandler   Vector90
    -
    -
    -

    CAN1 RX0.

    - -

    Definition at line 123 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN1_RX1_IRQHandler   Vector94
    -
    -
    -

    CAN1 RX1.

    - -

    Definition at line 124 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN1_SCE_IRQHandler   Vector98
    -
    -
    -

    CAN1 SCE.

    - -

    Definition at line 125 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI9_5_IRQHandler   Vector9C
    -
    -
    -

    EXTI Line 9..5.

    - -

    Definition at line 126 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM1_BRK_IRQHandler   VectorA0
    -
    -
    -

    TIM1 Break.

    - -

    Definition at line 127 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM1_UP_IRQHandler   VectorA4
    -
    -
    -

    TIM1 Update.

    - -

    Definition at line 128 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM1_TRG_COM_IRQHandler   VectorA8
    -
    -
    -

    TIM1 Trigger and Commutation.

    - -

    Definition at line 129 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM1_CC_IRQHandler   VectorAC
    -
    -
    -

    TIM1 Capture Compare.

    - -

    Definition at line 131 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM2_IRQHandler   VectorB0
    -
    -
    -

    TIM2.

    - -

    Definition at line 132 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM3_IRQHandler   VectorB4
    -
    -
    -

    TIM3.

    - -

    Definition at line 133 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM4_IRQHandler   VectorB8
    -
    -
    -

    TIM4.

    - -

    Definition at line 134 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define I2C1_EV_IRQHandler   VectorBC
    -
    -
    -

    I2C1 Event.

    - -

    Definition at line 135 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define I2C1_ER_IRQHandler   VectorC0
    -
    -
    -

    I2C1 Error.

    - -

    Definition at line 136 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define I2C2_EV_IRQHandler   VectorC4
    -
    -
    -

    I2C2 Event.

    - -

    Definition at line 137 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define I2C2_ER_IRQHandler   VectorC8
    -
    -
    -

    I2C1 Error.

    - -

    Definition at line 138 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPI1_IRQHandler   VectorCC
    -
    -
    -

    SPI1.

    - -

    Definition at line 139 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPI2_IRQHandler   VectorD0
    -
    -
    -

    SPI2.

    - -

    Definition at line 140 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define USART1_IRQHandler   VectorD4
    -
    -
    -

    USART1.

    - -

    Definition at line 141 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define USART2_IRQHandler   VectorD8
    -
    -
    -

    USART2.

    - -

    Definition at line 142 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define USART3_IRQHandler   VectorDC
    -
    -
    -

    USART3.

    - -

    Definition at line 143 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define EXTI15_10_IRQHandler   VectorE0
    -
    -
    -

    EXTI Line 15..10.

    - -

    Definition at line 144 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define RTCAlarm_IRQHandler   VectorE4
    -
    -
    -

    RTC alarm through EXTI line.

    - -

    Definition at line 145 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define OTG_FS_WKUP_IRQHandler   VectorE8
    -
    -
    -

    USB OTG FS Wakeup through EXTI line.

    - -

    Definition at line 147 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM5_IRQHandler   Vector108
    -
    -
    -

    TIM5.

    - -

    Definition at line 149 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define SPI3_IRQHandler   Vector10C
    -
    -
    -

    SPI3.

    - -

    Definition at line 150 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define UART4_IRQHandler   Vector110
    -
    -
    -

    UART4.

    - -

    Definition at line 151 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define UART5_IRQHandler   Vector114
    -
    -
    -

    UART5.

    - -

    Definition at line 152 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM6_IRQHandler   Vector118
    -
    -
    -

    TIM6.

    - -

    Definition at line 153 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIM7_IRQHandler   Vector11C
    -
    -
    -

    TIM7.

    - -

    Definition at line 154 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA2_Ch1_IRQHandler   Vector120
    -
    -
    -

    DMA2 Channel1.

    - -

    Definition at line 155 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA2_Ch2_IRQHandler   Vector124
    -
    -
    -

    DMA2 Channel2.

    - -

    Definition at line 156 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA2_Ch3_IRQHandler   Vector128
    -
    -
    -

    DMA2 Channel3.

    - -

    Definition at line 157 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA2_Ch4_IRQHandler   Vector12C
    -
    -
    -

    DMA2 Channel4.

    - -

    Definition at line 158 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define DMA2_Ch5_IRQHandler   Vector130
    -
    -
    -

    DMA2 Channel5.

    - -

    Definition at line 159 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define ETH_IRQHandler   Vector134
    -
    -
    -

    Ethernet.

    - -

    Definition at line 160 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define ETH_WKUP_IRQHandler   Vector138
    -
    -
    -

    Ethernet Wakeup through EXTI line.

    - -

    Definition at line 161 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN2_TX_IRQHandler   Vector13C
    -
    -
    -

    CAN2 TX.

    - -

    Definition at line 163 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN2_RX0_IRQHandler   Vector140
    -
    -
    -

    CAN2 RX0.

    - -

    Definition at line 164 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN2_RX1_IRQHandler   Vector144
    -
    -
    -

    CAN2 RX1.

    - -

    Definition at line 165 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define CAN2_SCE_IRQHandler   Vector148
    -
    -
    -

    CAN2 SCE.

    - -

    Definition at line 166 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define OTG_FS_IRQHandler   Vector14C
    -
    -
    -

    USB OTG FS.

    - -

    Definition at line 167 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SW   STM32_SW_PLL
    -
    -
    - -

    Main clock source selection.

    -
    Note:
    If the selected clock source is not the PLL then the PLL is not initialized and started.
    -
    -The default value is calculated for a 72MHz system clock from a 25MHz crystal using both PLL and PLL2.
    - -

    Definition at line 181 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLSRC   STM32_PLLSRC_PREDIV1
    -
    -
    - -

    Clock source for the PLL.

    -
    Note:
    This setting has only effect if the PLL is selected as the system clock source.
    -
    -The default value is calculated for a 72MHz system clock from a 25MHz crystal using both PLL and PLL2.
    - -

    Definition at line 192 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PREDIV1SRC   STM32_PREDIV1SRC_PLL2
    -
    -
    - -

    PREDIV1 clock source.

    -
    Note:
    This setting has only effect if the PLL is selected as the system clock source.
    -
    -The default value is calculated for a 72MHz system clock from a 25MHz crystal using both PLL and PLL2.
    - -

    Definition at line 203 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PREDIV1_VALUE   5
    -
    -
    - -

    PREDIV1 division factor.

    -
    Note:
    This setting has only effect if the PLL is selected as the system clock source.
    -
    -The allowed range is 1...16.
    -
    -The default value is calculated for a 72MHz system clock from a 25MHz crystal using both PLL and PLL2.
    - -

    Definition at line 215 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLMUL_VALUE   9
    -
    -
    - -

    PLL multiplier value.

    -
    Note:
    The allowed range is 4...9.
    -
    -The default value is calculated for a 72MHz system clock from a 25MHz crystal using both PLL and PLL2.
    - -

    Definition at line 225 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PREDIV2_VALUE   5
    -
    -
    - -

    PREDIV2 division factor.

    -
    Note:
    This setting has only effect if the PLL2 is selected as the clock source for the PLL.
    -
    -The allowed range is 1...16.
    -
    -The default value is calculated for a 72MHz system clock from a 25MHz crystal using both PLL and PLL2.
    - -

    Definition at line 237 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLL2MUL_VALUE   8
    -
    -
    - -

    PLL2 multiplier value.

    -
    Note:
    The default value is calculated for a 72MHz system clock from a 25MHz crystal using both PLL and PLL2.
    - -

    Definition at line 246 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HPRE   STM32_HPRE_DIV1
    -
    -
    - -

    AHB prescaler value.

    -
    Note:
    The default value is calculated for a 72MHz system clock from a 25MHz crystal using both PLL and PLL2.
    - -

    Definition at line 255 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE1   STM32_PPRE1_DIV2
    -
    -
    - -

    APB1 prescaler value.

    - -

    Definition at line 262 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PPRE2   STM32_PPRE2_DIV2
    -
    -
    - -

    APB2 prescaler value.

    - -

    Definition at line 269 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCPRE   STM32_ADCPRE_DIV4
    -
    -
    - -

    ADC prescaler value.

    - -

    Definition at line 276 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_MCO   STM32_MCO_NOCLOCK
    -
    -
    - -

    MCO pin setting.

    - -

    Definition at line 283 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PREDIV1   ((STM32_PREDIV1_VALUE - 1) << 0)
    -
    -
    - -

    PREDIV1 field.

    - -

    Definition at line 295 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PREDIV2   ((STM32_PREDIV2_VALUE - 1) << 4)
    -
    -
    - -

    PREDIV2 field.

    - -

    Definition at line 305 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLMUL   ((STM32_PLLMUL_VALUE - 2) << 18)
    -
    -
    - -

    PLLMUL field.

    - -

    Definition at line 315 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLL2MUL   ((STM32_PLL2MUL_VALUE - 2) << 8)
    -
    -
    - -

    PLL2MUL field.

    - -

    Definition at line 325 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLL2CLKIN   (STM32_HSECLK / STM32_PREDIV2_VALUE)
    -
    -
    - -

    PLL2 input frequency.

    - -

    Definition at line 340 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLL2CLKOUT   (STM32_PLL2CLKIN * STM32_PLL2MUL_VALUE)
    -
    -
    - -

    PLL2 output clock frequency.

    - -

    Definition at line 350 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PREDIV1CLK   STM32_PLL2CLKOUT
    -
    -
    - -

    PREDIV1 input frequency.

    - -

    Definition at line 362 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLCLKIN   (STM32_PREDIV1CLK / STM32_PREDIV1_VALUE)
    -
    -
    - -

    PLL input clock frequency.

    - -

    Definition at line 373 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PLLCLKOUT   (STM32_PLLCLKIN * STM32_PLLMUL_VALUE)
    -
    -
    - -

    PLL output clock frequency.

    - -

    Definition at line 388 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_SYSCLK   STM32_PLLCLKOUT
    -
    -
    - -

    System clock source.

    - -

    Definition at line 399 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_HCLK   (STM32_SYSCLK / 1)
    -
    -
    - -

    AHB frequency.

    - -

    Definition at line 417 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PCLK1   (STM32_HCLK / 1)
    -
    -
    - -

    APB1 frequency.

    - -

    Definition at line 447 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_PCLK2   (STM32_HCLK / 1)
    -
    -
    - -

    APB2 frequency.

    - -

    Definition at line 469 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_ADCCLK   (STM32_PCLK2 / 2)
    -
    -
    - -

    ADC frequency.

    - -

    Definition at line 491 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_TIMCLK1   (STM32_PCLK1 * 1)
    -
    -
    - -

    Timers 2, 3, 4, 5, 6, 7 clock.

    - -

    Definition at line 511 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_TIMCLK2   (STM32_PCLK2 * 1)
    -
    -
    - -

    Timer 1 clock.

    - -

    Definition at line 520 of file hal_lld_f105_f107.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM32_FLASHBITS   0x00000010
    -
    -
    - -

    Flash settings.

    - -

    Definition at line 529 of file hal_lld_f105_f107.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m32_f10_x___c_l___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_t_m32_f10_x___c_l___h_a_l.png deleted file mode 100644 index 9464d0ee4189e6d0817d7fde15da1cd3cd2d5b46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1357 zcmeAS@N?(olHy`uVBq!ia0y~yV2ov8U{K{?V_;x-*k`q#fq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}wP?st6*3@q~M|okA+n1&qcTX?!5lC?Em+={Ct1u{%fVX@BZKB`E7Bw^!+e#^SAET*RPeoy>Z63 z;F9=E%iF)Sq%LoiUGE?H`RpOri(5tYPj2x2vp09{x(IPyt7ZQ_ZSn0kz4h_2_)0>rvY4&b^flYdoz6B#)?c`bbI+%Q|_Z&2K`4CfB$&>iM|(D_q`JJiPO6$ z=9wh*O#8ged*3n9m*)4@ak=)JTb3q8Z|i;Gd%Cs6N?zYrZSr>44|)yZ>cXO3C;lwH z>Ob{mwUo=^H5r!qyPsso%&RNi{=v0tLFTQ6UA3;YOGQ7g60t2mnW=Dl)7y22w!}J$N8%rCg;Djtc$IQj@`W|n8&s6`qdYEzobjE_&I_P$=Ue~YZxq8LbxYPk(t8uq%COj`-~aX2rAzK}o11qUGn`|N5OiEIrLxMAWq+UB-d+EH$EY}LxBjJ^ z{>aps<+_*lYsR^W)}~D@i_3YgXL*0N4cpz47QK1Tf5eLB-aRVySA5mV{jqryZn^I? zy!E;I(UI2a{CrPz8a^w1nzW3;US#6ihaXNYx0`%5g1w+t%1y_lc3I|>-Me>p*X^%o zKCrW5PW?nThKAeQ*Z(z>`>xk}eD7q(22loEhh9bp%@zi+S7#?=m~D9R>*9*%eedt= z{Pnq@;_Kv#FLsJER%&y6D7|YbnELS5$yTkMbybaNr@p0_9P(u_Z~Sg1CO*G%;k%xW zS$(e4jeZ&JsTO~{YqLU@m7l%(1K?3=9kmp00i_>zopr0D*~|DF6Tf diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8.html b/ChibiOS_2.0.8/docs/html/group___s_t_m8.html deleted file mode 100644 index 073ce62..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m8.html +++ /dev/null @@ -1,97 +0,0 @@ - - -ChibiOS/RT: STM8 - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM8
    - -[Ports] -

    -
    -
    - -

    -Collaboration diagram for STM8:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    STM8 port details. This section how the ChibiOS/RT features are implemented on this architecture.

    -

    -Mapping of the System States in the STM8 port

    -

    The ChibiOS/RT logical System States are mapped as follow in the STM8 port:

    -
      -
    • Init. This state is represented by the startup code and the initialization code before chSysInit() is executed. It has not a special hardware state associated.
    • -
    • Normal. This is the state the system has after executing chSysInit(). Interrupts are enabled.
    • -
    • Suspended. Interrupts are disabled.
    • -
    • Disabled. Interrupts are disabled. This state is equivalent to the Suspended state because there are no fast interrupts in this architecture.
    • -
    • Sleep. Implemented with "wait" instruction insertion in the idle loop.
    • -
    • S-Locked. Interrupts are disabled.
    • -
    • I-Locked. This state is equivalent to the SRI state, the chSysLockI() and chSysUnlockI() APIs do nothing (still use them in order to formally change state because this may change).
    • -
    • Serving Regular Interrupt. Normal interrupt service code.
    • -
    • Serving Fast Interrupt. Not present in this architecture.
    • -
    • Serving Non-Maskable Interrupt. The STM8 ha non maskable interrupt sources that can be associated to this state.
    • -
    • Halted. Implemented as an infinite loop with interrupts disabled.
    • -
    -

    -The STM8 port notes

    -
      -
    • The STM8 does not have a dedicated interrupt stack, make sure to reserve enough stack space for interrupts in each thread stack. This can be done by modifying the INT_REQUIRED_STACK macro into ./os/ports/RC/STM8/chcore.h.
    • -
    • The kernel currently supports only the small memory model so the kernel files should be loaded in the first 64K. Note that this is not a problem because upper addresses can be used by the user code, the kernel can context switch code running there.
    • -
    • The configuration option CH_OPTIMIZE_SPEED is not currently supported because the missing support of the inline "C" keyword in the compiler.
    • -
    - - - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     Configuration Options
     

    STM8 Configuration Options.

    -
     Core Port Implementation
     

    STM8 specific port code, structures and macros.

    -
     STM8 Drivers
     

    Device drivers included in the STM8 support.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8.png b/ChibiOS_2.0.8/docs/html/group___s_t_m8.png deleted file mode 100644 index ebc2edd828bb5061c26a7013eabbf9a9f965322e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4434 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 diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_n_f.html b/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_n_f.html deleted file mode 100644 index dfba476..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_n_f.html +++ /dev/null @@ -1,63 +0,0 @@ - - -ChibiOS/RT: Configuration Options - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    Configuration Options
    - -[STM8] -

    -
    -
    - -

    STM8 Configuration Options. -More...

    - -

    -Collaboration diagram for Configuration Options:
    -
    -
    - - -
    -
    -

    -

    STM8 Configuration Options.

    -

    The STM8 port allows some architecture-specific configurations settings that can be specified externally, as example on the compiler command line:

    -
      -
    • INT_REQUIRED_STACK, this value represent the amount of stack space used by the interrupt handlers.
      - The default for this value is 32, this space is allocated for each thread so be careful in order to not waste precious RAM space.
      - The default value is set into ./os/ports/RC/STM8/chcore.h.
    • -
    - -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_n_f.png b/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_n_f.png deleted file mode 100644 index 99b9e869e0031486446a2bfaf60f5a5e48d2044f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1070 zcmeAS@N?(olHy`uVBq!ia0y~yV0g>Gz@W;(#=yX^?pt0M0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj<*cwu_cBFfd>6ba4!+nDh3If3~or1lx!7SzBCP4lcT~?&4&5 z$2~Wkom~V2Z6sQ6RegCjzw5on|U%%jX@9!0=Yswe(Ew@&SXovICTxP#D&>wm>2kz z&fTBr`CI6KPQ&)F!y8xc`YW@of1LosjF~e}TJU%UuMK;>=Z#f;x8T<}#vN&j^R}Ex zdVTnKWp{V?iV&^Hc1O)w^X479bSdaTwX)`MCl}_VOG1`yp59L+)O05%&)DM9XE<}q zqw1Ea-C=Uq`~qTM+r0l~cz*Za1E0n2E#GJxed_6_bBA4`e{I&S`mMHo>X(QcU5A&f zh_>_O*!5n$^i)Vs>6fP~zW3ZOwypW`OmRU3>yup^etEgdQ_pi~pL%K(79Q?A{dex_ z`)0oqv!a{jx=p@Yat3=!t8BN=vZ(m*Z{Nj>&r}(T8MJPkx+Iu$T&L+P&*9h67d&6u zXa0Tq@7|I4dzr!cyFbs1lbfax`1Pw$&#iO2G*Rp3cm zk29XEM^lyfCNG|=pjI7KE3roZ`{@H8A`X6jHz#lV?ak8Ct5%78W4go?5VBL2eTVb= zxm9bYZ}F4L;jRB`TM<_s6?>)p#uOVF%Yp}=e}4QZW8&mU^vxN+sp&d$^G8Ri6V{dWD}zB1zX z9z~_k&mO&u-~HG6o6dZbwzORvT3$c*TANwe*Sa?OvAo^$(uz0#|J~FyzL|FDThyhT zYZo(Y)-ss8sjGjV6Uud+A%^M7jk4RV3uY;0m`R4&@@Dnzn(qtOuUS))_ETlnEb}S*YODWnAIN4{@4d9OGmLxs)Jc_s zma2=QycVtyS+=Rqc>SY0d5XKsVlTaV^;O-T!G`_Ao{%VuOIasF9po7IY?Dcgm~`do z-y2swSFgT4zlL=KPr}X5@8r%}$t^ONV<3=_oBPxInxQ~zB6^zb+*K9B`ay54gU*U? zaYuQ#M)9^fJ?P(_;gR{j`p(kp^QZDNUw^;zS<)k>)MH;iPw#+&n6Kh1`Mx^tkH2Tm Qz`(%Z>FVdQ&MBb@0B>Opc>n+a diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_r_e.html b/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_r_e.html deleted file mode 100644 index 365c32b..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_r_e.html +++ /dev/null @@ -1,1276 +0,0 @@ - - -ChibiOS/RT: Core Port Implementation - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Core Port Implementation
    - -[STM8] -

    -
    -
    - -

    STM8 specific port code, structures and macros. -More...

    - -

    -Collaboration diagram for Core Port Implementation:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    STM8 specific port code, structures and macros.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  stm8_startctx
     Start context. More...
    struct  ReadyList
     Ready list header. More...

    -Defines

    #define STM8_ENABLE_WFI_IDLE   FALSE
     Enables the use of the WFI instruction in the idle thread loop.
    #define CH_ARCHITECTURE_STM8
     Unique macro for the implemented architecture.
    #define CH_ARCHITECTURE_NAME   "STM8"
     Name of the implemented architecture.
    #define SETUP_CONTEXT(workspace, wsize, pf, arg)
     Platform dependent part of the chThdInit() API.
    #define IDLE_THREAD_STACK_SIZE   0
     Stack size for the system idle thread.
    #define INT_REQUIRED_STACK   32
     Per-thread stack overhead for interrupts servicing.
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]
     Static working area allocation.
    #define PORT_IRQ_PROLOGUE()
     IRQ prologue code.
    #define PORT_IRQ_EPILOGUE()
     IRQ epilogue code.
    #define PORT_IRQ_HANDLER(id)   void irq##id(void) interrupt id
     IRQ handler function declaration.
    #define port_init()
     Port-related initialization code.
    #define port_lock()   _sim_()
     Kernel-lock action.
    #define port_unlock()   _rim_()
     Kernel-unlock action.
    #define port_lock_from_isr()
     Kernel-lock action from an interrupt handler.
    #define port_unlock_from_isr()
     Kernel-unlock action from an interrupt handler.
    #define port_disable()   _sim_()
     Disables all the interrupt sources.
    #define port_suspend()   _sim_()
     Disables the interrupt sources that are not supposed to preempt the kernel.
    #define port_enable()   _rim_()
     Enables all the interrupt sources.
    #define port_wait_for_interrupt()   _wfi_()
     Enters an architecture-dependent halt mode.
    #define port_switch(ntp, otp)   _port_switch(otp)
     Performs a context switch between two threads.
    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   code
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef uint8_t stkalign_t
     Base type for stack alignment.
    typedef void(* stm8func_t )(void)
     Generic STM8 function pointer.
    typedef unsigned char uint8_t
    typedef signed char int8_t
    typedef unsigned int uint16_t
    typedef signed int int16_t
    typedef unsigned long uint32_t
    typedef signed long int32_t
    typedef uint8_t uint_fast8_t
    typedef uint16_t uint_fast16_t
    typedef uint32_t uint_fast32_t
    typedef int8_t bool_t
     Boolean, recommended the fastest signed.
    typedef uint8_t tmode_t
     Thread mode flags, uint8_t is ok.
    typedef uint8_t tstate_t
     Thread state, uint8_t is ok.
    typedef uint8_t trefs_t
     Thread references counter, uint8_t is ok.
    typedef uint8_t tprio_t
     Priority, use the fastest unsigned type.
    typedef int16_t msg_t
     Message, use signed pointer equivalent.
    typedef int8_t eventid_t
     Event Id, use fastest signed.
    typedef uint8_t eventmask_t
     Event Mask, recommended fastest unsigned.
    typedef uint16_t systime_t
     System Time, recommended fastest unsigned.
    typedef int16_t cnt_t
     Counter, recommended fastest signed.

    -Functions

    void _port_switch (Thread *otp)
     Performs a context switch between two threads.
    void _port_thread_start (void)
     Thread start code.
    void port_halt (void)
     Halts the system.

    -Variables

    page0 ReadyList rlist
     Ready list header.
    page0 ReadyList rlist
     Ready list header.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define STM8_ENABLE_WFI_IDLE   FALSE
    -
    -
    - -

    Enables the use of the WFI instruction in the idle thread loop.

    - -

    Definition at line 48 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_ARCHITECTURE_STM8
    -
    -
    - -

    Unique macro for the implemented architecture.

    - -

    Definition at line 58 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_ARCHITECTURE_NAME   "STM8"
    -
    -
    - -

    Name of the implemented architecture.

    - -

    Definition at line 63 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define SETUP_CONTEXT( workspace,
     wsize,
     pf,
     arg 
    )
    -
    -
    -Value:
    {                          \
    -  struct stm8_startctx *scp;                                                \
    -  scp = (struct stm8_startctx *)((uint8_t *)workspace + wsize -             \
    -                                 sizeof(struct stm8_startctx));             \
    -  scp->ts   = _port_thread_start;                                           \
    -  scp->arg  = arg;                                                          \
    -  scp->pc   = (stm8func_t)pf;                                               \
    -  scp->ret  = (stm8func_t)chThdExit;                                        \
    -  tp->p_ctx.sp = (struct intctx *)scp;                                      \
    -}
    -
    -

    Platform dependent part of the chThdInit() API.

    -

    This code usually setup the context switching frame represented by an intctx structure.

    - -

    Definition at line 147 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define IDLE_THREAD_STACK_SIZE   0
    -
    -
    - -

    Stack size for the system idle thread.

    -

    This size depends on the idle thread implementation, usually the idle thread should take no more space than those reserved by INT_REQUIRED_STACK.

    - -

    Definition at line 165 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define INT_REQUIRED_STACK   32
    -
    -
    - -

    Per-thread stack overhead for interrupts servicing.

    -

    This constant is used in the calculation of the correct working area size. This value can be zero on those architecture where there is a separate interrupt stack and the stack space between intctx and extctx is known to be zero.

    - -

    Definition at line 177 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define STACK_ALIGN( n )    ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
    -
    -
    - -

    Enforces a correct alignment for a stack area size value.

    - -

    Definition at line 183 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define THD_WA_SIZE( n ) 
    -
    -
    -Value:
    STACK_ALIGN(sizeof(Thread) +                         \
    -                                   (sizeof(struct intctx) - 1) +            \
    -                                   (sizeof(struct extctx) - 1) +            \
    -                                   (n) + (INT_REQUIRED_STACK))
    -
    -

    Computes the thread working area global size.

    - -

    Definition at line 188 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define WORKING_AREA( s,
     n 
    )   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]
    -
    -
    - -

    Static working area allocation.

    -

    This macro is used to allocate a static thread working area aligned as both position and size.

    - -

    Definition at line 198 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define PORT_IRQ_PROLOGUE( ) 
    -
    -
    - -

    IRQ prologue code.

    -

    This macro must be inserted at the start of all IRQ handlers enabled to invoke system APIs.

    - -

    Definition at line 205 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define PORT_IRQ_EPILOGUE( ) 
    -
    -
    -Value:
    {                                               \
    -  if (chSchIsRescRequiredExI())                                             \
    -    chSchDoRescheduleI();                                                   \
    -}
    -
    -

    IRQ epilogue code.

    -

    This macro must be inserted at the end of all IRQ handlers enabled to invoke system APIs.

    - -

    Definition at line 212 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define PORT_IRQ_HANDLER( id )    void irq##id(void) interrupt id
    -
    -
    - -

    IRQ handler function declaration.

    -
    Note:
    id can be a function name or a vector number depending on the port implementation.
    - -

    Definition at line 222 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_init( void ) 
    -
    -
    - -

    Port-related initialization code.

    -
    Note:
    None in this port.
    - -

    Definition at line 228 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_lock( void )    _sim_()
    -
    -
    - -

    Kernel-lock action.

    -
    Note:
    Implemented as global interrupts disable.
    - -

    Definition at line 234 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_unlock( void )    _rim_()
    -
    -
    - -

    Kernel-unlock action.

    -
    Note:
    Implemented as global interrupts enable.
    - -

    Definition at line 240 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_lock_from_isr( void ) 
    -
    -
    - -

    Kernel-lock action from an interrupt handler.

    -
    Note:
    This function is empty in this port.
    - -

    Definition at line 246 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_unlock_from_isr( void ) 
    -
    -
    - -

    Kernel-unlock action from an interrupt handler.

    -
    Note:
    This function is empty in this port.
    - -

    Definition at line 252 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_disable( void )    _sim_()
    -
    -
    - -

    Disables all the interrupt sources.

    -
    Note:
    Implemented as global interrupts disable.
    -
    -Of course non maskable interrupt sources are not included.
    - -

    Definition at line 259 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_suspend( void )    _sim_()
    -
    -
    - -

    Disables the interrupt sources that are not supposed to preempt the kernel.

    -
    Note:
    Same as port_disable() in this port, there is no difference between the two states.
    - -

    Definition at line 267 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_enable( void )    _rim_()
    -
    -
    - -

    Enables all the interrupt sources.

    -
    Note:
    Implemented as global interrupt enable.
    - -

    Definition at line 273 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define port_wait_for_interrupt( void )    _wfi_()
    -
    -
    - -

    Enters an architecture-dependent halt mode.

    -
    Note:
    Implemented with the specific "wfi" instruction.
    - -

    Definition at line 280 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define port_switch( ntp,
     otp 
    )   _port_switch(otp)
    -
    -
    - -

    Performs a context switch between two threads.

    -

    This is the most critical code in any port, this function is responsible for the context switch between 2 threads.

    -
    Note:
    Implemented as a call to a low level assembler routine.
    -
    Parameters:
    - - - -
    ntp the thread to be switched in
    otp the thread to be switched out
    -
    -
    - -

    Definition at line 294 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define INLINE   inline
    -
    -
    - -

    Inline function modifier.

    - -

    Definition at line 109 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define ROMCONST   code
    -
    -
    - -

    ROM constant modifier.

    -
    Note:
    Uses the custom "code" keyword in this port.
    - -

    Definition at line 115 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_STRUCT
    -
    -
    - -

    Packed structure modifier (within).

    -
    Note:
    Empty in this port.
    - -

    Definition at line 121 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_BEGIN
    -
    -
    - -

    Packed structure modifier (before).

    -
    Note:
    Empty in this port.
    - -

    Definition at line 127 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_END
    -
    -
    - -

    Packed structure modifier (after).

    -
    Note:
    Empty in this port.
    - -

    Definition at line 133 of file ports/RC/STM8/chtypes.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint8_t stkalign_t
    -
    -
    - -

    Base type for stack alignment.

    -
    Note:
    No alignment constraints so uint8_t.
    - -

    Definition at line 73 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    typedef void(* stm8func_t)(void)
    -
    -
    - -

    Generic STM8 function pointer.

    -
    Note:
    It is used to allocate the proper size for return addresses in context-related structures.
    - -

    Definition at line 80 of file ports/RC/STM8/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned char uint8_t
    -
    -
    -

    C99-style 8 bits unsigned.

    - -

    Definition at line 46 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef signed char int8_t
    -
    -
    -

    C99-style 8 bits signed.

    - -

    Definition at line 47 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned int uint16_t
    -
    -
    -

    C99-style 16 bits unsigned.

    - -

    Definition at line 48 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef signed int int16_t
    -
    -
    -

    C99-style 16 bits signed.

    - -

    Definition at line 49 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef unsigned long uint32_t
    -
    -
    -

    C99-style 32 bits unsigned.

    - -

    Definition at line 50 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef signed long int32_t
    -
    -
    -

    C99-style 32 bits signed.

    - -

    Definition at line 51 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t uint_fast8_t
    -
    -
    -

    C99-style 8 bits unsigned.

    - -

    Definition at line 52 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint16_t uint_fast16_t
    -
    -
    -

    C99-style 16 bits unsigned.

    - -

    Definition at line 53 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t uint_fast32_t
    -
    -
    -

    C99-style 32 bits unsigned.

    - -

    Definition at line 54 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int8_t bool_t
    -
    -
    - -

    Boolean, recommended the fastest signed.

    - -

    Definition at line 59 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t tmode_t
    -
    -
    - -

    Thread mode flags, uint8_t is ok.

    - -

    Definition at line 64 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t tstate_t
    -
    -
    - -

    Thread state, uint8_t is ok.

    - -

    Definition at line 69 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t trefs_t
    -
    -
    - -

    Thread references counter, uint8_t is ok.

    - -

    Definition at line 74 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t tprio_t
    -
    -
    - -

    Priority, use the fastest unsigned type.

    - -

    Definition at line 79 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int16_t msg_t
    -
    -
    - -

    Message, use signed pointer equivalent.

    - -

    Definition at line 84 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int8_t eventid_t
    -
    -
    - -

    Event Id, use fastest signed.

    - -

    Definition at line 89 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t eventmask_t
    -
    -
    - -

    Event Mask, recommended fastest unsigned.

    - -

    Definition at line 94 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint16_t systime_t
    -
    -
    - -

    System Time, recommended fastest unsigned.

    - -

    Definition at line 99 of file ports/RC/STM8/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int16_t cnt_t
    -
    -
    - -

    Counter, recommended fastest signed.

    - -

    Definition at line 104 of file ports/RC/STM8/chtypes.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void _port_switch (Thread otp ) 
    -
    -
    - -

    Performs a context switch between two threads.

    -
    Parameters:
    - - -
    otp the thread to be switched out
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void _port_thread_start (void  ) 
    -
    -
    - -

    Thread start code.

    -

    Start a thread by invoking its work function.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_halt (void  ) 
    -
    -
    - -

    Halts the system.

    -

    This function is invoked by the operating system when an unrecoverable error is detected (as example because a programming error in the application code that triggers an assertion while in debug mode).

    - -

    Definition at line 45 of file ports/GCC/ARMCMx/chcore.c.

    - -

    References port_disable().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    page0 ReadyList rlist
    -
    -
    - -

    Ready list header.

    - -

    Definition at line 38 of file ports/RC/STM8/chcore.c.

    - -
    -
    - -
    -
    - - - - -
    page0 ReadyList rlist
    -
    -
    - -

    Ready list header.

    - -

    Definition at line 46 of file chschd.c.

    - -

    Referenced by chRegFirstThread(), chRegNextThread(), and chSysTimerHandlerI().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:57 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_r_e.png b/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_r_e.png deleted file mode 100644 index 8cedc0305347d5bc37238d3bdc6f39dfc174a120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1423 zcmeAS@N?(olHy`uVBq!ia0y~yU|hk#z@W~-#=yW3rF^H7fq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}`J+eJ$m7+4KGT^vIy=DfYLH($n8g6%`P-nK@gkROj?nqO|z zXkyXy<9fNU;|SxrJ1$I())O>z9txdocR9Yb%<%_z#~IN~k7lR-77^=jri_ZNPSnt!wV?#J(LXLz?e?H;>AbkUZh99QGL<<45464-Qi%Pyby&vnJQ_V53e9AAEM znvVDvh6C=?zQ4|6IqYeEv&3rcF77J~?d|P1?%vhi>{)8+mUZb=Na}5~(zoGLdmfjp zKNBYqs6I0-Ec0d7thZa&`376R@?WKSo2RSe#8j&r-7dQVK5-r|k!L)zwRV*vn}*V- zgCY|inZ*9v!Z78`WFD=^rtT>A=AdQ+2f>N{yBHR6bM2bxd&2JJttGP_+iECjP1Y0G z`R>T+%_h^=98SIFX8Oq3Vdl1(ueOOW<;i>`}*&P`vTL zE`cJxj#SN!3@IU{|GO@+a+yw8@v?AcN@VOlo!Sjs6JM|XHP7m?!PVufk8hRFstmR? zt)G*&J1=YAmh7C@;q9e)4Pi6>%`ngPDmg{#kN+n20oSnBt3^R(dlRi$Zb z!(YF;>i;`%O9}Uc+5YoS^~UiRYi{IW_~@@_pnuEn?#;BYW%oKHdZuBU9)Kd^|*ufIRqPlB=w8Q0;xv8nL8J9opX0e$6^wNv8G#ASqeJl067iBVP zyk-*$j$2>v(h~7#b&dD)TerSx`_KFH@7t+UuV%afLm3RJT zxO(&E#Y>O(*K6&)E5Nusr}Fpo?Q`c>HBsE#8mP&)qMQ4 z|8M8%{My_#n!WvoSHDNZoVxKYTReW^UD-eJcNt&&>&m}%<YW*VOMar}W(CK2J8A zth#??pHUgVRO=4*sXm`0mlxL_KVJQx>4)f#r<)Hx__q3^(EKSMh2-^azMlNu&+l0L z(>LWB$_($*H5ah0e6p8!daC918rRced-o^ZR+;!+=F^n!^UiPkbDcdVX3t48VpR*i zb1FKn$AHlwu~Pr3J40TICg0~7vr2PJo|@nNy!|cfiOY3)%eo#fKfUc?=CkL|XWUU? z?BG?@GxJoL!&vnG%a`3&Y%Bim(qBHccQ*SMA%ElNr(A6R*B&RRs!n6IcXDx=`ufe{zP|qN|7M&$cK=M;WAiH89EK#G6Eg)~a2~u{ z>wEB~aA0+57F+747Z-mpHn1N!H+}W$|9hBEOke#@STOLqp~K#U^unsH>d@~^9UWGC zj<~zHd_BhC>f*BX2nLyQ`>1(UT|n=Ln|Ut1VsCbq@|G{~HnBB+DAnM&W8aileph8b zq%@@e*K>*7^7Qlll0W}$*|HSuf8{42hzdd<**~?LxqH6fl{^Lp1_n=8KbLh*2~7Z= C4Yb?< diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_r_e_gaffa627cc34d473a5c1b00810798c1592_cgraph.png b/ChibiOS_2.0.8/docs/html/group___s_t_m8___c_o_r_e_gaffa627cc34d473a5c1b00810798c1592_cgraph.png deleted file mode 100644 index 417f6392b4893ec303cdfb4a2c478f441f169bb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1030 zcmeAS@N?(olHy`uVBq!ia0y~yU^vUbz@W;(#=yYvaCL4Q0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj<*cwu_cBFfgz1ba4!+nDh3|d2eY)5%v%7bCMQL6FcZtRxD8U z=3udY<1G6F!Je79`g^ySCod?stT7{IkbLZBoeNIbzEY)CmOd`1lL_BYsFeR12XHKbtU`cd2 zgY1k04}YJqDqkh9qB^yW@rj$e`))a3k+tjBzvgpnm1Zbnm{!Uzlx(?PcGD6@1|MJF zQuQevr&Ek(%$#{qwvDTs;oVCKM}_7~|4BlbbnV zp0bgD7aVu(P4$g4KYOzLWywQ7tG^rK%WZT6*pIhZZo68Tc>D9&&&uh`;ukAUYI96> zF=2~YH8bs>u3*>GqPNNh``26Bxu(=7^l#})mwLY9o!rgYsppC!Yxf&B-7ns8{<8E7 zC51f6wu<~&f1{^OtxufQI{UzuuB%POSIYaZsAx{V`rY_Y_162ZV%DD8d+SSaOomt5 ztQ@oMty{MW-#%xw-s)ZM)aMi4_FF4nDF0H!D!|{ez|HK3~sEEN^EdT5WnWBQ0r8uz26RV1`dFy~n3b{qLzF zwr%@#z4vdYu4cT=eQTlB%Z9TlAGCz~zNMD_J$7O0>)8?UmrtZgiB3AXT0&~q{jc1o zzWr%+D6wE>d^Ag7hMdfv?y9|?tY^xcxbf}Iay_;cv+hf(WK?@;#?O1XsOZ?r>#G$O zY20~gqti0uYj7aPEp?$zWSiIdP zyDaLvY3t^`=^H$s+pX6rJha7kOZVBcmT${BmIt*8D(+zqQ{3R+VyAdQO^CabWv|xM zXJ!uy7bi-;dpdFVnMl3M>wQ&Zf zz4W*8t;>R11rIOaO`oY8sMQd`vLWU6`TY-4*fZ67@9&;-zGzx!_p{h@%j2ed#9pq@ z-B_im>74c8!`an>4^16hZ*L24c)IJ|0hL2>TaLRO_guWmxwxnziZR1(qJiBMuk%^4 z8S$y@?`A&vAhdF3+fLQGH*Zwfw5F=pm%1P7E4<_qvD4u+^legwMMq=i3OnO+4 zcpi>$05P8Ybad#i`5&HO`=$Ch!=8(>EZV+o>Oo!V^qRGcYhPc)I$ztaD0e0st36;->%r diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___d_r_i_v_e_r_s.html b/ChibiOS_2.0.8/docs/html/group___s_t_m8___d_r_i_v_e_r_s.html deleted file mode 100644 index 0b8b882..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m8___d_r_i_v_e_r_s.html +++ /dev/null @@ -1,77 +0,0 @@ - - -ChibiOS/RT: STM8 Drivers - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM8 Drivers
    - -[STM8] -

    -
    -
    - -

    Device drivers included in the STM8 support. -More...

    - -

    -Collaboration diagram for STM8 Drivers:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Device drivers included in the STM8 support.

    - - - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     STM8 HAL Support
     

    HAL support.

    -
     STM8 I/O Ports Support
     

    I/O Ports peripherals support.

    -
     STM8 UART Support
     

    USART support.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___d_r_i_v_e_r_s.png b/ChibiOS_2.0.8/docs/html/group___s_t_m8___d_r_i_v_e_r_s.png deleted file mode 100644 index ae18cce7860b3aa66ee7d545566a64cd793054a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4622 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 - -ChibiOS/RT: STM8 HAL Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM8 HAL Support
    - -[STM8 Drivers] -

    -
    -
    - -

    HAL support. -More...

    - -

    -Collaboration diagram for STM8 HAL Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    HAL support.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "STM8x"
     Platform name.
    #define LSICLK   128000
    #define HSICLK   16000000
    #define CLK_SOURCE_DEFAULT   0
    #define CLK_SOURCE_HSI   0xE1
    #define CLK_SOURCE_LSI   0xD2
    #define CLK_SOURCE_HSE   0xB4
    #define CLK_HSI_DIV1   0
    #define CLK_HSI_DIV2   1
    #define CLK_HSI_DIV4   2
    #define CLK_HSI_DIV8   3
    #define CLK_CPU_DIV1   0
    #define CLK_CPU_DIV2   1
    #define CLK_CPU_DIV4   2
    #define CLK_CPU_DIV8   3
    #define CLK_CPU_DIV16   4
    #define CLK_CPU_DIV32   5
    #define CLK_CPU_DIV64   6
    #define CLK_CPU_DIV128   7
    #define STM8_CLOCK_SOURCE   CLK_SOURCE_DEFAULT
     Clock source setting.
    #define STM8_HSI_DIVIDER   CLK_HSI_DIV8
     HSI clock divider.
    #define STM8_CPU_DIVIDER   CLK_CPU_DIV1
     CPU clock divider.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.

    -Variables

    ROMCONST PALConfig pal_default_config
     PAL setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PLATFORM_NAME   "STM8x"
    -
    -
    - -

    Platform name.

    - -

    Definition at line 47 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define LSICLK   128000
    -
    -
    -

    Low speed internal clock.

    - -

    Definition at line 49 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define HSICLK   16000000
    -
    -
    -

    High speed internal clock.

    - -

    Definition at line 50 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_SOURCE_DEFAULT   0
    -
    -
    -

    No clock initialization.

    - -

    Definition at line 52 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_SOURCE_HSI   0xE1
    -
    -
    -

    HSI clock selector.

    - -

    Definition at line 53 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_SOURCE_LSI   0xD2
    -
    -
    -

    LSI clock selector.

    - -

    Definition at line 54 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_SOURCE_HSE   0xB4
    -
    -
    -

    HSE clock selector.

    - -

    Definition at line 55 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_HSI_DIV1   0
    -
    -
    -

    HSI clock divided by 1.

    - -

    Definition at line 57 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_HSI_DIV2   1
    -
    -
    -

    HSI clock divided by 2.

    - -

    Definition at line 58 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_HSI_DIV4   2
    -
    -
    -

    HSI clock divided by 4.

    - -

    Definition at line 59 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_HSI_DIV8   3
    -
    -
    -

    HSI clock divided by 8.

    - -

    Definition at line 60 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_CPU_DIV1   0
    -
    -
    -

    CPU clock divided by 1.

    - -

    Definition at line 62 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_CPU_DIV2   1
    -
    -
    -

    CPU clock divided by 2.

    - -

    Definition at line 63 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_CPU_DIV4   2
    -
    -
    -

    CPU clock divided by 4.

    - -

    Definition at line 64 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_CPU_DIV8   3
    -
    -
    -

    CPU clock divided by 8.

    - -

    Definition at line 65 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_CPU_DIV16   4
    -
    -
    -

    CPU clock divided by 16.

    - -

    Definition at line 66 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_CPU_DIV32   5
    -
    -
    -

    CPU clock divided by 32.

    - -

    Definition at line 67 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_CPU_DIV64   6
    -
    -
    -

    CPU clock divided by 64.

    - -

    Definition at line 68 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define CLK_CPU_DIV128   7
    -
    -
    -

    CPU clock divided by 128.

    - -

    Definition at line 69 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM8_CLOCK_SOURCE   CLK_SOURCE_DEFAULT
    -
    -
    - -

    Clock source setting.

    - -

    Definition at line 79 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM8_HSI_DIVIDER   CLK_HSI_DIV8
    -
    -
    - -

    HSI clock divider.

    - -

    Definition at line 86 of file platforms/STM8/hal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define STM8_CPU_DIVIDER   CLK_CPU_DIV1
    -
    -
    - -

    CPU clock divider.

    - -

    Definition at line 93 of file platforms/STM8/hal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void hal_lld_init (void  ) 
    -
    -
    - -

    Low level HAL driver initialization.

    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    ROMCONST PALConfig pal_default_config
    -
    -
    -Initial value:
    -{
    -  {
    -    {VAL_GPIOAODR, 0, VAL_GPIOADDR, VAL_GPIOACR1, VAL_GPIOACR2},
    -    {VAL_GPIOBODR, 0, VAL_GPIOBDDR, VAL_GPIOBCR1, VAL_GPIOBCR2},
    -    {VAL_GPIOCODR, 0, VAL_GPIOCDDR, VAL_GPIOCCR1, VAL_GPIOCCR2},
    -    {VAL_GPIODODR, 0, VAL_GPIODDDR, VAL_GPIODCR1, VAL_GPIODCR2},
    -    {VAL_GPIOEODR, 0, VAL_GPIOEDDR, VAL_GPIOECR1, VAL_GPIOECR2},
    -    {VAL_GPIOFODR, 0, VAL_GPIOFDDR, VAL_GPIOFCR1, VAL_GPIOFCR2},
    -    {VAL_GPIOGODR, 0, VAL_GPIOGDDR, VAL_GPIOGCR1, VAL_GPIOGCR2},
    -    {VAL_GPIOHODR, 0, VAL_GPIOHDDR, VAL_GPIOHCR1, VAL_GPIOHCR2},
    -    {VAL_GPIOIODR, 0, VAL_GPIOIDDR, VAL_GPIOICR1, VAL_GPIOICR2}
    -  }
    -}
    -
    -

    PAL setup.

    -

    Digital I/O ports static configuration as defined in board.h.

    - -

    Definition at line 50 of file platforms/STM8/hal_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___h_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_t_m8___h_a_l.png deleted file mode 100644 index 7ebc6f18e43394fe1916ed6f575d50c6f14b1b4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1183 zcmeAS@N?(olHy`uVBq!ia0y~yU}R-rU{K{?V_;zL_WdKwz`($k|H*Y zfq{X&#M9T6{T8n)Nf!~Ws@%r0&393oc4>UWm3YEl#ypZqs*SH`lT>om~!f$V1 zE=V?hY`ppNt24Xq^PhNQ_xX&?{)?4$pU)WY<`58s0alfqQ|}oiZk=_AI^)eS{}JDz z<%&7;Y9!WAJGu(5R4dj+${-F3yfk}eFz|6)*rd&qk!mC$W3?XZt zmU%KVOk;@Y)|eNj_LxtBXY%C9h3yWEnX}qz?Dj9NiRalU5ZGj>DKL?9GLzs;0~o`? zw)Vp*tJQirr@od7y*lqHak}^Rt*fD1GsWj${^j!O{r<`8!fvl)*b$*|rss%kzx>Ud zYhUV8Q(Yt1tv{W%`F81=-+{TeSL8{gYLy+|di&0?*I^N!j#nRkF?zVD@8jOfR-wzw zf{#b(Uu0v;`yRGhc5%aw$hBRH4rXsV&aJ#GXP`?+%aXLrA)4zEouW(iTI-DTlJO^Qsp< zUU8$h;mh}9OHEI%Jk^`p`)ajYY+b8qkU^Q7{>cLs(upxq-(QyQx6O8zcS{#0daa5}*zE~4}VS)OF+qc=Teu&%Jdq0}P{&;Hm@%-C?9gkQ_W;uIUZU6Yo z>R8CDe{ZYyviMqCD5@%K+xBO^fK2JPuXp?ZDqjlv_cKiA-0xdvtF&jwC-$mLDvNP+ zwY>OZ+U3a|D;^bGUN(EV^1LK{vGixwR==L{$=m&pyj=B*QAW@yY>5c(ylHb7yv1fK~zloRJJD6SV_{=J0 zXUu_P$7ZJ=xN*D0s+iA#??5U8JHwTP&*l?_z9xNi723D;Ra(gAvsM4sPiK8t=BL=< zW@s%NzW68q)wgY{?wl@cn;G)P@5Rxzs{2(X?K;oie?2MAz~aY}*YEGgi!&6;P7q(} zBCW7gz{xl#TuUTvSGn!2xkU_OlZ!&L)jXwDef<5E=bwN7!|cnv*;lgM;`iJAWKNJg zP?Z0EvGd%yPrVyx6p$H(^LCTojay$l&2 zWSm(T=#Xez*&#LAscG$c`}+(A+zH=~bnc$Hl6#47fad)~qgT79}|FT2(*Q Y{Qjbs%fs6l7#J8lUHx3vIVCg!0FP@e!~g&Q diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___p_a_l.html b/ChibiOS_2.0.8/docs/html/group___s_t_m8___p_a_l.html deleted file mode 100644 index 31e86e9..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m8___p_a_l.html +++ /dev/null @@ -1,668 +0,0 @@ - - -ChibiOS/RT: STM8 I/O Ports Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM8 I/O Ports Support
    - -[STM8 Drivers] -

    -
    -
    - -

    I/O Ports peripherals support. -More...

    - -

    -Collaboration diagram for STM8 I/O Ports Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    I/O Ports peripherals support.

    -

    This module supports the STM8 GPIO controller. The controller supports the following features (see PAL Driver):

    -
      -
    • 8 bits wide ports.
    • -
    • Atomic set/reset/toggle functions because special STM8 instruction set.
    • -
    • Output latched regardless of the pad setting.
    • -
    • Direct read of input pads regardless of the pad setting.
    • -
    -

    Supported Setup Modes

    -
      -
    • PAL_MODE_RESET.
    • -
    • PAL_MODE_UNCONNECTED.
    • -
    • PAL_MODE_INPUT.
    • -
    • PAL_MODE_INPUT_PULLUP.
    • -
    • PAL_MODE_OUTPUT_PUSHPULL.
    • -
    • PAL_MODE_OUTPUT_OPENDRAIN.
    • -
    -

    Any attempt to setup an invalid mode is ignored.

    -

    Suboptimal Behavior

    -

    Some STM8 I/O ports features are less than optimal:

    -
      -
    • Bus/group writing is not atomic.
    • -
    • Pad/group mode setup is not atomic.
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  gpio_t
     GPIO port representation. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_MODE_OUTPUT_PUSHPULL_SLOW   16
     STM8 specific alternate push-pull slow output mode.
    #define PAL_MODE_OUTPUT_OPENDRAIN_SLOW   17
     STM8 specific alternate open-drain slow output mode.
    #define PAL_IOPORTS_WIDTH   8
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFF)
     Whole port mask.
    #define IOPORTS   ((PALConfig *)0x5000)
     GPIO ports as a whole.
    #define IOPORT1   ((gpio_t *)0x5000)
     GPIO port A identifier.
    #define IOPORT2   ((gpio_t *)0x5005)
     GPIO port B identifier.
    #define IOPORT3   ((gpio_t *)0x500A)
     GPIO port C identifier.
    #define IOPORT4   ((gpio_t *)0x500F)
     GPIO port D identifier.
    #define IOPORT5   ((gpio_t *)0x5014)
     GPIO port E identifier.
    #define IOPORT6   ((gpio_t *)0x5019)
     GPIO port F identifier.
    #define IOPORT7   ((gpio_t *)0x501E)
     GPIO port G identifier.
    #define IOPORT8   ((gpio_t *)0x5023)
     GPIO port H identifier.
    #define IOPORT9   ((gpio_t *)0x5028)
     GPIO port I identifier.
    #define pal_lld_init(config)   *IOPORTS = *(config)
     Low level PAL subsystem initialization.
    #define pal_lld_readport(port)   ((port)->IDR)
     Reads the physical I/O port states.
    #define pal_lld_readlatch(port)   ((port)->ODR)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)   ((port)->ODR = (bits))
     Writes a bits mask on a I/O port.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.

    -Typedefs

    typedef uint8_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef gpio_tioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.

    -Variables

    ROMCONST PALConfig pal_default_config
     PAL setup.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define PAL_MODE_OUTPUT_PUSHPULL_SLOW   16
    -
    -
    - -

    STM8 specific alternate push-pull slow output mode.

    - -

    Definition at line 49 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_MODE_OUTPUT_OPENDRAIN_SLOW   17
    -
    -
    - -

    STM8 specific alternate open-drain slow output mode.

    - -

    Definition at line 54 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_IOPORTS_WIDTH   8
    -
    -
    - -

    Width, in bits, of an I/O port.

    - -

    Definition at line 85 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFF)
    -
    -
    - -

    Whole port mask.

    -

    This macro specifies all the valid bits into a port.

    - -

    Definition at line 91 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORTS   ((PALConfig *)0x5000)
    -
    -
    - -

    GPIO ports as a whole.

    - -

    Definition at line 110 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT1   ((gpio_t *)0x5000)
    -
    -
    - -

    GPIO port A identifier.

    - -

    Definition at line 115 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT2   ((gpio_t *)0x5005)
    -
    -
    - -

    GPIO port B identifier.

    - -

    Definition at line 121 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT3   ((gpio_t *)0x500A)
    -
    -
    - -

    GPIO port C identifier.

    - -

    Definition at line 127 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT4   ((gpio_t *)0x500F)
    -
    -
    - -

    GPIO port D identifier.

    - -

    Definition at line 133 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT5   ((gpio_t *)0x5014)
    -
    -
    - -

    GPIO port E identifier.

    - -

    Definition at line 139 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT6   ((gpio_t *)0x5019)
    -
    -
    - -

    GPIO port F identifier.

    - -

    Definition at line 145 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT7   ((gpio_t *)0x501E)
    -
    -
    - -

    GPIO port G identifier.

    - -

    Definition at line 151 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT8   ((gpio_t *)0x5023)
    -
    -
    - -

    GPIO port H identifier.

    - -

    Definition at line 157 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define IOPORT9   ((gpio_t *)0x5028)
    -
    -
    - -

    GPIO port I identifier.

    - -

    Definition at line 163 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_init( config )    *IOPORTS = *(config)
    -
    -
    - -

    Low level PAL subsystem initialization.

    -
    Parameters:
    - - -
    [in] config architecture-dependent ports configuration
    -
    -
    - -

    Definition at line 176 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readport( port )    ((port)->IDR)
    -
    -
    - -

    Reads the physical I/O port states.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - -
    [in] port port identifier
    -
    -
    -
    Returns:
    The port bits.
    - -

    Definition at line 186 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define pal_lld_readlatch( port )    ((port)->ODR)
    -
    -
    - -

    Reads the output latch.

    -

    The purpose of this function is to read back the latched output value.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - -
    [in] port port identifier
    -
    -
    -
    Returns:
    The latched logical states.
    - -

    Definition at line 198 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define pal_lld_writeport( port,
     bits 
    )   ((port)->ODR = (bits))
    -
    -
    - -

    Writes a bits mask on a I/O port.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    Parameters:
    - - - -
    [in] port port identifier
    [in] bits bits to be written on the specified port
    -
    -
    - -

    Definition at line 208 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define pal_lld_setgroupmode( port,
     mask,
     mode 
    )   _pal_lld_setgroupmode(port, mask, mode)
    -
    -
    - -

    Pads group mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -Programming an unknown or unsupported mode is silently ignored.
    -
    Parameters:
    - - - - -
    [in] port port identifier
    [in] mask group mask
    [in] mode group mode
    -
    -
    - -

    Definition at line 223 of file platforms/STM8/pal_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint8_t ioportmask_t
    -
    -
    - -

    Digital I/O port sized unsigned type.

    - -

    Definition at line 96 of file platforms/STM8/pal_lld.h.

    - -
    -
    - -
    -
    - - - - -
    typedef gpio_t* ioportid_t
    -
    -
    - -

    Port Identifier.

    - -

    Definition at line 101 of file platforms/STM8/pal_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void _pal_lld_setgroupmode (ioportid_t  port,
    ioportmask_t  mask,
    uint_fast8_t  mode 
    )
    -
    -
    - -

    Pads mode setup.

    -

    This function programs a pads group belonging to the same port with the specified mode.

    -
    Note:
    This function is not meant to be invoked directly by the application code.
    -
    -PAL_MODE_UNCONNECTED is implemented as push pull output at 2MHz.
    -
    Parameters:
    - - - - -
    [in] port the port identifier
    [in] mask the group mask
    [in] mode the mode
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    ROMCONST PALConfig pal_default_config
    -
    -
    - -

    PAL setup.

    -

    Digital I/O ports static configuration as defined in board.h.

    - -

    Definition at line 49 of file platforms/AT91SAM7/hal_lld.c.

    - -

    Referenced by halInit().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___p_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_t_m8___p_a_l.png deleted file mode 100644 index 3fd499298cb25a18328f83edd6bf3b25e6e85890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11479 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 QFfcH9y85}Sb4q9e0P)DzVgLXD diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___s_e_r_i_a_l.html b/ChibiOS_2.0.8/docs/html/group___s_t_m8___s_e_r_i_a_l.html deleted file mode 100644 index 659c691..0000000 --- a/ChibiOS_2.0.8/docs/html/group___s_t_m8___s_e_r_i_a_l.html +++ /dev/null @@ -1,480 +0,0 @@ - - -ChibiOS/RT: STM8 UART Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    STM8 UART Support
    - -[STM8 Drivers] -

    -
    -
    - -

    USART support. -More...

    - -

    -Collaboration diagram for STM8 UART Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    USART support.

    -

    The serial driver supports the STM8 USARTs in asynchronous mode.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define SD_MODE_PARITY   0x07
     Parity field mask.
    #define SD_MODE_PARITY_NONE   0x00
     No parity.
    #define SD_MODE_PARITY_EVEN   0x05
     Even parity.
    #define SD_MODE_PARITY_ODD   0x07
     Odd parity.
    #define SD_MODE_STOP   0x30
     Stop bits mask.
    #define SD_MODE_STOP_1   0x00
     One stop bit.
    #define SD_MODE_STOP_2   0x20
     Two stop bits.
    #define SD_MODE_STOP_1P5   0x30
     1.5 stop bits.
    #define USE_STM8_UART1   TRUE
     UART1 driver enable switch.
    #define USE_STM8_UART3   TRUE
     UART3 driver enable switch.
    #define _serial_driver_data
     SerialDriver specific data.
    #define BBR(b)   (SYSCLK / (b))
     Macro for baud rate computation.

    -Typedefs

    typedef uint8_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     UART1 serial driver identifier.
    SerialDriver SD3
     UART3 serial driver identifier.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define SD_MODE_PARITY   0x07
    -
    -
    - -

    Parity field mask.

    - -

    Definition at line 44 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_PARITY_NONE   0x00
    -
    -
    - -

    No parity.

    - -

    Definition at line 45 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_PARITY_EVEN   0x05
    -
    -
    - -

    Even parity.

    - -

    Definition at line 46 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_PARITY_ODD   0x07
    -
    -
    - -

    Odd parity.

    - -

    Definition at line 47 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_STOP   0x30
    -
    -
    - -

    Stop bits mask.

    - -

    Definition at line 49 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_STOP_1   0x00
    -
    -
    - -

    One stop bit.

    - -

    Definition at line 50 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_STOP_2   0x20
    -
    -
    - -

    Two stop bits.

    - -

    Definition at line 51 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define SD_MODE_STOP_1P5   0x30
    -
    -
    - -

    1.5 stop bits.

    - -

    Definition at line 52 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM8_UART1   TRUE
    -
    -
    - -

    UART1 driver enable switch.

    -

    If set to TRUE the support for UART1 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 64 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define USE_STM8_UART3   TRUE
    -
    -
    - -

    UART3 driver enable switch.

    -

    If set to TRUE the support for UART3 is included.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 73 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - -
    #define _serial_driver_data
    -
    -
    -Value:
    _base_asynchronous_channel_data                                           \
    -  /* Driver state.*/                                                        \
    -  sdstate_t                 state;                                          \
    -  /* Input queue.*/                                                         \
    -  InputQueue                iqueue;                                         \
    -  /* Output queue.*/                                                        \
    -  OutputQueue               oqueue;                                         \
    -  /* Status Change @p EventSource.*/                                        \
    -  EventSource               sevent;                                         \
    -  /* I/O driver status flags.*/                                             \
    -  sdflags_t                 flags;                                          \
    -  /* Input circular buffer.*/                                               \
    -  uint8_t                   ib[SERIAL_BUFFERS_SIZE];                        \
    -  /* Output circular buffer.*/                                              \
    -  uint8_t                   ob[SERIAL_BUFFERS_SIZE];                        \
    -
    -

    SerialDriver specific data.

    - -

    Definition at line 111 of file platforms/STM8/serial_lld.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define BBR( b )    (SYSCLK / (b))
    -
    -
    - -

    Macro for baud rate computation.

    -
    Note:
    Make sure the final baud rate is within tolerance.
    - -

    Definition at line 137 of file platforms/STM8/serial_lld.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint8_t sdflags_t
    -
    -
    - -

    Serial Driver condition flags type.

    - -

    Definition at line 87 of file platforms/STM8/serial_lld.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void sd_lld_init (void  ) 
    -
    -
    - -

    Low level serial driver initialization.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void sd_lld_start (SerialDriver sdp,
    const SerialConfig config 
    )
    -
    -
    - -

    Low level serial driver configuration and (re)start.

    -
    Parameters:
    - - - -
    [in] sdp pointer to a SerialDriver object
    [in] config the architecture-dependent serial driver configuration. If this parameter is set to NULL then a default configuration is used.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void sd_lld_stop (SerialDriver sdp ) 
    -
    -
    - -

    Low level serial driver stop.

    -

    De-initializes the USART, stops the associated clock, resets the interrupt vector.

    -
    Parameters:
    - - -
    [in] sdp pointer to a SerialDriver object
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    SerialDriver SD1
    -
    -
    - -

    UART1 serial driver identifier.

    - -

    Definition at line 72 of file platforms/STM8/serial_lld.c.

    - -
    -
    - -
    -
    - - - - -
    SerialDriver SD3
    -
    -
    - -

    UART3 serial driver identifier.

    - -

    Definition at line 79 of file platforms/STM8/serial_lld.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group___s_t_m8___s_e_r_i_a_l.png b/ChibiOS_2.0.8/docs/html/group___s_t_m8___s_e_r_i_a_l.png deleted file mode 100644 index 1858612f45aae6eba5f07328a1430484ad8a9999..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17937 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 WcmK48g - -ChibiOS/RT: Base Kernel Services - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Base Kernel Services
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for Base Kernel Services:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Base kernel services, the base subsystems are always included in the OS builds.

    - - - - - - -

    -Modules

     System Management
     Scheduler
     Threads
     Time and Virtual Timers
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__base.png b/ChibiOS_2.0.8/docs/html/group__base.png deleted file mode 100644 index 728a672b43cf7e42fed2bdc15f11977c3b897629..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7527 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 FngCKTJTCwM diff --git a/ChibiOS_2.0.8/docs/html/group__condvars.html b/ChibiOS_2.0.8/docs/html/group__condvars.html deleted file mode 100644 index 6451fa0..0000000 --- a/ChibiOS_2.0.8/docs/html/group__condvars.html +++ /dev/null @@ -1,598 +0,0 @@ - - -ChibiOS/RT: Condition Variables - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Condition Variables
    - -[Synchronization] -

    -
    -
    - -

    -Collaboration diagram for Condition Variables:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    This module implements the Condition Variables mechanism. Condition variables are an extensions to the Mutex subsystem and cannot work alone.

    -

    Operation mode

    -

    The condition variable is a synchronization object meant to be used inside a zone protected by a Mutex. Mutexes and CondVars together can implement a Monitor construct.
    - In order to use the Condition Variables APIs the CH_USE_CONDVARS option must be enabled in chconf.h.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  CondVar
     CondVar structure. More...

    -Defines

    #define _CONDVAR_DATA(name)   {_THREADSQUEUE_DATA(name.c_queue)}
     Data part of a static condition variable initializer.
    #define CONDVAR_DECL(name)   CondVar name = _CONDVAR_DATA(name)
     Static condition variable initializer.

    -Typedefs

    typedef struct CondVar CondVar
     CondVar structure.

    -Functions

    void chCondInit (CondVar *cp)
     Initializes s CondVar structure.
    void chCondSignal (CondVar *cp)
     Signals one thread that is waiting on the condition variable.
    void chCondSignalI (CondVar *cp)
     Signals one thread that is waiting on the condition variable.
    void chCondBroadcast (CondVar *cp)
     Signals all threads that are waiting on the condition variable.
    void chCondBroadcastI (CondVar *cp)
     Signals all threads that are waiting on the condition variable.
    msg_t chCondWait (CondVar *cp)
     Waits on the condition variable releasing the mutex lock.
    msg_t chCondWaitS (CondVar *cp)
     Waits on the condition variable releasing the mutex lock.
    msg_t chCondWaitTimeout (CondVar *cp, systime_t time)
     Waits on the condition variable releasing the mutex lock.
    msg_t chCondWaitTimeoutS (CondVar *cp, systime_t time)
     Waits on the condition variable releasing the mutex lock.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - -
    #define _CONDVAR_DATA( name )    {_THREADSQUEUE_DATA(name.c_queue)}
    -
    -
    - -

    Data part of a static condition variable initializer.

    -

    This macro should be used when statically initializing a condition variable that is part of a bigger structure.

    -
    Parameters:
    - - -
    [in] name the name of the condition variable
    -
    -
    - -

    Definition at line 83 of file chcond.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define CONDVAR_DECL( name )    CondVar name = _CONDVAR_DATA(name)
    -
    -
    - -

    Static condition variable initializer.

    -

    Statically initialized condition variables require no explicit initialization using chCondInit().

    -
    Parameters:
    - - -
    [in] name the name of the condition variable
    -
    -
    - -

    Definition at line 92 of file chcond.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef struct CondVar CondVar
    -
    -
    - -

    CondVar structure.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void chCondInit (CondVar cp ) 
    -
    -
    - -

    Initializes s CondVar structure.

    -
    Note:
    This function can be invoked from within an interrupt handler even if it is not an I-Class API because it does not touch any critical kernel data structure.
    -
    Parameters:
    - - -
    [out] cp pointer to a CondVar structure
    -
    -
    - -

    Definition at line 59 of file chcond.c.

    - -

    References CondVar::c_queue, chDbgCheck, and queue_init.

    - -

    Referenced by chibios_rt::CondVar::CondVar().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chCondSignal (CondVar cp ) 
    -
    -
    - -

    Signals one thread that is waiting on the condition variable.

    -
    Parameters:
    - - -
    [in] cp pointer to the CondVar structure
    -
    -
    - -

    Definition at line 71 of file chcond.c.

    - -

    References CondVar::c_queue, chDbgCheck, chSchWakeupS(), chSysLock, chSysUnlock, fifo_remove(), notempty, and RDY_OK.

    - -

    Referenced by chibios_rt::CondVar::Signal().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chCondSignalI (CondVar cp ) 
    -
    -
    - -

    Signals one thread that is waiting on the condition variable.

    -
    Parameters:
    - - -
    [in] cp pointer to the CondVar structure
    -
    -
    - -

    Definition at line 86 of file chcond.c.

    - -

    References CondVar::c_queue, chDbgCheck, chSchReadyI(), fifo_remove(), notempty, Thread::p_u, and Thread::rdymsg.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chCondBroadcast (CondVar cp ) 
    -
    -
    - -

    Signals all threads that are waiting on the condition variable.

    -
    Parameters:
    - - -
    [in] cp pointer to the CondVar structure
    -
    -
    - -

    Definition at line 99 of file chcond.c.

    - -

    References chCondBroadcastI(), chSchRescheduleS(), chSysLock, and chSysUnlock.

    - -

    Referenced by chibios_rt::CondVar::Broadcast().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chCondBroadcastI (CondVar cp ) 
    -
    -
    - -

    Signals all threads that are waiting on the condition variable.

    -
    Parameters:
    - - -
    [in] cp pointer to the CondVar structure
    -
    -
    - -

    Definition at line 112 of file chcond.c.

    - -

    References CondVar::c_queue, chDbgCheck, chSchReadyI(), fifo_remove(), ThreadsQueue::p_next, Thread::p_u, and Thread::rdymsg.

    - -

    Referenced by chCondBroadcast().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    msg_t chCondWait (CondVar cp ) 
    -
    -
    - -

    Waits on the condition variable releasing the mutex lock.

    -

    Releases the currently owned mutex, waits on the condition variable, and finally acquires the mutex again. All the sequence is performed atomically.

    -
    Note:
    The invoking thread must have at least one owned mutex on entry.
    -
    Parameters:
    - - -
    [in] cp pointer to the CondVar structure
    -
    -
    -
    Returns:
    The wakep mode.
    -
    Return values:
    - - - -
    RDY_OK if the condvar was signaled using chCondSignal().
    RDY_RESET if the condvar was signaled using chCondBroadcast().
    -
    -
    - -

    Definition at line 136 of file chcond.c.

    - -

    References chCondWaitS(), chSysLock, and chSysUnlock.

    - -

    Referenced by chibios_rt::CondVar::Wait().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    msg_t chCondWaitS (CondVar cp ) 
    -
    -
    - -

    Waits on the condition variable releasing the mutex lock.

    -

    Releases the currently owned mutex, waits on the condition variable, and finally acquires the mutex again. All the sequence is performed atomically.

    -
    Note:
    The invoking thread must have at least one owned mutex on entry.
    -
    Parameters:
    - - -
    [in] cp pointer to the CondVar structure
    -
    -
    -
    Returns:
    The wakep mode.
    -
    Return values:
    - - - -
    RDY_OK if the condvar was signaled using chCondSignal().
    RDY_RESET if the condvar was signaled using chCondBroadcast().
    -
    -
    - -

    Definition at line 158 of file chcond.c.

    - -

    References CondVar::c_queue, chDbgAssert, chDbgCheck, chMtxLockS(), chMtxUnlockS(), chSchGoSleepS(), Thread::p_mtxlist, Thread::p_u, prio_insert(), Thread::rdymsg, THD_STATE_WTCOND, and Thread::wtobjp.

    - -

    Referenced by chCondWait().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t chCondWaitTimeout (CondVar cp,
    systime_t  time 
    )
    -
    -
    - -

    Waits on the condition variable releasing the mutex lock.

    -

    Releases the currently owned mutex, waits on the condition variable, and finally acquires the mutex again. All the sequence is performed atomically.

    -
    Note:
    The invoking thread must have at least one owned mutex on entry.
    -
    -Exiting the function because a timeout does not re-acquire the mutex, the mutex ownership is lost.
    -
    Parameters:
    - - - -
    [in] cp pointer to the CondVar structure
    [in] time the number of ticks before the operation timeouts, the special value TIME_INFINITE is allowed. It is not possible to specify zero TIME_IMMEDIATE as timeout specification because it would make no sense in this function.
    -
    -
    -
    Returns:
    The wakep mode.
    -
    Return values:
    - - - - -
    RDY_OK if the condvar was signaled using chCondSignal().
    RDY_RESET if the condvar was signaled using chCondBroadcast().
    RDY_TIMEOUT if the condvar was not signaled within the specified timeout.
    -
    -
    - -

    Definition at line 200 of file chcond.c.

    - -

    References chCondWaitTimeoutS(), chSysLock, and chSysUnlock.

    - -

    Referenced by chibios_rt::CondVar::WaitTimeout().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t chCondWaitTimeoutS (CondVar cp,
    systime_t  time 
    )
    -
    -
    - -

    Waits on the condition variable releasing the mutex lock.

    -

    Releases the currently owned mutex, waits on the condition variable, and finally acquires the mutex again. All the sequence is performed atomically.

    -
    Note:
    The invoking thread must have at least one owned mutex on entry.
    -
    -Exiting the function because a timeout does not re-acquire the mutex, the mutex ownership is lost.
    -
    Parameters:
    - - - -
    [in] cp pointer to the CondVar structure
    [in] time the number of ticks before the operation timeouts, the special value TIME_INFINITE is allowed. It is not possible to specify zero TIME_IMMEDIATE as timeout specification because it would make no sense in this function.
    -
    -
    -
    Returns:
    The wakep mode.
    -
    Return values:
    - - - - -
    RDY_OK if the condvar was signaled using chCondSignal().
    RDY_RESET if the condvar was signaled using chCondBroadcast().
    RDY_TIMEOUT if the condvar was not signaled within the specified timeout.
    -
    -
    - -

    Definition at line 231 of file chcond.c.

    - -

    References CondVar::c_queue, chDbgAssert, chDbgCheck, chMtxLockS(), chMtxUnlockS(), chSchGoSleepTimeoutS(), currp, prio_insert(), RDY_TIMEOUT, and THD_STATE_WTCOND.

    - -

    Referenced by chCondWaitTimeout().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__condvars.png b/ChibiOS_2.0.8/docs/html/group__condvars.png deleted file mode 100644 index ca6c21db2c2ff175e4d81353d4aa91d7acced0fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1183 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 diff --git a/ChibiOS_2.0.8/docs/html/group__condvars_ga466f912bc9b09b133fae862993004ffe_cgraph.png b/ChibiOS_2.0.8/docs/html/group__condvars_ga466f912bc9b09b133fae862993004ffe_cgraph.png deleted file mode 100644 index 619796dc35dca0a1ffec138471a3129667b08333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9982 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 diff --git a/ChibiOS_2.0.8/docs/html/group__condvars_ga60c24a8060a884313efe82b8404e77f6_cgraph.png b/ChibiOS_2.0.8/docs/html/group__condvars_ga60c24a8060a884313efe82b8404e77f6_cgraph.png deleted file mode 100644 index d090987a39f8d0142a4ef280c39c3559924bf463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6960 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 S^(_nx3=E#GelF{r5}E+G#de|q diff --git a/ChibiOS_2.0.8/docs/html/group__condvars_ga7b9d882c348124fed46a1afc3db6c02c_cgraph.png b/ChibiOS_2.0.8/docs/html/group__condvars_ga7b9d882c348124fed46a1afc3db6c02c_cgraph.png deleted file mode 100644 index e7ac4e3fcc4c9250279b342bc7248044a0307cf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2349 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 D0SkXz diff --git a/ChibiOS_2.0.8/docs/html/group__condvars_ga9cf6ebe4c9f28cb206fab14984a18d29_cgraph.png b/ChibiOS_2.0.8/docs/html/group__condvars_ga9cf6ebe4c9f28cb206fab14984a18d29_cgraph.png deleted file mode 100644 index 403921ab8624104545450cf378200acece9d7725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22381 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 U{mKvfIsqi<>FVdQ&MBb@01THydH?_b diff --git a/ChibiOS_2.0.8/docs/html/group__condvars_gab6357d80b01ed8d225ef1e30a66248f9_cgraph.png b/ChibiOS_2.0.8/docs/html/group__condvars_gab6357d80b01ed8d225ef1e30a66248f9_cgraph.png deleted file mode 100644 index 677c795046e1d48207bb9fcee9f0bb3858ca9428..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15586 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 NgQu&X%Q~loCIG&yLv#QD diff --git a/ChibiOS_2.0.8/docs/html/group__condvars_gadddadb68e2a2ce061c7df0d647da9996_cgraph.png b/ChibiOS_2.0.8/docs/html/group__condvars_gadddadb68e2a2ce061c7df0d647da9996_cgraph.png deleted file mode 100644 index f90351c8ba9872292ca3f51ea49cffdee669a62e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4391 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 diff --git a/ChibiOS_2.0.8/docs/html/group__config.html b/ChibiOS_2.0.8/docs/html/group__config.html deleted file mode 100644 index d32f909..0000000 --- a/ChibiOS_2.0.8/docs/html/group__config.html +++ /dev/null @@ -1,870 +0,0 @@ - - -ChibiOS/RT: Configuration - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Configuration
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for Configuration:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Kernel related settings and hooks.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define CH_FREQUENCY   1000
     System tick frequency.
    #define CH_TIME_QUANTUM   20
     Round robin interval.
    #define CH_USE_NESTED_LOCKS   FALSE
     Nested locks.
    #define CH_MEMCORE_SIZE   0
     Managed RAM size.
    #define CH_OPTIMIZE_SPEED   TRUE
     OS optimization.
    #define CH_CURRP_REGISTER_CACHE   "reg"
     Exotic optimization.
    #define CH_USE_REGISTRY   TRUE
     Threads registry APIs.
    #define CH_USE_WAITEXIT   TRUE
     Threads synchronization APIs.
    #define CH_USE_SEMAPHORES   TRUE
     Semaphores APIs.
    #define CH_USE_SEMAPHORES_PRIORITY   FALSE
     Semaphores queuing mode.
    #define CH_USE_SEMSW   TRUE
     Atomic semaphore API.
    #define CH_USE_MUTEXES   TRUE
     Mutexes APIs.
    #define CH_USE_CONDVARS   TRUE
     Conditional Variables APIs.
    #define CH_USE_CONDVARS_TIMEOUT   TRUE
     Conditional Variables APIs with timeout.
    #define CH_USE_EVENTS   TRUE
     Events Flags APIs.
    #define CH_USE_EVENTS_TIMEOUT   TRUE
     Events Flags APIs with timeout.
    #define CH_USE_MESSAGES   TRUE
     Synchronous Messages APIs.
    #define CH_USE_MESSAGES_PRIORITY   FALSE
     Synchronous Messages queuing mode.
    #define CH_USE_MAILBOXES   TRUE
     Mailboxes APIs.
    #define CH_USE_QUEUES   TRUE
     I/O Queues APIs.
    #define CH_USE_MEMCORE   TRUE
     Core Memory Manager APIs.
    #define CH_USE_HEAP   TRUE
     Heap Allocator APIs.
    #define CH_USE_MALLOC_HEAP   FALSE
     C-runtime allocator.
    #define CH_USE_MEMPOOLS   TRUE
     Memory Pools Allocator APIs.
    #define CH_USE_DYNAMIC   TRUE
     Dynamic Threads APIs.
    #define CH_DBG_ENABLE_CHECKS   FALSE
     Debug option, parameters checks.
    #define CH_DBG_ENABLE_ASSERTS   FALSE
     Debug option, consistency checks.
    #define CH_DBG_ENABLE_TRACE   FALSE
     Debug option, trace buffer.
    #define CH_DBG_ENABLE_STACK_CHECK   FALSE
     Debug option, stack checks.
    #define CH_DBG_FILL_THREADS   FALSE
     Debug option, stacks initialization.
    #define CH_DBG_THREADS_PROFILING   TRUE
     Debug option, threads profiling.
    #define THREAD_EXT_FIELDS
     Threads descriptor structure hook.
    #define THREAD_EXT_INIT(tp)
     Threads initialization hook.
    #define THREAD_EXT_EXIT(tp)
     Threads finalization hook.
    #define IDLE_LOOP_HOOK()
     Idle Loop hook.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define CH_FREQUENCY   1000
    -
    -
    - -

    System tick frequency.

    -

    Frequency of the system timer that drives the system ticks. This setting also defines the system tick time unit.

    - -

    Definition at line 51 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_TIME_QUANTUM   20
    -
    -
    - -

    Round robin interval.

    -

    This constant is the number of system ticks allowed for the threads before preemption occurs. Setting this value to zero disables the preemption for threads with equal priority and the round robin becomes cooperative. Note that higher priority threads can still preempt, the kernel is always preemptive.

    -
    Note:
    Disabling the round robin preemption makes the kernel more compact and generally faster.
    - -

    Definition at line 66 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_NESTED_LOCKS   FALSE
    -
    -
    - -

    Nested locks.

    -

    If enabled then the use of nested chSysLock() / chSysUnlock() operations is allowed.
    - For performance and code size reasons the recommended setting is to leave this option disabled.
    - You may use this option if you need to merge ChibiOS/RT with external libraries that require nested lock/unlock operations.

    -
    Note:
    T he default is FALSE.
    - -

    Definition at line 81 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_MEMCORE_SIZE   0
    -
    -
    - -

    Managed RAM size.

    -

    Size of the RAM area to be managed by the OS. If set to zero then the whole available RAM is used. The core memory is made available to the heap allocator and/or can be used directly through the simplified core memory allocator.

    -
    Note:
    In order to let the OS manage the whole RAM the linker script must provide the __heap_base__ and __heap_end__ symbols.
    -
    -Requires CH_USE_COREMEM.
    - -

    Definition at line 96 of file chconf.h.

    - -

    Referenced by core_init().

    - -
    -
    - -
    -
    - - - - -
    #define CH_OPTIMIZE_SPEED   TRUE
    -
    -
    - -

    OS optimization.

    -

    If enabled then time efficient rather than space efficient code is used when two possible implementations exist.

    -
    Note:
    This is not related to the compiler optimization options.
    -
    -The default is TRUE.
    - -

    Definition at line 112 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_CURRP_REGISTER_CACHE   "reg"
    -
    -
    - -

    Exotic optimization.

    -

    If defined then a CPU register is used as storage for the global currp variable. Caching this variable in a register greatly improves both space and time OS efficiency. A side effect is that one less register has to be saved during the context switch resulting in lower RAM usage and faster context switch.

    -
    Note:
    This option is only usable with the GCC compiler and is only useful on processors with many registers like ARM cores.
    -
    -If this option is enabled then ALL the libraries linked to the ChibiOS/RT code must be recompiled with the GCC option -ffixed-<reg>.
    -
    -This option must be enabled in the Makefile, it is listed here for documentation only.
    - -

    Definition at line 132 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_REGISTRY   TRUE
    -
    -
    - -

    Threads registry APIs.

    -

    If enabled then the registry APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 146 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_WAITEXIT   TRUE
    -
    -
    - -

    Threads synchronization APIs.

    -

    If enabled then the chThdWait() function is included in the kernel.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 157 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_SEMAPHORES   TRUE
    -
    -
    - -

    Semaphores APIs.

    -

    If enabled then the Semaphores APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 167 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_SEMAPHORES_PRIORITY   FALSE
    -
    -
    - -

    Semaphores queuing mode.

    -

    If enabled then the threads are enqueued on semaphores by priority rather than in FIFO order.

    -
    Note:
    The default is FALSE. Enable this if you have special requirements.
    -
    -Requires CH_USE_SEMAPHORES.
    - -

    Definition at line 179 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_SEMSW   TRUE
    -
    -
    - -

    Atomic semaphore API.

    -

    If enabled then the semaphores the chSemSignalWait() API is included in the kernel.

    -
    Note:
    The default is TRUE.
    -
    -Requires CH_USE_SEMAPHORES.
    - -

    Definition at line 191 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_MUTEXES   TRUE
    -
    -
    - -

    Mutexes APIs.

    -

    If enabled then the mutexes APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 201 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_CONDVARS   TRUE
    -
    -
    - -

    Conditional Variables APIs.

    -

    If enabled then the conditional variables APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    -
    -Requires CH_USE_MUTEXES.
    - -

    Definition at line 213 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_CONDVARS_TIMEOUT   TRUE
    -
    -
    - -

    Conditional Variables APIs with timeout.

    -

    If enabled then the conditional variables APIs with timeout specification are included in the kernel.

    -
    Note:
    The default is TRUE.
    -
    -Requires CH_USE_CONDVARS.
    - -

    Definition at line 225 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_EVENTS   TRUE
    -
    -
    - -

    Events Flags APIs.

    -

    If enabled then the event flags APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 235 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_EVENTS_TIMEOUT   TRUE
    -
    -
    - -

    Events Flags APIs with timeout.

    -

    If enabled then the events APIs with timeout specification are included in the kernel.

    -
    Note:
    The default is TRUE.
    -
    -Requires CH_USE_EVENTS.
    - -

    Definition at line 247 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_MESSAGES   TRUE
    -
    -
    - -

    Synchronous Messages APIs.

    -

    If enabled then the synchronous messages APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 258 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_MESSAGES_PRIORITY   FALSE
    -
    -
    - -

    Synchronous Messages queuing mode.

    -

    If enabled then messages are served by priority rather than in FIFO order.

    -
    Note:
    The default is FALSE. Enable this if you have special requirements.
    -
    -Requires CH_USE_MESSAGES.
    - -

    Definition at line 270 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_MAILBOXES   TRUE
    -
    -
    - -

    Mailboxes APIs.

    -

    If enabled then the asynchronous messages (mailboxes) APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    -
    -Requires CH_USE_SEMAPHORES.
    - -

    Definition at line 282 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_QUEUES   TRUE
    -
    -
    - -

    I/O Queues APIs.

    -

    If enabled then the I/O queues APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    -
    -Requires CH_USE_SEMAPHORES.
    - -

    Definition at line 293 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_MEMCORE   TRUE
    -
    -
    - -

    Core Memory Manager APIs.

    -

    If enabled then the core memory manager APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 304 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_HEAP   TRUE
    -
    -
    - -

    Heap Allocator APIs.

    -

    If enabled then the memory heap allocator APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    -
    -Requires CH_USE_COREMEM and either CH_USE_MUTEXES or CH_USE_SEMAPHORES.
    -
    -Mutexes are recommended.
    - -

    Definition at line 318 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_MALLOC_HEAP   FALSE
    -
    -
    - -

    C-runtime allocator.

    -

    If enabled the the heap allocator APIs just wrap the C-runtime malloc() and free() functions.

    -
    Note:
    The default is FALSE.
    -
    -Requires CH_USE_HEAP.
    -
    -The C-runtime may or may not require CH_USE_COREMEM, see the appropriate documentation.
    - -

    Definition at line 332 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_MEMPOOLS   TRUE
    -
    -
    - -

    Memory Pools Allocator APIs.

    -

    If enabled then the memory pools allocator APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    - -

    Definition at line 343 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_USE_DYNAMIC   TRUE
    -
    -
    - -

    Dynamic Threads APIs.

    -

    If enabled then the dynamic threads creation APIs are included in the kernel.

    -
    Note:
    The default is TRUE.
    -
    -Requires CH_USE_WAITEXIT.
    -
    -Requires CH_USE_HEAP and/or CH_USE_MEMPOOLS.
    - -

    Definition at line 356 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_DBG_ENABLE_CHECKS   FALSE
    -
    -
    - -

    Debug option, parameters checks.

    -

    If enabled then the checks on the API functions input parameters are activated.

    -
    Note:
    The default is FALSE.
    - -

    Definition at line 371 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_DBG_ENABLE_ASSERTS   FALSE
    -
    -
    - -

    Debug option, consistency checks.

    -

    If enabled then all the assertions in the kernel code are activated. This includes consistency checks inside the kernel, runtime anomalies and port-defined checks.

    -
    Note:
    The default is FALSE.
    - -

    Definition at line 383 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_DBG_ENABLE_TRACE   FALSE
    -
    -
    - -

    Debug option, trace buffer.

    -

    If enabled then the context switch circular trace buffer is activated.

    -
    Note:
    The default is FALSE.
    - -

    Definition at line 394 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_DBG_ENABLE_STACK_CHECK   FALSE
    -
    -
    - -

    Debug option, stack checks.

    -

    If enabled then a runtime stack check is performed.

    -
    Note:
    The default is FALSE.
    -
    -The stack check is performed in a architecture/port dependent way. It may not be implemented or some ports.
    -
    -The default failure mode is to halt the system with the global panic_msg variable set to NULL.
    - -

    Definition at line 408 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_DBG_FILL_THREADS   FALSE
    -
    -
    - -

    Debug option, stacks initialization.

    -

    If enabled then the threads working area is filled with a byte value when a thread is created. This can be useful for the runtime measurement of the used stack.

    -
    Note:
    The default is FALSE.
    - -

    Definition at line 420 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_DBG_THREADS_PROFILING   TRUE
    -
    -
    - -

    Debug option, threads profiling.

    -

    If enabled then a field is added to the Thread structure that counts the system ticks occurred while executing the thread.

    -
    Note:
    The default is TRUE.
    -
    -This debug option is defaulted to TRUE because it is required by some test cases into the test suite.
    - -

    Definition at line 433 of file chconf.h.

    - -
    -
    - -
    -
    - - - - -
    #define THREAD_EXT_FIELDS
    -
    -
    -Value:
    struct {                                                                \
    -  /* Add threads custom fields here.*/                                  \
    -};
    -
    -

    Threads descriptor structure hook.

    -

    User fields added to the end of the Thread structure.

    - -

    Definition at line 445 of file chconf.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define THREAD_EXT_INIT( tp ) 
    -
    -
    -Value:
    {                                           \
    -  /* Add threads initialization code here.*/                            \
    -}
    -
    -

    Threads initialization hook.

    -

    User initialization code added to the chThdInit() API.

    -
    Note:
    It is invoked from within chThdInit() and implicitily from all the threads creation APIs.
    - -

    Definition at line 459 of file chconf.h.

    - -

    Referenced by init_thread().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define THREAD_EXT_EXIT( tp ) 
    -
    -
    -Value:
    {                                           \
    -  /* Add threads finalization code here.*/                              \
    -}
    -
    -

    Threads finalization hook.

    -

    User finalization code added to the chThdExit() API.

    -
    Note:
    It is inserted into lock zone.
    -
    -It is also invoked when the threads simply return in order to terminate.
    - -

    Definition at line 473 of file chconf.h.

    - -

    Referenced by chThdExit().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define IDLE_LOOP_HOOK( ) 
    -
    -
    -Value:
    {                                              \
    -  /* Idle loop code here.*/                                             \
    -}
    -
    -

    Idle Loop hook.

    -

    This hook is continuously invoked by the idle thread loop.

    - -

    Definition at line 483 of file chconf.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__config.png b/ChibiOS_2.0.8/docs/html/group__config.png deleted file mode 100644 index 658b3e1a7aa7c85e11375b16a820b46128e1a167..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1023 zcmeAS@N?(olHy`uVBq!ia0y~yU^v0Rz@W;(#=yY9-n8rx0|NtFlDE4H!+#K5uy^@n zkVJ{6uPgg4ZW&%Kh6j=6Yzz#{3q4&NLn`LHy>r%EBvFR_!~4fCvUdIunzDPB-o0P! zyHXzr35vRSyiVNO*BG$T@xod04?!gxgkAa~h-FtlV{XKH0y;p|3`rqEQ@67r*!|(6EMqE9S_xW14 z^B?vT7rfPu?>_zXguwy1X{Y~4`Mvy}=&>{?A~JI0-(C0iy?VP?uC7mYk(I)tf*I$( zohh30Q?%*vn_JqGJ#4I(zy1{)dpu&}i9DmWWzB^%46m(wW%yTttJzfN+S_ZJx0dd{ zxO``R^8Cu(u?DGc&(?-WpY}YvY6VZn-JsJ}H`gi}cJxi&TK+K5TSsi~K?$R&T=HxY z(#dO>3iQ{lSg5>vQ^&S$wY^*CUS2w3Yp;$+URIdv)s_vrg$|@iKd4!xUA6z9KyTd6 zI~NN}4$aPge|*8Z|Al`{*1y@?ApS89h1 z{>^%cXR^yKmYM&x{&^>}`a#N!(5o@p7h6s|?z3_T5{vdVj^e^^|1jcD(;>%EwP!PnXV|Dfy&mr>e}E{^WCCq%ZgO zuH4TsjZvq(eE*A_T-|%jH<%li7YJzZI#e%kZJTj@d&J=fKI}(w(w{%gXW(WKtE!q8 ze`(7lj^{Z{2aYy)bFX#dX%S_0NvQr^%6LGgVduVm>YWQ-D;`|fF1q^0otp2)FQhyQ zkdvY#qoRvbnYi}bXwf4Z5C4DYA`%rHz4@*>_lfkcO9i$sTfV$muMwP2K*W*y{|uJ) XIj=2OHR>=hFfe$!`njxgN@xNAEz#k$ diff --git a/ChibiOS_2.0.8/docs/html/group__core.html b/ChibiOS_2.0.8/docs/html/group__core.html deleted file mode 100644 index 4be9199..0000000 --- a/ChibiOS_2.0.8/docs/html/group__core.html +++ /dev/null @@ -1,706 +0,0 @@ - - -ChibiOS/RT: Port Templates - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Port Templates
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for Port Templates:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Non portable code templates.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  extctx
     Interrupt saved context. More...
    struct  intctx
     System saved context. More...
    struct  context
     Platform dependent part of the Thread structure. More...

    -Defines

    #define CH_ARCHITECTURE_XXX
     Unique macro for the implemented architecture.
    #define CH_ARCHITECTURE_NAME   ""
     Name of the implemented architecture.
    #define CH_ARCHITECTURE_VARIANT_NAME   ""
     Name of the architecture variant (optional).
    #define SETUP_CONTEXT(workspace, wsize, pf, arg)
     Platform dependent part of the chThdInit() API.
    #define IDLE_THREAD_STACK_SIZE   0
     Stack size for the system idle thread.
    #define INT_REQUIRED_STACK   0
     Per-thread stack overhead for interrupts servicing.
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]
     Static working area allocation.
    #define PORT_IRQ_PROLOGUE()
     IRQ prologue code.
    #define PORT_IRQ_EPILOGUE()
     IRQ epilogue code.
    #define PORT_IRQ_HANDLER(id)   void id(void)
     IRQ handler function declaration.
    #define PORT_FAST_IRQ_HANDLER(id)   void id(void)
     Fast IRQ handler function declaration.

    -Typedefs

    typedef uint8_t stkalign_t
     Base type for stack and memory alignment.

    -Functions

    void port_init (void)
     Port-related initialization code.
    void port_lock (void)
     Kernel-lock action.
    void port_unlock (void)
     Kernel-unlock action.
    void port_lock_from_isr (void)
     Kernel-lock action from an interrupt handler.
    void port_unlock_from_isr (void)
     Kernel-unlock action from an interrupt handler.
    void port_disable (void)
     Disables all the interrupt sources.
    void port_suspend (void)
     Disables the interrupt sources below kernel-level priority.
    void port_enable (void)
     Enables all the interrupt sources.
    void port_wait_for_interrupt (void)
     Enters an architecture-dependent IRQ-waiting mode.
    void port_halt (void)
     Halts the system.
    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define CH_ARCHITECTURE_XXX
    -
    -
    - -

    Unique macro for the implemented architecture.

    - -

    Definition at line 43 of file kernel/templates/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_ARCHITECTURE_NAME   ""
    -
    -
    - -

    Name of the implemented architecture.

    - -

    Definition at line 48 of file kernel/templates/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_ARCHITECTURE_VARIANT_NAME   ""
    -
    -
    - -

    Name of the architecture variant (optional).

    - -

    Definition at line 53 of file kernel/templates/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define SETUP_CONTEXT( workspace,
     wsize,
     pf,
     arg 
    )
    -
    -
    -Value:
    {                          \
    -}
    -
    -

    Platform dependent part of the chThdInit() API.

    -

    This code usually setup the context switching frame represented by an intctx structure.

    - -

    Definition at line 90 of file kernel/templates/chcore.h.

    - -

    Referenced by chThdCreateI().

    - -
    -
    - -
    -
    - - - - -
    #define IDLE_THREAD_STACK_SIZE   0
    -
    -
    - -

    Stack size for the system idle thread.

    -

    This size depends on the idle thread implementation, usually the idle thread should take no more space than those reserved by INT_REQUIRED_STACK.

    - -

    Definition at line 100 of file kernel/templates/chcore.h.

    - -
    -
    - -
    -
    - - - - -
    #define INT_REQUIRED_STACK   0
    -
    -
    - -

    Per-thread stack overhead for interrupts servicing.

    -

    This constant is used in the calculation of the correct working area size. This value can be zero on those architecture where there is a separate interrupt stack and the stack space between intctx and extctx is known to be zero.

    - -

    Definition at line 112 of file kernel/templates/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define STACK_ALIGN( n )    ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
    -
    -
    - -

    Enforces a correct alignment for a stack area size value.

    - -

    Definition at line 118 of file kernel/templates/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define THD_WA_SIZE( n ) 
    -
    -
    -Value:
    STACK_ALIGN(sizeof(Thread) +                         \
    -                                   sizeof(struct intctx) +                  \
    -                                   sizeof(struct extctx) +                  \
    -                                  (n) + (INT_REQUIRED_STACK))
    -
    -

    Computes the thread working area global size.

    - -

    Definition at line 123 of file kernel/templates/chcore.h.

    - -

    Referenced by chThdCreateI().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define WORKING_AREA( s,
     n 
    )   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]
    -
    -
    - -

    Static working area allocation.

    -

    This macro is used to allocate a static thread working area aligned as both position and size.

    - -

    Definition at line 133 of file kernel/templates/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define PORT_IRQ_PROLOGUE( ) 
    -
    -
    - -

    IRQ prologue code.

    -

    This macro must be inserted at the start of all IRQ handlers enabled to invoke system APIs.

    - -

    Definition at line 140 of file kernel/templates/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define PORT_IRQ_EPILOGUE( ) 
    -
    -
    - -

    IRQ epilogue code.

    -

    This macro must be inserted at the end of all IRQ handlers enabled to invoke system APIs.

    - -

    Definition at line 147 of file kernel/templates/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define PORT_IRQ_HANDLER( id )    void id(void)
    -
    -
    - -

    IRQ handler function declaration.

    -
    Note:
    id can be a function name or a vector number depending on the port implementation.
    - -

    Definition at line 154 of file kernel/templates/chcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define PORT_FAST_IRQ_HANDLER( id )    void id(void)
    -
    -
    - -

    Fast IRQ handler function declaration.

    -
    Note:
    id can be a function name or a vector number depending on the port implementation.
    -
    -Not all architectures support fast interrupts, in this case this macro must be omitted.
    - -

    Definition at line 163 of file kernel/templates/chcore.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef uint8_t stkalign_t
    -
    -
    - -

    Base type for stack and memory alignment.

    - -

    Definition at line 58 of file kernel/templates/chcore.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void port_init (void  ) 
    -
    -
    - -

    Port-related initialization code.

    -
    Note:
    This function is usually empty.
    - -

    Referenced by chSysInit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_lock (void  ) 
    -
    -
    - -

    Kernel-lock action.

    -

    Usually this function just disables interrupts but may perform more actions.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_unlock (void  ) 
    -
    -
    - -

    Kernel-unlock action.

    -

    Usually this function just disables interrupts but may perform more actions.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_lock_from_isr (void  ) 
    -
    -
    - -

    Kernel-lock action from an interrupt handler.

    -

    This function is invoked before invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_unlock_from_isr (void  ) 
    -
    -
    - -

    Kernel-unlock action from an interrupt handler.

    -

    This function is invoked after invoking I-class APIs from interrupt handlers. The implementation is architecture dependent, in its simplest form it is void.

    - -

    Referenced by SVCallVector().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_disable (void  ) 
    -
    -
    - -

    Disables all the interrupt sources.

    -
    Note:
    Of course non maskable interrupt sources are not included.
    - -

    Referenced by port_halt().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_suspend (void  ) 
    -
    -
    - -

    Disables the interrupt sources below kernel-level priority.

    -
    Note:
    Interrupt sources above kernel level remains enabled.
    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_enable (void  ) 
    -
    -
    - -

    Enables all the interrupt sources.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_wait_for_interrupt (void  ) 
    -
    -
    - -

    Enters an architecture-dependent IRQ-waiting mode.

    -

    The function is meant to return when an interrupt becomes pending. The simplest implementation is an empty function or macro but this would not take advantage of architecture-specific power saving modes.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void port_halt (void  ) 
    -
    -
    - -

    Halts the system.

    -

    This function is invoked by the operating system when an unrecoverable error is detected (as example because a programming error in the application code that triggers an assertion while in debug mode).

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void port_switch (Thread ntp,
    Thread otp 
    )
    -
    -
    - -

    Performs a context switch between two threads.

    -

    This is the most critical code in any port, this function is responsible for the context switch between 2 threads.

    -
    Note:
    The implementation of this code affects directly the context switch performance so optimize here as much as you can.
    -
    Parameters:
    - - - -
    [in] ntp the thread to be switched in
    [in] otp the thread to be switched out
    -
    -
    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__core.png b/ChibiOS_2.0.8/docs/html/group__core.png deleted file mode 100644 index 0d5781f3f52b13b0d4033338bac9bbbf984683c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1047 zcmeAS@N?(olHy`uVBq!ia0y~yU^vUbz@W;(#=yYvaCL4Q0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj-jkj1PA*Ffi}*ba4!+nDh45X)ozO3HA^F3-@eg({H`DBJj>v z)?KT)ohMx4TI%swX=|)l%eDxO66HsSe7(gNioRU+z-ghbN4$c>K|2Te1rHWYdT~rl z&}6!0?2#KUEsQPIi!CQV`R&MIdHsCFzBxM?TLhdq6hTC$-5@5 z%d)PmPY`*yin$=Wuu!nm#i>+6*ZHzZiqTB(r@357ic1y-UJ_91oYW@ZImM*KW6=^t zmr0ke8VAZufB!vVYURoI9}TU3@`f99Od{#fy6|M}auZ(sVm_ScN# zYtwVgKX+gIeYSgv;pbY%->Eq{bqhjX&0)MTIjGZ@VNYUt(&I&+vL=Qe57?U#`q?V; zP1#(nw5;@+c311&|K@cbjf=Zj`gh;D`B?{a8L9T3xO#C>frjx4h8h*rx2@^Y@<|S?!v%J^8>g9)b8ja(7Rrcev!; zee-tj-es>n43~W`>{Cj9VKIN%N+Gvz;n&_aZL+#AD0zM5y{zd%b8qiyZY^A%*jBz= z_Q=^ArQL4g&r1KY%(}Muh~CZ1j)&IXMKkJ$`*8{2KJtr(z&op7sFYL4Y8L+ps>euGP zc}3GAmn_P4Et7d%ajbAH-}O5mlrwvF_x_yVTXt~w+xVm0tulQ4_Ip_;&2Mi{=48-h z;Af0s4QM-Ce$evq&zfDD^M07gzpE&X3{Q($zVBJxGpp6yqGiRqJ6DRWcAderAu;&+ z35y1I2D8fb+$TjZJsw<)J2v~R=JO5lyW%1v z9n~h^bVE#UD7;<=d_Pl%jO3Q}fMsmaPKu;rHhyF_no-ekPT#}HL z-TRX{LH59}2M<|5|s1-R`3aRocPMWiBo+@*96UWK4%@<78mN`G_oI6+c;Wo{Xyf>zg wwN?Mzopr0Kf|HKmY&$ diff --git a/ChibiOS_2.0.8/docs/html/group__cpp__library.html b/ChibiOS_2.0.8/docs/html/group__cpp__library.html deleted file mode 100644 index e0f2e05..0000000 --- a/ChibiOS_2.0.8/docs/html/group__cpp__library.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: C++ Wrapper - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    C++ Wrapper
    - -[Various] -

    -
    -
    - -

    C++ wrapper module. -More...

    - -

    -Collaboration diagram for C++ Wrapper:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    C++ wrapper module.

    -

    This module allows to use the ChibiOS/RT functionalities from C++ as classes and objects rather the traditional "C" APIs.

    - -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__cpp__library.png b/ChibiOS_2.0.8/docs/html/group__cpp__library.png deleted file mode 100644 index c78ef172de895a42e4d4f4376cdcc4ad7dda2be5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1054 zcmeAS@N?(olHy`uVBq!ia0y~yV7S1*z@W;(#=yW}{5$;~0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj(ml-&gB0FfbqRba4!+nDh3|`D~GN3HA@~H}6&p$mm#*lP0R! zv?SzWcfgW`DYv5+K2UYyIWn(Gb8Y858`VacJt5h@%|kM(GZ(5ZpTOeO?`8Alg{GSH zL6zk!oATuO(^6&bm)E`7v)MRuzkEd5^SR~oE1kaGd_MPPDx(qvERr~4^pCk=VxC$M z!)k`QbJm?AZXbUAce`n@&rWOF$@xqY%pcsRNs6A3Xh^%~xuk^cz>OC#GVWD=ne+5% z>VZ$cHi!x^*svH(bhLB*l6{YJhmo=I?C*H=(y<)bzZwtyE&{b^N!?Avqa9x}V9 zH_hUB?)lH>%}bsC@3DAX_-MzKwR|aBY8&5l&zf&im$dcP*+hq9p!m8_40SptLLpw-Y&1+7r9dA|AQl)`FYd5tX6h) zugd81*d6gp=1E1$jC(tq?;f?!>%Mp|J^I+s?T2?we=CuA+|S6q*T#B6cB1Urtc(}G z{iD{t)z_XnIn-hOtHiWI>t2q3-}bCrvNJ8I`nSG%Vb1#-k^3gkwsK#-t8(AdT@5~W z)lYv+%P!_vLS^#4yi-Ta@AC+6pl{q;Lko4A!SRvn97^)fcp#%n^k+P81> zdQ4`YPp+4?&f0l-<%T?A^L;Pp9Q(4z;^U@$4Hwt)iNqwiiUt<=ZLnCBq!x8(Yt-)F z*4Etpjjf$orN44ke)(VOpvE|-TT3l8GS{T;m-@+%Mw5Qr(bAW_3@!+^+ zs*5viUga0*b~A0-ThaX7W!cVUmW7X6&ibchzy24@@R{M6|J+@rE3aPqc=)rDzYAZ; z*5&8gH)*x4D7-vp!(Y!X%Xc%lU4P502$*NPdplbK?}52dZ=a<%^f4F79$3&}7TOyA z - -ChibiOS/RT: Data Streams - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Data Streams
    - -[I/O Support] -

    -
    -
    - -

    -Collaboration diagram for Data Streams:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    This module define an abstract interface for generic data streams. Note that no code is present, streams are just abstract interfaces like structures, you should look at the systems as to a set of abstract C++ classes (even if written in C). This system has the advantage to make the access to streams independent from the implementation logic.
    - The stream interface can be used as base class for high level object types such as files, sockets, serial ports, pipes etc.

    - - - - - - - - - - - - - - - -

    -Data Structures

    struct  BaseSequentialStreamVMT
     BaseSequentialStream virtual methods table. More...
    struct  BaseSequentialStream
     Base stream class. More...

    -Defines

    #define _base_sequential_stream_methods
     BaseSequentialStream specific methods.
    #define _base_sequential_stream_data
     BaseSequentialStream specific data.
    #define chSequentialStreamWrite(ip, bp, n)   ((ip)->vmt->write(ip, bp, n))
     Sequential Stream write.
    #define chSequentialStreamRead(ip, bp, n)   ((ip)->vmt->read(ip, bp, n))
     Sequential Stream read.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define _base_sequential_stream_methods
    -
    -
    -Value:
    /* Stream write buffer method.*/                                          \
    -  size_t (*write)(void *instance, const uint8_t *bp, size_t n);             \
    -  /* Stream read buffer method.*/                                           \
    -  size_t (*read)(void *instance, uint8_t *bp, size_t n);
    -
    -

    BaseSequentialStream specific methods.

    - -

    Definition at line 51 of file chstreams.h.

    - -
    -
    - -
    -
    - - - - -
    #define _base_sequential_stream_data
    -
    -
    - -

    BaseSequentialStream specific data.

    -
    Note:
    It is empty because BaseSequentialStream is only an interface without implementation.
    - -

    Definition at line 62 of file chstreams.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define chSequentialStreamWrite( ip,
     bp,
     n 
    )   ((ip)->vmt->write(ip, bp, n))
    -
    -
    - -

    Sequential Stream write.

    -

    The function writes data from a buffer to a stream.

    -
    Parameters:
    - - - - -
    [in] ip pointer to a BaseSequentialStream or derived class
    [in] bp pointer to the data buffer
    [in] n the maximum amount of data to be transferred
    -
    -
    -
    Returns:
    The number of bytes transferred. The return value can be less than the specified number of bytes if the stream reaches a physical end of file and cannot be extended.
    - -

    Definition at line 94 of file chstreams.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define chSequentialStreamRead( ip,
     bp,
     n 
    )   ((ip)->vmt->read(ip, bp, n))
    -
    -
    - -

    Sequential Stream read.

    -

    The function reads data from a stream into a buffer.

    -
    Parameters:
    - - - - -
    [in] ip pointer to a BaseSequentialStream or derived class
    [out] bp pointer to the data buffer
    [in] n the maximum amount of data to be transferred
    -
    -
    -
    Returns:
    The number of bytes transferred. The return value can be less than the specified number of bytes if the stream reaches the end of the available data.
    - -

    Definition at line 107 of file chstreams.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__data__streams.png b/ChibiOS_2.0.8/docs/html/group__data__streams.png deleted file mode 100644 index 655e9767ea9bc8a27e1a0782b16e8a3dc6bc325a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yV0gg5z@W;(#=yW3&GGaZ0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj-jkj1PA*Ft9Lsx;TbZ%z1lfum5C68TJqFw+4uaE}kU9)zv(E z@?^tX^o_8Pq^5x6C_u5mv78Eyq;WqMD zPgV^KVchbOYgxGc`hB)9&&=G}7^Pe7>NTa|mnnlKL&nyq$m2^(eRv&Y8V!19PJ6KR zsNjLJ0w2arTW7D(UZHv9Rd{gyURi_n$ExZt&ym$iJATY<`7GbSTQ>z=6$>~Vgg^d& z^m>=q(oO0zuTEXHyOy{8E2nY4)wF+CvvY!XSM9T#e!Vi#<5X(`caQwvuE!TT7i4K%N&Xe_>!;(h?Qt5Ys~+whoW+G)|gc@~AAR|fQlH~C%NhO!uMaw=Py`uhR&hMG_D^@VCXgl_P+xfD2_kTE^dmU9_ zZZ_@o&O0Y=Jv=Oaj*rJDg<*~u6R&3T+Nz*OatifFVwSCsdiyzL^Uu|f%bjoNoly|q zxz;~Ke0Q$#^2wilw=elE_?>G-eqP00qg!!p7v}SS{phoO&9ZL`wlXL($E?r)d+T1^ zcTR_u0Tm^D8PgaFr5)nDZVEU>9G-FVME~sB=l8SC)plE$KRH)g_?PbNTkC5-R(&<> zO`dgJjODM5txa6HpRbl1{Mj=v#m%iQPGpg(^3oZCOwK{? zZuT%Ta44z^2_1-Lh+CG~ZLc|P+Oz<@>AmmuydD`Rc-ds;<}Tz~z;))_)6eYs+>JsL zb~0{ZEBoDX#Qt&6o+`_Rz_$%$2fZHOHm_m$urOeTEDPKE_jbQO2DASw-z#%q-j - -ChibiOS/RT: Debug - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Debug
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for Debug:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Debug APIs and services:

    -
      -
    • Trace buffer.
    • -
    • Parameters check.
    • -
    • Kernel assertions.
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  CtxSwcEvent
     Trace buffer record. More...
    struct  TraceBuffer
     Trace buffer header. More...

    -Defines

    #define TRACE_BUFFER_SIZE   64
     Trace buffer entries.
    #define STACK_FILL_VALUE   0x55
     Fill value for thread stack area in debug mode.
    #define THREAD_FILL_VALUE   0xFF
     Fill value for thread area in debug mode.
    #define chDbgCheck(c, func)
     Function parameter check.
    #define chDbgAssert(c, m, r)
     Condition assertion.

    -Functions

    void trace_init (void)
     Trace circular buffer subsystem initialization.
    void chDbgTrace (Thread *otp)
     Inserts in the circular debug trace buffer a context switch record.
    void chDbgPanic (char *msg)
     Prints a panic message on the console and then halts the system.

    -Variables

    TraceBuffer trace_buffer
     Public trace buffer.
    char * panic_msg
     Pointer to the panic message.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define TRACE_BUFFER_SIZE   64
    -
    -
    - -

    Trace buffer entries.

    - -

    Definition at line 42 of file chdebug.h.

    - -

    Referenced by chDbgTrace().

    - -
    -
    - -
    -
    - - - - -
    #define STACK_FILL_VALUE   0x55
    -
    -
    - -

    Fill value for thread stack area in debug mode.

    - -

    Definition at line 49 of file chdebug.h.

    - -

    Referenced by chThdCreateFromHeap(), chThdCreateFromMemoryPool(), and chThdCreateStatic().

    - -
    -
    - -
    -
    - - - - -
    #define THREAD_FILL_VALUE   0xFF
    -
    -
    - -

    Fill value for thread area in debug mode.

    -
    Note:
    The chosen default value is 0xFF in order to make evident which thread fields were not initialized when inspecting the memory with a debugger. A uninitialized field is not an error in itself but it better to know it.
    - -

    Definition at line 60 of file chdebug.h.

    - -

    Referenced by chThdCreateFromHeap(), chThdCreateFromMemoryPool(), and chThdCreateStatic().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define chDbgCheck( c,
     func 
    )
    -
    -
    -Value:
    {                                           \
    -  if (!(c))                                                             \
    -    chDbgPanic(__QUOTE_THIS(func)"(), line "__QUOTE_THIS(__LINE__));    \
    -}
    -
    -

    Function parameter check.

    -

    If the condition check fails then the kernel panics and halts.

    -
    Note:
    The condition is tested only if the CH_DBG_ENABLE_CHECKS switch is specified in chconf.h else the macro does nothing.
    -
    Parameters:
    - - - -
    [in] c the condition to be verified to be true
    [in] func the undecorated function name
    -
    -
    - -

    Definition at line 102 of file chdebug.h.

    - -

    Referenced by adcStart(), adcStartConversion(), adcStop(), adcStopConversion(), canReceive(), canSleep(), canStart(), canStop(), canTransmit(), canWakeup(), chCondBroadcastI(), chCondInit(), chCondSignal(), chCondSignalI(), chCondWaitS(), chCondWaitTimeoutS(), chEvtBroadcastI(), chEvtDispatch(), chEvtRegisterMask(), chEvtSignal(), chEvtSignalI(), chEvtUnregister(), chHeapFree(), chHeapInit(), chIQReadTimeout(), chMBFetchS(), chMBInit(), chMBPostAheadS(), chMBPostS(), chMBReset(), chMsgSend(), chMtxInit(), chMtxLockS(), chMtxTryLockS(), chOQWriteTimeout(), chPoolAllocI(), chPoolFreeI(), chPoolInit(), chSemInit(), chSemResetI(), chSemSignal(), chSemSignalI(), chSemSignalWait(), chSemWaitS(), chSemWaitTimeoutS(), chThdCreateFromMemoryPool(), chThdCreateI(), chThdSetPriority(), chThdSleep(), chThdWait(), chVTResetI(), chVTSetI(), mmcConnect(), mmcDisconnect(), mmcSequentialRead(), mmcSequentialWrite(), mmcStart(), mmcStartSequentialRead(), mmcStartSequentialWrite(), mmcStop(), mmcStopSequentialRead(), mmcStopSequentialWrite(), palReadBus(), palSetBusMode(), palWriteBus(), pwmDisableChannel(), pwmEnableChannel(), pwmStart(), pwmStop(), sdAddFlagsI(), sdGetAndClearFlags(), sdIncomingDataI(), sdRequestDataI(), sdStart(), sdStop(), spiAcquireBus(), spiExchange(), spiIgnore(), spiReceive(), spiReleaseBus(), spiSelect(), spiSend(), spiStart(), spiStop(), and spiUnselect().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define chDbgAssert( c,
     m,
     r 
    )
    -
    -
    -Value:
    {                                          \
    -  if (!(c))                                                             \
    -    chDbgPanic(m);                                                      \
    -}
    -
    -

    Condition assertion.

    -

    If the condition check fails then the kernel panics with the specified message and halts.

    -
    Note:
    The condition is tested only if the CH_DBG_ENABLE_ASSERTS switch is specified in chconf.h else the macro does nothing.
    -
    -The convention for the message is the following:
    - <function_name>(), #<assert_number>
    -
    -The remark string is not currently used except for putting a comment in the code about the assertion.
    -
    Parameters:
    - - - - -
    [in] c the condition to be verified to be true
    [in] m the text message
    [in] r a remark string
    -
    -
    - -

    Definition at line 128 of file chdebug.h.

    - -

    Referenced by adcStart(), adcStartConversion(), adcStop(), adcStopConversion(), adcWaitConversion(), canReceive(), canSleep(), canStart(), canStop(), canTransmit(), canWakeup(), chCondWaitS(), chCondWaitTimeoutS(), chEvtDispatch(), chHeapFree(), chMsgRelease(), chMtxLockS(), chMtxUnlock(), chMtxUnlockS(), chRegNextThread(), chThdAddRef(), chThdRelease(), chThdResume(), chThdWait(), chVTResetI(), mmcConnect(), mmcDisconnect(), mmcStart(), mmcStop(), pwmDisableChannel(), pwmEnableChannel(), pwmStart(), pwmStop(), sdStart(), sdStop(), spiExchange(), spiIgnore(), spiReceive(), spiSelect(), spiSend(), spiStart(), spiStop(), and spiUnselect().

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void trace_init (void  ) 
    -
    -
    - -

    Trace circular buffer subsystem initialization.

    - -

    Definition at line 51 of file chdebug.c.

    - -

    References TraceBuffer::tb_buffer, TraceBuffer::tb_ptr, and TraceBuffer::tb_size.

    - -

    Referenced by chSysInit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chDbgTrace (Thread otp ) 
    -
    -
    - -

    Inserts in the circular debug trace buffer a context switch record.

    -
    Parameters:
    - - -
    [in] otp the thread being switched out
    -
    -
    - -

    Definition at line 62 of file chdebug.c.

    - -

    References chTimeNow, CtxSwcEvent::cse_state, CtxSwcEvent::cse_tid, CtxSwcEvent::cse_time, CtxSwcEvent::cse_wtobjp, currp, Thread::p_state, Thread::p_u, TraceBuffer::tb_buffer, TraceBuffer::tb_ptr, TRACE_BUFFER_SIZE, and Thread::wtobjp.

    - -

    Referenced by chSchDoRescheduleI(), chSchGoSleepS(), and chSchWakeupS().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chDbgPanic (char *  msg ) 
    -
    -
    - -

    Prints a panic message on the console and then halts the system.

    -
    Parameters:
    - - -
    [in] msg the pointer to the panic message string
    -
    -
    - -

    Definition at line 87 of file chdebug.c.

    - -

    References chSysHalt, and panic_msg.

    - -
    -
    -

    Variable Documentation

    - -
    - -
    - -

    Public trace buffer.

    - -

    Definition at line 46 of file chdebug.c.

    - -
    -
    - -
    -
    - - - - -
    char* panic_msg
    -
    -
    - -

    Pointer to the panic message.

    -

    This pointer is meant to be accessed through the debugger, it is written once and then the system is halted. This variable can be set to NULL if the halt is caused by a stack overflow.

    - -

    Definition at line 80 of file chdebug.c.

    - -

    Referenced by chDbgPanic().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__debug.png b/ChibiOS_2.0.8/docs/html/group__debug.png deleted file mode 100644 index fc97c1050d70144d3b22d7facf9e90396c3ab598..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 968 zcmeAS@N?(olHy`uVBq!ia0y~yU|7n)z@W;(#=yX!JX@2Afq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM|)N#)mr@7?`s>T^vIy=DfXSpCKG5!~Ws@>DVh_j*DCVY!qv0 z+T0!7x{NhYV6Ah@mZs?TCe^7;e6n4On|1TV?u2yl?J5z>x)k)hiO)|j=u%q)m+sPU z=l{z5YJdH;Xy={1r*|*g&o8sH`un}7$Df|A-YL*vcuXR>$MD#!o(-9=Sq!ecaFTkW z+E97bwc<-$DI?>|RG?p0GSZhv~qw zt#|dNRKH^n?NM5?i($W;yZgnK0mgO3;*47?*+?-xwdy89vy<_6irJeGQ`{w)1^m%rmaA81!=`r8^ZW9E(Rv%y% zp3>Lnu73U6m)UKNb&4(ZU&IWi=WTDE?!L8V=k}Sm*Q_u5yQ+7( z#%fiepYKwP{#TWTt{1rIuJ}T(jQJ)HSL>n1o5qt*zR3@}R+cTl`}K{lpPiriWQt2= zdz?Lft+?#(oMXQy`S8UHHx)7bVm#8hL6gO`+@F18Q%h6nH52*p+v`hZXEw4txm#1* z@#fskLTSBB;}q}HQ@c0bSex$hMPNZ0gY=ELf~^i$DoZ}E5K~(3y{A;|n|GK->&vT| zY+s6V&kJ?deE(L)dNJdV<;6ztT~Uja1%FNRdirzQ4LQ zU-XQlA^X`~SHi5fU(d^3y;Z-tC*T(A(rce`bBnFYjQ8m+z0}RhzQMeUJNv?(KMwD&8S*c^`Q+Irqh*Xf%P%vpJ@C@n#f0O*u2-iHX`Ec{x@BKTb551ftRz-%{ja(VVy{~YsRc) zyLd9w($izVzdii$zq#4zYtMh_we-KL7QgZ>?3r&;4>;9t4EV+WytFH%aMQLw3=9km Mp00i_>zopr07Tu=MgRZ+ diff --git a/ChibiOS_2.0.8/docs/html/group__event__timer.html b/ChibiOS_2.0.8/docs/html/group__event__timer.html deleted file mode 100644 index 9ea8594..0000000 --- a/ChibiOS_2.0.8/docs/html/group__event__timer.html +++ /dev/null @@ -1,176 +0,0 @@ - - -ChibiOS/RT: Periodic Events Timer - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Periodic Events Timer
    - -[Various] -

    -
    -
    - -

    Periodic Event Timer. -More...

    - -

    -Collaboration diagram for Periodic Events Timer:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Periodic Event Timer.

    -

    This timer generates an event at regular intervals. The listening threads can use the event to perform time related activities. Multiple threads can listen to the same timer.

    - - - - - - - - - - - - -

    -Data Structures

    struct  EvTimer
     Event timer structure. More...

    -Defines

    #define evtInit(etp, time)
     Initializes an EvTimer structure.

    -Functions

    void evtStart (EvTimer *etp)
     Starts the timer.
    void evtStop (EvTimer *etp)
     Stops the timer.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define evtInit( etp,
     time 
    )
    -
    -
    -Value:
    {                                            \
    -  chEvtInit(&(etp)->et_es);                                             \
    -  (etp)->et_vt.vt_func = NULL;                                          \
    -  (etp)->et_interval = (time);                                          \
    -}
    -
    -

    Initializes an EvTimer structure.

    -
    Parameters:
    - - - -
    etp the EvTimer structure to be initialized
    time the interval in system ticks
    -
    -
    - -

    Definition at line 61 of file evtimer.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void evtStart (EvTimer etp ) 
    -
    -
    - -

    Starts the timer.

    -

    If the timer was already running then the function has no effect.

    -
    Parameters:
    - - -
    etp pointer to an initialized EvTimer structure.
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void evtStop (EvTimer etp ) 
    -
    -
    - -

    Stops the timer.

    -

    If the timer was already stopped then the function has no effect.

    -
    Parameters:
    - - -
    etp pointer to an initialized EvTimer structure.
    -
    -
    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__event__timer.png b/ChibiOS_2.0.8/docs/html/group__event__timer.png deleted file mode 100644 index 0ef95e8ba1f728470c174c1e0115e3c9b0ec12db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1113 zcmeAS@N?(olHy`uVBq!ia0y~yVED?wz@W;(#=yWZtAD*00|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj(ml-&gB0Ffjl2ba4!+nDh3oeTGP+4Eu-ovm=Eqb}U%nX%@wy z#1)v+;w<9nQCJXD=-cA^Cp@q(I@RJl(Taq(oeC zQ9Zm!O>5?g)%VR<9)92Bdp!5I=9G^ge>R>y+i&0PakkK^KP-IuE`3L_8&94*F+VTe z+xGRR+4CQ7bI)BiX8LA1Ib~C({IuiS=Ibm8y^^U};CSA8@#5&`QxCm4cI+DK(htfE zSM#iQe=3V8P`c%JX0Bh-?ay5yI(1@yw`v8s#YefWy|DLGn=St~{%sfKAKz;46}+}D z{pzc=mm97$tnFrKbKS63eE(lNb}UbZImDMGoWYXkfjt8=L%_GDJ}rsb zOEYiH?ovHzQMG%)3Qzf~>63c)zKNOiCHMEOZ%StunXTP%@chhk-q|_-lV96uPp!3o zbHDy;-{TXaf^)8fJ!up%67#ylwfc4H>D*Vw>)vm8yiArk;auM2jTbY%yglB%B|dtx zP57%Vu516eDJx(1FR_vio_eZL(4lU!{>e$}PIx_Z-CA|oEc=yR?XT;r_WCNm72BKg z{`x9OGq?RqW3MEx-lDg*N$hQM{TUU>eZM{=zU+Pd?r(a=i!&b&9!!>9YOqdZo9m>! z%}@OW_iQQ?8 zhi7`$`uz08dSR};$)An4=9cZRuiw4*GIy$Hs$tuClb?TYo7}&>d&|C`Rs3>$YFFKT zcgBKGuXBM^*aM{>TNPY&Yo=fOo|>4*__b>9>$_82cl*a`tX};+j=6&O!MhtbdN(s< zHOyk%u>H;UZ5iJmt?yJ*&d%<>ck9+8`Sx4-OH8jv!9E|kwxzg?k@ix%@9@jT!HJ+x7mo)EGcFhc+w?SV>a6do7D=I+DGqO zFVdQ&MBb@03L}ZWB>pF diff --git a/ChibiOS_2.0.8/docs/html/group__events.html b/ChibiOS_2.0.8/docs/html/group__events.html deleted file mode 100644 index 36f324b..0000000 --- a/ChibiOS_2.0.8/docs/html/group__events.html +++ /dev/null @@ -1,1081 +0,0 @@ - - -ChibiOS/RT: Event Flags - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Event Flags
    - -[Synchronization] -

    -
    -
    - -

    -Collaboration diagram for Event Flags:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Event Flags, Event Sources and Event Listeners.

    -

    Operation mode

    -

    Each thread has a mask of pending event flags inside its Thread structure. Operations defined for event flags:

    -
      -
    • Wait, the invoking thread goes to sleep until a certain AND/OR combination of event flags becomes pending.
    • -
    • Clear, a mask of event flags is cleared from the pending events mask, the cleared event flags mask is returned (only the flags that were actually pending and then cleared).
    • -
    • Signal, an event mask is directly ORed to the mask of the signaled thread.
    • -
    • Broadcast, each thread registered on an Event Source is signaled with the event flags specified in its Event Listener.
    • -
    • Dispatch, an events mask is scanned and for each bit set to one an associated handler function is invoked. Bit masks are scanned from bit zero upward.
    • -
    -

    An Event Source is a special object that can be "broadcasted" by a thread or an interrupt service routine. Broadcasting an Event Source has the effect that all the threads registered on the Event Source will be signaled with an events mask.
    - An unlimited number of Event Sources can exists in a system and each thread can be listening on an unlimited number of them.
    -
    - In order to use the Events APIs the CH_USE_EVENTS option must be enabled in chconf.h.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  EventListener
     Event Listener structure. More...
    struct  EventSource
     Event Source structure. More...

    -Defines

    #define _EVENTSOURCE_DATA(name)   {(void *)(&name)}
     Data part of a static event source initializer.
    #define EVENTSOURCE_DECL(name)   EventSource name = _EVENTSOURCE_DATA(name)
     Static event source initializer.
    #define ALL_EVENTS   ((eventmask_t)-1)
    #define EVENT_MASK(eid)   ((eventmask_t)(1 << (eid)))
    #define chEvtRegister(esp, elp, eid)   chEvtRegisterMask(esp, elp, EVENT_MASK(eid))
     Registers an Event Listener on an Event Source.
    #define chEvtInit(esp)   ((esp)->es_next = (EventListener *)(void *)(esp))
     Initializes an Event Source.
    #define chEvtIsListening(esp)   ((void *)(esp) != (void *)(esp)->es_next)
     Verifies if there is at least one EventListener registered.

    -Typedefs

    typedef struct EventSource EventSource
     Event Source structure.
    typedef void(* evhandler_t )(eventid_t)
     Event Handler callback function.

    -Functions

    void chEvtRegisterMask (EventSource *esp, EventListener *elp, eventmask_t mask)
     Registers an Event Listener on an Event Source.
    void chEvtUnregister (EventSource *esp, EventListener *elp)
     Unregisters an Event Listener from its Event Source.
    eventmask_t chEvtClear (eventmask_t mask)
     Clears the pending events specified in the mask.
    eventmask_t chEvtPend (eventmask_t mask)
     Pends a set of event flags on the current thread, this is much faster than using chEvtBroadcast() or chEvtSignal().
    void chEvtSignal (Thread *tp, eventmask_t mask)
     Pends a set of event flags on the specified Thread.
    void chEvtSignalI (Thread *tp, eventmask_t mask)
     Pends a set of event flags on the specified Thread.
    void chEvtBroadcast (EventSource *esp)
     Signals all the Event Listeners registered on the specified Event Source.
    void chEvtBroadcastI (EventSource *esp)
     Signals all the Event Listeners registered on the specified Event Source.
    void chEvtDispatch (const evhandler_t *handlers, eventmask_t mask)
     Invokes the event handlers associated to an event flags mask.
    eventmask_t chEvtWaitOneTimeout (eventmask_t mask, systime_t time)
     Waits for exactly one of the specified events.
    eventmask_t chEvtWaitAnyTimeout (eventmask_t mask, systime_t time)
     Waits for any of the specified events.
    eventmask_t chEvtWaitAllTimeout (eventmask_t mask, systime_t time)
     Waits for all the specified events.
    eventmask_t chEvtWaitOne (eventmask_t mask)
     Waits for exactly one of the specified events.
    eventmask_t chEvtWaitAny (eventmask_t mask)
     Waits for any of the specified events.
    eventmask_t chEvtWaitAll (eventmask_t mask)
     Waits for all the specified events.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - -
    #define _EVENTSOURCE_DATA( name )    {(void *)(&name)}
    -
    -
    - -

    Data part of a static event source initializer.

    -

    This macro should be used when statically initializing an event source that is part of a bigger structure.

    -
    Parameters:
    - - -
    name the name of the event source variable
    -
    -
    - -

    Definition at line 71 of file chevents.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define EVENTSOURCE_DECL( name )    EventSource name = _EVENTSOURCE_DATA(name)
    -
    -
    - -

    Static event source initializer.

    -

    Statically initialized event sources require no explicit initialization using chEvtInit().

    -
    Parameters:
    - - -
    name the name of the event source variable
    -
    -
    - -

    Definition at line 80 of file chevents.h.

    - -
    -
    - -
    -
    - - - - -
    #define ALL_EVENTS   ((eventmask_t)-1)
    -
    -
    -

    All events allowed mask.

    - -

    Definition at line 83 of file chevents.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define EVENT_MASK( eid )    ((eventmask_t)(1 << (eid)))
    -
    -
    -

    Returns the event mask from the event identifier.

    - -

    Definition at line 86 of file chevents.h.

    - -

    Referenced by chEvtDispatch().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define chEvtRegister( esp,
     elp,
     eid 
    )   chEvtRegisterMask(esp, elp, EVENT_MASK(eid))
    -
    -
    - -

    Registers an Event Listener on an Event Source.

    -
    Note:
    Multiple Event Listeners can use the same event identifier, the listener will share the callback function.
    -
    Parameters:
    - - - - -
    [in] esp pointer to the EventSource structure
    [out] elp pointer to the EventListener structure
    [in] eid numeric identifier assigned to the Event Listener. The identifier is used as index for the event callback function. The value must range between zero and the size, in bit, of the eventid_t type minus one.
    -
    -
    - -

    Definition at line 101 of file chevents.h.

    - -

    Referenced by chibios_rt::Event::Register().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chEvtInit( esp )    ((esp)->es_next = (EventListener *)(void *)(esp))
    -
    -
    - -

    Initializes an Event Source.

    -
    Note:
    Can be used with interrupts disabled or enabled.
    -
    Parameters:
    - - -
    [in] esp pointer to the EventSource structure
    -
    -
    - -

    Definition at line 109 of file chevents.h.

    - -

    Referenced by canObjectInit(), chibios_rt::Event::Event(), macObjectInit(), mmcObjectInit(), and sdObjectInit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chEvtIsListening( esp )    ((void *)(esp) != (void *)(esp)->es_next)
    -
    -
    - -

    Verifies if there is at least one EventListener registered.

    -
    Note:
    Can be called with interrupts disabled or enabled.
    -
    Parameters:
    - - -
    [in] esp pointer to the EventSource structure
    -
    -
    - -

    Definition at line 118 of file chevents.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef struct EventSource EventSource
    -
    -
    - -

    Event Source structure.

    - -
    -
    - -
    -
    - - - - -
    typedef void(* evhandler_t)(eventid_t)
    -
    -
    - -

    Event Handler callback function.

    - -

    Definition at line 124 of file chevents.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void chEvtRegisterMask (EventSource esp,
    EventListener elp,
    eventmask_t  mask 
    )
    -
    -
    - -

    Registers an Event Listener on an Event Source.

    -
    Note:
    Multiple Event Listeners can specify the same bits to be pended.
    -
    Parameters:
    - - - - -
    [in] esp pointer to the EventSource structure
    [in] elp pointer to the EventListener structure
    [in] mask the mask of event flags to be pended to the thread when the event source is broadcasted
    -
    -
    - -

    Definition at line 74 of file chevents.c.

    - -

    References chDbgCheck, chSysLock, chSysUnlock, EventListener::el_listener, EventListener::el_mask, EventListener::el_next, and EventSource::es_next.

    - -

    Referenced by chibios_rt::Event::RegisterMask().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void chEvtUnregister (EventSource esp,
    EventListener elp 
    )
    -
    -
    - -

    Unregisters an Event Listener from its Event Source.

    -
    Note:
    If the event listener is not registered on the specified event source then the function does nothing.
    -
    -For optimal performance it is better to perform the unregister operations in inverse order of the register operations (elements are found on top of the list).
    -
    Parameters:
    - - - -
    [in] esp pointer to the EventSource structure
    [in] elp pointer to the EventListener structure
    -
    -
    - -

    Definition at line 97 of file chevents.c.

    - -

    References chDbgCheck, chSysLock, chSysUnlock, and EventListener::el_next.

    - -

    Referenced by chibios_rt::Event::Unregister().

    - -
    -
    - -
    -
    - - - - - - - - - -
    eventmask_t chEvtClear (eventmask_t  mask ) 
    -
    -
    - -

    Clears the pending events specified in the mask.

    -
    Parameters:
    - - -
    [in] mask the events to be cleared
    -
    -
    -
    Returns:
    The pending events that were cleared.
    - -

    Definition at line 120 of file chevents.c.

    - -

    References chSysLock, chSysUnlock, and currp.

    - -

    Referenced by chibios_rt::Event::Clear().

    - -
    -
    - -
    -
    - - - - - - - - - -
    eventmask_t chEvtPend (eventmask_t  mask ) 
    -
    -
    - -

    Pends a set of event flags on the current thread, this is much faster than using chEvtBroadcast() or chEvtSignal().

    -
    Parameters:
    - - -
    [in] mask the events to be pended
    -
    -
    -
    Returns:
    The current pending events mask.
    - -

    Definition at line 139 of file chevents.c.

    - -

    References chSysLock, chSysUnlock, and currp.

    - -

    Referenced by chibios_rt::Event::Pend().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void chEvtSignal (Thread tp,
    eventmask_t  mask 
    )
    -
    -
    - -

    Pends a set of event flags on the specified Thread.

    -
    Parameters:
    - - - -
    [in] tp the thread to be signaled
    [in] mask the event flags set to be pended
    -
    -
    - -

    Definition at line 155 of file chevents.c.

    - -

    References chDbgCheck, chEvtSignalI(), chSchRescheduleS(), chSysLock, and chSysUnlock.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void chEvtSignalI (Thread tp,
    eventmask_t  mask 
    )
    -
    -
    - -

    Pends a set of event flags on the specified Thread.

    -
    Parameters:
    - - - -
    [in] tp the thread to be signaled
    [in] mask the event flags set to be pended
    -
    -
    - -

    Definition at line 171 of file chevents.c.

    - -

    References chDbgCheck, chSchReadyI(), Thread::ewmask, Thread::p_epending, Thread::p_state, Thread::p_u, Thread::rdymsg, THD_STATE_WTANDEVT, and THD_STATE_WTOREVT.

    - -

    Referenced by chEvtBroadcastI(), and chEvtSignal().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chEvtBroadcast (EventSource esp ) 
    -
    -
    - -

    Signals all the Event Listeners registered on the specified Event Source.

    -
    Parameters:
    - - -
    [in] esp pointer to the EventSource structure
    -
    -
    - -

    Definition at line 190 of file chevents.c.

    - -

    References chEvtBroadcastI(), chSchRescheduleS(), chSysLock, and chSysUnlock.

    - -

    Referenced by chibios_rt::Event::Broadcast().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chEvtBroadcastI (EventSource esp ) 
    -
    -
    - -

    Signals all the Event Listeners registered on the specified Event Source.

    -
    Parameters:
    - - -
    [in] esp pointer to the EventSource structure
    -
    -
    - -

    Definition at line 204 of file chevents.c.

    - -

    References chDbgCheck, chEvtSignalI(), EventListener::el_listener, EventListener::el_mask, EventListener::el_next, and EventSource::es_next.

    - -

    Referenced by canSleep(), canWakeup(), chEvtBroadcast(), sdAddFlagsI(), sdIncomingDataI(), sdRequestDataI(), and tmrfunc().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void chEvtDispatch (const evhandler_t handlers,
    eventmask_t  mask 
    )
    -
    -
    - -

    Invokes the event handlers associated to an event flags mask.

    -
    Parameters:
    - - - -
    [in] mask mask of the events to be dispatched
    [in] handlers an array of evhandler_t. The array must have size equal to the number of bits in eventmask_t.
    -
    -
    - -

    Definition at line 223 of file chevents.c.

    - -

    References chDbgAssert, chDbgCheck, and EVENT_MASK.

    - -

    Referenced by chibios_rt::Event::Dispatch().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    eventmask_t chEvtWaitOneTimeout (eventmask_t  mask,
    systime_t  time 
    )
    -
    -
    - -

    Waits for exactly one of the specified events.

    -

    The function waits for one event among those specified in mask to become pending then the event is cleared and returned.

    -
    Note:
    One and only one event is served in the function, the one with the lowest event id. The function is meant to be invoked into a loop in order to serve all the pending events.
    - This means that Event Listeners with a lower event identifier have an higher priority.
    -
    Parameters:
    - - - -
    [in] mask mask of the events that the function should wait for, ALL_EVENTS enables all the events
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The mask of the lowest id served and cleared event.
    -
    Return values:
    - - -
    0 if the specified timeout expired.
    -
    -
    - -

    Definition at line 345 of file chevents.c.

    - -

    References chSchGoSleepTimeoutS(), chSysLock, chSysUnlock, Thread::ewmask, Thread::p_epending, Thread::p_u, RDY_OK, THD_STATE_WTOREVT, and TIME_IMMEDIATE.

    - -

    Referenced by chibios_rt::Event::WaitOneTimeout().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    eventmask_t chEvtWaitAnyTimeout (eventmask_t  mask,
    systime_t  time 
    )
    -
    -
    - -

    Waits for any of the specified events.

    -

    The function waits for any event among those specified in mask to become pending then the events are cleared and returned.

    -
    Parameters:
    - - - -
    [in] mask mask of the events that the function should wait for, ALL_EVENTS enables all the events
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The mask of the served and cleared events.
    -
    Return values:
    - - -
    0 if the specified timeout expired.
    -
    -
    - -

    Definition at line 386 of file chevents.c.

    - -

    References chSchGoSleepTimeoutS(), chSysLock, chSysUnlock, Thread::ewmask, Thread::p_epending, Thread::p_u, RDY_OK, THD_STATE_WTOREVT, and TIME_IMMEDIATE.

    - -

    Referenced by chibios_rt::Event::WaitAnyTimeout().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    eventmask_t chEvtWaitAllTimeout (eventmask_t  mask,
    systime_t  time 
    )
    -
    -
    - -

    Waits for all the specified events.

    -

    The function waits for all the events specified in mask to become pending then the events are cleared and returned.

    -
    Parameters:
    - - - -
    [in] mask mask of the event ids that the function should wait for
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The mask of the served and cleared events.
    -
    Return values:
    - - -
    0 if the specified timeout expired.
    -
    -
    - -

    Definition at line 424 of file chevents.c.

    - -

    References chSchGoSleepTimeoutS(), chSysLock, chSysUnlock, Thread::ewmask, Thread::p_epending, Thread::p_u, RDY_OK, THD_STATE_WTANDEVT, and TIME_IMMEDIATE.

    - -

    Referenced by chibios_rt::Event::WaitAllTimeout().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    eventmask_t chEvtWaitOne (eventmask_t  mask ) 
    -
    -
    - -

    Waits for exactly one of the specified events.

    -

    The function waits for one event among those specified in mask to become pending then the event is cleared and returned.

    -
    Note:
    One and only one event is served in the function, the one with the lowest event id. The function is meant to be invoked into a loop in order to serve all the pending events.
    - This means that Event Listeners with a lower event identifier have an higher priority.
    -
    Parameters:
    - - -
    [in] mask mask of the events that the function should wait for, ALL_EVENTS enables all the events
    -
    -
    -
    Returns:
    The mask of the lowest id served and cleared event.
    - -

    Definition at line 256 of file chevents.c.

    - -

    References chSchGoSleepS(), chSysLock, chSysUnlock, Thread::ewmask, Thread::p_epending, Thread::p_u, and THD_STATE_WTOREVT.

    - -

    Referenced by chibios_rt::Event::WaitOne().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    eventmask_t chEvtWaitAny (eventmask_t  mask ) 
    -
    -
    - -

    Waits for any of the specified events.

    -

    The function waits for any event among those specified in mask to become pending then the events are cleared and returned.

    -
    Parameters:
    - - -
    [in] mask mask of the events that the function should wait for, ALL_EVENTS enables all the events
    -
    -
    -
    Returns:
    The mask of the served and cleared events.
    - -

    Definition at line 283 of file chevents.c.

    - -

    References chSchGoSleepS(), chSysLock, chSysUnlock, Thread::ewmask, Thread::p_epending, Thread::p_u, and THD_STATE_WTOREVT.

    - -

    Referenced by chibios_rt::Event::WaitAny().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    eventmask_t chEvtWaitAll (eventmask_t  mask ) 
    -
    -
    - -

    Waits for all the specified events.

    -

    The function waits for all the events specified in mask to become pending then the events are cleared and returned.

    -
    Parameters:
    - - -
    [in] mask mask of the event ids that the function should wait for
    -
    -
    -
    Returns:
    The mask of the served and cleared events.
    - -

    Definition at line 308 of file chevents.c.

    - -

    References chSchGoSleepS(), chSysLock, chSysUnlock, Thread::ewmask, Thread::p_epending, Thread::p_u, and THD_STATE_WTANDEVT.

    - -

    Referenced by chibios_rt::Event::WaitAll().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__events.png b/ChibiOS_2.0.8/docs/html/group__events.png deleted file mode 100644 index 7ff707289f5280e2480c504f1ac186521f16a1c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1118 zcmeAS@N?(olHy`uVBq!ia0y~yVEDkmz@W;(#=yW(vn+*=fq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}X!fV4df3@i+uE{-7;bKc(Z%@%f)Vf&CSb@__d)qo3XPG8rR z3sz@1axLnJVv;HrU^&`dCD@<4Q2gVg(>I&hZGW_d^Dor>!TE@$9T|4vc$z|u?UwZTA-JAVy>}KBd4Q}Xwf)&R(eSga`2xp2p#nv)?xKbu)=#%h# z*P@Im&+Gfs9#3Y_Vz{RgDaabexFL0S$Bbi)A!_RCxz{IJdV6~}Jp1#SiHBi5LyY$V zIj;9h-!l2koI7`Gtkbh6MV41ympB0E`m!}Pq8S319YZvot*quHusMBy8Ev3TjJkm-!&^-*|b(_Zg8lEjBa0FT$M`d zVzv%L&7;!AHKC;#eG*+EYxC>)w=IL?tc5;cWmzUy;e-SzdmW6D-p6dE6ZzX z_4MuA>*t++>h{gMbMxGwrna(-6JBRXPn z-#*7*W-D)R43h5*50l$3FJn`bobu#KXU)G8a*8gI966qnItPNfUN>x>Suis;H?MA9 z!JPYU`+7y5tSpf7?=5|J)pz0Kidl1y*lyT;)+Ii0*`2^|)91~fTf6uB_e-1m@0Z*@ zA??5WZ)t7r+qdcrTZ?|4(>yM@L#bsAD#}1FJDx+#4heNpWlj4zVG&Gy5?5iuFrudr+Pg#W?0oQgVBKJ!G84%XVV@g z^t0^XdXPHJZc*pqCmy>uY-p(3yY5d}LX^LbWZdI>IqTOvP;Tfy-gowH)>f(K41tq_ z<}thYar~PaJL}LHF&{7O13dXn`)X!pGgYuZh~4<(fy2TJ`#4VgX6TF7%e}tAbn}bZ z=Xo-Z?|=D;n?avXc31U|i#L9sF7urt!?vS;?K-=kX}j6H#NJQtK%{X{qW@go5z6>M zajnyd@cV!I-_`$rJi{p>F7Dd8&)fxa2eKbuy|B*A-adafixLcYU5@W)pV^nlUU!v& Pfq}u()z4*}Q$iB}Q^p$T diff --git a/ChibiOS_2.0.8/docs/html/group__events_ga2944a7fc82e7cc15537f5a7c04f457d3_cgraph.png b/ChibiOS_2.0.8/docs/html/group__events_ga2944a7fc82e7cc15537f5a7c04f457d3_cgraph.png deleted file mode 100644 index 91887934263c915dc0b0cfc37b69871688d4af52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5039 zcmeAS@N?(olHy`uVBq!ia0y~yV7$%1z|hUX#=yX!*=$_Sz`($k|H*Y zfq{X&#M9T6{T8O<6Ee*8DXy$dkkhoEo-?vRya@n8F;yNF_@9j#f&+*7+ z@7$dv`0|Wj@{PO;TRujq9LPyI9CKuYYS5Ns@3KE?LFN1ZDq1a^Y5nO(kxkH_ItHgF zAK&eiU#YymW}dYiqY^q;BESie@c)xL1;*Xz9P6FWOPYCt|-RQ4$P{Z?6S4D_2H)h{x`}(u>gnmP zL&~Q4JQa(cu6HjXee>&ef7ERGBeh=~zr<#?$0Ex*`KXwnwBq!o zA)yobT2uZWJAK^l&W#SIl`8KxgUn4ox2GnMrJeDHT-tWV6J%=c24vN zy>aZs?_&?5m6fgCrNdP#MNe?f?Cf|^b$VLvt6e20*9aYKSapQ)j!x5-RVuC%0=E8V zoM6p0J+M`kiSbMR<(F6PGgns}DV&^iep-iy!o(BHT#vOpUKLUQa?(0h1OHHafr<5- zbFF9kz5gTn$v#7_oA=&wtecx`Khsu1e9uVkz>FYce>VNf-fsx?E z{%QL1uVm!y_Z!KtD`eQtV6nDq3CA}--_-kd#m}C0%gvgUQDRWB|?!BMP@~4+s zC7++xvEtmXU)#P#Oxx?{^6U6<^=qq=7#kKd#BI+to^$eyJrhsmPc47N(5dekZ-UE>g`75)OW^esI-}?KZ)`spSYM@l|DdXj(gVLKLV^?=EI_zUxz<$78 zX;O%*(pYz*}B&L6_BwIt|mAK=6tuUsBj(w}OP6l|ixw~zX=ilX)RR>b^ zI)~$E(nj{&+ech4@V}64=vjU1ckjf91rt6rO~;MS!cDFvDhUzH>nHgGv`9ME6p-`nA0 zwfFI2h1ZK`wkCSJOy@bCRb;dd|A5LG2GKw`0%uj zv^5cLHd-E-)4tsQ&H6$HZ-zMmu7@OiOUldT?aFdAq)Xo?7noHey zX1YIntjbn%khACP+qZUev1N6y;idImJ2;XU{5lm@Y8{S^<>s4fVOV1N!m4v!;tiod z?}#lgIz8Oo_401N5I-2sc!ur6>zB>5ojOCZZnHaH_juBl=_ zMOXXJtuhoX>2--S$mv|s$uFHq>^7^6iJ#I?%%eck!u1M!q1Xx>5`?2?2YzBW#EX$s`JN{MFSjZd; z_O}hq{(U8BUgfiy3%plM&u5Ee2t9mkrg8q6jcYddzSz6X`-0e`*NciuZ~Da?{H{uJbInb*JmTG{HAi$l-ON_{uSG`mPiO7@O;FW(yWC4U!|mez=%e{qWS;mil>-tG|oXo~rH7cis6CbbI3c z|K9fT^7D4qeLbGf&M&uSXYbY3;g262Y@YvjZR*~mxgnR9-L~qwz2bOsp82XDwt_Y` zmX?KL#Sm&wlba-)hwh zh7ZxJKE+tfxh>bp^Y4sA<=0bF&&}`Y|Nr>sg4e|lx5*xS_^szp{59Pi?&`p!3ya?F zD@uGUQgQVARPKX^e$UPNbSv%Qmq&7oqI=`y<8|NevRzhmK6F+lsbY`0n54r{BN5 z;@_dCd)BRwk@fpLrAl~SVg5PQ6b2o~e}AK0>aTCxxM_9vC-#Xaru}F6u(;rcio4sk z_?3mWQ*%xqy{#*gcYQP4`pewa7aH@FOF3@`?L8E9oqH#%(^A`Tebdm(%Yvh~ercO~ zOXGT;>g(0tDznp8U7EQ6Rx;1N?Atd)x_SFnyjs0&?fTH4iyth#r!Z&Tbgm^{w~KWeLU%b%`Zxj5qEpQ$w(8O%bHUZx*hamq^YOZ2q3PB-@dvJ>vU{L)n3 zu+U5TYqGWG)^$!#xBZV=&VFcmVv4@=a=**n)wOZe8~i?7f0g+g@YZV2m!{@~GdX8w ze?RcI_}QJA+)Em4ZeP1ESXf{Cr2W!@F1rIY=OzBW&M5itzi8*><;RXs-mr%I>bhH} z12PNOU-r&FeY*Q@w*Iwj-aOm7?JuwHQ>=W+dVTiw|Bjw>=hm8k`|{^v+pj5C3>3Fp zyVzCx&sSb_Kj`T8#TPp{Pyd=cSy=e@gtN=$xGC=W@N3r!wFh3T+k@90mEU%!YMZa> zhT3g)+NN8g{Oi8TG{2hIcKGfL>+jyP8FToSG@K9lbZ_O{pW53?OLX?F-CZqfWi4K> zI<@Mbt-Y3Zz~!Q7Y#eBxnyt6gSB6ra}{bhZ%6U#txBuda;4~L)3$4h52L27 zEZ@DgZpDeTV2|bHHcScSzPwj8#BOhL3caUmKEER+bZfBaamGDW|7t!xnyP(#JL3wo zjMIBF!;Sa6T6XJi%vF}|+eTmIgw|~1+g_QSyLd@w=U;h0pEvPw{oABerDSE813qOJ zu9_j_7$GX|^5v_){omAQkB%z)Ge_lKsH#2pS7ux3E7R#w@xeUu@xjwK=*n&SD#R1_ z{ifKt_?LFq4l!@Ov+q@~jmX=r^RlLYJhV1e|8n>9nVG+H868}TFVDYK$}>S;s`>8X z#nyIb?#I47&n(8j8q}`4eLN&H`suX7-Rnbmr|P}lwy$chXK0jrA#dwvi?^Hg;`Ysr zWMH|V)9`;o?weC7>)x=(ojmyey6aw%wshUweh*6)a5i1feY*SFn#j!`UoM}YmtiQf zrzXHW_I#MArC`a5M|%u!tkqh-^fGrHAJ0wK?z|&k{F6SO-EP#lUy}8~E&t`VLK&i> zr@rS*f0BQTAw-nx#qDD!`gOEz=A5*tUYTLIPj6ND^tUO;-fdnw(`8-93IC9d)j4k- z`G1~&rSn#(T}G(u6Wh?Ai55Nb{XK6i#B(A;xDHR7H7R%YnvQ*%i`GjjA68bro%Q#e z!qj7O{;w;951e;W{QT?0iEkGdbSvgdY`Ze$*s*Q$j@AEmm$5KSEb61wPC}5Z-dd0s@=<1rK=gPh3&o+NQZ}z5}6F=sB`{Fu3d@Cd4{5`4+ zHL)S<^lo=X-`K~$;PHip&Re(nuYH+vf%VD*l?Gc!amTBIFL}<+{(j)D(%jf-UthMy zwgb@nd3SfkZ01`D(b8O*yC)@peQsx)}B2dxa(V~7t1J{2br#&XRsHHp_sRv?OJ;(aDY@Af7pW`B%I@5eyEvXDp4CA5 z!1_?rL?4ZbUb(*&UPxu8CEO4aWPI`Zww3kt&DSNA|E}ujR$zNDg=5kxqdQl(KDf{+ z>>S>_ZgLc;0rjF=Me1%%f5%DryFI%ZW7xjr3VKF`S_ zXL}R9T|ydR4YB^5YZeWv41Oz=5_{Bk?cU8VZ*4Y(cb8w59;g|)ig%`}_p$fJX}_{v zm39apU=_S+Uppc6-P(&6r=MesRb}l58Kyq*#DgG)*RBQ(38D=G4e=cc3%g*g!v`QI z)odtuIN7}A@Xf7CFW5Km9dHVj5kI(Lm1ke?*?Mt_SzNpPvUu8b1t-2YYf0L8qj_8I zqstFhmopfx%X)9_)^_;e$y#;)x_X-zS|{y6u40ScQ*n9i!hjX=EPq!;a55@@CzhTidFu|3C6xy!i9~+4iP4VnB^=#;9E-ACBdOU0;>NFkwC83&sx`UMUGX};ltvid~s`ty+CvN)K-vDZf3T|!Kw{NZO zwAA&&6YChVLpL%U2xQ>AZFYF(nLo-CPgF2X*s8=)yKjll%3J@FdG<~8di&>o!>Rmg zkdwtW*Zd54{^Q5bsh6MUUbAS3X0T=UFmKp!SSh&SiOYxQE3bU3&n?)=0_s?u?snOx z$Nq&=&?YJ`E_Bblvr+v|zyH0*^Puj(c8;Vv8c$ZC)AZB7z;u|`xq>Al&VA4_xbqM^#o+R5`3_+k8RqWvN?TG%1VpGk|MuJ zAA8_CvCn&3ZtUAPb8PP4l-&2`;qI-{jBl8}*Xiqn|Jp!3M?u!7x6G47uGd>H`?2lzmT3n;t_ocglE1lPm&KXz z+zhey!iT%M{+r2yh9*v|4zdl{{`#s0&&wj)7~L8BGpqOUL@Oz+nzkcGf8O$04mv#V z9(|j=jr}#KTyZ&jX65!fTWllD?|=q!u70|8c+HmZXwUOoRjYQsxhW(#G5jdI&Cjcc zORP3{#k|ul7by+~l@5Wba}KSkm^Hof&z$`)nWiH=02}y08NNUs5kir8EV-nkV}6hv1;=)^O-0-_uZ&BwQmJf9oTm=Nt!PY7N+3)LKv`XIi( z0|NtliKnkC`z>x6UM`mBCZFXQ82IWvT^vIy=DfXIpCkRelKsQ`&y%JwX}YcXA@2W5 zW{Ihh*SV(BY;m64K#2?^p6H8WYniS%cJoLurMM>V@(j;8%#?WgTB>)lwcq8l&W)y> za}T(2Z;x&_>wcWZ(YEx(ts|VOrlpf_O!CzF^hbH)8jnYJFWYPE)TwsAH_=_L|4$vm z!R6QA+rD>x_0)EcybY5JIxtiZRClm_o5vvEW5roi8hwTHNN2`xxDKM%VL=Y zckYlpP;tfc!g>kz|7yLDYVyumoI0O)TjjQ;#KdlAhP-|&&Rt3B4b6e-g30YIpLZ%s z9o+L+PC-!ctBRO|lF}4D^2#y5I`0$h-NOq0_fT&97bC zBV2Mft>US?+nx={-&szd`nO$co{3ta%KZPQZkqAm@A~;>TixnsC!+TB&9ByJxbk*Z zC1cq7+aL8axX!k_d{7Ln-kZ-Z@#pio@78Vo`esfVTYp@@{S?3V z|F#)gSQrHSx_5H&@99n*@=t5ZZZofu*<3Vl_u6pVus6@7xfPCf-sZmh+VxGT#^!6s z7Ti-*ULUjP)2GXE*~y|RerwCJ{F1)jw-fx^qGeb5GU!u~)m+;}UCqVC>GPQTZtxz- zeO|LpCnfIn5837S{&e%ku{am1$(_Dht5tvP)}J?;JJ&|%?|Eex_3`o5<=1{~edG}u zy~fPWa4L&}(k{LO={*MxPfKY=gq58){(C(?!>DZcv*NWsBl7>evith1-2JhfLf~tb zn~QTy{9cF~t%?557*qT8ck)ihY<0mUVdCbDC+fc4>Q9`!_rte>Pp{_w{4>uv@L8C9 zM6ueMpR$r-4qcnm;tssE3wg1%@I&>Ct84e)R$RAC{`{jy{)QGm_Rafe#vy3=X8C-r zuv4u8-S6Y|*4!z6*&1%Qr)1T|N7qmNlrbs0kR-PI5&H&)pgke;Cw%|h^sV~bl1=rC zpGU9y9Xh|9bCZmTUuhk0zK{3P%^G6gWiwOm<|Rf(p8p@MUA3wx@JOZ5fyu3hE_}X! zY~OKazRTx+#=K9O_NwO2uW;^L`yX#$2)eUl?}NSP&R@N4am8x=^XGSB_HK(Z{Hw#> zE36{Ny2y-yc}BU*mlaxkV%^;S%)wHqV&&%0hYX*# z7=B{e@L_JvzXMNKOwO9PpnCeo<4hjDl2X4enKn1Sk1@C2Z6SJScj6+xMfSoI>wQ$7 zL~q_)ea>~RuXIW6!PUn=Y9)5;Ik!z%Kk^!b%ck|KUj6T!A>5~|-gEHu&p*z_fzLfe zLX0A%X3nfskuR0I5~b5{Wr}h7xAW^_4Hk4sGwg8>wbxu!yUM|8?p~G$smWi|S6L+X z%!!EEQvCef+j{LwM>?|-KECGFX}Dq{_$NYi|K?xOO#Al~v$+(QHry|lshr=@@i=4C ze*1;frivbq+_PuPms{D)%;vd0584j9TzMS9urjl6u|DH7HNmfQ{8!JPy6aQ+&b9wn z9X%SJt{3w|U(8-9%UaAK>&EVTTdR*08mwA%ovEN^%_9bZ(6f@w`XXHX_b=Y!>Fn6E zks-)-l3)6I;fXz3+qyH{SoX6jB;T&$WmxejSMcp>;p1YCf)niZMXuSi`dBc$%P9Ti z;u3d<>p>WU`F3l;PbE?ZxYx?3DOnnQy0%-^eLM3k#uT0d8I_XF4NffS3_g~8bs9?l zm#w|{oG)$4 zw_t6#LXmcZJWIibxt;;O?F@J1!ZzgIw!6Q7$Ba`eZb=^KVU!5H8u;K4Z(p@j|Zj(SP07hm0Dus~eSeEz;6j#Q*jCY3BSr8^1d( ze6XvCt6}|bJ)xrv&x?C@)P5*bZ)iT=FP~qo7xMJq@At8Uiy4l&6xf~$&z#1vhb@C|LZ*W{Np7AD-wtA#w`$8^h4&^O6exr&Mh0>^O9sNkVwGS*>C2nNu@5QhExvF;5D- zx^b$g=lZfphBGD&nhyLO8RsO7Ev>D8@4CG`^!(Y@xeMh2rs|7#|E?1#OHo=BmcaNX zVO5jwY`f}gqn!_BHW+QWRTFpBhtX}jG0 zWUb2%y!E;yYhCsyDtfK9pY~&x*zJ;WKg+#rl$5gkRH_@!iZs0{jg08%SRuGjZU1$-#o;;Iq2>ASTkmzQxwy<-{F3QK*bXi33D=8M*Dnf) zy>RE+*HcHe_3hto?aH5EvGrDGhep&wd8V~@PF&Z@$;++lYQ4XAbJWkPT8qB^TGRXR z>hev0e|&tbQ|00!yXyHmCf-f%H#20`?+s8=dL^UwrlD6%DrY~quv{2uQgl$ zx!%R)O6072%xmtQ_^laNcb+lqTmF|niKY8rIZtt%)_iQ`x&G=F7nixs_t`EUob}U; zLrH0s?ic3;E-o&G2beruTx>g8Cv|n)Jn-MO@1CJE^RA0Oin?}pzxJdblMH{HzIoGD zJ=&B{FmU$zKZTPd&@SE(*l5eNC?cI}J_wS;&qFsp6qHPI`Jv%Qi-(Mzo;QyL`F&k4) z?`=M&lYXi?@0pu}JLAtDj&CSxhXeJQ!yQ z9jrZ>a{unjl5hKx3jgkB5?)$no2RrWt@0k{vb&uVmIu6N*_?a(`EPOYV98MH;CtCe zR;=n{+QH}`f9koQKckgylT3i!`4<)yTnECo&sbH!ut!npyBJq>-=pczmG~Fg%wO?) zN3ONiyrSRNPUlVk^z94RcF#Sc2hP4d*u@ zvOq(#l>F?#R%IsU2kuI{tmohVZgWa{R^f-Ryt^st4gJdhSU+rAQM_=Q70-Ou2`eV$ z+^adiwzK80?fk#q43k#<_+I>+Z}!ute_S^(luh2sBy>9WcogH58PEKCFMbMK8L!=7 z!|w5Qh2c5V1}%j;Gbv97frIYmIXigY@A>@eym061wVTtwi$%>*7YtO`Bg}I(wWp8q zQRUGU9Mc%r)Ln53bx8~PICtsNnZe%P%ehvDEL!ioQb_RUFKl{vCW^>`zM~u&+4?|@6s1@_@wyh(ee-b zvey6lxBRQ#m5*Id%jBW?i;9m z3~8xuTRUfR-Q$vr_jhcKU|4xMWM6Y>wc_rr;j8W?mKpURl5h2lHhDgeJna5Y-R#SERkJwg!|M9%{q@P) z4gWk7onCoIK+NHl%GNl6ywlmzEC>F!3aebZRiwJzZt8ya-0xA}gw;=k$5tL){k5i) zS!*A3v7RbFvsvLw^JX7kn8>)qPfhN0UhSVf z)qFy$uUTI_^>6B9Gvl(oyv;veJXW7~|M}@)t*w&MW;IndFRBuQk3N(7ANx@<{U=95 z^rVyfE>)Y~|M~04?emGZPpti`?*A@6E8#}j`IBy64%zUrax0W}E4-ig_sFWg%N`eb ztkPz@I+|_qzOhkSQK?<}lvYf)-EY;f|8Hk|^Za=h`})5?!~uIA{`)_}fBtDaz1EBG z;klD;$KQXeydxs!@G2!Sj#uoN+ljXq`feXvc5&n1eZ}jqz7x}*^8CT0qv?eoA8no} z?<6aC?q9pszZHJw(V|Q%bd~P^o!lz!fA{;h&%4)My7Z2%y|>7(E!N|)RloCLCXcyG zetqbezgJ@YXIaPO%A@P-);~_~Nt17nma#wW_~_?Z-L??Mjf@hZHtZ*oy}kdspPyg< z;L&~7|5fW&JYN!CzklPdLb>)f)(KXF(!|-Uzj5P>^eJfg>c5D%p?B|0}9*&{@oT9 fL<6PM;~A0{{c;yzPnpfYz`)??>gTe~DWM4fk<~om diff --git a/ChibiOS_2.0.8/docs/html/group__events_ga6c219038c3e618e2142c6e1601997907_cgraph.png b/ChibiOS_2.0.8/docs/html/group__events_ga6c219038c3e618e2142c6e1601997907_cgraph.png deleted file mode 100644 index b1bb316cfadc84dea59b5b53b78bf2c7c0cc3826..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1129 zcmeAS@N?(olHy`uVBq!ia0y~yV0g^Hz@W;(#=yX^!9MOO0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj(2LO+L#rFtBiYx;TbZ%y~PfLAOTJ`?;%E_l{f6uAz%4!gB;!tb>6DCrITXdOkthqf= z?9-}z_Ot}y$)ygf9_lsZU+U#C8+}zM-zOy6a;*Nd$wk_X0W&`_!Y5D3=9k;BStoACj+*l~VnaLrdtjOD# zq_RXYpr^%zCEK(#EG#^{u%aR($3Iyree>jb^51W+GuPc{d%f)SlIySU2VI@sr10a< zpFdw1c8Fhn({$*Mj`ch5B5GgE(+uA}GUHUvn;m{Iq*H62 z&_v$QyDz>@t7E?>({p^&{|5(u-&b6GB(6QXqDJuirVX*TKD7xOsx6-Csk5wXGH*1? znJ&L&CuZzPGdeW$+0&o*nf@_uU^r3g5YNwaHzw-U{8dTeq2CUFIJa@}Yn7w9LhUPU zJvZftMZ5kvmF>ShwYKcgnIx0W6KWH-L?mr$nKoy-$kbfFi?457x=`uo&HaIeVZ|fK z&{}Vn{O?tN=QGrB#oUzUyZ^h?YjGP?0;pPJm z+wnlHVYYc*PJ)Tlyi%*Z&kucQp4=sSM(C2swo7F>uJX~RUhzIpn&T={8MtxH+f9dx zL>1i^8?RXPeY=^bwWe3nTauBp%||oiTBYuce-}y_ znzxA13M+dG)mFZ}^|imRKfk}G+Ue6miD(~*x(dOzeR~yLA4W^J zn6PwBoY3ZAD0E3c!_7&mX=}sfN%#M+nJaeJ{Pp|lNxveFKVekwzu8xr#_<39`m@KY mKGw5BGoyeLM<&mIrXsD#w#$ll(is>S7(8A5T-G@yGywq3bs3NV diff --git a/ChibiOS_2.0.8/docs/html/group__events_ga75a812ae99ce83a3689f51d797a038de_cgraph.png b/ChibiOS_2.0.8/docs/html/group__events_ga75a812ae99ce83a3689f51d797a038de_cgraph.png deleted file mode 100644 index 05980afd8f036a3267e75b4dc45ff8e5d38b99ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5853 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 diff --git a/ChibiOS_2.0.8/docs/html/group__events_ga77651e22578713ebe355c1213286c2e9_cgraph.png b/ChibiOS_2.0.8/docs/html/group__events_ga77651e22578713ebe355c1213286c2e9_cgraph.png deleted file mode 100644 index 6032b66373e4959ef4362c437cc3df2c322277da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3063 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 Hl+XkK`k&@+ diff --git a/ChibiOS_2.0.8/docs/html/group__events_ga8c5c6bf310a08cdc836d23f98a87dbf5_cgraph.png b/ChibiOS_2.0.8/docs/html/group__events_ga8c5c6bf310a08cdc836d23f98a87dbf5_cgraph.png deleted file mode 100644 index 444bb04b3c315e7e8ac2893990747a80461eaf8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3010 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 E0L-sIZU6uP diff --git a/ChibiOS_2.0.8/docs/html/group__events_gabd731d3ed2f037b2409e370676575f8d_cgraph.png b/ChibiOS_2.0.8/docs/html/group__events_gabd731d3ed2f037b2409e370676575f8d_cgraph.png deleted file mode 100644 index 69456ff78ea80a47dfa23123a2a939d3b1e5d1f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3060 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 diff --git a/ChibiOS_2.0.8/docs/html/group__external.html b/ChibiOS_2.0.8/docs/html/group__external.html deleted file mode 100644 index b02ccce..0000000 --- a/ChibiOS_2.0.8/docs/html/group__external.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: External Components - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    External Components

    -
    -
    -

    ChibiOS/RT supports several external libraries through support interfaces and/or demos. Credit should be given to the original authors for making available such useful code.
    - The current list of supported component is:

    -
      -
    • uIP, by Adam Dunkels at the Swedish Institute of Computer Science, link.
    • -
    • lwIP, many authors, link.
    • -
    • FatFs, by "ChaN", link.
    • -
    -

    External components and libraries are not directly supported and are used "as is" or with minor integration patching.

    - -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__heaps.html b/ChibiOS_2.0.8/docs/html/group__heaps.html deleted file mode 100644 index 498f7b5..0000000 --- a/ChibiOS_2.0.8/docs/html/group__heaps.html +++ /dev/null @@ -1,300 +0,0 @@ - - -ChibiOS/RT: Heaps - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - - -
    - -

    -Collaboration diagram for Heaps:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Heap Allocator related APIs.

    -

    Operation mode

    -

    The heap allocator implements a first-fit strategy and its APIs are functionally equivalent to the usual malloc() and free() library functions. The main difference is that the OS heap APIs are guaranteed to be thread safe.
    - By enabling the CH_USE_MALLOC_HEAP option the heap manager will use the runtime-provided malloc() and free() as backend for the heap APIs instead of the system provided allocator.
    - In order to use the heap APIs the CH_USE_HEAP option must be enabled in chconf.h.

    - - - - - - - - - - - - - - - - - -

    -Data Structures

    union  heap_header
     Memory heap block header. More...
    struct  memory_heap
     Structure describing a memory heap. More...

    -Functions

    void heap_init (void)
     Initializes the default heap.
    void chHeapInit (MemoryHeap *heapp, void *buf, size_t size)
     Initializes a memory heap from a static memory area.
    void * chHeapAlloc (MemoryHeap *heapp, size_t size)
     Allocates a block of memory from the heap by using the first-fit algorithm.
    void chHeapFree (void *p)
     Frees a previously allocated memory block.
    size_t chHeapStatus (MemoryHeap *heapp, size_t *sizep)
     Reports the heap status.
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void heap_init (void  ) 
    -
    -
    - -

    Initializes the default heap.

    -
    Note:
    Internal use only.
    - -

    Definition at line 73 of file chheap.c.

    - -

    References chMtxInit(), chSemInit(), memory_heap::h_free, memory_heap::h_mtx, memory_heap::h_provider, heap_header::size, and heap_header::u.

    - -

    Referenced by chSysInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void chHeapInit (MemoryHeap heapp,
    void *  buf,
    size_t  size 
    )
    -
    -
    - -

    Initializes a memory heap from a static memory area.

    -
    Note:
    Both the heap buffer base and the heap size must be aligned to the align_t type size.
    -
    Parameters:
    - - - - -
    [out] heapp pointer to the memory heap descriptor to be initialized
    [in] buf heap buffer base
    [in] size heap size
    -
    -
    - -

    Definition at line 93 of file chheap.c.

    - -

    References chDbgCheck, chMtxInit(), chSemInit(), memory_heap::h_free, memory_heap::h_mtx, memory_heap::h_provider, MEM_IS_ALIGNED, heap_header::size, and heap_header::u.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void * chHeapAlloc (MemoryHeap heapp,
    size_t  size 
    )
    -
    -
    - -

    Allocates a block of memory from the heap by using the first-fit algorithm.

    -

    The allocated block is guaranteed to be properly aligned for a pointer data type (align_t).

    -
    Parameters:
    - - - -
    [in] heapp pointer to a heap descriptor or NULL in order to access the default heap.
    [in] size the size of the block to be allocated. Note that the allocated block may be a bit bigger than the requested size for alignment and fragmentation reasons.
    -
    -
    -
    Returns:
    A pointer to the allocated block.
    -
    Return values:
    - - -
    NULL if the block cannot be allocated.
    -
    -
    - -

    Definition at line 124 of file chheap.c.

    - -

    References memory_heap::h_free, memory_heap::h_provider, MEM_ALIGN_SIZE, heap_header::size, and heap_header::u.

    - -

    Referenced by chThdCreateFromHeap().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chHeapFree (void *  p ) 
    -
    -
    - -

    Frees a previously allocated memory block.

    -
    Parameters:
    - - -
    [in] p pointer to the memory block to be freed
    -
    -
    - -

    Definition at line 184 of file chheap.c.

    - -

    References chDbgAssert, chDbgCheck, memory_heap::h_free, heap_header::size, and heap_header::u.

    - -

    Referenced by chThdRelease().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    size_t chHeapStatus (MemoryHeap heapp,
    size_t *  sizep 
    )
    -
    -
    - -

    Reports the heap status.

    -
    Note:
    This function is meant to be used in the test suite, it should not be really useful for the application code.
    -
    -This function is not implemented when the CH_USE_MALLOC_HEAP configuration option is used (it always returns zero).
    -
    Parameters:
    - - - -
    [in] heapp pointer to a heap descriptor or NULL in order to access the default heap.
    [in] sizep pointer to a variable that will receive the total fragmented free space
    -
    -
    -
    Returns:
    The number of fragments in the heap.
    - -

    Definition at line 238 of file chheap.c.

    - -

    References memory_heap::h_free, and heap_header::u.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__heaps.png b/ChibiOS_2.0.8/docs/html/group__heaps.png deleted file mode 100644 index 5f1bf75e9fb5e75888bbe9038e3af5f5dbfe7ef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1105 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 WKIMGJ!k&SFfx*+&&t;ucLK6Tuy*Bs& diff --git a/ChibiOS_2.0.8/docs/html/group__internals.html b/ChibiOS_2.0.8/docs/html/group__internals.html deleted file mode 100644 index e185120..0000000 --- a/ChibiOS_2.0.8/docs/html/group__internals.html +++ /dev/null @@ -1,521 +0,0 @@ - - -ChibiOS/RT: Internals - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Internals
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for Internals:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    All the functions present in this module, while public, are not an OS API and should not be directly used in the user applications code.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  ThreadsQueue
     Generic threads bidirectional linked list header and element. More...
    struct  ThreadsList
     Generic threads single link list, it works like a stack. More...

    -Defines

    #define queue_init(tqp)   ((tqp)->p_next = (tqp)->p_prev = (Thread *)(tqp));
     Threads queue initialization.
    #define list_init(tlp)   ((tlp)->p_next = (Thread *)(tlp))
     Threads list initialization.
    #define isempty(p)   ((p)->p_next == (Thread *)(p))
     Evaluates to TRUE if the specified threads queue or list is empty.
    #define notempty(p)   ((p)->p_next != (Thread *)(p))
     Evaluates to TRUE if the specified threads queue or list is not empty.
    #define _THREADSQUEUE_DATA(name)   {(Thread *)&name, (Thread *)&name}
     Data part of a static threads queue initializer.
    #define THREADSQUEUE_DECL(name)   ThreadsQueue name = _THREADSQUEUE_DATA(name)
     Static threads queue initializer.

    -Functions

    void prio_insert (Thread *tp, ThreadsQueue *tqp)
     Inserts a thread into a priority ordered queue.
    void queue_insert (Thread *tp, ThreadsQueue *tqp)
     Inserts a Thread into a queue.
    Threadfifo_remove (ThreadsQueue *tqp)
     Removes the first-out Thread from a queue and returns it.
    Threadlifo_remove (ThreadsQueue *tqp)
     Removes the last-out Thread from a queue and returns it.
    Threaddequeue (Thread *tp)
     Removes a Thread from a queue and returns it.
    void list_insert (Thread *tp, ThreadsList *tlp)
     Pushes a Thread on top of a stack list.
    Threadlist_remove (ThreadsList *tlp)
     Pops a Thread from the top of a stack list and returns it.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - -
    #define queue_init( tqp )    ((tqp)->p_next = (tqp)->p_prev = (Thread *)(tqp));
    -
    -
    - -

    Threads queue initialization.

    - -

    Definition at line 46 of file chlists.h.

    - -

    Referenced by chCondInit(), chMtxInit(), chSemInit(), init_thread(), and scheduler_init().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define list_init( tlp )    ((tlp)->p_next = (Thread *)(tlp))
    -
    -
    - -

    Threads list initialization.

    - -

    Definition at line 51 of file chlists.h.

    - -

    Referenced by init_thread().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define isempty( p )    ((p)->p_next == (Thread *)(p))
    -
    -
    - -

    Evaluates to TRUE if the specified threads queue or list is empty.

    - -

    Definition at line 57 of file chlists.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define notempty( p )    ((p)->p_next != (Thread *)(p))
    -
    -
    - -

    Evaluates to TRUE if the specified threads queue or list is not empty.

    - -

    Definition at line 63 of file chlists.h.

    - -

    Referenced by chCondSignal(), chCondSignalI(), and chThdExit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define _THREADSQUEUE_DATA( name )    {(Thread *)&name, (Thread *)&name}
    -
    -
    - -

    Data part of a static threads queue initializer.

    -

    This macro should be used when statically initializing a threads queue that is part of a bigger structure.

    -
    Parameters:
    - - -
    [in] name the name of the threads queue variable
    -
    -
    - -

    Definition at line 72 of file chlists.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define THREADSQUEUE_DECL( name )    ThreadsQueue name = _THREADSQUEUE_DATA(name)
    -
    -
    - -

    Static threads queue initializer.

    -

    Statically initialized threads queues require no explicit initialization using queue_init().

    -
    Parameters:
    - - -
    [in] name the name of the threads queue variable
    -
    -
    - -

    Definition at line 81 of file chlists.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void prio_insert (Thread tp,
    ThreadsQueue tqp 
    )
    -
    -
    - -

    Inserts a thread into a priority ordered queue.

    -
    Note:
    The insertion is done by scanning the list from the highest priority toward the lowest.
    -
    -This function is not an API.
    -
    Parameters:
    - - - -
    [in] tp the pointer to the thread to be inserted in the list
    [in] tqp the pointer to the threads list header
    -
    -
    - -

    Definition at line 49 of file chlists.c.

    - -

    References Thread::p_next, Thread::p_prev, and Thread::p_prio.

    - -

    Referenced by chCondWaitS(), chCondWaitTimeoutS(), and chMtxLockS().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void queue_insert (Thread tp,
    ThreadsQueue tqp 
    )
    -
    -
    - -

    Inserts a Thread into a queue.

    -
    Note:
    This function is not an API.
    -
    Parameters:
    - - - -
    [in] tp the pointer to the thread to be inserted in the list
    [in] tqp the pointer to the threads list header
    -
    -
    - -

    Definition at line 71 of file chlists.c.

    - -

    References Thread::p_next, ThreadsQueue::p_prev, and Thread::p_prev.

    - -
    -
    - -
    -
    - - - - - - - - - -
    Thread * fifo_remove (ThreadsQueue tqp ) 
    -
    -
    - -

    Removes the first-out Thread from a queue and returns it.

    -
    Note:
    If the queue is priority ordered then this function returns the thread with the highest priority.
    -
    -This function is not an API.
    -
    Parameters:
    - - -
    [in] tqp the pointer to the threads list header
    -
    -
    -
    Returns:
    The removed thread pointer.
    - -

    Definition at line 87 of file chlists.c.

    - -

    References Thread::p_next, and ThreadsQueue::p_next.

    - -

    Referenced by chCondBroadcastI(), chCondSignal(), chCondSignalI(), chMsgRelease(), chMtxUnlock(), chMtxUnlockAll(), chMtxUnlockS(), chSchDoRescheduleI(), chSchGoSleepS(), chSemSignal(), chSemSignalI(), and chSemSignalWait().

    - -
    -
    - -
    -
    - - - - - - - - - -
    Thread * lifo_remove (ThreadsQueue tqp ) 
    -
    -
    - -

    Removes the last-out Thread from a queue and returns it.

    -
    Note:
    If the queue is priority ordered then this function returns the thread with the lowest priority.
    -
    -This function is not an API.
    -
    Parameters:
    - - -
    [in] tqp the pointer to the threads list header
    -
    -
    -
    Returns:
    The removed thread pointer.
    - -

    Definition at line 103 of file chlists.c.

    - -

    References Thread::p_prev, and ThreadsQueue::p_prev.

    - -

    Referenced by chSemResetI().

    - -
    -
    - -
    -
    - - - - - - - - - -
    Thread * dequeue (Thread tp ) 
    -
    -
    - -

    Removes a Thread from a queue and returns it.

    -

    The thread is removed from the queue regardless of its relative position and regardless the used insertion method.

    -
    Note:
    This function is not an API.
    -
    Parameters:
    - - -
    [in] tp the pointer to the thread to be removed from the queue
    -
    -
    -
    Returns:
    The removed thread pointer.
    - -

    Definition at line 119 of file chlists.c.

    - -

    References Thread::p_next, and Thread::p_prev.

    - -

    Referenced by chMtxLockS().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void list_insert (Thread tp,
    ThreadsList tlp 
    )
    -
    -
    - -

    Pushes a Thread on top of a stack list.

    -
    Note:
    This function is not an API.
    -
    Parameters:
    - - - -
    [in] tp the pointer to the thread to be inserted in the list
    [in] tlp the pointer to the threads list header
    -
    -
    - -

    Definition at line 133 of file chlists.c.

    - -

    References ThreadsList::p_next, and Thread::p_next.

    - -

    Referenced by chThdWait().

    - -
    -
    - -
    -
    - - - - - - - - - -
    Thread * list_remove (ThreadsList tlp ) 
    -
    -
    - -

    Pops a Thread from the top of a stack list and returns it.

    -
    Note:
    The list must be non-empty before calling this function.
    -
    -This function is not an API.
    -
    Parameters:
    - - -
    [in] tlp the pointer to the threads list header
    -
    -
    -
    Returns:
    The removed thread pointer.
    - -

    Definition at line 147 of file chlists.c.

    - -

    References Thread::p_next, and ThreadsList::p_next.

    - -

    Referenced by chThdExit().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__internals.png b/ChibiOS_2.0.8/docs/html/group__internals.png deleted file mode 100644 index eec70b09c145e04997d00d2595b08eb206daa01d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 977 zcmeAS@N?(olHy`uVBq!ia0y~yVA#OGz@W;(#=yYvNG5q50|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj-jkj1PA*FfbQ;x;TbZ%z1mq+g~_Pg#E++%u0=Zj$;Y8MXuE` zgtxiQmJl*EvHIyjKH$sd+xN|9o~dBJP51TZh3Z zpY05fc?5YHCfz%pXLoJEOy|sdX>S*2tu_za`!S@x`eAs(+q9q?Im}Z0i~L{5I)z_< z>V5ZaxSfIeJHd~ZX>SAzUps258|~@c6usU|$mHsqoa^f{qk_*JNU18F6}h+PZIqVj z#|f3voi5Ld85CC4sdZe4`u^ZZ?#nMO!8N>lcmA~8uyJpTm+9eKz3-pD;btioe17D$ z(1EM}o_;#>d)u}zyXVczzCZcoJI02p&JD+7><=)!JY(}}QCR%jH-99qd|ewb&+W62 zQE0{4$1A7F#IXn_eAdZ{4U;jiiTl3(;oZBuAzJeBjII7JOP*;NyD{wIUeG-ATW7@2 zID^9))6-`^Jh_L>F6VeK_oPzJf;$C~(>eUa`|^&JFXB4F(ZD);n?*9iVg|8n=}k8u z-TYho*vcXKObzn_6+sF2>xXYkOB=@~imx_cN;r6avb^}^%a=8#dUb=+(xEsflc`&` zn%6VvFh;z3TU)kn@89>iX?N6}_!=5t{k|-j+I#5cO1=#@uU$KRpWzwfneSh1ciy<< zbofjK;{&HHQ#sXz5?Z}dzlk?kG8E4|bNSzj*Mi@kB+j$Cc0K-o&n~t^e|6%_dQaa>=vY}q0`M{x4zP;4o9F3%yPZ&S4~B!Yo~ Ofx*+&&t;ucLK6VXX13)3 diff --git a/ChibiOS_2.0.8/docs/html/group__io__channels.html b/ChibiOS_2.0.8/docs/html/group__io__channels.html deleted file mode 100644 index 53004d3..0000000 --- a/ChibiOS_2.0.8/docs/html/group__io__channels.html +++ /dev/null @@ -1,635 +0,0 @@ - - -ChibiOS/RT: I/O Channels - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    I/O Channels
    - -[I/O Support] -

    -
    -
    - -

    -Collaboration diagram for I/O Channels:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    This module defines an abstract interface for I/O channels by extending the BaseSequentialStream interface. Note that no code is present, I/O channels are just abstract interface like structures, you should look at the systems as to a set of abstract C++ classes (even if written in C). Specific device drivers can use/extend the interface and implement them.
    - This system has the advantage to make the access to channels independent from the implementation logic.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  BaseChannelVMT
     BaseChannel virtual methods table. More...
    struct  BaseChannel
     Base channel class. More...
    struct  BaseAsynchronousChannelVMT
     BaseAsynchronousChannel virtual methods table. More...
    struct  BaseAsynchronousChannel
     Base asynchronous channel class. More...

    -Defines

    #define _base_channel_methods
     BaseChannel specific methods.
    #define _base_channel_data   _base_sequential_stream_data
     BaseChannel specific data.
    #define chIOPutWouldBlock(ip)   ((ip)->vmt->putwouldblock(ip))
     Channel output check.
    #define chIOGetWouldBlock(ip)   ((ip)->vmt->getwouldblock(ip))
     Channel input check.
    #define chIOPut(ip, b)   ((ip)->vmt->put(ip, b, TIME_INFINITE))
     Channel blocking byte write.
    #define chIOPutTimeout(ip, b, time)   ((ip)->vmt->put(ip, b, time))
     Channel blocking byte write with timeout.
    #define chIOGet(ip)   ((ip)->vmt->get(ip, TIME_INFINITE))
     Channel blocking byte read.
    #define chIOGetTimeout(ip, time)   ((ip)->vmt->get(ip, time))
     Channel blocking byte read with timeout.
    #define chIOWriteTimeout(ip, bp, n, time)   ((ip)->vmt->writet(ip, bp, n, time))
     Channel blocking write with timeout.
    #define chIOReadTimeout(ip, bp, n, time)   ((ip)->vmt->readt(ip, bp, n, time))
     Channel blocking read with timeout.
    #define _base_asynchronous_channel_methods   _base_channel_methods
     BaseAsynchronousChannel specific methods.
    #define _base_asynchronous_channel_data
     BaseAsynchronousChannel specific data.
    #define chIOGetWriteEventSource(ip)   (&((ip)->vmt->oevent))
     Returns the write event source.
    #define chIOGetReadEventSource(ip)   (&((ip)->vmt->ievent))
     Returns the read event source.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define _base_channel_methods
    -
    -
    -Value:
    _base_sequential_stream_methods                                           \
    -  /* Channel output check.*/                                                \
    -  bool_t (*putwouldblock)(void *instance);                                  \
    -  /* Channel input check.*/                                                 \
    -  bool_t (*getwouldblock)(void *instance);                                  \
    -  /* Channel put method with timeout specification.*/                       \
    -  msg_t (*put)(void *instance, uint8_t b, systime_t time);                  \
    -  /* Channel get method with timeout specification.*/                       \
    -  msg_t (*get)(void *instance, systime_t time);                             \
    -  /* Channel write method with timeout specification.*/                     \
    -  size_t (*writet)(void *instance, const uint8_t *bp,                       \
    -                  size_t n, systime_t time);                                \
    -  /* Channel read method with timeout specification.*/                      \
    -  size_t (*readt)(void *instance, uint8_t *bp, size_t n, systime_t time);
    -
    -

    BaseChannel specific methods.

    - -

    Definition at line 51 of file chioch.h.

    - -
    -
    - -
    -
    - - - - -
    #define _base_channel_data   _base_sequential_stream_data
    -
    -
    - -

    BaseChannel specific data.

    -
    Note:
    It is empty because BaseChannel is only an interface without implementation.
    - -

    Definition at line 72 of file chioch.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chIOPutWouldBlock( ip )    ((ip)->vmt->putwouldblock(ip))
    -
    -
    - -

    Channel output check.

    -

    This function verifies if a subsequent put/write operation would block.

    -
    Parameters:
    - - -
    [in] ip pointer to a BaseChannel or derived class
    -
    -
    -
    Returns:
    The output queue status:
    -
    Return values:
    - - - -
    FALSE if the output queue has space and would not block a write operation.
    TRUE if the output queue is full and would block a write operation.
    -
    -
    - -

    Definition at line 107 of file chioch.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chIOGetWouldBlock( ip )    ((ip)->vmt->getwouldblock(ip))
    -
    -
    - -

    Channel input check.

    -

    This function verifies if a subsequent get/read operation would block.

    -
    Parameters:
    - - -
    [in] ip pointer to a BaseChannel or derived class
    -
    -
    -
    Returns:
    The input queue status:
    -
    Return values:
    - - - -
    FALSE if the input queue contains data and would not block a read operation.
    TRUE if the input queue is empty and would block a read operation.
    -
    -
    - -

    Definition at line 121 of file chioch.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define chIOPut( ip,
     b 
    )   ((ip)->vmt->put(ip, b, TIME_INFINITE))
    -
    -
    - -

    Channel blocking byte write.

    -

    This function writes a byte value to a channel. If the channel is not ready to accept data then the calling thread is suspended.

    -
    Parameters:
    - - - -
    [in] ip pointer to a BaseChannel or derived class
    [in] b the byte value to be written to the channel
    -
    -
    -
    Returns:
    The operation status:
    -
    Return values:
    - - - -
    Q_OK if the operation succeeded.
    Q_RESET if the channel associated queue (if any) was reset.
    -
    -
    - -

    Definition at line 134 of file chioch.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define chIOPutTimeout( ip,
     b,
     time 
    )   ((ip)->vmt->put(ip, b, time))
    -
    -
    - -

    Channel blocking byte write with timeout.

    -

    This function writes a byte value to a channel. If the channel is not ready to accept data then the calling thread is suspended.

    -
    Parameters:
    - - - - -
    [in] ip pointer to a BaseChannel or derived class
    [in] b the byte value to be written to the channel
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation status:
    -
    Return values:
    - - - - -
    Q_OK if the operation succeeded.
    Q_TIMEOUT if the specified time expired.
    Q_RESET if the channel associated queue (if any) was reset.
    -
    -
    - -

    Definition at line 153 of file chioch.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chIOGet( ip )    ((ip)->vmt->get(ip, TIME_INFINITE))
    -
    -
    - -

    Channel blocking byte read.

    -

    This function reads a byte value from a channel. If the data is not available then the calling thread is suspended.

    -
    Parameters:
    - - -
    [in] ip pointer to a BaseChannel or derived class
    -
    -
    -
    Returns:
    A byte value from the queue or:
    -
    Return values:
    - - -
    Q_RESET if the channel associated queue (if any) was reset.
    -
    -
    - -

    Definition at line 164 of file chioch.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define chIOGetTimeout( ip,
     time 
    )   ((ip)->vmt->get(ip, time))
    -
    -
    - -

    Channel blocking byte read with timeout.

    -

    This function reads a byte value from a channel. If the data is not available then the calling thread is suspended.

    -
    Parameters:
    - - - -
    [in] ip pointer to a BaseChannel or derived class
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    A byte value from the queue or:
    -
    Return values:
    - - - -
    Q_TIMEOUT if the specified time expired.
    Q_RESET if the channel associated queue (if any) was reset.
    -
    -
    - -

    Definition at line 181 of file chioch.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define chIOWriteTimeout( ip,
     bp,
     n,
     time 
    )   ((ip)->vmt->writet(ip, bp, n, time))
    -
    -
    - -

    Channel blocking write with timeout.

    -

    The function writes data from a buffer to a channel. If the channel is not ready to accept data then the calling thread is suspended.

    -
    Parameters:
    - - - - - -
    [in] ip pointer to a BaseChannel or derived class
    [out] bp pointer to the data buffer
    [in] n the maximum amount of data to be transferred
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The number of bytes transferred.
    - -

    Definition at line 198 of file chioch.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define chIOReadTimeout( ip,
     bp,
     n,
     time 
    )   ((ip)->vmt->readt(ip, bp, n, time))
    -
    -
    - -

    Channel blocking read with timeout.

    -

    The function reads data from a channel into a buffer. If the data is not available then the calling thread is suspended.

    -
    Parameters:
    - - - - - -
    [in] ip pointer to a BaseChannel or derived class
    [in] bp pointer to the data buffer
    [in] n the maximum amount of data to be transferred
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The number of bytes transferred.
    - -

    Definition at line 216 of file chioch.h.

    - -
    -
    - -
    -
    - - - - -
    #define _base_asynchronous_channel_methods   _base_channel_methods
    -
    -
    - -

    BaseAsynchronousChannel specific methods.

    - -

    Definition at line 223 of file chioch.h.

    - -
    -
    - -
    -
    - - - - -
    #define _base_asynchronous_channel_data
    -
    -
    -Value:
    _base_channel_data                                                        \
    -  /* Data Available EventSource.*/                                          \
    -  EventSource           ievent;                                             \
    -  /* Data Transmitted EventSource.*/                                        \
    -  EventSource           oevent;
    -
    -

    BaseAsynchronousChannel specific data.

    - -

    Definition at line 229 of file chioch.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chIOGetWriteEventSource( ip )    (&((ip)->vmt->oevent))
    -
    -
    - -

    Returns the write event source.

    -

    The write event source is broadcasted when the channel is ready for write operations. This usually happens when the internal output queue becomes empty.

    -
    Parameters:
    - - -
    [in] ip pointer to a BaseAsynchronousChannel or derived class
    -
    -
    -
    Returns:
    A pointer to an EventSource object.
    - -

    Definition at line 266 of file chioch.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chIOGetReadEventSource( ip )    (&((ip)->vmt->ievent))
    -
    -
    - -

    Returns the read event source.

    -

    The read event source is broadcasted when the channel is ready for read operations. This usually happens when the internal input queue becomes non-empty.

    -
    Parameters:
    - - -
    [in] ip pointer to a BaseAsynchronousChannel or derived class
    -
    -
    -
    Returns:
    A pointer to an EventSource object.
    - -

    Definition at line 278 of file chioch.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__io__channels.png b/ChibiOS_2.0.8/docs/html/group__io__channels.png deleted file mode 100644 index 1e1039ea5941044fd51ae181004f0e0e204a78e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1066 zcmeAS@N?(olHy`uVBq!ia0y~yV7Se|z@W;(#=yXET6&Hq0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj-jkj1PA*FfgC-ba4!+nDh3Ieg5Sr3APW-~`4mSH8w6u|gF=W5ZX#Y_ukmI~UgVmNT+O31NPo^4TUm(}`;n=w={Jt(?# z^vRXSYq&iQ{rO|FZ29udddUlX{rr*=6BR#fZF(5hVW!*GdqMySPgrtDP4W37%SFdJ zZkzkAJa21Qn0;s4^L01Boh^U-`2Smv>U~Qr`xe`l%RE0Xm@ZR)-{QS@b7$q@yua#> z8$Q~f`};ic?XG>yC%3KdXS(gTJ<90!fY{B3^r=F-=NL787H6gDfh8arf1Xl`Lh{c2ZM zpV6+Op|h(jHojiIes}rT%QLUlFO}_h)zQ?}znWM>)M&eou7@R*AdeawT-Z zSJkIR%BHhd%i4c^e}B`_yG^B+!p-x87HwPJyruWc{R)oT-+nef;a{7#XF+ayK=qxd z2EN0$GS<{&natbIZjgQ3ypN$((jkq(R7`Y_Tk>n|>#;H2*5US_^S>U_yX5!l*YEF} zmiElretDPG!rcpQ`EUIGIr#s~^;vR^``34c>fJuhaE9TPO@pA|n*Y0={@C-_fT^6X~S-hE%T#l`PRip=6y5MBDg&1IHSMry3=%{_r{IZ*6wcm<_k}}&A^uyBPD5aB2n67-R>RFc2%%ExOi`` z`S+dgPCQ?etz;~*jc4sTz1kDI*o@l$rzsn?BqFfN8#YhY1KPo@JUe1)j-{;)Yfk;x zFH|M?ZRbR*{*T||{XTQpv;Ezyy!qeXr*C07OKJc7c0(P8)>G$yF)%PNc)I$ztaD0e F0ssSs|9k)d diff --git a/ChibiOS_2.0.8/docs/html/group__io__queues.html b/ChibiOS_2.0.8/docs/html/group__io__queues.html deleted file mode 100644 index 689d315..0000000 --- a/ChibiOS_2.0.8/docs/html/group__io__queues.html +++ /dev/null @@ -1,1344 +0,0 @@ - - -ChibiOS/RT: I/O Queues - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    I/O Queues
    - -[I/O Support] -

    -
    -
    - -

    -Collaboration diagram for I/O Queues:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    ChibiOS/RT queues are mostly used in serial-like device drivers. The device drivers are usually designed to have a lower side (lower driver, it is usually an interrupt service routine) and an upper side (upper driver, accessed by the application threads).
    - There are several kind of queues:
    -

    -
      -
    • Input queue, unidirectional queue where the writer is the lower side and the reader is the upper side.
    • -
    • Output queue, unidirectional queue where the writer is the upper side and the reader is the lower side.
    • -
    • Full duplex queue, bidirectional queue. Full duplex queues are implemented by pairing an input queue and an output queue together.
    • -
    -

    In order to use the I/O queues the CH_USE_QUEUES option must be enabled in chconf.h.
    - I/O queues are usually used as an implementation layer for the I/O channels interface, also see I/O Channels.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  GenericQueue
     Generic I/O queue structure. More...

    -Defines

    #define Q_OK   RDY_OK
     Returned by the queue functions if the operation is successful.
    #define Q_TIMEOUT   RDY_TIMEOUT
     Returned by the queue functions if a timeout occurs.
    #define Q_RESET   RDY_RESET
     Returned by the queue functions if the queue is reset.
    #define Q_EMPTY   -3
     Returned by the queue functions if the queue is empty.
    #define Q_FULL   -4
     Returned by the queue functions if the queue is full.
    #define chQSize(q)   ((q)->q_top - (q)->q_buffer)
     Returns the queue's buffer size.
    #define chQSpace(q)   chSemGetCounterI(&(q)->q_sem)
     Queue space.
    #define chIQIsEmpty(q)   ((bool_t)(chQSpace(q) <= 0))
     Evaluates to TRUE if the specified Input Queue is empty.
    #define chIQIsFull(q)   ((bool_t)(chQSpace(q) >= chQSize(q)))
     Evaluates to TRUE if the specified Input Queue is full.
    #define chIQGet(iqp)   chIQGetTimeout(iqp, TIME_INFINITE)
     Input queue read.
    #define _INPUTQUEUE_DATA(name, buffer, size, inotify)
     Data part of a static input queue initializer.
    #define INPUTQUEUE_DECL(name, buffer, size, inotify)   InputQueue name = _INPUTQUEUE_DATA(name, buffer, size, inotify)
     Static input queue initializer.
    #define chOQIsEmpty(q)   ((bool_t)(chQSpace(q) >= chQSize(q)))
     Evaluates to TRUE if the specified Output Queue is empty.
    #define chOQIsFull(q)   ((bool_t)(chQSpace(q) <= 0))
     Evaluates to TRUE if the specified Output Queue is full.
    #define chOQPut(oqp, b)   chOQPutTimeout(oqp, b, TIME_INFINITE)
     Output queue write.
    #define _OUTPUTQUEUE_DATA(name, buffer, size, onotify)
     Data part of a static output queue initializer.
    #define OUTPUTQUEUE_DECL(name, buffer, size, onotify)   InputQueue name = _OUTPUTQUEUE_DATA(name, buffer, size, onotify)
     Static output queue initializer.

    -Typedefs

    typedef void(* qnotify_t )(void)
     Queue notification callback type.
    typedef GenericQueue InputQueue
     Input queue structure.
    typedef GenericQueue OutputQueue
     Output queue structure.

    -Functions

    void chIQInit (InputQueue *iqp, uint8_t *bp, size_t size, qnotify_t infy)
     Initializes an input queue.
    void chIQResetI (InputQueue *iqp)
     Resets an input queue.
    msg_t chIQPutI (InputQueue *iqp, uint8_t b)
     Input queue write.
    msg_t chIQGetTimeout (InputQueue *iqp, systime_t time)
     Input queue read with timeout.
    size_t chIQReadTimeout (InputQueue *iqp, uint8_t *bp, size_t n, systime_t time)
     Input queue read with timeout.
    void chOQInit (OutputQueue *oqp, uint8_t *bp, size_t size, qnotify_t onfy)
     Initializes an output queue.
    void chOQResetI (OutputQueue *oqp)
     Resets an output queue.
    msg_t chOQPutTimeout (OutputQueue *oqp, uint8_t b, systime_t time)
     Output queue write with timeout.
    msg_t chOQGetI (OutputQueue *oqp)
     Output queue read.
    size_t chOQWriteTimeout (OutputQueue *oqp, const uint8_t *bp, size_t n, systime_t time)
     Output queue write with timeout.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define Q_OK   RDY_OK
    -
    -
    - -

    Returned by the queue functions if the operation is successful.

    - -

    Definition at line 51 of file chqueues.h.

    - -

    Referenced by sdIncomingDataI(), and sdRequestDataI().

    - -
    -
    - -
    -
    - - - - -
    #define Q_TIMEOUT   RDY_TIMEOUT
    -
    -
    - -

    Returned by the queue functions if a timeout occurs.

    - -

    Definition at line 53 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - -
    #define Q_RESET   RDY_RESET
    -
    -
    - -

    Returned by the queue functions if the queue is reset.

    - -

    Definition at line 55 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - -
    #define Q_EMPTY   -3
    -
    -
    - -

    Returned by the queue functions if the queue is empty.

    - -

    Definition at line 57 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - -
    #define Q_FULL   -4
    -
    -
    - -

    Returned by the queue functions if the queue is full.

    - -

    Definition at line 59 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chQSize( q )    ((q)->q_top - (q)->q_buffer)
    -
    -
    - -

    Returns the queue's buffer size.

    - -

    Definition at line 83 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chQSpace( q )    chSemGetCounterI(&(q)->q_sem)
    -
    -
    - -

    Queue space.

    -

    Returns the used space if used on an Input Queue and the empty space if used on an Output Queue.

    -
    Note:
    The returned value can be less than zero when there are waiting threads on the internal semaphore.
    - -

    Definition at line 92 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chIQIsEmpty( q )    ((bool_t)(chQSpace(q) <= 0))
    -
    -
    - -

    Evaluates to TRUE if the specified Input Queue is empty.

    - -

    Definition at line 108 of file chqueues.h.

    - -

    Referenced by chIQReadTimeout(), and sdIncomingDataI().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chIQIsFull( q )    ((bool_t)(chQSpace(q) >= chQSize(q)))
    -
    -
    - -

    Evaluates to TRUE if the specified Input Queue is full.

    - -

    Definition at line 111 of file chqueues.h.

    - -

    Referenced by chIQPutI().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chIQGet( iqp )    chIQGetTimeout(iqp, TIME_INFINITE)
    -
    -
    - -

    Input queue read.

    -

    This function reads a byte value from an input queue. If the queue is empty then the calling thread is suspended until a byte arrives in the queue.

    -
    Parameters:
    - - -
    [in] iqp pointer to an InputQueue structure
    -
    -
    -
    Returns:
    A byte value from the queue or:
    -
    Return values:
    - - -
    Q_RESET if the queue was reset.
    -
    -
    - -

    Definition at line 123 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define _INPUTQUEUE_DATA( name,
     buffer,
     size,
     inotify 
    )
    -
    -
    -Value:
    {                 \
    -  (uint8_t *)(buffer),                                                  \
    -  (uint8_t *)(buffer) + size,                                           \
    -  (uint8_t *)(buffer),                                                  \
    -  (uint8_t *)(buffer),                                                  \
    -  _SEMAPHORE_DATA(name.q_sem, 0),                                       \
    -  inotify                                                               \
    -}
    -
    -

    Data part of a static input queue initializer.

    -

    This macro should be used when statically initializing an input queue that is part of a bigger structure.

    -
    Parameters:
    - - - - - -
    [in] name the name of the input queue variable
    [in] buffer pointer to the queue buffer area
    [in] size size of the queue buffer area
    [in] inotify input notification callback pointer
    -
    -
    - -

    Definition at line 135 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define INPUTQUEUE_DECL( name,
     buffer,
     size,
     inotify 
    )   InputQueue name = _INPUTQUEUE_DATA(name, buffer, size, inotify)
    -
    -
    - -

    Static input queue initializer.

    -

    Statically initialized input queues require no explicit initialization using chIQInit().

    -
    Parameters:
    - - - - - -
    [in] name the name of the input queue variable
    [in] buffer pointer to the queue buffer area
    [in] size size of the queue buffer area
    [in] inotify input notification callback pointer
    -
    -
    - -

    Definition at line 154 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chOQIsEmpty( q )    ((bool_t)(chQSpace(q) >= chQSize(q)))
    -
    -
    - -

    Evaluates to TRUE if the specified Output Queue is empty.

    - -

    Definition at line 173 of file chqueues.h.

    - -

    Referenced by chOQGetI().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chOQIsFull( q )    ((bool_t)(chQSpace(q) <= 0))
    -
    -
    - -

    Evaluates to TRUE if the specified Output Queue is full.

    - -

    Definition at line 178 of file chqueues.h.

    - -

    Referenced by chOQWriteTimeout().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define chOQPut( oqp,
     b 
    )   chOQPutTimeout(oqp, b, TIME_INFINITE)
    -
    -
    - -

    Output queue write.

    -

    This function writes a byte value to an output queue. If the queue is full then the calling thread is suspended until there is space in the queue.

    -
    Parameters:
    - - - -
    [in] oqp pointer to an OutputQueue structure
    [in] b the byte value to be written in the queue
    -
    -
    -
    Returns:
    The operation status:
    -
    Return values:
    - - - -
    Q_OK if the operation succeeded.
    Q_RESET if the queue was reset.
    -
    -
    - -

    Definition at line 192 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define _OUTPUTQUEUE_DATA( name,
     buffer,
     size,
     onotify 
    )
    -
    -
    -Value:
    {                \
    -  (uint8_t *)(buffer),                                                  \
    -  (uint8_t *)(buffer) + size,                                           \
    -  (uint8_t *)(buffer),                                                  \
    -  (uint8_t *)(buffer),                                                  \
    -  _SEMAPHORE_DATA(name.q_sem, size),                                    \
    -  onotify                                                               \
    -}
    -
    -

    Data part of a static output queue initializer.

    -

    This macro should be used when statically initializing an output queue that is part of a bigger structure.

    -
    Parameters:
    - - - - - -
    [in] name the name of the output queue variable.
    [in] buffer pointer to the queue buffer area
    [in] size size of the queue buffer area
    [in] onotify output notification callback pointer
    -
    -
    - -

    Definition at line 204 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #define OUTPUTQUEUE_DECL( name,
     buffer,
     size,
     onotify 
    )   InputQueue name = _OUTPUTQUEUE_DATA(name, buffer, size, onotify)
    -
    -
    - -

    Static output queue initializer.

    -

    Statically initialized output queues require no explicit initialization using chOQInit().

    -
    Parameters:
    - - - - - -
    [in] name the name of the output queue variable
    [in] buffer pointer to the queue buffer area
    [in] size size of the queue buffer area
    [in] onotify output notification callback pointer
    -
    -
    - -

    Definition at line 223 of file chqueues.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef void(* qnotify_t)(void)
    -
    -
    - -

    Queue notification callback type.

    - -

    Definition at line 48 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - -
    typedef GenericQueue InputQueue
    -
    -
    - -

    Input queue structure.

    -

    This structure represents a generic asymmetrical input queue. Writing in the queue is non-blocking and can be performed from interrupt handlers or from within a kernel lock zone (see I-Locked and S-Locked states in System States). Reading the queue can be a blocking operation and is supposed to be performed by a system thread.

    - -

    Definition at line 105 of file chqueues.h.

    - -
    -
    - -
    -
    - - - - -
    typedef GenericQueue OutputQueue
    -
    -
    - -

    Output queue structure.

    -

    This structure represents a generic asymmetrical output queue. Reading from the queue is non-blocking and can be performed from interrupt handlers or from within a kernel lock zone (see I-Locked and S-Locked states in System States). Writing the queue can be a blocking operation and is supposed to be performed by a system thread.

    - -

    Definition at line 168 of file chqueues.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void chIQInit (InputQueue iqp,
    uint8_t bp,
    size_t  size,
    qnotify_t  infy 
    )
    -
    -
    - -

    Initializes an input queue.

    -

    A Semaphore is internally initialized and works as a counter of the bytes contained in the queue.

    -
    Note:
    The callback is invoked from within the S-Locked system state, see System States.
    -
    Parameters:
    - - - - - -
    [out] iqp pointer to an InputQueue structure
    [in] bp pointer to a memory area allocated as queue buffer
    [in] size size of the queue buffer
    [in] infy pointer to a callback function that is invoked when data is read from the queue. The value can be NULL.
    -
    -
    - -

    Definition at line 69 of file chqueues.c.

    - -

    References chSemInit(), GenericQueue::q_buffer, GenericQueue::q_notify, GenericQueue::q_rdptr, GenericQueue::q_sem, GenericQueue::q_top, and GenericQueue::q_wrptr.

    - -

    Referenced by sdObjectInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chIQResetI (InputQueue iqp ) 
    -
    -
    - -

    Resets an input queue.

    -

    All the data in the input queue is erased and lost, any waiting thread is resumed with status Q_RESET.

    -
    Note:
    A reset operation can be used by a low level driver in order to obtain immediate attention from the high level layers.
    -
    Parameters:
    - - -
    [in] iqp pointer to an InputQueue structure
    -
    -
    - -

    Definition at line 86 of file chqueues.c.

    - -

    References chSemResetI(), GenericQueue::q_buffer, GenericQueue::q_rdptr, GenericQueue::q_sem, and GenericQueue::q_wrptr.

    - -

    Referenced by sdStop().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t chIQPutI (InputQueue iqp,
    uint8_t  b 
    )
    -
    -
    - -

    Input queue write.

    -

    A byte value is written into the low end of an input queue.

    -
    Parameters:
    - - - -
    [in] iqp pointer to an InputQueue structure
    [in] b the byte value to be written in the queue
    -
    -
    -
    Returns:
    The operation status, it can be one of:
    -
    Return values:
    - - - -
    Q_OK if the operation has been completed with success.
    Q_FULL if the queue is full and the operation cannot be completed.
    -
    -
    - -

    Definition at line 103 of file chqueues.c.

    - -

    References chIQIsFull, chSemSignalI(), GenericQueue::q_buffer, GenericQueue::q_sem, GenericQueue::q_top, and GenericQueue::q_wrptr.

    - -

    Referenced by sdIncomingDataI().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t chIQGetTimeout (InputQueue iqp,
    systime_t  time 
    )
    -
    -
    - -

    Input queue read with timeout.

    -

    This function reads a byte value from an input queue. If the queue is empty then the calling thread is suspended until a byte arrives in the queue or a timeout occurs.

    -
    Parameters:
    - - - -
    [in] iqp pointer to an InputQueue structure
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    A byte value from the queue or:
    -
    Return values:
    - - - -
    Q_TIMEOUT if the specified time expired.
    Q_RESET if the queue was reset.
    -
    -
    - -

    Definition at line 131 of file chqueues.c.

    - -

    References chSemWaitTimeoutS(), chSysLock, chSysUnlock, GenericQueue::q_buffer, GenericQueue::q_notify, GenericQueue::q_rdptr, GenericQueue::q_sem, GenericQueue::q_top, and RDY_OK.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    size_t chIQReadTimeout (InputQueue iqp,
    uint8_t bp,
    size_t  n,
    systime_t  time 
    )
    -
    -
    - -

    Input queue read with timeout.

    -

    The function reads data from an input queue into a buffer. The operation completes when the specified amount of data has been transferred or after the specified timeout or if the queue has been reset.

    -
    Note:
    The function is not atomic, if you need atomicity it is suggested to use a semaphore or a mutex for mutual exclusion.
    -
    -The queue callback is invoked before entering a sleep state and at the end of the transfer.
    -
    Parameters:
    - - - - - -
    [in] iqp pointer to an InputQueue structure
    [out] bp pointer to the data buffer
    [in] n the maximum amount of data to be transferred, the value 0 is reserved
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The number of bytes effectively transferred.
    - -

    Definition at line 174 of file chqueues.c.

    - -

    References chDbgCheck, chIQIsEmpty, chSemFastWaitI, chSemWaitTimeoutS(), chSysLock, chSysUnlock, GenericQueue::q_buffer, GenericQueue::q_notify, GenericQueue::q_rdptr, GenericQueue::q_sem, GenericQueue::q_top, and RDY_OK.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void chOQInit (OutputQueue oqp,
    uint8_t bp,
    size_t  size,
    qnotify_t  onfy 
    )
    -
    -
    - -

    Initializes an output queue.

    -

    A Semaphore is internally initialized and works as a counter of the free bytes in the queue.

    -
    Note:
    The callback is invoked from within the S-Locked system state, see System States.
    -
    Parameters:
    - - - - - -
    [out] oqp pointer to an OutputQueue structure
    [in] bp pointer to a memory area allocated as queue buffer
    [in] size size of the queue buffer
    [in] onfy pointer to a callback function that is invoked when data is written to the queue. The value can be NULL.
    -
    -
    - -

    Definition at line 224 of file chqueues.c.

    - -

    References chSemInit(), GenericQueue::q_buffer, GenericQueue::q_notify, GenericQueue::q_rdptr, GenericQueue::q_sem, GenericQueue::q_top, and GenericQueue::q_wrptr.

    - -

    Referenced by sdObjectInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chOQResetI (OutputQueue oqp ) 
    -
    -
    - -

    Resets an output queue.

    -

    All the data in the output queue is erased and lost, any waiting thread is resumed with status Q_RESET.

    -
    Note:
    A reset operation can be used by a low level driver in order to obtain immediate attention from the high level layers.
    -
    Parameters:
    - - -
    [in] oqp pointer to an OutputQueue structure
    -
    -
    - -

    Definition at line 241 of file chqueues.c.

    - -

    References chSemResetI(), GenericQueue::q_buffer, GenericQueue::q_rdptr, GenericQueue::q_sem, GenericQueue::q_top, and GenericQueue::q_wrptr.

    - -

    Referenced by sdStop().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t chOQPutTimeout (OutputQueue oqp,
    uint8_t  b,
    systime_t  time 
    )
    -
    -
    - -

    Output queue write with timeout.

    -

    This function writes a byte value to an output queue. If the queue is full then the calling thread is suspended until there is space in the queue or a timeout occurs.

    -
    Parameters:
    - - - - -
    [in] oqp pointer to an OutputQueue structure
    [in] b the byte value to be written in the queue
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation status:
    -
    Return values:
    - - - - -
    Q_OK if the operation succeeded.
    Q_TIMEOUT if the specified time expired.
    Q_RESET if the queue was reset.
    -
    -
    - -

    Definition at line 265 of file chqueues.c.

    - -

    References chSemWaitTimeoutS(), chSysLock, chSysUnlock, GenericQueue::q_buffer, GenericQueue::q_notify, GenericQueue::q_sem, GenericQueue::q_top, GenericQueue::q_wrptr, and RDY_OK.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    msg_t chOQGetI (OutputQueue oqp ) 
    -
    -
    - -

    Output queue read.

    -

    A byte value is read from the low end of an output queue.

    -
    Parameters:
    - - -
    [in] oqp pointer to an OutputQueue structure
    -
    -
    -
    Returns:
    The byte value from the queue or:
    -
    Return values:
    - - -
    Q_EMPTY if the queue is empty.
    -
    -
    - -

    Definition at line 292 of file chqueues.c.

    - -

    References chOQIsEmpty, chSemSignalI(), GenericQueue::q_buffer, GenericQueue::q_rdptr, GenericQueue::q_sem, and GenericQueue::q_top.

    - -

    Referenced by sdRequestDataI().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    size_t chOQWriteTimeout (OutputQueue oqp,
    const uint8_t bp,
    size_t  n,
    systime_t  time 
    )
    -
    -
    - -

    Output queue write with timeout.

    -

    The function writes data from a buffer to an output queue. The operation completes when the specified amount of data has been transferred or after the specified timeout or if the queue has been reset.

    -
    Note:
    The function is not atomic, if you need atomicity it is suggested to use a semaphore or a mutex for mutual exclusion.
    -
    -The queue callback is invoked before entering a sleep state and at the end of the transfer.
    -
    Parameters:
    - - - - - -
    [in] oqp pointer to an OutputQueue structure
    [out] bp pointer to the data buffer
    [in] n the maximum amount of data to be transferred, the value 0 is reserved
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The number of bytes effectively transferred.
    - -

    Definition at line 327 of file chqueues.c.

    - -

    References chDbgCheck, chOQIsFull, chSemFastWaitI, chSemWaitTimeoutS(), chSysLock, chSysUnlock, GenericQueue::q_buffer, GenericQueue::q_notify, GenericQueue::q_sem, GenericQueue::q_top, GenericQueue::q_wrptr, and RDY_OK.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__io__queues.png b/ChibiOS_2.0.8/docs/html/group__io__queues.png deleted file mode 100644 index cac40691925836595629d42445dc50388e3c13fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1079 zcmeAS@N?(olHy`uVBq!ia0y~yV7SV_z@W;(24Y=WGmC+Nfi20~-G$*l2rk&Wd@=(A z1AB?5uPgg4ZW&%K)(OUkI~f?5Z+f~ohE&XXduM;Pbh-rlhxdzDlzIte7)DH-%Eq-U z!M~ADZq-5dRsoI@4Xqo7p3C)AJ2l(-&OKP@%zi!ETD5s|O6GyNT@#rXMmxRu{~&_T zq)i}uLz1oR8O!zOzu)73Z9CWRZ{33p@Af|T>wo(FVeQvfIt?8Vkm1m=^ey1UN?eJC%?OM3LpV|VQ{DTQJs_WilJYx7cm z)Op2cOx$I9j|+35Ok)ry=&UAkI&TH6*#r5`)4UwJpL{N3B=%#H^( z3tp6Y^M5*bX6cHg*Q(n*HqH3=^Qb_WNL{s1qVn9G`Ts&rf80i!?2}A<-4L{ zBUXlG>xTa2p78T{!(IMbQz-e z?A%~CTkXWpQ`DPM&jpd()j;QI&yu^`E}Ca>x74v$ej+YM|NFmvt#~-oG_n z&u6O5blCmZfA8hWslW6}H#;wz88&lc;auyi6fSFZ&zhKfdrwp?;nMSQ@x7ko{p#TN z=!36YeZ>#on*5AuiO#9=_hq+t?|yxr;m(Syb$|XmSYWNaXgkACAD3^TZ!g=2R^G~5 z`)B5tokmZd?2Ri(R9dyT?dYu5w7!JI{u4z*UnHg_#qjS%xDuEbN~PV diff --git a/ChibiOS_2.0.8/docs/html/group__io__queues_ga0a35a7de945e4b56b5fb5f5c8567e296_cgraph.png b/ChibiOS_2.0.8/docs/html/group__io__queues_ga0a35a7de945e4b56b5fb5f5c8567e296_cgraph.png deleted file mode 100644 index 3d417a74f05f45066a5934a1e604f34f57d46b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3043 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 II;Vst09>-xVE_OC diff --git a/ChibiOS_2.0.8/docs/html/group__io__queues_ga142d0e885ac3a695f5f033a65f49abd0_cgraph.png b/ChibiOS_2.0.8/docs/html/group__io__queues_ga142d0e885ac3a695f5f033a65f49abd0_cgraph.png deleted file mode 100644 index d9b6b11ac3aa902439db47dc4dfe464e2acdd8f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1833 zcmeAS@N?(olHy`uVBq!ia0y~yV7$PH=O_FLRCyj-jkj1PA*FtDBWba4!+nDh3oZ-z*^1p9~o#z@n^(`Tw`jz;Kl;Ewb{7VBe3>F=Ib+mucg)Ge* zDU+{+{OP%v^896@@Jzq^<@?grZ~m#Do^x+z<@1|2)4$LBKG#!BK?w~ka`olOm1caC zQ>u_sDtF-Fre=>!^;th%-ew@cT*{oCof!;b zizFiVa4wKOuyPagLZ_1EpPt>$<_(t*x&G;o;)v=2!~fym$5L*FPI`|897i`1kkruiq29*J`Z27k_Wn)!6)w3i(w@3l<;# zSy!>+y=S*`z>NQCm3cGg=kDF|yYseK%(M98CG7D9bHg~^>7P#ym%9G;E|~m(7ytfs)6og#|8#fR=&xxwmZ-JNv#$S<{*r%h#fl8In;%zr zhoo-iFf*6>b)>X1l7cYj|Ggha2@#tn2df%>}Was<(rrm~9IuWk&yQc*n^%A`M z&f>C?@e0asv zWq;58l?%;i{>{-B^0;S$@7u)1uUqZ7zDBAwm4|$dy}q~Hf5~#TgavW-UyOC?wWkK$ zklYq^>u*l_yo2W3U#>Cn+qk7y$2Yg|H&^$`{dsr3Z7}|@VTM@D$1jy!37QR88Ok~` z`d@#$$M$5#t1|~~+?XhB`F8n>KU==0R^2_6X7%WpfT;JJ?*Vs|?v+)}+u6|8E0o*6 znL|4)b6L9Y?VG>4vbG<+?RHd{VS(1%&HV8!Pi#Z?#IOB!h4FdCQYB_(W%l*U-b#Hl z&bj<}gL&bceK~*Adri-7361dCR;wyGk>$GoC&nEYbY}kD85dgK9b#8>_ulJORaXiN z7RA|@Sf}n^d(QuIm1E*j6|J@v5uds)Zdt$W#OFK93%X}%ZSDQBsjJJdzjljpXbDq8 z#~RUtdgniv?aq7e%i#Y0&dR+8#-G10=DB-(CL7nh+S}(ma{u0P5p}sdvqY@$+@sH8 zWp8dZaisZw`x5G47kIQWtMt07Lx1m`pII+=9Xq@{a@Tenv$evdJ&(UU6))c+Y0eg1 zms-ic^k$yp)5?|C9iHDL)LD?Tu#0(KKf3oq1`MRr$03Mh$5tOn2w`oElXh_iU%{J64l-B}?nG zE}Q7iE?Koj^zstVZxgSd`1@ewRv;t3A8XcYmAjX|Y%v-{0P!_H6!^`1QlXo!r`CCAHJG&ew5ylIyVj zXhbNZ2}20O-aWaWuJ^_E>-~LaCim2I>FkoqNu`thQkQiqX3f@_ZgXjdd1c<@oegaH zhdisMuX*XVAVJXdtL!$N^RL$~t38s*zizVGvXdvZx2vnKpYkhLF#Gzq93J`BQ^pR{ zJ09pW91lrNDB1GfYSRDBA0KSVn6q+aLdvpi`NCgbS{1oROIkk39b zt#)P|>-48z@6Fm?nV0-3gS+A1rsaB^H}==tv$3;#|2LbQ#yGY3pP8VK`TF`-_6?Wc zSH|Vm{JC)Sz_McbfIr*1znSRA-Ot)u-p=vs!X9q%1NEOi`-fWIy7=&FTRZ>#FZs(i zf8_pbyfUoE?zw2L-Sf4V{*y+(9SfVw z{H-e0{qixft1pasxHVj7&HA*?^4zAW!ou_Ibgab|{m-tkw)*wO`@!dzo0JzGZDpOJ zba!v{6UUo|0ylelWp@Ub@ocg9csrt_qaz4Q3A@Hzke8Qts{xOZW%ak5n~F~sN*{Q+ zsd<4@3A4u6{Q^%HM9-W*WzyD$cel5%pIR93`xQ&UrZ);5Iy2_GV1Oy-_CG%(`Bvjq S2O|Rm1B0ilpUXO@geCy5YK{*8 diff --git a/ChibiOS_2.0.8/docs/html/group__io__queues_ga1e90d41fa021107d72b1bed81186aae8_cgraph.png b/ChibiOS_2.0.8/docs/html/group__io__queues_ga1e90d41fa021107d72b1bed81186aae8_cgraph.png deleted file mode 100644 index eb793c77240a011a481be539c3ff6423dd9ca675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1777 zcmeAS@N?(olHy`uVBq!ia0y~yV7$w~z@W;(#=yY9-fg^&fq{W7$=lt9;Xep2*t>i( zNTS5k*OmPiw+t^A>jdM&oeT_YlRaG=Ln`LHz3ZPL5-!93;r;CwZm}2stehZw)SLg? zoqH-xmJ&-_?_CpHx^(Xpr;EMIgQ^UguFtyFbR~GBsn^t?sH`JmhPtj9noGrB9&Prz zlk;bKi1eb}lWT2r!rGqCo@xGn^X~in93RilHs62u@7aIP_Ij2vDxrf#dg>;*hZ*>m z%5ogdi@(O$a^%lzzTBDfC;jw1_(!eb{2bnFleya%HQwIZsy($sBkuC$%aQE@SIrny z8N@g7wFm{CvTEpnaq2L(|NE<@a_^m_j^C#5 zciEKxoxD(`x2Na9tE;OQ{$IascW(Ko+v{Gh?vqaG$x~0&WAE7Ol#rjF@4q%e=C`0g zIu~p8t7EhGVIm6n#IdHRCD`{Fh4vW>!KtuMa*v{J`7c75dPyltz*)`va(a{Jwz=c3(K z^Q79P`mgsy%SM|o%lohJHm|ni_N@@P1FswYlof7#e(*xTPw&%O@7cU;4SV00x@HwE zUA0ehXYAeA>*`ql950`@A@A|*xQDC%?pb%DdCTsvAG=q+sx$5TmcY7Qy-T%4vi8k7_pD@n@r*xQR@Lu!*!0_6{yJ;wuD^4{?)qHSUZ!C9 zD(z;TasK`?*~^kO(wR@A6sHTbFF9g;bkSD^3!9r69mU1P$Lrm9q{^(OZ}&E}Bb)!+QDC_@C1_7-ZROH?P8~#D||2FI`%{h$nxO%Tt@et95z#Yt+=|#|xUy6lG7`OtlKqNM`_pU_bRGCBMzPWcJcal@z>Y)UlIHHQsaPFLqA{sonC#j zJv|HOon0Tc`uK7o9>I7n@2$w%PJ)rXHKms~so6q|R%7{esTE?K!^>zHM#ow$81#%Q^Vf+VYT2_Rqp- zsc%t6e!E|=)ZPg^Ua)n?5A$nlZ{I8XsmYSJKce2EIP2e|zPH~FZ(ub)`-f-O87Vck z{k4nk^l>I%eX?`*3D@wyPt_(rdbGViuX+ya#mFno$MO#4#!N2T>ObT7-3*Q=sYrTyy86Ezm(QG+W#pS$T37Wp zd6x37WY)9#rO`3ZudO;;Y`&}U8}p1e3*sNV)Cyl0lUaK@VA=OuVfU`&S>A4Oi1k`C zQK-N5K&7T(=?@RSyV4w4L^{;t)rA(TPij0xjCP%*SoHIj4;zr5OUtd2)U7IM#c>Z6? zk-TTiZK5@F;!pj^Ke@7bgn@y9!PC{xWt~$(698!|ZMOgb diff --git a/ChibiOS_2.0.8/docs/html/group__io__queues_ga2252ca3e5d6ee6d8d323d025365aee59_cgraph.png b/ChibiOS_2.0.8/docs/html/group__io__queues_ga2252ca3e5d6ee6d8d323d025365aee59_cgraph.png deleted file mode 100644 index cfb8bb60811312fec6d4186cf186ce26af62f395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2984 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 GLK6U$3Y=B| diff --git a/ChibiOS_2.0.8/docs/html/group__io__queues_ga23b72ba9803de5a20caa84ffd0c193fc_cgraph.png b/ChibiOS_2.0.8/docs/html/group__io__queues_ga23b72ba9803de5a20caa84ffd0c193fc_cgraph.png deleted file mode 100644 index 8f6609b6d4efea08add7995c9d72a75f20543f18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2963 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 diff --git a/ChibiOS_2.0.8/docs/html/group__io__queues_ga34a5a71f39e94fcfdd88935da92a8ce9_cgraph.png b/ChibiOS_2.0.8/docs/html/group__io__queues_ga34a5a71f39e94fcfdd88935da92a8ce9_cgraph.png deleted file mode 100644 index f4e383a1d56fe43de619c7a5590806bf455c66ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2993 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 diff --git a/ChibiOS_2.0.8/docs/html/group__io__queues_ga3df1926602eb698119990b311b097ad9_cgraph.png b/ChibiOS_2.0.8/docs/html/group__io__queues_ga3df1926602eb698119990b311b097ad9_cgraph.png deleted file mode 100644 index ba0abde008e4d24225168de25b3771ef4e0ca964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1831 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 G&;$SgRh*Ro diff --git a/ChibiOS_2.0.8/docs/html/group__io__queues_gae2a5a0ef7c488ac02762e76933baa7b1_cgraph.png b/ChibiOS_2.0.8/docs/html/group__io__queues_gae2a5a0ef7c488ac02762e76933baa7b1_cgraph.png deleted file mode 100644 index a94955095c5e02b6cba11cc3074d668002e316df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmeAS@N?(olHy`uVBq!ia0y~yU^u|Qz@W;(#=yWJ68g-Hfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM|)N#)mr@7?@{xx;TbZ%z1mq-a|T2hW*3)_dbu5q6B+S2J9*; zDC0aj;p*BYBCULH!@OoYxG%ISowz8LYi_UZ)TS#d13J2vUU-yn(5Zc!*dJl;OH)>@ zmHJa^p#J=8oY3UmcT~UscKA^A{`_Bq_uoIo6|o37aVWNch?*vm=kJ+1t{MyUSMnsB ze5;W4;QRISr-c0Ct{XFTo%+i#iJ6(%kL`))=g*%R3|<#WY<Vu8QbS}x%gs6)r#G}%Vu*c7R)qyeE4Lxjx1?X+m?W@G#bM>msL~wq ztEHixR~|4iIJA_d?Q(31p6Kz9eZs7yXU})udD5=++mv79aq;Tp#}0bm{SvOmUES|@ z_1>LrX?<@Pdz#msWLuCfpcrBEhOwZ%b^a-{`~9ZkN(E3`0-uHSgxcr)_viG|B@UfF*k3` ziYd{sn0wXd-Ok2!k35*BL|3i2_BrgdxcYQ|t>3@3i*s`~wwLaV$Q19)*fXii#UjaV z!p!|LGBwBV-P`To-hTTk-@l^MJ)d=)=iHOIeq#b`R$7{ z)h02_yY^}8)~y$IZZn%$ZapbYmGeR3?c0y5^NwG5^CU0eVfG}3L)TRpTh@Cral{Ab zHHnLf33Q*#*EZdtBK7}!@0&$`dR0=HM7UUcdV4L!CKkj99N^yG49Xnf9Ma - -ChibiOS/RT: I/O Support - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    I/O Support
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for I/O Support:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    I/O related services.

    - - - - - -

    -Modules

     Data Streams
     I/O Channels
     I/O Queues
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__io__support.png b/ChibiOS_2.0.8/docs/html/group__io__support.png deleted file mode 100644 index b680a02a5f5459ebb8c798fecce41d2c38c70e6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4276 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 diff --git a/ChibiOS_2.0.8/docs/html/group__kernel.html b/ChibiOS_2.0.8/docs/html/group__kernel.html deleted file mode 100644 index f60793e..0000000 --- a/ChibiOS_2.0.8/docs/html/group__kernel.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: Kernel - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Kernel

    -
    -
    - -

    -Collaboration diagram for Kernel:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    The kernel is the portable part of ChibiOS/RT, this section documents the various kernel subsystems.

    - - - - - - - - - - - - - -

    -Modules

     Version Numbers and Identification
     Configuration
     Types
     Base Kernel Services
     Synchronization
     Memory Management
     I/O Support
     Registry
     Debug
     Port Templates
     Internals
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__kernel.png b/ChibiOS_2.0.8/docs/html/group__kernel.png deleted file mode 100644 index bf32aa1616aa814b1e6f5f2c46eca2d02a1e8832..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26884 zcmeAS@N?(olHy`uVBq!ia0y~yU^HN0U{c^i( z0|NtliKnkC`z>x6UM_|Qk>+d+3#S3iu#4#Wiq;=myo9Vl3Y)^gB3mg}PSkh>HwarK6S2of^*)7&g5- zLSg323zwESO!s`YXa8^aAdmK$DU;5enfdf*o!w6r%i?p@^E@ZV-~T@6`y6JCrBi~u zG-1Rljn3<=8dH}ZW{i1IDkxXQa^Py5cwkNsSnw``&bM70{W@#~9oJn&l=oj})iCu~ zUJ={Cp7&)}L()=PgQX!SFEIprP1WH=XKtRbD#q~ariJIKpD^6!`?BklFt0)Axgh7% z6^@G^hAb)JSg9rYyJksrpUM2oxzpdKr~HWHZT@y3#L}CW`{m}Cplg$-Jbl@uHv8?R zwaY)bR41&O!+DQ;Qpw?yCAJ&(-Ch=bt$enRqN-;6_qV;78=g*Jo1w+n`)}5)yK0>w zyjvUhDPAg%yx)It%hYwYPZ?#MRxL6p&8j^haZ}nsw&8BCqipA{dGDckLAN*hB)DebCsTTy?b}0R@yx7ci(l_Ri~CPF1u7T=T|>NkyXQGk2jnT zR2i}vssRtML;F`X5#;<1Ut zKF)-4!9Q1?d&m9y_4>NY-gQ1JA6}A+kSw0Voi<7KI>V;@9C-zIpZxjuE&Jcw(payj zU2GAOvut)MhJ>o#SFW^b`0Y{tKO*O=cii=*A?q?5rivHN`K3Q`hs=Z74K-R~*}Ja3 zUNq&DxGh_l8dKxaYKh1HB^wUA7VI=Es?5&5T(|wuDByudmS?&uT+|O8C zV6y9#ew_Hy5XFp!sT(?lr`Il6cI>}#gF4fWq(dzq|Nni|-5U$CZ{Z7pO)gijnblm0 zx}(!%xMYr0x2f%$QeQ98S$0!bu(Ueyrbl%jce!!vZfxm-w&_8uR9KpM?{l?E=GNk6GkbS0lr#&MSL zx-j6mKEq7@2Qw=6Jk?y!9kl93MuVv4@ys0^M^;`-s;jR4 zyg2Uq;weFqoNUwO#kovXWS1w-yuMW<^h}9b-Ncu*b8b#v^2bap+v@o1swrA&R>J!` zeCF?4(>5i3@~1~fIv=0=zDsUt*IYSfZKde#zxFYoc-QcAM%TRQ$KHq1`iIIVimy5%S4vNeeQDSZ5) zzU8TVb%LCiiq(F;1fiF1d)6&&ne(WWQSQQrQx42$lplUzmER;5zfH{h(Z{ROd)F;* zS@Urh1HaBEQ1R>R(XTT3nU+v}*YVl^ufL9(q7{0J`E$eLE9aFzdOGmAo&U(Y^ol?R z|C$FDmNui{zbFv&Acr)j%ezu&(LucNelvh+QE=_udZy^t~Z+RNWo!P~rJ^)G*$`Rc-K zjVB#!5sW_b?g$7S3=)j{@agnw;kfI;jX}-J@--BnzP|E4I9__i+QwVn-}g!>@or%H z@cZd%hTDrSa$03>tw^Rxtb(zMu4gzc+`fF`p9O|x{*$V^X4rbZ^W0Tk zT5_k&<aX}P|!bd)Z|4Kjg1@G*y{jFW^t7g4_!egT{HqTcA1sfhtvT}Lz{>Z_A zTj7!!4NnC#UwiH`P4oHmJns6Vr3Ds2*}DBKKMI4sv2U<%VBnN!mgs!$aYwr;ROws% zy6C?})xSgYmzWewH5_D_v83i)S!Mm{U%&0{UY{8kZn=nYntEv|?_*(3J<)^PwO^k} zUd+j2_P@R3y@#L-*9VX5PxF*ss6DL|v~fQbdu+$~iJ|A+7HgYV#%|P#l}f1Gl+1ok z&@m|Gc4^%8N%>p1^2)0|jc90Rp4&b-Z4Srw2{kekUVGTQ`h0To+O@v7_pS?_D$cvX z=0^JbW3SBbzv*H4bU5S7uH3lmle7Car%c(pIIa6bg+t$VvBZX4205jttL^67+`9Iy z@p+@$>(aHW_GC6ZJvckRtR{*@c=ztYwb!>k@ydO>X~Wikk6kNlI&UgTIG&oU^ocpS zB0W0#bNt?QfuVA|8*Bs|nG@FC-?CEkS*h+}!`xdz>NCI8OC4Cg_9%~F9^;dH^DJ{u zT7M0@aVlFX!BULt>Us7ji&H-Ftk0J0(hNQ)9~>H5%XPqblBXq?Lpw)aS!~Rud;8ud zKG>DFK072!op-~W$s7&4AAh{6Um1Hcfu;GYvC9(~hUF7KFz&b-HSfl~eShV6bwk&f z94K0`t?Xy}+O5YsrX0H)w%k8HY;*4H_a#E78EQlhY*zYn>f2l8b?;y7Nb0`+Rnt^} zcZ1BPYqry;)E`aq&EC6iseR*t)?n9N=kM+cJ;!bk$FhG@*glDV^S>uw-`Z5L`8sPw zf?>mKNDcMW!$L;#eddPV)P%Z903} zPSvQXT==|i{+C@HNlO@~DPMbZnZf->&E5SUc1;V}y7ly-CGUlpkmo1>|1-4R{qRm0;=g$wu(boonCzn(tkgx_sBJwvVx~e|Bx%B;sJLz$>iY z_xonIzFApi?ChYO3mB&{FAR91&|n-h{q&x7OWhaSOWfI{GV#H7M#fIj$!fj-KZ4XA z^{Psn6}0;j!|BF*_pTeieXBc9e))>EdlUM$&b`jGLipjUS6Mqt4!1o!SD`8MG$?C= z$$_?&&({h6*uwE@@0!KizIjhxvo- z|Kck{oi(l$?An^abbi%t&pI>d~ifs>yyT~Bj=CB~qtf8O5X6J?9e633EDnff08{%D_9Z&Lo%@x}m z6n9y@n7`T3!oP+8NYdGQ?FV_P5;;HE4t!;pXLzjK!DQ9LrCO7}9casVb>$aBgX^_f zm$|o|2PL`3-^2d~u^f-?{#CK(=kL~A+k=jJFz0miOf+T$XZ&wYZ}bH^Y64oeGjU8Z zQkToG+9B{ebk&TP0!1&*i9B4-{qaDb!-9VT$v>8G#2zRw&{_6ysmKCGGnKy0f0C7M z+%Nrjy5_yML{3CP&mDCo|A^>P7oBaNuGYK{UKzBI(TruuUzr2@pI1Mt)woiy%y366 zOZK9Rh3b`tq0TFlmK{I9mg_0naGv4Pob!8GnkR}ftltv0PrTo}mesYYTW;x|CAJ$J zi{@NB&NL&Zr@HpvH^HCVIM%alu#wB(#Ud5wwREZN21lijmJHvwZ(W;r*8TUwfWN6K z`ho{7FJ^o`|7j!t(o?P94zMZ8^!cz<*c|u|QSr1P#^;o{$(|`vGeD9vk1Th+keVBM zPJde2oHlJw7lwJF{pR;4y#6*-%Uvp=If2KX`$73mJ820n(-Qm&Wg z%f(rHyD{#wpKxPaZS~oc7gyNDgspsdi9wn{b2&rBuDyR})$=cwRCK?~@}Svn{+Tx~ zb|iWCoeEyH=w;-II^C5_1wxwpCH=Jfgfm$z?nl*a+Pd}S(>qs|O}Qi&Vc&Exu$a-u zErLzOpY_9u*X!ejW#4Q&m~fa&P=@RDadMh>7%Y1q3 zd%|E^dX{x;$CAAL#e4V7pP07y;5+-P4sVyNRxX`=<>}8qKd17@IxPzfziz>FfYaIX zcSQ8#eKhAf49#qsjzvX<%X`|fvQeubi{y%rUJ=(qg z)6dV^nzxv}l_%cV#Bf04`q%qLGu|G0c*5oS)Afvh0`)JjP1q?uG|(6y6Snop<% z`>)#nmR(rtrq^55)X#Q7&L+Y6ISX>xe;4a!N+o1Y_$HG4#yclB;N^W%)iaQ>}^ilqMI#e9qgCq)UQ)@ zuTIchbJUQ*ZI@o&>9X0kZatOXc5R)=#C+GqqV;!HulHd;8r*I&vu)bTYwvgOv9D!L z(73%kTYL7~-`0`_cdXb}sZY1xKWPEuH@g^?2OrJvWn`Yu`>Psy?Upoyjd1U_xS8iq zd7VkLv$%aj<3gGZ@@_KYdMG|G|VO2@TU3e$?39+oQPtsOHjp?);Cw zD>k_@#GQE7CwO_e{%XO8=NbOR$)8v_#e56#yYvw2R z%yCLGY{=|9!WOan?(0ocs;09^G&m@Ha%^Cq5OME*)xiX3+0J~XO-fR+ccWJP;?k7J zS;1Ve%_O{%+dfQ0e4?ityMVm@WhFfNz1z)d}iol*f8-)FGGHh+xmaS@3WRyMl1@-%xqwMVf*i^`-5HY ze6m}dc-1G{T$4D%AeGD5eR_7mk0$<|>*hS)W#P@T*yYLhb=m$I`S?rGKEdxOdxS#4!w`i^35ByWugx@i`p1wVieX(|cJ|L~#?z#k&o z6WtgdkzFs={k8h@QFn$pK?|fpKT2LIR{XT~5%Zbn-g5qnPDkC}JM-Gd->dhrF`P{K zZq6MZnfG?HfAZJa`FTHk3}YOV;u*@LPYd6=t$t@_YX2uwk(c@#SH+0RCtORK$nh>W ze}7i?uItt9k%EGj*^iH9-`6auJuJ%S?zT&BTF$*YI}b^)Fy2X7JLlfLdtdfk->PXE zBPyFvTH32D)Ol{F(hh~oR_n6Yv3yvbu_ZHtf4lCMd2->;>v!tyXG&mdkY`$EDHZ#5 z*Y&NMQ?*596Jled`&bMPJ@>vh^IhrjP8sJs%5;d=7K}aJ}ul6AATt?xbf3fkTddi-PQxCyip1pO8Ap&v>E5HJjlCbt1K7) zchdDz&8hjK(g}T=lk_j$y&QFK;;$%$f`=IspO|~ZMBX`Hn)8LdIr^3Bk6ecJjGGk1 zviIG7y=scqlrCO_?6*#WdoJFyd${t-^&U^NFKZs3w=h4GZCif+#;4?l-;@5FTjD9a z?>B7FKru9@K{8pKsVMxF%!&dFql-~-EFWIaTozWb`r>KoqEaazcca6TX1n;~y-Q>q7AeZ* z?-NrkE(=+CXY~n&)hlln@@O7=Z~pyjtQ?c+L9Lr9G=Oreq)#!!#l^S z32`gAcny+M6g!VcN6$9<9{XzCf!ohcmg0uPsWJ=P<8f&sowosMJ|GDZV)_dYbY_Ubh~`vXzm%^VVXEZ3~fy}CK>`jU{1 zD|b{s`dzb0;6Qe*ei~n^68pqI{>eX5`Ms;d4J0g&M*UvF@n84R?1c}PhE$1)C#Z;Z zDWrbV`Y-(;_F~3q<$EDt^*CFV{wp7fpZp`z#OmRUjFP8n{nEUvxYY!NR+Ghm*s)~A_pf$tof;a@7m&!kE>TOyneTCmU@zK z-Ts~b_bx5sJkY-A;%fQNtMraX8gWVdm7e4-nJm6-Yi#ZP1JRmGwX_bnyfJLBxpV8* z7FmX@?CJG4qJC>Sh*gCK$HpH1;lfnUu*3YMWo~Zx{`Z&EK+Z4WS#y!WsQ<|B?R{mj z)rJSslQ%A_-m@a()RgX~P8K5CO6DUf z)X6R{Gws}Y?bC~hH9wy^y$N3F75vP0gK8*48gmi<1AG1h-XAMIGylAoZ6IMe|A>%a z-Lk!VpPsCF@4wP3^ctfWSMNWT2L6cIH6bnOj76pUzQ45is^0M-OX&2Xi;s5f&hAV+ zr5$a=q!*^`2X#9tvi#4+T_kX^G@-zyy91U8m<-YPyp!dWrfq|!fNl0iGGptemsLHVa#Pchh$5-C(onk*BLcD)_t!e!4l@8Yb zS9HeyKTuvbU#ei`>m||mzHhzqZRRGOSlPc!QhHXJ*9ec!1&=j+vfLO!P{&N_V0h~Aymh}&a`LyR@3@)rt&v0c7(Z<86UIV zu=ee)+@H7nTRq<9e)+5He?3?-XZOnZ^r-Y5LD^RhoNV62Yan=z@yUCJXA_H@_I(rP zay`fTBQogOij>QFN+aT*`2Re z>1}iGj>!ixEpBGnDe`{N&XPrZsnyGB?(NLI|LvFcH?ujl;d3_e7$pBG_Sn_H;`*ce z&ih2qsrT>iZ96jiSdP8*_qX9&9?IPI`fC>(J@eZ6w7WUm-mm{xvNd&8xxw#s5vh_1 zd#7`kGJLAPnDN=Z=x&{X#jkpXcdx&n?zt9bn-TBuw8+NisYfK6L_@NRh1`Mj#dkM6 zc6l~w561(|pEjFUUb^%lXt&1h<{zLo)PcL6J7Qz6?mwA(`}8t~KdK7$y+@EM3%Br#&aCY+SFW1&y?Ax2Naf^XhBJ&C{NGDHuxBg^Hrn~~b=>t8r@|vyZ(Lb< z`aAoZ7xNy6?3}4{qc}R_x3*xUG^FFXR8OYQXZtld?<7a1iEpoOE*Hr7~sHTG_co@{XKd@YXdQWK+ z>x5FJHR6Tuubo~oMf{Z30hbK{EOVvJ&7P)IH9x*0@0TRm8La(2)2X-a_)R132TDTS z4A+<{Tv@j7(3`exdw+d~K)8ht+l9INqe7QzEoO)gyKG$RR8%B>#o@uBiz%Pdl|Jo` zSo3oG&Wz1JOlJjToK9@8<$V$3lO)uT?)m4&`{!%duGKxyyYZpxUU{#lAvalOJpOS` zQL*8Vf%sd=$$NMXSR9x$zx!KPWNz+ZcTdaSH-AhTG8=5Po8IqS_h;MQy_q|f3zU9Z zd2041P6MI&s;ZLx{kzL|xwOx94>W9upcmHMB$Mj(OlImca zeZN%KzYf-tPW`z5@fXN!P(JgIXp>t-2MTU+vFOR@PWrRjutH5L*Ur>kRjkwPu|;$r z+mCn^KaqocllE^C+kauX`pTdXG20DmqyHXfT%(kFWBPZA$$LZ&uru7BUK9`&STIL) zGGjI0&7ZD9yO}FyOws>Uvt#Ght(Ch$V}2p2f(Z?=OdLHE?Rl1q9?!IxaKuP(j%4q& ze-{h|I^Lx7Oq=*ll3`o-34g}Vn=?wD-ru{Shr{`~R3#gXw3b-r2p{Rr9gd9}(nGq!R@8#Sri$o5ln8&;o+ImteQ zLws_9>zP{%w?Rf!r=0ev*}iq_)Bi=0@&9yJ7R|YsKH(47Nn3`WrU#B*%=mnN&pMx# zHQFy3X4}<9p1rmhey4>eHZu5|9y?e2^Xb*jIbt)^`z~+j zxKku~;HA-4Dde;9@Dkv`_d-tz>HCJYM zHy-%pFOj@np|FMHx`eX&tK7Ars@hK(gtH45bzEVn$k5=;x&5qv0*}h%f89kf(SDYG zfAbn*JZ~LkklS?aOiq6M*Ou$0noqY*;@yz2;h%z_h3);Dj`#O$_`b6*UU1@Rv%Eb< z^IrcdO7@)kxTkBv54MIG9OABvbuD*B#I7s~*u=>?rie4JwE)M2J#VsnC{5_K zo{{Uk@Ps3SJ$u1N&>-!n(8mEjGYUTL5L6ZlXS9iCDc`lO#)!SVC191#)RYF_xw~@w zg?>-$V3v8arjqf7$|3f}7pFyk3VI;G+RV%CB6OW`#jBa8m-gocud-K_Ot72(pQT~0 z5>J$NKTlfp@y;^TawY=UP z+!nlSj(yvaM5P;i5A@%@4bMGWc3akZTMg#{mFrKpe+p0BHZ7#p>FadHBKwAPmtEhx z-DZP^23sb*Zv0tu)tzz0CNV|9wA#PP;1+39yy(QK`Fk$jnRi@>U4+kl*>1gjmJRv` zJ|}IQCSM)dAGCDUld6OU8SV#_f^T?J>i=j@d~lTEj;!@0?a$%24>&FS<-b$!KTn5$ z3wu_DrfG?)c!JU#|3~i`YOej-%(bDwB8dA0YeNipZ1_`55}Wrbr-i>l8`da3oxa#z zoxj^H`rkueU9YL_lcb#3m?rWw{h7cqkKx1lZ{JqmJCSC6{pfav%=s3DcleVw+KA6= zd#p2`ZHM{fP5dW=AAfvi+PdCp<)`2vMzupf8ScHR{g)iJSO0kAM)8+*at9*y_uaTL z^*-1A_1m^R49I@FwjoF4qpVE#%eQl;o|-yI%Bd^Cu9KZ%W}?rw<++$#SQwy1V))AU09Jt_~Kd4_jfBoySY{Skcfg2+}2e;l>A2fAU zOJ8H*w2n3G1rcVS_pfnPZm@S>>|1}PI+MX^;R(TGKjy1UT(QdQT*vWflRZ;TZJxwo z0P5EqIH>f)o?)`*?feEyzr&3TehL>mn7-_5I(Xta!#d@{{pZ!)_x<~2da>qxux6-{ z^NES=j4Rl57;Z}S`~UE+&yMbP6SM&hIZu3ls_EbfF2Oj>Chz2p&+;AluW5%Gs0t>i zq%rdXLUpclPtYDM6ZEN(UH> zxgRhyJd-^9`gio@sOpUz|E2oZ@6xXSs`HJt`CPx}JiSAglQurP|0F+NtNqf~zNHUB zSIp7;m7LIcpmnjU#bF5>?g!0(We@PT>;IU*AvSr3Or_MRt5;3?IM}lD1t%U=`gAg5 zi|gUlB^>v-*X)a5Efo62)*yKozxvWsrAJNMPQH8Ra_o5L&UNpT8uX7p7XDPE{cK+J zr;>YWO|_mgg}Y7vYRdl(WOaWdm1e#F{cp+4YX=pkt+vtl#lUR9ec-;!4t<65d3P$_ zTE7fiwKi64+qCqq2YYJH?3!=%bWwuR#ai(OPo;f_zs@?=ba;kA_0Lebsfp{4dr1uY$xKI=1etZSf=WLu8qyhL9G1;*d~czx#{5IyA?(?&KH-HIy6!UW zo_FN-F%|xPxA495PJatMIcZA&m8Vv7moao%9oV(Y%ARk*t*A1_4?FWhZ!suOe$Mp5 zPfghV?9+eMhfdcrY?ynj_?5;;nhW7WyQQ^rQXyDuME1v{?YRc z%bCTt=L@H7Ntd^_+BU~0sf#20dDi}e3C?plh+>o&98bD_6aY4DguTv|JS zB`@z;tg(|;{1{UGdsWZm=*>?pzV4p* zi9tbn^{TQnmp^EQb=MwTP^{1psbsW!^XI&r`|CDGX@y>7o58`y`Xp0`o$=YsD=!6Y z8=EJ4&a=H!%i4T;S%mg?#uqY%O~vLpKOCPI+z#1!DI+V}`up~|o_Er9 z8Fmz#=R~Z1_*9pZP5FN!PrsU_^b4CyQ9evRmT|~4eJH)OrvLctIH&W4tAlOVg;%c7 zVAc`XQD8FRPIOB+!=|PqOKao#+m)4Lr>9TOkvw-K^mwGvsar>4Rn#Ps)7%!Hm2QvU zE45~x`~91dN^|ZOzgF>6z36%Bu+okz5}Ws}ean1a{M$jDRU#s(4U&)LI1Z$*-Er)| z^UphX%RDZMt!7hL?E1%E=9S&Io69#=eSUT>+SMSo#r*}(??Wrs#)_52{+AIvr)bz- zBFpf8LQTh!P^Gk5oom0u6M8{&;5$T98yGD(4!9);urJuUHn%i;{&f}uUWU95x9~iv zsL$QCv(3xzX*4-A$jJ6?`;)wbb@iFD+i&-9-o0zOxthuQSwwe##|>Gf3K@g@=54QU z-#TW0^?t9`RIlY8%ss{ocB~0(8(y978DDfJ| zs3g_7-cnTwTehc+v4Q>8ty%xArnEUP{Pmu}X7Z7fA1h8fAJz|L?5=HWD4t-L*4Huj z^{#IL4sIO}O{Cyt~D6}wvSAE>!BSFK5x;TrP~wwL$B``6c>18UD_nem4qqOO*@vZ0^S6ev6 z`=u>6Ws7C@tER4dU1Zfz&TxnQ!)v?wJ9ls0`Z9I>>kzHUi?}x2ll*bnv(mfes@?ob zrWc$_lhh||Qn|eiw7%=WclK{TPouTG* zRGo**J=@Tm0lnMMI*Hv}*zTf$Y_*pU&fzp7m8vdexf>v4n*IOX807 zDGM^yymqlG5Wl%m!ho~EasT|iwg#5$2aGRfeBM3%kI&pF`HIKA)4p9XV{ZKA%NI_m=&!Bw@MB))p(go+a|HscY-_llj23dcq`;h5Nr}YdbL?Q2p4`k;7tf z`1$0SOYQPALF3!y+yA==>M$92vp79+49XKVEI*Q@9shNg+tRMq^y3Hq)O~JxeM#xG zy7F6|_4n47=RIcr5y;?~{WN=HL}pv~`PPdkg&8e1XC67Ibc5}I9z*gQg->!91!qLcVY$mNPp#0v zs9l^vLa=7jvSZ(^8IB)#JTKz>VfQzM41V|a?EGxuaE$p6x59PF4pTaT>4lT5rv*+WyREqALB^B#v|)5S{2Br5)aB zaQT+rN#0`*)?{o+joAENcKJW$lp(t#kJgC&3#a@sl z+`+S8?;e-6P2-=X1V>bWEGaBuJm0d3QJ~|nZ^T(CJ;gQM2a(%;B zYKe?Lqjb#HrS34kco;Nqzjgn+T8q{Dr@ke=Yr&LsXX@<^=4p`#9;EF7}d9A#FD z@w*kBwDHv5(Egyf&o&1Ss-L^=0kD zcgsOzTWg=ndvJEVsZ!hW{mG%oV=DIS3)l`+El}U`sE}88X_w((_>qYIS(fE%0&iYVEGv z+i?fJy?t*xH~Z2O|AWt^+kI!(F=ub*D=%Np?0t=;d2v`5Pfgp#a*4`dlUp^{3d+}P z3VRbCD6;r6?cQ!sN z4VDLI65l3&dvkNes-k25vrJw&3Vt!4|0Z@x$iyF4zPvoW&*F~poU8z?Z~R3ZT2>!y z?b+BEHmASudzaU}YE`WIlko80Rfn^GWM!2dKGLaPU%%mYXTq6nx&M+G@64O*G$qJ# z^3}NtT#BZ9iZb8cs!x7&WODnSy<5Lsw$yRgoT}`4k@>Xxq#2f*#qR%oSNY+mn?7f& z-{0Iz?zF~c0blG;fv@&bG%tK~yO z%GmsOF`U|BGk5Om6t08&=3ibrf0xXSt>sfQ|Cam?VLlPrkSgW1tSvCBlODob&v)YxBOHv)&ZZviM>#JI{W$@S`V0ESO(Pn=sejjn6l@d|k`il5>NP?aI09 zmrl+Vc>1d%Tp^&o!|;=2L;8d{DLo~VZ&Zfg*krH0`rh*VhA)5ZX6J5-wYyOkGOg$n z`)=c&OJ8TT-A+E`+P`}3+uR;mYvJT$GIy$bmzOZEU~8~@IQ3$O;NATNb2`qkYB%`K zu4`VmZiV>nYx4p)wO*KXJ^Z$etMpso)H(YWPOgg4{QC9E)0^AopDn9W+jyYJF6Gs2 zZg1HzzHR2Fcixt-S}P06DLnc6|K51n==)McANY5#>KDJ^z~_P zxUwV_CmX{F+|`xEp_>t8k*#8$s-oAYv7dNlWfz55+cS6I&tn#VQKFJIu>&eI30 z**`Ky>NJ(}KU$u*JK6ng1@DF?#jf9ZBF!@=1#%qy_xaRnu6dpNkM+9EzIODnZoGu? zvAH}amNV>>br9$Dc9J(*9WwFq<~)X~_g_o38=~*qPYhid`{WhRl2eSl8$@QC)xOVV zxX!%8P9nyP^@F~g?XK0Uo%O$mt$LBs@OAO`hqBkJV%vkX_Hx;=Et{fMntGpExik0n zu0$W+ntc}+J1-1YU$V~l126AVYpK|;Rdw2-Uc6y9*=KY-*m(Sw0LL75hU=x}k9U>4 zmYiJqYvR^#*BR_4&*z#Ndaabv>|)sc z|6h3F=d=0`Z>HbBky;r(y?gomzNabjoky~7YD$u#>+OHVZ|l(+gc9m)n&T6=6254J5a`4;IWWP!uZ(&{(jl&A4_Ye@BMo1m-n{3 z+Hax^Gi-j^i-(7{icc;P?yUc}WAWp4UnPF&|J>c5z~B1nJi`-phME`OBNlAwnBl$n z;?&t~JN!*8y5U8c&3s!KF4t)ce**8PsyuGEYcChS*HBay|bX zjAC)Q6nA0o-tzgT4A+?d=w{}>oGZU<%BLC6j~{T^Vc!tj_dr^CvP;c&hTeam#*o6( zgZD~ZSlXoyPj5PSf@?uxM0()uTeJRW^~fk3Vm}d^Es(gKqb_l6y_V*3#uqFpQ#l7#gN5;b5I`+P&W|?pAf+w+WVhhn0lP znIu>h1iO3XSxuJBz5md{+bz<%XkpvTpnD%p4m2HXvl9GM-EdV%X-4MS7}Z0IC)C|| zJ?TyY&$%wQXgNtg-@f4gf%v}mZ6~dL4ieGEzzR>Z2JvP>K`j>m5Ngm)b z@ztv%Eg4%rXytwPo!xJ9Yw;pG-keu+Cp@;p4cu?N=pJ#G&b63y%y2);-*WBZb zVv)=rf+MdzWXfO;=su&E=6UDh)u;0|f)@T3g{JGh+3cTO>h69#uwhP$uAfLF^8-MYzic0mT%KqNd6#h4F zeWGgu!w!{sf)jfg(tp$#Z3eB_+#?#xaCw<->8{;>)w>b|8zPkig!m^FX&$?vCB>y zrnS%({g*FiDs&n)GQ4K^a3V`k?{2B)&SJ4W9VL;c zfA<``c4|0AtxK=` zd*3Cc*5p=AUD;cc8ukNRg6AaPEp=UbqA=`@>n&CWaRv)6+wa!DH*>t(GOhf`W8r^u zUP}2d_3{j4jmXVCyzts1L%~1%oyEx;pRHsN;BgC+IGoRLdk$!KMWl)9!hpkT8PcX5 zo_X@&4A2U^&`{H24?Ttr0uB_tu-jnO?jgGeNE5HX;Avj1n7>4JvQB}(^iox!rhxRm3nvOvch^`w5$iH{l2 zuqdefOW}FPy1`6J_P@%78DDnzEZr0o!pO$3FyOF#&&2ytr@0yD$#!qO!@$rdymMxX zhFG?p((P?kc@{6K&q(ay%(1pQeJ}dx41MHR4cP}BFyL@F!yNVp zVh()$M`!W9s$6=p#cA&Pjs#zmTQwIGZoQcsSGb?!pZRTJ##NwIZS4#*+)vpwurnJp z{9)aYy>{wWW%s^%pY=CG;wI?0tw?r_g2W~}Z#v8~X$z3yPb;q5L3|BiG%UcUE7 zQu1|$+qR8UqFtW6zL;^j{Bv;a&sku9yO*71vgkiz!ywPLf%k!P!Mc^v!r zADoF;voqoRJ{@<^khtreN`_|>XD}xS9k58aHnA+%NHg0!H|yNl;LfS17QA5MVQ^a5 zR^N4Ey~pmBDN{dId=7oTH>{prVR6#NXE&X*cmFGLm^RtMQZ9d=a(U?UyAK)kKJ4oF z;*ynBCT*W|M6U7Gt6L4{%`-Q37{|Ni-Z`SW^D*xZu*#1th>A#%yw+Zg| zDxaSWFOI7DC&TwZnjuaq!&QIByJ@nWN7{UEZ?paX>e|}+pXo+7H)_tTDfTwn`B8R# zcCc!`VFMq-_9goa);!mG)^Ef5K$~F}!<(WDwqn^k%|*KQr0AYw-;l!5Yb=)iH%TMJ z+Rvr#y#=p(dU0ovpykomOl(eNiNC)sIujW>%Si6s$3F+RN!suxbZx!Cpb!(iTj$Pm zQ>JZ_4+H9E*P?LjIF>+%9}&Z}ex<)S%X|DU4}r-%B#AGyK9>5PSW5 z=f3s7Yo4(&M4x=J)A{c4Zhf<|&K&E`Bd3?FDW3E6a$DrKpj8LDj1Jtoz5W*0gZw3L z*dMS8%G~((XyDYzBvCF*yPO``KS zqnt|9a>nX}EPrjO+)7`T?HwmB`Q)Z(%f;`#C~;2k;13t4Yj3yRt`u&&y(~!Uf0x;T zKXtz~6qMIY-OeDnvGVh@zroiFV=uELxG8M-Q)|2BV3%8T+-5UN?gvxey%Wqnt#HKX zY{&VlK0jl&OkUUfa9cE2I1|saTK=zp4Gv$g-GAQwHf!h>#%s5#zW!&t!EqzAp=5%M zO6lBh-$MO6K5))I?^d+&JZP8fUFoFByLV@AQNOl7#zw@k&+e*>uaGjG-H+QpV-fA`bFJ@_wJYNT(S4P-KDGd%PZI2d++diN%XvR^BV6(*T2tP zP@DEDF*R!5%C{w_*>Ah;`c<@S1vAfq#SJWLxBeG8_(d~Vk89bw51{q7D(h7X&rSLJ zL@^z<7C`fP|H-R;)p822XS1GQxxV#vR`z}q&G20DfL-y&_8I*>ub~oWRW!HpsQM6}5bxf$R~bUw_y$zc6xJ#kj*R{`JAVC#?QH`_^rZDLJpt zi>|+yeyz*ufLTt)9mhxK8TeQ}tl_xC7V$pTsh+3cXo1?cWtWAM(zbCNi+WwZgeCpW z^0L3iFW>i@Ze3d=p<%$LJo{_$*SgPv(PpooeYT(MbNJb!;46%53`#W+qO$|!t0a&^WWclyjbJBZNvY0H+dN+#WJyI#t*0{rN%RDxdY8s+U_Pue$qi8gE|lipj^F|JwZc9blUB`}eXa z_0U}BtJAagmRvvkq*88O@55g{U*{~nU1qkvd5vgI!_Bgz-7YUaSKVYj5FHpe^V6cx z{^LCfF~BD`DPA6lrGP zw#yv`lcjqmuSwLYZkFs9zWM)cL1d1^!q+oiS}Db?eBJndvBUi=u|*-Gt__UU@k|^3 zJM0Wyb*u7DLAEy6EC!$Os|V8OtkaR=)lFS?dS>C?Rcv*!@$xdyOXfRu)VT^Kus>_P zbExMq;~SNrHrpPXg8tv`oflecdb$=}yl|Icu4{|2Zg;%Jj|Zzum;V-V67g*Kx|sKj z4fg@>!*fr_7bJ*$(~RZ+*Zz1Zqruq=?{lpUn>nV|*4_&b*;-g-_e*rq98uo}!^e?I zGHf4iAGi?yg#X$#v46}5_>GH&Kb7RI+FSed+uz^E=kPo*Rl2p}^})cqx?voKdz7qR z*0{DV>-|50!#?$xsa${Uk;dw_r6KY6E4HLwl<#=K-6mM25BTlotQtd0PA9#a)gk-uq5H zeXabERV23IVlcxWhP~5YofA39ll;<};V$O|{-WCDT_sz#wweoSUhcFwmy;WK^_b<) zb&efDp&^Xd?#bO^dk~w}!&u;w`_`0w>E^k|n`bkwySp{}`}VnO3o_a^zNtNYqgv{K zz51fxp{6??Z8-cad{^P$g>j7>RJEMoWTDrQvzdK%3G2CCXI=Z4KnKkWz$?W(QYmOK)%u9OKZo0Oxx93=k zhkqd3j8s)Q)&S;!DH?x2Com*PEd0%wleEq0T*&mD)20l<7flgKZK(Zluxr2ILw|-{9hdC+%NUqNQkGpd)h$>k{54fuir0Q)e*Duw207-8 zwd>gB*01H2dsPAV@UR_vYchNqp!{Q&-5ey+xz>n zCu&O#`g{K?yM~T_GOPu`KoIPpJLwB^|SX(w2AJEipA(MvEfS^F`jVP3*A+lwz+Ja697bHCiQnX%3(@Xh91x2CNx zUvw@e_-gBO;hWuzGMo>l%kkIl|Nl71Y0C5@xyFU7PTg~8kyDzt;C1z;UF%MpIQttt zuDcx;CVIN_Q%1?n_dc7SNu1J6jp9RNVPIf9L9RnZ9KvQv0$mEtz$=^FuDf^2lkQ`qr_(yZ*KH@VQ$m zE-N)|P5!~WYIVAh;4_9ZAAdYs^Dbgn`uS-y?%ON#J@{>EYAknSbNc6XGSgqqU{?Qi zzvFoN`c>=R)k;4&&z$k;r&L-*IkRerYN`n~zQZ zo4fdVg~?hyrUj=>4yQlga>B;CAnv_A;~c*h`B#DRd&o{Z5U%ATKw>3AW_22K8>N8%-DHOV! z?0R%Q@4A|cp2%NC6^0)*#?=fpt&(mwayMt>T5pUv^5v(L8qw(ZS5u71&(r0)bsy0qnA z4aPH9T#t12V~Ni4(m252%bmj>kUZ;Q=gy4vGJLAR*+C|2KZ~UO5)$0Uut4rWJY$^u zl0SKmj&SPl`5JclUto!WKtk%L`Oa}`88?UtB^-4P6{p0TM_v15DZai~nn0h69g9A@b zj_QG~laB1VHpd=s{O@q2T*B>hdC|pX>*5XPRsLD+^2PixM=c-2^F?=)maS@B>0&aw z^RWAi&c%*p*+b$ZpE9mUVrZWNp~k)gPcC1RqIFZYp-3)vD6Po4<8apkJ6 z&9QB7&$`siO*GLz?>c*F(yJ@WHvaxrdRFO>B|{pcg;ay(>O~sHw{A`Q8^7+BuIVbPdaeg^ zU60IHJG6Y}M^2?Lj1{sE#Ai;OK0{dFZL#*bHkKK|DhIlzu4CVKvS+@~!|QE=`z+dh zC$D3dPkrVu@O4gt#Om%}T7PRUer;tpzP()VqbI}MQ$3jsBDdd}+W+}br#taRXwmwE zOaW$$VM5`L_|tAzh&3GYiJxQh(<+{CcG_*fnzU3clYH~{GRe4PiL>F7 zZa-es{?<}AeEi2H>3Q1eS7p0x6uJ7Bu|}8dE!@A3ec#O2+e&RKrY&RDnYq32ik?&1 zbB)Ri*E0$)l`k*onm>0FTWV2n?8)8(d=;~1?waxPQ;d0z#KQEMnVb&x>(}$kO?&l;W`~BiYgplf{{XQ<@Sy2WvUVm$SeaZI9;wAG_zf5sgl}uo8IP&^8zw*MB zS=V>^eMyu!9nZEx@PXe+SctNjw63QnC2^jo#f*m8>qpY}}#ZToy%guY5mLohP1aG-fDZN>SW`z)w51Von*UlZtnJDGhT|`UUrh<-d3G` zr&jKZikkIJ@TNGE#gT2t|4YpX7AocySrO8n;jAnFF81`pIyo&LHhuYbpSnX{^KSKB zX4|6mzVQ442#DSjW9R}J`Z)>N|oTsdGTyLes8G~ETj2}n3 zEt_J({uY2W-_dVY_ZPAySsT{X;y5~>IKGJex z?W{B{u^&C_yN3)UrWvEw_CuuS{Y#qEh}-UW(S&6g~^{cX*Bqo+}(@_)Gk^}Os3 zFgOJM$ZR;rcrEJ87MTN6{o;ZQBeJtI#1rPS1{`|*wtCtBX{Vh!Vl=w9ca`q_SbXM- zz~-e<)3#oJE&Ex{!QSL-fJVHjOwEU@Rq^x7l?9J$X}>%(ZCXM2zF&F)%#*9uluct5Oj}fO{@sfRQT0Vr8T4nFtXihoGu}0oD^|pmHgXFPGa~bN+`CMoAt*qs< z`;l<;zKH8j6G6Mcz>DAa%n=q=s!kP2xEAbkAv?R-ov~q2gg0YNOsMr|J4^TI+ne@B zg*{49TBjHkcVUaG{P}WTrzuUFI1Mh(`NGz~r(`G2aO+ms7Nf`EE8?_cQFwdB}oY8LUK06D(7xq(>7u{$06T3YtE0eQa@aq}1 zMZPXu_N~i1xcu%a*N&v%FvhUJi{E)1rgpN-|JlFvPcp;um%o}O-&u9qAndz@+xJ!m zxvjaWbA^RJaRqjrdUbAL^|zePpEbPmgGGA!k1D-pP!Q{$VHbaxhhh1#$FtuTuith3 zO@+;;3Fpl>3musB>Q!5P=kauV=9~?8S9^9G3JX&~ z_9tKFxqHN?xbs74?E9Li>*Bs;JJl4q!fvw8Nd0KVAisJoZ(UKs%*?hp)kW;Nv-3(f zZrR`M=FG3rRb*r=dnjjbQ26!_65F$d770v^ZP>cqzlQYyyWDyE{zD>1cQtZc=6;u96vP6}$)Bg$t*6++32`DBYm8{&p$n z!)2RzHk>}S{yFiy{H<-~clP@!P56H3l1Ojcy;&xiNzBG~U5%2Q^v<{am{yv&CyX@Cr-su`#UymhCe9mrv?e5>A_|nqDajpk_Lqjju z3-;%~EL?r=VM$5OhDRSyEIW0oZMP_EaA!gH`RfI4p;ymb-@RK|en;$l0YB~Af)We{ zmj%L~e(!e6t~+%`ZQ^tHpX;=Pt;^faW|;ipy&dMKbjZT>;dN8p55hao&(J7Ml}&Jo zV1KZqnSWo@{}+pWIhB?Q9=QJc71Qx&ySL?R*{BaVEaCX%Wzm2B&5Taocw%;?UZF_b=H!hhUVr>?arK|N zeC-7>d^gNP!p~c5S+*?k_dMI#x9_eC=(wmgDX_J;#P&mJ+L|r7@27wUm)fJ;FH8Mr zU(hYw`S<^|iyO7(y_YI}+{G0uU(adW#L&mIVWOn=;)}D|8`XYhOw#a5l~35Z^}5Uw z4Nm3-mdhloGFFr>^ZDtw^}6-5+=lD3(mo%mxjrL%)vf}uiKg-k&NCV?u2K5*=gol} zU%y$550d%5E4GDADlV8-+rap@*o`T}@a%`w!)uBa8-9zjUcPt> zS36|R5W*bc?gAVFuGe3Iz-i|GpKUt>t+O-RDmwDD3p8aq$F8@)oOT-$D znq7--%r?>e(6@}WuHpfogz8S=jz_BcCzwriKd`6m5$J6b=h;4Qop~Jph4Ridi$O*2 zv(?vFFJbn1 z_u}VyImRDM49aW~p;Q0|jIm%bs#8@qzQ6%zNP{ya7? zl0B)c>i27Ad&IOqHwrd;^L~vmd#h$Y&u{O_Tav4umDEiS(K}VNdy&F>r+<^TiV4cu zf5=OT^4a`6jiFxgknMpvoBkEl$no~Xu{)j`{&h-fYSxDr%5x2*-YyJUb@80XTfXl< z96l^DR`Q8!pET{{!UqaM37#UX{>(RCe_UeEm7N{^ExbY8@blSOVm1d4emZsW!A19d zzfXtGKe>2?&+lm$!?}bKJfotWt7rZ+R63Q>#B(_(?rhI;hJE#*rj14D{1dBvn3V69 z8pr0ZxH!YYfhmW>^7Ba*q|SdD^*8%k@?DXUgH2I#qZc!-dBmRg8A+TfNnEi+7-b_<{NtRSElyuTGs> z!oNLe?fi3!(aYYZUAiC8-sthm?uymQTT?%HDKVP0Oq;f>mO)PS(fX8KxzW)T!p3$oz1W1zWCwNGZjJ)wyv_O?_z%1c}PiFdAdi#QiHmhN0|)O zLY-ZfkvZp*k3TX>QxS398NZHS_>iPff@aR$U5lo3@H3xyarXqHuI@vBQmDzt;JQ{eFrQTMG9niZS zw#l-Gg<(e83q_@0jDq(AqiIth*wvWUg|+EkQzfKKq8tk3XiA z8vU1lyXM`-+}E2Kj`d4l|9w02@~mS|mN_Y&n$B{gW0nxZ|2E6b=iT^JrD888-u@!V zF#p!p)vu>(oPXWU_Re25{^!qAPyS`QE|)1^(6jQ@p-7i+#d7_%F4?a?mAl`L%gue@ z<9bk-;eOt%v)sjj$rEQVDy%LqIl5wP>28LHv(#KKGg+JH{%DTbx?uIBy#7o6n{`j32gE*le;9*FE-l;`TrP*q9F(?cbjmt|NAHQg>OahPqHf z=BMBOdCWhKy?WKg`>|q)s(9|Pq>0y8ua@4$sPp-!)V8CKC)z(-6svful_g?U(neqF zzyI1kcLa!cyULvm-TkrRN$ULd3z-h&*3}>0y)oj+*_f@mE-NQ9oOTGkdd84JEF^U9 zrailVKiwCzRl47O-sj)aHD`8QeLj1muH1bcWkbbF3ey8q4!l14pGjh|Ms56w(%Wr< z`@|loGTdFd>fq_3yZZ!|dblM>-q@_Z>H728l{yWQA1hRz3*S8Uc=q+*HO5+<8;-os z&*(j>l>cNGzoJ(sOGMkBe>1BYYswF`yxiY&blaPgrN2M^c=r6yznOArI$wWEl^uUP z(PQ0jfkh!64XGMp)>XUDhZm}D-efMIk6YH3= zo6+jh%iq;A(|*L=KK6X3q5Ji6`;h2r->H-Tat7w89N3f~ar$1uF?n0Lm{%q77c+iv z-hSq9T-?0q%ip-mVzqZ(+O=wk2_@XzJ$>dgxw0F7yp~&M<>%kaxoy%s)288T*D5yu z@?HLlU5zXe({g6NXMNCreDD18?)7iqF3g>_^?wS3v}o)6i(ike{(N!0K&y}6qx6-# ztBbdvzh1Cq(TB{9H=gbOd@{93$@{rt(~|4t%2l8wDi<>gC`KA&wU z9-wyY@kI5{H_L7I{oLEtb@~05D&flvI^TXvFAE8q_wDz*dDFi=-^{0YM@4zV#YBgn zoCl`wD(rMlfBxw1vYUTQm3GaLEY{ZgwtwxaM*XL|`4sOcF`9WzomykwU?}JRXm#FI z(4c*Xjl0mpNF|#EuN#lMTXs(paCLmwIiGoz)DKp{KGU-wmfueGNwB* zk)GYrQHNsluB)~Pr?5<8b}3{T3a@3pke6ZP`Eoo4iwP4xy>Fe272!c*EFv`4iWcU55)t-J|x+f_xPE+0` zw`b1G{O~FJns49A`+wnW72E37v*Yt`&y!|6!+e1;K{N1t*5L@<>;0XJ)EK8JfBkx} za9XQb+8v?ZwrRU!&j-AE-CQ~?RiEhv7lZAYJ(o5eTl4Nkgiz`3Z92LP1zopYEmE!s zYffk8+#qvl%dylmUv6fY)Uf#w@boJe*FtR5OwGG+Qpw#p3YciI*W=$vErU532=xvSuyRzOydX zq@?!Y!86}vl;$1wF}@(5#xH#Fac%A1*Va~HM`QH@*Un=yV_@KD0^Je7wC2po$xj$U zbN5W?2>br^;e@%?hnL;{`s7ff!EdDoZpJw*1@aF13}393o@ySB_|?aq>e(>WvT~A) zL2lIL8T|HdZuz!yn4XYWyib~&mS+XJ(w|hQReRc^lj;a4}BW^7z210%$1DpsNkNs z>FDdb-%s_)mX|!+@!5x2=jWwqC2{}fJgeHN#5j$ya+1uY|Aulo>;;=M+YaYlpKKo< z^5WNxmuI|~js4Yw(imzuelC{rtXUTj4C0 z2(~AlMH7~>)*m<%zkb~|zPr0hUDx0Ky2JIlxbL=HyTHIV!ZQn%8eTG}$yZdcH|#ff zEUWa(*!b_!O*Z+%lLU z`Roh}owBb!T*Qj$fih!_jDziguM8{yM@;_y_V)L<==A4@XHVSC;5{ubVCiO?SfK>T z54&O=R^Hw(e_BhcVCt%}Sef2OdfQ)Xmay~5E@qhLU6%tIw(dN#u34Bf-!?&ZPyYRD z>!0ta=HykJv@)xpbs6hFE|Zh>5<9oD{kQ1xasQ;zeYv71c+K=ZIZK|t+@;Z-durO9 ziKhHQoc{zHtYY8qIrBE^$bDzkpBMTr)%3JQn%yaS$iTV5=EhFr9HV4aun}5oEBa`T}=4k{kw1XUV0nVvRGoJdy&#{l>?ua zY&G3-dfP^k2mgzb`8+3@EBAhK;qz>G8mMHb#>3!J+kI!9Ye$d*<1}|r%qP1E3&uvr z%daWkEvMKumnCAJ>ta)T<_k%;Yr1c5^$;%>w3jQovWlKbVs+InDpoUdnI4)KLQ7)p1HOkG$?#$ z-Exk#j{j}CmX^6+<5u{c7WHIvrQWJFYknr?=UKGcsaN3e@}VR#b$l5`8@L zxIM=Mle8LDDc<$PyVVrA8s{9*XWDopyY}OcH@|E5-COAr5fgj&f?&UUT$3glU*pwD8=L1d|I@jAp?i~R`vg~y%ToGmAB>f9UcHts4s<_0 zX~k_*&WCK4o$)O`n}3FPIT_DfdGGbz|81-E<~%L)b=u*`r`R2$Bi7j`Y5ezH7uQpX zhX2Rk&wu&z#__cMcP?%`ShU+r@slf`qIbhG*7Xb)M|#$}eBr&!bCRHXMl&RR5&+Wa+)RfM@;a3*6kMxi(dN}f0=OGmGhwp=LVsW zc=f&3^cs3yPB|Tp_||s2lyhRXP=e~3ZDong$CF!UymU#svs9yIbE3)ng57$G zMXpS1zD!)l{>k&_l&919XsaDeD|^9 z!{ck$E?nc8JxTlj>GRha?mRCObe_ndZS5Nud%u?RfVshAfwVQjB2jq~3%`2k&yhHA zSmT2DmJ>VK6&TgH{3kDZ9Xp@dV7_EJQw8^eslUJV{wz&@{^((vOOnV3?x-g*j{oy zpH;fd;7nj|Fm*X~%W-<5$QQU#M<$fiUYxis_q_6>oeXw)#6! z;x8yYS2^Gks2rMW;}|%_^30D*`)c3IUApJ*sTNP1AyIKX`g_>(gJB9&z*8ZNq||?^Qj}a=DFbN{DsHCqLUO zeRe?xshcOKML!NW9lUnF)`mG1e3w?PR`F=y+`iN*=5$&5;wAIlcQf;wa!I}Yb@Fw} zZ<#577p`NOQ4qbbpQ}yk<&&aX1@pw%X-`!4ooFv{ckt`cxb)U~?pLF=`m@U|HrMi< zDl$=1Hh8$~iSx=5cafWU(|ZrrrdCzVczK@r|G6#eO15k7{G1?^aLDuI^TlqzET`XI zs(pE1n^oXEU+b0IWOJ)mzS3IxKuUp8%`0|ck5$`l8K)FaCZ8$0oH)CjRxVz0!m~!v z<>Dj;VJ8t?P6KSrojpz|$-E8Rcl4Y%I1MJQ+?pq@@F`38SNd`xCl19H0XX4t|39<8 Xy~Xpe2LVnD3=9mOu6{1-oD!M - -ChibiOS/RT: Version Numbers and Identification - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - -
    -
    - -
    -

    Version Numbers and Identification
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for Version Numbers and Identification:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Kernel related info.

    - - - - - - - - - - - - -

    -Defines

    #define _CHIBIOS_RT_
     ChibiOS/RT identification macro.
    #define CH_KERNEL_VERSION   "2.0.8"
     Kernel version string.
    #define CH_KERNEL_MAJOR   2
     Kernel version major number.
    #define CH_KERNEL_MINOR   0
     Kernel version minor number.
    #define CH_KERNEL_PATCH   8
     Kernel version patch number.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define _CHIBIOS_RT_
    -
    -
    - -

    ChibiOS/RT identification macro.

    - -

    Definition at line 44 of file ch.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_KERNEL_VERSION   "2.0.8"
    -
    -
    - -

    Kernel version string.

    - -

    Definition at line 49 of file ch.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_KERNEL_MAJOR   2
    -
    -
    - -

    Kernel version major number.

    - -

    Definition at line 54 of file ch.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_KERNEL_MINOR   0
    -
    -
    - -

    Kernel version minor number.

    - -

    Definition at line 59 of file ch.h.

    - -
    -
    - -
    -
    - - - - -
    #define CH_KERNEL_PATCH   8
    -
    -
    - -

    Kernel version patch number.

    - -

    Definition at line 64 of file ch.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__kernel__info.png b/ChibiOS_2.0.8/docs/html/group__kernel__info.png deleted file mode 100644 index 289fc73d85ef18836c8dd038e318e04fea530310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1204 zcmeAS@N?(olHy`uVBq!ia0y~yU^HN0U{K{?V_;x7I(=(C0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj%|ne)#qVZRPR5H2={+rMleSgAm?ScbZ>E!&qO?)zoBIM2I@xbJ z-<62`S6Xl-PVc?n`@4I0e?EHuywb~e-|zjs=lT8eZtFy57X&C#>rA|<&am&a^~5=U zcpgMv^i=s`wqM`nvCZL^AAisCbbgS^aGF6bb#CCfX^b{{R-Gbx%n@->QCe2~i(+!~ z^O+AE*m5r9fZM(^N;8=n375;xRUuk0O015R3R^yRa(TkbEg?8n43(JH z&y==n_w=u_`_H`B(9>IY)^v8Z`Rub--`%;hU3~MsdHHL@PG|01|L^j*iQD4iAD^Cd zddK8G^&5J3j=v}st9`EfE?vY^^Njrj+t07QzQ4aVq;LJaIWJBXtO#caVQ?s2Hs$fj zpzXK6Uh-dk_0u)+nXKRQ3+jL0c<;Kud>{9Wl@+Y%-a=j6c83JSuijfc`)XC~uda?Y z9X#t+o?;aY+@lqjdi8DDeGR^4*AMy-|PA<_pVnQjyaxl zO5H1D&0Di(W1Y)(#gfGpJG14t&2L^(Ber2h@W}#0F7b_m!7(wvMaFZ9cyeXzt7(K_O8Xd_A@P5*VV|eia}x0$(JPy58dBac>l%2 zvWIqV=QmrVcAV1JvpZQ8|Jd{_L+;KkyvLuF?$wN_=-PM8v~PWL7*l_t@oJM=^=lbx z;^g^$&zQ3&H*Bm)<=t`vSk9(TEr*QeB$Wzt# z#ZCRhE6-b9n#ZJ;wSRZ@`~Iv_xvjUJ*ZcXzM2Spf732v?3_TF?RQkb_3#Gg5Waa*S z6>KoQUbbzs^z7!VrOT$MoL_M#=85G!m7PC3&VD+5Bz0Td79FmL0x>bWwI#ZCnYaI^ z8{9bDEx!LB%Y*H$tylXQbD1x(8E7wJzWUZ#*I!%o^BJ?OK(+lCrb8=lVTY^y|NW zea`3jNBJ_}tIFqptNOlgUC0yL(7g*+`G*(=9QC|-Q!sGP_IKx^gU-*t|CfDv{gID> zYrh>{`ts#s{gAI>3i2Xzr3GhhY>@o&dprNH+B@t8^>zQk7T=%$Z}*Ei9WQ)!5|ZD% z{ktQ&gwG|V?A-cB!N8dt8w3M05ya8hBk|{Sxi@`#RsTeAuC%qa^~BeYxNf}v7rbzb knYnqlUtzopr064csumAu6 diff --git a/ChibiOS_2.0.8/docs/html/group__mailboxes.html b/ChibiOS_2.0.8/docs/html/group__mailboxes.html deleted file mode 100644 index daa0b38..0000000 --- a/ChibiOS_2.0.8/docs/html/group__mailboxes.html +++ /dev/null @@ -1,846 +0,0 @@ - - -ChibiOS/RT: Mailboxes - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Mailboxes
    - -[Synchronization] -

    -
    -
    - -

    -Collaboration diagram for Mailboxes:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Asynchronous messages.

    -

    Operation mode

    -

    A mailbox is an asynchronous communication mechanism.
    - Operations defined for mailboxes:

    -
      -
    • Post: Posts a message on the mailbox in FIFO order.
    • -
    • Post Ahead: Posts a message on the mailbox with urgent priority.
    • -
    • Fetch: A message is fetched from the mailbox and removed from the queue.
    • -
    • Reset: The mailbox is emptied and all the stored messages are lost.
    • -
    -

    A message is a variable of type msg_t that is guaranteed to have the same size of and be compatible with (data) pointers (anyway an explicit cast is needed). If larger messages need to be exchanged then a pointer to a structure can be posted in the mailbox but the posting side has no predefined way to know when the message has been processed. A possible approach is to allocate memory (from a memory pool as example) from the posting side and free it on the fetching side. Another approach is to set a "done" flag into the structure pointed by the message.
    - In order to use the mailboxes APIs the CH_USE_MAILBOXES option must be enabled in chconf.h.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define chMBSize(mbp)   ((mbp)->mb_top - (mbp)->mb_buffer)
     Returns the mailbox buffer size.
    #define chMBGetEmpty(mbp)   chSemGetCounterI(&(mbp)->mb_emptysem)
     Returns the free space into the mailbox.
    #define chMBGetFull(mbp)   chSemGetCounterI(&(mbp)->mb_fullsem)
     Returns the number of messages into the mailbox.
    #define chMBPeek(mbp)   (*(mbp)->mb_rdptr)
     Returns the next message in the queue without removing it.
    #define _MAILBOX_DATA(name, buffer, size)
     Data part of a static mailbox initializer.
    #define MAILBOX_DECL(name, buffer, size)   Mailbox name = _MAILBOX_DATA(name, buffer, size)
     Static mailbox initializer.

    -Functions

    void chMBInit (Mailbox *mbp, msg_t *buf, cnt_t n)
     Initializes a Mailbox object.
    void chMBReset (Mailbox *mbp)
     Resets a Mailbox object.
    msg_t chMBPost (Mailbox *mbp, msg_t msg, systime_t time)
     Posts a message into a mailbox.
    msg_t chMBPostS (Mailbox *mbp, msg_t msg, systime_t time)
     Posts a message into a mailbox.
    msg_t chMBPostAhead (Mailbox *mbp, msg_t msg, systime_t time)
     Posts an high priority message into a mailbox.
    msg_t chMBPostAheadS (Mailbox *mbp, msg_t msg, systime_t time)
     Posts an high priority message into a mailbox.
    msg_t chMBFetch (Mailbox *mbp, msg_t *msgp, systime_t time)
     Retrieves a message from a mailbox.
    msg_t chMBFetchS (Mailbox *mbp, msg_t *msgp, systime_t time)
     Retrieves a message from a mailbox.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - -
    #define chMBSize( mbp )    ((mbp)->mb_top - (mbp)->mb_buffer)
    -
    -
    - -

    Returns the mailbox buffer size.

    -
    Parameters:
    - - -
    [in] mbp the pointer to an initialized Mailbox object
    -
    -
    - -

    Definition at line 80 of file chmboxes.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chMBGetEmpty( mbp )    chSemGetCounterI(&(mbp)->mb_emptysem)
    -
    -
    - -

    Returns the free space into the mailbox.

    -
    Note:
    Can be invoked in any system state but if invoked out of a locked state then the returned value may change after reading.
    -
    -The returned value can be less than zero when there are waiting threads on the internal semaphore.
    -
    Parameters:
    - - -
    [in] mbp the pointer to an initialized Mailbox object
    -
    -
    -
    Returns:
    The number of empty message slots.
    - -

    Definition at line 93 of file chmboxes.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chMBGetFull( mbp )    chSemGetCounterI(&(mbp)->mb_fullsem)
    -
    -
    - -

    Returns the number of messages into the mailbox.

    -
    Note:
    Can be invoked in any system state but if invoked out of a locked state then the returned value may change after reading.
    -
    -The returned value can be less than zero when there are waiting threads on the internal semaphore.
    -
    Parameters:
    - - -
    [in] mbp the pointer to an initialized Mailbox object
    -
    -
    -
    Returns:
    The number of queued messages.
    - -

    Definition at line 105 of file chmboxes.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chMBPeek( mbp )    (*(mbp)->mb_rdptr)
    -
    -
    - -

    Returns the next message in the queue without removing it.

    -
    Note:
    A message must be waiting in the queue for this function to work or it would return garbage. The correct way to use this macro is to use chMBGetFull() and then use this macro, all within a lock state.
    - -

    Definition at line 114 of file chmboxes.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define _MAILBOX_DATA( name,
     buffer,
     size 
    )
    -
    -
    -Value:
    {                             \
    -  (msg_t *)(buffer),                                                    \
    -  (msg_t *)(buffer) + size,                                             \
    -  (msg_t *)(buffer),                                                    \
    -  (msg_t *)(buffer),                                                    \
    -  _SEMAPHORE_DATA(name.mb_fullsem, 0),                                  \
    -  _SEMAPHORE_DATA(name.mb_emptysem, size),                              \
    -}
    -
    -

    Data part of a static mailbox initializer.

    -

    This macro should be used when statically initializing a mailbox that is part of a bigger structure.

    -
    Parameters:
    - - - - -
    [in] name the name of the mailbox variable
    [in] buffer pointer to the mailbox buffer area
    [in] size size of the mailbox buffer area
    -
    -
    - -

    Definition at line 125 of file chmboxes.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define MAILBOX_DECL( name,
     buffer,
     size 
    )   Mailbox name = _MAILBOX_DATA(name, buffer, size)
    -
    -
    - -

    Static mailbox initializer.

    -

    Statically initialized mailboxes require no explicit initialization using chMBInit().

    -
    Parameters:
    - - - - -
    [in] name the name of the mailbox variable
    [in] buffer pointer to the mailbox buffer area
    [in] size size of the mailbox buffer area
    -
    -
    - -

    Definition at line 143 of file chmboxes.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void chMBInit (Mailbox *  mbp,
    msg_t buf,
    cnt_t  n 
    )
    -
    -
    - -

    Initializes a Mailbox object.

    -
    Parameters:
    - - - - -
    [out] mbp the pointer to the Mailbox structure to be initialized
    [in] buf the circular messages buffer
    [in] n the buffer size as number of msg_t
    -
    -
    - -

    Definition at line 69 of file chmboxes.c.

    - -

    References chDbgCheck, and chSemInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chMBReset (Mailbox *  mbp ) 
    -
    -
    - -

    Resets a Mailbox object.

    -

    All the waiting threads are resumed with status RDY_RESET and the queued messages are lost.

    -
    Parameters:
    - - -
    [in] mbp the pointer to an initialized Mailbox object
    -
    -
    - -

    Definition at line 86 of file chmboxes.c.

    - -

    References chDbgCheck, chSchRescheduleS(), chSemResetI(), chSysLock, and chSysUnlock.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t chMBPost (Mailbox *  mbp,
    msg_t  msg,
    systime_t  time 
    )
    -
    -
    - -

    Posts a message into a mailbox.

    -

    The invoking thread waits until a empty slot in the mailbox becomes available or the specified time runs out.

    -
    Parameters:
    - - - - -
    [in] mbp the pointer to an initialized Mailbox object
    [in] msg the message to be posted on the mailbox
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - - -
    RDY_OK if the message was correctly posted.
    RDY_RESET if the mailbox was reset while waiting.
    RDY_TIMEOUT if the operation timed out.
    -
    -
    - -

    Definition at line 115 of file chmboxes.c.

    - -

    References chMBPostS(), chSysLock, and chSysUnlock.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t chMBPostS (Mailbox *  mbp,
    msg_t  msg,
    systime_t  time 
    )
    -
    -
    - -

    Posts a message into a mailbox.

    -

    The invoking thread waits until a empty slot in the mailbox becomes available or the specified time runs out.

    -
    Parameters:
    - - - - -
    [in] mbp the pointer to an initialized Mailbox object
    [in] msg the message to be posted on the mailbox
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - - -
    RDY_OK if the message was correctly posted.
    RDY_RESET if the mailbox was reset while waiting.
    RDY_TIMEOUT if the operation timed out.
    -
    -
    - -

    Definition at line 141 of file chmboxes.c.

    - -

    References chDbgCheck, chSchRescheduleS(), chSemSignalI(), chSemWaitTimeoutS(), and RDY_OK.

    - -

    Referenced by chMBPost().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t chMBPostAhead (Mailbox *  mbp,
    msg_t  msg,
    systime_t  time 
    )
    -
    -
    - -

    Posts an high priority message into a mailbox.

    -

    The invoking thread waits until a empty slot in the mailbox becomes available or the specified time runs out.

    -
    Parameters:
    - - - - -
    [in] mbp the pointer to an initialized Mailbox object
    [in] msg the message to be posted on the mailbox
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - - -
    RDY_OK if the message was correctly posted.
    RDY_RESET if the mailbox was reset while waiting.
    RDY_TIMEOUT if the operation timed out.
    -
    -
    - -

    Definition at line 174 of file chmboxes.c.

    - -

    References chMBPostAheadS(), chSysLock, and chSysUnlock.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t chMBPostAheadS (Mailbox *  mbp,
    msg_t  msg,
    systime_t  time 
    )
    -
    -
    - -

    Posts an high priority message into a mailbox.

    -

    The invoking thread waits until a empty slot in the mailbox becomes available or the specified time runs out.

    -
    Parameters:
    - - - - -
    [in] mbp the pointer to an initialized Mailbox object
    [in] msg the message to be posted on the mailbox
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - - -
    RDY_OK if the message was correctly posted.
    RDY_RESET if the mailbox was reset while waiting.
    RDY_TIMEOUT if the operation timed out.
    -
    -
    - -

    Definition at line 200 of file chmboxes.c.

    - -

    References chDbgCheck, chSchRescheduleS(), chSemSignalI(), chSemWaitTimeoutS(), and RDY_OK.

    - -

    Referenced by chMBPostAhead().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t chMBFetch (Mailbox *  mbp,
    msg_t msgp,
    systime_t  time 
    )
    -
    -
    - -

    Retrieves a message from a mailbox.

    -

    The invoking thread waits until a message is posted in the mailbox or the specified time runs out.

    -
    Parameters:
    - - - - -
    [in] mbp the pointer to an initialized Mailbox object
    [out] msgp pointer to a message variable for the received message
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - - -
    RDY_OK if a message was correctly fetched.
    RDY_RESET if the mailbox was reset while waiting.
    RDY_TIMEOUT if the operation timed out.
    -
    -
    - -

    Definition at line 233 of file chmboxes.c.

    - -

    References chMBFetchS(), chSysLock, and chSysUnlock.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    msg_t chMBFetchS (Mailbox *  mbp,
    msg_t msgp,
    systime_t  time 
    )
    -
    -
    - -

    Retrieves a message from a mailbox.

    -

    The invoking thread waits until a message is posted in the mailbox or the specified time runs out.

    -
    Parameters:
    - - - - -
    [in] mbp the pointer to an initialized Mailbox object
    [out] msgp pointer to a message variable for the received message
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Returns:
    The operation status.
    -
    Return values:
    - - - - -
    RDY_OK if a message was correctly fetched.
    RDY_RESET if the mailbox was reset while waiting.
    RDY_TIMEOUT if the operation timed out.
    -
    -
    - -

    Definition at line 259 of file chmboxes.c.

    - -

    References chDbgCheck, chSchRescheduleS(), chSemSignalI(), chSemWaitTimeoutS(), and RDY_OK.

    - -

    Referenced by chMBFetch().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__mailboxes.png b/ChibiOS_2.0.8/docs/html/group__mailboxes.png deleted file mode 100644 index ecd9395cb67004a055d8da1af284ea951f06ced2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1116 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 AVE_OC diff --git a/ChibiOS_2.0.8/docs/html/group__mailboxes_ga55c5b8890b78127bc1fa5a324252d5e6_cgraph.png b/ChibiOS_2.0.8/docs/html/group__mailboxes_ga55c5b8890b78127bc1fa5a324252d5e6_cgraph.png deleted file mode 100644 index a78d97a791d910c579014b02468af8bb76d07f01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4952 zcmeAS@N?(olHy`uVBq!ia0y~yVBEpLz|hUX#=yWJ9Nfdgz`($k|H*Y zfq{X&#M9T6{T8zEQ>0Hzynd&m z?x(0LImAa+-guzJ$9B()EhkJY zu9TZG9%g8}aN&}fW~RczgCfb^>YORjW)a&;w*UUpno?x<{@&YrZ|~0gwr~DS>ABy^ z>VMyPo3;Pf+x^TP=)h~j0&WGRRjjOLj6b|Clur21vg2spj=;uY`<#n7H$0g@c5U!Ti<_GRvv0lR{GR_mu>GP zfsdQlRz3Otyp)YiMsVWhKXPq%kKM?t*!SnUR_OGHu(JKo4u3&@4o)f@BG~@k1Gnd@-F|@RU5Z2;eepvPG!FH zZ;xqiefaHG*haa)e?NYHUYl}nDU(l3&*Npb+vkTzg53U3Tg>n2me3o1mJ45$&a2b9 zI&c2`>*^IV83ZRI;9&~iP5p8Rk9oKQW z(0F~W<<{7WH>b|pXw}M>z1>myZmI3|tzdr^rENc`EAuSv`oinmyn0_h`w_MCbJ=ab zmCvVMdCmQ9kqYj>RArM96l@h@?(67q>ST0xaankTdvE88iEDxtwyyo#{oM9a-A(i8 ziPrZP?R>18HLr(Zr`TCv^KQ$_Yo7URewG$><@gTZt>s;mP*z{hLA( zoE8-Q;x*5+`Zc2(_-j&Am6ak+h`{H z{dIMzPsHCXQdz`ilu%OYyUxT{#dSi6Ylw@zarKk8B}yk&DQP$DKas*VpJP$fDjw#( z4yW9sU5(c!tM|vMCVgdk!FoZnshsi679CLsv(5!CzpPYQzG{D$+uGUf?ecZ%4VzA~ z^H?Zx&GoN+)z_D^?WvpK%h0Q@8Fd&w7&B;wdiM6_R&q1!+HGEY&7}AK6W=UGfl!-W z35}KC_ti!(XV#csbErXiQGkcayC}XHdski3ZjuYtXb2Bc743Xd*4vXKyKT0f*z0O{ zmgn6H*^x8Mcxsdbl_e^-h7nSw&9G9^|;&Oe6HL%%^~!G2|>#jAEnPxyW7 zc5(II_hDP+2^seIJo~Ztz_y&wQ_CC*#8m~aZhiOe-)0@|>rvCz2_BSU@Mf%yzUr~s zE32mFVm$+M*oD%dzljF~1Mj|k_3NAEvYUUl-ZYkfYQ?a2RmEKc6JCX>CvCp$cf9WL zwV%=5rF7xu&*#odxP7^@@=rYL1m+Jy3M+HM%Kd$K`q-is&zgh6(?{uIIcJ0EDi5X| z90ybuoL`|d_4L*^GiUsG=gv6YFUq@Dk!mX>NJC1Ks%4T@W`XQ5n-L=F#;mw(p zzWs-UZBOX)SSYPpb?)5zEz)k^e(f}t&u7};!m>Z)sGdX6;>FQ*ZTIV(c_-#e6u3Ou zeeT?Qoo<&+tDmp)-_15bjbZ&tuUngnR`T23_?36TH0X!ngN_s8ckj-&n|)exuhI+F z0?UTX&^-wf9+A^_R_ElrZg;%y(c8-C?(%d}M9$~wE)(Y5{#&8g;LK3Rqo8ZFRekbJ zGtr#RD#7Lm1>6Vf7&1eZZOzI)s2|`nzM<8bX853E#R^q# zGrg?5zBvAfY+mQQfTK4V?ghAN2{~4!q)6MouvE&ozwcAqk&yoq1uiTM9xCtlF>ILBpcYyv*&xg?FZgPSNtTVR&7P+P7fgjJ z4>l-gMKHUCUw`6t*`?^4i{Kx<27bnys!dxGAGAJvsH@(zZqkYv9*ae7MgqM@`(mxD zg_FN9y%0ILo1u(p*0~g;|Hme~XuN4Ns7`0Jd-Zway~>MM_kQL0_c{AUyN8Rl_4^A; zz5j=Z>-^Z{w)nZpsj6^6)@#}eYC_%`hV(vt_M>(A#SD?}_p0+vpLvSz`2X*Bv))1d z?JThl%0Z@vh96UAXUcu5s=YNiR5Rn>!>ZT&SG7n7s642usw#LoH9RbPU&t~6);oO* zxHCeQRcgEtdZzoZ>a{iNq^nuCSA-pQadC0PR-tG`hhIPTZb7!fr!RrWlXI1FxQ&Rh~uC6kc`}z0=@A|adsb`kYk$T2`x=W_#`0sn&$A6oblz-P>`SH!x zGY`wImmhq%HR?*($(lRY9$f!D>${be-xl}9H!oJyd|ofy`7gh$>FTzut6FdF?*6{z{^zIr!z}6^mb5+&i<&$?*Q`Ob!7gi7g^Aqz z>NuAFpd#(@V}2R_4QfYUmcP{evsimiv;V&zt(Sk6Zl52V`}5|q=|87QT}ybvbo$cq zsHkQC?Zj^X(P=pT{M~lRD{D`#+Bm0c>rH{v_qR8k=GWL=uu1xz`En_)_UGS4_FhT( zZg=P0<_Kv;ftkN6*J`aZ?s?;*b8WgAkL0P8zW0pVQnhpJ?H9cHm+-dj_t}+ghaUd? zf3j-j$#=Co=B95ndt-9s*jf=m2?n0foq;T?eS`gvJg)U;+*Dig<&AhlV@&Jj6(xIh zx1Ra@KeK4oxs|@U6?Lyn&2z=7<4ccDZ`l00ckZvdFDvW(HUFpAN!ML@P_|?Gx4qkP z&1?3(pI2faUUG@+L4W91|D=uEl9guHuh6=E{FvB(7KsnHmc{0udD(BWUp(wa@~V{Y zJ;A(r?bVt0vu~Fjp6j%Iow=K%;LjB68)}Q;q&>fhDgp*LM;?l08ezWmV@Zk?LARe%3HxU;)_{o@~g52Lf}${a%_ zt}T7_$!Q5Iw|LyXO>5tBPyN=l>eUrDXO`}er)7dQ+H&*%C`{k|_ra4V#wXJ3HFjsV zKYzN7(V~6+?0EtI*p8faJCdgyn6oSCb4hS`-EUFWyNg_HhHdN8~?-G;n!Zj@c29RF{?JeUfZE^ zuUp42C!$6;X=2~(Dnan#yPl|*kWM%h=9{9FN>O-K-z3`%^Vvc2H&I{Wal3%>IIGx|u_wV<=45xU_ zx7ROt`bKNb60zk!Ew2Wg%scZZ(eLpzYkBv@i=+3qT1C9qx_Ghh{LQs%FHc^2Ecoi0 z4iiQR@r%d*=M}x5czfBu=lQG}=6CM=VSZ9(xl?xgoyP~RO6`AE!@1+o-P}5su$7y& z?p_O6v(4-9)w4EtZTJ_;r1c;7jhtqeDRJzZPg=_RJKuXM|DF-zC$PbU|Il=}$QdW!a^Z`QR|SKIeH@B*vg)J0t~3(iZo+2qagb&TIFIVIrxJIR8O z&iSiOl__jb23Jht&LLeVrZ7#M&RD4=b+o^&ot>XOHu!*(Xhy3n6QLft_1i#C3N3 znbgWXdsgwz#glKoX*|;@{61yba()?2!C0wCRbc{JuAnH41nv79CUjSn+>pgPQ9GH_`d*1ri7P z8GWO}F3)4z+bY`1z}(kiw=w7DvCllpvqUb&F-&KkC2APQux3i8*;_gJ`UP+DSE;Tt zWs?!S*>%)xUbe)cJ2Osev?kj;;uM{>kJm+2l7KEcDYQDl8pRgWstxc ztKP~DYF*{Ts!a6w!>F*A;o7Q4HVls$F0FFgwYBu3_wVogb9i=ma51vU2(oI4z1|<- zGMQl#gC6ULjU8_Sua*Q~{$k9|_h-SCTBFV!kcD|ArMYj+&c2wn^T2Dt#ubl51$~(( zmZ*K++w6GV<1;&RU&pIUU81$!>1hSb4NJ807&b6Wn9m$`YE#dbA3vtWv&AZ3HD{9% zyt?=E`TIAD{#2BRF35J>5G7j3@Sk0QHKVG;dt`jV&ZMIbug~}#JCU-@_h+;z zYcHd_%jYu<7jIU+IjuBn&feKwF$@V#qPuyV%Ou(6$;;gK@#X91?4k z*UFc2d=vAT6@0WnrD?0Oa&!KbeMO%@(Ij=CZJEoWz3dyVtvZ#(aGG(Cev>)lPvy{D zy%`G2xlDQXYEQ0wF_D2wP2S)^$BK&{HuvgZ-pM<|J7aI|4B^nLch{~hy8Z8O^JLRi z{otNR+m)-O*IlQjPQAmrvTIFZ!X1;|(#MbQ|Nb6z#qFO#lU_rI2FJ3@Z>yA|vup%S zRx0I5T-$#v>2GY;^)Ouo8A-~Mv)*|Qf{ zKpm^k(q3n6SJ;XCV|I4AVo>sp>)lt!>yB3+ZmFr9#EG+T+Zp`E$5yxEhpqhf!(8!~ zn-a@Pul?dVa_HyJpEu{WP3II440S7fW_q;juvYGU@7ZOK=Sqd$@SAYmIsEJ9pM1vZtl%cH!JIeX-kbCBEF8@U$oT>MYQZi&gByy!}CYJCoGYDsoS+K9n5c zH(mILVf^y%kJ2h0T9h5v=U%=Z)ZKdFbJTD1_TP8kN={w6>}%1U^*2n8mi1ftzEAhf z%hEQ@J-VZN5@J9Bslvb*%uz)ie<(LnT;yiB d>-?X;es_ti( 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 S1v4-(FnGH9xvX|H*Y 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 diff --git a/ChibiOS_2.0.8/docs/html/group__mailboxes_gaff65b97bfdbf9144e9727a100a9be93a_cgraph.png b/ChibiOS_2.0.8/docs/html/group__mailboxes_gaff65b97bfdbf9144e9727a100a9be93a_cgraph.png deleted file mode 100644 index b73e8e2178b492521a244ff248e6ae0e7f7e2d34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1012 zcmeAS@N?(olHy`uVBq!ia0y~yU^u|Qz@W;(#=yWJ68g-Hfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM`mBCZFXQ7?`Jdx;TbZ%z1mq-a|T2hW*3)_dX?pYdemmXvA7u z>~489aci`vCYS83wNuPAWm{ieaqTM8EYX(Gp4xO}Wk5&QQs=@A2@9ROS^pndWRkmh zt>F(Vm5J#!=Z`!&xBE$*Jjc#Ed%wSP|5R80UbUa0$MBd$a*yG$8SWF({@XG<{LFJC zbskehiB*SG#oy1tkuLv=ZI3P2yu+?=>;C=xbcb~&=H~1S#(eF8tL+#987}*=KN1RL zU|+?&i^V}j=-`D56LJN2hAJ{j9aL#>T;5#J+48QTa9*InGqX7iXD(YX&RAZ^WZ?gp zC1GA#Hq(q{kyq<3oA}$Dx*EDQ@O{(48&3l??4-GlvhUjUZi|&blSZ*m-Hl4UpF2dK zTP^x4btP|ErqWCwxoX|X{VPws4hdQoCnGoMyup!BhVa^b&;HJvccUjUVA0~mf8U-u zRdDU#1s1=59jk7ot4812ro;GzZ_TSctNw<~_0QY=CGVmG=S8QMY^RRb*48iW4?g&t zshFWOb=L+49{H#X`)X1{OY^SQ&8+dc8fNI|wf@1b;+3yXr|Niecndj{nohS~l4U*9 zM{e)5`A^MGU7Q=7xB1`?h6avYrwhJHclg*Y+c(^35lGUSD)m1ib@x(Pue!Cjrdb#5 zv~FCrZ{1&|*uR%{nQl(yP$}P&Wxep7-l0z&5A<`&n0I))@HZX2p(PlXlkdMZb@R&m zTTRyA44WFL+LSjZ@43KAt-iC2ch>CweeLkFWoB>BKYzab(a*Tzhd(C?R9v}P$-Fb> z*Yfk%>r#u0YYr}Z&=nG1biK4hHd^R`j&PVcU+A}Q)6%1(5BJaQV?N-jB(-*lf*@Z@ zLp;aF()$0_W##rY=hC*Xdi&>Tn`F9V+YMXGb)Bl50akU}7dcP=9k$|<*{YS(PwLd3 zOqnJV?7q1|QGXqquF5@yPpdU$MLCXC^E%f|`p((Ntn{Pxfc{|tP6mB*vt#!kS1i|7V_462 z_VPY?8}=34P9p0<|92e8R?IM(daIh@e SeI5e?1B0ilpUXO@geCw9&CenL diff --git a/ChibiOS_2.0.8/docs/html/group__memcore.html b/ChibiOS_2.0.8/docs/html/group__memcore.html deleted file mode 100644 index 2bd053a..0000000 --- a/ChibiOS_2.0.8/docs/html/group__memcore.html +++ /dev/null @@ -1,315 +0,0 @@ - - -ChibiOS/RT: Core Memory Manager - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - -
    -
    - -
    -

    Core Memory Manager
    - -[Memory Management] -

    -
    -
    - -

    -Collaboration diagram for Core Memory Manager:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Core Memory Manager related APIs and services.

    -

    Operation mode

    -

    The core memory manager is a simplified allocator that only allows to allocate memory blocks without the possibility to free them.
    - This allocator is meant as a memory blocks provider for the other allocators such as:

    -
      -
    • C-Runtime allocator (through a compiler specific adapter module).
    • -
    • Heap allocator (see Heaps).
    • -
    • Memory pools allocator (see Memory Pools).
    • -
    -

    By having a centralized memory provider the various allocators can coexist and share the main memory.
    - This allocator, alone, is also useful for very simple applications that just require a simple way to get memory blocks.
    - In order to use the core memory manager APIs the CH_USE_MEMCORE option must be enabled in chconf.h.

    - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define MEM_ALIGN_MASK   (sizeof(stkalign_t) - 1)
     Alignment mask constant.
    #define MEM_ALIGN_SIZE(p)   (((size_t)(p) + MEM_ALIGN_MASK) & ~MEM_ALIGN_MASK)
     Alignment helper macro.
    #define MEM_IS_ALIGNED(p)   (((size_t)(p) & MEM_ALIGN_MASK) == 0)
     Returns whatever a pointer or memory size is aligned to the type align_t.

    -Typedefs

    typedef void *(* memgetfunc_t )(size_t size)
     Memory get function.

    -Functions

    void core_init (void)
     Low level memory manager initialization.
    void * chCoreAlloc (size_t size)
     Allocates a memory block.
    void * chCoreAllocI (size_t size)
     Allocates a memory block.
    size_t chCoreStatus (void)
     Core memory status.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define MEM_ALIGN_MASK   (sizeof(stkalign_t) - 1)
    -
    -
    - -

    Alignment mask constant.

    - -

    Definition at line 48 of file chmemcore.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define MEM_ALIGN_SIZE( p )    (((size_t)(p) + MEM_ALIGN_MASK) & ~MEM_ALIGN_MASK)
    -
    -
    - -

    Alignment helper macro.

    - -

    Definition at line 53 of file chmemcore.h.

    - -

    Referenced by chCoreAllocI(), chHeapAlloc(), chPoolInit(), and core_init().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define MEM_IS_ALIGNED( p )    (((size_t)(p) & MEM_ALIGN_MASK) == 0)
    -
    -
    - -

    Returns whatever a pointer or memory size is aligned to the type align_t.

    - -

    Definition at line 59 of file chmemcore.h.

    - -

    Referenced by chHeapInit(), and chPoolFreeI().

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef void*(* memgetfunc_t)(size_t size)
    -
    -
    - -

    Memory get function.

    -
    Note:
    This type must be assignment compatible with the chMemAlloc() function.
    - -

    Definition at line 43 of file chmemcore.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void core_init (void  ) 
    -
    -
    - -

    Low level memory manager initialization.

    -
    Note:
    Internal use only.
    - -

    Definition at line 62 of file chmemcore.c.

    - -

    References CH_MEMCORE_SIZE, and MEM_ALIGN_SIZE.

    - -

    Referenced by chSysInit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void * chCoreAlloc (size_t  size ) 
    -
    -
    - -

    Allocates a memory block.

    -

    The size of the returned block is aligned to the alignment type stkalign_t so it is not possible to allocate less than sizeof(stkalign_t).

    -
    Parameters:
    - - -
    [in] size the size of the block to be allocated
    -
    -
    -
    Returns:
    A pointer to the allocated memory block.
    -
    Return values:
    - - -
    NULL allocation failed, core memory exhausted.
    -
    -
    - -

    Definition at line 88 of file chmemcore.c.

    - -

    References chCoreAllocI(), chSysLock, and chSysUnlock.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void * chCoreAllocI (size_t  size ) 
    -
    -
    - -

    Allocates a memory block.

    -

    The size of the returned block is aligned to the alignment type align_t so it is not possible to allocate less than sizeof(align_t).

    -
    Parameters:
    - - -
    [in] size the size of the block to be allocated.
    -
    -
    -
    Returns:
    A pointer to the allocated memory block.
    -
    Return values:
    - - -
    NULL allocation failed, core memory exhausted.
    -
    -
    - -

    Definition at line 107 of file chmemcore.c.

    - -

    References MEM_ALIGN_SIZE.

    - -

    Referenced by chCoreAlloc().

    - -
    -
    - -
    -
    - - - - - - - - - -
    size_t chCoreStatus (void  ) 
    -
    -
    - -

    Core memory status.

    -
    Returns:
    The size, in bytes, of the free core memory.
    - -

    Definition at line 123 of file chmemcore.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__memcore.png b/ChibiOS_2.0.8/docs/html/group__memcore.png deleted file mode 100644 index 4a67c9413dc8c15a2cc29af1d68ddffebaaf43c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1256 zcmeAS@N?(olHy`uVBq!ia0y~yV6|H*Y zfq{X&#M9T6{T89XB-BNlmT-i#I7 z(_J2@l)|YcdT`OY2__v)S0-<2?V2uAbz*5qz#sOiOU)ZEBUu~b zJHvj)9f`XoK3!U$DxPro+&MloGqY2A&0br!ZEL%G_wJGFVqEK5J64GBSS!uqMkBTz z@=J?}Yty=t(fs-R<+t~uUY4-MZ@=AqcSS1oe*Y}~xliE#zjq!xSL`ylo4q%VzrDTv)N{SxAALo$ zwj4~m;VaB5CK##qq3Fd5Ce6&fFZ_?hZ4XVJc5Bh;$6IgSWBd5c=+mrLfnAaDvAJ~$ zEO{O~3uHN@oD>)WPXE96)RW8XY6AcC_SY`geY4VoyrbePv$lx7Sha7{6|vZLn`J}i zEAr1yoGxOw>YzA(!;*j*Vo7Sux3(Nx@^sa=RRzTxc}rfMdU4Kab?K*d0tc5(NebrB z@$58qxc0yLwio+dlT5~iRdc@BOcAkr_~6>h>|2{MOJ5qSHO$<(YOmIvocd`dsc&z( z&gAnEte#W8LH%v)(_H!d*6YXbEc)xNdHgm**wQ021y(RS{3yP6lzm?B zVcVn&~Xphvg5`C2b81Xsp7`X?t8~r2{qDz)=k`*)@4~0+@Bf>&_ufv0mKPj~eoLo_Z|$1+ z$XnsZ=`h=6e*XWj?0emL_NUI=uchDD#LQ8-_%?cZ>^0lS$;Nxv`H3(deS7mL|ML>| z)i0~m7S*QOx}5!GQ8RC=-rcW8tdCNPOy>D~lViN`u7vG9Ls2ltPSvFmVod2ltN4@E zCwKF^FW#-btM;c-ordV#_Dhx@7u-I#gf0B_%#LqUzY3VXe*9sl_9{lfd#sDI%54ib z9-lG2-}I>JpZf3FZ_B>hI^;3_5OE0hn$tdgPRl&o>^;vsZ+PDOsxtHRUe(}rSymPn z9Pg_>U7Dd?bncvKyp!ra_ZQB-Y~Rkw+aI%Q_?!3rn)&nR2iqC;O$dr%4iIjtuMKA1 z#}a#Msg~=^r5ir0hSaP)JZtgd`Ty8HFdS%p`cytH*UaC3qR|fC4)as%dN2JHC~1%{ zJri^zkkM`NZuP~2@0fSge|`0R?Zp*8x4fCvQDX4s#Er@7-}_FlYxEF*9@~+jXYdAv zSTc9P3+9T55XF#HGk^3wcv#R8mAfqelvD7M+Weeb@c}tIHQM%setpkbR+lcZYRb&r h_oj9rfYuB7OMVXbrln|pW?*1o@O1TaS?83{1OVDVU_Sr= diff --git a/ChibiOS_2.0.8/docs/html/group__memcore_ga5394bda5b809ecf6b80b041b6b9ebaf4_cgraph.png b/ChibiOS_2.0.8/docs/html/group__memcore_ga5394bda5b809ecf6b80b041b6b9ebaf4_cgraph.png deleted file mode 100644 index 651c0cc25e99c5f0c5cb3261df182f6a2fb068cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1041 zcmeAS@N?(olHy`uVBq!ia0y~yV0gg5z@W;(#=yW3&GGaZ0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj-jkj1PA*FfecSba4!+nDh3|L2r>j8TJqFqfI|4B`NOCUhemg zS?Qo$jM$?31AJ90y{{~cSQuPkupxWtTxXLji}+%#PiVPJZ_<;j>|8X(P?3Y#`R?D+ zh~>u$?^#*@PP@PB_um5v`)2;#EC2ep)$Ylg83du=s9)x>e8v-3HcwP5yIIC;`oPK{ zTk1gedxzc64mdI#c6N3yG{3TC+VttU+Y=5cG$b;d&o#fq(#E*w3;!#oju^f6j~_oq zSZAfp^kJJkdGfZ~28oOZR=ic4)xg55_UbOH;NRm6LXk(1ut+w;=9_Oe{=U05?(^>C z!m~F!f>!>?u$nvHbNO*Sro*{nQ5<`iUfkAK>@&99A96!{YueQ{a~U_^)ZuD9wEt|0 z!ku4hMNDJ`OFAEPb?ot4`m0W5^3Rw1_Wfaf@n2x^JeH?+cg~h@-2GM9x?AnmfA%%g z$`^`rwH~N_w?mpw|NVEzt$P|j^}T#%a&h;{U%W~3Pv@8WD>c4eDwMbE^3V55M&Vi~ zA3b~ah28mch4?P}2alwuHze=5&wlk2n^&lX9#^bv@Yj9=A&2?}e-u}W*aUAqbY)$d zUGP`wi5ymZ`{pqVZ5QU;IoYeXmMO)LrMvI*2k$GFEOr$%9}+`S%q(fmTvaK)>ZI#x z>&?F^4-1K?2^X95Tb6#<8qZQb_0ZlFqyKyd-dwwO=4H~y>+_|$w9oF(UW!n9U1b`> zHSeVXCWor`pF3AqQXZex@?FmUu*{N>pJ!Hxurcs_`4)Hd-n`BCu1&Mrzw_sV;x)3@ zmIY}@J^XpSOSR$n+`>l{oy)6VX6&jnEi1pSsMK3veq=(>tEi60E-b&jJgpbpd;g}! zX6xR+X=@|?$ePw5>DVXe#`I$UEs3;+ujGWcg-x-1{9^H>q(bRFuV^&z7+7)XG2M(uZ|I?j|3))@76~Q|mI%h3Iej@W-?zR$CKjn+(=U#+Xl`0xF%4fQ(9w6wLicctll=erD_@;YvDo;v@ysr-Y> ze)c7+wsfDE7qp7`fS7{6%afIlefDm>8=;-d5Zw_pL)i0-wcm9vgTPI9`3)O%7yVeY z{P~&3SFd))-ky6Qktcz>V2*oqU-E8lu0y*OJ9Ls5I^p4D;Sp?LN=Iz`)??>gTe~DWM4f D|BdO; diff --git a/ChibiOS_2.0.8/docs/html/group__memory.html b/ChibiOS_2.0.8/docs/html/group__memory.html deleted file mode 100644 index 83f3573..0000000 --- a/ChibiOS_2.0.8/docs/html/group__memory.html +++ /dev/null @@ -1,62 +0,0 @@ - - -ChibiOS/RT: Memory Management - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Memory Management
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for Memory Management:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Memory Management services.

    - - - - - -

    -Modules

     Core Memory Manager
     Heaps
     Memory Pools
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__memory.png b/ChibiOS_2.0.8/docs/html/group__memory.png deleted file mode 100644 index 77c16bf0b9c5dafd051a94d1c255796eca5759c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4653 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 - -ChibiOS/RT: Memory Streams - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Memory Streams
    - -[Various] -

    -
    -
    - -

    Memory Streams. -More...

    - -

    -Collaboration diagram for Memory Streams:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Memory Streams.

    -

    This module allows to use a memory area (RAM or ROM) using a Data Streams interface.

    - - - - - - - - - - - - -

    -Data Structures

    struct  MemStreamVMT
     MemStream virtual methods table. More...
    struct  MemoryStream
     Memory stream object. More...

    -Defines

    #define _memory_stream_data
     RamStream specific data.

    -Functions

    void msObjectInit (MemoryStream *msp, uint8_t *buffer, size_t size, size_t eos)
     Memory stream object initialization.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define _memory_stream_data
    -
    -
    -Value:
    _base_sequential_stream_data                                              \
    -  /* Pointer to the stream buffer.*/                                        \
    -  uint8_t               *buffer;                                            \
    -  /* Size of the stream.*/                                                  \
    -  size_t                size;                                               \
    -  /* Current end of stream.*/                                               \
    -  size_t                eos;                                                \
    -  /* Current read offset.*/                                                 \
    -  size_t                offset;
    -
    -

    RamStream specific data.

    - -

    Definition at line 41 of file memstreams.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void msObjectInit (MemoryStream msp,
    uint8_t buffer,
    size_t  size,
    size_t  eos 
    )
    -
    -
    - -

    Memory stream object initialization.

    -
    Parameters:
    - - - - - -
    [out] msp pointer to the MemoryStream object to be initialized
    [in] buffer pointer to the memory buffer for the memory stream
    [in] size total size of the memory stream buffer
    [in] eos initial End Of Stream offset. Normally you need to put this to zero for RAM buffers or equal to size for ROM streams.
    -
    -
    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__memory__streams.png b/ChibiOS_2.0.8/docs/html/group__memory__streams.png deleted file mode 100644 index 2b2df22ddf550878ba475049e857be723b8ad00a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1079 zcmeAS@N?(olHy`uVBq!ia0y~yV0gg5z@W;(#=yW3&GGaZ0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj(ml-&gB0FfiZrba4!+nDh3|{%qky8MY74XS-=HS`hIyt4q&S zKsLr@!XjG{b;0Rf+eFmw=4f|hN56P*?NXr3+9o}|Yr0EZV_lEfA2cidD4uk5OQr0q zmtUXWyAxY9{rfB%c@1B^@B7}Hzy1B;p6X5p7buuwWtbz+c;WgPC!+_Z4UxB9O&0J= z|2IFi?7+{d=5K1G4lp#NXNFBtWMuyDMj~ei4~Yl6c31s;{c(G@wcngukL;GasY*Ir_Ig%-=8E3RjeBoz{C(#6_qT6eN$t~K zl*eEZxOP<+$G^5*<(jw0N<5<8KQV4yajoTA_?8WSZ5+3Rld%k3Teok*`Epr?f}`2L>}wR8x#CL7`;V?Q6@B{2XVKr(moeJ!w4}E9D?i`! zb={-HNqh+xUM=_5s`1+WwpVg#TfJTFtiKb^zpva}{e5Qg+_~=8T?=AZM3*jN6$tn~ z_0VmJ(&dkypZ{JO%PY8zsq#|AN9CM1OOBcBoe}K+dqw^F6|=T7y=w1BRJ`*2;$hKi z>1&)XY~8wkb^N|PHQak-UcKCTdH1$3S(cOtmc5CIAzpFo*PJ1ytVIcJ}K z2+*uyW>~uI&)4Q_Tb+L#N_pG+qi5ENX{Re#ABYxYUnwk$6FC{nzUpmJ%Y?2ne)$6o z*B&~irm}u!cvfBY?#`K~b#FJs3g*W0Brx06&52{(khPod)~*UZv;@3XJdusTCO=GZ z+SW7W3;zA(^Ex%*=uy|l$y=Fr@E*8)Wc9)jUq8QFdW{`Wpb`C#;Yi%&LfOkNdl?uQ O7(8A5T-G@yGywp43;^-~ diff --git a/ChibiOS_2.0.8/docs/html/group__messages.html b/ChibiOS_2.0.8/docs/html/group__messages.html deleted file mode 100644 index 9ef8d4e..0000000 --- a/ChibiOS_2.0.8/docs/html/group__messages.html +++ /dev/null @@ -1,296 +0,0 @@ - - -ChibiOS/RT: Synchronous Messages - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Synchronous Messages
    - -[Synchronization] -

    -
    -
    - -

    -Collaboration diagram for Synchronous Messages:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Synchronous inter-thread messages APIs and services.

    -

    Operation Mode

    -

    Synchronous messages are an easy to use and fast IPC mechanism, threads can both act as message servers and/or message clients, the mechanism allows data to be carried in both directions. Note that messages are not copied between the client and server threads but just a pointer passed so the exchange is very time efficient.
    - Messages are usually processed in FIFO order but it is possible to process them in priority order by enabling the CH_USE_MESSAGES_PRIORITY option in chconf.h.
    - Applications do not need to allocate buffers for synchronous message queues, the mechanism just requires two extra pointers in the Thread structure (the message queue header).
    - In order to use the Messages APIs the CH_USE_MESSAGES option must be enabled in chconf.h.

    - - - - - - - - - - - - - - - -

    -Defines

    #define chMsgIsPendingI(tp)   ((tp)->p_msgqueue.p_next != (Thread *)&(tp)->p_msgqueue)
     Evaluates to TRUE if the thread has pending messages.
    #define chMsgGetI(tp)   ((tp)->p_msgqueue.p_next->p_msg)
     Returns the first message in the queue.

    -Functions

    msg_t chMsgSend (Thread *tp, msg_t msg)
     Sends a message to the specified thread.
    msg_t chMsgWait (void)
     Suspends the thread and waits for an incoming message.
    msg_t chMsgGet (void)
     Returns the next message in the queue.
    void chMsgRelease (msg_t msg)
     Releases the thread waiting on top of the messages queue.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - -
    #define chMsgIsPendingI( tp )    ((tp)->p_msgqueue.p_next != (Thread *)&(tp)->p_msgqueue)
    -
    -
    - -

    Evaluates to TRUE if the thread has pending messages.

    - -

    Definition at line 43 of file chmsg.h.

    - -

    Referenced by chMsgGet(), chMsgRelease(), chMsgWait(), and chibios_rt::BaseThread::IsPendingMessage().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chMsgGetI( tp )    ((tp)->p_msgqueue.p_next->p_msg)
    -
    -
    - -

    Returns the first message in the queue.

    - -

    Definition at line 49 of file chmsg.h.

    - -

    Referenced by chMsgGet(), and chMsgWait().

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t chMsgSend (Thread tp,
    msg_t  msg 
    )
    -
    -
    - -

    Sends a message to the specified thread.

    -

    The sender is stopped until the receiver executes a chMsgRelease()after receiving the message.

    -
    Parameters:
    - - - -
    [in] tp the pointer to the thread
    [in] msg the message
    -
    -
    -
    Returns:
    The answer message from chMsgRelease().
    - -

    Definition at line 70 of file chmsg.c.

    - -

    References chDbgCheck, chSchGoSleepS(), chSchReadyI(), chSysLock, chSysUnlock, Thread::p_msg, Thread::p_msgqueue, Thread::p_state, Thread::p_u, Thread::rdymsg, THD_STATE_SNDMSG, THD_STATE_WTMSG, and Thread::wtobjp.

    - -

    Referenced by chibios_rt::BaseThread::SendMessage().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    msg_t chMsgWait (void  ) 
    -
    -
    - -

    Suspends the thread and waits for an incoming message.

    -
    Note:
    You can assume that the data contained in the message is stable until you invoke chMsgRelease() because the sending thread is suspended until then.
    -
    Returns:
    The pointer to the message structure. Note, it is always the message associated to the thread on the top of the messages queue.
    - -

    Definition at line 97 of file chmsg.c.

    - -

    References chMsgGetI, chMsgIsPendingI, chSchGoSleepS(), chSysLock, chSysUnlock, currp, and THD_STATE_WTMSG.

    - -

    Referenced by chibios_rt::BaseThread::WaitMessage().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    msg_t chMsgGet (void  ) 
    -
    -
    - -

    Returns the next message in the queue.

    -
    Note:
    You can assume that the data pointed by the message is stable until you invoke chMsgRelease() because the sending thread is suspended until then. Always remember that the message data is not copied between the sender and the receiver, just a pointer is passed.
    -
    Returns:
    The pointer to the message structure. Note, it is always the message associated to the thread on the top of the messages queue.
    -
    Return values:
    - - -
    NULL if the queue is empty.
    -
    -
    - -

    Definition at line 125 of file chmsg.c.

    - -

    References chMsgGetI, chMsgIsPendingI, chSysLock, chSysUnlock, and currp.

    - -

    Referenced by chibios_rt::BaseThread::GetMessage().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chMsgRelease (msg_t  msg ) 
    -
    -
    - -

    Releases the thread waiting on top of the messages queue.

    -
    Note:
    You can call this function only if there is a message already in the queue else the result will be unpredictable (a crash most likely). Exiting from the chMsgWait() ensures you have at least one message in the queue so it is not a big deal.
    - The condition is only tested in debug mode in order to make this code as fast as possible.
    -
    Parameters:
    - - -
    [in] msg the message returned to the message sender
    -
    -
    - -

    Definition at line 145 of file chmsg.c.

    - -

    References chDbgAssert, chMsgIsPendingI, chSchWakeupS(), chSysLock, chSysUnlock, currp, and fifo_remove().

    - -

    Referenced by chibios_rt::BaseThread::ReleaseMessage().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__messages.png b/ChibiOS_2.0.8/docs/html/group__messages.png deleted file mode 100644 index 8c368047e3816f239e9440c84bad4c40add89da8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1233 zcmeAS@N?(olHy`uVBq!ia0y~yVAN$`U{K{?V_;wqKfd3bfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM`mBCZFXQ7+8uuT^vIy=DfXoK3gVLg8jpLw|VF!Q0#ZsdwC(EvK?%1?#TUaSq2=m%7?%A_vFMPdcQn8}asaDtSjx03d zXzInF$H%uSB|Yn0J?*LChtTA*vZs&Jil5GVzrHT0)GTuA?YIB`iU{u4%h`GDrA$m` z)oEv`uFd%&ywcL{dPOqLpJTqyI(t~Gp)xc-&Sm|d?T@BwZ9cW?Zrqtn0Q&!Jta(Kft2&n?UH_WgfbeW1Yc z>jyD~&8uE?XB-awQ)o16L*nG^x8Kg2d1M=>To}*cN9_H=+v;yUzWJ%|w7zCE&-KTi z^JcI3xF<$*?E@D-W5wK~Iyp9{H~qX}Cbv~@)r(`L(>?p=p1QjFbpD(F{+^AU-H#0y zXUt>$ayigy)ua`RgRZ_!D_;7^o;k?&*Xsul@|M-+%AQv#EbJ>}z0osw%j%NaJA1nJ z2+B{{dfH3q_R<~6Q|}dit+M}D`S8%xy{D(=?<;+I>Fd6ZJ<3g!1E-7nZwqPn?>cLA z@ALEh`}rS~U3&XC?nUJ8H7XlVC+t4bWxamMbJ=U1x2!^<&*<#m=p$^uTIpRT>+zT) zr;03Rrq-MOlYN_gZ+&p`{1x7w>PO2AemsBi;lsuJ1B;K&oS7f@dC##u9eOJt{d(D3 zUdzomA&CTb(byJrZci6@)*Kglq-oRcGHrw~Va;Of&rjXJk*TjQb*DY-Cr;6%oojrW; zpPd|YMa|n=zpnrNcV9njuHZy(ohacqFE4*pW^fOE?)XH={%IpdK2m+OYae5$I` zM73wu8jJUx@5@km{awzC!KPp?&)j@zY3b1A$Qj_5}zyS-<^PWh~3U|?YIboFyt I=akR{0EHS_82|tP diff --git a/ChibiOS_2.0.8/docs/html/group__messages_ga19a54b3b4b0e3677c47d650a3be3c7aa_cgraph.png b/ChibiOS_2.0.8/docs/html/group__messages_ga19a54b3b4b0e3677c47d650a3be3c7aa_cgraph.png deleted file mode 100644 index 508ad6211cf6a0944e41c12237e9b0a5f679c812..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4487 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 diff --git a/ChibiOS_2.0.8/docs/html/group__messages_ga29a48a438e97dc47cb798a84e13764cb_cgraph.png b/ChibiOS_2.0.8/docs/html/group__messages_ga29a48a438e97dc47cb798a84e13764cb_cgraph.png deleted file mode 100644 index 99463667cbe968082b60be087cdeca163be850e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4401 zcmeAS@N?(olHy`uVBq!ia0y~yU@T@}U?}8ZV_;xVXLZ(PU|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my6}O$!B>627$|-E{-7;bKc&q?THSpV*Bvi_M4BBRDzI4lJ(}m zQ*0YeB&)-&W^Hd>XV$dsc2?^Zd$zS{TSeDy)1G>@VfpQ*r~uQDsk^jPRiuyPE#_if z>7qSh71!1*Z4pQAr8&DrH>%I{X~DJ#W9qvZRazwuWGCBNIc{%v(`|KC4L zE>^rdzH`0s?~fmMUbkZqLX7?b%a9+cZz8MF((&uO9z*h6 zy+!Oj3%}(5)VydW?&R|K?Lj~B4d+%~=lXW0v!jaP@SKhn>;~w}^=XQWzPdd8_jAUp z)iz7AVwLBwEZm*6qL|XFu&9rZx1Q_Xv8Md?@}kJK z-?Xl0U)>b-_E+pZqi<(AS4f9`@6!JNZP(lFd$-=cdRl7j>D9;Frn5IC`nkMrthkex zR=@sh9n;=jeQw`5_qgwCOZ0QOBC~y7neD>fgT-g&bX;q8tKQPfmb=>aS=8_9wcJ~# zpPOeXSi1O?BG3NEkK%5JZ&Q~$EyWwY{_ozb{AYGQj~S>h%6lqSmZ$i3>)QFbf8IRb zE@%Jv*FxUS24^}~#9#fj;Nq^s2I@-pg*v|kW*7Ez{9~MOdDSnu2Xmq#ENV7h-fEf{ z+g@(kW+`auu)gzzoM2@{XfMYi2bPTyzqlHVl}@ZUrL(|zRZ&{u$7`DpOnF;!^>0I> zpUb{T?fHPl$tas2aYrI+)gUaPE&`|F=`ujc%})>h{A z<;#BEI|g!w%NvsfB~!D`Rdq=kRRN;qoh}Jy6wLCryl;z1x}P*dcw+uUkCbDDR~Q4d zFPy%@sIq9)`nY|6`tx=4>kA&7nri-eq4>?^63<+oWPN}4<-*t3lZ=k_t(c{nhY4TOO4?S;xUqa+4mU=&fH%Xd@_19Z-*7|iPyv>@XD!;5&x_8A3H6@hJiasV9B1~~Baa?6mcM#a#vcT&_(X@+Bqfhdg_T_um9teDBn8h#b?2xk-CVeE;mqLW%fg!V z)FyhQGyZYaEC1lm@zHwMNqf7*l~RZIa7%9X+@Ak`@1hPD#x+b9yb7zk))>yx6q^_u zWwqtTzOH3F{&_;B+Y2`=zuH@p@#5d%!-xCT8uR%}c1b9`s^j_mZpnkKw?dfHrIeIj zG47ewdMGIS*+;ki?z`^kJUe^l-lI_G1;)#+TZ#oHNIbiemzQ|ct6|sKuQ$$gJ4-0u zdzTz2pFAU2AnR+->gTZ~k4-=3?cH|ADR9-a-*30>Uis))>Zhv~Tb?$trS679e{8i=RIXtK7+KDCGzB--rkDe+eY5hI8`Ff~r-0A4O z`(1pKX9TOW)?T`po3V7NRMWgf+cT5bTzOuRsl>WAZi1Q6map4Hr|15e$B;W^e%!9x zW_!}+-)gcg&I&DE@JsUEhg~7-FK&DF_VLzrVZ6QXUYG81>vO$g)Mm+gPiL2Mj;UP4)2k*SG2}^8=HF zH15_$TpSsUo*WGdGpuzjVRl8Ux*axG*x_A;)x*R z-&W^BU6joKAN%uX^M9F=*ei41%{J@X#d~;9`_acQRT*yA*snzZHG5*LF-T`CQG z8O%BsFeHGohRR~Cn;Bas*w+8s8KZsl&7GNYTgBcpHFVeo*S&cXojEz`@z<7G&N=xT zMA!N6TJYx9*Wb}$;pR(vE-u+RNyt&?LTy8ih@+!uIztM>USF4QtCJ2dj}By?(6MTt zRPU_!VPDoA3;gwe`Mb*p9%pGub;s^IE#bQ=O9+(Z84f??)m!Q1b|lU9jLCwT2M;cs zxjB9Ly5E_$V&3*Di}V?kH1@9!o~kY;mS@Z4BWhcgyl%@o39tTU|BpPMGfb@h9TE0# z2@mS8dbM(S!+}FJI-820r`x@@u+my|GH8ADWQMY-=0D;?EfteCuTo3y@yowyR8sUd zw^YgSXK85lnm;Ykiy1;f(-~$)L|FWAyXsiZ_#^4{)?ki0o(D17ygdB=dAee%szF>o zPxUc0C@H*Od25ZKS~9%ME4BVu@k`QSAM=aeKBt$bH2?4`^jFNuujD)+VRNYCRTbv} z?F^GM?{~l7_fdU*jnS4>RagK0{oSZ`s0LJ=pX%!AxG`mwCzDmzrRb-=8eePfgA7rXM#!eGdYU~))#@BoidH2B3OdBG^gl0hc5l?Y?a_N>^)aQ+BkQc!ZuJzLEo69d zmEYlZhD{AA*RA*(?3f>%o}ah+OCSG*>mj*Si4Q;c96hzQyoTrVvnzkTKVI6IYo6NH zu75vJ=hX^BkEre`9X)H-yg1Ly75drO!MNd1d&j?k&`r{2cd9PEzkT0}n|u3S@&4&; zhM|FLB*dTJPz$X%dh)3OcY@e~)7jqT@BR2=_v>jUzwy}F{82UZr`Uqo3~P35R~2Lk zI2!Jvbh-1$;(A_}|0dI`p9M+3^N3HL(Vp@8T4%Ib-jv#>!oiw?zAK-7x8yVHJ`i}6 z{g}eyuKgRsHc#Z(wDZovY4_afFNFwt%x5hyl$!c+=g#ImuNrE!_rLg`{d0NFDHWmc zeM_?b@4dE9$tYmoSKaKn`Nxtb2YY*;m(1p_F_#c(t31HQR+fNQ?xw>`d=7mzFXwZqzL|Ce}|0-*`U4Rbr)xR;-w`}^Q|CyRTx_N=@5d3RCL8!p+` zGsD|cN+q^mns(htDeLaFwb7FjYg`-JPaQ~`a9to`MtIxC=ncDc^Ox;CwJnQv+jZ`v zw?0ML{!DwN`bs>P@6*=%L0@+lRX*M3@OMJ_>zBLV#@E_x|CaqWympV<>l_b-#CO+D zujBFEetT+S%+K9n)mL-ZuDr87j(_hiw*AKy7Hun*jw+14cjiO){l9yg_Rmb5AJE?E zB$>97=VV&d_Nx!yTyuMBHuZQR_t!M%oxdbpt{AU!zVf>I_iWDFugV4EY=1hGzP+lG zxA$k-_s0dCf>$rD`}qArpYW-cb9L35;~w9ObJmEvZE~raFFRW4m89dBd3)PBn(WT; zHhwv?x6P(0Z++E|qi@UB*8aH?wmw$rmDN>sP3gCP&34x>{=GFS{qC{5Yr6A&-yA#5 zKl|@Bmqm65@_loB-`8X(Mac6gEt)6t#PjUB?duNBdFboH`{Lw*NmSUw+7s|O?55DXcpC9+4q}JuiY;d%TZQN7y zsonhUmiNjI?x9Zw9m?DmvmSZ;(v=}n&~jlGDA^YmpI+Xm-0FAT*X6bJVVi_&bv-rz ze%$`~=c9D^W)-3Pdt;YO&^m81C1mS&=1(ggCm6`x-@>&dogpPuHJiuinwT*+ce{RD z?CTF7p7=5tn16p$bmO?vq5{J+w-?y_fB5l}|IO{}Wp94$JTI9Xyvj(a>3sK%_~5BC zJXktis^UV8pElS(v?!}8EPS1lskI{^qPsfe>sA*f+j*yD{|Gw$Sz##H+MRgM(4DKh zdj^|9?9P(k-`vYx7JEc>2MSIWxfsuGkl7>Ias0Ek!>=i;(p*%sbvH3H7bWGryU9O$ zyVE@HuL^5Lz`St`}19{0e0cEc+_3>IB4ozc&*!+c87ufyLN z_lSOT%-e4(D=#r&N{3pgAy)#+f#(5S&r=zeGo0+mI2PrTf2TwEspNG=hL06hYzOX6 z&0V!ffr<4)$;KVO_I8WU-yco;@!{j~iF+HCgqTKJJ?si(h(0}gPOz&Ri+bosccpjl&xHhvI6@0}@6DU0hc(8B z3$ztZv0Hccxr%8k{~WuG#m|pyc_o>_E3GE|2ghRi;zAe$L+3K4Bqct4Ae}Iy zy*1HK_aXCg|D%sz=C69RqGP^4<7#FPm(cjVB`=S%cOA7kY*WEgoW*H>?*4L@2_lW> zPs^wV-Ex<^vF)wmowD1_@%OjAeRwwUn!8JH;*9T_*-yn8d3LP{V$fcC?+0(C!~L+M z+}GFrH4h6fUfz3i%Szj+LKEfpoZI8y`Qp}h&h=;8k{DwcQleOvGuSfUxO~hdZS}h3 z|FH}+`|YZ-SKc)ho@m}yDZlIQx8r$iVSOtf@hBLtD*N_q_Se7sb{2asEfdP}T^{;Z z^NL$qJaZ^A~MPoDn=Dt99<}x2HJs?;hGUaoe@L@S@wxKIPk= zzFEC&-4TQ3WkUV8^KM^xooRk+TDbqds^3+Kv45K$e|2)W62?>fDr{@hj+xt5-Tr8m z`O5T()0L|gb1k<9Pf+J;=DFqOH*FX1-3{S>vd8CHwyvzYu_*4rPTt~<d79H;?-Ng`fzoJ*iv`apfUwr;#7Zh;i c{y+Z3T8B6uudF}7z`(%Z>FVdQ&MBb@0JGSKF#rGn diff --git a/ChibiOS_2.0.8/docs/html/group__messages_gae68fefbf9d0404bbf56ae354961fae41_cgraph.png b/ChibiOS_2.0.8/docs/html/group__messages_gae68fefbf9d0404bbf56ae354961fae41_cgraph.png deleted file mode 100644 index f98e9e535e0d07cfaa27eb670e63b9cb762c4f4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3041 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 diff --git a/ChibiOS_2.0.8/docs/html/group__mutexes.html b/ChibiOS_2.0.8/docs/html/group__mutexes.html deleted file mode 100644 index d1f7913..0000000 --- a/ChibiOS_2.0.8/docs/html/group__mutexes.html +++ /dev/null @@ -1,521 +0,0 @@ - - -ChibiOS/RT: Mutexes - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Mutexes
    - -[Synchronization] -

    -
    -
    - -

    -Collaboration diagram for Mutexes:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Mutexes related APIs and services.

    -

    Operation mode

    -

    A mutex is a threads synchronization object that can be in two distinct states:

    -
      -
    • Not owned.
    • -
    • Owned by a thread.
    • -
    -

    Operations defined for mutexes:

    -
      -
    • Lock: The mutex is checked, if the mutex is not owned by some other thread then it is associated to the locking thread else the thread is queued on the mutex in a list ordered by priority.
    • -
    • Unlock: The mutex is released by the owner and the highest priority thread waiting in the queue, if any, is resumed and made owner of the mutex.
    • -
    -

    In order to use the Mutexes APIs the CH_USE_MUTEXES option must be enabled in chconf.h.

    -

    Constraints

    -

    In ChibiOS/RT the Unlock operations are always performed in lock-reverse order. The unlock API does not even have a parameter, the mutex to unlock is selected from an internal, per-thread, stack of owned mutexes. This both improves the performance and is required for an efficient implementation of the priority inheritance mechanism.

    -

    The priority inversion problem

    -

    The mutexes in ChibiOS/RT implements the full priority inheritance mechanism in order handle the priority inversion problem.
    - When a thread is queued on a mutex, any thread, directly or indirectly, holding the mutex gains the same priority of the waiting thread (if their priority was not already equal or higher). The mechanism works with any number of nested mutexes and any number of involved threads. The algorithm complexity (worst case) is N with N equal to the number of nested mutexes.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  Mutex
     Mutex structure. More...

    -Defines

    #define _MUTEX_DATA(name)   {_THREADSQUEUE_DATA(name.m_queue), NULL, NULL}
     Data part of a static mutex initializer.
    #define MUTEX_DECL(name)   Mutex name = _MUTEX_DATA(name)
     Static mutex initializer.
    #define chMtxQueueNotEmptyS(mp)   notempty(&(mp)->m_queue)
     Returns TRUE if the mutex queue contains at least a waiting thread.

    -Typedefs

    typedef struct Mutex Mutex
     Mutex structure.

    -Functions

    void chMtxInit (Mutex *mp)
     Initializes s Mutex structure.
    void chMtxLock (Mutex *mp)
     Locks the specified mutex.
    void chMtxLockS (Mutex *mp)
     Locks the specified mutex.
    bool_t chMtxTryLock (Mutex *mp)
     Tries to lock a mutex.
    bool_t chMtxTryLockS (Mutex *mp)
     Tries to lock a mutex.
    MutexchMtxUnlock (void)
     Unlocks the next owned mutex in reverse lock order.
    MutexchMtxUnlockS (void)
     Unlocks the next owned mutex in reverse lock order.
    void chMtxUnlockAll (void)
     Unlocks all the mutexes owned by the invoking thread.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - -
    #define _MUTEX_DATA( name )    {_THREADSQUEUE_DATA(name.m_queue), NULL, NULL}
    -
    -
    - -

    Data part of a static mutex initializer.

    -

    This macro should be used when statically initializing a mutex that is part of a bigger structure.

    -
    Parameters:
    - - -
    [in] name the name of the mutex variable
    -
    -
    - -

    Definition at line 74 of file chmtx.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define MUTEX_DECL( name )    Mutex name = _MUTEX_DATA(name)
    -
    -
    - -

    Static mutex initializer.

    -

    Statically initialized mutexes require no explicit initialization using chMtxInit().

    -
    Parameters:
    - - -
    [in] name the name of the mutex variable
    -
    -
    - -

    Definition at line 83 of file chmtx.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chMtxQueueNotEmptyS( mp )    notempty(&(mp)->m_queue)
    -
    -
    - -

    Returns TRUE if the mutex queue contains at least a waiting thread.

    - -

    Definition at line 89 of file chmtx.h.

    - -

    Referenced by chMtxUnlock(), chMtxUnlockAll(), and chMtxUnlockS().

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef struct Mutex Mutex
    -
    -
    - -

    Mutex structure.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void chMtxInit (Mutex mp ) 
    -
    -
    - -

    Initializes s Mutex structure.

    -
    Parameters:
    - - -
    [out] mp pointer to a Mutex structure
    -
    -
    - -

    Definition at line 81 of file chmtx.c.

    - -

    References chDbgCheck, Mutex::m_owner, Mutex::m_queue, and queue_init.

    - -

    Referenced by chHeapInit(), heap_init(), chibios_rt::Mutex::Mutex(), and spiObjectInit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chMtxLock (Mutex mp ) 
    -
    -
    - -

    Locks the specified mutex.

    -
    Parameters:
    - - -
    [in] mp pointer to the Mutex structure
    -
    -
    - -

    Definition at line 94 of file chmtx.c.

    - -

    References chMtxLockS(), chSysLock, and chSysUnlock.

    - -

    Referenced by chibios_rt::Mutex::Lock(), and spiAcquireBus().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chMtxLockS (Mutex mp ) 
    -
    -
    - -

    Locks the specified mutex.

    -
    Parameters:
    - - -
    [in] mp pointer to the Mutex structure
    -
    -
    - -

    Definition at line 108 of file chmtx.c.

    - -

    References chDbgAssert, chDbgCheck, chSchGoSleepS(), chSchReadyI(), dequeue(), Mutex::m_next, Mutex::m_owner, Mutex::m_queue, Thread::p_mtxlist, Thread::p_prio, Thread::p_state, Thread::p_u, prio_insert(), THD_STATE_READY, THD_STATE_SNDMSG, THD_STATE_WTCOND, THD_STATE_WTMTX, THD_STATE_WTSEM, and Thread::wtobjp.

    - -

    Referenced by chCondWaitS(), chCondWaitTimeoutS(), and chMtxLock().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t chMtxTryLock (Mutex mp ) 
    -
    -
    - -

    Tries to lock a mutex.

    -

    This function does not have any overhead related to the priority inheritance mechanism because it does not try to enter a sleep state on the mutex.

    -
    Parameters:
    - - -
    [in] mp pointer to the Mutex structure
    -
    -
    -
    Return values:
    - - - -
    TRUE if the mutex was successfully acquired
    FALSE if the lock attempt failed.
    -
    -
    - -

    Definition at line 178 of file chmtx.c.

    - -

    References chMtxTryLockS(), chSysLock, and chSysUnlock.

    - -

    Referenced by chibios_rt::Mutex::TryLock().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t chMtxTryLockS (Mutex mp ) 
    -
    -
    - -

    Tries to lock a mutex.

    -

    This function does not have any overhead related to the priority inheritance mechanism because it does not try to enter a sleep state on the mutex.

    -
    Parameters:
    - - -
    [in] mp pointer to the Mutex structure
    -
    -
    -
    Return values:
    - - - -
    TRUE if the mutex was successfully acquired
    FALSE if the lock attempt failed.
    -
    -
    - -

    Definition at line 199 of file chmtx.c.

    - -

    References chDbgCheck, currp, Mutex::m_next, and Mutex::m_owner.

    - -

    Referenced by chMtxTryLock().

    - -
    -
    - -
    -
    - - - - - - - - - -
    Mutex * chMtxUnlock (void  ) 
    -
    -
    - -

    Unlocks the next owned mutex in reverse lock order.

    -
    Returns:
    The pointer to the unlocked mutex.
    - -

    Definition at line 216 of file chmtx.c.

    - -

    References chDbgAssert, chMtxQueueNotEmptyS, chSchWakeupS(), chSysLock, chSysUnlock, fifo_remove(), Mutex::m_next, Mutex::m_owner, Mutex::m_queue, Thread::p_mtxlist, ThreadsQueue::p_next, Thread::p_prio, Thread::p_realprio, and RDY_OK.

    - -

    Referenced by spiReleaseBus(), and chibios_rt::Mutex::Unlock().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    Mutex * chMtxUnlockS (void  ) 
    -
    -
    - -

    Unlocks the next owned mutex in reverse lock order.

    -
    Note:
    This function does not reschedule internally.
    -
    Returns:
    The pointer to the unlocked mutex.
    - -

    Definition at line 270 of file chmtx.c.

    - -

    References chDbgAssert, chMtxQueueNotEmptyS, chSchReadyI(), fifo_remove(), Mutex::m_next, Mutex::m_owner, Mutex::m_queue, Thread::p_mtxlist, ThreadsQueue::p_next, Thread::p_prio, and Thread::p_realprio.

    - -

    Referenced by chCondWaitS(), and chCondWaitTimeoutS().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chMtxUnlockAll (void  ) 
    -
    -
    - -

    Unlocks all the mutexes owned by the invoking thread.

    -

    This function is MUCH MORE efficient than releasing the mutexes one by one and not just because the call overhead, this function does not have any overhead related to the priority inheritance mechanism.

    - -

    Definition at line 322 of file chmtx.c.

    - -

    References chMtxQueueNotEmptyS, chSchReadyI(), chSchRescheduleS(), chSysLock, chSysUnlock, fifo_remove(), Mutex::m_next, Mutex::m_owner, Mutex::m_queue, Thread::p_mtxlist, Thread::p_prio, and Thread::p_realprio.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__mutexes.png b/ChibiOS_2.0.8/docs/html/group__mutexes.png deleted file mode 100644 index 31c0debd1d7194f3008eb9299b8f6c76f10f9e8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1073 zcmeAS@N?(olHy`uVBq!ia0y~yV0gg5z@W;(#=yW3&GGaZ0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj;wc0cm>}7?>}6x;TbZ%z1lfzrS#z4BLn2xeFB*xhZPqemwr* z*)t~}gN20#M_gj1ny>CKoUvfX4yK8*sVVM4vLz1Nmzg9Me6zps!Prp6?ahU@eS85$ zbKY0){dRBn_G!;23*7pCZ{PQ+)${jVU#;ul0tE|&XMIa&a9ga?A{E8FAz^n1gIl4& zdOxkFA75W8kz<^|{6Xi4XfTNG3{beFgG(x+ue6!?YebLvmP(!R$$n}Jb{0q zT-LowZ<%~%&YZb1*6GQkj}~05O-0cOjILQW%!LKEB1^7?07qD|fc# z6?}L)GbHO*p_b|2)QTUj$I5Kio=Ds5yY=_odwF~AwPmy&*`NPv^{rbIJEhkCw_YDN z_m$@K$B%=Q_(R??c`!Jv4eO59Tbp__N9<_Q#~XkBlC>JNzIwjoOZvO7`f9=Vz^&HX zcOIX<&MZ_m?(51h!@CuiF3P3cXMFl-rcYK*ef*Q}-(37S=CEz(FX+#X{=l`oc=qPI zH=ot539n!OZGn%h#`7gPX+Q3s{zDJ{yj^a;fPYq2%=&+Ejl8Fx94xZGZLL1<`jW5K>wa%r z=O3^tA*#N2y2q09ygW7)sx382s(MU|m`<=TSR8WK+jU@7)6&=PdFpHrENl6gvohN9 zU-+s}U89+2Hb+lAb+01)`pwS`dzAaX)d}o#TOx8lc;(9vTseoXU7LO4`^}t)lE0;^ zQvwp>S_-pDzkW8}=GpsA^rzR3jT-|zRNAin`kf#1`sGd;<^orakfmR?zw+!{-tb4V zXeRH})Ayr(nY83BE&5bl=vKPxrRla+{qw742_DOKNT1!gG0HME_vyz=Uw8kD`2ITj z`)&TX<*VK1S!hjtdw=(C`Ta~MmS4Vno$;rDKtF@Z(kY>eEoMC%XZ+c-^XIqrPAev( zs#$OBbVFiW3b(HgGfZDl^0)M@+6y(0zxDTL|1oh{K4;Rc1r~CfH!fTlZ{E7X*F#gS z@lwrzWRg&KqmET{U+ z+oj9$$>EJ%z-!At#h>% zGjs9N4AU5O`1$wmxNv*-|Knx8OO7*?ZTR~2`tEJn3i*FbSSGsiC?Ig0cw!NQoogsZ z<*OO*Gi?9#oe^FdqLsP5l68ahf$GOsFLaujo2Tz)QGx=i%zsQxkIQu><}6sqz`(%Z M>FVdQ&MBb@09#rCd;kCd diff --git a/ChibiOS_2.0.8/docs/html/group__mutexes_ga2d6350c2d147d1165c359f30798205f5_cgraph.png b/ChibiOS_2.0.8/docs/html/group__mutexes_ga2d6350c2d147d1165c359f30798205f5_cgraph.png deleted file mode 100644 index 0a0ba0702da0eb3b4955618550b6ca681f8d26cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7922 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 D=1g}o diff --git a/ChibiOS_2.0.8/docs/html/group__mutexes_ga853b4ced43d22fb5d82678dd2f0aba75_cgraph.png b/ChibiOS_2.0.8/docs/html/group__mutexes_ga853b4ced43d22fb5d82678dd2f0aba75_cgraph.png deleted file mode 100644 index 587a72615320c70b770798f6aa435ac9c778c492..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8344 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 diff --git a/ChibiOS_2.0.8/docs/html/group__mutexes_gae9ae07165126c9f6c0ce0b17bdb53669_cgraph.png b/ChibiOS_2.0.8/docs/html/group__mutexes_gae9ae07165126c9f6c0ce0b17bdb53669_cgraph.png deleted file mode 100644 index f4607058281569e6640d2a8185db9c2cae0c13cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4400 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 diff --git a/ChibiOS_2.0.8/docs/html/group__mutexes_gafa06b82e3496c44eb7bf31d9f1b655ba_cgraph.png b/ChibiOS_2.0.8/docs/html/group__mutexes_gafa06b82e3496c44eb7bf31d9f1b655ba_cgraph.png deleted file mode 100644 index 7188c22fd4315ca46366958bf8fd18ee0651f1b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6789 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 diff --git a/ChibiOS_2.0.8/docs/html/group__pools.html b/ChibiOS_2.0.8/docs/html/group__pools.html deleted file mode 100644 index 61a6678..0000000 --- a/ChibiOS_2.0.8/docs/html/group__pools.html +++ /dev/null @@ -1,412 +0,0 @@ - - -ChibiOS/RT: Memory Pools - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -


    - - -
    - -
    -

    Memory Pools
    - -[Memory Management] -

    -
    -
    - -

    -Collaboration diagram for Memory Pools:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Memory Pools related APIs and services.

    -

    Operation mode

    -

    The Memory Pools APIs allow to allocate/free fixed size objects in constant time and reliably without memory fragmentation problems.
    - In order to use the memory pools APIs the CH_USE_MEMPOOLS option must be enabled in chconf.h.

    - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  pool_header
     Memory pool free object header. More...
    struct  MemoryPool
     Memory pool descriptor. More...

    -Defines

    #define _MEMORYPOOL_DATA(name, size, provider)   {NULL, MEM_ALIGN_SIZE(size), provider}
     Data part of a static memory pool initializer.
    #define MEMORYPOOL_DECL(name, size, provider)   MemoryPool name = _MEMORYPOOL_DATA(name, size, provider)
     Static memory pool initializer in hungry mode.

    -Functions

    void chPoolInit (MemoryPool *mp, size_t size, memgetfunc_t provider)
     Initializes an empty memory pool.
    void * chPoolAllocI (MemoryPool *mp)
     Allocates an object from a memory pool.
    void * chPoolAlloc (MemoryPool *mp)
     Allocates an object from a memory pool.
    void chPoolFreeI (MemoryPool *mp, void *objp)
     Releases (or adds) an object into (to) a memory pool.
    void chPoolFree (MemoryPool *mp, void *objp)
     Releases (or adds) an object into (to) a memory pool.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define _MEMORYPOOL_DATA( name,
     size,
     provider 
    )   {NULL, MEM_ALIGN_SIZE(size), provider}
    -
    -
    - -

    Data part of a static memory pool initializer.

    -

    This macro should be used when statically initializing a memory pool that is part of a bigger structure.

    -
    Parameters:
    - - - - -
    [in] name the name of the memory pool variable
    [in] size size of the memory pool contained objects
    [in] provider memory provider function for the memory pool
    -
    -
    - -

    Definition at line 68 of file chmempools.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define MEMORYPOOL_DECL( name,
     size,
     provider 
    )   MemoryPool name = _MEMORYPOOL_DATA(name, size, provider)
    -
    -
    - -

    Static memory pool initializer in hungry mode.

    -

    Statically initialized memory pools require no explicit initialization using chPoolInit().

    -
    Parameters:
    - - - - -
    [in] name the name of the memory pool variable
    [in] size size of the memory pool contained objects
    [in] provider memory provider function for the memory pool or NULL if the pool is not allowed to grow automatically
    -
    -
    - -

    Definition at line 81 of file chmempools.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void chPoolInit (MemoryPool mp,
    size_t  size,
    memgetfunc_t  provider 
    )
    -
    -
    - -

    Initializes an empty memory pool.

    -
    Note:
    The size is internally aligned to be a multiple of the align_t type size.
    -
    Parameters:
    - - - - -
    [out] mp pointer to a MemoryPool structure
    [in] size the size of the objects contained in this memory pool, the minimum accepted size is the size of a pointer to void.
    [in] provider memory provider function for the memory pool or NULL if the pool is not allowed to grow automatically
    -
    -
    - -

    Definition at line 58 of file chmempools.c.

    - -

    References chDbgCheck, MEM_ALIGN_SIZE, MemoryPool::mp_next, MemoryPool::mp_object_size, and MemoryPool::mp_provider.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void * chPoolAllocI (MemoryPool mp ) 
    -
    -
    - -

    Allocates an object from a memory pool.

    -
    Parameters:
    - - -
    [in] mp pointer to a MemoryPool structure
    -
    -
    -
    Returns:
    The pointer to the allocated object.
    -
    Return values:
    - - -
    NULL if pool is empty.
    -
    -
    - -

    Definition at line 74 of file chmempools.c.

    - -

    References chDbgCheck, MemoryPool::mp_next, MemoryPool::mp_object_size, MemoryPool::mp_provider, and pool_header::ph_next.

    - -

    Referenced by chPoolAlloc().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void * chPoolAlloc (MemoryPool mp ) 
    -
    -
    - -

    Allocates an object from a memory pool.

    -
    Parameters:
    - - -
    [in] mp pointer to a MemoryPool structure
    -
    -
    -
    Returns:
    The pointer to the allocated object.
    -
    Return values:
    - - -
    NULL if pool is empty.
    -
    -
    - -

    Definition at line 95 of file chmempools.c.

    - -

    References chPoolAllocI(), chSysLock, and chSysUnlock.

    - -

    Referenced by chThdCreateFromMemoryPool().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void chPoolFreeI (MemoryPool mp,
    void *  objp 
    )
    -
    -
    - -

    Releases (or adds) an object into (to) a memory pool.

    -
    Note:
    The object is assumed to be of the right size for the specified memory pool.
    -
    -The object is assumed to be memory aligned to the size of align_t type.
    -
    Parameters:
    - - - -
    [in] mp pointer to a MemoryPool structure
    [in] objp the pointer to the object to be released or added
    -
    -
    - -

    Definition at line 114 of file chmempools.c.

    - -

    References chDbgCheck, MEM_IS_ALIGNED, MemoryPool::mp_next, and pool_header::ph_next.

    - -

    Referenced by chPoolFree().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void chPoolFree (MemoryPool mp,
    void *  objp 
    )
    -
    -
    - -

    Releases (or adds) an object into (to) a memory pool.

    -
    Note:
    The object is assumed to be of the right size for the specified memory pool.
    -
    Parameters:
    - - - -
    [in] mp pointer to a MemoryPool structure
    [in] objp the pointer to the object to be released or added
    -
    -
    - -

    Definition at line 132 of file chmempools.c.

    - -

    References chPoolFreeI(), chSysLock, and chSysUnlock.

    - -

    Referenced by chThdRelease().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__pools.png b/ChibiOS_2.0.8/docs/html/group__pools.png deleted file mode 100644 index ba8c9a738f0c3048caf405a475b549104a7fbcf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1170 zcmeAS@N?(olHy`uVBq!ia0y~yU=(IxU{K{?V_;xN{L8zCfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM|)N#)mr@7+6d^T^vIy=DfXoK3h0bg8jq$$=d=I7m0SC-SR4a z!}8Wxt|r+JQzpN7wxL()k#9t1Ie)dz-Z!~NVEbMEFW&9xjyMpYq-0p`@~C;hG(BX6(@oz8e9JwbcRUAOS*)l@dzs!H6=Q^xEc6# zoZx8V6qHQV@-cb(Ny*2lS1sayU0Qm*?W4-<@Yi3j+KY+RMQyR2$Gh+S@~AkL``_8^ zKGn=Elqk!z&^`K~`$0_3CC?QXJ-fTJ+jrgF%cd|r)ZRSAkeOlC)Xuqgf9>lp+ihEL z-}K?Hrth)IMm}zwX6sm{asIo1rI1&CYwQPOr~cWi41IGCK7Dx0$DaM+SJMv>)85-J zu?$^b{hT4Qba$2D1m{&Rx_V0YYx)?({PMk%|Dxc-k=CFqWe3k6%)P|odPU;!H1%2= z{>j#^A;rhv-g(H@owX}aapKa%P1hv0+T{J+@nOS98I_gVx*zvQdpo4MhK4iD6g`+% zuNJgSp)>1U-DckGZz~);goKu*i4`XIaIM(GXyz4YJbA$y>wPVG&vTcpxaoNB>*3ca zwR~&j`(!OPRD8LyQNB+2qV}psoeAO-{yNW$n^2Sch_8B+Swg|?#LZK7NPRM^GtjyH zcH3p+$$>mRyVrVE+o_)ZDK304^U9w;=X>|=s>!ou!Q+5VTdA_G_Z1%z!>%~b5~Yvx^?egHRpk-TW{UY^8Cs%iNCbbm$NT5 z`Ay+jpF@}bE;&1)bhl1Z@>1It&+6Uv_PMd1+r33CtgYwvzrSz)liMM?uI{b1;9tQ5 zstm_NH);#nd#?=nQn|eN_x&ZwkttsSbZRDF>5q+9zDN1$Eq;t;Tn#p1{2pUYzw+C=qm`?zV(=~hN0rYp@p7O>*C+>-sWE{ zR`owL;lPo7ZVFA>zN;7Vi)WpBQ271q?CAQu+`GHNR@crHKFAtc*>z9xg4_?Oxp&lb zJ=`?UrrPbeyk*^$#51eI%k39`=P#Uh_H68WU;p!S*tJ$S)J2!%PF~~V$TUUUCxhqS zzP;Z$57aVzw|zhT@zqxk{avrS|H*Y zfq{X&#M9T6{T8}3lX1R)?$JYd#GZHBgQn6|qSczTQKD2b(NesWk<(;x^}$=GwK~2@n@LP`%rQ`EzLDU7y?3nZRwYM#MirL(IGvgz7roS)bY`S)Teb?*y zyX70|KHsgJo3iZ`f9plI&yR8#VwJbe-afxGWy*NTXiZkBCnmk zdiA!wvfg>i!oxF8EHrJ>TxdF@ShUdp+q3MtSq{@5Pklf2YRtn~?>UX_-%WAiU*OmM zz-Mn?{LepID<>YibIk3jZh?J|{;|2MJE}Kzr`dS)h3^ZWcIZB@Oj@17LX#QQtVRAW z!frbj?fEn}*|#o>bJqNrPtRpeI|^DZ7twoCG;>pG@AVdEX<`+kT1bC3f+wcl%;2H!Grst^07H^;-4$^770E*8)8>w$;8m!mra$k1oym=E5^? z*>)qZlg#$jTCJ-%s-_&8p7r&2SMGkhxYf1U+jsWFBuPFfoo+mDddIuyr*F-s>#1}8 zoOxR;S|Y?D;~^=t3y7z*SLd}L@Zy04XA zUi7MH(xm_Qo3|SUYls~CVY1i$^5x4KV%?h=^ju<3&u9DnP--2c2jdEcPd=L2X}P&u zIc(Nif0I1?F8HBmMC+qvKTZDHKeyj>J|SgRM~9HZE3e4)43$@ISHC#>{QTtoi`M1X zCpMSreiaNT-?qIv{>HbnMOUuA3D4P}mwcOjI~)7!=Gn8i?{kag-gt1=g_PW4;hc3d z9$fwcNr_3#f|5trl#M*9Coc}sO3dikZ~Mx9Wk}bq7K2{5SO=!edjFu?30tFhgM)*Q nX)U@@B~;4j0tF(*`x%+I>a33DDa9}_Ffe$!`njxgN@xNAC*$bu diff --git a/ChibiOS_2.0.8/docs/html/group__pools_gab86190d70893fe708c75570af6720bd5_cgraph.png b/ChibiOS_2.0.8/docs/html/group__pools_gab86190d70893fe708c75570af6720bd5_cgraph.png deleted file mode 100644 index e93150df8916e14533f9b0c605a9c70cb553c362..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmeAS@N?(olHy`uVBq!ia0y~yV7Se|z@W;(#=yXET6&Hq0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj-jkj1PA*Ffh;Yba4!+nDh3|*=%7)3APXE*US<$wnj}ZEPA^rM^> zdm78#dZG5V!ZL=MPu85% ze-(cD7hKz>EgdDIeviSx#K7P|rkUfG4I3C3Hrp)^?3ZJ3W=Q+v_oPQEXzv0ovm=iS zdwP2-C;K(Xibo5~`H`}0mI{N4fAvA5IUIqPlQs%U9!gR+YB}nb!qMG(LcqUUSFBs} z_S@O#eq6ov>gDS-FW=Rbm zep&MCew~h(wsqNR5%=&tn|-`aGZ|>8vK3qIdGSi>C&PnK?{3rWyMDbn@chf0ZcUXd z-P&_Bj$Rb?x6VD9CU2^h|K(ElR*?oRzpX#=X1rQ1$k7<)aEGPf_lJOIN)s=dH+ZaF z8#{yj7`N1}4fVgm@4X1R_)Z0?wr5(>Y8lTr$5+*=7p^*bedhXiby7Yr_uA>V>`_*I z=c=@Ow^Pp&hKZ+A)a(x5owBk>WuyG+Z*z~V6uZwG{CCcSlO~tynpfq8>AS58l8FsI z$sigfspGhlaxZE!&R^^2N8O#_rm>(a`dFU{zer z@=MzR^i}qEFQ1JP;j%uFw%@Py@b#Lwuljo2jn7Tz{brw_sJLO)`TYMk zZdP6o*T~teYjT-iBjoSPd3o1-y*Ex>misMvZeht$^Nao)D;oCh{c`DE+^y@OpD(`f z=%4bc+Lhx;znke!)(4>*HRAJgeDoe>DCW*@Ugve$?Dt0LRTjG*&3^a%N}vDap5u=> z*ZnGgw`lgH1Q#|t;suFue8uuxas)G%kGj`q}(YnC<6biQr5H1sv^&mVty0^;oN z@7p}lFv!b8F@WJnG{ebl+YbGH`t;@fI`wNg5jh9HyK?wE`MmJv*|W=k*QsAV6OqFx z$`$)(=IPwn$oTpHo|fyCv>X)+(AIuz$zZwv^Me07Ud=xtASOLgQO8WlIU>iUO+$Wy zj-KA4{qz4{zI9~E|9X#5%YAvCbN;yMZojp? - -ChibiOS/RT: Ports - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Ports

    -
    -
    - -

    -Collaboration diagram for Ports:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    This section describes the technical details of the various supported ChibiOS/RT ports.

    - - - - - - - - -

    -Modules

     MegaAVR
     ARM7TDMI
     ARM Cortex-Mx
     PowerPC
     MSP430
     STM8
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__ports.png b/ChibiOS_2.0.8/docs/html/group__ports.png deleted file mode 100644 index 22f633d0124d99c079febf13c518a05897768d0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10514 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 diff --git a/ChibiOS_2.0.8/docs/html/group__registry.html b/ChibiOS_2.0.8/docs/html/group__registry.html deleted file mode 100644 index 186cb55..0000000 --- a/ChibiOS_2.0.8/docs/html/group__registry.html +++ /dev/null @@ -1,229 +0,0 @@ - - -ChibiOS/RT: Registry - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Registry
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for Registry:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Threads Registry related APIs and services.

    -

    Operation mode

    -

    The Threads Registry is a double linked list that holds all the active threads in the system.
    - Operations defined for the registry:

    -
      -
    • First, returns the first, in creation order, active thread in the system.
    • -
    • Next, returns the next, in creation order, active thread in the system.
    • -
    -

    The registry is meant to be mainly a debug feature, as example, using the registry a debugger can enumerate the active threads in any given moment or the shell can print the active threads and their state.
    - Another possible use is for centralized threads memory management, terminating threads can pulse an event source and an event handler can perform a scansion of the registry in order to recover the memory.
    - In order to use the threads registry the CH_USE_REGISTRY option must be enabled in chconf.h.

    - - - - - - - - - - - -

    -Defines

    #define REG_REMOVE(tp)
     Removes a thread from the registry list.
    #define REG_INSERT(tp)
     Adds a thread to the registry list.

    -Functions

    ThreadchRegFirstThread (void)
     Returns the first thread in the system.
    ThreadchRegNextThread (Thread *tp)
     Returns the thread next to the specified one.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - -
    #define REG_REMOVE( tp ) 
    -
    -
    -Value:
    {                                                    \
    -  (tp)->p_older->p_newer = (tp)->p_newer;                                   \
    -  (tp)->p_newer->p_older = (tp)->p_older;                                   \
    -}
    -
    -

    Removes a thread from the registry list.

    -
    Note:
    This macro is not meant for use in application code.
    -
    Parameters:
    - - -
    [in] tp thread to remove from the registry
    -
    -
    - -

    Definition at line 46 of file chregistry.h.

    - -

    Referenced by chThdExit(), and chThdRelease().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define REG_INSERT( tp ) 
    -
    -
    -Value:
    {                                                    \
    -  (tp)->p_newer = (Thread *)&rlist;                                         \
    -  (tp)->p_older = rlist.r_older;                                            \
    -  (tp)->p_older->p_newer = rlist.r_older = (tp);                            \
    -}
    -
    -

    Adds a thread to the registry list.

    -
    Note:
    This macro is not meant for use in application code.
    -
    Parameters:
    - - -
    [in] tp thread to add to the registry
    -
    -
    - -

    Definition at line 57 of file chregistry.h.

    - -

    Referenced by init_thread().

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    Thread * chRegFirstThread (void  ) 
    -
    -
    - -

    Returns the first thread in the system.

    -

    Returns the most ancient thread in the system, usually this is the main thread unless it terminated.

    -
    Note:
    A reference is added to the returned thread in order to make sure it status is not lost.
    -
    -This function cannot return NULL because there is always at least one thread in the system.
    -
    Returns:
    A reference to the first thread.
    - -

    Definition at line 70 of file chregistry.c.

    - -

    References chSysLock, chSysUnlock, Thread::p_refs, ReadyList::r_newer, and rlist.

    - -
    -
    - -
    -
    - - - - - - - - - -
    Thread * chRegNextThread (Thread tp ) 
    -
    -
    - -

    Returns the thread next to the specified one.

    -

    The reference counter of the specified thread is decremented and the reference counter of the returned thread is incremented.

    -
    Parameters:
    - - -
    [in] tp pointer to the thread
    -
    -
    -
    Returns:
    A reference to the next thread.
    -
    Return values:
    - - -
    NULL if there is no next thread.
    -
    -
    - -

    Definition at line 91 of file chregistry.c.

    - -

    References chDbgAssert, chSysLock, chSysUnlock, chThdRelease(), Thread::p_newer, Thread::p_refs, and rlist.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__registry.png b/ChibiOS_2.0.8/docs/html/group__registry.png deleted file mode 100644 index 35bc4bd4c75806d304c596f7b0235fb72ec555b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 997 zcmeAS@N?(olHy`uVBq!ia0y~yVA#OGz@W;(#=yYvNG5q50|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj-jkj1PA*Ffg}!x;TbZ%z1m~y#M6{3HA@~HyaxK;Yi@gJN@8| z`~y$R98SYPy?-Y@u)mr(BSU0QMbM!@ex;-q1YlY(XnfrBSU|)o{B;~|Iq2?k}##lFF&K#cIEeDQ1F4WQ0)!crRX`L%ayk~>!5@c+7x3!?V@JHRIRcHNo z_4oh#=bm}k<4(%4f{hloOFqX~Jt^AhoZISj@bktwzpmY0H(8!>+a)=@SfiPpm#1>Y zvlrYqs1Qh4^jbhAZ&bv?lEd#cTkdAWRL{J<#`|hr+27j9e*IgQUl!gz>Ey@! zwu7!|H7UnjA1Lg)ZFNq1TZ~@$hoG(3@6DdRsxEK(vwwA;idn)~&q!r_-c>p~%YOMk zUI}lN$#1837@YD6Z#<=`6vEJDUiao%BCmI@%GSOkTT6>~Yh~p9TKVnr$@L7gnU~*M z_Q8oaC+y;J#n!SgTg&vGNPXMAJAWRn zoUdgQ*Zia;u*LDXexaY#T&9Xw@jCk|@86nLb^UVj&uW`{rVIi4g5PGmW|vTCp6PCT z<<;uBbLE@cHZFadX|i2;OXdE>Ju7y(#XI;noL#)3G^+5*2h&^o+sez$1GH+ZSfAK0 z4|=JXc8Bo=TSHlzmhi?;n-koYM$E})R^?B|GN5Dl@P-)E4`GwE(Dw|(Dg?HlS= z2hyUW_3N2uFdJOI{{2agH+QeWW7Y=ahhbtev5J>1wY(cdy_U|5XGmi_v+T0}@5Afd zZ%l5ld=(L2|JV49REsU=h7J>CynMI7&jYIj*1i4T-y)ovntHTsc5uU9TT7)avu4fW h+RXyX6o+Ql^K4Gu<(mFXgMop8!PC{xWt~$(699fv%ZmU2 diff --git a/ChibiOS_2.0.8/docs/html/group__registry_gaefff43a49fb7888a596319d67cf01dab_cgraph.png b/ChibiOS_2.0.8/docs/html/group__registry_gaefff43a49fb7888a596319d67cf01dab_cgraph.png deleted file mode 100644 index a60f6655e5374a109578a31f4819721ee5fa9dbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3091 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 diff --git a/ChibiOS_2.0.8/docs/html/group__scheduler.html b/ChibiOS_2.0.8/docs/html/group__scheduler.html deleted file mode 100644 index 36e34e3..0000000 --- a/ChibiOS_2.0.8/docs/html/group__scheduler.html +++ /dev/null @@ -1,820 +0,0 @@ - - -ChibiOS/RT: Scheduler - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - - -
    - -

    -Collaboration diagram for Scheduler:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    This module provides the default portable scheduler code, scheduler functions can be individually captured by the port layer in order to provide architecture optimized equivalents. When a function is captured its default code is not built into the OS image, the optimized version is included instead.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  ReadyList
     Ready list header. More...

    -Defines

    #define RDY_OK   0
     Default thread wakeup low level message.
    #define RDY_TIMEOUT   -1
     Low level message sent to a thread awakened by a timeout.
    #define RDY_RESET   -2
     Low level message sent to a thread awakened by a reset operation.
    #define NOPRIO   0
     Ready list header priority.
    #define IDLEPRIO   1
     Idle thread priority.
    #define LOWPRIO   2
     Lowest user priority.
    #define NORMALPRIO   64
     Normal user priority.
    #define HIGHPRIO   127
     Highest user priority.
    #define ABSPRIO   255
     Greatest possible priority.
    #define TIME_IMMEDIATE   ((systime_t)-1)
     Zero time specification for some syscalls with a timeout specification.
    #define TIME_INFINITE   ((systime_t)0)
     Infinite time specification for all the syscalls with a timeout specification.
    #define firstprio(rlp)   ((rlp)->p_next->p_prio)
     Returns the priority of the first thread on the given ready list.
    #define currp   rlist.r_current
     Current thread pointer access macro.
    #define setcurrp(tp)   (currp = (tp))
     Current thread pointer change macro.
    #define chSchIsRescRequiredI()   (firstprio(&rlist.r_queue) > currp->p_prio)
     Determines if the current thread must reschedule.
    #define chSchCanYieldS()   (firstprio(&rlist.r_queue) >= currp->p_prio)
     Determines if yielding is possible.
    #define chSchDoYieldS()
     Yields the time slot.

    -Functions

    void scheduler_init (void)
     Scheduler initialization.
    ThreadchSchReadyI (Thread *tp)
     Inserts a thread in the Ready List.
    void chSchGoSleepS (tstate_t newstate)
     Puts the current thread to sleep into the specified state.
    msg_t chSchGoSleepTimeoutS (tstate_t newstate, systime_t time)
     Puts the current thread to sleep into the specified state with timeout specification.
    void chSchWakeupS (Thread *ntp, msg_t msg)
     Wakes up a thread.
    void chSchDoRescheduleI (void)
     Switches to the first thread on the runnable queue.
    void chSchRescheduleS (void)
     Performs a reschedule if a higher priority thread is runnable.
    bool_t chSchIsRescRequiredExI (void)
     Evaluates if a reschedule is required.

    -Variables

    ReadyList rlist
     Ready list header.
    -

    Define Documentation

    - - - -
    -
    - - - - -
    #define RDY_TIMEOUT   -1
    -
    -
    - -

    Low level message sent to a thread awakened by a timeout.

    - -

    Definition at line 41 of file chschd.h.

    - -

    Referenced by adcWaitConversion(), chCondWaitTimeoutS(), macWaitReceiveDescriptor(), and macWaitTransmitDescriptor().

    - -
    -
    - -
    -
    - - - - -
    #define RDY_RESET   -2
    -
    -
    - -

    Low level message sent to a thread awakened by a reset operation.

    - -

    Definition at line 43 of file chschd.h.

    - -
    -
    - -
    -
    - - - - -
    #define NOPRIO   0
    -
    -
    - -

    Ready list header priority.

    - -

    Definition at line 45 of file chschd.h.

    - -
    -
    - -
    -
    - - - - -
    #define IDLEPRIO   1
    -
    -
    - -

    Idle thread priority.

    - -

    Definition at line 46 of file chschd.h.

    - -

    Referenced by chSysInit().

    - -
    -
    - -
    -
    - - - - -
    #define LOWPRIO   2
    -
    -
    - -

    Lowest user priority.

    - -

    Definition at line 47 of file chschd.h.

    - -

    Referenced by chThdSetPriority().

    - -
    -
    - -
    -
    - - - - -
    #define NORMALPRIO   64
    -
    -
    - -

    Normal user priority.

    - -

    Definition at line 48 of file chschd.h.

    - -

    Referenced by chSysInit().

    - -
    -
    - -
    -
    - - - - -
    #define HIGHPRIO   127
    -
    -
    - -

    Highest user priority.

    - -

    Definition at line 49 of file chschd.h.

    - -

    Referenced by chThdCreateI(), and chThdSetPriority().

    - -
    -
    - -
    -
    - - - - -
    #define ABSPRIO   255
    -
    -
    - -

    Greatest possible priority.

    - -

    Definition at line 50 of file chschd.h.

    - -
    -
    - -
    -
    - - - - -
    #define TIME_IMMEDIATE   ((systime_t)-1)
    -
    -
    - -

    Zero time specification for some syscalls with a timeout specification.

    -
    Note:
    Not all functions accept TIME_IMMEDIATE as timeout parameter, see the specific function documentation.
    - -

    Definition at line 58 of file chschd.h.

    - -

    Referenced by chEvtWaitAllTimeout(), chEvtWaitAnyTimeout(), chEvtWaitOneTimeout(), and chSemWaitTimeoutS().

    - -
    -
    - -
    -
    - - - - -
    #define TIME_INFINITE   ((systime_t)0)
    -
    -
    - -

    Infinite time specification for all the syscalls with a timeout specification.

    - -

    Definition at line 64 of file chschd.h.

    - -

    Referenced by chSchGoSleepTimeoutS(), chThdSleep(), chVTSetI(), macWaitReceiveDescriptor(), and macWaitTransmitDescriptor().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define firstprio( rlp )    ((rlp)->p_next->p_prio)
    -
    -
    - -

    Returns the priority of the first thread on the given ready list.

    - -

    Definition at line 69 of file chschd.h.

    - -

    Referenced by chSchIsRescRequiredExI().

    - -
    -
    - -
    -
    - - - - -
    #define currp   rlist.r_current
    -
    -
    - -

    Current thread pointer access macro.

    -
    Note:
    This macro is not meant to be used in the application code but only from within the kernel, use the chThdSelf() API instead.
    -
    -It is forbidden to use this macro in order to change the pointer (currp = something), use setcurrp() instead.
    - -

    Definition at line 111 of file chschd.h.

    - -

    Referenced by chCondWaitTimeoutS(), chDbgTrace(), chEvtClear(), chEvtPend(), chMsgGet(), chMsgRelease(), chMsgWait(), chMtxTryLockS(), chSchDoRescheduleI(), chSchGoSleepS(), chSchGoSleepTimeoutS(), chSchIsRescRequiredExI(), chSchWakeupS(), chSemWaitS(), chSemWaitTimeoutS(), chSysInit(), chSysTimerHandlerI(), chThdSetPriority(), chThdWait(), and chibios_rt::BaseThread::IsPendingMessage().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define setcurrp( tp )    (currp = (tp))
    -
    -
    - -

    Current thread pointer change macro.

    -
    Note:
    This macro is not meant to be used in the application code but only from within the kernel.
    - -

    Definition at line 123 of file chschd.h.

    - -

    Referenced by chSchDoRescheduleI(), chSchGoSleepS(), chSchWakeupS(), and chSysInit().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chSchIsRescRequiredI( )    (firstprio(&rlist.r_queue) > currp->p_prio)
    -
    -
    - -

    Determines if the current thread must reschedule.

    -

    This function returns TRUE if there is a ready thread with higher priority.

    - -

    Definition at line 164 of file chschd.h.

    - -

    Referenced by chSchRescheduleS().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chSchCanYieldS( )    (firstprio(&rlist.r_queue) >= currp->p_prio)
    -
    -
    - -

    Determines if yielding is possible.

    -

    This function returns TRUE if there is a ready thread with equal or higher priority.

    - -

    Definition at line 173 of file chschd.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chSchDoYieldS( ) 
    -
    -
    -Value:
    {                                                   \
    -  if (chSchCanYieldS())                                                     \
    -    chSchDoRescheduleI();                                                   \
    -}
    -
    -

    Yields the time slot.

    -

    Yields the CPU control to the next thread in the ready list with equal or higher priority, if any.

    - -

    Definition at line 182 of file chschd.h.

    - -

    Referenced by chThdYield().

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void scheduler_init (void  ) 
    -
    -
    - -

    Scheduler initialization.

    -
    Note:
    Internally invoked by the chSysInit(), not an API.
    - -

    Definition at line 53 of file chschd.c.

    - -

    References queue_init, ReadyList::r_newer, ReadyList::r_older, ReadyList::r_prio, and ReadyList::r_queue.

    - -

    Referenced by chSysInit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    Thread * chSchReadyI (Thread tp ) 
    -
    -
    - -

    Inserts a thread in the Ready List.

    -
    Note:
    The function does not reschedule, the chSchRescheduleS() should be called soon after.
    -
    Parameters:
    - - -
    [in] tp the Thread to be made ready
    -
    -
    -
    Returns:
    The Thread pointer.
    - -

    Definition at line 78 of file chschd.c.

    - -

    References Thread::p_next, Thread::p_state, and ReadyList::r_queue.

    - -

    Referenced by chCondBroadcastI(), chCondSignalI(), chEvtSignalI(), chMsgSend(), chMtxLockS(), chMtxUnlockAll(), chMtxUnlockS(), chSchDoRescheduleI(), chSchWakeupS(), chSemResetI(), chSemSignalI(), chSemSignalWait(), and chThdExit().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chSchGoSleepS (tstate_t  newstate ) 
    -
    -
    - -

    Puts the current thread to sleep into the specified state.

    -

    The thread goes into a sleeping state. The Threads States are described into threads.h.

    -
    Parameters:
    - - -
    [in] newstate the new thread state
    -
    -
    - -

    Definition at line 103 of file chschd.c.

    - -

    References chDbgTrace(), chSysSwitchI, currp, fifo_remove(), ReadyList::r_queue, and setcurrp.

    - -

    Referenced by chCondWaitS(), chEvtWaitAll(), chEvtWaitAny(), chEvtWaitOne(), chMsgSend(), chMsgWait(), chMtxLockS(), chSchGoSleepTimeoutS(), chSemSignalWait(), chSemWaitS(), chThdExit(), and chThdWait().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t chSchGoSleepTimeoutS (tstate_t  newstate,
    systime_t  time 
    )
    -
    -
    - -

    Puts the current thread to sleep into the specified state with timeout specification.

    -

    The thread goes into a sleeping state, if it is not awakened explicitly within the specified timeout then it is forcibly awakened with a RDY_TIMEOUT low level message. The Threads States are described into threads.h.

    -
    Parameters:
    - - - -
    [in] newstate the new thread state
    [in] time the number of ticks before the operation timeouts, the special values are handled as follow:

    -
      -
    • TIME_INFINITE the thread enters an infinite sleep state, this is equivalent to invoking chSchGoSleepS() but, of course, less efficient.
    • -
    • TIME_IMMEDIATE this value is accepted but interpreted as a normal time specification not as an immediate timeout specification.
    • -
    -
    -
    -
    -
    Returns:
    The wakeup message.
    -
    Return values:
    - - -
    RDY_TIMEOUT if a timeout occurs.
    -
    -
    - -

    Definition at line 167 of file chschd.c.

    - -

    References chSchGoSleepS(), chVTIsArmedI, chVTResetI(), chVTSetI(), currp, and TIME_INFINITE.

    - -

    Referenced by chCondWaitTimeoutS(), chEvtWaitAllTimeout(), chEvtWaitAnyTimeout(), chEvtWaitOneTimeout(), and chSemWaitTimeoutS().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void chSchWakeupS (Thread ntp,
    msg_t  msg 
    )
    -
    -
    - -

    Wakes up a thread.

    -

    The thread is inserted into the ready list or immediately made running depending on its relative priority compared to the current thread.

    -
    Note:
    It is equivalent to a chSchReadyI() followed by a chSchRescheduleS() but much more efficient.
    -
    -The function assumes that the current thread has the highest priority.
    -
    Parameters:
    - - - -
    [in] ntp the Thread to be made ready
    [in] msg message to the awakened thread
    -
    -
    - -

    Definition at line 197 of file chschd.c.

    - -

    References chDbgTrace(), chSchReadyI(), chSysSwitchI, currp, Thread::p_prio, Thread::p_state, Thread::p_u, Thread::rdymsg, and setcurrp.

    - -

    Referenced by chCondSignal(), chMsgRelease(), chMtxUnlock(), chSemSignal(), chThdCreateFromHeap(), chThdCreateFromMemoryPool(), chThdCreateStatic(), and chThdResume().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chSchDoRescheduleI (void  ) 
    -
    -
    - -

    Switches to the first thread on the runnable queue.

    -
    Note:
    It is intended to be called if chSchRescRequiredI() evaluates to TRUE.
    - -

    Definition at line 225 of file chschd.c.

    - -

    References chDbgTrace(), chSchReadyI(), chSysSwitchI, currp, fifo_remove(), ReadyList::r_queue, and setcurrp.

    - -

    Referenced by chSchRescheduleS().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chSchRescheduleS (void  ) 
    -
    -
    - -

    Performs a reschedule if a higher priority thread is runnable.

    -

    If a thread with a higher priority than the current thread is in the ready list then make the higher priority thread running.

    - -

    Definition at line 247 of file chschd.c.

    - -

    References chSchDoRescheduleI(), and chSchIsRescRequiredI.

    - -

    Referenced by adcStopConversion(), canSleep(), canStop(), canWakeup(), chCondBroadcast(), chEvtBroadcast(), chEvtSignal(), chMBFetchS(), chMBPostAheadS(), chMBPostS(), chMBReset(), chMtxUnlockAll(), chSemReset(), chSemSignalWait(), chThdSetPriority(), and sdStop().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    bool_t chSchIsRescRequiredExI (void  ) 
    -
    -
    - -

    Evaluates if a reschedule is required.

    -

    The decision is taken by comparing the relative priorities and depending on the state of the round robin timeout counter.

    -
    Note:
    This function is meant to be used in the timer interrupt handler where chVTDoTickI() is invoked.
    -
    Return values:
    - - - -
    TRUE if there is a thread that should go in running state.
    FALSE if a reschedule is not required.
    -
    -
    - -

    Definition at line 265 of file chschd.c.

    - -

    References currp, firstprio, and ReadyList::r_queue.

    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    ReadyList rlist
    -
    -
    - -

    Ready list header.

    - -

    Definition at line 46 of file chschd.c.

    - -

    Referenced by chRegFirstThread(), chRegNextThread(), and chSysTimerHandlerI().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__scheduler.png b/ChibiOS_2.0.8/docs/html/group__scheduler.png deleted file mode 100644 index b569694fe1e3f782593814ce78ef6f787f1e0f7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1593 zcmeAS@N?(olHy`uVBq!ia0y~yVEoF!z@W~-#=yWJcJg8)0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj%mX zNoj6^LQ?_D8xd*Y9o#d_np(a%E?P1p$&9i5 z_@kOHC-0oG`TS?z-P-*LJNMrFx%IrA_5J5FpC9*PKnG9Gv0U=^v@%O^pD@*WQk~>( zVcE*;H+(7YR&TUs@T`9PcI8Iv#+{qr|CZ)@74LED&3640H>NFlyV3fhpmiC$k+>A| zt|z~Fc4b`;yCPb(H*@E{oUHsitgmit@006Dxp(c}gTAMm3LHP2nyPJ8{Ort)yC+Vq zjox1J_SRO#*(L1r7d9`;KC>;k=&krCp*tKgk~@?c9&B3bKDWeN_uKyUX9KL?#V6z) z`F4eIfp%Vl$rJA3so60QxEd{P~p2(ABDLP}? zWYwVfvnlUXXHKnO>v1!ShMk8DOBpObvc3;+`0o4iI`5gMRzYd(4Qon8udIE3ak*9e zAG_N+mws2=FE-xcqc*+IUv0YhBcT($y}irjG=JXSc0K*?%ul|v#rYq5mVbX$`_gdZ z`-~N}m7kuicyGACnsXH`-{X&b~G`Dxc3u{by-z zhnd*fjMEt_l3%?O3BUX$;O<7@{5y|RpYH$kWcBTRt5?az+rOIg^!C?J-eq52Jbk__ zc<$6UKX0CyH_c?~nOFPu|KACdWmB(i`{fS|1uKn>hE2+TViH?WcDBJU!i_ZQAVF%d;ep|GMfm-O<+U?4>W0 zMB{(1GE07%tp36z(|+5gt1sPs=AT}FX`%Cbo9Yh_jPoP1&-*X`X6m^qEUjO6t$o?G zExj=!2RBy4iE;1R_k7`>yn7)l-|Fv7<$MtubbOv!vg>8Dq|&8V0zaMLt+~nRmy+gh)UBrz^Q`J?-rfS-6L#+kEo1@A2POkM~69U*5D=I_cNl?Ms6^ZZ`92=D#)3oF7y^*=V8eM!O?v z0(bU>?ATTG$m92ufF8JewzQ3$styOdG~eBf9IFKS5bLmo!Z7f zUbpL(#%G?c%_@x)ah!Ypapv5)4%-r%UUP5nbiMNU`24?1_cH8{jk%Q8W2=Aj^0jq7 zy&G3g>PgvQt;o>Rv!E~K`}_JYyO+$Kl=tp#P1@5rDf%AImMjrJ_Exrm^+;TmFH5P( zrw0d@e^-s2UQ%ncvn0kyzxS>>Lqr)%>6UGqKYz6K{C?~mJA;mOUo#WK1_h2+3=BFP zO;!vH+)WGk7!EWktYBu?ppaBP<+jWw{aB?J=nboFyt=akR{09=$V AUjP6A diff --git a/ChibiOS_2.0.8/docs/html/group__scheduler_ga0257cf203e72a766a52059750cb97e6e_cgraph.png b/ChibiOS_2.0.8/docs/html/group__scheduler_ga0257cf203e72a766a52059750cb97e6e_cgraph.png deleted file mode 100644 index ff1e1cef1cfa42d1b6dd86901091bd5841447627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3896 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 diff --git a/ChibiOS_2.0.8/docs/html/group__scheduler_ga306e564f678c1a39139639490c77e78b_cgraph.png b/ChibiOS_2.0.8/docs/html/group__scheduler_ga306e564f678c1a39139639490c77e78b_cgraph.png deleted file mode 100644 index 7a653ad914850a18dd94e2428e6aedd4ab213a7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6166 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 diff --git a/ChibiOS_2.0.8/docs/html/group__scheduler_gae47a8819a21ef2d521124e76bfb37c95_cgraph.png b/ChibiOS_2.0.8/docs/html/group__scheduler_gae47a8819a21ef2d521124e76bfb37c95_cgraph.png deleted file mode 100644 index dcb8864f16830ea723ea31b6b56b8ae9e9b467fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2431 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 kAN-#RYmcm${GU - -ChibiOS/RT: Semaphores - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Semaphores
    - -[Synchronization] -

    -
    -
    - -

    -Collaboration diagram for Semaphores:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Semaphores related APIs and services.

    -

    Operation mode

    -

    Semaphores are a flexible synchronization primitive, ChibiOS/RT implements semaphores in their "counting semaphores" variant as defined by Edsger Dijkstra plus several enhancements like:

    -
      -
    • Wait operation with timeout.
    • -
    • Reset operation.
    • -
    • Atomic wait+signal operation.
    • -
    • Return message from the wait operation (OK, RESET, TIMEOUT).
    • -
    -

    The binary semaphores variant can be easily implemented using counting semaphores.
    - Operations defined for semaphores:

    -
      -
    • Signal: The semaphore counter is increased and if the result is non-positive then a waiting thread is removed from the semaphore queue and made ready for execution.
    • -
    • Wait: The semaphore counter is decreased and if the result becomes negative the thread is queued in the semaphore and suspended.
    • -
    • Reset: The semaphore counter is reset to a non-negative value and all the threads in the queue are released.
    • -
    -

    Semaphores can be used as guards for mutual exclusion zones (note that mutexes are recommended for this kind of use) but also have other uses, queues guards and counters as example.
    - Semaphores usually use a FIFO queuing strategy but it is possible to make them order threads by priority by enabling CH_USE_SEMAPHORES_PRIORITY in chconf.h.
    - In order to use the Semaphores APIs the CH_USE_SEMAPHORES option must be enabled in chconf.h.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  Semaphore
     Semaphore structure. More...

    -Defines

    #define _SEMAPHORE_DATA(name, n)   {_THREADSQUEUE_DATA(name.s_queue), n}
     Data part of a static semaphore initializer.
    #define SEMAPHORE_DECL(name, n)   Semaphore name = _SEMAPHORE_DATA(name, n)
     Static semaphore initializer.
    #define chSemFastWaitI(sp)   ((sp)->s_cnt--)
     Decreases the semaphore counter.
    #define chSemFastSignalI(sp)   ((sp)->s_cnt++)
     Increases the semaphore counter.
    #define chSemGetCounterI(sp)   ((sp)->s_cnt)
     Returns the semaphore counter current value.

    -Typedefs

    typedef struct Semaphore Semaphore
     Semaphore structure.

    -Functions

    void chSemInit (Semaphore *sp, cnt_t n)
     Initializes a semaphore with the specified counter value.
    void chSemReset (Semaphore *sp, cnt_t n)
     Performs a reset operation on the semaphore.
    void chSemResetI (Semaphore *sp, cnt_t n)
     Performs a reset operation on the semaphore.
    msg_t chSemWait (Semaphore *sp)
     Performs a wait operation on a semaphore.
    msg_t chSemWaitS (Semaphore *sp)
     Performs a wait operation on a semaphore.
    msg_t chSemWaitTimeout (Semaphore *sp, systime_t time)
     Performs a wait operation on a semaphore with timeout specification.
    msg_t chSemWaitTimeoutS (Semaphore *sp, systime_t time)
     Performs a wait operation on a semaphore with timeout specification.
    void chSemSignal (Semaphore *sp)
     Performs a signal operation on a semaphore.
    void chSemSignalI (Semaphore *sp)
     Performs a signal operation on a semaphore.
    msg_t chSemSignalWait (Semaphore *sps, Semaphore *spw)
     Performs atomic signal and wait operations on two semaphores.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define _SEMAPHORE_DATA( name,
     n 
    )   {_THREADSQUEUE_DATA(name.s_queue), n}
    -
    -
    - -

    Data part of a static semaphore initializer.

    -

    This macro should be used when statically initializing a semaphore that is part of a bigger structure.

    -
    Parameters:
    - - - -
    [in] name the name of the semaphore variable
    [in] n the counter initial value, this value must be non-negative
    -
    -
    - -

    Definition at line 77 of file chsem.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define SEMAPHORE_DECL( name,
     n 
    )   Semaphore name = _SEMAPHORE_DATA(name, n)
    -
    -
    - -

    Static semaphore initializer.

    -

    Statically initialized semaphores require no explicit initialization using chSemInit().

    -
    Parameters:
    - - - -
    [in] name the name of the semaphore variable
    [in] n the counter initial value, this value must be non-negative
    -
    -
    - -

    Definition at line 88 of file chsem.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chSemFastWaitI( sp )    ((sp)->s_cnt--)
    -
    -
    - -

    Decreases the semaphore counter.

    -

    This macro can be used when the counter is known to be positive.

    - -

    Definition at line 94 of file chsem.h.

    - -

    Referenced by chIQReadTimeout(), and chOQWriteTimeout().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chSemFastSignalI( sp )    ((sp)->s_cnt++)
    -
    -
    - -

    Increases the semaphore counter.

    -

    This macro can be used when the counter is known to be not negative.

    - -

    Definition at line 100 of file chsem.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chSemGetCounterI( sp )    ((sp)->s_cnt)
    -
    -
    - -

    Returns the semaphore counter current value.

    - -

    Definition at line 105 of file chsem.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef struct Semaphore Semaphore
    -
    -
    - -

    Semaphore structure.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void chSemInit (Semaphore sp,
    cnt_t  n 
    )
    -
    -
    - -

    Initializes a semaphore with the specified counter value.

    -
    Parameters:
    - - - -
    [out] sp pointer to a Semaphore structure
    [in] n initial value of the semaphore counter. Must be non-negative.
    -
    -
    - -

    Definition at line 83 of file chsem.c.

    - -

    References chDbgCheck, queue_init, Semaphore::s_cnt, and Semaphore::s_queue.

    - -

    Referenced by adcObjectInit(), canObjectInit(), chHeapInit(), chIQInit(), chMBInit(), chOQInit(), heap_init(), macObjectInit(), chibios_rt::Semaphore::Semaphore(), and spiObjectInit().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void chSemReset (Semaphore sp,
    cnt_t  n 
    )
    -
    -
    - -

    Performs a reset operation on the semaphore.

    -
    Note:
    The released threads can recognize they were waked up by a reset rather than a signal because the chSemWait() will return RDY_RESET instead of RDY_OK.
    -
    Parameters:
    - - - -
    [in] sp pointer to a Semaphore structure
    [in] n the new value of the semaphore counter. The value must be non-negative.
    -
    -
    - -

    Definition at line 101 of file chsem.c.

    - -

    References chSchRescheduleS(), chSemResetI(), chSysLock, and chSysUnlock.

    - -

    Referenced by chibios_rt::Semaphore::Reset().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void chSemResetI (Semaphore sp,
    cnt_t  n 
    )
    -
    -
    - -

    Performs a reset operation on the semaphore.

    -
    Note:
    The released threads can recognize they were waked up by a reset rather than a signal because the chSemWait() will return RDY_RESET instead of RDY_OK.
    -
    -This function does not reschedule.
    -
    Parameters:
    - - - -
    [in] sp pointer to a Semaphore structure
    [in] n the new value of the semaphore counter. The value must be non-negative.
    -
    -
    - -

    Definition at line 120 of file chsem.c.

    - -

    References chDbgCheck, chSchReadyI(), lifo_remove(), Thread::p_u, Thread::rdymsg, Semaphore::s_cnt, and Semaphore::s_queue.

    - -

    Referenced by adcStopConversion(), canStop(), CH_IRQ_HANDLER(), chIQResetI(), chMBReset(), chOQResetI(), and chSemReset().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    msg_t chSemWait (Semaphore sp ) 
    -
    -
    - -

    Performs a wait operation on a semaphore.

    -
    Parameters:
    - - -
    [in] sp pointer to a Semaphore structure
    -
    -
    -
    Return values:
    - - - -
    RDY_OK if the semaphore was signaled or not taken.
    RDY_RESET if the semaphore was reset using chSemReset().
    -
    -
    - -

    Definition at line 138 of file chsem.c.

    - -

    References chSemWaitS(), chSysLock, and chSysUnlock.

    - -

    Referenced by spiAcquireBus(), and chibios_rt::Semaphore::Wait().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    msg_t chSemWaitS (Semaphore sp ) 
    -
    -
    - -

    Performs a wait operation on a semaphore.

    -
    Parameters:
    - - -
    [in] sp pointer to a Semaphore structure
    -
    -
    -
    Return values:
    - - - -
    RDY_OK if the semaphore was signaled or not taken.
    RDY_RESET if the semaphore was reset using chSemReset().
    -
    -
    - -

    Definition at line 154 of file chsem.c.

    - -

    References chDbgCheck, chSchGoSleepS(), currp, Semaphore::s_cnt, Semaphore::s_queue, and THD_STATE_WTSEM.

    - -

    Referenced by chSemWait().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t chSemWaitTimeout (Semaphore sp,
    systime_t  time 
    )
    -
    -
    - -

    Performs a wait operation on a semaphore with timeout specification.

    -
    Parameters:
    - - - -
    [in] sp pointer to a Semaphore structure
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Return values:
    - - - - -
    RDY_OK if the semaphore was signaled or not taken.
    RDY_RESET if the semaphore was reset using chSemReset().
    RDY_TIMEOUT if the semaphore was not signaled or reset within the specified timeout.
    -
    -
    - -

    Definition at line 181 of file chsem.c.

    - -

    References chSemWaitTimeoutS(), chSysLock, and chSysUnlock.

    - -

    Referenced by chibios_rt::Semaphore::WaitTimeout().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t chSemWaitTimeoutS (Semaphore sp,
    systime_t  time 
    )
    -
    -
    - -

    Performs a wait operation on a semaphore with timeout specification.

    -
    Parameters:
    - - - -
    [in] sp pointer to a Semaphore structure
    [in] time the number of ticks before the operation timeouts, the following special values are allowed:

    -
      -
    • TIME_IMMEDIATE immediate timeout.
    • -
    • TIME_INFINITE no timeout.
    • -
    -
    -
    -
    -
    Return values:
    - - - - -
    RDY_OK if the semaphore was signaled or not taken.
    RDY_RESET if the semaphore was reset using chSemReset().
    RDY_TIMEOUT if the semaphore was not signaled or reset within the specified timeout.
    -
    -
    - -

    Definition at line 204 of file chsem.c.

    - -

    References chDbgCheck, chSchGoSleepTimeoutS(), currp, Semaphore::s_cnt, Semaphore::s_queue, THD_STATE_WTSEM, and TIME_IMMEDIATE.

    - -

    Referenced by adcWaitConversion(), canReceive(), canTransmit(), chIQGetTimeout(), chIQReadTimeout(), chMBFetchS(), chMBPostAheadS(), chMBPostS(), chOQPutTimeout(), chOQWriteTimeout(), chSemWaitTimeout(), macWaitReceiveDescriptor(), and macWaitTransmitDescriptor().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chSemSignal (Semaphore sp ) 
    -
    -
    - -

    Performs a signal operation on a semaphore.

    -
    Parameters:
    - - -
    [in] sp pointer to a Semaphore structure
    -
    -
    - -

    Definition at line 225 of file chsem.c.

    - -

    References chDbgCheck, chSchWakeupS(), chSysLock, chSysUnlock, fifo_remove(), RDY_OK, Semaphore::s_cnt, and Semaphore::s_queue.

    - -

    Referenced by chibios_rt::Semaphore::Signal(), and spiReleaseBus().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chSemSignalI (Semaphore sp ) 
    -
    -
    - -

    Performs a signal operation on a semaphore.

    -
    Note:
    This function does not reschedule.
    -
    Parameters:
    - - -
    [in] sp pointer to a Semaphore structure
    -
    -
    - -

    Definition at line 241 of file chsem.c.

    - -

    References chDbgCheck, chSchReadyI(), fifo_remove(), Thread::p_u, Thread::rdymsg, Semaphore::s_cnt, and Semaphore::s_queue.

    - -

    Referenced by chIQPutI(), chMBFetchS(), chMBPostAheadS(), chMBPostS(), and chOQGetI().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    msg_t chSemSignalWait (Semaphore sps,
    Semaphore spw 
    )
    -
    -
    - -

    Performs atomic signal and wait operations on two semaphores.

    -
    Note:
    The function is available only if the CH_USE_SEMSW option is enabled in chconf.h.
    -
    Parameters:
    - - - -
    [in] sps pointer to a Semaphore structure to be signaled
    [in] spw pointer to a Semaphore structure to be wait on
    -
    -
    -
    Return values:
    - - - -
    RDY_OK if the semaphore was signaled or not taken.
    RDY_RESET if the semaphore was reset using chSemReset().
    -
    -
    - -

    Definition at line 265 of file chsem.c.

    - -

    References chDbgCheck, chSchGoSleepS(), chSchReadyI(), chSchRescheduleS(), chSysLock, chSysUnlock, fifo_remove(), Thread::p_u, Thread::rdymsg, Semaphore::s_cnt, Semaphore::s_queue, THD_STATE_WTSEM, and Thread::wtobjp.

    - -

    Referenced by chibios_rt::Semaphore::SignalWait().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__semaphores.png b/ChibiOS_2.0.8/docs/html/group__semaphores.png deleted file mode 100644 index 43ac09d23925da5a2624669776a7bafecea0d6d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yVED|yz@W;(#=yWZed2vy1_lPUByV>YhW{YAVDIwD z3=9nHC7!;n?6t>?A+L_|ri8@htv9+d)^V;-d^Go6#F6IG zIXCa$yu15r?W{ZJ-kquQ{B}D(?|m7g5)>>F5^np}&EWQ#r^RV6OTqRR3PBYSB@C*? zLAeqJITZ{JvIiFX9A3EM6@!&4`@|qwhGWN$aq%tQZ#vueu~o1U^MP81%iEe4y1WyW zZQwOFHl8tKhK5zoJ~Jz;uA4U_-&(0ZkLb`)_DNebDZxm1D$C@VD^zBjaZwd4F}2oP zsWaQ|u%Ge1w}zK{Uca9nn$yX{fB%Ms#SJ^g1g-;H&(D8;PgFKI=JDgl^}6O#y?4IP z|894A)6_G&ns+Ye`@mq9r1R(doz2e=T{z|SbjI_}%T8O=8ABKkd_Hov$+_Eiy2sxc zF_oJmXNE3Ybv2f6)sssX-o-EPTOZ~XE93Za}+U zli8&=ugGoDdyyhyCf&K~eMHRnON_?_gCqV1o!>BJk@Ar&rs;|k4^Q&;?b*;0bld0e zqCI{_epmiw-duAgOZ1cc5l2pe(wMJXGiPrp@m#n1*3MO7*|WFjT9-;sNN0S*bm7?i zl_lmAPrIzmTXt&M>*Of$?eTY1j6+Lgwdm`w%t1nAw)#|>)s(v}K z=zyaAFov;QAYGdBA4bb`RWDN~ZXIC3Tl$$tI2`FUrp z?W8lC#NW?)wY`6jn3&kEa^Js`y(8;Po*sAE_HNqt9UbBfaSYG(cD%c_*eOA(K#ei~ z>?^aT`p^G8;!d7v)(ZYSH;mh#(Pr({b8DHe`FeGJesDR->1%K(-{f$kU_ZOsS@Db? z7!EYgwO*g|b(?W-(6>XK9Z@MfE(zNQ?C-&ven+5p|bI&PBc&)iVKRNEl+;r8$@ACu%A>iWw br{<4CwzSn7t7I}TFfe$!`njxgN@xNA)h`fh diff --git a/ChibiOS_2.0.8/docs/html/group__semaphores_ga0bc227311e5be3e3b6e3aee6a68169da_cgraph.png b/ChibiOS_2.0.8/docs/html/group__semaphores_ga0bc227311e5be3e3b6e3aee6a68169da_cgraph.png deleted file mode 100644 index 0d37d70418643a48099d25743c53bd411ba8e050..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1853 zcmeAS@N?(olHy`uVBq!ia0y~yV0^&9z@W;(#=yWZtIbM{fq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}X!fV4df3~cv3T^vIy=DfWdn=KM9!T#a@=Gh^FYeihj!#=F~ zvPgXI#6{ve4cKn^Z`gZ5OV`Pq3)#v7*|&lU8hH-QO@HVda%>uV9fZ z)|G2s=ZSW?WG8Q`tlHQqyZrf?)9232+w-ShKq&2;&F3@kZdN{aiEczz36Pmr_0x`w;yij z-|eT&y_lhFmtRwn;UlX?o*u5>>aGC}zNfkG`n7a)bVM|Cc67{1U{q65Dr#Vz(a~{& zQ7l18Nr}Bk_rTx3e;2;~V;}im{oSSqR`s(J`j(m9z3}#L>e-6K8jb(aqq1<%X;?5nk7zmB|hy3P7smp^}-e`~|SUA3HF&aW_= zYZJdsW>ej{>9O|P>v%N%|Ni~Eqv)yElTBMbPCjC?b#}a1&*ac~r(0L85j>dZP&WPa z)BO#vG#ZM({<{-1@_++! z=WqYuSkbrQRK{Y%lDnl@C%zf-iDna_Wodi}hy_JMzavsUhyHSPD$>ob#nc4rmr zwm5oi|2?t$SIl(6BK#7M3zhaPGmDH{U}40(z&$ih_@Mi$8{vBV*FsZwL|pm2_14DD zo^Ox!Un~>v%iJ0Nfkiato&KtWZy$+7|F4R!3BJ7{BGK~a?PIZdR)NP)W?mGHpRdWF z&9H`fL%0jO?fNSI3C638pG)-$Z#TN-fA8;QvD07nu>Q`Du!-gi+;9MW8=eY&I?;c&>{OFAb$^<2JA9I0;D*{s!Y`6O zpSttjch#?z9v>T?hvu((Rj{yu`|Gcb)w0Llmi;%`%FU(i7HH}6bW&*FvRd8Fx_PHX zO6I)0_29&1vrn6kZtc`su}m;qD$r8*+wbj_!Bcl8^_aVSNmzKH_{L|pda;8u(>~9h zy7t=R`kNnF^CVo4rv>>19(@w3vDPF(p znZBI)+aACE#*JBXyoB$4+P>2FO0talwD>z0^X|yx{MA02y<+lPu~7T+BK{laO(vZ! z-Xd;xb~gKTh)3`91fCVV|IWw~W}S+)mb;=W~lR4|u*izO2{uyjiHUS?lXZch7kC zS+8BW(tg3JbNhKcUG6b{a4hi-4bALaz;WWp=5+J!$&;_wWp7op*4-DVKgDm^zC|~d z^&eg~b$9K=DPMM6KDJ@joIO>!XJ`GJocVak#dq^}X}blpUSJAf`EqRC{`$8!|3CSa zyZ)=nYR#8RUQgcQYbAQylP~c0lAWoSJ6SKE&o$CKa4_@k3MJuh$CfVHIEm|C{kGZ| z&F;Uq`c%(-N|^0el(kiE@kNVge`ZH{Eq!GrSj`xAw4{2Ke;%WiP80XnUl*%A{+<8T ze0f*lvTIHHHkbF#w*Z+EZ8Vo*lg!&0U{j+e7+eX`3tHA1CC5JNQ=f0kQjY((G z(`pzJ~!Lupv=t7Z2cqG zqx<^P)6<{t=RNtec4yGaUEwUpKYn7pU%ci18=-H0mwyV&?9WZhj1oBiKIXrS)9=^| z3=D!k+w(hL#D+?~dpT2f?bW{j@9z6O|0MqH{E}UUzhVQn)Sj_k`uA;~zQulapVMyV z>y=||m^K91WqY!0>3;vmHBtCLMi^~%RZUaHV ziOf0&TwGlEBJQ`C+S&E(+qW<8nUkcHv~=-Yr!XxBy`6qdMS+YD{@8C_8WQ-;|J8)8 z4Cl|Bd2nH&^W8J8CzgmG*uHME!ls1(DoPlj=wbYWsU9nT)azeoU|?YIboFyt=akR{ E04L_8MF0Q* diff --git a/ChibiOS_2.0.8/docs/html/group__semaphores_ga0dc7b4339506de346d67b4560b271e44_cgraph.png b/ChibiOS_2.0.8/docs/html/group__semaphores_ga0dc7b4339506de346d67b4560b271e44_cgraph.png deleted file mode 100644 index 4321fe7df284b45c6b7f0563c584a6cc4f697d88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14212 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 WOD(llDLo7f3=E#GelF{r5}E-02x_MQ diff --git a/ChibiOS_2.0.8/docs/html/group__semaphores_gaa2c0367078533e291d2e889e251d8b67_cgraph.png b/ChibiOS_2.0.8/docs/html/group__semaphores_gaa2c0367078533e291d2e889e251d8b67_cgraph.png deleted file mode 100644 index 3799e1903b15258039853381d5427c304559325f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3036 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 diff --git a/ChibiOS_2.0.8/docs/html/group__semaphores_gaca0b70cf495a9cb7569e1cf5b07e2b3d_cgraph.png b/ChibiOS_2.0.8/docs/html/group__semaphores_gaca0b70cf495a9cb7569e1cf5b07e2b3d_cgraph.png deleted file mode 100644 index 53dd8d0b8799facbea6c050493241223e341bf07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2403 zcmeAS@N?(olHy`uVBq!ia0y~yV0g{Iz!1T~#=yWJ62id8z`($k|H*Y zfq{X&#M9T6{T82?)O-O27SWTgpTr%erhH$-;ixk0bkmDG4*5mq9-^*`LTX|fG(=DO zPHYM}VU;;6#j{at{aY1pGZpDcYiyrCJ!EDvS+e?=-1#>*&ih9lo!9?3IeXq556?F z*MopdQ(rj0+TNtA9q47S#zphs2BD=ahrOl<@n{En6`0JJwB*D7YwzVmbHC4J*uQCy zTlnH%b&jilu}8{t9rk)X@w(%^vyJkpk)4SVntEq-=Y&`6nP#3HcRe@K@zvG5oz;=6 zpHEDP(Bxaom$v>m)Bg*tx~o6#n0ejo?D=M$?|(lztv6URh2>-Ao2|aPry1o$*6D7n z{#}+>^1uC&_?Hs~Yqs3m$`z%ay7Tl$=_#LH3#qqF&(q+1%lFUVVTX}NTpH({!@~@|sqv9guar z(bKoSozxD0=6@{y^T8t<_zX@LiG{4)cD#Y3C~CJyVu1Yf9hIN2ysZ9yFF7Fj$OgU@ z4<8QoxxxY=LhcB#vf+xo}%NKupGGf~ONbCQGWzuAT+BKvz85W7Z|__x{G!ZY)UamNsYt=It6!Zy zmY_I!XYsm-nwR#0*ON0}x*XiLygyv4BC)b^pGfIX5!p7=G-BSD^p8{M=b1ig`?r{sNX{@Vyt*=E*8INLTUQkGWS^0Fet$>x_xby8ZhCrAe)Y3Y zM<10>o4ihVDf3||Pn}v{zk5@Yy-KXO*YtV+T-IGZ@%+h?C$;r~d*_AE44nF2 zPyba>XO!oX)VXu!99bE>{FYw#sxx_~RHO8jxU-A3AB#$@e|mP-^~$MNIp*y)~6L? z<0xNpdxPVvuisn(yO*SvmWwx+g#SG!d3c)W5})~U+t&l-e}yfjY&z#}KBjplResUev;~Jw6$H&HbgNr5B_X0SC~3j2gRdRcJ`1$9 zEwkI3dU|pA4`EBL=EUAewaucl&1ydwAB$*bVBcnY_s7SdPC@o|%S#d>lDBQ!))Mrx z`h0JXP5mX)wWl{LeF{zXIkqi-4U=(iX6&cEbFLlDO?h&fKX&)G=Bsi0`C5-}P+MYm zF;eotd+F2f<{S9F7GCynLTaK%X?ODN%iT&A;j@!WW^rD=v*{+UdhYKR@vfWPZ@R|E zOI#~m5-?*o^Mkd&;t$sbPn2pd6#OgHaQ9{o>o(h3QHMCubRBN)V<&DFRc1d}=@H9v z;BtdaZqMhPbFI_U%HQ0mT4cvo|Am^0$B6{+K;@Yh0y$?RGlD*4ybFSMugB zT=iUP`*{tq{{QRcw%PvGX}Df+zi=U+f~3R!0MpA)KXsPJ=-=je-MHfZ`38%QTW`Is z__V(Y{+AARWQbYMo8l=qfuHf0rcJ^8Fo#fWrAdMpM8@ z>avSCWy0#rXD~2aUG*k=V-({Z=eN%yc+Eq;ZZRzXSNQ$i?gE+575Uj7d(L?=FbH1e zcr6vMn{|oSDy0hf1D2sXGa`39u_#iUe%bXq!{xWP>+5VAv-m~Yrp`LyA7Z+Gm3Xn` z-VhC*|9cPXhqEkPQTkWv|E}r6fk*fjiES|WvyDI6&z|GY&yRDaK3c~3Ki4LV#d=2b zyY+If?>yap>-_7=8C7LHcN4m1hhM**U8#Qe@q*vgr3bCwPCI_BH$7tI{2k7Zu3st@ zTJ}t#nsv)_iLh7cg}fn0KUvwNFLe}jef|7;YyYoOn~kYUzpfJOdG@^UjeObuyw{Qv zhrK)}F!b-8$F6JqV$*`JFP@Yt9p4ai%f&KdiWZOdQs4XSm-yLdbObdes(Nv@P1R79 z2!mu4ut40dg)8>VDq#)Es=vT%ymt*NZ_8Q+Ilo;(n&15XzJKl+-qHaDzwXpC3gujy Vm=ihaDFXuogQu&X%Q~loCIDd_qNo4> diff --git a/ChibiOS_2.0.8/docs/html/group__semaphores_gae7972b6b22b80ac09bac5a186277ab81_cgraph.png b/ChibiOS_2.0.8/docs/html/group__semaphores_gae7972b6b22b80ac09bac5a186277ab81_cgraph.png deleted file mode 100644 index f9abe3b7d8cc9703dc7ee9054f55a565258f3ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2384 zcmeAS@N?(olHy`uVBq!ia0y~yV0gj6z!1T~#=yYvKY2GV0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj)Ct;bB?~3>=?4T^vIy=DfY@pCcV9%l_eg{+mCVx0l}ia>1ha z(ifHz@mH*zd|!n06dr6~-{thQ!+~jAEPJR^QtK3M1;*Q3T>h+Xv2Zw@rF~?-ZKDhS zZf>TQM^m-`gB+7OQQy9hi7gp zza*_+Z8t&U0^{VfUKh8$7M{3DqR8K?OM&}@qQi364}zg7j42G#J7XBP-m0H?@{M(< z-g{f#GnTeh+{~@l7ci%lmi~LsAh*TNi{$`ELr?YVX7=lWdhcxy7pS${zG#>^XHM;* zZKaY2CYBvvl@;n@r1Yz~w|Bl?=<4nJ`TxwkzJfE!;rESyf6vQqTC;Eu$EUu3GIyQvZ$V)rzE}n*vy#RDbnUvR$+4{)eAa4u~DpQrP_T)1ULazjvDD zed%M|k#Q@L>qX#}h~<-aebQtQ-=&#QwQIxoht5x2U)irZ(fwe6X|;| z@cq(KZ_jIs-=95mro}Ej>CsP3hRWkB+XXj#x_!IK)_@plQdgs@# zm%9b`N_Gh_&)TqYqj0{wkOG^aj`ckk!3ScTqPQ!mAzkD*7k=`L(<9;v$mTtugrNen#|1WKXNt1f88aw zrTB>0g_$!Y@6Swl-;=i8_}DVZODobB-hIFPYPE7#&?DOwD+}E(K6tD#dBt@l&K0}a zjaiRwxqEi+`H(Q z;#e2RVmVJEb7Fns?%4Oj%gVbJs~5-no6TI8|9A~^U_k8m1^150rf9q>-z%|gP1*W~ zd!O-sidy^X!0Q07SueR8k2B6mckT&O{t{b%w}*}Ux{4B7QFTAf^TLfA#`5yAwiWV! zc1f}x0SD~i!|ZlTwC1xY?2Jha4i(cqt-0z{(53hr%jPyR`gUZoKK)d_&%&(i(bQ*? z)K|?4pDM|qE^}P++|zquj9lR%fm?J$9>;!q5_tJ?@nZA*bGALdOEqNJOcHxH?7j6P zv!djpL8$inRp%M3%#0>o?Cf+(zGxt_IKt#iO7-vh_|s3h+E<0v{5v<-_;uhk-?_;S z!4G3fb9ucPrZN24vGeMNH_w*4ewmP~U9|HMTf-ubX(6SWXEx1F`xMCVUP5XT|MQ~O z^=U>$Ri&l-&f3Okw`^NVz0lm9@RPXb|G7aTWDQMy2Ialx(wSGXJ+5o{Zu%?!TM-JP=T=U=KW!%cGq?k z=3ARJT>bt1f6>Q#d&B)3b5{sAGM|c!VOsE>SHf>W-QlIpyUX{#zp^g&eM@SuoZfWt zbw?w2J09DARJI^Ecz(5$sPI4c6}n2Idn*5ng$hmynVYrrlYU1^zn|Z^cV0_2F?ZO$ zXjmQM)@Sm|Z}&XMlMD^3?rhdsv*OYERXY}TJ#(+J~U2z;(g|bu&b$|&-0&tI^=dlf9Z<&^=ALS=BY2@kagd2TWnUJ?3LSc z^V|>Ee|li5q3T=vFV`-Ng*)%U=c^meN7t?X>~sF`mCf2RkAl`$wC|qFQ`WN=T$GL_}e$RN@;`^_8Hr#n=+G-@oqw#g}61CYvv#&fd)%dzvqslV)z2x!NKa%*p zGB5Hp|E?5z-fp}8c2(P4NNKGJs=+te_~Dt e6s*|#pP6sZ?a=z0GCT|n3=E#GelF{r5}E*H)|KP{ diff --git a/ChibiOS_2.0.8/docs/html/group__synchronization.html b/ChibiOS_2.0.8/docs/html/group__synchronization.html deleted file mode 100644 index 94667e3..0000000 --- a/ChibiOS_2.0.8/docs/html/group__synchronization.html +++ /dev/null @@ -1,65 +0,0 @@ - - -ChibiOS/RT: Synchronization - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Synchronization
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for Synchronization:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Synchronization services.

    - - - - - - - - -

    -Modules

     Semaphores
     Mutexes
     Condition Variables
     Event Flags
     Synchronous Messages
     Mailboxes
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__synchronization.png b/ChibiOS_2.0.8/docs/html/group__synchronization.png deleted file mode 100644 index 919bcee29ebb0fbb7f88ea05bdb67ac207dac887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13026 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 U+Ic;Lfq{X+)78&qol`;+02~ha9smFU diff --git a/ChibiOS_2.0.8/docs/html/group__system.html b/ChibiOS_2.0.8/docs/html/group__system.html deleted file mode 100644 index 5c9ae37..0000000 --- a/ChibiOS_2.0.8/docs/html/group__system.html +++ /dev/null @@ -1,525 +0,0 @@ - - -ChibiOS/RT: System Management - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    System Management
    - -[Base Kernel Services] -

    -
    -
    - -

    -Collaboration diagram for System Management:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    System related APIs and services:

    -
      -
    • Initialization.
    • -
    • Locks.
    • -
    • Interrupt Handling.
    • -
    • Power Management.
    • -
    • Abnormal Termination.
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define chSysHalt()   port_halt()
     Halts the system.
    #define chSysSwitchI(ntp, otp)   port_switch(ntp, otp)
     Performs a context switch.
    #define chSysDisable()   port_disable()
     Raises the system interrupt priority mask to the maximum level.
    #define chSysSuspend()   port_suspend()
     Raises the system interrupt priority mask to system level.
    #define chSysEnable()   port_enable()
     Lowers the system interrupt priority mask to user level.
    #define chSysLock()
     Enters the kernel lock mode.
    #define chSysUnlock()
     Leaves the kernel lock mode.
    #define chSysLockFromIsr()   port_lock_from_isr()
     Enters the kernel lock mode from within an interrupt handler.
    #define chSysUnlockFromIsr()   port_unlock_from_isr()
     Leaves the kernel lock mode from within an interrupt handler.
    #define CH_IRQ_PROLOGUE()   PORT_IRQ_PROLOGUE()
     IRQ handler enter code.
    #define CH_IRQ_EPILOGUE()   PORT_IRQ_EPILOGUE()
     IRQ handler exit code.
    #define CH_IRQ_HANDLER(id)   PORT_IRQ_HANDLER(id)
     Standard normal IRQ handler declaration.
    #define CH_FAST_IRQ_HANDLER(id)   PORT_FAST_IRQ_HANDLER(id)
     Standard fast IRQ handler declaration.

    -Functions

    void chSysInit (void)
     ChibiOS/RT initialization.
    void chSysTimerHandlerI (void)
     Handles time ticks for round robin preemption and timer increments.
    -

    Define Documentation

    - -
    -
    - - - - - - - - -
    #define chSysHalt( )    port_halt()
    -
    -
    - -

    Halts the system.

    -

    This function is invoked by the operating system when an unrecoverable error is detected, as example because a programming error in the application code that triggers an assertion while in debug mode.

    - -

    Definition at line 45 of file chsys.h.

    - -

    Referenced by chDbgPanic().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define chSysSwitchI( ntp,
     otp 
    )   port_switch(ntp, otp)
    -
    -
    - -

    Performs a context switch.

    -
    Parameters:
    - - - -
    [in] ntp the thread to be switched in
    [in] otp the thread to be switched out
    -
    -
    - -

    Definition at line 53 of file chsys.h.

    - -

    Referenced by chSchDoRescheduleI(), chSchGoSleepS(), and chSchWakeupS().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chSysDisable( )    port_disable()
    -
    -
    - -

    Raises the system interrupt priority mask to the maximum level.

    -

    All the maskable interrupt sources are disabled regardless their hardware priority.

    -
    Note:
    The implementation is architecture dependent, it may just disable the interrupts or be exactly equivalent to chSysDisable().
    -
    -Do not invoke this API from within a kernel lock.
    - -

    Definition at line 63 of file chsys.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chSysSuspend( )    port_suspend()
    -
    -
    - -

    Raises the system interrupt priority mask to system level.

    -

    The interrupt sources that should not be able to preempt the kernel are disabled, interrupt sources with higher priority are still enabled.

    -
    Note:
    The implementation is architecture dependent, it may just disable the interrupts.
    -
    -Do not invoke this API from within a kernel lock.
    -
    -This API is no replacement for chSysLock(), the chSysLock() could do more than just disable the interrupts.
    - -

    Definition at line 76 of file chsys.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chSysEnable( )    port_enable()
    -
    -
    - -

    Lowers the system interrupt priority mask to user level.

    -

    All the interrupt sources are enabled.

    -
    Note:
    The implementation is architecture dependent, it may just enable the interrupts.
    -
    -Do not invoke this API from within a kernel lock.
    -
    -This API is no replacement for chSysUnlock(), the chSysUnlock() could do more than just enable the interrupts.
    - -

    Definition at line 87 of file chsys.h.

    - -

    Referenced by chSysInit().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chSysLock( ) 
    -
    -
    -Value:
    {                                                   \
    -  if (currp->p_locks++ == 0)                                            \
    -    port_lock();                                                        \
    -}
    -
    -

    Enters the kernel lock mode.

    -
    Note:
    The use of kernel lock mode is not recommended in the user code, it is a better idea to use the semaphores or mutexes instead.
    -
    See also:
    CH_USE_NESTED_LOCKS
    - -

    Definition at line 97 of file chsys.h.

    - -

    Referenced by adcStart(), adcStartConversion(), adcStop(), adcStopConversion(), adcWaitConversion(), canGetAndClearFlags(), canReceive(), canSleep(), canStart(), canStop(), canTransmit(), canWakeup(), chCondBroadcast(), chCondSignal(), chCondWait(), chCondWaitTimeout(), chCoreAlloc(), chEvtBroadcast(), chEvtClear(), chEvtPend(), chEvtRegisterMask(), chEvtSignal(), chEvtUnregister(), chEvtWaitAll(), chEvtWaitAllTimeout(), chEvtWaitAny(), chEvtWaitAnyTimeout(), chEvtWaitOne(), chEvtWaitOneTimeout(), chIQGetTimeout(), chIQReadTimeout(), chMBFetch(), chMBPost(), chMBPostAhead(), chMBReset(), chMsgGet(), chMsgRelease(), chMsgSend(), chMsgWait(), chMtxLock(), chMtxTryLock(), chMtxUnlock(), chMtxUnlockAll(), chOQPutTimeout(), chOQWriteTimeout(), chPoolAlloc(), chPoolFree(), chRegFirstThread(), chRegNextThread(), chSemReset(), chSemSignal(), chSemSignalWait(), chSemWait(), chSemWaitTimeout(), chThdAddRef(), chThdCreateFromHeap(), chThdCreateFromMemoryPool(), chThdCreateStatic(), chThdExit(), chThdRelease(), chThdResume(), chThdSetPriority(), chThdSleep(), chThdSleepUntil(), chThdTerminate(), chThdWait(), chThdYield(), chibios_rt::System::Lock(), macWaitReceiveDescriptor(), macWaitTransmitDescriptor(), mmcConnect(), mmcDisconnect(), mmcSequentialRead(), mmcSequentialWrite(), mmcStart(), mmcStartSequentialRead(), mmcStartSequentialWrite(), mmcStop(), mmcStopSequentialRead(), mmcStopSequentialWrite(), pwmDisableChannel(), pwmEnableChannel(), pwmStart(), pwmStop(), sdGetAndClearFlags(), sdStart(), sdStop(), spiSelect(), spiStart(), spiStop(), and spiUnselect().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chSysUnlock( ) 
    -
    -
    -Value:
    {                                                 \
    -  if (--currp->p_locks == 0)                                            \
    -    port_unlock();                                                      \
    -}
    -
    -

    Leaves the kernel lock mode.

    -
    Note:
    The use of kernel lock mode is not recommended in the user code, it is a better idea to use the semaphores or mutexes instead.
    -
    See also:
    CH_USE_NESTED_LOCKS
    - -

    Definition at line 114 of file chsys.h.

    - -

    Referenced by adcStart(), adcStartConversion(), adcStop(), adcStopConversion(), adcWaitConversion(), canGetAndClearFlags(), canReceive(), canSleep(), canStart(), canStop(), canTransmit(), canWakeup(), chCondBroadcast(), chCondSignal(), chCondWait(), chCondWaitTimeout(), chCoreAlloc(), chEvtBroadcast(), chEvtClear(), chEvtPend(), chEvtRegisterMask(), chEvtSignal(), chEvtUnregister(), chEvtWaitAll(), chEvtWaitAllTimeout(), chEvtWaitAny(), chEvtWaitAnyTimeout(), chEvtWaitOne(), chEvtWaitOneTimeout(), chIQGetTimeout(), chIQReadTimeout(), chMBFetch(), chMBPost(), chMBPostAhead(), chMBReset(), chMsgGet(), chMsgRelease(), chMsgSend(), chMsgWait(), chMtxLock(), chMtxTryLock(), chMtxUnlock(), chMtxUnlockAll(), chOQPutTimeout(), chOQWriteTimeout(), chPoolAlloc(), chPoolFree(), chRegFirstThread(), chRegNextThread(), chSemReset(), chSemSignal(), chSemSignalWait(), chSemWait(), chSemWaitTimeout(), chThdAddRef(), chThdCreateFromHeap(), chThdCreateFromMemoryPool(), chThdCreateStatic(), chThdRelease(), chThdResume(), chThdSetPriority(), chThdSleep(), chThdSleepUntil(), chThdTerminate(), chThdWait(), chThdYield(), macWaitReceiveDescriptor(), macWaitTransmitDescriptor(), mmcConnect(), mmcDisconnect(), mmcSequentialRead(), mmcSequentialWrite(), mmcStart(), mmcStartSequentialRead(), mmcStartSequentialWrite(), mmcStop(), mmcStopSequentialRead(), mmcStopSequentialWrite(), pwmDisableChannel(), pwmEnableChannel(), pwmStart(), pwmStop(), sdGetAndClearFlags(), sdStart(), sdStop(), spiSelect(), spiStart(), spiStop(), spiUnselect(), and chibios_rt::System::Unlock().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chSysLockFromIsr( )    port_lock_from_isr()
    -
    -
    - -

    Enters the kernel lock mode from within an interrupt handler.

    -
    Note:
    This API may do nothing on some architectures, it is required because on ports that support preemptable interrupt handlers it is required to raise the interrupt mask to the same level of the system mutual exclusion zone.
    - It is good practice to invoke this API before invoking any I-class syscall from an interrupt handler.
    -
    -This API must be invoked exclusively from interrupt handlers.
    - -

    Definition at line 133 of file chsys.h.

    - -

    Referenced by CH_IRQ_HANDLER().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chSysUnlockFromIsr( )    port_unlock_from_isr()
    -
    -
    - -

    Leaves the kernel lock mode from within an interrupt handler.

    -
    Note:
    This API may do nothing on some architectures, it is required because on ports that support preemptable interrupt handlers it is required to raise the interrupt mask to the same level of the system mutual exclusion zone.
    - It is good practice to invoke this API after invoking any I-class syscall from an interrupt handler.
    -
    -This API must be invoked exclusively from interrupt handlers.
    - -

    Definition at line 146 of file chsys.h.

    - -

    Referenced by CH_IRQ_HANDLER().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define CH_IRQ_PROLOGUE( )    PORT_IRQ_PROLOGUE()
    -
    -
    - -

    IRQ handler enter code.

    -
    Note:
    Usually IRQ handlers functions are also declared naked.
    -
    -On some architectures this macro can be empty.
    - -

    Definition at line 153 of file chsys.h.

    - -

    Referenced by CH_IRQ_HANDLER().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define CH_IRQ_EPILOGUE( )    PORT_IRQ_EPILOGUE()
    -
    -
    - -

    IRQ handler exit code.

    -
    Note:
    Usually IRQ handlers function are also declared naked.
    -
    -This macro usually performs the final reschedule by using chSchRescRequiredI() and chSchDoRescheduleI().
    - -

    Definition at line 161 of file chsys.h.

    - -

    Referenced by CH_IRQ_HANDLER().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define CH_IRQ_HANDLER( id )    PORT_IRQ_HANDLER(id)
    -
    -
    - -

    Standard normal IRQ handler declaration.

    -
    Note:
    id can be a function name or a vector number depending on the port implementation.
    - -

    Definition at line 168 of file chsys.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define CH_FAST_IRQ_HANDLER( id )    PORT_FAST_IRQ_HANDLER(id)
    -
    -
    - -

    Standard fast IRQ handler declaration.

    -
    Note:
    id can be a function name or a vector number depending on the port implementation.
    -
    -Not all architectures support fast interrupts.
    - -

    Definition at line 176 of file chsys.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void chSysInit (void  ) 
    -
    -
    - -

    ChibiOS/RT initialization.

    -

    After executing this function the current instructions stream becomes the main thread.

    -
    Note:
    Interrupts should be still disabled when chSysInit() is invoked and are internally enabled.
    -
    -The main thread is created with priority NORMALPRIO.
    - -

    Definition at line 73 of file chsys.c.

    - -

    References chSysEnable, chThdCreateStatic(), core_init(), currp, heap_init(), IDLEPRIO, init_thread(), NORMALPRIO, port_init(), scheduler_init(), setcurrp, trace_init(), and vt_init().

    - -

    Referenced by chibios_rt::System::Init().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chSysTimerHandlerI (void  ) 
    -
    -
    - -

    Handles time ticks for round robin preemption and timer increments.

    -

    Decrements the remaining time quantum of the running thread and preempts it when the quantum is used up. Increments system time and manages the timers.

    -
    Note:
    The frequency of the timer determines the system tick granularity and, together with the CH_TIME_QUANTUM macro, the round robin interval.
    - -

    Definition at line 111 of file chsys.c.

    - -

    References chVTDoTickI, currp, and rlist.

    - -

    Referenced by CH_IRQ_HANDLER().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__system.png b/ChibiOS_2.0.8/docs/html/group__system.png deleted file mode 100644 index 6f7cfde90e5f9cd1d292ec6c2029770707cc76a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1292 zcmeAS@N?(olHy`uVBq!ia0y~yU^Hc5U{K{?V_;xV-dCs1z`($k|H*Y zfq{X&#M9T6{T8 zPm1Q()#Z!`_*Im_t$R*U-}YO;tfb4{{H(W+PM??6F2}WWr)v9?OZo~q&UTK!S(*4I z3JXn=@#&I%`$ZxDMo)TLdVE^>)_?yGc*vc7W3%{;&6zc3Mh-3r&_2yz%72CjH4_^H zmd3CbY=5H=WYz!ir+53|*q-y(!}}z(_VFk19gw{*82I!I zZh1~+|M4lv zztom07});3XKidO|L5nElbgGp65Kd?7z&>xeE+(@@5Kw2E50_Sg0s|?WUiiZo#oov zX`8Nvzg{BiJoEMwrET+fO?5tz%9^UA)Sr24w~V##>sAY@FsCV;yvAHQ(1gw{HIY9?M|A^IE@mg5GV-=_)f)yPsZizce*)mVemgzJ)LN z<7(o9gVm?K-MO-E%N;eV%FA1>%bs4kH}CiCR2k1lCqMt?K6&>pd&QR*>*E{q-f^mES5+xOyDAKJcahsuNSOEFu*Z@&B^tk?ebfV+>?H`Vvp8i8-LO4T>R!h#Ce80utE$w9Z!mU}4 zuPWv|aMotB$JD%!8i$tjl&7Y$HXnR&U^}Pi-oHyYOaA}M*JrrHR`C1H&7a@it^1+H zam3u|0h0oA&-umMPxoHx_ni44@=0m6XQ;u-K&9{R*4i-_FdyiBeEj+DwbOQRoQOBL zH}BfHCH@8CrP9iirIvpC@$r?w0jY+qmzVFik1VrsVfgQC{WK-}^>_Bv;|?qaD+L43 zf{3*U;)dPdIbZhw_h`TI?|#b?soQt%T$y%zQWW=NX}wOhbDusH-Bc71M1a7H|Jc9F XdoL1b*|U*>fq}u()z4*}Q$iB}{#I=@ diff --git a/ChibiOS_2.0.8/docs/html/group__system_gafe2c7de6567e98e487e009e81e3be10b_cgraph.png b/ChibiOS_2.0.8/docs/html/group__system_gafe2c7de6567e98e487e009e81e3be10b_cgraph.png deleted file mode 100644 index ff9177c7a657551e8f59cded13d579541fd5094e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24871 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 diff --git a/ChibiOS_2.0.8/docs/html/group__test.html b/ChibiOS_2.0.8/docs/html/group__test.html deleted file mode 100644 index 6d429a9..0000000 --- a/ChibiOS_2.0.8/docs/html/group__test.html +++ /dev/null @@ -1,554 +0,0 @@ - - -ChibiOS/RT: Test Runtime - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Test Runtime

    -
    -
    -

    Description

    -

    Runtime code for the test suite execution, this code is not part of the OS and should not be included in user applications.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  testcase
     Structure representing a test case. More...

    -Defines

    #define DELAY_BETWEEN_TESTS   200
     Delay inserted between test cases.
    #define TEST_NO_BENCHMARKS   FALSE
     If TRUE then benchmarks are not included.
    #define test_fail(point)
     Test failure enforcement.
    #define test_assert(point, condition, msg)
     Test assertion.
    #define test_assert_sequence(point, expected)
     Test sequence assertion.
    #define test_assert_time_window(point, start, end)
     Test time window assertion.

    -Functions

    void test_printn (uint32_t n)
     Prints a decimal unsigned number.
    void test_print (char *msgp)
     Prints a line without final end-of-line.
    void test_println (char *msgp)
     Prints a line.
    void test_emit_token (char token)
     Emits a token into the tokens buffer.
    void test_terminate_threads (void)
     Pends a termination request in all the test-spawned threads.
    void test_wait_threads (void)
     Waits for the completion of all the test-spawned threads.
    void test_cpu_pulse (unsigned duration)
     CPU pulse.
    systime_t test_wait_tick (void)
     Delays execution until next system time tick.
    void test_start_timer (unsigned ms)
     Starts the test timer.
    msg_t TestThread (void *p)
     Test execution thread function.

    -Variables

    bool_t test_timer_done
     Set to TRUE when the test timer reaches its deadline.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define DELAY_BETWEEN_TESTS   200
    -
    -
    - -

    Delay inserted between test cases.

    - -

    Definition at line 42 of file test.h.

    - -
    -
    - -
    -
    - - - - -
    #define TEST_NO_BENCHMARKS   FALSE
    -
    -
    - -

    If TRUE then benchmarks are not included.

    - -

    Definition at line 49 of file test.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define test_fail( point ) 
    -
    -
    -Value:
    {                                                  \
    -  _test_fail(point);                                                        \
    -  return;                                                                   \
    -}
    -
    -

    Test failure enforcement.

    - -

    Definition at line 118 of file test.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define test_assert( point,
     condition,
     msg 
    )
    -
    -
    -Value:
    {                                \
    -  if (_test_assert(point, condition))                                       \
    -    return;                                                                 \
    -}
    -
    -

    Test assertion.

    -
    Parameters:
    - - - - -
    [in] point numeric assertion identifier
    [in] condition a boolean expression that must be verified to be true
    [in] msg failure message
    -
    -
    - -

    Definition at line 130 of file test.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define test_assert_sequence( point,
     expected 
    )
    -
    -
    -Value:
    {                             \
    -  if (_test_assert_sequence(point, expected))                               \
    -    return;                                                                 \
    -}
    -
    -

    Test sequence assertion.

    -
    Parameters:
    - - - -
    [in] point numeric assertion identifier
    [in] expected string to be matched with the tokens buffer
    -
    -
    - -

    Definition at line 141 of file test.h.

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define test_assert_time_window( point,
     start,
     end 
    )
    -
    -
    -Value:
    {                        \
    -  if (_test_assert_time_window(point, start, end))                          \
    -    return;                                                                 \
    -}
    -
    -

    Test time window assertion.

    -
    Parameters:
    - - - - -
    [in] point numeric assertion identifier
    [in] start initial time in the window (included)
    [in] end final time in the window (not included)
    -
    -
    - -

    Definition at line 153 of file test.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void test_printn (uint32_t  n ) 
    -
    -
    - -

    Prints a decimal unsigned number.

    -
    Parameters:
    - - -
    [in] n the number to be printed
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void test_print (char *  msgp ) 
    -
    -
    - -

    Prints a line without final end-of-line.

    -
    Parameters:
    - - -
    [in] msgp the message
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void test_println (char *  msgp ) 
    -
    -
    - -

    Prints a line.

    -
    Parameters:
    - - -
    [in] msgp the message
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void test_emit_token (char  token ) 
    -
    -
    - -

    Emits a token into the tokens buffer.

    -
    Parameters:
    - - -
    [in] token the token as a char
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    void test_terminate_threads (void  ) 
    -
    -
    - -

    Pends a termination request in all the test-spawned threads.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void test_wait_threads (void  ) 
    -
    -
    - -

    Waits for the completion of all the test-spawned threads.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void test_cpu_pulse (unsigned  duration ) 
    -
    -
    - -

    CPU pulse.

    -
    Note:
    The current implementation is not totally reliable.
    -
    Parameters:
    - - -
    [in] duration CPU pulse duration in milliseconds
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    systime_t test_wait_tick (void  ) 
    -
    -
    - -

    Delays execution until next system time tick.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void test_start_timer (unsigned  ms ) 
    -
    -
    - -

    Starts the test timer.

    -
    Parameters:
    - - -
    [in] ms time in milliseconds
    -
    -
    - -
    -
    - -
    -
    - - - - - - - - - -
    msg_t TestThread (void *  p ) 
    -
    -
    - -

    Test execution thread function.

    -
    Parameters:
    - - -
    [in] p pointer to a BaseChannel object for test output
    -
    -
    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    bool_t test_timer_done
    -
    -
    - -

    Set to TRUE when the test timer reaches its deadline.

    - -

    Definition at line 265 of file test.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__threads.html b/ChibiOS_2.0.8/docs/html/group__threads.html deleted file mode 100644 index 7ccd417..0000000 --- a/ChibiOS_2.0.8/docs/html/group__threads.html +++ /dev/null @@ -1,1546 +0,0 @@ - - -ChibiOS/RT: Threads - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - - -
    - -

    -Collaboration diagram for Threads:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Threads related APIs and services.

    -

    Operation mode

    -

    A thread is an abstraction of an independent instructions flow. In ChibiOS/RT a thread is represented by a "C" function owning a processor context, state informations and a dedicated stack area. In this scenario static variables are shared among all threads while automatic variables are local to the thread.
    - Operations defined for threads:

    -
      -
    • Init, a thread is prepared and put in the suspended state.
    • -
    • Create, a thread is started on the specified thread function. This operation is available in multiple variants, both static and dynamic.
    • -
    • Exit, a thread terminates by returning from its top level function or invoking a specific API, the thread can return a value that can be retrieved by other threads.
    • -
    • Wait, a thread waits for the termination of another thread and retrieves its return value.
    • -
    • Resume, a thread created in suspended state is started.
    • -
    • Sleep, the execution of a thread is suspended for the specified amount of time or the specified future absolute time is reached.
    • -
    • SetPriority, a thread changes its own priority level.
    • -
    • Yield, a thread voluntarily renounces to its time slot.
    • -
    -

    The threads subsystem is implicitly included in kernel however some of its part may be excluded by disabling them in chconf.h, see the CH_USE_WAITEXIT and CH_USE_DYNAMIC configuration options.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  Thread
     Structure representing a thread. More...

    -Defines

    #define THD_STATE_READY   0
     Thread state: Ready to run, waiting on the ready list.
    #define THD_STATE_CURRENT   1
     Thread state: Currently running.
    #define THD_STATE_SUSPENDED   2
     Thread state: Thread created in suspended state.
    #define THD_STATE_WTSEM   3
     Thread state: Waiting on a semaphore.
    #define THD_STATE_WTMTX   4
     Thread state: Waiting on a mutex.
    #define THD_STATE_WTCOND   5
     Thread state: Waiting in chCondWait().
    #define THD_STATE_SLEEPING   6
     Thread state: Waiting in chThdSleep() or chThdSleepUntil().
    #define THD_STATE_WTEXIT   7
     Thread state: Waiting in chThdWait().
    #define THD_STATE_WTOREVT   8
     Thread state: Waiting in chEvtWaitXXX().
    #define THD_STATE_WTANDEVT   9
     Thread state: Waiting in chEvtWaitAllTimeout().
    #define THD_STATE_SNDMSG   10
     Thread state: Waiting in chMsgSend().
    #define THD_STATE_WTMSG   11
     Thread state: Waiting in chMsgWait().
    #define THD_STATE_FINAL   12
     Thread state: After termination.
    #define THD_MEM_MODE_MASK   3
     Thread memory mode mask.
    #define THD_MEM_MODE_STATIC   0
     Thread memory mode: static.
    #define THD_MEM_MODE_HEAP   1
     Thread memory mode: heap.
    #define THD_MEM_MODE_MEMPOOL   2
     Thread memory mode: pool.
    #define THD_TERMINATE   4
     Termination requested.
    #define chThdSelf()   currp
     Returns a pointer to the current Thread.
    #define chThdGetPriority()   (currp->p_prio)
     Returns the current thread priority.
    #define chThdLS()   (void *)(currp + 1)
     Returns the pointer to the Thread local storage area, if any.
    #define chThdTerminated(tp)   ((tp)->p_state == THD_STATE_FINAL)
     Verifies if the specified thread is in the THD_STATE_FINAL state.
    #define chThdShouldTerminate()   (currp->p_flags & THD_TERMINATE)
     Verifies if the current thread has a termination request pending.
    #define chThdResumeI(tp)   chSchReadyI(tp)
     Resumes a thread created with chThdInit().
    #define chThdSleepS(time)   chSchGoSleepTimeoutS(THD_STATE_SLEEPING, time)
     Suspends the invoking thread for the specified time.
    #define chThdSleepSeconds(sec)   chThdSleep(S2ST(sec))
     Delays the invoking thread for the specified number of seconds.
    #define chThdSleepMilliseconds(msec)   chThdSleep(MS2ST(msec))
     Delays the invoking thread for the specified number of milliseconds.
    #define chThdSleepMicroseconds(usec)   chThdSleep(US2ST(usec))
     Delays the invoking thread for the specified number of microseconds.

    -Typedefs

    typedef msg_t(* tfunc_t )(void *)
     Thread function.

    -Functions

    Threadinit_thread (Thread *tp, tprio_t prio)
     Initializes a thread structure.
    ThreadchThdCreateI (void *wsp, size_t size, tprio_t prio, tfunc_t pf, void *arg)
     Creates a new thread into a static memory area.
    ThreadchThdCreateStatic (void *wsp, size_t size, tprio_t prio, tfunc_t pf, void *arg)
     Creates a new thread into a static memory area.
    ThreadchThdCreateFromHeap (MemoryHeap *heapp, size_t size, tprio_t prio, tfunc_t pf, void *arg)
     Creates a new thread allocating the memory from the heap.
    ThreadchThdCreateFromMemoryPool (MemoryPool *mp, tprio_t prio, tfunc_t pf, void *arg)
     Creates a new thread allocating the memory from the specified memory pool.
    tprio_t chThdSetPriority (tprio_t newprio)
     Changes the running thread priority level then reschedules if necessary.
    ThreadchThdResume (Thread *tp)
     Resumes a suspended thread.
    void chThdTerminate (Thread *tp)
     Requests a thread termination.
    void chThdSleep (systime_t time)
     Suspends the invoking thread for the specified time.
    void chThdSleepUntil (systime_t time)
     Suspends the invoking thread until the system time arrives to the specified value.
    void chThdYield (void)
     Yields the time slot.
    void chThdExit (msg_t msg)
     Terminates the current thread by specifying an exit status code.
    ThreadchThdAddRef (Thread *tp)
     Adds a reference to a thread object.
    void chThdRelease (Thread *tp)
     Releases a reference to a thread object.
    msg_t chThdWait (Thread *tp)
     Blocks the execution of the invoking thread until the specified thread terminates then the exit code is returned.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define THD_STATE_READY   0
    -
    -
    - -

    Thread state: Ready to run, waiting on the ready list.

    - -

    Definition at line 175 of file chthreads.h.

    - -

    Referenced by chMtxLockS().

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_CURRENT   1
    -
    -
    - -

    Thread state: Currently running.

    - -

    Definition at line 177 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_SUSPENDED   2
    -
    -
    - -

    Thread state: Thread created in suspended state.

    - -

    Definition at line 179 of file chthreads.h.

    - -

    Referenced by chThdResume().

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_WTSEM   3
    -
    -
    - -

    Thread state: Waiting on a semaphore.

    - -

    Definition at line 181 of file chthreads.h.

    - -

    Referenced by chMtxLockS(), chSemSignalWait(), chSemWaitS(), and chSemWaitTimeoutS().

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_WTMTX   4
    -
    -
    - -

    Thread state: Waiting on a mutex.

    - -

    Definition at line 183 of file chthreads.h.

    - -

    Referenced by chMtxLockS().

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_WTCOND   5
    -
    -
    - -

    Thread state: Waiting in chCondWait().

    - -

    Definition at line 185 of file chthreads.h.

    - -

    Referenced by chCondWaitS(), chCondWaitTimeoutS(), and chMtxLockS().

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_SLEEPING   6
    -
    -
    - -

    Thread state: Waiting in chThdSleep() or chThdSleepUntil().

    - -

    Definition at line 187 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_WTEXIT   7
    -
    -
    - -

    Thread state: Waiting in chThdWait().

    - -

    Definition at line 189 of file chthreads.h.

    - -

    Referenced by chThdWait().

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_WTOREVT   8
    -
    -
    - -

    Thread state: Waiting in chEvtWaitXXX().

    - -

    Definition at line 191 of file chthreads.h.

    - -

    Referenced by chEvtSignalI(), chEvtWaitAny(), chEvtWaitAnyTimeout(), chEvtWaitOne(), and chEvtWaitOneTimeout().

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_WTANDEVT   9
    -
    -
    - -

    Thread state: Waiting in chEvtWaitAllTimeout().

    - -

    Definition at line 193 of file chthreads.h.

    - -

    Referenced by chEvtSignalI(), chEvtWaitAll(), and chEvtWaitAllTimeout().

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_SNDMSG   10
    -
    -
    - -

    Thread state: Waiting in chMsgSend().

    - -

    Definition at line 195 of file chthreads.h.

    - -

    Referenced by chMsgSend(), and chMtxLockS().

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_WTMSG   11
    -
    -
    - -

    Thread state: Waiting in chMsgWait().

    - -

    Definition at line 197 of file chthreads.h.

    - -

    Referenced by chMsgSend(), and chMsgWait().

    - -
    -
    - -
    -
    - - - - -
    #define THD_STATE_FINAL   12
    -
    -
    - -

    Thread state: After termination.

    - -

    Definition at line 199 of file chthreads.h.

    - -

    Referenced by chThdExit(), chThdRelease(), and chThdWait().

    - -
    -
    - -
    -
    - - - - -
    #define THD_MEM_MODE_MASK   3
    -
    -
    - -

    Thread memory mode mask.

    - -

    Definition at line 204 of file chthreads.h.

    - -

    Referenced by chThdExit(), and chThdRelease().

    - -
    -
    - -
    -
    - - - - -
    #define THD_MEM_MODE_STATIC   0
    -
    -
    - -

    Thread memory mode: static.

    - -

    Definition at line 205 of file chthreads.h.

    - -

    Referenced by chThdExit().

    - -
    -
    - -
    -
    - - - - -
    #define THD_MEM_MODE_HEAP   1
    -
    -
    - -

    Thread memory mode: heap.

    - -

    Definition at line 206 of file chthreads.h.

    - -

    Referenced by chThdRelease().

    - -
    -
    - -
    -
    - - - - -
    #define THD_MEM_MODE_MEMPOOL   2
    -
    -
    - -

    Thread memory mode: pool.

    - -

    Definition at line 207 of file chthreads.h.

    - -

    Referenced by chThdRelease().

    - -
    -
    - -
    -
    - - - - -
    #define THD_TERMINATE   4
    -
    -
    - -

    Termination requested.

    - -

    Definition at line 208 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chThdSelf( )    currp
    -
    -
    - -

    Returns a pointer to the current Thread.

    - -

    Definition at line 253 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chThdGetPriority( )    (currp->p_prio)
    -
    -
    - -

    Returns the current thread priority.

    - -

    Definition at line 258 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chThdLS( )    (void *)(currp + 1)
    -
    -
    - -

    Returns the pointer to the Thread local storage area, if any.

    - -

    Definition at line 263 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chThdTerminated( tp )    ((tp)->p_state == THD_STATE_FINAL)
    -
    -
    - -

    Verifies if the specified thread is in the THD_STATE_FINAL state.

    -
    Parameters:
    - - -
    [in] tp the pointer to the thread
    -
    -
    -
    Return values:
    - - - -
    TRUE thread terminated.
    FALSE thread not terminated.
    -
    -
    - -

    Definition at line 272 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chThdShouldTerminate( )    (currp->p_flags & THD_TERMINATE)
    -
    -
    - -

    Verifies if the current thread has a termination request pending.

    -
    Return values:
    - - - -
    TRUE termination request pended.
    FALSE termination request not pended.
    -
    -
    - -

    Definition at line 280 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chThdResumeI( tp )    chSchReadyI(tp)
    -
    -
    - -

    Resumes a thread created with chThdInit().

    -
    Parameters:
    - - -
    [in] tp the pointer to the thread
    -
    -
    - -

    Definition at line 287 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chThdSleepS( time )    chSchGoSleepTimeoutS(THD_STATE_SLEEPING, time)
    -
    -
    - -

    Suspends the invoking thread for the specified time.

    -
    Parameters:
    - - -
    [in] time the delay in system ticks, the special values are handled as follow:

    -
      -
    • TIME_INFINITE the thread enters an infinite sleep state.
    • -
    • TIME_IMMEDIATE this value is accepted but interpreted as a normal time specification not as an immediate timeout specification.
    • -
    -
    -
    -
    - -

    Definition at line 301 of file chthreads.h.

    - -

    Referenced by canStart(), chThdSleep(), and chThdSleepUntil().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chThdSleepSeconds( sec )    chThdSleep(S2ST(sec))
    -
    -
    - -

    Delays the invoking thread for the specified number of seconds.

    -
    Note:
    The specified time is rounded up to a value allowed by the real system clock.
    -
    -The maximum specified value is implementation dependent.
    -
    Parameters:
    - - -
    [in] sec the time in seconds
    -
    -
    - -

    Definition at line 311 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chThdSleepMilliseconds( msec )    chThdSleep(MS2ST(msec))
    -
    -
    - -

    Delays the invoking thread for the specified number of milliseconds.

    -
    Note:
    The specified time is rounded up to a value allowed by the real system clock.
    -
    -The maximum specified value is implementation dependent.
    -
    Parameters:
    - - -
    [in] msec the time in milliseconds
    -
    -
    - -

    Definition at line 322 of file chthreads.h.

    - -

    Referenced by mmcConnect().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chThdSleepMicroseconds( usec )    chThdSleep(US2ST(usec))
    -
    -
    - -

    Delays the invoking thread for the specified number of microseconds.

    -
    Note:
    The specified time is rounded up to a value allowed by the real system clock.
    -
    -The maximum specified value is implementation dependent.
    -
    Parameters:
    - - -
    [in] usec the time in microseconds
    -
    -
    - -

    Definition at line 333 of file chthreads.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef msg_t(* tfunc_t)(void *)
    -
    -
    - -

    Thread function.

    - -

    Definition at line 211 of file chthreads.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    Thread * init_thread (Thread tp,
    tprio_t  prio 
    )
    -
    -
    - -

    Initializes a thread structure.

    -
    Parameters:
    - - - -
    [in] tp pointer to the thread
    [in] prio the priority level for the new thread
    -
    -
    -
    Returns:
    The same thread pointer passed as parameter.
    - -

    Definition at line 74 of file chthreads.c.

    - -

    References list_init, Thread::p_epending, Thread::p_flags, Thread::p_msgqueue, Thread::p_mtxlist, Thread::p_prio, Thread::p_realprio, Thread::p_refs, Thread::p_state, Thread::p_time, Thread::p_waiting, queue_init, REG_INSERT, and THREAD_EXT_INIT.

    - -

    Referenced by chSysInit(), and chThdCreateI().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Thread * chThdCreateI (void *  wsp,
    size_t  size,
    tprio_t  prio,
    tfunc_t  pf,
    void *  arg 
    )
    -
    -
    - -

    Creates a new thread into a static memory area.

    -

    The new thread is initialized but not inserted in the ready list, the initial state is THD_STATE_SUSPENDED.

    -
    Note:
    A thread can terminate by calling chThdExit() or by simply returning from its main function.
    -
    -Threads created using this function do not obey to the CH_DBG_FILL_THREADS debug option because it would keep the kernel locked for too much time.
    -
    Parameters:
    - - - - - - -
    [out] wsp pointer to a working area dedicated to the thread stack
    [in] size size of the working area
    [in] prio the priority level for the new thread
    [in] pf the thread function
    [in] arg an argument passed to the thread function. It can be NULL.
    -
    -
    -
    Returns:
    The pointer to the Thread structure allocated for the thread into the working space area.
    - -

    Definition at line 137 of file chthreads.c.

    - -

    References chDbgCheck, HIGHPRIO, init_thread(), SETUP_CONTEXT, and THD_WA_SIZE.

    - -

    Referenced by chThdCreateFromHeap(), chThdCreateFromMemoryPool(), and chThdCreateStatic().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Thread * chThdCreateStatic (void *  wsp,
    size_t  size,
    tprio_t  prio,
    tfunc_t  pf,
    void *  arg 
    )
    -
    -
    - -

    Creates a new thread into a static memory area.

    -
    Note:
    A thread can terminate by calling chThdExit() or by simply returning from its main function.
    -
    Parameters:
    - - - - - - -
    [out] wsp pointer to a working area dedicated to the thread stack
    [in] size size of the working area
    [in] prio the priority level for the new thread
    [in] pf the thread function
    [in] arg an argument passed to the thread function. It can be NULL.
    -
    -
    -
    Returns:
    The pointer to the Thread structure allocated for the thread into the working space area.
    - -

    Definition at line 163 of file chthreads.c.

    - -

    References chSchWakeupS(), chSysLock, chSysUnlock, chThdCreateI(), RDY_OK, STACK_FILL_VALUE, and THREAD_FILL_VALUE.

    - -

    Referenced by chibios_rt::BaseThread::BaseThread(), and chSysInit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Thread * chThdCreateFromHeap (MemoryHeap heapp,
    size_t  size,
    tprio_t  prio,
    tfunc_t  pf,
    void *  arg 
    )
    -
    -
    - -

    Creates a new thread allocating the memory from the heap.

    -
    Note:
    A thread can terminate by calling chThdExit() or by simply returning from its main function.
    -
    -The memory allocated for the thread is not released when the thread terminates but when a chThdWait() is performed.
    -
    -The function is available only if the CH_USE_DYNAMIC, CH_USE_HEAP and CH_USE_WAITEXIT options are enabled in chconf.h.
    -
    Parameters:
    - - - - - - -
    [in] heapp heap from which allocate the memory or NULL for the default heap
    [in] size size of the working area to be allocated
    [in] prio the priority level for the new thread
    [in] pf the thread function
    [in] arg an argument passed to the thread function. It can be NULL.
    -
    -
    -
    Returns:
    The pointer to the Thread structure allocated for the thread into the working space area.
    -
    Return values:
    - - -
    NULL if the memory cannot be allocated.
    -
    -
    - -

    Definition at line 200 of file chthreads.c.

    - -

    References chHeapAlloc(), chSchWakeupS(), chSysLock, chSysUnlock, chThdCreateI(), Thread::p_flags, RDY_OK, STACK_FILL_VALUE, and THREAD_FILL_VALUE.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Thread * chThdCreateFromMemoryPool (MemoryPool mp,
    tprio_t  prio,
    tfunc_t  pf,
    void *  arg 
    )
    -
    -
    - -

    Creates a new thread allocating the memory from the specified memory pool.

    -
    Note:
    A thread can terminate by calling chThdExit() or by simply returning from its main function.
    -
    -The memory allocated for the thread is not released when the thread terminates but when a chThdWait() is performed.
    -
    -The function is available only if the CH_USE_DYNAMIC, CH_USE_MEMPOOLS and CH_USE_WAITEXIT options are enabled in chconf.h.
    -
    Parameters:
    - - - - - -
    [in] mp pointer to the memory pool object
    [in] prio the priority level for the new thread
    [in] pf the thread function
    [in] arg an argument passed to the thread function. It can be NULL.
    -
    -
    -
    Returns:
    The pointer to the Thread structure allocated for the thread into the working space area.
    -
    Return values:
    - - -
    NULL if the memory pool is empty.
    -
    -
    - -

    Definition at line 245 of file chthreads.c.

    - -

    References chDbgCheck, chPoolAlloc(), chSchWakeupS(), chSysLock, chSysUnlock, chThdCreateI(), MemoryPool::mp_object_size, Thread::p_flags, Thread::p_mpool, RDY_OK, STACK_FILL_VALUE, and THREAD_FILL_VALUE.

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    tprio_t chThdSetPriority (tprio_t  newprio ) 
    -
    -
    - -

    Changes the running thread priority level then reschedules if necessary.

    -
    Note:
    The function returns the real thread priority regardless of the current priority that could be higher than the real priority because the priority inheritance mechanism.
    -
    Parameters:
    - - -
    [in] newprio the new priority level of the running thread
    -
    -
    -
    Returns:
    The old priority level.
    - -

    Definition at line 282 of file chthreads.c.

    - -

    References chDbgCheck, chSchRescheduleS(), chSysLock, chSysUnlock, currp, HIGHPRIO, and LOWPRIO.

    - -

    Referenced by chibios_rt::BaseThread::SetPriority().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    Thread * chThdResume (Thread tp ) 
    -
    -
    - -

    Resumes a suspended thread.

    -
    Note:
    Use this function to resume threads created with chThdInit().
    -
    Parameters:
    - - -
    [in] tp pointer to the thread
    -
    -
    -
    Returns:
    The pointer to the thread.
    - -

    Definition at line 310 of file chthreads.c.

    - -

    References chDbgAssert, chSchWakeupS(), chSysLock, chSysUnlock, Thread::p_state, RDY_OK, and THD_STATE_SUSPENDED.

    - -

    Referenced by chibios_rt::BaseThread::Resume().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chThdTerminate (Thread tp ) 
    -
    -
    - -

    Requests a thread termination.

    -
    Note:
    The thread is not terminated but a termination request is added to its p_flags field. The thread can read this status by invoking chThdShouldTerminate() and then terminate cleanly.
    -
    Parameters:
    - - -
    [in] tp pointer to the thread
    -
    -
    - -

    Definition at line 329 of file chthreads.c.

    - -

    References chSysLock, chSysUnlock, and Thread::p_flags.

    - -

    Referenced by chibios_rt::BaseThread::Terminate().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chThdSleep (systime_t  time ) 
    -
    -
    - -

    Suspends the invoking thread for the specified time.

    -
    Parameters:
    - - -
    [in] time the delay in system ticks, the special values are handled as follow:

    -
      -
    • TIME_INFINITE the thread enters an infinite sleep state.
    • -
    • TIME_IMMEDIATE this value is accepted but interpreted as a normal time specification not as an immediate timeout specification.
    • -
    -
    -
    -
    - -

    Definition at line 348 of file chthreads.c.

    - -

    References chDbgCheck, chSysLock, chSysUnlock, chThdSleepS, and TIME_INFINITE.

    - -

    Referenced by chibios_rt::BaseThread::Sleep().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chThdSleepUntil (systime_t  time ) 
    -
    -
    - -

    Suspends the invoking thread until the system time arrives to the specified value.

    -
    Parameters:
    - - -
    [in] time absolute system time
    -
    -
    - -

    Definition at line 363 of file chthreads.c.

    - -

    References chSysLock, chSysUnlock, chThdSleepS, and chTimeNow.

    - -

    Referenced by chibios_rt::BaseThread::SleepUntil().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chThdYield (void  ) 
    -
    -
    - -

    Yields the time slot.

    -

    Yields the CPU control to the next thread in the ready list with equal priority, if any.

    - -

    Definition at line 376 of file chthreads.c.

    - -

    References chSchDoYieldS, chSysLock, and chSysUnlock.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chThdExit (msg_t  msg ) 
    -
    -
    - -

    Terminates the current thread by specifying an exit status code.

    -
    Parameters:
    - - -
    [in] msg thread exit code. The code can be retrieved by using chThdWait().
    -
    -
    - -

    Definition at line 389 of file chthreads.c.

    - -

    References chSchGoSleepS(), chSchReadyI(), chSysLock, Thread::exitcode, list_remove(), notempty, Thread::p_flags, Thread::p_u, Thread::p_waiting, REG_REMOVE, THD_MEM_MODE_MASK, THD_MEM_MODE_STATIC, THD_STATE_FINAL, and THREAD_EXT_EXIT.

    - -

    Referenced by chibios_rt::BaseThread::Exit().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    Thread * chThdAddRef (Thread tp ) 
    -
    -
    - -

    Adds a reference to a thread object.

    -
    Parameters:
    - - -
    [in] tp pointer to the thread
    -
    -
    -
    Returns:
    The same thread pointer passed as parameter representing the new reference.
    - -

    Definition at line 418 of file chthreads.c.

    - -

    References chDbgAssert, chSysLock, chSysUnlock, and Thread::p_refs.

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chThdRelease (Thread tp ) 
    -
    -
    - -

    Releases a reference to a thread object.

    -

    If the references counter reaches zero and the thread is in the THD_STATE_FINAL state then the thread's memory is returned to the proper allocator.

    -
    Note:
    Static threads are not affected.
    -
    Parameters:
    - - -
    [in] tp pointer to the thread
    -
    -
    - -

    Definition at line 436 of file chthreads.c.

    - -

    References chDbgAssert, chHeapFree(), chPoolFree(), chSysLock, chSysUnlock, Thread::p_flags, Thread::p_mpool, Thread::p_refs, Thread::p_state, REG_REMOVE, THD_MEM_MODE_HEAP, THD_MEM_MODE_MASK, THD_MEM_MODE_MEMPOOL, and THD_STATE_FINAL.

    - -

    Referenced by chRegNextThread(), and chThdWait().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    - -
    -
    - - - - - - - - - -
    msg_t chThdWait (Thread tp ) 
    -
    -
    - -

    Blocks the execution of the invoking thread until the specified thread terminates then the exit code is returned.

    -

    This function waits for the specified thread to terminate then decrements its reference counter, if the counter reaches zero then the thread working area is returned to the proper allocator.
    - The memory used by the exited thread is handled in different ways depending on the API that spawned the thread:

    -
      -
    • If the thread was spawned by chThdCreateStatic() or by chThdInit() then nothing happens and the thread working area is not released or modified in any way. This is the default, totally static, behavior.
    • -
    • If the thread was spawned by chThdCreateFromHeap() then the working area is returned to the system heap.
    • -
    • If the thread was spawned by chThdCreateFromMemoryPool() then the working area is returned to the owning memory pool.
    • -
    -

    Please read the Threads Lifecycle article for more details.

    -
    Note:
    After invoking chThdWait() the thread pointer becomes invalid and must not be used as parameter for further system calls.
    -
    -The function is available only if the CH_USE_WAITEXIT option is enabled in chconf.h.
    -
    -If CH_USE_DYNAMIC is not specified this function just waits for the thread termination, no memory allocators are involved.
    -
    Parameters:
    - - -
    [in] tp pointer to the thread
    -
    -
    -
    Returns:
    The exit code from the terminated thread.
    - -

    Definition at line 499 of file chthreads.c.

    - -

    References chDbgAssert, chDbgCheck, chSchGoSleepS(), chSysLock, chSysUnlock, chThdRelease(), currp, Thread::exitcode, list_insert(), Thread::p_refs, Thread::p_state, Thread::p_u, Thread::p_waiting, THD_STATE_FINAL, and THD_STATE_WTEXIT.

    - -

    Referenced by chibios_rt::BaseThread::Wait().

    - -

    -Here is the call graph for this function:
    -
    -
    - - -
    -

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__threads.png b/ChibiOS_2.0.8/docs/html/group__threads.png deleted file mode 100644 index 0246c1d8b58e9fdcc75fa987916630131226a3f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1148 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 KpUXO@geCxo#jGFz diff --git a/ChibiOS_2.0.8/docs/html/group__threads_ga24ab3a3a4d70214ee360867a1c3c75ac_cgraph.png b/ChibiOS_2.0.8/docs/html/group__threads_ga24ab3a3a4d70214ee360867a1c3c75ac_cgraph.png deleted file mode 100644 index a9fe3e6a1fba09e28d942883525cec2fb2647a9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5576 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 Bj(Y$A diff --git a/ChibiOS_2.0.8/docs/html/group__threads_ga2c1ce2be73cd177af7e577b282232a7d_cgraph.png b/ChibiOS_2.0.8/docs/html/group__threads_ga2c1ce2be73cd177af7e577b282232a7d_cgraph.png deleted file mode 100644 index 0f6736f6a161c21eb1bc607480edd95c34416791..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3142 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 I&MBb@05v1dEdT%j diff --git a/ChibiOS_2.0.8/docs/html/group__threads_ga50b84e3e82a4e09c1066e1d422e4c780_cgraph.png b/ChibiOS_2.0.8/docs/html/group__threads_ga50b84e3e82a4e09c1066e1d422e4c780_cgraph.png deleted file mode 100644 index 73cf319c186511ad9de0ef98eb320c7a5fbebe95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6195 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 diff --git a/ChibiOS_2.0.8/docs/html/group__threads_ga5a5d9388c64e4c1a3aec129d2831eefe_cgraph.png b/ChibiOS_2.0.8/docs/html/group__threads_ga5a5d9388c64e4c1a3aec129d2831eefe_cgraph.png deleted file mode 100644 index 2e1ad482676005df7a781e9b8eb8a6d57ff565eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1747 zcmeAS@N?(olHy`uVBq!ia0y~yU_8vgz@W;(#=yW}_onG90|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj)Ct;bB?~3~Z&IE{-7;bKc(d?Ga9uVE^#n__w2zilW4lU}1k5 z8>vNxY69Ci&4s5Pkzx*99PYB~;$-nVlRqxtSR?hZr`Ijs`u5JV9iJC`6Mm5Sdrw?@*>}bh{5(8cY!pA` zRaHqbs3rR;_tgBYQ@W<3;Z@0Sx=>y4(BT!f?0qM{oY<{fpw-6EU|aodi<&6ck~p5- zclj8S3)LMbO7>bea`brS#sqO`Y>?G^d@Z9`&&9<>w*BaYj*g&y4D$Tf+e;Fk7FqiE z`dXgbK6}=zqTKr$>ukd|e{Ej#+El-~djIRv?woA~YgS!f6)HP_{{8>Svv-GE{Lg=L z%1C>A+1aFL|9Xf%E-rrm zM=(9=$A4+1GqY7rMaDTk;IVU$P36l=)!l~AuAC}-Y3g_B z-#K03lZlsN^vZuf+jb^@je_Buqi1)``@1jjf8N`<^OgtyPOJS@X=~NXk@nu^((h11 zm8SbfGY{SLS+=40a9jBM&K25Q@7$SY>SKB+BJR^C>-%fprxm{WEM=Q_ZGUKx*#z5$ z9M&fR`T75!`lNlxFx&n6W3P1i+AfW{%U!1vJ@eb7;0ewf>*g;v-M-|#DpLc;uUFssnQo{A-J5@s$B)rs&z2CovZtpS zTNx7H&W~H$KX=($>9(}_EwhhC&D>U$m0bI#eBbRY(=F=E%ltk{?Tz!i5WN4r_{H2+ zpRPPgdY_~gJR{)fi$8yEWj^?t)v%+m|MY^&NYz{&cePK4mwa0!P!hZS>9;110~EmJ)46TFaSrQpTN8cO<+r;gWxo3*@S^jlP()PDw>Z(ApHIqM$Yt1; zYNVf7xpT+j{q=8CHdcIa;}-t%x$~B{PW2oG)+_n*1GB{RL+;Hyb8e5v{j&R!M;%;# zy_)=*QDk29cb046Ue`D8Ew>HUdG~k6)w|cbcqtRbQFYm3*`rZt^PJ-ZM9hLGX&+lbUa@uIg{o(Vc4_wDJy55XbDj znt%6XF1{mSDf_GN)(e)mw_h*+>GpZ$elRnvC*qVx7H?G8ZGQzczfaL6*tcFTKV4ooi`=;LX*go zO1Ib+aWTKz{Tm9ju4%tX-`x8AYVC@!!gPgtO{Mnf)AMVi{=3a*`cO6JO5Kkmr|1FGQ$Sv+t{u%ylf{C$=~ANF2L#r>E+`VNha|5&pEIri=NHfuQp P0|SGntDnm{r-UW|%CKeh diff --git a/ChibiOS_2.0.8/docs/html/group__threads_ga94a5727ecdbe0f738dfc8e1ede1c3409_cgraph.png b/ChibiOS_2.0.8/docs/html/group__threads_ga94a5727ecdbe0f738dfc8e1ede1c3409_cgraph.png deleted file mode 100644 index 6ea4bb5f0b1a17e189c36d4c332c1336bb439256..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7011 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 diff --git a/ChibiOS_2.0.8/docs/html/group__threads_gac6de13d4044b32d3ae9e2066b5d4c030_cgraph.png b/ChibiOS_2.0.8/docs/html/group__threads_gac6de13d4044b32d3ae9e2066b5d4c030_cgraph.png deleted file mode 100644 index cf07e07295caa7e7ccac2e2a32688748660238dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1081 zcmeAS@N?(olHy`uVBq!ia0y~yV7Se|z@W;(#=yXET6&Hq0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj)Ct;bB?~49vGZT^vIy=DeL_pCRHXa%}(hY$nfH38l9qR=L`YX>3#Xd6u*ktVjWa&y z>Ad5cR`@*c{igb&oA24Vi}Ua8soXv@KRwM@#(_hzMZgI}Oe#2%u%9JCPojWZVW^`Ki&Mja#z|rt>hw#m%Ju|d? zlAP5hAN=v7!s4aMj9E9nG5xpQ$;pr);&5*Dp)LzSCn4^mZXPZHIV~uy+uuFjUoXINt^ecI`Wa6? zS2A2Z7^T0xTTZ!S#!1Jej65AT9`_ahoZMlxQ?zmV{*%j&Uuk{w&G6}p+jos~H*cHU(;>pZbHz?>RY*awOWx9;h%>iE*QWyh=1_+T0R`MYAbRI$Fd+jDEyn?^ehCc)^%H;;yV6J9+tA?oDm zDU0Q+jne!DC%&o>2t3YEDzZUcR{giwfy+TFtDhb3zkPIW*(0spM;CM-zH-ewW7i3( zsdwl9y}=y2s%=wG3ICBW_Eh8g?`JM&>8vlSdtCbK-x}97zbb;cBpK9q?b`O=%CD@f z`19YQjXM~Yp8A*;aa6_c?mJbf^*6W4%HKb-DZQIpU$OdZRNd`u&i>~ezkHv6>R`bV zbuX6>zNV61N*l6|<}sxI`o(tfx;cm7otN+4?ccVgq*nWl4f6r-Da)Q_WV9%4GngJ3 z_j`5Ow2HX8wR?DTzyHq77vHe+XX2*q-#y+e|L6LIi{W^Cwq$@NnJUZrP z_bvEy-{id)7VKhj&}3y@VLnaO|8#0~S?%A8nGBW>yd|8nx8;9+{n#y@>(y_U{ZD0+ zy{x96OmVAxWnYoC$d>&<9L{6gyq`~>F2C;BT=$>{j!#&e7rJ65-0poz4l1Q$M1r|ey6{yw!g9$t86Xq{q;Zijg_0=|G%$Wx*-`1l*?ZHVdi{c9JDi_ SR*Qjwfx*+&&t;ucLK6TwKmRZQ diff --git a/ChibiOS_2.0.8/docs/html/group__threads_gad3ccc1a6f054c543258ed2fe97ed2f58_cgraph.png b/ChibiOS_2.0.8/docs/html/group__threads_gad3ccc1a6f054c543258ed2fe97ed2f58_cgraph.png deleted file mode 100644 index fe87836206ca536d2a131c308aaa5c8dd5b1e28a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8464 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 - -ChibiOS/RT: Time and Virtual Timers - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Time and Virtual Timers
    - -[Base Kernel Services] -

    -
    -
    - -

    -Collaboration diagram for Time and Virtual Timers:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Time and Virtual Timers related APIs and services.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  VirtualTimer
     Virtual Timer descriptor structure. More...
    struct  VTList
     Virtual timers list header. More...

    -Defines

    #define S2ST(sec)   ((systime_t)((sec) * CH_FREQUENCY))
     Time conversion utility.
    #define MS2ST(msec)   ((systime_t)(((((msec) - 1L) * CH_FREQUENCY) / 1000L) + 1L))
     Time conversion utility.
    #define US2ST(usec)   ((systime_t)(((((usec) - 1L) * CH_FREQUENCY) / 1000000L) + 1L))
     Time conversion utility.
    #define chVTDoTickI()
     Virtual timers ticker.
    #define chVTIsArmedI(vtp)   ((vtp)->vt_func != NULL)
     Returns TRUE if the speciified timer is armed.
    #define chTimeNow()   (vtlist.vt_systime)
     Current system time.

    -Typedefs

    typedef void(* vtfunc_t )(void *)
     Virtual Timer callback function.
    typedef struct VirtualTimer VirtualTimer
     Virtual Timer structure type.

    -Functions

    void vt_init (void)
     Virtual Timers initialization.
    void chVTSetI (VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par)
     Enables a virtual timer.
    void chVTResetI (VirtualTimer *vtp)
     Disables a Virtual Timer.
    bool_t chTimeIsWithin (systime_t start, systime_t end)
     Checks if the current system time is within the specified time window.

    -Variables

    VTList vtlist
     Virtual timers delta list header.
    VTList vtlist
     Virtual timers delta list header.
    -

    Define Documentation

    - -
    -
    - - - - - - - - - -
    #define S2ST( sec )    ((systime_t)((sec) * CH_FREQUENCY))
    -
    -
    - -

    Time conversion utility.

    -

    Converts from seconds to system ticks number.

    -
    Note:
    The result is rounded upward to the next tick boundary.
    - -

    Definition at line 43 of file chvt.h.

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define MS2ST( msec )    ((systime_t)(((((msec) - 1L) * CH_FREQUENCY) / 1000L) + 1L))
    -
    -
    - -

    Time conversion utility.

    -

    Converts from milliseconds to system ticks number.

    -
    Note:
    The result is rounded upward to the next tick boundary.
    - -

    Definition at line 50 of file chvt.h.

    - -

    Referenced by mmcStart(), and tmrfunc().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define US2ST( usec )    ((systime_t)(((((usec) - 1L) * CH_FREQUENCY) / 1000000L) + 1L))
    -
    -
    - -

    Time conversion utility.

    -

    Converts from microseconds to system ticks number.

    -
    Note:
    The result is rounded upward to the next tick boundary.
    - -

    Definition at line 57 of file chvt.h.

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chVTDoTickI( ) 
    -
    -
    -Value:
    {                                                 \
    -  vtlist.vt_systime++;                                                  \
    -  if (&vtlist != (VTList *)vtlist.vt_next) {                            \
    -    VirtualTimer *vtp;                                                  \
    -                                                                        \
    -    --vtlist.vt_next->vt_time;                                          \
    -    while (!(vtp = vtlist.vt_next)->vt_time) {                          \
    -      vtfunc_t fn = vtp->vt_func;                                       \
    -      vtp->vt_func = (vtfunc_t)NULL;                                    \
    -      vtp->vt_next->vt_prev = (void *)&vtlist;                          \
    -      (&vtlist)->vt_next = vtp->vt_next;                                \
    -      fn(vtp->vt_par);                                                  \
    -    }                                                                   \
    -  }                                                                     \
    -}
    -
    -

    Virtual timers ticker.

    - -

    Definition at line 106 of file chvt.h.

    - -

    Referenced by chSysTimerHandlerI().

    - -
    -
    - -
    -
    - - - - - - - - - -
    #define chVTIsArmedI( vtp )    ((vtp)->vt_func != NULL)
    -
    -
    - -

    Returns TRUE if the speciified timer is armed.

    - -

    Definition at line 139 of file chvt.h.

    - -

    Referenced by chSchGoSleepTimeoutS(), and chibios_rt::Timer::IsArmed().

    - -
    -
    - -
    -
    - - - - - - - - -
    #define chTimeNow( )    (vtlist.vt_systime)
    -
    -
    - -

    Current system time.

    -

    Returns the number of system ticks since the chSysInit() invocation.

    -
    Note:
    The counter can reach its maximum and then restart from zero.
    -
    -This function is designed to work with the chThdSleepUntil().
    -
    Returns:
    The system time in ticks.r
    - -

    Definition at line 150 of file chvt.h.

    - -

    Referenced by chDbgTrace(), chThdSleepUntil(), chTimeIsWithin(), chibios_rt::System::GetTime(), macWaitReceiveDescriptor(), and macWaitTransmitDescriptor().

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef void(* vtfunc_t)(void *)
    -
    -
    - -

    Virtual Timer callback function.

    - -

    Definition at line 62 of file chvt.h.

    - -
    -
    - -
    -
    - - - - -
    typedef struct VirtualTimer VirtualTimer
    -
    -
    - -

    Virtual Timer structure type.

    - -

    Definition at line 67 of file chvt.h.

    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - - - - - -
    void vt_init (void  ) 
    -
    -
    - -

    Virtual Timers initialization.

    -
    Note:
    Internal use only.
    - -

    Definition at line 47 of file chvt.c.

    - -

    References VTList::vt_next, VTList::vt_prev, VTList::vt_systime, and VTList::vt_time.

    - -

    Referenced by chSysInit().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void chVTSetI (VirtualTimer vtp,
    systime_t  time,
    vtfunc_t  vtfunc,
    void *  par 
    )
    -
    -
    - -

    Enables a virtual timer.

    -
    Note:
    The associated function is invoked by an interrupt handler within the I-Locked state, see System States.
    -
    Parameters:
    - - - - - -
    [out] vtp the VirtualTimer structure pointer
    [in] time the number of time ticks, the value TIME_INFINITE is notallowed. The value TIME_IMMEDIATE is allowed but interpreted as a normal time specification not as an immediate timeout specification.
    [in] vtfunc the timer callback function. After invoking the callback the timer is disabled and the structure can be disposed or reused.
    [in] par a parameter that will be passed to the callback function
    -
    -
    - -

    Definition at line 70 of file chvt.c.

    - -

    References chDbgCheck, TIME_INFINITE, VirtualTimer::vt_func, VirtualTimer::vt_next, VTList::vt_next, VirtualTimer::vt_par, VirtualTimer::vt_prev, and VirtualTimer::vt_time.

    - -

    Referenced by chSchGoSleepTimeoutS(), mmcStart(), chibios_rt::Timer::Set(), and tmrfunc().

    - -
    -
    - -
    -
    - - - - - - - - - -
    void chVTResetI (VirtualTimer vtp ) 
    -
    -
    - -

    Disables a Virtual Timer.

    -
    Note:
    The timer MUST be active when this function is invoked.
    -
    Parameters:
    - - -
    [in] vtp the VirtualTimer structure pointer
    -
    -
    - -

    Definition at line 97 of file chvt.c.

    - -

    References chDbgAssert, chDbgCheck, VirtualTimer::vt_func, VirtualTimer::vt_next, VirtualTimer::vt_prev, and VirtualTimer::vt_time.

    - -

    Referenced by chSchGoSleepTimeoutS(), mmcStop(), and chibios_rt::Timer::Reset().

    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool_t chTimeIsWithin (systime_t  start,
    systime_t  end 
    )
    -
    -
    - -

    Checks if the current system time is within the specified time window.

    -
    Note:
    When start==end then the function returns always true because the whole time range is specified.
    -
    Parameters:
    - - - -
    [in] start the start of the time window (inclusive)
    [in] end the end of the time window (non inclusive)
    -
    -
    -
    Return values:
    - - - -
    TRUE current time within the specified time window.
    FALSE current time not within the specified time window.
    -
    -
    - -

    Definition at line 122 of file chvt.c.

    - -

    References chTimeNow.

    - -
    -
    -

    Variable Documentation

    - -
    -
    - - - - -
    VTList vtlist
    -
    -
    - -

    Virtual timers delta list header.

    - -

    Definition at line 41 of file chvt.c.

    - -
    -
    - -
    -
    - - - - -
    VTList vtlist
    -
    -
    - -

    Virtual timers delta list header.

    - -

    Definition at line 41 of file chvt.c.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__time.png b/ChibiOS_2.0.8/docs/html/group__time.png deleted file mode 100644 index 0d32720564178aa0ffd690d00d3daef89b00c467..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1278 zcmeAS@N?(olHy`uVBq!ia0y~yV030+U{K{?V_;yo@v{310|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj)Ct;bB?~3@i&gT^vIy=DfXoK3mRJhV8@i-L;ojEfMnCSR23S z+lQ(TDjGo(WQ5}R|1oHuT7BUX*Q2eovNSm?O%{DybYdGi^Rkif2Hi(B_u41&`I zvZneo)?6;>V5;~#ssHP*cNS)LTnQWxqNaAPnA*m$FVD)w(VdYeJw1K)IY-^id-m{H ztjiBKWNBE<;1@EX{g$t(>;j(VgACl<+`h*bOuMPq78Y1**wJyT`{;xY4xKg^7lsI) z&JKnR5<-HE8tWyrPKQs;`JJD1X35^J$M*#NOP4P{|7G{x?P67Xf9lUVH|hGFJ9qx? zoAhnlhSb8R-lyZA?1-_vRrk;7N8MI6?a$&nrY>EpRoXYzEH5&0mc={;cK&na>S|9! z9p*~)Uwz!*psB&I-fXUJ|I($Z4AJKKpZ4C{7kqW<|2)h3R554y+G)zHw_<;96IIz< zziIA2uG3|a$IX|%JwEO5o8)cbmH(P#ERF0-UyH>Bajj=GVqPH;P(A5x_X_#b63cxj z&5o|W`qF&&zj>=UZfxVcxjehR%FMVps_wIG`2Q`*pERrfK8Ni{d-pJdi;8K)-9fk(+@8{_4&D}ZSAvr7JczO$(Dtm)#ix?3Mw$I;BdI|=w$ZG z81u9!$HJ{I|8Lv6o6F(ipLI3+-a7wod87aO=jW$-vrdM5HL}dyE~>kE!j3dEy>*iF z*4IyC5;-+zZ>vmuE(owfPbK1(Sa`uEr0*39zfk>bZ2t0X5>yBM%txaoWJyhxDE zrC-l=v-a(KcILEsw@&sMn@{uXi*K$yKkc@SammKBAwr7AX5ts)K7ZlASw7FMYTByR z?fJ*D(mV_I7614k|NhjqYtMVkgVzf$U2^^Hx$Tb@o`3f2ygg(6b*r>_Gs9+Iool{j zL+Z@CX`$E8^9Y~%aWDKr&h4kNn^*mFowj?|g~)~Z_S|Vg0AAv#xNJT)cSEzfC#Qr@waFx#{mI|Ft)3MYjFBzg~@(oo~**`uF!<%;=cI z^5M%hv;TG;j0_zsqR%)q O1_n=8KbLh*2~7YeUTPQs diff --git a/ChibiOS_2.0.8/docs/html/group__types.html b/ChibiOS_2.0.8/docs/html/group__types.html deleted file mode 100644 index 5887f99..0000000 --- a/ChibiOS_2.0.8/docs/html/group__types.html +++ /dev/null @@ -1,352 +0,0 @@ - - -ChibiOS/RT: Types - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Types
    - -[Kernel] -

    -
    -
    - -

    -Collaboration diagram for Types:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    System types and macros.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   const
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef int32_t bool_t
     Boolean, recommended the fastest signed.
    typedef uint8_t tmode_t
     Thread mode flags, uint8_t is ok.
    typedef uint8_t tstate_t
     Thread state, uint8_t is ok.
    typedef uint8_t trefs_t
     Thread references counter, uint8_t is ok.
    typedef uint32_t tprio_t
     Priority, use the fastest unsigned type.
    typedef int32_t msg_t
     Message, use signed pointer equivalent.
    typedef int32_t eventid_t
     Event Id, use fastest signed.
    typedef uint32_t eventmask_t
     Event Mask, recommended fastest unsigned.
    typedef uint32_t systime_t
     System Time, recommended fastest unsigned.
    typedef int32_t cnt_t
     Counter, recommended fastest signed.
    -

    Define Documentation

    - -
    -
    - - - - -
    #define INLINE   inline
    -
    -
    - -

    Inline function modifier.

    - -

    Definition at line 104 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define ROMCONST   const
    -
    -
    - -

    ROM constant modifier.

    -
    Note:
    This is required because some compilers require a custom keyword, usually this macro is just set to "const" for the GCC compiler.
    -
    -This macro is not used to place constants in different address spaces (like AVR requires as example) because it is assumed that a pointer to a ROMCONST constant is compatible with a pointer to a normal variable. It is just like the "const" keyword but requires that the constant is placed in ROM if the architecture supports it.
    - -

    Definition at line 117 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
    -
    -
    - -

    Packed structure modifier (within).

    - -

    Definition at line 122 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_BEGIN
    -
    -
    - -

    Packed structure modifier (before).

    - -

    Definition at line 127 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    #define PACK_STRUCT_END
    -
    -
    - -

    Packed structure modifier (after).

    - -

    Definition at line 132 of file kernel/templates/chtypes.h.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    - - - - -
    typedef int32_t bool_t
    -
    -
    - -

    Boolean, recommended the fastest signed.

    - -

    Definition at line 54 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t tmode_t
    -
    -
    - -

    Thread mode flags, uint8_t is ok.

    - -

    Definition at line 59 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t tstate_t
    -
    -
    - -

    Thread state, uint8_t is ok.

    - -

    Definition at line 64 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint8_t trefs_t
    -
    -
    - -

    Thread references counter, uint8_t is ok.

    - -

    Definition at line 69 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t tprio_t
    -
    -
    - -

    Priority, use the fastest unsigned type.

    - -

    Definition at line 74 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t msg_t
    -
    -
    - -

    Message, use signed pointer equivalent.

    - -

    Definition at line 79 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t eventid_t
    -
    -
    - -

    Event Id, use fastest signed.

    - -

    Definition at line 84 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t eventmask_t
    -
    -
    - -

    Event Mask, recommended fastest unsigned.

    - -

    Definition at line 89 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef uint32_t systime_t
    -
    -
    - -

    System Time, recommended fastest unsigned.

    - -

    Definition at line 94 of file kernel/templates/chtypes.h.

    - -
    -
    - -
    -
    - - - - -
    typedef int32_t cnt_t
    -
    -
    - -

    Counter, recommended fastest signed.

    - -

    Definition at line 99 of file kernel/templates/chtypes.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__types.png b/ChibiOS_2.0.8/docs/html/group__types.png deleted file mode 100644 index b2d764688cfeb103b5ea0478a3b86ff6422ce1cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmeAS@N?(olHy`uVBq!ia0y~yU|7n)z@W;(#=yX!JX@2Afq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM_|Qk>+d+49s4hE{-7;bKc&z&kzojVgK-6-}lP3CO6KXm!kx@ z&guCHO0x$FycJUHeQ<4ILgvy1(cL9Q8;+hm=gOt07b}ya`L5M!hj*qFlU4-NwzGd_ zZoR17x%j7?iY)?89EvS3j8ZO5V>P(@&gs?@-iGsz z;uja?)yB(7N-t8I>&EbeanJX?bH1Ho{vl8zDA&VqqQAG7HMU)7_UzfyZl7_AyguOp z-*HFr1&99pskxx4G4X8L#vMB{cIjSv7S)pB<)rE4j)afDdv#mW?eSl~&1O^o+_M+z zTzN3V#EfqN!-bfYTmD=<|9IuJ(@&*tnVFd}tvF&Uy3pj4twEinY;D!HsNQ>5O+-3> zC^i@~EXe$#^x#s=YIcL^r%Qb#UWc?_%DT2j+1dWDvd^!`-f)fk(|!2vDmi_8(D2E{ z#-l~*&(CJwIfhHVKL6#;z+3xj&X($>pIXg#Tjuht{I|1kcBK98kMouUZ8q=N!LWcs z;b4!lQs3OXcc&c87W1z$TyxAW?5);{s*h{aY$CQWo;$qs&Ey&X{$)FV{IPfXnLjKK z1R2^bVi$D^Y?i+(+p~F*ok!ThO;+|-&#y|Hqv`oQ!<@P5X8Gw!CuiQ?8pXOX;*sd* z`rS5!g{_8ET5FW2UaUIyYzSH}8|%Th63;9*Ep=CM|OH->s+m174+jKc4i? zEFkXq|I(U2!c$MZie`9kG&B7=V=mK!;|xpv&Z)1Rp8xE`@uJF?-m8y?9r=Eldo#Ce z?d-{Aq9HApbTrOR%TJztw^;pg?9JQNdwCP2BP!I=DS|C&6Fx__us!G z*f-2O>BGnHT;AZbNW*N$@MW`R-!$M5@)EAD)(&OJX1LbYp01x6b^rZ>>{qHnr_{>I zr|)BrbzVO)pR@DA#DFe1-nje1$?a>o9?rP?-@9CB`~KrBes;HBADhn^zTRa=$?M-r gkYp`z_dP%7x(Ul-nGeokU|?YIboFyt=akR{0F73; - -ChibiOS/RT: Various - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Various

    -
    -
    - -

    Utilities Library. -More...

    - -

    -Collaboration diagram for Various:
    -
    -
    - - -
    -
    -

    -

    Description

    -

    Utilities Library.

    -

    This is a collection of useful library code that is not part of the base kernel services.

    -

    Notes

    -

    The library code does not follow the same naming convention of the system APIs in order to make very clear that it is not "core" code.
    - The main difference is that library code is not formally tested in the test suite but through usage in the various demo applications.

    - - - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    -

    -Modules

     C++ Wrapper
     

    C++ wrapper module.

    -
     Memory Streams
     

    Memory Streams.

    -
     Periodic Events Timer
     

    Periodic Event Timer.

    -
     Command Shell
     

    Small extendible command line shell.

    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/group__various.png b/ChibiOS_2.0.8/docs/html/group__various.png deleted file mode 100644 index 0f0d51a69f41ebff7b65e2d84477c9d8af9a48c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6334 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 diff --git a/ChibiOS_2.0.8/docs/html/hal_8c.html b/ChibiOS_2.0.8/docs/html/hal_8c.html deleted file mode 100644 index 74a8f5f..0000000 --- a/ChibiOS_2.0.8/docs/html/hal_8c.html +++ /dev/null @@ -1,63 +0,0 @@ - - -ChibiOS/RT: hal.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal.c File Reference

    -
    -
    - -

    HAL subsystem code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - -

    -Functions

    void halInit (void)
     HAL initialization.
    -

    Detailed Description

    -

    HAL subsystem code.

    - -

    Definition in file hal.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/hal_8c_source.html b/ChibiOS_2.0.8/docs/html/hal_8c_source.html deleted file mode 100644 index 50c49b2..0000000 --- a/ChibiOS_2.0.8/docs/html/hal_8c_source.html +++ /dev/null @@ -1,131 +0,0 @@ - - -ChibiOS/RT: hal.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/hal_8h.html b/ChibiOS_2.0.8/docs/html/hal_8h.html deleted file mode 100644 index 41f8f2c..0000000 --- a/ChibiOS_2.0.8/docs/html/hal_8h.html +++ /dev/null @@ -1,72 +0,0 @@ - - -ChibiOS/RT: hal.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal.h File Reference

    -
    -
    - -

    HAL subsystem header. -More...

    -#include "board.h"
    -#include "halconf.h"
    -#include "hal_lld.h"
    -#include "pal.h"
    -#include "adc.h"
    -#include "can.h"
    -#include "mac.h"
    -#include "pwm.h"
    -#include "serial.h"
    -#include "spi.h"
    -#include "mmc_spi.h"
    - -

    Go to the source code of this file.

    - - - - -

    -Functions

    void halInit (void)
     HAL initialization.
    -

    Detailed Description

    -

    HAL subsystem header.

    - -

    Definition in file hal.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/hal_8h_source.html b/ChibiOS_2.0.8/docs/html/hal_8h_source.html deleted file mode 100644 index 2aff087..0000000 --- a/ChibiOS_2.0.8/docs/html/hal_8h_source.html +++ /dev/null @@ -1,110 +0,0 @@ - - -ChibiOS/RT: hal.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/hal__lld__f103_8h.html b/ChibiOS_2.0.8/docs/html/hal__lld__f103_8h.html deleted file mode 100644 index de7d7f5..0000000 --- a/ChibiOS_2.0.8/docs/html/hal__lld__f103_8h.html +++ /dev/null @@ -1,198 +0,0 @@ - - -ChibiOS/RT: hal_lld_f103.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld_f103.h File Reference

    -
    -
    - -

    STM32F103 HAL subsystem low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define STM32_HSICLK   8000000
    #define STM32_LSICLK   40000
    #define STM32_SW_HSI   (0 << 0)
    #define STM32_SW_HSE   (1 << 0)
    #define STM32_SW_PLL   (2 << 0)
    #define STM32_HPRE_DIV1   (0 << 4)
    #define STM32_HPRE_DIV2   (8 << 4)
    #define STM32_HPRE_DIV4   (9 << 4)
    #define STM32_HPRE_DIV8   (10 << 4)
    #define STM32_HPRE_DIV16   (11 << 4)
    #define STM32_HPRE_DIV64   (12 << 4)
    #define STM32_HPRE_DIV128   (13 << 4)
    #define STM32_HPRE_DIV256   (14 << 4)
    #define STM32_HPRE_DIV512   (15 << 4)
    #define STM32_PPRE1_DIV1   (0 << 8)
    #define STM32_PPRE1_DIV2   (4 << 8)
    #define STM32_PPRE1_DIV4   (5 << 8)
    #define STM32_PPRE1_DIV8   (6 << 8)
    #define STM32_PPRE1_DIV16   (7 << 8)
    #define STM32_PPRE2_DIV1   (0 << 11)
    #define STM32_PPRE2_DIV2   (4 << 11)
    #define STM32_PPRE2_DIV4   (5 << 11)
    #define STM32_PPRE2_DIV8   (6 << 11)
    #define STM32_PPRE2_DIV16   (7 << 11)
    #define STM32_ADCPRE_DIV2   (0 << 14)
    #define STM32_ADCPRE_DIV4   (1 << 14)
    #define STM32_ADCPRE_DIV6   (2 << 14)
    #define STM32_ADCPRE_DIV8   (3 << 14)
    #define STM32_PLLSRC_HSI   (0 << 16)
    #define STM32_PLLSRC_HSE   (1 << 16)
    #define STM32_PLLXTPRE_DIV1   (0 << 17)
    #define STM32_PLLXTPRE_DIV2   (1 << 17)
    #define STM32_MCO_NOCLOCK   (0 << 24)
    #define STM32_MCO_SYSCLK   (4 << 24)
    #define STM32_MCO_HSI   (5 << 24)
    #define STM32_MCO_HSE   (6 << 24)
    #define STM32_MCO_PLLDIV2   (7 << 24)
    #define WWDG_IRQHandler   Vector40
    #define PVD_IRQHandler   Vector44
    #define TAMPER_IRQHandler   Vector48
    #define RTC_IRQHandler   Vector4C
    #define FLASH_IRQHandler   Vector50
    #define RCC_IRQHandler   Vector54
    #define EXTI0_IRQHandler   Vector58
    #define EXTI1_IRQHandler   Vector5C
    #define EXTI2_IRQHandler   Vector60
    #define EXTI3_IRQHandler   Vector64
    #define EXTI4_IRQHandler   Vector68
    #define DMA1_Ch1_IRQHandler   Vector6C
    #define DMA1_Ch2_IRQHandler   Vector70
    #define DMA1_Ch3_IRQHandler   Vector74
    #define DMA1_Ch4_IRQHandler   Vector78
    #define DMA1_Ch5_IRQHandler   Vector7C
    #define DMA1_Ch6_IRQHandler   Vector80
    #define DMA1_Ch7_IRQHandler   Vector84
    #define ADC1_2_IRQHandler   Vector88
    #define CAN1_TX_IRQHandler   Vector8C
    #define USB_HP_IRQHandler   Vector8C
    #define CAN1_RX0_IRQHandler   Vector90
    #define USB_LP_IRQHandler   Vector90
    #define CAN1_RX1_IRQHandler   Vector94
    #define CAN1_SCE_IRQHandler   Vector98
    #define EXTI9_5_IRQHandler   Vector9C
    #define TIM1_BRK_IRQHandler   VectorA0
    #define TIM1_UP_IRQHandler   VectorA4
    #define TIM1_TRG_COM_IRQHandler   VectorA8
    #define TIM1_CC_IRQHandler   VectorAC
    #define TIM2_IRQHandler   VectorB0
    #define TIM3_IRQHandler   VectorB4
    #define TIM4_IRQHandler   VectorB8
    #define I2C1_EV_IRQHandler   VectorBC
    #define I2C1_ER_IRQHandler   VectorC0
    #define I2C2_EV_IRQHandler   VectorC4
    #define I2C2_ER_IRQHandler   VectorC8
    #define SPI1_IRQHandler   VectorCC
    #define SPI2_IRQHandler   VectorD0
    #define USART1_IRQHandler   VectorD4
    #define USART2_IRQHandler   VectorD8
    #define USART3_IRQHandler   VectorDC
    #define EXTI15_10_IRQHandler   VectorE0
    #define RTCAlarm_IRQHandler   VectorE4
    #define USBWakeUp_IRQHandler   VectorE8
    #define TIM8_BRK_IRQHandler   VectorEC
    #define TIM8_UP_IRQHandler   VectorF0
    #define TIM8_TRG_COM_IRQHandler   VectorF4
    #define TIM8_CC_IRQHandler   VectorF8
    #define ADC3_IRQHandler   VectorFC
    #define FSMC_IRQHandler   Vector100
    #define SDIO_IRQHandler   Vector104
    #define TIM5_IRQHandler   Vector108
    #define SPI3_IRQHandler   Vector10C
    #define UART4_IRQHandler   Vector110
    #define UART5_IRQHandler   Vector114
    #define TIM6_IRQHandler   Vector118
    #define TIM7_IRQHandler   Vector11C
    #define DMA2_Ch1_IRQHandler   Vector120
    #define DMA2_Ch2_IRQHandler   Vector124
    #define DMA2_Ch3_IRQHandler   Vector128
    #define DMA2_Ch4_5_IRQHandler   Vector12C
    #define STM32_SW   STM32_SW_PLL
     Main clock source selection.
    #define STM32_PLLSRC   STM32_PLLSRC_HSE
     Clock source for the PLL.
    #define STM32_PLLXTPRE   STM32_PLLXTPRE_DIV1
     Crystal PLL pre-divider.
    #define STM32_PLLMUL_VALUE   9
     PLL multiplier value.
    #define STM32_HPRE   STM32_HPRE_DIV1
     AHB prescaler value.
    #define STM32_PPRE1   STM32_PPRE1_DIV2
     APB1 prescaler value.
    #define STM32_PPRE2   STM32_PPRE2_DIV2
     APB2 prescaler value.
    #define STM32_ADCPRE   STM32_ADCPRE_DIV4
     ADC prescaler value.
    #define STM32_MCO   STM32_MCO_NOCLOCK
     MCO pin setting.
    #define STM32_PLLMUL   ((STM32_PLLMUL_VALUE - 2) << 18)
     PLLMUL field.
    #define STM32_PLLCLKIN   (STM32_HSECLK / 1)
     PLL input clock frequency.
    #define STM32_PLLCLKOUT   (STM32_PLLCLKIN * STM32_PLLMUL_VALUE)
     PLL output clock frequency.
    #define STM32_SYSCLK   STM32_PLLCLKOUT
     System clock source.
    #define STM32_HCLK   (STM32_SYSCLK / 1)
     AHB frequency.
    #define STM32_PCLK1   (STM32_HCLK / 1)
     APB1 frequency.
    #define STM32_PCLK2   (STM32_HCLK / 1)
     APB2 frequency.
    #define STM32_ADCCLK   (STM32_PCLK2 / 2)
     ADC frequency.
    #define STM32_TIMCLK1   (STM32_PCLK1 * 1)
     Timers 2, 3, 4, 5, 6, 7, 12, 13, 14 clock.
    #define STM32_TIMCLK2   (STM32_PCLK2 * 1)
     Timers 1, 8, 9, 10 and 11 clock.
    #define STM32_FLASHBITS   0x00000010
     Flash settings.
    -

    Detailed Description

    -

    STM32F103 HAL subsystem low level driver header.

    - -

    Definition in file hal_lld_f103.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/hal__lld__f103_8h_source.html b/ChibiOS_2.0.8/docs/html/hal__lld__f103_8h_source.html deleted file mode 100644 index d8d80a1..0000000 --- a/ChibiOS_2.0.8/docs/html/hal__lld__f103_8h_source.html +++ /dev/null @@ -1,489 +0,0 @@ - - -ChibiOS/RT: hal_lld_f103.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/hal__lld__f105__f107_8h.html b/ChibiOS_2.0.8/docs/html/hal__lld__f105__f107_8h.html deleted file mode 100644 index 019994d..0000000 --- a/ChibiOS_2.0.8/docs/html/hal__lld__f105__f107_8h.html +++ /dev/null @@ -1,221 +0,0 @@ - - -ChibiOS/RT: hal_lld_f105_f107.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld_f105_f107.h File Reference

    -
    -
    - -

    STM32F10x Connectivity Line HAL subsystem low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define STM32_HSICLK   8000000
    #define STM32_LSICLK   40000
    #define STM32_SW_HSI   (0 << 0)
    #define STM32_SW_HSE   (1 << 0)
    #define STM32_SW_PLL   (2 << 0)
    #define STM32_HPRE_DIV1   (0 << 4)
    #define STM32_HPRE_DIV2   (8 << 4)
    #define STM32_HPRE_DIV4   (9 << 4)
    #define STM32_HPRE_DIV8   (10 << 4)
    #define STM32_HPRE_DIV16   (11 << 4)
    #define STM32_HPRE_DIV64   (12 << 4)
    #define STM32_HPRE_DIV128   (13 << 4)
    #define STM32_HPRE_DIV256   (14 << 4)
    #define STM32_HPRE_DIV512   (15 << 4)
    #define STM32_PPRE1_DIV1   (0 << 8)
    #define STM32_PPRE1_DIV2   (4 << 8)
    #define STM32_PPRE1_DIV4   (5 << 8)
    #define STM32_PPRE1_DIV8   (6 << 8)
    #define STM32_PPRE1_DIV16   (7 << 8)
    #define STM32_PPRE2_DIV1   (0 << 11)
    #define STM32_PPRE2_DIV2   (4 << 11)
    #define STM32_PPRE2_DIV4   (5 << 11)
    #define STM32_PPRE2_DIV8   (6 << 11)
    #define STM32_PPRE2_DIV16   (7 << 11)
    #define STM32_ADCPRE_DIV2   (0 << 14)
    #define STM32_ADCPRE_DIV4   (1 << 14)
    #define STM32_ADCPRE_DIV6   (2 << 14)
    #define STM32_ADCPRE_DIV8   (3 << 14)
    #define STM32_PLLSRC_HSI   (0 << 16)
    #define STM32_PLLSRC_PREDIV1   (1 << 16)
    #define STM32_OTGFSPRE_DIV2   (1 << 22)
    #define STM32_OTGFSPRE_DIV3   (0 << 22)
    #define STM32_MCO_NOCLOCK   (0 << 24)
    #define STM32_MCO_SYSCLK   (4 << 24)
    #define STM32_MCO_HSI   (5 << 24)
    #define STM32_MCO_HSE   (6 << 24)
    #define STM32_MCO_PLLDIV2   (7 << 24)
    #define STM32_MCO_PLL2   (8 << 24)
    #define STM32_MCO_PLL3DIV2   (9 << 24)
    #define STM32_MCO_XT1   (10 << 24)
    #define STM32_MCO_PLL3   (11 << 24)
    #define STM32_PREDIV1SRC_HSE   (0 << 16)
    #define STM32_PREDIV1SRC_PLL2   (1 << 16)
    #define WWDG_IRQHandler   Vector40
    #define PVD_IRQHandler   Vector44
    #define TAMPER_IRQHandler   Vector48
    #define RTC_IRQHandler   Vector4C
    #define FLASH_IRQHandler   Vector50
    #define RCC_IRQHandler   Vector54
    #define EXTI0_IRQHandler   Vector58
    #define EXTI1_IRQHandler   Vector5C
    #define EXTI2_IRQHandler   Vector60
    #define EXTI3_IRQHandler   Vector64
    #define EXTI4_IRQHandler   Vector68
    #define DMA1_Ch1_IRQHandler   Vector6C
    #define DMA1_Ch2_IRQHandler   Vector70
    #define DMA1_Ch3_IRQHandler   Vector74
    #define DMA1_Ch4_IRQHandler   Vector78
    #define DMA1_Ch5_IRQHandler   Vector7C
    #define DMA1_Ch6_IRQHandler   Vector80
    #define DMA1_Ch7_IRQHandler   Vector84
    #define ADC1_2_IRQHandler   Vector88
    #define CAN1_TX_IRQHandler   Vector8C
    #define CAN1_RX0_IRQHandler   Vector90
    #define CAN1_RX1_IRQHandler   Vector94
    #define CAN1_SCE_IRQHandler   Vector98
    #define EXTI9_5_IRQHandler   Vector9C
    #define TIM1_BRK_IRQHandler   VectorA0
    #define TIM1_UP_IRQHandler   VectorA4
    #define TIM1_TRG_COM_IRQHandler   VectorA8
    #define TIM1_CC_IRQHandler   VectorAC
    #define TIM2_IRQHandler   VectorB0
    #define TIM3_IRQHandler   VectorB4
    #define TIM4_IRQHandler   VectorB8
    #define I2C1_EV_IRQHandler   VectorBC
    #define I2C1_ER_IRQHandler   VectorC0
    #define I2C2_EV_IRQHandler   VectorC4
    #define I2C2_ER_IRQHandler   VectorC8
    #define SPI1_IRQHandler   VectorCC
    #define SPI2_IRQHandler   VectorD0
    #define USART1_IRQHandler   VectorD4
    #define USART2_IRQHandler   VectorD8
    #define USART3_IRQHandler   VectorDC
    #define EXTI15_10_IRQHandler   VectorE0
    #define RTCAlarm_IRQHandler   VectorE4
    #define OTG_FS_WKUP_IRQHandler   VectorE8
    #define TIM5_IRQHandler   Vector108
    #define SPI3_IRQHandler   Vector10C
    #define UART4_IRQHandler   Vector110
    #define UART5_IRQHandler   Vector114
    #define TIM6_IRQHandler   Vector118
    #define TIM7_IRQHandler   Vector11C
    #define DMA2_Ch1_IRQHandler   Vector120
    #define DMA2_Ch2_IRQHandler   Vector124
    #define DMA2_Ch3_IRQHandler   Vector128
    #define DMA2_Ch4_IRQHandler   Vector12C
    #define DMA2_Ch5_IRQHandler   Vector130
    #define ETH_IRQHandler   Vector134
    #define ETH_WKUP_IRQHandler   Vector138
    #define CAN2_TX_IRQHandler   Vector13C
    #define CAN2_RX0_IRQHandler   Vector140
    #define CAN2_RX1_IRQHandler   Vector144
    #define CAN2_SCE_IRQHandler   Vector148
    #define OTG_FS_IRQHandler   Vector14C
    #define STM32_SW   STM32_SW_PLL
     Main clock source selection.
    #define STM32_PLLSRC   STM32_PLLSRC_PREDIV1
     Clock source for the PLL.
    #define STM32_PREDIV1SRC   STM32_PREDIV1SRC_PLL2
     PREDIV1 clock source.
    #define STM32_PREDIV1_VALUE   5
     PREDIV1 division factor.
    #define STM32_PLLMUL_VALUE   9
     PLL multiplier value.
    #define STM32_PREDIV2_VALUE   5
     PREDIV2 division factor.
    #define STM32_PLL2MUL_VALUE   8
     PLL2 multiplier value.
    #define STM32_HPRE   STM32_HPRE_DIV1
     AHB prescaler value.
    #define STM32_PPRE1   STM32_PPRE1_DIV2
     APB1 prescaler value.
    #define STM32_PPRE2   STM32_PPRE2_DIV2
     APB2 prescaler value.
    #define STM32_ADCPRE   STM32_ADCPRE_DIV4
     ADC prescaler value.
    #define STM32_MCO   STM32_MCO_NOCLOCK
     MCO pin setting.
    #define STM32_PREDIV1   ((STM32_PREDIV1_VALUE - 1) << 0)
     PREDIV1 field.
    #define STM32_PREDIV2   ((STM32_PREDIV2_VALUE - 1) << 4)
     PREDIV2 field.
    #define STM32_PLLMUL   ((STM32_PLLMUL_VALUE - 2) << 18)
     PLLMUL field.
    #define STM32_PLL2MUL   ((STM32_PLL2MUL_VALUE - 2) << 8)
     PLL2MUL field.
    #define STM32_PLL2CLKIN   (STM32_HSECLK / STM32_PREDIV2_VALUE)
     PLL2 input frequency.
    #define STM32_PLL2CLKOUT   (STM32_PLL2CLKIN * STM32_PLL2MUL_VALUE)
     PLL2 output clock frequency.
    #define STM32_PREDIV1CLK   STM32_PLL2CLKOUT
     PREDIV1 input frequency.
    #define STM32_PLLCLKIN   (STM32_PREDIV1CLK / STM32_PREDIV1_VALUE)
     PLL input clock frequency.
    #define STM32_PLLCLKOUT   (STM32_PLLCLKIN * STM32_PLLMUL_VALUE)
     PLL output clock frequency.
    #define STM32_SYSCLK   STM32_PLLCLKOUT
     System clock source.
    #define STM32_HCLK   (STM32_SYSCLK / 1)
     AHB frequency.
    #define STM32_PCLK1   (STM32_HCLK / 1)
     APB1 frequency.
    #define STM32_PCLK2   (STM32_HCLK / 1)
     APB2 frequency.
    #define STM32_ADCCLK   (STM32_PCLK2 / 2)
     ADC frequency.
    #define STM32_TIMCLK1   (STM32_PCLK1 * 1)
     Timers 2, 3, 4, 5, 6, 7 clock.
    #define STM32_TIMCLK2   (STM32_PCLK2 * 1)
     Timer 1 clock.
    #define STM32_FLASHBITS   0x00000010
     Flash settings.
    -

    Detailed Description

    -

    STM32F10x Connectivity Line HAL subsystem low level driver header.

    - -

    Definition in file hal_lld_f105_f107.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/hal__lld__f105__f107_8h_source.html b/ChibiOS_2.0.8/docs/html/hal__lld__f105__f107_8h_source.html deleted file mode 100644 index fd105c5..0000000 --- a/ChibiOS_2.0.8/docs/html/hal__lld__f105__f107_8h_source.html +++ /dev/null @@ -1,582 +0,0 @@ - - -ChibiOS/RT: hal_lld_f105_f107.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/halconf_8h.html b/ChibiOS_2.0.8/docs/html/halconf_8h.html deleted file mode 100644 index 5cee172..0000000 --- a/ChibiOS_2.0.8/docs/html/halconf_8h.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: halconf.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    halconf.h File Reference

    -
    -
    - -

    HAL configuration header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - -

    -Defines

    #define CH_HAL_USE_PAL   TRUE
     Enables the PAL subsystem.
    #define CH_HAL_USE_ADC   TRUE
     Enables the ADC subsystem.
    #define CH_HAL_USE_CAN   TRUE
     Enables the CAN subsystem.
    #define CH_HAL_USE_MAC   TRUE
     Enables the MAC subsystem.
    #define CH_HAL_USE_PWM   TRUE
     Enables the PWM subsystem.
    #define CH_HAL_USE_SERIAL   TRUE
     Enables the SERIAL subsystem.
    #define CH_HAL_USE_SPI   TRUE
     Enables the SPI subsystem.
    #define CH_HAL_USE_MMC_SPI   TRUE
     Enables the MMC_SPI subsystem.
    -

    Detailed Description

    -

    HAL configuration header.

    -

    HAL configuration file, this file allows to enable or disable the various device drivers from your application. You may also use this file in order to override the device drivers default settings.

    - -

    Definition in file halconf.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/halconf_8h_source.html b/ChibiOS_2.0.8/docs/html/halconf_8h_source.html deleted file mode 100644 index 4ebbb48..0000000 --- a/ChibiOS_2.0.8/docs/html/halconf_8h_source.html +++ /dev/null @@ -1,210 +0,0 @@ - - -ChibiOS/RT: halconf.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/hierarchy.html b/ChibiOS_2.0.8/docs/html/hierarchy.html deleted file mode 100644 index 4c0e604..0000000 --- a/ChibiOS_2.0.8/docs/html/hierarchy.html +++ /dev/null @@ -1,143 +0,0 @@ - - -ChibiOS/RT: Hierarchical Index - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    Class Hierarchy

    -
    - -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/index.hhc b/ChibiOS_2.0.8/docs/html/index.hhc deleted file mode 100644 index acae7ea..0000000 --- a/ChibiOS_2.0.8/docs/html/index.hhc +++ /dev/null @@ -1,1047 +0,0 @@ - - - - - -
      -
    • -
        -
      • -
          -
        -
      • -
          -
        -
      • -
          -
        -
      • -
          -
        -
      • -
          -
        -
      • -
          -
        -
      • -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        -
      • -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        -
      -
    • -
        -
      • -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        -
      • -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            • -
                -
              -
            • -
                -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            -
          • -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            • -
                -
              -
            • -
                -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            -
          • -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            -
          • -
              -
            • -
                -
              • -
                  -
                -
              • -
                  -
                -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            • -
                -
              -
            • -
                -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          • -
              -
            • -
                -
              -
            • -
                -
              -
            • -
                -
              -
            -
          -
        -
      • -
          -
        • -
            -
          • -
              -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          • -
              -
            -
          -
        • -
            -
          -
        -
      • -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        -
      • -
          -
        -
      • -
          -
        -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
          -
        • -
            -
          • -
              -
            • -
            -
          -
        • -
        -
      • -
      • -
          -
        • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
          -
        • -
            -
          • -
          • -
          -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    - - diff --git a/ChibiOS_2.0.8/docs/html/index.hhk b/ChibiOS_2.0.8/docs/html/index.hhk deleted file mode 100644 index ecdc5fe..0000000 --- a/ChibiOS_2.0.8/docs/html/index.hhk +++ /dev/null @@ -1,13202 +0,0 @@ - - - - - -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      -
    • -
    • -
        -
      • -
      -
    • -
    • -
        -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
    • -
        -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
        -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    • -
        -
      • -
      • -
      • -
      • -
      -
    - - diff --git a/ChibiOS_2.0.8/docs/html/index.hhp b/ChibiOS_2.0.8/docs/html/index.hhp deleted file mode 100644 index ddadbef..0000000 --- a/ChibiOS_2.0.8/docs/html/index.hhp +++ /dev/null @@ -1,851 +0,0 @@ -[OPTIONS] -Compiled file=../ChibiOS_RT.chm -Compatibility=1.1 -Full-text search=Yes -Contents file=index.hhc -Default Window=main -Default topic=main.html -Index file=index.hhk -Language=0x409 English (United States) -Title=ChibiOS/RT - -[WINDOWS] -main="ChibiOS/RT","index.hhc","index.hhk","main.html","main.html",,,,,0x23520,,0x10387e,,,,,,,,0 - -[FILES] -main.html -adc_8c_source.html -adc_8h_source.html -templates_2adc__lld_8c_source.html -platforms_2_s_t_m32_2adc__lld_8c_source.html -templates_2adc__lld_8h_source.html -platforms_2_s_t_m32_2adc__lld_8h_source.html -at91sam7_8h_source.html -at91sam7__mii_8c_source.html -at91sam7__mii_8h_source.html -can_8c_source.html -can_8h_source.html -templates_2can__lld_8c_source.html -platforms_2_s_t_m32_2can__lld_8c_source.html -templates_2can__lld_8h_source.html -platforms_2_s_t_m32_2can__lld_8h_source.html -ch_8cpp_source.html -ch_8h_source.html -ch_8hpp_source.html -chcond_8c_source.html -chcond_8h_source.html -chconf_8h_source.html -kernel_2templates_2chcore_8c_source.html -ports_2_g_c_c_2_a_v_r_2chcore_8c_source.html -ports_2_g_c_c_2_a_r_m7_2chcore_8c_source.html -ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c_source.html -ports_2_g_c_c_2_p_p_c_2chcore_8c_source.html -ports_2_g_c_c_2_m_s_p430_2chcore_8c_source.html -ports_2_r_c_2_s_t_m8_2chcore_8c_source.html -kernel_2templates_2chcore_8h_source.html -ports_2_g_c_c_2_a_v_r_2chcore_8h_source.html -ports_2_g_c_c_2_a_r_m7_2chcore_8h_source.html -ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h_source.html -ports_2_g_c_c_2_p_p_c_2chcore_8h_source.html -ports_2_g_c_c_2_m_s_p430_2chcore_8h_source.html -ports_2_r_c_2_s_t_m8_2chcore_8h_source.html -chcore__v6m_8c_source.html -chcore__v6m_8h_source.html -chcore__v7m_8c_source.html -chcore__v7m_8h_source.html -chcoreasm_8s_source.html -chdebug_8c_source.html -chdebug_8h_source.html -chevents_8c_source.html -chevents_8h_source.html -chheap_8c_source.html -chheap_8h_source.html -chinline_8h_source.html -chioch_8h_source.html -chlists_8c_source.html -chlists_8h_source.html -chmboxes_8c_source.html -chmboxes_8h_source.html -chmemcore_8c_source.html -chmemcore_8h_source.html -chmempools_8c_source.html -chmempools_8h_source.html -chmsg_8c_source.html -chmsg_8h_source.html -chmtx_8c_source.html -chmtx_8h_source.html -chqueues_8c_source.html -chqueues_8h_source.html -chregistry_8c_source.html -chregistry_8h_source.html -chschd_8c_source.html -chschd_8h_source.html -chsem_8c_source.html -chsem_8h_source.html -chstreams_8h_source.html -chsys_8c_source.html -chsys_8h_source.html -chthreads_8c_source.html -chthreads_8h_source.html -kernel_2templates_2chtypes_8h_source.html -ports_2_g_c_c_2_a_v_r_2chtypes_8h_source.html -ports_2_g_c_c_2_a_r_m7_2chtypes_8h_source.html -ports_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h_source.html -ports_2_g_c_c_2_p_p_c_2chtypes_8h_source.html -ports_2_g_c_c_2_m_s_p430_2chtypes_8h_source.html -ports_2_r_c_2_s_t_m8_2chtypes_8h_source.html -chvt_8c_source.html -chvt_8h_source.html -_s_t_m32_f10x_2cmparams_8h_source.html -_l_p_c11xx_2cmparams_8h_source.html -_l_p_c13xx_2cmparams_8h_source.html -_a_r_m7_2crt0_8s_source.html -_a_r_m_c_mx_2crt0_8s_source.html -_p_p_c_2crt0_8s_source.html -evtimer_8c_source.html -evtimer_8h_source.html -hal_8c_source.html -hal_8h_source.html -templates_2hal__lld_8c_source.html -platforms_2_a_t91_s_a_m7_2hal__lld_8c_source.html -platforms_2_a_v_r_2hal__lld_8c_source.html -platforms_2_l_p_c11xx_2hal__lld_8c_source.html -platforms_2_l_p_c13xx_2hal__lld_8c_source.html -platforms_2_l_p_c214x_2hal__lld_8c_source.html -platforms_2_m_s_p430_2hal__lld_8c_source.html -platforms_2_s_p_c56x_2hal__lld_8c_source.html -platforms_2_s_t_m32_2hal__lld_8c_source.html -platforms_2_s_t_m8_2hal__lld_8c_source.html -templates_2hal__lld_8h_source.html -platforms_2_a_t91_s_a_m7_2hal__lld_8h_source.html -platforms_2_a_v_r_2hal__lld_8h_source.html -platforms_2_l_p_c11xx_2hal__lld_8h_source.html -platforms_2_l_p_c13xx_2hal__lld_8h_source.html -platforms_2_l_p_c214x_2hal__lld_8h_source.html -platforms_2_m_s_p430_2hal__lld_8h_source.html -platforms_2_s_p_c56x_2hal__lld_8h_source.html -platforms_2_s_t_m32_2hal__lld_8h_source.html -platforms_2_s_t_m8_2hal__lld_8h_source.html -hal__lld__f103_8h_source.html -hal__lld__f105__f107_8h_source.html -halconf_8h_source.html -lpc214x_8h_source.html -mac_8c_source.html -mac_8h_source.html -templates_2mac__lld_8c_source.html -platforms_2_a_t91_s_a_m7_2mac__lld_8c_source.html -templates_2mac__lld_8h_source.html -platforms_2_a_t91_s_a_m7_2mac__lld_8h_source.html -memstreams_8c_source.html -memstreams_8h_source.html -mii_8h_source.html -mmc__spi_8c_source.html -mmc__spi_8h_source.html -mpc563m_8h_source.html -nvic_8c_source.html -nvic_8h_source.html -pal_8c_source.html -pal_8h_source.html -templates_2pal__lld_8c_source.html -platforms_2_a_t91_s_a_m7_2pal__lld_8c_source.html -platforms_2_l_p_c11xx_2pal__lld_8c_source.html -platforms_2_l_p_c13xx_2pal__lld_8c_source.html -platforms_2_l_p_c214x_2pal__lld_8c_source.html -platforms_2_m_s_p430_2pal__lld_8c_source.html -platforms_2_s_t_m32_2pal__lld_8c_source.html -platforms_2_s_t_m8_2pal__lld_8c_source.html -templates_2pal__lld_8h_source.html -platforms_2_a_t91_s_a_m7_2pal__lld_8h_source.html -platforms_2_l_p_c11xx_2pal__lld_8h_source.html -platforms_2_l_p_c13xx_2pal__lld_8h_source.html -platforms_2_l_p_c214x_2pal__lld_8h_source.html -platforms_2_m_s_p430_2pal__lld_8h_source.html -platforms_2_s_t_m32_2pal__lld_8h_source.html -platforms_2_s_t_m8_2pal__lld_8h_source.html -pwm_8c_source.html -pwm_8h_source.html -templates_2pwm__lld_8c_source.html -platforms_2_s_t_m32_2pwm__lld_8c_source.html -templates_2pwm__lld_8h_source.html -platforms_2_s_t_m32_2pwm__lld_8h_source.html -serial_8c_source.html -serial_8h_source.html -templates_2serial__lld_8c_source.html -platforms_2_a_t91_s_a_m7_2serial__lld_8c_source.html -platforms_2_a_v_r_2serial__lld_8c_source.html -platforms_2_l_p_c11xx_2serial__lld_8c_source.html -platforms_2_l_p_c13xx_2serial__lld_8c_source.html -platforms_2_l_p_c214x_2serial__lld_8c_source.html -platforms_2_m_s_p430_2serial__lld_8c_source.html -platforms_2_s_p_c56x_2serial__lld_8c_source.html -platforms_2_s_t_m32_2serial__lld_8c_source.html -platforms_2_s_t_m8_2serial__lld_8c_source.html -templates_2serial__lld_8h_source.html -platforms_2_a_t91_s_a_m7_2serial__lld_8h_source.html -platforms_2_a_v_r_2serial__lld_8h_source.html -platforms_2_l_p_c11xx_2serial__lld_8h_source.html -platforms_2_l_p_c13xx_2serial__lld_8h_source.html -platforms_2_l_p_c214x_2serial__lld_8h_source.html -platforms_2_m_s_p430_2serial__lld_8h_source.html -platforms_2_s_p_c56x_2serial__lld_8h_source.html -platforms_2_s_t_m32_2serial__lld_8h_source.html -platforms_2_s_t_m8_2serial__lld_8h_source.html -shell_8c_source.html -shell_8h_source.html -spi_8c_source.html -spi_8h_source.html -templates_2spi__lld_8c_source.html -platforms_2_l_p_c214x_2spi__lld_8c_source.html -platforms_2_s_t_m32_2spi__lld_8c_source.html -templates_2spi__lld_8h_source.html -platforms_2_l_p_c214x_2spi__lld_8h_source.html -platforms_2_s_t_m32_2spi__lld_8h_source.html -stm32__dma_8c_source.html -stm32__dma_8h_source.html -stm8_8h_source.html -syscalls_8c_source.html -test_8c_source.html -test_8h_source.html -testbmk_8c_source.html -testbmk_8h_source.html -testdyn_8c_source.html -testdyn_8h_source.html -testevt_8c_source.html -testevt_8h_source.html -testheap_8c_source.html -testheap_8h_source.html -testmbox_8c_source.html -testmbox_8h_source.html -testmsg_8c_source.html -testmsg_8h_source.html -testmtx_8c_source.html -testmtx_8h_source.html -testpools_8c_source.html -testpools_8h_source.html -testqueues_8c_source.html -testqueues_8h_source.html -testsem_8c_source.html -testsem_8h_source.html -testthd_8c_source.html -testthd_8h_source.html -typedefs_8h_source.html -vic_8c_source.html -vic_8h_source.html -adc_8c.html -adc_8h.html -templates_2adc__lld_8c.html -platforms_2_s_t_m32_2adc__lld_8c.html -templates_2adc__lld_8h.html -platforms_2_s_t_m32_2adc__lld_8h.html -at91sam7__mii_8c.html -at91sam7__mii_8h.html -can_8c.html -can_8h.html -templates_2can__lld_8c.html -platforms_2_s_t_m32_2can__lld_8c.html -templates_2can__lld_8h.html -platforms_2_s_t_m32_2can__lld_8h.html -ch_8cpp.html -ch_8h.html -ch_8hpp.html -chcond_8c.html -chcond_8h.html -chconf_8h.html -kernel_2templates_2chcore_8c.html -ports_2_g_c_c_2_a_v_r_2chcore_8c.html -ports_2_g_c_c_2_a_r_m7_2chcore_8c.html -ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c.html -ports_2_g_c_c_2_p_p_c_2chcore_8c.html -ports_2_g_c_c_2_m_s_p430_2chcore_8c.html -ports_2_r_c_2_s_t_m8_2chcore_8c.html -kernel_2templates_2chcore_8h.html -ports_2_g_c_c_2_a_v_r_2chcore_8h.html -ports_2_g_c_c_2_a_r_m7_2chcore_8h.html -ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h.html -ports_2_g_c_c_2_p_p_c_2chcore_8h.html -ports_2_g_c_c_2_m_s_p430_2chcore_8h.html -ports_2_r_c_2_s_t_m8_2chcore_8h.html -chcore__v6m_8c.html -chcore__v6m_8h.html -chcore__v7m_8c.html -chcore__v7m_8h.html -chcoreasm_8s.html -chdebug_8c.html -chdebug_8h.html -chevents_8c.html -chevents_8h.html -chheap_8c.html -chheap_8h.html -chinline_8h.html -chioch_8h.html -chlists_8c.html -chlists_8h.html -chmboxes_8c.html -chmboxes_8h.html -chmemcore_8c.html -chmemcore_8h.html -chmempools_8c.html -chmempools_8h.html -chmsg_8c.html -chmsg_8h.html -chmtx_8c.html -chmtx_8h.html -chqueues_8c.html -chqueues_8h.html -chregistry_8c.html -chregistry_8h.html -chschd_8c.html -chschd_8h.html -chsem_8c.html -chsem_8h.html -chstreams_8h.html -chsys_8c.html -chsys_8h.html -chthreads_8c.html -chthreads_8h.html -kernel_2templates_2chtypes_8h.html -ports_2_g_c_c_2_a_v_r_2chtypes_8h.html -ports_2_g_c_c_2_a_r_m7_2chtypes_8h.html -ports_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h.html -ports_2_g_c_c_2_p_p_c_2chtypes_8h.html -ports_2_g_c_c_2_m_s_p430_2chtypes_8h.html -ports_2_r_c_2_s_t_m8_2chtypes_8h.html -chvt_8c.html -chvt_8h.html -_s_t_m32_f10x_2cmparams_8h.html -_l_p_c11xx_2cmparams_8h.html -_l_p_c13xx_2cmparams_8h.html -_a_r_m7_2crt0_8s.html -_a_r_m_c_mx_2crt0_8s.html -_p_p_c_2crt0_8s.html -evtimer_8c.html -evtimer_8h.html -hal_8c.html -hal_8h.html -templates_2hal__lld_8c.html -platforms_2_a_t91_s_a_m7_2hal__lld_8c.html -platforms_2_a_v_r_2hal__lld_8c.html -platforms_2_l_p_c11xx_2hal__lld_8c.html -platforms_2_l_p_c13xx_2hal__lld_8c.html -platforms_2_l_p_c214x_2hal__lld_8c.html -platforms_2_m_s_p430_2hal__lld_8c.html -platforms_2_s_p_c56x_2hal__lld_8c.html -platforms_2_s_t_m32_2hal__lld_8c.html -platforms_2_s_t_m8_2hal__lld_8c.html -templates_2hal__lld_8h.html -platforms_2_a_t91_s_a_m7_2hal__lld_8h.html -platforms_2_a_v_r_2hal__lld_8h.html -platforms_2_l_p_c11xx_2hal__lld_8h.html -platforms_2_l_p_c13xx_2hal__lld_8h.html -platforms_2_l_p_c214x_2hal__lld_8h.html -platforms_2_m_s_p430_2hal__lld_8h.html -platforms_2_s_p_c56x_2hal__lld_8h.html -platforms_2_s_t_m32_2hal__lld_8h.html -platforms_2_s_t_m8_2hal__lld_8h.html -hal__lld__f103_8h.html -hal__lld__f105__f107_8h.html -halconf_8h.html -lpc214x_8h.html -mac_8c.html -mac_8h.html -templates_2mac__lld_8c.html -platforms_2_a_t91_s_a_m7_2mac__lld_8c.html -templates_2mac__lld_8h.html -platforms_2_a_t91_s_a_m7_2mac__lld_8h.html -memstreams_8c.html -memstreams_8h.html -mmc__spi_8c.html -mmc__spi_8h.html -nvic_8c.html -nvic_8h.html -pal_8c.html -pal_8h.html -templates_2pal__lld_8c.html -platforms_2_a_t91_s_a_m7_2pal__lld_8c.html -platforms_2_l_p_c11xx_2pal__lld_8c.html -platforms_2_l_p_c13xx_2pal__lld_8c.html -platforms_2_l_p_c214x_2pal__lld_8c.html -platforms_2_m_s_p430_2pal__lld_8c.html -platforms_2_s_t_m32_2pal__lld_8c.html -platforms_2_s_t_m8_2pal__lld_8c.html -templates_2pal__lld_8h.html -platforms_2_a_t91_s_a_m7_2pal__lld_8h.html -platforms_2_l_p_c11xx_2pal__lld_8h.html -platforms_2_l_p_c13xx_2pal__lld_8h.html -platforms_2_l_p_c214x_2pal__lld_8h.html -platforms_2_m_s_p430_2pal__lld_8h.html -platforms_2_s_t_m32_2pal__lld_8h.html -platforms_2_s_t_m8_2pal__lld_8h.html -pwm_8c.html -pwm_8h.html -templates_2pwm__lld_8c.html -platforms_2_s_t_m32_2pwm__lld_8c.html -templates_2pwm__lld_8h.html -platforms_2_s_t_m32_2pwm__lld_8h.html -serial_8c.html -serial_8h.html -templates_2serial__lld_8c.html -platforms_2_a_t91_s_a_m7_2serial__lld_8c.html -platforms_2_a_v_r_2serial__lld_8c.html -platforms_2_l_p_c11xx_2serial__lld_8c.html -platforms_2_l_p_c13xx_2serial__lld_8c.html -platforms_2_l_p_c214x_2serial__lld_8c.html -platforms_2_m_s_p430_2serial__lld_8c.html -platforms_2_s_p_c56x_2serial__lld_8c.html -platforms_2_s_t_m32_2serial__lld_8c.html -platforms_2_s_t_m8_2serial__lld_8c.html -templates_2serial__lld_8h.html -platforms_2_a_t91_s_a_m7_2serial__lld_8h.html -platforms_2_a_v_r_2serial__lld_8h.html -platforms_2_l_p_c11xx_2serial__lld_8h.html -platforms_2_l_p_c13xx_2serial__lld_8h.html -platforms_2_l_p_c214x_2serial__lld_8h.html -platforms_2_m_s_p430_2serial__lld_8h.html -platforms_2_s_p_c56x_2serial__lld_8h.html -platforms_2_s_t_m32_2serial__lld_8h.html -platforms_2_s_t_m8_2serial__lld_8h.html -shell_8c.html -shell_8h.html -spi_8c.html -spi_8h.html -templates_2spi__lld_8c.html -platforms_2_l_p_c214x_2spi__lld_8c.html -platforms_2_s_t_m32_2spi__lld_8c.html -templates_2spi__lld_8h.html -platforms_2_l_p_c214x_2spi__lld_8h.html -platforms_2_s_t_m32_2spi__lld_8h.html -stm32__dma_8c.html -stm32__dma_8h.html -test_8c.html -test_8h.html -testbmk_8c.html -testbmk_8h.html -testdyn_8c.html -testdyn_8h.html -testevt_8c.html -testevt_8h.html -testheap_8c.html -testheap_8h.html -testmbox_8c.html -testmbox_8h.html -testmsg_8c.html -testmsg_8h.html -testmtx_8c.html -testmtx_8h.html -testpools_8c.html -testpools_8h.html -testqueues_8c.html -testqueues_8h.html -testsem_8c.html -testsem_8h.html -testthd_8c.html -testthd_8h.html -typedefs_8h.html -vic_8c.html -vic_8h.html -architecture.html -articles.html -page_general.html -page_kb.html -page_howtos.html -article_atomic.html -concepts.html -article_create_thread.html -credits.html -article_debug.html -article_design.html -article_eclipse.html -article_eclipse2.html -article_events.html -goals.html -article_integrationguide.html -article_interrupts.html -article_jitter.html -lic_faq.html -article_lifecycle.html -article_manage_memory.html -article_mutual_exclusion.html -article_portguide.html -article_roundrobin.html -article_saveram.html -article_stacks.html -article_stop_os.html -target.html -article_timing.html -article_wakeup.html -testsuite.html -test_benchmarks.html -test_benchmarks_001.html -test_benchmarks_002.html -test_benchmarks_003.html -test_benchmarks_004.html -test_benchmarks_005.html -test_benchmarks_006.html -test_benchmarks_007.html -test_benchmarks_008.html -test_benchmarks_009.html -test_benchmarks_010.html -test_benchmarks_011.html -test_benchmarks_012.html -test_benchmarks_013.html -test_dynamic.html -test_dynamic_001.html -test_dynamic_002.html -test_dynamic_003.html -test_events.html -test_events_001.html -test_events_002.html -test_events_003.html -test_heap.html -test_heap_001.html -test_mbox.html -test_mbox_001.html -test_msg.html -test_msg_001.html -test_mtx.html -test_mtx_001.html -test_mtx_002.html -test_mtx_003.html -test_mtx_004.html -test_mtx_005.html -test_mtx_006.html -test_mtx_007.html -test_mtx_008.html -test_pools.html -test_pools_001.html -test_queues.html -test_queues_001.html -test_queues_002.html -test_sem.html -test_sem_001.html -test_sem_002.html -test_sem_003.html -test_threads.html -test_threads_001.html -test_threads_002.html -test_threads_003.html -test_threads_004.html -group__kernel.html -group__kernel__info.html -group__config.html -group__types.html -group__base.html -group__system.html -group__scheduler.html -group__threads.html -group__time.html -group__synchronization.html -group__semaphores.html -group__mutexes.html -group__condvars.html -group__events.html -group__messages.html -group__mailboxes.html -group__memory.html -group__memcore.html -group__heaps.html -group__pools.html -group__io__support.html -group__data__streams.html -group__io__channels.html -group__io__queues.html -group__registry.html -group__debug.html -group__core.html -group__internals.html -group__ports.html -group___a_v_r.html -group___a_v_r___c_o_n_f.html -group___a_v_r___c_o_r_e.html -group___a_r_m7.html -group___a_r_m7___c_o_n_f.html -group___a_r_m7___c_o_r_e.html -group___a_r_m7___s_t_a_r_t_u_p.html -group___a_r_m_c_mx.html -group___a_r_m_c_mx___c_o_n_f.html -group___a_r_m_c_mx___c_o_r_e.html -group___a_r_m_c_mx___v6_m___c_o_r_e.html -group___a_r_m_c_mx___v7_m___c_o_r_e.html -group___a_r_m_c_mx___s_t_a_r_t_u_p.html -group___a_r_m_c_mx___n_v_i_c.html -group___a_r_m_c_mx___s_t_m32_f10x.html -group___a_r_m_c_mx___l_p_c11xx.html -group___a_r_m_c_mx___l_p_c13xx.html -group___p_p_c.html -group___p_p_c___c_o_n_f.html -group___p_p_c___c_o_r_e.html -group___p_p_c___s_t_a_r_t_u_p.html -group___m_s_p430.html -group___m_s_p430___c_o_n_f.html -group___m_s_p430___c_o_r_e.html -group___s_t_m8.html -group___s_t_m8___c_o_n_f.html -group___s_t_m8___c_o_r_e.html -group___i_o.html -group___h_a_l.html -group___h_a_l___l_l_d.html -group___h_a_l___c_o_n_f.html -group___p_a_l.html -group___p_a_l___l_l_d.html -group___s_e_r_i_a_l.html -group___s_e_r_i_a_l___l_l_d.html -group___s_p_i.html -group___s_p_i___l_l_d.html -group___a_d_c.html -group___a_d_c___l_l_d.html -group___c_a_n.html -group___c_a_n___l_l_d.html -group___p_w_m.html -group___p_w_m___l_l_d.html -group___m_a_c.html -group___m_a_c___l_l_d.html -group___m_m_c___s_p_i.html -group___a_t91_s_a_m7.html -group___a_t91_s_a_m7___h_a_l.html -group___a_t91_s_a_m7___p_a_l.html -group___a_t91_s_a_m7___s_e_r_i_a_l.html -group___a_t91_s_a_m7___m_a_c.html -group___a_t91_s_a_m7___m_i_i.html -group___a_v_r___d_r_i_v_e_r_s.html -group___a_v_r___h_a_l.html -group___a_v_r___s_e_r_i_a_l.html -group___l_p_c11xx.html -group___l_p_c11xx___h_a_l.html -group___l_p_c11xx___p_a_l.html -group___l_p_c11xx___s_e_r_i_a_l.html -group___l_p_c13xx.html -group___l_p_c13xx___h_a_l.html -group___l_p_c13xx___p_a_l.html -group___l_p_c13xx___s_e_r_i_a_l.html -group___l_p_c214x.html -group___l_p_c214x___v_i_c.html -group___l_p_c214x___h_a_l.html -group___l_p_c214x___p_a_l.html -group___l_p_c214x___s_e_r_i_a_l.html -group___l_p_c214x___s_p_i.html -group___m_s_p430___d_r_i_v_e_r_s.html -group___m_s_p430___h_a_l.html -group___m_s_p430___p_a_l.html -group___m_s_p430___s_e_r_i_a_l.html -group___s_p_c563___d_r_i_v_e_r_s.html -group___s_p_c563___h_a_l.html -group___s_p_c563___s_e_r_i_a_l.html -group___s_t_m32.html -group___s_t_m32___h_a_l.html -group___s_t_m32_f103___h_a_l.html -group___s_t_m32_f10_x___c_l___h_a_l.html -group___s_t_m32___p_a_l.html -group___s_t_m32___s_e_r_i_a_l.html -group___s_t_m32___d_m_a.html -group___s_t_m32___a_d_c.html -group___s_t_m32___c_a_n.html -group___s_t_m32___p_w_m.html -group___s_t_m32___s_p_i.html -group___s_t_m8___d_r_i_v_e_r_s.html -group___s_t_m8___h_a_l.html -group___s_t_m8___p_a_l.html -group___s_t_m8___s_e_r_i_a_l.html -group__various.html -group__cpp__library.html -group__memory__streams.html -group__event__timer.html -group___s_h_e_l_l.html -group__test.html -group__external.html -modules.html -annotated.html -classes.html -hierarchy.html -functions.html -functions_0x62.html -functions_0x63.html -functions_0x64.html -functions_0x65.html -functions_0x67.html -functions_0x68.html -functions_0x69.html -functions_0x6c.html -functions_0x6d.html -functions_0x6e.html -functions_0x6f.html -functions_0x70.html -functions_0x71.html -functions_0x72.html -functions_0x73.html -functions_0x74.html -functions_0x75.html -functions_0x76.html -functions_0x77.html -functions_func.html -functions_vars.html -functions_vars_0x62.html -functions_vars_0x63.html -functions_vars_0x64.html -functions_vars_0x65.html -functions_vars_0x67.html -functions_vars_0x68.html -functions_vars_0x6d.html -functions_vars_0x6e.html -functions_vars_0x6f.html -functions_vars_0x70.html -functions_vars_0x71.html -functions_vars_0x72.html -functions_vars_0x73.html -functions_vars_0x74.html -functions_vars_0x75.html -functions_vars_0x76.html -functions_vars_0x77.html -union____ioport.html -struct___serial_driver.html -struct_a_d_c_config.html -struct_a_d_c_conversion_group.html -struct_a_d_c_driver.html -structat91sam7__pio__setup__t.html -struct_base_asynchronous_channel.html -struct_base_asynchronous_channel_v_m_t.html -struct_base_channel.html -struct_base_channel_v_m_t.html -struct_base_sequential_stream.html -struct_base_sequential_stream_v_m_t.html -struct_c_a_n_config.html -struct_c_a_n_driver.html -struct_c_a_n_filter.html -struct_c_a_n_rx_frame.html -struct_c_a_n_tx_frame.html -struct_c_m3___n_v_i_c.html -struct_c_m3___s_c_b.html -struct_c_m3___s_t.html -structcmxctx.html -struct_cond_var.html -structcontext.html -struct_ctx_swc_event.html -structeabi__frame.html -struct_e_m_a_c_descriptor.html -struct_event_listener.html -struct_event_source.html -struct_ev_timer.html -structextctx.html -struct_generic_config.html -struct_generic_queue.html -structgpio__t.html -unionheap__header.html -structintctx.html -struct_i_o_bus.html -structlpc111x__gpio__setup__t.html -struct_l_p_c13xx__gpio__setup__t.html -structlpc214x__fio__setup__t.html -struct_m_a_c_driver.html -struct_m_a_c_receive_descriptor.html -struct_m_a_c_transmit_descriptor.html -structmemory__heap.html -struct_memory_pool.html -struct_memory_stream.html -struct_mem_stream_v_m_t.html -struct_m_m_c_config.html -struct_m_m_c_driver.html -structmsp430__dio__setup__t.html -struct_mutex.html -struct_p_a_l_config.html -structpool__header.html -structport__common__t.html -struct_p_w_m_channel_config.html -struct_p_w_m_config.html -struct_p_w_m_driver.html -struct_ready_list.html -struct_semaphore.html -struct_serial_config.html -struct_serial_driver_v_m_t.html -struct_shell_command.html -struct_shell_config.html -struct_s_p_i_config.html -struct_s_p_i_driver.html -structstkalign__t.html -structstm32__gpio__setup__t.html -structstm8__startctx.html -structtestcase.html -struct_thread.html -struct_threads_list.html -struct_threads_queue.html -struct_trace_buffer.html -struct_virtual_timer.html -struct_v_t_list.html -inherits.html -classchibios__rt_1_1_system.html -classchibios__rt_1_1_timer.html -classchibios__rt_1_1_base_thread.html -classchibios__rt_1_1_enhanced_thread.html -classchibios__rt_1_1_semaphore.html -classchibios__rt_1_1_mutex.html -classchibios__rt_1_1_cond_var.html -classchibios__rt_1_1_event.html -graph_legend.html -files.html -globals.html -globals_0x61.html -globals_0x62.html -globals_0x63.html -globals_0x64.html -globals_0x65.html -globals_0x66.html -globals_0x68.html -globals_0x69.html -globals_0x6c.html -globals_0x6d.html -globals_0x6e.html -globals_0x6f.html -globals_0x70.html -globals_0x71.html -globals_0x72.html -globals_0x73.html -globals_0x74.html -globals_0x75.html -globals_0x76.html -globals_0x77.html -globals_func.html -globals_func_0x61.html -globals_func_0x63.html -globals_func_0x64.html -globals_func_0x65.html -globals_func_0x66.html -globals_func_0x68.html -globals_func_0x69.html -globals_func_0x6c.html -globals_func_0x6d.html -globals_func_0x6e.html -globals_func_0x70.html -globals_func_0x71.html -globals_func_0x72.html -globals_func_0x73.html -globals_func_0x74.html -globals_func_0x76.html -globals_vars.html -globals_type.html -globals_enum.html -globals_eval.html -globals_defs.html -globals_defs_0x61.html -globals_defs_0x62.html -globals_defs_0x63.html -globals_defs_0x64.html -globals_defs_0x65.html -globals_defs_0x66.html -globals_defs_0x68.html -globals_defs_0x69.html -globals_defs_0x6c.html -globals_defs_0x6d.html -globals_defs_0x6e.html -globals_defs_0x6f.html -globals_defs_0x70.html -globals_defs_0x71.html -globals_defs_0x72.html -globals_defs_0x73.html -globals_defs_0x74.html -globals_defs_0x75.html -globals_defs_0x77.html -tabs.css -tab_a.png -tab_b.png -tab_h.png -tab_s.png -nav_h.png -nav_f.png diff --git a/ChibiOS_2.0.8/docs/html/index.html b/ChibiOS_2.0.8/docs/html/index.html deleted file mode 100644 index 58e7495..0000000 --- a/ChibiOS_2.0.8/docs/html/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - -ChibiOS/RT - - - - - - <body> - <a href="main.html">Frames are disabled. Click here to go to the main page.</a> - </body> - - - diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__0.png b/ChibiOS_2.0.8/docs/html/inherit__graph__0.png deleted file mode 100644 index 98e08f1d876f0f90ed8841d201c24a0875ed1243..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmeAS@N?(olHy`uVBq!ia0y~yVDMmIU{K{?V_;x-*uMTS0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj*u;SqXnWvKXr<-UV-`c4EML|=cMWAWg(T=%{G2i7lIL#UQZ3+w~`7vCJZ99Cl z>-rsY8EyWUW4*1DQdrlDsu-!9aBPwR6KNbq<=of4pBG4x^~;>Ow<)M>>fh8o>h?LJ zSNXaYd)`>LY)|gp@6Xx~L@lXSw|KKTRn&!f^@5AmvBt*P7k00ElDj%T^MpR d1RhDxi{7VPTfU)kIs*d(gQu&X%Q~loCIAC;gi`H=O_FLRCyj*n+QJOV$&3KeH5^<+VQgk|E)Z z(7A7tj513L^KA`X3dVpd3>sMsBBl(lU+-^e`F_j1vwE$WpWE)M z*G`Gd7h5hpZ&4H@e^>n3+LPs;HAZsf*F64vRveIPn00U_-&wV{w%~n|gb(bk2f49J zioun)VG)}{AoB(H=O_FLRCyj=VR&$Om9FfbZ>x;TbpG`^kb$k${b;JV-K{F7tZ4-Pq3Xq&Iw zlNg&ZdD+aFVskVn{F!djV)S=rU7Hw_1BYTu&Wz?u{}~EoXP)TWc~#b3^#fBv*V)wX zJ~Lik{CvIRoUFqny^N_|{~DIDIRrB=Sjl+d3d0^>U)Rg)&cF1|$d0mF{U9^z(D!7e z?NyUJU$$SGzR~3M4&MiDQMgr!37&RF>TIt}1lZHp8cn9W%UFZT)U|)+#LLhVQpE zS8h#M8XEYzBExG}V(9C?KeDsuh-UY0RJ&Jo`^DL#cVp@TS>bNX$YL-tWtb(!;LCfU z>gRlhJ?^TToUhdXo3=8YLH~aYhhmGsCN24tW;?mmwC6?)3=9mOu6{1-oD!M|H(? zBvIn&>&kwMTZWg5kNu$(BLf4Ys;7%%NJit^nHPBv8SuEo9+6pdkUx8hp+uYPk4DoQ z+BFI)$(GA3Ed#aRc}_gQcV%bH8U+^)#g;#&lZCB2Po$P8YCqFd3YWcMIhjw%h+i}P z?-`|{EeC5qG#2lVGCO>hyUI`5enAF<2yeq8#sHHBpNm~mTWh@6SR8(qegERr7pE>d zO?=;7^mcD=b+KvO9;T-26XRO?sy|+1N%fy85=zuAH!Gm)|s9yzAC_ zdG_Q$caLWub9T!4INF`6{Ha=N5Nh*Ji2>m-hAuXTiwqi44kbIE*3Zx9l{1s*EPEf$ ft=J;4DKXA+uen3lJrRBe1_lOCS3j3^P6|H*Y zfq{X&#M9T6{T8X_Ak&$sc)vBgc+*`f+zfw+j(&XG*5wmKA zFQ#VkKjHR2x_@eJ*iN0_l{44aUYFKZ5q9qkWXqYVbzX0N;A`cXN49R=RK3r8w&YC7 z==cM(e#Gs`S=FgJXGMP7wo|8WS!>#7U%zamd2ik7R^5MzkwP;ii-M}c&qw{dkX7z~ zZOY><98zEB{qN8Vj!MY>di!%`=I5HMq|1M@*BySqX(K42j0N3Wn9ugXSWDnhcOmNs kTP*=64#k!U&Y!rm)O~myxm$KIFfcH9y85}Sb4q9e0QbVT=>Px# diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__13.png b/ChibiOS_2.0.8/docs/html/inherit__graph__13.png deleted file mode 100644 index c79aea81f93928f18894ad543c1171952165d12e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0y~yU`S?QU{K{?V_;wivkHI0z`($k|H*Y zfq{X&#M9T6{T8>M3dUTDF!XTlvTYaUiQJG)Q`@zC zQUAo5 zg*Uu&4xC=5%6EJ6rf)pomTrChzW2|X$^Iq=_d2tAtA8!8OPD$HB753vaS_gfl$+gs z8;@OBQ@$icKlt9qE0>gO7d<^uchKaT{U>|Ty9c=8zCdO?jQyp?aDTCyQjPIE#+u$) i9Rf}qibphmvVP3*;CSi( z0|NtliKnkC`z>x6UM~KEXIj%47+7*VT^vIy=DfYVGf%`&g8jpObN1^^N-Rn@*92Ys z$gr@1i__(>YO9CL!o?1ENWk^`}N}(vJE;u;z`12hP7hPx26BFXQI&+N`ga3^CS6ps=TzUJZuwY6;a&rq$VZ&wEpP$;y(;lU3wD|E*QoA#9Vx z=bqbJ8)y>4aAeYyqPUJ{U(N=_e%|f(%B)PQ|MK$``S{Gx$ti#SrX2UJzkW44%U?9Q z$b7-A+MVmJ=@srgGJB7jWc<9}lh<7C{`-6V*5k+3&ok{%dHP|7K+$SmMuwnAtIvPa z67Z^1FF%u6d-Z76s^vX%)@HqV@owYUVE2XGP3up_O}(@0h}qj|zF&{TFQ4k&ZTPSH zk5z2a>{pvQPp9uO`+oY_-#hVrRuvzPZR_pbI5|*7k3-S_alV}=L-N-fIg#9|`$MlU z`Fd4kb-&>x)%4SH){$mKS|?d=zgEzCC2@R8!m>?zUyp}J&bHdLO;|kta!J~XuG6JO zSC3|IR(ScSSacz2?52Y0;N2+rMXG<}fV$zyFwy zT9u-Ksd4dbXPKX#mJ(ln>)#8Nb??&pe7p60jP~yNcE|eO->rCC_Dzp-mg>yO{avAa z99Jzh6Z%%Ks3<+ov1=3Gw8eGxm8nHVUoT#{(s_REwRe_^8{EBkS~lFen(v{xe#h3x zp7{NCapxmlJ$}AbI_>h_$gS&+&J#(HLoZKu);;&;^P0Sq?qRd5YS%2=wb|nGs&!fM z-*>;S2+g^*x%cX!qAfc)YySUxrC9LwZX>g`A4g-i!)p_PTy_D*B%jiyQ*ONZKELl& z-mjkIpBFyeZq4@F`OPx@+_Ns_(>FHS7G0KA6g~F*TwM9QgZbTebN2?SoM()f6eP!ZMBu;< zff*~!PPrx21*iGWelzon=E}HhRpkS>vP;yLxI+w$+m)l3>G(q1z8&q%mZIC=dd!o zKh4#$BIQgzS6Aky`3xVnt#Rn^I`&6R2^IYR$8h6d`Nl%!1C|U73=E#GelF{r5}E)L CdP@5M diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__15.png b/ChibiOS_2.0.8/docs/html/inherit__graph__15.png deleted file mode 100644 index b0f986254b01ea69bfe2c878ea909adc7526000a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmeAS@N?(olHy`uVBq!ia0y~yU}$DwU{K{?V_;xNyb(2(fq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM~KEXIj%47#Qbyx;TbZ%z1nBtnU#6fwqVIEV&oh#BbdYwhiEM zEqLG}_(jw&TQd9D#>a(++P+T|nEk{2+>dleCI$uut2>t8@2l*6b5romtJq8Bm7njO z{G;>IXsflwDc4Jrr+x^~{G#}>)T_K;$x-hQVQhb#S(t^I7 %v?MqfSxfAh{QA-i zJ8%EL-rt1p{tG;xzp8fYoRhzk!?SaHd{;9--_g( zSB=&wrp=YCVyigK9LrvDa$WVW5|!+&C)2Ae%kFsz|FdzQE2-o&Td}@ltC5d!cIt~* zF85d4zuo1yS7&!>)!|#eqE5ATMM<7&d_8kz<;`0{vzGU7DS!I*`86ZkTXjEs*6NpK z@AOsL&YA77=kkv4x3!-0mgFDUdgcBn9^1;rw?7`!KB7BcQs>?o%hxlNuH0;DoNm|f z-&a9VVuApV2M3!9I7~d>u72uz>3W>(!H-!7KWMxxUf;*Sz`(G>(7q-z?_((UAyDKo Nc)I$ztaD0e0suHm>Kp(7 diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__16.png b/ChibiOS_2.0.8/docs/html/inherit__graph__16.png deleted file mode 100644 index 68b9362322aedc55dced68ebfc3a8f1782840669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmeAS@N?(olHy`uVBq!ia0y~yU?^r_U{K{?V_;w?oN|qafq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM~KEXIj%47#Qn3T^vIy=DeM8HutarPiuTrN$;A8-q$~9TBpq5 zo9OH>yQq5Qa;7eap#MdO_V9BgMGCq8o;W49LBNSa@yS^Wjpz9ccHve|t9~$jm_5%% zt6866+sbzn!ps=bS3XYh*~PrWudw}#z!pAT>9<85Vgq_ejcKQ6L6cKoBwNpp$6vud+>-%9P88Jf0MI;D5*M)^gLg{0TM z&dAPo+$vrDcBb-%O||-EUz4w0&hc&8=2C3)yy2^4V36AM^p`8n_~d8!wk%WKd?fFD z)qjtrM&V{_OQUL}qC(xKMdsE|ymf28iT~~!w;D7z-rs$F`<>>*J)h=jE}Xh8{bum; zN4{sa3-~tQPeb?;;@!l(vvL^f!YrMBZ9MXa;ltijf=(QYEdoxfeloLoNBnd;#W;z9 Pfq}u()z4*}Q$iB}^is?5 diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__17.png b/ChibiOS_2.0.8/docs/html/inherit__graph__17.png deleted file mode 100644 index 33e2eb2bdf2b2bed832fe88525ef01167fdcf2f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmeAS@N?(olHy`uVBq!ia0y~yU?^r_U{K{?V_;w?oN|qafq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM~KEXIj%47#Q5@rX9PNT!xV$Gn zQFe-o+?L!t{qUK|0>_(d4XPUzm>3us7%U{kAKqy0xR=e%m^kmxfl!N=elE`Sx(RB` ztbZy6FW&Iyj_7#Rf5qsaW8=)$1{ivgxy(#iZtl~)ACAmloqKtEgKpHaFAJ4|_KDq@ zad-c^)R~rM-C@_>RiECvBg{_I{=D*6KEcgvs(&osAFX=Qpm<4q_AD{I7^`=h*B?dw zw2|_R`203={_`yl3{B@=+>w_T*(kM!J!P(R=Y2Z~|DLtG^42c${XSvU>h_u02eSXi zMTSQAb6%LVQN5~n`|P>h%ULTwdmr{+^{r>xNmth_<@ZLmh0~wR&X9jLCv07BW3G&E z`fT;ByU)H#Q#G7qc`a&}-|mwctsjq^zp<^T@{7)+70Jt5OmAASPCaAOn<@3fESh6R wBno;_2(kev4a%my5sPnbvd$2F4AZE{-7;bKcIr7vcP?v`N>KJ#VhBOWc-^CtrRr(-*hkoIma2Dia314z^1QQXb723cQONO^jVPo4;B6 zdUMCG`&Y9~uXjius(v!B^=oU=vtL|gKWDe6?)G*ImCAR^+MV|}cKy$@Aq|^0z0`XC zbg3q5^3m&siz=gkM%EhD?I~-Q49xt(qjNs{_}XpvDp$v9AOE!D&GP>8!}m^IK4mzm z{MnB3J?){VBu@vwb=z_)?ay>`lShlq`#N;z-8%F2(UeN}->ILsvDnSYev|3;AauRx z#;T+!<9f5;V`;}O2d5cSv8{Xa`0PF9HGg>a+VvfKljgGYqPgDUy!`h8pQ}~w>EF9| zxXVy!-@i4cAKj;Y@%SV7IK?Qda+A;|mj`>J|GKUD8u&kMx5uB3`#yW#>~P6#w|qVC z*rN1eF4;fo7w3e^EI&Q_{ycDipoGpnW%K{FO};Mswq6uIdwov~D7+aM{Eo326xG_A SPu2?u33$5txvXi( z0|NtliKnkC`z>x6UM~KEXIj%47#Qbyx;TbZ%y~QGZ0=zLp4RxTvfgzUy{~^*X4`00@-+J|* zR^7#aPMLeFTo=`z+4${z!cn`vsN0zz&b$d@J5gr2?CScPwv!5<`YDx94U3uN`yxsw zDrT1a+gW?dCdx4U*^Q_5Dc>uI-@zbV>m{}^?_ z^kdZjt(9`o3$NB?-&vu*IyT$q@SL4#*Ju2EP`s=Box5=Lv$OV7FEH%yUEY+Wj*J$4 zeYKV0$6Qg4&gH7#xEtn2HVQa#D7FYp>a#z6HS4cqWaWMa1_lOCS3j3^P6;_2(kev4a%my3`6p%fzn1LG`D7srr_Id5-!`yDahX-MR6GT!)5D)pe^4pHf_ zI~z7DUOHiscgG^P?Wg@pp|h(!3odWD)WN{Oz`*|^$n(F*#O=z~O__UNw=DNM7%muj z>>KOkXcYkLd_k~wa ze*bhXt=Bwi|BT$6Wp5T}3TOB}IjV8JXkX~JoV|?3pKti2+s^Y!=={NWO{nJShD#;8 zLeA~|wD#$@FUO^3@5_7gE6g@_-|dd$mjn0gHYxhPZC%mCs~eZw&(vNQUcdd!f{T+) zZUH9YyPkWnNwcar0pZlB4cY&{;EW5vT>bB+6wl3G4yrTaWOT_9) z=kA}ny*QQi%da)JUj|A?Uz0bMLu9!Fy++cDhKh;lmvknjo&HtDnm{r-UW| DZ_w{m diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__20.png b/ChibiOS_2.0.8/docs/html/inherit__graph__20.png deleted file mode 100644 index 556cfd34689144c92f304f64e55758d884d65cfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmeAS@N?(olHy`uVBq!ia0y~yU?^Zi( z0|NtliKnkC`z>x6UM~KEXIj%47#LGMT^vIy=DeMi$ahGAr`7tgrA_Dc8OJ{u$Q>@O zSpW0z1cRUj4&AHw=^N%5oVqR7nky;Dz`(%J;4HT6jhD;!n@$ZK?1FnAH3=7AXzjSB zS>(X2UAyOIp`OW(o0*KVIWdaU8xIH?T(E?rX>6OyeFH1k-sAH8)BDr&w%^h(5{aze zKP^~V$L4t0t=iW8!Zv4Z=F1aLT|N5y(yy31LG>~JGwoyCwjT2;^)OkLzR8Vk* z=X0<3>At<*w>qz8rVXH2r7jR?Rkqt9`sWdNJ9xHr5g4xtS z^6V*}i>Za;w~Y3GU&C5ByH(`6u=5#{tdxW*!DzQQD_O5ceP6^i*2YU^WQZ&@Z7pK5 zboTlmv-?ixc0M7`Kl6$udd+*Tn@&hR<$L(z4^`&+TPtKL#9zrsyg){CE+w<<<1KYK jdEmK;C@7>D9_+7R{#zQ-AiGdv4oJY$)z4*}Q$iB}B$TH=O_FLRCyj=VR&$Om9Ffi(Px;TbpG`^i_$alzq$F*KyPG@WOlt$+QZ85dH z8G1YmH(gfQdYk31dZ?CPPksGb6^;f0Cytjh795$+kXOwmIpeocL6BM;qtCvmwsfbZ z?(5&XmdG(IGFecnb(6ujv|*W*L$K_Em3$Gir6z0lW)>G$?v#qkS$nN$&$2wj^uzDF ze*86@SU2sM*C(&+trvo}bFB88$}*KJr*Z!2kdN diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__22.png b/ChibiOS_2.0.8/docs/html/inherit__graph__22.png deleted file mode 100644 index 65828068fba71064032b692a29abb049ffc0a796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmeAS@N?(olHy`uVBq!ia0y~yUH=O_FLRCyj=VR&$Om9Ffh7$x;TbpG`^j7u<)<}4@>{d9lcv7`ro>sZM#H5 ze4=}trc&)meSZrHCbp--x>b4h+dLdB?g=O{Dz*qbViZaL!+qemhvMWywh!s-@pB%O zGn`&m^emO}!?jrzyp#4Z*1S_n&kM^xbbDqJv(e;^Gb&2PohN*hE@tj){k25t+T91_n=8KbLh*2~7ado3(fV diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__23.png b/ChibiOS_2.0.8/docs/html/inherit__graph__23.png deleted file mode 100644 index 33d3a0193ca017251ade8dd815317d36f9d5a3dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OU{K{?V_;z5+8}a(fq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM~KEXIj%47#P((T^vI)8sAPk%X`Rx$8EntM6>CR4Q~E#4jAwp zY!r6h5N;V7GEMl=wbIM4s@12+KiYT8kI{)kakon9vG)w?CN`QJV?N-{Cuh{H&#=q& zaOQNr1Cg^W#LR3N?}%|O&;51BMQ?KlQ>x?w9p)*i4V!qT-R$)98*b$Q?Os*P^% zR@=JIQ(gIUzm`p^r)E&woYgnOi_cZOxz9bTHC!_5;8nKQ9|PVcnJlUbJET9`D>ZVm zVCEJxk@xdV*}XYW%57bJCaPZ>i` z*;_qLti;_2(kev4a%my5sPnbvd$21agA7srr{#3R%I#ueqKmQB=P>2#U^A|hsMe8~))y|wdF>#RjBD~={#JND+yonO`N`qz$M z5mJ5d^`wF6?j0|S58ZlP_vZMcqlQ7n`?R&}6 z;9{HTb9a)yO?`CZNKt-zwDzN@M@P9IlrFnvwn~-jfbgfRZrxeM|17`F*Wa?*ZIOTq zmm@L}q@S|H(? zBvIn&>&kwMTZWg5zu=kHbOr`SNlzEYkc`H+GadPw3`TTYk2M)y}>m=v=kUg+8RY|t^EHnG_L&gn-w_|ptyDVkv z|Gq6fk3ntq!QxpO3Ky9?wlE0kHn?yf5X<#4OPl}lUUvSmi8rpdyzhVd=TCk@XBy`e z?it66+as>?NB+Ll{qfkwcf5y7X1Tv~Tw8G~&iJd>6*T3ZF!7w zUucfTmpG1HE{j+vWH72kF?5PKK$#7fj=$x2a8+v}U*Z4CX)e}`6`zU)oj4Th=198i XH`2Dbba)2?0|SGntDnm{r-UW|^(~sd diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__26.png b/ChibiOS_2.0.8/docs/html/inherit__graph__26.png deleted file mode 100644 index 248bbbcc28783aa458f579047bab473a7982760a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmeAS@N?(olHy`uVBq!ia0y~yU~pw%U{K{?V_;wqsZ=RuU|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my5sPnbvd$28O?$E{-7?jc;!rOi`K6QWcyXkWGeyDa< za_ZcPuj_jEf7{*>5V82$isWOzZpF>sSvPUTTgdC;kt&Z?TMvm17;-}rEM$$ObvMS_3p( vUO&y{|NobVA#UFduBS7vcXxEWxy9bstm$2`aq(3K1_lOCS3j3^P6|H*Y zfq{X&#M9T6{T8FQG0kxEu6d5~F6-w@-dOuRsyBV+C7mXf3vOi- zKk2w7f3>~xPP0+f{)F5npRGxI8~kL10)o91M?1)ql6InHDyGUfrD!QIb{%xBi;7ed3J0n>T;^6Lw$KUMz3*jm|H*Y zfq{X&#M9T6{T8&p~$wB<(oPKf3=zs!+eH$Yd@-S>|-|w zye!$xd4Ja5hubc`6g{A4{;xg|`m0P5*e(>V> z^0YXKa;~WF54K(j4HdhQ9l!Ek^rN$C=j;~$d}U$rFK*uKlR`JR9_!vY=K5AF`&dtn z?d@4LyEbV3U|*k=70-5b%l32bH?JGBeiM5T$~O7`8TXslBirX}H^{#2{6_iLKc&@8 zZ=sYv-+9I+>bC3Z_%ypOx`%Fge|Xb-Q9A!+jrZ-$6s|d(zZ35CZsw}7R8&6q zP2F5ZXhsii( z0|NtliKnkC`z>x6UM~KEXIj%47#IsYT^vIy=DeMin0Hu#r*&@D^B0~~yf zt_^Nuj*57>^en$!58wA48yon{PHL=mn83j?Lk5ntxxXr;FFSL&`>**;{L_cJMLhElPe6_`@YzQuqG1 zCA-3Qm&XLHdHwO`Q4YrFb`)6nN3m#x($$1`flApzg v4;A&5PB^}OA?F5`Kl98$5yimpVSfcv-pcR^KA~?JL1F0W>gTe~DWM4f4SK&z diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__3.png b/ChibiOS_2.0.8/docs/html/inherit__graph__3.png deleted file mode 100644 index 000786ce617f2817f38526289087fcedd620c906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmeAS@N?(olHy`uVBq!ia0y~yUH=O_FLRCyj*RLm;ySd(X@d^Z!3vzGRBL`oXwM=Vxu_zPHGa zU(NP`!WQk7(QmhW+jd diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__30.png b/ChibiOS_2.0.8/docs/html/inherit__graph__30.png deleted file mode 100644 index 3de1b19cb49a5ba6708ff12d81dd844a3704e3af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmeAS@N?(olHy`uVBq!ia0y~yU`S?QU{K{?V_;wivkHI0z`($k|H*Y zfq{X&#M9T6{T8`fKW=MjwU0Y4sX!!( zKj`o7c`N7SZk)c#SGwS=`SZh4^Ji?^_21=wvGHTowlI$C;X<98zl&)9%xk?N6#sc^ z=ZV}^dM(--O;xHsPI1Z~m;PIKJNb#(Qo)_aqtkNp|HPhK@*+I?wAtgGUQ0e7`sI_) z6W(WGe9Lju8LO8ca_3*K(YLF5-2cS7rCnlLl3UK5g;_Vts%oNtM`Yh%$$QY*Ab|y4 t(5wCNK7{Adj;y3T%tD}$VECbL7r584!g15)`3wvU44$rjF6*2UngA*jvC#kk diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__31.png b/ChibiOS_2.0.8/docs/html/inherit__graph__31.png deleted file mode 100644 index 60e13fda29105f224ff27a7cfae9224ad1fc0662..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmeAS@N?(olHy`uVBq!ia0y~yU`SwKU{K{?V_;y|%lqaz0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj=VR&$Om9Ffc}Xx;TbpG`^jFkoS-Qk88c)nIo;HRY~k^iR=~! zS`}|-%LFVvb;DC?QpAP-ertoR!}dKkVNh%laEg)O`OSG?VY-s`1I`CJz0!{#+cs>> zw0fO%q}td1hTEKV41KZo>92fX3LFP^=JNxnwB4!v~9uG zDKBF;pZ>U@W_H)?$=y%mh0MFJ>1NEUS=B%NOe$xfkhW>q)=%nLTpOlHiKc|+anCyP z{-gA&(ETZ%rM1zWrq5PwliqW#p;F$z*1F$bV_$K-_BtE$HLPboohgH5!b;{_%OEWX4qS#p}s=Nya-{ p8)qH=O_FLRCyj=VR&$Om9Ffa;wx;TbpG`^j-mzT+q$8Eo}fiQ3Ok|g%FM0Sk@ zi5%aoxGXe{3VllYJU`lUHp;kL_@Co<;80A7P*bgAD(KKjVVK8o&S*#Ar0)zt*NcuR zJ>2_Df7?{gaE9Z0PkWBLN?)+*s9B)E%w+^7R@_a}J<~el+p$$o&mY@Uu!n^)mpi&> z>4b$(82)ab@n%ZU^C`zZzyG6LoEmd3zBiryi( z0|NtliKnkC`z>x6UM~KEXIj%47#MjxT^vI)8sAPk$a}~@fW@36>yfi`-9_f37np4x zI17Fem7BQq@yvW=@{BFZ z%6D~z|PLO|L&||ea(G?hv&fU26HeG$JjH~Wc5SwfQ{ER+U9s?ewnpy z>$@6{~dRsNzy>IZj5|H*Y zfq{X&#M9T6{T8v(Kbm8P{dSbQnLqaX`-aJvA*v%#2#G&{kT~g$>EXdF_5`ukqdT|2>IW^*f!jHZH9-jI(xKY-YJt zbUAOtuk7ZyP104xt9&bR6W1s?O_?To0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj=VR&$Om9Ffb-~x;TbpG`^j2miLeWPiws3nIo;HRY~k^iR=~! zS`}}smI+uYAago%PEzN0&kl{k$>IC|Y+>b4Y!Pr`X>;2P0ld1*!HMyqSvXVO5Yv_B5}5 z^QV-^$=92%&e>YJ^WoN`p60d>il6zN^k3!udTYhY`0nc^p2<7uI+brxEJmDVs`Pg!pSMOmQ>Cc-Yk~AfB!Y^ z1MhiGotJiqf3`P0J+BW~w5<$_qf0S&(1M)5<H=O_FLRCyj=VR&$On4)Oxx&hGaCpopF};kO5C?yg=~=Ht}m5$p$>u1&yXR zwC4n9Ki&~icxnEg_m{5qDcf86En;dB*i_h*w3}haR=*`m`3&DTK3u?K#n|C{X{A3) z!L(zG1q;?r_coTB6}bA#yM-^}7QBdya4N}?`F>bv(N^xj;5{ztJX0^s^X!>g7#upK zSS&Ht@1JVoig`X>znqROukGg){uf!HpFi`;Bk#!O-P@UOeTtKnv;F(l{O7u#MTN8C z4=-JB>%v^76gL07;Dc@U6>sk)drdyQ^~frh=;J-lYw`-dzhmtJqt_>H9p3+*lFBL_RV)YO2_9damEdz`(%Z>FVdQ&MBb@04X7i@c;k- diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__37.png b/ChibiOS_2.0.8/docs/html/inherit__graph__37.png deleted file mode 100644 index 81a9614798699b5514d839299dd744628fd0cc27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmeAS@N?(olHy`uVBq!ia0y~yU`S?QU{K{?V_;wivkHI0z`($k|H*Y zfq{X&#M9T6{T8fX6u? zz>uZdk-2=1e-X<>8OMLCYc?s@KEJ(@S-^=y@yT-yuRk0K_k&LyvS8eC_25*a3ibq! zsheZi7@}7u->rDT^FTl;{pOvme7WfpBo|0_!qEpK=e>$7!lC8Ueio#wEc!bCBky|A z(3Tmhb@khp+Dt6nDkC;Gtaow6tdDv=!q#H>Ta{m5vs`lLe#UPOe`AxxOW(I^d<>iS zV%IGR{ke-P>X)ggT)fnEI_mo0rP*KX4lF%+eIrM*PO0u!=lsZv){F0ba_#U=wzEC3 z{Myzn%U>8iOm)-UWb#WVdClZ+YqB%@pU!jXH$L2)*ZyKoit*u1v;K?yYgBJaQ$a?H uO1H`~#8h)C<{FzZ=3l3V)TiD>uV*_7nyN1_n=8KbLh*2~7ZKnWdfp diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__38.png b/ChibiOS_2.0.8/docs/html/inherit__graph__38.png deleted file mode 100644 index 77d1b8808a3273a355fa0c5190d1eca6607bc3e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjU{K{?V_;zT^K)VZ0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj=VR&$Om9FfiQqba4#HXnZ>(kn4~EPuu^l=O0w!lIo^w)OMrjYq$Ep8kHqa$pR}_UapF*PdCV&MUo$LJJl>Fj Pfq}u()z4*}Q$iB}6Pbch diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__39.png b/ChibiOS_2.0.8/docs/html/inherit__graph__39.png deleted file mode 100644 index fcc8e6fad7b84dcd8b2fd7d22a016be6da74f5a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 341 zcmeAS@N?(olHy`uVBq!ia0y~yV6bIiU{K{?V_;zT`23+f0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj=VR&$Om9Ffe@gba4#HXnZ>(knfO!fD8L$%RO!Oam@V>6ZbUR zSMk1YjaSpYsW(+mWlE)IaKwU{n%pL=9EvFgO+vdFc6=4PG{L-KH;>E|KXrzU-E+RV zFg&-ZFky?io%!;ZGk2Ep-s+4hv5YFQHFv9ZIrl%W6?(dK$F+OB{FjB^vYx2QGs=J8 zlwOt1#`Hz<+A+PWlXt{?nDypm&MJ) r``>dsn98nu`FvRvhhj_4Bj#BPm0gR@*}h?5U|{fc^>bP0l+XkK8)=Wi diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__4.png b/ChibiOS_2.0.8/docs/html/inherit__graph__4.png deleted file mode 100644 index d07d674bd5ea9271ca344e2e3efeb5ec212fdf78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmeAS@N?(olHy`uVBq!ia0y~yVCZFFU{K{?V_;yY7tB&)U|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my3`6p%fzn1LJ;A7srr_Id5kN`W-glaj-pNxr5Cf`KixU+ z<+l#k{o8IyI`Z46n(b9CSKa)le!`AFc8}b))V$yLc|%C3lx_3Z-Q}^b-L|Z1Qk~zs z&GzJqx0yS|=cgNAn!nX>%Pr-{IX7>)xGv2Mop_?>n~+*kaJbIe$1m4U+_*W-{Pz5e zIdMJSMrPqFJ!VBaRF_8m694&nP5Sbxmn*hhf7O3t-_82zPd9}x-FSj;ifQwreLAPo zZn;I(THLi;`RmJ-U7a^?Zn=^lI$cnGo!quPS(0~WyL{apu-E1#uWb6f320!^;(sCb>eNU?bjUK*Tr9s|1A1b=ICqZYjI2LqyM-) z)`(_vw_R?jb#-di6}7+X3~j0|$^1OB^=kNci63t{FHJC+(6*$}M1^+=G|cuWoBywE p@^q=&a>0An`?`&w;Adc%)1!UcveCGykL5o|z|+;wWt~$(696E3_N@Q_ diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__40.png b/ChibiOS_2.0.8/docs/html/inherit__graph__40.png deleted file mode 100644 index 5d4ac3cd25746a3c058026ac65baf6ac7d3ec432..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511 zcmeAS@N?(olHy`uVBq!ia0y~yVCZIGU{K{?V_;w?;+INfU|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my5sPnbvd$2F8V+E{-7;bKcH&EIO>f<9gNa+{MXXq+Tv+KXI_i zvpo2`K(7lc$844NxiTruDW3&5r7JNpFfcHDaM>fd&0lb*tSpDl@#$uJq{VAHPL$T^ zY|seLobf+j@aD6lOx=&q?VlRS;3L4@;;19Qw$VZ22vefb5u;zvo_x*Udj63{z44zV zeU)Wtk+B*|-`Y=4R|(dMF1#{%m*h9!H=QpwUcV)ls&g&y_{!g|uCHU)zr7cDJfQm6 zwEXNfd3uq|e*^tq{EPPgbnjbOPXFD{qMaMd&UM|+zW!&*+ZDD(d29Vo&rsZSRERUj zE$V%(LG}Jkb6qXB#mOkI{<|gDFj}Xee>$VwCcaa81&hBrnWbvwzYWjsUtk=Tf6>nP zm|9wnbLy+B+b+#>-I=9)dt%?k*&()WuWKu=Uq7b#dgnX|-Ak{g@obFX|GGb0>G`5> z9seg*xNYm7R-OG(x>vb0(XRNckni=y{8v5~r^FU{@XSn#T$^$F6w~HkslTjL+BWZh zaEQ4vLV+i#(V&C%kb)RTbA*D=+p9DG^X*l8x99qiPsWM@pipLLF#W;$wi( z0|NtliKnkC`z>x6UM~KEXIj%47#R0^x;TbZ%y~OI(eJPUk6Y{!OAF5H62~7H$TSxh ztpAieTcqi&Md_?{x2i9N9QDl6|NCmmf=&hya1ifKsurJk{$}R^%^yM&=U@7;h^I<; z;^`?R4}4;ttm?JjV&5Di$K(%A+$i6ryv^Y4v*<&sew)Te-QKkQ z)2ip|z2e`l-)L+TsmGTavQ(nQbm-eYNy!%KiO6f?}?}dUexwe;8{|nBUsB zM>TH;Rv%e!zWjK4$6nTudp&}l+1)9+r>-5{b$)en--0iDPt;#b`6GAejIlt>My;co z*I#uQ2mEd6zO?S+uhT{H8@Jyms=M{*_UX0dwtUsbvZ0Ny^eExSLRo7Ol=b7{` zjDEU!Z|hs%EmzXTZ+01fo@1=qo-TZ0Mb^gadnRsN_T<3-Lkg@+O(Gl|K?({UjSXPV sy=i( z0|NtliKnkC`z>x6UM_*Z@6?kR7#Np(x;TbZ%y~OIH}8-EPutzh=Qljdc)umL-#A!y z@?H4i2S-=ltx>Fy<7DhCyz{Gfa)SUP0|NsC#|F_`cCJs-%M=Xe>fikkX7Ed3;_V+1 z34-RFPrgUHd@I~|AnDAXX)Kv}!+ooAf0{?bFO$aOM zyDGo8FRdz^&33o>&-n+UHa%T(e$)12R-4av9?QI0ecQG!dw%DSl8ezi^A32K&Fh|3 zl`JEZEVq6uL)0I=#HaHfDok>Ty%fIw`!$|8+3TuR^18OhkFuQ1cg}AN)123O?|(#c z_4T^-e+}GpgezZO$*ru;WG+c{dpY^w)vm;&l3UmRv`o7E{iIM>N&iI`e!~|IUX7Kv z_x#;DN#^eMEmOYVl6$sh?N=$KGCjG(^9Ee2@3`eB=-cc1bS_*jA(wmkiuSyl>Qhn; zKipD6APi==@>4doeR3u1G{3B;e`l=d#Wzp$PzN Cx#7qF diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__43.png b/ChibiOS_2.0.8/docs/html/inherit__graph__43.png deleted file mode 100644 index f4b17646feeb7285a27aca484c067ec124991488..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401 zcmeAS@N?(olHy`uVBq!ia0y~yUH=O_FLRCyj%i*->D}tFfbZ>x;TbpG`^jAmiLeWkK2BwX9>J|YXXlYNR&Nb z%H9xe>AFhicIL{t|6Wv!ub3_HJ@Ik~LyLgZiME$hZtxyhT&iUKjQfEl-<&Cq;taKu zOTPK@KhSDUPd{XUdS3&)=0S2DI0C}&=BoH#W~%SBD^w%@k-VLR{jC3Q(? zPuI-WS(duADx>^QlW2d8@)VAhu}}AwtAFp?yEFKi|KB|YJELy|$?|#mHUtSTxWb}g z$_QibIcxv__xj7sKTa%A|2lU%w_=NcQ`lqn=YqDD(J{NK85kHCJYD@<);T3K0RV5q BtBC*r diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__44.png b/ChibiOS_2.0.8/docs/html/inherit__graph__44.png deleted file mode 100644 index 5adadfb330663dee57f67c43b55a96e613fafa1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmeAS@N?(olHy`uVBq!ia0y~yV3^Fnz@W;(#=yYfR(89Vfq{W7$=lt9;Xep2*t;Ag z&0gZ^>&kwMTZWfQ;O{&2BnAe?)1EGlAr*7p&hYg+V!-3JUug&1^@PKwX-8!(c-j*V zb~&Hfdx~v|z|p)rI}*F@Od;JoDEGl4Cs$z;=!l(iqC z%ZklE#BK|-%YJ++Eq|{2^VF@DL3I-ME;>vJ-Oul+tEkHxul?_N<>~S%6L+nd)Botj zukvE;%Q3H2zm&}~HF9~AUAq2lT&-&NuOzpk?7M3>-LnclAv5!o;PO4`0oON+e7kl+ zVC(lS^1Y|eoXuMQ^zqTJS9Z?!G0YA0kDh4%xYVIPVf(WCm(Ex342&{->b~v7yXK=m za(}vb&eu!t@|2Qa8KrM|OS9U#(ErXfjU6+&}7rM z5z)V=t$(^bwR@d<)vX(ok7w}h&F!(Pe#>8|?ausx-@)hk(`RDu5J4p%yrgl40`C!) y%!>AD;-2$23pIXz-1*Y+((yGepqOA_P&gni7TxvP&FRT6kbtMFpUXO@geCw;CH^D; diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__45.png b/ChibiOS_2.0.8/docs/html/inherit__graph__45.png deleted file mode 100644 index 5206b45fb38545aea032c1c39d5d62b01cc102a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmeAS@N?(olHy`uVBq!ia0y~yV3^Fnz@W;(#=yYfR(89Vfq{W7$=lt9;Xep2*t;Ag z&0gZ^>&kwMTZWfQ;O{&2BnAe??Vc`fpTO;4^_Osma9X$P?S2k>6fuZVYKpz5Kl_;L6YE zRi$-nEux>jv|Kq~X@7h}m6H`u{QAFvH`kb1e<<2ebbsRUuyq^GMozvzYt1#T#G6|V z*#2J;D`>s#+}^3zSHvFQa_-*Vdv@|_*{Q3-=lrTs+sd(bs;^A-ll-4A{#Av`>z`Y3 z_f@vq_j`8BPY4Bf-_%!r6mVVn(b~VS--djj-8eN|B>s2g^?BztRwl=)s!c2oUo~%* z@8(r<*_{uxzCJjda?NM$qbPaTt(SAtUS>xBPRTzx(PE92YL~s$w6$wuW-5JY>H8NH z{pd`e`ls#RHvIbZsOOgQmm8&ZlF4tCoPF-?%M(2ixBJBU>)X}KRPy18OrxO$FlJv_;Q4kdL3=Ah8 YNHfpsiE%T#>;w||H*Y zfq{X&#M9T6{T85bJg4l6d@IigaSb@9L6+BG}=on1d!j8VXeL-9$z|H*Y zfq{X&#M9T6{T8W- zy*s%ynN`p`@Kb%~#RV5Wtqt^G6L8{CeA2&Q%U#AjdxRw?xZf!Vl-tEP=v+1dCFUkRBNZ3eGw=8*2Yw=&v^FYhH)Qf*i>2dE74z^1l+&R zS?5>y#HBgovdW3rw^8<$ZYA~Ec00?2*Q8`mju$$A@d`?qzJ d+VbZUqhX+FIqwI}JO%~^22WQ%mvv4FO#ol7q3-|y diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__48.png b/ChibiOS_2.0.8/docs/html/inherit__graph__48.png deleted file mode 100644 index d7d32382f72895f0c252aa419f2bee4b86fb4907..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmeAS@N?(olHy`uVBq!ia0y~yU?^Zi( z0|NtliKnkC`z>x6UM_*Z@6?kR7#OoXT^vIy=DeNZ=y$|`$F*K?PABj67hTo`67Lwe zZxnF6Gu06YI&s7Aj)kV!f6v94!pAp$K7Q7OL9s=^$-~KP>0izRhfg_pO!j9uU;4N= zsfIscz7*fb4UeNIYv=Vku4j;2-r~GxPljw1>m-$c15e<{g|nh?TXpU9`5yP@Nv!!c zuTHmLam{rOeepkb5*2lA1+5YPDSP1fDu<4fd=Fw@ZD85M n{J~6B#)(6*Mc~u^pG@rsg3iQRf1A(1z`)??>gTe~DWM4f19HdN diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__49.png b/ChibiOS_2.0.8/docs/html/inherit__graph__49.png deleted file mode 100644 index 7c468ef4049d84ab5abdc46cda99cab5ae793d0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmeAS@N?(olHy`uVBq!ia0y~yV2EH~U{K{?V_;x7rm3gRz`($k|H*Y zfq{X&#M9T6{T8xN)Vf)aYi+D3Y%C+NXhW<^0l$CKTa)JcP0B*#hlhE-``WC z;`1uhB8*;NFEqC*T5PuTd}8y`+%0z^P6-+QyT}~dZ1y5`)8@eGc7bO~y|*nt_&6nV zS;Q}qH7VYux;rChygn2pv_~aoIbP0 Hl+XkKCPbz% diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__5.png b/ChibiOS_2.0.8/docs/html/inherit__graph__5.png deleted file mode 100644 index cffc8a8de993e9a3dc5b6946b330bcbe99d9026c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmeAS@N?(olHy`uVBq!ia0y~yU^u|Qz@W;(#=yWJ68g-Hfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM@cNhf<6T3`{JZE{-7;bKc(c_B(7K(D0D6$#~;KsmMZhzQeK! zjI-sMs#{rCiOiHdo?PwI_21uV%eu$mHtQaDF@S(U=TVP(!HLT!@-jBncAm(dRgs=j zCo<7=i{$}})ql>sjDKe=zPI~Cu}5*k#(Qh{*W@!KaIr8fb7M%zf>L{#5`zCJxlXU2 zW|f`s{lWTM`&9o&+wsqg-mM=@D zUwOaxT=f3$rN8#M*H`!Wd)}Q`d*RLLjbba`E!ysIy=1Mj_oU-dzL$)?n>$s{pSGNL z&GDo?+djFR?!A4nbmyih*{PSSK(7HJ!vteCp!DC?(Kzf$@Vep89vzLTzj|D`%@KLob}2NSJvB#T#Lzndj9Fj zubY?Vt@d|+x%BI_B~MSik&D>;N9fP}`J4fn(-;yyIh%SjFlaF`1S>Nbm?Egte+9O6 zok$IFZg5!LQIjSAgz15!i=ERfW>6F|G;G|*`0(kBr+eIect8T4u6{1-oD!M<{&Nt} diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__50.png b/ChibiOS_2.0.8/docs/html/inherit__graph__50.png deleted file mode 100644 index 0b57fdb6c25f4019f28f520cef00a50a764ecd01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmeAS@N?(olHy`uVBq!ia0y~yUH=O_FLRCyj%i*->D}tFfeL)x;TbpG`^jAoA;0bk88eQ@dh^gHG#(xB+4GJ zUrSj3NmR4zjZN2GwX3#5T7|Q&$yjD;F*tE3E=g8XEMxv~!)jvVPo|1vjgt#5u^!mt zY4zBcdB?JY#c2ob>Q6uXVNz4j(nrB9=F z-b|Po{H-^OMMcmtqJ}5qYR0aT9=)woeXqryHVs|XGpp_;mdKI;Vst0BG;4ApigX diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__51.png b/ChibiOS_2.0.8/docs/html/inherit__graph__51.png deleted file mode 100644 index f431200c599d09a1e29289dfbfbcfbe6b08744f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmeAS@N?(olHy`uVBq!ia0y~yU}$AvU{K{?V_;y&Ii_`qfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM_*Z@6?kR7#P=ix;TbZ%y~QeVBrx39@nQnuRNr8F5z9?BQja8 z$n%y*{Orl;GKwiI5;nWv$6jMowo^FyV5TS|0|NttMdMM8YT=3f7o8HM_A7nbsb66v zS0y;Hv_odbSuLgYyFT2^{7^SfYzIet*utrr4-OvGRA5}*z%qwPsDR63$FATzJ-?$D z*j#e=y)AX_#q!m@?>(%fvmc5-whNbAy6kN1CFS5Z%DO@)cg?Mf(+@iDdiv|i*WSt- zO7858Uwd%2^y>W6VWxYHT1B_2PMovb?v*#!{I6Tyh!v3KV93mv0;aOmRnRC zRo|B1`D3q9l4$tH=O_FLRCyj%i*->D}tFfe@bba4#HXnZ^4Anzdq9@lz-;tg!#*EEt1c&rN= zO>bz=QDQyK%UK$e@o(}fx3Zw0#|u+L6sk+2Q9-A5S}^+gJXhNXOj4TG6z4R-(HZmxwJCEq#{4{ePc21AnGY j=f3aVtpZLbl;YgBYMO2N8Qj3Yz`)??>gTe~DWM4fzjK1? diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__53.png b/ChibiOS_2.0.8/docs/html/inherit__graph__53.png deleted file mode 100644 index b29738ec019912fd0d36c763d35779ff21aeebcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmeAS@N?(olHy`uVBq!ia0y~yUH=O_FLRCyj%i*->D}tFfeL)x;TbpG`^kb$alzqheezv|Is1yQ;qH)wDsov zNZe7-vBn}(I^XkXUx?%MYhK&7P3CgoP;8Ny(Y)B6A!fVGiN2kY4`0MoFd7sd-&C!p z^X0`)+m`dP4qAU7q^^45uuN#eN|qEY#+hCUr>>;%y`N<{OMLtE6uZnhOvz96g-%*- zuj17|CiSWM`mq^jS3He3x*(Nfd}FoP?1f9K*W7bWS(fLj+w8q7Tydw^Eg>ai)AN&V zEqQ61%eqjv@oKQHvXp0Y?7w@DE=84isovfku$80sh4PmWYsK}UTfQuPQs{I$Xv)fa zN201uPf#t)-rZ_>|FDE&aD8jI;@v-+S8kc!5NQ5?w;RHZ4$FjAc)ylylk=Vb qf3la&W8CxTxKfLNQ^)*Ij8!{ql>_#5%x7R=VDNPHb6Mw<&;$VKOQos+ diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__54.png b/ChibiOS_2.0.8/docs/html/inherit__graph__54.png deleted file mode 100644 index e825630cc97e979ddfdfe32ea1faef0109d057fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 405 zcmeAS@N?(olHy`uVBq!ia0y~yV2EX4U{K{?V_;xVV0fC(z`($k|H*Y zfq{X&#M9T6{T8Oyn#*pnntn#k99$# z>5bJg0zsW`Og!iA$hu#?O2)jd((ALbs6vZ?lZUBeM=ZmgD(;&G`3&DPA1J8IW#EZ@ zk~5$2fF+-tuzt+#%$vOYni^+IE=kOK$KYGuu*}-wvTVfUmyZv93oAVvIr-&o#ZtfX zsYkx2{hn>8nC0wfv;E#Bt04KPe~Q+Jt9(!6wL?aSjbt9!Tn=2U20;(B@drMo#k(@uNuu{=8eUCf**(@&MPg`pJcsNyl6Ik^5;3LSI;nA_cGSZ*k8wIyIHdFv#bwpui!3S z@RILB344&c+rQtN<}e=6=3C}dzwNRUhhmFB&`I`+T~|H*Y zfq{X&#M9T6{T8wz^+31Nx`s|BoQd_6Na{nf2918y}-^(Q-C{`Ng_ zKDNXt*{IO^zn$5tmt)nHdw4+#KdV|qA&b)yK(fk<+m!e`Yp#+h%J1qBL@!=ij@1AyD z>6kFHd^ekO7Wb^qvwBO)Cwxy@`}*P!pL_F`-TWvpGcEOj?Y**mwrMZU8E6Mzc(<%V z=c2E91jiXImNZeO&0LLO4}6I#-zWP={!Z=tnO`d#K!M9}qf@_Zfq6ruUu`1;0|SGn LtDnm{r-UW|3}Lio diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__56.png b/ChibiOS_2.0.8/docs/html/inherit__graph__56.png deleted file mode 100644 index 9b971aa0a8032d8e806250b80ad7f79039f93cdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmeAS@N?(olHy`uVBq!ia0y~yU}#`qU{K{?V_;zDdjD`50|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj%i*->D}tFfh*Wba4!+nDch#+1$ehJgxJ)OP0m$YV*Ij@Nh}{ zw+nGbF5kWQT^XEIQ%@?1ve(E99J$Ev>eavP2}6s36NjRTY-Kiqh=uW|2*>0Z~I^dH?`wLK@}>$UDRH!FUr{cbz{ zT(e=)t)%-C7Ohx#Q?ovPYEfo+;Hjuny4Gv=z5VFuEhagC_77#&3*9_xLM6;kbzV|C zd1}qtPZQs~`+6`c#+O5{f@^`PcZ_IGkNWYC58{6F@Sfjs=o^E3Lbm_K!xxi^m48WO zr2f8F-YiD1F6%LRi=m@*d7)re89M2y+ApKA~;;XKNeq7m3Z!@@y?YD3=9mOu6{1-oD!M< Ds72%k diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__57.png b/ChibiOS_2.0.8/docs/html/inherit__graph__57.png deleted file mode 100644 index ae9e414b56e3f5d1483307efd816d527364ca159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmeAS@N?(olHy`uVBq!ia0y~yV2EH~U{K{?V_;x7rm3gRz`($k|H*Y zfq{X&#M9T6{T8<$2MO#DlhuAY=Y{Bv(utJFg#@BSTc>*jaQ5e>Q$4=I(MiQ*g{TUb-7(8A5T-G@yGywqN Cw5oFe diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__58.png b/ChibiOS_2.0.8/docs/html/inherit__graph__58.png deleted file mode 100644 index c2c975a19d3b5e1404b4958e5022b587ca4821de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmeAS@N?(olHy`uVBq!ia0y~yUH=O_FLRCyj%i*->D}tFfbZ;x;TbpG`^jAm-mnXPs{oa%ZO(2YZ}Q0Jk}qW zvNwp^gm&p1_w?%f_rh)^S84F~lA=2cn4CBik90}Sxxsqi?R_V+Gtviad1dB!sxv%} zf08p_@W4&B{)4>X^QPVX@S!PgX_x%Ol`JV*j5EC)mI=K`e05yL!_8X1JYO$guYO5t z;Ue8o?w9jB=2SWxJzMv@=tg!NpLM=r#OZn?10|#7X62bJ#qUCEw;Y-k>FvMOZR?D? zM)k9-Wv|`Pn|d$%=kiBuHiYC{VS4uHsn`7AEZx9)kp@+-ZY|7C)%zb4y6u?m)~Rum z`!_|u2wj=8=-Z{Hw~ME&dYhP~vL@|y@UOd*_Ltlfnte9v-oM>W%Y-H%TnT12W_(_s r|3B4@L0`JZr}onp4#gIMB*T41$<}tUR%td23=9mOu6{1-oD!M|H*Y zfq{X&#M9T6{T8hVVycwiA#ZV|sNF5b z;@Y)aem`7eapzIe%t^jRUZOlQjRy`oJV;O|Fc7ei$Q4g)T)*JbKdVV^`HRCIDsGr^ zCsFuaZ#ZjlP@(z3e}5UGo?idqDSyrC+@d|(rTH7ZIX|a(dlp5XTmNiVs?5uMlIyvi zg-%$la8mvInOEteD&c?ERcz;2sT8H0#{+*ztW#TM@H=ihku*@t%rSNc|k zMXT;v|Jks}cE8B%YjJ$LPY6!^y)tccT=aYI&)M7VK2Q-qlflGaULooG;9&!jTRCKU t$}Sw(FUXg{WWU>$k%57s;bR5!gZCD*Kde2J$H2hA;OXk;vd$@?2>^_|H*Y zfq{X&#M9T6{T8t!$R=fPo=I}|M|4e34Xc2JYP<*J<^^fgAYMSB`1AB&h*&iKW z{^3cGjpFM}IXXYx+(xSY7t05$B{D*1+pjHHn=pw*YK{yXz1F;SIP}7n@;4`9ychPK zy1pva@Kg1zY^P(wsRjkn7dmFg9p5v3WA%ir`x0h>%Dmequsy!I^q}|TRp!$~+%K<< z+J1leoSKPj-nY*z^Jf13%J%2$lL<#Zy%2mhwQ$W^%PAM5zbwm6_qpjFty}#$dgu2G zUCNRb?Is{@uj%g34u{ zYFFDl|9bDes+Rcl^MkY1Qj2)r?Yy}5^}UK)k*`lK|N6eS*kyB4o4-umNiRNLKTOp3 zbzw4V!OTz&%OhM5qO&&e)G>W9T_WSeq1Yne^v`(zExF)ZH!G|zFfcGMc)I$ztaD0e F0sx%4&N2W1 diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__60.png b/ChibiOS_2.0.8/docs/html/inherit__graph__60.png deleted file mode 100644 index 261d60f44d5058ad269cdee8f37ff484eb1521ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmeAS@N?(olHy`uVBq!ia0y~yV2Ea5U{K{?V_;y=m7A);z`($k|H*Y zfq{X&#M9T6{T86qt}#fTo-&+0Q{_9!Riu$Ao*R#i}-`Lk?x&QuXRPp7Fn4{bCtf^+7`7L9l zFS2;FZrrOi{qKIa5BDOJElVEW-JE@Vjcn_;yR+WQp8jOtQhq+J@lvc6&(U);%XU26 zJkdd;OhLq2pi7nm?1iMofj diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__61.png b/ChibiOS_2.0.8/docs/html/inherit__graph__61.png deleted file mode 100644 index bf691069da9a45b0ba1549ad36d728068bf00fb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmeAS@N?(olHy`uVBq!ia0y~yU?^Zi( z0|NtliKnkC`z>x6UM_*Z@6?kR7#M3jT^vIy=DeM8HutarPwV{dl4Wtb+Wc=WJe<=0 z?LwT9%eNvvSBBPw8iDqHo%{GXk|qnezU&msX%KMYP*hRyKK76CLG5`LkBQt3lTG%e zNbP5gSia2JX3dYQPa2yqzT`eo=w)@}bo#l8s~v<`xFlp?XwF2YyhqnB?LYQja=9wM z|D3ZA-^a>}zBWB{xb1j9)2y?LwyrhpQ%}=3>JM3>dU@IGnf(Elk~=>?c{g?6t+~4- zHWrBnNqK*ZUU2+Iar26vRR>C%mU{WT&(^xWJ7C_odv|p5vK9U>H}Z0LQ1|F%ZPw|p z6SvLlj5fSnpPv`jv)nM~fb=cCcPkg%-2KC!rE zKBsY|@8_v%>gR)V18qNM9e>sPRU~ar<5s)3Jsa0$%N-9pbIWE=vPbm0T_W2#>pD64 zSa~o}-&dvmOcw8_au`N3{>k9;J`m1uKlqYj3n=jZ&(^MJj@`6Br>c{Ifq}u()z4*} HQ$iB}@m$Gw diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__62.png b/ChibiOS_2.0.8/docs/html/inherit__graph__62.png deleted file mode 100644 index dae4bb09540bf6da63b5f486c6dcaf5a64c66937..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmeAS@N?(olHy`uVBq!ia0y~yV8~!#U{K{?V_;xdcWaF>0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj%i*->D}tFfhh>x;TbpG`^kTn8#$uV`d|%yu7_2W$^cOO;PO z#?J8hLW#@Cp5wFjZz#8#%Q&ZPiL%apQ}?$lohlv+p1_d{SBd%lOZTMPzb0?oEHrI# z`Pp|5`>s!qOY82Em$WtwWHOwQa4qiLmRn86hEay|YTx+9z54!W+pYGzIU0?pPHtj3 z?W!l9{&wYuqz#4Be(l|HCNH@~u(BzqN%&)=+qKElZp@oMcip_g%U2f&ZHtc1-F(pR z!hV6$?(P{5x@@;6M(f>(&tIt6v%+!d+U5S|mD96sTu;i*%Dz~ATR+W(H|u8f)=tsK z^M2fu&?!6re`zsib;)aQry`XAENGATRmlUTt6lERkv!09Y13%O@Q26KokOujz-i56 a@yWM6PR9#!u3}(dVDNPHb6Mw<&;$U|oxW!P diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__63.png b/ChibiOS_2.0.8/docs/html/inherit__graph__63.png deleted file mode 100644 index 1a3da730d389c33828986cce2273bfdf615b8a31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmeAS@N?(olHy`uVBq!ia0y~yV2EH~U{K{?V_;x7rm3gRz`($k|H*Y zfq{X&#M9T6{T8f}E^5^SDbp|I6MVI9=O+R=Kq@H%NdLVw_E?fV> zC;SY|Tj%VP_;BS-YjEO4@doXsbN>D4VN+u7R#7pK^a*>t)5vyaz) zF49-6a{LybOUDoSw>7IV( zSolQM4=0KE#0YWnU!66TUqH=%u41D*IaZ%a{ob;7pH z>P26#hxfA7IqlB*8qWfEHP{2ot}Nqakc$@GRLsU;f6u}5fpJ5=m!%VjV#^KtdbvNg WC*yCvc*wxOz~JfX=d#Wzp$P!gm9n}3 diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__64.png b/ChibiOS_2.0.8/docs/html/inherit__graph__64.png deleted file mode 100644 index 052c13be91f04126739f18ca35065e88db497062..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmeAS@N?(olHy`uVBq!ia0y~yUH=O_FLRCyj%i*->D}tFff{Ux;TbpG`^jFkoS-Qk88c)nIo;HRY~k^iR=~! zS`}}smI+vT!a}k4?WL~&DlR{LPdzs;<8t6oY%#f%`bD_m@Eo_W1HuO)yJnwxVB27K z<=n0pAJ08$&P}`|dcg3=xnDb;_&o_zSlPlTmDu1Wu|SY5W62h7|5SnbySZ#@`DCXU zis{e&B>S#{b%ms_sbolIPM%Nq^a~#vZV0V2UEivDSSEg!TIpNaq%~{0()NTsh|qhy zQGDstl`nU0@-^N5f#JTK2Cv&!bM2RB%^piW=-B4@$7+kgo~i{;`?9nTZ9Sv3UiKn$ z@Y>S4@2>N^-dya~d3dLP_0{EP^v|xfEK^>@t|#bSD)MtW!(lVSf8u6`70!|!?2e?|H(? zBvIn&>&kwMTZWfQ;O{&2BnAdXB~KT}kc`H+Gw<>qGT>>^@34$$7Qd#EY`|mvfhl`K zc%_5K#HUuBuUWL-O%9lP+JElh!fpl*#g;#&o)`TX^cFM!Oq|ECZs&$zHdzKA=R-eh z)fn70-}Q1nuiKc@Hd`%grW@A<6LyocjK0MVmt`XS&x@s9^b@Tz`ZfJs;#Yp|H(? zBvIn&>&kwMTZWfQ;O{&2BnAdXGfx-Ckc`H+GY|3}GT?Ew@34$$=FXmCDA6XnIjWX8_J!g0QU$W}p#@^3Q%^Vq81f2fOnww)l&mKMdlai+$cRFxy zFgYix);;f->%MH$EZcdWI@yjzcAXiVcU4VYW^)O?WywGDDwgevpf2ZBy`S?g)}+q4 zni*%$e>aDvVV}g$f1moE-kog!JlN>{vS}H*8_Rt9_nV(PE9RmdoAcRs>GOD&yG|FG z0=6)S=rXu+J6vRnaOeB?{pZC8n!VF9`pdQoIB_USKjWRzXm94rfAJ*)0|SGntDnm{ Hr-UW|eMzY) diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__67.png b/ChibiOS_2.0.8/docs/html/inherit__graph__67.png deleted file mode 100644 index b15b2e3c2d2dc0f706f8990dc81c534996c13d9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 522 zcmeAS@N?(olHy`uVBq!ia0y~yU}$DwU{K{?V_;xNyb(2(fq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM_*Z@6?kR7#P=hx;TbZ%y~QWY~T?C9yfc5jApYP7mm$)(U_#s z#H`-6VEt2(^N%`Pa!#Ln_u<|dKcW98<_mk4Z4zQ&U|?`yE_eGmd&%^vP6?XtC+&NE zsCx0o%}XwaSQdz=d-_+4^7}34_go+RQ|S2&)PX_b6q{l?R9HE=@{kSHJLecVPD+)9pW#qIlruosDEh@ zp8LA)Vn=tH(d&rp4JJ{^?{B_R(>C7X_BHiqob*cjr0m;qbEg;nJLRBU{OyBD+@&OA zmubd1hqis5sPR3|<@FQ&QrF|}H^!c?REgq`-e&ZjM=)P5aoSzMHJ0(S&k00Uw^{wF zQab$l@@tN3x8^vOoV&Qy{#Koo@wCpjRm#5~=hy)60C7WsJ19dVtD1*gwV z5Iws2S8Cr@7v}%I4vffQQoyEBv3{DmXZ-4x10O5Seb9JWJXHV`)C@Ze>lk<)i@&Ts RbC44x;OXk;vd$@?2>{~^=H~za diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__68.png b/ChibiOS_2.0.8/docs/html/inherit__graph__68.png deleted file mode 100644 index ab0d4e4a1232b29edb618f2292d9b9769ec48d04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmeAS@N?(olHy`uVBq!ia0y~yU`S?QU{K{?V_;wivkHI0z`($k|H*Y zfq{X&#M9T6{T8QYeTkg(!emrl_R;E|#Ml$jIeo*6II#Umbh1J$uU8-8n!Z(sz_y-7qfsV)yH{3=9kmp00i_ I>zopr08z)eb^rhX diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__69.png b/ChibiOS_2.0.8/docs/html/inherit__graph__69.png deleted file mode 100644 index 24c9a2d64eaf4a7359611eabe227e839200d6b82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmeAS@N?(olHy`uVBq!ia0y~yVDM&OU{K{?V_;z5+8}a(fq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM_*Z@6?kR7#MjxT^vI)8sE;m$lGkd{Dn$vb6rUX-!;{j z;z1jdPF(dAeX)1Gf;Qi`M0EuQ#TJ3(Dxx{%4C~|BjTHE^cZjInW$^i%EIEzS<)1%8 z@&1Um<7fAWL>_WX67U34u$Pv{cYH7(|`fAlCj&+XzEu|-KWPGj9lHLEKE}LIa zG~3h4{~BBF^NMdB`MtJ2A!~$|)@rO@(z5G8u-T^UvYXu19ZxwQhF*|c>UA@EbL8u% zU+z6fH)g6^TCs25+Oo50q1RSznx>xJ{4HwbmgQG|R9)Zto$I2Lj`W#0X}8+!TW=@i zR%oe+H6Br#5WynU?ErPwhOa@t*8k_byJ!26s&Wn&4#gIUetw6eRz+(#KWH#8Ffe$! L`njxgN@xNAi35&0 diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__7.png b/ChibiOS_2.0.8/docs/html/inherit__graph__7.png deleted file mode 100644 index c6c27efc04647a4d5bab4b6657f6e1861172529e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3952 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 diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__71.png b/ChibiOS_2.0.8/docs/html/inherit__graph__71.png deleted file mode 100644 index 96acc8b5b0697510a05eb69cf8ef8e9a1d7d3aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 409 zcmeAS@N?(olHy`uVBq!ia0y~yV2EX4U{K{?V_;xVV0fC(z`($k|H*Y zfq{X&#M9T6{T81~rARj_X8JNxv* znv5$SzFMF7Z^O`Xg>~(vlMWiYm__a~cD-Y8Eq{=+#qU*k)NSU9FStXgx~wC1vFNlX9i+OX=2%_=*lI>23wLfPakX;FPYQrLH zhl{ccUhoB!uoul|H*Y zfq{X&#M9T6{T8)I~jSJ=OZedEZZ-;8d6M`BRz)gA<2hi_VNG|Ku62pKvNWCVOD_8yk(u z`V7w&K7BJ?@<61Ng;cj3L!R@go93R<7v}h~Ic#KJc%w1kje|y+LR?bz{{t(F_Nb=| z+3nrfo*?_z=Axeeyp6#V(^Jm*R#;Xay5#w@U;nO}WkA&Y?UN0TJDt`%I`P-t`4cqK zpHG>+;n{&Azq3-hZBuS{?N^=Nwfsiq!?1~Kk9zz2YMV;$N{to%|L{$i%JWL$Pj%nz zey!cPYntHl>G$s3t!di)-%Pze_R5yM8p(XcKRGroO;S%i^K0L=b-h=GE_Yq$&7S~u zqKLIXmn_FozLq3*r;W@T^-PT$!b24AH>iH&JYc*^0Ob7|&Hb+1oIh9@-(Szbz`)?? L>gTe~DWM4fbhob) diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__73.png b/ChibiOS_2.0.8/docs/html/inherit__graph__73.png deleted file mode 100644 index 181324d71ee7d13a6c03118e5a6c7029bc8fec16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU{K{?V_;zT6!6}hfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM|6|m*QU-7#RM0x;TbpG`^krkoS;+K&$*Q%Q;6(UrF#imN@q? z?#E%1gO9zu_TDr7v~LM#fJXoI*N#CA0#0mdnz`W&<@t(!HVk`CwN1YCk}08R;^WgT z=Wp$^FlW2-?Xr;5HL0x}5?oROx(ZTYf}8ouo2V`6Pos?2mGAT2vdvNZ+2OFZx(`vW z-Z#0js9ecUeVb&uNh3QjS&UUqaD!;(qnQ6k?{KYFiEwM2df?~GohxP+e~DFa{D0)k z29pC;Hm6gTe~DWM4f>lld* diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__8.png b/ChibiOS_2.0.8/docs/html/inherit__graph__8.png deleted file mode 100644 index 6df3c590140c98c65c4936ff89f089b6a0d90754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmeAS@N?(olHy`uVBq!ia0y~yU|7n)z@W;(#=yX!JX@2Afq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM@cNhf<6T42-WmT^vIy=DeNl7<5d5$8GWA^rFY6b>eb|qIVWP z<$ZnZoWYEiB}@NY*=PRvM1Y6Wj|Bnlf(#(gP=BmB@V}zcdS&Lu)1Sh^ZKQbPU7nQX z=oA#@O}cX9`Fs8YfqS}7EVA8D=GCyfQ6texK-GtRQOiq*DF(9sbKhia*LW?R;cxH$ z-usbZ<=?l@3F9*zqY1i@1C)Jv+mK&x6(}hb?ohk_1C$!?#`*hcVB3FeRW=OgZccm z>703QP1bULJ(l1bq;hRq@6|rDz7t6&pPbH`EI4nQg;M36qZik|-+IrgeoF3|sq24U zP}@3nO@`BVHQPtWrQ5INEuDHitbXGe;wwK(2C z68u=s9XwUGW)vaDwnO{zY=#d>;2XA-zle; z%JyHId2zQ&W}OaW%JGV*s!pR{yS|`*Su`6#|s`tAK% z_NV$*2D0J8PerzSf7m%o;~|TJ*9<-v&dW$4`@wGBeU~TIAqoYSXa4{E=JHcVDgJLV fBPg~Q7gTe~DWM4fImrsT diff --git a/ChibiOS_2.0.8/docs/html/inherit__graph__9.png b/ChibiOS_2.0.8/docs/html/inherit__graph__9.png deleted file mode 100644 index 951e50d2d44cd15e465eb59162aceec318b222af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 405 zcmeAS@N?(olHy`uVBq!ia0y~yUH=O_FLRCyj*T#S z^cPV+jY+9%&G$#DHn&C0+>xPf+3{D)1N7^!Z-ZDK1vz{pXnXSOTwYl&zr$e;r z+`pHZES^8QSouI|`swo@Hn^+~I_i{?#b9L0FjK0*hqoa!Yx^Z9Yzg$gom@SkQ`s!9&XlvlgrL8O9OE2zS8K$4dvgO7a zudO_ZM>jrltC7#;O4|4D+5xZTuiMO$%Y}mH%NF}4u3v56y~jwC?f>qTitP+@|1wWl z$#~)l1KiEqmtLy>e|QT++|Cy>fAySp - -ChibiOS/RT: Graphical Class Hierarchy - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    Graphical Class Hierarchy

    -
    -
    - -

    Go to the textual class hierarchy

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    - - -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_1.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_1.dot.png deleted file mode 100644 index 4765bb43b10dcc0e2f73b39e4454a88c3359bcd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16145 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 diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_10.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_10.dot.png deleted file mode 100644 index 7bdcebc8d1c434470a3bdcc758e808329a96d18d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18604 zcmeAS@N?(olHy`uVBq!ia0y~yU;_2(kev4a%m(z^p+{YLO1_cIB7srr_IdAWlM~GbiXaC{5o+}Fri)mJdR@Wj8 zFOlS={P4*U$;~QN!pUo5vU`?Et?!H#+UwS-64sN{EycZU#YL86_rQr73R+!@E=AtB zdtd(F4gEE@6Hez;?w^+~pYZL>O#a>0o9A0TKO;FYMsIp^M@L7;Di@s+1{W6>muWpG zMFa%}C(6z65fl^@e0eag(y^+_N=QhkrK7dy!1e3miHV6$?T#)kDO=+_mi_zjnBT?4 zg+q{A(y^k#!YuceN{NJvi%Zz+)|6E|`kyw}_;hu4boBV=8o9c-xcri~Dp_$saROuR z-CbW>Q+<|obaeD+=;`q>7^IvKXjE3LowB!omBCCUB_*RxzO&5~ZERv*7Y5<(Sv1Y%(`;POLIL`R(;q$Vg1@7odcgM ze7?@({(3XX$kl9Vj{D<-b2`>Eu1cOc;rRAVZ*Sc)oOZXy#U(^lX`;tRjo-Wf_{W~o z*q)LRHN7O*t~2nf)T`feE290ycU@WfuJ-!27>}HpN}HFgVqN*?+@hKd0debU!j`O( zi?%LSGEyo1J>%29Wovy>UoY=E6?cBq{nMArWUf57U2*F7!o0t$YSOmUy3dfBtZ5Ye z>rKL}4YT__>QBW#TJ>%Dr_`Q6d)wu6d{$WB4B6^;^Zl&8mA9^~&zW;;TDDaA(zSI9 zg|s$%EHl}v6Y|yD|8CVbD~oeNp=Iok8K9zAMN`AOy4+GzC>4SkLOmVtJwg+BGPoDkET z&ys!nf5}bz(B7pNx7J06&b;m#92qMm+ET$Ek{cW=V|M%O@>ji=uRLG9j@7%ew)WT& z4fDybtjpX(=RRAqVg*O~xj6?nCLb^O@*?oh*X!{UJXAP%c#fQysNBluuN(Tldsj0f z{~?#Q<#Qgac$F8PXBp-<&1CAu5c|LKzP$p!_O&_fVSlx4<>}`~p6&iwvM@8pCzRbH z>sH%V-ahT%h=`7s7M4H%e!sV<`C;(y-|u`66(I{Nt3^wexCj&i;D&=xsTT5jyJ(uC1u~w8Tem z`r^93zm{=L?Kq)y;%U*HJ(a?dk&z!hd~o>u?CjNPwiO=~_Wk`9{p9J>nFdZmT??2m zgl@g^Vpa>s+%;1SuOBRAWMq7CVIgx(ZLRj+x0fyj?fG)a`xsYm$B8vdmMls5|L^aO z4T;Uiik2>23JUPo>-YCnetwpz6TLajcT2`aCflkn1}Q62ma*)gwO(hTR&~a!O&6EO zR37t)yK*$JZfDW=pwuL@C0SQjJ^Xq--o38QZqcGe58l4zo#?@`G2-)Wy~!s{)Pm>N zev`EO^TAmsYRicWio$}DS2m}g-?EMG>`Y_!+TY)f&M-_42nkuTZBBDDvtI13mYyCS z7kBsUHJf91mqlz$Vtsage*DrMCpU4-^I;U#uhiea=8u2w(~z~{GaW0Z%E~NX_3zW^ zkfUqY*(Dd3l^r|MDO~vbTW-$HO{}_6TNoH_++O|u>Duu1^KLzV^Y-n;S+lyF+xar@ ztaDLv3=0dp+N7p*>2Q4gUsivA|B8x=2hZo%UyCSvd1>j1lP4V$6BXyonPW07_vR+m zxVoRIJ9h1oGK$$$kT%h0V&;vTHxo}xP~1`SQm9YPwrgGNZYLF?g9i^jY~3`AZ9)Cl ztKp!;@aXYl)4cbWmU^!UUe0G@Ybz)$ytw?2i%Vx`XTtZi%%??*lQ%m~z=x9f8Z>xujlcy&q z!-BB2QC0biBR8jkQg_~+9gPzv2=u02zI^%N%ah=4&PEJ-| ztsA~NOt(kY`dZ7xnd-j6iLZ@3mv4K1^=jcVn|Jxw>3)SDXCs(o*k;ty!W%!osH0db_)w zE9fzHXM7a&7saluNtr++5tF zr|Z4yRoM67(7mtT6$M@G+~M1KQY7@jvuAA&54X>**}ZSyzOGCe6U)L!ENN$FwO)^_ z=3VUG?>1S@*GE8B@TGI~YS-OmZwo#?a%Ev>&)$1$29JMm)8bd}S6z#~DsjekBGZkt z?qbW*&d%cC<2&~6@9&8-XKI#MxGXt1&$im2;zPof)#3cCtgKn5Lsy6Ku8rE7q@+6G zQ}B-|e`DR|ySUxG`r*~P`O$T^6m!4MklyAq(Up^r@7Su))g@Z9XU{&ZUDCnw<-GlW z2c?M#-`?Du;I-7L-C1fyHmgyp_-s`b-&Y?@8rB3QCMw2Ny;R+jeVs4++8RMC8Kv1K zm7h}H+}zAQapFXqjfTRjgp{9d^a`E(A?o@P@98XOW8M`l(pC#jnfm6&nBBi- z(&EL+zrMfk|M&Mdw=CDhtC2g4ROi`LHYFZzs-?`{#*eC!ZFXB`+r(GxAx|p#`d4eN}`W?*IQ+f70a1g3{93B^EACzdoJT|M=;& ze)it!vVx&UQo3IJFD@>={G%o>Z(XO7qEOr7#mZ^t=5z|H`*Fx}O>})YLsLoiM2b;M zOUr@#_vM3^`5c^`zfZHo!-ehp%jNUAWSJ(qCY=_U*f&i-zVFr5)!aqzos^s(m?*j& zJ2*{KNw(u?(wDcl#cO|m+d9L$wDZ)HCr=Wdo|^jOe*X5sFmbG}UQS+-;e3%8igfy>MNH&%R1T6kD-ljoaf z%6q5ozg&LP`EK#6Yv$&s{xeV9`Re+5c~Bj3Wqo}7i-3+CvB{d+(vcW`{fpe^ z^YiOe{%KENhlcJmI(_wM$kd3Ci6>KT>?l+|)+gJ2b94Gd9yN88|$=O!5u=C43IM~eI_0+vjhLPdSTx;>#Utb*0&N5}~o7K~J za>~@~`}=GkJ$htN|F5P;!jOqq+U!V=q_IKK6OWM9VP_L=2To0y;_q`swqok!shf69 ziQXP!yF6>>u1~-8)_du^>NuJtV_PL+|M!b>4!d}p_aI0- z{HI6Kc!o!$VcF-K4Q9Ew5?)_hyQA)})vmI)T_;X>{P_Jl`Qf3~6DLm^o-muT`^S{& z;mfKQ)W|-)el@lBX|ASv*{xTGS8s0fP&vddU(*08)l#ZmmMwaf;<0n~{y#;r-?C$0 z1^ON1*{i=j<08{?|M|zx&NeUn{_d{0kS444qm@5zB&E;v1WGuo?UNO_00^jiwG-? z4qe%PLS{|eUa8vO-&#YoM6E>TuE<(@sYGb;>wha&$(5@6AA9iXRo8jD-#mPLd{$Gp zZ{B?PKqK?U?CW}qkGec-J~@SVRrq>2F};|MEn7^^%&`Q zJ$|9tq13incd=gO<&gfJd@-uGzx;eYKl#s(j~SPj^&XwavSOFT(FtE?e0ntPfV27YG zsFdIPI{aPKWs^3?%aNTYykB{|A-`J4Iye@Wkn_2Fy1^)BxEb9L3xc1dlHl);2 zTlfE*RYt4kg`1jrUo|Ve*|%(SZ0zY(-Ah+-ad8#=`%}5+->=sd4WfGmZF+ns)5i;dS;%Zhn5hpt4)Sj}H$m3LY>#J3qf)FLu|0+TY)1SQe}O`uduE zwGxXIUy6WdO1TH(8_jZZe~ zl*Ngj4i}{_FE6v#{`zuoe*M2rR&KF`3kw`GuC0+wJ2RuPql05Edt%Vl&Z9{+Kc7x_ zYIjU2?&|8=Q25wQCwd#t^>wk%>*Mwc$jkT3*;YBI2rbOJyUU{N&5T8RJX8*ynyPJB z_9lXHv6|xE3ugr6>mHp%A&%{SZIytzx4=?qeUhv=m z%+7ZuqCQgSnDm0^ZJQqYuezkB79675FK2tGOH}*A z{{MeL%@GO9A{9`{gt+tYl|iuk3_@KZt>Y) zvTUo~-Po8Mu`Nfk?)O`Blbjm@!OQ)Qo|vfo@XebwrLmnZO_!JZFZQ0U7j?SmMo;O@ zU8S$NPtWj~7{|rMB_J%^ykdpMlBG)%FD!7JVVKNzYg?{%Nk&-ywKb6)y}d{8?X4D+ zkk~k_DBNFE1}&>_6XbkIM~@O`A6xW?WFXv$L4pJnv4zX|{=MmX?+seSOEi z->>ig{r!D1$RTFAQn$8dtCwV?u+H$Acu>~1N`zZn&!wiuCTdGYW9H>$iZ(WL!WpC* zU6c;Ky}eyfLPDcN!zE2qSC=<1FtDSulaT=wJu_@7jsE=k!_wEYhI6u}(X7+c^^-3y za=o!BmHXATwcRI9c+`Bk=>F!Kg3@B^;%7Y5^kTc--rl}AZf{jbPtTDVhRF|}JyR>m zNNJtnGx6fxoyF|l)Ad5{#64WxZ|9VfqVnqcdi|0N7q{})*L1I}kC*rJ^K)uX`kG=S zS@!;3?^5sSkDi>I%)!fh^vcR$!;}*O+j=Gk7H*N1oZH{eKTS8f?aP;vGcydCUte46 ze7KF*uOimEE7tlY$lF*}P`WvxmMfSXxISBZ*T)zvdS zCMw)8a!q@9Wo2;0jsnGR@9uUV>y=J^b!BD6`@P>S&bjdW&$Ds7zpr-U+_}9=mZ;pg zd6QFCC~)e@r$sV$H4@&_bR27HY-X8ew`m41doZ{B-owHsmg6a1XHNA>n{UXtsFZVO zhoEWpwIfSBCmWQ#iKwWm;*y=^dg}D)!}kCGG>5H?;*{kIoa&(>lyh&7B*?g=B&A*D z@B1`^mo3P@zi-arzB6o-HI2My&YTGYU#x9lj)bY zKei$9utDxEla`hi4q2&-+%tS8MxH)<_GrKTzm63vG*Z&iJ~eoyJPis80+m@?v#%dI zc(5^e3XqFv(0iptgrve-OevBW@V!U>Np;1 z;ndL86}1xS{&rlxKHjRwUUX6$o@Z{xc8s%5HQcb=W>3YZQ<8fp&lwi3lDF!2wEvpSXjux z&Fy@=Pqy&?zuG^aPV0O4`MIT}sJx%%Al7_RBvNFeM@#+R*YRDPKc!5wTFUQLvV&^r zPft%zoIhW`q(kiSWq^!5!YCxzC;?iRbcI{bJGr?5fd zA(ksEgWX?TI5RCq?|8d>T}Q99`J?Oc^{(&l?QP}j%sDXEx_m>;&!Rs+9`|c#Y99Rk zet-YT$?A&}54SnByDbq{3r;ZwrCm|&um|=3f6IUR{Mj(;iiXczD^W&9MyK|)X-k4M z)%@mkI5x8_Og}%*sogp3&7Ys2L8a@qoSRLzwq`3E841bP{ZL$PqqzEDO4k}cM@PnM z>tefAy{9Rdnu<2F^B?>2^76%XvDOQnmAMrsdOUdXLZd`N%vW!E^8J0apd8vKYuy&M zHY)Md6io@kB$oK-O;$3-u3^V--jsZNyx+a3$Ou%w+}TyiotT*T;>t?lviJAS-o84) z?dZ{?pyK4_=JZy+qe`NpqKZ~lQfFtG9*)l6%j)j#E@M@~A+8?>8giTIF)=jB$TjTr zxpREZZ9E5WZcZ=!@*)tF=?^q8a&U1um6Vutb#=AyO+0hq-rnj$Xq`ISJYUR8ru*ZE zht4%$uZDm4{Mk7rMJ2BOZ>fr!+M@%F%r7o3ZolwQP!ilDR8dt0)dHYiz@58y4HFNs z^vK)GZOytWWMyI`oWJj<8lRj^$E8a_9WF{|W|?xYTeogU@pHbgbupSH6=~0ZeSHlI z*=y_L`NPA*d!)_zK>okGtF)D`_e9DJpNYPw&YU^&>FH@u9upB2O?+}FaAp_f&osG1if{sSs#vY?QF6Fz}mir(06d^!s7E{Dqyx=}(?M<&^F6 z%)PhgXY1_er&5eW#Ke;R{`%_S>no~eU>q0})YL0&zQ}jB*^6syrHhJ+He_Gdi`iYq z`}kOIvXZOW>(*&2zkDfCQBmO#<(HhXe!c#oLx)=U4!`kS8U$(!bc^dBn`xYWVWBg- z&ulYZW;ULNh@9%@GMbv2ps_wDCno`UdHoU#wac4Qy+QTCDycWJGBOVyJ!-nUyL@r- z@jfOO^*PJ^=POxRNr8H>e}8}f`0aLn@~Xz(KD|~%T_ve$7lb@PqU74_Z=gyPMeP^rr`}&Gn=_qYp{B26K-t^Cj z5BooSC@9U>&%CfP+5OM2*XupJyqvb@-8CqE74qZf&xfb=_a8aj&fm&+KE=t&>B9c{ z`h|xLW`2ErJzG{;O{nw1g9i<1XJ^gS&`O+RSEeCz_I;bv z&nNx(@G$KAe<4ZGe2T24wRQ5F8yh{mybhh4YyI)bN#T-LS2zi4`Z~Y5-y8=gC#FAt{um@3;V{X(!~zgwueW}EYeua9%xo_Cj}@4^Pq$U@c?jUT^%KVCk+ z?oj=|&+?$wY@PnEK*VaZ)oHM7#{9Xm~=Crd->(}es{rwW0 zl9t9LJ1_9aks}L=pP$pv&=9Z^Y3}Imb}lU3n8XEEZJu}Mz?qrGYtt?T?TqPbX6Ij& zeturY)m5UPX@E5`JB3!RT>0Zsw|)gXgOcq=<2ff7q|9&OLdu&_uZ@&%HEer+4YZS5#O$pDE-K7&x)!>@3qy3l=Es^iY}f{oUQ@ zx)&D|*S@~Hr!qKhxu5LMt=ZSNOylL}7q5{sw&VE@>N+agRTb@w(K~@NwE`D*T`qvlDYilBzA5@0NAMcYDl$Y=S_VzaSPyL9ke6m&? zvQ3V2Y$}Dkr|BG=XIuT?{ri4Uuk-Ks`|aJ`-4_;K{BNFcfWdD`&cmeSWYCDj)boZj zm5e4{xDWtpuYG=g-aRBl1k}p|jVFQngefU0tzxS$T?!Hr5m^wuJ@3Z$eED4^FO_mW zq?CDidvC1$U8WPeE2Pl=Ef;B23bv-?jR z`Sa(`hMb#5OO`KB{`Tf(M{lp|Vz=H62?v>`Oq-^4%5!Ouh`9LT^7r?Cyxo4ErDw(& zPd`7tMT-^*2naNEbZ~&myelh%ElOXBu<=SAaq044@LATu^625i#+kT$G_k2Lz+YGE)QmCDjhs}{P^QrTeGE3Pl^5d6%=(pfBuxPuiMkPNLlej ziqV_9yTtS>eQjXzrRnMI<@u88K0Dtlm{0VyH|XA z(wX$DWy%zhj-yE@o)+DcI>H4?a*vPqgW8n=%l%{*9#&lBl>qWk*40%9k8>(LhOGs- zeOvn8y?a(u>%YB`G%_|eEPUi5A}+3MYb#qSW)l^PZ7OA=`R5Fa0;XTDNr7)_}_2PWA70 z-j|-Y(9ZeVk6RPo3hqhuiay=6aKFsettAtF27j;nXj?mRSr(Zt$uyl~DEvpZ2e|x*S%%Epn={T&Q4gHw{6e;*WTAZcHOF*w*K^lwJWzZtUVyQ zU7zJ(^sDw{2beombnIXYIToUlgh$#0jcP=USI1{r>j0;>QO?hJ>G= zo-(u@mxw-i7@9&SFn`^x> z{k+_h=g$vcyeKHt$-K=FOefiMSQ-xWgZ=KwF@wsuNU1h+sIX)Wo zfvXm2DF#p9k`WyrzHQTe>E?ysl|fee+}*cm&Wj9d%?qV}PX*Y?Wmq#_{I-9^s$dSW zsXjAL^DWili{=03w6p%d-M2S4n{#h(d-(l+y?bV+=9@Qf0-~b07`j}z7*dQR@7%f5 z!Zp=r&8pv1SB0^KeqCu5e6>7Y>`_EQ=kL8s4W}pXQBBm|P`QPPdzMe;=?+uF>1r;e zzH45cniZ6nrw1D13|kweXlN*y^zpM|QP4^e29eGwMl*fb*xA`9AN6cgeNq=Xm3i&5 zO}pm&ed^l#23@^4pkR#~q7c$)6eY@A+2QkgZd-&r4V@-eoc6Jl~eT zc{$VdwGrGuZ#-6Tm1C(x>IIfdn4ngZMr{u)~c|HtNy)r+Oz&z+u8$%47)3r zo#NYfYG%>T`L|B3jPk$S?r^ti*0%MUd{1*%bw$V49=ot9)w|^7C01s3z9V;b7C(Ib znw!CDyG7{wxY)PFm6eq{N?(ip`}thHx70&L=*yd%!gH-k52eqqUAFPfw%pqf-oEX1 z>y>(VVxqFt>2-Lr1j^DA$)XKh=V zS($q6ddT#p@4kadu-;zR{dIqNqViKStgdBM`G#CwxF;_4et2})%q332H$SO6x80bw zaK)`9GIzgV|^%&*rqV zLD72V=Hj`xwlFe)h6f_{*X_Nv2{afi9$&-g?(Pm6rAtdsmBlY$5zr47}eDvtig2KX!5#P4ouRGkx%noYz^qvgK z%UhSUd$D`}v3~o1E4IDaSNmH)RFsvUpTFkQN%bz3fT_yveG1mr(%;|Rb^iP7tLZVX zX=|4(VQJ@+J@oAC?2XCC`9#FT!gdt2a9o)4WJPxB)#Yn6qZ+qfU3vQbvLh*{*ea{4 zk{%uDoMBO@1gcnHyvWG8wS}{_wY5vFY~gY@1D1^uJq-;Eb5FIkwr1w^YP|=oL0CCw z^=j=tIa{ukAze{hvodvFKYGMuZ*Ol?{mmy?T$@2BY6}NDzg)}W#me{Ue&^0jQar6V z)vNH&k3vw>CVG3GtDm1=tMI%}og&fJooAY#)+bMjb8>dxSoJl_#nms~Y>S{qLsa4zFY{|S_ z@bgpZjvYG^uCI&DI{ozd^W+Z?4i*#_gU0_sgW_9LA3uJ)G3~6Bg{9@g&*$ykA0O+z zIxTin3g@KBlLPlwmG;K|b9Ht7@oM#Y28Oq{w;yj{WWF+OZ^1*RM~@#f+Sq%3{P;02 zy6pSAyC=?^X<58@@v*#rlO_rEuIG;wR}22qbl`x)LT80dlAv?}8ZI)+y``Y5`?fV~ z<*K5R63_@Q1H;FaB*adGpmg&A&);K|R=fAZwX3z^TC zm-`3C#H`uqf>%K9wC z#l=C(hAg61t=aT_dhF+EzQJ`zE_SKXh!A@%&0sjoxxWG`>Yefnuy z!H4gkJ{{Uo_;|vE2@UoCezM2c{akuMapKH?@=FWfrr&%&%g@4Osg zZ)h-6X^~fOdA4ZkE}53o>L#n+eGL!m|KxMx)c2OlrMIV9ty|^O%*OlS)J!@4>Q{Yu$zF5DmRiE~+Shd;c^y**#CAil=Q&w8M@(iQT&jl;;Bfb4+ zm0Vop%DvE8K{)WAjkMOvi`#Uc-rkyFRT*ga@M5`qNO|;}Ro9Yze3o^bPzjNZ*(zHQ zDm!I$(S>bKwEuSWxL&Vyx-Kl6T)K3n726DHwcsV@rOAn)8EbcwfOQ6n|T(#U#I22y1p$pI{51OjVsv=XE&Mt;a~M)a>|No-xABpi>a~BM^pMbMGmBN z@wi-grl`)%jYdZgAMU zM@PG7nCHv=`u4Va!UTcIah!=SmVG&8_C5R6y347x!9O2$>ra?4fq`K~x{(C}+Qg2F75%qBJ8SqH9PpZ?u{OQ6rPH8Gi)nqg}q8qeGP=K1>iy8HcowHKHB z%YS)w6*P3}c6ZyV&5p6h0#~edp1#@psnM%r`72ikU%sL4oB9>Bu*}uy>ywkhbF9nx z#P#D^_U^Uy^72xce3F6T+_`h0k=%d)0nm7T_VslKFJBfee|M*`zrWuxN%7&5rArrX z*&_1o+c9gM)l$bJZr1vQ#y)+$I?HC)k&v5zcNqQNZdUsGTIip;_xEh?>@Mf8|MQXk zNs*zbQHf%5eRql6pm%B$qNXW>_vi99DdwXZ6a5Fpq zwaWS0|5XE4hv^Vdb;^5?T%*fEVwJo-D)GqHN!lm@YHsN1h3RD9+hYkDk)9r3ck@Q#q=^})`fnJeGP@`VMs3gQ zy|y;`F{ly>3lrm$x9d@M?@PG5t8|8OI$umo%!QS~>LstQ@yc42IAmmKtO{MNR`SB^ z;neWBl~=@D=gyV2v9Yhn#v}TUb~)XiZJJw8RrMd7 zd9-}{_U#8Q&fdOejSi?02^tsdl{PQ<`>PbxT-ly~zb!2_XK>)xU<7h$~=!pU0q%AzwBnUsa_N3&Fh;oMMOniU0GF?)jaQx zgO?XqP;js)=alKwryo1wrz7U9HhH1woPPS@)2E=AiQ9m^EGlyP{q60=eYL;2P8%B;O_(yJ<;W2iP!iG9 z)C8?8F)}g|iU0TY)z#+x`|WFLYac#;zP#ec@85^--G+iW_Im=e{b*V7rQ=x`4XbCVEw*dT2khDpcXNxKv=hKT|sGS=*_O2^mO+8{QR2l zcgtVg-@kw5e^()i$(ol=UA`>5x9Y3Y`nbI!r;Cb;3jY16R8duZ`0DCv&}u8tl<=7| zJ`4@r-Q2Uxa=Spqu7-w3VQTmM`SUNXS29_`&M&86Ya5$;Xv+Ng{11Na*i!ZN)k4Q+ zwhx~_AD*4RkF&nM9<(w7R50CYy1vYJHdp7A=4R$6MV8C_=lA*B|Gly(&e+H{KR>^s zx;p%Zd*gH6NKH*m4^Pj)n!L-GE)~4Eptxk|QblX)=)h~IPjlDR)qVK-wY9&WAGDBQ zdVHNEXfe^>Uta^)$Jtg?R?hqte|g20Eh3=d*1NmQC(fMt^U(QCDJ$1JZ{hG#fv9So3_lt`P-*YL34P2|Nb3r zVO{t0>2zPCcZ-)SVd0mzb4g26Gcq;?4UScRfA{d*Tx(IGWt)rxtgWq&&a7=_;}sAR z3R29ImzUqm_GWwTZLtIYW4B&e>Mgz|Vk499EEB^M|Gl@JJb98+H)@MRx0r5-UHrAA z;AtsSw_c0cQNZ~9{r%&6tG{b)Ib>mJsX1x&t*zOM)6UMylE1n-+`U)Il)>ixzoPPT z_78uI-#vWTIA@NG$I>9s;(E`MmzVo1PCq?y{`~$oZ*q=4J~>%k^xwHtrw%o<^MeNW zj$Tnb@VWBVDfN2Y=xr_i{ryUnpT2%=ojrSY-18LeTNlA(6e$8jz zS65dr58s<|bB51E$E#~1gAFtG?rCaby0fo#_aR4XQ&UmU)JIm9)}~FHL{g6?8SdG$ z=fTUDD?g?GtgLwR_N^#;&V$NHQ>IUEpEE~BL`+P{-d_IvJX>c+N5-P!V$kfUP0bI1 zemUD!0`t4OyC3=7xqn~&?X9iBC7n}Lz4`d~+^Vk5^Jn6)k+35hENtAp+j>>_dcO4Z^rJI3ZQpKgRsOE$*4FIDPp8Mby}h;d<0Wr> z(9~<1VO+}db8}zZ-M!s&pFl@R=(hhEUOP^mK7Be^CG`9}+u$uSQ@6TIovQhIS6Nw^ z+t#eBT3h0F?$~kQ^5x4b)D1$fE_7x;a_m^rj}H&c4E3gz98T#v)3kZBaZ^)M&aYR~ z8JXEQWSJ)3JH?h6y?UAN?4q#Zs>WL>T6%itrW8&P1g$@UjMlrjq+GqC7VO;4XPPPl z+CwGwvNc7^#zyAh!-q~soLpR7QVMf^znck?ssb%hUi#*hbX=>mi%Z*~l&%v@OP4Ks z^zZL)@TRH+BiA&qQ0_?{DnT|=PHX9hhq?vdotEIfjxAL`ibR4K$cA{tM z-6+?e-#^u_j$YTf>Z?xY{{8lKKOVA!nj9|zIyyLfmYwL)RJUFgHR+Vl;!XE;O&wSD zoH*gZaA2acyMVZO`nSoor=AvpHnf2H>lYRZ2uiX}*4!lVN=UVIZTPkYOO_l-de#D( zjc(y<>^Py}QWX9Bn_~BZwZHwM&F2@1D+X+=J|82ze#sIQotPa0-QxOgYooTd@VV=| zy1GgjrEq`>&F%N9xObPo7qe1Pa*TNO!zal1YB_uKvJ*;E-k;O{9ew@jsnk<5qMf#u zzmNO!{=U4UqvMGaCpNrD(Nb3jZR&7!a$;ggxUj&H$=yX|&f4hhT(V4(lF`dL&bY+I z$??fpG&nZ1IqGb?!<{Q{QvvGvDqC7gs;a6oG+bWp|M+Tnyr_kdlG5V@BUcx;$+Kp4 z>Ba7PaBpulXuNWsO(hdQKR=_gvXYV9Y1_Z5n+z;1Eh|1eXuOap;hU7CbZcAgZzrXv zFJGQ?>FQV`HCa-YbQdQs5x=*!E?6>qm*|M2DIWv)&U1{O9pE)h|| ziJ1iqRud;$T3f@0osad&YL{5BeZQT*Kk>tZgBrTJtsz=#Kg?-vW{%pHqZyFm;Ol+__SIIiu(KaNf1bawu~DGYMWFkrK&Q)|N&Ou;Op`U0MBm-r-TwdI_x%;0&ziUL z9ewln@Avzlh4LRji-`;k1*Oe$9RB|LsyO}h#T|vo3lA$R8CjKm7F;PHCS`ZWR1#vDtf{nW(wjFqCb_pnl-+s`l;5va zFR^fOX?i$AbCYKH`naP@JSSgR6KM=tvy=haoAl<*8-wz9F$ZTa{4%FD|a9^M!=S{A zOrSyGxIGb|lI;xNWKE;&^?ScbB_$<&cyN#zG&=jDAm`FN+iFnX&c)rm*hWflBG(+L z#xqgJ`(!U}Om<&*ctfQBe7mDJHYR^OXZ?PG|9m^Ac4wEAX*Y~qn?Pgl&(6*52CW8G z1MPHKX;}NK&cT%I%O-kwU(D!qjK^Zg4ftN#2jbnBIBO+4I|_~1Yz*v@M=j9l5K&!69K|Nl>L zvLru0zgke*o5TF}pkY{084eERYM*5u4?jLWUUgpo+e!8L3;gC zy6)z6w--Hnlmyxi;ppi2uaz|5W|Mb&uLRr>wmvB z-}CvLwMK+t^U4g>me^yb@k*kGYmmXXd4)rTR@I|1ad5BAI^sd z2RnLtTs%Eba(9X_OqntTw4p*@CtWFZE*BRUXq3|=`x+0oxSj|omvkSQrYT+c@sTT! zjDumAtoTt-$F95hNBQ%|wExVtZo z-CcI##EA=;@6_4Z+27pQc$j74#0j9aJG#-^5>8Lk{qXs-FxZ}>DW|%oPMenW{oUOk zFBbQMdcBt}1Bse~i`~ry%2=++MyX3dOCy}y`4si_ z*I#;l>S+;Z?4|tuJyWL?l`U7Ugn%MVP*8A&P30zVOxyI$+!VwsW#Ta3u9ksewpp%| zpC8|nAk8H~nnguL3=FNUtr}WdObj;F-*}8>@+@7t^u*b-qB?m->(bB9TNuB;?!))* z&uhPTbnvvCoYGrRTpau-ZgrS0qq5>c=;XiuJR8uGe9rXr^o7n!N}ITRmUZNSR=$3? z9$)|P$;rtdzI_t|`5Cl$@dO)ajr+xm7jJA#W^Zb428Z4%P}Mp0_P$zcyMI5DK`UGT z{`v|Irqzd2x=wU~7Gpnr_z)Bv$9ko~<#Jf(Ns)+M2uikD0IOvX8C~cpQbqLO_wgIPQ4xYZ|;eprAwDC%)Y*^p!AgT{a*|W9A=<%0ZNZ9bZ(#FAt*R= z#)6X}kxHTSKHWdHHgr|ghAUf*LYInqOcyf>Eqt+Q&WQ`_;`jG~_CFpz%-qf=+tl9P z4)WGb8Sp&zN>=a6%AeDgugY__tkhcV9V@d-C*8@lt>oXIN>JUw$jE3>^TPl%n!?xF zaY8N9$B1=B{!c@Z(v#CyT{C)WacYvP@5hba6M3FKIXM}$05PuiYv`YExAVbE^c4jK zZ|Zb=EjzXS568?IE4rL_rgoi(*p_#y;KTzgzRN;NYhT`a zm7*7$w(8M^5>>^CcA%<;N8V0m;>3xd`GPlZ-?oCB@r<)hCCv1n=lr6lE2SQ+(=RQY z62I>BdzY!8#gP4Wzc{4L^IS?wOx*hAbW1#3T)zD0oae*1N?19x`Go1z%UkB@-CpBk zyQ^pIrKjcD3$+||?*Cnxwe!=jXWw?M*!99e1Jpg)ka)P@+ndNYcXx~Lt@bn!ECb~}tbfJC7`t5;G>YQl;-a9e%v}BL4QS0eYj1l;$Cl*NA~Rh=qjOgo)lXj* z`Q~h?oWahRzNOyN7v%-|XR?CQqE*R8u5OE0sd~jOTBO&x@{LXGuQSZc zWabz7gwA~J6TQaJ&=9mq1yrT~`T2Z42QTl{)qYA!Mz&?2C*Ctr72S1*$)hr7vflaZ zS?WG_zg@|75B+&+TBvxpm8YjCXzlT_Ug>twZmKsoH~TE<=+F_Ftf?fdrK58seSU4* zwYAZUp&S1%E%ko*=8aBChKoyx>zilFMvOaS`r_+;vd*vnXDMe_)8X1J2HJxo&|PWg z?2_`bLPgzZ)BXDYvWba_70>6EgI0`!2K6RRoCvaK4NLzs7q>|>W^{o1FtNMKTBlDJ z2Ti=rum2~hzyHss3kwAWCo+Oof^C?r?*Hhl`F)qwVQWESelj){0>8h%clYq<04owS zn5ksMFw>_kzW%Q$sNG^!`l==U{Je+P+00DL z{?7;St}l@FpwaHQ>bIt#1x!l9iAJs=oD4uwjD%Xu}d{yzmO?;}zY6r9PZ798fIBD661cpqrl z;=4OLn?X~QoSdAXo#k!3(g6_>9OdQZTXJuQO^j)6X*qEFcJzx2tcuf5gH~zC*w@LZ z`^`CUu$g`0p?p+SH$i%vnqSjk-z`1*xz4YAMXipaakfbSyMVSKfnLNg@Bf}wxmBl zJ~A{c_n-gh)6>(SC6IdY`+B&=^%4%Z@t!z&l9A!cs!;A;X>&K|yvwm(Y0y~azJ2>Z zr#ejd-{)pDlSfig(!v-PgrMtm&kPW<^ECg5c$TFRrW%Zhg9P<;oqEpVcN!o-EogtnR0vtIG>oN%P>z z6Bc`WdsprV&>-RNvRsgRN?%<$=&irEC2DIHXhO!%&yTI!(%xRaU*6s=EKCfvvhBym zC54F|(3R2)Q%_I(@qPdQ-U$-~K%?+^cXzRMw|8{p@Ph_b z@86gI_wV0}o14>HpQ@^=o;Y#hz+CHc(ALT?UrInbu*%=vIk?n&I%tFqG(6<$>MD9o zxcexmd)6yu`ryqQ9&vH;D{CTypKgE&nA!P4j@;jn=xkwSCH0S0Nl9t;v6QY=XAT}@1T}z~ z*?3K+f%e8Uv-3}wI<6XPR}z;p?lb51&45joO+O`oq)3B_+#e*@+ifS5`DinPw>{C^&%nDjht1 z!aU%EbZ{=ULy^7W*9#h(Ic0HzBHte=D=8^G4w&u3D{FOSN+DFVdQ&MBb@02%_J1poj5 diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_11.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_11.dot.png deleted file mode 100644 index 36dd59f5fd3e68137842490ac8a960fd9f2d5029..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25597 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 diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_13.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_13.dot.png deleted file mode 100644 index 177679a89a21a29c6d0ee3c4a83a438d0b8e46d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14789 zcmeAS@N?(olHy`uVBq!ia0y~yU~*<)VA#sR#=yW3llyxc0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyqxC6Cl8)tU{GN2ba4!+nDh2-WsPv@Kl=~imzyswQ~zSuIO(3a z-j*Uw(KTHUoUa|<<>bm@$s)cl-sPz1)6u|H<AD7wpc9AUk#&I*N-Y9T9kGiITuvxF zc<^9B>8xePzt~>C!xO81{raMpm4EY(=^T%!*|WVx;IQS#SO&!-d)5?c7&>PgeKXaV z|NOy&gsJbD6^~d2oEK1Rj=6u2Gj^|Xt^8~Iwf~JwZ1?|9-ZgLWO10Y0ucO+wRegE* z>6XdWbC2i91rDN6`j~PeI1>z@2Qo)E}FArP50^KW%o?4nb$}N>+QI<@}=#I z|NmaD^1u9Eq=jRn9>}**fs5Dvw7qcU^5Ig;E7~p{Ul%5~acp!xCKsQ)E>-&UmEGsQ zTr8b4W!=la)em3nP;^?u{gp>BNqx)PZ4Zt1f7)mG+VHEDj%3}ItIM;+XY9NGTd!Rp zNmfSUSBOy3^fQ85KW?zP?4HY^$n0wC+;XGypRHrFqCYWvxm}VxJ=sGy=Gx-*ZTns?ic^3|&Z_e3F}>h$aH|-X zUW-8T1&}xP^4KQ(gcle+TVt5~O!mah98i$fE}RE4thU^D=Bx6jwY8rM*0TP{Uq5l% z*Mdm3=|4FYo5f>SOcgk^=-!0?m&(dy_u9Ac*ln5JBXDTZ#*%l76VJNodOS>5qSXeZ6AUs-_4XH+Oe-6(LR)A>C=h-qO! z$A%3CEUc`FS5^diczHP$6&XEx^hiPALbOy{2Mv)!moE$F<>eI=7dwZCi!TY%Jd$LXm6a6`AK%~A#TB!= zjQ8%{yAozO5=KTw6K2lrTt2@}YTv$nHT!*>I(QcvxNsO+ce*q+v-2k%?~^@o`m}RO zii%wAmq43OCzLB*ENmAL5JSRX&s4^W~B^$gnd-*JimW9sGX3 zzJIQD`J?6Y>zt~ptjuz5G_=dt-FWg^sf9;w%jCHNNn-Z@{}@l2Jo)3N)B2BJE}!q_ z>&yG?-Q8}GvYh4bckkSpcy5m6iIXP}wsMOA`ur-$dvOk?))_xDUsTX8CG>jyby ziA3AM`2WAcedbsQK79C4Lr?G6v$L}wK7XEm(dyFW%O4;2+dumKe*f{GpPx^hGpDEc z`MJm~Y)&1ypk!z$xihBEviRA9Uh{hgcE8`(EnoM8F)%Q2&$TaCg8dck?d4y-d^y7` zSL)mQ`{%Q5TLfM^FTW=2jw)XIb#KRkM zZW@77$+I&vYo@z!Y-9oz5zO1FzvsQVyIVZ{{JgEV6qanM`B`-3`t`@H;&BJ2YKIF* zN}eqDY!R4uapl*R35+}I{#peE1%0^aF8}c9^!R7HW&9-C4)#bIU$}LvtN8i3gBLGO zd_Rdp(Poi>3y0){$jxbv3IY!GU6Z?E;6CL1pve zxz^=;GiT1!(A9NyabdatR6@tvTDtz{>G*=bze+1AD?i5aDYmGWWZ5bn$*BMLdH%+f zlR~q3oESD_TvW2Kv`jqSCtEY!iQ}OlC|?J1adQ{``%^jF&h_rmqpaT3^^Pu|U&pmG z=3KdDi@>}938fZ^)aU2s&afy{N=i!lp_l6L?A+Y$UAwI2*j7(_AH<<(15V7R%J0{< zFP~pG>%9@1j*X4X%aK)El?lV%shr>y>WT-}i%w ztCi`%--|04AH2A@*rM!>#F8LQ>-^eUTP9}a%9WD^k|aSXf^G8YrxI2r8uwErbWKgC z@;cR?Ofj1J`}4E2pwdcq0jO{)Q&&`UeE-pJ-MV!*b`&md)lzEt&{@^Sq3Cw;%I2h= zSFf^Sc9n2Gefks>r>?H7@9ykm-Wb8NF`{SPI=vr1et?RbyLV*|9z595*XLGJVv>}c z{P96E|DnT&4=*U)wQHA?iqOI(OI#j5_Ve?L*jc2?#Kh$DQHWD9tPhmR6Ykx+mywfW z@@i+&Mv3G7^2c9ZUS9a@jATei$bp+TC6(QJ9DICuE?vI-@cn!Kg#jnn7F@d)W+rj< z>eYo?wurRz%e%$K%FdZH$Dr&@L`q7Eg0Zo%u)1GMb93`OPXWJw{NR#%}QPb ztclusYQ=STj*Yh9z~ScQb&ZUaeEw6Ei}lxxDKZ@7*iAbLUQr;%7X4ves?i?^W{)3JT7!F4x<%X_JCb=N3D2Q&Z9E z@9#oqzkBke#r$3cvz?tC+jVD-jlQ5pO^vuC$41@v`~TbR`|*hT&W=Lo=QVrx?)~v> zcK(LM!)#NgO-p)or1Qk7Q-?O6x8v5=*PnbnG%BjA_V>5M@9*xeSh@0Gu)l5V_Ip*_ z`+whkf92WV^Y#ClJtwQJ^!@(zt7~bg>7BcGedFX6k63|g>Sk3nwMCmY3B7&$R!Tly zg6;RWx6K|ZhyMKhY?yb)LPT8r@tvK;5nD1QMm7mB9653%;qR}nE7q(zV*mfA|COs( z6W`p}Sn+1#@qmz!B}VyPUR}4|nYg>V@A-VrTBLn9j_x6rQdZd+6k3^^3P|bzQj?_%jNSK?#R~!R(9=eZf3q$ z`#n~waF&3z%W)n-ryisFe>GF4OnGpql{+IV%PA~O?A$!t?p|s0q@SOj3UI7>zdNkB z*f_54XKKy=zuzNvm+8jD#(umOo$shOUD?J)=KA{h_Q}F?!<{TuMH-PLmDjL)7Ahq!;d*?j(oUiyJ2MV3dB4Ap#Rv6!2i&#^3K%gf8FneNK5Q2}JZ zxmT}WPnD5x4THo(EIpFOY_rYtpY4|Ee(~y+lamwEG~MX7(A8m} zs_MuYPz_OXYiF_gwKb8=mo5cWR9AnF?K>)CS;SKO?2Kb(rlymV6Q}}Aasy?FsM4~s zq$?`|e>`aBH^{$dv+wlA9WO60Prk7s@y6b2^ZQE$oX&t+L@uj+XPYHnUl*&Psk!lH zqbU2M?f2`PqoSm|yu3i|xP7M;TV`;ADnU0;Q_V1mWqU-#y*U z!3gqf zmvQ>J1BVYYCm-*7x?5!Rrw@nuA5V|3b4*WH2ifA&1G2?6FHa9tAv}3cJ$8X=3R#a5f(9?Sc3ad^~+^^8k)^;u_*>ZE* z`v(selx-GW?B4Gd87X-`Rlv!o=hs0_#WmBWiJ6$2&o<>@bojrT!P3HFh3{rJLqkK6 zHV(;_73m!Uhj!KeHe*oG(CC={_4|9(SJm;s{*%`IJgaD7A@TL=*R)u6#Ur1<3WMfp zs)}%(-6iMj?EQb9^1iA`El!F@k~SW_?#*GS56V2#HZA=A<%`MdDwDTrm(BMV$+ack zc&@$t``=7IIXSr(FJ2hDw&GBn=DzzRhvJ%b>+~3&@jD+2Xj8D`-%(av4DR&0Bz6cK z3W{48r!?_HOy{qUPF{bRCoZjOWpGfNeDLhqvu|E2wnT`5I%20!pXO#bV|S|PfAH(y z@4vm0&->-~{PUU3=g#?6R8)M}l;_m(^Mavs3y%|5D-&1ip$CCWrn39Z{;ZH#>$t3* zJ2NFmzOhqcfPpLxgFHE@mLyU zz{BkB?%vYYrlhLMT3A^4M%T;Ia%C{1i# zy)92^BFD^`Gk-jp?Em1+n=_!MrSL-L6`Ybwf`Wodv$3b4gBC{`C3t#QF34L5=2&%*@8-W@fiOna(R$LY6F9vSIs# z2?G1Pw{yha*1dI4AUoZ3_sJ>ucX@ex2L=WXEU$#I*i^ zSve$6^!3%Yt#oAPaIM2A0Ar=YIRK3zY)%}1@-LBXM*z~Il{zltJUH_bO} z-8!{4`Sq(;1>fJrGJHSoI@2Um2-L5gII;1_5f=`YZF|4_U*6vPZ@+e?RD<8`O~35c zWmeA8%Uz&5BQt8gVQFUd*<1IT|DC=ZmjB;s&BI+`%vY~nTP9Y;#m#;5t}&<>^YL+U za$=e^d9t9mczfaFV+)rrch8OV^Yfc<`st6u^8Xt6?S3#keE9H9GFL0p;dcJx%Y0{V zD0t}9z1J>#`plV~9UUAw_xH`c{3kazH;ZxQjvX^(cNiKP2CAy4s;S-j($E)E-Ih_E z{F^QLckV?4mB}Xy9v$I)b8|Dhd%s+3h?c9D7uPbMnN5(sL5GVHkE~V5`%SZE&khU= zYnwDl=*hEZkIu|AUa@wqYe9j*yy|zBpnBWG$7jod)ke0li5~acqb_e^xGSHQE3FxO z{_^%Zz0%Ct_b+^XHT(WGGe4u5JWH1@)zHy#Nla8+7q_=-(ITag@Ni~^J$v_tI{7;} zF$oC^o5ndQo0^LL{Q2`uZKDH2t5ajAu==CV=k49IvQ{0F`uF3wy_4Sb$G7wMo1X99 zVi+463u?{1ySw}28RPR3du3LJfQ+5m5E2m3(AURjVP)l{BD8U@`>6>}or?d3zyDwPwlMaz)QL~O{NC5Uw(j5d zJad)zZ6ltw=?a&BhQ-F7m9ejzb8|?GzNon=g#>gB`JXf(+;=s zp85Fr_{>$Sw3?^wPdLbQ?Bd0Vj0Y^Ntc(N&1<#b-q zY^wgAckK4<*)QL{GyAzol#8|a@iE?KxAXU>-m7}8oA&F=OCJvpj^8&qI5`uS`OiPM z=j*lTGu!XioxZc9usKjeL~VWY0+ZTp8P&m75wm&2}S$T8OQ?Fxp@6P@B z`E&BM_3`KL?5n*!XLZWcr%w$dBO`kzPZkyy6+Qaq&d$jbPo{`Pes_qhmM~gYS6f=R z_WG5}x=Z)&ooiYD&t`M!>#($!mzJJ+a&od{etv%0V;M2AV>Ta;2%nM8-*fQI?d|=V z8X5^pf?hUU|NV0Ld?N;lg#jmOzFc%av$y)Yg{{BVRHJ|Y{+-#Ddz&rhaDqYZEt9m1 zi(JKGpU<@}pD|h8-)Od3ZW1UFs+pNh@?)`lK zTFe>IHl9fR+%vMbI(>(R~suTDxNtmUw@|KXj1VSul3UAc?R6# zdMPn6F*B}Q2~pG6@1JhPv+!keYNtWUnJS-9@#|IWo8r84W~3NN7Qek^`b_@+5BAT` z?f=i5X_(Ar4C-I({rcrg%CUa=^PoYNn|msai@&{z-283d9P9GF$Xz9xm#x7hUT0(GCC0(8072!Y`hv*5O_aQ@)qBl*VXa2H}TjmnE3h^d(`xORi(P| zw_jflnXmc(?(0{tZX{PtVK2tGZGBJ9my^%V z5qNJ3Z%2TJOHIuluNR(ver@a5uWyZOeL8jOR7FKaMsfYPBh36Z2g)tQzCW9t|0w?d zFY&tHZ_U@Hd*7VY*T*L!BC?`o$)ZI{9!rCE?AoQIsOYGwqN=Job4z-|HuG!kx8DC| zlWB{Jiu&+mvj3xJXJ>=@{06C~L?(-* zEqs1!YxawmFB=yxR$jDd(Txj>_w>qG76q7ev_#a(C5VQBhG3503-< z_J0zLZ<{8cNHG!-7hm1mdF9$Qwnm4B6)QBhIw~_WGyl|^J%eHE{r{#53__x#yU(2Q z@mL!4=XL!5O(!pAeSd$yUp&4>@bj~?ho|XAudxyoKJ2L?1Tu*ysN(CZ&~Fu84Gj$7 z$m0(W51*&KU9SB7Jy1gr)Nm1xubKG1NC#BDefaX_i241R!{wTLR;*bQ!tHTt<2oj0 z=Bvk?ySlnI{bbC4%enRbsvbUPUteDd`#PIFd-fFk`BBKi!XgpNa^G*BP3Qgp|GtAp zLZ<0Pzj<~0eZs;34N&}Vy$~E2$k^({Xl`zP4)p;>b_yTbt*bDQ?shNT2X{+;*=>%geD0I3BBlU z6*4Qz{Kdt^ zg)c5B?mN9PlB<=;Jnv3`@{)t*rf9jV*Zg{{43Q#E6u;97h4+uPe8m)rm4tgNgotNg|zFVW_hnz}UV1!!3LNs(ntY%Hj;v}B2j zii*mH<3BDq&YAZ8ef@uFf18gi`+mLBJ~Pv}{e6*-m)`WpGt=ieIyy40i`i+UvClAi zc3T_U){hhN?(6`?bbfyR)&>!AarX4|^nIu0Oji88c5Z<|$*U`xHvfJ+wkUfeVPtH~ zt9K<#Cu$4Fa{u|qo}Qkb*_@H2tE-!}aQTWA97!7``1trF43k=-UP#(jeOYi%H#yrZ z?@q_o?CXzCOjK^pvffbgGU(0y{qj3^?lh~Om>#Vn)?N7ZRp`_SAt50x^XAFz*s((a zl&2L`)z!22Xc%7Xy_J90qJ81EZDyc>vwwenR{a0_y;tvwn1_nclI6>lRaIGcm%o3u zTV}S(RIk98m^DToiGhKFdH476GJN>@HI&f zC+C)jn+kajC*0dpX;Jb*095Fz&##&Eeo~Lp^wXd@oHsW%GJ_^4&dfCasn_`;AU1Yw z*{=H3R8@up=g<4++NezQND+TK)$U5&>*Ja{e}BDRKf@rANiTL+O8E5kpn;`=7Z(&o zL_{vsW#9Qn*ua*&;$ zpPhZYTc!EV?sERf$jBcbkIR32yZ!#7kH_Vo?^a1_*|yDWYePs(49`p-Hgj`x6*aY0 zElZ9ZaoKHkvguZS-rMc>42~G^9P5|wFMNFL;pX#p#*quREm*#sy|Az_Vq1=6Tg1o4r1bXq_Tcw>zsudL`<<&3y^Tk{_KRQ} zkL00p&#Kt{b+Yw;9?J)YhPFOF-mk2y+xvb}2dC%KAQ4f~l`Kn|nwUyTN)BASD5x~i zBlp6IgC%KGg|^q7k!Wp(U>S(#8+v^uE0wk9NRGNiHM@us(oZyj5 zWMGht2CW6q(ecs!a^%>tOYa;HMW&{z{`=5wzhK7>2~dJvy?!5;xVZSf(@CM>;mJ== zP5tq1_j^zg{NOOZ{g%!+ouoKlU*D|9ic_agch;MJ`0{1plP6DVDQYSz9$fWred)q) zv#WovHRhRXRmx?Ye$K_!m9?p<$tP~b+8Y~_*{`jO?e6O0;*qtQ^1i6#)!VnOm6ev# zRa1`t(BL=v^5shi*u~SgZ#O?bb@D+6t*MV5_uC))_4T!&pkU*9yWc$hcE2>%n|}TB z<-zCk_QydIA|fqs-sIfNR=Vb^G;zU(4FReuqGDoBN)tiT4uyqlclw$dVT!$ zdi~@7|K9)SiL={!|9fHX{?fLE%jZ>b&6_vx#^&_?$gVA-wzjq$JUlLCWoDZ;ZTg|t z9vU9LT&!wc>~6M|AzbR}>YzEDFB<(H7sfIj5n8os)rO>_Trzew5-(rAjM$vUJFnsq zXZO1zf$pQAc9q?~AIV#`Z+{Fb8eXs8@3+_Sh(^&)nWs;mW;MHM>Ho4xI>NEF!Q_H7 z7if6cF!>k*gIWH)9@lQMLOaFQTkn7G*mghaa6oafv6GWik5t6jg9jORecSi4`i>0S zu5+#2;)|9oV^jB=V~`knr{ic+%@Ls@@`Y7A^IS@0k>_ z{`U6#)xGT{XpJ@t_F142`p?hLvonAOVx&yDZg0;&ewg2W&F4zy%>BPFeREEKWB~G0?cdU(9Iv_SS_rngBWd9s@Cp&5qBJyx>*Kbd|l zKlShOl-1YF*5)%^{T6)L>i0VL+g7|s4S1ZKoHkT_&C-eAcV|WFm#a5!tN5_s_r+~09R`_p?TPOHtMT z-^czH_I&;G`TXL=i<#T`<)8hL>2zs&^eAbnBiH)4y{F!#^KozlaNBDgwvhxSx{RuJG|yHl6FXysm3lkJ;l zE&CqNcRlAqc_j1F^?$EPwAKCj=nfj%JbU)6o2+8~8SZ!9*Nea2eQtGEVt3iwL#skp zU$}E;&9$#9@HA6RG}wPB9f{y-WhyN#-BJ9U??{s2ZRsbEA0PfE#LCWo`{@kLBXwK0 zY(|Be^77^!VmNG&Ai>7U%3AT^AUkLde8&!p z)slLy!GB|%Ca=`I{r=CN8k-LXn6vt`d7N2USv~yx%&H4#Nla$>y?^2}s~y=-PE7pp z;lqI|D}x#DykF(-=XdPK$HyBhJ|?NCsw&#q-CMV=+L=S~$d^x_KRFFm@j5I{J7`|8cCnY5b$jkFj^k{kUBE!YqUD?=J*n67J#x8{=YiqAxt9zYw-8b>e zi;Eii`qzKVh?02q@}*;FsAy7ha&KJXees+VC9#*koL!t>7yMP^=#e7}HgBHXB%s(L zuz6?APa_5eGcz$xPEJsY^zq?wQ4(}f65O+A&y{(XFJEqc_39Pl*88&xa^rVyc{*!Z z@z1*=Nl8foK|zZ?8g4Zxd3{Y+LxgLW#BwoZx1IwVlaK$`~FtXLs>AaVUN}JHsLQ_1o<`UuNyU z>X$FneUxFr_oDCLP8~knT-y%{nQX_m+w*qa%HL|R#AlkEoZPdur`#$lD>uFu1TC=B zh1lZDd|$u`w9am2t77V+CHMHx-nxBTvsBoL!*KSycX>LIn^@v&KC*Igb1P0iZE4$o zEB|iE*85rP0ovb9yN)JJ=BZqtc_P=_=qp3d+_`hN*iRF1>bS`xYbA1fTkhd)xwmip zUb%85sPPC|-B9@WSf(|9!zI+Kv#D-;WB6_6F z&#m}&d&>3qTgv9nof~z2OE9EpZzOq zdu?b~*rFXfBp4YPIr#bAGcq)kl#~SIOSF2cFfk1~AOzwuX`!t~Y8W-0f8))E}+kp!)-3J4Bvo;6GA&!^M+pjQ5? z*RO9byc8P~1Df>x@S)(_G9GV1K|u~~?&jsom!EvCyzQuzl#br?HHKTxHSW=KmMYQ{ z-?+v7+b7?8gYK@brp=o-dojH7Ul_2V|NGzQ@87=hX>fd9{`z$9!iAo3wQoi+2X){(rcmbg$vBYq_r+O8)*T)rs9D^7;As z@M<5m$qU!5WWpXk`4#?`tpL>Hn(m?ZP~hYk%<#0a&U7yXJlv` zI(+!%1`#14ru6jm$=CeXbT8xIy6%6e^FG6`v0?v93)gzzKjt3ZziwMOv|4b8a?YTM5?&oBCQ z+tSL)NpCu+GY9Gp{QI_je_`JDlE3?3{Q7^RYsMZ=!~!rQ~wI zxsSFKtTU;tVE?7K^-KGoXJ==>c=5uasA$u%<8$ZE1vN%HIyii0nRq_70Tpp8R|ax= zU%h%2vBiY-~zKMnVf0F67|kbc~3QU}9#z`TO9(g9W9frnj@z zmMwgLc-8CKearI0V)hxnoON#Nv&JtkX00;3CU)YN{`Bk%M%%<^z5cwTZno)B^OU5! zDMpf6+1WQ21V=`8zIv5q_9Y}de6x6RX-P@ScQqF`HzifoR@*cW;ZzPU4-fFdHud>6 zLJS4(?pQY8df!+k@#58z3t#qUpNxC9@5|QvQim@%^V_!c+x_Cm&CO-DinuW&f6=Uh zn=581HNKiWc`|c;{(DAQ@24+ccK-NLapd^%?3y`=5?8KYU%YEql&Vf>XsDvTKL6IO zTQhQUT=Mhvf6qxg+@`3Z!2$9x4^K*eWKi4E2M-chSXdks79=kHk#ypJ+W&m3T~e{J z=TjxxEata< zRt1EIAD6RQXv5+vS*GScujj-GkFuzY42?N+{@qp)7Z*?d|Lo@XE%lzlB`?UYa z*1u*;uD56BFE-q3*Y@W;-;%l4uh&@{NNK%%^{T1ApPx_G%H+Z0Hnv-DZS zI;)ELBccgocJfot(g2MM7cMm1-kuLyx&iWOMuvm0FYl{YuRxJ}g2*S5d7e)VeWt5;cNv!jB8n?ZJM+a|Vk>(&)3S2`9K8(Z(+zJ0sbjlh5F z{zytlWL)^Qd-v{#&z>E-7v8qu$PpLNa8Sjklj^2yjO*TRH=OU7d;ap3XRm&}(I|YW zX&P$1e*NETH;kXWd)K#Ri^&|j+FL5@fzqF5th=X}{LJ*}_EVRa`zL>WbyY3$o&yI9 z)3)R8)8Dwq+YO7?jy6Dk|o@ z4-No?Wqebux3G(VHt* zuWn3SzIX53x%aPL6WMf*}4DP>)x7Q-xhZN@4w5x{>8tln)BMq=i<5I%>Aa{co-eZ%FICPOkcgqvaqsx z6*JM+qWqnVk&zK-sKdPF#;j$_)V8IsT)2>N>(;GrwkxL2$jZqH`Pu&Y`}g+!`|X*S zm;^*bSnBKRSy)*W6%-s&XYJp=|73aiEh*=|c*ZaDO%8mO4!-}gcKX`&X1)$JK>uTSx+}o`Hy!`zZ+vjZa z=?C|9uUWgc_wG53{c}uBO*h`2bL^NKC|%3?OG-$b_?DyH+-vkkqq_3W-Mf`Fsk=nQ z#g)y>u07D7a;0uHs7t`>%<$n#u>Zl!mxZgpy)pD|+_q@>a`wi?#uMkxxrK#^-G3Uf z_u93vtqn^wP44b2c27Ob+Q932szF3TVug{efSe#%WK$0W{=4^`dzynn!~XsDfByUtkdZm_&Efmqsq5c7 zEi5d2_)+vzH>B5Wb@;-{;N=Fz&wN5cLKHMKPUy7WYLc}sOL%*0>xvaC0&e$v_Z&Ci znKgU%#Vc2i{L9J737L8A!i9!s&(g}G{&S1{`t|G3{rmEV+xd@gNId-D_3P9Bu6)~V zS}&|}BdQ(AT zR%}cDHF{Ql{`j$R`EvC=d-gnd`SRpFpV|p3ir3l_CAMtcx^U}O(YJ5k?x_B*H*5Cn z&?Y}`Z|>i_KW)Bo@#4ZwGVJW^QyYXOBvxFTecAlM1-+uni^0P*<~*{tRU)9}WNV|h z`xJ>*M{h<9Wi48L^|nH*(?X#Mzu47s`@hOgTVS6W@JfCf$o{u)&-#7-^r7ZT6=0ZU46%+$4QFEb#Z)y??Jsw@I`e{PFQIXoX|Vx0~r|x>s&} z{qjXYPmd2YK)QPUzEkCvM-Ew8S>1@PuD1TY`;+wMWyh!Vc73Y5pDg>UxUjHs_ipPw zd-pzk_KdB(yu6~S>d@iC&Afhgc6M))<>cf(eEE{{zPh^l@ZGzz>(;IN@afZ`3k#hy zO^T#d#JUwHdfd2h$^3}M|Ls%0TU%RSymoDwk$-fww3W5BqFDFEyLZ=?+JX%E_AQNh z_pB zYt_=!#Pmzdzej2E$s26mN)s2XUd=5lEBoTjo0Rw4w{3G$n&_Z3af6~)<^HW(MPp-Q zCwQp5c=N`ky4u=$(OR>6_wE%G7A96NZR3$#Bs6V@&ASH=4*U!Gmb7!%uA~lEujjj9pHT=obr#Fx8yE|!;5NI);{htra%Y0@YDz|LeP*qi> zFwx_N98>Dz+jsAtHM{Wr-CgJKaB)zGPW8HY@7}qeh0X=MKC{ZWv$#Xwy?Zz39MdIn zp4+!>g`8Uv^v;Q?;oLdDFWN zH!okV4hoh_+$(r=Pd&ff`0q%_ioe(TizTwMvz>i>c%Ge~-~au7eZ50#6liC}moFtt zmMls5{_bwgbmtCNP3Oi>%OiB!eAJSio$d!L%#};!@0zqJeW`w{)54EGL{j~`^iIVI z=dv(0-a7cM_VD!fcJ?`Q=G=&#df@ND?<`D=(l36kbC$d?XU?1l4|R{psG%N_gB_aBeTAK#dKob9WFU$>aL^ZL_$}JH`LIC2{{u%s6Nf6GWhZ=Ha#KD(KmYim zyZq5lPfu@5Jj@1KxhUY|(|0TXY!8?7fxp^w`{nKB;^N{g>i$?TF){UM9gv!1Qz^9n z|KInZeGj_P+b(FX0CnPYv-V$=tZfvxx3_=tR90pNtslO%HT&v1oxEHrDJjsB z2I#t_1G`FJgBH;`actDc+W$ZMKq3djojZ3n)c>yo4Jyjld|+JWGqdT@qoiP+TTeh! zC{w10T)B4b(VwceIx9+kNhhj@c^82^jJr4^osHm$yem=kc7-(WB z_x3hLH8r;RHJ>=E|H^x>Ua{i9BG>K-Q>L^`nx&8lx-`?JS`0(LDZ(Go=IMYq9 zzs)vWeC(K8+S5~0dv@=(e*FCT@ip=L=k2Whz0ETGpw zK7INWG=lo=?d|qWn~at$S@K}(^|-^E&)a#YcY#8IZPWB`x0Mn-Jk=&YJklwAV{fO@@Z))5X;wV}_tz1cru!OpPb`TS1$+IM~vEpN*Dy<*zn*;igSO zOP4NPv0}x6xz^t0V&h1B0ilpUXO@geCy(w2zVi diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_14.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_14.dot.png deleted file mode 100644 index 43b6cb892bc467ae82e18b7ae3e6f75ba8ea0183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30562 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 z 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 Ozb_WXXg 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 E0CwhTNdN!< diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_15.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_15.dot.png deleted file mode 100644 index 0b606756424292e5e095732544898ad1092b38ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23843 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 D_4qbq diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_16.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_16.dot.png deleted file mode 100644 index 167c98f59142a67fc98187e692869ad3d5ba6b13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38589 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

    1hu?JUo2j%o&%sI5|Ff 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 diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_17.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_17.dot.png deleted file mode 100644 index 63193c5b8efadb5a6d566873d46e67415f360731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21239 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 diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_2.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_2.dot.png deleted file mode 100644 index fef0316a77ac037ad8c31eeffef130c7df94ff4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5316 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 w$KIXiYhW{YAVDIwD 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 W+`7e$a~T*I7(8A5T-G@yGywoYAcb%M diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_4.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_4.dot.png deleted file mode 100644 index 7d4a1ae4ab5ec7b04be65942825719f1d7e5124d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4851 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 ZTILh`UrMdJ#K6G7;OXk;vd$@?2>=9QHq8J4 diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_5.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_5.dot.png deleted file mode 100644 index 25cac4746523ec0fa13e51ee47c75ed0b5b3c6b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35647 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 FngG4j2S5M- diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_6.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_6.dot.png deleted file mode 100644 index b6585096157c276929039ab4de0eaf817c64a172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66431 zcmeAS@N?(olHy`uVBq!ia0y~yV7kn}z{JPF#=yW(71DTsfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UQRQXb01?E7!(*hT^vIy=DfLE9wGAl7Tbr}%Sr?S1bKX2T>>^N zP*}8J;-Vzwq>hc-Gp@M!9{MQZ^D)A&=a`<^x-xmQ-Bpk~#~lVM5p5`dz4jhUtB_^DloF@C$HZ6GWam*KNm+=b!$q z)Urk9tdFo0$ID5xW~GXye%raPz|3^F&MBX=+D6gR``4a{ZJEE|(H#SR#U+m~o-t8u znV`44urudJw&Q(sof(VH-7+ifx%Te%r8{pYwhCO@xB_g}Cn+)SMAgk7eYPxED%dp5 z=SuzkNuRWG?k`L0oh>~-Z8oQ%KiIopG!CWJ-`=%W<2To=#JrakEdn2%vO(ccQh9c2 zP~bIx^U#vnvjWA+ijs?eZ+q&cVB+oD@ngYEP_V@MJ#NxE#Z&y4>DHy%Sz5Oiy}MoU zvwg#*yLUWW!OA8)xVYcLi9>P8>3LV&)zyU#=|nwqVQrs26@`R^EZDJQ#{SyWRMl0h zR{hxjtZ1i(rlz3PzCC+vs=mKF`@i)4y}gS1`se>|ZE9kA^5n^aHEVcWU0qL{Jn87^ z$?4_gHDU7P=0%H?rc9lxsH%GP-1|8KmqIUqgVpcg!-9Z-fQCPRYMwlO`ta@T?SJC; z*Zvm!`Sa(A^XH%2hsVYB&6+if|JcOIlbf5Gn5Imfx^T%7mduy+&ssx5L+@LA`uq9u zZQ8WyPrSFMr=y=AUyj-A|8o{>`upy#^}nFbO`D8D!or%)rY+vGMWnQ}l<9u-`nbId zmMmd0H8owadbRoQ(AZenzrVk?&zTeRy55;nF{u%h>L!#;oIbt1r>Ez;+{>3QJ^cOM z%gW5SxVeAc*3#5mSpWaui`(1v|1Vs*l9QL0_siSc;$B`}Ab+e{r6nRFvS7gi23Oak z{9MK9t5>dc1O=y;S3qQBXIB^3p6c&>Q>RYV(A0EHOjPXZ>SC$W)zSI0V8`lJtDL;O zxo6Fq^=JL9Ten`^-*5l_^?^p_g$ouOxL~c;V$u$Bn83sj6*eg;DGG*$g6HSkyL)+Y z?KfGzbm_uPn}iq^tX#<%8yoxLFkYdcnLe9YD}H&?f-s|)1J zJ9lDI($kgA&BgQY?KyaRd;ZV(&6_p_#KoPv@9*l``v3Qe_3QuNd%t$wIz1B;6N#Ge zmM=Nrw7X~dx^;Y+nVB8^{q9aqOphKv{`lx9w~CtDqCIQQYdG_^vEiEh|p`nhBj*N%fcn^Pg zc-S!Kh5?VX8PBm}$1YsIzFhd-5r*lfUH$y{>NS1;E@#oy)b#N4a|;U-tFVzvNl8ga zNI0N>-MNkDp}pO&7s|V4D=FrJiBfoQeM*w||Pdt*vZ~o_JSRmxNi4gpZGpLCy_>8M9^`x^Y9o%F4>eUESqPz)ZE4 z33-dQY!OLJOyuC@b@lMzm}gtv7Pq%5@y?FI4I4Hb*irb{AnlCAi&w9VWT$ql{PgJ) zKi9Wzas3GsCo;@R>6`{|$_c7Mb2$;=UMEyvByOy0R)MD+>wAZlneSIzVhu6Vqo&3tLPv~=nfc>`gUna1T|0E<49~W0+cs?8eE3MG@WK@< zPL%ju0!b(t8cvMg@Y=g9Fi>#G(xr(xIXv9l+@NR>6B9EqG+Zc|b4fRFrdo@DVOV&0 z`-&ABF?*{-!`H_hJw082;o`;3GmX=eUR_x^!z5Ga*O!-vOMIMu7#SPiw?6sxxo)Yu>#*oMPRq_4V~novsL6Y}-osZ{SMR9&td^CPWl;FY<;*No?sMnPUATTd-AYOEZQJ38 z4{mNwulVqQanYhh0+N!QSFVJ3czc7a->_*@)6%7?YCba@!UYtQ`a#8j!IE|B_zoUC z_~FwhrtYInOO~j}$jUx^^QPzJ<>k)4zP&FyT1sZ!xfA2!>Z+)u#1t49Sn=nF;i}cE z7p`5)tF5ga5gmQ_*fBO`x1NS2OH?iway|sd(%d&MFE9V_?OR)aKR*{2mqF#Hl$w7( zpBEGsE}YEH`Lq7&)vF+LKu(mC>#P3$ZsCRv0=2)sJQRQJIa%%CojY^2%u3qaEzaw{O0_ zzW(9Mmm@2Kmj^^dbVwSfC478zw4kVHk)*McRe+Zl*MBuPMMcFEr%yMxwXx;o<{GA+ z61j2nX5xtniay6x?(%@zD4Fawa{Sx#?jD+`>|XHpmg$%G_vN+2*Bx0Ex_ZIVrAJF_ zoT_Bx`rCKxuxM#%dGPJ+?H$$M^-i5SwP5k$X3gMb3AeUnf}Hm2+uPG6A(xH@g7UN3 zigoKifnWFgt@)9oM-QGm$CrJ5UF+t}#%G;`mE5wjvp;@#=nOLN+1c40U0qJGv9fOc za=g{m)ir-U9tUO3$&#MkV6(zBG&BxuOg>)lizpr<}0);!fO1am^?QQDn0tHl4zx_W6K0dw+moFzCW2xGY(+ zL_uGlKgUcu$4vU^)2A;kFXtB#6hJH4 zb_%O2=ZgkMM_EnLPAX!E(F+Aeqxc~W1lo>(uGTxoc7oKU9e)s3H=L4j~@M# zGSK7VLv z=(6N8Nf|zNM@L6cCfUE=J}WCLAuWw9Iy$;X+MKVgtKA)uykpwzx`j4ZgKs#l`AvV_pJU8PT9U5o}LH$?f-RbPCxGy9xndw z-Mfe_8G=<`UmYzmaq>{F{Q62XLPu;}?C!P?9|{;6dV6`7`OoJ|PfzEOvzhU*<Bo54Fhcmr>Ez=db?urg8al^(RlCZcIGPrW3twP4G2KcURYkFD@?r z@bzo!ym@kW?%v&4@$nJg-+Xg$)=@Aw7q>2d*Rp)M`j)L*H`e|x1Cf*w(E_OGYSa<7_Cn+mdt~_}1B&TuOnTFV*pyTzDB76cn@}{k+^9yIQHk?fl0lD!V6SX5Lgh4lb5{JU{bqZ}s;_*W>G3 zySlix<=$>fJw5GW5ua1XiMV|=oMPRr4Gjz}?d{G^PE5k;el43f8$UZUlUY_)cA0Y7 zj2ky1bmI5P6c!f#`1N}I#@yRx8d_RLvfQ4Yo)O#gWSyLyH`e?t`t$4c`hcLItn103 zD&R{-jGlP?->>2z%TAs0s`>qP`;S+v*SlB=wh1`3XzJ-b(`V=8;c@Zw@0r1q42SrhPL+OKR-Vk7#nAA z-v~Z7Wu2$k^3L zoSv?qKfMra)100jo|?a3ukWb&Y4q&O%;vkh%MV|;FyUoH%LKWG!w(fqOhoGH>Oitw zTwDohX>FCCpB+4Ul-146&BtBDGcZsv?aYkED_271*j9^e+qTWeUC1*wR<`WTjYj$U zKZ5t`|J&C6`FPx{-!pZVz@_Anu&|`}_x9e{nk`;ZQd02YfuqlCvtF=mtJbaKD}R6Q zXe+mP!P8TsPo6zHbmT}&{2E^$pBa4`0byZcZ{EHQ3=VF7@E}1#Lc&0H<SNJxl)fI!2)zrT%TS6i^s6#q4PCp01~8Y%JW?)>cql+&p`>bQ_Q4rALOVSFKV|RBXJrw|cu(xThy4$a8^# zjUPUI$Sb_LzoUc0XSNxyv{}x9b+NmnOxcXh4b@vF@Ev>n@x$}^^`PeC_xJbR9UK^H zYHL?|2s<5_w`7URnl)=S)c>zrvV6I+mKK+vpWlZsUs@I}R6N!z-OkL;r(kX#{>1R_ zpFg0s&RT#DMC~+uQTYyOnqugw=cw+}xc0@wEQ_1D7vv4owF2@0Q&5 z^!7g7C8}NU{ax&u`2BMB|Nm@`h-K!bA?7-Qx zyv5JXG;Z3o=|b)CKG|;femTeJXz9krMgvpR+>0Cc|NmEAQB|d6WVGpYT&M^k_b0!(vC-$aQp<$0@W{x{ zh6aWoKYl0}7zj+7G--xqvD%$GcOE==@Znxj-oke&Sy#30?5mabpJ$VK@r2zvyp9+AM)fPk;XSkpQY-FI+hA^78V;%*>M|Doz}UE@5F}HMO-5A3tuMF+-x} z%SHDU>(+_w2#a!ZV)CA@cXVU&@s_x|8FzP;R(yFOsHCiX^jDkCTUA9x#>H;EhrYhP z?z*qcY-*;H$Mn$H*j`>~vjdH#(XH%^#1F|({1 zG(_=o(x*?K3^FgN{P^|j(Wj@UEh;`Jh-Nx*WFEM2LqbSM$XD#pu3c6(H9rKNJ$vTi zi$-(iQK%*T{M&7#;#KBRjXEk3Wtf?md^w^c=F7doYmFU1v_JY{QiA; z?Ey|j7Y4K0y>)+oE!?ze)6LwaOP4BYYj<~x>nGjXlKJ8L_x9Pdr7vB+yl~yRdz_g^ zyZih3&GPPaeEISvZ9SW-@#U5YdaAazvSwyxFYfL(KXmBO3J+nY4gqn!7=e`@%>U=i zhzJa1ba!``u`FV-E_-uemT7iX%0xDX@bK^zt5!Yw@$vE5Ja4cui~pHz%gV~);Nxps zwMy&qL=HuloXCg>1uLsx&Ci!ES)!o%^L$O#-|JOZuU`F=d+E}p4;S6#OKSoQOFupF z%(=f$R#Q`R!sN-qyJW#J6A%={6dfI1U?J1e(y}1`{yrafr51sWVzRQmlO_o<{J-P3 zr*7J;vuVwTA2Kj>b$2uVF*c433u9xjD19aJ>&wgLxz^=}jvj4oeDY}Fs#RRGX3esw z`C%ZY7o$;P4H}r+c>M84gX(WNp!Qc_V4#FWfda_QOQN+jG#a*TGmFp(+rEF@7LBlV zF`d`f$17`Sc)T#%k~T{~>6?v>O~LDHx-2X#0Tb0)Ch$FZ{hFJXm)B>m)zp_7Ne@4t zw?Do%di#XAb9GCk!B&-heHHrV&Q9Uw{_~G@2rAF$bLLRIduwO$^9PR}T~f}wpw!hV ztiC9If8B@ApM`hvPR(@cxN+*tnIoH0Pk*>ue*f!>(&{CtDk>_oYSunntb078e`CvA z^;Z>NZ*P6NS0HHpo;@=BayAF1Xa>*dQ!-OgQ87q8C30t9ZS)H>PiK;A6#m+gm|S(*0L&zPj&UE2ed2$=XAQ4jp(}l$e}+xI|>5 zQRSzUme$sV>(==_cnvlx^ZB{Cpia)YIhM?snVHKT3m9I#a%O{u@v*O|TRxWY*593U z^ZBy0)zPyVonxN##>{Bk2-4nb`hK6dYEItRbJy!`OlvtuPPms(BctQ6h$W>KPM zZcKx;`2Du?<~mP$j|-*FbU$1uCI0Byx7>cydo3MGnwl$p%cthPn>_Pc-_1$SqpkW@ zwDCwbJ$aJSxc*}L@)m)OpYH$vC;sx~OAZc>1S_tW$E5V$3oPa6-nG`C_j~Ti|2JNi z2`n)V2@O?LR%Slj#+!ZFqWAwi^FIf-Xd4?DIXO8s9k>qaMI3R9ijpdOcc+t?ozEdS zc=Ah&CEc0p-k5!_`unCZICX(;>#m10bWdKrmFs!@;m3-K@9$*)Yk$~p&1rV!!@6eP zsZ*ye+_o+3!Hfg;+kb=w24)(8#vxNuQdssaTeF4-G&bbz?d<9Ka_`&L-nsMU@##(H zmX)2W)_+@w_y1XwKf7=L2wqrqXkPx0Sqt|6Kihjo38yK`|+ha8$N6^*VNS1(AM5RegEQ(tg^3-oPnBl)_2uQ| zg~vs{F=q$cpWyl(cje=)hJHG zpPxQ;ilt9mSC=<6HFd?RRZgz1tb41zHcgr&wEx7Z6DJNFIMDF_^{@3`H}5>O&&$Ju zV-HgsWDNN4!OvfRZ*#4zw9LxNV%ZlK71gzCmsNp<%!Zpe3=Ff+vb7(6_Ixm}mp@-3bIG}MtC7|l<&wgX$jHt=e`-L3nD+Mam6eqzPM)k>uXBC+bI>61v}tt) zZCzblQ>IR}uXyqLHFpiD8@X!Ls`s|)`ugV&?0zr7#l;m65Fqd)Dm!g@q>fmhjOC$t zu}c$O<`(9?tdR9|b#?v0pD9~c;>3}8>|itd#JO{O@9r))mTmo#@F>QuHSyPzb%zc) zJ$dp(L0g;K($ccx?=RE+8qc3T{kT6r#wjE;6goD%V)g3e0}YG@hK7#!_th?3x9(j1 zmHq41t@E27QR>)KcS887P0KgC^$QlSZ*fkYC2(lPojWmqzFhYI@ZrOP$$XrG!ZvdJ zmX?+$PMmN^OH+2`ZopUQIGpp}p_;B7cpP8M{1=J&6y0rD; zV)w=I`|BhO5*U7ceSQ4@zWn?9n5Nqaq+LDlF@5S($Jp4tS09^fKNf$ZlHqM_oMZ6g zt!|#4ofjgjLCMK2_wFvysHmtL8xol>2XeeLT(xS|gqbsc-cz=+9=(zAmi( z`ij-p*Oy1eLV%f#=fH}<#Sh-R>0xAMOL%ag@xqlWN8IIWRZ31WzLa`(-D~sBH(}FX zKJz=2o45O$&3cC`xh|n$VQM9|mY~jHGN^cc`n0uMT%T+25n;t8rJp{3o;Yh(*OVzD z|E~Xfzj^cKpHD$)(aOr|!quy-8#fxt$jB^MycpCed-3w6V{q`~X%Sx-zHVN3^ytx& z=aG!3PMvC5=L#z163_74|2Z)KsZz_9JGZyzPnmU-*Vo4{zpWyCsb$qFEfsZjWlKv*PfySHwy*RHmn~b?cCeW}`N9In8HUMh zJUl!J2?-63&1{a*(X;>cPD}$iAUs?gG*5L<(IF{GX_?<#tq-Q)SO7JWPMzZ7EYq_!$*#^)E^R8e01p8F}6vQCUJ0c zFD|{z3mT_4Gc#lAHgN#8)%?=Z)7dL4D`R$-^}f_-+2WO(s~fkcqVdIx44c|tBK`9A zpz%#DEiKU4Sa5LgjF~eJ-nk=_mX>B zynFY~>3utBe&AB(qQ#376B8Rhd?<*Bjy9HU7nrzY*|J9u54VG+Jr*rq{PD?2;gFCJ z2VdXb_!;iKQmnRbBrKxS%vV|oN zRH|IcjERk%ICG|_w@t^5Q|HgSmy~>|e!6qP0tQf<+uXdpwUzZ)pDZ^wH#d)zNyp0_ zEn9XsH8EvmXEz^BI(YBiyq6X|(L0M&jfS@N z;oG-oztreiwQ5zFDYvCMP#2%$+-N(xfIv zW;O%ac0+alc}Kpzy*+W#BqmEs%Z0Z=HB8BlKYwaoyn6NMKqGU+&LY*zg&zEY5fMM` zt@-@;czI4G_!R%kWubPLMM)2;Ykx}7?GT2M}|&$|4bf{F@@|2&(T{`lajQ(R(VVmJ2HT08#?P=KukxN_ynjJ_+Gt5&T_ z$jRv`eSIzQ^Ru&O^Ze6;1)Qv|fCk=Qy~xw-A7#*%K(jAclO2*@u&LQU=b@=d3o zCS6$(xMB0=!{_b)^JHgdN4@v)(7tl*nv$uhsD9iYhoT}QAt9lH|Nm<5?5_tEyf=0f zDqj|~K6`GiwW7AR_Lp6kdO;KJOAZ(8i~)@(`}z5mFf&}z>g?>~;NdyaD{U?yCI;#= z&6qXoQ~JEzoSX%V79A?_aoW}M=~I!4nwpZLB4cM~Cuo8)Cr8J~*f=mcnwtUCUt6_$ zH6w$Vm>5IDi4!N}3h%ybX<_M+GUd9yKE8eJ+O;0P!Kr%2g9ix~R#qTmoZISXmWqZDnW8npIFx02+;4<};ItmzQ^0@+3cyjzm*eC#Oey7AL^3NY zE9*pW|zVhb7LLJ2x;kw)eq)T*->xv;u@5MX&a!=}JO?!54{R$mj-H$IWD*p@OOI)&Ki9!9pnjb%Y z?3oT4t!ZDrTwO_7*|6fn1G7{?cdUavd>`L#zyIjY&f-7TrzXzR)z|0$_wQfA#)uuI zuf;%fY?+r-eCFH9_Vx9ZtbH!$7r`jDw8zZcSvTjTOR%@5)c$L;3|XJ%`HDHdUun8% z(V~RZ)T>X-jEsynY~9+rf4_az*H>TfWtWzg78DdXR8?6iDJ$>3s;U;LBlhgv+-_y} zzJ#x@uIk>K56X&nL&L(H+}+thqtN^Rebry~SfEWsUH$Q?soDt}BRaaenwpxJWMpIv zvajh_SXwUhpKs^mu9D<*MM!ha52mK;R@}GZZ)|Jo)6S~Q_n5LtC*x+2`}9nP4O_Q@ z2Er|5&atmQdE&%@D_2AwK72S~`gHLf^=Ko1pYmN?SeE(DZsV0UOSrx+cCA$NDHFvd zcjwyGO05oG?-mv&Hdp6bbHUCS7gyJV_wUPxua9$0N>bXgb*o|VGat}ozM7Zyj;Ks@}zg1vJXi$jpA|)-9>)>*J5_sr(Eo>#whme|%$OazR1C0wrIU zYcVS`-+f({wp4nbUe23kY4cm(-u|(3n#krptApQeZcZ;KENq-PQ!*$xxbWwvRGqjz z5=KTwe{z>BUAl1DvbNdg`CVH|7U$pJ$HB|%nwqM*X6@REvu52=ylH)Frg6GK@iU(t zJ9j?(@bGZ%Z{r7oP9D~~>i^sEGw5q+b-mPB0t&jgkPwmguh;K?#w%knfxRI;E$!It zt=Z!5udWXFIj$Tl!tihL!{XlUf?M`3uu^_w>3CegtZ&0xmfo8MzuV$l_sR#}%P&69 z{rSyJ<9mB5KUW9|3E3DM8{d0+dU|Dy-t^;-KUPFWM(&B*TlJCQ!;&RSDpsvpwdco= zA7Z`dAAhW9ZEdyj_V$kZ|Ll%ghmz9LN`{JM%a-ktwJ!Sr8ujdRJHfu|RZU`W>pshk z8#nH${QT^rimGa5T3Xs3@9BCUy-S?my?ggZss8`JzhUXR`ufjnf4y98qp7Jmuf3gp z{kCn}t|phZ&6y)JZ|z!L|FE!W-+#Z~zy0?(IXBw)UknEiFK z%5FUezP-I|Sp6+$p||+Gz18ji{{B9E|Gxa?WxmoT1_d3(O(z;PDxKsK0nXa zz|8E}ionGMUtfjl#Ox3_Ki~d%x48a>+TUebmt5AAK2_rVqhBBVzWMaiN0*j*OPJ@$ zsQJ(9xpXOLLxc{f{a5_#OlA@9hE=PyjEszKE%jjjf9K7Ue}8|kSh1pE=T6Hzckdod z+k89q%{DJDuR~W>20wiEj4eGq-KOr(j@WJ!hw#q|En60M3af((5IZ|NA9qFFkhr)$ z?eKLE*6;u4ELhOsJKHSr>#M5)0Rb<*=xAzc-q@VZ?>FDB_u=98$0sH# z%YLhN0o5mZlO|0{NJ(j#ZJrNWIN@_#QRzX^P7ZGF!!Iu{fB5`4J6}6g`Qjqi8+$5^+xTQpm2BaE^7Luq`FXaWd4xTCY|L_Q zG^C!M=IHIc`f$IjsA%hA_x?lIuZvezRTY$%AAfYTTTxf{ZsPGJM!p=G;`eL6%YqWg zlqn(}UYEFx3a3q(!Xhs(51P-LIdkTQEnAK(a_u&#|5vkOXg zw)}lR z+19OFH@ApA4m6cuwtDT_qX!z9HfYr*E?|evhc)-6E9r6c<|BD z?vFRq=XX9mBc^B@Sz2nU7q_Rwxt;IfzrVi?3=I$NDt*17;Gq+Erf~gH3mHDpoa)=R zy!G|@c-cEeHv)-%blIY6Q@mM15H#up1=m`Q@?!4sjsge5)zW|?#@oo zgkVli&I@4{rz1XLVPc@T`}D+9L{v2K+L}nv_p@OG8hOZT4BW%1X;kn>PnWL~t+!1O^^F(kYyn zp3ZJ&x5J)HI{d>BIiWwU3YYE8Ez}IJfZ}Tot-{L&e9W ziSG*BI9|pqT(}T4UA8V}C#YeyCSoH~_O&&Q+qRiqzGx-Wei$?@BP1*gYS{1DW3%CA zPF>@>%gg!qM`UMaf;uA-RwWtB*X$PyJ-+ssTFV!XojZ4O@bE0ruIOk4O@&(&GA;L? z@8;>r37WNx-kx{x+_`m!^TK^NGG)zXgJv&4WB2-Tdm5%r74@5M$15%_{^ixx?w1vF z-Q3*T_Mch28Z?cZIl1`xIY&oF#&hS+`MAHFXd%O=7rU!PSltg4X1{*@0_BBida+&L zxxjvbOCCi-K@+m}ZGwzUZM1YFTaR+`ipBCMHHfTl;j$6uG4< zR&aoNEDsO2PnPTQ9V9%>1=9y#CKeb|)vN1!D^tgwY*P%vc_6JX&vPw!yf`$p=>wc<&7QiiA zEa)WF+1-8k{r>-b`~UxwPEAcMC@N~&zu#U)R`zB4y}TAsQ{w8Ly?Z}ibeB)Ow8YcL z{pGa^8@asu`+EQW{;q6bAkfUte{7y@^@fy_LT>ML+&BdL&Za#+Gt>CT<9_=O4-PW( zNSSclulucQ_y14vMyt%eE%IPTKKxi=QTxWOD4y_Dc{^8M4 z?j8w4rrl+4n`Y0JzU#XMyxu5ts&V?cgd-h-bL*C`e5a$W%?(=2a&ofz!WAnz^!NQ> zim&;|8auUF!0^!1BG6K~$?E=(UR_;1Vd~V@)vLAt{d%q6BWc|BvZ93%XPE; z=MLVzJNKo=T_-Ouu5WK{HeX)uzqtPYKagL-)?+x z+S=Nn*?&Dfz1UA;_m}(y^;5P)1Oy0xszg?9F$3A9-qjx;v4X|`KC@H~D>O1PGaqg~Z+Cc8>gj}(lp`fJN@_349<@vmD=sZ{ zb#!FRyT9*j$rQbpA0HpTu`!uFLPxBpxA)`v`oG-k)~%Z`X;PAvRHj>Gq~xSYlP1iW z({trY$cCFaBI4qU_w12jSg>Hhf&G6sHa0SXR&|!V2++{fG@LW1qwDa)2fx0){_ySF zv8~zH6;xGQEsLKeTwLS|S_1XgT2&sjzS*OD%Jk{V3JMJS|NYXw9Jp)FhYtmRp4sz2UcalW3p9on zbkd$=5ls59Imde5z*1fS679C#+usrWVvEv@22VdpLkj{apFW!QF`Rqu}A0T zTK{;|t$!eGGic!Fy#0R}ZZVyPwl+8Qy~dX!($dua{rjC?QC+QUXej9B<_0QI?%cVv zVDaL^B{r8_FBtJVd35jCv17rOEh6T5cM`0+ZdCvKW4SH&HfYrhr?A=s`~N@rb8>QK z^trZF{Q9B^nnYP0zTPP=PHuk9C(b)}?j+>q@=8k1EVE>5KYVa+_4k5jXCy%bnxGLs z(`>PAd3U*ri$9lHvSmumKHD~bzWkm&dq5NUD^{;QeD$hmx48bY)rAwn7Ows$?BsGR zZL^?+M90t1&y8hW*DPJOEa~DRSCIdWjEq2|j2}J}XkAKrb+DPeps483i;Igvbya?T z{*xz9K=a8Pwr3|(QIaz(;PdlK1DQ z)HCz#<^TTrdU%#;_JVcm`anx8&(1ctD0v|unt3S;l;xB@fB(+je)!-V%ix5=|~HE~`I3?#AZk>NYhsfl9xOtgJ&vkFv6| zvV!KXH*MZr`0xB<-GG3A1N&-!e>kZ=-$0g=q2S>mR?sq^r%#{W z*j=taO*i^j$r8QR(@&L@l$g@b&ug7OUmmpVCNZ%QwA$?R^Yh0W7@24EdF)aIjVww}u%Yu4z1 z%GGu2*8TW$*?-~s_2)}$E}aF{b{$8KA7}TTu6OkI_WX;>{pFWEHt0J3_~7;Hprvmb znwkff`Oe;ud0B0vcIuPb!otEC=J|4`PMrd!&>OdI8Og5nT)1!{XkE;tNkV#YdpLrF zgO@3HPW|zt;>WLFpr)mM{JtX(4mNL0ILM?Ev4P=mJAb;B+)GE$l%k7K^|zb?3mFy` z76aMV!0+$xAHN=7-`mbF4_XieD)DMd?y!Q!FVCGjXJBl6c&2gsf|V;zmZ(ewEiO8H zme%F+@fk+3ns$Ng0aCnqP!mH(ygv-8P-+9~hu>}>Ao;Q_4_30cCq_{AFu zCy&kR;`j6EP4AA}oMtGy^fD-p@9(PxRWnzvTq*eY$aU8&Pw_)Z8$rvMK*N0Z_tnOJ z%A0ItWCU8Udw*Z;!$*&p?CtF>tgVe@S3BF*|C15dk87DfUw)o_J)f_y@0q#Q;=jMY zKfc6s@{4KrT-Ja~q|Gt0v4J5WppJx*?9$-5w$)PH_<)FgOEcaH+h7AT$;&)wD z)zuH*x+Uf3=lA3DdHdZ@dbTLo$nk^H-q+XH3*X zpD!O26a;F+?JR!&XtKZE!5xK7`FkPYcS+_pex?v21b4itOv_9-h|U z?~<9R`S17r|4BbTJ^f<;Rqs`|{ytD?GS8;+Qm+2vh?tn3z{PF{4<2MZ-Y1)EeZ_QNgF@B-G1LlcIjbI z@A&bt-VdKYA5NcN+gAJg+rs$$bw0MWtbXX? z#lSay9ytc2`H8e1Q_PacL_AFv=l_@Cr1eM(kWG7B2b2h%*BCzn?ot@0l z(a|dE>dD}h)tTX-{%gPd@oQ_N7p_~^mwdbrl<<9yE9C|R1~MimC)a#DD*of$?)NkL zE^C5{&E(^KigtE#pFVx+Nz>HOVCX)2XsUL2!RKeb1r{=(YWUlmn=@>y&Axp3B5~H; z!yUBVRxs;u8!u=WC?-bca^S7dm>8L`^>Mu~US#Cl+aq~Gdp~}0aq$eZT&Zb#v9})1S18;WfF8T3A^*1qN<(HWpCI11$(s3MeTt(b3TXRdO?C&o-7_e)iqn-R-L0 z(?HvktjpgWnPr;&VpH_p6Ng&41EZpDDZdxsU^sW~TtHaZvHSJ^@4ic(K6NT+W{rb` z!@G2O0OaVnu31c^5=1kD0Di(J3@{`&z zAQ!#AxA((`4-KuYtb6wCSpcfmbS^P^d3h~Zxw5nP`MJ)!Paj%IcOPw9y;{4dxOm~B zMVH=uJ9_jeXtCG+{q{{wO#vYxEsD-<3D3^VoMBgMm6MZGb>&yFQ&jiAsRB-RpuGed znwpTFR_4YjQ$%#4ws7>z+aK$bwcb$qIW0>1Zg1?40>-Ycu7ZMs1S_t`p!x6>D>}Hv z^%9PDi85{X^zmugzu*3U*%O9@ifI1 zB_b0)R@lt3C}f&#o`3AY!DdiHC+hl5=8Ed-qxW`1bAD^p~?{ zNwu`Mf4*+Nzv?U3t5>fIN=lC0um8`>&dxqDZ6l}Rp^HZRPA95w>kqAt|Zp<>lqc$9g0;Y}wK>Ws1nw zjDh08Fq!Rc?Su(@E~jlc6yJaR{=I$a(xo@VU+&sv_2yx+d+yC!ZcUK9&h?LYVRsTtEGbXG1Kbs%p!SS-f#MqbPVRu&-sI{I3 znpzcE2-+#b$}Q&L>B$)w7-(Q@oNOhO=#ZJI85A6BSoFkW+2W456P4XT6KzYEE)56^ z1G(a^9B7;C4<;rigNzFb5|WaJvaSmrAMa0ob!DZ5eVvV*ZIz4bF81o5pHvwVUR+q{ zo2Ra*`0<|eoh>GlHEv)3Kkv$aIYB2YG0-xN_<{n1H*eq0?EBcbYnK&hp)_b`N_#uI zUhFOx<2>7#q$H)3)YOHmS8JC@b8>QisMzye?oq^w+q2iL(@RNBoj7C0i4qZ~Di+Xc zPez74wZFyu=i43ixBq*jWXks`Q>PxhdR4Ui-JOG=p6a7Vhe}kG*e+eVv|#!2>yM;A zU5P)iYG20n>>sb&T6cf^_I17Kz3>a)n)+^k*m_L-vXF^i@NI5oO-)W)TiYc|mv(Nk zRa}w_N*fFej*gBmuCAUQG55mMY12SMuOeb%px)Pp4I2`ygan0CQ&T}}^^2qvpKjMY zJ2l7gY1EBxP4mRVZngF*=lp)Ap{coW%^II4Z#fm$x`Pr2LxZ$=Uc#dzodF>sDOOwz zpd}4qVPO-dO*?kDoj*Eu$!sl!w>#%;TfO$|+W%WE(nMV&BWHTlhfC|d7kIkY?B2G- zgQ8(4qJKZv%ShX`vM{PB8q{Ufy4+GC1Ztia?2KVyXFq)KVB<>-hJQPg+Sjht_3`xu z&FnTZvv2!tc&pepH#~aw?TT+xPOka)@1KXKXXeK`RaMoq=X}hsOtPOo?VqICzs>n; zze%zGNKf0fWXTfWWC14^XOQDN`uf}w6BkCzsX39f5!7_Iu(m#Y`t)ko?X2S4o^5%U z?K^eKwROvL&u_G<%FTOh^L0IU)jnfT0rdXf-sY|@F6chDh=_;-hYm5ldi5$-D*DQI zm7JZe3sS|-_FkWK|M)XI)66ViQ$?2=&`5=Xg@uHbm6d^^VWP?LmzS4sOghT7CT6El zJD+URlqpkA{N7fwHoJP=^0!{u#YcOWE>&e>W)2JrYLYh30}ZB`nwl~&$jZusrr|;J z?yaq?XU?8g)Yj$(4L3Ua`T0#w=AIQRW}>YB=6Bm|?py12zMXwq!NJUO{m1n$F-({_v(r5P9%vb}3?F+?P>_UO zjfI-e4A7*mh=_>E?|Uvkzbsh!-c{0n%5xXXu;P0E*{81w%s!iU(MZC{<8|OnwI%J^ zT3SveB_^QJ`(s9LZg1z0-j;I^)X}>d9$)(FWArD(y5ig0o<|(o_TKNymoKww;!8_Q zSFB$Bxc>i}o5r9;bO-ETH%*>2>Bu)VXCI-bS?VnlzB#7OnjrV?Sg-ViDN~M2(F~Tb z{C96}HF&o4!NF$G!tL9+cb;)&6|e8!w8iO$P|vcyn|C4>r3jZwJ03r55j6w07C@B! z{k^@1SBI|$jq;p0;Za~AGx6Kxi4z@jb9K|s&FTF3`1s@H^Xr-xE=*)!{?|SHmt))M zr%JZAvcG=)@^M#O;=aJh*MnbNM5Lwg@i9kN*QJ;H|DM+0|6up~eTNr1w{OV1yUVQi z>a?w^*WPu%u`4ohedpm@cg_XH#q~|skN@QT8D#U6DJ|3Wyc2VjcwJcRT;iqfr;`(t4c6M^0 zwF*f|N|Po{`tax60dWRGh7YoYE|BuV;>+W_=OjKl8;6L9Ev<0}0U!Kq1-MubR&LksX z@^tel)26k}nkCiM)%D}NY3QQYn%dfj4;*0FxN&1racxPVptLkMGc&V>wzjcs>jXJa zm2VqSP+;)u`+NT4;?I88&*ba>G@hMpo_v2_ZBq0S#%I?~lwB)ijSb^x@bdNsZR9<2 zfK%*@(0ZZrhVfhQhr11)@wii%o$Zqe%1-HR42`tJ3` z-~MmQL}hogo%7eO)dkgA@Av&)clG$YzE}BGE*vjqLY8s9Jjle%{P4kp3z@Go|Ni;2 zA?vDE&i#FJC$27=@O^LPXEsAa!#~F_FZZ7~YZjMWKYM6sXpfAg5GV&Wv2uf^sU99~ z2aTD&o#*W9%gf-RckwG|O3pO5fW?GuC>;Py-+z;n&;m$sa%xo9}pbOoSU2b=GInj?XWcoptcU%)J&%;jo8>&&FfjJ@{R8`%ohK?Sh+qh06b%$~>{3!#z}C?vrCPT4SW)ucjVc>s zdsUNqV;3Kr!60@d!zFpK7Ry1txTP8%!X01wc#MDlJv{xVp@H+%PFdhue5T z)!1c4@0h|u!>Vs@IP2@{E2^rDWcd~|F*6(1{wjI$7Ny88O^ z?kaz;H^Jiety@m+?(HuNBsZs=1TD4Zb98j{X+N~0@bNLwj!JNoQKV~r>Cb2N=b29TU&QtxhM!axM9A9yNip0rKO~om)C}k8$mmq zWMpL@K6v0Dem|qlviRA8B}-hA>Mw6PclomLTiCLt3SwuA*)LYNa&IWCrzH=vL z&2v5;o+IM%HI22uzkw#glWfbYLtw`|?YJP*7lCqhm80Xcn(%^N}C(Y^w`CJ@MRA_ji`v#RVE|7gA;|deXCdw>4<< zho0peYP+B_m z$0Ca>|2cVhTBc7IS5i{4`jc?PyxEZij5KHB4cBFHzprf($?nYm$!TKA^1UPc=+Rge}C_&{;mfaO_;79@8s*t3mRQ} zv-$jkhYuSYnc0nGm&HWyD$xW@5I#RYzx;+KGdDMPVrnXDd3pI9o61Qq3pBjeopfJr z)U}9#!O+lf#flXNZfs0GT6V7V^|gmTKR=hP(tEjRkrHTg9cW)Ns2+LrC<#>co;}O^ z`}_O$$&-acLPKZrO=b#+i|c#!DhssY;NG4}&={X}%yucg>D`r|pEI>NC-=Qe*T*q8=1Mq^^WW; zetyKtuEDcK0JK~JbT~#&&l2-O5mn|4Bj3Ox6%`ehKh-g1iUwJSb7;oP!i%Y%mx8Rg~WD=I23sLo0a z@%821mVciwKR>@m(wGgjjA7n9xt!eGhp%3B&9kje`u^^&PrIg=v{?>l^v22A*)ZV% z!?ME*HMkf!Tmy?1ZrL(LLsN4ix47Px7dy6WF=1+8P~hU?O1ZP6P(@L(Q9@EuFg!dw zC^%SoVaHNsP0h|Xx3+diL`DiSxP*sK*NNLRt2zH;Tt ziH*s}Ir@(a->Ccht8~$lB`%;%i)^=V3Cs1ngPOV^p>^^5&y`q+xL$RPUZ&~g=i=hB zVA(P@Jv}{LD?I}PfgCewQ&ZCiA1gTc`Hz2ico?*T%X_-s*3j-;)hq=5uhKZ8d0nnBM)#dma|;1kJsGHuoQFW`F$h@^UBkx~i(GN2jK0g9eg{ zii->1-Pu`YzTUk3@WCclZqU-7n4Lwf=k7QL8o4#TWYFlE1X^&xBWELFTm3EPV&V05 zvCRF)AJ?CMSO8l6v1gABXalFIsp%uWP$e!dF3`LLXdN$To^E%!zFVJ6CuG6K!{_ts zkKNdqoT+q|Peo1b(8Y^_phbeqd}n|7@bIu(dcemoUygvL-d+~$<) z2kq}YaOsi|=wOduUo=5O^lPs2$;!xpmguIWr5(C-NhmQfF{ool?x9165;8M8&z$iA z)p2}$d_L_ifl~y)*=oY{>Fqmq>=5I(+f)8NZn5t97(H>&!ub39Y6XRaE?qM?s-~yM zryahoW#2wK(9Z8ur@ZD^m2&<6^O;{Sb{C7k|M{}-E8_2|s;C?|c#u)rJnzUd-`Suw zfQrs-TVBXKd-e>J2V!DlL0jS1#O@YLO-&W*+VS<&sZ*diJ<#DW>(;HS`1HiHeYS4< zA}b+K$t=Uc&CT3>6g1lyU2^B^>+90FTi4#*mT-{i#_ikNHIHr6f*gHDNrsVeQkpb;+xp1Lj*Dk9qTel|W?J9lE79W3KtXy7j`HUG7pxHRk@(>YGQN!F@ zCZGwhzP>)$w7kShQAx>8RqtsEwzjgM4XUT6YDdp?;hsEwdOK)DZvX#()^Fav-I#e< zt)il$n^`b>ed+Pto*~o#85K&W8)6my% zpE^}^)8@?!moLA*#zIL+sYUG)7Z=xqj}C-g zem0-1Rg0u?+J&$^d<#~r;E*=UIj}N#`Ga@w`l7ezEzG~aFKNAdc)0lUb8`=aruIPV zWB&a3xM9<#L)-7yar^uGm%O^-`KI(*Xk=vPfddYpp7;5Aw#~bDTZ88BLCv0P-hopp zE~d;{l)^Cmv}-|u!Jj{W3Z9>nee(3_!2<^v)~#C?vA@oijZdb7k(q5l`TKhT0U5i> zuO07~hi)-aQBhGaG7?f$RJ?HgdOPUcjUSJ=&&)Jleo;~Ybihz*YHCP$_~+A8rc411 z8^_oG6`ic+D|EU#zw?%)C1`YT%^DrhflGpdf+Y!I?2q2R@4vb_9JI6j&(F^@EQ^;N zdA()x=EG~Fw}1Havl!GGFMfWmb=EAYJ$v?m7aChwbgb>SZ9nXolA;1SP@tiK0kjnC z(h^TlqSevWJsQOB8hFWdcV&P`^SwQlprt5}54CciICrjX@nU6AE;UR()=^t(%-0Uu zIS$Gm&(F_y&&tvQ9f*^E&jyr3q@<*net&;?nf>Llqe4a+zaU%yxHoxp;Pt zucwE{frp3NA3lD}tg5OC8b;C%TQk8UTlHwq_4V<|N4rFK)c?2J_v@85Xa+BKS4pDE zv^{%lVs@2q?%THyv>_cdg#6$ELwb5TXvpcx6_MIsUot-(n|A!MqOLA4Xr+H|uWLnx zg_5#zU|1OFBo@%jq;cAr1$QkqR?S^}(!|y9LH+;V@_Y8~efa);zg_LG2l4-Zi9b6x zS9|M|2?9+W9UMP?{5Wv`zPy%}){kei^EcG|EPCFGOm>^N}ss_3s@zk2qncP%>Ntu_g?b74=-&q@D1tSl`htb!*nFQL~qi z-CdSj<^x)-Q1io}PtKN0Z+bVVAAS6B;_q*785q>n)uD?j*H)chJ8{B-MRlZQqt1kU6H1yOU)ZZt~MG@@(~vid2nlM_MhEdo*dILCK2%(BS0R zv%Ja2`<51;2r^o_Y86-Yw>O~L9<)6rc6V9gqa&TY=gba1{`le1QSO%3Rz)?nHv8G` zsi~=xzrK9+>JX&cTu@R1s`IM8zPkFtP*qjcqVN$*+1p!3-g zd<|+{u<=T@=tgf#cy(o^(fou!-Oo=>3fKI8yB%~smzZ7*r~`13O|WaxE!~x>m#<#E zx});5T1`z2sKzd^kXiU!Q$xccK3*P_31+Na@NHuxXp!WmO%vwN*Wa}6-QC^Epcx1A ze7QAi)~I})rm-qgNlEF$)$n*w{R|ode06oTtKa*tA0NB3u(2Jwe_uW^F;PQ9!{PnC zy@~1R?a*zO28M>2pFV>MoFhkEjvPP!_~GGp4PD)%4UEhWo;_>3xjEh3D%v3?2DEr( z;{5sjCnu{v{_^tji)(9VFR8O(XxN^AKk0a%?2dwmOuxRqZkMn7!59}8C*-{-Qb)`s z_SdWX7F)gvX})1wV)|T2G&}jd%>bfew$;`VsN?Wu6o($bn$dhgDi7$HeX&puge zw`G2Fy-G?;Tj$k(d2vxiL&M|H`$>zW9u@6Od46tg%h|Nao|Dxk_Vn;f{JpQ@W0Owg zrk0G%OhHvuRina3E=8cS;M?2VX2%acEbs^k5xKduSl!Uv{CWMmx<4P?C(WOKKjHtM zKQ)IQ7I*{%2pAd}DY3D!JvrFSp4;a<4yA4GT)9&7I4UWM5zB5*$3a=KI}p6?Jv@7yDXUTT@V*MM6x2av5c1>Rw zsq9dIpIX8sg_n(L{t=4%mY&slM}m2UwhQl z>`_@I5)d5h+|<-`;>X9woZUws9Y2t?@dRiq%%s_~wLeN|{G2*xj?b^Juiblkdrv+- z-rxFe@~l~2YQD3M?7z6X^7FDALRX(@>FTQf{`OYcw)&gOT&q&0+uQTiLqkKIzS~xP z(EtU{=JfMwSFc{pUG@Fd)zwSl_tz~6UhbE2d71B$EnBwuKF{u1!Lq}$Gt>Lr)d<u>&FS`>#t`sWMyG75aPeO(YF5IoG))~PVSMh z40>_@&+&fwlj~x4do1^xd*VPN^U1rr%OyL40#Z{|Z*ETKzj)z-!r$ND#U+DXTv#q% zyQU^5C%0tHnl(qi+SL4*aO3uEVX{rYCX~Ow=efqNYmr8z!nV~}K|zxovbQuf zF-7jF*m!0OlYP~f4jy^Cm?ri{=Li`-eX^g`IH8#f{rEnn{b=FJY8?TmTQELSYcV2n*Tf-!SWYMTUBR@ZCk6_ndSXDFSpWra+;^gWgEGE(6-qbvu6vl zva%YbpOcw1Ws1tTDvhp1DH9{stzu+kTvGh}+#i*zckaxwsreBgvs_GDZ@PD%yuF`^ ziOG+Re9~q(;H58ygah=BNDl{d@Ac zxz@tj+1ZmOO}doudw2Q!j?PZb!qU>*FKr8!Eo+mptC;~RIh2)^-Pq=CH7(4|xj*gN z#Yul(Z#OudW!^t)mQ>NtPpL_%sUUxS{Pam_ecWE5+dnnC7Tsz#ix2(&{=WVN{mPS* zRE_T6nmuENM;ov7vHqRz{c=IMx{Ix*efd&yX?3{%qn9r=O9bwon`;fqz}jJJ1a7KF zUQ@40)w97uZ6nl(OVIX5o6iL6pt zXxaRE)~hVVtozGeWq5Ay-F5tmZobyaym!?(tM;gBX=|T6Ia%Fvf8F1XMT?X`uGNp* zlkvF{UgpJ2Ugo4^vZ9&w>Jj%ZY(+ zeF6goLB$y;pe}4}KK*pkRPAsfv)R7q=2{>3X~+!-4Ru}SJKOEb)vG7hMsJtOS)bb* zzq3en|C$XOCg{ZOngZIKEiNv;lE-42Stic|;px*#(lh)1{HfVg{M_%--styY1}c)Uj!k z(aw^WLLWbVRJ5)7q5#5nc6LGY=ekJU3Ra3;y)sY!?8jGEwKpXl4GPUaZ%aEn7TdV&*tl_8(WCH*emNJ9qY+Ee;4i zLvP}|n;+XaF=jZ1ewr_V24HXp; z6)pVwDzu`i%Itf=OgD~$i(I=uyk5VbiDAu}H6K1abOy~I$w;bZSJ=qCdHdEd|O{_lJ(UDO{R~K{|9;l+? zar4~j23ofE<1zn_pFb6Kba<+&sz4`ufL1~>GczwcyjY`aQs!B|W!_$13Awqw=K1#+ z7(iRXLsy4+npk8$F4_rN8hGf?AqEERur&uRE_Rpf>zZT=Iwt7a+Gs&}dH&qo+`7uL zGBc391rMD-{Z<|~4a=!hr%D(mvHbe}zF#|h9Y@aY%Fk+``OE9;;}2iBFkvCb%4eW+ z*Q&qkfwmoGUtiaF{4w}kqCY=B8`k})*l;svne!5jt}O9cbA8Uwx0koGvtwvj8NA%= zhx@I-D{3yFQ4EF$$9kn_7$hBw^J9aS|zWdbFKie!-eGJwJX_NJvW?%ZeRcAgUeq;OXh=MbNC55 zO6t>7Z<~q_4hy#KTI}uTcWi>9GpKdHW5ZK0ZDZ=Fa8S)zwu|QCX0F ze%_^?{y;lByBYTNb_@w0A04%*{bh1kFwp1Z$&;YNq(Q^bg^!PYJS{9N3_2#;#oaym z$A^bJZYO$prOh6^ySuyM*O!$CdXGFh+C6dFw6^N+?+hhkkAsfRK5@bWv?JU+|K5?= z=J^+vdW-May*v3(3ui%b@#5MAnq7;QEV!8R>qw_CXk8Y=gLe741J~9@FBO}iqtJ4o zTh%5Cwie*fAtwF!eV~!5Ns}jETpg~z?C>Iq4W+NcK*!+~78Wu+<26C8gcB*Vjz0!XG-qaJUbu3_B`Qj)q@-ktto&op z5OCz?G)4x{;?4PWzd9dwXk;q4fQ~9TJzf9!uF}^(o~~TE5;XJo?*4xM>gsAX<&HhdFP2+>oqksL1(pAR9GB3bO^NUkC&I%!piCq=!~)! zPGQiz@v_59G`c2bD@}g+;6cK_$2pa94ac7rfs(Iz{=Eg&-`|}$bEaj|B%#ZRfk9s$ z9Aw_HYZr7y#Gg-~t%d&c?WX>2ESouVCTQL4yZig~4Gcct*q97jbX`?tm8+Y(?8=pp zx<@i{a-gFKL8k{@SrG_YPr7-tF=+dq%mp4TU0qkm+62(?DVsJKA@!~KWMySDGBQA6 zz|6+euyUoQiK(e%-<(Ano`N%d&d)aI-?wjHKtO;)Rn@K-pYN)tE-rTe$$f=|jSX~C zGLQQe6R~dAK--E}{FAZ|D$O{%Zt=Ua#NVdde6N8vR7*-q?kIlFx4-A`!v*2%<3Ov> zr|CoSp&=_>l@1kO?FXT*{izk(W=EO|IYdqH%-9l!rtm~&4lR&r(1@K*kpv8#(^W%uEj-AD5gQokNEY3rb3MZrWsY=FQtt_?XSA^i|8BKQ$$< zu5`Yf@Z;4slk5MiUT^!ur7d167wDN+{7PWk-nvTfNi~rI($d|Dhuaht6&(|@HcA?& zHJpB`q@d7n@I{JyWu+x(d|6&z9(3kv{J+Qj_MjaWoSd9IZtAs9pFXYl_C_)(DG4-M z51MjUR%QmBTW^vf@aD~%AMwp>yo>H8q#XJD{QSo3>v}Q!>twUCvOawJbZAZF<_8ZR zC~RBKEW^h>apFYKI0O?D6X;k8&&g_ukB{|k*s?{$TUNx?bNYqbuO2*j;4dvI@*?Qg z|M=YNeWy-&&3vUCJ-g*v-BsU&*LkaFhir~mBX+j^PK4}Mm)!Nf6H*NW^ZGVyF!=K7 zs<*<#XCEs-tF-NYzcFT0o~#R5wwm)nPbsWXJln5+1SW{_NQO`nU$4w;Av6n zveV4%hY!BKzFtsTx_ieCi#-(|nF2fG0=WI(3v{f+1$>~&TWgA zNukXSe7qiCfAH{O=d7>gudZ-jUhaSV%gf8Kc>>T1glFgH_t*aZcJZCO$W=cRk7buH zU;fFg6B8S|RBpl=BQrC%_xJWroHq{?HOmeQc0Vimn{jrZ?8(XM{u>exvo&tIa3SE! zySua3bwu`ecXNX_kAL}60&?AfBEDApnDNOdz2Fs8M(Q+Z+*CM z4zzCuwEy|a)vFKRzvtK2*LQpT@xzCP_I7qACZ-K(XQg-~3>ZLrUBcsQk7mS(xSFnY zG>ZK$IC;ze&XZQw*4Cg!=QlT}KPa#;vOKhJr*Te)(wg|q8^W?GJyv*oc}25d7=zX=ojQHm zk;Bo?ukXmCv**saIXN*22@C)9EDj11x^(H10|(>mv!JC|XU?1fO?@80uc)cn`F~fQeIOTT{ZfN}e|2zBP|Bm{%B%W|iofTdHJmi(r?b$i zRjUF511~;WI#pO$n2{kZEsgio?ZaO>E-hQKge5sSxiOpL!%M3mYd+^0)Ai$%{{Q<6 z%H9z=Viq!d3=L<~9v^P!U)%Tm@$r5SU*Ds<%in|QvMEzU8n3IWsxmO-=H`N~yEt=( zM^8`h&vi95HKWSIK3ngdp000L`YL3~v}sBf77}`TdOqzcQ`*|t_+%^^IEB>`uC0mO zux;Bh`T9SO;lfKbB(EyW?CbAm|B(41@voSrXZGnmM=u4Kuk`Zrn$(#hB{1*KHT`VA z_*d7iDX!8>ygfVX=d>1ndAkMv^X&=>3Jz>aJ^kS2%aikkw;6hRdcL@_aD%oxXBKL{d_6#hNuDGg#FvEF^Z9zjw>X(72If209h7 zFE}K`rL1h*iCtP+TA)**)~wMD3P1f62H8-$ic%S5+TvK zNaN-Og_(7~zv(g@xNsq0*|K`(8S@1}C#L?nezr2_uAHZGr?BaTz)PU@N-nOhj**d| z-5j7RE*?I6rnc#;p|UdbuV25IicelsYc2gRc4Xn=lDRMM@2_u8J<7|=d+_nc2~(%C zIy*c6`28Dnghs{JSE4s^%s3SPTzj#LLlJa19ccQqr-ujRKW%O9%*@P+|Nm^cxVeA+ zUbSk~r{5d-C5>2w)%{u~P80;44VII`qpPdixxd`2jFpWo=~#~>XwP8*Xqx`(k%j5! z=YiIni0MQ$oVWYUGhHvXY58(>(3EPZdvl7Fy}dkxgsjiyIhEZrJ?wUsy**VQYu&Ve z@x*KAr*vw5&PrEWxoQ=7SJ2B#swMC4NP^0&H#avweDOkKf`z!axOoKA4ztG9zqc!_ zyCF5ZdH1`zt*M9dyrfk{=Dvg%&cP zB|V^B01Fo?R(*ZN%FN6h5fueGQV@C*Kw~50+^-Enng#{}mzVh-{`B(#c}tFNkE<@?CX%j?7K z{QVEl%rt&+aWOmS{DR2MX$Mc8;z~_T<+WqK^smNb>x8}yxre?@47)DH%gft%-Yqp% zl~2}+)Yy#E&w=&;fhxOYhcku6x?7vs`9TLQ8mFIg z$;i-<rYhcs8_UOVT>7&Pf9qqQ-z9cg%>(hG01IsH*w&&gL0&PNg zbfojg^ZE53zPt=B*cqdtt-W~Hu3Z;Ddls4TuSy0TU~r^U_~Fy1toix*%MJ@lLv{;; z7T$OC^gQA3S+3D#$vf#~R~HvU!=_D}t~5_9&C1I9a~-s!^Y8EPl09vcT5dhjGc^@G zu-wJQ!a^eXc%SHvxbOK3Z3V6w>2i8`dHu=uSbIxP0<`9Bie_*?SXdkMd^rsbj*S~P zDouXf)Wp*=YLl{-O>+8Uh6cwmuhH_NmO%i=fvo;q#XwKezi-|{Y5xKPn7|6Wh# zAb=muSz03XQ zFWRs{z&!8Hfm2hp6Z7);SXo)?dX64F>cp-d6p{?;4IMh<^y9~mk`qsFiHeGXPX0c0 z$Z1X7-dUi9SMNG~mZk3XHxSn4Efv=Aw0X9C$@;R8{p;50fex&A@gif%^5x0L`(zDF zOmaS0u6V1hyD~*ez;0^7+wkn)me+0jRgOzfnKrGzw<%;i`8FC9ex5~{v%QpRV>#ki^pn2`;Z#fp$*5(-p zFI~8h@xgM%-cF(CXP0f*|NIwcY4GumTl-gDfAmks)GTB3PV)t~Zr%Fu<;#-Iq5-;~ zQ`A8BkNp1jwrFG1`n79yx8>jO1Btx3vGMJ?-;%DSBD_({zJB?_!0`V5{^?Z)o7TN! z68iP)7mu6M*08rSmq7<+#l^|h{rwu=BWdjRVsV15?pn6Bi`dxM7%sd>Qu?H$t=(PE zyE4=|WAjq&fS?fXw|905&zdzWVt1MD<%J$+Z*9$9xN>FZT(6GsyH#s4p zp&w80DtXBi8ynlWpY_#$6%`ee2uTx5OUYHMR`E{C=@MFQo`3JbgM-bWna&$;*!W|u zb3ak5p1ZB$%4Z9|lDoxI0FiBjo{M~uyTi$Df*QO^VG(>OD1D&m*`|7n_!U2YV zpB|RZoHgsx`8JOHdwVh`_^7L?Evol|eTK z% z|Jm8*#g(%O)YXkaw$5cc`K3cp`A7c=B_*XLaue39TDj7(q{M{bMC$2w zo1mberp``IAt51_Q?jzMpv5#Vf^K}$P*P&bF_Tty>k-hX|NCp}os#ZVbNe>_%l6vz z?afWl(MLNaN;JCGuGO70ckagY^K#3a7i#RhtT6N1l`Ad1y}S$xCMF@T7*DP`-Y@?- zy{w?DEX_>9D@#U3MnF`C1D>3#itw*RQ{z?;3bX zaf|Tc?rv@d1!H4jPfyPvUXQS=dpAlLr|~pT47l{<)vK-(Cp;Rb{;c}?s`cOB-^w~V zJqJ&u_eU}843yt4KD*Uyw-8}F0=ptr}*FN)6@06btNLheis`U7#z5;&{?vt zZIYO{xcHRm(;r`4?9TLbvYPKAZq+NG!+dw_*uhrp+};9O{W@*`uf%G_Rn>0MQOjKC zZm!$8!RnR%y~~q6mzV6@w+~dB*0TmzE?cvvN76X$!1e3XVfMa#`}X4Y{CI{1@?N05 z4jtXy%nWDdSO(`sH$0g*Z=M_*zZ__7Z{w$(#m|-0)RsBcXH`CZ{+vBHIQYiRo19bH z+uFEvj^Dd?HGWlGROyxcnak`>o;&9TIy}#R{<#tjqvT&-UUqbJEGT{$JVk`lcNyrs zzcVwLA6)kMvtotDN;cJO&}7QL*E@@!8;Nrq1zjC=;Qsyi1vxJ+EClV-`19wFM3>jL zAHRNmS}(cv(W6HnUR_KZ`Pm%<@5jrcLdqvUdw2U{YfFoRukYG}zH@9gZ{FNI zYnGIglhX{o)+9>gOEt?1 zSKXfKbVcZ0>Fy|xMXeDbvWt?kwVw6q+1SYV`S}F|1tnRD%mg({)Ya8n+S|d|iFe}3 zlK=ny{$zd&8rXaPOd%h1QuhDn|KHdDpZzdHLk(2t_x1Jh?y}L1*&%TC>eZtARv?$3 znQ6@4*4Fk1bXgi`TPkRsLH&O_(8iJF{_`J!cC1g=i#4eFlJVxo#>EF8_^Dm-_j|3j zVbM18sXMOS*LzhR=(&4?Rm;(95j$--xVaC%xVU&GpYyXGIonx$6P9UcCQWo(w{PLX zg@0Opoz~x<^I^sA#oBs$Zuj@qf)?b~*48drvczO3i|JKE5fKqk9(nolC8!Y!D#4E& zJC^kR-d@m=SoQmDtG_*Xb8~Y?e}DU;MM}+r#-Jsm8#ZrtuBq8`VAX>9zhA}o?AbG6 z;>5;vvAaK=E-o$xof-f-2~)QTx38~U2?5>CqOI+nk-c)$CZj!j_iju(D^(YnnW+g{f>i!K z?$7J^|C1i=p1=zlJiop!_Tl5l$^q{lJYdMq&X%z%S#k04{e88dYivNr=j!P2L`Fsi zgolF`*BT}r;rKUw-n@A#_t~!U+1CCNxpwWEho@)b#EBDcoR8nnU-kFkf=zGk?k)$N zl{Z=4-=OA4!Lq{(SMaSrnPR1)(qb=Fe`11S#lJt6^{q$xK$BM+wrvB|+6xyd3JD1< zShnm~NkoYB*?G3o;(9R;>d&Wb2A!caYnD{O&X|SAHMF!2UA`==r>A#gce(zg$&*=^ zJ^b}_dOT>Wvxccr-LNGVZsrv60Ek%LCo*xIS)gRLQyR z`S%|kY-WcYnEdN&_J;}^(6E8Bdtb}et)@CUIth7see-OqyMF5izCH2t^Ye`v7nP<= zpYH7Fn9_eVOmLdP^=Vt%LF3Jiv9YrI|9s+3J3sGiiG|43ho&=qnCCBR-d*xisKLK~ z>;B*GtUK9{spw7TW@l&r_vvByx|oAkRt8J_dnz}(yk4lWYUar=zrVi+P5MolG6i&VL||Z`?5~R#r|Cv-NIuTT02&|3 zySwXXflHH1?2G8h4BMCRWvXBPdiv#xn3|gQz6+o2@%#7h&-0Ig1{$o( z-?`M(>~V-cBCa2I;Mg%X^SnC~y8q4Y7T0%!+`4(}{rxjfi$Du-D=I4$?d;_CR)3%7 zaksLvvZJ>bbi<>dxcKq;P3u>!;$pb4vp8KsT6%H({yGCgL(mPKzrMa^Pfkvjkdo@! zD>^xAHt2H59R-Y&)%}mXxVU)s-S~gM-|u&ih=^#8EIZ;Fa!LCY+kVTZrRUXOiseN| zNAK9NBjNl!TcOp>i&ps0n(D(0T37nv>-BhM2GAK;Z*CfAWM+DrSg3(^=-$068>1&4 z6%|$S@6S$`Uyn`0y`wB<-JTWn|M#(10%d*AzNqH-cKiOdnpJ)HLeRvC6Met^4G#%9 z^5o=X(6~%vo^OmEcoRo+Gc%u@jYh$lX}ZxLKA*RLe6(Bq!u9LE0!{W0h| zUCGLjkPy&0U;Z0>eS9t~_m_Y1@+D{ut8LYn38x#E_^guEVP}w%lA2*rs02FB7*yM5 zWp&x)-Q1Mw;o;$sk+H(%v2f{JQM2{s!A~b;$Os(0dR3H}o$pAeu)0bZyKCTl6YH65 zEaK}weED+Z>gsUoEB5owobic>j($A9{vYFkn(uwrwiK9Lou%|9=B#G^NyD{ky(5C| zUOB(S^xpn@es_2Gl#~>X+__>?J+4=Mdcx_}E7dw?){54YzSBoWuU@jGW!5aI4L3nuk7UrLjTVJT&5kQJr=JI%g0?Pxzur`f*}KkNy}y2C zk*E6Q$!fk$ZEbAl=G*IUw9@GMwZ!#giKi#$nzd^|XTUHVxU|&U`b=zoUY?$ejLd{7 zQ&<>4lW%>p*2gk@a(8NQd#{rA&T@ULy(X?u^|J2T{Tn|$J8|aB5zwBXXJ;f!-rb2* z=v);F&Q#`Ai+AMQG;(oqQBYHJOGwCqOn!qx?8mQPWh+8o8W|gd4hOh#^Csx@5vJRV z7B4oe`jP?KSi{K3Xi@ykr&5OexphkG{5+dVCTVHug}1Zpn{DLyr%js%nrSi2yrjY-V-c|E zWJ&S5`c3!FHiPyf+3I>NYxLI*K6mciAD5Kd+j4JgO6_)OnmnzmiwiWdrl!VrVEOUn z?fLi9_M`^N=*p~p>!kQLC2ErH<(V^Qg3das`}tJ7yDzOVnY z1e5?k`$m>}PoGuu2-GbA-3M^;Bxm~hd7?MOgoT;S&CNmUo7?&2^8(jw0?j-3_4R?4 zxn*RmIKb=T=*YNc%^HKcKNT|ebuuw};(2*_JL><}P5yi7W{%m87(EU}&^e@hG8PIi zw_nOSdh{r$@nQe*+{u%UadC2>8!qP0?{8{i`uFu66io_6B84wGckAc9gq*JjUb2Bo*p90M<1ev~5hV~Wm>UAsO-XMysL zeBBSnI~zS+A*ZG&wtFH1iF=SW$^MQ0VY>hSJ3f1J1RaVZQiYCTm6ma+qZ8&o=%T9NIxgjn7eS{ z!Ve!l9JsYL`{Uz&`)#kqUj6w~Q&CZ|VACd{g$ozHxVBchURsd_bg)cXn%bg8i+*%V ziHeISAL$VE@bhD9Kb*OVPgGR&$&)7~D^{|4dwH=;db^9W+|!fu)alcK5fL4qJ{3)w zK7BFd_VGXOy}i9>uW^oylzjE-6?jB>Lxj$Xl`9=xU0J)jy8bwBnl)>d({7!Wt5Rb12)#}xOadCP9VPRp%{)0;G2ak{UGuYYku2{3?$@J$>o|ycM zYXvQ&`}gB9|GzJ5H~C!Bz4-MaV~2>U?b=xex6Ym8o30;!Y)j_lfY8v^+}qngD;3=P zWHQ5RSKQxU&tG0%{^x!De`W?ADH9G*9oXq2m0>Ys=}PX68xHF0+Ab^me{Ig{rO(&Y z?>iQ?K3Yjxx%s}(-OcI#GFBxX3Z3grD?g>Yc=2Mvf&~kXcA79mL`FV5(8vrvo)C0K z^0{+;`_EpzD*F8V{Ntd*ryd?=pJP?JDz?@vYw6OZ2k+jMwUOgjR8(Z@Gyz|E`0(LF z@FId&3!ZTLWZxtAhod2u);=8OItfIG?Z1Yzx~mpB!(u>+}O&>%0H0- zuYUjdsJ#E6i@W>slM$gIAyQ|K-rt<=U&mdQJBgn|?bXz&Q*Ug`jh_5`eQg)0_;BqO z16@qEJ^y~5c&CZ5m$!H3b)~LJVwcz+K78mB9X*>tfuUpha&=7|ot)E}OP_swe0)jy z`+I+GxcA9;e){}*CZG4CTR*g?ullvoOtjj~jV*FliDqC}m|E?xFN*5^^Hk*R>vFzG z*xTD1)&4383J$*f%HsL?`Tn~~U%Nee^hhd)n~zUz)~s16kB)RM*|B5C)l!3pH#esr zIdGui#*G^j_~q?PZqz+G!ntV03J*|?@CkH9s7q|@Tn!D45BAxm`$a@WL5qwZ7FbNG z(VoJit)(UOYkT1DqiLHvo0^zF%Q1g`K5zeXeyF{@J!r+;ju^ee?;XAs?2G~N{`~m^ z?i@PJHeL-{jk$jP`TZXxB_$^w@0agZHtT%wvEs>vh0dTgWAdL{IE6hbD=jZC^o*(Y zT9SSB*qw+spe0H_&)5HR4haqQoNrfq;=KL;J1Ii3-G?7;(FEPgHfxsDqn9r|tG>Q+ zH8L`i%BlbKg!AI%%gTR$e^&?HZx|eV3AChn(V|68Ha0dMnVFf*Z|mynTF$0T-kg5k zta9Ci2?B@GHoK~MFLvuy%D=Z~;*r}6ZZ)o2wTi7?*vrd{h2iDh-R2*^eN%gXe}8_# zoyqF{91N2tO*-UoWs|O|YAZvA`E}{8toKJI#ipjG3yX`3H%@CQeSMAdulkuK;p^i# zkE~p=!UJ^b**43Wi)I7{1UQ)G+;A{4G3fv;Z?5{1v3YVvp|-xhdRbZ7ksCK6GLn8g zJk0*-X8L?VQBl#N4-Xt?=K7vKdsg-GGGArT;<(@6-a0-0^6{ghmzUR(+qZY$d~RF( ztmi^Y=8+D;lnV{-|6w*hZm?q+Y=w8?0uWw9D3FR!YNoc|NUqeqXj zFzl@Ty-h?pS3d9lK3|3{yO$@5T#f5oyK>XAWo?A|YDD6q63MsNC`KcCMp@t&>+3N95L z9iJCZk%1h75@hN+MPxs)7Tg&h6E*DNtPF{9+fyPe7Z_ocdeE4t)Xb@00pqZUt z4YacAz4*_EhuJq(eokAobg8PqdGYuf$D*R5B~sj1%Roi;fktM~p3#iV%!!~A>!(ba zVjw%Mp{t7vl;%uKO+kwrTi$(sbyfS(n>RipA|fXixpqs``_#U_XPcCr?R_K1EOK|* z+6(Glpq1RW^Y^QEb#*s`lfLC(blZ|773(|L6I7mTl9gO`CLfwz)7bFYl$@ z<@rVb{!|{zKce|k!0g@vOEJ9|4;vesBQn0fpFe!)xMt0o6KkWld!(kSUVa!5(yl(y zZ%b%sXv*(zZ$Ux9NR|zv$m6W%yQ&IPuqrk?-2Fm$0|Nnkh(bw;Pxxr=C%9V=UV!EKMqDs33KUUa0 zdj8zKr>BQw_F1*h&(EuW{P;1bd*bP*lU`q6FB}~m&D5}C=gx`K_2aqjZr>(7ebp+h zokdT*X21ITG++uQXS9k{r-THZ~bI@J}lb!yRq1r9p8x~|(M1y5POUOzBAT>a|R zt3K^Y#;aDZ?%cJ@>gDC-{D~VQQr_L!3EH$NJI}>^$6koO z*s|n>KxcP%_LlgV;*gM#2@f75Y^wWPm6VfnXF>ilP&O-gz))Lq=UlSUMYiew6?x{2el?x!peR^`Tmrr6}^>@9O_x4&#S`;W${`<2tB1uC_E31TU zLe%=Wy-M%iy<=hc`RDWbldHqm9|^L*T9}fWDk#?Ns-&begU>b1#l=NHtlM?drcI#3 zU@Cuq)4i-17}Bmj^`-2kOP5Y`iE4MWwY6Qi_y@E?7Ic2|%`KV2AHRN84Gau?^7i(2 z6?OIYDO0BkI@$4>dHef=B1T0;rDcvqVbh=I_WuCn4mEAKnX@V5qEe^b*$GQ-+=wtLc;En9>TqFhZf>TAFE1~*|M|ZEziMY^r&9mv^XJvQ zr|BqyHfMi(bF+s}jgN~ds@dH!-Y>KPo69sxiN|La^i^|QSC4Rb@k+@b!nzpXYaUbo`S# z=cs3Nv^3~w@MmXdvsYLDF5CNQj!o5{ABOw>|Eq3kZB6|2<#X=t5@ls&1x>bGTN|xz%&il6<|k+jDe*Adp8EfB zPqO+xE!wq9ij9r!!?$n87P)rMDm}BO^7DiD@A*MThAms>Wp=9m z_VyclDvd!`{0b_&CEVXv3mW3PoY)CEU~-y%d>`nD*=J{Ff|kOv@yp$LQuy-a%Z|=Y zN60b%6Xwk6;g`1qtxKKn@cPAz55n2CwY8vC5Rg4=5|%|NleHIqtg!j>^Z9(xRoF?% z$s2QS8iB5Zjf#qTRP{S4Ffy{!xt%ZZ{k^>jn?XZ4#?$m-wZ3~!u>p;Zo}Xt6THxaE z@4xJDVn{-Q!ZQE)eRJl_5vwip_V)hx?d@&1{7*Bl%~9DJ_BUngHlL6~+G}EN{G2t} zV0+2z72n;q>i4K#{#s}uv#0v|x}ztX_U*H~yf8TT!^6YuAUC9+o8!2@?(c@;=YBpj zjapxBP*F2A6%`W`1N8h{C+tzGqau}haVOc{QQ(!QC+QUXD0_5pSiX+ z+OXtBfZLo=z?fb~Sz?4L4$2i?eA$DZsrIH3m-1g=;`e2RLn7pPGaV}z9!O{K|oek)-5e~)$Daw{9_ds z&EK@)@2u#1b3U6smsxbrx%kw|Z_a5^%QSz2Mwu@!_fLL)?*H+7bB|x0@vWZW{}xYA zSFb}HQ%?m&Zc5Xfw04H0T8mEen~!IBcppn1o{-9u{3eSLSuk2j^d!POBfcwRBvv0OMdX%&#Zm*Pf_&U(7 zhSx7HdH3e#=7OT4LvL?yPfSe>{rRVvo&Ukhmz?_g`k<3HUR+qXVdKVw9fHaUnVFgs z;}+bx69dZo8X6p+b4vUB-9c&Z%^Mzd_2q2;IsIc|WI#u8eSGA~BVoV*8fgVx98#(i z)DPNr3|Txk{k6uN4coW3@7iVMH`hvaYqg51Drit~bNcydw`^Nh=B?Sd!gk*xzRv<* zZ5+P~nWmT8K3(!~VbZKCvl|*1K&L4vDl&G9>mS=y`uf5$U+HzpSG(`ri2+?^c<)}^ z3-=8+a{SPvMg>GfK<8JiSh@1xojWqeAnR`?P875%dBNc8>$^}`;Paml~+vHA7=JwNC;QM+0xkVt2zr|o}FkL!oq`9J>se*f{cwb7ufX+X!k&X_&B zSho90^K||AMd9n?b`(B7rk)=*yJ^D)gB!PQJ-WF$-N3};iHWzPBjc&lrx&hVsd@2r zSFlgF@tMWT46iN{+q+2Q@}e4lDK)KSomX7l-4CBV%ge~fIKw1U2z1~(Gc)tLBoO(-;^=31+M z+Z;DZSfJHb|6F0>PnXEjC0SuwE2Ql}J_4OJe7KDlbZSS{w>O|E@}wUh9>yGBRlYs{ zKIjf;(DAlDbFH@eUDwjobgZhf`t<2ji{FK-SFX7H{`PkD+@A8cw@g9ZVgLDdrKgln zOC*Cf@!q+67j*g&=$awW^1fSJvyYdWD5*lX0D$(oyxo4kNOpM~sPX`9=3caTaca_z zn7BAO&|cn;k6b}#qOOhF`p7CsRV%7e=z^VZZ*KY) zEp44NNeFa6&4mjBb#-+y$1^8^4lI9j!w__qQ)Oi(=%BAzrrER32rOQ9?D}=_;AK9J z5fKtPy1G02ltcODY(OV@@7cR|_Mc4+O(C(7&8K9QbbZ(FQVc5n`6;#J{XJRGd8sk6 zv4ZmQ{Nm!%)gnEZ5B&Q2dg8o!eYL;870NC>859x%I(+=&r>EY3zFhVPEh4lkf5%f^ zUjF3Svm)7kj~RRS+JcU@e(~bQivRzgJ$nW^kVH>Uk9X6Ax^HhJL2XIU%!IsM&4g37 zH}>zg3Af{zIBi+vLxIlfKR*mXC+@A^_lxWAudmKIIXa-jLY9=T=})oyMR$zW)5FS@&3w^VZgE@u;m?tm*0L zE8lE6z4gK!$H&af3_8hW+t%rhtgNh{5x}x{cQ`FAEqCnP znRs(ks_!q}gk&Lk`F_ypyKio6v?zNMvG}L?35mmVEQ>+sz|_WRPWrqJ8{aCmZjd)lU`q23km=m8=HWTkRzowLGEsDZXZ5>Zr;A#9MrB__t@ji z_xtty`T6-je*QH5;UvZI<;#~^Q__Jo+<1140&!>aVar5%>I&=JZ`)iA@&u(qa2C4C#VbJL6 z=2j%zF3`9leO8B#wYBu;=jV?fXk-SR$D{5)FX4EfY(RMUbE{crG<0;1%&{zf@Zdqi zOyl$-S$7rCHv6hC8eH7mJNpi;ytXzv`Sdhh4==AnJ(9+thTP!`7X&~Dj(B-{@9cBW zI(hG&oVZ@hfktL_gW_jCA1Z9tDR=fBf1LR2%uI`d2Ml^KJ1!`w%Uqi_b*d=npeDI~ z_xYa$XSyaY^X&amW5*|B!BAdauA!|BTD$b)*X#8=`&1``_Udx0f|+qG*~%yB`_ zvNAKP@^?M||9#&Ny7BXRVTzlZ8{4*=n@ym#Z|?5wudl5={O0E7i)$i{*DanHwWIhs z-+3)_b#--j@9c9wVv=$~05o8~a^=bm8#Xu;6c}8em?a`31KK#SWZAMu z-`?I1@d#hMU;#t;x|qxJYj|C#=3_5CT)uSa zQp9Yt+#7Q&i+A(|X-i5<>Zq!=zLqe0JHP&4qW5&YR4py7HMzI9ojH8CSyV)%K(@O> z)82l*rKP1|Wo0EO+0Fb@9}y66AZ%^a(I-!z&YV11_^h|!!KbIE&zv(y=JkbzpyR$C zTk&NkWz1mz$&w7Z>igg<(`?W-T+sOu7cWkH9bvR~&mNg=+qQXldmmox-hW|{EB88O zLCvbq&p@YI_5J<*9W-D77ti?@#*r>T1TtMXaFNOwHhB1+ttB z58l4*1?>|1`};fSKGT?(m>qpr5>!-F9(;Is7!=E(Oi(IwX-YxN8DU8wY3b9T)`p0v z=*-!(XZw7+abnTg+2)(m&d$2%^I1*J+IsfR-MfuJw|XvIc<|2MyOCvOX4f}%NNn1) z>BgIzn?Zh*wy7}KUG-HfJ#t;#-cxM+a%Vu<@6FB4kzrwC>5&|Yj}{tUW&vHD@pAcm z(8i}jhnzrbMQ?ANV-tE-?> z;JTu4bRQB zZr@k?JL%4j!hrB_cNZ6yK3VHFv)o%AfB*SjwEzF7d2{-CuUzipOD=`6XNB|b?ksLE zeSdH6%2lg2y}iBNSg!wg=@K?&ef|E@cXwv?N}I29Tp#bPvUtOW32$#~Y~GrEy>I1; z6&sd%Pv2Dk?`Qk#2p67-6DQ_;dU6s}SY&2oY^ePFY~z9j3Sm)ES{tjUOq;f8!2$)d z{ChUb7A`zEWy+KrPfkvLIeBeW(W@((%N8s+5Vbw;tekDtky4pU9v5c3RMWDzm(RYw z?&!b2zd@HJ|M_@a9#m{z-zX)buCC6)&JJ3bapB^{hgN(OL0f-8_m_Z9W$NkS0qyVu z9o_Wzca{UFApZ6yvZAUAv>YHHIQZ}cMQ6~Gg&8wvE{xuu_u|S*;U`a5|1X$+{yFHP zrH=0I!droA zDMqbjvlpD6uAlt!(o)cQ8|z|s8`S&2 zpffn@|NT@?J3FiO?d|QL%PL++@Sgko`#Y$61v)!R+AQaRRbL3`04_&IM~kX28rK7* z_H5c@1e)Bry)F0f=jZ1^Q)Q;v*A5&z*7iDMi5M3b7wAr|A3rKoR8<#l*dVZT=T6Xs z7Q+J9Zn2E3t3Jn8U7r8t)m83)|NixsRY%*~+gn&zJOEvQINz>z zN8e=)gJYmD1s%I{@Zdqv-Z{`RSJ1l1z`%*GD_SP>>%{Mq0bS7bKCvV^P@9*zo*_DpP#l?sJ{rxQ{DA*Xcx2jOK z-Gs^0)APsI>+ywOUIcm*s)_V z#}#E38eZ-_a(jFJ$FJAp4_~|}2pUM5XIJahx`ibrH5GIr3Fyk{ZMo9d3q6#t@2M;X z9Zh!e;>8^W51BS?-fUR$Apvyg-gLcKr^-sp>w=t$@`WWOpff9`>BpZd6*;8%YGxh_ z=xDp2pPxI&#mTkv%eT#)D|>ySRO_WnL7-z0A$vI6w{0`KKG8#1L{5&6pP&E7uV0`Q zXP`yc2IcQ!qOMI6kUaSO^TfGxeP@@OCSEbV+wk=HbI^9Z$H)6Y=dI7PulH-+(qeGz z!J|h_ptCZsU!TsEd1$6%Guy*YPfvIB_aC1gU)QM{y=_7A@jlS)MDuJa50%~Ubt{! z%<+s(yUN~n$y%2wn3{_2E_-|E@9*!4kmWp&{`~y>;A2IMyGjek0SV`T0D1 zreJSB|Fwp1RJWM!hqLDQ6|}Ut9334mT)Wmbd9pC5ZR9)K?BUtj<{-Ojp1ixed&9@Z#cP&^#`vb^GD__vH`Sg~UWeSj5G}K?fzxu&cGY zUYK%fmT5NVq;%WrZw0cgf6jLZDi?fwi~sue_H^kIH+4ltMo@ce zN8#fKFJF3Qw{wBckOiI2a!q%7;L)Q;L3{1Ky}R43?mrK7%Hip0x`(G|244WR?H&s{ zc`SB0x~1pw#|qG}VcDA-jOyy@ptIm!y?PaMJPR}nXqa=u;Kj?AiUtM~xcDzUXl-o; zHQRR7{50CKWee!^e9-2q3zsiHwvtk8G0_U~IlW=Y5*44>W}rKwKux%`^YhM@E^*V; z*5(ci3kwJfbMx@vh}xQUv{c1OMNL;1beQS!h0g7uEn=X}&;S1X+^~6bb5j%3^^Yw= zUrtU~QXhNrwZ{j)1~UQ%ma* zl7VwS^W7&vx8f%J|MwSEx?T_Ln2|A~oyXJ5>kud}Ubzw?V_C$)$Hy1rp0x#Z zmtWbN2+)|aiV6#O$U;c*Yv1w556|2GKXR~{T~I`XB{nt|l=L>IpMUnpx2E*4`YN%N z^87o0?C?EmX}Wd&yC28Dubs7iS)$ybwiJ%4eXsVq)b=iVB6h7$KuPk7v92-`6BFnh zfD@-rgHGNG@$e4J%+v&RqFvnGA3r-gJH+Gq#naREclJ4Cd3t(sg4Uayoox=f&uM4z z^FyakbE~PTN!U~vfGUbZhn&uR3gzit@#9yr>DMh?!8&0g3!2ucpDJB-T9dCZezC=M zr4|o<(aSQ)Jr6;rivIZc*f8&o#hty?;=g|VN{U^)OMc6wUlsmA^1RokgiiV{v}DT` zk;}_`on2g5Kx=m^-$y%7pD=+TI5_ynuU|#7tycoCuZ#T%8qx9e^xRSOl+}xwyDKJe?k&^!Qlsjh)5ne)DWJFMh3F{jX`l)06u0^=~xR z&T(~h1&v-YF*6tb{Z%?+=1k8&a=yKdjf|j6%t2kC6)QSkTevWZh=>@Jy@{A(UoZFa z<;xqJQn?o`T4a!O!$3kxD(Ua9uN~dpkFB1muaa)odG&dboVfc{Me(M#DIKfqiiK}( zEq@<3W7aIt8D|>W+K;XHe#%Q3pPe{miU_DOn>ll)Mg2dUHa=OcOO;L2B7{ok#9V#N zA?+M~*Vg5%%Bj+p-f)p=8}&YY{tUXJ2y`C4f&xSBuP+l%lyZU!wFwgheCAqBeXZfr zwP?|zffbrPepCh?3+OJ6iP$%* zi0hQrDa%7~ixeEqQfirQdbsmOuL+JxcoV^XJ1aFE8&Xdn+|%%9Mos{C>^gWeI0y7=GRNwkB7N zU&zTLHqbD(A9PXM*VosRPfk+3u{C@8jotlMm(CC?@tG5s?kRTp>s4b}adGzO=;$q3 zSGlgQkDq?Z{bI|6`n|Qk#XyI9{`~x0P)e#xOgAb4bW4;`D%YDgZ(i-)pw=?sm($S_ zThJ*0hg!J{|NJNf9WTi(uD9lDsfwYA^PP<)yrnbTQ&Lop^++;9MvYi!&6>4!7oVa_ z4d|GIijPWr_U;uF6AO!s@SkfXT2@x}<)evW(3DxTx=x(%xN-Y-vFy^53$EHMS(C&H z8U~NqSF`h4tI3C-Q7cSEXNBIr{%p=F){n>gU){PsFb zmN?CtP_=CJYVPpx@RpVqP>ny^Jl`!UN(xkffEvfArf7cn^2No^kMDXQXJ!fL_{s+l z8X`BR74Gt@33jr*95iL}MZodVM(D3u~uZh_i@2P~#4CyJ&pvSJCT*9XwUv-^s3v-_Iv6FAq9H z1hjbd`@6fKoaQsfVq=kegcHZa(hwi-gWcl#23c1$Uc7n*x?T6e)vHgff)-DkHmwbG zoZ-=KaZpXB<}>3!sS4AB+4=h#=g*g)G-*;skIu@l$VkaUhYme>{5be$xm$R+xUiZ} z!`{8NIXO8QOv;KbX@Q2iiTrXl2X1UkzPLHv|HqFX4zaOwUwiaMd3bPuItRN-vt#zv z%)B;Xnxd<#D`<%3t%>ImF;P+0`1p8Gt8)GRe@$IoTyFhxy`Z7*GcydYI687n)C}?Q z4)E~cc=PrxsMA$ZT^;P-CGznnXt~>gyLV-U)%}iaOg^5HwVA`IBW20*<%jRzm$$RC z;mnD)7jE$RDtYN!`7{>y}i7(Nv<6Xg@uLS6`(mc4Bp({{(f?DW@hG#3k#VU9(;U! z+`!!Yxl&TI)6o*y%F0Smn=xWrj%3-J8;-V1f`WpAn9R-1LE{87OtZy6>t*(WU!N|zy!nWLK9(g;N!|nX-TeoiY z(Tnur2$x8nVN+@J=g*%5k3TZ}*`4zCH_e0kxD6&-bde;vGaYgZ8; zt9bs5l{40%}&!0Sbvh(X} zYbQ>b67u@$$saX#O-)Up>keY})kxaN@qt)djML8dcxM;n*xA(M&s3@!0B~gA>R#q`#VdYC- zf7IAnm%b8teP^d}a7akX=CrdyKVv*K^!3y2?Cj25x-^L~VX=FET3}#c&|Y=k&jQXz zFZ4~-4nK7GaPw=6-oEM6#qZp?6A%{G1{%4&d2{A#kCq8)E0!!_`Tp)Ms2|$Y+zdLd zY|6B0pdk{_fhkj`in8&^a0m+vuUjk>q~6)tX<%Rgx?lO!>C>&-f`fuUIgN>#dG+47 zk`fcpjFyxXm$+9>&L0A6jMr}!8n6Yh}+2-xr z)8*vk-n_fJd(Dz1Ew5L!bfg~b5}j&$e#Nr%U5^TXeoAe;uBoq|ZvXd-aQ3w|lCLi> z=db?oz|nTU(8E)wPv89a_jly$YilFh`D7ys3N{>h?`V5jX@OkkOVGTB{{BBq{QUeg zX3TidZ~yPWfkx(?eXbmeSGBaYol{a&4jn#R`23tKsHH9`DH#wL=y-o$tzpK61*h)4 zzP2{HSa$k^tffnqJUG%RY*F*W0CXYjk|iNKXB|KO6NksbiECzMMMK1{* zdHxyH2HLTE_u?HpBtVPdC#iZbSh3&qJ#7Y7=o3;*c4t^9o)Xf46DYu7C5|Lt*Ut3Bakc=qwf58vkc123`%)5KRz%caegO3$c<(02&$td^p<704ec4iI>3)`@5Tie#Hrd8kGXim)g{op|Y zsC(h(=LecAd^;=D9aP2r`~4o2%5L1enF!ijZ)ysfLpRL6w#M=Kxw#uFJ|?YOET9x9 zZ&!2R@$vqT4-Ph;I(~Y(J|k%GbSmq%rAt+Hbad=~O3W3|J9_NcqaPn1gNAK4ZQ8`Z zuxiyR4Q=hiXJ#6M&S22c&?uM_RI@&AZ`0hlvOj9L4Dc0ySqRKX>ZuP z`LUJQ#6VDl~|pw8YPk4>ZFG zx{~AO&6}Xe*u2^JSg*AD#gmdBKYp|*e<$NN->w&O_8h1NC@3ir*{RUi*9Yq5fKE#M z@#DvW$jxa&r>{=|twnf!ZS9Z0-|sJ6ytuhn+C1smnVCkGnvEx>fjB27C~nxe@u3x$ z;#WOG!;h1het&#?TtiQbcpu7z154$-{0G?VMD{hg^A62DISN5|NpB6-3}7G z-0$d-PGQ5cHxcWUuSV9@*{xZ#X2GgeT?-Z{tXQ?GtCn}A7*M#gwYIXl^~rGh`=59F>IOPfgPEPr<^R9G zg%1z0ZahET%kb>;&mWJ=*MnNOx=~v|_wIs57eUhlllF!73JD8uEPWjYT2KMnJ@S74 zf4zdATR|h-CnhL@rt|Xd@8jj=?X5b0YeHzvFVI0Jj)8%KtHahF`t2At544%F5dEfq{VQxWLu zxTjB_?kIg7w)l-gcVC~||9^isrk)nliQMF}rdT!3$G-NLNb&P?prO;Sbupaf<>fOq zRy=z2=)tR3T@M~4fL5Mam%VW~Jx!PKPrZ13VWHun!-rqntlq47^3tc6rD1RRZ z8p6N2Dl}qKis#e$x{56VFSWI`4|j{}fB5k+*~QK6(Z$8?pmWl=xVb?y%b=+a(84&# zZnM_7y;TcCSBJ$MSK~bbx)i)#xG~n z@$~d`(6+}L`|J1nth-k5?vABS{63jiuU=Wy|Fh}o=}E}V?cK7)#KpzsN~T$Q@TXT- zwL$0Gx%bPtc8lqPj)yNpZ>kH`(8&@)OJ7UtgQ&&ySxR;gIm}&ri_VYD&t=uK!%z zm5!DK1`0kqJG=e!^Yh7fca=u$uiNX>fAiFd6AhCm3o9up8RXruXlZK$-NI^MWc0{t z)|u*0PdIICYzqGUsRZ?KKo?gP7Cubj;Lohmi`l_YUH#kbr=YUpS5;eE+4J*kSJ$|> zx+R`1N2GaIVDW?5KS1@W`3G+()LC1`Z?KqE6KFGzX0bg)dFHcd%Q zjV&-R5ESS0>}tDKtk3{;w;2|!UfnHcTLn5P(!kWTb>&LUUFGlnoL!}M9&YCc-3qyJ z?(Fda1t4gI19X7w?{9CjKeZ-#d2!YK|62~a-$hkb6?FQ;G~MVn zIoqlN*V3h-!b=oxrO!r|ADScU$`)FYi@R^&-3TclfS&U z2nqV8HFhE*BA`KcQ0Mf<4T-zEN=1ribxS1ebo zv8?!@FikJE>%)fv&}#M97C|2$9%cuPi99&i4BA3AZ=M|JjH=4d&mMN`?*mQlv`kQ2 zv}6g($B!R7y1SigYHX5{lePD+dvW&Kg$tmY?09&1wB$wazkcze;18FSIyX0WkF+`8 zY_r@)R$R|_mA+<6PfuSHz1=TEdSlm1P=-7+!w@t(`r_hZRiPj;-G~hgjg5^RJv})h z&JkLmyDvXHJPaK}JJv7X|MTOKGL?CgaL7d9U47B~O7lfT8JWPSYp zb#G4kd3gMI5*QT3#1If3{(s4de>-k0lY4us^4lB9GiS~S2n#bOCnv9aT#$EpnJ;MM zDJdzbWt-s68Rt%)Zr-@jFeWAjG*R2xI>pu1)fKdv_RQI{uCtD6o(65p?iSa7bY*2Q z2RC=~zJ1`cFf5ConY@ba@wmJt^RgP~z-my7-EWS?!BQEg4iST66K2i&71?~8z2^o8%p`KT3T97>(}dpj#7MmeZ8}z zBO~bSV(W6foSYm5ef{&LE>26-OiV;}?%Y{WQ1HNtOR0)m2#A3hW`9?#ZUCYdZ@k|Cg@t2_ISUZbk2DyS%i>^9iZ_gT_z ze*f z`S$Yb zy1sbzDopIg+uPgS+xcWcH`n#aS}&^o{Vn7EKHDi%r@mJGKS9wMbQ&}07_qNK``eZ{ zxATE^TTj!E|95j^*6$DbcXzd}SfK$5zaVb)*CL{#p!=_r4!7|Zl$N%3b#UcNlA@xcqjO|ezMmi8pTB=Who!x~zJBqNC7?09BirxSb$1G@U)!-&Rq;u&tE($$ z0po{z6M`?(V~1US57(!dn;`du+?1 z{_qQ*mdVSnKFW5lG$|vaW5*7Q#^bBr&MYe^0NoL1V{5xqY@H&g8N6M6EdVYi##Z=Qb-G&S+^InGs=@V$~_}13!@LbTvc`2!>in_YIk&%%V zpP%u@?XT-SbH*nnB?UD03_9_ks>+Isi_6Y3JUCc**REX`E?#V0w=VDLs#Mdv!M9%R z_7IyoZ=PJ<{e8M0W?V@6_2%a0jLXY--TGuSw zz_B@l4b-D>%DS?rvKW-bWv$EBY|JezEKJ=vck0yE>+9nmpPg-f;>;PBswyiXVPVDv zapKV{UZk%3u}dq_*I+gIn#l;KPt&3Z~b5-BOe>?gf74?*a>PBxnvb+2} zi=6O|BS(IJe-A4AZ``=yVH)AAq^`~`Ej`=+*eMkim4p`;7J>@RuI}!Gk3X`^TfJgM z$B!QsI+2@}Y+7Jf`buP(|9rnz6Gfx8^Up!2;DgTG%3bcwk!b`vN`&ESoKJW{Pwl1P z*sn7dJbyiT)v8q$M@up?G=9|B>B@#4{qXQG=wf5J{`R@n<%`_=<#yEnxBF33xAnQ< zG0=@-rLV6ojNe~pv~`(^;uBB-30flcZ%ojWqKX3YxXy>_8T!jP%5vJzAjZ`!oU<==^gd-lj2Jb2LP zn3kq?HGtPQGE(x~97|?~6KBq_B=ek|W!end?kLRm`Sa(Ge|{Ec9#?7c z2#CF&quMf|ZBf#rg&RD}E(ICxS^VhZ$Inf-xUAK3TU%S5)YG}vFg!Z_ThPkYPGR*hJ^RViriJbNm+a=o23m?37x(YxUMFYg zied7Jkarn>KA)uym>F zha2ffL1&`G?X6-J78c%^7j*a0EzlsQF385FCMKVGHal-^n>lkP=;V{v*Vj*+IMH!6 zv%sYjpxekTYJM18TNlgi?(QD-vqRw0g3>oP1hurZK!?@*|Mz!ipK@{Bz8cLhzQ@v! zmJ}5k{iw0q_v2Bw)%_i2tzVAsy)8dq|IN?-e(qaMK^IJ41wAN#cSrKyzkjCNE?>OZ z*w@Eb_2ot2>uN!#l<9Nl%F5YRwYYYRC0s=2Ywj zRjD?%wiBmMcb~kKQ?VD+Nf3~iKVQl-^YG)3pc7$~m6aQh+e^O*H~g^2%=$si9=8Q1 z;cHi{+pw-;-7cQemoq_U^X%n6r`~cxPiqOMVsGoxrK<1l?*|znEGfw;*RNjkqx-_V z%*5069gDK`3w@nUUO5Gv-)eF^Gdm-rX4`&S#TE`>8SoNvtzDdoU!NWA7XR@5J80e9 zmMvRA+oiT-US9SoJ8{k0wV*}FpjDsV)Ahd2h}g!;&JLQ^acXzCzGvC&j#aaBG+sUm zo735QsA?UjqRXuc8@aS|b2|6zu>ozmczmoEG&XO-`0CXw(0nwD+~moVo0lz9i`t&o zYnFR!LG11_P_epgo0*BJ>B3d3y6)~S2MrorxOj2p^Cz1$Ei882ialtry-d4m2{#v4 ziyos=hXr>&bJO&T!q>WEgWrEUzW4H?n8kXtmp^&_{QAo4^8_xHXlQCGT3JaQ?~@hY zRSX(3jym2a3mP_i^5n_+KEq=ZX3qxg1yfN|WBTzuJ+!j2@@e0>?Rj?(^~qYlGTwBi z>i<96Lx&C-)c>nlm}@6(96Q~0cdPE6*x=o(oK0Bf#$Rr__b6s@R&}9>h{%;J8%xC{ znL**<$3Hziz51`C4~OC;v$8igPU#-XKJ@sbg1S1pu&^+wt>WS3wdiN!|KgXIR6zqq ze|~&)x?L0I6aHn_r7qDXQ4x`jy_Y<5ubNB@x{~ej_)h=ktIy;_pLZ1L@t#)nbp)@^ z;!y1E=_IQ!|M7dcfbm-|q`WHt$xG=Z{`_dV@&jidk#Teo9?Vvun9>)&Bn< z=Gxj?9w`%#C8cjT6KK$|X`FzlTmWHP0 z!`JKgw=G|uUh6U~bLGmF96UTCyY`i|p6`13?Ck8t!OQ)&WNa7MxN&3Bdp=D)$H{7| z_1Gh}x<>@~Z(MLMKJj_j-u)J~$K{_3m*_g)=icpJy7%s-xT1*y>p5^sne$u^Yi=h1HQ;3;9 zeJjf{r~V4K>t^;yWMydeqSfnW1zn!@{?VPqudcV4q{hX?ZP>hd_4b|8EduXE#Ke?L zOhn4x-8tAJX`GOirM2blwYAaq)p<`&Oq_aNTSKGa{PX00e|~=W@WG*5On24Z@8$Pv z+vRMl9$Z}P{^Ig-|GRM>%v+L=^GQfbCce3`(RAC?WTsV9vahd8Jk-K@;@r7qy=?!~ z&CSJ6Ptyf$XHxT@$746Yf6Eq=J(Zu?EG;choIdRw8F^FvIq3Szz(7HHyBY?DBS(%L zxN&30vFgz9lCIrPcUjo(GR?iMm-TGb_jP*R8b4o6>Yi}y$<@{228M=={l^bqTN}MG z>#Ei|<&!#&vg|SMDiz+u1QvM}KQ>mn4O-8zG5PqR8#g3&m%ndYyLN5Fb8&I;aJ|zj zmoI1c_doAnwJv*8#m6Mjh@pwe7Ej*IK0ZD!{c^SiUtfjxNEj|U_Km6g<@fjZLHo~k z6g*^l^Y-mhp)HD1hDj_=PEJ{+>$Yt(Gcq=I&5NJDDDuYVMLdgF_!dTA-s)Ow`)Hq; z)2u~*{?z>V`4cqiGi}6q;i+wIHdeEGco!`QoeTef+w+x{mTo+E_T)*>DR$fP?si!gKf7Y(>};HO$703m z)rU`?_FnRhsXLQl!=_D6@9*v1Sp7Y(lPzb3L^8+#(12O``FRIVpXUDb>C;s1IpOYs zfr5Q~eHNv!rbK)fxhAdn;^!-_i>uydRj=ES({!sN*yp;LyrRpFKYwa6GBOHen~fKV ztQ2MWTO;~y<*nn_SH7%TBy#4Fobb0>9*2!eUxiduSA&*}pE!Shde-{h-2N%!hByFX!M3pPO#g+zAtU&UIR0 zMel}eFC%$HmkpaX8A(VUo8XQE5E3cmtXDc zcgf)6&zdPyri9#1dv|B&jlO|7IYFD#Juhj&6C)D1muZOP3*WZ1SedxxG2%We+ z68ryr>W;{lX%V}8d6}mEGiYtZYt7iVCr_RPEujOgHUIVX_0B$J)1ya^ z7L=46d2w;^#*B+f8_$VaondAGtqfeZ?%osecY2zdjfj3=P1&8>x1~WRoB#g)p7ovC zm4(jiplvdsB@`bXfc6=KmOMp7M;|_RjO}n6@9I01lLVYzU4DIi{lcY7RX=Sz%-g!c zJGZOI&-Z+H)w~7OowI^3d=L)W@8#{i`fqtqKtKa%f5@RjOlD?g1_lNzj+b02|NP7s zbQSyYetFQPAUpe%1D`&93K{_bje&#CDzbO!3k5BW^>KA=UAlaE`1Lgxtt&n#WM5w= z3px_%*0Zy-&CeV>*vObrR8+*nzSvtb5X`e^tMKR3{!^ zwN3DAW#BpCY3p~*Sybb{P-ad88 zlmb~#B{AKoBPJ#$H#VoA&nm6kYJ2&>{>={Ue6n2p{QMtReQ{f~W)07=W5*(P6exzR zkBd#N*4Nk9iP<4=^ytwCA1gpRGItg~H%L7t()iZc*jP|Trf0zd1<oOlK#y> z=eIlojqa{lv*uRmZU1>Toik=gfVz*5j&%0E3zjMTP+{XU*GhEXzI~vjWO?`Zoh@Br zRa{C&TITwE@8&%eID zo^xkM;Z$3ZM}Kars;h4Xt*TL1S6{Yz^=SqJUteFd!bdLKs=w!b`}6bjtvx(W94jY3 zKRuubg58h|p@j-i%Nr0!Pr%!zRe8z+7Cc^_|&W{$4J6Qwrzh3l~V~u<=TB;Hi z>-+H4D=u?$^Nr{2D?h39$=OD|-nx?U!O?DU4jvwtf&v34C#MP1r?bb#-aYm4nwgo| ziz_RG*RJ>HP+SBWrJg-odeNdq4<0{mE_{5fP}cKNmT~2T6QDcDUEJM41AKmdeonV* ze|%uvUG}zVs$2n=L;-zemz|ncwx*8)vXJfKCMY@Zcb*7kcLG+1Dk9 z+fx4i`UCG#>HXf}7AnWaP}lUlvvV{G#3oGkIFU1ytnV?;@%l+pkU0C3_qx!qv^+FHk>2v1v zfR4*kRAkiC)0<(IJL|%>&dyGdgO>Zvopt5g_0qt&xW3od*FS!8a`KLvpGK!nonml! zv8;rVkx|07s^sZ+kZN0-grwxdKR-XexU+M! z%R22M!@1L^gAR-Z9sK(F*;%2TJJ)DwX&q`{WCpFloUHC&B98X6iJpzS2ru3g)(ZQHQ}jm$6SS}D4`Dk?6XICUzkva<5R+;?|(w+pNLf$sMM z-L~1zC;Q4!@!_r0)Ad1{sX)VTpPrm_x~;0FmUM28CFpdVFE1~rZfjnxXjS{GeA@Ks$4jSJRepZPYhC?K zCwfBy<7-etYH6IP?7m4idfNuj9`j9`jMgO!In7$}`ucifZEfvkOP3zayT30s_x6(~ zDc|1R-CgD7_Uh5!-`{oA)RrCV{LRe9lfWcWa=FAxhhHJaa^Vcml@k~uk zee?D8b<=m&g-=dQJoO0VrK{U~Jv|qidl)^qxjEg()%EFQTccH=sjwS;vequU;);rj zp6-(dx%}V1e?8})d;birS+!t6LuEyUL2PX7vPFvy{ri3YzgMYm&c^PSn>HDl6+Q7t zOGr3iWNf^2Vy7`^E4`y*pKnU3&5R zbhgY03kXP1Q&a0X{hoU&;rFXXU^Qn-~ad6y*-u6OT#~`U+zDD(^Tzn zBi*(Cv)|h-US#!sdw=~=Jzo*-3=Jtp=`Ib9rocB6yEQf*op!_TN`_D1HGkQMS zbeb9-yPdy zeP4O))_wc-{W{EVA9DQo@#!xNufAf^>HV&C^5jX-wBeU8B}`0AT=ln)8ohXPb2I4P zubIZ_pj+9OKAvI~sp-NID5#>MQt;w}Vp4MQ%ZrQI=USJaE4}^wUUmQb{r~5!3SBKE zEY`juaUYGgLvjMf#7?P8dd3bn=?wZ-!&Ry<5pDAE_-d!90 z8K9HAJv}`oq@|zlTosm)p|LuAy_%`%)Rn=@pH&KXeSCa;bLwd^hD(<&tq5N3x9;}4 z`}^lteSHPmjyH2=}f@ZRTDur|B&Phl~fzDdHydqFJH(lHGc%N+YjSY!ClE!UYv#*~LJ#fNH z(W#?LUrVcNwt4=f88c37NId*$Pr|8#2OHb@9Z){||yxf0z^!B`+ zdA}bVWZtxS^UCn`aTBN4i$1--G5I*?oS4$r*N)z~BU4{rf3~RN>gw?HD=Pv)wZ&1p zbC;LVnp39XfoNlb`?jv0iBwHnvH#W_3-SDq8#N3urxjROG958@ghaF(xG?fmRqw zN=nMuR!vDeJ1f&TdgYCc$?U>vJ_&z*d|VT|ds~ps?{JY#K^+24PxLJA*3RNd;#hm))TyM0hgw0ietW)N ziw14hmz9;3k(K4-=T|p27G`E<&bzl~=JWfH4}m5|u3VWSsvQP8j{MJ`KcMPcP*Bjt z#pT0~kB@7bZ$i``Xn(T98E_U+T< z{aOT^I*in;tY%$Y>|XryQ|iC_|9{u}%rf!(9OL7|vwrV4DF)DL*i%z9qpaT@>y@5q zTWz*+<3(yQ_u|Ei7jJE}E`R6q`Ptc<`)YSz`xYsdvDC+YbKzsRw6n8Zm;22Hou9TgYU`zI z>$V=deS0?O^0S151MBzyi&~l2A2;jYkH`EqwY48Ve|~&rWw1@vmyTn-(%H|VzrVQ1 zTwGkdG?`1WMPRB^P>_&u`Z>^1k9$6!vj**1t&A)A_2p&o+Iu&i{QCNOOYUv4`1t!a z`aQb+TcVad+#jCnH_N2+!i9i)_5W)@Q=;?c%`@Wur1Z&d%bS+w(yy*hKRdvag+<`Q!bb z>7}o)Z7g``R8m?x(>R?EbUILYc=+x1Q{f>YBB!V8r=OmtyCv`LEYs|351u>;d1ZOz zKPcyOD7u{V_V!M`x2JMV{Qh~MDm?A%te|MUca@Tok|w#grhtmmf`^BK?CU(WCmQ|r zadKh;8F#pi_sYuP_L;`%Mum@De0+VqUrmr|Y-|KA!UlC+baa0Fc-&w4`|bA6d!nK= zoWr;Toj4S?oW6d2dgkS2A3r>FzP2W^dHM3?Ns-^)+&tVNsJx^2dEc`~$GVodoc?0W zFK?If_0`p!J3A(_^UFPW_Uzb>!pAS}@82I*@6^@Nap3mt*`T9N<>WwnQfHdy%PG6} z>0B0f=@LKbrRc<==yFj-Mdiamc6rbp!=OIiuF}^AhK7MA!TOha>N z(6ad_&zyO3VxltWtW{=qz6ld2I{yCl_T|03yVEY_X=`g|U0*l%{XRLHiUpBdtQ8a* zCae1k2@5x`T&bDA_p4a`{=a6qx3}rGZWdDYg?RGQw;a1K$K~sL_U*F+9V)@h&KF`O zwsGUe8M9|^E`IK3V`DR=FIdTItB<|Dt?k^+>F0|+J@Eu({F``aurG10}<_37@6?OV5+Ub}W}snP$a zDY4)ZuH)3J_xt}p>(<|w@c39S=p?4EudiQT7i+yVITN%}C@=5alarGpH>Gr5D)jQ1 zsd?EcqZyn?7cB~283MW-?CI(0$q5MuCaHQ$*w@v}{C)P1{{BCQtl#fBJlDEhWd8Qp zNlSdXxgdcQ7?_fpy0P+en%)0D#g{H!`tji~|4id_zs7Z@!A|XbvKzK-OM8B9u9v%J zV9+wxrAlBQYvdOd72VjJ&fhJj`{>!(*`SQ46SajSIXQXh;-^{$1_J5n=}gSbFYoN! ze5ufD%9PB&m5}6cYSo%GI(zo)iP%-5`S9Vx9tp!HRqtsZe!X6=Evp-^?B1thWi{)- z0f(iFr&wrScCv8?$K=8-XU_P5PWJ=tT(13XHgDd%GxP1|Pt%Rol3nYtXz}9AdwVSH z|Nk*w?A{+{<<~jcNY_O#WvPH-i@;J%W#wky*=C??(UX#sCC&3>=GT1UJUiPw+$w6J zPQ-?Wv$M^MpP!q{wOi)i=OsSefexF3Iy5@2TnRaJ_;6=O$AfEYqgRAzO`0^x!`qwL zAv`>M^Of|?X=gWV+H~mFt*C$ZI08FW)zmf>K6V2g)g)(EbK*#+@Xrs2`8RIZ5MULx z(6;W6gt4)4+Syr054Cbn?F-fd+2XP(sDq)SyZiE;npam=2H)9L%H1%_G&?CVv2or! zIX5@A7q4D1O_(-q*-p-@bFIrkn`Icz&N97x=4yFy@nq94tt(hS2Wq{#y87qK z?X?PC<^$SS_4L>M|NQoU4($K;RX-^yDdWO|#!H1>ty3};x449Ht+bJ|sc4u!T|9bw zo~nihhpnw`Oiav+Yip(7-r9Qj)-9>x;?FhLYtEiL`S9J{-7W3y#cyw!g6@KzX`CLg zGQ`5d0@T2M(P?_Ir}Fpzb(?Ed`r*TegexlockI{^u(zso zt&Fm<@nqxlbD*n9%HG~`t*WwWX5&rz_vh!0n>RC`N;q{~nm%*p$$hoIfBgIXo|A*) zz`c9(`0ai)JUrYUyf(^o>Eq0!pf>UZMduxLf34O=Z4I*WTRG84*F|&URHswxxyAK1 zRD4Y8ld%LP?-}O#a?I>}Iv=G~ZR-9=$ji%v7ANV&@AJ98ulDDk&*uwEN^~wh=2G19 z{NCQ`oEsY&d!@}MO_*??fsq-sw|d>Wbzbh5t<=@krOflr?5q7fr7vjJ5+Ck`43U~k zYAQZFU$IXz9+!rFRs!a=5AUtcfxn0C0G|1;>`rQ+x3K7PBM|M~0n_|sqb6;Bz| z*VkWL7kheN?Qa7kBhZC}J~NG2jg5_$E}qI^Z*PC+&K-;Te>F>gH^!gZB9Pj!MkMGP z=zzGI4+q&_yn3}M>#7#GOk+8)E_OG_d6}7+Yhrdz>J(PjlJ(^HSU+jOsDpRFZ%W6CFmCHef#!#xoeh!Vyro3sld}EOO_bq-ZI&< zXU`1VYBSIkFaG}iFC+8=R)*C4`}rKSBGupD|JvH<_QuA>OB-8OOu3R}`tRRA&^kC! z(pVL`+6dI;Ix{0Mb6qh9AK$Xz<$f~OWj%3wt2AYoU-6tNwn%2eR3|U@j0}y#ZM@2+ zrc-6D%P#D#E?=tr^yK;T{eg?!7Or1^ex7Z0#_eruFHLM&Ve;tFqZ@lFjc1$Zt7&O* zsjI7lRt7F#p1$<=!*6HJ@2hBPc5Y5TuO;g$2=YgJ%2I*1*2T|wnA!Q3)c*bkI(hq8 zue7%8N{2^}A4{5MiG;6@J9_*$ySTXcQf1D-MBBpFDZuWv#^-l|?(F)~21C zV+mTxba!{T_d>BnGn|~9KubZb%ipP}sj;!Mv%B@nojoy8IrGYjiI+Z}YWe*9{NpE2 zLNcFw*(;|;b#VEGah<%|$}L_{oM6@R0k#&P`0?KF_a3iazc0wDFRbRz$Ky5M@0QQ8 zsoZo)*I(78(AC9dL-qH(J$v?W@bWIL{0zR<>*8Yf zR&B@bE(4vY)Y-{-xSjv`+U@raojmFJvLf}`=F+8q|Neb>YwPMug(9k{Q5|0EjMj;K zdU8^D&fK|~mzHq;{{DV_z;m|$b6*)(d`L)2PPQz67t{Lxphw4{U!Tw0o3j4;_4Tz$ z=B1W}&h3vLK6IR}7klC2#Xzg1najdfzr3^4m{-aKbjhOE@xVD#G8K<-YaRAdyu8f! z@rjAbpe>Hd%F0V0Pw7~)M8&G)g~R=QwUOKN=3Xjn2?!}GGiz*Yl(8si`1||2u%Mvh zE-b~P4<+xd^5Jn6|*q6qTYL}mA)udhNQCkbm_cIv1J*)r9srl#h@hYt!03JmP* z>`Na{S+QV&LQHJz&8^wtJ9j8-^qQ*m1j|G6ST#=^wpI>E5CU~ z+C{FK2U;!NGN-?s^k-Z2l)wA`%=#3w;{BbShbJn#gErk*7CvH$jEvl|V}}9Aa$YHy z&(F?I?TdJqdt*am4+O%Qw=Hvqnj5@KqLS9-(o$u$c`)&5+&x;qU_szRqSESukDf>9|_levu z*86M4o<#iY{j=}Y&!#=@t!ICID&+di>=XIr$w^_q`F3X~D!YTGn-UWfudEL5kK0>y zaesaNukY{u_f~zK(ifSyWXTdxYvePuSk{(ZerAG^Zp(#Plj1a=O!l`^G&P+nsvRa$ zHO17(NGLiw8gw?>>ebm3`{LtRSy({FUpYBBWn5g;da1BT_dw;;7t`l!pV-Is>Fc3A z%T^pewf4cjnsqzpR_DDBj7#0C@xCzbeRgEg<72#i^7iL0E_SypeI)`~190!&JkZ6f z>*MWZWMs7NxE@VC$}V4X;M&^g&Yqq%CEI<@cY^}1^Wrxz#jmfgs~Z{$a&vQU%f0P3 zT`!hvPU@K%hD(+#0qvN-a#`~_8=p)^Vezl9#Z8a7k! z%}4H{cRNKt?{VA5UG(Quz_P`Q7n@$s{qgIUkhr*eGaD~xnepFWUqKt9OfoJwyqqB# zmy)8AduvPL*;%GO^K2qtTBLS?+_O^ioR?x}XQza;^y0A9E2Fk*Sz212nQJ{=f8UR$ zTU)cASKe8%LL(<9$D;aMPV4>`2Ih{AjwLTIwQks8aP)bv*m9r!uXY~tiPU&&G&h`4 z@61l|r9R?M{+v#lxv&1e-EzOVm;TrbN=kOln3UMiqCmmW z(2#|l{q!ky{fS1pEdf4>VO%$Nm+K#H=dXV#U9&aos)4zA`tNUVEAPF1f4BVp({FEY z%h=cLIdXob&g-kI#ivc1mUCxE;6<5Rb7lqJIDh((N&h8{%dKZ;#m}20A}f3L<>lp^ z92^P?3Juccc>$Z#eCN!WV{-YhjI6Bo*;2k#&>nlxNXByi`Rht9KjCsZwMAf&&x!n{ z6ZZf6#T_3XZ)9W?R}s54>ndnz!@WI~I&phu%red1_o1e!$f#G^{MhZ=yJK|t!zb0$ z)PUAWfBg7SLP|<&*3+MXN1J+PJu|!hBlPyO(w;rvLN74QzHi5ET@*9pkL%25ffI^# zJmhjgD-e(MO3$&a4hx?5{@&j1b?fx}{QP$8+66koUPe~-^WWad8nXWL?Uu&wE(0yc z(AU>r`gn?G(6Uy6)JvzeTVwWCP5tuaOU(B5VQZy8b7#N5y)AijBk=QA`T9Q-{q26X z+_-TgX)Q~TU`k5Lg(aTC({!W59zL^~w$yUpQ{Tj8*G0l|a&#OW9a&geK~u#|&CQ;^ zzDwiwR_)la12pTfdbReqZ{LhQ#khfHg!1?QohEIbmyndSsAP_jCn&tmba!?>+%>WuoC*pI#Pwn>h`iXb!(vtVdQiu-u%KW;@Nz#33yXy0WaZ*{ryJ8(E3A## zIZ4tuO+$A1nMp>vEgGM<<=s8?FKG?*;E5M zhAMV*xX9um1v+a|$cI%Zg{qXJEGT+%|UM~8R@7%p>XlnZOxO{zx zRhNddk&zK-vH11%@#-onF2M_ulad$=3=J3h&Nc%jr|Rlz8Ch9SzsGEgh9JM3&4SX` z*Lvh^XN9f~)0AC)X7a>LMVFb=X3RJ-!!Y^6<;#mRFE2C6xiO)QS2`&tr)T3vLtZJ9 z6JN^?o}F!;erHEv(31F1$E5Q$_Swt}2rDVsvdpBtrKRBSuhK(@4xKo21{6eF^6pAS zM@NGiuD7@4Zrr-{=#3i@FK;ZG;xpe)*4f#4-=9z3OBYY!1}E{Ty;Wat>?+M(7(ac| zq(f_?w`W{m7t6Us>ptj6Y0&*4o}Lqop+`z7P`H++8lI{^!@wutx8{M$S#ioRTwKKC@Cv5ZrHX> z@6v1Us=s$1y;;6Pa^7Bb&{dqbZ;MyjJ5~D6w^P;9dewSKMoM-3yhYl_Ana&K_)Nt|Q#aZqlAybxFxVyVgo;%kU6!pf&hfkgA z+Ln9UDCdU3nl)=cJ2#&_dsf6aQ)7apaazFkyx4z#-`8u)E{y>dr7I@n-QU;S+UmOU z->zK-<;Sakma^_WJkQMSXlY5wh7B7Ye0zKQ=)LJ0^Uj>{NlHrU=<9p-?(Xhc$2UK! z`Ti~zbXDA+?@qVXd}k$OW_C`UDr#H(ZHa5QSVVO6EnsGz*Oe@Tf+`MW!y^UP+cg3coCUAj~?EiEk~DhiaKK#NmbTUpc6 z(o8Zhxx5q7@Nx+W5xKnF|M_Kq`=g-trNz^}KdVKYLOfQkT>0YVOHJ9w@}G9+7T2Zz zjNGZGXKQP#dD(TsoH=Ly{{HUi;h~_Y*m&bcgpiOBX!qpDj~{0pnloX7gPU91v(l|u zR~H2?b^{$>m6YVP+;1-E>a;Uwd_IGE=1u8pTC00{c<@Keh4HBKLl|iF4-oBqb^F%iBG9c({F5 zzp$`y@m~vT>))+^ZK79QymDpAv0mxRn^L`fe0(x)Y*6%_WwJ2waNCR-GeFVXdM>16 zPwlsx>38;2PF@|p{?wgcN}x~|sJu|NQ}>LQjH~3%bslo|b!R54`&WE=()sN1@qYQw zUtR`Zx_sHRe%X>G3xZY#tPEMQY}uz57nRRG*P7bp-Y@qzdG_?swNX>6zP<`vA7=|1 zfd09|wOj1}k6jx#Zd~RPzCJFtvD}U0EvS(SImlqSCeNJcn8Cj^O;q2`E<;xcner084&}EU= zuOB~hgvHs}nTLnRmxA(=@ z{cIIh_xo@wd%dRYa;FLJ4V*f-P98hfrtUwl;QPDSrHiLnp3h@RN={x}BBJP`X;u5n zWOMrYw4+_3C9kjfzO)c+0|&;HMXuZohYlYW^$YrDQ|&)*ue(!6*ZXH@XY8ylOKyP(sQrr+P+UtS+?4?0!R z-~R8Ck~v)NAZ>?U-P>#Z@83VK;~K?({{96G2wyU65m>5VYde>bnT-K-&S}<_6$=X% zbwSl%TPwZXf4-WraqvrxRJXJ=wdMZvr~RDd6vC9Xbrz?vTEXjUx_t6>I@{OiD}pKp z(Xf6wTMvK#=Z9Lkz1%g8^8gTLe@=(}X#=gY{-PVEa` z=s8o&DI_ELc;C^}r(d_;jtUQxl$5NftTZfp6R~tLhoaYoMXucud#g-uZ_9mr*8F~m zm0znmsE}V+Sy8bdXr)Ebla5P)BIQp`2!?2h%E`%rLvF%U?eI@W#p5?*URL|LJ$FDbSNEK=F~``zw4`)X%DKHje_>l(PX>g%CPmnQW}n`_Csas)E%`}s`T?#~D3 zegFSeFY}$ftYnUtGdRqlpJyUA?SiPSC`uQ(NcG zl?5#fczJ25*Kt9o49}=2spR8*PhVVI{O0Cn&@tOuvMVo5x@yxRF!k7>R&GyU->0+l z_XS#ct^E0HcD{$NZ|cKCt)M{8@bvNF0k!=U6dE2M@AsYJi#qO4{C|CdvB>@qUBcOw;jf@T*Ki-~pc9y2>%1e`tbX!)GEc2ax zY@)LJj+&oFZfoUHcd{{H!^LRV|adamBId9$QVg~7&+8|PS;_eE{Z(vr0QQ zg<-2fw;8tc$v!$W(>NkB5@HT$FLG5?(Z@%w*VaTH{_*kg)IOECAWOY;ai@;y5s{IF z4-PPbX2|dCFpRJLI`z`TE?s41=J4?Fb+Nlao?YU>9eD2N@86GKzU+bGe_U_KfRiUdZ{{Q{1d4B(j;MG@azFc$%9pJXyfBvPt)#bmw zzd!G9|My5UJO7kE^%f15tx;z`Jw5&M=4N$2KR*_BcJGOLhf`*?3oN?y`QyifmoHCV z=-dvv)oxYz`gJ8soKBuOlX9qq^UdAe;`;jfbw3`mgBEi4_3?$S3UOQ;_V~$@BOe|f zmNZJ?c=qg>m%EtL6VSO2ppiM}cD{`@Ka0}N&x=i5wlFjV6cJ3IZUGVFijyW!-nebs zvwweoKY8+mAz-PO=&G=_USVNkppNvB4nZC{n;F}3Z)?@CId!BrH8)EdCb39LN`mH; zFWp_cb) zcWz6@#U}0WbsiJ-+(GH$$p6gS+jI{eJh)@$PS6_DXXoa2do2yJx@Ny3MC;kPx!&jJ z*%lTTD_dCnkXJslxB7e9r6ry_@0r;e8w)q=|M#o=>gw>vj~+EGU!LBXF7C8PLs5~j zyuAF``T6H3sd|HkVR)rX0<5NKu*`g>*dnkVbVKRKgY5DPRdBKQ0>Z-1lhu5^l(q>x z5(VwOzOgZRW$bP<>+*L;E?x|L>9L3-B_)bOF)s1ZkxmyEmkXQI{oVRxKzH1=^UH_n zoPT(@y|Az_@yUsapreO7Iy!8+O&a#?v)ljYllQ*M=2x;z+xcWCDe1a^P7DD}Nq|bIm<6?8KucJImp`+*3u@VbQvH|L*ZpT-Y!%oEI^gB#(N<80 zH0QQa zoc1(DtxY@J#(U%D&51K-o;=zuJ`*(jyRk*=#GFjU7L6sKdEuu|k6v3F&B?{(dL2cYU;|y8RPz3wthu?lkFW36d8OCZM6QY5J#EbzomC+# z4;^e~FDx&A{_X8;(9BGHe0>v2J{SFZJ2LLL#=E+>(#^cN zb+>i1zNN3fd~Ij6Q@mMYgo5V4>TG0@+D|<&YCrAHf-DG79YR=$mXTXmnWyC9Xs6451MO? z+*h;nndR1~v*+#qpSiQMcxCix)CROe~h@0_~#PFHqeS88FVad2T@~e>9qcy-|u#Vj=%=@b-brAfE*RrImfnoTEE>d4tx9k;s0h?+S$#M zG)~))f8Xv{uQcc=djms5&8a!(`ybi;zV_u0$1CV)YFW3yalQqK-V#Zg^A5J%Ux9e|DTt;kgCV2EdovEpJmaU=#yu1Z#T(VuYcRU`~9B2srOHmJND_P?s@{+{B)U504&Ni`fo0zYcG*06=ckbLA`}(+-8TtXMudbiN z6?iANd)Cq=-(n{uYghg`_3GZZ;bwn~mqqo7d9XI`xL(XYH1sw)3yA`11LDwsWM$dezcArE*J4%bNdxzi-L9 z+BIQmXYacZe}iielGRZm6a`R zZJ;`MX)xWR+uc5ca zx7a)@>$&r7>g|7@PyeddakFU2f7aUnaeBXk_Hn-hhNE?yM0wY6Or zxA)Yh)YB`1m-k(|*wO?lU0XCvK=7*9Z;F@^?LlrZ{MDs znQ06%0kqGeMv(T+q%FA6i z6*S+~BCzz;zrVl#e7l_wYF!Ge`%RcT*LQo~UCJNccXv>-zp&6b z6Es&M=*n954(_Y{{o&)s zhX@KNI4!mOkC&I1OBy6FfDY=|wr!i&aiOPErerF% z2&DRzm6SSIxh0GBWmrl3k#ifVs}j` zeh!+M;RglPoVjzS_Nkq+1c&q~ldVy{1qBFEbW3fd*j&799c|Bj3(1|LnoRW)@b~z^z%Kpc^fA@3v-UfHz|a@tk@-|l#y?BfHC%rf?M zbB-Kw(b3f{EH1umBW0eqro<5iY`khPn+iE;J~nN-@Z9Em6KM7 zuMb-4CHm&=+rr}F#qRxbpxLNfTeG!gL;uXba3NsN-n}0`eNxiW0-bCMS{V4@;o;P{ zJpqv9H1!_nmdMYa4}%VciH|>Y`0&cm)naq4%a?&ndVgi^H@81qDIl z18?7+m9PKPxOA!Nym|9L$LUB*OD}!Q$p}siivJYN%)*RSpFBA^`N)wYph>1TZ{NPW zw3J&`F1NCw3JFv+3f+Sx9+0&&kMP%(a~0=uUwAz$!^@dd9m+ovnwkConM|v1)Vd`$jJEP_wV9g zUo!P#ce!lMy87bQ*45AYrfq6jsNoMz$O2IXpP%_QH8+DyJb3URXs&&#m+RK7s~a|M z1f9bVI<;b5to5yJx!#wT`A+SNc~n$X)X~%Pwq_ zV_Y;&X@fJY3uvROnwA!*mRuLR+bttQLs3x?bR`=@ZEY=Rhy12ZhmIX%)7I8rvvzIf z#YL>UcJ1O?uD=Je8f<6bW47>hF%LgIJq@~?5On=OPtS(!+m{zVKL?s*Tk1W%sIt## z4`?Q|MPQN0(j`lvlNB8u9STZHpld=GEn0Nq#0iE2H*QE27Z;y7bH>2j{P>|mOvS~; zQl?o;DyNi5o;`I+$%a$$Ml694gWuOJ{|4 zTmq-)77gZ2n>K;&x7(g~SINq1*6#B6Mc?1WzPq#Y@ZH_zo!#Ba+S=ZmYv)>(W?Wez z2%2cTa6zE9wzj9I=fdU7&hhc`wzjrBJUnqX{yptho;+z11Lz2nr9l&C&h!iln)D2G zVa%jSlR)d(KYsl9drd8xB9z>hsT3|e}Ai}t52RatIKPtlBH$j=bxJ==KY8-tXr0LcGi`Z!R!pSwzjLn z*Y`ozzs+*LyQ|dD$Y@dF<6|>s&B}5+zB+Vu*sAAxE|K7N9B93?(xpJF1_39~8qB9t u!Nt21hhi7FH3<@Pg#?d)Q-{*8|Hlq3-0q%SFUG*Yz~JfX=d#Wzp$P!L)MJtW diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_7.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_7.dot.png deleted file mode 100644 index a41507588f520a69f7856814508bd24a32af30aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29505 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≧f^^EcjS6YM;p#l#>eC>SZ`|3y$x o&{Ke!K~Qiaiy?ymg7a72%2-%oNBK@!1_lNOPgg&ebxsLQ0DMV@)Bpeg diff --git a/ChibiOS_2.0.8/docs/html/inline_dotgraph_8.dot.png b/ChibiOS_2.0.8/docs/html/inline_dotgraph_8.dot.png deleted file mode 100644 index 4559439b489f9db5a26a1c962eca960d68920911..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23990 zcmeAS@N?(olHy`uVBq!ia0y~yU^Zr8V65R_V_;zTZS_=*fq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UQRQXb01?E7!(*hT^vIy=DfLE86#Z&&;CQWf}?;)fTe55swR#_ zx>4^p-~GB`#nu;9_w`m>-L~tV`}?<1TjpJT6u4GwZQWh1jJ<;IyTq?`xodN9aI9!( zxbx(@d;Li^4<{zh$t~AEe>}lFW9FGX=_fu`o_{Xnxim<#0}Oh4W?olLnSNp38S=7f;Y+1uU%r%BSXxfK?O#=8WtMZJ;k^BS z8AC(E51&7;uG}DX;i)MfAK$TQy3t?${hy@D>hN@jyj=~4zrTNT)!7p+E-nfR3I`OD zm6e3JCQB+AaVbq)5v1rB=@|9#-PV;!-Wj$-7w=3D&#=cf7?Rw7Vka}6ac3ywZ{!PbUU0pqOowtwA8jzf)7SgI0!U)qZ%;DAHh}q2Zx5 z)oZD98;|C8Umu^In%JnQStTbXC|=rI{oQM6(8@1oW*P@ET$(XMVr7WdR5n&tPezZ+ zmo6>g4X{l_i(HZ7sA5Ul$Yj%jRbBT4- z(%P@rb$oiP`O(x>>(=TVOFcd9IUA_p@U3k3J49z1z{j z!wZV>s99>pucn>+H%;_QN($@OuJcnx9j5C>hpl@MUbz3^!-qi(m)QB`PE1ctP1UsB zm!udUwqdQ;(Z5HI967!o?|E-uF!=0~}t zY$=&}CS*y)_o&!Lb45kRxQ6f;b!~=l(aAZx_f~(;iV+CE)Bou4nVH5~+t;uC+}YVV zk!iwp9*?C@v*(*ws=J=*)AnAp%8PA_<+N3^Bv*c^=X^Fn(fO2Wu~BGj^v$Z=M}gaX zCg)}q?VWK(V4~q81_qauEvsG`tjpQEsZQ|Jw}qbRUqA^>Nr_2OQSrltY&33RGu`a<)uW4d_)K4)p1aOeaH8U41_l?G ztQD`e?9ab%cV>nmv$T2Mnu~k%a&K*Mtf;U^N=gzC5o!7P`T6wMHtSdB-rn}`+uPfr zWi{8o|755?`;nR9c%SUypP!!_7Ct(X^*;N=1Vx5`OarE)k6(1Ha;mASvYIq`vY?Pq z)4JH*TD`0RwYjO!1Ehr;u08vzq-4YbD%huR@ba=Uyt%hm`sU4>4FAlNL>WM348wzW z@78_$87i9KswB8+^X7-opSPc#ZLX}Q#`gL7`Ri73?(XheIel~I@-zJS`BPCtgJZFK z|FLUpqqVQ5WF()NVaU+1V~530qsTvvjg43Dt+(pz?0mZJ;k&!L4fF5W_{=urb#CK1 zcxtNl>D>6MTc@f@L~qNPxZdB#$EBcP!?|SfM^%D?oL>KRZ+3K)_!qKhq{`l#x;FgH zhI!MbEh`bxOg$f7bK+OsiC>N?Dk>-3J%eqgt>Hfg$`|J+mY!q#XPzbUA>6(2rr9Pt z?W?xsNA0vvv58&y{`15MtGU|W<_5ZpnFmx(XzXH^esg#C_B$W1{FR>?XjahZRyQrmwB-_o%{*moiPQ7eTePfSb6`b;1?v?4)ob4F)K+8b`n|gMbKsIyhxcrIK4sc8HF+h; z6*du0q5s`|`$9i1jMx$0;~LuYYTep5GAXY?S@z{FP&iDU`r$*t&#%FIwu%0C-?bxd z)jeq!mt#%L3<81^&!wiPXW#iazoTQtt{drX9UUck|Ns4cv)IwarRq4SIxk83`ROU7 z6!!4(aoJz@w}r2>qr+!T#0!RwjuR#)+?=?1d5?a1d6~7Zt)t@=(>Hi)AT7-W1X8BV zI3oaRJ4_5rGI9oqxVUwm#&HJGWWv?%IeN^3_)NiR6$qkc(5`b6HB=u2>O zak-UrmPb%<<ZDJzn>so|5}X`eT-tg}ja^)pn3m4{ z+1b&N#hndnffX_^fLmZjUO8!QrGB2CoJPjR6DLn@UbIN*$3?>1 z_TjT@buv$zb5-=8lMtK78qtP*_;liunC@udc3E z|1eWfP;lk6nKL;VH1zb`%F4_(ZQeX_>eSZf=jSV{sX zn#x*VUtjY28t>g*rOwaK&3*XhjZVo57Z(?|-$rOos1IFyu_ zbaiz-c>K6|U+wQj@%!suTwN_bd-=qJNk-0Wi&w1R5Z8}8^6~NU!Y3yL@9Zw;@0Buj z+F$qg!rtoglDD@+*YE#lr6SaMVWE(q;LIg|{?x?mEMg4|478~Jrn4??Z`Y+uK|g-} zTo}KF4GgTphmt!!hangaZwX z5*7stR^{)`@cSq!DK$QM`t;$YrQRJ~U57e_)eAm9^R=+BP*6}{INZj2I68kXtGBoJ z!oy3fdQS3O-8Ef5{?Uhrhi~k!xA&W8!`bQ5bg-E{`N4rk37ZN785x-tP*Uxf;^EG3_V)4f4#-%S@hDB? zU}on#vLbNthjZ5N7u5az<<#!s;^Goj@$C($0|PQ^j#VjFYHBJ62giXWo|8X(-~WHE zuJ(#BgPDqZcNIQnD|>UJQNI3POPR@% zmuAj3&rdqs#{1*t^7#pQd3}M4-4b72S^47D*3}ml3JMAa>Q44rx})Nw(ziD^o9Ea4 z;#5^tl`zkfNjpD}S6*Iz;bCRrgDGuUOV+I6Y3G+ec57>P;lDqXpiFV_;6VxFG@hKC zoEE&9Th5x@s!eXA=c0 zzq}CK_xD?L&i#F|OP4O4VVKPJ?EHLwadGj5&dSP%Qrb*DJvk}7CTc6!?QOZubLYz1 z{d%G7Guy29@kwDp!NA@p&z>onn22OwTXXR9^Yez4pHg%pHZbT$Z4t0CF=Fyb^H_Vl zUq1Qjs?ZzzYOQ5tWj7W)bOLGL{8tE6!ikEBJ^KBA|M69!t0zpE(y}r6c+$m1t{*;q z60$NeN_b=J?4_!rl5lE@X2#`ZynXWaeZ10U4=yftpJ7{VCJah!mv&ZteFbU^@ypvC z`S$j37rlh1Kyt}g#WQtzQj)t|-+aEnV+z#@s zj*bo_ZhYoM=p1X|6#nr0{r=?t|Nd6|_@H=edw##?WHm)aMaLH(P8=|psmM^@>$k1w zsaHis#e)Nl%n{r3WRsGU4GSN+bR11ucvx9UX_3{jGiP{|-Fgn3oo&9c`g>l?t`g4N zTU!p^*;zbs-aNgMiWG$#>C5`GwX_Z`^PTGb$TOO~*3i|ZYkV_6)qzpi$nv$B$s z(j;v?y<^|r-v0P<`FtgHb$0o>ABxY;&SsB}j$Y`j%xE}s<>9)2Khr_Mee&eV8OG^+ zVtO$g)z#Gt4}&VKAWeIF`PbLi9}kbOW!)IjGgUiWNkgMU*YlNznepo8yt}(v_tpMR zI?^Hd;>t?lclY=Auiy8p3!J(nZM3zubz*i1eEj%vhEXaP$X0uMdl~z>m=_m37<|%R zO-MgKFY(!#nIFD?cXxDT1eNX^HW=*Ky_;KB3Y6)>-n@D9VgCO=?B(z8wJu+-&c-Lx zaj=>F@p=3IB334=Tz%4BHB6c$v?h8x-`eQy#}+!bZzz857qhQMGIm#qpp}V|lF}ln z%&V(J|NXxI|IwS9n?dcP-DPhL>i^ZGq^5GpN?m38Hq)>$e0`j2K!89}a`MOZ^?$j$ z#dMo`dwVY=f*L?CV>~@Mot&LF7CrT1aPaWpQ1h9=FwsM$AZ3aEnwf@yGiT1^;No)H zo_F`cj>6eaWn-s^S6%LEzdAn>QccRr>k^Xp}==pTDlI z4m1k!>GS7SzTT3alRccB{r$(I^Y^x%oUE>FU?A}Q-QB}CHYT_7b$4`hcnJLa_isnl zSFL^jer1D#Y2Utm7L}itTu7YAXE@W4F*P+cVt1KtO>OPOi4z;+>;H;Mo9DI6ojVtt ztpzzx-MJ%E{OruZz180@Y)p3l^Y?xI@fn866F})NV+pei!+{fbcbD^DUgmrF>+9=)%Jnb{{z4u+aI!&c*KiN!Qjyf*LxYfseq& zZk)10R~aTtDu)IIHHEGYdwAL3zIFb5`E9wk+2Z5l!KrYS@S#J8UbzJ41?#Fkd-5dV zU=!<)ce~#kvHpk+=W%WATOQVe6$#GC%`7kH5UU+|k+TxV!AFfS8zC zNkj;5(n4m1vz|+Xa_;O9F?*yySIl^Utb^OEF(^#&Lb(@1wJVqQ(j+RFAr)5 z=tOPdczmq)@V~#mH&%X5+p%K@hpbd)$H|_F9$sFDo}8Rq`0kFSPW(O@?`b-X5ohY< z1t+d!VPl(>@}GghqU6Pd3yK1gI?~e8AR8MS8)sORYJm!m3l{=-Z0np!6pAGT{Bay@JBR%?}T^KfYUj|LB&?%M&I~RxXJMVO29` z(=j&}2h~|WK0Y?gyrgnxMfwor${igY2X1Z6PE1WzEr|g24Ak;pTv!NdXW7`=UR)inzb0ZM zld7t!Q@g8|!AwJkg$ozHxU&+@ za5ohpMGFgw>+9p)>+0;{>i?F?*i;0(*xgo8{xQYIYR^Y5?Q^6uBy*Dr2t zR0b8?lhyqnUG}$6Rj&t?am*LC(TW4DS z?#{tyXJ<1qG_&&`TN}Oo!Gi}3D?_@rW?xVG_~dw*ZQgu}(fWl7u8rK)E6_j>C7{!0AyIOFY=b8nH2nwNKXin9H)JBS&0hED9W67<_qlppjXv zw$8=HWtp0Rfxz~>yG<@ijr;fSKk2tETL)y~w*32j+1J-CT(gFUAs{BE=k#>_!>3Pk z^Gch!q@<`+eS4!>Fs1EmNVeXgLx(Jk%>@M~PRzWyNmVa)S4%6mc+#IAA3-hdu=R1h zRbO9m%0|sSJWJB{^obJ({`~y>w6n)2GgEWZrcDO<_iWURT&&cDI(_~LiixRxNmWx? zby-D-^V*uo=D)wcCx3r;_r>Mq{F5e4YT;XbF7a&7ytA{-`Pawo4cfi0`1!dPmzH|# zy1AzO0yP#5laF!8w#D_xSO&ci=;(Oyzxw^&@1XXWpt9S8Uh{hn5fKvis$T0ZJiN+y z#+ervcNRb2kbYjyV`Bwior#%QP(nhZM8d@-gdJ48zPh@4 zhFz@{8;?YTzuiw3PzLl+5wbFwd^|0!DkvhNV`cF2LuY*cs_NEME5`uz~8nNPbTP@dZl9;kq{juUyucvFx zMC#X{{CA?@%uHi;P{Vzx_w)-}v%_twzIeQt;3GAA=F5YN-TObBRG%N>mExi#c;@Wc zz^JG$Ioqm)OG`W@>}o7>a&uX`rgU_eC~E6;xh#s(w$PGW{irat-h1h#sNR)Yn<7#? z!$J#J-ij;S`N(MIs&(BPS5?@iXw6GL`gE2}e^&VUdA5arf0gpcT8YfHE;GF_d|r5Nj^&Gsi{01CuD>>E<}MSKwf+76JNK&!advfgKYaVP_vB>ti*RKOXn1S>IYFu-^aRB+1~@9@^&~+136k>5(?)v#tL2gq>e7P&Rnu%PFg7 z&FngVv1O&mt*xQr=XWZlo-~lOo9F?`6^|D8+cmYewqAHRL&kBEWbhde(b*T@-q|TE ztnMdbp`@fFG-;L8^jRXOdKD*LG&}Zc&g4hMJ}blAqxp?MFgMOHi z%O-t0U-zV-t$QC89Ze1G-E>4h?(yO4J!K(tyLT;fyftU>Mv)t-&sS&enU%ACNAJcM z_Sy^IZV6pw^-1e^HK9vcA+)?Y_3fXnH}xg?_oZD44&4zF`eR+*!aYfgBBHOqIXBmu zgOl^(ugY6|<}roUspms$&T2%b_gpEx7yf7N8@Yl^6R0gavo_*Dkj|1% zdW$|j%3fwu+WMyJb*SjRsk-6Ye2-=ae^gxjI(zD*Nlg@vZLO$$_;^&pD$c$%Hy6{ij#fXToSL&CzLWPU?D9$}Dk>`Y@WAoSt*zY8&&{2D zzLSl?cb3UTt+d=}!Y4DVH_c!5_UhZ?0r`^x&Kk^IXti*aqV3e&{I0oPHw~w6IeNWk z!>V0;raS$P9zAMN`bwnk$3yl%e?Fhr(A1n5|9jFTp`T?xfBw8`$2M`*M?Y3b>U*R1i$m1#Qw8De4Z$=|nUmX@C0vG@D`_pJ_J|LDuh%M-ko zT2y>kaO`}#u0iN@Pc`GK2gQr;F4I{VxHazP{jF~w9&W#}yIenPT}&|LvPMA$i&P`Rj}3&Ye5= z)b+l#Yjw|@nbPlhWkaI#jM=lbW7Ct97Z+KvWM^kj6&AU+K3@LotE<7g&Ye2NHEr57 zuj`sz+}zF?85vV=&s16&(#6g%_u$sn>>YJ~tw0rxb@{smD^_^KU4H)f@#3#`k=#C4 z69rE8Y`P^Fs=sg5wD9lemhVcIzV*VY>pJ&}UuRclRr{{ry-@VY*R_w@=l5J--LYwt z(Hx6HCQ#pWrg1uh!|Iea+2X6g->t4c`@G`OZ?CI$y^0GTW*;lrv17-9qeodmt>c%M zmv79!Z};c>{{Kf;hp$h_%Uidt%uQ+HgWd1C??KXG(%n&9fR+Rn-j}HaOhhSG(1YFS~K26_3(PMic2;r^!!E zbqlhpauya|>A$6ZW$TG^=Z<~9U*BK)`r5;fkBD>spkWa zd=Ghh>dYCJs3@sX6E>*O(l|4Vt*14+6>e8i46DCe<+?IQL)t>Hn*9y!cO;HR30Z7ob)+rzG2tyX`yf3H?le1PFeEkGw;?1 zftPoSubNhTh5xLbP4;7}Bgc+`1~@=tAYENuPu`vs<(8T`b7nzV*|lt$(z(0NvxKe} zb*||@a^%Q^+4=hpipSS5nwy(1JiKz-o;@~|PLn21TxjNa^2CW1S1k7gE_N#@DRG&s z=KJ8mgNALnw-<%4kK0lHexBdsE2RrVuoEiwg@+oIij3;$ruW) z(_JmPUhQErqH$1|E}dx&M46W#z?}3=W!^nH7|jv`n5XJj*1L$=uxh z$M4^V4<2;#)TYUt={yR|TY}rnY{+SIz%^?{~SP;$lHT!Nv_6 z3}h^eT-G07>ur)Nx-cg)^lWhI?U0yd-1_nRj;xK|z9HwPk&JcOnp5vpX9g~IJ9zjo zvz(k<#?4Jj|CHanZ)Rp@)jjc*S+j4N$jYk4t8ax(+_sgo>$X&pZ_BpA(C0QiPopxN zV}D1b?!O*(@axad&u{FjwZ67KzJJOTkr^{*I%-V~``Kz(^P@mSTwK}SUjFCLpIPqQ zt2{O?UiawzE322!o;=aWZ3>Et>YA<}ze@I9h?|bsY3^yhvrHN%PoDheyPEH;DcTjM zrd=%yWF86d3pJXlP5L5*LZt-TUc03@ebItXU~H-Z*=N?Ph7LKu;7>^^LlrH*6nqVHr+}} zPHw)q*d5fUIdSfsTSZ01+T#gbB@+8ek&hdqXg>BfhY1NnAGiT1c71&Xtsjbc3+S+>J^l9h3JUuRM?um2f z_BJ&!foit8?Y7Fw%r9TQ+)?^^TFuSR&(EKJd-~2DnRDmPW!&3idFRfZ2hX0dm6w;B zWMAXS%gf8SwnlQ!+_~9vK4kowx#-PjkHVc3K&4Xt{=Z_`*VpNqv$w4|keHU%wq=XS z+V9%lZYlruOF2(%PCtLjHe5$+x_6AMtn9@_uG|(D7AO9P`2=yVA!J7j8XeE7mbXT!WZJ8p4=YIk`~-X`Cms;XM??M>v)XRa$(t^^Gw z1qBJ|#qH@>vP8wE_E*Thcy4ZPliXV(d3kwK+b^$s^>zKp^e(mcilOmLyVl&T{P2Jg z)SH@XUCz{SO3Jp=r3o|@qOQ)qa^*@bVUeS1@#p8+uKp4=#q|CpRgHc7_I*kf6`pde zS30}auGF#g{Q;?>#-=NmkN#h$cK`RTnztpdu5haR&jWSSLAlq(&25@@R!Hf;?VC0= zZQpLbXYbyr>-@dFwWmKha`foKe}8}fcsf1)!;_Q3mG=XytE-oK_O-XO&oa+nx5;wl z##LDdBqdX~?(RB$)wF%>k3U^JmJ1C#QrzbAd_DA<+5NA9-KJ;u?)`GC3^ujDM2`2% zA3r%+z3|Nq!<5uiN2Q4imMmFv>Gh2}cVgZ?DLv+;BX;=a&7G$jdAqv0Cd`@BqwYUX zK~a&>f1b_3$?E=ErqM<$vuZd)o^O8j=H}*zty!Xeb1W7XT7PTh7Ek*3=jYRDra3n@ z#2Bx;9#_p9ySr@af8A*H>MKW|$#;E;)Ck@Fe%F`Uw5~0gfeUlbt`9Ih8oRsf=uG4E zf|r+6bz*mkJU=&=xgqQO>EfcIrpc3qca^=3%8U&R6qK{Ci&>YZZf7UA+;6T^Ow61; zX1DI#k;%);)B63|!onite+#cqDI3qlC&ex&($-x~{B*Ks;~(WM3%k|$QfADVI~O!+ z;xo&HGc`4JN8w{OzqwYe%I@Vs;V#U?X?!u zjSA6oeE8wsEx|G;o|D5XlNMtPcjqKN(*S3rW>7QlDKN&iXV|n zURm#WRBUo{eUALG50=TFPWBj{ID6K$rpBhGwzie;=mHTDk&F-rw+iYvQRjbzZK0SOP;>4`NFE1`Ki|fZt z;TKb!=n-=6yFzeO6qmQRH;;_P1~Vtq%&oB+Ppdn69M{L~{qTH#y^^{4_G|rjR|G1X zWL@F-_wV1-Yg4C8QP9*}8B{;ld%9lY_jh+c?Ws19x`p(w5j0V zpGp@uw?{udJ_ZfwGpxudTV^p!V4|kslk;-Uz25OWxi?ZbM(C`se0hC+{L-(MmX=f5 zR6Dx6ol8ng9zA~iba6>kRMe@-(hJ*WUwfW0yX}u$Q2R+A(2S5pteO@pYy$_ z-*IKuiIXQUYHCcb8h@Y=K63oHvyPav*5CU!O26K1nKO58?Alus&z$jDx;QH`I{LIQ z|INb(4>IQ7+Ol#>jA7!&?c1-fvdxN!h}e2AJoLXnsd8n;XSOi&@D|0($Ft)jCmY4e zEMK#RCoL^)7sp1w!jh6BCnhQz7CrG`I51h=UqDi_(>VQ{L`uApk?pc;_WiHSCVHsM z7h4d%K5pu@Y~wpymigAK&dOTlS#0DxYju|KqM3^OxAR!dG-Un${{Hb}z0w<#kMoI$ zik@s2T{A-=y;lmA^H#>iRcJ|^z=XR}Z51-nK(A;-n8N2yowKX+0&AoTqWd`3}^D5u> z{f~^|JzZ}(|BW>gqnJEU*0hEK2_H4X$gtQCk8cnN_?CmIP@E2?>Gf&)VPLrfQd{sHtU@$kdv- zhum5B$SCOih1sSO%ErdVe?A_U=iuf(e5_ac;>uukkdJ5BR+}*~GnZQ3pRn=Ed2T*F zz3FE{N43u(%m-&FEK@HQ+NPr6Z{5>Dtdi#@g{(g?ylF{hc%=Ylf$;n>qy8~4wdL(3L zcVAxafB5|Q^|zR>2u#eA%r#o<5z6Rzb=$2s%dJGztz-7pSZ><9x$xJQOwdq*d%v8k zmlxNOB*RmuPMs<}bN&c43Bj5|9F zXPIOMWp9>w{`9G$xw&{{W#x%8XI%XJ_(02dCQfYJvc+V{vSmuj%FO=r?T%hv?muzj z#K5Od`nyzwI2jUdZOM$-l)`!E&Yi5iZJT$U73@`Mi zUa0I%#ExCN!m9rtyJY|V@Av!1_4of-R3_c&0_t_TxVbHI?H0Rg#W>xmKkuB0g^ zdsgi>72RL3^=E9M{jRj^>~2A2w}c}df(-wp9=>^Ua`KO-)8hq1MOF7puXvmDF66sO z&J6+EsxJ=xa<->*^))peot&8D>}ooW9C4{UsB2~>21HA-D;|% ztNZkD+UaMEt4`dzC+F(w`YBN@brBKB4ZT1qB5S zix(@$#Kt~+@PHvdKOZ#wbMPSJxpU_>Y~LP!dtQ8`P_XQ;oW2!#_m53DaYEwsiICsl z-yh#u{2Vm#^5aJZXwlKn&(EKJ)2zNLA}&7tcK!EvcOSlav*zkYpVrl@wZ-&eI$F8K zADx=24JzCB{d%Phn)>|v`#Wg%MnFIy;PLC^j=!IUgoOpArMrK9ef{|A>Ts{^g55_! zWtiU_i^gNU($|YxTwYyOnRxNp=35gaON@f&?tZaq+r=l}SAAQn9Tyk(;nSx>pxOL@ zfClgBdZ6;{lYZnXOXvE>FK0#Q9Lrw6x9xgdweM3i{kS~`z}>HT_Vs;x_SlGsh$t8v z3$wDaf<{grAMe-Zeg5~=Rc#NINk!{}J6)KhrKKaHq7EHA$hd9WwhbFMPPBjX=FOA+ zr=O{9+PJZ?xw+YGt9q}L=_-?)o$Dq^NP-HT>ppHDm#h62nq)WYaoC;xdixBFjg3FP z-F|=7o#{#S+7H%8m2|o^DZBSQ`2BwW`imQVU9Yc;y|^_y95nI#@Zm$y8Y0lL4;FUz z#nIdIKob{jywYs^{QOgY8+`d!$;ruSQSm{6PsXBQb@=*2*RF}(yLYdnvvcK@D`)Q9 zk;&ix*Njibf+0IQyHRP`E|2@nS7rz``=z~N^7i)r^8UX3-{0TGtwf9pL2IfOyY*gJ z<}1C>`C>%3nC_F4J?kb*xcTH_?7Z~-=Xo}jMqz6r8ozw`qP0ELC*@w%Yh5*C z(JQON`5PM>Ie2(n>gw$L=Gk=4um2|*U-wh>+1c6b^78UuUSH?0{q+UZY~|T??9tWL z;X4W*GM$@a*?f7qKWL3@Sy>rqx@Vehbldj(b<&lUl~c3kojG&HAn%Sv&h2e$ueF_1 z4_b1bF{|aB_8RY+a-oR_i;9YvK7=bR?pHZBLsUd$#h*o&Op_&No;q}hsastC*q@)D zL;03-hxny<*lKHQgXUcG=bbdQp-Q>w3({NR$DzE_!~=r_NKIZK<7SE-rSDRF30K+PEVo zyJ^iD9neCt^z-vvLqbGAO93`*G6Ln&`}gJNT9r2K-)~=2Tl@8soSv4JQ%;Uf-klwd ztHakTSy@SyzrP3a{hd2^F6^(b_nB$Ln!op}SWHaJm3P_S-rW2owaa(58E9FFRsZxA z+pb=#sdP#*a&}?MetK%^9_>|!9vo~A3Incn!Y*6wdfJeqcpjXQD z(#wxLwJEDET?zu#2cY#zy}i6e#l_lR>l2g~SA$~MD21bqN0RBmdO`90J3AU*UtjChOq7WZWCvr#mhsi@R^)WvOU+Syr&XJ!~i>?~3Rl{kWejfdO$lTS_2)X>#+J>Dn# zwEV*E^7nnezP^6_@c58o#%Jo6T4 zO!Ldz+v1?Mhko_PN35VV0K3cIpQ@L$tC8@ZZ>Jm1ot~cF{_E@O)7cWm#l?X!F)?{d z{6T{t+1GgN?Cd}p;nwzietCKMimIwtOX5#=f)|;EKK?snlBjmrgHKOSb8vDV{POa$ z@2ldQ7iNcX8anhEep{MoD`=(^l$QVg`s#eVPu5g#gXE(VA=~rsADgJ`E+8k@_u@syj@`SHUtL)_!=i9e zjmv&@|9KByuix)hSh&$<;?Jkk<6qs0F=|^7xY+H*-QDI@-`~aNRVF4btT{IyG(2N& zF8=f9&l4w4PVAqOk($aXEiJuc#}3edQvqnyJ8_p)XOE`nyQ!8nKMcaw#dOXzPJi@# ze*Lj+xwkKD$qWWfRA*H;%zE|4Jwt8knHR~A6pVO&{`|Qo+HDDAbaXV2yq(P9c7Aq- zB}IDV2MgemvjC2p-US*mrj%=USJ$E%%%I;O$%9;^N}Q#o_BVY!C|;htIxH|*L6&oAi!|JVj?Fu_vG?_W~S_X zG6!ZDCb#e{o>TSp)xyx#VUPuUA>RFRwj1jI*MXMlRDFH*aP|6qhd_g0g^yf*{Q8yj z_t#em^Sn9d`V!wv{yb@ekJikKUynGpow;)FM`mUwsE=DyWAo_oV?lB8_Tc4yikh07 z2jYeA7|v9@G;j54?PLA&{U0A6XJ(MIuj_g7BE!Yq9h6yaY)^>rm5`X-WxUh%i$-({jIh#NoVrsYhup5rv)TkjShD0JH#l`Lw zA09AHnlvdOB7);V{o7mJ-QA~sZ{66C=)AVy(`D+`jEhXVQCkk2n5fM7=W3yynVHzd zix+p){j~zM1Uou7Y$`vo9QglkUUg;V!qn5#3JMDyAyXaQ?etyRmyY~x7OLv3DCXJ1Sl_qk;#l^k2wN+cqZ%zlOaydK8^zy41 z`=3vQdnApQ#r)?DeRgJMvt{wKjIH&Hb}g&>`zvC9ooySxeBXly30rb+huO(g`Q}?l zoqn<>rJ_e^CgT_D!U-FVrkVfy`}_OFZMo4u?+bOZC{0{($LEewYHF&6j!uhOROP4O4;I;I`sZ*=I?5XfqV4 zyr2c@zrVc&HS4$J-WIE?tJ|=B`}&JJckbGC=<3z2Zod^4o%;3dZTJ1U-@Mt^*Bwot zU)vVDyDahSEK?2+4go8Z#d_BRze@NTEk57bT;f~EBAdM6{p&|hpSIf7{!-A=;$m2p zb4qcd2dH1ZVui*W%VM|n8wDp8ZAwdDzyIH^OJ9#3J$mBA2?sYfHt2NQo;@}UE2eB< zsQ>zOVP9_tTExQ0%$9I> zS82xGU0bjHHlB8}a`L1}7dEH+KY8}-)N?&84Go97x_!5vFI~3mRP>w^S^GTAd(>uL zY`wK==1k*sKG2Lt;p1b8S5^dW*t+%VPeX>sm5-SZwDC$`*jM{o>$~zqj|Yz)HGO`5 ze)9z9lmjY4oY{6A9P8Gt1N8uVB#l4(`~Cj#?c36zRcM!%dT*7wb1*{fdG56}l0rg4 z3=HSz+piCs^J|8~Ha+9jRlRGwp9-j`pZq@<*L zX}Q1ron58e)@5%FOw|qtt*!EzV~{o;Y{z+D${=x4rcb53%;h+sozU<=xm(sJv(IUhS*rI*ulp zWL#hf3=DL$zRw^iDERm2ojWq12)w(y98^ok?5z^by}j+I_4_@|$;bPqO0N|OxUau! zTh!Hz!&k3@b`4Z5{kc}8^Jr2;WTc{!5|j6Iy;cvELzkEPGcrg@N^TX+nj5hE*O@C~ zsb^2#xqEkG#m6L2Zv`|S|L|~o;fo83J~Ip$l_ql3{{D9KKqK?T<^J+p^6&3E#o{8) ztn|V=D@&{H*Gu)5wzfz2_EvxR{{8r^t=XV_s-mj8Fm`v@r`)q=&nBj(wr);8f9Uq@ z=%;r4G8O^S3$I%R+v+PRDHRtNgPND1on{XYw{Oh6ti~f}BcU6;?Z}Z%VZ*XF5qrMf z%64jBIT2JjKRG!WG$slfUEj3HXlklyr%Tf^-`SuQ-JntTZ8-51 zaF5bV!xpApW}w0^{rtR#f4|>vZ*6s5`ZX^vZ-!~MSlZcHt!K{o$k;}?N)z#qiHS`bbDK_ zVb&E5P*O-uP2I3%%aNJJ=?|ViUtacqlcixtN5_dBCw}#SD)jH~@4IJYXn@wk*Zlc- z98_ex^++@}G%z%0&Heb{p);roJT+C@qWqoAyL)@NwY9ZD?Yz^|bPvzY-`8nZ`zs_X zPc2*U^N)|oEUc^t4;@-`$v4kALo3~@XVuJ^8(&;sFF#E`zOU@FRqKV-mzmx!jlsdf4o|~zTnS~!b;Pn6S%m! zLAj%{XWqPd9Gsk>eKdTsRxMk$nB?5tV6A?m-}h;8>gL- zn0ochvM&lsN~^f{?Afy+?W~lFy87c26O}98ZoU5DsCYbR_dv$&ZMtda=5*Hn{-&s@ zxiajLrmpVM`St%gKYS>t`FK+gYKrJ%?adGyQAzbO{=_QCQ zM;CXMW>-{HyhxRJap;iKo&ELl8#iv;QTbU7v@BiPJa55<4FaH=enaBn4{x{MU*z5| zXJBr=zNmiQym_D<0B*fft?%ycer*${#2{f^ro$&|r2<-gxWss$bPxlBtOMv=fR>#* zEkW~*j?HWfmn>lshwcXY_op)F_BP(5M~`mUy0vxsbn#nTv)T3a^+ElJ!-tu_efzdy z^XBHIOH-#F*VNN=n>Re^>FE|$R*M{)**0w37B=h6l&Mn{t*xakEiFN_(_UU&lO|7| zIA>1Jk|iofjvigOWs8VVCrj?_ZLZVxVg+Pmdh+h>I(Yc-;;8HCr>E(zNmJd+$-^UJ z#j=-+ho@!t?%fv>1q5HVMCiE9x2wId++Uu-AudiX@BY5t8#f|A(FW=trlhC{2??Fr znzmufmMQ9HUteE$FDu(tQvli!BqA;zKI_Q!ix&k!gK>9vnSvtZ=jZ2(b8m0^@aa?2 z)~#FJKGywyyZyt*j~6RW_16CW_ORFd-i3_lOLCJXZC_tr&c7~xf1j*%S;EIhM{jIS z=ePU$MEK9=`Twu15L>*cjaPb6`uTY;Zf;&)6B!vPInSoDX~zzWBgc;`D=IQ(W@dW$ z`W~HYT@G5#bLURXo~o~0`tkchc7bM(LEGr=-ID_aXLmREt!=s8|Nj04jmF-)cMsH9 zzg3yE<)BO3m(2hF{(^T!UQNl(?ajNpYhm>Eyr(Q!&sy(;H88o5BryLnotP7U1}-SXnrrKR4W$(NLr6pgpPwZytXrKnES7LSG(uf+Hm z0=nP4c_Sbs)O34$K4^dxR0HjPzpwkojT=$DixUsGZP>njx;&}gexG|v z%uJ}01(eGBWUaF-H|^>)HD&@0mTgQv4l3b5yH4KT-hLdk59i}?`OUI6pzS1#TH4x& zL5p`wUIr~$zWi}BzukeE#_0vGujy9)m)sb^6CNHeV^%~hXdx}9 zcB^eZZ+Ce2`+cV?qd=}IQL(j^jj#V}YL8}NUKNer zmIK53%y}hmb_uH%a&T83~ zdmGf)bocb^1aBl1lw1R9WT^FW*LuU)(5)b8fu;*ugDBrN>#YIuC&@jlstq9RbDFf4r)a%FY6 z|BDMN+Gd=Y(b3YvvL3TBiJ#q zv7prJGtWj6ynn~d>QKtDBYP@7GR-#2J#?&B`s1gk-XK}|+Ao5jS)Gy$Q0Q(2ZOsL( z;OLXFWa8)N2X(I>AMZ~WN^ZK5e(VTnHvjZ={pr`QfVOhZn>VlG``z-wZ*L+Og7&y6 zUFzPn$q2L%)Ajp1@NAt;^*0{SI7Kr%zd`A%5H%yUu9H2To3?BLZT|puFG2ez&(F7a z-(U9^6y0m1w=3D($G;E&Z3fBGv9^}ZzP=8$Rg8(5`Qe*4J)lwZOG~{$wkD<>d$dk7 z*?6;+ikcc5Xw%8Pz15(hx6I4SK%<2P<>lhwEn`Y+K|6D$&2kRBySrOasMDbEk;|F6 z*3*4ozm`xlF1@fh{XA%+4Cqh=Q&UmUX$W6lUN%fPz;JJ`f|8O_b7)jl7igQ)<72%R zwZBZFw&(TU+?<~L=tyVAjSUMgJeh?SI-1nu=*=0Cp=wD0!LofvS=UeTwisd@0?Vs}9)sjkPz`w!o|DLGl)|Jaq4 z!52ZpiHDV$52m!80yQmMTv)dK+yCvIsoSbw|Kxw92Q)1cxKbdvMnbh6_J;g`7ZXH-IjZK$};~A{2MyiZm9?9v0j?M%5<^Gb?t&M$871y z%&EP%HVK^yTk?SG`Tqm|eZHIR-hACSzGCkrPV4k@Pm9m}RI9mPeD3GDF42!a9`_$_ z6_1lBzgL-lr~3U~!`fe8_MB#B@GD-w?^o8JZ`=3xPSp-Sw*TMP^)t-#<9>2qo2cym zELP6cZN|by&z?Q2c(d_%($!U=A8%!^KWchCM!5WLY51Me>#=#x%nWS4-rnA8qPA*< zt&I}Z-}fUartas{!t=J@kC^ZO>B}s7Q8}?~)t(QBxHlF(J@w=6`#SMxoTkYV51>|Hp>R+W+^>mZ(<9lF;ADUy5A9De;Yw*vz(4&$Bt#>=Jw7s zP6tg`B;VUpS$Mbf`cGbIk23*nGre95raky_;mQ?}+2;9upnl(Fe|uSFx1J9Dx{uvY z8H~%`+}Pv)$SdGPkO+-^`~0kmuQSdV1kY2EEde9iBQ%>V!A`Qs*T zy%W2A7EC@U$FSh@9@V?G&-SaW$d#}Ak!bV(&*zU%Ci@@jleK|W+xxBfv)A-+qcKaje=2|~qIz6rnl;1~H%uWY70|)rO_7 zuFNn__d7GwSUqp=*Dz*A!#6FGMWtU}T)Y9=JM{O<<&B^vDgS;xfBfU)IV5s&+z-8}dA)qec*`TX&BcXua$ ze|PuetJUj|ot&)x_|s|qe(C%@hR@E-6psIKNc_>FZoN~xW6l*E;xT=Cq*M6gA#VL6 zo6p-xgEH2eo14|Yy}vIXIqj&cc&vzV+L?~*^?S|M?fdoW#}Rcq!SI;E*6ISr1@rG! zKA&6h^=kOzso`;*pj`d&l=k`~_y2v{Zc+EAqDRtLZQcHVzji!qlYZ1Do!1e$Ij!>9 z)LF`B0zUuyJpccZdA8L_=jYjeyyUHa6vV#2ulC}#Yhr?elhyt8*k`W{UVcn8JO;$; z^PH@9w1rdn(VgP+XDj&`6y%Th$#!qQSEc>$V}Jb->HIwxpO*gk@UWv}$CF9kk5;W- z*X3XPD!A~h>GdODUS58DN_)MDkfy2s3`Nh}++5JeGH9FB;*~2k4m0O$q87|BQ z9Y|3B|M&e9n{@hQEQJIG-|zolCu3V>!Y6Ab(#|K_RerzLJSr;c(S?Q1g>PZbzkaoPec$T!`)&oCRPmniaLea|?D9uIJEZ6T|C7FD%N7@JZ*Nd5@#DMQ z?~j4R@0Q>1y>{(dM+c}`CMziacfs|Q!OI`LxVZSKwjD!2_BqSvb1c5!DPA0)F{M7| zQ?mT;2vC+e)+;Rzvh?HQ&MJwTLp%%&6I9Hdm>3v5 zh0+)p8dNxq85kTUwMa5BD0o6-6WJITJSG`1Gcc%l&R}FJ=*zvo_2k6?CZp|%gcN>CLC5U545ZNVjdR||*0W(9vuhVa5&IFZ~lT^JQx!eB=JX)Ez<6+yU`>jq3|Ew}u zyL9Q&nyE{+ZZ#FtjS}JIY?piWZS$pHt4zz@-00}g+pZg0J*VpS`hRDF&l;&( zm%Zs=mQ?Q(@5Ev8MJUJDl#M>(H;ugRe(t zWc=TErSVN})yn3ZmG_Qzi+``2ZF_ce$;(SRN}HJ3`KBy?3p%kY^4;mW=}lov6-**b zzo*Y@T(iB{;I;48#AUOhe%;a&(~rB8yg-)~gr zTGXp5F8}63Wclw1-?I!1A^O|X(_X!Pt^8>5bFNPzuQsH~$1Z*KLCWXya{vBczkcob z|L^zWty@i_qN70ve(YtN`OT|TwEJkqr<3aJTlYN-vHG5UeO+%ye^cBM_w({syRvQ_ z?Gn{~WPSgqpGfynz0=Z7k_-tio{FXA?S8whqXV>#^t0B&=7$v)yRUTK-&LAz^Yuz_ z;r-h0U$bpNRpjHR)8p5jlwZB(*q4`=7jN8Xc(3mF+fRo-XJ1>>$u3u+@cz=S6<74G zt&5fZe!sr{&#UnLR>^g**%=mGdm@(Bbu>w&`>5RhgL!#*?+kuj4~W=TQ|aQeCT8cR znyD*Hx~?W@$Igx1QINPMV&kI28M(EFiHBO2FrQuKJNwbH*?C){zkc!Yd!^rWUz|`{cVMqcQ%L5$ zOB#tE|GQ6mm8Y`)QrWKA_kM2vww{@tujI#?FAWvH+jn?xo$7Yfs^UY!wvv~Z_)eGB zIqVPl{ORfG)pl-EuWc=VfA7<-U)6K8-iF6NUs*O&=kzX_*XOqKe%TT7YtQmu)lvJ3 zcc0kwf9_{cf^+xG-oN$|NBYsEjeC4DUAA1>$HZV@u#i5@aZC&fuuh-AtUhKZ@(w3kV z5ql~Mx6gfWuIp&h^bgnOdd>a!&FgmGkNX)3wU&NUzpb|a{N-uIR(Y|V#S0{R9$&it z>-QzSTk_v8S?c%ZU8|c1a@*}v%@tei`572^eDW60oVyZK#>SF#u*74ABpWX;Z=i1U|?X#nr>js;}xzrO+Q}F{`bxEMeEe!wZqr-7$zS(0&1cc9mvke=-7U* zYW1JwMGOo9yywAHcTp-8tMs|HG167fW~L|I+?0BF>&}?k@4N5!f?AyKjTjgnY%$A8 zT()zk<+b(k_A#?hUwym%{=9O|<-J!|haZnEzdN;D(pm5Hraj&a3?An;v`R{Jl)k?9 zH1^Phh`m*%Id^s#f()57#d}8N)~wK)$I|ytBwu!Z=CiYD!t`CccJ1+&5X#NXJ;cM{ zU@ytQK)q&)s$d#d>!HlOw!hW~Xp~g)UN5VjwTzdMfoHGEA)b&)sgWs>*Pgy#7@{Gv zD`$Ce#mP-R3m6$Bl1{eHe7CRh{hdsmz3)%&x0<(nx>xR^FXiRW_blIb_22z>O+Mv{ zULciG>Ca;wOub}}o|}8jYwn3}Rng1-{=Rho@W;1yKUb9eTb(J+z;I=n${`=st0e~3 z=P%!`_RD{}ep(6Nx~c0HeYxVsBFoV5M@2SmfxT92;mdrDmo?F|3YZxTY$jEwE!%s~ zZOW_nRu+3hs`jl~o*uO-SA6Me>$mKR3=9bsDxzs#bI)H|UCX}d^Ok>Wg567AfLfY` zudb|2ydAgnbCj?2B{2quOA|t7biVlITk-tm(*3vp->#cC@7l==k(*LH=agQH{P>`m z|5&&FK8qKx*PG0WD9>HE-R#QcwduC8XIGX@F=k+3b1zD4Gns2qsHCJMSNG%L49nuQ zn6jIxA1}}UXEJNntfF;m-mj7@ik!g6AW@ZGGUMV+8N0=9yjt&nW8Hjz{=WY|?&D^i(~l1G+xK*I zq|dK4D|>rO6x4xvY&`#`kI!tg+#Oyl3<`#a&Im+o%Zb#9-lp^3DC^vcz{OQ_m;dcZ z-(B{$D|UC8tILsxhucB@O^Hpn7#KYIZ=Y#9uqt%5RZq{;sYe&Nc30WvfjZ2a&)Zp_ zvwFQ|hIM(K&9@uLA7|hHqo(9EfstWB_vKfoeDak&BokMC6X9yLc)e!xBhZmEf4^Qo zZu|X?aA|2Ns5jEl5wW-G>w?^Lh3ETrKehhPke+{;kwGG6dFYIbg+9kmOjKUHcCGHZ zJ)chP_iX!a?;Y{fp~(uA{jec2fjK3pxCk$K;-=f&UK@6UbS z{(q0j+S=!vwwJzW;hQI{?l+}A``M#z{l4GtcI%7j#YoKm^F*C}%RR5$C7&zbyxkMN zyN-b&%iXtqX2-gRi*M!cul{{)&+<|ZqvrRMy!ATY*S@dbSn%-B4Abmu3)bzvv~zVy zcEr+c7b9O*$}=!z1)pu7x$uoo*spD|>}4PR{y1(gx2ZJTD!$gT|C}X*LsgdD86H*H z2rsSJnT!kz%C6STkX#qN?@rXTbq6iV&)Gs$lzcBJf1WP$>yn^uX$|`(zAW#hj!IRt zx6k_ddzai>E{233S88T-zS!q{@^`%KHDh8Zc(&>#sG}3m2_mW0-8pwIdGYJ(>-#~8Z{thF&2@i& zfeO3^V=ukLw8zJKHx@oVW@F~NXy3oD>z~ISnjp}`$nZ;lx&iamSw^W|SFT=t8hdPl z<=pSQ3<)blH|d;iOLjhc_Uy+y#pijCFDo+7zP4tDQL5LyR0f6vnYlMWowfrBMzbWr iJrpVy^knr6|H-#5TxJ>bTH=O_FLRCyqsn%=RU?TFeos1x;TbZ%z1OSJSI5&Kl=xN4oAnfP?3!muM#>k zwrVX})D-rbL3Fhe>z&f*^sCFyZR@}4zQu1%$QGXMN_s8<0geUvsXMzmxLud6dGhDq zh7ZoC)J~rKu`gaf?$VQIbNnwo`E+*Y^Lg3{J%$2K9EvRk%MMyID7FYVaX7egf@l#I zQB@E(kYm;!<`u#lBYJLc&sSDcV>2`~?C9@5{`h$R#96btzI-W3NlR0*x0nC*>z9Fn zfx}#@(hFNMgJ;a1efZ27p0u>I7gtsamz0)P+KW1IsO!h=Ij}l>{e-DgThE;FS+ab& z_*?yw($b470+l5sB|r9gdTiy$ShPCFw)U5Zd%xV#o14=G1qBdO=+Os*zWfm~o@q$MSJ@%nZBTk$DrX^)l z?_N`5la!n+C@b4LWr|46zn{-vTwgCA6BCn=pU=6}|zIA@#Z zyG2FaQvc4`>QwUL0%KWO*^6syrEhJ?Y}ViRgGp)PibG|SCruI%7jMtLzV6|joy8!3 zg@s*Hznzhhk?`ci#E2~!g15Hk>tB8D$}w^6a{u{Br>E)O*j=t4x2J+JIy#z1-cIJ* zw{IJ^Y*}+LV}*;-!MnT51;xbL8X6d4_EZS=N}IQ>Uah^%e}12u?<|jxGX;W-L#B8* zrlqOX{rwuAb92+v$w`hHB8%$(|0^ggJh;HIIbeHU?8-0G=g;pyal+%x-QD8sd@?_l zFbHw56ciL3*j4)a!m3d1m0#RBCid>wVe#kN?fe^itIcPbWHuE(K9+c9hGE97Ei2Fb zs`>Il@Xz1B8;hU&?Wy@Gl$Vzmv8Tc?YFm!xW;@Q6CT>|z9vo~wbL2=1qsA{oGqbe+ zzwiH#C@R`?=J)w?=hA+Edz&1)tK_GO^V+DbH#Vi7jwmbJcE(u1X_cC)YOC)olg`YH z3FyKVmnHdLzf`gyVYMd}>g~rNd*Vo4z zySpFv=W2X*cJ^l7=xrPLEsrvfrtLL(5y3w1wr|T7-bmsUu#YHL6y6jCt zTU*eK@k*PexVgEVxqf|mw%nq7D>PQNaf|D1IB)-d z&kO$j+qRiS?<`V1ee&c(*Ws-*XP{b75cF6cv^b;&wgiFUo&W^PRQf_xJao`$AJ^&YYQZ zpn=i#{NlvJZ90mIjpaH{A=mQv|2@{?q zMII_bJ9h6*{{HSR0|PfV_Z++0s7!I`Q|Heg|MBth!}ss`88WV}5>--GerYAy;&F3Z z?rnqOXFedWE4%kSkzIbQ?Cq`APGR*!*RPA;ul+9j-om9dFfgcZrg1tb<1#P^3k$or zyB|Jsq@{S(EWz%h1w}=NHYOiuU*(rQ)cr?LN%eT2Z1d#F!e;sRdR7K6|J0{! zDkmrRFY;_TDdoD+Vp6Sm(`}tn=fw9 zk9To*XJ**<``zwE7loZXz8*bxY*FxXzlaS9jMMbv&sq0f(T&?9aeG_t;a+L;7g5nJ zYAZA}U2AG=tV&v^vePtrpu`_4Sdg_o|@a;ENlR-EC@ri7O-)QYcI*&| zm8&`0C8`xZf#E><{MxqK-`_;vhJe!kk)uZo{aiaf%`(rI+q7vD$c9gSO2$l$4E2A% zir?E)+1$!4{;AJ7L_kzkHRt9g*6Zuz*%@m7e!U*Cr^4{L%ckVq+}^9J!VEV0*X#8Hoi1~P zPhOv->b+q3a(0Fv_y7NE|MREjTqj3h&AfT@42+BpbqFd~xIa8}_AGDdt1AmH3MrX} zOkt?_`AM~=riP(L#yz*As|7{C4Ny$}e!oBY~vhnAS9}eE$-fySJ%A4oO6crbD^VJIn35QH!`0)8NGlNOqorv7_M8*Rr zPH>z%caFhs-lHGi@7EXmExB__E02}w;QqQ(xA(0n)4sKD&)ZeE)PI`G%gcjOqpwhS z_}1*}ZJRe2U(7I8G+p@3_2k;MgBEk15yPBL9lZ3o2d`77}Xu_xJbbzJ&q5zP@gM@F3xyVaKH4 z*NdL~{r%n5`_%25Hw*n1TfBMuma*oKvzVORIm_NpnsE#vTP0RxRBP$|(7uy@!R~SJ zw{PEe)ciEk-RF_zvbK9tM+Zm8(Ikfd|J!FU?5+B$Wp#97myna4sGuMtFE8(nTem*- zEefdm`l|KMpFfMd!vun4vtp;j>?&FL;=5k#t^%J$5wEVV?+;rW#mJx+zweA?@281R z|M1NEeenKL@97DNiHxzavG)Q+ydKs)esy*Ap2Y&H%dWY4*3{TAIH(9MbnO{-l2Gw_6@xQagQW(S#tjJb+`N72R8bon8!Z_}PY;h31@jlKng4rM*4Wu58mddFqst zpC2E?g1Eg^MQ?XMk#BW++Pf?y{ptBx8vkZ3S+eBB9($$ul2sp$zqV!6*!2Sx%b@Dq zB=?qxZPk|p^7Vfjx98ul`!wUwU$@e4lCA4YGnGS+)~`Qfw_wrR(^3mpX6VjcwWdFK zR@K*6il(MpFWnXnnsiG{we|iah7%=+qCWm)P|er>m!Eolm&QMdNUeXfQqs~+?Xh>N zNbXsF$^0liy@ZRGQ};od(t6ibA|?zrMVDDyA~^FVA$-sDlw#-HcXUN_V|I&Gh*akc+2EdMYh337O)s z&DHbaxut7Lb-MVkhn4AaRf_0-vf1O>p>*-W1r05?s_*Z5V|SN5JUiQ*gM;HhhoCY; zh|T#`d(PKJ&i^{8U-R|8OSe|O(eMfVwf2RxzKEJhI zGsk}VHp#lHYum)7kJfXpjq$wFxNMo)kt9Q_(pN0y<>fsRhD^NDW`9y($V2y{KDU|5B3uQjLGJMAp6Y>d<<5aWOj^uM~^8xOhZVRM@XVF)^{wD8_Be zo|sx`@qYaH(ZJaFF<8HzSJd`AP(`hzsmVEW=FE~Ai)I{p9d43wVL`@3O{b8P({!U( zeYJ?%x+Q1h#*Lv`A2>8UbJce-Im|Z8?W*hV?0h)G<)et0>d|;*rxVA|ANl+Hd*$%} zkBu8QZaJ@Dy6Bo~=i0To7vBpC3d&5@n6_hw#h$9KTnCOT<~g1Czj^D{qxb9o_oknp z_pxtL0M~bEke-FtTs@cj&Fu=);^pRkJjboDrM+GJZ(e@>c|%UcuH^;$1OF5|*}XI8 z;pM%!F4p>9V24of>qRcX!J9L-s3<8ddT}V`)w?%0H#0Qc+M2yMdVAiS%L0ocxV}rb z&KLd^SW#i|=FJt{4_FUPe!PwBq%+BTjHws>wfFHCW2e0zFiOc%;pG%0(7EVey&i*EC(w-Q8WrzD{Oq z_Vr_%)6XYlWSp=TGT&SM{n*dX&lfIV-Y%{mx4>_%)gEQRMHAfmWH=ct3LY>#SNUUU zVX+`?Z&k@dzo6tS`yeKUyu3UHJ3hy}dwXUUOVzE5+1d2@`FUoBHeP8rR!+sIGYk@$ z`sD5VuCI^(+;`~e=JfLdGBQ1#!s?&;oI)6Sr!bs2efqF?d`;t%Cn;CfMvK?~|66`B z((=`kf+HLZda=7$va_>6jh~#kR;5n&_tkE!`kHkwaK}v3Y_Yt1dpu8T39MW&QK)9m zyrX}9er9BNe}Dh+Yipw|)hF%0y*>Z&kxpTT2D{o{0gg@{s(+r_|8HEr9Mqeubbt8h z>gwYb&bK5;Cc+jm<3YPRG~R*H_>DTJY}P-tM*0+mkLY^WC#p zK-5WD^{9x52*{ot#~* zSf6b47n$d0XS=gVI9^BZN%)n4wT&xqhsij!SX-e>7x84n@r^U|9wH7ze zyYoQSec7T#i#DX36w0~3PxkBU>(6D|S4ddZ1b5AuBXi@%jR)7(Ml&=l^`8Fd`TY84 zbG&vbDJx%G?l1r3=~G8{clPOeu}xE_ioTC%(b(!aSxwQ#M&|nZ`1Zy|#`hLM-=Ce8 zE_ro@v#+l&Ywt4QiLzQ=rv&8X`~BuxDJm;7Gdy_tvU6qd@*+P~+4A@ITGy`Cy>#gk z14CR~+zgXUq30nj8vEb8$+>akhC_I`_`-z?FI>F%P}VbR)22-qmix<#h=?d?X>mnG zMeR`*6m@a+v;?K*{QZB$Dl01mxLP?lI0Alg`>Cp`9z1r8&C}Bp+(o^!uXgu~U-m5% zW@-NEDSdN8kdcv5fU9+n^3{mAI5{>RiH0LbT;|x<%k@f|Ka=fTp)o5sh>x9}{mq@7 z!c2_}NgE}U-FgoE`}@1{_^NF`epKAJbxTZCrL3&1;@cZZHh#Gn6D1dpm6F23!Yr(; zibh64@7}#Tar*RQ*_CcZMMVZ#S2XVItrlPIH+NA}%Lx%tRnZ^scE8_{ch`!8h3U!D zrw5N7b=B-&8n?Gf6x9B>yxgCWftj7prJ%sz++*L8u3Zy5dGch9v(O@?HEY&@ z@@(*Ozk>%4GR~YibB}W9>EGYqe>`h`U%|vggj-CCzOrIW6(upPwhrpMNg9HmFa=lBv47dQatNHiid}9yJ{};E<7-xiI;7Uq@e` zTU?x6PEJn2|9`dTGC2cz=USH^YvmRP@o(I|{rKnS=X;bxJ(H4@Kuy^F|Nlwz@$vn5 zU;n>*#}12o8#}rdFIqC`Sf6ZnLjwc2uX1f|bo)HpY9&L%iN%{XJ$?2p>Dif?1w}<# zzm}O*f6Mvt`**!j`;yAf&pLW~TsEhjO~}sf{_vq7ZX#!(Ca7n3v|D`Q+_}AcvR0sC zd5?0aS3-iqt?l{z3j;bpWGq5%? zGBW4Qjg3AE0vqJ(|4d9xPygH(vTDs5oo|Qv?F||o4($8?uln1=!|jWH&$F#QCS{Uw zz^zB(po$RZ@hL7-0|SG2^Y8CVWn*J=t^dHdL4W_BNvcVoSkjn&&k5Ht?Fx*D)9?SA>{)h5u0+hleBPko;|4;*l~wk0z- zYnl z&d%Z@FOMsnqN<@^9voy2TOFqR?BT zMIN9$Kd6^HaS+nNGuF}^xK0iO7dZ|1pNGN)5mFea!TT&Pz&d;-r zEGQ_LdfU_AKmFOWXJ?KbYkT_a*(n9h!0;`LvPCPZs*=9Fxw)h2tJbaU`SGvJw&&kJ zwkmXW!IKjcgZw4)?(MPMRrAe^b!a$>0Hbicj3%WZFOAG5Q_Rc+=hlT0RYaq%6y zcQ5vxZD#ax@rBvu`41jEXlUn`e{^GG@{4P0XZ!qCb`kZRZN}TqC+p&LUo}Qk7<$kiDAd8RR|H9iREln+MUrpza z9~DQA9~ak+Oh`>-wYIkY^7=Y|?eA|>Z>54pbPV$DSg^3OFOJ_|7nC`9g}IiO*2#kh z89#pfxTE&BS=RM+u}hDusjEMJb91vr`8yd<`K|6h&p~Noh@~?qIsN>WlA6le=n(L< zY?ZdPwX~j|9tS69a?M=vl%AFr*S2ljK79PxxO#Q=Qu*({zGj0)1u~A9 z*xAXgkK3!I<#g%t<-~-9fRH67Sywnf6EUWytvh#G=H%ogWMpV;e*X1t`F%wl9iHuZ zcbg_ooOtG!;;Y84NnSVh*V}`-5g$Gje0g*s$Ti1V!fu zPoEyO?mHB*yG&P1FQ((>=Jdmd4?Dm59KjK&x;kv_q4oR!b?q*HzbN(ev^|eK?t(@< zva`E;rOlIWZOPp8SU}ay)syvDzkL7Y<^GTV{r$Zndb{3x3$E1r`)Vbu%XDO9WgotN z9sTrhRLhFyc7FLor%rKchp#)*Z~yOvb>A7C=xsc&udhG;_V)JBO&^p#Il6jUo||LY zT=)0a!wUyuVe;f=&ERDTH#Q`OOqjB`{QbR-o}MF{ z)6ZX68*Oe=`KbjIbZztJ%b%NT&91MnKUL3z!NJ>`d*8l&pp0*pbK`(DUtmzklqrc< zSA|x5e#UE-d+UgG*P-mo%Xk+pUc7Me;^w@&yB>muX_W;J-FiB zvhI3o)~wl(bd*acaudtPj~_vS=F*<;HF3fO25oI^(4-WoZSda0OIcZ&8Pvcz+AY2@ z|GpiMlu1Xqiqj5B!z30^2cr7>J4b*2{&Ja}g55_!*_Vfhr{LS0NGs{~5YFByQ$Y2& zfwA%7Gc%1V-2=6%s;VpsAF;Ug$#|w~3vS(3|G!Sgu13PT{9VZECKiSkC&hn%KKsY) zC}6a+vjaJ5@hx`C)ej#WZ06wPbaZiPIVI0LjTO{5uC893d3o6kqf{;-Vd0Ob_4i-c zuDZw!lt(3v(-J;CIr-x9a{l)gF(q$q2-^So!2Im&?Dj@x_C<+@+x936syepkcbzu-{LQz$%m7Z)eqmiDQR8yreWGNvG*P=C+19^ESz_DSF3gTJBRS_ z>E$wcM#jd8sj02+?(RN(|Ni`PnMEouKKL4Hhpln&^W(d=Ci1X#mzRWjo{Zl-8&K8E zBVoXhnVGpqSx_l>clmp_gam~>d-q=5rNGD#8ylN*Z;xd4w>OS1E-ddYTs$v$oV0&; zcXvCVtX0D4X}U9PDvjP-Xg&S*_O^sYfdXjMZ@~hE88c>l=yU0~vbW}^(6njOKr>X^ za&8{7?mP72{(k#=d#l?|PuIVE>iiO?kSPxyGr8}r`s$RIr?+VF;+M_J%$=Q`AhRxA zx>WG#iRYH=>wV=aPD@T*yeP;oXLI1~?d^ff{bcVIin!(E=-k?x&F=5-?=#0@V!6zs z2QSv^GsMToySTb0-rklQGU0^BEtl9HX*)Y6!G!#_a<_z-1y{4%9(k#(#GlMrkn~r5_<8|)6)kf4udA9 zthoXU4vA`qt$85Zw0vjrb0sq~F-Atl5=To*0j}19q9UiTFflQm2!@3L9rJ9fKlQnK zY_+tuR#sPMXXleyV0`9O!0xi#jI6ArudlAoFi32=<Nl=B-;zYiep9 zyn1!Yy6@J{$NlyO$;Wtlq|NzmZ_8a=n%Hsa=j-+R4H6HrfcgryRbL*+x-WeC;71Pir%=rRf+%q{r$q* zrO|u5Uw*N3J0GauV`F1eaXgR<)C;mKR!d4w{&-Y8{zIR$$b?&Bs@7$14qRCoT=@E$ zZbVenr@qD4*2U~(VrOSJ$-Km(?l;F_v0HD2yV8=FpFe+Y*t*pSIm8KyRG#d0`cPUs|Nl8jdZrHfd z(Z`49y+_NG?4O^Wg1Wok-reW-1&z~pX z+?2X!@r3#<85cnlTN!tD7*>6G;i&B()G8__)@GW0E#Yt*uYtMwb6NM77S`5_3m+eg z*k5P+Uc-fPWo+Q5Cntq-ZfsyYJx$m7@2{_w#}$uWSsyQ-er}HA`+IvYu8+5uu_$OL zS8=lY`0Z`gL?t zHMLx1QNop1GG~gPpHoy&U;y>nF8hnl0F4ji+-OKUI}6l-^6>FF^6TqsMNo0CoOR~% zWno80M~nJ@Hm|O&J#F0=bouJlqgygBZ>ap7rW3J&;nuBNdz1xP7n-Ht_fQc6HHHk# z%-jM31m0ULnZze&!%<#d4k|%*m%m>&SN!3lcXxM#3R*GUsFtUvr+@BSECgD6@$BsE zWKeNok}34w!o_igZ{Vin<9wh3zx>^ug(ow;o;^C+T~JcevT~(npS(Svv$ONPi5*fW z&z*Cdt`{4yzpl2Wwe@1hT#;T$W47z-Vh``F{+_W`gUP}7*_0*AmnWZ`q&mZ@R7+IF zYen_ofc(pB-X55yZUOMgMve4{_jcO!?)CC-VWW~yXs5e)VE8n z?%&19!*gUq;^Bf97ZiEq?e-jcoBH>jR&KTHulne@&(qV>+oQH-DOy-WT>ID|6!3H6 zB=>%~#K*^aBlgu;imG_63ta4GQT|TGs{9>Kb#=9jZPk`T$ESSn-L&eyiTCY&Yi@hJ z>*yBOKKfr*KRNRLD($MA$iLc;wr9D1`|>i_XNCdeWOaYNtqKo6-dmMpJymk6cJAy+ z|HHQK-E{B!)0wu_W=>8{A08ZR_Ofwa^eUuo$&r&MISUI5LCwOsg^QJrBpELAoz0e? zpPvI-`*C^q>0j5vb||lXv%)R%_H-FZ%{$BXfb-tu~e&Lqy(V_RtMJIZwfEu)O=gQ8_@(rn8qGDqsmg?l`}KPA z>j@!cM;7e*A3Ha{XR7V9xVaN2t=i`4wY~VcpU)f%!N$hMf|3%QQfb%9{Lp8A1H$&L z+IKv~QfT_jnVo9Bvl8y@sf^f^;<@#f!Yap9cdxQ{cRGK6e}7r^Xy}~PtF`^+TD1l* z_j@=yf1hJkR@Thhr;1D#ZpmME_2uq0KRK_~>a3h4ZJw8KtVc3pOGe;KR?o~QU+=9t z_gJec|JsuNS$5kdtXroCDhB-h{hvI2dUc2GqCFu+OH{PAxz|Q-Kh`0ryrJ;1+r7dL znLB%{#hKapS{fS}L6v{n*;$M~zVq$;V3t`kTlZdFlYAwmVOm?IotV|Ia6G8ylMsFD@!aWq9}6)c=!VX6HLH+dRME(-Y5<7Z)1K zRr0i|XLQu4h;?7wUtfRZ=+TGAdZjZiEMR=^;k9zv``v+y-4qoS8O`(VOmMYX#1iuE z!`au@*FSvtu(6d}JjiiTn%)0D#V#%`2QFO_+FSMY(96rqE8QP0`>}#cR7G^QbvdY6 zQTXPDp_WJ1f@SY_TNXci@a*hti}H7KcrFR1E+|q~-JEvz(8I&+6DLdvSQ+`*y{KKdreSut~jp9rJ|w1vDmHGX?xyXP^t9d<;#zKE*9S2-k`-i44|RPUAuP8 z5uW%66o0SR?^n{)?EH6sh2&ICuQzYsPMkl#zoUcWUSJ2)uENJ`peB&AvN8)R>%zjv z$Mz@-`hEKJ$spkX!;$01m94C#)YR1WC{Gl+x4*t0lpn6H3Y}qDtoGi*r7z^so7opG z1hllbKd%4(TmHRuU}!u0>5Q zj-bZa<72&tm-)_CnCMY)T(M}$7iHBRL(qD}6DK&1_sc(*ZP(aQ{{CL#iwg@ujR8J+ zJ05Fm>w6PBWI(H9USD5-d}Z+Rg#7&T)_j`B54ZCtrlo;a)>)~ncbl?L!?NfJM;pI< z-)!^zMYX@bf!g~MX3yp>FE3|dV@tZeF1Dbs@S$wyiG!eJLbbn2e*FCTaQFLtk7e6K z4qaI2JaO8zwhtc)?ge(t(I^d6n&@$1Uu|_nR8-RaeYGI74oMttV&&dY_qPhvpNZH} zp!nXyrL9lanoV6@{m-x0>p{aDph_0h$+EV#zO$pyd2M(`n7UW&lpjBTCjR;HaYy}s zJ0D-)%HxV&8JCy&&af`m1C8zF+}pGB(CfJZPm6zkO1*LWcJi4Sh9ACsc_P~$5_r5% zHZe7oRbF2HUSNleMsDDw`SU?@=wII5m9{Q>^FX#;W8;AX4m)=2Sdf2zA1Die2IZ`U zCQhpU{_fztdva!GW*i(G3l;@){`~bT>CzIX|N_;(D^3U;e}E_4|`PJvo_iYm4T43m4Xsx3@$C0|P65f71mGApQ7Jac`mr zuZpVb!uEy*?>lq5)uwr3$0wJ8N5tE zTN_ko>{%=z8N6%Jlf&)&5u4L^m-)@*QdU;JSJ=^&d0_$Lp+ko*EOzJr^7ghkBO~J; z<%wDzzP_&W?P?V!dI(5Kb^ZGK`g5Plk^>hm2&`MT?#6~h<|!poDl1i%YJ2V3vuDD* zd3~(hVjudPLZBQY`Y%Tm{)pq_@I zp&`yR=5o)Adp z$-TYJ_4~WK4?$xrd=nX$N^0KRS8LrnNg%K4`@7x~Cp>JbzwzANReE@`x_^axQ1#85 zH$nZEb#Z&UjML8rI4)viVPZ@>KaaP*zJAG)C7|ec(CnIY$T$zQNVbhv`ct3tm5|wH zxdO7Xyt1;gC9kjXUSAjcSk^N)H9bA~#0141b$_iu11f#8)}Q)Zo*cP)RkZZgm4ov2 ze-2u6O=MiE;l=fQ(wW)j{pBKyp7r$h7XJHFxh4O;Tv=I}Mdc@z_a0g5*4EN|e0)1f zUyGfaW9clO6>NO#)-BLrfQ_x~#Oc$ITk}mcYSs7p^y$-shYuT1PFBCH!5PSb7=7qe zbZ)z_G1pSd=Jd07cXwM9KjYc==acuni5%>pqxV%v^*Ym3)$P-@2ULU_H2?s z>!Ot_IrH=Lbz*mk1TXVBI7!tzBT!xP^r=&a8W@>DQy-uOe{XMZe=gfukd%|dlb)WQ zb7MnexrkCKSM9gn2%R?2Xv4R+-MP27ee84gScz@8K}%g%m$#XnAJh&$bm&k*X68w2 zp@(liJv|Lt(sbzX;fuS=^Y0aQOwlL_+*JNPZpZH3%6fWyx=~vm$hJ=~YHe#v`tjl6 zi#t1wnV6VP?YVdA_4V~H4N^pxE?Kgm{{O#3j#*K{=Ckiq# zGgrDR1})m)%9+d)U-wfL)a$pmx4&1&vGT&(+uIEb9yoydT#k;828M<|pZrTc-gofs zUD=Z-PZsUZ%5`&Nn`c|y23g#$Y-=kU6&1B2csbvfuU`Y#$Jv5I%i`PlWE1l9`LnaLJ6x1zrm}+iw+W!>rsCq?Prj-9 z&s*R>-)=?hZZl9CJ=QCI+JrsO4x`Rr;*i)aBrPp1AuWA5G^+Db<^O-Spv?OBS1D*j z>+EcE_vh#4PMkQAabrZ!t*zOQFD`Zu`l~E0EzKPtAJ4+d`taOb>lLA^#dejvWb*d* zo-uRg!82!gd}o<7u3M+~(}@1*<+KEnyP4PEBpT5-ouZN_X~=Px8JxCac57Z zu%V$LD2#J*b3eY_e*e+!{QbJ0H-wb3vau!I*pSH3u-Lu-(8Y^_3Rx!%f7gX_40)a2~3R* zS6790$L=cWjNM;1S5iu9lbmhUhVSq1doR^rv@0k$c;>owdbhV^3cuHI;SwoY@?>`Y zzD5_Nh29~;OQ%hp3Yt3KQ}a{k=g*(>@2CrK6uiB)HEXTQtcepD{r&yd#P64zIddjx zQuV>BS6tE2(HtyHnMeP-q@}6x$y&9{wJujuQepxXc#~AU4H6DCWNqJ>d)w^H3`1t2 zP8J3Q5w7lMw?OmWCnhQv&98Qza(PYU=7LvOG>;rTdU5KWsj}}^typqw>UZ4lBW=!Ctckj+wmAp7$&8BF&DdVEjvV{u+vmAr|EZ<~(QQADuAUiu7 z6m`$e%{_f@Z?*d4^ni`o*Vk>#ySvNK*Vor9``Q{U*{sN2C7Cl>XM3n5J$v@7XosEo( zi<_D2sUoy3?W~lVP-jHHob8Rd*5yxr_-Lt3^q8@IyScH6NlJXpN7tp#8dcTRH{aTt zJ^lBs4i}|so74TL&7Q5@p6(dpSWsZVd?4@6j)T@*D;Zm@eti4=e*faY#cl;78z zsvwZ?=f}s24-XhYE12YLs}e3R^L?tfbAQRpppK)Dif*4hfBtwYx41#wpNgn`^FzG$ z*Zl>JiA7b#-Tb(&iz_uHWy7x0*PFIxU;otS)Dg0$=I5lfQCqua&X^%`cDjS+Vy0ie ze!Y2nd;5GFP~T)t=<2XFk(<+WtgL2THeMms>2fG+ecV|SQ`4I*oWc=~jtBQ|+gbiT zuC;xui;|!)2g{n;-{0O`Sm>-{Z$JO=X2nw{PM_}1%*+IhbKVQ|FxB)41TC}Y;o*tM z%F=qT(c&>RLMLsx-`pfVK0Y63=jKkAMfHCL|2=G%@7lJ%^0Qj@l@)@UH*WkHzHt$c zle6>8dGq9oOG^G+UwM+5jpxVp&+G?Sm>7k*T7BHz+kNNT&Aq$7etvM(qBEN|Z=Shu zp&bbx)dpp6B5Z1Y2>8x6 zdn(&5FjKhus72)`m2G)pM^X5dQEI=eh5IfQGl9wesirJ zzPr17f`^Jgr^^Hn6;N9y?aU0v@JiL7&yS9Bo8;e+{c>H}A)*)$1$VC#~9?e*V$x_50b9d47L?e|$sY;gq_G_KWUu{a@$e>U!|l zv9@xVAl5tnocH!r8t*E5>&40$80|ex$I;1&sZY*!RS_#E188y%G%k>JeI0LbaIls~ z$C=W%w?yY!l^%L_c6Oz^V(5|5B}+csxW6uT_k%}|4r#L~-f3xTOL}mik%N!VZN6P? z#qo(NHzprfva*sg&%YOPi*t`l<&Pgf9{hg4|M=zQ{)ss`XRP^Fs;pC1y}d0LG%5?K zgFf{*a)?`6T7uePV!BaFKCyB#R8&W-5t3tWK-5XcEl9G}KPoK7aeSKZo%xqe@%%VqIwr({{ zJj9Z7d)wLo@Q%x;izK>^eUk+v$)2nr4cwMXv-dZ-p?dU5$*-&OO|XjjQgrT6bRA8P68 z@lBgHZAaN#DR6VLa0jTzs29Jlr(0Yfw2JP|Oyl$qU$4hM{`U4ZXtnx#izQ4kU6Txx zk15#M$z8m7@zc9m0`EX8W2Q_InPXAdR4$SSYAY>rF4G4)c>DXE)&GKQ(Sf5zI~wPh+D6e>icz^5A)8?vo$a@ zbX*^|x5E8l-kBMOpbQYVujZsRS72c>WbyX7xz?5LilP&$10Owo%4%+Io{^n>dUv+d zj?bSzH?Ll;&BDa^UgOTqTel7!Il{8L{QWc8))f}EwzfU8)?&A}-P^X>{Q5_orKXESJR)7i7VWJ}~Yb6TW)BzrZ zQhYigJ8)C&@3NBj_hfT#Z=0IFy+xzt@^b&hm7kv(n3_J7bxo}KeAXP)QHa}Hbrj_E z+*?~3_wKcg<##`La;-+??{B)GVnQ=`*@@NOP9k0v6+3R}P6-pt&d$EFE>`;C!-sno z3z&j7Db2B~mFkzbeFew7*uDEQOZcK`Nl8f)X3q5NW}UXE`1v`|l8E;b zF1(2b-)(eW)%&C*s=V^f;Q0dDNOKAbUowz8rk>4b#-#&Z`JO}hyLqjr!3ub`}FSpKWdkLjh3BX`%RKTK~;6>v0T9* zN#`~m$GufwLHm#H1$uBA>3h}G)EJb!2#}DFII&CHNhB;PN~)x^H2aR<$)trw%F?O5 zYeGyO1>O4FTI*Fk<=BA(3^QlW49f1G@F^oR6Vz3?ckkYoL#vx6W(H20F{5L{27?}1 z>#%8e1r~iUGB#ege0lieGA{0>L-#8urTwp}sycDv#Du8omXMT7OFTV%d|W&{INob4 zk(eo_T31&GnxDD9uQv52uOgSfj+nE%yL;B#lSy`*{!&s>CqVlan^y=L8ykOlaj{u# zkCwztQPmzp&>FO>S4Eu`287)eSR|5leVy+1i42vZ+Lzv_o12GgDSNhr99`l$x!})_ z!aa3=XO)Y5;-4w1dhy~#4-bz6GYpecuCgk6IfsXbzjF2bcyZF9``Xs$mn^IG+C9Ig zheyk+<4*1Gx7#mVyx7>^&;MTIiM)|ED9|o!%?^*6-6Bvk$9Uqrd2x%)ytJ9R?uXr~ znLMd~<(s#ucjGt7XHM`?IdSgXv{Nn#POF@vqd^N#K79N3%+9^LMrHCM6?=R6c0Spr z)vH(Q%u;uGX_9wGLO*WL1KGvLRuzBqcb#Wn&&Ob3X11;{x+Uc5larG{y%cV7y$^j( z3X2!1sHm`HW@btlCbfWd&zLz=(avsOd5@I#&WhP4M~)t4{ITPXjpCtd}--rbP| z)yD5NSd6s1zP-QCUtL{ol5-(=C|z)6!QHy=3Q&?9B)b<09E&8@3Zps{+N}-)QcS_jR?AS6}%_Z~6)2E6mDlEm%&N#llwl*<6 zojo@<*9EjtZ&?9o&Ff-!{(FWUQpN@b;594n-=DYcx+QF&>2E1#n8Z?4Tnri$&ouMy zIOOf+QY(jGSJeOl9ONRpFDe(bhwQdv?ou^ zcUFsC?JtMuXz5$GZmo#kp0{$pu#&dA-<*cUizgAvZTy#-hL> z%2()6Y+aq*xp}tT&h31P1_lE8_xBwQkFRYNRCYUX@#01=ZWb#mt3`QtcYXN!b!uYL z(+LwNGA1V{|M>A^LHzzY38NGay_g*g8zW*KCYzd=B&4OavGdEFP}B?*4__bWI$bZe z;OD2*l9!iS%VoBzZ0%f^nVHGK%iFqn^X4tHR9a^5*<%ArNso{Bw@;iX$i^qrvAg^| zXo#@l&kw_OvAf$^xy8dOk0zO$o3pU6C}?YYyPceRe4?`Zf~8Aa4>q$q`}^}R_n+Se zTHm#9rLq7AXq|!O5|vj=il3j`uwlaj&h;{$Yc)9e_}bdq*w}a^6xOP7PF#KGP7G+1 zK=QF3(14DNj0~vXuj)PR!O6+$pt?m&C!#@r-;YI6Z;g*7WM+bv{ECZDm(sUh|EBEC z4aV^Ba8Rp@K|!eV!}a+3#G_rJqGD=F6Fa8KDi|47eaQfA0~P9QDHqwQvh}d}xpU`0 z`+6oSyDzyYqgbRU)?N7QjO3epd!^m`*2Szw?BOSdURjy?+=fTa)SoC&z(D0P*l{^+37j;)~^o_ znL+K1=~~>DVRA)v_4J*fEeD1vCj_26d$wr7f(Mg-gVMcm`niPb>tZilym;`;Ok=~^UnN)8 z$H!m0*eUhm#zy5eYu9efy=`_c@CyIrrUwra)I_)l;Ec*80;bE=qUte9-HY35{bZOGlr%z8ln5ng`TU_60qQ?;-At9|h-`?HbedflE9WP3+Ubv8uduxm4 zuK!I*5 zTecW&KYjXia$Q~Bn%vvlK#QaelaFms_n&vgz%*8l;X8HsNZ$8uHq9L+rSLy3% zl`9S%JlJ^i=FN>wO-wUWLqxv6zn^YpWd#~8xLQ?HS7*n~!?Whfwxo@qBNjG?t&K9& z)zvkt{Z%q;&YYOFb)8jF+w)|9zuA2L$|nJBe^Wg#P%wacCYdRUOQPo4R2~x3jXDB~ zS{EfjX~QHIZcfg`q>T~JYWG)v?|b>`)impV6&ss9XO63@sv0^wJ8#RmX*4tasiwAe zcVt9_L3(=n&Tq5l&p*E{|Nc22ADOeq)H8uWP4 zkvn(htc}>{Bo)cA(qv=AnWpCEna$12!d$JOLoEJ&I<5caXt#LL=?_0XCV%^SJ>Iy{ zA;9GR!XNz(3JL%I{S)0*{OXG4vXv`WUOK-1c#q^^A79_dsw%7L|Lkji8~~kjaBYDj zb6P^efv|Nkkx!jHT>gS4zd<7$3sR>m65l%ciG2Bu4$Q>KTrM<;^pPtmU42E*Y=$m z7nMLZ<=x+>d-zGspD&mFecavK@9rpUE*F_LapJ+ce?QYfYw^=^a?X5vb2Ioc=XsY> zP)yI9G2=qDOJ7#Vl!~gVO>Ml=r&4FkS+V`d5f`)ie>EU8zkK;}=FL;$m~Bi_*4|mzNf8&ivQE_jh0Rt6%@w|D8&3W??zfwW5KEtE(w!D@V}wwF+Ci z7H4hM+Y*S2;#+dPP-LR*K;Xle=@R%Q+Z?@})YH>0_Fc>|*`*=K)q3Q@g@9Gb&v=x(SFO@2`t-!} z(Zh$13bRIoEc-kzH;o?Z|W5pmfOqjz&hq4HY|-c@VXs92Z3Q+f96*^x76dfwdG zIr-~9Bc;#J&#yO4lwTattLL?7@nX*Dr&aai_Do2ZTPC@B%^H<%-#z&7FnP8TCOCUQtTS!#&>VwBm4f(x1Jvl*ZZVio$l$QI?&-?Ugil>Ii zq=p8DL(e~ZdU$ZWwJs9sT zh2nV~A7fP!u9NFxcX#aFYx}Th=aKvO=l?SNw`!Hvr^o&FLU!~0Yiet!-dh_V80fgn zf4-lE3}57?l+Gxh^1m-GDu4R-`@OKUvok0ZZxu?teRp^Fk;8|ZKm4rOlylQ)r{9j_ zE9Q4~aV2GCdDZ=VDt;?)R;!!1s-B+SliB(ECZ>xmo2jX*s~WvMPxbAst;)A<-Fou* zyuJF$l`FR-PrP#{#;E2;!J?&0T|ssC*E7E-Ob}SKe!ahqjZMg}>9-a-w|8vZXjoWS z7})uJ!^%~wR-IVC|DRV+Pmjm*b8|goVr1TW@VG8^?^iqA#=BT{ab!kF;H0^8eJy18 zzOE~Evz5-x4ajb5~Tx%;y-GZ$Zo3{RanVS+X{q&3-Y7CPHq<&u&I}0)n^gPzn_zTw^rE$EeVLe; zJi@}n-bN@L@0VA1b8|a#`t<9$udiHC6X81PZ~xbYhnKf=?p#^Rf(Hy&CmY7^tMLRy zVM%Fe=jP4Eot>Qvr@3APg~0p$|NTH}SFhHdy6^>0Y-D6)%i)I;il3jm*th7TROpl* zY4g4xKYpCB=3cyT)v8q<5fKtEFD>N;WtdM-PHL5}U2=7GxUk-I@3eDsR$e+lUc0I5X3@9kd`rF?Z^eDHE94`6eVDZtGn3 z<^Rv;^F0d-H#*%4PJR0HsfvNYgbx)qpI$DXf35mxlG|pT*j-aBEG#bcE&Q0G=XL4Q zB@TwEGmK^h#%gM6raU<@k%d9hD23zeMUzK+YJX1yWqAn+i4}J*+|G)Oj7)iZYwMAl zH)k>^Y}>XiHC5Hq!$ScyuKMxgM^L0@WM&G=%gYPN$=zGg z`Ow7I$A@R*mMto>)@35r6Xh0H>c#GIVOSBPzkb<60Vj?W&|n5=y=P@*<%6P~n{1|L zvK18@BY5t z%gg;it9>?Z+z48yapue!&{Sr1b@i6q+hT2PZ2}xDAjH+Gp{M7Tn5Y=Hx2pBamy#t* zmMEB-il(NfX58Inx@YfR&>}K2~uRr?a2?qrM(3YiV&z^ynm#zw3{o$g!{K1PCCw@B}P&sw#)QFu$s!dHzAFhVS zCmwF&eekhjOR^ysC<|`Myv(MksJLZuhR(h<{-8}gviG8Xl?KlMWqn;*qry*|~FPM_1RS z8%;|#e);+}F*mpO$&-{@fmizG&zA=+yO=UXWY7P9zdgLY7t3}AGWh%ZgZlf*%FSgW zy{f^1MNdzON=Qf?ID6JNuu{S_ATY3Te*Hg5K0dx5&*#^JW-41+TMyp4HLJ{|v&Bgf zG^4X-jgE_}>&lX_Su(P+A0HfKzGZkNXnWpW0eN};;^N{jZ*PM(cbmWU=$Z5N%}wE7 zzkY$bkZ(1lyq7Hk)ls0m6+dcb_Wv@FdUR`Rc0p&Ln5ulxJqVY~dJGc%31 zC>s_nS-ZA(U+wQlmzH{iVsmD-SBj&P9n!;80pVu;XuIyV2t+NLYHp=eHREmv_m9Z+}n5^d8)Zfov_Wqu)wUDy= zym|9FIy)E2IwyO^P616EpFDZ;$Ae~mk(up*juR(N1h2C=bZA5U|GGKW<$k&Q?(oZ4 zG;Gbj{^&p>vy|bR@QX6CvVjp19c$L;+zPxR)qngjXhYJ|)69js*L(aCmyI$6O%ItfqzB2V6Pkzp$*>T17 zV8&sAyjyanm!=XISq zw4&kCr65r81sb=XKVQD?_gnL=T5hX!BQ`Mn{Q0w^tBa}q@IqPlwHpL2KAC4<)A>+g zb7qdEunZr2@$+*_WjiyO%FD|^bLM>uCoa+R%DcA*v^B;xEm6bU%j?h#!{iTNUIxop z6fh(o>sctfG7vOt^58)N=&-LVSEiK7Y(4DuK;zh#mzM)0BRfG8hiA_4JU-sPT(&b) zrM$e{#l@vT;85L{6Ej2F^Noy+KR!CjeJyy=!GAv<^M84BQy8=n^6u{PtJ@Sb_4SXx zxw+Xe|DH`*P?_>ZL5nWq>}xt}A~rJ3um5N1H^;)!n(wj)Xr=4w@bwdB&GNGDIyP~Y z#?H#mYFoB!0j+s=eV#aF&4L9WrylH)G&ZRJR}-_V#B;5>*l*C9ieF!|*F$>ZF)a~G~& z4K0y#>-_iccRpyABsDd4N5Mm;J$v_Nx@S##^Co9a%ub=*Wp9(zQ_LOD3RtrCJ9Xl)#)WQi{ReN~_BONggEIQ*>H61a7$4uBbCXG0TAD}R zZcdpgw?1M@KqA(}{lbY&esXlW$FYqGw|x)6CA_ zHgTdL$k==L|NYpK&~K$%T!{?n{<0zudPl@RhC?hazZ+#cRz#QatqPwpL!zRp>Qdj5g75F{I$vKGn|b_#M-B@gXf+#X_o0su4``U- zR^g1Q8#iw*T(pR3=FFK}7H9NSbx&HdL?t3Rdb8&4s|PlxpMUW3CFjC`j_m8}4xT*O zS*EgdNA-8T-D;DYEUc_H9X6k`W7jUw6#ubFs@@YOPjO-rs(#h= zo_1%_w5wBYFWKoY#=BQ8^ZNR!Q$>4vdZcVx7QZOf&aAvNX^NxZ{LIR=zq3FS%kAy# zpoOlhR%z`_OMPY&Z(+XnW>6lv zwl@04*6is{MaI6#nVFq$-sH@jzx+h)dac^v+wxtL-{<%4tfCj=rL;X{yhOYgcxhMXsZTy}8 z-c|l7vCo$+TlPLiVD-xN`_tGmr>mab7WnzA>6g`Rv)%?@yMB4b*XVKKgx9@k-v4Fw-b)qZjZYAeUYJ#t}dv~-8ge;<=?CI-nTkWWXF2# zzBB9l>EB;X+|CMGtlE($9p!&%4S(b}`QF;SzF+@-zrT3VA}0HPKNjDae%7S7wUu?A zZS}IC-}jEyn0w9UY>1hr?zz{sb4T}w&fh^3!<_r4r&gBAYp?TKy>oI##_}aA=63Fp zwXG6ybacD{I>m+M`Y(;oe^>1cyp|gtb5w_)_v})|v#;0xbX=7$J)tc2+TRb?V$*7G zFWvD~<>f}-TH8yY74wge_XkErX>F6OOr2P2J@u)vwl7;`-QTOz1LwWorv^HyAvGQ-=;ZQ}Zyo0(Uw zS~X$TtXnTqPiS}VczROXxt7&*ZE5`VH#aw5T;?my!p3$gcc#zftyx#SQuP*Soc`w= zIRE6by8dg?Q?}&a|2Oxx=+47p;U`U(<$B&d+FQF$OG87WVf}jjUFGllzP`Th{nsXS zZ#=K9Uts*VzrVgZXJxH=F=O41ZPKUIbTj!>J6^wBv3~gq!}hvY)$8_LFFf8Sd+_<^ zqkRV!Zp?da=RPYwf77b<=1cb-*QmO`aP8XOt=ZR=OiV>F%{6KYu-W z+O5CO!PAoyblOaAZf8$4 z;5(mJ{hwAk_w|bx2`?@zw=e;RAY7&I4*l`)D;*zMMP9I@b>p>SEuAg zU#ktSJ)M1~On;-s$#duO$~HG&3oUNFq~$Sb(j-tbl!c9LQT+Zoul)F%Qk%~m?~!c& z{QSIm*1Cpg%M4#nk7ahZd$QI3<>lr4pnW$74mfE2R#~=9OgD;w;ohD~XUop4Nu|5R zqo+)nI(6ZW9TLlyE&JrZBJI^`H_^3Qwut=u_phM1_;C6C+T~xqWlk)e`}^0gMXudq z9DICXDLPXxO?ex5?Q3>^e*cv#A>UYk*q@5|K50$VRxb0rI|n+2)n{#yakB%RkP;Zg zAGxi1qpRoFl#oe&4-%&&AMFx70ZKu8s}DZ@m~lKX^46_eGYpg2K)nnRaq-K2iwk9B zWCDVM4z(>>HR0Xe-N{#01cKJ|-uUua3v_a+tE=mlH1Mm#sbW@SxA*88c=a zICN;y#p?$WML=!4fB*i0Hm_K3ahuuK$EWS}#O2XLX}tZ_7&(BMIer~R> zl-}(-I&pg>m>L^o#oq_}bUkttn2bnX1~_TFA;&<5dcxwj8I^_t_&zw?s&71x9|2j^c@>&zKb5fZ|?}m(vN?%@G zsx8Gc=je-_hIrsKdT2y>c*nNjdH7Y7< zi!wL`rlzV&S1xurJzd{@b=X<~0Rac=F1O74`)uoeJ{8ZovtwfH9v?nXOg(%5zJHo- z^ds;H=+c{-8X5`qPoBCw+M3V9%R6=M(#T!q@8!O|x!G)*eQiT;6r-B|ydF+rHPCwI z6DLkAkab^sRkqQY19TYuqeqW4mL;vq%+6L;P+$NpGjG?K>Z2jzq#$siZ=v83G1a9@ zm!3Me@MBPLa9~8lk8^Lk#q~ia+yD9dS93|0+_v1?pjCy3&Y$N84PHN9F?Z7@BNY{u z1#8yuvB$K?cZjc@xwf_zG*6#>ecjQ=$NND&i97r2j}b#!zdynfv+ zYh8As@6sC379C!`iNYIQPtG>azhNU;6ju8p;qkFv&>~CFi9-7O{|L#~ei8ij{k^|= zjB!G4Zm)AY-@^lq%sF=KnlE0zb`B30XK)E$sM-SZ^3O533ERws0(TLzmgSFmfyK^C&NGKyx6$7z6%!umMmHF;OuPkj^5s- zbJkUY&f?gXbF&F_1RZEq(_0Iz{LjzM^7d)0ShWhYEp*D1j)`sCx0}Ct^F}~M#>d)g zb6`x&8MT1P!e%NFp7U%fgI@nXefqQ`hht8T&aZE8xy#GT=U5aveOWyvuqSeJ8fZ7< z;VGKI0-~a>)_q>tx3}p&J3Bi(KXK90rL64i?5fL>qz*kSFerT$^5^IC`EP=_y#i|I zNm*YEwNv5aOnc&e=?>%5r%xFge*CET@#Dvahc#Xsik^Cb)>zin)q#c&GmZyldQaC| z`<>lux!>Fa&p%I{(J>Kp#{Ii_v&m(EX;_2zRZ z)uJ_P)_|7#Ubql&E6_wv+v|yUPT--(ACK_Gr%I`-t1rKIPhD?%_j&vOGSS;|0+Uuf z>plMX;fIHZ3yO=K|Nr|tamEY}>q)16y;{Bg!lu;Ix)22@cEk&9VWXLONnkAy8tz8J74>h^fEv~;{_3G1Z_fK@* zSk!X<`Q~{-mQ^1gwcfa0X(I<3dz~;rz>H<~q+P8iK_@J@2YCiB^KoqFlf8G-FVesB zl@JFDXorXT)!S(#@9P->eR32&doXhJQ;KZ?*4lF z-RA^St*op-XCzd8d&BAP?;o?TW@een)Wgp|Z!CLzD{ArKGiT46x8PH z=->d&Qi7I9{Vvr6jb>DRdBJEmpP#RtIXpc4*2EcXHD4~eYiMgHFD?+#P*-Pv_Uze~ z=Wah_c*m$tU{Ekl#G8=P!gwrrX8*HShA z-kyWK(&iH;O;Y;x{mDsT5mC{F8#V~EwzgilcCD?kk&%Uo(Z|;}F*%vJy1LrJ!eT-3 z^K+ol-W@S|n>KF_jEm#b)zt-c&cD38yyio2;MMp&VPRpQt)2h=evb#0TCz#M=l}cr zdvW~!x{l6H$LV^ppk1YZ{?v$wi7i^Og5&Aarve--85b9^^6>B^ z{{O%21)Of2{K7S1;>1RNyB`f@kWjyTIlHVqpF?p+)mJUhqO}z(H16!F+%zkK;}N9E_VwZDCRd_ei*#fuC9rw4D|^nkWoHM#JfnQhJwa;Z(Fk&v)3 zXd(EPjEhZWI$14FitFO{$7PG%IXPL~+cbH_)TyFx-oCxK)LXowvhv{N%fic+E$iwz zeZ`>SL&BN4*5aI;oH<*j%n@_~IrH1w+n4(m86FW+1&yBm{r!FF+}5rwTTI^E-p>E~ z+gssS6Mq?HWo0~bPoVWMw>+Oee}3J{{NRNP0)m2q5~f)qzrU_vbL*92jgF26?JD^D z{r>SzVRg`e(yfhC)a>o$-TP!5BO)X~%jG6b5&{ii>FMc#rWqEwb|<8#vkMCgbFeT; zNJ({7MRId-1;oVkoH^qInpsg*W&Qu>Gyk^y`+Z$qTswB`04+iL@n-Y+Sy!!=g0@#* zyLJsUil^=MM911%IyE(QjmAWErDM0YW_PY#yLQKJlVfY6w|C5+FaNM;CyT?{`nI;V zlp7loQ~v(?s-mUUm6Dq3xz%T3fQOt-g~Or4hfg-Ka(jG#clW5?{VP|dfZ85Uo<7z5 z5o+`aw6*Tia)0@xq$DTMnCPuSk#~n$xu0D2w^y~YvO03%!UUgLCY^8Y@1Ji||1ajt z4DMxpiw6gTmhG?`j7R9(?ll_V!OzoIbL_%l%ZF+4+~r zIzI*-yvU&7KhI{NtZQ*H7$K7RYAws7IXUOl@dfsv7(ixw|F`Q+r}&UNebGVks(y}2Qg zSyM|ZC}Q^6s|TCeJLk=l)Bf}1&3XI(Dz|RkTC!;qs9~nKO~bPEl?bClS9kZ+x$cQw zU0o+8sd{&8+g7&r5NPk^lMfFMFWIssu8*Tn6eb>rsEi+u|NkBF&)){`)tINZ)Z zb*{VOx|p3#pi>rC3w-$YO)W4mFyxbnxcFq>*=B;;+N+~x+WmYYJZb)Xe^p`Sz3lvQ z0_y7ONqKpG;5h`p#ZR9APN$PvqYW;(U;$$DA0xd}#t`lLb(Pu}nUA66!}6ST?%bP2@6&p#LG z*F{H1Pqoxvuw+RK3me$BuaoWU?p`e0o9R$kXgJfVREyDJneXgn7Y@sG35bik zuUWgcbLmpmo4d=`pZedY2D^lSYEEq zEvBG|iMPjDYI}*48%k*Y$*0as4=zW5h`Rgt>-G4S!w*;7T^Jpz{_U1ILqcX|r?`HcN!}-6uXp$N^XKR1r=+Gb zGJqNro72y)x;oXz{?7;Jn0+;pYooWbF|@R{CVqKwamAW7OXl>fP-o0i^|fBnk|NN4 z4!zi27y1?!s)(tYnVDsMUZ}63abQE@VbGK!18DDrfQ-zVYvO^gFDzs}H`iKym&&(& zwZAvy+%!71QX=!`@86&UH9*}1HJ=#`|Nerwo+~9e6hS-L9zA|6C@Z^GFgP(gJ6l;t zhX=Hc?!m!kS9>Rkm!M_fqN+tj|Nqs7P0?sLvgpXQYho{7zRddgy5`gr%|-mPwr@B8 z_U`WLYpkB8*4EZBI|>|26nDti{}DXiFTZ?F*Tk^X({u%8WO_hH-dBER)6>%f9aIvx zzi#c6Z{~S-IyyQyK+DO?%F4VlgC)0Y-CFqNMc|8!)hjRSu4fZVHhF%X^KX@1_S0#)(Jtz(w{G8_e0_cVfg~3o-zQ~6WO}0^mQ1h#IgVTVbMEhx-T(jJ?x;SS?4AV+6gXO)KqpL;iEO>Ft2F!K7EYhX zG5hQ0imGx266dW8GxJcovn5v(jpH}3QocsG?O+*SF z9%=<$i}=*#)aHthNhNP?2r_Iae(v|J+ua$oeCE_tZBV-mv|=f4Z`Hx$$Jxu@-fU`yoIY)aoJXXTO#YK zd^LK?jvYG`)YaXW?)!0XU#+%PSYB3E*HZ84L4HeOcJ0~~v9n0E;eXrGwb9%Aij>^u zt>S+O%43m{k)TtaKy~_&n~*FQMvxBnCh=z zzY0o9j;xK|K4t21M@2{p$Ms++0w3bm>yi#pLVj7?q~}eWHOtFVa4`=bAK#6Q$?Tx>jG>pwefa#jdGB6ZY2Jqa zRiNTHK0E&46*U2lfS8yw%bw@Acu&^@T@-Nb+BHyTnXP-$zS`eP>gw#8nwqCh1g}5b z&dso=pdl2Sx<3*!eC&^p_b-?AOzn}km%F|`-aRTx z>aB*Br@K4*f%;%=gH4@%eQE7^B5MvV0?pZ}sj2NKdfH|5$z#gIiHf&Q_DC2uWr>A? zwvvM{dOA1X-rthf`S9uK`X66hROXQ~=_nJK3fkBkwl-?x`4$!#zV<`P&Z*uI&cxiO#>jZ|R(lz-=#HWJpL$ zZ(cq1TEJh>TC_#7uBx0YOt%ED1bwxeCaT(XH6f6RK~7HYO10Oja)YR-s1F}LESTjw zHAGxBH8u4Lx4YZVMT-_ac=(V}uHW6d%j@O+{q}nC`*g~Fn0%i9=uy%w!7HbZc8h~H z(Sf?{fhMy;Tsx;v7r%7*@=CvlF}9Uc7B5cTJZH9xPNj_}#m*m6eqhKRzhF)zIn|&DmsG`^$ulPsYQ#?bzg18imEh%_~=Go||jE{Dn=@ z)albf$Iu+8cjf&2zx2(Gz>*#dOUs!>Qf@O>*^8fjX~cbL)xVexftl}D?VGh};zYrx zDz6?tJv|+i^xF94{j9q{WBDKHq4&>>U`_oy|t64Enf3BcIN!~ugyVY+9o`4;>3_++pf#p3b)<6Yf*uPjDSV&cKC8rs^ytN+UQF87<;w0*nzmoHy3 z+%HxHiK~K+0bCuve#M;aA6{M6zIcDxvSnWR`=7CId#CT|xnEE8>ucvZuT~!Y{Q2|L zOLB{);`UatGBY#3c=hU3>CQ)8?4J8qr2gc&vUl&krze|d&Wv1J%l>)(E8&=}Teqs( zxlQ}Nd*AKsd+Mi)Ufm13|KI#dUGUWD(;xr&`T5O--bo&@Q$Q!&y7$Xj6h3NE`rHv( zJZZj|Zj{EBwXc|#ygL@Vck#M^`FG=Il$P(ix?S7(tZ+Ry7uS?aYR>V2fq|3Hb5Gc^ z_qs}E^z?7W3VAnqb^Yby_1fCna+(YbSJm&iqRS_JYx~J;>j`O=oA&%KovxlAzCO;? z(UDQxYl_ROMJx<8wY7qRf(uvZ2<@%>?Dl25k=wm1e-cd6p09Y5_i9$WkLh*M#W(Nm zsZ^dmS#;^md#Qh0?_4?GU}NX(=H~Y1vw|CFQ1i+!q4m4>9o@UWbi1JE`@pleRc)6o zoW~n^zuxuRlsQ(VT<6Z6%gL%#ow!rO)6XyL*U99o>S>GtuWEQ+6|LEt_T5(c+4Y(! zQ>L8wdZBlVt#s-B5|N+UTQxzOmfu>>_)n+1!u;YZBg<0 zUcu9}eWf=|2=||~?BwawlV5&(bZ+_T^#&8a?wwrH*I_g5ZiuI+r-z?k+xqqEgKp=Z zOVRRTcre-DPB2!&KQilGgh*}Ajx_PqyUA-AvPxsUs(ga^{+hU*)mPgloM-nWaEi&6 zz1`J5XZ7kc?U*n9tI9o7{OWL*(8r?U;`=+-rcG3Q{X6!4nL?k*>4~Y)t9IK|S`|Iv z0Nv4hZ*TSK(w#jiM&hc;$NP@XwJx79Wy+Eco209I!kUfx1kJCMYQ8I+G;JZz)mEwL zr(5^!+ZS{z<%KW@OVLl8E8F*WSNAM=?iH1H_i1Nz+mh!du7QDqyU%q??A*CCVnf0~ z>+R-G|K?@=;Gl3e`fvdr&CeL?*QdwctWoksPcM!hPZXO$HeIzB%)cVqqkI@c$H zt4m*BTeN?^ZS}G(WmjFx%FGxR_|7()GTGqNm0hKvBTafGzeR07zHH^D&6~49@wBJv zE0=Ecwk5L8PnRxRrlhFIIKSo-=Ua`lUW-rd=M+{`Ffj?qv}H6+FZA{F4D_1a>-sol z|107C*;bp?7ssu#7w4C=SukhGwqtc{Pij9U7Zn-JZi?^Ov&RO!L~h|H(8M=rn-OD# zYIaDVQQjR3(ACmvYHs%`k8IksNr;ykreDQH+{Z~YQ`bv`#cJNvD` z5U;>M&~Yjs?^VCQ*th7@p+kpmER^Pw+Pdxb*6emrU&g{B;$Ef7s(k|SNlA+?-3nnh zJ^vQe)IO@h!`s)_=ViO!J2qs!aM+Y9VYP|D($dnWJVT;h&mT4&TlLPV`p*x;c{Y`crkGtlcy)ESYkmEPgX|)c4NNL3DjuAgs=Xz7 z#T?LynD_3rPe0wXXbI!PhYvw#5&Zi4+TGe~^W_(dj+{Tw-`3W4 zV|V#_o6jC0pI`M{ym-+oGg#Ke)s^wbdn@_a-DOMXv;~^w=jVeOE3K`qTNbaFvSNkC zm-qMQm+?&f{NbTbufx76lJLUE`HkPFl_UZ?a3{;-Tqe54Ug%XSiohn^nSgzDLp+bn?yT=jTsr_q#API$W7r_UVad>-jgU z`26NrC`R!+xAQHX)3(r2K>&34T8Q41m8({LchAZCP`-5e^26uO^_B5V-Ijmf?#8WK zi~Q%?ZCPyM?W^VW=FOWAACJp}?j@cUKCkNM@88S}ar^6fC#(BwE%gl*lak_kus^%z z$IqXEeupm@6+Uv2v8$OO`s)AY^7nB+e*Dn*)Ai`pi-(8XH*DRyRMt5)G%PIX|G&SW z`@LRQE?aUkdG52bv)eyEKd+t2a^S_q#jfHCw>PKvAG#f!dh_N@i|TJW3>#z%jGsS$ z-u~%RQP>LR6X(w#kFWoGbl1J3D^{#~rc3&^Yqz>+6jf7nMHzthrSf;^*YVRAD1G`)6d6dH%fzH#R1}ahFRi()0qI8e^7w zE8*>}t)C)d_U_rc*Hv9X)~+Vv>GHYZExxnOI`s~1ulSg>jXCYY#$@*%Ion+~#aZ_EnhHA4F2g<06Lg2w+_|zmJUk%Y!-o%7tXXs9#l^*$?wQvtT>Kta{{QiqA9T2E z#g7jQ4=p#aD}5zm_v?i+18ALO!Lu`xt=pD+$=O!1sH>|_nKA`bQhE6Mrx)`XFf{!B z{(iB0zZ~c+MbKgD)_p;sh2AGmavG7 zGBg}G;1D*!K*`U~Z-!m16=+Ars#RLI3a7kUKEIA>{`uq6F_-j@63)zmZAJ-xjf^X^)KPQ{LlvE8v} zkBqRIPeXq{KO2vPgLNO+s|*|F2^qFHDLOehf#z7v*6!h&@Ot~KZQIP6nwmCLf6rTb zCR#{DL`AB&{=);uH#asqKg_)p5E-G4H0dAYlf50CZqmX+akb#|b2VvfyhilCsDX$8$D+Wq|!47!UWE-r4%;}u)Z+y9q| zjEwZ!snW4a(jb8Wv{m&<^C~C7<1KnII~*7$oSv?)o%HejjXjl{U&L@17Z*>OHf`CI zvZ)WBTYbGo#{OQF-xQ7<)pnZ2IC#z?=C;oF+bmdfR;gPihb@4Uc9$6T;M8Kwr%pw)>J9w6(4rKCU|Ax=)tg|e=BlO|2-*tydZw8w4bs#S|*-Jgnz ziwoP$_wSRj1eHCB>N{4+wTh~)TnXB=)}C{3Ph_AkXpGj;tw%yp%g3tp)sky_xjsL%UG3kl&QG+g06*bIsSO!-s-UbW8+!Oec2N6bWhR$!HsA79^-?ecXV zUEST8#{;EThp$%)3kw6)$<6HiLUR4?M#jdO?ul6e8G%7DF+OY7u01(LGg#!Nk1lBb z=gNw}MTbD+)qlQTkN3*nuj%FO?djmqps{<~HnX3f&)a7nPck{uCu_~oe_T1f{_oaX zUyWpJtENauNK7zHJ~m;~CZk)0S56(5ulI55m2$OiJN5C?CnY;OyDiBEr5al_6k8^I z_)q|fR8T#9cZ!FrtLs|*a=vzFF})a%7N>=mj816T+Rojvb7!ZKw3O5&@G_*M88be7 zD1dGTJ#l%tf9CPb2>}`^pP!#s2W_AI`E+{Dp#yFP=H}|sW;qLFotJ{$#gp>#{6Mqw$0us2sq2D=q+RZ&q9U}tZS+N(BM%{S;& z$PeDmo*tFhT_u94%ntj0JmN0fGbeDzqen?brLRJm8bH(TTBSi1o}QeXJUpPuv?Euq zPF=EW*`>ZE+rGWM?Osw^dJ?=XHBi#h($Xb5dUs@Om*ZTGrJ&HBFhStZJ;v(YIj zDuo3F3RP8ADL+3wRngb)kDB)BQ_-gU`*xtQe;#_dm@Ki6K9+qTj_GEy>fcbRVH%}uJHDWYyM zU8S2hZ+d0#-?C-On;RROZ``^C+Prkc_&Zw(0zefZ(w;fU>dvj2WQ zpI`p&`NxWa;$r81Ia{K)gKBDWZrr%>#F;ZS={v2gtU$B!`+h!?E_r#$RZ@RyVoFd{ zRM%v6|D^NtY(c}apxfG>K4s0%&#$PiK78=t!octq=gyrww$yvNfUIoqi4z`6mM=ei z^eC&ay5ErfYXJP_NCV`kRkpE@(d;$m|yv7bj+At(ssa z;dT#n+tcIY{h$r8po7alK4L8?ElteN@AsQ)1sb_iQ&SV*U@hqJTuj9Ie|9XP;n?b@}1f`W#yljfwTeVR;M!R$OZtJRVZ#vgT zZ@<*HNCgsUN zQd;mHpVmx?bfD7jz}0CXk6gkFL2Fn+ z9mhvUyFnK-ou00r>7FF9j4?(}9CTLfcHvK+}YRGIEIFbzK!5H?D62i zgN7+nL~a?*TG}nH|L8Ek{Sw*cS)hrs*j*yU&(45Ok9=$4qr9RfkcmM}O$~JBK4@9C zeBBR5=Qf^$pP!%4Jf0-s#>39euA;7fx$oi|o7!I@D_5>OyGtW-PlaJgNy&z+t6CtZ z1a&WB`H`P;4sFD9XVU~Z7$JyEWR^be{pxKL-%v!x#JMZ2e&vRDn&=PbKuYr4G5m6L&kg$cA)6f}%-=6hPu65TX zRaI3*4Gj+M@O2`-_l~d7->T=uaNy1z8Fqd-7Z(>6(7E;M>gu4TW|>Y~=Cxhr@6UA! zseTvyAfm2rP*&{Pq&9`axZ0Tp`=6ZuROJ~JT3Hki>t7}q{66nCaz{PHf z7Zy0?urM4Bc=YH|)0QnJBBG)f`!4B#`a1LG%>x}QuvjBBAV6T!;~ zF%i`R^~X1rzrWY39llP%++6(buF}Jgj&|Sdo0tgR$GBqEszY~omuI?Pte84=Dri*& zcz&WQ=;-m|$!BMog4XKim`|_xnBPoE)9E8dCapc5-)u^hff`(i`EB1V5oAs8-xb>NA z(qLqe>u+ypU|6zrY2u9yiJ-9_yB`mj!5glR8Jq?61S0|$u>=MNW?Wv@o1sxwyrJS_ z5@>W2Gzb1xqi0TLPGHd4GiP}A|Nm$G=<#FFf=|2JUkA>g@1L80$bjqG_Wby=y;`a} z3LZLbex=IE&3!n3|KGN`*5!vTU7A!T<95zupT^2(uU>V%c#$#3u2w2DGZVB6c1`4F z&}tlOslypd>}r20sH?MQW@dtB)Fw?5irHT$+swwhNY+&ov;|Xt-w!5kF`WY)g31}k z6Gax>6j8m}#wQE9>@(?jpDgGETC37mpli<-FIdn}X3}<1!?x;6!@hlXpoLo2UB^IK zBQi2_^NxGInVFhy{c^nO>gsDEH@B6^xH-;>4P;`7(Gv$PxGgF&Vq#_nZS@81c+?JG zmvWTz@CnZO=iA%c*_D))GuS&Jk*+Y(R)+<|2h_S_T>BfYBO$c(|v2v!({q;(UPcc zG2IO{KZ|UtzHor9u0Pf*?Ru1R_YL{OCifONHh=i^^t9Uf@Iwy^95_~f^_M&9__gS1 zXvT?K>y}&(uC-_A{0TaU^8G#A-u?H^f^Kriy=B6}#+Gzq0%&V2*RifiQc+tn8b!6k z_5{zV`F^(?bV0=13ZBJfbLP%X%*^ck{QUg>;&|u1EWDyzrq%IFVyBs~dYo-quyEeY zU9B#6k6(N9cEY!>S912ht2K3Xb89;N^w8zYo9{hcwRz4QnH~v4re-$YL#L){XC6!z+0C+M5}f*+5r9yuWiVK;QA~ z?bZLMg_NAwq!YR6`gP;r?G+QRzn&Nt5+YLd^%ZNQ!-W^AD~uKfaKy*Q&zLbI;r_l_ zulHw@UL?4B+V=GJ3Q97`CfOHOOJ9m(j82;6n??8`Zy|NY$<|NQl`j&qjti~ZIgFD>o8Y&rk@ zXOmYi|JK#tn{PJ%^9K)y=-2*o{|^4!A|LS9QtZPU%}MR&zix5*^dWhz?e@j*m+S7@ zH}A>Z@_V3RbwO!qZf9rbb&my17Y1G80~I)vRJ{v8ce=EN?HJS;yV&<<4J-`kC?ir~hZA_s@^@O7AFq+;(oAI%o-w zfS_RGi4z{6e%Wgam);dqY}gkDbSzk)02%=7?ChN2p#r*oGAAbod``f^g^jN}S~6su zot-PHs+6p(cAb5`C4H`Y_15&aZqcvJqN@K?p8x;j^Zf6x=6wSVAMx<;Jb3ct%EHGP zi+1d=04+;KKv}s94yF_p7 ztu_a3DZjZnU0Gkh|8+%621|T={E4SUM~)xYmdnmv^*A$pu1#*$6W6}0v$pm9{_y;k z)w#>d^5#w5xmD=%hW2{>>8A@H9pRiC?O*ivmg$dQzmyad8p?9s9;xUNbJ3XUqU4y8 zq5|q!&9N+I1Km)tB}1^OsR?xQL#d6E#pCzy`)}R4<+t^4w!2%N+&$-~50gbiL=vv7 z2n6kyKQU2xs_4{UQBhF|>oOf5UtiGbues8UN^jkjRlTk)^%iGgXMgeD6Pc|-H zsyaXe zgwCEl8{@9xk_*~g13JXs#%9iIjVN7HQ&C|xp9`I})~{Z_Hq5fWYEey1PTQ(44gmoIKEA#itG;IK+G_n$#6?LEw9M-6?()m2U-Vb3 zT*)aZDQUHFo{Q2%1p@;CS65fiqL>4X%scyBOcC? zcUs28#tO>G`AruUo@-YB4>T2Pv+=NY=KMEra;{vzo_uMEXN>zxftfyS3l=CmdH($I zkB^T*I~%S~>}Xrix=v>D>8BpPzDGfu%5L03y=zR5j__x4nFbay)!6&cCM%7Prp(L1G}=lpZf5e}d; zaZjB(wIT1WRZ4pLVaSDFH#Vhm=iT3Tw$#UIO4`*`p&tJJ$8T;<-`TgQR7gn3p!8M9 zy5v0u$0R_Pey&)dapc&sAVo$01rvpMOMiXI1RX%w(bMDN>&vU=H>cylg9H{9mJ78C z9oIH*-hBANLg&I47Zlem&gh*qNeI+7T)A>(L3#Oet8>N4J&7M59R+n6l9G}hynTDN zRAo_P#u682OACvH<9)KA1rbWh%83aH4Hqs1fXdi&b1XrJ)`Vz1wNg{mPr14(w4<-@ zUC4Cy@{pt?CD1Uzn>S}lr#x4ietKiUL#LMZ_FzRte^+JIs3ogbakcZyySccq_|3Iy zy|=geF(^a}3Ji`U8D9U$k!ij%r0aTIH81D}rfX}XclIq7y>s{OMd$^uuQkrQs!dij zF%bdX;$Bi>vS-hp9epk)5>thAL!+X)YJY!AyuYt@N5w~_HeTsA%i?DV-`?D;c)Rub zjz0Gj#-PKoySyL8*ZoXg_c&wArcFjXQYIXMfq@^se}8V}xBFy@5$JTAi4!Mw^!8r8 zxm!y3>B68z%v@Yt8_M6ufsVe|o`1h>@?_zr=H`#br1KYquaAp4uDm4F*Vos;+`N7I zbn&t`Hx8D{^nRQF{|`H8-`f59|Gn#CcNfVnk5v)se55t|$B&ANii!f+&J0E^RVx>@ z$%?wVyn=#)ppk;)WaT}3_Zn7z%lYx^*P#Ok8eVs_*eKc9$bi~It=!@XiHRV?pFVlQ z;_dDI=GNBk*BWnw;^X@zjnhDvrxg|!O4!%gT%Xu6Z9&kY#ZppI(A&qBELq~9Ap$zO z);R49X#S$7w|8fs2gj2l%beU?!<-uipi!#V7E&vB?2r%>6Z7!$YFfTr{d(cNmAiIH z?c29+N6}NRJ~>-1YisLu%7VI1OP2_P?)rQ5=uyFs4~d{dhi&BeC#(4$dcA%>pS`{P zmp3;jzwTHf?Cs$J+J0VCRFrYQD-5(T2$b~K#qZ~{i{Gq2Lq}h~efxHE&{fw@o}@_q zRXX46<*8o$|6eU=q-)~Di5{MwjXr9i`Bni536A>u`Y-S9&ITD=R9ec~f84pM%IbQc zNtcV#!3B=Z8&XaRfi~#8w(t)P3R<+|in*nw-EXMzPv0ssTR0%`~5m;Pft$`Ev=@B69umqnlw$HE)H6)DeVaIZK*g_x8+uZ82we3HXK)L1AHLdwctJkGEu9Ul$ANLxYYXkhLyzP!TGW z?aZ*$Qhl;=)~s0te|{9YxVb6m>G6ezhHlult!@2!{Xc*HD2R2N)_s({C}&;%?#QE~ z-~*mP!{@IpvV?_&n=>yjYdro~Q!aW(fguV1;pSL@F zYiqXrNxu`_i-MeP`D#s7QdVaE`0-;$fB$j$`ag~PYJVR(ew^LT&hEpPFH80Yc(fZF z6Zu|dS^6qu`47kP=jUXxjWO;j zQ7blV5cu}(+mC<0-wR4fohp@?divCY<6--aeYMtg|NoZHm^G_N)_o~xWAD$;&z<$AGc&X}DJ}`p1husO ze!mYI?U7Oc0~!T*@ccQbP4?qQ#jWO+6)aPQ7L|ai9DjfJm>8Kp8Ox?imx4fdLxaK) za#;3)<;#zk`YbvqB`pma39bA4>*0-!$^Ig@R;|*Sd-Kct%l`J@)6kbKTjnm8ucglh?{q`5`-1&3lanMQ;@TLF@3yT7ysYfLai^tb6+S}WMZV^7-C%f3m zDWqF)ky~nN>YH}?x`fNie3RSS+ISc?Z`hFVe*b?vZ$G~@US8f9cNM9Wv$IUk95~Pr zySuE{b7>IhGAgzP#stu9GgkA0dSonvKF*8!Ezs%0!?3&L<)o8CO+?TIk3qL*aJn^*X!_OMfLeI?1%oz7K2Fl9HSFT>&`pa^n2aB+dt(qhwI_CSvQ{*(G@)ULD7FRDM>QG-=X=Nt2p{)%_N1+9b4o-!H8_ z;KLewIfd0Su1w`{vHkY$Zg=^;N_L^nClfRI8XX#}%ipbdQ|Ej3?Aaf$*Y6Jq4Q-t@ zOX|wis|$DTlstCq7^vX|+KZT#b!(yhSSSUt?hNHLr{4~pJzzU z>1nzVTeCzP>i_xJ_$UZ~+6)mJ5**vlD^K*8Fnf0Ql`A14A|eY`tl%)uyOUA6_V{Bq zJ{gYU;^K(N$b)Ck@~&IA?rmK8#Oc%7)zz1)%ZYcofUf9^ikfvRZ_>>>cY65kelUPe zBLE$o02;>B5Lxx~PRo`BK~7toTwPg%f`SURF5Sk(z#wAb>Eamjhp3TlzQd48gt?d@#U@0gsKfW>fc-#w_(9qD1o}MEQ z54TU8I<@uJuPTuHu3ZzGHf?k^!NefYu!0i}r?rlzJV)~!3%%+3#5 zDRg?e{^L_qwLxunAOI?B&&)KwS`_Cb=f1QhLw09OU-9#EimIxt zo}Qj3&Yf$E(Q9A3Ru|OF;}ljqaPy|*uV24n+*S1(4BJjlR#&#P{5kWyCyr%Fg_l1g&*jm2zEXhhs;dPV?C11+wWCz zD=I4b$8doTT77)~|G({ziXKe6ctF{`Z$)nTlQU<0&djkCzPr2Jy`;pXjbDD}wa2LS{PWH8>;L_nd3^Her#fb4(>jkPu{BgyRBY(z;0TM3UcKqN z!sL??QBhLWpU;|ut~3K3;{N;B>-CYbv2!0;Dk>^=eODLYn9<+QpPiEv61lAX|~`yGpxT+uJwqEPlR;k(teaVNLb-cW2I@@6Wxv zYijJCiixi~mdrIWHop1bVDroXjhwAhI9QmTy?y)lO7fHE&yCsH*^fQ`IAi~Q`_t#o zhX?=quc@t_oS2w+=E8*uUteBse|u|d_sOS4Y5DoTX3U%^dHUSBu+x^Dnfh9)OM)kQE!EN2 z?_V3ge_mxpg@LWDEnCCP*|Rq<^`5@z#fyxv$jFnWK9{=w{HaMxO#FDHgm3=&^oI{0 z_S=}NtGCabHEUDd-(MR)d?@IZ=Cr8(wkB!HkxQ2*olM!pCm*ageRJyRX&Zn2`W0q> z|Hh3I_v-)G9((*TqM*RQ_qsr@%hHyTtgm0cz5y+~THJ4!^zGX>kZwrrg8d>Bb~yck*im&vMSm0_4RdQhBtT1@7F#mo~{?0v~AnAGdFJh=wx#5 zP+J(}bi!FnTRYOnhbMYt66@xzTSKQznW*f(NmM&*!;2Rgz5g7qM~aAvZJMa;uI1+Y zqs9*8qS?mje8QbBIiH`Ml`^;bv}2lJZ%+@8S;7H^w8X@NUf$mEFCt#Pd&yt9wCn3)gT2a}LR$4W)t+dA4u6_Bv2n7xzml!3Y-?*P1B14< z_Kw}V51&2DtEZ=zb^AfrpZ*Z7qu1l>d#|nzXa4d0|H-w{+XckM*~P`h`!3tg2enXs z{CIF~uC<4kSJk@HMepzIY!*~@Td-;sm(fffrbdQlHeS$Z`!xOdz8Nzl*2L|VdVOu} z;2jz{EtwoZQ@n z%a^zB*<*9##*G5mm#tT>T~ks}V0eCRu5(pY)$TH#X(v-aD~s~--YM@s&(-QAAt`zA zzyXHp@9$b?&z{XSS$L66h!@AphG~;78BGcb2w>P5)A#Uj`{BEHWkH*~%gVxD@AbA4 z?sRE-d3pKb4I2bbPt!eoYO1!PQ0I=muZL8GIOFR7md>#*=L4PiI&UQ_-a}D=Q1MpZ&|1l9ZH`2X}TBPw-l5U~C*L zGNthGv4fW`O?tf|s^73}!UO@(@x<2F(#~x>53MEzd8i2a%(IbPx^(G@bLZUV+to(Z z#uXJAsrk>l^UUmz(?S7I52Nn?-|y;WlT=-TL3Xvidi83;?AhIC&iH^9iG%hme0ae4 z>&we#kX1*IvVvwIL2Cf_{kN?B`}I0#D1XANSzPY!?&}_FgqD_?#>B)VBqcR1S)#(h z(&TRU|9X7=!DGkROifMu@0dR?bXpitSZwRGg>kBo(-jY`si4zioWsJzKruIUYHL>) zmxP4Gfr}RfL06m<7B)_vEX>2pyR&cgM$m=vb$=?}+}$0Xo-Y?36~$$3ZN2CFy=u_$ zpQ8Qd=H{RY{Pgqla<9ksG}iBnOWGI_8ps(arKQ?Zux7;yj>yPJi_%vjM#jd4e}9#7 zv^w3mbxX_Z)QyeFpicU_#aS)0W=ZwPSPD&6_doXie*O7UnW>Ci*wWL}84j!p zUA-ao^t7<+6Ssf{*Hwf#U6cfWeS6ytnsNR1=H{y|UvQVIqfJv=`|!%(~^GZH=0=6u(#UGwL8UCyQ*w#LEDjjgDt$m(cR=Y|aiDk>@u{`~w5 znwIsm?qkQ? zKuv}F_vL4s=d*p-FQg>E0Xm_;-`{`7&Yg*GZfv}8{rYnYLq+{QFHXfMH@)ePFD>;x zaqe8$l&Oy%C4H!{iHL~Ma0@!tBgxFo&HbUmW}UJ&YckK{W4+C5*RDP1f7?dS%uMX^ za{u-iz4q2t)@8o4+04z&Ev&6C-%?%_ykd&LB4#ZutqGGSH_w?P13Gs5%gf849dlLR z-mH}Hl(a6>Ig(@u?)3k5;*+=Qxo{x>H0@$r{q2cWUlgcA+byQsv~#DWl9JMnKIe{8 z0h)>~?4C=5M8w3j+=4c3+7u8K#bpP+#NNWf!a+yu@WF$O+qP|!+W$}@nWwC*475%5 z+WPqOr80h?A+4)dMZ?#}9bLVC->Fg=r;sKuPQ|${k&%+0K7SUKPd_)uv9#0_v?Vxj zv74q>SA@>73k#j6+PzhtemXEDghg9>_4B%1CnqM*wEd(>ll=C!{%_$FPRPr<_j1{K zkLQj{TPFB<=}lj}V@E__5NKC$QxlViiqMxA7nzeb{+PJv(naq{`tkdCyuH0aBRcW5 zUq!3Fytw%8`mWu(K}$StY|D*qH_F(3#}8P zA|fIWzP!BLwJ9hjhUb_B8?O}0#t0sFcXta53(y7C21Z6%-#31Lf4~31g9Ok)6q1q; zSFhi9C^~;HtKIznSFTT;GUdRTGdw$Y?wni4Y%tTO4Rp>HsOxoUsrSx4XK=C9ViQ_g zx;05<>CzQ<_SH%=H8O~aiFFBzZj9&=RCe34(=PStsi~kNQB;IDD{SN{Y~(=w!~6gL ziTnBa<<9%xt-tTUzS`dbAt6gvZC??3=+L1FQ>V7hnIp4qvB08|5HAkJ^KYM>o$bHI zf92Y>uG{nO8f0D3I69?2LMQBw#`&8!B_ksv`(@lUM4Z$ngGMZGY)Euo9qjV#*)tAK z&dQY4U(da{v$J@^=FQH9g@$c>vY^PE(&fdexa9DYB1^saeSbUxE$jc;%$hy><0WtX zg9i^XzI^#IBP%QG>sO_T9I?C0j_xXb{o&p2_gZ;=5kWys2bB4!bA@NQPHENB2Hjuxjf~Qv1oYk;DP$Po0p^-9T;Z%u+`Vsf2gqWSQ>QX z=+TvmOTYbi*e?I!<8k@Ld-nX9$=%9%QSHm}nF5Q7_W%7Ry{qKqrFGA@-T7;#rpC7a z-!E+`DX9w=E-W}z5q13HMM2Qo|E<~Acl0@R1O;j;wycP$tE*f6+Ox$;aaYO9Pbb`R zZL7bvG&eJ+ot?#MH=jQ{JA2CX>8p*`9m~FXXWfn+GhS=7Xo&jW7jO#cGW>Q##Cd(( zUW1Ys0TEGApxLcc8zvp$SelZVJ3T73mix)a3NP!h>OH?+ ztp+WjIdtgIl`=o45Z@D}3{D++t5>f++{P;{rz!V#=jOLpSBEn?yqvz*E>7l3tlE^+ z6B87>)(a}`0%b#&r9C}88>+s(dR`ZsnySjf!?R%d^5sn-YpW|%o<3akY0Yu@`Zt;T z!>8TbTfKPGrl6O{Ra?BbENc;1H1XA|SM#!^e}Bum>AUUe;-v;#{_J|Xcxl0w=Y^^F z_iV7`;pGhs4`2T6v(O?hlOQLKiym9IZq?FM?VmoOee2d|Pa>B-e)xRLpI;CEuL2E# zWo2iF7UekYa9RpB`}ONktJ2F+nHg&xwwTE-=KS*IOF(@5`BEOIDP7C*ITWQjUr%hf zcFH}v^~uNMp|)O3EAmu21@ta@a4NbeuUtIECPq$f{<2I>k+r^OZQfpg<+QZrg%T(; z_on3Jtoagj>DGy(o0sL!`!?s>p0LnYuU?5%?-E#~o$;$pV9~^1-{13hx-6PHeebH| z_mgjL&tF{s|DTpEyW%T1ukr#>p7xCAI6FopF9yAm9^V8FqT+EE&v_2dhED-eGlmH`RMI=Nb272|IcS_ZT;lgvqR_3^}V*px_aXVM|O6$PTU@e z#Kc69%G3;BPDK~(i0J6#hlg4tc9m#8DYCp?cqQxdGG76%R+C)k61mA@paEhM3KL5dk2SM$|2hW}zE0uA&(gw;SQQ7zR)q>6kFMD^V)BJwT7HB1uU}JNm9Hd-N#D!rD6d`MJ3_c9-jK%e%{EH-De% z<%_(a|tX7|NjUdJb3WNhD7FH-`}sF_E~t5FDMyUweH$w1v>j-wt4=sySvK`Q%{Mo zu(KaNf8Jm9`}vb6Pdd7|u<*&*bbtn*@9n9K*jr`F#xJ+#OEI*dvYLAAnA?%#$CJ;` zvjt77EL^B~=gu9_c5Qxs{)mW(Jr|lT-`<`N+B2P*nQ2k@hy^rF6CE85+W)gT{d`+z zXD8P^Ud3Ilpz8m!mcG7wPL9r{OP4^~-#{D5tE#FD%*~H)NIVRxvgg@WAG&cv0(2iu zr^||!D?trDIhzX54HBSJYQopWIHsnme);;Yq(p5)|Y(4Eh0Y-|Rmrmd~5tY^-i zO-xN?-5BBXyGP&>BPh|f2rLqOF)6``LlGK@P8=6GU=pBk3-aj1- P3=9mOu6{1-oD!M - -ChibiOS/RT: chcore.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -


    - - -
    - -
    -

    chcore.c File Reference

    -
    -
    - -

    Port related template code. -More...

    -#include "ch.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    void port_init (void)
     Port-related initialization code.
    void port_lock (void)
     Kernel-lock action.
    void port_unlock (void)
     Kernel-unlock action.
    void port_lock_from_isr (void)
     Kernel-lock action from an interrupt handler.
    void port_unlock_from_isr (void)
     Kernel-unlock action from an interrupt handler.
    void port_disable (void)
     Disables all the interrupt sources.
    void port_suspend (void)
     Disables the interrupt sources below kernel-level priority.
    void port_enable (void)
     Enables all the interrupt sources.
    void port_wait_for_interrupt (void)
     Enters an architecture-dependent IRQ-waiting mode.
    void port_halt (void)
     Halts the system.
    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    -

    Detailed Description

    -

    Port related template code.

    -

    This file is a template of the system driver functions provided by a port. Some of the following functions may be implemented as macros in chcore.h if the implementer decides that there is an advantage in doing so, as example because performance concerns.

    - -

    Definition in file kernel/templates/chcore.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8c_source.html b/ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8c_source.html deleted file mode 100644 index 4a0e5d3..0000000 --- a/ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8c_source.html +++ /dev/null @@ -1,184 +0,0 @@ - - -ChibiOS/RT: chcore.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8h.html b/ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8h.html deleted file mode 100644 index 1569b3e..0000000 --- a/ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8h.html +++ /dev/null @@ -1,125 +0,0 @@ - - -ChibiOS/RT: chcore.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.h File Reference

    -
    -
    - -

    Port related template macros and structures. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  extctx
     Interrupt saved context. More...
    struct  intctx
     System saved context. More...
    struct  context
     Platform dependent part of the Thread structure. More...

    -Defines

    #define CH_ARCHITECTURE_XXX
     Unique macro for the implemented architecture.
    #define CH_ARCHITECTURE_NAME   ""
     Name of the implemented architecture.
    #define CH_ARCHITECTURE_VARIANT_NAME   ""
     Name of the architecture variant (optional).
    #define SETUP_CONTEXT(workspace, wsize, pf, arg)
     Platform dependent part of the chThdInit() API.
    #define IDLE_THREAD_STACK_SIZE   0
     Stack size for the system idle thread.
    #define INT_REQUIRED_STACK   0
     Per-thread stack overhead for interrupts servicing.
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]
     Static working area allocation.
    #define PORT_IRQ_PROLOGUE()
     IRQ prologue code.
    #define PORT_IRQ_EPILOGUE()
     IRQ epilogue code.
    #define PORT_IRQ_HANDLER(id)   void id(void)
     IRQ handler function declaration.
    #define PORT_FAST_IRQ_HANDLER(id)   void id(void)
     Fast IRQ handler function declaration.

    -Typedefs

    typedef uint8_t stkalign_t
     Base type for stack and memory alignment.

    -Functions

    void port_init (void)
     Port-related initialization code.
    void port_lock (void)
     Kernel-lock action.
    void port_unlock (void)
     Kernel-unlock action.
    void port_lock_from_isr (void)
     Kernel-lock action from an interrupt handler.
    void port_unlock_from_isr (void)
     Kernel-unlock action from an interrupt handler.
    void port_disable (void)
     Disables all the interrupt sources.
    void port_suspend (void)
     Disables the interrupt sources below kernel-level priority.
    void port_enable (void)
     Enables all the interrupt sources.
    void port_wait_for_interrupt (void)
     Enters an architecture-dependent IRQ-waiting mode.
    void port_halt (void)
     Halts the system.
    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    -

    Detailed Description

    -

    Port related template macros and structures.

    -

    This file is a template of the system driver macros provided by a port.

    - -

    Definition in file kernel/templates/chcore.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8h_source.html b/ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8h_source.html deleted file mode 100644 index 1886b48..0000000 --- a/ChibiOS_2.0.8/docs/html/kernel_2templates_2chcore_8h_source.html +++ /dev/null @@ -1,229 +0,0 @@ - - -ChibiOS/RT: chcore.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/kernel_2templates_2chtypes_8h.html b/ChibiOS_2.0.8/docs/html/kernel_2templates_2chtypes_8h.html deleted file mode 100644 index a3cd10f..0000000 --- a/ChibiOS_2.0.8/docs/html/kernel_2templates_2chtypes_8h.html +++ /dev/null @@ -1,95 +0,0 @@ - - -ChibiOS/RT: chtypes.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chtypes.h File Reference

    -
    -
    - -

    System types template. -More...

    -#include <stddef.h>
    -#include <stdint.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   const
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef int32_t bool_t
     Boolean, recommended the fastest signed.
    typedef uint8_t tmode_t
     Thread mode flags, uint8_t is ok.
    typedef uint8_t tstate_t
     Thread state, uint8_t is ok.
    typedef uint8_t trefs_t
     Thread references counter, uint8_t is ok.
    typedef uint32_t tprio_t
     Priority, use the fastest unsigned type.
    typedef int32_t msg_t
     Message, use signed pointer equivalent.
    typedef int32_t eventid_t
     Event Id, use fastest signed.
    typedef uint32_t eventmask_t
     Event Mask, recommended fastest unsigned.
    typedef uint32_t systime_t
     System Time, recommended fastest unsigned.
    typedef int32_t cnt_t
     Counter, recommended fastest signed.
    -

    Detailed Description

    -

    System types template.

    -

    The types defined in this file may change depending on the target architecture. You may also try to optimize the size of the various types in order to privilege size or performance, be careful in doing so.

    - -

    Definition in file kernel/templates/chtypes.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/kernel_2templates_2chtypes_8h_source.html b/ChibiOS_2.0.8/docs/html/kernel_2templates_2chtypes_8h_source.html deleted file mode 100644 index a773d88..0000000 --- a/ChibiOS_2.0.8/docs/html/kernel_2templates_2chtypes_8h_source.html +++ /dev/null @@ -1,180 +0,0 @@ - - -ChibiOS/RT: chtypes.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/lic_faq.html b/ChibiOS_2.0.8/docs/html/lic_faq.html deleted file mode 100644 index f8dd3b9..0000000 --- a/ChibiOS_2.0.8/docs/html/lic_faq.html +++ /dev/null @@ -1,101 +0,0 @@ - - -ChibiOS/RT: License and F.A.Q. - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    License and F.A.Q.

    -
    -
    -

    ChibiOS/RT is a GPL3-licensed product but it offers a linking exception in its stable releases.
    - This article contains some answers about the exception.

    -

    -Frequently Asked Questions

    -
      -
    • Is ChibiOS/RT free ?
      - Yes, free as both in free beer and freedom.
    • -
    • Can I use it in my commercial embedded product?
      - Yes, you just have to advertise that you are using ChibiOS/RT by putting a link to the project somewhere on your web site or documentation.
    • -
    • Am I forced to release the source code of my product?
      - The exception to the GPL allows you to use ChibiOS/RT in your commercial application without have to release your source code under certains conditions. See the GPL Exception Text under "Approved Interfaces" for details.
    • -
    • What I have to contribute back?
      - In general you have to offer changes done on existing files (where allowed) or new developments done using the OS template files. As example:
        -
      • Ports to new architectures because a new port uses copyrighted OS template files.
      • -
      • New, HAL-style, device drivers because device drivers use copyrighted template files.
      • -
      • Improvements on modifiable OS code as described in the "approved interfaces" section of the GPL Exception Text.
      • -
      -
    • -
    • Is the exception applicable to any ChibiOS/RT version ?
      - The exception is valid only for ChibiOS/RT releases marked as stable. Beta, unstable or development versions are covered by the GPL3 alone because are meant for testing only.
    • -
    • I don't want to be bound by any of the above restriction, is this possible?
      - You may contact us about a commercial license.
    • -
    -

    -GPL Exception Text

    -
    GPL Exception Text for ChibiOS/RT 1.4.x

    In addition, as a special exception, the copyright holder of ChibiOS/RT, gives You the additional right to link the unmodified code of this Program with code not covered under the GNU General Public License ("Non-GPL Code") and to distribute linked combinations including the two, subject to the limitations in this paragraph.

    -
      -
    1. Non-GPL Code permitted under this exception must only link to the unmodified code of this Program through those well defined interfaces identified as "Approved Interfaces".
    2. -
    3. Every copy of the combined work is accompanied by a written statement that details to the recipient the version of ChibiOS/RT used and an offer by yourself to provide the ChibiOS/RT source code should the recipient request it.
    4. -
    5. The combined work is not itself an RTOS, scheduler, kernel or related product.
    6. -
    7. The combined work is not itself a binary library intended for linking into other software applications.
    8. -
    -
    The Approved Interfaces
      -
    1. The files of Non-GPL Code may include the unmodified ChibiOS/RT distribution header files contained under:
        -
      • ./os/kernel/include
      • -
      • ./os/hal/include
      • -
      • ./os/hal/platforms
      • -
      • ./os/various
      • -
      -without causing the resulting work to be covered by the GNU General Public License.
    2. -
    3. The files of Non-GPL Code may link to the unmodified ChibiOS/RT distribution files contained under:
        -
      • ./os/kernel/src
      • -
      • ./os/hal/src
      • -
      • ./os/hal/platforms
      • -
      • ./os/various
      • -
      -without causing the resulting work to be covered by the GNU General Public License.
    4. -
    5. The files of Non-GPL Code may link to, or include, the modified or unmodified ChibiOS/RT distribution files contained under:
        -
      • ./os/kernel/templates
      • -
      • ./os/hal/templates
      • -
      • ./os/ports
      • -
      • ./boards
      • -
      • ./demos
      • -
      -without causing the resulting work to be covered by the GNU General Public License.
    6. -
    -

    Only the copyright holder of ChibiOS/RT may make changes or additions to the list of Approved Interfaces.

    -

    You must obey the GNU General Public License in all respects for all of the Program code and other code used in conjunction with the Program except the Non-GPL Code covered by this exception.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:55 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/logo_small.png b/ChibiOS_2.0.8/docs/html/logo_small.png deleted file mode 100644 index c53451bbac96dd9568ca295eb43478cdb1c9aeec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7697 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 diff --git a/ChibiOS_2.0.8/docs/html/lpc214x_8h.html b/ChibiOS_2.0.8/docs/html/lpc214x_8h.html deleted file mode 100644 index ee44bcc..0000000 --- a/ChibiOS_2.0.8/docs/html/lpc214x_8h.html +++ /dev/null @@ -1,55 +0,0 @@ - - -ChibiOS/RT: lpc214x.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    lpc214x.h File Reference

    -
    -
    - -

    LPC214x register definitions. -More...

    - -

    Go to the source code of this file.

    - -
    -

    Detailed Description

    -

    LPC214x register definitions.

    - -

    Definition in file lpc214x.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/lpc214x_8h_source.html b/ChibiOS_2.0.8/docs/html/lpc214x_8h_source.html deleted file mode 100644 index 14ce917..0000000 --- a/ChibiOS_2.0.8/docs/html/lpc214x_8h_source.html +++ /dev/null @@ -1,576 +0,0 @@ - - -ChibiOS/RT: lpc214x.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/mac_8c.html b/ChibiOS_2.0.8/docs/html/mac_8c.html deleted file mode 100644 index d41a76c..0000000 --- a/ChibiOS_2.0.8/docs/html/mac_8c.html +++ /dev/null @@ -1,77 +0,0 @@ - - -ChibiOS/RT: mac.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    mac.c File Reference

    -
    -
    - -

    MAC Driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - -

    -Functions

    void macInit (void)
     MAC Driver initialization.
    void macObjectInit (MACDriver *macp)
     Initialize the standard part of a MACDriver structure.
    void macSetAddress (MACDriver *macp, const uint8_t *p)
     MAC address setup.
    msg_t macWaitTransmitDescriptor (MACDriver *macp, MACTransmitDescriptor *tdp, systime_t time)
     Allocates a transmission descriptor.
    void macReleaseTransmitDescriptor (MACTransmitDescriptor *tdp)
     Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.
    msg_t macWaitReceiveDescriptor (MACDriver *macp, MACReceiveDescriptor *rdp, systime_t time)
     Waits for a received frame.
    void macReleaseReceiveDescriptor (MACReceiveDescriptor *rdp)
     Releases a receive descriptor.
    bool_t macPollLinkStatus (MACDriver *macp)
     Updates and returns the link status.
    -

    Detailed Description

    -

    MAC Driver code.

    - -

    Definition in file mac.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/mac_8c_source.html b/ChibiOS_2.0.8/docs/html/mac_8c_source.html deleted file mode 100644 index 3fa441f..0000000 --- a/ChibiOS_2.0.8/docs/html/mac_8c_source.html +++ /dev/null @@ -1,250 +0,0 @@ - - -ChibiOS/RT: mac.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/mac_8h.html b/ChibiOS_2.0.8/docs/html/mac_8h.html deleted file mode 100644 index d82fc38..0000000 --- a/ChibiOS_2.0.8/docs/html/mac_8h.html +++ /dev/null @@ -1,85 +0,0 @@ - - -ChibiOS/RT: mac.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    mac.h File Reference

    -
    -
    - -

    MAC Driver macros and structures. -More...

    -#include "mac_lld.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define macGetReceiveEventSource(macp)   (&(macp)->md_rdevent)
     Returns the received frames event source.
    #define macWriteTransmitDescriptor(tdp, buf, size)   mac_lld_write_transmit_descriptor(tdp, buf, size)
     Writes to a transmit descriptor's stream.
    #define macReadReceiveDescriptor(rdp, buf, size)   mac_lld_read_receive_descriptor(rdp, buf, size)
     Reads from a receive descriptor's stream.

    -Functions

    void macInit (void)
     MAC Driver initialization.
    void macObjectInit (MACDriver *macp)
     Initialize the standard part of a MACDriver structure.
    void macSetAddress (MACDriver *macp, const uint8_t *p)
     MAC address setup.
    msg_t macWaitTransmitDescriptor (MACDriver *macp, MACTransmitDescriptor *tdp, systime_t time)
     Allocates a transmission descriptor.
    void macReleaseTransmitDescriptor (MACTransmitDescriptor *tdp)
     Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.
    msg_t macWaitReceiveDescriptor (MACDriver *macp, MACReceiveDescriptor *rdp, systime_t time)
     Waits for a received frame.
    void macReleaseReceiveDescriptor (MACReceiveDescriptor *rdp)
     Releases a receive descriptor.
    bool_t macPollLinkStatus (MACDriver *macp)
     Updates and returns the link status.
    -

    Detailed Description

    -

    MAC Driver macros and structures.

    - -

    Definition in file mac.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/mac_8h_source.html b/ChibiOS_2.0.8/docs/html/mac_8h_source.html deleted file mode 100644 index d1113a7..0000000 --- a/ChibiOS_2.0.8/docs/html/mac_8h_source.html +++ /dev/null @@ -1,173 +0,0 @@ - - -ChibiOS/RT: mac.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/main.html b/ChibiOS_2.0.8/docs/html/main.html deleted file mode 100644 index 9a5ea5f..0000000 --- a/ChibiOS_2.0.8/docs/html/main.html +++ /dev/null @@ -1,72 +0,0 @@ - - -ChibiOS/RT: ChibiOS/RT - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    ChibiOS/RT

    -
    -
    -

    2.0.8

    Author:
    Giovanni Di Sirio (gdisirio@users.sourceforge.net).
    -

    Chibi ?

    -

    I didn't want a serious name for this project. It is the Japanese word for small as in small child. So ChibiOS/RT (ちびOS/RT) means small Real Time Operating System. Source Wikipedia.

    -

    Features

    -
      -
    • Free software, GPL3 licensed. Stable releases include a exception clause to the GPL.
    • -
    • Designed for realtime applications.
    • -
    • Easily portable.
    • -
    • Preemptive scheduling.
    • -
    • 128 priority levels. Multiple threads at the same priority level allowed.
    • -
    • Round robin scheduling for threads at the same priority level.
    • -
    • Offers threads, virtual timers, semaphores, mutexes, condvars, event flags, messages, mailboxes, I/O queues.
    • -
    • No static setup at compile time, there is no need to configure a maximum number of all the above objects.
    • -
    • PC simulator target included, the development can be done on a PC under Linux or Windows.
      - Timers, I/O channels and other HW resources are simulated in a guest OS process and the application code does not need to be aware of it.
    • -
    • No *need* for a memory allocator, all the kernel structures are static and declaratively allocated.
    • -
    • Optional, thread safe, Heap Allocator subsystem.
    • -
    • Optional, thread safe, Memory Pools Allocator subsystem.
    • -
    • Blocking and non blocking I/O channels with timeout and events generation capability.
    • -
    • Minimal system requirements: about 6KiB ROM with all options enabled and speed optimizations on. The size can shrink under 2KiB by disabling the the unused subsystems and optimizing for size.
    • -
    • Almost totally written in C with little ASM code required for ports.
    • -
    • Optional Hardware Abstraction Layer (HAL) with support for many device driver models and device driver implementations.
    • -
    -

    Related pages

    - -
    -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/memstreams_8c.html b/ChibiOS_2.0.8/docs/html/memstreams_8c.html deleted file mode 100644 index acda060..0000000 --- a/ChibiOS_2.0.8/docs/html/memstreams_8c.html +++ /dev/null @@ -1,64 +0,0 @@ - - -ChibiOS/RT: memstreams.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    memstreams.c File Reference

    -
    -
    - -

    Memory streams code. -More...

    -#include <string.h>
    -#include "ch.h"
    -#include "memstreams.h"
    - -

    Go to the source code of this file.

    - - - - -

    -Functions

    void msObjectInit (MemoryStream *msp, uint8_t *buffer, size_t size, size_t eos)
     Memory stream object initialization.
    -

    Detailed Description

    -

    Memory streams code.

    - -

    Definition in file memstreams.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/memstreams_8c_source.html b/ChibiOS_2.0.8/docs/html/memstreams_8c_source.html deleted file mode 100644 index 7d34f5c..0000000 --- a/ChibiOS_2.0.8/docs/html/memstreams_8c_source.html +++ /dev/null @@ -1,146 +0,0 @@ - - -ChibiOS/RT: memstreams.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/memstreams_8h.html b/ChibiOS_2.0.8/docs/html/memstreams_8h.html deleted file mode 100644 index 283a995..0000000 --- a/ChibiOS_2.0.8/docs/html/memstreams_8h.html +++ /dev/null @@ -1,73 +0,0 @@ - - -ChibiOS/RT: memstreams.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    memstreams.h File Reference

    -
    -
    - -

    Memory streams structures and macros. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - -

    -Data Structures

    struct  MemStreamVMT
     MemStream virtual methods table. More...
    struct  MemoryStream
     Memory stream object. More...

    -Defines

    #define _memory_stream_data
     RamStream specific data.

    -Functions

    void msObjectInit (MemoryStream *msp, uint8_t *buffer, size_t size, size_t eos)
     Memory stream object initialization.
    -

    Detailed Description

    -

    Memory streams structures and macros.

    - -

    Definition in file memstreams.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/memstreams_8h_source.html b/ChibiOS_2.0.8/docs/html/memstreams_8h_source.html deleted file mode 100644 index 8cd9cc8..0000000 --- a/ChibiOS_2.0.8/docs/html/memstreams_8h_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - -ChibiOS/RT: memstreams.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/mii_8h_source.html b/ChibiOS_2.0.8/docs/html/mii_8h_source.html deleted file mode 100644 index 0843beb..0000000 --- a/ChibiOS_2.0.8/docs/html/mii_8h_source.html +++ /dev/null @@ -1,239 +0,0 @@ - - -ChibiOS/RT: mii.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/mmc__spi_8c.html b/ChibiOS_2.0.8/docs/html/mmc__spi_8c.html deleted file mode 100644 index d81b394..0000000 --- a/ChibiOS_2.0.8/docs/html/mmc__spi_8c.html +++ /dev/null @@ -1,87 +0,0 @@ - - -ChibiOS/RT: mmc_spi.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    mmc_spi.c File Reference

    -
    -
    - -

    MMC over SPI driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    void tmrfunc (void *p)
     Inserion monitor timer callback function.
    void mmcInit (void)
     MMC over SPI driver initialization.
    void mmcObjectInit (MMCDriver *mmcp, SPIDriver *spip, const SPIConfig *lscfg, const SPIConfig *hscfg, mmcquery_t is_protected, mmcquery_t is_inserted)
     Initializes an instance.
    void mmcStart (MMCDriver *mmcp, const MMCConfig *config)
     Configures and activates the MMC peripheral.
    void mmcStop (MMCDriver *mmcp)
     Disables the MMC peripheral.
    bool_t mmcConnect (MMCDriver *mmcp)
     Performs the initialization procedure on the inserted card.
    bool_t mmcDisconnect (MMCDriver *mmcp)
     Brings the driver in a state safe for card removal.
    bool_t mmcStartSequentialRead (MMCDriver *mmcp, uint32_t startblk)
     Starts a sequential read.
    bool_t mmcSequentialRead (MMCDriver *mmcp, uint8_t *buffer)
     Reads a block within a sequential read operation.
    bool_t mmcStopSequentialRead (MMCDriver *mmcp)
     Stops a sequential read gracefully.
    bool_t mmcStartSequentialWrite (MMCDriver *mmcp, uint32_t startblk)
     Starts a sequential write.
    bool_t mmcSequentialWrite (MMCDriver *mmcp, const uint8_t *buffer)
     Writes a block within a sequential write operation.
    bool_t mmcStopSequentialWrite (MMCDriver *mmcp)
     Stops a sequential write gracefully.
    -

    Detailed Description

    -

    MMC over SPI driver code.

    - -

    Definition in file mmc_spi.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/mmc__spi_8c_source.html b/ChibiOS_2.0.8/docs/html/mmc__spi_8c_source.html deleted file mode 100644 index 6e4c4b1..0000000 --- a/ChibiOS_2.0.8/docs/html/mmc__spi_8c_source.html +++ /dev/null @@ -1,641 +0,0 @@ - - -ChibiOS/RT: mmc_spi.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/mmc__spi_8h.html b/ChibiOS_2.0.8/docs/html/mmc__spi_8h.html deleted file mode 100644 index 3e415cf..0000000 --- a/ChibiOS_2.0.8/docs/html/mmc__spi_8h.html +++ /dev/null @@ -1,126 +0,0 @@ - - -ChibiOS/RT: mmc_spi.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    mmc_spi.h File Reference

    -
    -
    - -

    MMC over SPI driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  MMCConfig
     Driver configuration structure. More...
    struct  MMCDriver
     Structure representing a MMC driver. More...

    -Defines

    #define MMC_SECTOR_SIZE   512
     Block size for MMC transfers.
    #define MMC_NICE_WAITING   TRUE
     Delays insertions.
    #define MMC_POLLING_INTERVAL   10
     Number of positive insertion queries before generating the insertion event.
    #define MMC_POLLING_DELAY   10
     Interval, in milliseconds, between insertion queries.
    #define mmcGetDriverState(mmcp)   ((mmcp)->mmc_state)
     Returns the driver state.
    #define mmcIsWriteProtected(mmcp)   ((mmcp)->mmc_is_protected())
     Returns the write protect status.

    -Typedefs

    typedef bool_t(* mmcquery_t )(void)
     Function used to query some hardware status bits.

    -Enumerations

    enum  mmcstate_t {
    -  MMC_UNINIT = 0, -MMC_STOP = 1, -MMC_WAIT = 2, -MMC_INSERTED = 3, -
    -  MMC_READY = 4, -MMC_READING = 5, -MMC_WRITING = 6 -
    - }
     

    Driver state machine possible states.

    - More...

    -Functions

    void mmcInit (void)
     MMC over SPI driver initialization.
    void mmcObjectInit (MMCDriver *mmcp, SPIDriver *spip, const SPIConfig *lscfg, const SPIConfig *hscfg, mmcquery_t is_protected, mmcquery_t is_inserted)
     Initializes an instance.
    void mmcStart (MMCDriver *mmcp, const MMCConfig *config)
     Configures and activates the MMC peripheral.
    void mmcStop (MMCDriver *mmcp)
     Disables the MMC peripheral.
    bool_t mmcConnect (MMCDriver *mmcp)
     Performs the initialization procedure on the inserted card.
    bool_t mmcDisconnect (MMCDriver *mmcp)
     Brings the driver in a state safe for card removal.
    bool_t mmcStartSequentialRead (MMCDriver *mmcp, uint32_t startblk)
     Starts a sequential read.
    bool_t mmcSequentialRead (MMCDriver *mmcp, uint8_t *buffer)
     Reads a block within a sequential read operation.
    bool_t mmcStopSequentialRead (MMCDriver *mmcp)
     Stops a sequential read gracefully.
    bool_t mmcStartSequentialWrite (MMCDriver *mmcp, uint32_t startblk)
     Starts a sequential write.
    bool_t mmcSequentialWrite (MMCDriver *mmcp, const uint8_t *buffer)
     Writes a block within a sequential write operation.
    bool_t mmcStopSequentialWrite (MMCDriver *mmcp)
     Stops a sequential write gracefully.
    -

    Detailed Description

    -

    MMC over SPI driver header.

    - -

    Definition in file mmc_spi.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/mmc__spi_8h_source.html b/ChibiOS_2.0.8/docs/html/mmc__spi_8h_source.html deleted file mode 100644 index 4d74978..0000000 --- a/ChibiOS_2.0.8/docs/html/mmc__spi_8h_source.html +++ /dev/null @@ -1,272 +0,0 @@ - - -ChibiOS/RT: mmc_spi.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/modules.html b/ChibiOS_2.0.8/docs/html/modules.html deleted file mode 100644 index 2cd208f..0000000 --- a/ChibiOS_2.0.8/docs/html/modules.html +++ /dev/null @@ -1,233 +0,0 @@ - - -ChibiOS/RT: Module Index - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    Modules

    -
    -
    -Here is a list of all modules: -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/mpc563m_8h_source.html b/ChibiOS_2.0.8/docs/html/mpc563m_8h_source.html deleted file mode 100644 index 8618cce..0000000 --- a/ChibiOS_2.0.8/docs/html/mpc563m_8h_source.html +++ /dev/null @@ -1,4167 +0,0 @@ - - -ChibiOS/RT: mpc563m.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/nav_f.png b/ChibiOS_2.0.8/docs/html/nav_f.png deleted file mode 100644 index 1b07a16207e67c95fe2ee17e7016e6d08ac7ac99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV6fm|Vqjp{%*48zfq@~-)5S5Qg7NKLPd+C@ z9+p7s(%btTE}qY@et1h^W8!HA#l8#OVSAlVy#1%}sO#vln&gc$_RZWTu}#AGMe#+q z3vL0sgR28(1@~ diff --git a/ChibiOS_2.0.8/docs/html/nav_h.png b/ChibiOS_2.0.8/docs/html/nav_h.png deleted file mode 100644 index 01f5fa6a596e36bd12c2d6ceff1b0169fda7e699..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imVBq0kVqjpEakt!T9#>MotC; z9%jeAMjH->Zkx_6u9z)zN5rdW)q2L}c~O7=GaSojY5ybeVlGINr>mdKI;Vst04h2g Aod5s; diff --git a/ChibiOS_2.0.8/docs/html/nvic_8c.html b/ChibiOS_2.0.8/docs/html/nvic_8c.html deleted file mode 100644 index a2515ea..0000000 --- a/ChibiOS_2.0.8/docs/html/nvic_8c.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: nvic.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    nvic.c File Reference

    -
    -
    - -

    Cortex-Mx NVIC support code. -More...

    -#include "ch.h"
    -#include "nvic.h"
    - -

    Go to the source code of this file.

    - - - - - - - - -

    -Functions

    void NVICEnableVector (uint32_t n, uint32_t prio)
     Sets the priority of an interrupt handler and enables it.
    void NVICDisableVector (uint32_t n)
     Disables an interrupt handler.
    void NVICSetSystemHandlerPriority (uint32_t handler, uint32_t prio)
     Changes the priority of a system handler.
    -

    Detailed Description

    -

    Cortex-Mx NVIC support code.

    - -

    Definition in file nvic.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/nvic_8c_source.html b/ChibiOS_2.0.8/docs/html/nvic_8c_source.html deleted file mode 100644 index 4c825b1..0000000 --- a/ChibiOS_2.0.8/docs/html/nvic_8c_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - -ChibiOS/RT: nvic.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/nvic_8h.html b/ChibiOS_2.0.8/docs/html/nvic_8h.html deleted file mode 100644 index 045e537..0000000 --- a/ChibiOS_2.0.8/docs/html/nvic_8h.html +++ /dev/null @@ -1,99 +0,0 @@ - - -ChibiOS/RT: nvic.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    nvic.h File Reference

    -
    -
    - -

    Cortex-Mx NVIC support macros and structures. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  CM3_ST
     Structure representing the SYSTICK I/O space. More...
    struct  CM3_NVIC
     Structure representing the NVIC I/O space. More...
    struct  CM3_SCB
     Structure representing the System Control Block I/O space. More...

    -Defines

    #define HANDLER_MEM_MANAGE   0
    #define HANDLER_BUS_FAULT   1
    #define HANDLER_USAGE_FAULT   2
    #define HANDLER_SVCALL   7
    #define HANDLER_DEBUG_MONITOR   8
    #define HANDLER_PENDSV   10
    #define HANDLER_SYSTICK   11
    #define NVIC_ITCR   (*((IOREG32 *)0xE000E004))
     NVIC ITCR register.
    #define NVIC_STIR   (*((IOREG32 *)0xE000EF00))
     NVIC STIR register.
    #define STBase   ((CM3_ST *)0xE000E010)
     SYSTICK peripheral base address.
    #define NVICBase   ((CM3_NVIC *)0xE000E100)
     NVIC peripheral base address.
    #define SCBBase   ((CM3_SCB *)0xE000ED00)
     SCB peripheral base address.

    -Typedefs

    typedef volatile uint8_t IOREG8
    typedef volatile uint32_t IOREG32

    -Functions

    void NVICEnableVector (uint32_t n, uint32_t prio)
     Sets the priority of an interrupt handler and enables it.
    void NVICDisableVector (uint32_t n)
     Disables an interrupt handler.
    void NVICSetSystemHandlerPriority (uint32_t handler, uint32_t prio)
     Changes the priority of a system handler.
    -

    Detailed Description

    -

    Cortex-Mx NVIC support macros and structures.

    - -

    Definition in file nvic.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/nvic_8h_source.html b/ChibiOS_2.0.8/docs/html/nvic_8h_source.html deleted file mode 100644 index 45a13b2..0000000 --- a/ChibiOS_2.0.8/docs/html/nvic_8h_source.html +++ /dev/null @@ -1,243 +0,0 @@ - - -ChibiOS/RT: nvic.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/open.png b/ChibiOS_2.0.8/docs/html/open.png deleted file mode 100644 index 7b35d2c2c389743089632fe24c3104f2173d97af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118 zcmeAS@N?(olHy`uVBq!ia0y~yVBiE{4mJh`h6fYb1Q-|?Y&~5ZLn;{G&NUQdP~c&n zd}GxzDF+AM1)Q-4h6e&8BI~@0>|L1bT9$76H%TOK59dR-vlBQO7Sx{jb?D_|hVwBz WM-DIi|A~Qtfx*+&&t;ucLK6Vf2PM(~ diff --git a/ChibiOS_2.0.8/docs/html/page_general.html b/ChibiOS_2.0.8/docs/html/page_general.html deleted file mode 100644 index f9ef9ca..0000000 --- a/ChibiOS_2.0.8/docs/html/page_general.html +++ /dev/null @@ -1,50 +0,0 @@ - - -ChibiOS/RT: General - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    General

    -
    -
    -

    Articles and guides not necessarily related to ChibiOS/RT.

    - -
    -
    -Generated on Sun Nov 28 2010 14:09:53 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/page_howtos.html b/ChibiOS_2.0.8/docs/html/page_howtos.html deleted file mode 100644 index 28f54cc..0000000 --- a/ChibiOS_2.0.8/docs/html/page_howtos.html +++ /dev/null @@ -1,52 +0,0 @@ - - -ChibiOS/RT: How To's - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    How To's

    -
    - -
    -Generated on Sun Nov 28 2010 14:09:53 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/page_kb.html b/ChibiOS_2.0.8/docs/html/page_kb.html deleted file mode 100644 index ad37b2f..0000000 --- a/ChibiOS_2.0.8/docs/html/page_kb.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: Knowledge Base - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    Knowledge Base

    -
    - -
    -Generated on Sun Nov 28 2010 14:09:53 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/pal_8c.html b/ChibiOS_2.0.8/docs/html/pal_8c.html deleted file mode 100644 index 9de18d3..0000000 --- a/ChibiOS_2.0.8/docs/html/pal_8c.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: pal.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal.c File Reference

    -
    -
    - -

    I/O Ports Abstraction Layer code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - -

    -Functions

    ioportmask_t palReadBus (IOBus *bus)
     Read from an I/O bus.
    void palWriteBus (IOBus *bus, ioportmask_t bits)
     Write to an I/O bus.
    void palSetBusMode (IOBus *bus, uint_fast8_t mode)
     Programs a bus with the specified mode.
    -

    Detailed Description

    -

    I/O Ports Abstraction Layer code.

    - -

    Definition in file pal.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/pal_8c_source.html b/ChibiOS_2.0.8/docs/html/pal_8c_source.html deleted file mode 100644 index dcf1f59..0000000 --- a/ChibiOS_2.0.8/docs/html/pal_8c_source.html +++ /dev/null @@ -1,167 +0,0 @@ - - -ChibiOS/RT: pal.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/pal_8h.html b/ChibiOS_2.0.8/docs/html/pal_8h.html deleted file mode 100644 index a09de60..0000000 --- a/ChibiOS_2.0.8/docs/html/pal_8h.html +++ /dev/null @@ -1,136 +0,0 @@ - - -ChibiOS/RT: pal.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal.h File Reference

    -
    -
    - -

    I/O Ports Abstraction Layer macros, types and structures. -More...

    -#include "pal_lld.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  IOBus
     I/O bus descriptor. More...

    -Defines

    #define PAL_MODE_MASK   0xF
     Bits in a mode word dedicated as mode selector.
    #define PAL_MODE_RESET   0
     After reset state.
    #define PAL_MODE_UNCONNECTED   1
     Safe state for unconnected pads.
    #define PAL_MODE_INPUT   2
     Regular input high-Z pad.
    #define PAL_MODE_INPUT_PULLUP   3
     Input pad with weak pull up resistor.
    #define PAL_MODE_INPUT_PULLDOWN   4
     Input pad with weak pull down resistor.
    #define PAL_MODE_INPUT_ANALOG   5
     Analog input mode.
    #define PAL_MODE_OUTPUT_PUSHPULL   6
     Push-pull output pad.
    #define PAL_MODE_OUTPUT_OPENDRAIN   7
     Open-drain output pad.
    #define PAL_LOW   0
     Logical low state.
    #define PAL_HIGH   1
     Logical high state.
    #define PAL_PORT_BIT(n)   ((ioportmask_t)(1 << (n)))
     Port bit helper macro.
    #define PAL_GROUP_MASK(width)   ((ioportmask_t)(1 << (width)) - 1)
     Bits group mask helper.
    #define _IOBUS_DATA(name, port, width, offset)   {port, PAL_GROUP_MASK(width), offset}
     Data part of a static I/O bus initializer.
    #define IOBUS_DECL(name, port, width, offset)   IOBus name = _IOBUS_DATA(name, port, width, offset)
     Static I/O bus initializer.
    #define palInit(config)   pal_lld_init(config)
     PAL subsystem initialization.
    #define palReadPort(port)   ((void)(port), 0)
     Reads the physical I/O port states.
    #define palReadLatch(port)   ((void)(port), 0)
     Reads the output latch.
    #define palWritePort(port, bits)   ((void)(port), (void)(bits))
     Writes a bits mask on a I/O port.
    #define palSetPort(port, bits)
     Sets a bits mask on a I/O port.
    #define palClearPort(port, bits)
     Clears a bits mask on a I/O port.
    #define palTogglePort(port, bits)
     Toggles a bits mask on a I/O port.
    #define palReadGroup(port, mask, offset)   ((palReadPort(port) >> (offset)) & (mask))
     Reads a group of bits.
    #define palWriteGroup(port, mask, offset, bits)
     Writes a group of bits.
    #define palSetGroupMode(port, mask, mode)
     Pads group mode setup.
    #define palReadPad(port, pad)   ((palReadPort(port) >> (pad)) & 1)
     Reads an input pad logical state.
    #define palWritePad(port, pad, bit)
     Writes a logical state on an output pad.
    #define palSetPad(port, pad)   palSetPort(port, PAL_PORT_BIT(pad))
     Sets a pad logical state to PAL_HIGH.
    #define palClearPad(port, pad)   palClearPort(port, PAL_PORT_BIT(pad))
     Clears a pad logical state to PAL_LOW.
    #define palTogglePad(port, pad)   palTogglePort(port, PAL_PORT_BIT(pad))
     Toggles a pad logical state.
    #define palSetPadMode(port, pad, mode)   palSetGroupMode(port, PAL_PORT_BIT(pad), mode)
     Pad mode setup.

    -Functions

    ioportmask_t palReadBus (IOBus *bus)
     Read from an I/O bus.
    void palWriteBus (IOBus *bus, ioportmask_t bits)
     Write to an I/O bus.
    void palSetBusMode (IOBus *bus, uint_fast8_t mode)
     Programs a bus with the specified mode.
    -

    Detailed Description

    -

    I/O Ports Abstraction Layer macros, types and structures.

    - -

    Definition in file pal.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/pal_8h_source.html b/ChibiOS_2.0.8/docs/html/pal_8h_source.html deleted file mode 100644 index 11b70c3..0000000 --- a/ChibiOS_2.0.8/docs/html/pal_8h_source.html +++ /dev/null @@ -1,552 +0,0 @@ - - -ChibiOS/RT: pal.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8c.html deleted file mode 100644 index ab0ac96..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8c.html +++ /dev/null @@ -1,70 +0,0 @@ - - -ChibiOS/RT: hal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.c File Reference

    -
    -
    - -

    AT91SAM7 HAL subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - -

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void at91sam7_clock_init (void)
     AT91SAM7 clocks and PLL initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    AT91SAM7 HAL subsystem low level driver source.

    - -

    Definition in file platforms/AT91SAM7/hal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8c_source.html deleted file mode 100644 index f1f2af9..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8c_source.html +++ /dev/null @@ -1,190 +0,0 @@ - - -ChibiOS/RT: hal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8h.html deleted file mode 100644 index 4367fcb..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8h.html +++ /dev/null @@ -1,74 +0,0 @@ - - -ChibiOS/RT: hal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.h File Reference

    -
    -
    - -

    AT91SAM7 HAL subsystem low level driver header. -More...

    -#include "at91sam7.h"
    -#include "at91lib/aic.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "AT91SAM7x"
     Platform name.
    #define AT91SAM7_SPURIOUS_HANDLER_HOOK()
     Default action for the spurious handler, nothing.
    #define AT91SAM7_USBDIV   AT91C_CKGR_USBDIV_1
     Default divider for the USB clock - half the PLL clock.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void at91sam7_clock_init (void)
     AT91SAM7 clocks and PLL initialization.
    -

    Detailed Description

    -

    AT91SAM7 HAL subsystem low level driver header.

    - -

    Definition in file platforms/AT91SAM7/hal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8h_source.html deleted file mode 100644 index eeefaf5..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2hal__lld_8h_source.html +++ /dev/null @@ -1,138 +0,0 @@ - - -ChibiOS/RT: hal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8c.html deleted file mode 100644 index 771f637..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8c.html +++ /dev/null @@ -1,89 +0,0 @@ - - -ChibiOS/RT: mac_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    mac_lld.c File Reference

    -
    -
    - -

    AT91SAM7 low level MAC driver code. -More...

    -#include <string.h>
    -#include "ch.h"
    -#include "hal.h"
    -#include "mii.h"
    -#include "at91sam7_mii.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

     CH_IRQ_HANDLER (irq_handler)
     EMAC IRQ veneer handler.
    void mac_lld_init (void)
     Low level MAC initialization.
    void mac_lld_set_address (MACDriver *macp, const uint8_t *p)
     Low level MAC address setup.
    msg_t max_lld_get_transmit_descriptor (MACDriver *macp, MACTransmitDescriptor *tdp)
     Returns a transmission descriptor.
    size_t mac_lld_write_transmit_descriptor (MACTransmitDescriptor *tdp, uint8_t *buf, size_t size)
     Writes to a transmit descriptor's stream.
    void mac_lld_release_transmit_descriptor (MACTransmitDescriptor *tdp)
     Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.
    msg_t max_lld_get_receive_descriptor (MACDriver *macp, MACReceiveDescriptor *rdp)
     Returns a receive descriptor.
    size_t mac_lld_read_receive_descriptor (MACReceiveDescriptor *rdp, uint8_t *buf, size_t size)
     Reads from a receive descriptor's stream.
    void mac_lld_release_receive_descriptor (MACReceiveDescriptor *rdp)
     Releases a receive descriptor.
    bool_t mac_lld_poll_link_status (MACDriver *macp)
     Updates and returns the link status.

    -Variables

    MACDriver ETH1
     Ethernet driver 1.
    -

    Detailed Description

    -

    AT91SAM7 low level MAC driver code.

    - -

    Definition in file platforms/AT91SAM7/mac_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8c_source.html deleted file mode 100644 index 0bd1cf5..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8c_source.html +++ /dev/null @@ -1,558 +0,0 @@ - - -ChibiOS/RT: mac_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8h.html deleted file mode 100644 index 6c5df27..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8h.html +++ /dev/null @@ -1,99 +0,0 @@ - - -ChibiOS/RT: mac_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    mac_lld.h File Reference

    -
    -
    - -

    AT91SAM7 low level MAC driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  EMACDescriptor
     Structure representing a buffer physical descriptor. More...
    struct  MACDriver
     Structure representing a MAC driver. More...
    struct  MACTransmitDescriptor
     Structure representing a transmit descriptor. More...
    struct  MACReceiveDescriptor
     Structure representing a receive descriptor. More...

    -Defines

    #define MAC_TRANSMIT_BUFFERS   2
     Number of available transmit buffers.
    #define MAC_RECEIVE_BUFFERS   2
     Number of available receive buffers.
    #define MAC_BUFFERS_SIZE   1518
     Maximum supported frame size.
    #define EMAC_INTERRUPT_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 3)
     Interrupt priority level for the EMAC device.

    -Functions

    void mac_lld_init (void)
     Low level MAC initialization.
    void mac_lld_set_address (MACDriver *macp, const uint8_t *p)
     Low level MAC address setup.
    msg_t max_lld_get_transmit_descriptor (MACDriver *macp, MACTransmitDescriptor *tdp)
     Returns a transmission descriptor.
    size_t mac_lld_write_transmit_descriptor (MACTransmitDescriptor *tdp, uint8_t *buf, size_t size)
     Writes to a transmit descriptor's stream.
    void mac_lld_release_transmit_descriptor (MACTransmitDescriptor *tdp)
     Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.
    msg_t max_lld_get_receive_descriptor (MACDriver *macp, MACReceiveDescriptor *rdp)
     Returns a receive descriptor.
    size_t mac_lld_read_receive_descriptor (MACReceiveDescriptor *rdp, uint8_t *buf, size_t size)
     Reads from a receive descriptor's stream.
    void mac_lld_release_receive_descriptor (MACReceiveDescriptor *rdp)
     Releases a receive descriptor.
    bool_t mac_lld_poll_link_status (MACDriver *macp)
     Updates and returns the link status.
    -

    Detailed Description

    -

    AT91SAM7 low level MAC driver header.

    - -

    Definition in file platforms/AT91SAM7/mac_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8h_source.html deleted file mode 100644 index bea9ee7..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2mac__lld_8h_source.html +++ /dev/null @@ -1,251 +0,0 @@ - - -ChibiOS/RT: mac_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8c.html deleted file mode 100644 index 9b1a274..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8c.html +++ /dev/null @@ -1,65 +0,0 @@ - - -ChibiOS/RT: pal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.c File Reference

    -
    -
    - -

    AT91SAM7 PIO low level driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - -

    -Functions

    void _pal_lld_init (const PALConfig *config)
     AT91SAM7 I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Detailed Description

    -

    AT91SAM7 PIO low level driver code.

    - -

    Definition in file platforms/AT91SAM7/pal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8c_source.html deleted file mode 100644 index 2343b22..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8c_source.html +++ /dev/null @@ -1,200 +0,0 @@ - - -ChibiOS/RT: pal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8h.html deleted file mode 100644 index 2f85642..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8h.html +++ /dev/null @@ -1,109 +0,0 @@ - - -ChibiOS/RT: pal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.h File Reference

    -
    -
    - -

    AT91SAM7 PIO low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  at91sam7_pio_setup_t
     PIO port setup info. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_IOPORTS_WIDTH   32
     Width, in bits, of an I/O port.
    #define IOPORT1   AT91C_BASE_PIOA
     PIO port A identifier.
    #define IOPORT2   AT91C_BASE_PIOB
     PIO port B identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     Low level PAL subsystem initialization.
    #define pal_lld_readport(port)   ((port)->PIO_PDSR)
     Reads the physical I/O port states.
    #define pal_lld_readlatch(port)   ((port)->PIO_ODSR)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)
     Writes a bits mask on a I/O port.
    #define pal_lld_setport(port, bits)
     Sets a bits mask on a I/O port.
    #define pal_lld_clearport(port, bits)
     Clears a bits mask on a I/O port.
    #define pal_lld_writegroup(port, mask, offset, bits)
     Writes a group of bits.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.
    #define pal_lld_writepad(port, pad, bit)   pal_lld_writegroup(port, 1, pad, bit)
     Writes a logical state on an output pad.

    -Typedefs

    typedef uint32_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef AT91PS_PIO ioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     AT91SAM7 I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    AT91SAM7 PIO low level driver header.

    - -

    Definition in file platforms/AT91SAM7/pal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8h_source.html deleted file mode 100644 index 62019e2..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2pal__lld_8h_source.html +++ /dev/null @@ -1,306 +0,0 @@ - - -ChibiOS/RT: pal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8c.html deleted file mode 100644 index ceb5de9..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8c.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: serial_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.c File Reference

    -
    -
    - -

    AT91SAM7 low level serial driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - -

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     USART0 serial driver identifier.
    SerialDriver SD2
     USART1 serial driver identifier.
    SerialDriver SD3
     DBGU_UART serial driver identifier.
    -

    Detailed Description

    -

    AT91SAM7 low level serial driver code.

    - -

    Definition in file platforms/AT91SAM7/serial_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8c_source.html deleted file mode 100644 index c7a68a3..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8c_source.html +++ /dev/null @@ -1,409 +0,0 @@ - - -ChibiOS/RT: serial_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8h.html deleted file mode 100644 index 1ba5025..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8h.html +++ /dev/null @@ -1,92 +0,0 @@ - - -ChibiOS/RT: serial_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.h File Reference

    -
    -
    - -

    AT91SAM7 low level serial driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_SAM7_USART0   TRUE
     UART0 driver enable switch.
    #define USE_SAM7_USART1   TRUE
     UART1 driver enable switch.
    #define USE_SAM7_DBGU_UART   TRUE
     DBGU UART driver enable switch.
    #define SAM7_USART0_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 2)
     UART1 interrupt priority level setting.
    #define SAM7_USART1_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 2)
     UART2 interrupt priority level setting.
    #define SAM7_DBGU_UART_PRIORITY   (AT91C_AIC_PRIOR_HIGHEST - 2)
     DBGU_UART interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.

    -Typedefs

    typedef uint32_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.
    -

    Detailed Description

    -

    AT91SAM7 low level serial driver header.

    - -

    Definition in file platforms/AT91SAM7/serial_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8h_source.html deleted file mode 100644 index 1895cd9..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_t91_s_a_m7_2serial__lld_8h_source.html +++ /dev/null @@ -1,229 +0,0 @@ - - -ChibiOS/RT: serial_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8c.html deleted file mode 100644 index efe5f2c..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8c.html +++ /dev/null @@ -1,63 +0,0 @@ - - -ChibiOS/RT: hal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.c File Reference

    -
    -
    - -

    AVR HAL subsystem low level driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - -

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    -

    Detailed Description

    -

    AVR HAL subsystem low level driver code.

    - -

    Definition in file platforms/AVR/hal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8c_source.html deleted file mode 100644 index e7be188..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8c_source.html +++ /dev/null @@ -1,108 +0,0 @@ - - -ChibiOS/RT: hal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8h.html deleted file mode 100644 index 5522d6f..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8h.html +++ /dev/null @@ -1,66 +0,0 @@ - - -ChibiOS/RT: hal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.h File Reference

    -
    -
    - -

    AVR HAL subsystem low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "ATmega128"
     Platform name.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    -

    Detailed Description

    -

    AVR HAL subsystem low level driver header.

    - -

    Definition in file platforms/AVR/hal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8h_source.html deleted file mode 100644 index 5637d13..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2hal__lld_8h_source.html +++ /dev/null @@ -1,120 +0,0 @@ - - -ChibiOS/RT: hal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8c.html deleted file mode 100644 index 32f6e9d..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8c.html +++ /dev/null @@ -1,74 +0,0 @@ - - -ChibiOS/RT: serial_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.c File Reference

    -
    -
    - -

    AVR low level serial driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - -

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     USART0 serial driver identifier.
    SerialDriver SD2
     USART1 serial driver identifier.
    -

    Detailed Description

    -

    AVR low level serial driver code.

    - -

    Definition in file platforms/AVR/serial_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8c_source.html deleted file mode 100644 index 479a65f..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8c_source.html +++ /dev/null @@ -1,333 +0,0 @@ - - -ChibiOS/RT: serial_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8h.html deleted file mode 100644 index 661b8fc..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8h.html +++ /dev/null @@ -1,86 +0,0 @@ - - -ChibiOS/RT: serial_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.h File Reference

    -
    -
    - -

    AVR low level serial driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_AVR_USART0   TRUE
     USART0 driver enable switch.
    #define USE_AVR_USART1   TRUE
     USART1 driver enable switch.
    #define _serial_driver_data
     SerialDriver specific data.
    #define UBRR(b)   ((F_CPU / (b << 4)) - 1)
     Macro for baud rate computation.

    -Typedefs

    typedef uint8_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.
    -

    Detailed Description

    -

    AVR low level serial driver header.

    - -

    Definition in file platforms/AVR/serial_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8h_source.html deleted file mode 100644 index 31e9258..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_a_v_r_2serial__lld_8h_source.html +++ /dev/null @@ -1,195 +0,0 @@ - - -ChibiOS/RT: serial_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8c.html deleted file mode 100644 index dd8597a..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8c.html +++ /dev/null @@ -1,75 +0,0 @@ - - -ChibiOS/RT: hal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.c File Reference

    -
    -
    - -

    LPC11xx HAL subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - -

    -Defines

    #define FLASHCFG   (*((volatile uint32_t *)0x4003C010))
     Register missing in NXP header file.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void lpc111x_clock_init (void)
     LPC11xx clocks and PLL initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    LPC11xx HAL subsystem low level driver source.

    - -

    Definition in file platforms/LPC11xx/hal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8c_source.html deleted file mode 100644 index 481cfbc..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8c_source.html +++ /dev/null @@ -1,183 +0,0 @@ - - -ChibiOS/RT: hal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8h.html deleted file mode 100644 index 018d81b..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8h.html +++ /dev/null @@ -1,108 +0,0 @@ - - -ChibiOS/RT: hal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.h File Reference

    -
    -
    - -

    HAL subsystem low level driver header template. -More...

    -#include "LPC11xx.h"
    -#include "nvic.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "LPC11xx"
     Platform name.
    #define IRCOSCCLK   12000000
    #define WDGOSCCLK   1600000
    #define SYSPLLCLKSEL_IRCOSC   0
    #define SYSPLLCLKSEL_SYSOSC   1
    #define SYSMAINCLKSEL_IRCOSC   0
    #define SYSMAINCLKSEL_PLLIN   1
    #define SYSMAINCLKSEL_WDGOSC   2
    #define SYSMAINCLKSEL_PLLOUT   3
    #define LPC11xx_PLLCLK_SOURCE   SYSPLLCLKSEL_SYSOSC
     System PLL clock source.
    #define LPC11xx_SYSPLL_MUL   4
     System PLL multiplier.
    #define LPC11xx_SYSPLL_DIV   4
     System PLL divider.
    #define LPC11xx_MAINCLK_SOURCE   SYSMAINCLKSEL_PLLOUT
     System main clock source.
    #define LPC11xx_SYSABHCLK_DIV   1
     AHB clock divider.
    #define LPC11xx_UART_PCLK_DIV   1
     UART clock divider.
    #define LPC11xx_SYSOSCCTRL   0
     Calculated SYSOSCCTRL setting.
    #define LPC11xx_SYSPLLCLKIN   SYSOSCCLK
     PLL input clock frequency.
    #define LPC11xx_SYSPLLCTRL_MSEL   (LPC11xx_SYSPLL_MUL - 1)
     MSEL mask in SYSPLLCTRL register.
    #define LPC11xx_SYSPLLCTRL_PSEL   (0 << 5)
     PSEL mask in SYSPLLCTRL register.
    #define LPC11xx_SYSPLLCCO
     CCP frequency.
    #define LPC11xx_SYSPLLCLKOUT   (LPC11xx_SYSPLLCCO / LPC11xx_SYSPLL_DIV)
     PLL output clock frequency.
    #define LPC11xx_SYSCLK   (LPC11xx_MAINCLK / LPC11xx_SYSABHCLK_DIV)
     AHB clock.
    #define LPC11xx_FLASHCFG_FLASHTIM   0
     Flash wait states.
    #define LPC11xx_UART_PCLK   (LPC11xx_MAINCLK / LPC11xx_UART_PCLK_DIV)
     UART clock.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void lpc111x_clock_init (void)
     LPC11xx clocks and PLL initialization.
    -

    Detailed Description

    -

    HAL subsystem low level driver header template.

    - -

    Definition in file platforms/LPC11xx/hal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8h_source.html deleted file mode 100644 index ae8f231..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2hal__lld_8h_source.html +++ /dev/null @@ -1,281 +0,0 @@ - - -ChibiOS/RT: hal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8c.html deleted file mode 100644 index 5616fe9..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8c.html +++ /dev/null @@ -1,65 +0,0 @@ - - -ChibiOS/RT: pal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.c File Reference

    -
    -
    - -

    LPC11xx GPIO low level driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - -

    -Functions

    void _pal_lld_init (const PALConfig *config)
     LPC11xx I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Detailed Description

    -

    LPC11xx GPIO low level driver code.

    - -

    Definition in file platforms/LPC11xx/pal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8c_source.html deleted file mode 100644 index 5d2575c..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8c_source.html +++ /dev/null @@ -1,156 +0,0 @@ - - -ChibiOS/RT: pal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8h.html deleted file mode 100644 index ee875bc..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8h.html +++ /dev/null @@ -1,116 +0,0 @@ - - -ChibiOS/RT: pal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.h File Reference

    -
    -
    - -

    LPC11xx GPIO low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  lpc111x_gpio_setup_t
     GPIO port setup info. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_IOPORTS_WIDTH   32
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFF)
     Whole port mask.
    #define IOPORT1   LPC_GPIO0
     GPIO0 port identifier.
    #define IOPORT2   LPC_GPIO1
     GPIO1 port identifier.
    #define IOPORT3   LPC_GPIO2
     GPIO2 port identifier.
    #define IOPORT4   LPC_GPIO3
     GPIO3 port identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     Low level PAL subsystem initialization.
    #define pal_lld_readport(port)   ((port)->DATA)
     Reads the physical I/O port states.
    #define pal_lld_readlatch(port)   ((port)->DATA)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)   ((port)->DATA = (bits))
     Writes a bits mask on a I/O port.
    #define pal_lld_setport(port, bits)   ((port)->MASKED_ACCESS[bits] = 0xFFFFFFFF)
     Sets a bits mask on a I/O port.
    #define pal_lld_clearport(port, bits)   ((port)->MASKED_ACCESS[bits] = 0)
     Clears a bits mask on a I/O port.
    #define pal_lld_readgroup(port, mask, offset)   ((port)->MASKED_ACCESS[(mask) << (offset)])
     Reads a group of bits.
    #define pal_lld_writegroup(port, mask, offset, bits)   ((port)->MASKED_ACCESS[(mask) << (offset)] = (bits))
     Writes a group of bits.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.
    #define pal_lld_writepad(port, pad, bit)   ((port)->MASKED_ACCESS[(mask) << (pad)] = (bit) << (pad))
     Writes a logical state on an output pad.
    #define pal_lld_setpad(port, pad)   ((port)->MASKED_ACCESS[1 << (pad)] = 1 << (pad))
     Sets a pad logical state to PAL_HIGH.
    #define pal_lld_clearpad(port, pad)   ((port)->MASKED_ACCESS[1 << (pad)] = 0)
     Clears a pad logical state to PAL_LOW.

    -Typedefs

    typedef uint32_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef LPC_GPIO_TypeDef * ioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     LPC11xx I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Detailed Description

    -

    LPC11xx GPIO low level driver header.

    - -

    Definition in file platforms/LPC11xx/pal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8h_source.html deleted file mode 100644 index c370ba2..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2pal__lld_8h_source.html +++ /dev/null @@ -1,360 +0,0 @@ - - -ChibiOS/RT: pal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8c.html deleted file mode 100644 index 1a6e9fa..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8c.html +++ /dev/null @@ -1,74 +0,0 @@ - - -ChibiOS/RT: serial_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.c File Reference

    -
    -
    - -

    LPC11xx low level serial driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - -

    -Functions

     CH_IRQ_HANDLER (Vector94)
     UART0 IRQ handler.
    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     UART0 serial driver identifier.
    -

    Detailed Description

    -

    LPC11xx low level serial driver code.

    - -

    Definition in file platforms/LPC11xx/serial_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8c_source.html deleted file mode 100644 index 39e6c73..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8c_source.html +++ /dev/null @@ -1,341 +0,0 @@ - - -ChibiOS/RT: serial_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8h.html deleted file mode 100644 index c40095a..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8h.html +++ /dev/null @@ -1,86 +0,0 @@ - - -ChibiOS/RT: serial_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.h File Reference

    -
    -
    - -

    LPC11xx low level serial driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_LPC11xx_UART0   TRUE
     UART0 driver enable switch.
    #define LPC11xx_UART_FIFO_PRELOAD   16
     FIFO preload parameter.
    #define LPC11xx_UART0_PRIORITY   3
     UART0 interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.

    -Typedefs

    typedef uint32_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.
    -

    Detailed Description

    -

    LPC11xx low level serial driver header.

    - -

    Definition in file platforms/LPC11xx/serial_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8h_source.html deleted file mode 100644 index c9191c8..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c11xx_2serial__lld_8h_source.html +++ /dev/null @@ -1,252 +0,0 @@ - - -ChibiOS/RT: serial_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8c.html deleted file mode 100644 index fbb37e9..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8c.html +++ /dev/null @@ -1,75 +0,0 @@ - - -ChibiOS/RT: hal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.c File Reference

    -
    -
    - -

    LPC13xx HAL subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - -

    -Defines

    #define FLASHCFG   (*((volatile uint32_t *)0x4003C010))
     Register missing in NXP header file.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void LPC13xx_clock_init (void)
     LPC13xx clocks and PLL initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    LPC13xx HAL subsystem low level driver source.

    - -

    Definition in file platforms/LPC13xx/hal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8c_source.html deleted file mode 100644 index 2dfa31d..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8c_source.html +++ /dev/null @@ -1,183 +0,0 @@ - - -ChibiOS/RT: hal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8h.html deleted file mode 100644 index 9277953..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8h.html +++ /dev/null @@ -1,108 +0,0 @@ - - -ChibiOS/RT: hal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.h File Reference

    -
    -
    - -

    HAL subsystem low level driver header template. -More...

    -#include "LPC13xx.h"
    -#include "nvic.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "LPC13xx"
     Platform name.
    #define IRCOSCCLK   12000000
    #define WDGOSCCLK   1600000
    #define SYSPLLCLKSEL_IRCOSC   0
    #define SYSPLLCLKSEL_SYSOSC   1
    #define SYSMAINCLKSEL_IRCOSC   0
    #define SYSMAINCLKSEL_PLLIN   1
    #define SYSMAINCLKSEL_WDGOSC   2
    #define SYSMAINCLKSEL_PLLOUT   3
    #define LPC13xx_PLLCLK_SOURCE   SYSPLLCLKSEL_SYSOSC
     System PLL clock source.
    #define LPC13xx_SYSPLL_MUL   6
     System PLL multiplier.
    #define LPC13xx_SYSPLL_DIV   4
     System PLL divider.
    #define LPC13xx_MAINCLK_SOURCE   SYSMAINCLKSEL_PLLOUT
     System main clock source.
    #define LPC13xx_SYSABHCLK_DIV   1
     AHB clock divider.
    #define LPC13xx_UART_PCLK_DIV   1
     UART clock divider.
    #define LPC13xx_SYSOSCCTRL   0
     Calculated SYSOSCCTRL setting.
    #define LPC13xx_SYSPLLCLKIN   SYSOSCCLK
     PLL input clock frequency.
    #define LPC13xx_SYSPLLCTRL_MSEL   (LPC13xx_SYSPLL_MUL - 1)
     MSEL mask in SYSPLLCTRL register.
    #define LPC13xx_SYSPLLCTRL_PSEL   (0 << 5)
     PSEL mask in SYSPLLCTRL register.
    #define LPC13xx_SYSPLLCCO
     CCP frequency.
    #define LPC13xx_SYSPLLCLKOUT   (LPC13xx_SYSPLLCCO / LPC13xx_SYSPLL_DIV)
     PLL output clock frequency.
    #define LPC13xx_SYSCLK   (LPC13xx_MAINCLK / LPC13xx_SYSABHCLK_DIV)
     AHB clock.
    #define LPC13xx_FLASHCFG_FLASHTIM   0
     Flash wait states.
    #define LPC13xx_UART_PCLK   (LPC13xx_MAINCLK / LPC13xx_UART_PCLK_DIV)
     UART clock.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void LPC13xx_clock_init (void)
     LPC13xx clocks and PLL initialization.
    -

    Detailed Description

    -

    HAL subsystem low level driver header template.

    - -

    Definition in file platforms/LPC13xx/hal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8h_source.html deleted file mode 100644 index 1d5d159..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2hal__lld_8h_source.html +++ /dev/null @@ -1,281 +0,0 @@ - - -ChibiOS/RT: hal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8c.html deleted file mode 100644 index e3a75b8..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8c.html +++ /dev/null @@ -1,65 +0,0 @@ - - -ChibiOS/RT: pal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.c File Reference

    -
    -
    - -

    LPC13xx GPIO low level driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - -

    -Functions

    void _pal_lld_init (const PALConfig *config)
     LPC13xx I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Detailed Description

    -

    LPC13xx GPIO low level driver code.

    - -

    Definition in file platforms/LPC13xx/pal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8c_source.html deleted file mode 100644 index 1374a37..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8c_source.html +++ /dev/null @@ -1,156 +0,0 @@ - - -ChibiOS/RT: pal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8h.html deleted file mode 100644 index b816cc0..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8h.html +++ /dev/null @@ -1,116 +0,0 @@ - - -ChibiOS/RT: pal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.h File Reference

    -
    -
    - -

    LPC13xx GPIO low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  LPC13xx_gpio_setup_t
     GPIO port setup info. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_IOPORTS_WIDTH   32
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFF)
     Whole port mask.
    #define IOPORT1   LPC_GPIO0
     GPIO0 port identifier.
    #define IOPORT2   LPC_GPIO1
     GPIO1 port identifier.
    #define IOPORT3   LPC_GPIO2
     GPIO2 port identifier.
    #define IOPORT4   LPC_GPIO3
     GPIO3 port identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     Low level PAL subsystem initialization.
    #define pal_lld_readport(port)   ((port)->DATA)
     Reads the physical I/O port states.
    #define pal_lld_readlatch(port)   ((port)->DATA)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)   ((port)->DATA = (bits))
     Writes a bits mask on a I/O port.
    #define pal_lld_setport(port, bits)   ((port)->MASKED_ACCESS[bits] = 0xFFFFFFFF)
     Sets a bits mask on a I/O port.
    #define pal_lld_clearport(port, bits)   ((port)->MASKED_ACCESS[bits] = 0)
     Clears a bits mask on a I/O port.
    #define pal_lld_readgroup(port, mask, offset)   ((port)->MASKED_ACCESS[(mask) << (offset)])
     Reads a group of bits.
    #define pal_lld_writegroup(port, mask, offset, bits)   ((port)->MASKED_ACCESS[(mask) << (offset)] = (bits))
     Writes a group of bits.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.
    #define pal_lld_writepad(port, pad, bit)   ((port)->MASKED_ACCESS[(mask) << (pad)] = (bit) << (pad))
     Writes a logical state on an output pad.
    #define pal_lld_setpad(port, pad)   ((port)->MASKED_ACCESS[1 << (pad)] = 1 << (pad))
     Sets a pad logical state to PAL_HIGH.
    #define pal_lld_clearpad(port, pad)   ((port)->MASKED_ACCESS[1 << (pad)] = 0)
     Clears a pad logical state to PAL_LOW.

    -Typedefs

    typedef uint32_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef LPC_GPIO_TypeDef * ioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     LPC13xx I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Detailed Description

    -

    LPC13xx GPIO low level driver header.

    - -

    Definition in file platforms/LPC13xx/pal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8h_source.html deleted file mode 100644 index c1f2af4..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2pal__lld_8h_source.html +++ /dev/null @@ -1,360 +0,0 @@ - - -ChibiOS/RT: pal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8c.html deleted file mode 100644 index 954ea08..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8c.html +++ /dev/null @@ -1,74 +0,0 @@ - - -ChibiOS/RT: serial_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.c File Reference

    -
    -
    - -

    LPC13xx low level serial driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - -

    -Functions

     CH_IRQ_HANDLER (VectorF8)
     UART0 IRQ handler.
    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     UART0 serial driver identifier.
    -

    Detailed Description

    -

    LPC13xx low level serial driver code.

    - -

    Definition in file platforms/LPC13xx/serial_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8c_source.html deleted file mode 100644 index 255cd04..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8c_source.html +++ /dev/null @@ -1,341 +0,0 @@ - - -ChibiOS/RT: serial_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8h.html deleted file mode 100644 index b5d84d5..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8h.html +++ /dev/null @@ -1,86 +0,0 @@ - - -ChibiOS/RT: serial_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.h File Reference

    -
    -
    - -

    LPC13xx low level serial driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_LPC13xx_UART0   TRUE
     UART0 driver enable switch.
    #define LPC13xx_UART_FIFO_PRELOAD   16
     FIFO preload parameter.
    #define LPC13xx_UART0_PRIORITY   3
     UART0 interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.

    -Typedefs

    typedef uint32_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.
    -

    Detailed Description

    -

    LPC13xx low level serial driver header.

    - -

    Definition in file platforms/LPC13xx/serial_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8h_source.html deleted file mode 100644 index bb2f8c3..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c13xx_2serial__lld_8h_source.html +++ /dev/null @@ -1,252 +0,0 @@ - - -ChibiOS/RT: serial_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8c.html deleted file mode 100644 index 2eef6ec..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8c.html +++ /dev/null @@ -1,70 +0,0 @@ - - -ChibiOS/RT: hal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.c File Reference

    -
    -
    - -

    LPC214x HAL subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - -

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void lpc214x_clock_init (void)
     LPC214x clocks and PLL initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    LPC214x HAL subsystem low level driver source.

    - -

    Definition in file platforms/LPC214x/hal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8c_source.html deleted file mode 100644 index 079aa77..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8c_source.html +++ /dev/null @@ -1,178 +0,0 @@ - - -ChibiOS/RT: hal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8h.html deleted file mode 100644 index de3a075..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8h.html +++ /dev/null @@ -1,72 +0,0 @@ - - -ChibiOS/RT: hal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.h File Reference

    -
    -
    - -

    LPC214x HAL subsystem low level driver header. -More...

    -#include "lpc214x.h"
    -#include "vic.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "LPC214x"
     Platform name.
    #define LPC214x_NON_VECTORED_IRQ_HOOK()
     Default action for the non vectored IRQ handler, nothing.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void lpc214x_clock_init (void)
     LPC214x clocks and PLL initialization.
    -

    Detailed Description

    -

    LPC214x HAL subsystem low level driver header.

    - -

    Definition in file platforms/LPC214x/hal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8h_source.html deleted file mode 100644 index 73821dd..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2hal__lld_8h_source.html +++ /dev/null @@ -1,131 +0,0 @@ - - -ChibiOS/RT: hal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8c.html deleted file mode 100644 index 6ce72e3..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8c.html +++ /dev/null @@ -1,65 +0,0 @@ - - -ChibiOS/RT: pal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.c File Reference

    -
    -
    - -

    LPC214x FIO low level driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - -

    -Functions

    void _pal_lld_init (const PALConfig *config)
     LPC214x I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Detailed Description

    -

    LPC214x FIO low level driver code.

    - -

    Definition in file platforms/LPC214x/pal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8c_source.html deleted file mode 100644 index abb553a..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8c_source.html +++ /dev/null @@ -1,164 +0,0 @@ - - -ChibiOS/RT: pal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8h.html deleted file mode 100644 index 2e24162..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8h.html +++ /dev/null @@ -1,111 +0,0 @@ - - -ChibiOS/RT: pal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.h File Reference

    -
    -
    - -

    LPC214x FIO low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  lpc214x_fio_setup_t
     FIO port setup info. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_IOPORTS_WIDTH   32
     Width, in bits, of an I/O port.
    #define IOPORT1   FIO0Base
     FIO port 0 identifier.
    #define IOPORT2   FIO1Base
     FIO port 1 identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     FIO subsystem initialization.
    #define pal_lld_readport(port)   ((port)->FIO_PIN)
     Reads an I/O port.
    #define pal_lld_readlatch(port)   ((port)->FIO_SET)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)   ((port)->FIO_PIN = (bits))
     Writes a bits mask on a I/O port.
    #define pal_lld_setport(port, bits)   ((port)->FIO_SET = (bits))
     Sets a bits mask on a I/O port.
    #define pal_lld_clearport(port, bits)   ((port)->FIO_CLR = (bits))
     Clears a bits mask on a I/O port.
    #define pal_lld_writegroup(port, mask, offset, bits)
     Writes a value on an I/O bus.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.
    #define pal_lld_writepad(port, pad, bit)   pal_lld_writegroup(port, 1, pad, bit)
     Writes a logical state on an output pad.
    #define pal_lld_lpc214x_set_direction(port, dir)
     FIO port setup.

    -Typedefs

    typedef uint32_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef FIO * ioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     LPC214x I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    LPC214x FIO low level driver header.

    - -

    Definition in file platforms/LPC214x/pal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8h_source.html deleted file mode 100644 index 667f1ea..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2pal__lld_8h_source.html +++ /dev/null @@ -1,308 +0,0 @@ - - -ChibiOS/RT: pal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8c.html deleted file mode 100644 index c1a53ef..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8c.html +++ /dev/null @@ -1,78 +0,0 @@ - - -ChibiOS/RT: serial_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.c File Reference

    -
    -
    - -

    LPC214x low level serial driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - -

    -Functions

     CH_IRQ_HANDLER (UART0IrqHandler)
     UART0 IRQ handler.
     CH_IRQ_HANDLER (UART1IrqHandler)
     UART1 IRQ handler.
    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     UART0 serial driver identifier.
    SerialDriver SD2
     UART1 serial driver identifier.
    -

    Detailed Description

    -

    LPC214x low level serial driver code.

    - -

    Definition in file platforms/LPC214x/serial_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8c_source.html deleted file mode 100644 index 4b307de..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8c_source.html +++ /dev/null @@ -1,389 +0,0 @@ - - -ChibiOS/RT: serial_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8h.html deleted file mode 100644 index 2a25e95..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8h.html +++ /dev/null @@ -1,90 +0,0 @@ - - -ChibiOS/RT: serial_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.h File Reference

    -
    -
    - -

    LPC214x low level serial driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_LPC214x_UART0   TRUE
     UART0 driver enable switch.
    #define USE_LPC214x_UART1   TRUE
     UART1 driver enable switch.
    #define LPC214x_UART_FIFO_PRELOAD   16
     FIFO preload parameter.
    #define LPC214x_UART0_PRIORITY   1
     UART0 interrupt priority level setting.
    #define LPC214x_UART1_PRIORITY   2
     UART1 interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.

    -Typedefs

    typedef uint32_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.
    -

    Detailed Description

    -

    LPC214x low level serial driver header.

    - -

    Definition in file platforms/LPC214x/serial_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8h_source.html deleted file mode 100644 index c362762..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2serial__lld_8h_source.html +++ /dev/null @@ -1,226 +0,0 @@ - - -ChibiOS/RT: serial_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8c.html deleted file mode 100644 index dff5114..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8c.html +++ /dev/null @@ -1,86 +0,0 @@ - - -ChibiOS/RT: spi_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    spi_lld.c File Reference

    -
    -
    - -

    LPC214x low level SPI driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    void rw8 (size_t n, const uint8_t *txbuf, uint8_t *rxbuf)
     Synchronous SSP transfer.
    void spi_lld_init (void)
     Low level SPI driver initialization.
    void spi_lld_start (SPIDriver *spip)
     Configures and activates the SPI peripheral.
    void spi_lld_stop (SPIDriver *spip)
     Deactivates the SPI peripheral.
    void spi_lld_select (SPIDriver *spip)
     Asserts the slave select signal and prepares for transfers.
    void spi_lld_unselect (SPIDriver *spip)
     Deasserts the slave select signal.
    void spi_lld_ignore (SPIDriver *spip, size_t n)
     Ignores data on the SPI bus.
    void spi_lld_exchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
     Exchanges data on the SPI bus.
    void spi_lld_send (SPIDriver *spip, size_t n, const void *txbuf)
     Sends data ever the SPI bus.
    void spi_lld_receive (SPIDriver *spip, size_t n, void *rxbuf)
     Receives data from the SPI bus.

    -Variables

    SPIDriver SPID1
     SPI1 driver identifier.
    -

    Detailed Description

    -

    LPC214x low level SPI driver code.

    - -

    Definition in file platforms/LPC214x/spi_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8c_source.html deleted file mode 100644 index 69e575f..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8c_source.html +++ /dev/null @@ -1,273 +0,0 @@ - - -ChibiOS/RT: spi_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8h.html deleted file mode 100644 index d5cb3e3..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8h.html +++ /dev/null @@ -1,89 +0,0 @@ - - -ChibiOS/RT: spi_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    spi_lld.h File Reference

    -
    -
    - -

    LPC214x low level SPI driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SPIConfig
     Driver configuration structure. More...
    struct  SPIDriver
     Structure representing a SPI driver. More...

    -Defines

    #define USE_LPC214x_SPI1   TRUE
     SPI1 (SSP) driver enable switch.

    -Functions

    void spi_lld_init (void)
     Low level SPI driver initialization.
    void spi_lld_start (SPIDriver *spip)
     Configures and activates the SPI peripheral.
    void spi_lld_stop (SPIDriver *spip)
     Deactivates the SPI peripheral.
    void spi_lld_select (SPIDriver *spip)
     Asserts the slave select signal and prepares for transfers.
    void spi_lld_unselect (SPIDriver *spip)
     Deasserts the slave select signal.
    void spi_lld_ignore (SPIDriver *spip, size_t n)
     Ignores data on the SPI bus.
    void spi_lld_exchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
     Exchanges data on the SPI bus.
    void spi_lld_send (SPIDriver *spip, size_t n, const void *txbuf)
     Sends data ever the SPI bus.
    void spi_lld_receive (SPIDriver *spip, size_t n, void *rxbuf)
     Receives data from the SPI bus.
    -

    Detailed Description

    -

    LPC214x low level SPI driver header.

    - -

    Definition in file platforms/LPC214x/spi_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8h_source.html deleted file mode 100644 index b770043..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_l_p_c214x_2spi__lld_8h_source.html +++ /dev/null @@ -1,192 +0,0 @@ - - -ChibiOS/RT: spi_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8c.html deleted file mode 100644 index 29c6bc7..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8c.html +++ /dev/null @@ -1,68 +0,0 @@ - - -ChibiOS/RT: hal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.c File Reference

    -
    -
    - -

    MSP430 HAL subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - -

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    MSP430 HAL subsystem low level driver source.

    - -

    Definition in file platforms/MSP430/hal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8c_source.html deleted file mode 100644 index 9a54d14..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8c_source.html +++ /dev/null @@ -1,148 +0,0 @@ - - -ChibiOS/RT: hal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8h.html deleted file mode 100644 index 15458d4..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8h.html +++ /dev/null @@ -1,69 +0,0 @@ - - -ChibiOS/RT: hal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.h File Reference

    -
    -
    - -

    MSP430 HAL subsystem low level driver header. -More...

    -#include "msp430x16x.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "MSP430x16x"
     Platform name.
    #define MSP430_USE_CLOCK   MSP430_CLOCK_SOURCE_XT2CLK
     Clock source.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    -

    Detailed Description

    -

    MSP430 HAL subsystem low level driver header.

    - -

    Definition in file platforms/MSP430/hal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8h_source.html deleted file mode 100644 index 01ac6bb..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2hal__lld_8h_source.html +++ /dev/null @@ -1,163 +0,0 @@ - - -ChibiOS/RT: hal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8c.html deleted file mode 100644 index 7658b2c..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8c.html +++ /dev/null @@ -1,65 +0,0 @@ - - -ChibiOS/RT: pal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.c File Reference

    -
    -
    - -

    MSP430 Digital I/O low level driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - -

    -Functions

    void _pal_lld_init (const PALConfig *config)
     MSP430 I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Detailed Description

    -

    MSP430 Digital I/O low level driver code.

    - -

    Definition in file platforms/MSP430/pal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8c_source.html deleted file mode 100644 index da66560..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8c_source.html +++ /dev/null @@ -1,190 +0,0 @@ - - -ChibiOS/RT: pal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8h.html deleted file mode 100644 index 5a0b1e9..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8h.html +++ /dev/null @@ -1,115 +0,0 @@ - - -ChibiOS/RT: pal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.h File Reference

    -
    -
    - -

    MSP430 Digital I/O low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  port_common_t
     Simplified MSP430 I/O port representation. More...
    union  __ioport
     Generic MSP430 I/O port. More...
    struct  msp430_dio_setup_t
     Setup registers common to all the MSP430 ports. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_IOPORTS_WIDTH   8
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFF)
     Whole port mask.
    #define IOPORT1   ((ioportid_t)0x0020)
     I/O port A identifier.
    #define IOPORT2   ((ioportid_t)0x0028)
     I/O port B identifier.
    #define IOPORT3   ((ioportid_t)0x0018)
     I/O port C identifier.
    #define IOPORT4   ((ioportid_t)0x001c)
     I/O port D identifier.
    #define IOPORT5   ((ioportid_t)0x0030)
     I/O port E identifier.
    #define IOPORT6   ((ioportid_t)0x0034)
     I/O port F identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     Low level PAL subsystem initialization.
    #define pal_lld_readport(port)   ((port)->iop_common.in.reg_p)
     Reads the physical I/O port states.
    #define pal_lld_readlatch(port)   ((port)->iop_common.out.reg_p)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)
     Writes a bits mask on a I/O port.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.

    -Typedefs

    typedef uint8_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef union __ioportioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     MSP430 I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    MSP430 Digital I/O low level driver header.

    - -

    Definition in file platforms/MSP430/pal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8h_source.html deleted file mode 100644 index 33e830a..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2pal__lld_8h_source.html +++ /dev/null @@ -1,348 +0,0 @@ - - -ChibiOS/RT: pal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8c.html deleted file mode 100644 index 57f6d91..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8c.html +++ /dev/null @@ -1,75 +0,0 @@ - - -ChibiOS/RT: serial_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.c File Reference

    -
    -
    - -

    MSP430 low level serial driver code. -More...

    -#include <signal.h>
    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - -

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     USART0 serial driver identifier.
    SerialDriver SD2
     USART1 serial driver identifier.
    -

    Detailed Description

    -

    MSP430 low level serial driver code.

    - -

    Definition in file platforms/MSP430/serial_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8c_source.html deleted file mode 100644 index 3a5bcfd..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8c_source.html +++ /dev/null @@ -1,360 +0,0 @@ - - -ChibiOS/RT: serial_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8h.html deleted file mode 100644 index 8375694..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8h.html +++ /dev/null @@ -1,86 +0,0 @@ - - -ChibiOS/RT: serial_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.h File Reference

    -
    -
    - -

    MSP430 low level serial driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_MSP430_USART0   TRUE
     USART0 driver enable switch.
    #define USE_MSP430_USART1   TRUE
     USART1 driver enable switch.
    #define _serial_driver_data
     SerialDriver specific data.
    #define UBR(b)   (SMCLK / (b))
     Macro for baud rate computation.

    -Typedefs

    typedef uint8_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.
    -

    Detailed Description

    -

    MSP430 low level serial driver header.

    - -

    Definition in file platforms/MSP430/serial_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8h_source.html deleted file mode 100644 index e72ce07..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_m_s_p430_2serial__lld_8h_source.html +++ /dev/null @@ -1,199 +0,0 @@ - - -ChibiOS/RT: serial_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8c.html deleted file mode 100644 index 735341b..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8c.html +++ /dev/null @@ -1,65 +0,0 @@ - - -ChibiOS/RT: hal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.c File Reference

    -
    -
    - -

    SPC563 HAL subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - -

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void spc563_clock_init (void)
     SPC563 clocks and PLL initialization.
    -

    Detailed Description

    -

    SPC563 HAL subsystem low level driver source.

    - -

    Definition in file platforms/SPC56x/hal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8c_source.html deleted file mode 100644 index 10fe863..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8c_source.html +++ /dev/null @@ -1,176 +0,0 @@ - - -ChibiOS/RT: hal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8h.html deleted file mode 100644 index 2fdb050..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8h.html +++ /dev/null @@ -1,129 +0,0 @@ - - -ChibiOS/RT: hal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.h File Reference

    -
    -
    - -

    SPC563 HAL subsystem low level driver header. -More...

    -#include "mpc563m.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "SPC563M64"
     Platform name.
    #define RFD_DIV2   0
    #define RFD_DIV4   1
    #define RFD_DIV8   2
    #define RFD_DIV16   3
    #define BIUCR_BANK1_TOO   0x01000000
    #define BIUCR_MASTER7_PREFETCH   0x00800000
    #define BIUCR_MASTER6_PREFETCH   0x00400000
    #define BIUCR_MASTER5_PREFETCH   0x00200000
    #define BIUCR_MASTER4_PREFETCH   0x00100000
    #define BIUCR_MASTER3_PREFETCH   0x00080000
    #define BIUCR_MASTER2_PREFETCH   0x00040000
    #define BIUCR_MASTER1_PREFETCH   0x00020000
    #define BIUCR_MASTER0_PREFETCH   0x00010000
    #define BIUCR_APC_MASK   0x0000E000
    #define BIUCR_APC_0   (0 << 13)
    #define BIUCR_APC_1   (1 << 13)
    #define BIUCR_APC_2   (2 << 13)
    #define BIUCR_APC_3   (3 << 13)
    #define BIUCR_APC_4   (4 << 13)
    #define BIUCR_APC_5   (5 << 13)
    #define BIUCR_APC_6   (6 << 13)
    #define BIUCR_WWSC_MASK   0x00001800
    #define BIUCR_WWSC_0   (0 << 11)
    #define BIUCR_WWSC_1   (1 << 11)
    #define BIUCR_WWSC_2   (2 << 11)
    #define BIUCR_WWSC_3   (3 << 11)
    #define BIUCR_RWSC_MASK   0x00001800
    #define BIUCR_RWSC_0   (0 << 8)
    #define BIUCR_RWSC_1   (1 << 8)
    #define BIUCR_RWSC_2   (2 << 8)
    #define BIUCR_RWSC_3   (3 << 8)
    #define BIUCR_RWSC_4   (4 << 8)
    #define BIUCR_RWSC_5   (5 << 8)
    #define BIUCR_RWSC_6   (6 << 8)
    #define BIUCR_RWSC_7   (7 << 8)
    #define BIUCR_DPFEN   0x00000040
    #define BIUCR_IPFEN   0x00000010
    #define BIUCR_PFLIM_MASK   0x00000060
    #define BIUCR_PFLIM_NO   (0 << 1)
    #define BIUCR_PFLIM_ON_MISS   (1 << 1)
    #define BIUCR_PFLIM_ON_HITMISS   (2 << 1)
    #define BIUCR_BFEN   0x00000001
    #define SPC563_CLK_BYPASS   FALSE
     Clock bypass.
    #define SPC563_ALLOW_OVERCLOCK   FALSE
     Disables the overclock checks.
    #define SPC563_CLK_PREDIV   0
     External clock pre-divider.
    #define SPC563_CLK_MFD   40
     Multiplication factor divider.
    #define SPC563_CLK_RFD   RFD_DIV4
     Reduced frequency divider.
    #define SPC563_FLASH_BIUCR
     Flash buffer and prefetching settings.
    #define SPC563_PLLCLK   ((EXTCLK / (SPC563_CLK_PREDIV + 1)) * SPC563_CLK_MFD)
     PLL output clock.
    #define SPC563_SYSCLK   (SPC563_PLLCLK / (1 << (SPC563_CLK_RFD + 1)))
     PLL output clock.
    #define SPC563_FLASH_WS   (BIUCR_APC_0 | BIUCR_RWSC_0 | BIUCR_WWSC_1)
     Flash wait states are a function of the system clock.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void spc563_clock_init (void)
     SPC563 clocks and PLL initialization.
    -

    Detailed Description

    -

    SPC563 HAL subsystem low level driver header.

    - -

    Definition in file platforms/SPC56x/hal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8h_source.html deleted file mode 100644 index 7521ead..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2hal__lld_8h_source.html +++ /dev/null @@ -1,275 +0,0 @@ - - -ChibiOS/RT: hal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8c.html deleted file mode 100644 index fcae38f..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8c.html +++ /dev/null @@ -1,78 +0,0 @@ - - -ChibiOS/RT: serial_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.c File Reference

    -
    -
    - -

    SPC563 low level serial driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - -

    -Functions

     CH_IRQ_HANDLER (vector146)
     eSCI-A interrupt handler.
     CH_IRQ_HANDLER (vector149)
     eSCI-B interrupt handler.
    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     eSCI-A serial driver identifier.
    SerialDriver SD2
     eSCI-B serial driver identifier.
    -

    Detailed Description

    -

    SPC563 low level serial driver code.

    - -

    Definition in file platforms/SPC56x/serial_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8c_source.html deleted file mode 100644 index 12908ed..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8c_source.html +++ /dev/null @@ -1,346 +0,0 @@ - - -ChibiOS/RT: serial_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8h.html deleted file mode 100644 index cb2520f..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8h.html +++ /dev/null @@ -1,100 +0,0 @@ - - -ChibiOS/RT: serial_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.h File Reference

    -
    -
    - -

    SPC563 low level serial driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define SD_MODE_PARITY   0x03
     Parity field mask.
    #define SD_MODE_PARITY_NONE   0x00
     No parity.
    #define SD_MODE_PARITY_EVEN   0x01
     Even parity.
    #define SD_MODE_PARITY_ODD   0x02
     Odd parity.
    #define SD_MODE_NORMAL   0x00
     Normal operations.
    #define SD_MODE_LOOPBACK   0x80
     Internal loopback.
    #define USE_SPC563_ESCIA   TRUE
     eSCI-A driver enable switch.
    #define USE_SPC563_ESCIB   TRUE
     eSCI-B driver enable switch.
    #define SPC563_ESCIA_PRIORITY   8
     eSCI-A interrupt priority level setting.
    #define SPC563_ESCIB_PRIORITY   8
     eSCI-B interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.

    -Typedefs

    typedef uint8_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.
    -

    Detailed Description

    -

    SPC563 low level serial driver header.

    - -

    Definition in file platforms/SPC56x/serial_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8h_source.html deleted file mode 100644 index 67654c2..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_p_c56x_2serial__lld_8h_source.html +++ /dev/null @@ -1,216 +0,0 @@ - - -ChibiOS/RT: serial_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8c.html deleted file mode 100644 index 8509a83..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8c.html +++ /dev/null @@ -1,78 +0,0 @@ - - -ChibiOS/RT: adc_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    adc_lld.c File Reference

    -
    -
    - -

    STM32 ADC subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - -

    -Functions

     CH_IRQ_HANDLER (Vector6C)
     ADC1 DMA interrupt handler (channel 1).
    void adc_lld_init (void)
     Low level ADC driver initialization.
    void adc_lld_start (ADCDriver *adcp)
     Configures and activates the ADC peripheral.
    void adc_lld_stop (ADCDriver *adcp)
     Deactivates the ADC peripheral.
    void adc_lld_start_conversion (ADCDriver *adcp)
     Starts an ADC conversion.
    void adc_lld_stop_conversion (ADCDriver *adcp)
     Stops an ongoing conversion.

    -Variables

    ADCDriver ADCD1
     ADC1 driver identifier.
    -

    Detailed Description

    -

    STM32 ADC subsystem low level driver source.

    - -

    Definition in file platforms/STM32/adc_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8c_source.html deleted file mode 100644 index 8b54a60..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8c_source.html +++ /dev/null @@ -1,296 +0,0 @@ - - -ChibiOS/RT: adc_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8h.html deleted file mode 100644 index a7efa34..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8h.html +++ /dev/null @@ -1,138 +0,0 @@ - - -ChibiOS/RT: adc_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    adc_lld.h File Reference

    -
    -
    - -

    STM32 ADC subsystem low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  ADCConversionGroup
     Conversion group configuration structure. More...
    struct  ADCConfig
     Driver configuration structure. More...
    struct  ADCDriver
     Structure representing an ADC driver. More...

    -Defines

    #define ADC_CR2_EXTSEL_SRC(n)   ((n) << 17)
     Trigger source.
    #define ADC_CR2_EXTSEL_SWSTART   (7 << 17)
     Software trigger.
    #define ADC_CHANNEL_IN0   0
     External analog input 0.
    #define ADC_CHANNEL_IN1   1
     External analog input 1.
    #define ADC_CHANNEL_IN2   2
     External analog input 2.
    #define ADC_CHANNEL_IN3   3
     External analog input 3.
    #define ADC_CHANNEL_IN4   4
     External analog input 4.
    #define ADC_CHANNEL_IN5   5
     External analog input 5.
    #define ADC_CHANNEL_IN6   6
     External analog input 6.
    #define ADC_CHANNEL_IN7   7
     External analog input 7.
    #define ADC_CHANNEL_IN8   8
     External analog input 8.
    #define ADC_CHANNEL_IN9   9
     External analog input 9.
    #define ADC_CHANNEL_IN10   10
     External analog input 10.
    #define ADC_CHANNEL_IN11   11
     External analog input 11.
    #define ADC_CHANNEL_IN12   12
     External analog input 12.
    #define ADC_CHANNEL_IN13   13
     External analog input 13.
    #define ADC_CHANNEL_IN14   14
     External analog input 14.
    #define ADC_CHANNEL_IN15   15
     External analog input 15.
    #define ADC_CHANNEL_SENSOR   16
     Internal temperature sensor.
    #define ADC_CHANNEL_VREFINT   17
     Internal reference.
    #define USE_STM32_ADC1   TRUE
     ADC1 driver enable switch.
    #define STM32_ADC1_DMA_PRIORITY   3
     ADC1 DMA priority (0..3|lowest..highest).
    #define STM32_ADC1_IRQ_PRIORITY   5
     ADC1 interrupt priority level setting.
    #define STM32_ADC1_DMA_ERROR_HOOK()   chSysHalt()
     ADC1 DMA error hook.

    -Typedefs

    typedef uint16_t adcsample_t
     ADC sample data type.
    typedef uint16_t adc_channels_num_t
     Channels number in a conversion group.
    typedef void(* adccallback_t )(adcsample_t *buffer, size_t n)
     ADC notification callback type.

    -Functions

    void adc_lld_init (void)
     Low level ADC driver initialization.
    void adc_lld_start (ADCDriver *adcp)
     Configures and activates the ADC peripheral.
    void adc_lld_stop (ADCDriver *adcp)
     Deactivates the ADC peripheral.
    void adc_lld_start_conversion (ADCDriver *adcp)
     Starts an ADC conversion.
    void adc_lld_stop_conversion (ADCDriver *adcp)
     Stops an ongoing conversion.
    -

    Detailed Description

    -

    STM32 ADC subsystem low level driver header.

    - -

    Definition in file platforms/STM32/adc_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8h_source.html deleted file mode 100644 index a028212..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2adc__lld_8h_source.html +++ /dev/null @@ -1,330 +0,0 @@ - - -ChibiOS/RT: adc_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8c.html deleted file mode 100644 index be47e1a..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8c.html +++ /dev/null @@ -1,84 +0,0 @@ - - -ChibiOS/RT: can_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    can_lld.c File Reference

    -
    -
    - -

    STM32 CAN subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    void can_lld_init (void)
     Low level CAN driver initialization.
    void can_lld_start (CANDriver *canp)
     Configures and activates the CAN peripheral.
    void can_lld_stop (CANDriver *canp)
     Deactivates the CAN peripheral.
    bool_t can_lld_can_transmit (CANDriver *canp)
     Determines whether a frame can be transmitted.
    void can_lld_transmit (CANDriver *canp, const CANTxFrame *ctfp)
     Inserts a frame into the transmit queue.
    bool_t can_lld_can_receive (CANDriver *canp)
     Determines whether a frame has been received.
    void can_lld_receive (CANDriver *canp, CANRxFrame *crfp)
     Receives a frame from the input queue.
    void can_lld_sleep (CANDriver *canp)
     Enters the sleep mode.
    void can_lld_wakeup (CANDriver *canp)
     Enforces leaving the sleep mode.

    -Variables

    CANDriver CAND1
     ADC1 driver identifier.
    -

    Detailed Description

    -

    STM32 CAN subsystem low level driver source.

    - -

    Definition in file platforms/STM32/can_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8c_source.html deleted file mode 100644 index f7fdff7..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8c_source.html +++ /dev/null @@ -1,435 +0,0 @@ - - -ChibiOS/RT: can_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8h.html deleted file mode 100644 index 9377db5..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8h.html +++ /dev/null @@ -1,118 +0,0 @@ - - -ChibiOS/RT: can_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    can_lld.h File Reference

    -
    -
    - -

    STM32 CAN subsystem low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  CANTxFrame
     CAN transmission frame. More...
    struct  CANRxFrame
     CAN received frame. More...
    struct  CANFilter
     CAN filter. More...
    struct  CANConfig
     Driver configuration structure. More...
    struct  CANDriver
     Structure representing an CAN driver. More...

    -Defines

    #define CAN_SUPPORTS_SLEEP   TRUE
     This switch defines whether the driver implementation supports a low power switch mode with automatic an wakeup feature.
    #define CAN_MAX_FILTERS   28
     Minimum number of CAN filters.
    #define CAN_BTR_BRP(n)   (n)
     BRP field macro.
    #define CAN_BTR_TS1(n)   ((n) << 16)
     TS1 field macro.
    #define CAN_BTR_TS2(n)   ((n) << 20)
     TS2 field macro.
    #define CAN_BTR_SJW(n)   ((n) << 24)
     SJW field macro.
    #define CAN_IDE_STD   0
     Standard id.
    #define CAN_IDE_EXT   1
     Extended id.
    #define CAN_RTR_DATA   0
     Data frame.
    #define CAN_RTR_REMOTE   1
     Remote frame.
    #define USE_STM32_CAN1   TRUE
     CAN1 driver enable switch.
    #define STM32_CAN1_IRQ_PRIORITY   11
     CAN1 interrupt priority level setting.

    -Typedefs

    typedef uint32_t canstatus_t
     CAN status flags.

    -Functions

    void can_lld_init (void)
     Low level CAN driver initialization.
    void can_lld_start (CANDriver *canp)
     Configures and activates the CAN peripheral.
    void can_lld_stop (CANDriver *canp)
     Deactivates the CAN peripheral.
    bool_t can_lld_can_transmit (CANDriver *canp)
     Determines whether a frame can be transmitted.
    void can_lld_transmit (CANDriver *canp, const CANTxFrame *ctfp)
     Inserts a frame into the transmit queue.
    bool_t can_lld_can_receive (CANDriver *canp)
     Determines whether a frame has been received.
    void can_lld_receive (CANDriver *canp, CANRxFrame *crfp)
     Receives a frame from the input queue.
    -

    Detailed Description

    -

    STM32 CAN subsystem low level driver header.

    - -

    Definition in file platforms/STM32/can_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8h_source.html deleted file mode 100644 index 21e2adb..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2can__lld_8h_source.html +++ /dev/null @@ -1,371 +0,0 @@ - - -ChibiOS/RT: can_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8c.html deleted file mode 100644 index 407c0e0..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8c.html +++ /dev/null @@ -1,70 +0,0 @@ - - -ChibiOS/RT: hal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.c File Reference

    -
    -
    - -

    STM32 HAL subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - -

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void stm32_clock_init (void)
     STM32 clocks and PLL initialization.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    STM32 HAL subsystem low level driver source.

    - -

    Definition in file platforms/STM32/hal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8c_source.html deleted file mode 100644 index 0107bed..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8c_source.html +++ /dev/null @@ -1,256 +0,0 @@ - - -ChibiOS/RT: hal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8h.html deleted file mode 100644 index f58d7ef..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8h.html +++ /dev/null @@ -1,72 +0,0 @@ - - -ChibiOS/RT: hal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.h File Reference

    -
    -
    - -

    STM32 HAL subsystem low level driver header. -More...

    -#include "stm32f10x.h"
    -#include "nvic.h"
    -#include "stm32_dma.h"
    -#include "hal_lld_f103.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "STM32 MD"
     Platform name.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    void stm32_clock_init (void)
     STM32 clocks and PLL initialization.
    -

    Detailed Description

    -

    STM32 HAL subsystem low level driver header.

    - -

    Definition in file platforms/STM32/hal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8h_source.html deleted file mode 100644 index a781cad..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2hal__lld_8h_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - -ChibiOS/RT: hal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8c.html deleted file mode 100644 index daac74b..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8c.html +++ /dev/null @@ -1,65 +0,0 @@ - - -ChibiOS/RT: pal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.c File Reference

    -
    -
    - -

    STM32 GPIO low level driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - -

    -Functions

    void _pal_lld_init (const PALConfig *config)
     STM32 I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Detailed Description

    -

    STM32 GPIO low level driver code.

    - -

    Definition in file platforms/STM32/pal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8c_source.html deleted file mode 100644 index 3bd11a2..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8c_source.html +++ /dev/null @@ -1,244 +0,0 @@ - - -ChibiOS/RT: pal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8h.html deleted file mode 100644 index 6c261dd..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8h.html +++ /dev/null @@ -1,125 +0,0 @@ - - -ChibiOS/RT: pal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.h File Reference

    -
    -
    - -

    STM32 GPIO low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  stm32_gpio_setup_t
     GPIO port setup info. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_MODE_STM32_ALTERNATE_PUSHPULL   16
     STM32 specific alternate push-pull output mode.
    #define PAL_MODE_STM32_ALTERNATE_OPENDRAIN   17
     STM32 specific alternate open-drain output mode.
    #define PAL_IOPORTS_WIDTH   16
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFFF)
     Whole port mask.
    #define IOPORT1   GPIOA
     GPIO port A identifier.
    #define IOPORT2   GPIOB
     GPIO port B identifier.
    #define IOPORT3   GPIOC
     GPIO port C identifier.
    #define IOPORT4   GPIOD
     GPIO port D identifier.
    #define IOPORT5   GPIOE
     GPIO port E identifier.
    #define IOPORT6   GPIOF
     GPIO port F identifier.
    #define IOPORT7   GPIOG
     GPIO port G identifier.
    #define pal_lld_init(config)   _pal_lld_init(config)
     GPIO ports subsystem initialization.
    #define pal_lld_readport(port)   ((port)->IDR)
     Reads an I/O port.
    #define pal_lld_readlatch(port)   ((port)->ODR)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)   ((port)->ODR = (bits))
     Writes on a I/O port.
    #define pal_lld_setport(port, bits)   ((port)->BSRR = (bits))
     Sets a bits mask on a I/O port.
    #define pal_lld_clearport(port, bits)   ((port)->BRR = (bits))
     Clears a bits mask on a I/O port.
    #define pal_lld_writegroup(port, mask, offset, bits)
     Writes a group of bits.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.
    #define pal_lld_writepad(port, pad, bit)   pal_lld_writegroup(port, 1, pad, bit)
     Writes a logical state on an output pad.

    -Typedefs

    typedef uint32_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef GPIO_TypeDef * ioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_init (const PALConfig *config)
     STM32 I/O ports configuration.
    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.

    -Variables

    const PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    STM32 GPIO low level driver header.

    - -

    Definition in file platforms/STM32/pal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8h_source.html deleted file mode 100644 index 8777404..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pal__lld_8h_source.html +++ /dev/null @@ -1,360 +0,0 @@ - - -ChibiOS/RT: pal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8c.html deleted file mode 100644 index 4b0c9fb..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8c.html +++ /dev/null @@ -1,82 +0,0 @@ - - -ChibiOS/RT: pwm_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pwm_lld.c File Reference

    -
    -
    - -

    STM32 PWM subsystem low level driver header. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    void pwm_lld_init (void)
     Low level PWM driver initialization.
    void pwm_lld_start (PWMDriver *pwmp)
     Configures and activates the PWM peripheral.
    void pwm_lld_stop (PWMDriver *pwmp)
     Deactivates the PWM peripheral.
    void pwm_lld_enable_channel (PWMDriver *pwmp, pwmchannel_t channel, pwmcnt_t width)
     Enables a PWM channel.
    void pwm_lld_disable_channel (PWMDriver *pwmp, pwmchannel_t channel)
     Disables a PWM channel.

    -Variables

    PWMDriver PWMD1
     PWM1 driver identifier.
    PWMDriver PWMD2
     PWM2 driver identifier.
    PWMDriver PWMD3
     PWM3 driver identifier.
    PWMDriver PWMD4
     PWM4 driver identifier.
    -

    Detailed Description

    -

    STM32 PWM subsystem low level driver header.

    - -

    Definition in file platforms/STM32/pwm_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8c_source.html deleted file mode 100644 index dc7b5c7..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8c_source.html +++ /dev/null @@ -1,499 +0,0 @@ - - -ChibiOS/RT: pwm_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8h.html deleted file mode 100644 index 7e6219d..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8h.html +++ /dev/null @@ -1,120 +0,0 @@ - - -ChibiOS/RT: pwm_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pwm_lld.h File Reference

    -
    -
    - -

    STM32 PWM subsystem low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  PWMChannelConfig
     PWM driver channel configuration structure. More...
    struct  PWMConfig
     Driver configuration structure. More...
    struct  PWMDriver
     Structure representing an PWM driver. More...

    -Defines

    #define PWM_CHANNELS   4
     Number of PWM channels per PWM driver.
    #define USE_STM32_PWM1   TRUE
     PWM1 driver enable switch.
    #define USE_STM32_PWM2   TRUE
     PWM2 driver enable switch.
    #define USE_STM32_PWM3   TRUE
     PWM3 driver enable switch.
    #define USE_STM32_PWM4   TRUE
     PWM4 driver enable switch.
    #define STM32_PWM1_IRQ_PRIORITY   7
     PWM1 interrupt priority level setting.
    #define STM32_PWM2_IRQ_PRIORITY   7
     PWM2 interrupt priority level setting.
    #define STM32_PWM3_IRQ_PRIORITY   7
     PWM3 interrupt priority level setting.
    #define STM32_PWM4_IRQ_PRIORITY   7
     PWM4 interrupt priority level setting.
    #define PWM_COMPUTE_PSC(clksrc, pwmclk)   ((uint16_t)(((clksrc) / (pwmclk)) - 1))
     PWM clock prescaler initialization utility.
    #define PWM_COMPUTE_ARR(pwmclk, pwmperiod)   ((uint16_t)(((pwmclk) / (1000000000 / (pwmperiod))) - 1))
     PWM cycle period initialization utility.
    #define PWM_FRACTION_TO_WIDTH(pwmp, numerator, denominator)
     Converts from fraction to pulse width.
    #define PWM_DEGREES_TO_WIDTH(pwmp, degrees)   PWM_FRACTION_TO_WIDTH(pwmp, 36000, degrees)
     Converts from degrees to pulse width.
    #define PWM_PERCENTAGE_TO_WIDTH(pwmp, percentage)   PWM_FRACTION_TO_WIDTH(pwmp, 10000, percentage)
     Converts from percentage to pulse width.

    -Typedefs

    typedef uint8_t pwmchannel_t
     PWM channel type.
    typedef uint16_t pwmcnt_t
     PWM counter type.
    typedef struct PWMDriver PWMDriver
     Type of a structure representing an PWM driver.
    typedef void(* pwmcallback_t )(PWMDriver *pwmp)
     PWM notification callback type.

    -Functions

    void pwm_lld_init (void)
     Low level PWM driver initialization.
    void pwm_lld_start (PWMDriver *pwmp)
     Configures and activates the PWM peripheral.
    void pwm_lld_stop (PWMDriver *pwmp)
     Deactivates the PWM peripheral.
    void pwm_lld_enable_channel (PWMDriver *pwmp, pwmchannel_t channel, pwmcnt_t width)
     Enables a PWM channel.
    void pwm_lld_disable_channel (PWMDriver *pwmp, pwmchannel_t channel)
     Disables a PWM channel.
    -

    Detailed Description

    -

    STM32 PWM subsystem low level driver header.

    - -

    Definition in file platforms/STM32/pwm_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8h_source.html deleted file mode 100644 index 9767e73..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2pwm__lld_8h_source.html +++ /dev/null @@ -1,391 +0,0 @@ - - -ChibiOS/RT: pwm_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8c.html deleted file mode 100644 index 36ceffa..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8c.html +++ /dev/null @@ -1,80 +0,0 @@ - - -ChibiOS/RT: serial_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.c File Reference

    -
    -
    - -

    STM32 low level serial driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - -

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     USART1 serial driver identifier.
    SerialDriver SD2
     USART2 serial driver identifier.
    SerialDriver SD3
     USART3 serial driver identifier.
    SerialDriver SD4
     UART4 serial driver identifier.
    SerialDriver SD5
     UART5 serial driver identifier.
    -

    Detailed Description

    -

    STM32 low level serial driver code.

    - -

    Definition in file platforms/STM32/serial_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8c_source.html deleted file mode 100644 index 7485566..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8c_source.html +++ /dev/null @@ -1,477 +0,0 @@ - - -ChibiOS/RT: serial_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8h.html deleted file mode 100644 index 3210100..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8h.html +++ /dev/null @@ -1,108 +0,0 @@ - - -ChibiOS/RT: serial_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.h File Reference

    -
    -
    - -

    STM32 low level serial driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define USE_STM32_USART1   TRUE
     USART1 driver enable switch.
    #define USE_STM32_USART2   TRUE
     USART2 driver enable switch.
    #define USE_STM32_USART3   TRUE
     USART3 driver enable switch.
    #define USE_STM32_UART4   TRUE
     UART4 driver enable switch.
    #define USE_STM32_UART5   TRUE
     UART5 driver enable switch.
    #define STM32_USART1_PRIORITY   12
     USART1 interrupt priority level setting.
    #define STM32_USART2_PRIORITY   12)
     USART2 interrupt priority level setting.
    #define STM32_USART3_PRIORITY   12
     USART3 interrupt priority level setting.
    #define STM32_UART4_PRIORITY   12
     UART4 interrupt priority level setting.
    #define STM32_UART5_PRIORITY   12
     UART5 interrupt priority level setting.
    #define _serial_driver_data
     SerialDriver specific data.
    #define USART_CR2_STOP1_BITS   (0 << 12)
     CR2 1 stop bit value.
    #define USART_CR2_STOP0P5_BITS   (1 << 12)
     CR2 0.5 stop bit value.
    #define USART_CR2_STOP2_BITS   (2 << 12)
     CR2 2 stop bit value.
    #define USART_CR2_STOP1P5_BITS   (3 << 12)
     CR2 1.5 stop bit value.

    -Typedefs

    typedef uint32_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.
    -

    Detailed Description

    -

    STM32 low level serial driver header.

    - -

    Definition in file platforms/STM32/serial_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8h_source.html deleted file mode 100644 index cb3c390..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2serial__lld_8h_source.html +++ /dev/null @@ -1,288 +0,0 @@ - - -ChibiOS/RT: serial_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8c.html deleted file mode 100644 index f15cd71..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8c.html +++ /dev/null @@ -1,94 +0,0 @@ - - -ChibiOS/RT: spi_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    spi_lld.c File Reference

    -
    -
    - -

    STM32 SPI subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

     CH_IRQ_HANDLER (Vector70)
     SPI1 RX DMA interrupt handler (channel 2).
     CH_IRQ_HANDLER (Vector74)
     SPI1 TX DMA interrupt handler (channel 3).
     CH_IRQ_HANDLER (Vector78)
     SPI2 RX DMA interrupt handler (channel 4).
     CH_IRQ_HANDLER (Vector7C)
     SPI2 TX DMA interrupt handler (channel 5).
    void spi_lld_init (void)
     Low level SPI driver initialization.
    void spi_lld_start (SPIDriver *spip)
     Configures and activates the SPI peripheral.
    void spi_lld_stop (SPIDriver *spip)
     Deactivates the SPI peripheral.
    void spi_lld_select (SPIDriver *spip)
     Asserts the slave select signal and prepares for transfers.
    void spi_lld_unselect (SPIDriver *spip)
     Deasserts the slave select signal.
    void spi_lld_ignore (SPIDriver *spip, size_t n)
     Ignores data on the SPI bus.
    void spi_lld_exchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
     Exchanges data on the SPI bus.
    void spi_lld_send (SPIDriver *spip, size_t n, const void *txbuf)
     Sends data ever the SPI bus.
    void spi_lld_receive (SPIDriver *spip, size_t n, void *rxbuf)
     Receives data from the SPI bus.

    -Variables

    SPIDriver SPID1
     SPI1 driver identifier.
    SPIDriver SPID2
     SPI2 driver identifier.
    -

    Detailed Description

    -

    STM32 SPI subsystem low level driver source.

    - -

    Definition in file platforms/STM32/spi_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8c_source.html deleted file mode 100644 index ec53b54..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8c_source.html +++ /dev/null @@ -1,421 +0,0 @@ - - -ChibiOS/RT: spi_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8h.html deleted file mode 100644 index b736291..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8h.html +++ /dev/null @@ -1,103 +0,0 @@ - - -ChibiOS/RT: spi_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    spi_lld.h File Reference

    -
    -
    - -

    STM32 SPI subsystem low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SPIConfig
     Driver configuration structure. More...
    struct  SPIDriver
     Structure representing a SPI driver. More...

    -Defines

    #define USE_STM32_SPI1   TRUE
     SPI1 driver enable switch.
    #define USE_STM32_SPI2   TRUE
     SPI2 driver enable switch.
    #define STM32_SPI1_DMA_PRIORITY   2
     SPI1 DMA priority (0..3|lowest..highest).
    #define STM32_SPI2_DMA_PRIORITY   2
     SPI2 DMA priority (0..3|lowest..highest).
    #define STM32_SPI1_IRQ_PRIORITY   10
     SPI1 interrupt priority level setting.
    #define STM32_SPI2_IRQ_PRIORITY   10
     SPI2 interrupt priority level setting.
    #define STM32_SPI1_DMA_ERROR_HOOK()   chSysHalt()
     SPI1 DMA error hook.
    #define STM32_SPI2_DMA_ERROR_HOOK()   chSysHalt()
     SPI2 DMA error hook.

    -Functions

    void spi_lld_init (void)
     Low level SPI driver initialization.
    void spi_lld_start (SPIDriver *spip)
     Configures and activates the SPI peripheral.
    void spi_lld_stop (SPIDriver *spip)
     Deactivates the SPI peripheral.
    void spi_lld_select (SPIDriver *spip)
     Asserts the slave select signal and prepares for transfers.
    void spi_lld_unselect (SPIDriver *spip)
     Deasserts the slave select signal.
    void spi_lld_ignore (SPIDriver *spip, size_t n)
     Ignores data on the SPI bus.
    void spi_lld_exchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
     Exchanges data on the SPI bus.
    void spi_lld_send (SPIDriver *spip, size_t n, const void *txbuf)
     Sends data ever the SPI bus.
    void spi_lld_receive (SPIDriver *spip, size_t n, void *rxbuf)
     Receives data from the SPI bus.
    -

    Detailed Description

    -

    STM32 SPI subsystem low level driver header.

    - -

    Definition in file platforms/STM32/spi_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8h_source.html deleted file mode 100644 index d1ee51b..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m32_2spi__lld_8h_source.html +++ /dev/null @@ -1,270 +0,0 @@ - - -ChibiOS/RT: spi_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8c.html deleted file mode 100644 index c77470b..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8c.html +++ /dev/null @@ -1,68 +0,0 @@ - - -ChibiOS/RT: hal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.c File Reference

    -
    -
    - -

    STM8 HAL subsystem low level driver source. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - -

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.

    -Variables

    ROMCONST PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    STM8 HAL subsystem low level driver source.

    - -

    Definition in file platforms/STM8/hal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8c_source.html deleted file mode 100644 index 28d017c..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8c_source.html +++ /dev/null @@ -1,162 +0,0 @@ - - -ChibiOS/RT: hal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8h.html deleted file mode 100644 index 67cd7fb..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8h.html +++ /dev/null @@ -1,91 +0,0 @@ - - -ChibiOS/RT: hal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    hal_lld.h File Reference

    -
    -
    - -

    STM8 HAL subsystem low level driver source. -More...

    -#include "stm8.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define PLATFORM_NAME   "STM8x"
     Platform name.
    #define LSICLK   128000
    #define HSICLK   16000000
    #define CLK_SOURCE_DEFAULT   0
    #define CLK_SOURCE_HSI   0xE1
    #define CLK_SOURCE_LSI   0xD2
    #define CLK_SOURCE_HSE   0xB4
    #define CLK_HSI_DIV1   0
    #define CLK_HSI_DIV2   1
    #define CLK_HSI_DIV4   2
    #define CLK_HSI_DIV8   3
    #define CLK_CPU_DIV1   0
    #define CLK_CPU_DIV2   1
    #define CLK_CPU_DIV4   2
    #define CLK_CPU_DIV8   3
    #define CLK_CPU_DIV16   4
    #define CLK_CPU_DIV32   5
    #define CLK_CPU_DIV64   6
    #define CLK_CPU_DIV128   7
    #define STM8_CLOCK_SOURCE   CLK_SOURCE_DEFAULT
     Clock source setting.
    #define STM8_HSI_DIVIDER   CLK_HSI_DIV8
     HSI clock divider.
    #define STM8_CPU_DIVIDER   CLK_CPU_DIV1
     CPU clock divider.

    -Functions

    void hal_lld_init (void)
     Low level HAL driver initialization.
    -

    Detailed Description

    -

    STM8 HAL subsystem low level driver source.

    - -

    Definition in file platforms/STM8/hal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8h_source.html deleted file mode 100644 index fcb1842..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2hal__lld_8h_source.html +++ /dev/null @@ -1,198 +0,0 @@ - - -ChibiOS/RT: hal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8c.html deleted file mode 100644 index 84206c3..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8c.html +++ /dev/null @@ -1,63 +0,0 @@ - - -ChibiOS/RT: pal_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.c File Reference

    -
    -
    - -

    STM8 GPIO low level driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - -

    -Functions

    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.
    -

    Detailed Description

    -

    STM8 GPIO low level driver code.

    - -

    Definition in file platforms/STM8/pal_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8c_source.html deleted file mode 100644 index 65e48b6..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8c_source.html +++ /dev/null @@ -1,159 +0,0 @@ - - -ChibiOS/RT: pal_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8h.html deleted file mode 100644 index 7c4932e..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8h.html +++ /dev/null @@ -1,121 +0,0 @@ - - -ChibiOS/RT: pal_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pal_lld.h File Reference

    -
    -
    - -

    STM8 GPIO low level driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  gpio_t
     GPIO port representation. More...
    struct  PALConfig
     AT91SAM7 PIO static initializer. More...

    -Defines

    #define PAL_MODE_OUTPUT_PUSHPULL_SLOW   16
     STM8 specific alternate push-pull slow output mode.
    #define PAL_MODE_OUTPUT_OPENDRAIN_SLOW   17
     STM8 specific alternate open-drain slow output mode.
    #define PAL_IOPORTS_WIDTH   8
     Width, in bits, of an I/O port.
    #define PAL_WHOLE_PORT   ((ioportmask_t)0xFF)
     Whole port mask.
    #define IOPORTS   ((PALConfig *)0x5000)
     GPIO ports as a whole.
    #define IOPORT1   ((gpio_t *)0x5000)
     GPIO port A identifier.
    #define IOPORT2   ((gpio_t *)0x5005)
     GPIO port B identifier.
    #define IOPORT3   ((gpio_t *)0x500A)
     GPIO port C identifier.
    #define IOPORT4   ((gpio_t *)0x500F)
     GPIO port D identifier.
    #define IOPORT5   ((gpio_t *)0x5014)
     GPIO port E identifier.
    #define IOPORT6   ((gpio_t *)0x5019)
     GPIO port F identifier.
    #define IOPORT7   ((gpio_t *)0x501E)
     GPIO port G identifier.
    #define IOPORT8   ((gpio_t *)0x5023)
     GPIO port H identifier.
    #define IOPORT9   ((gpio_t *)0x5028)
     GPIO port I identifier.
    #define pal_lld_init(config)   *IOPORTS = *(config)
     Low level PAL subsystem initialization.
    #define pal_lld_readport(port)   ((port)->IDR)
     Reads the physical I/O port states.
    #define pal_lld_readlatch(port)   ((port)->ODR)
     Reads the output latch.
    #define pal_lld_writeport(port, bits)   ((port)->ODR = (bits))
     Writes a bits mask on a I/O port.
    #define pal_lld_setgroupmode(port, mask, mode)   _pal_lld_setgroupmode(port, mask, mode)
     Pads group mode setup.

    -Typedefs

    typedef uint8_t ioportmask_t
     Digital I/O port sized unsigned type.
    typedef gpio_tioportid_t
     Port Identifier.

    -Functions

    void _pal_lld_setgroupmode (ioportid_t port, ioportmask_t mask, uint_fast8_t mode)
     Pads mode setup.

    -Variables

    ROMCONST PALConfig pal_default_config
     PAL setup.
    -

    Detailed Description

    -

    STM8 GPIO low level driver header.

    - -

    Definition in file platforms/STM8/pal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8h_source.html deleted file mode 100644 index 038f443..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2pal__lld_8h_source.html +++ /dev/null @@ -1,286 +0,0 @@ - - -ChibiOS/RT: pal_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8c.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8c.html deleted file mode 100644 index 431c493..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8c.html +++ /dev/null @@ -1,74 +0,0 @@ - - -ChibiOS/RT: serial_lld.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.c File Reference

    -
    -
    - -

    STM8 low level serial driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - -

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.

    -Variables

    SerialDriver SD1
     UART1 serial driver identifier.
    SerialDriver SD3
     UART3 serial driver identifier.
    -

    Detailed Description

    -

    STM8 low level serial driver code.

    - -

    Definition in file platforms/STM8/serial_lld.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8c_source.html deleted file mode 100644 index 3336391..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8c_source.html +++ /dev/null @@ -1,380 +0,0 @@ - - -ChibiOS/RT: serial_lld.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8h.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8h.html deleted file mode 100644 index e8c8185..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8h.html +++ /dev/null @@ -1,102 +0,0 @@ - - -ChibiOS/RT: serial_lld.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial_lld.h File Reference

    -
    -
    - -

    STM8 low level serial driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialConfig
     Generic Serial Driver configuration structure. More...

    -Defines

    #define SD_MODE_PARITY   0x07
     Parity field mask.
    #define SD_MODE_PARITY_NONE   0x00
     No parity.
    #define SD_MODE_PARITY_EVEN   0x05
     Even parity.
    #define SD_MODE_PARITY_ODD   0x07
     Odd parity.
    #define SD_MODE_STOP   0x30
     Stop bits mask.
    #define SD_MODE_STOP_1   0x00
     One stop bit.
    #define SD_MODE_STOP_2   0x20
     Two stop bits.
    #define SD_MODE_STOP_1P5   0x30
     1.5 stop bits.
    #define USE_STM8_UART1   TRUE
     UART1 driver enable switch.
    #define USE_STM8_UART3   TRUE
     UART3 driver enable switch.
    #define _serial_driver_data
     SerialDriver specific data.
    #define BBR(b)   (SYSCLK / (b))
     Macro for baud rate computation.

    -Typedefs

    typedef uint8_t sdflags_t
     Serial Driver condition flags type.

    -Functions

    void sd_lld_init (void)
     Low level serial driver initialization.
    void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
     Low level serial driver configuration and (re)start.
    void sd_lld_stop (SerialDriver *sdp)
     Low level serial driver stop.
    -

    Detailed Description

    -

    STM8 low level serial driver header.

    - -

    Definition in file platforms/STM8/serial_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8h_source.html deleted file mode 100644 index bda43bc..0000000 --- a/ChibiOS_2.0.8/docs/html/platforms_2_s_t_m8_2serial__lld_8h_source.html +++ /dev/null @@ -1,208 +0,0 @@ - - -ChibiOS/RT: serial_lld.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8c.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8c.html deleted file mode 100644 index 2db9c23..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8c.html +++ /dev/null @@ -1,62 +0,0 @@ - - -ChibiOS/RT: chcore.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.c File Reference

    -
    -
    - -

    ARM7 architecture port code. -More...

    -#include "ch.h"
    - -

    Go to the source code of this file.

    - - - -

    -Functions

    void port_halt (void)
    -

    Detailed Description

    -

    ARM7 architecture port code.

    -

    Port related code.

    - -

    Definition in file ports/GCC/ARM7/chcore.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8c_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8c_source.html deleted file mode 100644 index 66802a3..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8c_source.html +++ /dev/null @@ -1,94 +0,0 @@ - - -ChibiOS/RT: chcore.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8h.html deleted file mode 100644 index a717ae6..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8h.html +++ /dev/null @@ -1,120 +0,0 @@ - - -ChibiOS/RT: chcore.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.h File Reference

    -
    -
    - -

    ARM7 architecture port macros and structures. -More...

    -#include <wfi.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define ENABLE_WFI_IDLE   0
     If enabled allows the idle thread to enter a low power mode.
    #define CH_ARCHITECTURE_ARM7
     Macro defining the ARM7 architecture.
    #define CH_ARCHITECTURE_NAME   "ARM"
     Name of the implemented architecture.
    #define CH_CORE_VARIANT_NAME   "ARM7TDMI"
     Name of the architecture variant (optional).
    #define SETUP_CONTEXT(workspace, wsize, pf, arg)
     Platform dependent part of the chThdInit() API.
    #define IDLE_THREAD_STACK_SIZE   4
     Stack size for the system idle thread.
    #define INT_REQUIRED_STACK   0x10
     Per-thread stack overhead for interrupts servicing.
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
     Static working area allocation.
    #define PORT_IRQ_PROLOGUE()
     IRQ prologue code.
    #define PORT_IRQ_EPILOGUE()
     IRQ epilogue code.
    #define PORT_IRQ_HANDLER(id)   __attribute__((naked)) void id(void)
     IRQ handler function declaration.
    #define PORT_FAST_IRQ_HANDLER(id)   __attribute__((interrupt("FIQ"))) void id(void)
     Fast IRQ handler function declaration.
    #define port_init()
     Port-related initialization code.
    #define port_lock()   asm volatile ("msr CPSR_c, #0x9F" : : : "memory")
     Kernel-lock action.
    #define port_unlock()   asm volatile ("msr CPSR_c, #0x1F" : : : "memory")
     Kernel-unlock action.
    #define port_lock_from_isr()
     Kernel-lock action from an interrupt handler.
    #define port_unlock_from_isr()
     Kernel-unlock action from an interrupt handler.
    #define port_disable()
     Disables all the interrupt sources.
    #define port_suspend()   asm volatile ("msr CPSR_c, #0x9F" : : : "memory")
     Disables the interrupt sources below kernel-level priority.
    #define port_enable()   asm volatile ("msr CPSR_c, #0x1F" : : : "memory")
     Enables all the interrupt sources.
    #define port_switch(ntp, otp)
     Performs a context switch between two threads.

    -Typedefs

    typedef uint32_t stkalign_t
     32 bits stack and memory alignment enforcement.
    typedef void * regarm_t
     Generic ARM register.

    -Functions

    void port_halt (void)
    void _port_thread_start (void)
     Start a thread by invoking its work function.
    -

    Detailed Description

    -

    ARM7 architecture port macros and structures.

    -

    Port related structures and macros.

    - -

    Definition in file ports/GCC/ARM7/chcore.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8h_source.html deleted file mode 100644 index f08324c..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chcore_8h_source.html +++ /dev/null @@ -1,442 +0,0 @@ - - -ChibiOS/RT: chcore.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chtypes_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chtypes_8h.html deleted file mode 100644 index 4eea888..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chtypes_8h.html +++ /dev/null @@ -1,85 +0,0 @@ - - -ChibiOS/RT: chtypes.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chtypes.h File Reference

    -
    -
    - -

    ARM7 architecture port system types. -More...

    -#include <stddef.h>
    -#include <stdint.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   const
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef int32_t bool_t
    typedef uint8_t tmode_t
    typedef uint8_t tstate_t
    typedef uint8_t trefs_t
    typedef uint32_t tprio_t
    typedef int32_t msg_t
    typedef int32_t eventid_t
    typedef uint32_t eventmask_t
    typedef uint32_t systime_t
    typedef int32_t cnt_t
    -

    Detailed Description

    -

    ARM7 architecture port system types.

    -

    Port types.

    - -

    Definition in file ports/GCC/ARM7/chtypes.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chtypes_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chtypes_8h_source.html deleted file mode 100644 index 57a42f3..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m7_2chtypes_8h_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - -ChibiOS/RT: chtypes.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c.html deleted file mode 100644 index d2a2bb7..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c.html +++ /dev/null @@ -1,62 +0,0 @@ - - -ChibiOS/RT: chcore.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.c File Reference

    -
    -
    - -

    ARM Cortex-Mx port code. -More...

    -#include "ch.h"
    - -

    Go to the source code of this file.

    - - - - -

    -Functions

    void port_halt (void)
     Halts the system.
    -

    Detailed Description

    -

    ARM Cortex-Mx port code.

    - -

    Definition in file ports/GCC/ARMCMx/chcore.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c_source.html deleted file mode 100644 index beb526d..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8c_source.html +++ /dev/null @@ -1,96 +0,0 @@ - - -ChibiOS/RT: chcore.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h.html deleted file mode 100644 index d449ae3..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h.html +++ /dev/null @@ -1,114 +0,0 @@ - - -ChibiOS/RT: chcore.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.h File Reference

    -
    -
    - -

    ARM Cortex-Mx port macros and structures. -More...

    -#include "nvic.h"
    -#include "cmparams.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define CORTEX_M0   0
     Cortex-M0 variant.
    #define CORTEX_M1   1
     Cortex-M1 variant.
    #define CORTEX_M3   3
     Cortex-M3 variant.
    #define CORTEX_M4   4
     Cortex-M4 variant.
    #define CORTEX_PRIORITY_LEVELS   (1 << CORTEX_PRIORITY_BITS)
     Total priority levels.
    #define CORTEX_MINIMUM_PRIORITY   (CORTEX_PRIORITY_LEVELS - 1)
     Minimum priority level.
    #define CORTEX_MAXIMUM_PRIORITY   0
     Maximum priority level.
    #define CORTEX_BASEPRI_DISABLED   0
     Disabled value for BASEPRI register.
    #define CORTEX_IS_VALID_PRIORITY(n)   (((n) >= 0) && ((n) < CORTEX_PRIORITY_LEVELS))
     Priority level verification macro.
    #define CORTEX_PRIORITY_MASK(n)   ((n) << (8 - CORTEX_PRIORITY_BITS))
     Priority level to priority mask conversion macro.
    #define CORTEX_ENABLE_WFI_IDLE   FALSE
     Enables the use of the WFI instruction in the idle thread loop.
    #define CORTEX_PRIORITY_SYSTICK   (CORTEX_PRIORITY_LEVELS >> 1)
     SYSTICK handler priority.
    #define CORTEX_PRIORITY_SVCALL   (CORTEX_MAXIMUM_PRIORITY + 1)
     SVCALL handler priority.
    #define CORTEX_PRIORITY_PENDSV   CORTEX_MINIMUM_PRIORITY
     PENDSV handler priority.
    #define CORTEX_BASEPRI_KERNEL   CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_SVCALL+1)
     BASEPRI level within kernel lock.
    #define CORTEX_STACK_ALIGNMENT   64
     Stack alignment enforcement.
    #define CH_ARCHITECTURE_ARM
     Macro defining a generic ARM architecture.
    #define CH_ARCHITECTURE_ARM_vxm
     Macro defining the specific ARM architecture.
    #define CH_ARCHITECTURE_NAME   "ARMvx-M"
     Name of the implemented architecture.
    #define CH_CORE_VARIANT_NAME   "Cortex-Mx"
     Name of the architecture variant (optional).
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
     Static working area allocation.

    -Typedefs

    typedef uint64_t stkalign_t __attribute__ ((aligned(8)))
     Stack and memory alignment enforcement.
    typedef void * regarm_t
     Generic ARM register.
    -

    Detailed Description

    -

    ARM Cortex-Mx port macros and structures.

    - -

    Definition in file ports/GCC/ARMCMx/chcore.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h_source.html deleted file mode 100644 index b96a0f9..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chcore_8h_source.html +++ /dev/null @@ -1,331 +0,0 @@ - - -ChibiOS/RT: chcore.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h.html deleted file mode 100644 index e0e2913..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h.html +++ /dev/null @@ -1,84 +0,0 @@ - - -ChibiOS/RT: chtypes.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chtypes.h File Reference

    -
    -
    - -

    ARM Cortex-Mx port system types. -More...

    -#include <stddef.h>
    -#include <stdint.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   const
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef int32_t bool_t
    typedef uint8_t tmode_t
    typedef uint8_t tstate_t
    typedef uint8_t trefs_t
    typedef uint32_t tprio_t
    typedef int32_t msg_t
    typedef int32_t eventid_t
    typedef uint32_t eventmask_t
    typedef uint32_t systime_t
    typedef int32_t cnt_t
    -

    Detailed Description

    -

    ARM Cortex-Mx port system types.

    - -

    Definition in file ports/GCC/ARMCMx/chtypes.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h_source.html deleted file mode 100644 index 75e3706..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_r_m_c_mx_2chtypes_8h_source.html +++ /dev/null @@ -1,131 +0,0 @@ - - -ChibiOS/RT: chtypes.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8c.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8c.html deleted file mode 100644 index 9ad709c..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8c.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: chcore.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.c File Reference

    -
    -
    - -

    AVR architecture port code. -More...

    -#include "ch.h"
    - -

    Go to the source code of this file.

    - - - - - - - - -

    -Functions

    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    void port_halt (void)
     Halts the system.
    void _port_thread_start (void)
     Start a thread by invoking its work function.
    -

    Detailed Description

    -

    AVR architecture port code.

    -

    Port related code.

    - -

    Definition in file ports/GCC/AVR/chcore.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8c_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8c_source.html deleted file mode 100644 index cc5d4ea..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8c_source.html +++ /dev/null @@ -1,187 +0,0 @@ - - -ChibiOS/RT: chcore.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8h.html deleted file mode 100644 index 18cad5b..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8h.html +++ /dev/null @@ -1,120 +0,0 @@ - - -ChibiOS/RT: chcore.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.h File Reference

    -
    -
    - -

    AVR architecture port macros and structures. -More...

    -#include <avr/io.h>
    -#include <avr/interrupt.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define ENABLE_WFI_IDLE   0
     If enabled allows the idle thread to enter a low power mode.
    #define CH_ARCHITECTURE_AVR
     Macro defining the AVR architecture.
    #define CH_ARCHITECTURE_NAME   "AVR"
     Name of the implemented architecture.
    #define CH_CORE_VARIANT_NAME   "MegaAVR"
     Name of the architecture variant (optional).
    #define SETUP_CONTEXT(workspace, wsize, pf, arg)
     Platform dependent part of the chThdInit() API.
    #define IDLE_THREAD_STACK_SIZE   8
     Stack size for the system idle thread.
    #define INT_REQUIRED_STACK   32
     Per-thread stack overhead for interrupts servicing.
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
     Static working area allocation.
    #define PORT_IRQ_PROLOGUE()
     IRQ prologue code.
    #define PORT_IRQ_EPILOGUE()
     IRQ epilogue code.
    #define PORT_IRQ_HANDLER(id)   ISR(id)
     IRQ handler function declaration.
    #define port_init()
     Port-related initialization code.
    #define port_lock()   asm volatile ("cli" : : : "memory")
     Kernel-lock action.
    #define port_unlock()   asm volatile ("sei" : : : "memory")
     Kernel-unlock action.
    #define port_lock_from_isr()
     Kernel-lock action from an interrupt handler.
    #define port_unlock_from_isr()
     Kernel-unlock action from an interrupt handler.
    #define port_disable()   asm volatile ("cli" : : : "memory")
     Disables all the interrupt sources.
    #define port_suspend()   asm volatile ("cli" : : : "memory")
     Disables the interrupt sources below kernel-level priority.
    #define port_enable()   asm volatile ("sei" : : : "memory")
     Enables all the interrupt sources.
    #define port_wait_for_interrupt()
     Enters an architecture-dependent IRQ-waiting mode.

    -Typedefs

    typedef uint8_t stkalign_t
     8 bits stack and memory alignment enforcement.

    -Functions

    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    void port_halt (void)
     Halts the system.
    void _port_thread_start (void)
     Start a thread by invoking its work function.
    -

    Detailed Description

    -

    AVR architecture port macros and structures.

    -

    Port related structures and macros.

    - -

    Definition in file ports/GCC/AVR/chcore.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8h_source.html deleted file mode 100644 index 988a59f..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chcore_8h_source.html +++ /dev/null @@ -1,367 +0,0 @@ - - -ChibiOS/RT: chcore.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chtypes_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chtypes_8h.html deleted file mode 100644 index 1f0cbb4..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chtypes_8h.html +++ /dev/null @@ -1,85 +0,0 @@ - - -ChibiOS/RT: chtypes.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chtypes.h File Reference

    -
    -
    - -

    AVR architecture port system types. -More...

    -#include <stddef.h>
    -#include <stdint.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   const
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef int8_t bool_t
    typedef uint8_t tmode_t
    typedef uint8_t tstate_t
    typedef uint8_t trefs_t
    typedef uint8_t tprio_t
    typedef int16_t msg_t
    typedef uint8_t eventid_t
    typedef uint8_t eventmask_t
    typedef uint16_t systime_t
    typedef int8_t cnt_t
    -

    Detailed Description

    -

    AVR architecture port system types.

    -

    Port types.

    - -

    Definition in file ports/GCC/AVR/chtypes.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chtypes_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chtypes_8h_source.html deleted file mode 100644 index 7e03184..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_a_v_r_2chtypes_8h_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - -ChibiOS/RT: chtypes.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8c.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8c.html deleted file mode 100644 index bf4dce3..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8c.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: chcore.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.c File Reference

    -
    -
    - -

    MSP430 architecture port code. -More...

    -#include "ch.h"
    - -

    Go to the source code of this file.

    - - - - - - - - -

    -Functions

    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    void port_halt (void)
     Halts the system.
    void _port_thread_start (void)
     Start a thread by invoking its work function.
    -

    Detailed Description

    -

    MSP430 architecture port code.

    -

    Port related code.

    - -

    Definition in file ports/GCC/MSP430/chcore.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8c_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8c_source.html deleted file mode 100644 index e4afa77..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8c_source.html +++ /dev/null @@ -1,152 +0,0 @@ - - -ChibiOS/RT: chcore.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8h.html deleted file mode 100644 index b62929d..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8h.html +++ /dev/null @@ -1,122 +0,0 @@ - - -ChibiOS/RT: chcore.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.h File Reference

    -
    -
    - -

    MSP430 architecture port macros and structures. -More...

    -#include <iomacros.h>
    -#include <msp430/common.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define ENABLE_WFI_IDLE   0
     Enables the use of a wait state in the idle thread loop.
    #define CH_ARCHITECTURE_MSP430
     Macro defining the MSP430 architecture.
    #define CH_ARCHITECTURE_NAME   "MSP430"
     Name of the implemented architecture.
    #define CH_CORE_VARIANT_NAME   "MSP430"
     Name of the architecture variant (optional).
    #define SETUP_CONTEXT(workspace, wsize, pf, arg)
     Platform dependent part of the chThdInit() API.
    #define IDLE_THREAD_STACK_SIZE   0
     Stack size for the system idle thread.
    #define INT_REQUIRED_STACK   32
     Per-thread stack overhead for interrupts servicing.
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
     Static working area allocation.
    #define PORT_IRQ_PROLOGUE()
     IRQ prologue code.
    #define PORT_IRQ_EPILOGUE()
     IRQ epilogue code.
    #define PORT_IRQ_HANDLER(id)   interrupt(id) _vect_##id(void)
     IRQ handler function declaration.
    #define port_init()
     Port-related initialization code.
    #define port_lock()   asm volatile ("dint" : : : "memory")
     Kernel-lock action.
    #define port_unlock()   asm volatile ("eint" : : : "memory")
     Kernel-unlock action.
    #define port_lock_from_isr()
     Kernel-lock action from an interrupt handler.
    #define port_unlock_from_isr()
     Kernel-unlock action from an interrupt handler.
    #define port_disable()   asm volatile ("dint" : : : "memory")
     Disables all the interrupt sources.
    #define port_suspend()   asm volatile ("dint" : : : "memory")
     Disables the interrupt sources below kernel-level priority.
    #define port_enable()   asm volatile ("eint" : : : "memory")
     Enables all the interrupt sources.
    #define port_wait_for_interrupt()
     Enters an architecture-dependent IRQ-waiting mode.

    -Typedefs

    typedef uint16_t stkalign_t
     16 bits stack and memory alignment enforcement.
    typedef void * regmsp_t
     Generic MSP430 register.

    -Functions

    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    void port_halt (void)
     Halts the system.
    void _port_thread_start (void)
     Start a thread by invoking its work function.
    -

    Detailed Description

    -

    MSP430 architecture port macros and structures.

    -

    Port related structures and macros.

    - -

    Definition in file ports/GCC/MSP430/chcore.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8h_source.html deleted file mode 100644 index 8b62547..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chcore_8h_source.html +++ /dev/null @@ -1,339 +0,0 @@ - - -ChibiOS/RT: chcore.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chtypes_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chtypes_8h.html deleted file mode 100644 index ff9e4d6..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chtypes_8h.html +++ /dev/null @@ -1,85 +0,0 @@ - - -ChibiOS/RT: chtypes.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chtypes.h File Reference

    -
    -
    - -

    MSP430 architecture port system types. -More...

    -#include <stddef.h>
    -#include <stdint.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   const
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef int16_t bool_t
    typedef uint8_t tmode_t
    typedef uint8_t tstate_t
    typedef uint8_t trefs_t
    typedef uint16_t tprio_t
    typedef int16_t msg_t
    typedef int16_t eventid_t
    typedef uint16_t eventmask_t
    typedef uint16_t systime_t
    typedef int16_t cnt_t
    -

    Detailed Description

    -

    MSP430 architecture port system types.

    -

    Port types.

    - -

    Definition in file ports/GCC/MSP430/chtypes.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chtypes_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chtypes_8h_source.html deleted file mode 100644 index 3aa2e48..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_m_s_p430_2chtypes_8h_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - -ChibiOS/RT: chtypes.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8c.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8c.html deleted file mode 100644 index 91a0cf7..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8c.html +++ /dev/null @@ -1,66 +0,0 @@ - - -ChibiOS/RT: chcore.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.c File Reference

    -
    -
    - -

    PowerPC architecture port code. -More...

    -#include "ch.h"
    - -

    Go to the source code of this file.

    - - - - - - - - -

    -Functions

    void port_halt (void)
     Halts the system.
    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    void _port_thread_start (void)
     Start a thread by invoking its work function.
    -

    Detailed Description

    -

    PowerPC architecture port code.

    - -

    Definition in file ports/GCC/PPC/chcore.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8c_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8c_source.html deleted file mode 100644 index eb5136a..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8c_source.html +++ /dev/null @@ -1,141 +0,0 @@ - - -ChibiOS/RT: chcore.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8h.html deleted file mode 100644 index e4ffcb0..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8h.html +++ /dev/null @@ -1,120 +0,0 @@ - - -ChibiOS/RT: chcore.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.h File Reference

    -
    -
    - -

    PowerPC architecture port macros and structures. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  stkalign_t
     Base type for stack and memory alignment. More...
    struct  eabi_frame
     Mandatory part of a stack frame. More...

    -Defines

    #define ENABLE_WFI_IDLE   0
     Enables the use of the WFI instruction.
    #define PPC_VARIANT_e200z3   3
    #define PPC_VARIANT_e200z4   4
    #define PPC_VARIANT   PPC_VARIANT_e200z3
     Core variant selector.
    #define CH_ARCHITECTURE_PPC
     Unique macro for the implemented architecture.
    #define CH_ARCHITECTURE_NAME   "PowerPC"
     Name of the implemented architecture.
    #define CH_CORE_VARIANT_NAME   "e200z3"
     Name of the architecture variant.
    #define SETUP_CONTEXT(workspace, wsize, pf, arg)
     Platform dependent part of the chThdInit() API.
    #define IDLE_THREAD_STACK_SIZE   0
     Stack size for the system idle thread.
    #define INT_REQUIRED_STACK   128
     Per-thread stack overhead for interrupts servicing.
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)];
     Static working area allocation.
    #define PORT_IRQ_PROLOGUE()
     IRQ prologue code.
    #define PORT_IRQ_EPILOGUE()
     IRQ epilogue code.
    #define PORT_IRQ_HANDLER(id)   void id(void)
     IRQ handler function declaration.
    #define port_init()
     Kernel port layer initialization.
    #define port_lock()   asm volatile ("wrteei 0" : : : "memory")
    #define port_unlock()   asm volatile("wrteei 1" : : : "memory")
    #define port_lock_from_isr()
    #define port_unlock_from_isr()
    #define port_disable()   asm volatile ("wrteei 0" : : : "memory")
    #define port_suspend()   asm volatile ("wrteei 0" : : : "memory")
    #define port_enable()   asm volatile ("wrteei 1" : : : "memory")
    #define port_wait_for_interrupt()

    -Typedefs

    typedef void * regppc_t
     Generic PPC register.

    -Functions

    void port_halt (void)
     Halts the system.
    void port_switch (Thread *ntp, Thread *otp)
     Performs a context switch between two threads.
    void _port_thread_start (void)
     Start a thread by invoking its work function.
    -

    Detailed Description

    -

    PowerPC architecture port macros and structures.

    - -

    Definition in file ports/GCC/PPC/chcore.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8h_source.html deleted file mode 100644 index 97273c0..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chcore_8h_source.html +++ /dev/null @@ -1,376 +0,0 @@ - - -ChibiOS/RT: chcore.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chtypes_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chtypes_8h.html deleted file mode 100644 index 8d77d81..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chtypes_8h.html +++ /dev/null @@ -1,90 +0,0 @@ - - -ChibiOS/RT: chtypes.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chtypes.h File Reference

    -
    -
    - -

    PowerPC architecture port system types. -More...

    -#include <stddef.h>
    -#include <stdint.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   const
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT   __attribute__((packed))
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef volatile int8_t vint8_t
    typedef volatile uint8_t vuint8_t
    typedef volatile int16_t vint16_t
    typedef volatile uint16_t vuint16_t
    typedef volatile int32_t vint32_t
    typedef volatile uint32_t vuint32_t
    typedef int32_t bool_t
    typedef uint8_t tmode_t
    typedef uint8_t tstate_t
    typedef uint8_t trefs_t
    typedef uint32_t tprio_t
    typedef int32_t msg_t
    typedef int32_t eventid_t
    typedef uint32_t eventmask_t
    typedef uint32_t systime_t
    typedef int32_t cnt_t
    -

    Detailed Description

    -

    PowerPC architecture port system types.

    - -

    Definition in file ports/GCC/PPC/chtypes.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chtypes_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chtypes_8h_source.html deleted file mode 100644 index 3cda7b1..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_g_c_c_2_p_p_c_2chtypes_8h_source.html +++ /dev/null @@ -1,145 +0,0 @@ - - -ChibiOS/RT: chtypes.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8c.html b/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8c.html deleted file mode 100644 index 3aea912..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8c.html +++ /dev/null @@ -1,72 +0,0 @@ - - -ChibiOS/RT: chcore.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.c File Reference

    -
    -
    - -

    STM8 architecture port code. -More...

    -#include "ch.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - -

    -Functions

    void _port_switch (Thread *otp)
     Performs a context switch between two threads.
    void _port_thread_start (void)
     Thread start code.
    void port_halt (void)
     Halts the system.

    -Variables

    page0 ReadyList rlist
     Ready list header.
    -

    Detailed Description

    -

    STM8 architecture port code.

    -

    Port related code.

    - -

    Definition in file ports/RC/STM8/chcore.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8c_source.html b/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8c_source.html deleted file mode 100644 index e9f7106..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8c_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - -ChibiOS/RT: chcore.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8h.html deleted file mode 100644 index 19385e5..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8h.html +++ /dev/null @@ -1,133 +0,0 @@ - - -ChibiOS/RT: chcore.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chcore.h File Reference

    -
    -
    - -

    STM8 architecture port macros and structures. -More...

    -#include <intrins.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  stm8_startctx
     Start context. More...
    struct  ReadyList
     Ready list header. More...

    -Defines

    #define STM8_ENABLE_WFI_IDLE   FALSE
     Enables the use of the WFI instruction in the idle thread loop.
    #define CH_ARCHITECTURE_STM8
     Unique macro for the implemented architecture.
    #define CH_ARCHITECTURE_NAME   "STM8"
     Name of the implemented architecture.
    #define SETUP_CONTEXT(workspace, wsize, pf, arg)
     Platform dependent part of the chThdInit() API.
    #define IDLE_THREAD_STACK_SIZE   0
     Stack size for the system idle thread.
    #define INT_REQUIRED_STACK   32
     Per-thread stack overhead for interrupts servicing.
    #define STACK_ALIGN(n)   ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
     Enforces a correct alignment for a stack area size value.
    #define THD_WA_SIZE(n)
     Computes the thread working area global size.
    #define WORKING_AREA(s, n)   stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]
     Static working area allocation.
    #define PORT_IRQ_PROLOGUE()
     IRQ prologue code.
    #define PORT_IRQ_EPILOGUE()
     IRQ epilogue code.
    #define PORT_IRQ_HANDLER(id)   void irq##id(void) interrupt id
     IRQ handler function declaration.
    #define port_init()
     Port-related initialization code.
    #define port_lock()   _sim_()
     Kernel-lock action.
    #define port_unlock()   _rim_()
     Kernel-unlock action.
    #define port_lock_from_isr()
     Kernel-lock action from an interrupt handler.
    #define port_unlock_from_isr()
     Kernel-unlock action from an interrupt handler.
    #define port_disable()   _sim_()
     Disables all the interrupt sources.
    #define port_suspend()   _sim_()
     Disables the interrupt sources that are not supposed to preempt the kernel.
    #define port_enable()   _rim_()
     Enables all the interrupt sources.
    #define port_wait_for_interrupt()   _wfi_()
     Enters an architecture-dependent halt mode.
    #define port_switch(ntp, otp)   _port_switch(otp)
     Performs a context switch between two threads.

    -Typedefs

    typedef uint8_t stkalign_t
     Base type for stack alignment.
    typedef void(* stm8func_t )(void)
     Generic STM8 function pointer.

    -Functions

    void port_halt (void)
     Halts the system.
    void _port_switch (Thread *otp)
     Performs a context switch between two threads.
    void _port_thread_start (void)
     Thread start code.

    -Variables

    page0 ReadyList rlist
     Ready list header.
    -

    Detailed Description

    -

    STM8 architecture port macros and structures.

    -

    Port related structures and macros.

    - -

    Definition in file ports/RC/STM8/chcore.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8h_source.html deleted file mode 100644 index f0f00d7..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chcore_8h_source.html +++ /dev/null @@ -1,376 +0,0 @@ - - -ChibiOS/RT: chcore.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chtypes_8h.html b/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chtypes_8h.html deleted file mode 100644 index e902c9f..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chtypes_8h.html +++ /dev/null @@ -1,103 +0,0 @@ - - -ChibiOS/RT: chtypes.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    chtypes.h File Reference

    -
    -
    - -

    STM8 port system types. -More...

    -#include <stddef.h>
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define INLINE   inline
     Inline function modifier.
    #define ROMCONST   code
     ROM constant modifier.
    #define PACK_STRUCT_STRUCT
     Packed structure modifier (within).
    #define PACK_STRUCT_BEGIN
     Packed structure modifier (before).
    #define PACK_STRUCT_END
     Packed structure modifier (after).

    -Typedefs

    typedef unsigned char uint8_t
    typedef signed char int8_t
    typedef unsigned int uint16_t
    typedef signed int int16_t
    typedef unsigned long uint32_t
    typedef signed long int32_t
    typedef uint8_t uint_fast8_t
    typedef uint16_t uint_fast16_t
    typedef uint32_t uint_fast32_t
    typedef int8_t bool_t
     Boolean, recommended the fastest signed.
    typedef uint8_t tmode_t
     Thread mode flags, uint8_t is ok.
    typedef uint8_t tstate_t
     Thread state, uint8_t is ok.
    typedef uint8_t trefs_t
     Thread references counter, uint8_t is ok.
    typedef uint8_t tprio_t
     Priority, use the fastest unsigned type.
    typedef int16_t msg_t
     Message, use signed pointer equivalent.
    typedef int8_t eventid_t
     Event Id, use fastest signed.
    typedef uint8_t eventmask_t
     Event Mask, recommended fastest unsigned.
    typedef uint16_t systime_t
     System Time, recommended fastest unsigned.
    typedef int16_t cnt_t
     Counter, recommended fastest signed.
    -

    Detailed Description

    -

    STM8 port system types.

    -

    Port types.

    - -

    Definition in file ports/RC/STM8/chtypes.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chtypes_8h_source.html b/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chtypes_8h_source.html deleted file mode 100644 index baa2c42..0000000 --- a/ChibiOS_2.0.8/docs/html/ports_2_r_c_2_s_t_m8_2chtypes_8h_source.html +++ /dev/null @@ -1,181 +0,0 @@ - - -ChibiOS/RT: chtypes.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/pwm_8c.html b/ChibiOS_2.0.8/docs/html/pwm_8c.html deleted file mode 100644 index 1134ece..0000000 --- a/ChibiOS_2.0.8/docs/html/pwm_8c.html +++ /dev/null @@ -1,73 +0,0 @@ - - -ChibiOS/RT: pwm.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pwm.c File Reference

    -
    -
    - -

    PWM Driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - -

    -Functions

    void pwmInit (void)
     PWM Driver initialization.
    void pwmObjectInit (PWMDriver *pwmp)
     Initializes the standard part of a PWMDriver structure.
    void pwmStart (PWMDriver *pwmp, const PWMConfig *config)
     Configures and activates the PWM peripheral.
    void pwmStop (PWMDriver *pwmp)
     Deactivates the PWM peripheral.
    void pwmEnableChannel (PWMDriver *pwmp, pwmchannel_t channel, pwmcnt_t width)
     Enables a PWM channel.
    void pwmDisableChannel (PWMDriver *pwmp, pwmchannel_t channel)
     Disables a PWM channel.
    -

    Detailed Description

    -

    PWM Driver code.

    - -

    Definition in file pwm.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/pwm_8c_source.html b/ChibiOS_2.0.8/docs/html/pwm_8c_source.html deleted file mode 100644 index 7efcdba..0000000 --- a/ChibiOS_2.0.8/docs/html/pwm_8c_source.html +++ /dev/null @@ -1,202 +0,0 @@ - - -ChibiOS/RT: pwm.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/pwm_8h.html b/ChibiOS_2.0.8/docs/html/pwm_8h.html deleted file mode 100644 index 5344384..0000000 --- a/ChibiOS_2.0.8/docs/html/pwm_8h.html +++ /dev/null @@ -1,94 +0,0 @@ - - -ChibiOS/RT: pwm.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    pwm.h File Reference

    -
    -
    - -

    PWM Driver macros and structures. -More...

    -#include "pwm_lld.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define pwmEnableChannelI(pwmp, channel, width)   pwm_lld_enable_channel(pwmp, channel, width)
     Enables a PWM channel.
    #define pwmDisableChannelI(pwmp, channel)   pwm_lld_disable_channel(pwmp, channel)
     Disables a PWM channel.

    -Enumerations

    enum  pwmstate_t { PWM_UNINIT = 0, -PWM_STOP = 1, -PWM_READY = 2 - }
     

    Driver state machine possible states.

    - More...
    enum  pwmmode_t { PWM_OUTPUT_DISABLED = 0, -PWM_OUTPUT_ACTIVE_HIGH = 1, -PWM_OUTPUT_ACTIVE_LOW = 2 - }
     

    PWM logic mode.

    - More...

    -Functions

    void pwmInit (void)
     PWM Driver initialization.
    void pwmObjectInit (PWMDriver *pwmp)
     Initializes the standard part of a PWMDriver structure.
    void pwmStart (PWMDriver *pwmp, const PWMConfig *config)
     Configures and activates the PWM peripheral.
    void pwmStop (PWMDriver *pwmp)
     Deactivates the PWM peripheral.
    void pwmEnableChannel (PWMDriver *pwmp, pwmchannel_t channel, pwmcnt_t width)
     Enables a PWM channel.
    void pwmDisableChannel (PWMDriver *pwmp, pwmchannel_t channel)
     Disables a PWM channel.
    -

    Detailed Description

    -

    PWM Driver macros and structures.

    - -

    Definition in file pwm.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/pwm_8h_source.html b/ChibiOS_2.0.8/docs/html/pwm_8h_source.html deleted file mode 100644 index 4ff19ae..0000000 --- a/ChibiOS_2.0.8/docs/html/pwm_8h_source.html +++ /dev/null @@ -1,171 +0,0 @@ - - -ChibiOS/RT: pwm.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/serial_8c.html b/ChibiOS_2.0.8/docs/html/serial_8c.html deleted file mode 100644 index 136fd33..0000000 --- a/ChibiOS_2.0.8/docs/html/serial_8c.html +++ /dev/null @@ -1,77 +0,0 @@ - - -ChibiOS/RT: serial.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial.c File Reference

    -
    -
    - -

    Serial Driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - -

    -Functions

    void sdInit (void)
     Serial Driver initialization.
    void sdObjectInit (SerialDriver *sdp, qnotify_t inotify, qnotify_t onotify)
     Initializes a generic full duplex driver object.
    void sdStart (SerialDriver *sdp, const SerialConfig *config)
     Configures and starts the driver.
    void sdStop (SerialDriver *sdp)
     Stops the driver.
    void sdIncomingDataI (SerialDriver *sdp, uint8_t b)
     Handles incoming data.
    msg_t sdRequestDataI (SerialDriver *sdp)
     Handles outgoing data.
    void sdAddFlagsI (SerialDriver *sdp, sdflags_t mask)
     Handles communication events/errors.
    sdflags_t sdGetAndClearFlags (SerialDriver *sdp)
     Returns and clears the errors mask associated to the driver.
    -

    Detailed Description

    -

    Serial Driver code.

    - -

    Definition in file serial.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/serial_8c_source.html b/ChibiOS_2.0.8/docs/html/serial_8c_source.html deleted file mode 100644 index 528b650..0000000 --- a/ChibiOS_2.0.8/docs/html/serial_8c_source.html +++ /dev/null @@ -1,313 +0,0 @@ - - -ChibiOS/RT: serial.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/serial_8h.html b/ChibiOS_2.0.8/docs/html/serial_8h.html deleted file mode 100644 index 7343f68..0000000 --- a/ChibiOS_2.0.8/docs/html/serial_8h.html +++ /dev/null @@ -1,148 +0,0 @@ - - -ChibiOS/RT: serial.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    serial.h File Reference

    -
    -
    - -

    Serial Driver macros and structures. -More...

    -#include "serial_lld.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  SerialDriverVMT
     SerialDriver virtual methods table. More...
    struct  _SerialDriver
     Full duplex serial driver class. More...

    -Defines

    #define SD_NO_ERROR   0
     No pending conditions.
    #define SD_CONNECTED   1
     Connection happened.
    #define SD_DISCONNECTED   2
     Disconnection happened.
    #define SD_PARITY_ERROR   4
     Parity error happened.
    #define SD_FRAMING_ERROR   8
     Framing error happened.
    #define SD_OVERRUN_ERROR   16
     Overflow happened.
    #define SD_NOISE_ERROR   32
     Noise on the line.
    #define SD_BREAK_DETECTED   64
     Break detected.
    #define SERIAL_DEFAULT_BITRATE   38400
     Default bit rate.
    #define SERIAL_BUFFERS_SIZE   64
     Serial buffers size.
    #define _serial_driver_methods   _base_asynchronous_channel_methods
     SerialDriver specific methods.
    #define sdPutWouldBlock(sdp)   chOQIsFull(&(sdp)->oqueue)
     Direct output check on a SerialDriver.
    #define sdGetWouldBlock(sdp)   chIQIsEmpty(&(sdp)->iqueue)
     Direct input check on a SerialDriver.
    #define sdPut(sdp, b)   chOQPut(&(sdp)->oqueue, b)
     Direct write to a SerialDriver.
    #define sdPutTimeout(sdp, b, t)   chOQPutTimeout(&(sdp)->iqueue, b, t)
     Direct write to a SerialDriver with timeout specification.
    #define sdGet(sdp)   chIQGet(&(sdp)->iqueue)
     Direct read from a SerialDriver.
    #define sdGetTimeout(sdp, t)   chIQGetTimeout(&(sdp)->iqueue, t)
     Direct read from a SerialDriver with timeout specification.
    #define sdWrite(sdp, b, n)   chOQWriteTimeout(&(sdp)->oqueue, b, n, TIME_INFINITE)
     Direct blocking write to a SerialDriver.
    #define sdWriteTimeout(sdp, b, n, t)   chOQWriteTimeout(&(sdp)->oqueue, b, n, t)
     Direct blocking write to a SerialDriver with timeout specification.
    #define sdAsynchronousWrite(sdp, b, n)   chOQWriteTimeout(&(sdp)->oqueue, b, n, TIME_IMMEDIATE)
     Direct non-blocking write to a SerialDriver.
    #define sdRead(sdp, b, n)   chIQReadTimeout(&(sdp)->iqueue, b, n, TIME_INFINITE)
     Direct blocking read from a SerialDriver.
    #define sdReadTimeout(sdp, b, n, t)   chIQReadTimeout(&(sdp)->iqueue, b, n, t)
     Direct blocking read from a SerialDriver with timeout specification.
    #define sdAsynchronousRead(sdp, b, n)   chIQReadTimeout(&(sdp)->iqueue, b, n, TIME_IMMEDIATE)
     Direct non-blocking read from a SerialDriver.
    #define sdGetStatusChangeEventSource(ip)   (&((ip)->vmt->sevent))
     Returns the status change event source.

    -Typedefs

    typedef struct _SerialDriver SerialDriver
     Structure representing a serial driver.

    -Enumerations

    enum  sdstate_t { SD_UNINIT = 0, -SD_STOP = 1, -SD_READY = 2 - }
     

    Driver state machine possible states.

    - More...

    -Functions

    void sdInit (void)
     Serial Driver initialization.
    void sdObjectInit (SerialDriver *sdp, qnotify_t inotify, qnotify_t onotify)
     Initializes a generic full duplex driver object.
    void sdStart (SerialDriver *sdp, const SerialConfig *config)
     Configures and starts the driver.
    void sdStop (SerialDriver *sdp)
     Stops the driver.
    void sdIncomingDataI (SerialDriver *sdp, uint8_t b)
     Handles incoming data.
    msg_t sdRequestDataI (SerialDriver *sdp)
     Handles outgoing data.
    void sdAddFlagsI (SerialDriver *sdp, sdflags_t mask)
     Handles communication events/errors.
    sdflags_t sdGetAndClearFlags (SerialDriver *sdp)
     Returns and clears the errors mask associated to the driver.
    -

    Detailed Description

    -

    Serial Driver macros and structures.

    - -

    Definition in file serial.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/serial_8h_source.html b/ChibiOS_2.0.8/docs/html/serial_8h_source.html deleted file mode 100644 index e770c6d..0000000 --- a/ChibiOS_2.0.8/docs/html/serial_8h_source.html +++ /dev/null @@ -1,349 +0,0 @@ - - -ChibiOS/RT: serial.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/shell_8c.html b/ChibiOS_2.0.8/docs/html/shell_8c.html deleted file mode 100644 index 7768c2c..0000000 --- a/ChibiOS_2.0.8/docs/html/shell_8c.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: shell.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    shell.c File Reference

    -
    -
    - -

    Simple CLI shell code. -More...

    -#include <stdio.h>
    -#include <string.h>
    -#include "ch.h"
    -#include "hal.h"
    -#include "shell.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - -

    -Functions

    void shellInit (void)
     Shell manager initialization.
    ThreadshellCreate (const ShellConfig *scp, size_t size, tprio_t prio)
     Spawns a new shell.
    void shellPrint (BaseChannel *chp, const char *msg)
     Prints a string.
    void shellPrintLine (BaseChannel *chp, const char *msg)
     Prints a string with a final newline.
    bool_t shellGetLine (BaseChannel *chp, char *line, unsigned size)
     Reads a whole line from the input channel.

    -Variables

    EventSource shell_terminated
     Shell termination event source.
    -

    Detailed Description

    -

    Simple CLI shell code.

    - -

    Definition in file shell.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/shell_8c_source.html b/ChibiOS_2.0.8/docs/html/shell_8c_source.html deleted file mode 100644 index e41658d..0000000 --- a/ChibiOS_2.0.8/docs/html/shell_8c_source.html +++ /dev/null @@ -1,350 +0,0 @@ - - -ChibiOS/RT: shell.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/shell_8h.html b/ChibiOS_2.0.8/docs/html/shell_8h.html deleted file mode 100644 index 0c69351..0000000 --- a/ChibiOS_2.0.8/docs/html/shell_8h.html +++ /dev/null @@ -1,95 +0,0 @@ - - -ChibiOS/RT: shell.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    shell.h File Reference

    -
    -
    - -

    Simple CLI shell header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Structures

    struct  ShellCommand
     Custom command entry type. More...
    struct  ShellConfig
     Shell descriptor type. More...

    -Defines

    #define SHELL_MAX_LINE_LENGTH   64
     Shell maximum input line length.
    #define SHELL_MAX_ARGUMENTS   4
     Shell maximum arguments per command.
    #define SHELL_USE_IPRINTF   TRUE
     Enforces the use of iprintf() on newlib.

    -Typedefs

    typedef void(* shellcmd_t )(BaseChannel *chp, int argc, char *argv[])
     Command handler function type.

    -Functions

    void shellInit (void)
     Shell manager initialization.
    ThreadshellCreate (const ShellConfig *scp, size_t size, tprio_t prio)
     Spawns a new shell.
    void shellPrint (BaseChannel *chp, const char *msg)
     Prints a string.
    void shellPrintLine (BaseChannel *chp, const char *msg)
     Prints a string with a final newline.
    bool_t shellGetLine (BaseChannel *chp, char *line, unsigned size)
     Reads a whole line from the input channel.

    -Variables

    EventSource shell_terminated
     Shell termination event source.
    -

    Detailed Description

    -

    Simple CLI shell header.

    - -

    Definition in file shell.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/shell_8h_source.html b/ChibiOS_2.0.8/docs/html/shell_8h_source.html deleted file mode 100644 index e0becb3..0000000 --- a/ChibiOS_2.0.8/docs/html/shell_8h_source.html +++ /dev/null @@ -1,141 +0,0 @@ - - -ChibiOS/RT: shell.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/spi_8c.html b/ChibiOS_2.0.8/docs/html/spi_8c.html deleted file mode 100644 index 9f5931c..0000000 --- a/ChibiOS_2.0.8/docs/html/spi_8c.html +++ /dev/null @@ -1,85 +0,0 @@ - - -ChibiOS/RT: spi.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    spi.c File Reference

    -
    -
    - -

    SPI Driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    void spiInit (void)
     SPI Driver initialization.
    void spiObjectInit (SPIDriver *spip)
     Initializes the standard part of a SPIDriver structure.
    void spiStart (SPIDriver *spip, const SPIConfig *config)
     Configures and activates the SPI peripheral.
    void spiStop (SPIDriver *spip)
     Deactivates the SPI peripheral.
    void spiSelect (SPIDriver *spip)
     Asserts the slave select signal and prepares for transfers.
    void spiUnselect (SPIDriver *spip)
     Deasserts the slave select signal.
    void spiIgnore (SPIDriver *spip, size_t n)
     Ignores data on the SPI bus.
    void spiExchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
     Exchanges data on the SPI bus.
    void spiSend (SPIDriver *spip, size_t n, const void *txbuf)
     Sends data over the SPI bus.
    void spiReceive (SPIDriver *spip, size_t n, void *rxbuf)
     Receives data from the SPI bus.
    void spiAcquireBus (SPIDriver *spip)
     Gains exclusive access to the SPI bus.
    void spiReleaseBus (SPIDriver *spip)
     Releases exclusive access to the SPI bus.
    -

    Detailed Description

    -

    SPI Driver code.

    - -

    Definition in file spi.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/spi_8c_source.html b/ChibiOS_2.0.8/docs/html/spi_8c_source.html deleted file mode 100644 index ce1ea29..0000000 --- a/ChibiOS_2.0.8/docs/html/spi_8c_source.html +++ /dev/null @@ -1,328 +0,0 @@ - - -ChibiOS/RT: spi.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/spi_8h.html b/ChibiOS_2.0.8/docs/html/spi_8h.html deleted file mode 100644 index aaaa1fc..0000000 --- a/ChibiOS_2.0.8/docs/html/spi_8h.html +++ /dev/null @@ -1,95 +0,0 @@ - - -ChibiOS/RT: spi.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    spi.h File Reference

    -
    -
    - -

    SPI Driver macros and structures. -More...

    -#include "spi_lld.h"
    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Defines

    #define SPI_USE_MUTUAL_EXCLUSION   TRUE
     Enables the mutual exclusion APIs on the SPI bus.

    -Enumerations

    enum  spistate_t { SPI_UNINIT = 0, -SPI_STOP = 1, -SPI_READY = 2, -SPI_ACTIVE = 3 - }
     

    Driver state machine possible states.

    - More...

    -Functions

    void spiInit (void)
     SPI Driver initialization.
    void spiObjectInit (SPIDriver *spip)
     Initializes the standard part of a SPIDriver structure.
    void spiStart (SPIDriver *spip, const SPIConfig *config)
     Configures and activates the SPI peripheral.
    void spiStop (SPIDriver *spip)
     Deactivates the SPI peripheral.
    void spiSelect (SPIDriver *spip)
     Asserts the slave select signal and prepares for transfers.
    void spiUnselect (SPIDriver *spip)
     Deasserts the slave select signal.
    void spiIgnore (SPIDriver *spip, size_t n)
     Ignores data on the SPI bus.
    void spiExchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
     Exchanges data on the SPI bus.
    void spiSend (SPIDriver *spip, size_t n, const void *txbuf)
     Sends data over the SPI bus.
    void spiReceive (SPIDriver *spip, size_t n, void *rxbuf)
     Receives data from the SPI bus.
    -

    Detailed Description

    -

    SPI Driver macros and structures.

    - -

    Definition in file spi.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/spi_8h_source.html b/ChibiOS_2.0.8/docs/html/spi_8h_source.html deleted file mode 100644 index 9473f0b..0000000 --- a/ChibiOS_2.0.8/docs/html/spi_8h_source.html +++ /dev/null @@ -1,156 +0,0 @@ - - -ChibiOS/RT: spi.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/stm32__dma_8c.html b/ChibiOS_2.0.8/docs/html/stm32__dma_8c.html deleted file mode 100644 index f817166..0000000 --- a/ChibiOS_2.0.8/docs/html/stm32__dma_8c.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: stm32_dma.c File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    stm32_dma.c File Reference

    -
    -
    - -

    STM32 DMA helper driver code. -More...

    -#include "ch.h"
    -#include "hal.h"
    - -

    Go to the source code of this file.

    - - - - - - - - -

    -Functions

    void dmaInit (void)
     STM32 DMA helper initialization.
    void dmaEnable (uint32_t dma)
     Enables the specified DMA controller clock.
    void dmaDisable (uint32_t dma)
     Disables the specified DMA controller clock.
    -

    Detailed Description

    -

    STM32 DMA helper driver code.

    - -

    Definition in file stm32_dma.c.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/stm32__dma_8c_source.html b/ChibiOS_2.0.8/docs/html/stm32__dma_8c_source.html deleted file mode 100644 index 6742c7d..0000000 --- a/ChibiOS_2.0.8/docs/html/stm32__dma_8c_source.html +++ /dev/null @@ -1,163 +0,0 @@ - - -ChibiOS/RT: stm32_dma.c Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/stm32__dma_8h.html b/ChibiOS_2.0.8/docs/html/stm32__dma_8h.html deleted file mode 100644 index 7a60f5b..0000000 --- a/ChibiOS_2.0.8/docs/html/stm32__dma_8h.html +++ /dev/null @@ -1,72 +0,0 @@ - - -ChibiOS/RT: stm32_dma.h File Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    stm32_dma.h File Reference

    -
    -
    - -

    STM32 DMA helper driver header. -More...

    - -

    Go to the source code of this file.

    - - - - - - - - - - - - - -

    -Defines

    #define DMA1_ID   0
     DMA1 identifier.
    #define DMA2_ID   1
     DMA2 identifier.

    -Functions

    void dmaInit (void)
     STM32 DMA helper initialization.
    void dmaEnable (uint32_t dma)
     Enables the specified DMA controller clock.
    void dmaDisable (uint32_t dma)
     Disables the specified DMA controller clock.
    -

    Detailed Description

    -

    STM32 DMA helper driver header.

    - -

    Definition in file stm32_dma.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/stm32__dma_8h_source.html b/ChibiOS_2.0.8/docs/html/stm32__dma_8h_source.html deleted file mode 100644 index 90ce422..0000000 --- a/ChibiOS_2.0.8/docs/html/stm32__dma_8h_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - -ChibiOS/RT: stm32_dma.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/stm8_8h_source.html b/ChibiOS_2.0.8/docs/html/stm8_8h_source.html deleted file mode 100644 index 0ddd5c3..0000000 --- a/ChibiOS_2.0.8/docs/html/stm8_8h_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - -ChibiOS/RT: stm8.h Source File - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct___serial_driver.html b/ChibiOS_2.0.8/docs/html/struct___serial_driver.html deleted file mode 100644 index 4d2e1d2..0000000 --- a/ChibiOS_2.0.8/docs/html/struct___serial_driver.html +++ /dev/null @@ -1,97 +0,0 @@ - - -ChibiOS/RT: _SerialDriver Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    _SerialDriver Struct Reference
    - -[Serial Driver] -

    -
    -
    - -

    Full duplex serial driver class. -More...

    - -

    #include <serial.h>

    - -

    Inherits BaseAsynchronousChannel.

    -
    -Collaboration diagram for _SerialDriver:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - -

    -Data Fields

    struct SerialDriverVMTvmt
     Virtual Methods Table.
    -

    Detailed Description

    -

    Full duplex serial driver class.

    -

    This class extends BaseAsynchronousChannel by adding physical I/O queues.

    - -

    Definition at line 133 of file serial.h.

    -

    Field Documentation

    - -
    -
    - - - - -
    struct SerialDriverVMT* _SerialDriver::vmt
    -
    -
    - -

    Virtual Methods Table.

    - -

    Reimplemented from BaseAsynchronousChannel.

    - -

    Definition at line 135 of file serial.h.

    - -

    Referenced by sdObjectInit().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct___serial_driver__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct___serial_driver__coll__graph.png deleted file mode 100644 index d1bacda50c4aa12e73577f2f132bfd247b7a1a68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8418 zcmeAS@N?(olHy`uVBq!ia0y~yVDw>NU@YcfV_;wibuv(AU|?WN@^*J&_z!{$_AZ~y zz`(#>;_2(kev4a%my74+`)XYV1_cIB7srr_IdAV)PLV0y`~Bnj^;K%zo^1jK#jrNc`BSNshw|cw0N>#`T6zfyMA9k{kzm}?#y-TeqJqKwaWhQ z>Q(QwI2m9d^n7Zc!OMFBtyj3!=Y}?==}#(2;=IM`R2gxp>w;@a)(NA$e+SP0J{9R9 zJH!5uigMW>hu>?AuQdIf^sPnjP`78=rKSs|SEMG3%}7zrsylmt;Yw52-Fb^IurfGo zRWM*YAl%5wFptBB;e$&8Q^WEcd2KD1ZJYP~uHClTqwU;jUdixPKY7EwJAR6JTVB8Y z;LoYOdsd~&hCV8roBglVX8ua4YezS@Nzb_Sk9(1bw)N(-S(Sz%n~K(KU-)*@xo_cT zZ%-?Jcp}>6EhMwMOyn z6JifqbF^Epy|v!!|F-p-)uq&FZ+X`}JCv`|B{*ZJUC-S7!}=+E&j0zmSHftyW=f52 zzRA=r_iFyHyYN%|SM{^UNq_cl-4)B9tA2l7g|FsSy`K+$#2hzj^PBuSHh;!JlG*>f`uLgak2O=AHPiSvhE>nr z*^{=Hci#?U_R}-;qN^9byc%-I>QiLi)eW)y+vQ%Z`ySbqJY#3s&Z1n6o6F>_>UKQe zB$;>kOX!Q5)t;8uqV0}GZCjk1ZgTtDg_qp1d5h)aK6neQ%#yEek&J zr^xsHZNGhmSC`1VKAV2aY1-qA>w)V^V_)2VKFjXD$<;lv{N{S`v#Yf{U%#Jx>0;{ICEw2K6#hQ$v1{Ft&kUy? zN_h6S>M6~RX{`Kppy8Ea@KXNN1u?6%4AxKj(p)4K#C}ih~J|LnJR-)qPUKXv`& ziYHuW?5$R=UNiNI#pJl)N0B+guX(m6M!#Sxdbot2p#sGXAtxInIk!tOH0)pf;&RYZ*d%F20*2p0ve$IeWtbr}?Vv z4XYdzm>S^z?mWQ4;LoCl(4v7Iwm%y?n9>)?=vQz*1oj(^3 zJBc?winzILp{|J`AOFs?_PrFmFx&Cqv(--dpXaV^ue^UCV7i&RukYvOdwx&(eSB|P*2LL* zPm5}owB&|QWtQg4+w;h@eDA|8(~8sHcEx+OuVYs(n*S~Dvgq+vy#<$4CcizcqC0WR zZOh*dT3i3DUYOl9e`>CDU-_l$DS@j~CU!px7SFTz)_9?GVOar>aq~>M$!}7P*P0Y( zM@Qe*=ZO{mWIQw4a`)=PGwT$KJx?lm7F~*WzTS4rDdFAm+(~zKw6SeJWcho?%xT-V zl*Fi4Jr;d=?XjF?#n(6Q-n%`^n-b#`l=NZemYw$+mM&xyoFVz^w{*So$wwCRW_s!F zkGu50TWR->ty};4tu(&wX~eQ&Q|{r;xnTP7|GEy5D-v1K+V=nZ zT3kD6-n2zCCtbO``Hgqsn*Yhmex7{t`F>X3z7nSgLa*nYyt69u?)2R^{)Su%N&R2q za6i&tX6NoROBWs!oN?1OahWo^{FiTfzxU0YtCH!bbn*Y=%*$f(G8?w-Dto@>UHBcl z>c`CIZl*sK@$6E0ectHhwxa88x7-ub9?r>~l=JLD;oiNcue%49ESfp%@s5w;y1H-M z*|gT@t(|xG>-xXv<{92RX;$HL^XB78zvG^5QG5JDwX5&InNzuwzC^7op8s@n>glul z-@nhFqy2KJ#wGpb{_#a6Gk(4DUak{mx%+k4WS!mp_J(`3)aAR`PjYshS=)Vf?(d1co6ULc_OHr4%xdI$?ww)g+|4i6 zPC8n&%{1ZWia?e$vFdMcZkm+kI0e}R|8h_8n}5%6-~M=Ui}Y~MSH*ted3Sg1)s9$b z`tIA!SmR5XbJtnyO1YT4S?;ve#GSWQG6S#AVO^bGzIA5Kd(H(GRm*CoE{YSF5t(zl z>~#0Zl;80}oU)oPt%K61_}FbbzLa=*!{x^Lg#uf4nZ{J-PhE^NKFiNAcit!8HC zy65@xH~(`k)R|ebP$f6B>f^_2`<6{ll}bN1Pd9qu3Tc_cXHJ^U+&OdYT5ms3wfVOd zcJ5a3H7&mW<%`blt_?idskhsX-MI5~QrP_Kcgt3*l-iX9?VtSi?Z?gDeL@Nb#YOw4 zeql8J?)*IFl+NE>8kf9I>gDCemN>k4^=fYS;{FqNR$ngsGIQbMFMZv6e#T3;=OvlNpO+rp_ea|1 zZQrAQ?@Kd!?k!d6^;Ca1QN;b_k!PF4+h(~ZJljzEy4PAI^4SlKTa}Y%Zc`Wfd!0pN z^}E`CGkV*tUMkJ}eZ{i>?5*|UmIm*xKhK$SRL`=j?|@E#*4C_ak(a`g#C&I$eH2{y zdZl@%#=kXl{@z^lgWFQwsC@tA+wafvN$4^avjnZwEuXp5{>a9++r2w3Mc&+|sQGfP zQTfrz*y3+bW}UPA9VU62$zaa2XR7Z#)NVh{ynO3<+q$Lmcv{pNvL^d%v!CI!&0b~~ zAH&mwdOtO0+&r$b*KXz;3*{1B2Cx3xdObnjrzcgKm1szAu~BA4fFDe0?{yQW2bXpOvE>|3^M$@$(5ocmrjFH$z>PWk+7ss7BJ zt5s_?X6F2Ve&K6~@#LK+ZuS~|zw9cV{&}rz2oKZdj;d<@Ka*yf&3w7*!q$+@p}Dc? zURDP!cZdA`E~0z-{6gn#nGK5+47yht_bHXnEUrp7y7}?gg{vWpMUDR%ggsj~c}rSi z`R#)5-bQ~PZ$6Tja6*P%gtsv=W#yGi@?O6trkHn$=Nvp{wzr~j@+98QFH@NpvpEOc zGUrj9rhlsEfDYsHMg5+$E??U8;7u15?co~rp+utD`%T~ zMG3pU+k9!!u?t^Ay8U)m{Js%eeC)eNhiJIbie+;W*IxrOE+F{ z*F32Sk~5s;(|^|%n9s|VaXox2#A)r?x8^fmHt#N5%71^`+iBv?*O?PaZm8-nY-@|1 zKT)JtcJ>aX5?uzj{_gxK7r6CvDk?865&ot6_jV(@-0!3N_PM`IWeV+)OY8KVF=3zY zCF7SRUshh&${-=jwE4)qnorYWC#@?wSG!>6&d2di*MmL7&ipuhV`{E+ob)cf1LBR5 zY__(iuX(-OsL}QF)DwZnd^Hc9(%((AzW3q7k_%fI>^RPR+MwYTuebB^GT+@Vo?JK@ z(iGia{Ul-L?x1sFbAERV|8~00{6oRubjs;zqW06?R2Rx?}vcjvF=UAndOq-)x)xU7m?|MR}} ze6jou4=*0(QJGrx^7FZ!xR@q&Bz zp2kn!a!}{l;oAObPR44z)Lpw)c6pl~n?oH-T7s>ucYWTn{G%K1DwJNk^Xtc< zHSa7JW;1jxeHORi>Iuu(hjY@lZQ1kT--WFrmsdsJ&F`DDc7N@;Uyq%xGl?)aMlx1a zP5bM1Y3{k3TQ4s!@8OU2H=J?i!UK*W1iZ=Nh;bO*b{&y7t}c=>I`4X1Tq3wsXIX zz1rL#ZN}ffy57y*-oB1qL#%3sXv+6@hUPP0KDEf(qgA52*s$>Xj55#QGV?F-vb)3< z%y^L)Hes%H{l@A?M}*5PmakU#nX$X=}gVD`GH=~>$i5oZ__pS7~AF-sjL;yJHt`x+A`;At^%nWLB+*iduw7 zFK-k`4GQ~cg@#4>%`e!qLgi5=WdsSykI z%5JVL;DL5LP@28Lds&`skQdiD_~(@F5gT`<+g2Q*)mwEo$GGkG<^OJO_GJ0{ny#%r z#aokEZQ{RNuQ9D(vm#)o{PhhwkGm2#+zr|qf7WO^=jn_mn{;qIKtU zZU?8yy52qZO4H!;$!!bVjp|fBpA=P^`MzV{=j}ZoZ!+10%eJ1;kN@#AZ^z-QaT#ls zW7D=CDxdo^Px$Av$*b4K$gHh%UwtXx4u3tX0{a^d+d+v&t#iOF_b~f!w0a^bwZIkYkGrUIEcbBKlc8=e1Q!ahm z^!Kqh+fRS2UYF^md%sBf-TO~lO{1>X?J=5tMsD_bv#748bJm}Y$&avm+w*N}V98gJ z89RHPSez)ZT@&N>%P%Uo>ude5eHUu3-2Noz%fInTzFz2Vy;o0lcIu!0SiP@2LHg6> zR7suWT{&-ipUG|!s`9ftt$W)@XUVsufAgnqIODcDp6|a4-v0E7e!=+G>DEcpz4>cf&*|Sc`T6hs#WU8||C`*Yxc@V3 zc9HILr)S1@9y=ZT={G;$R=iYpvv-_i*54Uw0m2+-PB}y{g*IUH&0yV~4YiYfcE+iYwLrsZ(NG8C?|Irlg-Aq;EvCwCZR369kv#VE{&R4T8pa}W?41oCd(@p&_Ky6U4zeG*^2L8EO-H~ zQW>snsNy~|@zkFC#n0B-?mWs8!2U`V);IkwApi2N9OIQ0S^xAZ71@~kcN;TFY^-{j z`0Lc2t85MXS8qR{6Dm-2iG2n0*G=AW9cKd0mg-CvwsV-fa=V-wLyrW=Mwo9g`+uvR z@vqw-d?^^_f1fjEljPJGDpoy{d$wI=uIw(3D|3V5%^!Ra+Rks!t+Mu{j3+;~{Dv|D zglP>*R~m;+y4La{hj~v@;7|3{;ad*cQxcZ z^Q-*5#aUhMX4Uz4yX|%*x~Y>&Z9|F^%)EA)mk55?oPK_Dk>0|U!Q%6F=H52nl6^hi zX?n;?t-RUuE?ihr%=dRn-LLEGTlG{e#CI`V>7O=Db-LwqJM#|(zE-)@Z9bp*wAQiP zDen8Z{pKI<1h@Y`;+bD`X;C&Ln`n^iB+L<{b zuCXUmey1<&)u1?p)5ZqMQyKHK%{8n0hdVI zpHFmmt9&m#sr%#jjdK=Lqw2Dqo&Vd<&Rjh6Z@AITePyq%sFv2BS#u|BTdu{0nZNs< zsO{*fG05znBRIps^6193Q`fBBT6!|Ot*`#q%jjTR+tbgEZ=9?5@@r?y>$}xKD<;3) z!t-u!ef}ZOY?axHk&Bo7TX^0&o%7;hmQ&fUubt$dsj2G9y~)--Gw4sll6KXTmcEm% z)~;c_wo-iFoR695?@UgbT4=tVQ}yrPl9Oj*oC-@y4hS_X8wfh2znQa7==iqy1i2!Q z>Z0R)ZSy^>?pl6d7n1c-T}5z)>b9)1>o=dh;kx}>aJ}uMb%vM2+2`$xKKC}3{ahbM zXtJt;fuP5pYnEp-GGAKc6`a|U`Lu??XAn3-mp%-uJxD z^Tkf|`o~UrCgFoKZbo^&_gAwHo0&QFNnS^?Zl{v3t#-ox_fFHFMEXZfAcwC znAOk5+_+md`|`cm_qU&~k^iG~(96@ybnlN;&-!U9$_9;}vNJladCgL~>2z}M?&aw( zuSRdz`@3yssnzn?lTY@Ux2@Y4HuH>S@qDv%bCB=ubML+xUmJ8uYV((gwzl5;EiLwKFaNo9Qf>IA^}e&q9)4+1 zy|%_WEw?80|GZ<_=U>k%j=#n^N7vxx#G|kKU(3o|HC~y2_CWFSsmo8Da!ycMF>hY# z``4g;=&_93Tebf!c=Au`cxS#$RmSrj0$Z6hZ0^NeRs-nrf4WxMn7 za!^lrj_$P0XP>Uz^hsdG3Xj{{?tV&Anpiiz*edD!yXW@uyXIAGTDA7IhUePMV*4{S zdZsJ$r!JYhUH0dZBcH;>wpM=bvOiL|<$%xo{M^{0z!z1oPOS9%75)BL?tlMSt(K%t!qOafX{joi1rCOeBwDXDY!q+R=&)v~fv%R1xo?iX$z~TA3 zmftZA37S+tfJp)+KUQ+^wR2AbORmPxIh zb@!|5Tlt!4PoG~cZD6#U^eJ_WAX7r*!&qr|Us4Iee~63Ca4&oc6Bh`I}$YuBk3> zS+`tj#?Iimn-6xgroYQd=3o*wUB12irEgl<{F%F#@7(!#zSH&Klka9+z58m(;zu^q zi$5RnlwT0#deQs2SJf@c$0`AGnd!^DZfz}ovu-}0|NffpB+jI;A@j1HmF3Kw_xZWG|07;RX?K3akao?UF|2^f!EQSS(wr<;Yf3D9qd-K|=<2@I) zwrt1>`(ABV|K)M8^Yy@7ko_XA?`k~#mtFpLHhj;crp|@0HJ4lW*M6B=ROWwp#@+SY zvEEx14Fac|<;VRB5?OkF!j(H048G-Ez392%-@mqCmAzN4?`Tin!K!2sxP4pB&eY8* z=~n6QeblDMNbZ`qsj#eT$^4I{Ck_eDSdndOd%9lj=F&;8b24}S*mB|Pl&Ix8MVB<6 z6rw|q)eTJD_OO9v;_S-d%NgTIl}L&`Yq z)6cYDwN`U?)SsHdJ=^JeuvX{Z>BZi+*c7_`XG7{!e`~VPo>* z-Jy%s8-1)o&(%G7^6F93{-bUQOw8Zru@t3yy?d*x>%ERI)?ahR=G%`femT9cVz|;V zZQ8e^CsV5L+}ZO)c44+->dKRM`4YB7McsPep|m%8)8pWkPxo`j@@p~ge&Qg;E^qU* z#&f^v<-hE*B|jS%zIIGiFlf}7SFxygd+|$SRbM&lvg_hU?@1iF+SM@U*Dtx+jVm+X zS$SSJGo3r(#p~$r0WW3=h&6IPxp;m1yO*Am`|87r%uP(^eyE7Qzw3V6I?jh1W;0fJ zsND{?Uj8#})@@LIwD7fN%SoB}yLI^b5}D+d`OMs7(YMue)xOCNt8eY5RkDqo6%~&<&)x0q{hK~3^U;rwyZ5irx@BElSkmSB^7F1|Us~2Jy(KuKVfpg; z`%I^Lyznu$-nw<`V&f9qdvo?)-EqS$P+*1wWEY*kbyI zWy{Q?MS8!_vb*x3YvbiNzU_OgOJupZ;(4d8R4ie1SZew4h;Zqrlj_xew(F-X6*=o^ zrFEjl{^v=5wwd`W1!g$3RepY!d2dhU!qY1_w~Eb>IgCDy18O`Ui7Z;c;%D`8Nv)jy zj|a`H|7-W{m#o=0;U~{^wKn$zCf8}YGq`wHPxPCeZ`bnl#YS(wDUN9?c=?=)q0G*LKVJ z=6-FGQwvD>Y4>jO&pQPVr&ZdRM0bc@ic>7TeEUxP)jQK!G=z7*TD6*M#~$fVk{k~< ztFGmZ@d~_fn8mF_SmkT`0T#E8gf;eazA&QAV}Swy+-A4i!T07gpVbS6UTJf^5?RxQ z%a^;aTFAfdGAPVy3S>`gsQ8$)PbyMnYZ)Vd)eMFQC|z=B7hwU@)mt~8MnUJ!B$n3f zJ$U9hn>_zt%aRjjyjtvyoGgF}c1 z)`ww*Im+A|+)uD+%g*Hpv>lHY`|R8gTGMB9r7f+wU>5 z<#!4}$>jOm^0*g5U0nxQj8rCj$`&3GTzJ}n_0baaIZ2l}2AbCy7#J!*YXR`j6=J#v zXO|V!bz~GP7&G<7g{Mh}U-0o1A diff --git a/ChibiOS_2.0.8/docs/html/struct_a_d_c_config.html b/ChibiOS_2.0.8/docs/html/struct_a_d_c_config.html deleted file mode 100644 index 324e4c6..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_a_d_c_config.html +++ /dev/null @@ -1,60 +0,0 @@ - - -ChibiOS/RT: ADCConfig Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    ADCConfig Struct Reference
    - -[ADC Low Level DriverSTM32 ADC Support] -

    -
    -
    - -

    Driver configuration structure. -More...

    - -

    #include <adc_lld.h>

    - -
    -

    Detailed Description

    -

    Driver configuration structure.

    -
    Note:
    It could be empty on some architectures.
    - -

    Definition at line 99 of file templates/adc_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_a_d_c_conversion_group.html b/ChibiOS_2.0.8/docs/html/struct_a_d_c_conversion_group.html deleted file mode 100644 index 0e173e6..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_a_d_c_conversion_group.html +++ /dev/null @@ -1,240 +0,0 @@ - - -ChibiOS/RT: ADCConversionGroup Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    ADCConversionGroup Struct Reference
    - -[ADC Low Level DriverSTM32 ADC Support] -

    -
    -
    - -

    Conversion group configuration structure. -More...

    - -

    #include <adc_lld.h>

    - - - - - - - - - - - - - - - - - - - - -

    -Data Fields

    bool_t acg_circular
     Enables the circular buffer mode for the group.
    adc_channels_num_t acg_num_channels
     Number of the analog channels belonging to the conversion group.
    uint32_t acg_cr1
     ADC CR1 register initialization data.
    uint32_t acg_cr2
     ADC CR2 register initialization data.
    uint32_t acg_smpr1
     ADC SMPR1 register initialization data.
    uint32_t acg_smpr2
     ADC SMPR2 register initialization data.
    uint32_t acg_sqr1
     ADC SQR1 register initialization data.
    uint32_t acg_sqr2
     ADC SQR2 register initialization data.
    uint32_t acg_sqr3
     ADC SQR3 register initialization data.
    -

    Detailed Description

    -

    Conversion group configuration structure.

    -

    This implementation-dependent structure describes a conversion operation.

    - -

    Definition at line 83 of file templates/adc_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Enables the circular buffer mode for the group.

    - -

    Definition at line 87 of file templates/adc_lld.h.

    - -

    Referenced by CH_IRQ_HANDLER().

    - -
    -
    - -
    - -
    - -

    Number of the analog channels belonging to the conversion group.

    - -

    Definition at line 91 of file templates/adc_lld.h.

    - -
    -
    - -
    - -
    - -

    ADC CR1 register initialization data.

    -
    Note:
    All the required bits must be defined into this field except ADC_CR1_SCAN that is enforced inside the driver.
    - -

    Definition at line 146 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    - -
    - -

    ADC CR2 register initialization data.

    -
    Note:
    All the required bits must be defined into this field except ADC_CR2_DMA and ADC_CR2_ADON that are enforced inside the driver.
    - -

    Definition at line 153 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    - -
    - -

    ADC SMPR1 register initialization data.

    - -

    Definition at line 157 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    - -
    - -

    ADC SMPR2 register initialization data.

    - -

    Definition at line 161 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    - -
    - -

    ADC SQR1 register initialization data.

    - -

    Definition at line 165 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    - -
    - -

    ADC SQR2 register initialization data.

    - -

    Definition at line 169 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    - -
    - -

    ADC SQR3 register initialization data.

    - -

    Definition at line 173 of file platforms/STM32/adc_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_a_d_c_driver.html b/ChibiOS_2.0.8/docs/html/struct_a_d_c_driver.html deleted file mode 100644 index 10511aa..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_a_d_c_driver.html +++ /dev/null @@ -1,275 +0,0 @@ - - -ChibiOS/RT: ADCDriver Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    ADCDriver Struct Reference
    - -[ADC Low Level DriverSTM32 ADC Support] -

    -
    -
    - -

    Structure representing an ADC driver. -More...

    - -

    #include <adc_lld.h>

    -
    -Collaboration diagram for ADCDriver:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - -

    -Data Fields

    adcstate_t ad_state
     Driver state.
    const ADCConfigad_config
     Current configuration data.
    Semaphore ad_sem
     Synchronization semaphore.
    adccallback_t ad_callback
     Current callback function or NULL.
    adcsample_tad_samples
     Current samples buffer pointer or NULL.
    size_t ad_depth
     Current samples buffer depth or 0.
    const ADCConversionGroupad_grpp
     Current conversion group pointer or NULL.
    ADC_TypeDef * ad_adc
     Pointer to the ADCx registers block.
    DMA_Channel_TypeDef * ad_dma
     Pointer to the DMA channel registers block.
    uint32_t ad_dmaprio
     DMA priority bit mask.
    -

    Detailed Description

    -

    Structure representing an ADC driver.

    - -

    Definition at line 106 of file templates/adc_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Driver state.

    - -

    Definition at line 110 of file templates/adc_lld.h.

    - -

    Referenced by adcObjectInit(), adcStart(), adcStartConversion(), adcStop(), adcStopConversion(), adcWaitConversion(), and CH_IRQ_HANDLER().

    - -
    -
    - -
    -
    - - - - -
    const ADCConfig * ADCDriver::ad_config
    -
    -
    - -

    Current configuration data.

    - -

    Definition at line 114 of file templates/adc_lld.h.

    - -

    Referenced by adcObjectInit(), and adcStart().

    - -
    -
    - -
    - -
    - -

    Synchronization semaphore.

    - -

    Definition at line 118 of file templates/adc_lld.h.

    - -

    Referenced by adcObjectInit(), adcStopConversion(), adcWaitConversion(), and CH_IRQ_HANDLER().

    - -
    -
    - -
    - -
    - -

    Current callback function or NULL.

    - -

    Definition at line 122 of file templates/adc_lld.h.

    - -

    Referenced by adcObjectInit(), adcStartConversion(), and CH_IRQ_HANDLER().

    - -
    -
    - -
    - -
    - -

    Current samples buffer pointer or NULL.

    - -

    Definition at line 126 of file templates/adc_lld.h.

    - -

    Referenced by adcObjectInit(), adcStartConversion(), and CH_IRQ_HANDLER().

    - -
    -
    - -
    -
    - - - - -
    size_t ADCDriver::ad_depth
    -
    -
    - -

    Current samples buffer depth or 0.

    - -

    Definition at line 130 of file templates/adc_lld.h.

    - -

    Referenced by adcObjectInit(), adcStartConversion(), and CH_IRQ_HANDLER().

    - -
    -
    - -
    - -
    - -

    Current conversion group pointer or NULL.

    - -

    Definition at line 134 of file templates/adc_lld.h.

    - -

    Referenced by adcObjectInit(), adcStartConversion(), adcStopConversion(), and CH_IRQ_HANDLER().

    - -
    -
    - -
    -
    - - - - -
    ADC_TypeDef* ADCDriver::ad_adc
    -
    -
    - -

    Pointer to the ADCx registers block.

    - -

    Definition at line 226 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    -
    - - - - -
    DMA_Channel_TypeDef* ADCDriver::ad_dma
    -
    -
    - -

    Pointer to the DMA channel registers block.

    - -

    Definition at line 230 of file platforms/STM32/adc_lld.h.

    - -
    -
    - -
    - -
    - -

    DMA priority bit mask.

    - -

    Definition at line 234 of file platforms/STM32/adc_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_a_d_c_driver__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_a_d_c_driver__coll__graph.png deleted file mode 100644 index 6b1bc6a0b67692ac56e818464d279d2267d43751..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10565 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 diff --git a/ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel.html b/ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel.html deleted file mode 100644 index bf57f47..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel.html +++ /dev/null @@ -1,99 +0,0 @@ - - -ChibiOS/RT: BaseAsynchronousChannel Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    BaseAsynchronousChannel Struct Reference
    - -[I/O Channels] -

    -
    -
    - -

    Base asynchronous channel class. -More...

    - -

    #include <chioch.h>

    - -

    Inherits BaseChannel.

    - -

    Inherited by _SerialDriver.

    -
    -Collaboration diagram for BaseAsynchronousChannel:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - -

    -Data Fields

    struct BaseAsynchronousChannelVMTvmt
     Virtual Methods Table.
    -

    Detailed Description

    -

    Base asynchronous channel class.

    -

    This class extends BaseChannel by adding event sources fields for asynchronous I/O for use in an event-driven environment.

    - -

    Definition at line 250 of file chioch.h.

    -

    Field Documentation

    - -
    - -
    - -

    Virtual Methods Table.

    - -

    Reimplemented from BaseChannel.

    - -

    Reimplemented in _SerialDriver.

    - -

    Definition at line 252 of file chioch.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel__coll__graph.png deleted file mode 100644 index 1e814efcbfea5cd90a76c9defd82677b029d93ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8084 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 Kb6Mw<&;$TghB1i% diff --git a/ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel_v_m_t.html b/ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel_v_m_t.html deleted file mode 100644 index 844e412..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_base_asynchronous_channel_v_m_t.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: BaseAsynchronousChannelVMT Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    BaseAsynchronousChannelVMT Struct Reference
    - -[I/O Channels] -

    -
    -
    - -

    BaseAsynchronousChannel virtual methods table. -More...

    - -

    #include <chioch.h>

    - -
    -

    Detailed Description

    -

    BaseAsynchronousChannel virtual methods table.

    - -

    Definition at line 239 of file chioch.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_base_channel.html b/ChibiOS_2.0.8/docs/html/struct_base_channel.html deleted file mode 100644 index 843135a..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_base_channel.html +++ /dev/null @@ -1,99 +0,0 @@ - - -ChibiOS/RT: BaseChannel Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    BaseChannel Struct Reference
    - -[I/O Channels] -

    -
    -
    - -

    Base channel class. -More...

    - -

    #include <chioch.h>

    - -

    Inherits BaseSequentialStream.

    - -

    Inherited by BaseAsynchronousChannel.

    -
    -Collaboration diagram for BaseChannel:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - -

    -Data Fields

    struct BaseChannelVMTvmt
     Virtual Methods Table.
    -

    Detailed Description

    -

    Base channel class.

    -

    This class represents a generic, byte-wide, I/O channel. This class introduces generic I/O primitives with timeout specification.

    - -

    Definition at line 89 of file chioch.h.

    -

    Field Documentation

    - -
    -
    - - - - -
    struct BaseChannelVMT* BaseChannel::vmt
    -
    -
    - -

    Virtual Methods Table.

    - -

    Reimplemented from BaseSequentialStream.

    - -

    Reimplemented in BaseAsynchronousChannel, and _SerialDriver.

    - -

    Definition at line 91 of file chioch.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_base_channel__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_base_channel__coll__graph.png deleted file mode 100644 index b03c9fbe3815dceb73b761458d802fc170d34506..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6255 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%0D@zEyC9e zBsN*xv*>ZsdCDHNaHq6d`{ZVV{gRp${GruPCc1A)Jj`}Kb;&91^?M%eZkgqM_U5+- zyT?m*HS##ix#0n?`pVVoue@12$DHe`)!lMN=+Fs+ b!m)q+hTrZik(k2!0wm_?>gTe~DWM4fnt|M( diff --git a/ChibiOS_2.0.8/docs/html/struct_base_channel_v_m_t.html b/ChibiOS_2.0.8/docs/html/struct_base_channel_v_m_t.html deleted file mode 100644 index 7a240cb..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_base_channel_v_m_t.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: BaseChannelVMT Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    BaseChannelVMT Struct Reference
    - -[I/O Channels] -

    -
    -
    - -

    BaseChannel virtual methods table. -More...

    - -

    #include <chioch.h>

    - -
    -

    Detailed Description

    -

    BaseChannel virtual methods table.

    - -

    Definition at line 78 of file chioch.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_base_sequential_stream.html b/ChibiOS_2.0.8/docs/html/struct_base_sequential_stream.html deleted file mode 100644 index dda86d5..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_base_sequential_stream.html +++ /dev/null @@ -1,95 +0,0 @@ - - -ChibiOS/RT: BaseSequentialStream Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    BaseSequentialStream Struct Reference
    - -[Data Streams] -

    -
    -
    - -

    Base stream class. -More...

    - -

    #include <chstreams.h>

    - -

    Inherited by BaseChannel, and MemoryStream.

    -
    -Collaboration diagram for BaseSequentialStream:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - -

    -Data Fields

    struct BaseSequentialStreamVMTvmt
     Virtual Methods Table.
    -

    Detailed Description

    -

    Base stream class.

    -

    This class represents a generic blocking unbuffered sequential data stream.

    - -

    Definition at line 76 of file chstreams.h.

    -

    Field Documentation

    - -
    - -
    - -

    Virtual Methods Table.

    - -

    Reimplemented in BaseChannel, BaseAsynchronousChannel, _SerialDriver, and MemoryStream.

    - -

    Definition at line 78 of file chstreams.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_base_sequential_stream__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_base_sequential_stream__coll__graph.png deleted file mode 100644 index 805dec2698e25e7af8959e2f8ae61bb2602f1b94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2453 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 diff --git a/ChibiOS_2.0.8/docs/html/struct_base_sequential_stream_v_m_t.html b/ChibiOS_2.0.8/docs/html/struct_base_sequential_stream_v_m_t.html deleted file mode 100644 index 0d7df68..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_base_sequential_stream_v_m_t.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: BaseSequentialStreamVMT Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    BaseSequentialStreamVMT Struct Reference
    - -[Data Streams] -

    -
    -
    - -

    BaseSequentialStream virtual methods table. -More...

    - -

    #include <chstreams.h>

    - -
    -

    Detailed Description

    -

    BaseSequentialStream virtual methods table.

    - -

    Definition at line 67 of file chstreams.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_c_a_n_config.html b/ChibiOS_2.0.8/docs/html/struct_c_a_n_config.html deleted file mode 100644 index ca28acb..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_c_a_n_config.html +++ /dev/null @@ -1,152 +0,0 @@ - - -ChibiOS/RT: CANConfig Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    CANConfig Struct Reference
    - -[CAN Low Level DriverSTM32 CAN Support] -

    -
    -
    - -

    Driver configuration structure. -More...

    - -

    #include <can_lld.h>

    -
    -Collaboration diagram for CANConfig:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - -

    -Data Fields

    uint32_t cc_mcr
     CAN MCR register initialization data.
    uint32_t cc_btr
     CAN BTR register initialization data.
    uint32_t cc_num
     Number of elements into the filters array.
    const CANFiltercc_filters
     Pointer to an array of CANFilter structures.
    -

    Detailed Description

    -

    Driver configuration structure.

    -
    Note:
    It could be empty on some architectures.
    - -

    Definition at line 149 of file templates/can_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    CAN MCR register initialization data.

    -
    Note:
    Some bits in this register are enforced by the driver regardless their status in this field.
    - -

    Definition at line 213 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    - -
    - -

    CAN BTR register initialization data.

    -
    Note:
    Some bits in this register are enforced by the driver regardless their status in this field.
    - -

    Definition at line 219 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Number of elements into the filters array.

    -
    Note:
    By setting this field to zero a default filter is enabled that allows all frames, this should be adequate for simple applications.
    - -

    Definition at line 225 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    -
    - - - - -
    const CANFilter* CANConfig::cc_filters
    -
    -
    - -

    Pointer to an array of CANFilter structures.

    -
    Note:
    This field can be set to NULL if the field cc_num is set to zero.
    - -

    Definition at line 231 of file platforms/STM32/can_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_c_a_n_config__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_c_a_n_config__coll__graph.png deleted file mode 100644 index 9745f2e76eff52ef2ad9bd71a0a6aee12edec9cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3241 zcmeAS@N?(olHy`uVBq!ia0y~yU?^Zi( z0|NtliKnkC`z>x6UM`-O@2hng7_7JLZ>(SW+UO%wGw-bX`cfjvuP1-e zntZwRP`P!U+Z2O8oHkywdfA8Ii=hj$Usc{cm{Gi8m)wIQUOC_D8=(o?g3o0qXl1Kv zS{Z8Y`y2Xu$-3T+w+^hzFS#$ATKiM{a_#=_f%6BSASo1jq~T;m)ov9F)^O~ ztZ%`b6P^oPwkmw}=y}lr^Qt9Bh{a0gm8_e152ms^Tb$fpJNwIprzQq1lbz<@2$?ST z%UqP_;gU}lX(wvmm%hE5am#sHLD1yCJF;fz+gC{(@_hPj)$7STyQisZOC0i4e5e$^ zD_^hI%8>V^kYCp3z1k&93WCmS%(>Duhs7&|JE;FiM;|PxCpRC+QnS8LMN^*j%ktokq^|G#tV&QrgoW!efR6D} zmtXVESZn^pT}CaFCLfSker=^PTBN4%s{drW!me7XKgD!ThD_zc%%*QTe=k5v9nsdeG{i97!mWQ-Xes|Gi&XZSvR3@%02-;l` z^l8?1w^y$ZC~>K8RZwpPk?jjjE;1rAx(uhv@p8$JS`E+Jbvjl&jSOG(`j+PJmrsJv zS*7ojs$e>x{&%{o$peLk)}lrJ57HULs&)G^PF-H-QkrxETvEuOm<208@QF%pJ#g7N z&!(>Gc<=Gx>5KhqE_0n4?WU``HCILpSM@h306A=f_s*2Xzo76?j)^3IX?&6e=~(4j-K*tcGoRh_w^ z{QX*EIXC4G&C}P_F(1foxXB{Hoh`@X5n;Ulmf~HO2V1X}x*yD7@q3q3Cwnc2jltU3 zvh2yTH^;M2gZz2poKGJk!TN^v>;#k9+>& z(VgE0Wr?M8%k^x&zf?XvZIis4;s^Wq-Jhiy46fCbq!hkelD}8EyI8%~R9&T)a* zk9+5`qr=0@_Wa(wKX?D#lG}^Bi~q+)-u&>c+IoHN+r>G~6E7=Imo9$uYn}e?od4bX z>z{v)NcChb$!X4p(P8PUcwB-yT|6 zb-Xv0p`fI2orU<8KhONacX40Wj;YP(`ua5X`?0ryzcbF5R1A17>EpZ4V@C+E%d7ppH` zH>_$*->zTV!Jg~?F*?uYWvs@2w!M1q&!x_o7M!uB?EF`+&!5h(+B17kkZnh%;Ek4b z>z(DN1ajv{@}CKsBH#qBm^-Tc-tX9$t*d4c=2oj{Z#*-yTIp#2WU(dgZuT>5%fN*f zEGNwgjCXtS&jI4)mKk~?{3`Ar9VXfeX)xTWzPzC6p-q_O(jn}hfERwt*LXRV9b+2lQ4 z&-J8tE=oP>$@=d0_V@peZ{On^6}!*(^o!g1d@8~_^6%Tl?5p|t@3`v0sr$CA$=#QG zisQk*^LIRyHdG{B%P4ACbtLTR>s2$4ZYkRJI=ygqQ5Bb)Y_CSpwAZU+k4nAy*S&TqwY5E_(0(~%M9O9R!zD?gK9CTGub9wmF+w7J#CnsHX zxPGvIYQOeu{rgr)?hakLi2R9Ui-x@u7b#=8x$%}wBZ`{tly}f<$)1^`#ep{q= zRDaL&c^nWW9oBwn(UYZ8D9s9RwX4GW;+n7fhqH;9M%#~?AKtCE|54da*23-->51Qc zkF1@wAbNUuWl&yh-Okg@LYyVOiR-Nc_B~Z(-|=$GU$fgwl{y`kEV-=(;J`%QPRO=34#?yu~3b%}OUE_k!3=0ZtQ zi!`jTb<;0c!PpSe6ZhbT=f5S(c0FCEuD7*PX!7fudZFi=5*2U1K45pqGxqaI!Pd!A zYbGmmsZVsi-1+j-?3A3_PBXg-f_~oA%kFu|Ga(mTr>?5%QrvuG4Xc^sLzSXqdZ*ZZ z)!lX=74I{m!ESl2EP_wu>6{JfJxJwjoqIdFLw&&!P56ksmA14e(@<&-a!V_fQ?wj0*zr96qAcDdJ(OMNPbuG43X_#?Qe`rRg$v~d%9lB3e31?X&dkRa0!dXoF@+0{WH;_Xi==2j=uim zGc%1hZjv@VefsppPhDysuC0yUQTjS;%^Memi!AT%>=bV2m+zZ;cZFs7JDGLy`{h*E zXE1Hgx!II^d)v`dc~^37Zc>ekdv#<2y!8oACa{JQ5u!{C1#%5nmtTBdvsyV;>6-1Q s-3&F>L2;K4*)zs?$3jXAl|S+h^A;$!7iq9CFfcH9y85}Sb4q9e0FY($z5oCK diff --git a/ChibiOS_2.0.8/docs/html/struct_c_a_n_driver.html b/ChibiOS_2.0.8/docs/html/struct_c_a_n_driver.html deleted file mode 100644 index 9dede97..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_c_a_n_driver.html +++ /dev/null @@ -1,303 +0,0 @@ - - -ChibiOS/RT: CANDriver Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    CANDriver Struct Reference
    - -[CAN Low Level DriverSTM32 CAN Support] -

    -
    -
    - -

    Structure representing an CAN driver. -More...

    - -

    #include <can_lld.h>

    -
    -Collaboration diagram for CANDriver:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Fields

    canstate_t cd_state
     Driver state.
    const CANConfigcd_config
     Current configuration data.
    Semaphore cd_txsem
     Transmission queue semaphore.
    Semaphore cd_rxsem
     Receive queue semaphore.
    EventSource cd_rxfull_event
     One or more frames become available.
    EventSource cd_txempty_event
     One or more transmission slots become available.
    EventSource cd_error_event
     A CAN bus error happened.
    canstatus_t cd_status
     Error flags set when an error event is broadcasted.
    EventSource cd_sleep_event
     Entering sleep state event.
    EventSource cd_wakeup_event
     Exiting sleep state event.
    CAN_TypeDef * cd_can
     Pointer to the CAN registers.
    -

    Detailed Description

    -

    Structure representing an CAN driver.

    - -

    Definition at line 155 of file templates/can_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Driver state.

    - -

    Definition at line 159 of file templates/can_lld.h.

    - -

    Referenced by canObjectInit(), canReceive(), canSleep(), canStart(), canStop(), canTransmit(), and canWakeup().

    - -
    -
    - -
    -
    - - - - -
    const CANConfig * CANDriver::cd_config
    -
    -
    - -

    Current configuration data.

    - -

    Definition at line 163 of file templates/can_lld.h.

    - -

    Referenced by canObjectInit(), and canStart().

    - -
    -
    - -
    - -
    - -

    Transmission queue semaphore.

    - -

    Definition at line 167 of file templates/can_lld.h.

    - -

    Referenced by canObjectInit(), canStop(), and canTransmit().

    - -
    -
    - -
    - -
    - -

    Receive queue semaphore.

    - -

    Definition at line 171 of file templates/can_lld.h.

    - -

    Referenced by canObjectInit(), canReceive(), and canStop().

    - -
    -
    - -
    - -
    - -

    One or more frames become available.

    -
    Note:
    After broadcasting this event it will not be broadcasted again until the received frames queue has been completely emptied. It is not broadcasted for each received frame. It is responsibility of the application to empty the queue by repeatedly invoking chReceive() when listening to this event. This behavior minimizes the interrupt served by the system because CAN traffic.
    - -

    Definition at line 181 of file templates/can_lld.h.

    - -

    Referenced by canObjectInit().

    - -
    -
    - -
    - -
    - -

    One or more transmission slots become available.

    - -

    Definition at line 185 of file templates/can_lld.h.

    - -

    Referenced by canObjectInit().

    - -
    -
    - -
    - -
    - -

    A CAN bus error happened.

    - -

    Definition at line 189 of file templates/can_lld.h.

    - -

    Referenced by canObjectInit().

    - -
    -
    - -
    - -
    - -

    Error flags set when an error event is broadcasted.

    - -

    Definition at line 193 of file templates/can_lld.h.

    - -

    Referenced by canGetAndClearFlags(), canObjectInit(), and canStop().

    - -
    -
    - -
    - -
    - -

    Entering sleep state event.

    - -

    Definition at line 198 of file templates/can_lld.h.

    - -

    Referenced by canObjectInit(), and canSleep().

    - -
    -
    - -
    - -
    - -

    Exiting sleep state event.

    - -

    Definition at line 202 of file templates/can_lld.h.

    - -

    Referenced by canObjectInit(), and canWakeup().

    - -
    -
    - -
    -
    - - - - -
    CAN_TypeDef* CANDriver::cd_can
    -
    -
    - -

    Pointer to the CAN registers.

    - -

    Definition at line 290 of file platforms/STM32/can_lld.h.

    - -

    Referenced by can_lld_sleep(), and can_lld_wakeup().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_c_a_n_driver__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_c_a_n_driver__coll__graph.png deleted file mode 100644 index e875c7d3f3f19e822e903f27ba081185ab2d5c84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18229 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 Nd%F6$taD0e0ssmof_(r0 diff --git a/ChibiOS_2.0.8/docs/html/struct_c_a_n_filter.html b/ChibiOS_2.0.8/docs/html/struct_c_a_n_filter.html deleted file mode 100644 index 3e458c3..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_c_a_n_filter.html +++ /dev/null @@ -1,165 +0,0 @@ - - -ChibiOS/RT: CANFilter Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    CANFilter Struct Reference
    - -[CAN Low Level DriverSTM32 CAN Support] -

    -
    -
    - -

    CAN filter. -More...

    - -

    #include <can_lld.h>

    - - - - - - - - - - - - -

    -Data Fields

    uint32_t cf_mode:1
     Filter mode.
    uint32_t cf_scale:1
     Filter sclae.
    uint32_t cf_assignment:1
     Filter mode.
    uint32_t cf_register1
     Filter register 1 (identifier).
    uint32_t cf_register2
     Filter register 2 (mask/identifier depending on cf_mode=0/1).
    -

    Detailed Description

    -

    CAN filter.

    -
    Note:
    It could not be present on some architectures.
    -
    -Refer to the STM32 reference manual for info about filters.
    - -

    Definition at line 142 of file templates/can_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Filter mode.

    -
    Note:
    This bit represent the CAN_FM1R register bit associated to this filter (0=mask mode, 1=list mode).
    - -

    Definition at line 181 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Filter sclae.

    -
    Note:
    This bit represent the CAN_FS1R register bit associated to this filter (0=16 bits mode, 1=32 bits mode).
    - -

    Definition at line 187 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Filter mode.

    -
    Note:
    This bit represent the CAN_FFA1R register bit associated to this filter, must be set to zero in this version of the driver.
    - -

    Definition at line 193 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Filter register 1 (identifier).

    - -

    Definition at line 197 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Filter register 2 (mask/identifier depending on cf_mode=0/1).

    - -

    Definition at line 201 of file platforms/STM32/can_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_c_a_n_rx_frame.html b/ChibiOS_2.0.8/docs/html/struct_c_a_n_rx_frame.html deleted file mode 100644 index 48f3b92..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_c_a_n_rx_frame.html +++ /dev/null @@ -1,231 +0,0 @@ - - -ChibiOS/RT: CANRxFrame Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    CANRxFrame Struct Reference
    - -[CAN Low Level DriverSTM32 CAN Support] -

    -
    -
    - -

    CAN received frame. -More...

    - -

    #include <can_lld.h>

    - -
    -

    Detailed Description

    -

    CAN received frame.

    -
    Note:
    Accessing the frame data as word16 or word32 is not portable because machine data endianness, it can be still useful for a quick filling.
    - -

    Definition at line 117 of file templates/can_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Data length.

    - -

    Definition at line 119 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Frame type.

    - -

    Definition at line 120 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Identifier type.

    - -

    Definition at line 121 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Standard identifier.

    - -

    Definition at line 125 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Extended identifier.

    - -

    Definition at line 128 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Frame data.

    - -

    Definition at line 132 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Frame data.

    - -

    Definition at line 133 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Frame data.

    - -

    Definition at line 134 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Filter id.

    - -

    Definition at line 148 of file platforms/STM32/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Time stamp.

    - -

    Definition at line 149 of file platforms/STM32/can_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_c_a_n_tx_frame.html b/ChibiOS_2.0.8/docs/html/struct_c_a_n_tx_frame.html deleted file mode 100644 index 2845b16..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_c_a_n_tx_frame.html +++ /dev/null @@ -1,197 +0,0 @@ - - -ChibiOS/RT: CANTxFrame Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    CANTxFrame Struct Reference
    - -[CAN Low Level DriverSTM32 CAN Support] -

    -
    -
    - -

    CAN transmission frame. -More...

    - -

    #include <can_lld.h>

    - -
    -

    Detailed Description

    -

    CAN transmission frame.

    -
    Note:
    Accessing the frame data as word16 or word32 is not portable because machine data endianness, it can be still useful for a quick filling.
    - -

    Definition at line 90 of file templates/can_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Data length.

    - -

    Definition at line 92 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Frame type.

    - -

    Definition at line 93 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Identifier type.

    - -

    Definition at line 94 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Standard identifier.

    - -

    Definition at line 98 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Extended identifier.

    - -

    Definition at line 101 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Frame data.

    - -

    Definition at line 105 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Frame data.

    - -

    Definition at line 106 of file templates/can_lld.h.

    - -
    -
    - -
    - -
    - -

    Frame data.

    - -

    Definition at line 107 of file templates/can_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_c_m3___n_v_i_c.html b/ChibiOS_2.0.8/docs/html/struct_c_m3___n_v_i_c.html deleted file mode 100644 index 82cb076..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_c_m3___n_v_i_c.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: CM3_NVIC Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    CM3_NVIC Struct Reference
    - -[NVIC Support] -

    -
    -
    - -

    Structure representing the NVIC I/O space. -More...

    - -

    #include <nvic.h>

    - -
    -

    Detailed Description

    -

    Structure representing the NVIC I/O space.

    - -

    Definition at line 108 of file nvic.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_c_m3___s_c_b.html b/ChibiOS_2.0.8/docs/html/struct_c_m3___s_c_b.html deleted file mode 100644 index 3f23907..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_c_m3___s_c_b.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: CM3_SCB Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    CM3_SCB Struct Reference
    - -[NVIC Support] -

    -
    -
    - -

    Structure representing the System Control Block I/O space. -More...

    - -

    #include <nvic.h>

    - -
    -

    Detailed Description

    -

    Structure representing the System Control Block I/O space.

    - -

    Definition at line 136 of file nvic.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_c_m3___s_t.html b/ChibiOS_2.0.8/docs/html/struct_c_m3___s_t.html deleted file mode 100644 index 2cfe892..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_c_m3___s_t.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: CM3_ST Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    CM3_ST Struct Reference
    - -[NVIC Support] -

    -
    -
    - -

    Structure representing the SYSTICK I/O space. -More...

    - -

    #include <nvic.h>

    - -
    -

    Detailed Description

    -

    Structure representing the SYSTICK I/O space.

    - -

    Definition at line 70 of file nvic.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_cond_var.html b/ChibiOS_2.0.8/docs/html/struct_cond_var.html deleted file mode 100644 index 33c10a5..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_cond_var.html +++ /dev/null @@ -1,92 +0,0 @@ - - -ChibiOS/RT: CondVar Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    CondVar Struct Reference
    - -[Condition Variables] -

    -
    -
    - -

    CondVar structure. -More...

    - -

    #include <chcond.h>

    -
    -Collaboration diagram for CondVar:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - -

    -Data Fields

    ThreadsQueue c_queue
     CondVar threads queue.
    -

    Detailed Description

    -

    CondVar structure.

    - -

    Definition at line 54 of file chcond.h.

    -

    Field Documentation

    - -
    - -
    - -

    CondVar threads queue.

    - -

    Definition at line 55 of file chcond.h.

    - -

    Referenced by chCondBroadcastI(), chCondInit(), chCondSignal(), chCondSignalI(), chCondWaitS(), and chCondWaitTimeoutS().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_cond_var__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_cond_var__coll__graph.png deleted file mode 100644 index 4ff7ac144980c189464bc06b1c39fc8c8624f6bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23443 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 diff --git a/ChibiOS_2.0.8/docs/html/struct_ctx_swc_event.html b/ChibiOS_2.0.8/docs/html/struct_ctx_swc_event.html deleted file mode 100644 index dcad036..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_ctx_swc_event.html +++ /dev/null @@ -1,148 +0,0 @@ - - -ChibiOS/RT: CtxSwcEvent Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    CtxSwcEvent Struct Reference
    - -[Debug] -

    -
    -
    - -

    Trace buffer record. -More...

    - -

    #include <chdebug.h>

    - - - - - - - - - - -

    -Data Fields

    void * cse_wtobjp
     Object where going to sleep.
    systime_t cse_time
     Time of the switch event.
    uint16_t cse_state: 4
     Switched out thread state.
    uint16_t cse_tid: 12
     Switched in thread id.
    -

    Detailed Description

    -

    Trace buffer record.

    - -

    Definition at line 67 of file chdebug.h.

    -

    Field Documentation

    - -
    -
    - - - - -
    void* CtxSwcEvent::cse_wtobjp
    -
    -
    - -

    Object where going to sleep.

    - -

    Definition at line 68 of file chdebug.h.

    - -

    Referenced by chDbgTrace().

    - -
    -
    - -
    - -
    - -

    Time of the switch event.

    - -

    Definition at line 70 of file chdebug.h.

    - -

    Referenced by chDbgTrace().

    - -
    -
    - -
    - -
    - -

    Switched out thread state.

    - -

    Definition at line 72 of file chdebug.h.

    - -

    Referenced by chDbgTrace().

    - -
    -
    - -
    - -
    - -

    Switched in thread id.

    - -

    Definition at line 74 of file chdebug.h.

    - -

    Referenced by chDbgTrace().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_e_m_a_c_descriptor.html b/ChibiOS_2.0.8/docs/html/struct_e_m_a_c_descriptor.html deleted file mode 100644 index f20338c..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_e_m_a_c_descriptor.html +++ /dev/null @@ -1,60 +0,0 @@ - - -ChibiOS/RT: EMACDescriptor Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    EMACDescriptor Struct Reference
    - -[AT91SAM7 EMAC Support] -

    -
    -
    - -

    Structure representing a buffer physical descriptor. -More...

    - -

    #include <mac_lld.h>

    - -
    -

    Detailed Description

    -

    Structure representing a buffer physical descriptor.

    -
    Note:
    It represents both descriptor types.
    - -

    Definition at line 130 of file platforms/AT91SAM7/mac_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_ev_timer.html b/ChibiOS_2.0.8/docs/html/struct_ev_timer.html deleted file mode 100644 index 8e4b22c..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_ev_timer.html +++ /dev/null @@ -1,66 +0,0 @@ - - -ChibiOS/RT: EvTimer Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    EvTimer Struct Reference
    - -[Periodic Events Timer] -

    -
    -
    - -

    Event timer structure. -More...

    - -

    #include <evtimer.h>

    -
    -Collaboration diagram for EvTimer:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - -
    -

    Detailed Description

    -

    Event timer structure.

    - -

    Definition at line 40 of file evtimer.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_ev_timer__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_ev_timer__coll__graph.png deleted file mode 100644 index ebf8a4d24a223dec1772729bdb2ed5b073db7874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9332 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 diff --git a/ChibiOS_2.0.8/docs/html/struct_event_listener.html b/ChibiOS_2.0.8/docs/html/struct_event_listener.html deleted file mode 100644 index 5f7eabd..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_event_listener.html +++ /dev/null @@ -1,134 +0,0 @@ - - -ChibiOS/RT: EventListener Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    EventListener Struct Reference
    - -[Event Flags] -

    -
    -
    - -

    Event Listener structure. -More...

    - -

    #include <chevents.h>

    -
    -Collaboration diagram for EventListener:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    EventListenerel_next
     Next Event Listener registered on the Event Source.
    Threadel_listener
     Thread interested in the Event Source.
    eventmask_t el_mask
     Event flags mask associated by the thread to the Event Source.
    -

    Detailed Description

    -

    Event Listener structure.

    - -

    Definition at line 45 of file chevents.h.

    -

    Field Documentation

    - -
    - -
    - -

    Next Event Listener registered on the Event Source.

    - -

    Definition at line 46 of file chevents.h.

    - -

    Referenced by chEvtBroadcastI(), chEvtRegisterMask(), and chEvtUnregister().

    - -
    -
    - -
    - -
    - -

    Thread interested in the Event Source.

    - -

    Definition at line 49 of file chevents.h.

    - -

    Referenced by chEvtBroadcastI(), and chEvtRegisterMask().

    - -
    -
    - -
    - -
    - -

    Event flags mask associated by the thread to the Event Source.

    - -

    Definition at line 51 of file chevents.h.

    - -

    Referenced by chEvtBroadcastI(), and chEvtRegisterMask().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_event_listener__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_event_listener__coll__graph.png deleted file mode 100644 index cb5fa0bc53792f3c4867383160e917dc0e30deaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41055 zcmeAS@N?(olHy`uVBq!ia0y~yV2Wm7VBzIpV_;y&I@G_Afq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM`-O@2hng7!(*hT^vIy=DfLEIVUD`=KqiHgYV8|X;E2Wz|^;x z>9LSUkatVRKc2ovU5h-}91|N#$|H`XmIS1gELyD5x5%xrq*S5lk&w*P!p6Yk3zV8x zs&={sc5p8)beqfQ)KIc(_q_Y^FRv|Hv2}Oe+$g*E*H_1fmcHNl-7dEE<@)FItlXIx z(7*!jh!;!@3$E|nVpzhvHs#W(3#JTfU2ZTn9Eka}a=AH+u1eK%uSp-bvokPkndJTM z(#wUfJ7#$=7iaZekbcBToPmMi!dZ@J1_lN}r5r{E2A7TvtPBhSiigA)7#vzSq8TpC zPW!ypVP7DJNds7B;lB&43=C3XcQ&V(ZkztiDe|J(`U~eyz0uDN-o@|0+M>(wLgy*d zgwUJotZs!{U3-anwAOiEk2joRwPfH`$YEqqIV2(=$##O-A-((2?8c|Z z(mwLKB(%M_$<%NzNUCPdv2R&k$J3_DMO(e=E{s0FBe0EO!RHVz%ct9>=V_Z~)NMP? zw4&*D2X1#`_t1M6)DlU*@H%ktOkihV=nzQcW?)coYSCq2 zXy6ds#=yX!s5GO9xU^f3HcAZxB<;VRT4exjnq=p7sJ?gEVf2UH*mdr?0HZmuL`Mn9j{$6}&cX z?WF^udGfY#4&0!SvA$Z|E$F~qAT0=W%?sHt8H|hqSRI7!(#f-!9I7k2yiZJ!y-ttw`Kx$rqZuy9?NfTGzOcLFhOz2gkzE`N3>T7Pil+PV$GTsM zvD$mR>LWuZ<0l3NhKbly5%$=?m+r{b;lO`ugUSAa!c)3_O`d=CD}Ez&-*Ho%}h z`bAYkp8E}^2DwRn&*Ks(J6tP5W=?UGF7W~l0XnKWH(S^O>&#mh$( zy_t5&CU0X{;J&8&`8-ME{~P80=ID&xeEi2(h zn_YqHOAez0zl3KR-_+Z-YF~HDeeB=wy{UG)@L$ivH?O>Ry2??aUA2v20sD-SfAi<< z{#zNRYp#Et&EYdBt(=bC_h;MRC*Rs?_eSaUi|Wm}_k81_R=w$-e~YRQKRum)TR&y3 zgE=S-POm<5<4&=v?t~>Xj@uc`@r^azn{P3Dm)5h5{62eQ46cef2n%jwSkS$8;&Go} zJ5)}--MsqKM{lp&Yfc^4pLjc6_2iQN^%FmDXUtIg$Ii+S`{qK*x3j_i?>|L6)VVzW zc!sa>%<44-({{hpvSf1*205*J=IzQ!Po8#q*~JKkoV&^fvp9 zL*;@_P>HnEP59D%<;9o^1iIYvvp-MqX}aoH^Z(e zv**8hrf;V{|A+J5<8vna|2cRz{>`)HZjsU#yg??luCqzI?f7h4oyF{17hh~VeDexl zadiDt!`pmai_8{W|I)6{esL2ulQT4MfRn<6 zne}=lyl6!>b-Z}_%k#ED>wZ-)kLk~ee;Ftm$86iaftA7b z#FEL&=Kb0?-RLTx+tJ*$FSdHg?OkGf;WEh4x6_2%v}B{Djx@}3gO@c`w{wn#gj$vD z3h(|H)ezAk#ZVPnsIjW__IeWs(e3(t5lbI$-!ZoXtiwd8?bOz-TE97?UR1W|GB~XC z+Ww!z?*I>|sHvJTvp%m@>35gcZtXu{hvOh}b!E@bo!0lj~ zg;hhG1KeHs3dg?-xfvL?%)=REP@5e#FMYi8@}-Y=G8evPsA4oe!R)|q^ipNA9~a1G zlrm(iAY;O_dCD&rU2r{fFutiw^#T6UR7GhBp#rCNQ~jjx}t?^V$O>-L?)aOV{p)tU!}#W z%Or7u0hF`Nr{3e*Vs!g;CEo%zaP4|2x^ZgU^xdfu=Wnd5n#W9T-I(^Cc_BB$g?${L zzz}cOV{rJbl*4%7%~B`v3&}YaG`FIgmvhx)oDpR zVi$x!W#j9s#%!x^3gY5(}mZlIEUv7!pnp(8y#m0G0OSHCrpLG0@+0$EBgQXiJ z6XxkMWZ3uWEeu{+yY=%16aEWIP|tXM)ma(ry;peQwAWj;;^ZeXu(^O*R%?Z;4yHGW z2rz&ugTE$Ld0A?Y*L3wS4Cn3;09C+MTb<69{8+g>ckkQo+gGaN7pZ}#0@^=(!I>lRRJ%8GeAS0kS*$ZvX^VVavQ{Sm)FzSMu-{%5eev?1QnNbWfRsZTf zUycRLh7NKJ_zFaLGjhS#Rk|}DyY_$8S^HSke(JZ-U1eLZU+qi3DZjw)45)>=yuxyB z)wF9Xx4QT*{Tz}Ny{>k#DdP;M8%zz?G_N~{WUri?7Q6n(ovDX{b~c3aIYLUAsO48} zoj31gTga8c1dg1}B%6?rmfqFdSA8vWjTF8h3~GK~Tb<4mw)J+;*SN(d30pr^Fa(4B z_lnni>Dx7@_Eq&~mq<5gfy5*w*6@{RfTEC?eB)5Q>dRYKHFegg9&kqj)Wz5mxAmT? ze$|@o;-^CQ)-J7m+V^>qJHzH9HlR%1bzO5!`dO#dpGz}Wth&}$xwkqCY{#=pz9(w-s%ouS8S%{a;5ap!{b6?Fg@7}q!K@8NFVF34<)`p+= zc^9`h_NC#`x8CyUx7Zwn4ZbonY?=RPt8n((#Sy#ef0b@6Ho3%hKnIjCOTDTmF1dOB zQQR&T|D~S|+qgMeHn1|R4bIOG-F!ZJ-St(sDj7@!A*I2k!y&t7l&npbmSksJzzK<^ ztIZ)**&FU{Tl#i+^%k%5;Z@d~xA@v#X9ZUtTb8>W&%JspEp=XaHuC~ch}Y6tNr^3u z?Hf!Q%s_?Ax#Np2I!J@_dg$v~t#=EvQa-*Y%8h+`K6uaC60@IG>$zdca>w#jVe6-c zW(4Pbe0gcx(`j#4evvxB1M%+R-jMr2*2aP77hRcp&1X)WwjiX{SNiJh+N`!B+t96B zHrXvm2em?O`ENe%6KWN|bDr7CeQ|~irHj(J89{@$0!$HfIpOL#m0@Qc&zOvV^MSHYvZBA!RO^CENLoeu)w(qlgF!6_(62q3h*XQ?o9zE}EDplomd-tmO^}l93GLseFvWz!9xZK0) z_No8#j`N(k``N*2;@^{POMkYmUB|281}daxzDv}qmAhJ+6}x!H@zu(_PbXcUeLGc8 zRORH-!kuf4Gk=CmPVYI+^}SAM-tW~7sf&(-;`OhI@t+W@@Rt>9`*>qOU5%to>pi8+ zGY_0Sf6LnJ{c-1=OJ;64vUL5~PSJg4vrhagei3zXHYkBqZLQkUmH+YVlW9pGbB|t4IO?(NJo++h~JmtxcGGB4HrE&e`7(X)BylWh-UK0VcoeRyfs#FS@y4m@4N4zk(y zYW3`mF|)n43!L8D_o*!HG*5ak|4o~x)pfg$Z# zNh`m_!u9e^+4rmC)03Zfvv72Q+BSQ$7+22QDtvnD+Ak5AvpVL@v^$h?_Lr>m&zx0T z_5aT4x*hU*<(psUS4D$@;;+y77jfB=vf7n8<$W*z9(}H5SMRQWRoG$geBZU-j?U+w z?>;@b!G>Xr-_E#hFXIE}!`2pmV6RO}+f)-|d;4^)+~tF-e+bHUfGnQ-sMEvQ-|N(q z6|QcRW+sDsaE#s$KEFr;)dcoy-<7_48Mp4WSblBK&fJ%?H-8r`HOc?7ch<@3=o+5A zQL*60R`_fF=U?P+RQ*3;_KSV*k3Y8m+y9)&^_H7*yMES}MOL%Sf8D%tdEWWOr$Mf_ zy;^O(^2@c9kI8GF-`O5&UrcQ2~XeC&5ofU*Xdu)GoAX|QJ5z^*nZL%_I^>nHJ8?0Jl}SneG;f2 z<8wRZ(q<>|#&^y)m>3);dEZvi<%?zC#Sa=}@-%#DpZagA75hnMh6b^W_SO~EfzI54 z%nK*pV_dLV;9ZsQ{AzY(_z>RO@U_zqo!+8po*%sQ`qBQW&uUg}-5b`scg>f-YnRt5 z&u5K0ZAcyi3Ms>9!SXEE`@#qQ9I!$x+pJ>X!! z6xZdoaM`UVGmoC{J|CKGIpfmfJzmlOR)k+)^L=?xzj(KQxg@A-QhICY^hL3+UX}G(`Tqmo#go`izr9=iTWx;8(n#ZbtG(ts?>z6~`ujp7 zDB*q!%H|1GZr=F1GVb*)+oNi~j$bj?^km*T>ss|Gt@W=Z_0vVSEp8Ur#;~B+bhG%X zJG!UlJ^m|Pea6@9W_iNm_OKiGCcjsf>jb%U_00McoUFfXR6NDBzl7fKU#}o_Y=$la z!@r!ENnFo9JBv5H1GP94PQBlBl6~2{Yf_t8uk>zUWjHX!bW@YcOzG{c7fnEIxMgc1 zH?F*Y$L_&1d)`=X28IcK;XiivFN#=V@#TF;clQ12`<+^Qx4->2FIf!agLB8;>Mb}6 zN@-uSz9vnHUa;fKj3Vx+>D%HhMBR>B|GM^k_20kmBS1-SZjr6%(|;9V zvwLgQ>I>30i6yU%stOEoTz>ESoCQ}Gf{ID2uipZ;T$aCDwrXkkhk50apf+N)c6s;8 zi}#kf-3rgX{d#Xq;NO3Hp2zlqS}NhI!&g@{l!K?AK_qXZu7SDV8^jOo>+t;UF zQ{SZCt74oUdL#B_?W(KWVyf?bmIJj;za_icAHD5$dy3t(ZTfe^&VRd<9h!B2>YcYH z#nrx3)q3}cZ?!w_cJK4NivPPs6S)~0H1qz26#sTrZV&mv_z%=TIxt^0(qRAUGvB;y zy~7@|{}2X^R8P95zyIyVNpksl)=t-(-Z_D?&!r>tDhoZO-p@bLzK->7>jqYa1{Gs} zuUnM|pQZmTe-U*d7UbuduOwSybA9cmbes&DWVGvLtP0;u)uw{u>n z*XbQoek)r|wqMuF!eSG&`QGfJz5cy5=cZPz|MA9(C6SvUs$H)0p2_X=v;K!!$=r8i zY4{d=>viB-@g>uulB*;>2Sc(#EGQ#>omE+#RaH6TlKrEj=e6%{T9aO{ zpM9)4`0eJ*qaQPvLH*=vE%Rxszm#UK(AvH>=62EbS10Wsh0ASzyI^8U+J7zISGD=8 zYU8e6^I7xNGTdsPy8U`TP{-`vp^A-4e~Z8EyM1Th^#h7agKbJ~ZIR>v6|8$(?@iQ{ zp7u=q)Z3hy_1n(8^LpPK`h!smGz?I6X~)mms+kF!@@rp2UAPOXuI3q6y?I-&_}P5- zm&VQ8kG$uO<=-WJ-;IUgi;TSdj*w^Hy?=SUh`R6>G~D)O%0-uNJ13nh+^!F*eOuSD z-|gSP%CKVD>wTHe^WIPVa`j=%r?U&Q9rGWUDKRWqUa_X&lY^p}dWq}{*%n=f8I9S~ za_e5Lt>5vovRY04QnCE^?f!Q8-haY*W$vArq%-we@R~2Xer$|b+S>d2X57nJvY8gM zciETlzR+#aWmu8;c4GP2x#b7mE&1-Nx4mgzcG~%wGp;=DtA2C3X$BaS#%S`IHDP)tv9sH z?GG(Yzp-SVf_eGpLeHbg)ofk!`v3o0XubdQ{pz~EO>BDMFQ+9eEeq7Ro*Y_rx9DN- z0oF4DiQEq7cjkS(cKprD`4$J4hTq@rtZ)7@VSDY&$Nrg0&xDJ%YyC|6^Q-#a|NKc( zoYBUCGDTj_=X0C`GX0}BpOe1hVN|?gXY8YA;>LTKos@GJUs$H+MSohbWWC?tjJF%N zpPz4iv3|yqPhfnVW-?W;YCx!ZLnte}v{TFZh<#DXB&ccbeYtHi7EZxq1 z+E%~(ZXZX2wEx{3<^TJX!*;*kYjpo^{y$Dnd+u2ADrt~=cfaU+T;^F7Qs8yGcy;Qo z1r@VB-+ijKeKy_O%5u>pshvk7-hR!QcYXJM-5wR=-`-ZQ_sN!RT;i-+TT*kr?!VEN z+KcZFEM;ubWza}hnYcIj({kUve8|%b}!?@pH3=oU&lMc?FLhWQudRLhlO^YTsi%*_4D_){%?r=Y_E}dXo;Qq{_KZ> z*6Tv;Ql`$>R=(-~zQ%u@ta^JRpUsy(x9p$9F0}o;`<4x9H!ubi0gA;_d60SF~*vWON9!n)uiHD3^VJ z;G!r|@fI5k|)i#5!f;+GOH(k*KA%q&s(@5v%Z?@2LH%AQ8m#oDi( z|F(VV^gi>pHqXv#(h0uyb?h3hH<&I=R^#3{f9CBMhj%}-PcOJVDLyRom-qB_pvG-x zWMRgQ1iO!V)9+iWL#{{k<4ymR!W%eD!9&*xo#G>d`3VX@n!nd-f2oAOs(QdzYjbXQuU^7B_O zH>i5Pta!(&mw)@_yNlJJ_QzD+2m`bCr_|=Hx9|vky;Di!%%K3gkGhk;I=x_FP*{`w zXlJvz&RPAQ4?=vOBTd6jLn!|sLY+z#PVzA62)4bJy}_uXe-qHAn$`M?!! zNA4FEExHV`N1vKaI&>=@pL{FN{`n(+*@qi*-I^wcR`e;oT>5kAJ@cPu9_G9<29d!T| zn_#&8`Hr95?VmbNTUlgGeJolRuzugk=`(JZu36d<2FkD%i@Uem1#Ud_UG?pq+vbw; z=a!kZuFDkD`sx$eDt{$YV|La4CH&sI%;uh0#}mt6#h%FRa9kSHd&%2Z^!!h(zDAsj zl!oaP?>L>zwM$-K{&+`o;cG?)hO1{wUa_A!w`N&g!Oq@e#q!?jo01oMe_o%H6zdTA zC5Mrrs_SG;sNFxcnemS|9y)gM%CqTh>p1WB<|{Kf}}+Si-R zl%4)1;6)V!1IIhz^Sd4wzN~mBy70BeMc?g$)-S&&uvM0b{R4?w#DLUs;ANEW> zuKG!AvGeuIEMIl52fx3afThZ1j)_e|R*_}$to5ie#%CHykG_vP(gw|?z%pO2Q_wusJ$&|j*O!0IeK$U?n`*x0J=<5XO#PaW4TavCU>s)Z&9v|R~}6J(Yx?9=Yoq0A-8siuHBxk_I&*^ZRgt_O4Sd4toymW zPsNzq>3Y*S_Zv(X%8vb3J3mum_V${u(|*J*%x+8y?uQD{VSxQpBZl;@6dD-Nm^! z=6j#gk(pio>D1fqZ*G;gCHkP&h4B=>!vXKF2&`SP^zxy^*s#=Te=Wqc_rzS<{C>Xm zx0k)k^WJdB3R?+-hhLUHND{4c%4nC0N(xQ8$*&t`ar3GE?(*Y;;k)*%u8((V-oU!x zsoSKPjT2Lz%>_3=E^KAk%9A$j?xSbvGfLiN*wiP!sJc+e5zP?w3RImo?fkoZXROTY z`5rCn*jF4cF#DS7ss8=#{|oBQ*PG5AwuxqlN>iCx+2?!fxvK4pXQ#uTPqOEV6%JUx zFy_jft82&lkHQ0pf`(d^Z``q!82`JW0+ zpS4C?{SZq-(Tkf*0-D9u>t@f-*m%ght@z}3!7U67471+6dYo@-P{J!{8EZWI^{QKj zabF_N@ASSs-Fn@%ZW{lQH_n29y00QfmWvZKD~K%HMsT|JmV% zl+~FpE(J^p zESw&e9lxh9ap|_JYC&t=7u$v|Oh1sXWxhY+Qd046oy}(!%Yd7gAA4S}ol|T3DsG8e z`jq#pBww^|UMVknCr;@l>-YP$PmViZZ~o?dgUKNKWyL#H<&$SB7ruU>be6~U=<`(~ zJG5fgUwk|Do9V56kJp@2uT$85eb>(m9!8(PUHH0SufR5jGc!)>&ONio`B}W-_K+7< zRvv5b&3P1EzxnM?O}p@yH`WzhpKz{M4W3N$cc1)8>inlH0<5NUWi)SH;*JG}Kf(eSN`a;r7idw=T@)dU*1;yzT$@ z{Zg4%pL#7XoAH+6^QF%vu^%{79|qTd>@TYRSzuP`|03#w+zdxK2WPk7+3_zXZ#=*A z=lb7wrma1tS}(h6nSh({&Ga25p)AYiy)|b}ub#VN{q3(|_cjy-UE1z+z44pld9j9F zJMZifsGja=Zf{Zk=11sH7k{?3r62FyKk=vULMg)wo-a9!D`ubk)3x!f{?3Hoi|#JW z=2V?~;@{kmi1&GFp4HsdOyMjG?q1x?xw>Ku(F}5lhr4_~yFK2?A1i!bR%X|<3+w!H>t^jtjTM_7 zZU3F;cK^vcOTAV0CYemM)hn^RdZzxAe*W|?vcx-+6fF6HVuzN6J-ry(V#O zyuQoCeUe&De)9Ac>z}W>*y*x*tA1SfhM?Ph^LLb#+I@_joR|0gp01}9sM2k9dK0Q= z`}>}(dyPhkZHHVU_lrd7u$)=ulTO4bf9~J)<=w%UM_1zJ-U4?_eASDt@BGOfTXlF| z?C0ma&nEpZxp!^p{;5kQraXH)>B+PAH+H7Jd^_pg+=HoJ*ST^+PrRHZwCp1zH8+rBq4PoG_~Y4-jki`l210t5*5BbY`~bw0lW9)20_qT9fK0yw|TKP-_Klh`L?aZ=<~Ig zxymQcoP6nWP2c+2vNZOoGx;X0|GH;3+lk#vE<1}eUg^Hw;m~hg?fqxp1=B6NXZ)NU z6J;>Nx2~e<_K|si_o;fa^U4TaO?|!hY(}Y_e)+zzd#6~c#1gp~R)JT{luTRFKkJSE zUVFx4+ot-x4ah$qzW2Fu31t3MRBf()=Jj_wljrN*o&Ixweq8bQce;Wxn;v~DvfsSZ z&-ffOXukcz(`&kC56jZQCbc?>5@N;K&Sk9x{$9b(1a^AgGu|2l5f9mc3pYQIhuK)Vrn^<^j-uA@I zx`!Dy<$pohhbNYMR`Ukdl9dx(zB%b1*_W4R{`LI*uYXLp&oL0(wajmmn_ThB_o}s3 z7PEgPFD?7|+kEQ=EfX!-^RYIQ&Xim+7w7J;EZCH=@5XQSeS7kwgi5RqiCstq*Rw8V zN0#)@{BnNvr;pd?)}H39cDjBwlP`YHTZ75Rxbo!JUVFD+?pNe$uPpJorlBoAgU`IJ zl@`yPFT86?)!g5IpW9qe-|KZL_^FxDF1a(H#Hj=-Vb%)#Zu49ot@!QL!I)2%9_3$H zSl4`e+MhIy=`owE=Kt{AT6RxyrZSVP;fi}_^{1BH*jxO4j_j^!Zfj1dzAyWH*{3Sk zYF@SXiz)-_7TpEiGj6-5{!5wMCx1t1zhQ~(iWN~#*(E`jA8mW8X1dmFX6DjP|JA;A zQ7`}GT4uf~Fe~j}@>MPNlIPxNaEf$(mOuUH{%yaRZm;Ouz*;h~Zo9d^-xqo78Qyu^ zvD|5?Rrgj`T{G6ni@vq*PUWht`rG%;i%P4C@%Hii7OVAg!tdwrBzYo_`|zX&%TM|# ze)p|$aPhu{%!1n*^osoKKDK|}ru(z@g;hXcroaEz4@Q$ePn);?Qe~Qz<}06kS+>1T zE5P~h=L+xlH#Q_)-ZNqAnIrT5br#?KvoAvN+ocOz6Vkvn`BC8xvtpx*Zt5CucXImv z=Gw^bQT67>Uv8^)<*yf6_ubxl-=)6DVEzuP65Sb+pvrvyO})dHPgF|nyyo+o>z{5@ z@#oIDMZ2#oX?MDAB%GcX{VCyv6vKjaP`5JwmomO7w z17B{u_juO9t?&1;TQS*2JFt5mFJ7(@wxd)jtfKlw)ULC$L}&l{{rt_@Ws_%`x2;R{ zQr`Y!)m7v-LsyZBP_+Q$v^TyHR0HGu1X?`P&7yULz7^2f;RT9#M*qn0~f zZM(X-+V6dGyQXn@EsvOSlHq%p*4oJzTIU^&%5<2$yXI%^@7}(rcAB8B&Yy)fNwF_x z?V5O;OZ?>9Wmlsgm0!IYmnY_1x1!{do4%OUotAxd{-Ac#hc~((e>+`oeD&fc)2$nz zTw;@u^X~hTZ%pR(f{xl!uOID9_p)+)mi^jRZSIM`pZDwhx-?r!hkHeq%1p~brLY~< zcQ5@3T$t@x+M>I_H+EyjZ$>+Vf6Si0E7yEj^Dw7Nv|ss>daOp~@pCbcX7kFFojN?3 z|4)2~DdX0jyZawl>;2WbX1?>|r>EQBitmyOal65E>k8{_@waB%&EH8%#M{mBeajK+ zza3PrT{s)B|Ji@dMA284X&^h*WcPmk_dadWI{u40voimkd|C0Xa^dS4E4$y>Wt~y` z({D#j&iM^^yPT| zzkj=|m9=>$zJ5Ksrh9h%s>|1Wbj)_-p47klC&zQO+vA7vB38e!RHd(`uXlub`IH)=RZ4dOd%| z^*p!pzt^SZDRn1jiO#mFdUrB(=aak6JD+%;KdJstV3(Lpko*63){;#nMxXi0>*p`g zerEr4`u6VkTT5F&xzM)|bCr^f2a=@Tt~yT)IZGQC5jRXZfuv4Qt!HQud|G zx6MZNy&TaU42j$s3%{PuuYOaTT)j_2Q*ry`w$GijovycR6G=TV)2`fhyI`pM?R6W{ z6aF0fzx(lxy9-}Clq=;h>KaWtBNHgGdA7>g($A0Ei%-h8u3H(t^zqJcojcawpH00j z{+2hyY3+lcD(U=fr&!lyDXuD66Hz#O9Z%eu^mYwH2f2)ijZQh!m%ORC|77Fgn<9?d z6E0qPCTg_*l%IKU3k51-Qw#zZ?jIylRvl2DtAfD(tK5+x`2zIvV?p0vwMX<=2gz0`eogPuV1vP zwlRF^Sv@VsGA2)b_s`?b*MnS_en=6mYv{Umr|3}2?D%)jruV2ApXZGAU$2zI_(HPw zukdrPUEdej{;pj(@v+;anah_8-_%}b_wO3BvKDX0nE~sTze<_~pf3ANo|386c=|bP!h>e+XFQjH2Ovz(@y!y$u`*%Jz zYCB!O+|3c~AiUN;*UoD0nL7rP&b*P|C1!K!;mR}JszAf2x(hrneZ0fX)p}#?v$7LU z?pYQ)UvGBT5=nY~>aDeN^z?swCO!rS$WCkbXYuCS*W2#N{@3{&v^sTR_9128FTQaLoZcLA>z{qc z`uWjGYAR>b9=!Nd zA7BqV^>!)i_USy&CP_P8Z+_OjQ&v5*aYX`(n0e`cKX4%Wl1{ zx)r|5ZRgvkRcq2V?-h+Ik`A0?rgzIueeQ{WR&!6(Z4tfB%)roZa@jEY>m9c>%X5|A zX1A&x3S)gOd~@<8@6YG+u6|`;I56K;bla)knXA6Xd~I3mWgC6e|ysX_I1l$*4k$sO^k42t*g4XPqho%mACWn)^*K%n?U`gXJyMplcvXm%iq^8-CA@PG--?F z+CTUZ`+0v-o_Rc|3S9WwG5Joe$ECH-(bMzzW4$L&k^XV7^ge@&MD_P`f8A%=U$}1n z@#BT9CCZ1y0*;BEuKUr_xU+iSmlxKCRQ=by0i13hdl_=#Eqz`$pc7SE`%1 z>;vP)Z6AP^jfgL~Iw@?~z3aZ*w!GVeDcg?cD3Ji3ZI#O{Z^lEyG3=MWr=Tw zPyGESHz&!}B;1=PomTWGLuvPqu2lOPr^%<8pq;__L2C+*-b&7&FTZPEp3@Dct~LI- zcK5h8zW2Vhb9?@$o6mFNzI9(PU1+FhK6Cw~pUdxmYEHMe*_o z%1?P16(_y0TJ+#q{>0mNDuw?}Z(X-^w!pRqP34nkPII;1*q-w5?%m?!aRm?g`~Tj* zV7jpIweZg89#%$ac8eqbx=)(PI;n5!ZS&dDlDpb|dhM)LD3J`5IJfLyMqd7u+ZRH; zKl}5=`fpdrVGRCtr%r8qzm84P@$9r)%1s|)tX!W(how$?nqE|svnjuIiCw?wzN>dm zS;;kjTz({}m4Akayl={U`CZdAc%BK*Fa7Kas=BmFbQv1VwtT$OTe~^(xZd0oafY)_ zT(kDeUp9GG*`l&vw$1)ov-+N!Efu~w+xc3bc)Ca3e`3xw{n4+_ zSNOiNt$XC@<=wAczVA`)*BtkW#l@ZLy?(8nx!<%zH=`aj!xr>nzD3}rcdY#H>!V$! zYs6085Hw-tNg>8s6vc%YJ(oAR2aFg2&C;!O#w`Al!Q|u2lt=2gG=egeB z)2BcKjHRr$yV$v8v%cTi=zsdp_et}FcZo4%aKCi<=K9j5EZl11-)A01o9kaxT@X#P za@com#@eFfb+0VLZIid|@wq)ShhOst!_Um@{yo`wFQlRpA1``a3@U=1u3udF;--_o zMDO!+Q@)7Ktj~OSW6yNn^kDwhb)2?q=iRQmthiEgZ~W79;d|E3d#mwy(e8dJ?pSB- zJND)0C5`_7@-X`R<-*nyr9)!7;;iQFzH!z*Gf!UbjM{&_L(wiADJBzbt4$`>=Do0* zwdUUKp0MMey`Hb$ax7`*+m>~5+a7etUO!p0duOdqiSFEv4Xx{*7D;=i*eiYZe){d$ z!J0?1!Oc+@T|uRf`=$M2XZrbLy^nY;FH6W`+j8cVbeP|)+pd%1EGC_qBeQFspYsi; z>rwMh{GIFhe0IsN0K1PLFML&y`hNcI=c4I+UA_D@RwcT=K`Yr$YW+F$rN+UTt@z~o znYYt@chwy3^8M^|{jw)V^ouC&z8i&eXY0$KQMH%fCFXK`>EzFU@%=&oES!M5$GwZoyxfMLK!*X8n$2w0r zcYD{D?Ro#~imQL;Ogs9@v_+Rec6ENjpRJR=iJaMQG5hlp;hWl*PM-PctHo`b1?uo0 zET#(`pG(=H9bZk? z8+}=HT(0u_`IuX_ntL@%bOU$2c(?di*)yT@Qs1`)fICVE(SF% z_m;n#H$QG`%ISv-vmLW}(}S&l{pND#d;a+T?6Z}71ghtG{{MYD=F#!9t9bWj*Sx>O zJLy}5;x?-i-3<8}RSDT_lZmyHy{Di4quhM+N%Tx-ZsUo5Y5R1{HWz2kkxx znS9!*RMIoud6h+V2ziT;5)TiIhF#26r{q0&K>O)$0|J;|(37WjnTl4f%ZQozNe?RNl z8+GZq)Ai;LFK#-yM{Z6E{-3z}S-+Q+bKY~lr^55OVuh`)@2bf2JX6!nweiP=X+Ne( z&Pm#p{(6(z^fs+aoo|kQ@Bjb){QX~x#qIXSR&Q|^-r1}7|MbF`qRJOh0&=#|FC?Tv z!%_RP|2+55c8fy1(>IKtMQ&eWINBImt&dv*nT>F$by2Oj^cGMO0t z-ZK7bU*l=+Z-L!EyFlY<(Upf!eS6cCy=Y>}vkMW5+ma0C|Hyd}bxROrf%3^S8^b#8 zMofs?YBm3d8gJNg!V>*R>y7KUxkdT^D9MR?jrAzwWIndm+5zuD~v_mgGx^oNk`2XA7NGqQ_qcz=Z*Ot0;y^m)>vjjW7Y%lu# zZs*S<=Wfn>z3ON*f292RzoEvjoU%oiv`#u5%R2ME(cW5v=^e*Ymhbpt>{;}=`%>qf z>9G!PXc*mXS z`lL~I_tDyZ!e+{v$keT<5u)wh>>UHVn=?`!kU zC*t+fy=^Wpx$eKU_GpI9|En8B-zVoO7g?_jud4oG{%0abG{-5>ylvfurKj)w@jblr z$*c>e3;*_f_1_b7=}x258*X3Ag||1W-n}=ac;V7Bxrt|fnJnzIZl%i3 zpIa~Ov;Wk*^U3n^bN5XZUOF4uTg^QYC$}ZTlmE=^&yt?I*9cgfm*{5L9ujN1S@G)F zzONr^ZY?qQtomDEw$-e}H^cw$=kmK5mp;!nWnAfbe5F8g(H*`g&-y1XiMRi9`Td$Z z`!e2#@SmDtvUS6cDW==!7#L3R-j{oR-Ou{B&-Qz%8|U+eY*KltYhUs0aFO)XpFhE) zc$>tw$R%A~NZ2;bD-_0x4y#D<;i7dE#p;E2lD+Eg;<&bB#_ zQOhRDo$tG??f)=UsaL`f(Hiv_8C8ys>#;=xTLGzx=xklkeHI` zu8P;eYRRq9PrpsPuyw)aHMXDD?OeR_tTxDL`X#y<{OvXs2bi6sAI;W&YoGpkQ@qEo zZD-n}BE(*8(AxawxY7QL$*tSlA%+=GI%9K}{n&o(?bWIO_!qu*OrKf)fcgA)r#H8E z*MEI-*y(!Hw+%(V7wz48D?;%b=k&V!dZ)iEIFWLnT~&5^-}8CmyQYLG=O_xj4xat^ z**DppcZ~x&{+=x``+6KyA?)~ha#GRroVsiEt?O9lCKq`BIrcE-lgz%Ccj`cs;gi4E zdfI-k-^Ur9vFoDCw;fK3-{w!+c6Rm)`;U;JzLs;F+~ka3s+jLLEYW3{b^NUU6T9--rrp$kT$vk#fX~MsClb5Lpu}BqFD1F!QZ1?(A^dhQCcKhQ+rjyRh z*`PPEw(x~jRI0}8KUD|c{wOv+T_?6{T3FWW^~V=|-f`RLC|CT%l501&&oPkOC0C+m zZXcOv-L`q9eCxWUe*N=)tn}XV?1TCLuYdkm{#jq<`)A{`3Qd!9OJ=Q0R)nnuFjkS( ze);Ue)-6pZV=BMiu_^zOvv6hGr_R%5X_MDWpIgQeHN$dy_^OlJ1ulQQ^V)s-v-q25 zioJHZU*h$(OZWcrU4F}b;duoQwV$7>ef3yt>&wk`)feOU)SaB^|8M!xwQJV$nP=Ru zzW-D0x0{buRc+Sij|;sWOJ2yaT?hk>h|Iq2&z*NZdai%X_Q>b5zA5J7OQPG0Pnw&* zo-_B&hQs%MsFeTSI@7-V`MLhPQR~in7!_~YS?f88jca4GM7?BhiPG$;Kl|G^t=#N% zy(#0uX4VC3Mbv)DPq=L@U;X6n{rqc|*Vo**^8S*c;r5!%=WcTQl+9b>In&?g2vl)BF22!0zL{G`;jsEx*NeCYfv( z&=%PC$^?{*pHwYeVz=|F_>%2qx4Z@9QMB+MIVY z7iK$}a753TxLPdVR;7g3VQ@-Z}IAZjnT8UT<~d=ik5j|9Lbk)&9@v3tJh!8f@Qjr*6x$ zX~Jq*+mC?;?{@s$u%z*2uG-hre{#d+>t8oAde83c_m0}AH?KPFh106S&s&x(U+D))Jq@lfM!YiTh}RPwdk6pfLefe>>fUQpPH6m!e#D%Vor2N>8|{9H&&lrdq?;1 zU-j>2c5isfdiKz{m`AfGl^r>w&k^fwdiZ9D-m`C0LT9G#{d#}pPaE_7D{echC32Ta z`=;D~cFFzDpWMSYudq8^XTFl$YonIg>ACa5){>rxhfXu6N55Nk-=^%NX!kbx3!i4C zW%RB|xFkC1Tuk+wx1XJ_2cKP4^XU4*?2N4kV;)IQsteLMVx@J&ylX@2t{$~b(|452 zyrU;|Zke6TF1ZDH+IgKbZ*SQ7*ZoD1)xiv<-#j~QZ!fj;Jo@>muh%5+e#sfe*RJh# zS^A56qrcasJ$s91L@hjfV_(SruuIwQlV%=oU#G6sqI+dZ-}8HKFI7J+`v>WvEU;b+ zDx(7Dl%LgA_W|{5-yV%?o>`C?ajE6WWTXH47riz2GE=PFf98H2s2b;tNONBHjQ#hT zGw0KPF8pTvHTO)R_K{uRZqI1Z4KbZ`Mn>!N)n{fFQ~cL}R*hZ;jhLLBz5n&Rixuxo z7iPaqovyz>*M9oBsU`|HThxC4Gf6$^+ni>K<{*q5<=XYBiD&UdBSIHOl&Sy6VYZ$Ycycw)Wvi(g84 z7JV+~O%MKktwv|p)E%HAIIlJQ)E__3F43ge|5IzX9D7xhw0g<=pDFhZ7iM=dC2~6y zuznWz+@)C}yLah(!TV-1o@w)pzm_}?F#CD$<=bc9x*wGtzInx2PgV8g*>Lbt0808> z*+EO=qQuYt-G8BU%cXNMNv_-bxYcqPIbOZ0cxNzq+OD5x7iPay<+r!lu=>Z=oqPQ* zHGfw7_5W5%Jy+7?OYJImMQN&E4vXkgGfGKfK?aUc{&;>ou>OtzSh{I3u1e+8-8eYr1XTJ<%(xd=4$$c6Hl=YgyTEUj|w%zt=F6 zGa)(KHCk{|#bY6XqM0|}zvmaS?lV5=V`Q9t{>=B!HlHV)iQ9Z#{KT6*o4?)4mJhgi zc;Tjx8|FRQ^+rX{Vtz5_rz*>qh+cu)C2c;58(rU@yx!UQB**N7CPVCdvF|piR^AI= zMT`DR*0TE8wRZCT-g{|`sSM}3YJHtAY~Swjv?kCp|Ld93r8iGSIn=GXz+GAV>d%3s zZUzQl(}nNNs-3)jpD$oiv5-ITD|^26?}T0Dcc1XaT#XUV^7~%**>}h4FG)A9iAy)_ z`*tH&>z5wGk=Z=<>BVQ|wx61FZ|~E~nTVR z^-tG{X*2P^Rn#>3{q%~b#?Rj{e=x}D=HB>>ar;Y#lxquFy}wE`omrjz@z0qOIW3#7 zj`vd~Z|^*n$*`m7kHWLOS--LthyDb=hZurI%;j%#LC3 z3%e-pn|?BN-M-5m6W>j$`CU-g&Lm&{iFZPIo6T#+obU(QZHq4$Y`mcrP?!I}UUbLK z{L~+zApN)Bh5Osc9pIR*;m*RgAd9ym(Z@xVhoLMm|J~oWHK}O87Ik-oXC1GP|!z|l_-mXu@Sj7rbD^7*4b6zf>sCrjt8{2|asm&%g zxf!yeC3luD)np0`{K*)y@4D{IK84D7fPrNpt+o}=##`);AZ~HornYbkHax39@(EVk~le@3}J+)Qc&-9_sqM{`G z+_PD>Gj{}Cf7x})N}hECzr(XZtU6oh2Y$ckQF z{mSXygYf9p-)Enjl(%*5Roj4_><)kLUR_&RI?Lqx*+~1<-i@Y?-%(m+GmS@vf;fbJ1zID+1%6} z5jlc^-&WRmHT>#&yluaAMe?FEtL_^uHJ$(d^z_v%i&lMF(6#A?((|luxxZ5O#hi4k zd~UV$;<2Klcupu*!u!*!YR_cAn?sb&(!{RzA!IQHS2C`?4#ZQWc!a$yHOI z>bv4pLQlnhcB5~*9TjG+tW6j0UTgFCJKH&dsmB+5Iy2+lCGAIZmR(%ozRKj;>lc5I z{F}K#-}l2GhquY!y)Aumveg>ievMxC=WcTPSAr2Vb*W1R5~Lz`dzM{=ZJypJhp6+4im zop0iQ%jh24KZdF1ITyL5oAxnt&f-f?SsnjhTJ4v@#J+t(ThkX#RS!EK6V8=j6>=?g zll*@5AKRDBy70&6Tc8Kai?*)QC4D&`s+rx*s+;OFX6@N&b?#Y-Y&V~Q zkl$Y6W<@KmUpxP%F}HThaoIYZ;MyO182IOo3|qWqYX>o`8#6gqc!*BSS%O( zt!k|^Co7)S^2(g|Qi^4NpUv_O&!6+nZ`m)6OSFqD$YU$FdBipzh zz543b!8`RmF0O7 z6Uo-yYi%wGeEG_ENu?~JV#WM0wp;#h{xqk6{HIkQc+`{OLhzl>t6u8(efxIX-sdUX zU3Tu&6mEuFr>yFEA8ai+@~i61vKNm-cJ|4QJ((8Wx?N(`H}iI>y9uSvJH^RR!DZO%^0c9=&t$IhY`*t; zd-)gTN3A>YUwTRAwf@<~*UrBJl?GQccLtp>TC(W$JKbN*4NB!N5Be`Lj1JpyV^PM& z$!3;@lZyIutC(E=XIi<(b?(U9)UbYL-$dV9@8^Fa8h(YEE?hj}M?}W29WSrMFsDjR zVvSbc&zUeeHTwUwbqP0v3=SXqx#*^_&2_Q0863al4Cc0;=ww;JwBck)Uro^V(jvz` z5v>b42O{@Qi)B-o+TE|=9P;Hm!!zxWqRi4tv1rR9?|J7e>}p^5NrFKvdW!L%dk%ry zt!s^*u3@Ue;;+|GGB(hwEj_7x6k%kBk2J<`tj7#gt(*3<87eW%^(YqfKOg><}sR5uhI+cQC( z<-yvH+}cYe(?UM@PGkOa&td1T!~M>w+q>dqo}1aY^evlK+sBY^%2IpVH+><$M6MM> z;3k$uTsEo)d@e@@9lYGZw|&{Jtrh)cwmcUNFGZW|t$Y2XF|1v^XjO5@m(0tG9iPsw znsp&C@wSy!=W5~4?Js&K-dhxMt<$(qIht=-z|G)GTe%v-8~v~6&fRmkL~T)sW{68_ z+X|axEAGI3oecI(+C|%6%G|sn@MZ6%^3<=YsuKU_S4U{1@BoeS9Y`= zioaZ><#OCD#A1`{l(cQB|K$!?YA>_5zE&dU)pK-O^V!^wd#;Losd~P>VxGy|){GS~ zi=H#wxF5K$eDg~k6O*&13%zIA9Q?Yhc*e4T%ypc#hUaXBdkaOs+i)J(wA(9v<~gU% zjW>#RxOr%qcdHi3u$~i4aK5h_VD#!-=K1NSPL(m<#~oHt8*eBr>RHAAOYF+_ioEk~@mwKV7pC>@ zd!sPJyOet$UYqj%*?;H)wb8r9J_)_P+;9q$L;qWUhb}3d|M~^3UcYJDNIPUO; z_p;@u-YzYMkayCxGhXWWB}9Jv&s@-VUwX%h5;2As_oDylG&Gw91T2o`ni?8xE|+cP zZWNJY>9Se<$I{)aqupnobDXmJ-JB0aolNc>UhOY+e!Asm%QNigs*YK<+2Y`y16O(( z;)JFy_1j^3(&+RHZ2XEYr#^K{4YS%l;(?&Ubt7I%hn$ zRU^DtX773?hL9=C1uy&P+-7U=@Hey<_!fBaGoy^{qBWnbE=MvfuzT@4&iTUjb0vK_ zLKl4*POVnUx4c?1?cjzRMmd$f8M~OYU7!9gReXPV*=K>LI^j zxk0w@W4YV>wgvgtF8N^zJuh`yv(h7v7$ZmL1eV~LXYQ>H!Ey?CFgVo}YZ zZL@uzE1pW-mfOqRaPRNpTfXTh&40Vg)Oa$)zkFC-(PidUd*S=zUlYD(FDn*Vb?ocr zLrg4JHZ7lh&S*x{{!K?j_M007UHP|`Dc|8sH>icW%vkWL5o4EVMef6Gop+aQellT6 zpY?US@^6j|2YJ#Jy=F3L|x`z??kstIV{bMo}bC_i*Lp`mnnImG&=2i zi`}fX|6V!Wi@)B!=Xm<+{WS_rf0r2x@Lv8LV0raD@08hmMgn5dY(KK2&ar-|jDFh9 zZFc?7eJ#~f%~RxA+suV}XtBg3>C*F-KyvK>k~-SAU)o_gq)l6#*gdlmy#y=n zK*f*M%-jot?h1U0%eC^}cBOsK^I7K%B>Hj$18?2j7RvnK>^}dwF02a$vwrSv{GanJ zcUGo>+r$+$hT>wsbX5MFS6Jlpfg!_Cwn<~Ql%iS4vQ@cjBW#OfS9bE~U9@*D$ysV1 zk-MnAtN*B&;L^DaaZiI7EgeHA?_%|ztiEI4O0_SoKF?2xqB*O#F9mA#G)mieP?r{}j^=>bX=vp(UwV<^A z`a4_KrmN}u0$ew3e_$D^JA3s~{zZAOpU4LMvYf(y?!)YxXF^{@>ql%)){cEm&`UdnZ@qp4Ecq z88;Z*cKmel*4*-%jAMf0yZ*gis;|!^P@U?rw$sOD=C`ZYUj1cwcPeduR&=t9$h6$O zlh4+1`}FIcoLi(*!gNuTArjTHr;4>cuse=@v;XW zgyUm({k|%EU#j@i{rH2^zP#J5_~Li%Wc44LpUt{Z`R>!+>*piwSFf(W4Jwjm?`^z( zWm_I|fqg+noU%X_6NApwtuK9(=j~ETcPKe}O45J5ugRlyq5BptQ$FWRJ9=q7_MVEp^ff6z{if4?bAy$NFRB;T&t5f$>EicW zVO7n=3z;5VSP`8jG&8w#Uk3A{yQ<5XZe&>b>-bGjUo_{sdExEC`DvfKyd)Ube=C`= zep}f4?K;(V3>~Mgff~2}a=HFUF}$0%YvZGHndhfRYTajN;P`jj;|9-d!B2a*9yG`n z&dsy(wgL5>p07Nm!FbPfuJZiIMWx$P>yMZ4Rqfw(;L35uT@nlmRr! z?g%!9qk`A3E=~My&Zya(;UW^b+sgu!?HcwU+9bPkhIY5E(kb@6Tu<(<6jYxn{wXh; zr%9iv_P%7Uqdix^F+ zo8&#eCoK=(YmjN4lWoSp`XI<*k=gg}TmQc5z5J<6*DCspE5l<@Tjr(C#!E(H{HlV57j ztW~-FKjH1aK&pBv#!Q=9p$j$e*+y44pasK!=d7a}4 zza{eiGr#R#F=6Ek$wiy84^Gpx_Dx^-WQ9_Wm9ye3@lSU)9}@mm&RSPjUYhNDUw7Rl zCxu%vU;aFOq5F%wVdD$w5Wxevx5Mt8yI!=bXRce1UdSU+otYQzhyTCc$+a-#xBr!S ztzs8{&tVMg%X%uNH$Abz;fj9a&S|H(-%VO~o55sB@&8ikb5)CP3hxOC{dZ;mhLubY zCwSt4dX6wHL}~zSQ}- zK=DO({yNUH;up92&U=vjRq_4%OFRGXn(%#Pn*WDthP;3Sst4j1=f8BmIrU=cwn>(} zGtLFBdr|A!U!?kbR>*IKMfHIXN>*%{^`bh}cSRN`GH1Qm9T1`Qc)_C+S9cbN#&$n< z?D)r{r5$#)rO)g8ztjFzPt#b0e7ErJt*9PND>i$J$Ay1tey@#Z{4llT`$X31%oPVpIvz@uZJg?}(P+x^N4`=1 z&$c9J{r21DyQ!Xik&~)`>xma!?~dxQ8J!lp`@iuii$>&Lix86SF275W3)aN#7lncGas~FV2(*Eh^dI8eejYcV%Rbpy0&?UoMmiEcSV>Ak~w4v%c}g zjj5&!wJt~g0<}hK3J;Vt)P$u(^B>w~mu1C%F(F1UT$|y>x{hSG?GZVGfp$0awEA|- zN7>E1{it$v-Dwf!*DC~Br!YxHkhlB3^o-ny=HGhrniUHK zt`o9#6@SfmDdWPb5V+CkLPto+?27a1S;D_dH?>|0h@XC4NGw`? zeoc{Cu}IJL`1-pgEQ_{82H%a^$3ZH@UODgFaxt#{qrxBahms6!$k70gK*0?v>(vbbfkQY?#u`=fbw;Q?84u?8_{Q_`KzLzv0}* z3~*!E*x{(yZK*^nw{?P!`CMl!tyLB&8d;@hUt1Fyu{|&L-j~Uq*=g$w-`+HPC=>Bb zBrv

    Gq-6b@DUMxjqqL5}AE&LUWMjf-1%Xx~CRRD>~$V?oNSA;f=pjx~`eC)JprL zJ!GkD|8;YTZhPtO!GKR>~8DH3al-d=`!r3rh_2 zwtV=uH~rnZPc44ia$but{0z+DHLEhozP9H3KEJXln!ijpuJ7Ky{|3*++&Ol;O5ZQh zb>DsGp(KOdBCXB4RBPIp^j5f>*Z5Nzo*p?@+3&W1We3CiRWCFyTYiesS}xPslihNo zj%9o2ijP~@Y%CMmoobO}st^bCYl6&$@9@ zS>fM_&^H>PR=<12)=Lym63h>MaBmiGgG-!MNI<5<1n2+!i!S}=c5di!`k%P^%>4V0 zDlf$(Et+#7cV$6}cJr~4-WNB5uLM8Vdi`hiOC1-@ib$99#aqZyIvy3 z8rPaSeb%{&=Rt$X3^`_Vn>9q4_AJsm=Dw{*=kJ7*f$Lse?(h@6^VfdDqI+D8Hk_i? zf!4RTnVD2J-TJ;E-1lxtl3B43uS?GB&#~`5=v}sCSfKbMHc0-9uEAVo@tfPkW}b7H zqPgmmP(z@0wo|BD@shW9ekUxBa-OL$|JA=m?$_to<*x?Sw;Er9wQUxzX1J5bJk8~A zJx9Ufu4$d8Y*_mk6drbbb(*Zc<0{iWYyBrrd+SeXY<*M6^u}avbDO)1`>b;T40

    V#9?b!T=kKz4q%bE8d{oH@m`1;SP@4f#NL+YM>XY$0Js0yl>_LX9#ltC^ z)}Iuv+4uf*i2F35t^Kuei{&onnq*nKZ`F9d;YQJhUt;Ia3l`30V%U~@_x*RaM{%ZC zcGQJg>^`~Tf^20%ie*EYXsOG_tyRxFcwuUvqmEZL_^g`_pC7eZJ{@$>BF= zF(2G1HYIdgfmi(Z<@2qNJ4WaBVpweS^|uLR&j)^~?@CtiEWS`}C)q%D%n+Jr&afmVcUch2NKU^1bS;3w&~C_QaxSq6?=xWC=lS8)5tJ2n3g4N>1Df+gEx zbB^9)k?OE7n%Y+xdQmy@^|iI$5gbczh1;!7$ls|X{;hWAJO7!T-;Q^#e!`*kYZ|M} zsGZWUVOQ+;{C#qYb(86)7)l;>{5_9aB9PiLoyzJr@RjM-F>&-PWE=W z_JrM_V$|WKR?MWA`d9ZAZCv4XWYgO6-}`*NORL1+E10sJ<;8}^#b-+S6^i%IxfCh0 z&pos%XyxfEo9rWH3ir-S67%xi=01_@>5YBflV+z)5Oh zsuMwTf-Cp58L0^$zf)tk?S1IfJF+)lncrA(tw8OB`sVrnCawcdkSq^4EqDD1=e{uc zPs@s%a^6Vm-BVw`$6~wx$%~8bsUM16x}V{}jOwCm?R(;V7glOb?hd{g{^eiNZ;#{G zSH82~RcoiQazVWb`k^IKjz2iXyl5X8v7rD^26(9Iq=@ zu?wRaWaRTdC+N#R_?_~M$D`@F=KULCmM-P9`wV@YcV?)}TtE4x^33PKck7MbYVPNG znr`v!x0B^I`GCOW?*e5VA}2+4oA0{5H7U&fZ#h?Fy%!71Og#@Y`0`_POn( z6ZeDO6`#AjznHS_vo61UCEPcC;U7^ui$(vZS?r9;39MRD{Ic<%` zJ-+9_6)^_gWyJw?m)Bh?+M(p|Z?2n8Kv0fV!^3}_Mtz_mv1RYm&L>6dZ2Q!}F=?L3 zo9`_3s#>pKN8320xy^kv*XYR$v8Oik+*B4VtT>u`vv0Rl;m;}4IzdSy!ODG~&;t`j zyD#hW?_2*hzq6D*>AP_LOGcMm+Rp)J+c$KVlC~aKA(K{wF|g?SNn8{{yWF(XOp7;GZf5w z>Eq(J=)h~HIoVe3j1Mj`ubj#B;P*0Tkxk2HUAQc8H$wiCl;qEIr&xa8IHWe!NqyIY zuDzV4i~jOmi(e-iwR%~em7&naeS4mV{^e&luKB?`;#=>sVnNH^6?^zDCi^}=ksP~> z`N@jQzvNQ7Qsvnm#0KBx-+iM?&hgcMtBW3&0+tk=KU#7A`+a>wEBAFGQFZwbtX9Ox z^(|mKaC_CK><+zLj$d(xb9+xLjAJhNa$YUh@=e#;$-S}>pCh)vWUze2$zVQ{Z(=i3 z=IzO+0s{=o0?%*gUVG!>vV*sl2JaDEeX!`L^v_df-Z49_Z(b;L;9g_cR?(@K8FN}r zUB7+m`?~xXd+j-Ur?^<2*cR8Q-IQ1ULxmyQ_xMToZ7WWfw8?DYcDPW|!DP<1Xtz&k zUdr6HJ|fl|m2)ndZ#0XIIcimQL{ng@ndn;94Q7G6e@!U&6H69+x@VE$?)aB)bv85l zFm$ioQXKhhk6z%q^=_6+--{(HAKg||p0YY#Yx(a>p+Any)9d+Oy62ydctU>3ezp}g z*ZOw+@N6&g`@BT=akba3!|``Z(%N6@Yy{QOSD$eH^J|p59Qom&woPmb~ik;0ru$=abVt`Fy8_x<-Kt zL(6WrHwIG=3LX{f)>u-Uw9mCVoDlLwi6Nftz}Gh&Cw8oEi_SNdZPr-7*DmY7cIe#HyQ_+% z816NfFepXM@~V!$GIgbnOXl(-DVKN?*=FTvmnr3-X(#OuN;=hDp!uAJz-7h)s=iyK z7Oh>Dyy1q@qCF}O+#y*$&lQx6L8B^60jyKSebOIZ?QoegJ;X#oYq~}V%c5nUpR{(o zR?~geJEPBWN>7Kjk?6KoxpIpHEADPxB`;4<(urN?@f|b)zHBqk5#3)Q5veaPy*xkl zk>$NVZzQ|@aY#%-~C3vXF3+YGXP$_nd073*I_G2Azto2n4bwrn5E zf{P`5N=D8N#)`X6mhd$cZ|lh5(77#@X~isf(Lv-z%PFhNmJFcjhgBgJUVR-h>lL5; zZF zyN4a#*1e(peK5m=^HEx-q~r`bHA1U*c7gVcv3&5@!>g)#Ts|_cE^qGX&@g6(y?ftZ zVZJf>Y=LD$^Gk-82a>uwg3?wNh<;>x@|`WO!K>8y#P8J0kwquiY8E79Y+1FcEPkoh zebx(VO=S%AZ{Oa%n4=({%J@7-Ffhv{KKyju-IAUZ-SwQcdv>ao?0+fq^T4LHk6A44 zmGs4gMeh7@<tn*uv;q5kAyS;mBZ@xWni-SR?^2v2~=3kkDf44qdQTceD@wUFkQ*XIyZj?;R zn4{qD()vJh#Tf%xrR$x!Up3ypoIB;zDc9%BKQtSXLSt@T-1x?h;r;L9+FGx62Drpb zQ{8Vk(NJD=r;>cAL)D#!|BdIWN`Yee|H?m-4dqXJmb=gHbNZS8=ZETJhDwnMTn_rL zUqpNhJ|YrTo3{E=@Gr{MF;4A5Bn`<;#Ij60Or-D}R2Op960 z@LtZKL)LoQyB?P>77VW$D|c)v`p7=*l!WoKUquY!E1JR;mtFrE@N@A?fsLTpxi|av zqe|`rVSzIKZ+m-H z=`l52y7Ys4UeK#){+Tm59;j@6bKEz*^QdLC%M_vg<_4F7W(L$<(q0RmX#A|=edyi! zsqS~IeV-S|Y5Hz^+N2x&S9kS%r_+&D>l3Jl5LfO_bnk z|NnoU2d$HsuQu%kE5o-#jjPXXzM-^eN=NS8wTtSje&@@}aVKnlX>)SbZL6R1%Zx21 za(J=jyE=zP?p)y*n#N=#e;_F|e8r}sk2MVQ1GcU=kn2W$-Iv7>tAYYtdN@6 z5wvL9UVes{qqcK${7f3Ux>VDdik5TiyL)fn7EPIVmccBq8EjY!62DJewpqY3Fg5k+T86Za7pk4tF8q3KFI~BM3DY4^q)f7WonFd#gFjF#+Qo3y zDzSK$6JM1+UEQ`VRq=A=3CV~Y!HWTV7EY_(@>0NgBd8Pk)O2D0taB5)XW1NFZ&Ka# zKiR51xL3OT?Ma3@t`l9`wk=)l`&{vP!bVpY&0qzF+qd$qjt6`xn^t>9DE9q#wm##z zs@GR!v@!|%J}+3bYSpia+j8xfbWP{C)~V@zY4b!UCcV2O=$gQ%x`QQc3tzp`iH?uD zw$nf7^=5{5MswRgHNQF`%AnDf!-`VuGS`^2&dd zGgMW_O!W3iKdG7&on_TLS*G;Lb*&uf?2wNx)xS5rpLH%cqs}bzbRvVDo>pIc=X|in zR_SxESU#*+QFF3nTFjzpXGPE7zx<+XcXd7Q1BdeRlcEd}9cecYF1qK>q`~PP(?9c^ zk%U;ZOUR6nckCY~ikdFupV^nxwW=WTtm3LQcm6sv*lmxt-(UTm|J$r{!5uD7g&5B3 z-LU%UdpVNra8h>%*QJNHs{R}W&PO)gH=TP_DKY zV$8QTfJ#W;=bA2{<_ODy^pKLZFLh2nxWw;bqT(AIwahK&_12glA(H;N*`@pq@-xp( z^nSLj;vUn7X)k5eLc{dzL=R|%?%cgN`KG?lbIp*Yi@(q1PnaTGW}jl^Z3L>$oRe?X z7wtYQKC{npif;1pxL~#yhZ}NiA9Z|s?eknS&VCm+2)*Dqimwzr@VSup3Sz(OVd6s zD^8iM)#aOBuN}ZolA@ zdZD|Que&GrR8fX~CFP~BH7*Cv@p3uNG$X~z-7F+b@7JV`y3o+)+qUcfUj5RBWzEdJ z$5O2h2Y{+F#g(_MD&1?lpYPc@d)dA$D{reWB46*ZFSrqVsdVQ{9lq(`i}xJsk2m2I zuwQW6%Ie*TPSI1`2j_+R&AR=BcgvGUS6b(A`?yTu49}nQjjv%obHt=>_F}Jo!{l}P z{OwN_85+NRGmJN%+kWqPQE25#!KB%IleFXlIy!#c&^paxQF&*|+4+WZTYDxvU@+ikbC;gk+}2I&Hx+#}cP(g4 zUHEP7_PQ&HR{VdvyW;pB%fHy&$e}3|5Asqgn>asYgzM> z=+LW^J~P~5I&uB>t!cK&R{VSCGsQD~SlzZ@{q>S*3qggE$kO-ovc=!0`>=aX2gQ5r?r%0M3!I-Eu(@3MqB-V34C}vZ0$*}H9_NW3NKoGL zHESz2E1$QU;eNUA#lnOI@00u0H~#MG z2F;4}pSsUDN9He&T?K=8sf1nJ?}J=RTwHHBu=|Qdv94N`wb4EFJ=+)d+}v`TBrASZ z)vMp%I~-s1;w}f@cYS``%}7Ad#jGT+r41r zqXjQ{)OzIir>t3J!|`C|w{M_zN(+}P{WZ^bX|0iKaQ*BQ_v`mSWmKDciE%^W>MSSs znSGNQj@Z1gy_Ia`_{}tGVn?n0g1oCIQV-nfce6i!T?&V4i z)tNS5=fBE4GNsQMRLUeqZYcdUo8eYy>L-ITVOyK|=a^q@_-?&u`wLkHW1ZW(^n7QY zn9$XAbbip$?F_LuE^aJY{L*I1rWfCft@;E%s%_^t$uhn0G3CHS&>Z>{zS#?nSl`?K zQ2AvwvC;4AQM>7rWR?N&5GHt8QBVMb~I% zaGzz`$xfxB{T%PI^Y$?Z_h6-`$@$J?u5Mi=scpN&&Nr9p&YQ1#(WGosm7h;kKF2S< z6)(ye&cp`_|C;d9W|>H26dOZUbnLRtOVXa)Z7AK78$Er?*20HD%e!w}Gv#_SL;TYp z-B&MNj(5(nShnGYl9JasE(YtIi*A=4FL}GE+%~%N+OEXkW$K(r*L|Cc0-Lq|Ifv@k zKki++e%3i>=4jicPYW3Jgs1LieY8Vx)xxBWt}atr+7_%2ciqqW;PmNir{y!xP1aM2 znp2ak%g(TM?HrA5T3XZQaGsc}^rOuE_$K=q=bW2gZ+v6Pa3SeM=XW`hEjY07Y@pIFg$4dwx61y@yP_0uv%nC z{=>G-GXIUIajo0z>M~`CTSu>g*o(}JLDKt-V~jD>aaN1 zN|1Nms%1}W7=%NfZeF%|iFCKFl9E^7iwf4VS$&2xPMum6&3H!OVsY7L-K)Z>@NtsZ}-crA$c0s#UMtZ*BWKK`YMg&4v%A%RURZg67sUm9@@u7{o5@iw>Fa zX*Q&N_2u*JZFjHcTJZ;(fcjWwNjJ|kSrkpxFWB@_=jNp+ob%p)XOU*lE(fhcG@ifA zAT&%bl4U`di(Y>A?&RGsZCt=Th+9)+Wp+wBgdf?qZ1%ZHri(VS?5JEY+xWia!>2;q zQ|C`V8_~LGRn|uyhkA|&&$ew_dh*Wv$r`UgeUDpLwuOCXxS^tD?2~?S+O7rPr5XNR zSFOrdHhE{bbxFZs5ekCw|^@iLvfk%bkzCFD!+loI>3DonsJ1_XO-i(R5 zjVn@bhHD!vy(HaJt-5T*9IlH^mRo1Z_U3Kh{rx%vUrG7&7{&z(;a|_E*5yCA|L5KT z$z{bU%%EWaZP8jjt>wS=HWpou+>{!Z@G73+PU^~<|LW;^7D|4TcXGu{cpLNbN{H~T zWhaGej+OM)O`W>Cp5wstve(bc-~V&;yR&-Yzo*|`p6}Zb66Wyq^s>z<%;Ki1i?&Ez zjQ+Abul&cCT?@8vK3FnC=ats0T$zi}Uye??x9B~?4z0A$>Wm4#rP+n|S6*AQdPRgy zFw1McTJ_zG4x)Juu~Vmd{|bw|Zp5JH5Vmc*{#^0DRid_m4B=tU>H&cpGt3ma8TTd~ z@3a1tHg|(lQG|ctT&AaCf$wuc_JjPj8Z@^lejxs}5BteYpr&ZfHmD|@;w(TacRyK|iS(>u!QVj1iIwr##=FjrkVB1ceg>B&74 zp8r$xe{fhVW`A_>-Kv<}>{9>7XG-%*af8Ny<3KFTzn zs~!#ZPr}tJzUseh54MT!^ELfAtqQcBp78?j#pFNt4phG4o4<@fLCUb!_0hSxr{}SM zShXrfZ1>vr4Aw`tt&KmLx4Zh)F)oJ1xfiEz7BF7d)phhbVEm3_u2>IY9IIBHb1g&h09YF28~T`a&LD2tP>UW zwo_|*zxq*IU*A%Bi=&=9og4Z!K1^nfUM3Q9@Jv#7hlXqTwu)P?n)h`x=rA&@&?(-j zWIZd(N#C@xX?u5Wtxw}?Mu&#zt?#w$1bs}V{}Q-*f|;Rj?TQ<}C$3oT8k)@*+idYV zbY<>bh6UN@maVkjGDHTk+QphV5>qZ{v*~ez+PO#dp5yf`+VY z`Cg8M%^my7wKlHGy2!&IzbRMyUTDV(?#lX$p;xMV95(GL$S5sME>vkUZFu+UU0)2R zUd$|UAKm&SA<#;~4$uInQ%D?l`P8~&CDVL%RXyHPF6DIZd}r!^X_xx}2j1NdVfmX- zD75Vjf4b!(_7$&~8T3}J%hO?FxV=q}^~q85dlA2!7G2l5QxKMZjp8ymL~lyv@$$fBbX*-=ufJj5^JSuI*do z&Enc{bL+N$u5tng(?gcZ9atu7JxyxoC4*}-46jdbKm19c!J+#1jPNY%qiaaL7`zHgC669DS^70nlJxJ zHcWh2aB-a%43CWrv)2_F0rKMCWZ2ZjGF?lcZZ3YJUi=HlyAsv@iofNK-InelP z!gry|kwz&}4UgHf3=Wx|D!uAy|L>0G;$_#E4m4euIo(abur4(=_35Gc%wZ?r-Q_nc zDSdk**Xq2Wd(FGeuCB*pch&#jy#3An{V$iQ#BXD4fA`&k@A4DQYfL|ut}QwS>ZvUI zEFkz)cfa|D4JU=~JpRts<&%DL!tcTi&n8Ft(531xd6)kQIW8tYIpnvGy<3k(WWPny zwvRG@`KM=Z>60idTDAW7fvg`X_dt_xv-dQH&)(Dc+b6w{2{h%^qqXTvxj^ln6We;$ z=}%4Me{f-D6Qg`??0S!v-v1x|x+l5cUT5aFnRPvq#-BG#n)Gq{>~k0Yces2zd9but5N+22 zU%8hRTk!fT3kjx%@39Q}JNe4y!izzh{<=JWax`ShmRno53SO3+({@x$FtF^axZX{z zb!|#!vnOvBvXt{z77D!fV{hZ@SvCjdXPkRj@VC3vt-jyl{LyXR&wjep9(`xMZ9`X_ zoYK90?6>2!-gbWC1LfdlN(}LtEuU@($JZ|u-u*4Kgi++K+BOcUH$N+W_iWGIadYy` z_+7u%i*)2ZbZE@3dOgq z1m&;D%K~5aG9>K2aV_09{bb?Cyl7$Tped*7ghZ`ZiaD*k=hwdd{>embn}g?n*dAQ3 zJ>`FSGg#Zw1BV6v&Uq&L6gE%offH zfA&kWfPA4fJ=LD$!C~LY=Hau?O0l^Dh`@_SaVD8gDv}lSnz<9q0T+g`j7ki!&_9WzKZ>g$w@T6@cHBy!#RI> zm(~}pNb~=YB)XSJ>+`y*#7lXXD~lLGHm`E);C-Mdy4G-RYe!HqXr-8Tfxb)lwe1!E z60H2!Jy^8NWlCx6+|>X5<||cC*-o>r(Qjy8cWIsKvdvF~K&`}5oh={Z9erMBTE?A)WqWVb5v_uK+1KCzAf|kPFx=Kb~ zA$FV(co=rZ~7} zf>ul>dVPU&P= zsS+_Ir9~B=Ubwn+4{E~|y(?9tAT&BeSRrcN(pT28<&KFm{WdWS;b>kzS^8PziGR+C> zsr0K?dXJl3ZOPO6V7lGNuw1L`-n53|EnIGs%_}B%UF$lYn0U;Y2f{ebRsFKSh0%@&O=*!bg=v+ulwwJYu{TEzX@>E3dm=b9#<2q=8U zx@?<6$>tSj4Cfx*kmCRM=(dS7)+c|Tyu#Ms^w~ntdL^a^-Usj67QBzUT*(CvOSRik ztP8$@y5q|hTX?(?;y&UtaG!VG$lrzJ>njfC)b# zWszd!r#oNtME|Z`S`_GfVf*!xc}~Y%eLGK_3}dWFTAF`Z6Ew4!V#O1vC)lCX@qWfR zM^N5j&*rZDx8%TU!KvN8>5589N~gR*qm|blzRtaS|NDYB!3@)9@;RDF^yLUnTzvL! z$+Oo?4@Jverfdc^WM>)%FwQ))S9o&fdc%6R?UEUa!D8E8GLLY6a&b8~CFAJ#klXxQ zO)=N&dqvH{%(G0^95}EsdX;`mo~bs3({?3i<+$+_h0I=nw2p3 z2APGBos(Mgx43?vanAW;VM=$0#_k}=wWm`4Php?6_h7#B(y#{ZSIzsxeV#A;0ZNKb zd{&;DEp^Ifb;aUnonu8VlhrFML-Il{y6)MzWizOOGUuYn(x-2h&AL$T``lyl!LC{V z9;x4C(wO<}Vs1plQ_$fFF$}9+p0e-Rx#crhePZM{L4m!ApyedXHm7*5`fk^gEB}5g z^WETyN5lCtzOnd+K1d9#EQs?yYwr7e;X$ybjml4c+BRH|UBtU=v&14!xex~>t#-$f zy}36_W19OqIxd}i&w2006V830wRJ(4BYzdJRu=DQvU$n^n$XP?jAdQ0r#$~>&gH<4 zj!B^5&LS`83)l4~xGPxQFA-B(lmaTYWtN;~oOAaLr=QW>mW~VqPR)n`&OoAFM9l?&sk)k&w{^WI^Yy58aGqsqpW zy30NX{Q8jPqNJpBSVU`Dl$_|^W&4hPUh&dqN*ri3ZqD{SY9==~y)orF13E^*Y;LVBT7i;r%r;Feb^0#5*cmTKC^%n;^K;`sPXsmw-oC3lcdDji+l zGZmDCrr$gYs%^j{9hD0eU)<(D<;14JlBqC(ZOn;=q55CY;tsU&HC@QfcqhHH?pTS~DLGK37oPJ#j6r|K zIY*Jx?|J7iUYyUoWBtCP#k*hHOtIaQ)!y;x)Sn68IT`#xDsoeOS7}__~&zNnYp-- z(*bYRi(*Wo5gtay(hj+%oF@*RKIrYs*VOxLo3z6dzSbxYZ4tf<9gPWhSub@hP+Pk7 z#^PCesYlantv;_?r@Qh(;DtF=#>~rCy;n7_r1hTK<|UVLhhDcYzdiBUH~&fdOsmhGV|RY;_;+CrV@8!) z@yz=#KG{DGIFw?nXbM|(d{Dd!iX3yVUa{1E33o`@ie`LEb=stXz z^Q=+X=%)G=vpsH?mWJB>wVY(Ns^;7g*-QUc^(`;U_4TeYDVgRLdc*d0*-UwH&zYe& z*FATB?pT|Y#_ix8q1~;#y?po2&``Utizk_d{+wgF@yQ8qe~ZLxn)!bYH}}n#v^vd_ zJLyZv3i0>ePs2Q-e)s1W(}kZG>@(cV%Aot=r)G1y`=uODqnoepojI`DIXz27?5O>upIbNg zS3X+rlMV~!0GM~OZQfBSMlG+zBy^GXuZ*{-4dRn#4PeeuJ!jT<491LrZl}z<^J~}(b>dnuU)#rIdIWy9x z=rUv|z7F0gtYUxGD^J;Q=gyL?r*}SL43SLbb~ydYH~sy~vpg|kR_?m4pH8dPA6+vo zW@E~;PszV8?=)s|Wu7GlQfBlyU8ir|i?cj3B39nIU((q4$}bz8v{Dgu+qPSC+LKAV zGvAyl;CvliZ&mGkf6v;v3yT*N25w{6vgV=FajTiF2ih|9>Agst>!g zt=9UFa#8W*Te16QusB_TXRreb-4! zGv61!l$}(k=4pF#-EZ42dov@mzQx{5N7rb-4&GUrSGRnLfBEyv{4M92kGbAtx^QdR zo|10w_A?ckr(RtMoMe(*@XBkatd6JN-o@&-zgB$wH!tV<+-GH%|Km;amZz4uw!)wb5z%UjP)ZrS?j#FFz~ zlkVKRJ^8KH?hjv9)x470X{+G*?AuW(w>8$6xn#>v*vq=@7~y%?Daw>L+(rtql0j9<~haV zHid~xkFPzkynO5Sqt9hO-gz^5@`=#%*K&OSc9<#!g364Hq|NNhb7#Hay{ElRr{dG| z&GW0*+?v@C=6sW>LCx%@8mjG#HW>f^PU$>Da`|z%XIKwBOpo3=;kSO3Dgz z{_UEVbN%na%?gsWpFeYp9L=^$d%G{;r*rqWwsXzTj-C-?n6mxGqZgaE&;4{_%>~Cv zMqA2%HNVaMIOl?;(~jS3@7qQM{&C&8_u*oGT^XLa>}Pv7u`;BJaLLY}R%ueY;_sph zk&}uJ_MH2i$>;WV->>KGJ9kHK z_v0mR+uP1HztW8Bd)}n0{$Hs?&cyzd7(-9ehT0clliRGUxTd$BYkKwKEYF$3&(zoS@5;Kp<@XoA+jhO}T=U7BJ5rKo@2rixbna&L@_1P*{wVfT zZiZt9xjWt#7u~*mEpUfciI~s1&-PZ|Y$qAz{Y#won2}*Y-e{Lu||Q>}f2w%^gS$^X44-RU`_$|*4hpPrxbURKY(?oMCJ zA)C6W?VDfyhP}G;iW?HmPA$H(V?o~gJBG$xkLo<*U!GgOU&M;vK$hvTk*4R3!Q!kJZFve1Ci!x1MHvh4ff7Jd*pth`DpM`+OCYQ5k0W<)7 z=`Um)Ha}i3$hg3@QslhJ%NG|cz3y&KI6Y(LHN87`_SsFfUKm!{aB@)&Bg3n<(`yB8 zS09rqK9bM3Psyl0)*XI z2MUXJUt9WmdcLo1`01PjE`i$^7M$XGCjZ&u*L3UWdDXcubb627>6?Cg_Nlkg+WlwV z=6PDro42((ws$e3u-i?h2CdH;aq2J41AkvocTUfANI(7ONs)Emi4^@QTMjG{&6bZc z33(iIpapDh)u!0$GjF9PhkZ+9^W&Pk{NNlV&%HAn4|kh?JAb!q%AIx7Z}+Y)p7}O$ z5u-4uAYoZ^YWX`;P5GU*Y9-UyE-QLY{P|u_b=RFewJZFe{Wt!-bftMqH=7SnDmQ~r zg3)%3eK(dKtzCI1a^dGG#)!fq?%-bo&rc7xJ$5tuy1e-Ntdf+JeMv9-&P_km%B8W=2mkL*Jifz46`RZod&!0D2HU545m!JRkT&iB&{8Oc_&!SaUT2FtN zE+!RJ{epqv!kM7s&GewudA@;>- zo;xXd(|4FGt*90`s$MBG_uVDQN%tbRyq;OMT{!&7<=t7cMON@k7i458J>>W0Z+&ls zPT%6=s`8WGJe?nz_x{zn<@@6sHRyWOzfLORLqtc-ffNH!V`!EBRO{8|bMH!8 zwX4`(kF)spy?dIdil|EL>t~-eqB276Y-VLJ-DWq{TG7aUm-Y0Y*C$xobfwR_eNoZ) zkDrKq`lR0{M8&s91pb-Pb}M|%J+uGqjh7iGA37t(a3vyT-<>7`I zbTUS3$Csuv*Vmj&`?qEGqE@v7XT%s(@{>QBPtUVo`*_ylce(#B`RCU;Tw2eRdTFk; ze*M>%>n)$BYn>E7WZZ0T{ns?O|H?V>?eA`Vn7s97Y_ol>`*xGqOSua-GfqCr`-x$K z&HewS!52hI-<&eP`}dmryuY{n_w9Y%`2X(y%+4jhRp&|@h%qo^2b3yUdO;FQe zYR<0w|I8T`Ab)b?K`Ju_l~!==r*KM)fx)3kBbtGMffJNx8Nk)z*@N15?C$+#Q0v^p z%5Zk^7K^|o4OR{}nHsJItm~+pSsS-0e@ilBk8mnC!>sm~Q(0d*tZs=od3|ECn_S$M z{gXa3X&k!M!O)Pj_-s_Kh+daifFh_^mq_JWVWg+b&9lhy14S}EtWtf1&)z~HY zO<5amSwvsDb3sw+M2%;(b2|eAL+`;#pBIJqUGC*9xCb(G>qkz{`y8^18e`>Z=C0Vody??^v5Z87)Zi$;^fW?m7?{_#3Dm|cH)hN8(SF@^<-U(?w5 zrf)fM$FKP3?zXnKrQ7P`bN1~}zrEEm#V&y*m7C$!WbaMPZ$3|YySP{1wk&1M^cvmo zw~nq)O#RlMUK4t!@X|Nu+tys%s=8(`eadB(BXf!-=RDb(_io14-@Bgj>)wh!dz}qj z&i1a136xsBVCp-4-7I#g_?JJA8`t?5-%8tBUv=-9v2T>lOP}C}NB;hQ(BvKbt+z|L zQsnfXjT&9yYo#JSG#ZjNyv7{^vb0i8J4<3EVkzBlAe4p24BkaBs|#uKDdr zs{L90`o&D2tLN=1%l@`A|8Kyg7`t2NSMhlopV2LK(b`|}_Qm6d1y29nc^K9nP@Sv& z@*h{fm=IL81P|gDpGt{;pLy z`RC2PlCs#B7LzN>?P}-V2|HH!W$P?<)+-JBuQE6=uex5n?bXfqcQ>2P+P!Pr9GT-6 z7f%w|y|>oa?(bWd$&8{&Y1|AKE`;&wRJ>_j+01^jrZ(l@(SJK{_wmf-)Ns4W#9*?= zTfXje{_f4O&yVKGfBCl1|IXY0#ITb;Hr`4iv4#1Nn# zbIEd{v&oF#Uq01FpY7UoRVkuFis9AeifOMk|0debv#-*!OWTrKcPwgI`j+d`ulIcY z^>C$dt-Sg#yD8Ga>)-RP>Hu|KXLwCNuNf}oW}UX?<6_YXf=~P8U+*c6RQq-5X7o4v zxhH-{*p%74Kb(=g#HuDgpcd5KsMXZf3i>4PVRh}z<%-jnBA%{!H>2d!Y5&z(YrZek z>sFuSev_%;m(i`I%d4(?M5<=`J3Y_c@}1H2K&lHv!%f3Mln6?dLq z*;NlS*J}~alz$u6U&~f0z4v5>`p1LI7w_dyo_fP=_Q4}8phBqk__2>QYm$%eHYioS zKixV%c3MZTx7oInZ&&OK$xFTX%&W-%Tdl@kMS0)8nYs)acD$vVtJd27K4Pfu{*1j+ zB;WEtz&-a6R#2hLpPIlk@u!fd|Cf~Aa`q5$P;INbH1}8j`tG~aTF)^uFsy2STBUWJ z>-5(Jt|0r7%g+X{j|b;CuxdmzG%UMnUw%7qp)mufRP;|iD_42(`lI6&=PYmiD7x(~ zUA&;?;N7cRRj*DzReSw*8@ru-`R$$yl^1UPn4`;(;d3Q4Y)PEhb_h(1i{Y`q2laULuLjP&nv}2pM_?gCU|5EyDQ%vuR zvpjP|j$U;CwfGIY()PtFwegqO!=7J?H;jxue_)|$z&3^j`&wq%t~zaWb+)9%lG3vdNuT~2()YCLf(dA7@SQNPwebDc1^RQ2mP> z#3(f`T;j*)1O|_J-c@dwxED5?Ot|h<6_BiRnc0LZZ5y~D&fEL6O6z!$ZHCktq+TpZ zH6p&6AMOtHCIKFa1>Y_(GAwY_nHU19L3Ji>(JbLuAf*w_5Fq{j_J6ReQ3vd$@?2>?iOsG9%) diff --git a/ChibiOS_2.0.8/docs/html/struct_event_source.html b/ChibiOS_2.0.8/docs/html/struct_event_source.html deleted file mode 100644 index 8abede0..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_event_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - -ChibiOS/RT: EventSource Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    EventSource Struct Reference
    - -[Event Flags] -

    -
    -
    - -

    Event Source structure. -More...

    - -

    #include <chevents.h>

    -
    -Collaboration diagram for EventSource:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - -

    -Data Fields

    EventListeneres_next
     First Event Listener registered on the Event Source.
    -

    Detailed Description

    -

    Event Source structure.

    - -

    Definition at line 59 of file chevents.h.

    -

    Field Documentation

    - -
    - -
    - -

    First Event Listener registered on the Event Source.

    - -

    Definition at line 60 of file chevents.h.

    - -

    Referenced by chEvtBroadcastI(), and chEvtRegisterMask().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_event_source__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_event_source__coll__graph.png deleted file mode 100644 index 5196f5bce675b4faa21832a01908a4bc0cb194fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9456 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 diff --git a/ChibiOS_2.0.8/docs/html/struct_generic_config.html b/ChibiOS_2.0.8/docs/html/struct_generic_config.html deleted file mode 100644 index fbdc907..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_generic_config.html +++ /dev/null @@ -1,69 +0,0 @@ - - -ChibiOS/RT: GenericConfig Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    GenericConfig Struct Reference
    - -[PAL Low Level Driver] -

    -
    -
    - -

    Generic I/O ports static initializer. -More...

    - -

    #include <pal_lld.h>

    - -
    -

    Detailed Description

    -

    Generic I/O ports static initializer.

    -

    An instance of this structure must be passed to palInit() at system startup time in order to initialized the digital I/O subsystem. This represents only the initial setup, specific pads or whole ports can be reprogrammed at later time.

    -
    Note:
    This structure content is architecture dependent. The nome should be changed to include the architecture name following this pattern:
    -
      -
    • [ARCH][CELL]Config.
    • -
    -As example:
    -
      -
    • MSP430DIOConfig.
    • -
    -
    - -

    Definition at line 63 of file templates/pal_lld.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_generic_queue.html b/ChibiOS_2.0.8/docs/html/struct_generic_queue.html deleted file mode 100644 index 3c33d94..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_generic_queue.html +++ /dev/null @@ -1,198 +0,0 @@ - - -ChibiOS/RT: GenericQueue Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    GenericQueue Struct Reference
    - -[I/O Queues] -

    -
    -
    - -

    Generic I/O queue structure. -More...

    - -

    #include <chqueues.h>

    -
    -Collaboration diagram for GenericQueue:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - - - - - -

    -Data Fields

    uint8_tq_buffer
     Pointer to the queue buffer.
    uint8_tq_top
     Pointer to the first location after the buffer.
    uint8_tq_wrptr
     Write pointer.
    uint8_tq_rdptr
     Read pointer.
    Semaphore q_sem
     Counter Semaphore.
    qnotify_t q_notify
     Data notification callback.
    -

    Detailed Description

    -

    Generic I/O queue structure.

    -

    This structure represents a generic Input or Output asymmetrical queue. The queue is asymmetrical because one end is meant to be accessed from a thread context, and thus can be blocking, the other end is accessible from interrupt handlers or from within a kernel lock zone (see I-Locked and S-Locked states in System States) and is non-blocking.

    - -

    Definition at line 70 of file chqueues.h.

    -

    Field Documentation

    - -
    - -
    - -

    Pointer to the queue buffer.

    - -

    Definition at line 71 of file chqueues.h.

    - -

    Referenced by chIQGetTimeout(), chIQInit(), chIQPutI(), chIQReadTimeout(), chIQResetI(), chOQGetI(), chOQInit(), chOQPutTimeout(), chOQResetI(), and chOQWriteTimeout().

    - -
    -
    - -
    - -
    - -

    Pointer to the first location after the buffer.

    - -

    Definition at line 72 of file chqueues.h.

    - -

    Referenced by chIQGetTimeout(), chIQInit(), chIQPutI(), chIQReadTimeout(), chOQGetI(), chOQInit(), chOQPutTimeout(), chOQResetI(), and chOQWriteTimeout().

    - -
    -
    - -
    - -
    - -

    Write pointer.

    - -

    Definition at line 74 of file chqueues.h.

    - -

    Referenced by chIQInit(), chIQPutI(), chIQResetI(), chOQInit(), chOQPutTimeout(), chOQResetI(), and chOQWriteTimeout().

    - -
    -
    - -
    - -
    - -

    Read pointer.

    - -

    Definition at line 75 of file chqueues.h.

    - -

    Referenced by chIQGetTimeout(), chIQInit(), chIQReadTimeout(), chIQResetI(), chOQGetI(), chOQInit(), and chOQResetI().

    - -
    -
    - - - -
    - -
    - -

    Data notification callback.

    - -

    Definition at line 77 of file chqueues.h.

    - -

    Referenced by chIQGetTimeout(), chIQInit(), chIQReadTimeout(), chOQInit(), chOQPutTimeout(), and chOQWriteTimeout().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_generic_queue__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_generic_queue__coll__graph.png deleted file mode 100644 index 9a0fc4720607d41855eaf8638f22368290bd4e9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4446 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 - -ChibiOS/RT: IOBus Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -


    - - -
    - -
    -

    IOBus Struct Reference
    - -[PAL Driver] -

    -
    -
    - -

    I/O bus descriptor. -More...

    - -

    #include <pal.h>

    - - - - - - - - -

    -Data Fields

    ioportid_t bus_portid
     Port identifier.
    ioportmask_t bus_mask
     Bus mask aligned to port bit 0.
    uint_fast8_t bus_offset
     Offset, within the port, of the least significant bit of the bus.
    -

    Detailed Description

    -

    I/O bus descriptor.

    -

    This structure describes a group of contiguous digital I/O lines that have to be handled as bus.

    -
    Note:
    I/O operations on a bus do not affect I/O lines on the same port but not belonging to the bus.
    - -

    Definition at line 129 of file pal.h.

    -

    Field Documentation

    - -
    - -
    - -

    Port identifier.

    - -

    Definition at line 133 of file pal.h.

    - -

    Referenced by palReadBus(), palSetBusMode(), and palWriteBus().

    - -
    -
    - -
    - -
    - -

    Bus mask aligned to port bit 0.

    -
    Note:
    The bus mask implicitly define the bus width. A logical AND is performed on the bus data.
    - -

    Definition at line 139 of file pal.h.

    - -

    Referenced by palReadBus(), palSetBusMode(), and palWriteBus().

    - -
    -
    - -
    - -
    - -

    Offset, within the port, of the least significant bit of the bus.

    - -

    Definition at line 143 of file pal.h.

    - -

    Referenced by palReadBus(), palSetBusMode(), and palWriteBus().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_l_p_c13xx__gpio__setup__t.html b/ChibiOS_2.0.8/docs/html/struct_l_p_c13xx__gpio__setup__t.html deleted file mode 100644 index 00556bf..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_l_p_c13xx__gpio__setup__t.html +++ /dev/null @@ -1,98 +0,0 @@ - - -ChibiOS/RT: LPC13xx_gpio_setup_t Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    LPC13xx_gpio_setup_t Struct Reference
    - -[LPC13xx I/O Ports Support] -

    -
    -
    - -

    GPIO port setup info. -More...

    - -

    #include <pal_lld.h>

    - - - - -

    -Data Fields

    uint32_t data
    uint32_t dir
    -

    Detailed Description

    -

    GPIO port setup info.

    - -

    Definition at line 56 of file platforms/LPC13xx/pal_lld.h.

    -

    Field Documentation

    - -
    - -
    -

    Initial value for FIO_PIN register.

    - -

    Definition at line 58 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    - -
    -

    Initial value for FIO_DIR register.

    - -

    Definition at line 60 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_m_a_c_driver.html b/ChibiOS_2.0.8/docs/html/struct_m_a_c_driver.html deleted file mode 100644 index 019918a..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_m_a_c_driver.html +++ /dev/null @@ -1,128 +0,0 @@ - - -ChibiOS/RT: MACDriver Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MACDriver Struct Reference
    - -[MAC Low Level DriverAT91SAM7 EMAC Support] -

    -
    -
    - -

    Structure representing a MAC driver. -More...

    - -

    #include <mac_lld.h>

    -
    -Collaboration diagram for MACDriver:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - -

    -Data Fields

    Semaphore md_tdsem
    Semaphore md_rdsem
    EventSource md_rdevent
    -

    Detailed Description

    -

    Structure representing a MAC driver.

    - -

    Definition at line 80 of file templates/mac_lld.h.

    -

    Field Documentation

    - -
    - -
    -

    Transmit semaphore.

    - -

    Definition at line 81 of file templates/mac_lld.h.

    - -

    Referenced by macObjectInit(), and macWaitTransmitDescriptor().

    - -
    -
    - -
    - -
    -

    Receive semaphore.

    - -

    Definition at line 82 of file templates/mac_lld.h.

    - -

    Referenced by macObjectInit(), and macWaitReceiveDescriptor().

    - -
    -
    - -
    - -
    -

    Receive event source.

    - -

    Definition at line 84 of file templates/mac_lld.h.

    - -

    Referenced by macObjectInit().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_m_a_c_driver__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_m_a_c_driver__coll__graph.png deleted file mode 100644 index 94ecafe1309e19b995a4a224ff3a45f7205f6f50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10152 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 K&t;ucLK6Ub+-Cj& diff --git a/ChibiOS_2.0.8/docs/html/struct_m_a_c_receive_descriptor.html b/ChibiOS_2.0.8/docs/html/struct_m_a_c_receive_descriptor.html deleted file mode 100644 index adf9882..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_m_a_c_receive_descriptor.html +++ /dev/null @@ -1,122 +0,0 @@ - - -ChibiOS/RT: MACReceiveDescriptor Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MACReceiveDescriptor Struct Reference
    - -[MAC Low Level DriverAT91SAM7 EMAC Support] -

    -
    -
    - -

    Structure representing a receive descriptor. -More...

    - -

    #include <mac_lld.h>

    -
    -Collaboration diagram for MACReceiveDescriptor:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - -

    -Data Fields

    size_t rd_offset
    size_t rd_size
    EMACDescriptorrd_physdesc
    -

    Detailed Description

    -

    Structure representing a receive descriptor.

    - -

    Definition at line 101 of file templates/mac_lld.h.

    -

    Field Documentation

    - -
    - -
    -

    Current read offset.

    - -

    Definition at line 102 of file templates/mac_lld.h.

    - -
    -
    - -
    -
    - - - - -
    size_t MACReceiveDescriptor::rd_size
    -
    -
    -

    Available data size.

    - -

    Definition at line 103 of file templates/mac_lld.h.

    - -
    -
    - -
    - -
    -

    Pointer to the first descriptor of the buffers chain.

    - -

    Definition at line 165 of file platforms/AT91SAM7/mac_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_m_a_c_receive_descriptor__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_m_a_c_receive_descriptor__coll__graph.png deleted file mode 100644 index 54cb4e9bc0c8cef39a315c6bb9d896838e1f3392..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2877 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 PL_mB`S3j3^P6 - -ChibiOS/RT: MACTransmitDescriptor Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MACTransmitDescriptor Struct Reference
    - -[MAC Low Level DriverAT91SAM7 EMAC Support] -

    -
    -
    - -

    Structure representing a transmit descriptor. -More...

    - -

    #include <mac_lld.h>

    -
    -Collaboration diagram for MACTransmitDescriptor:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - -

    -Data Fields

    size_t td_offset
    size_t td_size
    EMACDescriptortd_physdesc
    -

    Detailed Description

    -

    Structure representing a transmit descriptor.

    - -

    Definition at line 92 of file templates/mac_lld.h.

    -

    Field Documentation

    - -
    - -
    -

    Current write offset.

    - -

    Definition at line 93 of file templates/mac_lld.h.

    - -
    -
    - -
    -
    - - - - -
    size_t MACTransmitDescriptor::td_size
    -
    -
    -

    Available space size.

    - -

    Definition at line 94 of file templates/mac_lld.h.

    - -
    -
    - -
    - -
    -

    Pointer to the physical descriptor.

    - -

    Definition at line 154 of file platforms/AT91SAM7/mac_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_m_a_c_transmit_descriptor__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_m_a_c_transmit_descriptor__coll__graph.png deleted file mode 100644 index 851d4e8a77d86535c1011234cce960c7e83daa86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2935 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 j=DxSpwc2QK*|PSpeDby|$C_nRlR$h=S3j3^P6 - -ChibiOS/RT: MMCConfig Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    MMCConfig Struct Reference
    - -[MMC over SPI Driver] -

    -
    -
    - -

    Driver configuration structure. -More...

    - -

    #include <mmc_spi.h>

    - -
    -

    Detailed Description

    -

    Driver configuration structure.

    - -

    Definition at line 131 of file mmc_spi.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_m_m_c_driver.html b/ChibiOS_2.0.8/docs/html/struct_m_m_c_driver.html deleted file mode 100644 index 6b0dbf9..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_m_m_c_driver.html +++ /dev/null @@ -1,302 +0,0 @@ - - -ChibiOS/RT: MMCDriver Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MMCDriver Struct Reference
    - -[MMC over SPI Driver] -

    -
    -
    - -

    Structure representing a MMC driver. -More...

    - -

    #include <mmc_spi.h>

    -
    -Collaboration diagram for MMCDriver:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Fields

    mmcstate_t mmc_state
     Driver state.
    const MMCConfigmmc_config
     Current configuration data.
    SPIDrivermmc_spip
     SPI driver associated to this MMC driver.
    const SPIConfigmmc_lscfg
     SPI low speed configuration used during initialization.
    const SPIConfigmmc_hscfg
     SPI high speed configuration used during transfers.
    mmcquery_t mmc_is_protected
     Write protect status query function.
    mmcquery_t mmc_is_inserted
     Insertion status query function.
    EventSource mmc_inserted_event
     Card insertion event source.
    EventSource mmc_removed_event
     Card removal event source.
    VirtualTimer mmc_vt
     MMC insertion polling timer.
    uint_fast8_t mmc_cnt
     Insertion counter.
    -

    Detailed Description

    -

    Structure representing a MMC driver.

    - -

    Definition at line 138 of file mmc_spi.h.

    -

    Field Documentation

    - - - -
    -
    - - - - -
    const MMCConfig* MMCDriver::mmc_config
    -
    -
    - -

    Current configuration data.

    - -

    Definition at line 146 of file mmc_spi.h.

    - -

    Referenced by mmcObjectInit(), and mmcStart().

    - -
    -
    - - - -
    -
    - - - - -
    const SPIConfig* MMCDriver::mmc_lscfg
    -
    -
    - -

    SPI low speed configuration used during initialization.

    - -

    Definition at line 154 of file mmc_spi.h.

    - -

    Referenced by mmcConnect(), and mmcObjectInit().

    - -
    -
    - -
    -
    - - - - -
    const SPIConfig* MMCDriver::mmc_hscfg
    -
    -
    - -

    SPI high speed configuration used during transfers.

    - -

    Definition at line 158 of file mmc_spi.h.

    - -

    Referenced by mmcConnect(), mmcObjectInit(), mmcStartSequentialRead(), and mmcStartSequentialWrite().

    - -
    -
    - -
    - -
    - -

    Write protect status query function.

    - -

    Definition at line 162 of file mmc_spi.h.

    - -

    Referenced by mmcObjectInit().

    - -
    -
    - -
    - -
    - -

    Insertion status query function.

    - -

    Definition at line 166 of file mmc_spi.h.

    - -

    Referenced by mmcObjectInit(), and tmrfunc().

    - -
    -
    - -
    - -
    - -

    Card insertion event source.

    - -

    Definition at line 170 of file mmc_spi.h.

    - -

    Referenced by mmcObjectInit(), and tmrfunc().

    - -
    -
    - -
    - -
    - -

    Card removal event source.

    - -

    Definition at line 174 of file mmc_spi.h.

    - -

    Referenced by mmcObjectInit(), and tmrfunc().

    - -
    -
    - -
    - -
    - -

    MMC insertion polling timer.

    - -

    Definition at line 178 of file mmc_spi.h.

    - -

    Referenced by mmcStart(), mmcStop(), and tmrfunc().

    - -
    -
    - -
    - -
    - -

    Insertion counter.

    - -

    Definition at line 182 of file mmc_spi.h.

    - -

    Referenced by mmcStart(), and tmrfunc().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_m_m_c_driver__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_m_m_c_driver__coll__graph.png deleted file mode 100644 index ed5b9f776600685c1abbff5f240e7d997f753889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47191 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 b+|lr#|8#KEzu83!aUcbru6{1-oD!M - -ChibiOS/RT: MemStreamVMT Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    MemStreamVMT Struct Reference
    - -[Memory Streams] -

    -
    -
    - -

    MemStream virtual methods table. -More...

    - -

    #include <memstreams.h>

    - -
    -

    Detailed Description

    -

    MemStream virtual methods table.

    - -

    Definition at line 55 of file memstreams.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_memory_pool.html b/ChibiOS_2.0.8/docs/html/struct_memory_pool.html deleted file mode 100644 index 2bb2ebb..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_memory_pool.html +++ /dev/null @@ -1,134 +0,0 @@ - - -ChibiOS/RT: MemoryPool Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MemoryPool Struct Reference
    - -[Memory Pools] -

    -
    -
    - -

    Memory pool descriptor. -More...

    - -

    #include <chmempools.h>

    -
    -Collaboration diagram for MemoryPool:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    struct pool_headermp_next
     Pointer to the header.
    size_t mp_object_size
     Memory pool objects size.
    memgetfunc_t mp_provider
     Memory blocks provider for this pool.
    -

    Detailed Description

    -

    Memory pool descriptor.

    - -

    Definition at line 51 of file chmempools.h.

    -

    Field Documentation

    - -
    -
    - - - - -
    struct pool_header* MemoryPool::mp_next
    -
    -
    - -

    Pointer to the header.

    - -

    Definition at line 52 of file chmempools.h.

    - -

    Referenced by chPoolAllocI(), chPoolFreeI(), and chPoolInit().

    - -
    -
    - -
    -
    - - - - -
    size_t MemoryPool::mp_object_size
    -
    -
    - -

    Memory pool objects size.

    - -

    Definition at line 53 of file chmempools.h.

    - -

    Referenced by chPoolAllocI(), chPoolInit(), and chThdCreateFromMemoryPool().

    - -
    -
    - -
    - -
    - -

    Memory blocks provider for this pool.

    - -

    Definition at line 55 of file chmempools.h.

    - -

    Referenced by chPoolAllocI(), and chPoolInit().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_memory_pool__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_memory_pool__coll__graph.png deleted file mode 100644 index 6f07eaa54143ed42f002c239f5b3fcb7529c2a15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3693 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 V38z$#F)%PNc)I$ztaD0e0suj=Ax!`P diff --git a/ChibiOS_2.0.8/docs/html/struct_memory_stream.html b/ChibiOS_2.0.8/docs/html/struct_memory_stream.html deleted file mode 100644 index ff3bbea..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_memory_stream.html +++ /dev/null @@ -1,94 +0,0 @@ - - -ChibiOS/RT: MemoryStream Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    MemoryStream Struct Reference
    - -[Memory Streams] -

    -
    -
    - -

    Memory stream object. -More...

    - -

    #include <memstreams.h>

    - -

    Inherits BaseSequentialStream.

    -
    -Collaboration diagram for MemoryStream:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - -

    -Data Fields

    struct MemStreamVMTvmt
     Virtual Methods Table.
    -

    Detailed Description

    -

    Memory stream object.

    - -

    Definition at line 64 of file memstreams.h.

    -

    Field Documentation

    - -
    -
    - - - - -
    struct MemStreamVMT* MemoryStream::vmt
    -
    -
    - -

    Virtual Methods Table.

    - -

    Reimplemented from BaseSequentialStream.

    - -

    Definition at line 66 of file memstreams.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_memory_stream__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_memory_stream__coll__graph.png deleted file mode 100644 index 69f58ad6a1d57532aabce064cd4ebd43f45c4cbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6239 zcmeAS@N?(olHy`uVBq!ia0y~yU=(IxU@YcfV_;yAjeYxwfq{W7$=lt9;Xep2*t>i( z0|NtliKnkC`z>x6UM}8wFT8g%Fi0?Zx;TbZ%z1maevV9O?eUM_%fIQd|MZn!D4aK0Y+8+#Szp^;5)=+D|*wU>O;wW|HmxH{+55ZOzf#}&CC+(+3tiCoY zEYstQp8XTSXjZL*1?~)!6Z$4R$@_lWzUboFw6gMV?{@#5d$ZP7zQ6X)y*Fpd?KT^K zzW4sjKM76-2nY~WOSy4tR(PY^mmN#0YsDGMXF0W%^8AerKkalOz)FSphaOX2Yip-U ztZt^SF1Mp|`4hr5|w24EAG5!c<9#Zr{}``u2?9qsC!vKy}$iQL|~=t|VO-oJe4Oz0!WMt#s{IIH@leB(I;%AQAlBaW@1eUic)RKSgdAYR9@A=$_c-dFAk=pzn*fh<}|s*QXii%Hx`EO z{5@5#e2P_@@%|NW-R91d_>6qJVPS)6 zLSaH`^mmr~rVRT;cV9W0<@tVPs-kD9*Xb?7^IqP+r}lDx?e$3tvX6qaO4Zk-Z_0bo z#<6bBrrFmC`^D~QERpJ&o8K!v2)psrQSf4HvDrL}cLCn>r>c4UdUi-R zSN=<^@B{AWK5hwT9tK|bkka-H`*q;dws%|ZcQMp+Oiqkala|QNyL6#ALnXWDVAA{Q@@dKxW25=s!W15GCI&535U=c;C*_)|LGAy{kR#+nm79N{s#- zlRK{Y-8b|)c2Cdq+Kuhy-?rFGn#DbzwoP=>y9rC?e2L)oX4#|UqjanKP`3OO6>Z&j zZ!+uuyeQDF-CuBrH9GB{Mag$x?Q{2Qih8|33Kwlkn`l~gG2r~;{+_$R7ON(16y~3M zLFwgvH(rzaHDRhuc7kexYjR%C6OZ_O_uRa1zZd&`{wI5xKRWrodh%_MQ&!FT%2?S~o{1s6B3q(CxTRCN)s{#4 zllgx!Grk75ZJX9s@AGQ+jK~mBSz-OfM<&8_v%8gq1DKNXUW>;X!ZibaG0vsYuxhGx!Op!K{PODo0Okd-rp7+P4pXrA%z> z7`YGN%DxcwP;!FEpLv`GEb|*!9~|+}kFoQQXjRX} z7hSgYdh@nhteISNTKwrpC*^f}uO%wU#&3B&Rp46OoU(l@N{`f9K3ex-XVJ%NrIW6C zu6(-Qi{Tf?ai= z*;-EJJ0H*aG|u(Z+Al$;19Dv5R&I@vcE8OT-KU`#e)4l@j?8=M=NzqXue4h4b^53O zHAW?K?v$v1t2$06p1b()Xy4OM$2%{T>hiRC?b;nU|I5U6Gc-PHZk0)VEF1c+Qpdbj zS>j!>;Pldl9>_R1$S_FW2JwxMuUA)n$&w_X1t)L9?> zy0$^LXn)A0+fDnYo?CupL($v566F<3`Yg7}mIuafU2G>`7_I(v+WKXCr&-J~*0fm} z@~Up*M{nNsC9}NVKi?kgwX;|$(R8|%U__4c$`VQGiv`!>Zd-4at6;FPa8OAQnojyBH<#vqfW$W1E zg|=rHCm6JN?oipU#T*CC1t^UQa2nLJ+hXP!G`qR1A?U`rN6C|x*tRmqww$zX&vP){ zIQQu3S%(<)4n3JZ>6�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 FngDyc#t;Ai diff --git a/ChibiOS_2.0.8/docs/html/struct_mutex.html b/ChibiOS_2.0.8/docs/html/struct_mutex.html deleted file mode 100644 index 8307f7d..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_mutex.html +++ /dev/null @@ -1,134 +0,0 @@ - - -ChibiOS/RT: Mutex Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Mutex Struct Reference
    - -[Mutexes] -

    -
    -
    - -

    Mutex structure. -More...

    - -

    #include <chmtx.h>

    -
    -Collaboration diagram for Mutex:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    ThreadsQueue m_queue
     Queue of the threads sleeping on this Mutex.
    Threadm_owner
     Owner Thread pointer or NULL.
    struct Mutexm_next
     Next Mutex into an owner-list or NULL.
    -

    Detailed Description

    -

    Mutex structure.

    - -

    Definition at line 43 of file chmtx.h.

    -

    Field Documentation

    - -
    - -
    - -

    Queue of the threads sleeping on this Mutex.

    - -

    Definition at line 44 of file chmtx.h.

    - -

    Referenced by chMtxInit(), chMtxLockS(), chMtxUnlock(), chMtxUnlockAll(), and chMtxUnlockS().

    - -
    -
    - -
    -
    - - - - -
    Thread* Mutex::m_owner
    -
    -
    - -

    Owner Thread pointer or NULL.

    - -

    Definition at line 46 of file chmtx.h.

    - -

    Referenced by chMtxInit(), chMtxLockS(), chMtxTryLockS(), chMtxUnlock(), chMtxUnlockAll(), and chMtxUnlockS().

    - -
    -
    - -
    -
    - - - - -
    struct Mutex* Mutex::m_next
    -
    -
    - -

    Next Mutex into an owner-list or NULL.

    - -

    Definition at line 48 of file chmtx.h.

    - -

    Referenced by chMtxLockS(), chMtxTryLockS(), chMtxUnlock(), chMtxUnlockAll(), and chMtxUnlockS().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_mutex__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_mutex__coll__graph.png deleted file mode 100644 index dd98cd4b4edc5a129618c2ec7175af672ed933df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33232 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 diff --git a/ChibiOS_2.0.8/docs/html/struct_p_a_l_config.html b/ChibiOS_2.0.8/docs/html/struct_p_a_l_config.html deleted file mode 100644 index d6ed088..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_p_a_l_config.html +++ /dev/null @@ -1,612 +0,0 @@ - - -ChibiOS/RT: PALConfig Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - - -
    - -

    AT91SAM7 PIO static initializer. -More...

    - -

    #include <pal_lld.h>

    -
    -Collaboration diagram for PALConfig:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Fields

    at91sam7_pio_setup_t P0Data
     Port 0 setup data.
    at91sam7_pio_setup_t P1Data
     Port 1 setup data.
    lpc111x_gpio_setup_t P0
     GPIO 0 setup data.
    lpc111x_gpio_setup_t P1
     GPIO 1 setup data.
    lpc111x_gpio_setup_t P2
     GPIO 2 setup data.
    lpc111x_gpio_setup_t P3
     GPIO 3 setup data.
    LPC13xx_gpio_setup_t P0
     GPIO 0 setup data.
    LPC13xx_gpio_setup_t P1
     GPIO 1 setup data.
    LPC13xx_gpio_setup_t P2
     GPIO 2 setup data.
    LPC13xx_gpio_setup_t P3
     GPIO 3 setup data.
    uint32_t pinsel0
     PINSEL0 initial value.
    uint32_t pinsel1
     PINSEL1 initial value.
    uint32_t pinsel2
     PINSEL2 initial value.
    lpc214x_fio_setup_t P0Data
     Port 0 setup data.
    lpc214x_fio_setup_t P1Data
     Port 1 setup data.
    msp430_dio_setup_t P1Data
     Port 1 setup data.
    msp430_dio_setup_t P2Data
     Port 2 setup data.
    msp430_dio_setup_t P3Data
     Port 3 setup data.
    msp430_dio_setup_t P4Data
     Port 4 setup data.
    msp430_dio_setup_t P5Data
     Port 5 setup data.
    msp430_dio_setup_t P6Data
     Port 6 setup data.
    stm32_gpio_setup_t PAData
     Port A setup data.
    stm32_gpio_setup_t PBData
     Port B setup data.
    stm32_gpio_setup_t PCData
     Port C setup data.
    stm32_gpio_setup_t PDData
     Port D setup data.
    stm32_gpio_setup_t PEData
     Port E setup data.
    stm32_gpio_setup_t PFData
     Port F setup data.
    stm32_gpio_setup_t PGData
     Port G setup data.
    -

    Detailed Description

    -

    AT91SAM7 PIO static initializer.

    -

    Generic I/O ports static initializer.

    -

    STM32 GPIO static initializer.

    -

    MSP430 I/O ports static initializer.

    -

    LPC214x FIO static initializer.

    -

    GPIO static initializer.

    -

    An instance of this structure must be passed to palInit() at system startup time in order to initialize the digital I/O subsystem. This represents only the initial setup, specific pads or whole ports can be reprogrammed at later time.

    -

    An instance of this structure must be passed to palInit() at system startup time in order to initialized the digital I/O subsystem. This represents only the initial setup, specific pads or whole ports can be reprogrammed at later time.

    -
    Note:
    The IOCON block is not configured, initially all pins have enabled pullups and are programmed as GPIO. It is responsibility of the various drivers to reprogram the pins in the proper mode. Pins that are not handled by any driver may be programmed in board.c.
    -

    An instance of this structure must be passed to palInit() at system startup time in order to initialized the digital I/O subsystem. This represents only the initial setup, specific pads or whole ports can be reprogrammed at later time.

    - -

    Definition at line 68 of file platforms/AT91SAM7/pal_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Port 0 setup data.

    - -

    Definition at line 70 of file platforms/AT91SAM7/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port 1 setup data.

    - -

    Definition at line 74 of file platforms/AT91SAM7/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    GPIO 0 setup data.

    - -

    Definition at line 77 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    GPIO 1 setup data.

    - -

    Definition at line 79 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    GPIO 2 setup data.

    - -

    Definition at line 81 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    GPIO 3 setup data.

    - -

    Definition at line 83 of file platforms/LPC11xx/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    GPIO 0 setup data.

    - -

    Definition at line 77 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    GPIO 1 setup data.

    - -

    Definition at line 79 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    GPIO 2 setup data.

    - -

    Definition at line 81 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    GPIO 3 setup data.

    - -

    Definition at line 83 of file platforms/LPC13xx/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    PINSEL0 initial value.

    - -

    Definition at line 70 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    PINSEL1 initial value.

    - -

    Definition at line 72 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    PINSEL2 initial value.

    - -

    Definition at line 74 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port 0 setup data.

    - -

    Definition at line 76 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port 1 setup data.

    - -

    Definition at line 78 of file platforms/LPC214x/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port 1 setup data.

    - -

    Definition at line 92 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port 2 setup data.

    - -

    Definition at line 98 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port 3 setup data.

    - -

    Definition at line 104 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port 4 setup data.

    - -

    Definition at line 110 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port 5 setup data.

    - -

    Definition at line 116 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port 6 setup data.

    - -

    Definition at line 122 of file platforms/MSP430/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port A setup data.

    - -

    Definition at line 79 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port B setup data.

    - -

    Definition at line 81 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port C setup data.

    - -

    Definition at line 83 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port D setup data.

    - -

    Definition at line 85 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port E setup data.

    - -

    Definition at line 88 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port F setup data.

    - -

    Definition at line 92 of file platforms/STM32/pal_lld.h.

    - -
    -
    - -
    - -
    - -

    Port G setup data.

    - -

    Definition at line 94 of file platforms/STM32/pal_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_p_a_l_config__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_p_a_l_config__coll__graph.png deleted file mode 100644 index 11d2480f3b54e60fce3edf253fa5e40c0dd88f9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39031 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 nN@5@9Pq|dTK8}R}3sCgTe~DWM4fzl?OP diff --git a/ChibiOS_2.0.8/docs/html/struct_p_w_m_channel_config.html b/ChibiOS_2.0.8/docs/html/struct_p_w_m_channel_config.html deleted file mode 100644 index c730217..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_p_w_m_channel_config.html +++ /dev/null @@ -1,108 +0,0 @@ - - -ChibiOS/RT: PWMChannelConfig Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    PWMChannelConfig Struct Reference
    - -[PWM Low Level DriverPWM Driver] -

    -
    -
    - -

    PWM driver channel configuration structure. -More...

    - -

    #include <pwm_lld.h>

    - - - - - - -

    -Data Fields

    pwmmode_t pcc_mode
     Channel active logic level.
    pwmcallback_t pcc_callback
     Channel callback pointer.
    -

    Detailed Description

    -

    PWM driver channel configuration structure.

    -
    Note:
    Some architectures may not be able to support the channel mode or the callback, in this case the fields are ignored.
    - -

    Definition at line 90 of file templates/pwm_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Channel active logic level.

    - -

    Definition at line 94 of file templates/pwm_lld.h.

    - -

    Referenced by pwm_lld_start().

    - -
    -
    - -
    - -
    - -

    Channel callback pointer.

    -
    Note:
    This callback is invoked on the channel compare event. If set to NULL then the callback is disabled.
    - -

    Definition at line 100 of file templates/pwm_lld.h.

    - -

    Referenced by pwm_lld_enable_channel().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_p_w_m_config.html b/ChibiOS_2.0.8/docs/html/struct_p_w_m_config.html deleted file mode 100644 index d9f4184..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_p_w_m_config.html +++ /dev/null @@ -1,180 +0,0 @@ - - -ChibiOS/RT: PWMConfig Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    PWMConfig Struct Reference
    - -[PWM Low Level DriverPWM Driver] -

    -
    -
    - -

    Driver configuration structure. -More...

    - -

    #include <pwm_lld.h>

    -
    -Collaboration diagram for PWMConfig:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - - - -

    -Data Fields

    pwmcallback_t pc_callback
     Periodic callback pointer.
    PWMChannelConfig pc_channels [PWM_CHANNELS]
     Channels configurations.
    uint16_t pc_psc
     TIM PSC (pre-scaler) register initialization data.
    uint16_t pc_arr
     TIM ARR (auto-reload) register initialization data.
    uint16_t pc_cr2
     TIM CR2 register initialization data.
    -

    Detailed Description

    -

    Driver configuration structure.

    -

    PWM driver configuration structure.

    -
    Note:
    Implementations may extend this structure to contain more, architecture dependent, fields.
    - -

    Definition at line 109 of file templates/pwm_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Periodic callback pointer.

    -
    Note:
    This callback is invoked on PWM counter reset. If set to NULL then the callback is disabled.
    - -

    Definition at line 115 of file templates/pwm_lld.h.

    - -

    Referenced by pwm_lld_start().

    - -
    -
    - -
    - -
    - -

    Channels configurations.

    - -

    Definition at line 119 of file templates/pwm_lld.h.

    - -

    Referenced by pwm_lld_enable_channel(), and pwm_lld_start().

    - -
    -
    - -
    - -
    - -

    TIM PSC (pre-scaler) register initialization data.

    - -

    Definition at line 184 of file platforms/STM32/pwm_lld.h.

    - -

    Referenced by pwm_lld_start().

    - -
    -
    - -
    - -
    - -

    TIM ARR (auto-reload) register initialization data.

    - -

    Definition at line 188 of file platforms/STM32/pwm_lld.h.

    - -

    Referenced by pwm_lld_start().

    - -
    -
    - -
    - -
    - -

    TIM CR2 register initialization data.

    -
    Note:
    The value of this field should normally be equal to zero.
    - -

    Definition at line 193 of file platforms/STM32/pwm_lld.h.

    - -

    Referenced by pwm_lld_start().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_p_w_m_config__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_p_w_m_config__coll__graph.png deleted file mode 100644 index f06e6d49f2125746ec759ea44f822e09202cc21c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3156 zcmeAS@N?(olHy`uVBq!ia0y~yU}$DwU^L)hV_;yIvgHsb0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj;BVUU=_jVBr4d>EaktG3V`F{~TF&S@sX_EzBAxEL%Ha!l{MR zq@Fh@DJDg`M95^-F!IU#NN#Ot(Q-YvFoa{PZOD^=iwzbBSF$hP+2*Xws3j!SuHN1q zIQ52WQ^AHy9%2g0EF4)G(jE5;Hr&^r{q@YdGq-Qvy*c;2d)24U`|ehLzE@XnyLXgHcGb!r@IRF{Ym3kSou?07;atD_Tn6{yug&bLDU0561=vWi3Gpy< zwl%UGc36}pQSy#)#`)kI%Wj^_e6sxc{lj5t!ZEMHw!R6ooBj5}CHHSfrsghPea8Rx z>up9p>t~Y&%kc+z5=|9)pnGikc<@?&HyFzRKKS;_j zo^rDOWomSG**~q_Vbi~FJ^MI1eY%y)|MW#KoNvVi&pV%+Dtb1#DsT4vtupg>^=@AC zx;${U-W$oFu#y|nGKU4WyGd_&Gh5-H!Gr_}4+9<*NVwcy__UvK&!rUC6}5Ma0~C25 z)ZCuBAYsmR_3tnh;E-!dtWa3i9UpzrU;;;Jq4!1A4?i~w=rxDbtdrl;yY)k*{OtoW z)4#v(UAC^|ljIwta}Pvsd#GIhezN~zPpL)x+Er}_O$4qzbqWxk&+UDD=JK4M5^P_$ zX2vOs_VS+`JUi{`~sF7q*jbdbea5|KQ6x>0dlEZfRcX`(Tp@)tP%; zCQm>0dy8sKn8VaYjkWwSou1Q=`Q9kI?zwJhpgpFWG#J6&eR z;jn-AhSm4@i{?D_t?oPbB3XP}=D$rwtM=UcxwvDZT}k5avcUde`}unB&b^cUb)ofb zRA14b$ZdPx@0oj0FGuLjA+>|X6QJP>4LyZ}za1t$nAgbl(Qd-uL%$s+*~2AJweAOTmEi)?DQEg_u2RP+bvsvChx`h zx-T)WOEX_QG|5vs8T)jq@$BgfzGz3iv|pEV##ejAqS^JT$~z7Iytw>Y-m32Xi}{Q; zbp|hswPzRa&)V#_(PJHB<)3>O^D`b?{CodPt;606dA*M&hDh-BDa3^oDJ)cD-23I$ zn`7#?)`aU!;yQfwXY~B*7nUz5`Br@YI>UE94;`K=i;t6-z7M{%n4p;Rnxxz9;d)4f8I%x+%6wbZW{W0~tS?_56NIUcNb-HuWB}fho(rzpq~2 zJ|4X)PGl0t;a7Los*4u*F$Vwk46wJTc$t6UmE8gplRn?t2ltHEhHXjpY;nx|I)|-K z!$Et+)$ZBF_iZa)`etlhv!LB8k;%*czfpFwqJS5N(SN+4p*%B+j8awXpFEq}wWoqzUU)tpq2n(Qo#LfewLN!M>1 z*i`@ivVXPC|1~vsvU{8Q{p#;G;%~2G7X*QcfzgM* z9jl6;m##1|MZ+r&ofmRxwzii@b7#4oTCTr?cOeU@lXDksm#9n z0qSz{^-tE=8GfC3?RDTo!I-CgtClWRjoDSA=@NV5V1mJcr>Cc9YtGI^R98)j3WA{$ zV&dZRRXxjQKHIFDt$qEQo#LyU)xpJ?NYwxf6wSmo-eoi#o-6q(sJ|H)|tG2F)_At z*~@LVPTS__u`+fT@Z4N`;hQUSUUkp5(zpKZS9001!b+;ygrl1a@4SpGeHWW_zxb)^ z_Vg9ASK0=c?DhH?`y+T-=-06A*QZUJc5d_aOY2T8TL}I*N8T zBr04yHPz4cI%`_{dB$%K%hoBc@cI0E%H!bvO-0V}{E|^qrteMNZ*u#_sZILV%=Y_R z+I`i~Hvgu;z}tS%B<$iB)}1w(`{LhNC~wRuEsorm?Z_a-=Uk_q?R-5SZswb+H?wEfu3b}e z`>c6a-l>O|sw2NtMK7}6!t(0vR+;5B^Iz`UJKb<@iubzfn_k$?-myz_|MhNF4u___ z)67DvjW@^q^7VOtbDM_r1mCYwZCbaNuc@h4T(-F9NtJHw{o*@QpWLc`8MR(*wE;IkrZ;f4_ zc^qcw<=ihydKZ=FwSM=8)4Nu6@0t+I%`_oHyiDh7hwl{L69KU|Qk!$TtJH&Y%)e~o zzP)|UjNQ{_3#Bp(N$l4RTslXDd4g!JM9k71*6Y1X5);JBsu$%r1X)AcD4+-h<-m)# z^>S|ix%tW0K3ME-CEJ3Vfj9J0moC~Kd&6~Zz%s@BE06WwOjx`sSTL2@=!-@U+d<#_ z-5Z>HSNVBP;q_4P5#RPQPd7*ZhO0DNxJ;|8AG$rAFK+SVdi-7WV&ap-2kN@mC%xb5 zQ+jl^%g*$SUDqdl`?~G=ri{AVn^v|j*}iw$zN9t5mlxS=$@z8fBF~|HDpk7O&&*@L zP0KP^l;gnkuv$0wa!~9?wTo>BMXPlWck1!H*_z`&h1VmCopAF1_r8?jT>A=+%I^33 zultgf{z1WYkocCxqEAadH6LWCuC7*m<;0hFXGdW4&CtUi)EZV=X?wVUz{Fqn)>&~u VS1Ny}F)%PNc)I$ztaD0e0sz - -ChibiOS/RT: PWMDriver Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    PWMDriver Struct Reference
    - -[PWM Low Level DriverPWM Driver] -

    -
    -
    - -

    Structure representing an PWM driver. -More...

    - -

    #include <pwm_lld.h>

    -
    -Collaboration diagram for PWMDriver:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - -

    -Data Fields

    pwmstate_t pd_state
     Driver state.
    const PWMConfigpd_config
     Current configuration data.
    uint32_t pd_enabled_channels
     Bit mask of the enabled channels.
    TIM_TypeDef * pd_tim
     Pointer to the TIMx registers block.
    -

    Detailed Description

    -

    Structure representing an PWM driver.

    -

    Structure representing a PWM driver.

    -
    Note:
    Implementations may extend this structure to contain more, architecture dependent, fields.
    - -

    Definition at line 128 of file templates/pwm_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Driver state.

    - -

    Definition at line 132 of file templates/pwm_lld.h.

    - -

    Referenced by pwm_lld_start(), pwm_lld_stop(), pwmDisableChannel(), pwmEnableChannel(), pwmObjectInit(), pwmStart(), and pwmStop().

    - -
    -
    - -
    -
    - - - - -
    const PWMConfig * PWMDriver::pd_config
    -
    -
    - -

    Current configuration data.

    -

    Current driver configuration data.

    - -

    Definition at line 136 of file templates/pwm_lld.h.

    - -

    Referenced by pwm_lld_enable_channel(), pwm_lld_start(), pwmObjectInit(), and pwmStart().

    - -
    -
    - -
    - -
    - -

    Bit mask of the enabled channels.

    - -

    Definition at line 215 of file platforms/STM32/pwm_lld.h.

    - -

    Referenced by pwm_lld_disable_channel(), pwm_lld_enable_channel(), pwm_lld_init(), pwm_lld_start(), and pwm_lld_stop().

    - -
    -
    - -
    -
    - - - - -
    TIM_TypeDef* PWMDriver::pd_tim
    -
    -
    - -

    Pointer to the TIMx registers block.

    - -

    Definition at line 219 of file platforms/STM32/pwm_lld.h.

    - -

    Referenced by pwm_lld_disable_channel(), pwm_lld_enable_channel(), pwm_lld_init(), pwm_lld_start(), and pwm_lld_stop().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_p_w_m_driver__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_p_w_m_driver__coll__graph.png deleted file mode 100644 index 6c9d6a5379efdcb864ef358df8924fa116655594..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5344 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 diff --git a/ChibiOS_2.0.8/docs/html/struct_ready_list.html b/ChibiOS_2.0.8/docs/html/struct_ready_list.html deleted file mode 100644 index cc21e46..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_ready_list.html +++ /dev/null @@ -1,195 +0,0 @@ - - -ChibiOS/RT: ReadyList Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    ReadyList Struct Reference
    - -[SchedulerCore Port Implementation] -

    -
    -
    - -

    Ready list header. -More...

    - -

    #include <chschd.h>

    - -

    Inherits ThreadsQueue.

    -
    -Collaboration diagram for ReadyList:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - - - - - -

    -Data Fields

    ThreadsQueue r_queue
     Threads queue.
    tprio_t r_prio
     This field must be initialized to zero.
    struct context r_ctx
     Not used, present because offsets.
    Threadr_newer
     Newer registry element.
    Threadr_older
     Older registry element.
    Threadr_current
     The currently running thread.
    -

    Detailed Description

    -

    Ready list header.

    - -

    Definition at line 77 of file chschd.h.

    -

    Field Documentation

    - -
    - -
    - -

    Threads queue.

    - -

    Definition at line 78 of file chschd.h.

    - -

    Referenced by chSchDoRescheduleI(), chSchGoSleepS(), chSchIsRescRequiredExI(), chSchReadyI(), and scheduler_init().

    - -
    -
    - -
    - -
    - -

    This field must be initialized to zero.

    - -

    Definition at line 79 of file chschd.h.

    - -

    Referenced by scheduler_init().

    - -
    -
    - -
    -
    - - - - -
    struct context ReadyList::r_ctx
    -
    -
    - -

    Not used, present because offsets.

    - -

    Definition at line 81 of file chschd.h.

    - -
    -
    - -
    -
    - - - - -
    Thread * ReadyList::r_newer
    -
    -
    - -

    Newer registry element.

    - -

    Definition at line 84 of file chschd.h.

    - -

    Referenced by chRegFirstThread(), and scheduler_init().

    - -
    -
    - -
    -
    - - - - -
    Thread * ReadyList::r_older
    -
    -
    - -

    Older registry element.

    - -

    Definition at line 85 of file chschd.h.

    - -

    Referenced by scheduler_init().

    - -
    -
    - -
    - -
    - -

    The currently running thread.

    - -

    Definition at line 92 of file chschd.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_ready_list__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_ready_list__coll__graph.png deleted file mode 100644 index 5e93b1f70a6e305fa29134b99a0e21ef0e36f092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42429 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 tdHvF3aByAwIo3h8>PR^w0}|+H{LkF - -ChibiOS/RT: SPIConfig Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    SPIConfig Struct Reference
    - -[SPI Low Level DriverLPC214x SPI SupportSTM32 SPI Support] -

    -
    -
    - -

    Driver configuration structure. -More...

    - -

    #include <spi_lld.h>

    - - - - - - - - - - - - -

    -Data Fields

    ioportid_t spc_ssport
     The chip select line port.
    uint16_t spc_sspad
     The chip select line pad number.
    uint16_t spc_cr0
     SSP CR0 initialization data.
    uint16_t spc_cr1
     SSP CR1 initialization data.
    uint32_t spc_cpsr
     SSP CPSR initialization data.
    -

    Detailed Description

    -

    Driver configuration structure.

    - -

    Definition at line 59 of file templates/spi_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    The chip select line port.

    - -

    Definition at line 71 of file platforms/LPC214x/spi_lld.h.

    - -
    -
    - -
    - -
    - -

    The chip select line pad number.

    - -

    Definition at line 75 of file platforms/LPC214x/spi_lld.h.

    - -
    -
    - -
    - -
    - -

    SSP CR0 initialization data.

    - -

    Definition at line 79 of file platforms/LPC214x/spi_lld.h.

    - -
    -
    - -
    - -
    - -

    SSP CR1 initialization data.

    -

    SPI initialization data.

    - -

    Definition at line 83 of file platforms/LPC214x/spi_lld.h.

    - -
    -
    - -
    - -
    - -

    SSP CPSR initialization data.

    - -

    Definition at line 87 of file platforms/LPC214x/spi_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_s_p_i_driver.html b/ChibiOS_2.0.8/docs/html/struct_s_p_i_driver.html deleted file mode 100644 index 60c7c74..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_s_p_i_driver.html +++ /dev/null @@ -1,229 +0,0 @@ - - -ChibiOS/RT: SPIDriver Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    SPIDriver Struct Reference
    - -[SPI Low Level DriverLPC214x SPI SupportSTM32 SPI Support] -

    -
    -
    - -

    Structure representing a SPI driver. -More...

    - -

    #include <spi_lld.h>

    -
    -Collaboration diagram for SPIDriver:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - - - - - - - - - -

    -Data Fields

    spistate_t spd_state
     Driver state.
    Mutex spd_mutex
     Mutex protecting the bus.
    const SPIConfigspd_config
     Current configuration data.
    Threadspd_thread
     Thread waiting for I/O completion.
    SPI_TypeDef * spd_spi
     Pointer to the SPIx registers block.
    DMA_Channel_TypeDef * spd_dmarx
     Pointer to the receive DMA channel registers block.
    DMA_Channel_TypeDef * spd_dmatx
     Pointer to the transmit DMA channel registers block.
    uint32_t spd_dmaprio
     DMA priority bit mask.
    -

    Detailed Description

    -

    Structure representing a SPI driver.

    - -

    Definition at line 66 of file templates/spi_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Driver state.

    - -

    Definition at line 70 of file templates/spi_lld.h.

    - -

    Referenced by spiExchange(), spiIgnore(), spiObjectInit(), spiReceive(), spiSelect(), spiSend(), spiStart(), spiStop(), and spiUnselect().

    - -
    -
    - -
    - -
    - -

    Mutex protecting the bus.

    - -

    Definition at line 76 of file templates/spi_lld.h.

    - -

    Referenced by spiAcquireBus(), and spiObjectInit().

    - -
    -
    - -
    -
    - - - - -
    const SPIConfig * SPIDriver::spd_config
    -
    -
    - -

    Current configuration data.

    - -

    Definition at line 84 of file templates/spi_lld.h.

    - -

    Referenced by spiObjectInit(), and spiStart().

    - -
    -
    - -
    - -
    - -

    Thread waiting for I/O completion.

    - -

    Definition at line 170 of file platforms/STM32/spi_lld.h.

    - -
    -
    - -
    -
    - - - - -
    SPI_TypeDef* SPIDriver::spd_spi
    -
    -
    - -

    Pointer to the SPIx registers block.

    - -

    Definition at line 174 of file platforms/STM32/spi_lld.h.

    - -
    -
    - -
    -
    - - - - -
    DMA_Channel_TypeDef* SPIDriver::spd_dmarx
    -
    -
    - -

    Pointer to the receive DMA channel registers block.

    - -

    Definition at line 178 of file platforms/STM32/spi_lld.h.

    - -
    -
    - -
    -
    - - - - -
    DMA_Channel_TypeDef* SPIDriver::spd_dmatx
    -
    -
    - -

    Pointer to the transmit DMA channel registers block.

    - -

    Definition at line 182 of file platforms/STM32/spi_lld.h.

    - -
    -
    - -
    - -
    - -

    DMA priority bit mask.

    - -

    Definition at line 186 of file platforms/STM32/spi_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_s_p_i_driver__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_s_p_i_driver__coll__graph.png deleted file mode 100644 index 9c7c0aa634b75921a81e1bbedbdf4ecfe39b3c6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48013 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ⅇG|X-Qok>6@DcZ#S-cD*f7f)vh%&O~2iq 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 AkN^Mx diff --git a/ChibiOS_2.0.8/docs/html/struct_semaphore.html b/ChibiOS_2.0.8/docs/html/struct_semaphore.html deleted file mode 100644 index 7e310a6..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_semaphore.html +++ /dev/null @@ -1,113 +0,0 @@ - - -ChibiOS/RT: Semaphore Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Semaphore Struct Reference
    - -[Semaphores] -

    -
    -
    - -

    Semaphore structure. -More...

    - -

    #include <chsem.h>

    -
    -Collaboration diagram for Semaphore:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - -

    -Data Fields

    ThreadsQueue s_queue
     Queue of the threads sleeping on this semaphore.
    cnt_t s_cnt
     The semaphore counter.
    -

    Detailed Description

    -

    Semaphore structure.

    - -

    Definition at line 43 of file chsem.h.

    -

    Field Documentation

    - -
    - -
    - -

    Queue of the threads sleeping on this semaphore.

    - -

    Definition at line 44 of file chsem.h.

    - -

    Referenced by chSemInit(), chSemResetI(), chSemSignal(), chSemSignalI(), chSemSignalWait(), chSemWaitS(), and chSemWaitTimeoutS().

    - -
    -
    - -
    -
    - - - - -
    cnt_t Semaphore::s_cnt
    -
    -
    - -

    The semaphore counter.

    - -

    Definition at line 46 of file chsem.h.

    - -

    Referenced by chSemInit(), chSemResetI(), chSemSignal(), chSemSignalI(), chSemSignalWait(), chSemWaitS(), and chSemWaitTimeoutS().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_semaphore__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_semaphore__coll__graph.png deleted file mode 100644 index fa9f99f0edc06aff7eb30de77ffd337cdf86b53d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23729 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%0DJ0h1y&3mQpQ+9Dmbn!XeiBq*F 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 MboFyt=akR{03R1;u>b%7 diff --git a/ChibiOS_2.0.8/docs/html/struct_serial_config.html b/ChibiOS_2.0.8/docs/html/struct_serial_config.html deleted file mode 100644 index 01faf45..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_serial_config.html +++ /dev/null @@ -1,324 +0,0 @@ - - -ChibiOS/RT: SerialConfig Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -


    - - - -
    - -

    Generic Serial Driver configuration structure. -More...

    - -

    #include <serial_lld.h>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Fields

    uint32_t sc_speed
     Bit rate.
    uint32_t sc_mr
     Initialization value for the MR register.
    uint16_t sc_brr
     Initialization value for the BRR register.
    uint8_t sc_csrc
     Initialization value for the CSRC register.
    uint32_t sc_lcr
     Initialization value for the LCR register.
    uint32_t sc_fcr
     Initialization value for the FCR register.
    uint16_t sc_div
     Initialization value for the UBRx registers.
    uint8_t sc_mod
     Initialization value for the MOD register.
    uint8_t sc_ctl
     Initialization value for the CTL register.
    uint8_t sc_mode
     Mode flags.
    uint16_t sc_cr1
     Initialization value for the CR1 register.
    uint16_t sc_cr2
     Initialization value for the CR2 register.
    uint16_t sc_cr3
     Initialization value for the CR3 register.
    -

    Detailed Description

    -

    Generic Serial Driver configuration structure.

    -

    STM32 Serial Driver configuration structure.

    -

    MSP430 Serial Driver configuration structure.

    -

    LPC214x Serial Driver configuration structure.

    -

    LPC13xx Serial Driver configuration structure.

    -

    LPC11xx Serial Driver configuration structure.

    -

    AVR Serial Driver configuration structure.

    -

    AT91SAM7 Serial Driver configuration structure.

    -

    An instance of this structure must be passed to sdStart() in order to configure and start a serial driver operations.

    -
    Note:
    This structure content is architecture dependent, each driver implementation defines its own version and the custom static initializers.
    -

    An instance of this structure must be passed to sdStart() in order to configure and start a serial driver operations.

    - -

    Definition at line 69 of file templates/serial_lld.h.

    -

    Field Documentation

    - -
    - -
    - -

    Bit rate.

    -

    This is written to the US_BRGR register of the appropriate AT91S_USART

    - -

    Definition at line 119 of file platforms/AT91SAM7/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the MR register.

    -

    This is written to the US_MR register of the appropriate AT91S_USART

    - -

    Definition at line 124 of file platforms/AT91SAM7/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the BRR register.

    -

    Bit rate register.

    - -

    Definition at line 88 of file platforms/AVR/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the CSRC register.

    - -

    Definition at line 92 of file platforms/AVR/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the LCR register.

    - -

    Definition at line 152 of file platforms/LPC11xx/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the FCR register.

    - -

    Definition at line 156 of file platforms/LPC11xx/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the UBRx registers.

    - -

    Definition at line 88 of file platforms/MSP430/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the MOD register.

    - -

    Definition at line 92 of file platforms/MSP430/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the CTL register.

    - -

    Definition at line 96 of file platforms/MSP430/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Mode flags.

    - -

    Definition at line 117 of file platforms/SPC56x/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the CR1 register.

    - -

    Definition at line 162 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the CR2 register.

    - -

    Definition at line 166 of file platforms/STM32/serial_lld.h.

    - -
    -
    - -
    - -
    - -

    Initialization value for the CR3 register.

    - -

    Definition at line 170 of file platforms/STM32/serial_lld.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_serial_driver_v_m_t.html b/ChibiOS_2.0.8/docs/html/struct_serial_driver_v_m_t.html deleted file mode 100644 index c867295..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_serial_driver_v_m_t.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: SerialDriverVMT Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    -
    -

    SerialDriverVMT Struct Reference
    - -[Serial Driver] -

    -
    -
    - -

    SerialDriver virtual methods table. -More...

    - -

    #include <serial.h>

    - -
    -

    Detailed Description

    -

    SerialDriver virtual methods table.

    - -

    Definition at line 122 of file serial.h.

    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_shell_command.html b/ChibiOS_2.0.8/docs/html/struct_shell_command.html deleted file mode 100644 index 687f4cf..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_shell_command.html +++ /dev/null @@ -1,102 +0,0 @@ - - -ChibiOS/RT: ShellCommand Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    ShellCommand Struct Reference
    - -[Command Shell] -

    -
    -
    - -

    Custom command entry type. -More...

    - -

    #include <shell.h>

    - - - - - - -

    -Data Fields

    const char * sc_name
     Command name.
    shellcmd_t sc_function
     Command function.
    -

    Detailed Description

    -

    Custom command entry type.

    - -

    Definition at line 66 of file shell.h.

    -

    Field Documentation

    - -
    -
    - - - - -
    const char* ShellCommand::sc_name
    -
    -
    - -

    Command name.

    - -

    Definition at line 67 of file shell.h.

    - -
    -
    - -
    - -
    - -

    Command function.

    - -

    Definition at line 68 of file shell.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_shell_config.html b/ChibiOS_2.0.8/docs/html/struct_shell_config.html deleted file mode 100644 index a4f8542..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_shell_config.html +++ /dev/null @@ -1,109 +0,0 @@ - - -ChibiOS/RT: ShellConfig Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    ShellConfig Struct Reference
    - -[Command Shell] -

    -
    -
    - -

    Shell descriptor type. -More...

    - -

    #include <shell.h>

    -
    -Collaboration diagram for ShellConfig:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - -

    -Data Fields

    BaseChannelsc_channel
     I/O channel associated to the shell.
    const ShellCommandsc_commands
     Shell extra commands table.
    -

    Detailed Description

    -

    Shell descriptor type.

    - -

    Definition at line 74 of file shell.h.

    -

    Field Documentation

    - -
    - -
    - -

    I/O channel associated to the shell.

    - -

    Definition at line 75 of file shell.h.

    - -
    -
    - -
    - -
    - -

    Shell extra commands table.

    - -

    Definition at line 77 of file shell.h.

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_shell_config__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_shell_config__coll__graph.png deleted file mode 100644 index 6de0ade54b163609669a6fb43ccbe4977e13d11f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8561 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 heC+{ - -ChibiOS/RT: Thread Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    Thread Struct Reference
    - -[Threads] -

    -
    -
    - -

    Structure representing a thread. -More...

    - -

    #include <chthreads.h>

    - -

    Inherits ThreadsQueue.

    -
    -Collaboration diagram for Thread:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Fields

    Threadp_next
     Next in the list/queue.
    Threadp_prev
     Previous in the queue.
    tprio_t p_prio
     Thread priority.
    struct context p_ctx
     Processor context.
    Threadp_newer
     Newer registry element.
    Threadp_older
     Older registry element.
    tstate_t p_state
     Current thread state.
    tmode_t p_flags
     Various thread flags.
    trefs_t p_refs
     References to this thread.
    volatile systime_t p_time
     Thread consumed time in ticks.
    union {
       msg_t   rdymsg
     Thread wakeup code.
       msg_t   exitcode
     Thread exit code.
       void *   wtobjp
     Pointer to a generic "wait" object.
       eventmask_t   ewmask
     Enabled events mask.
    p_u
     State-specific fields.
    ThreadsList p_waiting
     Termination waiting list.
    ThreadsQueue p_msgqueue
     Messages queue.
    msg_t p_msg
     Thread message.
    eventmask_t p_epending
     Pending events mask.
    Mutexp_mtxlist
     List of the mutexes owned by this thread.
    tprio_t p_realprio
     Thread's own, non-inherited, priority.
    void * p_mpool
     Memory Pool where the thread workspace is returned.
    -

    Detailed Description

    -

    Structure representing a thread.

    -
    Note:
    Not all the listed fields are always needed, by switching off some not needed ChibiOS/RT subsystems it is possible to save RAM space by shrinking the Thread structure.
    - -

    Definition at line 56 of file chthreads.h.

    -

    Field Documentation

    - -
    -
    - - - - -
    Thread* Thread::p_next
    -
    -
    - -

    Next in the list/queue.

    - -

    Reimplemented from ThreadsQueue.

    - -

    Definition at line 57 of file chthreads.h.

    - -

    Referenced by chSchReadyI(), dequeue(), fifo_remove(), list_insert(), list_remove(), prio_insert(), and queue_insert().

    - -
    -
    - -
    -
    - - - - -
    Thread* Thread::p_prev
    -
    -
    - -

    Previous in the queue.

    - -

    Reimplemented from ThreadsQueue.

    - -

    Definition at line 59 of file chthreads.h.

    - -

    Referenced by dequeue(), lifo_remove(), prio_insert(), and queue_insert().

    - -
    -
    - -
    -
    - - - - -
    tprio_t Thread::p_prio
    -
    -
    - -

    Thread priority.

    - -

    Definition at line 61 of file chthreads.h.

    - -

    Referenced by chMtxLockS(), chMtxUnlock(), chMtxUnlockAll(), chMtxUnlockS(), chSchWakeupS(), init_thread(), and prio_insert().

    - -
    -
    - -
    -
    - - - - -
    struct context Thread::p_ctx
    -
    -
    - -

    Processor context.

    - -

    Definition at line 62 of file chthreads.h.

    - -
    -
    - -
    -
    - - - - -
    Thread* Thread::p_newer
    -
    -
    - -

    Newer registry element.

    - -

    Definition at line 64 of file chthreads.h.

    - -

    Referenced by chRegNextThread().

    - -
    -
    - -
    -
    - - - - -
    Thread* Thread::p_older
    -
    -
    - -

    Older registry element.

    - -

    Definition at line 65 of file chthreads.h.

    - -
    -
    - -
    - -
    - -

    Current thread state.

    - -

    Definition at line 71 of file chthreads.h.

    - -

    Referenced by chDbgTrace(), chEvtSignalI(), chMsgSend(), chMtxLockS(), chSchReadyI(), chSchWakeupS(), chThdRelease(), chThdResume(), chThdWait(), and init_thread().

    - -
    -
    - -
    - -
    - -

    Various thread flags.

    - -

    Definition at line 75 of file chthreads.h.

    - -

    Referenced by chThdCreateFromHeap(), chThdCreateFromMemoryPool(), chThdExit(), chThdRelease(), chThdTerminate(), and init_thread().

    - -
    -
    - -
    -
    - - - - -
    trefs_t Thread::p_refs
    -
    -
    - -

    References to this thread.

    - -

    Definition at line 80 of file chthreads.h.

    - -

    Referenced by chRegFirstThread(), chRegNextThread(), chThdAddRef(), chThdRelease(), chThdWait(), and init_thread().

    - -
    -
    - -
    -
    - - - - -
    volatile systime_t Thread::p_time
    -
    -
    - -

    Thread consumed time in ticks.

    -
    Note:
    This field can overflow.
    - -

    Definition at line 93 of file chthreads.h.

    - -

    Referenced by init_thread().

    - -
    -
    - -
    -
    - - - - -
    msg_t Thread::rdymsg
    -
    -
    - -

    Thread wakeup code.

    -
    Note:
    This field contains the low level message sent to the thread by the waking thread or interrupt handler. The value is valid after exiting the chSchWakeupS() function.
    - -

    Definition at line 107 of file chthreads.h.

    - -

    Referenced by chCondBroadcastI(), chCondSignalI(), chCondWaitS(), chEvtSignalI(), chMsgSend(), chSchWakeupS(), chSemResetI(), chSemSignalI(), and chSemSignalWait().

    - -
    -
    - -
    -
    - - - - -
    msg_t Thread::exitcode
    -
    -
    - -

    Thread exit code.

    -
    Note:
    The thread termination code is stored in this field in order to be retrieved by the thread performing a chThdWait() on this thread.
    - -

    Definition at line 114 of file chthreads.h.

    - -

    Referenced by chThdExit(), and chThdWait().

    - -
    -
    - -
    -
    - - - - -
    void* Thread::wtobjp
    -
    -
    - -

    Pointer to a generic "wait" object.

    -
    Note:
    This field is used to get a generic pointer to a synchronization object and is valid when the thread is in one of the wait states.
    - -

    Definition at line 121 of file chthreads.h.

    - -

    Referenced by chCondWaitS(), chDbgTrace(), chMsgSend(), chMtxLockS(), and chSemSignalWait().

    - -
    -
    - -
    - -
    - -

    Enabled events mask.

    -
    Note:
    This field is only valied while the thread is in the THD_STATE_WTOREVT or THD_STATE_WTANDEVT states.
    - -

    Definition at line 128 of file chthreads.h.

    - -

    Referenced by chEvtSignalI(), chEvtWaitAll(), chEvtWaitAllTimeout(), chEvtWaitAny(), chEvtWaitAnyTimeout(), chEvtWaitOne(), and chEvtWaitOneTimeout().

    - -
    -
    - -
    -
    - - - - -
    union { ... } Thread::p_u
    -
    -
    - -

    State-specific fields.

    -
    Note:
    All the fields declared in this union are only valid in the specified state or condition and are thus volatile.
    - -

    Referenced by chCondBroadcastI(), chCondSignalI(), chCondWaitS(), chDbgTrace(), chEvtSignalI(), chEvtWaitAll(), chEvtWaitAllTimeout(), chEvtWaitAny(), chEvtWaitAnyTimeout(), chEvtWaitOne(), chEvtWaitOneTimeout(), chMsgSend(), chMtxLockS(), chSchWakeupS(), chSemResetI(), chSemSignalI(), chSemSignalWait(), chThdExit(), and chThdWait().

    - -
    -
    - -
    - -
    - -

    Termination waiting list.

    - -

    Definition at line 135 of file chthreads.h.

    - -

    Referenced by chThdExit(), chThdWait(), and init_thread().

    - -
    -
    - -
    - -
    - -

    Messages queue.

    - -

    Definition at line 141 of file chthreads.h.

    - -

    Referenced by chMsgSend(), and init_thread().

    - -
    -
    - -
    -
    - - - - -
    msg_t Thread::p_msg
    -
    -
    - -

    Thread message.

    - -

    Definition at line 145 of file chthreads.h.

    - -

    Referenced by chMsgSend().

    - -
    -
    - -
    - -
    - -

    Pending events mask.

    - -

    Definition at line 151 of file chthreads.h.

    - -

    Referenced by chEvtSignalI(), chEvtWaitAll(), chEvtWaitAllTimeout(), chEvtWaitAny(), chEvtWaitAnyTimeout(), chEvtWaitOne(), chEvtWaitOneTimeout(), and init_thread().

    - -
    -
    - -
    -
    - - - - -
    Mutex* Thread::p_mtxlist
    -
    -
    - -

    List of the mutexes owned by this thread.

    -
    Note:
    The list is terminated by a NULL in this field.
    - -

    Definition at line 158 of file chthreads.h.

    - -

    Referenced by chCondWaitS(), chMtxLockS(), chMtxUnlock(), chMtxUnlockAll(), chMtxUnlockS(), and init_thread().

    - -
    -
    - -
    - -
    - -

    Thread's own, non-inherited, priority.

    - -

    Definition at line 162 of file chthreads.h.

    - -

    Referenced by chMtxUnlock(), chMtxUnlockAll(), chMtxUnlockS(), and init_thread().

    - -
    -
    - -
    -
    - - - - -
    void* Thread::p_mpool
    -
    -
    - -

    Memory Pool where the thread workspace is returned.

    - -

    Definition at line 168 of file chthreads.h.

    - -

    Referenced by chThdCreateFromMemoryPool(), and chThdRelease().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_thread__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_thread__coll__graph.png deleted file mode 100644 index 6a89f36ae3cf581d3a95b64f1293f91d1a7e1065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38981 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 - -ChibiOS/RT: ThreadsList Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    ThreadsList Struct Reference
    - -[Internals] -

    -
    -
    - -

    Generic threads single link list, it works like a stack. -More...

    - -

    #include <chlists.h>

    - -

    Inherited by ThreadsQueue.

    -
    -Collaboration diagram for ThreadsList:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - -

    -Data Fields

    Threadp_next
    -

    Detailed Description

    -

    Generic threads single link list, it works like a stack.

    - -

    Definition at line 98 of file chlists.h.

    -

    Field Documentation

    - -
    - -
    -

    Last pushed Thread on the stack list, or pointer to itself if empty.

    - -

    Reimplemented in ThreadsQueue, and Thread.

    - -

    Definition at line 100 of file chlists.h.

    - -

    Referenced by list_insert(), and list_remove().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_threads_list__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_threads_list__coll__graph.png deleted file mode 100644 index 4e67b9241f389f4d9d744322aa54917b1d3d998c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30928 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 SN{oSlfx*+&&t;ucLK6TU;{5Ue diff --git a/ChibiOS_2.0.8/docs/html/struct_threads_queue.html b/ChibiOS_2.0.8/docs/html/struct_threads_queue.html deleted file mode 100644 index d417210..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_threads_queue.html +++ /dev/null @@ -1,119 +0,0 @@ - - -ChibiOS/RT: ThreadsQueue Struct Reference - - - - - - - - - - - -
    ChibiOS/RT LogoChibiOS/RT

    Architecture - Reference Manual - Guides
    -
    - - -
    - -
    -

    ThreadsQueue Struct Reference
    - -[Internals] -

    -
    -
    - -

    Generic threads bidirectional linked list header and element. -More...

    - -

    #include <chlists.h>

    - -

    Inherits ThreadsList.

    - -

    Inherited by ReadyList, and Thread.

    -
    -Collaboration diagram for ThreadsQueue:
    -
    -
    Collaboration graph
    - - -
    [legend]
    - - - - -

    -Data Fields

    Threadp_next
    Threadp_prev
    -

    Detailed Description

    -

    Generic threads bidirectional linked list header and element.

    - -

    Definition at line 88 of file chlists.h.

    -

    Field Documentation

    - -
    - -
    -

    First Thread in the queue, or ThreadQueue when empty.

    - -

    Reimplemented from ThreadsList.

    - -

    Reimplemented in Thread.

    - -

    Definition at line 89 of file chlists.h.

    - -

    Referenced by chCondBroadcastI(), chMtxUnlock(), chMtxUnlockS(), and fifo_remove().

    - -
    -
    - -
    - -
    -

    Last Thread in the queue, or ThreadQueue when empty.

    - -

    Reimplemented in Thread.

    - -

    Definition at line 91 of file chlists.h.

    - -

    Referenced by lifo_remove(), and queue_insert().

    - -
    -
    -
    -
    -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
    - - diff --git a/ChibiOS_2.0.8/docs/html/struct_threads_queue__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_threads_queue__coll__graph.png deleted file mode 100644 index a21a1246fa5f1f5c030a37e9ecf2e70bd7d21e73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19479 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 - -ChibiOS/RT: TraceBuffer Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      TraceBuffer Struct Reference
      - -[Debug] -

      -
      -
      - -

      Trace buffer header. -More...

      - -

      #include <chdebug.h>

      -
      -Collaboration diagram for TraceBuffer:
      -
      -
      Collaboration graph
      - - -
      [legend]
      - - - - - - - - -

      -Data Fields

      unsigned tb_size
       Trace buffer size (entries).
      CtxSwcEventtb_ptr
       Pointer to the ring buffer front.
      CtxSwcEvent tb_buffer [TRACE_BUFFER_SIZE]
       Ring buffer.
      -

      Detailed Description

      -

      Trace buffer header.

      - -

      Definition at line 80 of file chdebug.h.

      -

      Field Documentation

      - -
      -
      - - - - -
      unsigned TraceBuffer::tb_size
      -
      -
      - -

      Trace buffer size (entries).

      - -

      Definition at line 81 of file chdebug.h.

      - -

      Referenced by trace_init().

      - -
      -
      - -
      - -
      - -

      Pointer to the ring buffer front.

      - -

      Definition at line 83 of file chdebug.h.

      - -

      Referenced by chDbgTrace(), and trace_init().

      - -
      -
      - -
      -
      - - - - -
      CtxSwcEvent TraceBuffer::tb_buffer[TRACE_BUFFER_SIZE]
      -
      -
      - -

      Ring buffer.

      - -

      Definition at line 86 of file chdebug.h.

      - -

      Referenced by chDbgTrace(), and trace_init().

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/struct_trace_buffer__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_trace_buffer__coll__graph.png deleted file mode 100644 index c4a19658f336fb2e7bc67f13fc75ae98b3feebfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3064 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 O1_n=8KbLh*2~7Z_iQ`)U diff --git a/ChibiOS_2.0.8/docs/html/struct_v_t_list.html b/ChibiOS_2.0.8/docs/html/struct_v_t_list.html deleted file mode 100644 index 557a53b..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_v_t_list.html +++ /dev/null @@ -1,156 +0,0 @@ - - -ChibiOS/RT: VTList Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      VTList Struct Reference
      - -[Time and Virtual Timers] -

      -
      -
      - -

      Virtual timers list header. -More...

      - -

      #include <chvt.h>

      -
      -Collaboration diagram for VTList:
      -
      -
      Collaboration graph
      - - -
      [legend]
      - - - - - - - - - - -

      -Data Fields

      VirtualTimervt_next
       Next timer in the delta list.
      VirtualTimervt_prev
       Last timer in the delta list.
      systime_t vt_time
       Must be initialized to -1.
      volatile systime_t vt_systime
       System Time counter.
      -

      Detailed Description

      -

      Virtual timers list header.

      -
      Note:
      The delta list is implemented as a double link bidirectional list in order to make the unlink time constant, the reset of a virtual timer is often used in the code.
      - -

      Definition at line 92 of file chvt.h.

      -

      Field Documentation

      - -
      - -
      - -

      Next timer in the delta list.

      - -

      Definition at line 93 of file chvt.h.

      - -

      Referenced by chVTSetI(), and vt_init().

      - -
      -
      - -
      - -
      - -

      Last timer in the delta list.

      - -

      Definition at line 95 of file chvt.h.

      - -

      Referenced by vt_init().

      - -
      -
      - -
      - -
      - -

      Must be initialized to -1.

      - -

      Definition at line 97 of file chvt.h.

      - -

      Referenced by vt_init().

      - -
      -
      - -
      -
      - - - - -
      volatile systime_t VTList::vt_systime
      -
      -
      - -

      System Time counter.

      - -

      Definition at line 98 of file chvt.h.

      - -

      Referenced by vt_init().

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/struct_v_t_list__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_v_t_list__coll__graph.png deleted file mode 100644 index d0f2929847829d9f8807424e02667d572dd3c8bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4588 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 diff --git a/ChibiOS_2.0.8/docs/html/struct_virtual_timer.html b/ChibiOS_2.0.8/docs/html/struct_virtual_timer.html deleted file mode 100644 index 3991d7e..0000000 --- a/ChibiOS_2.0.8/docs/html/struct_virtual_timer.html +++ /dev/null @@ -1,176 +0,0 @@ - - -ChibiOS/RT: VirtualTimer Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      VirtualTimer Struct Reference
      - -[Time and Virtual Timers] -

      -
      -
      - -

      Virtual Timer descriptor structure. -More...

      - -

      #include <chvt.h>

      -
      -Collaboration diagram for VirtualTimer:
      -
      -
      Collaboration graph
      - - -
      [legend]
      - - - - - - - - - - - - -

      -Data Fields

      VirtualTimervt_next
       Next timer in the delta list.
      VirtualTimervt_prev
       Previous timer in the delta list.
      systime_t vt_time
       Time delta before timeout.
      vtfunc_t vt_func
       Timer callback function pointer.
      void * vt_par
       Timer callback function parameter.
      -

      Detailed Description

      -

      Virtual Timer descriptor structure.

      - -

      Definition at line 74 of file chvt.h.

      -

      Field Documentation

      - -
      - -
      - -

      Next timer in the delta list.

      - -

      Definition at line 75 of file chvt.h.

      - -

      Referenced by chVTResetI(), and chVTSetI().

      - -
      -
      - -
      - -
      - -

      Previous timer in the delta list.

      - -

      Definition at line 77 of file chvt.h.

      - -

      Referenced by chVTResetI(), and chVTSetI().

      - -
      -
      - -
      - -
      - -

      Time delta before timeout.

      - -

      Definition at line 79 of file chvt.h.

      - -

      Referenced by chVTResetI(), and chVTSetI().

      - -
      -
      - -
      - -
      - -

      Timer callback function pointer.

      - -

      Definition at line 80 of file chvt.h.

      - -

      Referenced by chVTResetI(), and chVTSetI().

      - -
      -
      - -
      -
      - - - - -
      void* VirtualTimer::vt_par
      -
      -
      - -

      Timer callback function parameter.

      - -

      Definition at line 82 of file chvt.h.

      - -

      Referenced by chVTSetI().

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/struct_virtual_timer__coll__graph.png b/ChibiOS_2.0.8/docs/html/struct_virtual_timer__coll__graph.png deleted file mode 100644 index 07a21afda7f452aac8b9726cb25c55ef8cb63469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2618 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 - -ChibiOS/RT: at91sam7_pio_setup_t Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      at91sam7_pio_setup_t Struct Reference
      - -[AT91SAM7 I/O Ports Support] -

      -
      -
      - -

      PIO port setup info. -More...

      - -

      #include <pal_lld.h>

      - - - - - -

      -Data Fields

      uint32_t odsr
      uint32_t osr
      uint32_t pusr
      -

      Detailed Description

      -

      PIO port setup info.

      - -

      Definition at line 52 of file platforms/AT91SAM7/pal_lld.h.

      -

      Field Documentation

      - -
      - -
      -

      Initial value for ODSR register (data).

      - -

      Definition at line 54 of file platforms/AT91SAM7/pal_lld.h.

      - -
      -
      - -
      - -
      -

      Initial value for OSR register (direction).

      - -

      Definition at line 56 of file platforms/AT91SAM7/pal_lld.h.

      - -
      -
      - -
      - -
      -

      Initial value for PUSR register (Pull-ups).

      - -

      Definition at line 58 of file platforms/AT91SAM7/pal_lld.h.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structcmxctx.html b/ChibiOS_2.0.8/docs/html/structcmxctx.html deleted file mode 100644 index 48d8f79..0000000 --- a/ChibiOS_2.0.8/docs/html/structcmxctx.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: cmxctx Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      cmxctx Struct Reference
      - -[ARMv6-M Specific Implementation] -

      -
      -
      - -

      Cortex-Mx exception context. -More...

      - -

      #include <chcore_v6m.h>

      - -
      -

      Detailed Description

      -

      Cortex-Mx exception context.

      - -

      Definition at line 45 of file chcore_v6m.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structcontext.html b/ChibiOS_2.0.8/docs/html/structcontext.html deleted file mode 100644 index 7f113b0..0000000 --- a/ChibiOS_2.0.8/docs/html/structcontext.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: context Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      context Struct Reference
      - -[Port Templates] -

      -
      -
      - -

      Platform dependent part of the Thread structure. -More...

      - -

      #include <chcore.h>

      -
      -Collaboration diagram for context:
      -
      -
      Collaboration graph
      - - -
      [legend]
      - -
      -

      Detailed Description

      -

      Platform dependent part of the Thread structure.

      -

      This structure usually contains just the saved stack pointer defined as a pointer to a intctx structure.

      - -

      Definition at line 81 of file kernel/templates/chcore.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structcontext__coll__graph.png b/ChibiOS_2.0.8/docs/html/structcontext__coll__graph.png deleted file mode 100644 index e1b4517f74ae4807b95ee04d7f6c18470dc3a7ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1783 zcmeAS@N?(olHy`uVBq!ia0y~yU~pw%V0g;G#=yY9I??Jl0|NtFlDE4H!+#K5uy^@n z1_lQ95>H=O_FLRCyj(ml-&gB0FtE+^ba4!+nDch7e~w6~%<=vCzu85adOO(_Cd??f za3y1NG}EH#wgp!tn6tc1GM4zxy3)Mj$PpJl8Jh|tiC_go!-ecSZZ^klP(3JhHqX)5 zc7gzN7kfuUkn)sAcKmN18T>u>j%V)7?_&Grr#O8-TYWg+?)S6n*DF7>3pjC1)Kqi4 zn>^EXqWpXYi>s@G6c4hMUz=W*s@~9>nSX^z!l!z%rI7VM72Bu#9D_I}IZY60S|YG% zQquIDc6oDsPI!4ua$H!RayK|9gL6Ie%HywEs(qL3U15B>_d4e{sp$VX%umhSWQ7Cg zaoVZfS|NMRmE*y3k>@`&RJGz+_~-i+YA)Sa+$)=_^Y9PThd+}fBUPh>f0^f1hD6T! zwesQPhmU1E6+O5R7OS*QDEaV>t3iD;$C6mi`O=xkRj=*wzclX?W5askZ68~`?sR!B z{lm3j)&}3(3thayj#X(@&}2b32CGoZlJw8=tO2K#CX^lh>N0Kn1zkWKDe|__f zI-yBlrabt53$83o`pV6)Uh2WCKV7X` z^Xs?2oprim&hsf7gHqSBvb~ZIU%%_(-rK1*4eUWaYYnpg)qD6HjM$uSzvl9eIscx| z|8{QOwqt!vFPIp(C75$!?w3EaoL*=-_0rY7AF3ED6e7}k*WPq`Ya4FJ$hY)OyKY4C z{f!SL*1Tlc@U~#%uB*N&d`s78pL?UhAYJg<{J~l4>$6<5&&G)tGV(2zm{Fb>(Co^4 zz$xLVQo?SA-;W|zPWolM^6>+gQxB6$SGT@hA6XL7Jd1JO`t??<-Ng)Ij0*y^Ene#S zEs1zg%V5x8df=U{@zVTPtJlq%J@{<+VvT+{Ty>0kZw{O70eZL&Ii_1}E%)?1qy7?SO+ zu36un8(!mZE~wAO_OC(1amIx6K7}VEjm?dxmdd=I`?hVPYWADH>1oyZM{><$ z-u^!mVQd(-YRcvweUH4LXS?#glt&qx#Jv5lo_TxW<)i%E|I5~#RMKJnQY-L(->5C7D3^@9?8i+~e{;v?Zbsb&#u zL3R1XD@WmJ`e4dZ$u9Nxi@LP}uRshm8?cKQ?^2 za`LfjmS^U+!#kgduCMCS-_k9jzwWHC6Nh4pKq;T->asN-h%GZ@moLp2%`A`24rr$olnme(@8ghWF8-QZ3ElPBu3-9xI!rC%%5sj>mc7 z3r;STm^^v%+9z9W+4*D+bPB6ao1(p30G{y|<)YjH!#Cw8WFLsy9QjLp3aNjwCibW4!uhpAhKP~$CO(;)TuiRJf zv)$P=?#**v?v4(cX~z3s=HA8!Q(Tj|ly{sn51RR%F{=LbzOQX*PbOs?7LHz1{?jGP za%rf3=PX?w`6#;yw^^#^IG+|b@l&*z`Y4(|bHO}FxeK+^h3_64``#VL4TGOOdzP`Y zic4|R@}B#4U0C?)@6 Zj_hUWUVQlWW(EcZ22WQ%mvv4FO#ojLAUgm6 diff --git a/ChibiOS_2.0.8/docs/html/structeabi__frame.html b/ChibiOS_2.0.8/docs/html/structeabi__frame.html deleted file mode 100644 index 81a689e..0000000 --- a/ChibiOS_2.0.8/docs/html/structeabi__frame.html +++ /dev/null @@ -1,98 +0,0 @@ - - -ChibiOS/RT: eabi_frame Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      eabi_frame Struct Reference
      - -[Core Port Implementation] -

      -
      -
      - -

      Mandatory part of a stack frame. -More...

      - -

      #include <chcore.h>

      - - - - -

      -Data Fields

      regppc_t slink
      regppc_t shole
      -

      Detailed Description

      -

      Mandatory part of a stack frame.

      - -

      Definition at line 98 of file ports/GCC/PPC/chcore.h.

      -

      Field Documentation

      - -
      - -
      -

      Stack back link.

      - -

      Definition at line 99 of file ports/GCC/PPC/chcore.h.

      - -
      -
      - -
      - -
      -

      Stack hole for LR storage.

      - -

      Definition at line 100 of file ports/GCC/PPC/chcore.h.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structextctx.html b/ChibiOS_2.0.8/docs/html/structextctx.html deleted file mode 100644 index 49231d5..0000000 --- a/ChibiOS_2.0.8/docs/html/structextctx.html +++ /dev/null @@ -1,60 +0,0 @@ - - -ChibiOS/RT: extctx Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      extctx Struct Reference
      - -[Port Templates] -

      -
      -
      - -

      Interrupt saved context. -More...

      - -

      #include <chcore.h>

      - -
      -

      Detailed Description

      -

      Interrupt saved context.

      -

      This structure represents the stack frame saved during a preemption-capable interrupt handler.

      - -

      Definition at line 65 of file kernel/templates/chcore.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structgpio__t.html b/ChibiOS_2.0.8/docs/html/structgpio__t.html deleted file mode 100644 index 7fa646a..0000000 --- a/ChibiOS_2.0.8/docs/html/structgpio__t.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: gpio_t Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      gpio_t Struct Reference
      - -[STM8 I/O Ports Support] -

      -
      -
      - -

      GPIO port representation. -More...

      - -

      #include <pal_lld.h>

      - -
      -

      Detailed Description

      -

      GPIO port representation.

      - -

      Definition at line 63 of file platforms/STM8/pal_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structintctx.html b/ChibiOS_2.0.8/docs/html/structintctx.html deleted file mode 100644 index c3d1f8f..0000000 --- a/ChibiOS_2.0.8/docs/html/structintctx.html +++ /dev/null @@ -1,60 +0,0 @@ - - -ChibiOS/RT: intctx Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      intctx Struct Reference
      - -[Port Templates] -

      -
      -
      - -

      System saved context. -More...

      - -

      #include <chcore.h>

      - -
      -

      Detailed Description

      -

      System saved context.

      -

      This structure represents the inner stack frame during a context switching.

      - -

      Definition at line 73 of file kernel/templates/chcore.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structlpc111x__gpio__setup__t.html b/ChibiOS_2.0.8/docs/html/structlpc111x__gpio__setup__t.html deleted file mode 100644 index 4d30ee4..0000000 --- a/ChibiOS_2.0.8/docs/html/structlpc111x__gpio__setup__t.html +++ /dev/null @@ -1,98 +0,0 @@ - - -ChibiOS/RT: lpc111x_gpio_setup_t Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      lpc111x_gpio_setup_t Struct Reference
      - -[LPC11xx I/O Ports Support] -

      -
      -
      - -

      GPIO port setup info. -More...

      - -

      #include <pal_lld.h>

      - - - - -

      -Data Fields

      uint32_t data
      uint32_t dir
      -

      Detailed Description

      -

      GPIO port setup info.

      - -

      Definition at line 56 of file platforms/LPC11xx/pal_lld.h.

      -

      Field Documentation

      - -
      - -
      -

      Initial value for FIO_PIN register.

      - -

      Definition at line 58 of file platforms/LPC11xx/pal_lld.h.

      - -
      -
      - -
      - -
      -

      Initial value for FIO_DIR register.

      - -

      Definition at line 60 of file platforms/LPC11xx/pal_lld.h.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structlpc214x__fio__setup__t.html b/ChibiOS_2.0.8/docs/html/structlpc214x__fio__setup__t.html deleted file mode 100644 index c5d70af..0000000 --- a/ChibiOS_2.0.8/docs/html/structlpc214x__fio__setup__t.html +++ /dev/null @@ -1,98 +0,0 @@ - - -ChibiOS/RT: lpc214x_fio_setup_t Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      lpc214x_fio_setup_t Struct Reference
      - -[LPC214x I/O Ports Support] -

      -
      -
      - -

      FIO port setup info. -More...

      - -

      #include <pal_lld.h>

      - - - - -

      -Data Fields

      uint32_t pin
      uint32_t dir
      -

      Detailed Description

      -

      FIO port setup info.

      - -

      Definition at line 54 of file platforms/LPC214x/pal_lld.h.

      -

      Field Documentation

      - -
      - -
      -

      Initial value for FIO_PIN register.

      - -

      Definition at line 56 of file platforms/LPC214x/pal_lld.h.

      - -
      -
      - -
      - -
      -

      Initial value for FIO_DIR register.

      - -

      Definition at line 58 of file platforms/LPC214x/pal_lld.h.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structmemory__heap.html b/ChibiOS_2.0.8/docs/html/structmemory__heap.html deleted file mode 100644 index 5da28ca..0000000 --- a/ChibiOS_2.0.8/docs/html/structmemory__heap.html +++ /dev/null @@ -1,134 +0,0 @@ - - -ChibiOS/RT: memory_heap Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      memory_heap Struct Reference
      - -[Heaps] -

      -
      -
      - -

      Structure describing a memory heap. -More...

      - -

      #include <chheap.h>

      -
      -Collaboration diagram for memory_heap:
      -
      -
      Collaboration graph
      - - -
      [legend]
      - - - - - - - - -

      -Data Fields

      memgetfunc_t h_provider
       Memory blocks provider for this heap.
      union heap_header h_free
       Free blocks list header.
      Mutex h_mtx
       Heap access mutex.
      -

      Detailed Description

      -

      Structure describing a memory heap.

      - -

      Definition at line 70 of file chheap.h.

      -

      Field Documentation

      - -
      - -
      - -

      Memory blocks provider for this heap.

      - -

      Definition at line 71 of file chheap.h.

      - -

      Referenced by chHeapAlloc(), chHeapInit(), and heap_init().

      - -
      -
      - -
      -
      - - - - -
      union heap_header memory_heap::h_free
      -
      -
      - -

      Free blocks list header.

      - -

      Definition at line 73 of file chheap.h.

      - -

      Referenced by chHeapAlloc(), chHeapFree(), chHeapInit(), chHeapStatus(), and heap_init().

      - -
      -
      - -
      - -
      - -

      Heap access mutex.

      - -

      Definition at line 75 of file chheap.h.

      - -

      Referenced by chHeapInit(), and heap_init().

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structmemory__heap__coll__graph.png b/ChibiOS_2.0.8/docs/html/structmemory__heap__coll__graph.png deleted file mode 100644 index 0f48b1c28f50f0bb0ca196121883aae39d31e7df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31470 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 Ze~EhZ{lt!msSFGZ44$rjF6*2UngF$MeUJbE diff --git a/ChibiOS_2.0.8/docs/html/structmsp430__dio__setup__t.html b/ChibiOS_2.0.8/docs/html/structmsp430__dio__setup__t.html deleted file mode 100644 index 122a4d3..0000000 --- a/ChibiOS_2.0.8/docs/html/structmsp430__dio__setup__t.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: msp430_dio_setup_t Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - -
      -
      -
      -

      msp430_dio_setup_t Struct Reference
      - -[MSP430 I/O Ports Support] -

      -
      -
      - -

      Setup registers common to all the MSP430 ports. -More...

      - -

      #include <pal_lld.h>

      - -
      -

      Detailed Description

      -

      Setup registers common to all the MSP430 ports.

      - -

      Definition at line 75 of file platforms/MSP430/pal_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structpool__header.html b/ChibiOS_2.0.8/docs/html/structpool__header.html deleted file mode 100644 index bc7d148..0000000 --- a/ChibiOS_2.0.8/docs/html/structpool__header.html +++ /dev/null @@ -1,92 +0,0 @@ - - -ChibiOS/RT: pool_header Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      pool_header Struct Reference
      - -[Memory Pools] -

      -
      -
      - -

      Memory pool free object header. -More...

      - -

      #include <chmempools.h>

      -
      -Collaboration diagram for pool_header:
      -
      -
      Collaboration graph
      - - -
      [legend]
      - - - - -

      -Data Fields

      struct pool_headerph_next
       Pointer to the next pool header in the list.
      -

      Detailed Description

      -

      Memory pool free object header.

      - -

      Definition at line 43 of file chmempools.h.

      -

      Field Documentation

      - -
      -
      - - - - -
      struct pool_header* pool_header::ph_next
      -
      -
      - -

      Pointer to the next pool header in the list.

      - -

      Definition at line 44 of file chmempools.h.

      - -

      Referenced by chPoolAllocI(), and chPoolFreeI().

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structpool__header__coll__graph.png b/ChibiOS_2.0.8/docs/html/structpool__header__coll__graph.png deleted file mode 100644 index f08a0903ea30486a96c05bf00c666c7f88c0bfc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1877 zcmeAS@N?(olHy`uVBq!ia0y~yV3^Cmz!1T~#=yYvp84xV1_lPUByV>YhW{YAVDIwD z3=9nHC7!;n?65!&Gi1WOd>A8 zVC9m#Z<%}>FD$Bg(funyd6LA1cVdRuT8>D_HJD}g7#`zLOW5cj@^E3x4VPZECGXUP z>~6i?HuXxo+hbvks~kC^Ubp8yc8<=tKJ)L3bN6QQJ^y|vEv@WbsC~Y(?V-oHw}?l8}q%aZePyTzg^aIF0t&-m-Evz*B*+vwvgH2 zanp?0B_X#%w@$9$+icZyOX%7Lm6BC@9g)^TGx&JS z%*EXJ1A}2NTeb?Ei&w5()+HL0aoATSm|9bUkue{&~8RKb& z8_zZL?f(D$Cr=Oak67kytc$f{jLVFb7oMJ2;d8j{q1zOlx+QE5XSZZ7cMHDHB6xgZ zw#%%#hDO^)x&OY=U7=^bJo_+BH#+3{Bdgfw$~RV+@>F?e$+Mq*ahJ#NgQ;O@Mys;y z*XOJMhlMOFTDCAawxfG)&gb&?*Jt)IM=+`ROTFL8@W62UDtq3G%ZH_j@kDfBa>C4{6$ZC!l*`u!-$nf^YnORv4Z z{(!To!nA>V$;;i$6Gane+xMmV?Ebyfd-|$1ho^RRb-mlOPFh2nb;I)l*Y}y9j_g-i zrY`w`;X}re`*L61_OAc>;~&e1vrnS;{Wx!=qS);~Yu@$bgDW8I;K(so@- zQ+ivH4%+44pStKFS6bGgBgK9k2No4Ry6kJZP;#z=LR6)q#M(PYj_5bNoO$Tuo_%KZ z--FAp*IrQ@!XH(^c()2Je%#EeDrs3U;c}aOUnML-08G;<^LAW6W966CLxRE^7FM*C$>h; zyR@!gSx$JB6?-Pr%Y$+E)o)eY+syJNM_*cF!|r7<8{TAZNU@Lh-=?Sp&|3USBXOJ_s+^Sw>n>vvZ;SruCcXR z;eDP{`>IW&_sn^@=$VgLnE!qA>tg=G9fh3NFWJ=ma`k(@wQ}=+`{jW}D!L2yE*R1~gt6wL$4*XGC&K0@q%&|EezH)EakX7s&eV`mS&_R#C_;lq;qmv1!+VtT-ubc^rEby=f|Q+pX~QvT&v9a}?{=~IiQGjYXl!v4%J z+?`z@1ud~BqZZ&~aW7v@ID7W2*6V_$1r|BwoP8-@LXMd-NQH_&N=j#x*{~Z_*??-C d8JGVtm!)1 - -ChibiOS/RT: port_common_t Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      port_common_t Struct Reference
      - -[MSP430 I/O Ports Support] -

      -
      -
      - -

      Simplified MSP430 I/O port representation. -More...

      - -

      #include <pal_lld.h>

      - -
      -

      Detailed Description

      -

      Simplified MSP430 I/O port representation.

      -

      This structure represents the common part of all the MSP430 I/O ports.

      - -

      Definition at line 57 of file platforms/MSP430/pal_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structstkalign__t.html b/ChibiOS_2.0.8/docs/html/structstkalign__t.html deleted file mode 100644 index 6b6ee8c..0000000 --- a/ChibiOS_2.0.8/docs/html/structstkalign__t.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: stkalign_t Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      stkalign_t Struct Reference
      - -[Core Port Implementation] -

      -
      -
      - -

      Base type for stack and memory alignment. -More...

      - -

      #include <chcore.h>

      - -
      -

      Detailed Description

      -

      Base type for stack and memory alignment.

      - -

      Definition at line 86 of file ports/GCC/PPC/chcore.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structstm32__gpio__setup__t.html b/ChibiOS_2.0.8/docs/html/structstm32__gpio__setup__t.html deleted file mode 100644 index 532a91b..0000000 --- a/ChibiOS_2.0.8/docs/html/structstm32__gpio__setup__t.html +++ /dev/null @@ -1,115 +0,0 @@ - - -ChibiOS/RT: stm32_gpio_setup_t Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      stm32_gpio_setup_t Struct Reference
      - -[STM32 I/O Ports Support] -

      -
      -
      - -

      GPIO port setup info. -More...

      - -

      #include <pal_lld.h>

      - - - - - -

      -Data Fields

      uint32_t odr
      uint32_t crl
      uint32_t crh
      -

      Detailed Description

      -

      GPIO port setup info.

      - -

      Definition at line 61 of file platforms/STM32/pal_lld.h.

      -

      Field Documentation

      - -
      - -
      -

      Initial value for ODR register.

      - -

      Definition at line 63 of file platforms/STM32/pal_lld.h.

      - -
      -
      - -
      - -
      -

      Initial value for CRL register.

      - -

      Definition at line 65 of file platforms/STM32/pal_lld.h.

      - -
      -
      - -
      - -
      -

      Initial value for CRH register.

      - -

      Definition at line 67 of file platforms/STM32/pal_lld.h.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structstm8__startctx.html b/ChibiOS_2.0.8/docs/html/structstm8__startctx.html deleted file mode 100644 index aaf5712..0000000 --- a/ChibiOS_2.0.8/docs/html/structstm8__startctx.html +++ /dev/null @@ -1,60 +0,0 @@ - - -ChibiOS/RT: stm8_startctx Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      stm8_startctx Struct Reference
      - -[Core Port Implementation] -

      -
      -
      - -

      Start context. -More...

      - -

      #include <chcore.h>

      - -
      -

      Detailed Description

      -

      Start context.

      -

      This context is the stack organization for the trampoline code _port_thread_start().

      - -

      Definition at line 134 of file ports/RC/STM8/chcore.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/structtestcase.html b/ChibiOS_2.0.8/docs/html/structtestcase.html deleted file mode 100644 index 3f44c86..0000000 --- a/ChibiOS_2.0.8/docs/html/structtestcase.html +++ /dev/null @@ -1,140 +0,0 @@ - - -ChibiOS/RT: testcase Struct Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testcase Struct Reference
      - -[Test Runtime] -

      -
      -
      - -

      Structure representing a test case. -More...

      - -

      #include <test.h>

      - - - - - - - - - - -

      -Data Fields

      char *(* gettest )(void)
       Test case name get function.
      void(* setup )(void)
       Test case preparation function.
      void(* teardown )(void)
       Test case clean up function.
      void(* execute )(void)
       Test case execution function.
      -

      Detailed Description

      -

      Structure representing a test case.

      - -

      Definition at line 69 of file test.h.

      -

      Field Documentation

      - -
      -
      - - - - -
      char*(* testcase::gettest)(void)
      -
      -
      - -

      Test case name get function.

      - -

      Definition at line 70 of file test.h.

      - -
      -
      - -
      -
      - - - - -
      void(* testcase::setup)(void)
      -
      -
      - -

      Test case preparation function.

      - -

      Definition at line 71 of file test.h.

      - -
      -
      - -
      -
      - - - - -
      void(* testcase::teardown)(void)
      -
      -
      - -

      Test case clean up function.

      - -

      Definition at line 72 of file test.h.

      - -
      -
      - -
      -
      - - - - -
      void(* testcase::execute)(void)
      -
      -
      - -

      Test case execution function.

      - -

      Definition at line 73 of file test.h.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/syscalls_8c_source.html b/ChibiOS_2.0.8/docs/html/syscalls_8c_source.html deleted file mode 100644 index cb675ce..0000000 --- a/ChibiOS_2.0.8/docs/html/syscalls_8c_source.html +++ /dev/null @@ -1,221 +0,0 @@ - - -ChibiOS/RT: syscalls.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/tab_a.png b/ChibiOS_2.0.8/docs/html/tab_a.png deleted file mode 100644 index 2d99ef23fed78c7683f0b5aa803d937060d288c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU{K*;Vqjo6E_OVcfq@~|)5S5Qg7NL#-JA^$ zA}r<4PcEF(F+=NFlkbch^`30+&$+ez_2IQz*S<0D%xk}yViH{2HXdY|G@(WIhM(G_ wJ@EHcSU<;Y|bsd=%Mfq{X+)78&qol`;+0DbN>%m4rY diff --git a/ChibiOS_2.0.8/docs/html/tab_b.png b/ChibiOS_2.0.8/docs/html/tab_b.png deleted file mode 100644 index b2c3d2be3c7e518fbca6bb30f571882e72fc506d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU{K*;Vqjo6E_OVcfq|jY)5S5Qg7NL$+q{Pq zBpNQ-*93=M?%0y#q#Uqruf^t0|9w^`XS&$km(Q&Z{_XizeW%=$Dh)x!sdGd4o$hs3 zDleHE{>ICtVBh1K!>w(fd3TGv37Qf6@FCZ;nHS6ow|CBtm3%(6u&d|tsjDt}Y6dS3 jEU<0n^KzNe@rTjYLF=WK%=7CE3=9mOu6{1-oD!M<;ggjkq7OF1uTxc#TpLr`M_kt4d<$kFrx1IOglmB#ka*STeQ~#(lOO84f z&F$3h-`}Y*zvG;8qS>SQY)xPKX7gAS_RD_1ah&hq-y2-{rAqcYewH#>pZ5G( v&fKov*p1tscyTmld5JhLl2Ywb+;4MK`497fBdZx07#KWV{an^LB{Ts57s^S4 diff --git a/ChibiOS_2.0.8/docs/html/tabs.css b/ChibiOS_2.0.8/docs/html/tabs.css deleted file mode 100644 index 2192056..0000000 --- a/ChibiOS_2.0.8/docs/html/tabs.css +++ /dev/null @@ -1,59 +0,0 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} diff --git a/ChibiOS_2.0.8/docs/html/target.html b/ChibiOS_2.0.8/docs/html/target.html deleted file mode 100644 index 48b8f44..0000000 --- a/ChibiOS_2.0.8/docs/html/target.html +++ /dev/null @@ -1,88 +0,0 @@ - - -ChibiOS/RT: Application Range - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Application Range

      -
      -
      -

      ChibiOS/RT Application Range.

      - -

      -Application Scenarios

      -

      ChibiOS/RT is usable in many applicative areas, as example and not limited to:

      -
        -
      • Automotive.
      • -
      • Robotic Applications.
      • -
      • Consumer Electronics.
      • -
      • Energy Management.
      • -
      • Teaching and Learning.
      • -
      • Hobby.
      • -
      -

      -Absolute Minimum Requirements

      -

      A certain set of minimum system requirements must be satisfied in order to use ChibiOS/RT on a new architecture:

      -
        -
      • 8bits architecture minimum.
      • -
      • A "real" stack pointer that can be positioned anywhere in the data address space. The OS could be ported to architectures with an hardware stack but I wouldn't recommend it because the context switch would become ridiculously inefficient.
      • -
      • Support for maskable interrupt sources and at least an OS-dedicated timer.
      • -
      • Support for standard C89 (C99 supported) language with no architecture-related non-standard restrictions. Non standard mandatory language extensions or restrictions may result in reduced functionality or impossibility of use.
      • -
      • 256/512bytes RAM permanently allocated to the kernel and its two mandatory threads "idle" and "main", the exact amount depends on the architecture. This figure is not inclusive of the HAL and device drivers (non mandatory components).
      • -
      • 8KiB of program space for a full featured kernel scalable down to about 1.2KiB for reduced configurations. This figure is not inclusive of the HAL and device drivers (non mandatory components).
      • -
      -

      -Desirable Features

      -
        -
      • Efficient instruction set for linked lists traversal. The kernel makes extensive use of simple and bidirectional linked lists so the performance is directly affected by the supported addressing modes, number of registers etc.
      • -
      • Uniformly sized C pointers.
      • -
      • 2KiB RAM.
      • -
      • 16KiB ROM/Flash.
      • -
      -

      -Upper Recommended Limit

      -

      The application range of ChibiOS/RT ends when one or more of the following features are required:

      -
        -
      • Separation between user code space and kernel space, both just logical or using a Memory Management/Protection Unit. Applications in ChibiOS/RT are supposed to be monolithic and trusted. The kernel and the application share the same address space.
      • -
      • Multiple applications. ChibiOS/RT supports the single multithreaded application model.
      • -
      • Multicore SMP architectures. Currently ChibiOS/RT only supports a single core unless running multiple distinct and separate OS instances. A true multicore kernel is planned for when multicore MCUs will become commonly available.
      • -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8c.html b/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8c.html deleted file mode 100644 index a17a169..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8c.html +++ /dev/null @@ -1,71 +0,0 @@ - - -ChibiOS/RT: adc_lld.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      adc_lld.c File Reference

      -
      -
      - -

      ADC Driver subsystem low level driver source template. -More...

      -#include "ch.h"
      -#include "hal.h"
      - -

      Go to the source code of this file.

      - - - - - - - - - - - - -

      -Functions

      void adc_lld_init (void)
       Low level ADC driver initialization.
      void adc_lld_start (ADCDriver *adcp)
       Configures and activates the ADC peripheral.
      void adc_lld_stop (ADCDriver *adcp)
       Deactivates the ADC peripheral.
      void adc_lld_start_conversion (ADCDriver *adcp)
       Starts an ADC conversion.
      void adc_lld_stop_conversion (ADCDriver *adcp)
       Stops an ongoing conversion.
      -

      Detailed Description

      -

      ADC Driver subsystem low level driver source template.

      - -

      Definition in file templates/adc_lld.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8c_source.html deleted file mode 100644 index b080eef..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8c_source.html +++ /dev/null @@ -1,153 +0,0 @@ - - -ChibiOS/RT: adc_lld.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8h.html b/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8h.html deleted file mode 100644 index 052d8a9..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8h.html +++ /dev/null @@ -1,87 +0,0 @@ - - -ChibiOS/RT: adc_lld.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      adc_lld.h File Reference

      -
      -
      - -

      ADC Driver subsystem low level driver header template. -More...

      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - - - - - - - -

      -Data Structures

      struct  ADCConversionGroup
       Conversion group configuration structure. More...
      struct  ADCConfig
       Driver configuration structure. More...
      struct  ADCDriver
       Structure representing an ADC driver. More...

      -Typedefs

      typedef uint16_t adcsample_t
       ADC sample data type.
      typedef uint16_t adc_channels_num_t
       Channels number in a conversion group.
      typedef void(* adccallback_t )(adcsample_t *buffer, size_t n)
       ADC notification callback type.

      -Functions

      void adc_lld_init (void)
       Low level ADC driver initialization.
      void adc_lld_start (ADCDriver *adcp)
       Configures and activates the ADC peripheral.
      void adc_lld_stop (ADCDriver *adcp)
       Deactivates the ADC peripheral.
      void adc_lld_start_conversion (ADCDriver *adcp)
       Starts an ADC conversion.
      void adc_lld_stop_conversion (ADCDriver *adcp)
       Stops an ongoing conversion.
      -

      Detailed Description

      -

      ADC Driver subsystem low level driver header template.

      - -

      Definition in file templates/adc_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8h_source.html deleted file mode 100644 index 186f227..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2adc__lld_8h_source.html +++ /dev/null @@ -1,206 +0,0 @@ - - -ChibiOS/RT: adc_lld.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2can__lld_8c.html b/ChibiOS_2.0.8/docs/html/templates_2can__lld_8c.html deleted file mode 100644 index bb2a205..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2can__lld_8c.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: can_lld.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      can_lld.c File Reference

      -
      -
      - -

      CAN Driver subsystem low level driver source template. -More...

      -#include "ch.h"
      -#include "hal.h"
      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - -

      -Functions

      void can_lld_init (void)
       Low level CAN driver initialization.
      void can_lld_start (CANDriver *canp)
       Configures and activates the CAN peripheral.
      void can_lld_stop (CANDriver *canp)
       Deactivates the CAN peripheral.
      bool_t can_lld_can_transmit (CANDriver *canp)
       Determines whether a frame can be transmitted.
      void can_lld_transmit (CANDriver *canp, const CANTxFrame *ctfp)
       Inserts a frame into the transmit queue.
      bool_t can_lld_can_receive (CANDriver *canp)
       Determines whether a frame has been received.
      void can_lld_receive (CANDriver *canp, CANRxFrame *crfp)
       Receives a frame from the input queue.
      void can_lld_sleep (CANDriver *canp)
       Enters the sleep mode.
      void can_lld_wakeup (CANDriver *canp)
       Enforces leaving the sleep mode.
      -

      Detailed Description

      -

      CAN Driver subsystem low level driver source template.

      - -

      Definition in file templates/can_lld.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2can__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/templates_2can__lld_8c_source.html deleted file mode 100644 index e0c5c6c..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2can__lld_8c_source.html +++ /dev/null @@ -1,202 +0,0 @@ - - -ChibiOS/RT: can_lld.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2can__lld_8h.html b/ChibiOS_2.0.8/docs/html/templates_2can__lld_8h.html deleted file mode 100644 index 10a9161..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2can__lld_8h.html +++ /dev/null @@ -1,98 +0,0 @@ - - -ChibiOS/RT: can_lld.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      can_lld.h File Reference

      -
      -
      - -

      CAN Driver subsystem low level driver header template. -More...

      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      -Data Structures

      struct  CANTxFrame
       CAN transmission frame. More...
      struct  CANRxFrame
       CAN received frame. More...
      struct  CANFilter
       CAN filter. More...
      struct  CANConfig
       Driver configuration structure. More...
      struct  CANDriver
       Structure representing an CAN driver. More...

      -Defines

      #define CAN_SUPPORTS_SLEEP   TRUE
       This switch defines whether the driver implementation supports a low power switch mode with automatic an wakeup feature.
      #define CAN_USE_SLEEP_MODE   TRUE
       Sleep mode related APIs inclusion switch.

      -Typedefs

      typedef uint32_t canstatus_t
       CAN status flags.

      -Functions

      void can_lld_init (void)
       Low level CAN driver initialization.
      void can_lld_start (CANDriver *canp)
       Configures and activates the CAN peripheral.
      void can_lld_stop (CANDriver *canp)
       Deactivates the CAN peripheral.
      bool_t can_lld_can_transmit (CANDriver *canp)
       Determines whether a frame can be transmitted.
      void can_lld_transmit (CANDriver *canp, const CANTxFrame *ctfp)
       Inserts a frame into the transmit queue.
      bool_t can_lld_can_receive (CANDriver *canp)
       Determines whether a frame has been received.
      void can_lld_receive (CANDriver *canp, CANRxFrame *crfp)
       Receives a frame from the input queue.
      -

      Detailed Description

      -

      CAN Driver subsystem low level driver header template.

      - -

      Definition in file templates/can_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2can__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/templates_2can__lld_8h_source.html deleted file mode 100644 index 666527f..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2can__lld_8h_source.html +++ /dev/null @@ -1,281 +0,0 @@ - - -ChibiOS/RT: can_lld.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:48 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8c.html b/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8c.html deleted file mode 100644 index 1918907..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8c.html +++ /dev/null @@ -1,63 +0,0 @@ - - -ChibiOS/RT: hal_lld.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      hal_lld.c File Reference

      -
      -
      - -

      HAL Driver subsystem low level driver source template. -More...

      -#include "ch.h"
      -#include "hal.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Functions

      void hal_lld_init (void)
       Low level HAL driver initialization.
      -

      Detailed Description

      -

      HAL Driver subsystem low level driver source template.

      - -

      Definition in file templates/hal_lld.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8c_source.html deleted file mode 100644 index 19b4b81..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8c_source.html +++ /dev/null @@ -1,109 +0,0 @@ - - -ChibiOS/RT: hal_lld.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8h.html b/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8h.html deleted file mode 100644 index 3840b11..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8h.html +++ /dev/null @@ -1,66 +0,0 @@ - - -ChibiOS/RT: hal_lld.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      hal_lld.h File Reference

      -
      -
      - -

      HAL subsystem low level driver header template. -More...

      - -

      Go to the source code of this file.

      - - - - - - - -

      -Defines

      #define PLATFORM_NAME   ""
       Platform name.

      -Functions

      void hal_lld_init (void)
       Low level HAL driver initialization.
      -

      Detailed Description

      -

      HAL subsystem low level driver header template.

      - -

      Definition in file templates/hal_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8h_source.html deleted file mode 100644 index 2bc59dc..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2hal__lld_8h_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - -ChibiOS/RT: hal_lld.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8c.html b/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8c.html deleted file mode 100644 index dfb2e41..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8c.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: mac_lld.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      mac_lld.c File Reference

      -
      -
      - -

      MAC Driver subsystem low level driver source template. -More...

      -#include "ch.h"
      -#include "hal.h"
      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - -

      -Functions

      void mac_lld_init (void)
       Low level MAC initialization.
      void mac_lld_set_address (MACDriver *macp, const uint8_t *p)
       Low level MAC address setup.
      msg_t max_lld_get_transmit_descriptor (MACDriver *macp, MACTransmitDescriptor *tdp)
       Returns a transmission descriptor.
      size_t mac_lld_write_transmit_descriptor (MACTransmitDescriptor *tdp, uint8_t *buf, size_t size)
       Writes to a transmit descriptor's stream.
      void mac_lld_release_transmit_descriptor (MACTransmitDescriptor *tdp)
       Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.
      msg_t max_lld_get_receive_descriptor (MACDriver *macp, MACReceiveDescriptor *rdp)
       Returns a receive descriptor.
      size_t mac_lld_read_receive_descriptor (MACReceiveDescriptor *rdp, uint8_t *buf, size_t size)
       Reads from a receive descriptor's stream.
      void mac_lld_release_receive_descriptor (MACReceiveDescriptor *rdp)
       Releases a receive descriptor.
      bool_t mac_lld_poll_link_status (MACDriver *macp)
       Updates and returns the link status.
      -

      Detailed Description

      -

      MAC Driver subsystem low level driver source template.

      - -

      Definition in file templates/mac_lld.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8c_source.html deleted file mode 100644 index 72bbf44..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8c_source.html +++ /dev/null @@ -1,227 +0,0 @@ - - -ChibiOS/RT: mac_lld.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8h.html b/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8h.html deleted file mode 100644 index 3a6a32f..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8h.html +++ /dev/null @@ -1,95 +0,0 @@ - - -ChibiOS/RT: mac_lld.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      mac_lld.h File Reference

      -
      -
      - -

      MAC Driver subsystem low level driver header template. -More...

      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      -Data Structures

      struct  MACDriver
       Structure representing a MAC driver. More...
      struct  MACTransmitDescriptor
       Structure representing a transmit descriptor. More...
      struct  MACReceiveDescriptor
       Structure representing a receive descriptor. More...

      -Defines

      #define MAC_TRANSMIT_BUFFERS   2
       Number of available transmit buffers.
      #define MAC_RECEIVE_BUFFERS   2
       Number of available receive buffers.
      #define MAC_BUFFERS_SIZE   1518
       Maximum supported frame size.

      -Functions

      void mac_lld_init (void)
       Low level MAC initialization.
      void mac_lld_set_address (MACDriver *macp, const uint8_t *p)
       Low level MAC address setup.
      msg_t max_lld_get_transmit_descriptor (MACDriver *macp, MACTransmitDescriptor *tdp)
       Returns a transmission descriptor.
      size_t mac_lld_write_transmit_descriptor (MACTransmitDescriptor *tdp, uint8_t *buf, size_t size)
       Writes to a transmit descriptor's stream.
      void mac_lld_release_transmit_descriptor (MACTransmitDescriptor *tdp)
       Releases a transmit descriptor and starts the transmission of the enqueued data as a single frame.
      msg_t max_lld_get_receive_descriptor (MACDriver *macp, MACReceiveDescriptor *rdp)
       Returns a receive descriptor.
      size_t mac_lld_read_receive_descriptor (MACReceiveDescriptor *rdp, uint8_t *buf, size_t size)
       Reads from a receive descriptor's stream.
      void mac_lld_release_receive_descriptor (MACReceiveDescriptor *rdp)
       Releases a receive descriptor.
      bool_t mac_lld_poll_link_status (MACDriver *macp)
       Updates and returns the link status.
      -

      Detailed Description

      -

      MAC Driver subsystem low level driver header template.

      - -

      Definition in file templates/mac_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8h_source.html deleted file mode 100644 index 030e514..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2mac__lld_8h_source.html +++ /dev/null @@ -1,185 +0,0 @@ - - -ChibiOS/RT: mac_lld.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8c.html b/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8c.html deleted file mode 100644 index 9bb8daf..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8c.html +++ /dev/null @@ -1,57 +0,0 @@ - - -ChibiOS/RT: pal_lld.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      pal_lld.c File Reference

      -
      -
      - -

      PAL subsystem low level driver template. -More...

      -#include "ch.h"
      -#include "hal.h"
      - -

      Go to the source code of this file.

      - -
      -

      Detailed Description

      -

      PAL subsystem low level driver template.

      - -

      Definition in file templates/pal_lld.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8c_source.html deleted file mode 100644 index c5ba8bd..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8c_source.html +++ /dev/null @@ -1,106 +0,0 @@ - - -ChibiOS/RT: pal_lld.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8h.html b/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8h.html deleted file mode 100644 index b3692bf..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8h.html +++ /dev/null @@ -1,109 +0,0 @@ - - -ChibiOS/RT: pal_lld.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      pal_lld.h File Reference

      -
      -
      - -

      PAL subsystem low level driver header template. -More...

      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      -Data Structures

      struct  GenericConfig
       Generic I/O ports static initializer. More...

      -Defines

      #define PAL_IOPORTS_WIDTH   32
       Width, in bits, of an I/O port.
      #define PAL_WHOLE_PORT   ((ioportmask_t)0xFFFFFFFF)
       Whole port mask.
      #define IOPORT1   0
       First I/O port identifier.
      #define pal_lld_init(config)
       Low level PAL subsystem initialization.
      #define pal_lld_readport(port)
       Reads the physical I/O port states.
      #define pal_lld_readlatch(port)
       Reads the output latch.
      #define pal_lld_writeport(port, bits)
       Writes a bits mask on a I/O port.
      #define pal_lld_setport(port, bits)
       Sets a bits mask on a I/O port.
      #define pal_lld_clearport(port, bits)
       Clears a bits mask on a I/O port.
      #define pal_lld_toggleport(port, bits)
       Toggles a bits mask on a I/O port.
      #define pal_lld_readgroup(port, mask, offset)
       Reads a group of bits.
      #define pal_lld_writegroup(port, mask, offset, bits)
       Writes a group of bits.
      #define pal_lld_setgroupmode(port, mask, mode)
       Pads group mode setup.
      #define pal_lld_readpad(port, pad)
       Reads a logical state from an I/O pad.
      #define pal_lld_writepad(port, pad, bit)
       Writes a logical state on an output pad.
      #define pal_lld_setpad(port, pad)
       Sets a pad logical state to PAL_HIGH.
      #define pal_lld_clearpad(port, pad)
       Clears a pad logical state to PAL_LOW.
      #define pal_lld_togglepad(port, pad)
       Toggles a pad logical state.
      #define pal_lld_setpadmode(port, pad, mode)
       Pad mode setup.

      -Typedefs

      typedef uint32_t ioportmask_t
       Digital I/O port sized unsigned type.
      typedef uint32_t ioportid_t
       Port Identifier.
      -

      Detailed Description

      -

      PAL subsystem low level driver header template.

      - -

      Definition in file templates/pal_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8h_source.html deleted file mode 100644 index d23141b..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2pal__lld_8h_source.html +++ /dev/null @@ -1,364 +0,0 @@ - - -ChibiOS/RT: pal_lld.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8c.html b/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8c.html deleted file mode 100644 index 5bcde0d..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8c.html +++ /dev/null @@ -1,73 +0,0 @@ - - -ChibiOS/RT: pwm_lld.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      pwm_lld.c File Reference

      -
      -
      - -

      PWM Driver subsystem low level driver source template. -More...

      -#include "ch.h"
      -#include "hal.h"
      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - -

      -Functions

      void pwm_lld_init (void)
       Low level PWM driver initialization.
      void pwm_lld_start (PWMDriver *pwmp)
       Configures and activates the PWM peripheral.
      void pwm_lld_stop (PWMDriver *pwmp)
       Deactivates the PWM peripheral.
      bool_t pwm_lld_is_enabled (PWMDriver *pwmp, pwmchannel_t channel)
       Determines whatever the PWM channel is already enabled.
      void pwm_lld_enable_channel (PWMDriver *pwmp, pwmchannel_t channel, pwmcnt_t width)
       Enables a PWM channel.
      void pwm_lld_disable_channel (PWMDriver *pwmp, pwmchannel_t channel)
       Disables a PWM channel.
      -

      Detailed Description

      -

      PWM Driver subsystem low level driver source template.

      - -

      Definition in file templates/pwm_lld.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8c_source.html deleted file mode 100644 index fd46028..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8c_source.html +++ /dev/null @@ -1,174 +0,0 @@ - - -ChibiOS/RT: pwm_lld.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8h.html b/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8h.html deleted file mode 100644 index 0ee234c..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8h.html +++ /dev/null @@ -1,102 +0,0 @@ - - -ChibiOS/RT: pwm_lld.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      pwm_lld.h File Reference

      -
      -
      - -

      PWM Driver subsystem low level driver header template. -More...

      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      -Data Structures

      struct  PWMChannelConfig
       PWM driver channel configuration structure. More...
      struct  PWMConfig
       Driver configuration structure. More...
      struct  PWMDriver
       Structure representing an PWM driver. More...

      -Defines

      #define PWM_CHANNELS   1
       Number of PWM channels per PWM driver.
      #define PWM_FRACTION_TO_WIDTH(pwmp, numerator, denominator)   0
       Converts from fraction to pulse width.
      #define PWM_DEGREES_TO_WIDTH(pwmp, degrees)   PWM_FRACTION_TO_WIDTH(pwmp, 36000, degrees)
       Converts from degrees to pulse width.
      #define PWM_PERCENTAGE_TO_WIDTH(pwmp, percentage)   PWM_FRACTION_TO_WIDTH(pwmp, 10000, percentage)
       Converts from percentage to pulse width.

      -Typedefs

      typedef uint8_t pwmchannel_t
       PWM channel type.
      typedef uint16_t pwmcnt_t
       PWM counter type.
      typedef struct PWMDriver PWMDriver
       Type of a structure representing an PWM driver.
      typedef void(* pwmcallback_t )(PWMDriver *pwmp)
       PWM notification callback type.

      -Functions

      void pwm_lld_init (void)
       Low level PWM driver initialization.
      void pwm_lld_start (PWMDriver *pwmp)
       Configures and activates the PWM peripheral.
      void pwm_lld_stop (PWMDriver *pwmp)
       Deactivates the PWM peripheral.
      bool_t pwm_lld_is_enabled (PWMDriver *pwmp, pwmchannel_t channel)
       Determines whatever the PWM channel is already enabled.
      void pwm_lld_enable_channel (PWMDriver *pwmp, pwmchannel_t channel, pwmcnt_t width)
       Enables a PWM channel.
      void pwm_lld_disable_channel (PWMDriver *pwmp, pwmchannel_t channel)
       Disables a PWM channel.
      -

      Detailed Description

      -

      PWM Driver subsystem low level driver header template.

      - -

      Definition in file templates/pwm_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8h_source.html deleted file mode 100644 index e6e8f0e..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2pwm__lld_8h_source.html +++ /dev/null @@ -1,261 +0,0 @@ - - -ChibiOS/RT: pwm_lld.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8c.html b/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8c.html deleted file mode 100644 index f5cb76b..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8c.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: serial_lld.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      serial_lld.c File Reference

      -
      -
      - -

      Serial Driver subsystem low level driver source template. -More...

      -#include "ch.h"
      -#include "hal.h"
      - -

      Go to the source code of this file.

      - - - - - - - - -

      -Functions

      void sd_lld_init (void)
       Low level serial driver initialization.
      void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
       Low level serial driver configuration and (re)start.
      void sd_lld_stop (SerialDriver *sdp)
       Low level serial driver stop.
      -

      Detailed Description

      -

      Serial Driver subsystem low level driver source template.

      - -

      Definition in file templates/serial_lld.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8c_source.html deleted file mode 100644 index f2e5f92..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8c_source.html +++ /dev/null @@ -1,145 +0,0 @@ - - -ChibiOS/RT: serial_lld.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8h.html b/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8h.html deleted file mode 100644 index 7044da8..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8h.html +++ /dev/null @@ -1,80 +0,0 @@ - - -ChibiOS/RT: serial_lld.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      serial_lld.h File Reference

      -
      -
      - -

      Serial Driver subsystem low level driver header template. -More...

      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - -

      -Data Structures

      struct  SerialConfig
       Generic Serial Driver configuration structure. More...

      -Defines

      #define _serial_driver_data
       SerialDriver specific data.

      -Typedefs

      typedef uint8_t sdflags_t
       Serial Driver condition flags type.

      -Functions

      void sd_lld_init (void)
       Low level serial driver initialization.
      void sd_lld_start (SerialDriver *sdp, const SerialConfig *config)
       Low level serial driver configuration and (re)start.
      void sd_lld_stop (SerialDriver *sdp)
       Low level serial driver stop.
      -

      Detailed Description

      -

      Serial Driver subsystem low level driver header template.

      - -

      Definition in file templates/serial_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8h_source.html deleted file mode 100644 index 0a67382..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2serial__lld_8h_source.html +++ /dev/null @@ -1,160 +0,0 @@ - - -ChibiOS/RT: serial_lld.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8c.html b/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8c.html deleted file mode 100644 index 17c612b..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8c.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: spi_lld.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      spi_lld.c File Reference

      -
      -
      - -

      SPI Driver subsystem low level driver source template. -More...

      -#include "ch.h"
      -#include "hal.h"
      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - -

      -Functions

      void spi_lld_init (void)
       Low level SPI driver initialization.
      void spi_lld_start (SPIDriver *spip)
       Configures and activates the SPI peripheral.
      void spi_lld_stop (SPIDriver *spip)
       Deactivates the SPI peripheral.
      void spi_lld_select (SPIDriver *spip)
       Asserts the slave select signal and prepares for transfers.
      void spi_lld_unselect (SPIDriver *spip)
       Deasserts the slave select signal.
      void spi_lld_ignore (SPIDriver *spip, size_t n)
       Ignores data on the SPI bus.
      void spi_lld_exchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
       Exchanges data on the SPI bus.
      void spi_lld_send (SPIDriver *spip, size_t n, const void *txbuf)
       Sends data ever the SPI bus.
      void spi_lld_receive (SPIDriver *spip, size_t n, void *rxbuf)
       Receives data from the SPI bus.
      -

      Detailed Description

      -

      SPI Driver subsystem low level driver source template.

      - -

      Definition in file templates/spi_lld.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8c_source.html b/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8c_source.html deleted file mode 100644 index d960f57..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8c_source.html +++ /dev/null @@ -1,209 +0,0 @@ - - -ChibiOS/RT: spi_lld.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8h.html b/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8h.html deleted file mode 100644 index d4a495e..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8h.html +++ /dev/null @@ -1,84 +0,0 @@ - - -ChibiOS/RT: spi_lld.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      spi_lld.h File Reference

      -
      -
      - -

      SPI Driver subsystem low level driver header template. -More...

      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - - - - - - -

      -Data Structures

      struct  SPIConfig
       Driver configuration structure. More...
      struct  SPIDriver
       Structure representing a SPI driver. More...

      -Functions

      void spi_lld_init (void)
       Low level SPI driver initialization.
      void spi_lld_start (SPIDriver *spip)
       Configures and activates the SPI peripheral.
      void spi_lld_stop (SPIDriver *spip)
       Deactivates the SPI peripheral.
      void spi_lld_select (SPIDriver *spip)
       Asserts the slave select signal and prepares for transfers.
      void spi_lld_unselect (SPIDriver *spip)
       Deasserts the slave select signal.
      void spi_lld_ignore (SPIDriver *spip, size_t n)
       Ignores data on the SPI bus.
      void spi_lld_exchange (SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
       Exchanges data on the SPI bus.
      void spi_lld_send (SPIDriver *spip, size_t n, const void *txbuf)
       Sends data ever the SPI bus.
      void spi_lld_receive (SPIDriver *spip, size_t n, void *rxbuf)
       Receives data from the SPI bus.
      -

      Detailed Description

      -

      SPI Driver subsystem low level driver header template.

      - -

      Definition in file templates/spi_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8h_source.html b/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8h_source.html deleted file mode 100644 index 18e0b2b..0000000 --- a/ChibiOS_2.0.8/docs/html/templates_2spi__lld_8h_source.html +++ /dev/null @@ -1,161 +0,0 @@ - - -ChibiOS/RT: spi_lld.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_8c.html b/ChibiOS_2.0.8/docs/html/test_8c.html deleted file mode 100644 index 4fc3f1b..0000000 --- a/ChibiOS_2.0.8/docs/html/test_8c.html +++ /dev/null @@ -1,98 +0,0 @@ - - -ChibiOS/RT: test.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      test.c File Reference

      -
      -
      - -

      Tests support code. -More...

      -#include "ch.h"
      -#include "hal.h"
      -#include "test.h"
      -#include "testthd.h"
      -#include "testsem.h"
      -#include "testmtx.h"
      -#include "testmsg.h"
      -#include "testmbox.h"
      -#include "testevt.h"
      -#include "testheap.h"
      -#include "testpools.h"
      -#include "testdyn.h"
      -#include "testqueues.h"
      -#include "testbmk.h"
      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - - - - - - -

      -Functions

      void test_printn (uint32_t n)
       Prints a decimal unsigned number.
      void test_print (char *msgp)
       Prints a line without final end-of-line.
      void test_println (char *msgp)
       Prints a line.
      void test_emit_token (char token)
       Emits a token into the tokens buffer.
      void test_terminate_threads (void)
       Pends a termination request in all the test-spawned threads.
      void test_wait_threads (void)
       Waits for the completion of all the test-spawned threads.
      void test_cpu_pulse (unsigned duration)
       CPU pulse.
      systime_t test_wait_tick (void)
       Delays execution until next system time tick.
      void test_start_timer (unsigned ms)
       Starts the test timer.
      msg_t TestThread (void *p)
       Test execution thread function.

      -Variables

      bool_t test_timer_done
       Set to TRUE when the test timer reaches its deadline.
      -

      Detailed Description

      -

      Tests support code.

      - -

      Definition in file test.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_8c_source.html b/ChibiOS_2.0.8/docs/html/test_8c_source.html deleted file mode 100644 index 287bbc5..0000000 --- a/ChibiOS_2.0.8/docs/html/test_8c_source.html +++ /dev/null @@ -1,437 +0,0 @@ - - -ChibiOS/RT: test.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_8h.html b/ChibiOS_2.0.8/docs/html/test_8h.html deleted file mode 100644 index f09b19f..0000000 --- a/ChibiOS_2.0.8/docs/html/test_8h.html +++ /dev/null @@ -1,99 +0,0 @@ - - -ChibiOS/RT: test.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      test.h File Reference

      -
      -
      - -

      Tests support header. -More...

      - -

      Go to the source code of this file.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      -Data Structures

      struct  testcase
       Structure representing a test case. More...

      -Defines

      #define DELAY_BETWEEN_TESTS   200
       Delay inserted between test cases.
      #define TEST_NO_BENCHMARKS   FALSE
       If TRUE then benchmarks are not included.
      #define test_fail(point)
       Test failure enforcement.
      #define test_assert(point, condition, msg)
       Test assertion.
      #define test_assert_sequence(point, expected)
       Test sequence assertion.
      #define test_assert_time_window(point, start, end)
       Test time window assertion.

      -Functions

      msg_t TestThread (void *p)
       Test execution thread function.
      void test_printn (uint32_t n)
       Prints a decimal unsigned number.
      void test_print (char *msgp)
       Prints a line without final end-of-line.
      void test_println (char *msgp)
       Prints a line.
      void test_emit_token (char token)
       Emits a token into the tokens buffer.
      void test_terminate_threads (void)
       Pends a termination request in all the test-spawned threads.
      void test_wait_threads (void)
       Waits for the completion of all the test-spawned threads.
      systime_t test_wait_tick (void)
       Delays execution until next system time tick.
      void test_start_timer (unsigned ms)
       Starts the test timer.
      void test_cpu_pulse (unsigned duration)
       CPU pulse.
      -

      Detailed Description

      -

      Tests support header.

      - -

      Definition in file test.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_8h_source.html b/ChibiOS_2.0.8/docs/html/test_8h_source.html deleted file mode 100644 index b5e9e4c..0000000 --- a/ChibiOS_2.0.8/docs/html/test_8h_source.html +++ /dev/null @@ -1,211 +0,0 @@ - - -ChibiOS/RT: test.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks.html b/ChibiOS_2.0.8/docs/html/test_benchmarks.html deleted file mode 100644 index b39b668..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks.html +++ /dev/null @@ -1,67 +0,0 @@ - - -ChibiOS/RT: Kernel Benchmarks - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Kernel Benchmarks

      -
      -
      -

      File: testbmk.c

      -

      Description

      -

      This module implements a series of system benchmarks. The benchmarks are useful as a stress test and as a reference when comparing ChibiOS/RT with similar systems.

      -

      Objective

      -

      Objective of the test module is to provide a performance index for the most critical system subsystems. The performance numbers allow to discover performance regressions between successive ChibiOS/RT releases.

      -

      Preconditions

      -

      None.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_001.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_001.html deleted file mode 100644 index ad6baac..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_001.html +++ /dev/null @@ -1,47 +0,0 @@ - - -ChibiOS/RT: Messages performance #1 - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Messages performance #1

      -
      -
      -

      Description

      -

      A message server thread is created with a lower priority than the client thread, the messages throughput per second is measured and the result printed in the output log.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_002.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_002.html deleted file mode 100644 index 563da62..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_002.html +++ /dev/null @@ -1,47 +0,0 @@ - - -ChibiOS/RT: Messages performance #2 - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Messages performance #2

      -
      -
      -

      Description

      -

      A message server thread is created with an higher priority than the client thread, the messages throughput per second is measured and the result printed in the output log.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_003.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_003.html deleted file mode 100644 index 2e62bbf..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_003.html +++ /dev/null @@ -1,47 +0,0 @@ - - -ChibiOS/RT: Messages performance #3 - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Messages performance #3

      -
      -
      -

      Description

      -

      A message server thread is created with an higher priority than the client thread, four lower priority threads crowd the ready list, the messages throughput per second is measured while the ready list and the result printed in the output log.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_004.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_004.html deleted file mode 100644 index 2fe4e4b..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_004.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Context Switch performance - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Context Switch performance

      -
      -
      -

      Description

      -

      A thread is created that just performs a chSchGoSleepS() into a loop, the thread is awakened as fast is possible by the tester thread.
      - The Context Switch performance is calculated by measuring the number of iterations after a second of continuous operations.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_005.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_005.html deleted file mode 100644 index 09580ef..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_005.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Threads performance, full cycle - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Threads performance, full cycle

      -
      -
      -

      Description

      -

      Threads are continuously created and terminated into a loop. A full chThdCreateStatic() / chThdExit() / chThdWait() cycle is performed in each iteration.
      - The performance is calculated by measuring the number of iterations after a second of continuous operations.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_006.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_006.html deleted file mode 100644 index 07685b9..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_006.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Threads performance, create/exit only - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Threads performance, create/exit only

      -
      -
      -

      Description

      -

      Threads are continuously created and terminated into a loop. A partial chThdCreateStatic() / chThdExit() cycle is performed in each iteration, the chThdWait() is not necessary because the thread is created at an higher priority so there is no need to wait for it to terminate.
      - The performance is calculated by measuring the number of iterations after a second of continuous operations.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_007.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_007.html deleted file mode 100644 index f6ccef3..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_007.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Mass reschedule performance - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Mass reschedule performance

      -
      -
      -

      Description

      -

      Five threads are created and atomically rescheduled by resetting the semaphore where they are waiting on. The operation is performed into a continuous loop.
      - The performance is calculated by measuring the number of iterations after a second of continuous operations.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_008.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_008.html deleted file mode 100644 index 0064aad..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_008.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: I/O Round-Robin voluntary reschedule. - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      I/O Round-Robin voluntary reschedule.

      -
      -
      -

      Description

      -

      Five threads are created at equal priority, each thread just increases a variable and yields.
      - The performance is calculated by measuring the number of iterations after a second of continuous operations.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_009.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_009.html deleted file mode 100644 index 0215eb5..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_009.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: I/O Queues throughput - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      I/O Queues throughput

      -
      -
      -

      Description

      -

      Four bytes are written and then read from an InputQueue into a continuous loop.
      - The performance is calculated by measuring the number of iterations after a second of continuous operations.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_010.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_010.html deleted file mode 100644 index 6e2d656..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_010.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Virtual Timers set/reset performance - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Virtual Timers set/reset performance

      -
      -
      -

      Description

      -

      A virtual timer is set and immediately reset into a continuous loop.
      - The performance is calculated by measuring the number of iterations after a second of continuous operations.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_011.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_011.html deleted file mode 100644 index 5ae587c..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_011.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Semaphores wait/signal performance - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Semaphores wait/signal performance

      -
      -
      -

      Description

      -

      A counting semaphore is taken/released into a continuous loop, no Context Switch happens because the counter is always non negative.
      - The performance is calculated by measuring the number of iterations after a second of continuous operations.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_012.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_012.html deleted file mode 100644 index 8d81dd0..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_012.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Mutexes lock/unlock performance - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Mutexes lock/unlock performance

      -
      -
      -

      Description

      -

      A mutex is locked/unlocked into a continuous loop, no Context Switch happens because there are no other threads asking for the mutex.
      - The performance is calculated by measuring the number of iterations after a second of continuous operations.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_benchmarks_013.html b/ChibiOS_2.0.8/docs/html/test_benchmarks_013.html deleted file mode 100644 index 0663ad9..0000000 --- a/ChibiOS_2.0.8/docs/html/test_benchmarks_013.html +++ /dev/null @@ -1,47 +0,0 @@ - - -ChibiOS/RT: RAM Footprint - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      RAM Footprint

      -
      -
      -

      Description

      -

      The memory size of the various kernel objects is printed.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_dynamic.html b/ChibiOS_2.0.8/docs/html/test_dynamic.html deleted file mode 100644 index 2b8640b..0000000 --- a/ChibiOS_2.0.8/docs/html/test_dynamic.html +++ /dev/null @@ -1,63 +0,0 @@ - - -ChibiOS/RT: Dynamic APIs test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Dynamic APIs test

      -
      -
      -

      File: testdyn.c

      -

      Description

      -

      This module implements the test sequence for the dynamic thread creation APIs.

      -

      Objective

      -

      Objective of the test module is to cover 100% of the dynamic APIs code.

      -

      Preconditions

      -

      The module requires the following kernel options:

      -
        -
      • CH_USE_DYNAMIC
      • -
      • CH_USE_HEAP
      • -
      • CH_USE_MEMPOOLS
      • -
      -

      In case some of the required options are not enabled then some or all tests may be skipped.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_dynamic_001.html b/ChibiOS_2.0.8/docs/html/test_dynamic_001.html deleted file mode 100644 index e90726d..0000000 --- a/ChibiOS_2.0.8/docs/html/test_dynamic_001.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Threads creation from Memory Heap - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Threads creation from Memory Heap

      -
      -
      -

      Description

      -

      Two threads are started by allocating the memory from the Memory Heap then the remaining heap space is arbitrarily allocated and a third tread startup is attempted.
      - The test expects the first two threads to successfully start and the last one to fail.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_dynamic_002.html b/ChibiOS_2.0.8/docs/html/test_dynamic_002.html deleted file mode 100644 index 9b5d4d3..0000000 --- a/ChibiOS_2.0.8/docs/html/test_dynamic_002.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Threads creation from Memory Pool - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Threads creation from Memory Pool

      -
      -
      -

      Description

      -

      Five thread creation are attempted from a pool containing only four elements.
      - The test expects the first four threads to successfully start and the last one to fail.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_dynamic_003.html b/ChibiOS_2.0.8/docs/html/test_dynamic_003.html deleted file mode 100644 index 47c702d..0000000 --- a/ChibiOS_2.0.8/docs/html/test_dynamic_003.html +++ /dev/null @@ -1,47 +0,0 @@ - - -ChibiOS/RT: Registry and References test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Registry and References test

      -
      -
      -

      Description

      -

      Registry and Thread References APIs are tested for functionality and coverage.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_events.html b/ChibiOS_2.0.8/docs/html/test_events.html deleted file mode 100644 index c1b3a99..0000000 --- a/ChibiOS_2.0.8/docs/html/test_events.html +++ /dev/null @@ -1,62 +0,0 @@ - - -ChibiOS/RT: Events test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Events test

      -
      -
      -

      File: testevt.c

      -

      Description

      -

      This module implements the test sequence for the Event Flags subsystem.

      -

      Objective

      -

      Objective of the test module is to cover 100% of the Event Flags subsystem.

      -

      Preconditions

      -

      The module requires the following kernel options:

      -
        -
      • CH_USE_EVENTS
      • -
      • CH_USE_EVENTS_TIMEOUT
      • -
      -

      In case some of the required options are not enabled then some or all tests may be skipped.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_events_001.html b/ChibiOS_2.0.8/docs/html/test_events_001.html deleted file mode 100644 index db5df05..0000000 --- a/ChibiOS_2.0.8/docs/html/test_events_001.html +++ /dev/null @@ -1,49 +0,0 @@ - - -ChibiOS/RT: Events registration and dispatch - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Events registration and dispatch

      -
      -
      -

      Description

      -

      Two event listeners are registered on an event source and then unregistered in the same order.
      - The test expects that the even source has listeners after the registrations and after the first unregistration, then, after the second unegistration, the test expects no more listeners.
      - In the second part the test dispatches three event flags and verifies that the associated event handlers are invoked in LSb-first order.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_events_002.html b/ChibiOS_2.0.8/docs/html/test_events_002.html deleted file mode 100644 index 8bc90b7..0000000 --- a/ChibiOS_2.0.8/docs/html/test_events_002.html +++ /dev/null @@ -1,53 +0,0 @@ - - -ChibiOS/RT: Events wait and broadcast - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Events wait and broadcast

      -
      -
      -

      Description

      -

      In this test the following APIs are indipently tested by starting threads that signal/broadcast events after fixed delays:

      - -

      After each test phase the test verifies that the events have been served at the expected time and that there are no stuck event flags.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_events_003.html b/ChibiOS_2.0.8/docs/html/test_events_003.html deleted file mode 100644 index 1988925..0000000 --- a/ChibiOS_2.0.8/docs/html/test_events_003.html +++ /dev/null @@ -1,53 +0,0 @@ - - -ChibiOS/RT: Events timeout - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Events timeout

      -
      -
      -

      Description

      -

      In this test the following APIs are let to timeout twice: immediatly and after 10ms: In this test the following APIs are indipently tested by starting threads that broadcast events after fixed delays:

      - -

      After each test phase the test verifies that there are no stuck event flags.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_heap.html b/ChibiOS_2.0.8/docs/html/test_heap.html deleted file mode 100644 index 1f45a5d..0000000 --- a/ChibiOS_2.0.8/docs/html/test_heap.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: Memory Heap test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Memory Heap test

      -
      -
      -

      File: testheap.c

      -

      Description

      -

      This module implements the test sequence for the Heaps subsystem.

      -

      Objective

      -

      Objective of the test module is to cover 100% of the Heaps subsystem.

      -

      Preconditions

      -

      The module requires the following kernel options:

      -
        -
      • CH_USE_HEAP
      • -
      -

      In case some of the required options are not enabled then some or all tests may be skipped.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_heap_001.html b/ChibiOS_2.0.8/docs/html/test_heap_001.html deleted file mode 100644 index e36eecd..0000000 --- a/ChibiOS_2.0.8/docs/html/test_heap_001.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Allocation and fragmentation test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Allocation and fragmentation test

      -
      -
      -

      Description

      -

      Series of allocations/deallocations are performed in carefully designed sequences in order to stimulate all the possible code paths inside the allocator.
      - The test expects to find the heap back to the initial status after each sequence.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mbox.html b/ChibiOS_2.0.8/docs/html/test_mbox.html deleted file mode 100644 index 5ed80fe..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mbox.html +++ /dev/null @@ -1,60 +0,0 @@ - - -ChibiOS/RT: Mailboxes test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Mailboxes test

      -
      -
      -

      File: testmbox.c

      -

      Description

      -

      This module implements the test sequence for the Mailboxes subsystem.

      -

      Objective

      -

      Objective of the test module is to cover 100% of the Mailboxes subsystem code.
      - Note that the Mailboxes subsystem depends on the Semaphores subsystem that has to met its testing objectives as well.

      -

      Preconditions

      -

      The module requires the following kernel options:

      -
        -
      • CH_USE_MAILBOXES
      • -
      -

      In case some of the required options are not enabled then some or all tests may be skipped.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mbox_001.html b/ChibiOS_2.0.8/docs/html/test_mbox_001.html deleted file mode 100644 index 2d677a9..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mbox_001.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Queuing and timeouts - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Queuing and timeouts

      -
      -
      -

      Description

      -

      Messages are posted/fetched from a mailbox in carefully designed sequences in order to stimulate all the possible code paths inside the mailbox.
      - The test expects to find a consistent mailbox status after each operation.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_msg.html b/ChibiOS_2.0.8/docs/html/test_msg.html deleted file mode 100644 index a65af05..0000000 --- a/ChibiOS_2.0.8/docs/html/test_msg.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: Messages test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Messages test

      -
      -
      -

      File: testmsg.c

      -

      Description

      -

      This module implements the test sequence for the Synchronous Messages subsystem.

      -

      Objective

      -

      Objective of the test module is to cover 100% of the Synchronous Messages subsystem code.

      -

      Preconditions

      -

      The module requires the following kernel options:

      -
        -
      • CH_USE_MESSAGES
      • -
      -

      In case some of the required options are not enabled then some or all tests may be skipped.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_msg_001.html b/ChibiOS_2.0.8/docs/html/test_msg_001.html deleted file mode 100644 index b0f3553..0000000 --- a/ChibiOS_2.0.8/docs/html/test_msg_001.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Messages Server loop - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Messages Server loop

      -
      -
      -

      Description

      -

      A thread is spawned that sends four messages back to the tester thread.
      - The test expect to receive the messages in the correct sequence and to not find a fifth message waiting.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mtx.html b/ChibiOS_2.0.8/docs/html/test_mtx.html deleted file mode 100644 index 75304fc..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mtx.html +++ /dev/null @@ -1,69 +0,0 @@ - - -ChibiOS/RT: Mutexes test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Mutexes test

      -
      -
      -

      File: testmtx.c

      -

      Description

      -

      This module implements the test sequence for the Mutexes and Condition Variables subsystems.
      - Tests on those subsystems are particularly critical because the system-wide implications of the Priority Inheritance mechanism.

      -

      Objective

      -

      Objective of the test module is to cover 100% of the subsystems code.

      -

      Preconditions

      -

      The module requires the following kernel options:

      -
        -
      • CH_USE_MUTEXES
      • -
      • CH_USE_CONDVARS
      • -
      • CH_DBG_THREADS_PROFILING
      • -
      -

      In case some of the required options are not enabled then some or all tests may be skipped.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mtx_001.html b/ChibiOS_2.0.8/docs/html/test_mtx_001.html deleted file mode 100644 index 6e9ed6c..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mtx_001.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Priority enqueuing test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Priority enqueuing test

      -
      -
      -

      Description

      -

      Five threads, with increasing priority, are enqueued on a locked mutex then the mutex is unlocked.
      - The test expects the threads to perform their operations in increasing priority order regardless of the initial order.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mtx_002.html b/ChibiOS_2.0.8/docs/html/test_mtx_002.html deleted file mode 100644 index c227311..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mtx_002.html +++ /dev/null @@ -1,64 +0,0 @@ - - -ChibiOS/RT: Priority inheritance, simple case - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Priority inheritance, simple case

      -
      -
      -

      Description

      -

      Three threads are involved in the classic priority inversion scenario, a medium priority thread tries to starve an high priority thread by blocking a low priority thread into a mutex lock zone.
      - The test expects the threads to reach their goal in increasing priority order by rearranging their priorities in order to avoid the priority inversion trap.

      -

      Scenario

      -

      This weird looking diagram should explain what happens in the test case:

      -
       Time ----> 0     10    20    30    40    50    60    70    80    90    100
      -    0 ......AL++++++++++............2+++++++++++AU0---------------++++++G...
      -    1 ..................++++++++++++------------------++++++++++++G.........
      -    2  .............................AL..........++++++AUG...................
      -                                    ^           ^
      - Legend:
      -   0..2 - Priority levels
      -   +++  - Running
      -   ---  - Ready
      -   ...  - Waiting or Terminated
      -   xL   - Lock operation on mutex 'x'
      -   xUn  - Unlock operation on mutex 'x' with priority returning to level 'n'
      -   G    - Goal
      -   ^    - Priority transition (boost or return).
      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mtx_003.html b/ChibiOS_2.0.8/docs/html/test_mtx_003.html deleted file mode 100644 index 59ca17b..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mtx_003.html +++ /dev/null @@ -1,65 +0,0 @@ - - -ChibiOS/RT: Priority inheritance, complex case - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Priority inheritance, complex case

      -
      -
      -

      Description

      -

      Five threads are involved in the complex priority inversion scenario, please refer to the diagram below for the complete scenario.
      - The test expects the threads to perform their operations in increasing priority order by rearranging their priorities in order to avoid the priority inversion trap.

      -

      Scenario

      -

      This weird looking diagram should explain what happens in the test case:

      -
       Time ----> 0     10    20    30    40    50    60    70    80    90    100   110
      -    0 ......BL++++------------2+++++------4+++++BU0---------------------------G.....
      -    1 ............AL++++2+++++BL----------4-----++++++BU4+++AU1---------------G.....
      -    2 ..................AL----------------------------------------------++++++AUG...
      -    3 ..............................+++++++-----------------------++++++G...........
      -    4 ....................................AL................++++++AUG...............
      -                        ^     ^           ^     ^     ^     ^
      - Legend:
      -   0..4 - Priority levels
      -   +++  - Running
      -   ---  - Ready
      -   ...  - Waiting or Terminated
      -   xL   - Lock operation on mutex 'x'
      -   xUn  - Unlock operation on mutex 'x' with priority returning to level 'n'
      -   ^    - Priority transition (boost or return).
      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mtx_004.html b/ChibiOS_2.0.8/docs/html/test_mtx_004.html deleted file mode 100644 index ab6d9ec..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mtx_004.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Priority return verification - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Priority return verification

      -
      -
      -

      Description

      -

      Two threads are spawned that try to lock the mutexes locked by the tester thread with precise timing.
      - The test expects that the priority changes caused by the priority inheritance algorithm happen at the right moment and with the right values.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mtx_005.html b/ChibiOS_2.0.8/docs/html/test_mtx_005.html deleted file mode 100644 index 4885130..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mtx_005.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Mutex status - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Mutex status

      -
      -
      -

      Description

      -

      Various tests on the mutex structure status after performing some lock and unlock operations.
      - The test expects that the internal mutex status is consistent after each operation.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mtx_006.html b/ChibiOS_2.0.8/docs/html/test_mtx_006.html deleted file mode 100644 index eed2556..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mtx_006.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Condition Variable signal test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Condition Variable signal test

      -
      -
      -

      Description

      -

      Five threads take a mutex and then enter a conditional variable queue, the tester thread then proceeds to signal the conditional variable five times atomically.
      - The test expects the threads to reach their goal in increasing priority order regardless of the initial order.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mtx_007.html b/ChibiOS_2.0.8/docs/html/test_mtx_007.html deleted file mode 100644 index 983f663..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mtx_007.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Condition Variable broadcast test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Condition Variable broadcast test

      -
      -
      -

      Description

      -

      Five threads take a mutex and then enter a conditional variable queue, the tester thread then proceeds to broadcast the conditional variable.
      - The test expects the threads to reach their goal in increasing priority order regardless of the initial order.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_mtx_008.html b/ChibiOS_2.0.8/docs/html/test_mtx_008.html deleted file mode 100644 index 94c6d27..0000000 --- a/ChibiOS_2.0.8/docs/html/test_mtx_008.html +++ /dev/null @@ -1,47 +0,0 @@ - - -ChibiOS/RT: Condition Variable priority boost test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Condition Variable priority boost test

      -
      -
      -

      Description

      -

      This test case verifies the priority boost of a thread waiting on a conditional variable queue. It tests this very specific situation in order to complete the code coverage.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_pools.html b/ChibiOS_2.0.8/docs/html/test_pools.html deleted file mode 100644 index db81999..0000000 --- a/ChibiOS_2.0.8/docs/html/test_pools.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: Memory Pools test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Memory Pools test

      -
      -
      -

      File: testpools.c

      -

      Description

      -

      This module implements the test sequence for the Memory Pools subsystem.

      -

      Objective

      -

      Objective of the test module is to cover 100% of the Memory Pools code.

      -

      Preconditions

      -

      The module requires the following kernel options:

      -
        -
      • CH_USE_MEMPOOLS
      • -
      -

      In case some of the required options are not enabled then some or all tests may be skipped.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_pools_001.html b/ChibiOS_2.0.8/docs/html/test_pools_001.html deleted file mode 100644 index 41b8f75..0000000 --- a/ChibiOS_2.0.8/docs/html/test_pools_001.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Allocation and enqueuing test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Allocation and enqueuing test

      -
      -
      -

      Description

      -

      Five memory blocks are added to a memory pool then removed.
      - The test expects to find the pool queue in the proper status after each operation.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_queues.html b/ChibiOS_2.0.8/docs/html/test_queues.html deleted file mode 100644 index 2b3d5a5..0000000 --- a/ChibiOS_2.0.8/docs/html/test_queues.html +++ /dev/null @@ -1,61 +0,0 @@ - - -ChibiOS/RT: I/O Queues test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      I/O Queues test

      -
      -
      -

      File: testqueues.c

      -

      Description

      -

      This module implements the test sequence for the I/O Queues subsystem. The tests are performed by inserting and removing data from queues and by checking both the queues status and the correct sequence of the extracted data.

      -

      Objective

      -

      Objective of the test module is to cover 100% of the I/O Queues code.
      - Note that the I/O Queues subsystem depends on the Semaphores subsystem that has to met its testing objectives as well.

      -

      Preconditions

      -

      The module requires the following kernel options:

      -
        -
      • CH_USE_QUEUES (and dependent options)
      • -
      -

      In case some of the required options are not enabled then some or all tests may be skipped.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_queues_001.html b/ChibiOS_2.0.8/docs/html/test_queues_001.html deleted file mode 100644 index 611c56e..0000000 --- a/ChibiOS_2.0.8/docs/html/test_queues_001.html +++ /dev/null @@ -1,47 +0,0 @@ - - -ChibiOS/RT: Input Queues functionality and APIs - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Input Queues functionality and APIs

      -
      -
      -

      Description

      -

      This test case tests sysnchronos and asynchronous operations on an InputQueue object including timeouts. The queue state must remain consistent through the whole test.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_queues_002.html b/ChibiOS_2.0.8/docs/html/test_queues_002.html deleted file mode 100644 index 67bf137..0000000 --- a/ChibiOS_2.0.8/docs/html/test_queues_002.html +++ /dev/null @@ -1,47 +0,0 @@ - - -ChibiOS/RT: Output Queues functionality and APIs - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Output Queues functionality and APIs

      -
      -
      -

      Description

      -

      This test case tests sysnchronos and asynchronous operations on an OutputQueue object including timeouts. The queue state must remain consistent through the whole test.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_sem.html b/ChibiOS_2.0.8/docs/html/test_sem.html deleted file mode 100644 index a2ca401..0000000 --- a/ChibiOS_2.0.8/docs/html/test_sem.html +++ /dev/null @@ -1,61 +0,0 @@ - - -ChibiOS/RT: Semaphores test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Semaphores test

      -
      -
      -

      File: testsem.c

      -

      Description

      -

      This module implements the test sequence for the Semaphores subsystem.

      -

      Objective

      -

      Objective of the test module is to cover 100% of the Semaphores code.

      -

      Preconditions

      -

      The module requires the following kernel options:

      -
        -
      • CH_USE_SEMAPHORES
      • -
      -

      In case some of the required options are not enabled then some or all tests may be skipped.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_sem_001.html b/ChibiOS_2.0.8/docs/html/test_sem_001.html deleted file mode 100644 index eb39bfe..0000000 --- a/ChibiOS_2.0.8/docs/html/test_sem_001.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Enqueuing test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Enqueuing test

      -
      -
      -

      Description

      -

      Five threads with randomized priorities are enqueued to a semaphore then awakened one at time.
      - The test expects that the threads reach their goal in FIFO order or priority order depending on the CH_USE_SEMAPHORES_PRIORITY configuration setting.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_sem_002.html b/ChibiOS_2.0.8/docs/html/test_sem_002.html deleted file mode 100644 index f6f0e43..0000000 --- a/ChibiOS_2.0.8/docs/html/test_sem_002.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Timeout test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Timeout test

      -
      -
      -

      Description

      -

      The three possible semaphore waiting modes (do not wait, wait with timeout, wait without timeout) are explored.
      - The test expects that the semaphore wait function returns the correct value in each of the above scenario and that the semaphore structure status is correct after each operation.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_sem_003.html b/ChibiOS_2.0.8/docs/html/test_sem_003.html deleted file mode 100644 index 26878d8..0000000 --- a/ChibiOS_2.0.8/docs/html/test_sem_003.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Atomic signal-wait test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Atomic signal-wait test

      -
      -
      -

      Description

      -

      This test case explicitly address the chSemWaitSignal() function. A thread is created that performs a wait and a signal operations. The tester thread is awakened from an atomic wait/signal operation.
      - The test expects that the semaphore wait function returns the correct value in each of the above scenario and that the semaphore structure status is correct after each operation.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_threads.html b/ChibiOS_2.0.8/docs/html/test_threads.html deleted file mode 100644 index 1dcf5c3..0000000 --- a/ChibiOS_2.0.8/docs/html/test_threads.html +++ /dev/null @@ -1,59 +0,0 @@ - - -ChibiOS/RT: Threads and Scheduler test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Threads and Scheduler test

      -
      -
      -

      File: testthd.c

      -

      Description

      -

      This module implements the test sequence for the Scheduler, Threads and Time and Virtual Timers subsystems.
      - Note that the tests on those subsystems are formally required but most of their functionality is already demonstrated because the test suite itself depends on them, anyway double check is good.

      -

      Objective

      -

      Objective of the test module is to cover 100% of the subsystems code.

      -

      Preconditions

      -

      None.

      -

      Test Cases

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_threads_001.html b/ChibiOS_2.0.8/docs/html/test_threads_001.html deleted file mode 100644 index e7a1d57..0000000 --- a/ChibiOS_2.0.8/docs/html/test_threads_001.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Ready List functionality #1 - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Ready List functionality #1

      -
      -
      -

      Description

      -

      Five threads, with increasing priority, are enqueued in the ready list and atomically executed.
      - The test expects the threads to perform their operations in increasing priority order regardless of the initial order.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_threads_002.html b/ChibiOS_2.0.8/docs/html/test_threads_002.html deleted file mode 100644 index 34db5db..0000000 --- a/ChibiOS_2.0.8/docs/html/test_threads_002.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Ready List functionality #2 - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Ready List functionality #2

      -
      -
      -

      Description

      -

      Five threads, with pseudo-random priority, are enqueued in the ready list and atomically executed.
      - The test expects the threads to perform their operations in increasing priority order regardless of the initial order.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_threads_003.html b/ChibiOS_2.0.8/docs/html/test_threads_003.html deleted file mode 100644 index b133a71..0000000 --- a/ChibiOS_2.0.8/docs/html/test_threads_003.html +++ /dev/null @@ -1,48 +0,0 @@ - - -ChibiOS/RT: Threads priority change test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Threads priority change test

      -
      -
      -

      Description

      -

      A series of priority changes are performed on the current thread in order to verify that the priority change happens as expected.
      - If the CH_USE_MUTEXES option is enabled then the priority changes are also tested under priority inheritance boosted priority state.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/test_threads_004.html b/ChibiOS_2.0.8/docs/html/test_threads_004.html deleted file mode 100644 index 2f908c9..0000000 --- a/ChibiOS_2.0.8/docs/html/test_threads_004.html +++ /dev/null @@ -1,47 +0,0 @@ - - -ChibiOS/RT: Threads delays test - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Threads delays test

      -
      -
      -

      Description

      -

      Delay APIs and associated macros are tested, the invoking thread is verified to wake up at the exact expected time.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testbmk_8c.html b/ChibiOS_2.0.8/docs/html/testbmk_8c.html deleted file mode 100644 index d1ed160..0000000 --- a/ChibiOS_2.0.8/docs/html/testbmk_8c.html +++ /dev/null @@ -1,102 +0,0 @@ - - -ChibiOS/RT: testbmk.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testbmk.c File Reference

      -
      -
      - -

      Kernel Benchmarks source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcase *const patternbmk []
       Test sequence for benchmarks.
      -

      Detailed Description

      -

      Kernel Benchmarks source file.

      -

      Kernel Benchmarks

      - -

      Definition in file testbmk.c.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* const patternbmk[]
      -
      -
      -Initial value:
       {
      -
      -  &testbmk1,
      -  &testbmk2,
      -  &testbmk3,
      -  &testbmk4,
      -  &testbmk5,
      -  &testbmk6,
      -  &testbmk7,
      -  &testbmk8,
      -  &testbmk9,
      -  &testbmk10,
      -  &testbmk11,
      -
      -  &testbmk12,
      -
      -  &testbmk13,
      -
      -  NULL
      -}
      -
      -

      Test sequence for benchmarks.

      - -

      Definition at line 759 of file testbmk.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testbmk_8c_source.html b/ChibiOS_2.0.8/docs/html/testbmk_8c_source.html deleted file mode 100644 index 620bbf1..0000000 --- a/ChibiOS_2.0.8/docs/html/testbmk_8c_source.html +++ /dev/null @@ -1,822 +0,0 @@ - - -ChibiOS/RT: testbmk.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testbmk_8h.html b/ChibiOS_2.0.8/docs/html/testbmk_8h.html deleted file mode 100644 index 216caec..0000000 --- a/ChibiOS_2.0.8/docs/html/testbmk_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: testbmk.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testbmk.h File Reference

      -
      -
      - -

      Kernel Benchmarks header file. -More...

      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcasepatternbmk []
       Test sequence for benchmarks.
      -

      Detailed Description

      -

      Kernel Benchmarks header file.

      - -

      Definition in file testbmk.h.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* patternbmk[]
      -
      -
      - -

      Test sequence for benchmarks.

      - -

      Definition at line 759 of file testbmk.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testbmk_8h_source.html b/ChibiOS_2.0.8/docs/html/testbmk_8h_source.html deleted file mode 100644 index 5815ade..0000000 --- a/ChibiOS_2.0.8/docs/html/testbmk_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testbmk.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testdyn_8c.html b/ChibiOS_2.0.8/docs/html/testdyn_8c.html deleted file mode 100644 index f82d67d..0000000 --- a/ChibiOS_2.0.8/docs/html/testdyn_8c.html +++ /dev/null @@ -1,95 +0,0 @@ - - -ChibiOS/RT: testdyn.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testdyn.c File Reference

      -
      -
      - -

      Dynamic thread APIs test source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcase *const patterndyn []
       Test sequence for dynamic APIs.
      -

      Detailed Description

      -

      Dynamic thread APIs test source file.

      - -

      Definition in file testdyn.c.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* const patterndyn[]
      -
      -
      -Initial value:
       {
      -
      -
      -  &testdyn1,
      -
      -
      -  &testdyn2,
      -
      -
      -  &testdyn3,
      -
      -
      -  NULL
      -}
      -
      -

      Test sequence for dynamic APIs.

      - -

      Definition at line 274 of file testdyn.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testdyn_8c_source.html b/ChibiOS_2.0.8/docs/html/testdyn_8c_source.html deleted file mode 100644 index 5046c60..0000000 --- a/ChibiOS_2.0.8/docs/html/testdyn_8c_source.html +++ /dev/null @@ -1,331 +0,0 @@ - - -ChibiOS/RT: testdyn.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testdyn_8h.html b/ChibiOS_2.0.8/docs/html/testdyn_8h.html deleted file mode 100644 index 783c32f..0000000 --- a/ChibiOS_2.0.8/docs/html/testdyn_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: testdyn.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testdyn.h File Reference

      -
      -
      - -

      Dynamic thread APIs test header file. -More...

      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcasepatterndyn []
       Test sequence for dynamic APIs.
      -

      Detailed Description

      -

      Dynamic thread APIs test header file.

      - -

      Definition in file testdyn.h.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* patterndyn[]
      -
      -
      - -

      Test sequence for dynamic APIs.

      - -

      Definition at line 274 of file testdyn.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testdyn_8h_source.html b/ChibiOS_2.0.8/docs/html/testdyn_8h_source.html deleted file mode 100644 index 769d92f..0000000 --- a/ChibiOS_2.0.8/docs/html/testdyn_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testdyn.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testevt_8c.html b/ChibiOS_2.0.8/docs/html/testevt_8c.html deleted file mode 100644 index 4b2869f..0000000 --- a/ChibiOS_2.0.8/docs/html/testevt_8c.html +++ /dev/null @@ -1,91 +0,0 @@ - - -ChibiOS/RT: testevt.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testevt.c File Reference

      -
      -
      - -

      Events test source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcase *const patternevt []
       Test sequence for events.
      -

      Detailed Description

      -

      Events test source file.

      - -

      Definition in file testevt.c.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* const patternevt[]
      -
      -
      -Initial value:
       {
      -
      -  &testevt1,
      -  &testevt2,
      -
      -  &testevt3,
      -
      -
      -  NULL
      -}
      -
      -

      Test sequence for events.

      - -

      Definition at line 308 of file testevt.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testevt_8c_source.html b/ChibiOS_2.0.8/docs/html/testevt_8c_source.html deleted file mode 100644 index 1aca548..0000000 --- a/ChibiOS_2.0.8/docs/html/testevt_8c_source.html +++ /dev/null @@ -1,363 +0,0 @@ - - -ChibiOS/RT: testevt.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testevt_8h.html b/ChibiOS_2.0.8/docs/html/testevt_8h.html deleted file mode 100644 index fc9310e..0000000 --- a/ChibiOS_2.0.8/docs/html/testevt_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: testevt.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testevt.h File Reference

      -
      -
      - -

      Events test header file. -More...

      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcasepatternevt []
       Test sequence for events.
      -

      Detailed Description

      -

      Events test header file.

      - -

      Definition in file testevt.h.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* patternevt[]
      -
      -
      - -

      Test sequence for events.

      - -

      Definition at line 308 of file testevt.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testevt_8h_source.html b/ChibiOS_2.0.8/docs/html/testevt_8h_source.html deleted file mode 100644 index aa18860..0000000 --- a/ChibiOS_2.0.8/docs/html/testevt_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testevt.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testheap_8c.html b/ChibiOS_2.0.8/docs/html/testheap_8c.html deleted file mode 100644 index 375c3a4..0000000 --- a/ChibiOS_2.0.8/docs/html/testheap_8c.html +++ /dev/null @@ -1,87 +0,0 @@ - - -ChibiOS/RT: testheap.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testheap.c File Reference

      -
      -
      - -

      Heap test source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcase *const patternheap []
       Test sequence for heap.
      -

      Detailed Description

      -

      Heap test source file.

      - -

      Definition in file testheap.c.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* const patternheap[]
      -
      -
      -Initial value:
       {
      -
      -  &testheap1,
      -
      -  NULL
      -}
      -
      -

      Test sequence for heap.

      - -

      Definition at line 169 of file testheap.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testheap_8c_source.html b/ChibiOS_2.0.8/docs/html/testheap_8c_source.html deleted file mode 100644 index 5b0a898..0000000 --- a/ChibiOS_2.0.8/docs/html/testheap_8c_source.html +++ /dev/null @@ -1,218 +0,0 @@ - - -ChibiOS/RT: testheap.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testheap_8h.html b/ChibiOS_2.0.8/docs/html/testheap_8h.html deleted file mode 100644 index 0411688..0000000 --- a/ChibiOS_2.0.8/docs/html/testheap_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: testheap.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testheap.h File Reference

      -
      -
      - -

      Heap header file. -More...

      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcasepatternheap []
       Test sequence for heap.
      -

      Detailed Description

      -

      Heap header file.

      - -

      Definition in file testheap.h.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* patternheap[]
      -
      -
      - -

      Test sequence for heap.

      - -

      Definition at line 169 of file testheap.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testheap_8h_source.html b/ChibiOS_2.0.8/docs/html/testheap_8h_source.html deleted file mode 100644 index 419310d..0000000 --- a/ChibiOS_2.0.8/docs/html/testheap_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testheap.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmbox_8c.html b/ChibiOS_2.0.8/docs/html/testmbox_8c.html deleted file mode 100644 index f1d72d3..0000000 --- a/ChibiOS_2.0.8/docs/html/testmbox_8c.html +++ /dev/null @@ -1,87 +0,0 @@ - - -ChibiOS/RT: testmbox.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testmbox.c File Reference

      -
      -
      - -

      Mailboxes test source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcase *const patternmbox []
       Test sequence for mailboxes.
      -

      Detailed Description

      -

      Mailboxes test source file.

      - -

      Definition in file testmbox.c.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* const patternmbox[]
      -
      -
      -Initial value:
       {
      -
      -  &testmbox1,
      -
      -  NULL
      -}
      -
      -

      Test sequence for mailboxes.

      - -

      Definition at line 182 of file testmbox.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmbox_8c_source.html b/ChibiOS_2.0.8/docs/html/testmbox_8c_source.html deleted file mode 100644 index ffec6fe..0000000 --- a/ChibiOS_2.0.8/docs/html/testmbox_8c_source.html +++ /dev/null @@ -1,231 +0,0 @@ - - -ChibiOS/RT: testmbox.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmbox_8h.html b/ChibiOS_2.0.8/docs/html/testmbox_8h.html deleted file mode 100644 index 40f1a58..0000000 --- a/ChibiOS_2.0.8/docs/html/testmbox_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: testmbox.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testmbox.h File Reference

      -
      -
      - -

      Mailboxes header file. -More...

      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcasepatternmbox []
       Test sequence for mailboxes.
      -

      Detailed Description

      -

      Mailboxes header file.

      - -

      Definition in file testmbox.h.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* patternmbox[]
      -
      -
      - -

      Test sequence for mailboxes.

      - -

      Definition at line 182 of file testmbox.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmbox_8h_source.html b/ChibiOS_2.0.8/docs/html/testmbox_8h_source.html deleted file mode 100644 index d7a01a4..0000000 --- a/ChibiOS_2.0.8/docs/html/testmbox_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testmbox.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmsg_8c.html b/ChibiOS_2.0.8/docs/html/testmsg_8c.html deleted file mode 100644 index ced4b66..0000000 --- a/ChibiOS_2.0.8/docs/html/testmsg_8c.html +++ /dev/null @@ -1,87 +0,0 @@ - - -ChibiOS/RT: testmsg.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testmsg.c File Reference

      -
      -
      - -

      Messages test source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcase *const patternmsg []
       Test sequence for messages.
      -

      Detailed Description

      -

      Messages test source file.

      - -

      Definition in file testmsg.c.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* const patternmsg[]
      -
      -
      -Initial value:
       {
      -
      -  &testmsg1,
      -
      -  NULL
      -}
      -
      -

      Test sequence for messages.

      - -

      Definition at line 128 of file testmsg.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmsg_8c_source.html b/ChibiOS_2.0.8/docs/html/testmsg_8c_source.html deleted file mode 100644 index 598472b..0000000 --- a/ChibiOS_2.0.8/docs/html/testmsg_8c_source.html +++ /dev/null @@ -1,177 +0,0 @@ - - -ChibiOS/RT: testmsg.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmsg_8h.html b/ChibiOS_2.0.8/docs/html/testmsg_8h.html deleted file mode 100644 index 8b4c2b1..0000000 --- a/ChibiOS_2.0.8/docs/html/testmsg_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: testmsg.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testmsg.h File Reference

      -
      -
      - -

      Messages header file. -More...

      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcasepatternmsg []
       Test sequence for messages.
      -

      Detailed Description

      -

      Messages header file.

      - -

      Definition in file testmsg.h.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* patternmsg[]
      -
      -
      - -

      Test sequence for messages.

      - -

      Definition at line 128 of file testmsg.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmsg_8h_source.html b/ChibiOS_2.0.8/docs/html/testmsg_8h_source.html deleted file mode 100644 index 62d09dc..0000000 --- a/ChibiOS_2.0.8/docs/html/testmsg_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testmsg.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmtx_8c.html b/ChibiOS_2.0.8/docs/html/testmtx_8c.html deleted file mode 100644 index 0d767ab..0000000 --- a/ChibiOS_2.0.8/docs/html/testmtx_8c.html +++ /dev/null @@ -1,98 +0,0 @@ - - -ChibiOS/RT: testmtx.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testmtx.c File Reference

      -
      -
      - -

      Mutexes and CondVars test source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcase *const patternmtx []
       Test sequence for mutexes.
      -

      Detailed Description

      -

      Mutexes and CondVars test source file.

      - -

      Definition in file testmtx.c.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* const patternmtx[]
      -
      -
      -Initial value:
       {
      -
      -  &testmtx1,
      -
      -  &testmtx2,
      -  &testmtx3,
      -
      -  &testmtx4,
      -  &testmtx5,
      -
      -  &testmtx6,
      -  &testmtx7,
      -  &testmtx8,
      -
      -
      -  NULL
      -}
      -
      -

      Test sequence for mutexes.

      - -

      Definition at line 658 of file testmtx.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmtx_8c_source.html b/ChibiOS_2.0.8/docs/html/testmtx_8c_source.html deleted file mode 100644 index e16fc6e..0000000 --- a/ChibiOS_2.0.8/docs/html/testmtx_8c_source.html +++ /dev/null @@ -1,718 +0,0 @@ - - -ChibiOS/RT: testmtx.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmtx_8h.html b/ChibiOS_2.0.8/docs/html/testmtx_8h.html deleted file mode 100644 index 774290a..0000000 --- a/ChibiOS_2.0.8/docs/html/testmtx_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: testmtx.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testmtx.h File Reference

      -
      -
      - -

      Mutexes and CondVars test header file. -More...

      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcasepatternmtx []
       Test sequence for mutexes.
      -

      Detailed Description

      -

      Mutexes and CondVars test header file.

      - -

      Definition in file testmtx.h.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* patternmtx[]
      -
      -
      - -

      Test sequence for mutexes.

      - -

      Definition at line 658 of file testmtx.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testmtx_8h_source.html b/ChibiOS_2.0.8/docs/html/testmtx_8h_source.html deleted file mode 100644 index 1264d1c..0000000 --- a/ChibiOS_2.0.8/docs/html/testmtx_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testmtx.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testpools_8c.html b/ChibiOS_2.0.8/docs/html/testpools_8c.html deleted file mode 100644 index 560decd..0000000 --- a/ChibiOS_2.0.8/docs/html/testpools_8c.html +++ /dev/null @@ -1,57 +0,0 @@ - - -ChibiOS/RT: testpools.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      testpools.c File Reference

      -
      -
      - -

      Memory Pools test source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - -
      -

      Detailed Description

      -

      Memory Pools test source file.

      - -

      Definition in file testpools.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testpools_8c_source.html b/ChibiOS_2.0.8/docs/html/testpools_8c_source.html deleted file mode 100644 index d189f27..0000000 --- a/ChibiOS_2.0.8/docs/html/testpools_8c_source.html +++ /dev/null @@ -1,166 +0,0 @@ - - -ChibiOS/RT: testpools.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testpools_8h.html b/ChibiOS_2.0.8/docs/html/testpools_8h.html deleted file mode 100644 index f339884..0000000 --- a/ChibiOS_2.0.8/docs/html/testpools_8h.html +++ /dev/null @@ -1,55 +0,0 @@ - - -ChibiOS/RT: testpools.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      testpools.h File Reference

      -
      -
      - -

      Memory Pools test header file. -More...

      - -

      Go to the source code of this file.

      - -
      -

      Detailed Description

      -

      Memory Pools test header file.

      - -

      Definition in file testpools.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testpools_8h_source.html b/ChibiOS_2.0.8/docs/html/testpools_8h_source.html deleted file mode 100644 index c36da20..0000000 --- a/ChibiOS_2.0.8/docs/html/testpools_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testpools.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testqueues_8c.html b/ChibiOS_2.0.8/docs/html/testqueues_8c.html deleted file mode 100644 index 1091620..0000000 --- a/ChibiOS_2.0.8/docs/html/testqueues_8c.html +++ /dev/null @@ -1,88 +0,0 @@ - - -ChibiOS/RT: testqueues.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testqueues.c File Reference

      -
      -
      - -

      I/O Queues test source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcase *const patternqueues []
       Test sequence for queues.
      -

      Detailed Description

      -

      I/O Queues test source file.

      - -

      Definition in file testqueues.c.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* const patternqueues[]
      -
      -
      -Initial value:
       {
      -
      -  &testqueues1,
      -  &testqueues2,
      -
      -  NULL
      -}
      -
      -

      Test sequence for queues.

      - -

      Definition at line 219 of file testqueues.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testqueues_8c_source.html b/ChibiOS_2.0.8/docs/html/testqueues_8c_source.html deleted file mode 100644 index 4e6f9db..0000000 --- a/ChibiOS_2.0.8/docs/html/testqueues_8c_source.html +++ /dev/null @@ -1,269 +0,0 @@ - - -ChibiOS/RT: testqueues.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testqueues_8h.html b/ChibiOS_2.0.8/docs/html/testqueues_8h.html deleted file mode 100644 index cb687fa..0000000 --- a/ChibiOS_2.0.8/docs/html/testqueues_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: testqueues.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testqueues.h File Reference

      -
      -
      - -

      I/O Queues test header file. -More...

      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcasepatternqueues []
       Test sequence for queues.
      -

      Detailed Description

      -

      I/O Queues test header file.

      - -

      Definition in file testqueues.h.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* patternqueues[]
      -
      -
      - -

      Test sequence for queues.

      - -

      Definition at line 219 of file testqueues.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testqueues_8h_source.html b/ChibiOS_2.0.8/docs/html/testqueues_8h_source.html deleted file mode 100644 index 43d2a8a..0000000 --- a/ChibiOS_2.0.8/docs/html/testqueues_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testqueues.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testsem_8c.html b/ChibiOS_2.0.8/docs/html/testsem_8c.html deleted file mode 100644 index ef82d2d..0000000 --- a/ChibiOS_2.0.8/docs/html/testsem_8c.html +++ /dev/null @@ -1,91 +0,0 @@ - - -ChibiOS/RT: testsem.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testsem.c File Reference

      -
      -
      - -

      Semaphores test source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcase *const patternsem []
       Test sequence for semaphores.
      -

      Detailed Description

      -

      Semaphores test source file.

      - -

      Definition in file testsem.c.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* const patternsem[]
      -
      -
      -Initial value:
       {
      -
      -  &testsem1,
      -  &testsem2,
      -
      -  &testsem3,
      -
      -
      -  NULL
      -}
      -
      -

      Test sequence for semaphores.

      - -

      Definition at line 257 of file testsem.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testsem_8c_source.html b/ChibiOS_2.0.8/docs/html/testsem_8c_source.html deleted file mode 100644 index 3e3cb41..0000000 --- a/ChibiOS_2.0.8/docs/html/testsem_8c_source.html +++ /dev/null @@ -1,310 +0,0 @@ - - -ChibiOS/RT: testsem.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testsem_8h.html b/ChibiOS_2.0.8/docs/html/testsem_8h.html deleted file mode 100644 index efe88f4..0000000 --- a/ChibiOS_2.0.8/docs/html/testsem_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: testsem.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testsem.h File Reference

      -
      -
      - -

      Semaphores test header file. -More...

      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcasepatternsem []
       Test sequence for semaphores.
      -

      Detailed Description

      -

      Semaphores test header file.

      - -

      Definition in file testsem.h.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* patternsem[]
      -
      -
      - -

      Test sequence for semaphores.

      - -

      Definition at line 257 of file testsem.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testsem_8h_source.html b/ChibiOS_2.0.8/docs/html/testsem_8h_source.html deleted file mode 100644 index 22640d7..0000000 --- a/ChibiOS_2.0.8/docs/html/testsem_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testsem.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testsuite.html b/ChibiOS_2.0.8/docs/html/testsuite.html deleted file mode 100644 index 533c289..0000000 --- a/ChibiOS_2.0.8/docs/html/testsuite.html +++ /dev/null @@ -1,72 +0,0 @@ - - -ChibiOS/RT: Testing Strategy - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      Testing Strategy

      -
      -
      -

      Description

      -

      Most of the ChibiOS/RT demos link a set of software modules (test suite) in order to verify the proper working of the kernel, the port and the demo itself.

      -

      Strategy by Component

      -

      The OS components are tested in various modes depending on their importance:

      -
        -
      • Kernel. The kernel code is subject to rigorous testing. The test suite aims to test all the kernel code and reach a code coverage as close to 100% as possible. In addition to the code coverage, the kernel code is tested for functionality and benchmarked for speed and size before each stable release. In addition to the code coverage and functional testing a batch compilation test is performed before each release, the kernel is compiled by alternatively enabling and disabling all the various configuration options, the kernel code is expected to compile without errors nor warnings and execute the test suite without failures (a specific simulator is used for this execution test, it is done automatically by a script because the entire sequence can take hours).
        - All the tests results are included as reports in the OS distribution under ./docs/reports.
      • -
      • Ports. The port code is tested by executing the kernel test suite on the target hardware. A port is validated only if it passes all the tests. Speed and size benchmarks for all the supported architectures are performed, both size and speed regressions are monitored.
      • -
      • HAL. The HAL high level code and device drivers implementations are tested by use in the various demos and/or by users.
      • -
      • Various. The miscellaneous code is tested by use in the various demos and/or by users.
      • -
      • External Code. Not tested, external libraries or components are used as-is or with minor patching where required, problems are usually reported upstream.
      • -
      -

      Kernel Test Suite

      -

      The kernel test suite is divided in modules or test sequences. Each Test Module performs a series of tests on a specified kernel subsystem or subsystems and can report a failure/success status and/or a performance index as the test suite output.
      - The test suite is usually activated in the demo applications by pressing a button on the target board, see the readme into the various demos directories. The test suite output is usually sent through a serial port and can be examined by using a terminal emulator program.

      -

      Kernel Test Modules

      - -
      -
      -Generated on Sun Nov 28 2010 14:09:56 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testthd_8c.html b/ChibiOS_2.0.8/docs/html/testthd_8c.html deleted file mode 100644 index c4138b0..0000000 --- a/ChibiOS_2.0.8/docs/html/testthd_8c.html +++ /dev/null @@ -1,88 +0,0 @@ - - -ChibiOS/RT: testthd.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testthd.c File Reference

      -
      -
      - -

      Threads and Scheduler test source file. -More...

      -#include "ch.h"
      -#include "test.h"
      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcase *const patternthd []
       Test sequence for threads.
      -

      Detailed Description

      -

      Threads and Scheduler test source file.

      - -

      Definition in file testthd.c.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* const patternthd[]
      -
      -
      -Initial value:
       {
      -  &testthd1,
      -  &testthd2,
      -  &testthd3,
      -  &testthd4,
      -  NULL
      -}
      -
      -

      Test sequence for threads.

      - -

      Definition at line 251 of file testthd.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testthd_8c_source.html b/ChibiOS_2.0.8/docs/html/testthd_8c_source.html deleted file mode 100644 index 6235fd3..0000000 --- a/ChibiOS_2.0.8/docs/html/testthd_8c_source.html +++ /dev/null @@ -1,301 +0,0 @@ - - -ChibiOS/RT: testthd.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testthd_8h.html b/ChibiOS_2.0.8/docs/html/testthd_8h.html deleted file mode 100644 index cd00685..0000000 --- a/ChibiOS_2.0.8/docs/html/testthd_8h.html +++ /dev/null @@ -1,79 +0,0 @@ - - -ChibiOS/RT: testthd.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      testthd.h File Reference

      -
      -
      - -

      Threads and Scheduler test header file. -More...

      - -

      Go to the source code of this file.

      - - - - -

      -Variables

      struct testcasepatternthd []
       Test sequence for threads.
      -

      Detailed Description

      -

      Threads and Scheduler test header file.

      - -

      Definition in file testthd.h.

      -

      Variable Documentation

      - -
      -
      - - - - -
      struct testcase* patternthd[]
      -
      -
      - -

      Test sequence for threads.

      - -

      Definition at line 251 of file testthd.c.

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/testthd_8h_source.html b/ChibiOS_2.0.8/docs/html/testthd_8h_source.html deleted file mode 100644 index 2e5dffa..0000000 --- a/ChibiOS_2.0.8/docs/html/testthd_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -ChibiOS/RT: testthd.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/tool001.jpg b/ChibiOS_2.0.8/docs/html/tool001.jpg deleted file mode 100644 index f4a004fbab9e91fd9927fbc01654491c83a6d312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22548 zcmex=Bm<7<_#hv=|r|I2gd-|33zC=c3fa zlGGH1^30M9g^-L?1$R&1fd97{oEcb|Sy)(@Sy@lpt#g$Z)<%&5e`B*@4t$oT&VgDe9h0}~T7BO}-wV1kXEg_Vh!gOT(95rz~2 z21aHkW+o0cZf-ViR(4hfCPro!239sfA$DOAQ8C4^DHks(83u-gPUcWHGI4YbDw#O- zpo+O$VqtOPq|KMF7@Gz+Pg^K1q3Y!9lDufshmY!JNoB2S7AdJkr7eq>Zrt+l{}Bc$ zMkoN=4<;CynOIoa{vTm55M*RvWMXAzVPs}v2TL(9G7AX`iv$KSOxcS zlCqI;VdIC7|8FtyFf%eR2{H>Z*fZR&R{GYtCC75hZa3+J(^neKo|@H_do;7HKX{3o zcmf8U?t+94G^&9?3II`fs04w)XoC-z-jZhvCy>}@kIyuEiyMp>_T z!JWiS8@STuaZKcXWM`N1VM;c0#*Jequ3Sp`a{1NgI$4yDnS(6<@OSvdJ%{ z6Z89LR_%RYI5c|(y%D(T<{h#_z>pxVlKN^tzO|3zq>3Y?n6@h9FwJOZ31!kW- zps03TUA~fA$u+*wX2s6yOD9XdX`W*F+E4TM!&i^Xw$I62?9OyI{m=SevG=~)*6~GI zu8t3u6-m=wD%}5;Unlvh@!!jLy-wercT>@)O65+tmB}<2wR@>IavHZK?G%`>x^fW+ z{MZzA^P%pVx93G4aa`l(Q=e?~R6Fcx@13x(nM_8{4PE?MLMyL7SgFRaGa-BHV!qfy z>l>k0X8nETW?5EooO7K;(o)$dr;}gK8wNgDIZ3SM*5sA z)g`x&T?;?nv*c@<_0+RwZ@12Gm+(CO@mTVMf9p?wxw7lRyYn-TT}xNE^~U%^yTC4k zlP3!#b{w0qLh1Eora8{(do42ckO}*9}!JR$n`MFCQ#5v%YT1rf289-gZZ?XW>2@~T>j6H{p64Qt2h7pKijK6iaI-Y8}Fv*A69n^dC#eH zC8Qj`e<;U%tyooz%|BhS{pT-}Z43Lq` zI`-W1u{p-G@qu(jOh4=H`tG*%Y45ft`h-sF-xO%7rODmCG~8p=db1_|t=clbB9PUAS6_fl~pk0=hTp?rAsFVue-D2=kavg;Omzq?(p5* zHv7^}dH!E)ySJVwJH6%TAMMGnq~2YvF+G!gbIHO()`n+S?mFnZ@vUY}#VUXE-)wtg z?*Gu9@wPiN`$xF?m92MI{mI^txn%JnYrS0G%O7v^UD_225?+_Qjd#iVhau~Ou9q!f zj&16G5;e=qCVAuR;F2F@d$*MS(VYBh_Pgtbx87Zx{$ZK_s{GvnihsIen|)Q~3~!uW zxvRoD`j*y@k1q2=?w9T4yH?h*zvWYHaP6%o-ZHK$mjWNk_S~9%zT`#O#x16Q)WAlm z+*)@b{KGW=ga3N>pZ-*Ls=2p}*JMhCd%ERTb3gX1*$(lCBJI}hds{5K^6}R{s*_*c zes@J7d&ZSZ7az*@yqbN!#$aoL#x+ zyDxj@kB{{nPyQ_^3pcz~W*vXX(td^PR352krY2h|+>_0geZFffyDWL>ALYrv8gIrN z&#ZX9B&a^XT1(3GhSt2OSyA8+sC+l0?^5BRe*!1}I=oqzyrn1qlBE4A*{S?8f4XCi zf6_JCQgIw?mcH!byK}$YkadVx$k4upKA3Na;Lgm%Xm$$?0~pOU8b~q`s0)K zPG#YS$0fF3o>aek(_*FWC+iL_n>AhHP1==v)k_xlevJB4uKs(s_N?Tb(3d;y@7@et zxGpo;*Sn|8I4j@wlH;)%E97FvH?sBX%eb(!6UQlEA2`I|rX zKN`ij?%R(rTncgtD zd zQ4`l4TsCjI#G9E{&F8&cabKVNt9zl#4Ac=DN*g)pg%?HyZL;9eI7!;8CR1 z_5)#kPd-1>u3|nhjj^Yk<(R&CoBPA8c!r`YuG?n#&pn*pt#)V|JIj)7+wSJhIC@#~ zpxcpIXGAP_ZaRJN^g+=N!H+JjHokuOvi+L3{40Z|xVxOGH(Io9k6X3R{+Tx4QVpgS z*`M_KxpnF@KRRoAT!Z;E{z zemXhaTKAmjIp$m2gOcp@O{zRyHW`Mxo(v4E{FAXV>i6>1&mYtXuqFlRbO>GrY9-f4V+0ZHnu;dCy<%tmr?uZ29Js zFWA+6Xt!+SH$UdC!G)PuKgKt=a7I zY<Q~#&&zC=3Gk@~v z>BoP2tLB@mv5viWwKUQ*d#CgK15f67#z;OaFZhwVcJZavOOBhI30L*GY_;#{t4fGB z&YXM`IB$O2#(nEmPQNJrxAjDASMlW!m&~s|{eAv)+>-O3uAlXs7xUHj^p#Kl?75dM z-+cQ1qqVle|9-i})f>ds%m1@)f4F|-n}{7s#g8>kKlZN>xBvb170;!a%cp9-i(5Xu z{%5fNa(#Jd(ef8d z>Vv*UJTC9}qc&~Yd86eU%O1>cGu+i#{(4fi`13FO%md^8Rwe5n_1Q0Kd;Ch#N49Cx z&Kob^*j4VMTq^qhy2&>qzn3+6i}wEdvi`;L7t442>Wfpjbm``^E#Hj&{13gj>stNw zq;0S8_gW~>Hd4CE167pR>@bnR>sA!ve^N#I2`6E(%rGDMcsx*Gq-~!#-&D6(+4t7FJpHk9`lIDLsvy=qZ~12F?|*2< z-GJR!zuNXq{uL;_O1x?>?^GkO5=E0O+bTcW_I-wk?_0j{QN8EmQm6Of3pOna`OXh@ z&cAubSN>J+y~@2eX7Y{S1usqV*2KQrziC;h>A%I(J50803-EkXzoTTDd6?eUBHxDd zFLgi)_I+9wavkbzXSDxg^bxPF?vzzIe)Y>2S2ev|=eaTS z<;OSq0kK<4QhipggX*7hFw%ftyJGqhyw%EPUOkW>V4I{ZKv9ab#gO%U!C5z_Rh+w zAbDP0-Kk1BlODdDac{-$>{mIn9=@!&w`O)}ry@v7=hP0HC;zcjgO)7$kcH@*BfrTf*jwOS$9Kz>uzom!Q1tbWPj zx>eUzZq7Y?DR6&i*14soTYpwGdwQp)%{HAkU*g!`(Df@fS2xupOMeYpvnx0nWb2e| zVJA1w{5PTZ*Xo$b>BWB)rC(@md>I}cT`!QSnX_(k`sP3X%rAs~HLJHjzqpn)OjRpe zJ0I+tR|%5;s-<6OJ)0r+VE*fk`|rJ3`B!tz+Wj3SQ?@xwX7>00dg8ukS-8qUbC&-M z(Y;@$r~1A0P0jt|xMb-jt{HmubKQPVyMdqOm%rtEHr?ls|7ZR4y=!Yf<=?l~-!$dc z_4{gnKX3Z28DUy|p6~aW{j2|Wmp;2Ao7LQ~CW0yV)#=o|pV|eF=kZx?^H6(VEEfIF zGx7St7cY|dnw0&y_PMN`xhU(r)|Y9r-)Gi`{}y}ACB|`Z!$!s=i3+!aQeXUbe7Y00 z-N-29j;ph2DSOx=C!Omy*MpwV%Z_!wu%Ilq|J&{^gKIp;4uzX5#Tqi1mU-3$9i5?Q zsd?g+;UC4Bdqu-02wa)c6KZ2~kxTMT;n5!_HvD5hP$s;;cZb22*Si}N^6nnGQ?l;; z=9yFeGi2Z8;x}S*o%u)eU2P&i^Mex+9UEnAloNWZ)MG01bZ$p-YCWF$+O(8CZqXHw z)${F^p0|0uDDM0Qk<&TSA!~%&mN;x*-OZ)FZ5!{3Q(0Zr8v;+5>Ur%{xB9#`(D%)2 zvA52mk9V^%AC2gqe4XQmm+!F`Zzm}1dwf}Xr-)C_8M#a&w$BQ=?8?fnr&So=Z9h7* z_*-)Ha`T?Jnz)-!D)%VeI+N0?xlc-CtyvqNmV04f%rm1x(;s?IC#jySIPk;lGarlg zKEcD^C8k~5ZV)jwH}%@1?Gu)@9cc|pM|tg;;|2j3+xg*7s^CMMocPPn+7l;pnc=C;2nlf)5MMcF8#BWp*Po zw$kD0B=>yPi?ik}4ODfMxgL>i+xug`VA3A@E@mO=bEh{Y&Airj&O4`NQs!C~jen1C zgm zbeY`YZ8GK@4-!wyZaOb`T=a1gOF-XEsYObYI+WDbv;^Diaq9e_%0BaWPPEJ6yi?JC zmcJ9+R&VxNTHNA|+oH8+WcWW>ui&_s%YAO$Tl1)kf`W%*Rl0+6IBRdEK9_kI!`fLm z_uOsWGh8$Jo~r4tQ>jeXe3`*_Zc)@>AkjQYvwiW z<+jT6;%p|LbbQu3<*jh`?4Vr_f2+upa`WxAX0YTHAxU%*lmPJizx071u zB|em!AQ~9>{)U>;p55Edq&G$EF>HT(yf0teso;il-M54URnAEUVMiPSVoL)W zXs)4L%AE|zcVj+>&DPW5u+zOg$Kz%JFL)uqF!l-8@XNQD`Ol#L@ABO`D}F1sD`u_9+wUnqmVR=gqAPdO$C3^E#Z)ZIq?>s* zJU(m5`Rt%9vxtC+_{k$-#}B)xJNrF5zojR2}_GecIZ}iJh8a4J-iy+YHUl7VJHBvh#7&n`zOew*{k94^A!X&CQh86VPf) zb6zs%!&Kft@411NpPw%~Ql`D0m`u--^_M>}7f-dWSy_I!?Ife#9{`DwTm%+C=F6m)^p?q1JZju46Up|6;i2{{3%zBF z(oJ2Q#Py=p&Kt;1dU5sA=_Z4#o2o5W2Q9ocBlW^rk#NtBMawc)bx-=dXjP5r{fvVW zW*6CNxcvk-L@$box^pf`cjvU(Q|`IUk`WYfmg$+SbpEdX)C`5)Ry%S9*RHhBJfd9r zq^>andO2=viMZ(#`iYX?~VSg|E7EG z($MHZFa7EUstL%!z8p&9wPVc9l%9`s~0yOGry$ z)v9G#GZ$$s^LS*z-F^SC^~!G36&sgmH_H0XDcFdK~Yvs@#oo0z-O*R>_FB zd=#;rbmUNavtf+qnuA+EPKtTI=5(ip(ymh{J7vV8o0vX({LZ-5?JF>eb48!WEZ+4G zZZ|yqef8VLrk%!#o$azg&2!v-=ygam$b8!-qww5v!M%gQnM#dPTO5c_|U15FQ>@; z+T_zU*{-+w`yv(M))rZ~aJQsAbuD+~`?#Eyhg-=dizs!P0X_>JGZF?!WO8{!fp zc3f`ykfQ!><0Fr42Xo|=3y+yfc_w9bsri|y+)TM7RiTmV@oua=*cFsO< zW9ICI*4jeeRo5<_&q~<$t|QZ*SN$m@u5g%;Ff9w$B-kFH)rpz2;xpK%FL}Wee`*>N`>*J<{FJhgadS&^1IzMmq z+jWLEst;f8sCs<##w4HVYc9y%;oiAbb*cJvVnO}4#H!o8E_OtFT-NGgXYxauAb5u%uDw7v5H2er}@mzaVVCPo#=^rnfoY%R0 zGOluR6R!ytuuR_7MIp44kk^>lsShqR;@nMu{!qV z@@Xqyr}6FGzQHHEEh(`(bye&sk#D*Miw<{le&2fZu36B;W{p1zy`mhqRaj-YC)YfX z{gKS*u{mDn`iUKNBHEjGZ2PG8*|IT3eqw&bI+a6K57sSr^msVQY?YUm!m7^QADnJo znHP1*wm#9Yx+2YlbJG)*#HohQwr5;X>y35uJe$@MeJJ&!OO9`#v$3PAYt-e89nr#f z&6elxbJ^@u_@Z39$Z^Mkyj#3m^TlszIx0TjG^1_Bri+eEcPFRaSfw?2#qK%jjnD5J zmg(+wY~`}O`bXvLZvME~K=(wS&>f1C^SHFvJn7%G%4yDvJvUcr1^DTk&)9alcM|v8 zJ$Z5JA{Iw(Eb6c@yjO30HZY*XAoJ|3XNzX0tXk1s)$vbzN8$zcNhuPB%dEUKcZc0K zKOiV>b7f-kyo?nc9nO>1Wlz^aVe(Sg(B-wtd4hg;_n8a@TBFq$JJ>&GO9Q z{7}&m$t3E@wR6$Lmz-u74VSKFx_Nt7?BcVP?P6XFjxs9w9`O`9Kcgdfj?#NVb`O3N%mdqBq|u6Oy}as?3>kXmf$rn|G0t0OKDBMrrIkDiY~?o+LbyPUlBLUe7b(;vdU2L zj%}&kYDbP3D*HO7{xp8O(Y@@_dxh9}r7zcio|Sob&NObPAFf9$xw<@6d~EVJ-|;Qp z{z#+jjrP=E{&F(i|9%;K+!JZ|jK{ks?#Gi;F&Kd9=E>!CMe`-&pN(8K%; zR+Ana>@~a`;(Ke`@BRiQy~>q}Zp9`i1qIzzW3KD&%M8_d!)kZ4|L)$%TpPWUOn39t z-sX9TdiS&~@h`m`Y;+~4VSesI^Qn%5SLdxqm}pB`(e&zq<0iC&uIc2V(; zVl>y+vVz>{M&@ce_zN(j^;lszL&#!cIf#i2T8jb=R0a`owOpha`~U7wW}VdT(jOLwBh)6 z!=#<&T%~spo2j2_x;^d2AITb%B#ehSTlTiA#;)CP?ONX1oG{Iu zGQFRwOV``7Iqp>Sxw<9zbj2p7Th_c*+iq6G{bvvs5bkBEmYyTBg7tG7CeOYAiYAC1N1XaL{A+tlz0?IgM0892K2b z^(Oxg-DJ-DGB+yUNU~A#WcZ=nZNZ(ha-YvEnD107dREVMlGeoUr*=05p5@$XKe=pe z`(l?P;_ga5(WYIV2PYTbcNODG*u}FZr}IhS=6e>(D=*}3@#poG4mADs?^Mom!56); z>kV(tmw0sV=yu8f3_4pLueW)yZ^@;1UoEu)wT|Cem4A{okaY`B_q;Q2&7=Rk{(9|Y z(d^>Ng=r#-IL_|O%TZ}rc64d(!h0Mxm)$h}eHC=p7u?Y%Ej#CNww}$#-KCpmO*l3s zFvWa->f6gJl&Z>mq>SHYdf!Q7xtRB}dGDS4U_;qwf9+~AK6>76I4XPFXYvsyP1$La?|Kx5hKg2R zKKf|ErQ2m&Th|FZIGK=^Zf3gj+wG9-%J0=@O&C_Rzq|ENu=k>Wfsv%j)jc9{%guHt z^yei#)jHoH(QLU*C2F3;fuAvpt(B}fe(P>|xTC3C%P^zB@v6HZ>n0UN-#NUq5-YTG z!jw{vZdXs=`Zo7R)!)Oc4?b_YHskgNpDhIzJN38pCLX@&J9XLvqp#OKtC_BDHcwBy zoXU1vw$tzlPuZ1dCxf6)nb6p9e(#!NT`pb{X1+@{%YE&+c|_B&Ve<(|{f#?wPMu}c zEliR02%9poxa6LoV>rj@xE6(+6ULFZg8SF5P)e}z)$_e)(z)SAzuK*;M_UhGjCU7G zd+9LEJHyJ?vq<%{&eXEv0vYx^bL}nKbI;u@pKIO5dq~rCU(agUj%PO%w>kJqxMh0C z2>W`p%@i80%=ciy_Jy)$pu9p$aOs^_L^Jk*lfwsC5UuVIZU+kq() zJWB;FyreB>#~cz|KO^r>P^n?ZW7mm!Qx7G#eMp(sX7}7&DCm{0=8R2?tTwB<2nW8{ znOk-=_t4p->egk?xh`8ib2_gT(&1xX>h5qyIA_iTr3>$72mf9e8CN3WYI-sDKf{A% zr{x=uY>8bj)@@U1_R}wFv9#Ke_QX8FCgaM@l|~X94+hAHgyh?oxGcRdpZ3OetIM{d zN5#KIY~6A5#*`qXsdF5cOFE=_w%+5~^m5zozn@;7EWS4Dg~3L>3vQ1$iG6J2Q(sc> z@}h$2jxgT`>gnc!S28-LHkE|*GF<7Lswi~kcFburHLHHk8{2k%JNUb;M~jni~W>VFWDqq_v2Hsj0KI;6T~W9i6Wi-dUIHI@!whSn9^D+09yzzll8+Btu9+~-p;N&AkHx1iMiTIw(o3*oYmB9Ri~#K%gTsFl-$i%o^a~jT(-L* zs*X7w9`5PPDP^-uv{Sd;?I>i4PBG72zn_E4(A@F`r%XiYCAH8asuCNIOx%=H(BmyL^j=ty*&ggKxV0PNVC%C50li^H5TpMEoSmkT%zo_ z=sI4p=-+ogKk(rAG_jylj&p~@>_;bp6)wqMHe9+&Us`+OGjXxFhmrA@m>=3}H@!Pi zqgUW3aV=}7zTuPZNm)I+x78S26U-O0V^fN! zVx&sQ#c7`ptiAdd2pyL~8S_QCk~dP$x_krR*aUXiH5xomFgeg+9Qezhfbk~=O6EuQ!KK)yrC zqu2$#$5V74^T_ynJiNTfA-iDB>;r!1@|0Ix6x3#Uu~Le0rLdNh>db9Br={qW$_Zaw zTl{uM#2cg!ptbv_<8y^ z-`cOt5zTEd5u19|h4n+gbgwfH61i<^=N>9 zvB{TaKeGMo&b#yagj38VPdq%REIoTk&Bf~uJ*J%LyWBZSmSxOp4%>QmX4L$t%&oC{ zMY$L9&fSaLwo7p8JgK64Q~I;-yl-_qK2?zQpsS#xii+~}%||7SXbR}i8k%>@axUK18$4ttE@RXrEv2-sddwQw_Ox= zVlrF8B`Xn~74~}Vva_ZMG50$)cUK4Jtv#MOkan0Lz zo$R&G!d(Tof0U`L_{6%C;qYRa&?hE*>Fv!-ok~hdEA`@ZnzCa8!e>8R7kSx=RdcTK zf}oi+VDMv`)`{USihe&WI@#;!vG@6HAGyGMBUt52N~zGPe6 zp6gYMH>-N4K4eSTb7Qry-b7QE^JO-FPXA}HUp#+xkNVFq>!V_~>UWf81)e&ieJNW% zE_<(ESYq7d$g0n=ueu9c{xjH4e(k+&PNMz!lwX(LE=$Y`rn^FGn;j+dV`8_Q(Vem! z$BynbdL$|`Q^V>?^a>Udpl4$H+|Yt z8(6_|At z^maK+eI>5q5@OvPsCrz*>c^Hp7cFwu)r)VNo?8Pe=8U=HtgwuE#O&=Z`hKD=asAES zNC%({BgIj&(a3zZ5QOQf%m3R5Dlnw!le_KFcPq zNm_i>7SDOCjd(GBS6*kVg zvUu-=u6u>ILxoS=y`a_L)wM!v#Q{$(+k&Gx?t4yc*_gWj&XOZyXW!{>pVP=<7%KDS z`EpzBX>~TM^SK`K<;=Xe*mh4D^Gi98mmzm|tZiN~=jHhaR@}4F=KQR<7-*R@)Bdfw z%=-Tf+}Zyb+Favi91BWk>!0dhVl4I7=|4lNWypJH!}aF>85HX`E&pbdBVKI~woqXTRukb?*KxhclFJA6X-4^_!tt zQzGQv504H$jnriqpSc_rxA^`>zi7+Nwb$74KBw4hJbSuej!+iT~D$%s*x>-TR+`Ge+#b+4bao z1uJyjD{u5qX}{VyRmx*dc`Wa_XEqzp@``#M_z-HOcrEr@Z|S58x0mf7jww{#EZN;* zIO&kn9+x7P;|(|O*>&A`c3DsFdr4)=%(NvY8+Jvd9Q9lOAkFkw>%UV)E8n#x=dX}| zv*z}-E6+|GoyJj7cDHC&yXCUyx1xGwR3>Vh7nDvdy?$}4+WqazszL(IwH7^I@rWxg z`K{NTzc)`5=3cklbSKZc@U5?VhRT$!WfgX(cI7YD@?E<3&*wn?tWb8@drV4)o}_~k zkaR6L0R??`Hrx)1%S$)6oc6u;m+f%o);rH*<#XoF7U46_i;m`07d=!eQ&HZ;Z}LKD z<6f7r&psD!2hR;U^i=uObXXLvtOiAq_;0OuOLg>uY+zhXxQcbJMm5ZV1-<**biGEw!rSx9?8psYSCZ+~#j{o?eo1Bkj_k;@lP4DlJXH=kii57Rw5k z+?(W^6}ezbY4X!>CKlF@o|CU$-tQ}5biU=}>1QwRuW&sr=h$?+Z*S^eZNrBjem83C zZrh-wY0>n1?T(~MflV)8h?obmD>JG(#;v^Vd3eKO?+Ks0&Z$&4zhhWj_3u&Xu@izK ze=pCTes)QGiH=pwEpCN*8I8}4s&*CE@Ann3dFH>u@2|tsT&a^%y00D-rs}Rbukgse z@ZK@8uz(%9IyFB)nYp>Ungh#XYXsdYib$Lv9vb&|i z!FnT$Yv~bLuU*q;1cny5JP&bsb~e;_mFkxJl{e}?v+&MDt63~i0o8k@fJpPwt26C8G>&CuXK12==>)wfNX`ka@Z zQ(5t;Nnk-&f1cdIPYOxvg8g=zYE>W9RP7cNoz`(zBBATX>Xrpf0**#OIwwvBx*ADM z51O%z>yh1=nC%a(<7BtqS?et(&9kuQcjP{1)oou2cHG{6+v41`6qiNW6ZIAbDjC^N zv*E4Ids^IV^nTUhV;5AnZIZn2KO->N`NFGxeF}Zcla-`|y<9r7x@KJrIV_Bil?jGpTQ~nR@N}J6cT6r!VB)r9 zwM|Z{5pP#bdeV7rmF23>>h=dZW>!qpI`UBEnC{WZEUJsniAC&~FHjhhp16kN_BBU^ z&5{=l`q+56+b(i+yYE%!XcQIM9IARDY45!I>neWE-a7B^k!e?V9N%U4B$avEq&A)t z`4$|X{mdV3D{xlz*|O!)B2K;3nTO~96x_AB_Ey33e=d1z?w9R4Q=Dyfb90WRknA(% zKW4?|r_06f9Q{7g!ejELdzD8690Se$vR_4+bY+P!viPj#d${?fKZD@?WwGmo^1_ZU zyYtTL!Y;#vQx9{Ec#mgpJAGTA-PBRV{mhh3X}0Un`Rbpzy*m3n6J}|e*zQMfF5Npi zzq9K&X=yW`NNrd#=*n^UI>P23lseKIuQj`Nvh))Q$NcV-{` z(WuwXnQ&&#+QZ>$W?CN&mRa{Q`AmK%kaxs5)c27^=hSSA;{Oav=3)7}{bc?#oante z``u-OExdD#Gq)X!W|><);YiPYm6+7-+{y1IavPm>oOX1HafiR@nOjN|71wXm+8KGx zci!QxvQszgk6Yrf;iUMQ4{;H{S2!5X@6qYxc6!)k_G?+5 z3Phg_3=G*Fb<=m6&64?C@2lENL~@V4)19sI!oyu{$CDQ3oLRx8c|sQ^Iywp-xuCct zRL1f@!$j%T=69FFf^tUGd)t|}=2{yEy_>FCpc@?YY{GnwBe%cv{_bCM$oAY9+3*;p zkc`{;`mBtM9$e*f!}nk@V#DTTrEwpiDPRsv!Lr1xL+55*t%k)GEQ!o)UCnKk9{L{U z1eko9*czReqZWX2(EtX~=56yk-$)ecl{#%_`@8=$ zaF-M%AG>L`d!mp}x3hxww2Ym_YIP=`t~CqXTpGtaMaI2qo6#w;X$d=SC#_o5wPa`0 zy6j2C>622=bk16JG9vdCuW{P8n;X>+%&yt%x&2g8@mUw81SjRof=^11bwoLbI!^ec zWZ|Z{{?4jJT4_ak?tX^(QR&}9p2YOcNxHY?{JWL%T&IrgaN_+I(>`ymopSNQCDM}x zukICotTd}zFPllx<=(DYv%*f6u6lKrHF#MW)8Wk)hij$pU%ox#dBd$2m*35lXP>#; z)P9fr=N}<`CHJP5e!^l$$4`64=sfez>D^Ng)tqiV+g+F`(c_=heZHoj$cg8J6#SBJ~D@@)qvx2T+ z^GnAa_X-!cf!xzHMF zp0V;==cACg(&sB{RoW+f+xq?F{+c)YP6cPj*UbKY?)00b8E4-_Pv7VKnYZptw$!G) zxS#xIOn)1$$vPF~=oQpO-jWS6bYX43L?YTR$zi^y?<@Xn+n;9I8|m$#=@sY|G=+;U zNX{9{V9aXujfk*132QcOy{zuky1dP&UplO+{9H%+w8$UVADp$Dbt=kPY3lmNr}dY< z{hMN)o#f=?rP9@+J!#R8OI<&`>ZZI|^ts~a=1&(i{q-Mx{HIla{?A_#uHe%@c3%G& z{BH|a@PqRYmNHHGVeD7(=~APYzIosLT&5|@|7wUV|MPdte}*5Q{)m9WB3SiP@Wazz z>gKC5P5D%3SMsN1LC{RCACv7*`v1D1>Hq#m<;tHKB1<(WL^kbM79)rGC*9fmNq$E5 zx8%@&7pE@!$R{)5og9zb#MwJNxjjwyJnS=Pz0SBqR`r~V^7JO}S&N>mo)p>$8^lU9 z=i|D!AWp^PI z&dzytI{#o<7?+dyKywX&##UZA5vD%pv;m0^9D!d3^_B&w5nQd;G2C{c| zmESNtv86NZ_U4&c)%xkqOz&bjtV%;T2UcH*U2ek#eyV{7Bx$aNs4M-ol{@E zYEla53Gc~^s297d)RQ`0bcfidjM$(o6Q|OXyRSd7x}D~0y2yfSR#(Tgo-c}m>OQ_p z_NogRW_7mToh!+wE%YpUhtD+E9TEp?U9ZB(ucMSJ2Hv!KV0$4Gc3iWrmf8F z5{K5TRh#Zr&d9jbW%+F9le-(wUbK+XFZSkGK>bmG#&qa-!X9 zUFo-%t#77lFPHM}de7$|AbxAoYc~!>1y)ywi7pdT_sv}9)m8a?M%QAAFg2m0ymvRe z*?sivYaO$PJ05vHxXx6etiU9w{OYx@upXDztDIJmqBEO9Lp*j%2Tt3VX0FU*Emf1Q zJn_9-a=^{hCzY<>@0Mv;Tu$CmD)L?H#!9xdj%5qYw2IX0LL2-q2(xHO)yw^TDFj)!7UWpG|XQp8m1S?RC|!B+1{8+`i9ZuiSTisrfm* zDIq>5LxW9xW*kb?iSe!9&k`f8&fmK#q;zBkvu2>UT~Fqz68keRDrbStG})k3?S ziLY&byHp2H6z$kpQV`Pd@R-IeSBG+!OP%HuG})V0J`n19*0nO$KQYJdi&^6SoXj6@ zy(b$=m3kbEozSm*%E^18;*$2wq920ejnq7+9OF@4cfevpUhN)_ z@LT3MMzz0|v+oNj?r2_FbT#>g!QV~C_eCgc9*@7&XRnuiX`Z6Ym!@4G1z-4_bTPiv zm9nB^$<9}|Z~hZyKl`LrH#B)lS;IOb&mC)5H$37gyL#5}%Vb}T)gD}2H!?3T)q2b( z)P3~G_CJB$26tRGdv7%mCpsQX8Oh$tE!8Z^DJ8w8X_Pl>gcnYaqawv0X26$jINt;8T-yX=4dLq z)$EQ-->q3awQ84Lte1$g=9IiVX_U++)RufFy(V3jM_YW$?)+MXygoml)9R{`;(>Nl(9r1GjSD$PB6_IBfW|0MQPJmX*B&~U zGe5IGXNpnpie2S=OOCgBXDKaco5XVQim9k#kki?KlcJ%bfoTRSjHLr-Yl*y`6JvH? z{Fd%%yEp647PjAZs0;RM))nSh=CR>U;5}`v6$@H=*HslQO|m|FS?uAWPQe-5l#UoH zOg?Gz{S$A;=7yuk0=KZ_#-wzFS9tA`j#XMc;r+ve97DeAh1-l7ul5#q1Uy^3S+3-M z%Gu|<94D?^net@MuFdBUfBdW#d$2`Eu|DmG;8UJ$@3now`@9M8%!?+I@OBa?V|oHLuPlFpmWzxJe~Ps8lOwne$C^BX3u z?E2xSHr2(qI!3Wa<-Y3eCf}tyCaw=Vv@0qmFKSo1MCkmd2OR>J8%?<0#PX`Gd#Po!_Ltq6$ztjIPV4Qt$Z7Vtr*U!Kj1}e&rL#pd9!sxqZdS0a$`fjb#+IB!vW5fL>&4pV8KQPZ$5b^BM(pAs+lsi#1_PrU~tW7Pu zr?|;>n#N6f=;W!A;zg22A;(m~tsj}PPIL+-d=oqT-Z@SB+p+n5S9Tf;E)VGuy~**(W{Jv9 zAt{e)!+2KH&q^sXliD~AFBZJUIlH;f;=#^CcXxRfC1@;EQ1DbYKhV)1Pl6 zOFF!knz;OtZ?9k~B$vs`2 zJ3|z0ZmXUN6pmti#n5r9Y^q(&IyE2D9s71GPFrm7^JKro_g>FJjyZM4dCQ!IoGNrC zr7f7X^SsNQH`|uW?AY-}Y>xK~1>cOz!9jwo&c>`~LZ*m&ibYQ7=vuXaOQq=X=F>s9 zpQ)~V>2p^luf%_T!ED`Q~pUGW!GWCr2Fy$F_EnKa)V)dy5>!$j~acW53QoT6OwnXR5>FqaWPd9t4 zS}uH;LSc+8MC{Ko`iF@`0f+Bm-Sf7>a_dZ z!t0Dj*-Llbl0KIy?s?S3=uD?a$M%@M!F z*E374?31E`tU`}DTee?Wsy!9FR}HdbjU2L)AKq6mgLNOm*33H!Yx8bgt@iZ&gg=Ml zH%lE`vvi5bQjMjWUaZtXQIZzhuAM!Vx<~O5XaAvss7V`igqLo+IXU4G(~i?BQd=xo zr&TUnvfzHu;y-I!U)ZGoow%!>-!JUY7dhj9C+^y}uWngpFabkS&FJ5WJO3HlmkA|7 zC4Ex=PTcvQ0a+_T64TgaLdl%0S{BDlH}0(6ep4>*D_iZ!7?0c-o#MpBuWo40n^d__ z^hB`f^G}sQOMP8SuWetvTj0v#nY$Fv%}jqB@@c7SNzkSW;ro|dU+aEfd0^hZN&1ob zdmVedPDc2v_dHgAI_ZAZ9M1PImA+2Hir{LR3HS zulE#Rv;E$3rs`iFdsFv)Wi!=oy?ISHu*v0R;H=!^vlEPJJUx%|GO!AShK7br{#3l` zv(nn)1q0aE>VNS5xlYnNANT418MfYDvROLn4{}LI-y2&g^<aR5D!}<%a<{! z_@~%{%OBRhJRN(R)BOQ=dp^6)6JPUQHFr+8$Nk%Q7iY1p^0R2jN@{4aYw9_DO z&5w2W%VyoN(D5q$QWxyc#qsxy&Yss?ue;|tu|0NCnDeaWRr3Uk#ryw?@*KF~_qcVr zUzPPnKigYxt!j@>ReEL~UvRT>)8%=4@4eidTO-fP5h~(cZT$R`uIFTCgeMFQT0{Gd z{xe9_&a408{h#62Ci~~x);_nNHRI3k`5#(CEZ+ZTsHmO$$ByT`_}P@JyWW3}mY-k# zPwe$d#r`jUO@7tQN}CszHZSVAXoj%RZCPvpc?=R>HJZ8~NZtx1^Z&POP)&`RvS)fF5>RrPf$(-anD85t|Ha>V+d` zZS^dSPRcx=D^YSeEJ;r@Q`J}XO!vR6pJE#e{fst8uHF7At%UP?w(8c`&EGc8;P}^e z`}#wEOC~LiWlKfBdp=#OJtJA*_QtcP#coA!^{sMgZ{0B|b*D_Z-|+^nM>}+-UW+TN zZ(JG}c;>6pGVcX@-t2pB*!{+Anj+6SlRA-|;+-uTZw^e*u;H~`IM+s{HP$z4k=6*o+?#!#`K;7llmk!K} zab(tynX0>P`3r0XVR*nvwBZxh{|pJ>2^7n=2|-g9O<785ZyVBC7md2FD;?I|u|Dsi zrbXoL*kcuE<)l8Z__vN*wn@k(S6k`+NQ~uvC4oZ(q)G z`}_O{{c-Oy>ORp*4?l`+NI? za(nMTe0k99@ADtZ*LVN1jk>bTcq3kI)^_~2Lf$TYc*nncY2xCf3+taBSYowKU^d^j zj;1vo>s%h`TP-)M?^=`NtSq|Vcz^q&NZ*Dlc``5k8U=-vG94L0P6`Ci54T${lzM*K zQbR%AcbE2@=PcbRzkAvD%((QHU3dELUfDL~Xdn)WBQD!_dwsT1z4oN;-R!$dE9VKl zF0wBVx)m%abnmV9nGe&WC;r}*UpDnwh4Ujb{F>R zoU&Pd;;K|3XQ04rmzc{Y&qID_m3jrGAVqrZty}fCLVugO#7V@NF3mWZd;fj-#C?7u zyZs%-ueb_1KIxqGS>3*CgT=egFRR-l?QR9_EGxYG{L**6O|@Gd?>@iuooveQOs~e{ z<@3GoSe^WKx$nK*^c|&>-!9dVDX;vp_wbtexd^?Z%0>fZpi_v}n(DVR_C3g}Nb^&g RC~mdtrB~3@&F%kh0sst8PNe_< diff --git a/ChibiOS_2.0.8/docs/html/tool002.jpg b/ChibiOS_2.0.8/docs/html/tool002.jpg deleted file mode 100644 index c36767ea3ff3652c8f9f6fab67a71836b2490749..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47193 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

      wkE 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 XFiSgS9>c?O&VO5&1AWe%{(lnykxXYs diff --git a/ChibiOS_2.0.8/docs/html/tree.html b/ChibiOS_2.0.8/docs/html/tree.html deleted file mode 100644 index 7071e3a..0000000 --- a/ChibiOS_2.0.8/docs/html/tree.html +++ /dev/null @@ -1,788 +0,0 @@ - - - - - - - - TreeView - - - - -

      -

      ChibiOS/RT

      -
      -

      o+ChibiOS/RT

      -
      -

      |o*Copyright and Credits

      -

      |o*License and F.A.Q.

      -

      |o*Project Goals

      -

      |o*Application Range

      -

      |o*Architecture

      -

      |o*Kernel Concepts

      -

      |o+Articles and Code Samples

      - -

      |\+Testing Strategy

      - -
      -

      o+Modules

      -
      -

      |o+Kernel

      - -

      |o+Ports

      -
      -

      ||o+MegaAVR

      - -

      ||o+ARM7TDMI

      - -

      ||o+ARM Cortex-Mx

      - -

      ||o+PowerPC

      - -

      ||o+MSP430

      - -

      ||\+STM8

      - -
      -

      |o+HAL

      - -

      |o+Various

      - -

      |o*Test Runtime

      -

      |\*External Components

      -
      -

      o+Data Structures

      - -

      o+Class Hierarchy

      - -

      o*Data Fields

      -

      o*Graphical Class Hierarchy

      -

      o+File List

      -
      -

      |o*adc.c

      -

      |o*adc.h

      -

      |o*templates/adc_lld.c

      -

      |o*platforms/STM32/adc_lld.c

      -

      |o*templates/adc_lld.h

      -

      |o*platforms/STM32/adc_lld.h

      -

      |o*at91sam7.h

      -

      |o*at91sam7_mii.c

      -

      |o*at91sam7_mii.h

      -

      |o*can.c

      -

      |o*can.h

      -

      |o*templates/can_lld.c

      -

      |o*platforms/STM32/can_lld.c

      -

      |o*templates/can_lld.h

      -

      |o*platforms/STM32/can_lld.h

      -

      |o*ch.cpp

      -

      |o*ch.h

      -

      |o*ch.hpp

      -

      |o*chcond.c

      -

      |o*chcond.h

      -

      |o*chconf.h

      -

      |o*kernel/templates/chcore.c

      -

      |o*ports/GCC/AVR/chcore.c

      -

      |o*ports/GCC/ARM7/chcore.c

      -

      |o*ports/GCC/ARMCMx/chcore.c

      -

      |o*ports/GCC/PPC/chcore.c

      -

      |o*ports/GCC/MSP430/chcore.c

      -

      |o*ports/RC/STM8/chcore.c

      -

      |o*kernel/templates/chcore.h

      -

      |o*ports/GCC/AVR/chcore.h

      -

      |o*ports/GCC/ARM7/chcore.h

      -

      |o*ports/GCC/ARMCMx/chcore.h

      -

      |o*ports/GCC/PPC/chcore.h

      -

      |o*ports/GCC/MSP430/chcore.h

      -

      |o*ports/RC/STM8/chcore.h

      -

      |o*chcore_v6m.c

      -

      |o*chcore_v6m.h

      -

      |o*chcore_v7m.c

      -

      |o*chcore_v7m.h

      -

      |o*chcoreasm.s

      -

      |o*chdebug.c

      -

      |o*chdebug.h

      -

      |o*chevents.c

      -

      |o*chevents.h

      -

      |o*chheap.c

      -

      |o*chheap.h

      -

      |o*chinline.h

      -

      |o*chioch.h

      -

      |o*chlists.c

      -

      |o*chlists.h

      -

      |o*chmboxes.c

      -

      |o*chmboxes.h

      -

      |o*chmemcore.c

      -

      |o*chmemcore.h

      -

      |o*chmempools.c

      -

      |o*chmempools.h

      -

      |o*chmsg.c

      -

      |o*chmsg.h

      -

      |o*chmtx.c

      -

      |o*chmtx.h

      -

      |o*chqueues.c

      -

      |o*chqueues.h

      -

      |o*chregistry.c

      -

      |o*chregistry.h

      -

      |o*chschd.c

      -

      |o*chschd.h

      -

      |o*chsem.c

      -

      |o*chsem.h

      -

      |o*chstreams.h

      -

      |o*chsys.c

      -

      |o*chsys.h

      -

      |o*chthreads.c

      -

      |o*chthreads.h

      -

      |o*kernel/templates/chtypes.h

      -

      |o*ports/GCC/AVR/chtypes.h

      -

      |o*ports/GCC/ARM7/chtypes.h

      -

      |o*ports/GCC/ARMCMx/chtypes.h

      -

      |o*ports/GCC/PPC/chtypes.h

      -

      |o*ports/GCC/MSP430/chtypes.h

      -

      |o*ports/RC/STM8/chtypes.h

      -

      |o*chvt.c

      -

      |o*chvt.h

      -

      |o*STM32F10x/cmparams.h

      -

      |o*LPC11xx/cmparams.h

      -

      |o*LPC13xx/cmparams.h

      -

      |o*ARM7/crt0.s

      -

      |o*ARMCMx/crt0.s

      -

      |o*PPC/crt0.s

      -

      |o*evtimer.c

      -

      |o*evtimer.h

      -

      |o*hal.c

      -

      |o*hal.h

      -

      |o*templates/hal_lld.c

      -

      |o*platforms/AT91SAM7/hal_lld.c

      -

      |o*platforms/AVR/hal_lld.c

      -

      |o*platforms/LPC11xx/hal_lld.c

      -

      |o*platforms/LPC13xx/hal_lld.c

      -

      |o*platforms/LPC214x/hal_lld.c

      -

      |o*platforms/MSP430/hal_lld.c

      -

      |o*platforms/SPC56x/hal_lld.c

      -

      |o*platforms/STM32/hal_lld.c

      -

      |o*platforms/STM8/hal_lld.c

      -

      |o*templates/hal_lld.h

      -

      |o*platforms/AT91SAM7/hal_lld.h

      -

      |o*platforms/AVR/hal_lld.h

      -

      |o*platforms/LPC11xx/hal_lld.h

      -

      |o*platforms/LPC13xx/hal_lld.h

      -

      |o*platforms/LPC214x/hal_lld.h

      -

      |o*platforms/MSP430/hal_lld.h

      -

      |o*platforms/SPC56x/hal_lld.h

      -

      |o*platforms/STM32/hal_lld.h

      -

      |o*platforms/STM8/hal_lld.h

      -

      |o*hal_lld_f103.h

      -

      |o*hal_lld_f105_f107.h

      -

      |o*halconf.h

      -

      |o*lpc214x.h

      -

      |o*mac.c

      -

      |o*mac.h

      -

      |o*templates/mac_lld.c

      -

      |o*platforms/AT91SAM7/mac_lld.c

      -

      |o*templates/mac_lld.h

      -

      |o*platforms/AT91SAM7/mac_lld.h

      -

      |o*memstreams.c

      -

      |o*memstreams.h

      -

      |o*mii.h

      -

      |o*mmc_spi.c

      -

      |o*mmc_spi.h

      -

      |o*mpc563m.h

      -

      |o*nvic.c

      -

      |o*nvic.h

      -

      |o*pal.c

      -

      |o*pal.h

      -

      |o*templates/pal_lld.c

      -

      |o*platforms/AT91SAM7/pal_lld.c

      -

      |o*platforms/LPC11xx/pal_lld.c

      -

      |o*platforms/LPC13xx/pal_lld.c

      -

      |o*platforms/LPC214x/pal_lld.c

      -

      |o*platforms/MSP430/pal_lld.c

      -

      |o*platforms/STM32/pal_lld.c

      -

      |o*platforms/STM8/pal_lld.c

      -

      |o*templates/pal_lld.h

      -

      |o*platforms/AT91SAM7/pal_lld.h

      -

      |o*platforms/LPC11xx/pal_lld.h

      -

      |o*platforms/LPC13xx/pal_lld.h

      -

      |o*platforms/LPC214x/pal_lld.h

      -

      |o*platforms/MSP430/pal_lld.h

      -

      |o*platforms/STM32/pal_lld.h

      -

      |o*platforms/STM8/pal_lld.h

      -

      |o*pwm.c

      -

      |o*pwm.h

      -

      |o*templates/pwm_lld.c

      -

      |o*platforms/STM32/pwm_lld.c

      -

      |o*templates/pwm_lld.h

      -

      |o*platforms/STM32/pwm_lld.h

      -

      |o*serial.c

      -

      |o*serial.h

      -

      |o*templates/serial_lld.c

      -

      |o*platforms/AT91SAM7/serial_lld.c

      -

      |o*platforms/AVR/serial_lld.c

      -

      |o*platforms/LPC11xx/serial_lld.c

      -

      |o*platforms/LPC13xx/serial_lld.c

      -

      |o*platforms/LPC214x/serial_lld.c

      -

      |o*platforms/MSP430/serial_lld.c

      -

      |o*platforms/SPC56x/serial_lld.c

      -

      |o*platforms/STM32/serial_lld.c

      -

      |o*platforms/STM8/serial_lld.c

      -

      |o*templates/serial_lld.h

      -

      |o*platforms/AT91SAM7/serial_lld.h

      -

      |o*platforms/AVR/serial_lld.h

      -

      |o*platforms/LPC11xx/serial_lld.h

      -

      |o*platforms/LPC13xx/serial_lld.h

      -

      |o*platforms/LPC214x/serial_lld.h

      -

      |o*platforms/MSP430/serial_lld.h

      -

      |o*platforms/SPC56x/serial_lld.h

      -

      |o*platforms/STM32/serial_lld.h

      -

      |o*platforms/STM8/serial_lld.h

      -

      |o*shell.c

      -

      |o*shell.h

      -

      |o*spi.c

      -

      |o*spi.h

      -

      |o*templates/spi_lld.c

      -

      |o*platforms/LPC214x/spi_lld.c

      -

      |o*platforms/STM32/spi_lld.c

      -

      |o*templates/spi_lld.h

      -

      |o*platforms/LPC214x/spi_lld.h

      -

      |o*platforms/STM32/spi_lld.h

      -

      |o*stm32_dma.c

      -

      |o*stm32_dma.h

      -

      |o*stm8.h

      -

      |o*syscalls.c

      -

      |o*test.c

      -

      |o*test.h

      -

      |o*testbmk.c

      -

      |o*testbmk.h

      -

      |o*testdyn.c

      -

      |o*testdyn.h

      -

      |o*testevt.c

      -

      |o*testevt.h

      -

      |o*testheap.c

      -

      |o*testheap.h

      -

      |o*testmbox.c

      -

      |o*testmbox.h

      -

      |o*testmsg.c

      -

      |o*testmsg.h

      -

      |o*testmtx.c

      -

      |o*testmtx.h

      -

      |o*testpools.c

      -

      |o*testpools.h

      -

      |o*testqueues.c

      -

      |o*testqueues.h

      -

      |o*testsem.c

      -

      |o*testsem.h

      -

      |o*testthd.c

      -

      |o*testthd.h

      -

      |o*typedefs.h

      -

      |o*vic.c

      -

      |\*vic.h

      -
      -

      \*Globals

      -
      -
      - - diff --git a/ChibiOS_2.0.8/docs/html/typedefs_8h.html b/ChibiOS_2.0.8/docs/html/typedefs_8h.html deleted file mode 100644 index 682a5ca..0000000 --- a/ChibiOS_2.0.8/docs/html/typedefs_8h.html +++ /dev/null @@ -1,56 +0,0 @@ - - -ChibiOS/RT: typedefs.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      typedefs.h File Reference

      -
      -
      - -

      Dummy typedefs file. -More...

      -#include "chtypes.h"
      - -

      Go to the source code of this file.

      - -
      -

      Detailed Description

      -

      Dummy typedefs file.

      - -

      Definition in file typedefs.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/typedefs_8h_source.html b/ChibiOS_2.0.8/docs/html/typedefs_8h_source.html deleted file mode 100644 index 58aeb6b..0000000 --- a/ChibiOS_2.0.8/docs/html/typedefs_8h_source.html +++ /dev/null @@ -1,81 +0,0 @@ - - -ChibiOS/RT: typedefs.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/union____ioport.html b/ChibiOS_2.0.8/docs/html/union____ioport.html deleted file mode 100644 index e207b67..0000000 --- a/ChibiOS_2.0.8/docs/html/union____ioport.html +++ /dev/null @@ -1,66 +0,0 @@ - - -ChibiOS/RT: __ioport Union Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      __ioport Union Reference
      - -[MSP430 I/O Ports Support] -

      -
      -
      - -

      Generic MSP430 I/O port. -More...

      - -

      #include <pal_lld.h>

      -
      -Collaboration diagram for __ioport:
      -
      -
      Collaboration graph
      - - -
      [legend]
      - -
      -

      Detailed Description

      -

      Generic MSP430 I/O port.

      - -

      Definition at line 66 of file platforms/MSP430/pal_lld.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/union____ioport__coll__graph.png b/ChibiOS_2.0.8/docs/html/union____ioport__coll__graph.png deleted file mode 100644 index f68245c3745da083e941c537ec36c070706185d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2620 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 RHwFd<22WQ%mvv4FO#tK06DI%w diff --git a/ChibiOS_2.0.8/docs/html/unionheap__header.html b/ChibiOS_2.0.8/docs/html/unionheap__header.html deleted file mode 100644 index dc28619..0000000 --- a/ChibiOS_2.0.8/docs/html/unionheap__header.html +++ /dev/null @@ -1,137 +0,0 @@ - - -ChibiOS/RT: heap_header Union Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -
      -

      heap_header Union Reference
      - -[Heaps] -

      -
      -
      - -

      Memory heap block header. -More...

      - -

      #include <chheap.h>

      -
      -Collaboration diagram for heap_header:
      -
      -
      Collaboration graph
      - - -
      [legend]
      - -
      -

      Detailed Description

      -

      Memory heap block header.

      - -

      Definition at line 56 of file chheap.h.

      -

      Field Documentation

      - -
      -
      - - - - -
      union heap_header* heap_header::next
      -
      -
      - -

      Next block in free list.

      - -

      Definition at line 60 of file chheap.h.

      - -
      -
      - -
      - -
      - -

      Block owner heap.

      - -

      Definition at line 61 of file chheap.h.

      - -
      -
      - -
      -
      - - - - -
      union { ... } heap_header::u
      -
      -
      - -

      Overlapped fields.

      - -

      Referenced by chHeapAlloc(), chHeapFree(), chHeapInit(), chHeapStatus(), and heap_init().

      - -
      -
      - -
      -
      - - - - -
      size_t heap_header::size
      -
      -
      - -

      Size of the memory block.

      - -

      Definition at line 63 of file chheap.h.

      - -

      Referenced by chHeapAlloc(), chHeapFree(), chHeapInit(), and heap_init().

      - -
      -
      -
      -
      -Generated on Sun Nov 28 2010 14:09:59 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/unionheap__header__coll__graph.png b/ChibiOS_2.0.8/docs/html/unionheap__header__coll__graph.png deleted file mode 100644 index e9d3705ae115b0fd317eeb84e210e88aa95813c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8834 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 - -ChibiOS/RT: vic.c File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      vic.c File Reference

      -
      -
      - -

      LPC214x VIC peripheral support code. -More...

      -#include "ch.h"
      - -

      Go to the source code of this file.

      - - - - - - -

      -Functions

      void vic_init (void)
       VIC Initialization.
      void SetVICVector (void *handler, int vector, int source)
       Initializes a VIC vector.
      -

      Detailed Description

      -

      LPC214x VIC peripheral support code.

      - -

      Definition in file vic.c.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/vic_8c_source.html b/ChibiOS_2.0.8/docs/html/vic_8c_source.html deleted file mode 100644 index 48aa085..0000000 --- a/ChibiOS_2.0.8/docs/html/vic_8c_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - -ChibiOS/RT: vic.c Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/vic_8h.html b/ChibiOS_2.0.8/docs/html/vic_8h.html deleted file mode 100644 index dabfd45..0000000 --- a/ChibiOS_2.0.8/docs/html/vic_8h.html +++ /dev/null @@ -1,63 +0,0 @@ - - -ChibiOS/RT: vic.h File Reference - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      - -
      -

      vic.h File Reference

      -
      -
      - -

      LPC214x VIC peripheral support header. -More...

      - -

      Go to the source code of this file.

      - - - - - - -

      -Functions

      void vic_init (void)
       VIC Initialization.
      void SetVICVector (void *handler, int vector, int source)
       Initializes a VIC vector.
      -

      Detailed Description

      -

      LPC214x VIC peripheral support header.

      - -

      Definition in file vic.h.

      -
      -
      -Generated on Sun Nov 28 2010 14:09:50 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/vic_8h_source.html b/ChibiOS_2.0.8/docs/html/vic_8h_source.html deleted file mode 100644 index 0d4cfa6..0000000 --- a/ChibiOS_2.0.8/docs/html/vic_8h_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - -ChibiOS/RT: vic.h Source File - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      - - -
      -Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by doxygen 1.7.1
      - - diff --git a/ChibiOS_2.0.8/docs/html/workspace.png b/ChibiOS_2.0.8/docs/html/workspace.png deleted file mode 100644 index 689178c0b6ea28cca19c76df0ae5410ce0c75b3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20994 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 XTq*r2J*c07fq}u()z4*}Q$iB}VH&0W diff --git a/ChibiOS_2.0.8/docs/index.html b/ChibiOS_2.0.8/docs/index.html deleted file mode 100644 index 9505410..0000000 --- a/ChibiOS_2.0.8/docs/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/ChibiOS_2.0.8/docs/readme.txt b/ChibiOS_2.0.8/docs/readme.txt deleted file mode 100644 index 3e79639..0000000 --- a/ChibiOS_2.0.8/docs/readme.txt +++ /dev/null @@ -1,34 +0,0 @@ -*** Documentation access *** - -Open ./docs/index.html to open the start page or ./docs/html/index.html in -order to access directly the doxigen documentation. - -*** Documentation rebuild procedure *** - -The following software must be installed: -- Doxygen 1.5.7.1 or later. -- Graphviz 2.21 or later. The ./bin directory must be specified in the path in - order to make Graphviz accessible by Doxygen. - -Build procedure: -- Run Doxywizard. -- Load ./docs/Doxyfile from Doxywizard. -- Start. - -*** Doxygen usage rules *** -- The JavaDoc style is recommended (@ instad of \, /** instead of /*!). -- Params descriptions must not begin with a capital letter and must not be - terminated with a dot unless it is composed of multiple paragraphs. -- Retvals descriptions must not begin with a capital letter but must be - terminated by a dot. -- Normal paragraphs, return rescriptions and notes must start with a capital - letter and must be terminated with a dot. -- Multiple return values should be listed using the @retval command. -- Parameters direction must be specified. - -Examples: -@note This is a note. -@retval RDY_OK is a possible return value. -@return The pointer to the created thread is returned. -@param[in] n the number of bytes to be written -@param[in] n the number of bytes to be written. This value can be zero. diff --git a/ChibiOS_2.0.8/docs/reports/AT91SAM7X-48-ARM.txt b/ChibiOS_2.0.8/docs/reports/AT91SAM7X-48-ARM.txt deleted file mode 100644 index c8366c3..0000000 --- a/ChibiOS_2.0.8/docs/reports/AT91SAM7X-48-ARM.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -Settings: MCK=48.054857, MC_FMR = AT91C_MC_FWS_1FWS (1 wait state) -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.6 -*** GCC Version: 4.5.1 -*** Architecture: ARM -*** Core Variant: ARM7TDMI -*** Platform: AT91SAM7x -*** Test Board: Olimex SAM7-EX256 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 114671 msgs/S, 229342 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 89883 msgs/S, 179766 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 89883 msgs/S, 179766 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 380272 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 67349 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 96994 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 27231 reschedules/S, 163386 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 211348 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 239264 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 264214 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 449036 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 322036 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 356 bytes ---- Thread: 68 bytes ---- Timer : 20 bytes ---- Semaph: 12 bytes ---- EventS: 4 bytes ---- EventL: 12 bytes ---- Mutex : 16 bytes ---- CondV.: 8 bytes ---- Queue : 32 bytes ---- MailB.: 40 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/AT91SAM7X-48-THUMB.txt b/ChibiOS_2.0.8/docs/reports/AT91SAM7X-48-THUMB.txt deleted file mode 100644 index dad364a..0000000 --- a/ChibiOS_2.0.8/docs/reports/AT91SAM7X-48-THUMB.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -Settings: MCK=48.054857, MC_FMR = AT91C_MC_FWS_1FWS (1 wait state) -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.6 -*** GCC Version: 4.5.1 -*** Architecture: ARM -*** Core Variant: ARM7TDMI -*** Platform: AT91SAM7x -*** Test Board: Olimex SAM7-EX256 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 106525 msgs/S, 213050 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 87601 msgs/S, 175202 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 87601 msgs/S, 175202 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 405776 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 70339 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 105584 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 28624 reschedules/S, 171744 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 212116 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 258636 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 323178 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 364428 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 256808 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 356 bytes ---- Thread: 68 bytes ---- Timer : 20 bytes ---- Semaph: 12 bytes ---- EventS: 4 bytes ---- EventL: 12 bytes ---- Mutex : 16 bytes ---- CondV.: 8 bytes ---- Queue : 32 bytes ---- MailB.: 40 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/ATmega128-16.txt b/ChibiOS_2.0.8/docs/reports/ATmega128-16.txt deleted file mode 100644 index 3cf7136..0000000 --- a/ChibiOS_2.0.8/docs/reports/ATmega128-16.txt +++ /dev/null @@ -1,150 +0,0 @@ -*************************************************************************** -Options: -O2 -Settings: F_CPU=16000000 -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.6 -*** GCC Version: 4.3.0 -*** Architecture: AVR -*** Core Variant: MegaAVR -*** Platform: ATmega128 -*** Test Board: Olimex AVR-MT-128 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 31125 msgs/S, 62250 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 24979 msgs/S, 49958 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 24979 msgs/S, 49958 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 89904 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 21253 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 27451 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 7970 reschedules/S, 47820 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 60760 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 80180 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 81522 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 227560 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 116720 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 230 bytes ---- Thread: 29 bytes ---- Timer : 10 bytes ---- Semaph: 5 bytes ---- EventS: 2 bytes ---- EventL: 5 bytes ---- Mutex : 8 bytes ---- CondV.: 4 bytes ---- Queue : 15 bytes ---- MailB.: 18 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/LPC1114-48.txt b/ChibiOS_2.0.8/docs/reports/LPC1114-48.txt deleted file mode 100644 index dc6d4b1..0000000 --- a/ChibiOS_2.0.8/docs/reports/LPC1114-48.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -mabi=apcs-gnu -Settings: CLK=48, (3 wait states) -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.6 -*** GCC Version: 4.3.3 -*** Architecture: ARMv6-M -*** Core Variant: Cortex-M0 -*** Platform: LPC11xx -*** Test Board: Embedded Artists LPCXpresso Base Board + LPC1114 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 124136 msgs/S, 248272 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 99992 msgs/S, 199984 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 99992 msgs/S, 199984 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 380432 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 80188 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 111404 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 31034 reschedules/S, 186204 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 253200 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 298992 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 350196 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 591948 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 334860 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 360 bytes ---- Thread: 68 bytes ---- Timer : 20 bytes ---- Semaph: 12 bytes ---- EventS: 4 bytes ---- EventL: 12 bytes ---- Mutex : 16 bytes ---- CondV.: 8 bytes ---- Queue : 32 bytes ---- MailB.: 40 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/LPC1343-72.txt b/ChibiOS_2.0.8/docs/reports/LPC1343-72.txt deleted file mode 100644 index 8c57533..0000000 --- a/ChibiOS_2.0.8/docs/reports/LPC1343-72.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -mabi=apcs-gnu -Settings: CLK=72, (3 wait states) -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.6 -*** GCC Version: 4.3.3 -*** Architecture: ARMv7-M -*** Core Variant: Cortex-M3 -*** Platform: LPC13xx -*** Test Board: Embedded Artists LPCXpresso Base Board + LPC1343 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 241880 msgs/S, 483760 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 196281 msgs/S, 392562 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 196281 msgs/S, 392562 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 806072 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 155163 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 219028 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 63239 reschedules/S, 379434 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 473392 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 482836 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 707908 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 909504 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 588968 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 360 bytes ---- Thread: 68 bytes ---- Timer : 20 bytes ---- Semaph: 12 bytes ---- EventS: 4 bytes ---- EventL: 12 bytes ---- Mutex : 16 bytes ---- CondV.: 8 bytes ---- Queue : 32 bytes ---- MailB.: 40 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/LPC2148-48-ARM.txt b/ChibiOS_2.0.8/docs/reports/LPC2148-48-ARM.txt deleted file mode 100644 index ff11fc2..0000000 --- a/ChibiOS_2.0.8/docs/reports/LPC2148-48-ARM.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -falign-functions=16 -Settings: CCLK=48, MAMCR=2, MAMTIM=3 (3 wait states) -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.6 -*** GCC Version: 4.5.1 -*** Architecture: ARM -*** Core Variant: ARM7TDMI -*** Platform: LPC214x -*** Test Board: Olimex LCP-P2148 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 145386 msgs/S, 290772 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 113890 msgs/S, 227780 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 113890 msgs/S, 227780 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 493760 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 89745 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 128237 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 35380 reschedules/S, 212280 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 276080 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 341980 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 333360 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 607412 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 380408 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 356 bytes ---- Thread: 68 bytes ---- Timer : 20 bytes ---- Semaph: 12 bytes ---- EventS: 4 bytes ---- EventL: 12 bytes ---- Mutex : 16 bytes ---- CondV.: 8 bytes ---- Queue : 32 bytes ---- MailB.: 40 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/LPC2148-48-THUMB.txt b/ChibiOS_2.0.8/docs/reports/LPC2148-48-THUMB.txt deleted file mode 100644 index 1fb66d2..0000000 --- a/ChibiOS_2.0.8/docs/reports/LPC2148-48-THUMB.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -falign-functions=16 -Settings: CCLK=48, MAMCR=2, MAMTIM=3 (3 wait states) -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.6 -*** GCC Version: 4.5.1 -*** Architecture: ARM -*** Core Variant: ARM7TDMI -*** Platform: LPC214x -*** Test Board: Olimex LCP-P2148 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 106224 msgs/S, 212448 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 88032 msgs/S, 176064 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 88032 msgs/S, 176064 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 412536 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 71990 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 110394 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 29290 reschedules/S, 175740 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 221560 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 261396 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 326304 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 350836 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 244200 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 356 bytes ---- Thread: 68 bytes ---- Timer : 20 bytes ---- Semaph: 12 bytes ---- EventS: 4 bytes ---- EventL: 12 bytes ---- Mutex : 16 bytes ---- CondV.: 8 bytes ---- Queue : 32 bytes ---- MailB.: 40 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/MSP430F1611-0.75.txt b/ChibiOS_2.0.8/docs/reports/MSP430F1611-0.75.txt deleted file mode 100644 index 035644f..0000000 --- a/ChibiOS_2.0.8/docs/reports/MSP430F1611-0.75.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -Settings: MCLK=DCOCLK 750KHz -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.6 -*** GCC Version: 3.2.3 -*** Architecture: MSP430 -*** Core Variant: MSP430 -*** Platform: MSP430x16x -*** Test Board: Olimex MSP430-P1611 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 1971 msgs/S, 3942 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 1624 msgs/S, 3248 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 1624 msgs/S, 3248 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 5912 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 1145 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 1545 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 494 reschedules/S, 2964 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 3820 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 4920 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 5644 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 13908 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 7524 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 220 bytes ---- Thread: 36 bytes ---- Timer : 10 bytes ---- Semaph: 6 bytes ---- EventS: 2 bytes ---- EventL: 6 bytes ---- Mutex : 8 bytes ---- CondV.: 4 bytes ---- Queue : 16 bytes ---- MailB.: 20 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/MSP430F1611-8.txt b/ChibiOS_2.0.8/docs/reports/MSP430F1611-8.txt deleted file mode 100644 index 9f9009b..0000000 --- a/ChibiOS_2.0.8/docs/reports/MSP430F1611-8.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -Settings: MCLK=XT2CLK 8MHz -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.6 -*** GCC Version: 3.2.3 -*** Architecture: MSP430 -*** Core Variant: MSP430 -*** Platform: MSP430x16x -*** Test Board: Olimex MSP430-P1611 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 21356 msgs/S, 42712 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 17593 msgs/S, 35186 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 17593 msgs/S, 35186 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 64024 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 12402 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 16745 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 5350 reschedules/S, 32100 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 41336 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 53292 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 60970 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 150700 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 81504 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 220 bytes ---- Thread: 36 bytes ---- Timer : 10 bytes ---- Semaph: 6 bytes ---- EventS: 2 bytes ---- EventL: 6 bytes ---- Mutex : 8 bytes ---- CondV.: 4 bytes ---- Queue : 16 bytes ---- MailB.: 20 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/SPC563M64-80.txt b/ChibiOS_2.0.8/docs/reports/SPC563M64-80.txt deleted file mode 100644 index 9ad1888..0000000 --- a/ChibiOS_2.0.8/docs/reports/SPC563M64-80.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -msdata=none -falign-functions=16 -Settings: SYSCLK=80, optimal wait states, prefetching enabled -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.0 -*** GCC Version: 4.4.1 -*** Architecture: PowerPC -*** Core Variant: e200z3 -*** Platform: SPC563M64 -*** Test Board: Generic SPC563 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 281168 msgs/S, 562336 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 226208 msgs/S, 452416 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 226208 msgs/S, 452416 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 907432 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 182729 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 263538 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 74067 reschedules/S, 444402 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 614140 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 618384 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 1093664 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 1027008 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 871856 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 760 bytes ---- Thread: 68 bytes ---- Timer : 20 bytes ---- Semaph: 12 bytes ---- EventS: 4 bytes ---- EventL: 12 bytes ---- Mutex : 16 bytes ---- CondV.: 8 bytes ---- Queue : 32 bytes ---- MailB.: 40 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/STM32F103-48.txt b/ChibiOS_2.0.8/docs/reports/STM32F103-48.txt deleted file mode 100644 index c3bb59b..0000000 --- a/ChibiOS_2.0.8/docs/reports/STM32F103-48.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -falign-functions=16 -Settings: SYSCLK=48, ACR=0x11 (1 wait state) -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.8 -*** GCC Version: 4.5.1 -*** Architecture: ARMv7-M -*** Core Variant: Cortex-M3 -*** Platform: STM32 MD -*** Test Board: Olimex STM32-P103 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 186215 msgs/S, 372430 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 152411 msgs/S, 304822 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 152411 msgs/S, 304822 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 613592 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 117593 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 173405 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 46508 reschedules/S, 279048 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 357804 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 355212 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 514688 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 640320 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 475080 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 360 bytes ---- Thread: 68 bytes ---- Timer : 20 bytes ---- Semaph: 12 bytes ---- EventS: 4 bytes ---- EventL: 12 bytes ---- Mutex : 16 bytes ---- CondV.: 8 bytes ---- Queue : 32 bytes ---- MailB.: 40 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/STM32F103-72.txt b/ChibiOS_2.0.8/docs/reports/STM32F103-72.txt deleted file mode 100644 index 5c1ff5d..0000000 --- a/ChibiOS_2.0.8/docs/reports/STM32F103-72.txt +++ /dev/null @@ -1,159 +0,0 @@ -*************************************************************************** -Options: -O2 -fomit-frame-pointer -falign-functions=16 -Settings: SYSCLK=72, ACR=0x12 (2 wait states) -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.8 -*** GCC Version: 4.5.1 -*** Architecture: ARMv7-M -*** Core Variant: Cortex-M3 -*** Platform: STM32 MD -*** Test Board: Olimex STM32-P103 - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.1 (Mutexes, priority enqueuing test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.2 (Mutexes, priority inheritance, simple case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.3 (Mutexes, priority inheritance, complex case) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.4 (Mutexes, priority return) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.5 (Mutexes, status) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.6 (CondVar, signal test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.7 (CondVar, broadcast test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 3.8 (CondVar, boost test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 5.1 (Mailboxes, queuing and timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 248573 msgs/S, 497146 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 201227 msgs/S, 402454 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 201227 msgs/S, 402454 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 839008 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 156856 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 235543 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 61138 reschedules/S, 366828 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 478120 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 465772 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 647262 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 787368 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, mutexes lock/unlock) ---- Score : 586492 lock+unlock/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.13 (Benchmark, RAM footprint) ---- System: 360 bytes ---- Thread: 68 bytes ---- Timer : 20 bytes ---- Semaph: 12 bytes ---- EventS: 4 bytes ---- EventL: 12 bytes ---- Mutex : 16 bytes ---- CondV.: 8 bytes ---- Queue : 32 bytes ---- MailB.: 40 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/STM8S208-16.txt b/ChibiOS_2.0.8/docs/reports/STM8S208-16.txt deleted file mode 100644 index 0ff71dc..0000000 --- a/ChibiOS_2.0.8/docs/reports/STM8S208-16.txt +++ /dev/null @@ -1,124 +0,0 @@ -*************************************************************************** -Options: Optimized for speed (3) -Settings: CPUCLK=16MHz (HSI) -Compiler: Raisonance RKit-STM8_2.30.10.0175 -*************************************************************************** - -*** ChibiOS/RT test suite -*** -*** Kernel: 2.0.6 -*** Architecture: STM8 -*** Platform: STM8x -*** Test Board: Raisonance REva V3 + STM8S208RB - ----------------------------------------------------------------------------- ---- Test Case 1.1 (Threads, enqueuing test #1) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.2 (Threads, enqueuing test #2) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.3 (Threads, priority change) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 1.4 (Threads, delays) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.1 (Semaphores, enqueuing) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.2 (Semaphores, timeout) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 2.3 (Semaphores, atomic signal-wait) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 4.1 (Messages, loop) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.1 (Events, registration and dispatch) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.2 (Events, wait and broadcast) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 6.3 (Events, timeouts) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 7.1 (Heap, allocation and fragmentation test) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 8.1 (Memory Pools, queue/dequeue) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.1 (Dynamic APIs, threads creation from heap) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.2 (Dynamic APIs, threads creation from memory pool) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 9.3 (Dynamic APIs, registry and references) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.1 (Queues, input queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 10.2 (Queues, output queues) ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.1 (Benchmark, messages #1) ---- Score : 31402 msgs/S, 62804 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.2 (Benchmark, messages #2) ---- Score : 24108 msgs/S, 48216 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.3 (Benchmark, messages #3) ---- Score : 24108 msgs/S, 48216 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.4 (Benchmark, context switch) ---- Score : 108184 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.5 (Benchmark, threads, full cycle) ---- Score : 18102 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.6 (Benchmark, threads, create only) ---- Score : 28190 threads/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.7 (Benchmark, mass reschedule, 5 threads) ---- Score : 6956 reschedules/S, 41736 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.8 (Benchmark, round robin context switching) ---- Score : 54180 ctxswc/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.9 (Benchmark, I/O Queues throughput) ---- Score : 62808 bytes/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.10 (Benchmark, virtual timers set/reset) ---- Score : 57788 timers/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.11 (Benchmark, semaphores wait/signal) ---- Score : 211004 wait+signal/S ---- Result: SUCCESS ----------------------------------------------------------------------------- ---- Test Case 11.12 (Benchmark, RAM footprint) ---- System: 177 bytes ---- Thread: 29 bytes ---- Timer : 10 bytes ---- Semaph: 6 bytes ---- EventS: 2 bytes ---- EventL: 5 bytes ---- Queue : 16 bytes ---- Result: SUCCESS ----------------------------------------------------------------------------- - -Final result: SUCCESS diff --git a/ChibiOS_2.0.8/docs/reports/build.txt b/ChibiOS_2.0.8/docs/reports/build.txt deleted file mode 100644 index c530404..0000000 --- a/ChibiOS_2.0.8/docs/reports/build.txt +++ /dev/null @@ -1,48 +0,0 @@ -Default maximum settings - * Building...OK - * Testing...OK -CH_OPTIMIZE_SPEED=FALSE - * Building...OK - * Testing...OK -CH_USE_NESTED_LOCKS=TRUE - * Building...OK - * Testing...OK -CH_TIME_QUANTUM=0 - * Building...OK - * Testing...OK -CH_USE_REGISTRY=FALSE - * Building...OK - * Testing...OK -CH_USE_SEMAPHORES_PRIORITY=TRUE - * Building...OK - * Testing...OK -CH_USE_CONDVARS_TIMEOUT=FALSE - * Building...OK - * Testing...OK -CH_USE_EVENTS_TIMEOUT=FALSE - * Building...OK - * Testing...OK -CH_USE_MESSAGES_PRIORITY=TRUE - * Building...OK - * Testing...OK -CH_USE_DYNAMIC=FALSE - * Building...OK - * Testing...OK -CH_DBG_ENABLE_CHECKS=TRUE - * Building...OK - * Testing...OK -CH_DBG_ENABLE_ASSERTS=TRUE - * Building...OK - * Testing...OK -CH_DBG_ENABLE_TRACE=TRUE - * Building...OK - * Testing...OK -CH_DBG_ENABLE_STACK_CHECK=TRUE - * Building...OK - * Testing...OK -CH_DBG_FILL_THREADS=TRUE - * Building...OK - * Testing...OK -CH_DBG_THREADS_PROFILING=FALSE - * Building...OK - * Testing...OK diff --git a/ChibiOS_2.0.8/docs/reports/coverage.txt b/ChibiOS_2.0.8/docs/reports/coverage.txt deleted file mode 100644 index b8a1eee..0000000 --- a/ChibiOS_2.0.8/docs/reports/coverage.txt +++ /dev/null @@ -1,71 +0,0 @@ -mkdir gcov -gcov -u ..\..\os\kernel\src\chsys.c ..\..\os\kernel\src\chdebug.c ..\..\os\kernel\src\chlists.c ..\..\os\kernel\src\chvt.c ..\..\os\kernel\src\chschd.c ..\..\os\kernel\src\chthreads.c ..\..\os\kernel\src\chregistry.c ..\..\os\kernel\src\chsem.c ..\..\os\kernel\src\chmtx.c ..\..\os\kernel\src\chcond.c ..\..\os\kernel\src\chevents.c ..\..\os\kernel\src\chmsg.c ..\..\os\kernel\src\chmboxes.c ..\..\os\kernel\src\chqueues.c ..\..\os\kernel\src\chmemcore.c ..\..\os\kernel\src\chheap.c ..\..\os\kernel\src\chmempools.c -File `../../os/kernel/src/chsys.c' -Lines executed:100.00% of 27 -../../os/kernel/src/chsys.c:creating `chsys.c.gcov' - -File `../../os/kernel/src/chdebug.c' -Lines executed:76.92% of 13 -../../os/kernel/src/chdebug.c:creating `chdebug.c.gcov' - -File `../../os/kernel/src/chlists.c' -Lines executed:100.00% of 31 -../../os/kernel/src/chlists.c:creating `chlists.c.gcov' - -File `../../os/kernel/src/chvt.c' -Lines executed:100.00% of 29 -../../os/kernel/src/chvt.c:creating `chvt.c.gcov' - -File `../../os/kernel/src/chschd.c' -Lines executed:100.00% of 67 -../../os/kernel/src/chschd.c:creating `chschd.c.gcov' - -File `../../os/kernel/src/chthreads.c' -Lines executed:95.62% of 137 -../../os/kernel/src/chthreads.c:creating `chthreads.c.gcov' - -File `../../os/kernel/src/chregistry.c' -Lines executed:100.00% of 18 -../../os/kernel/src/chregistry.c:creating `chregistry.c.gcov' - -File `../../os/kernel/src/chsem.c' -Lines executed:100.00% of 74 -../../os/kernel/src/chsem.c:creating `chsem.c.gcov' - -File `../../os/kernel/src/chmtx.c' -Lines executed:99.10% of 111 -../../os/kernel/src/chmtx.c:creating `chmtx.c.gcov' - -File `../../os/kernel/src/chcond.c' -Lines executed:100.00% of 59 -../../os/kernel/src/chcond.c:creating `chcond.c.gcov' - -File `../../os/kernel/src/chevents.c' -Lines executed:100.00% of 111 -../../os/kernel/src/chevents.c:creating `chevents.c.gcov' - -File `../../os/kernel/src/chmsg.c' -Lines executed:100.00% of 32 -../../os/kernel/src/chmsg.c:creating `chmsg.c.gcov' - -File `../../os/kernel/src/chmboxes.c' -Lines executed:100.00% of 65 -../../os/kernel/src/chmboxes.c:creating `chmboxes.c.gcov' - -File `../../os/kernel/src/chqueues.c' -Lines executed:100.00% of 112 -../../os/kernel/src/chqueues.c:creating `chqueues.c.gcov' - -File `../../os/kernel/src/chmemcore.c' -Lines executed:100.00% of 20 -../../os/kernel/src/chmemcore.c:creating `chmemcore.c.gcov' - -File `../../os/kernel/src/chheap.c' -Lines executed:100.00% of 79 -../../os/kernel/src/chheap.c:creating `chheap.c.gcov' - -File `../../os/kernel/src/chmempools.c' -Lines executed:100.00% of 28 -../../os/kernel/src/chmempools.c:creating `chmempools.c.gcov' - -mv -f *.gcov ./gcov diff --git a/ChibiOS_2.0.8/docs/reports/kernel.txt b/ChibiOS_2.0.8/docs/reports/kernel.txt deleted file mode 100644 index 664d2dd..0000000 --- a/ChibiOS_2.0.8/docs/reports/kernel.txt +++ /dev/null @@ -1,306 +0,0 @@ -Platform : PowerPC -OS Setup : Full kernel -Compiler : powerpc-eabi-gcc (Sourcery G++ Lite 4.4-79) 4.4.1 -Options : -O2 -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 11240 - -Platform : PowerPC -OS Setup : Full kernel -Compiler : powerpc-eabi-gcc (Sourcery G++ Lite 4.4-79) 4.4.1 -Options : -O2 -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 10800 - -Platform : PowerPC -OS Setup : Minimal kernel -Compiler : powerpc-eabi-gcc (Sourcery G++ Lite 4.4-79) 4.4.1 -Options : -O2 -Kernel Size = 2076 - -Platform : PowerPC -OS Setup : Full kernel -Compiler : powerpc-eabi-gcc (Sourcery G++ Lite 4.4-79) 4.4.1 -Options : -Os -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 9788 - -Platform : PowerPC -OS Setup : Full kernel -Compiler : powerpc-eabi-gcc (Sourcery G++ Lite 4.4-79) 4.4.1 -Options : -Os -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 9304 - -Platform : PowerPC -OS Setup : Minimal kernel -Compiler : powerpc-eabi-gcc (Sourcery G++ Lite 4.4-79) 4.4.1 -Options : -Os -Kernel Size = 2092 - -Platform : ARM Cortex-M3 -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 5932 - -Platform : ARM Cortex-M3 -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 5440 - -Platform : ARM Cortex-M3 -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -Kernel Size = 1424 - -Platform : ARM Cortex-M3 -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 5364 - -Platform : ARM Cortex-M3 -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 4956 - -Platform : ARM Cortex-M3 -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -Kernel Size = 1244 - -Platform : ARM Cortex-M3 -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 5144 - -Platform : ARM Cortex-M3 -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 4764 - -Platform : ARM Cortex-M3 -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -Kernel Size = 1196 - -Platform : ARM Cortex-M0 -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 5184 - -Platform : ARM Cortex-M0 -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 4992 - -Platform : ARM Cortex-M0 -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -Kernel Size = 1300 - -Platform : ARM Cortex-M0 -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 4784 - -Platform : ARM Cortex-M0 -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 4624 - -Platform : ARM Cortex-M0 -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -Kernel Size = 1180 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 8620 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 8168 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -Kernel Size = 1820 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 7980 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 7632 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -Kernel Size = 1568 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 8336 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 7900 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -Kernel Size = 1752 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 7688 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 7360 - -Platform : ARM7TDMI (ARM mode) -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -Kernel Size = 1500 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -DCH_OPTIMIZE_SPEED=TRUE -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 5748 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -DCH_OPTIMIZE_SPEED=FALSE -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 5544 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 1300 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -DCH_OPTIMIZE_SPEED=TRUE -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 5356 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -DCH_OPTIMIZE_SPEED=FALSE -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 5176 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 1188 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DCH_OPTIMIZE_SPEED=TRUE -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 5604 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DCH_OPTIMIZE_SPEED=FALSE -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 5412 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -O2 -mthumb -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 1252 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DCH_OPTIMIZE_SPEED=TRUE -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 5144 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Full kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DCH_OPTIMIZE_SPEED=FALSE -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 4984 - -Platform : ARM7TDMI (THUMB mode) -OS Setup : Minimal kernel -Compiler : arm-none-eabi-gcc (GCC) 4.5.1 -Options : -Os -mthumb -ffixed-r7 -DCH_CURRP_REGISTER_CACHE=\"r7\" -DTHUMB -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -Kernel Size = 1136 - -Platform : MSP430 -OS Setup : Full kernel -Compiler : msp430-gcc (GCC) 3.2.3 -Options : -O2 -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 5728 - -Platform : MSP430 -OS Setup : Full kernel -Compiler : msp430-gcc (GCC) 3.2.3 -Options : -O2 -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 5208 - -Platform : MSP430 -OS Setup : Minimal kernel -Compiler : msp430-gcc (GCC) 3.2.3 -Options : -O2 -Kernel Size = 1120 - -Platform : MSP430 -OS Setup : Full kernel -Compiler : msp430-gcc (GCC) 3.2.3 -Options : -Os -DCH_OPTIMIZE_SPEED=TRUE -Kernel Size = 5668 - -Platform : MSP430 -OS Setup : Full kernel -Compiler : msp430-gcc (GCC) 3.2.3 -Options : -Os -DCH_OPTIMIZE_SPEED=FALSE -Kernel Size = 5168 - -Platform : MSP430 -OS Setup : Minimal kernel -Compiler : msp430-gcc (GCC) 3.2.3 -Options : -Os -Kernel Size = 1120 - diff --git a/ChibiOS_2.0.8/docs/rsc/custom.css b/ChibiOS_2.0.8/docs/rsc/custom.css deleted file mode 100644 index 9c847c6..0000000 --- a/ChibiOS_2.0.8/docs/rsc/custom.css +++ /dev/null @@ -1,441 +0,0 @@ -body, table, div, p, dl { - font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; - font-size: 12px; -} - -/* @group Heading Levels */ - -h1 { - text-align: center; - font-size: 150%; -} - -h2 { - font-size: 120%; -} - -h3 { - font-size: 100%; -} - -/* @end */ - -caption { - font-weight: bold; -} - -div.qindex, div.navpath, div.navtab{ - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - padding: 2px; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #153788; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #1b77c5; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #6666cc; - color: #ffffff; - border: 1px double #9295C2; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code { -} - -a.codeRef { -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -.fragment { - font-family: monospace, fixed; - font-size: 105%; -} - -pre.fragment { - border: 1px solid #CCCCCC; - background-color: #f5f5f5; - padding: 4px 6px; - margin: 4px 8px 4px 2px; -} - -div.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - margin-bottom: 6px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background: white; - color: black; - margin-right: 20px; - margin-left: 20px; -} - -td.indexkey { - background-color: #e8eef2; - font-weight: bold; - border: 1px solid #CCCCCC; - margin: 2px 0px 2px 0; - padding: 2px 10px; -} - -td.indexvalue { - background-color: #e8eef2; - border: 1px solid #CCCCCC; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #f0f0f0; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -/* @end */ - -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #84b0c7; -} - -th.dirtab { - background: #e8eef2; - font-weight: bold; -} - -hr { - height: 0; - border: none; - border-top: 1px solid #666; -} - -/* @group Member Descriptions */ - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #FAFAFA; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #ccc; -} - -.memTemplParams { - color: #606060; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtemplate { - font-size: 80%; - color: #606060; - font-weight: normal; - margin-left: 3px; -} - -.memnav { - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.memitem { - padding: 0; -} - -.memname { - white-space: nowrap; - font-weight: bold; -} - -.memproto, .memdoc { - border: 1px solid #84b0c7; -} - -.memproto { - padding: 0; - background-color: #d5e1e8; - font-weight: bold; - -webkit-border-top-left-radius: 8px; - -webkit-border-top-right-radius: 8px; - -moz-border-radius-topleft: 8px; - -moz-border-radius-topright: 8px; -} - -.memdoc { - padding: 2px 5px; - background-color: #eef3f5; - border-top-width: 0; - -webkit-border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-bottomleft: 8px; - -moz-border-radius-bottomright: 8px; -} - -.memdoc p, .memdoc dl, .memdoc ul { - margin: 6px 0; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} - -/* @end */ - -/* @group Directory (tree) */ - -/* for the tree view */ - -.ftvtree { - font-family: sans-serif; - margin: 0.5em; -} - -/* these are for tree view when used as main index */ - -.directory { - font-size: 9pt; - font-weight: bold; -} - -.directory h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -/* -The following two styles can be used to replace the root node title -with an image of your choice. Simply uncomment the next two styles, -specify the name of your image and be sure to set 'height' to the -proper pixel height of your image. -*/ - -/* -.directory h3.swap { - height: 61px; - background-repeat: no-repeat; - background-image: url("yourimage.gif"); -} -.directory h3.swap span { - display: none; -} -*/ - -.directory > h3 { - margin-top: 0; -} - -.directory p { - margin: 0px; - white-space: nowrap; -} - -.directory div { - display: none; - margin: 0px; -} - -.directory img { - vertical-align: -30%; -} - -/* these are for tree view when not used as main index */ - -.directory-alt { - font-size: 100%; - font-weight: bold; -} - -.directory-alt h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -.directory-alt > h3 { - margin-top: 0; -} - -.directory-alt p { - margin: 0px; - white-space: nowrap; -} - -.directory-alt div { - display: none; - margin: 0px; -} - -.directory-alt img { - vertical-align: -30%; -} - -/* @end */ - -address { - font-style: normal; - color: #333; -} diff --git a/ChibiOS_2.0.8/docs/rsc/eclipse003.jpg b/ChibiOS_2.0.8/docs/rsc/eclipse003.jpg deleted file mode 100644 index a5cee7998a89cc3e5c07b1846a59c29fd5bfac8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42621 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 z 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 T%nyi-o?k8p%X(DF|Gx^mzNh7 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 diff --git a/ChibiOS_2.0.8/docs/rsc/eclipse006.jpg b/ChibiOS_2.0.8/docs/rsc/eclipse006.jpg deleted file mode 100644 index fd56acdb50fbf6e272da55830d391667c63bb02c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15292 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%0A{*JPlk&r#?*F;u4}1P*lG}+V3VtnMv-Ip z^dR$-hbFCgxP(=;yKzFtfxd@~0?sa7I}cp#IlSv!$Fo(DtBx(2cVfv(H`^?mGtn*4 zL4h~cO1@1MPF~cpM14!BnBI+3J_*zA7)`ivvUGFlwvdZF2SNfm*^jO0O6c0}_VCxG z9c#Wzlvlf0Z{7LMMsp2I$GhCXdpElTrils$YpmE2;<{?xhV9&Yl`^BZEX!NXWh}IK z@dPgSX4UJ9gq>a)>0)* z-JYP>VdlPfvYX7zwi#h(wmq;>U={7&cC$$NaL1RO`CH|z8T_nXFKgm$SQgS5K1oSQ zYt`D)HPdI?ep2+_bT{G7v8roTI#+l9d$04#j(cq{%v;~`rhDnl z;}3ngi#)cUNPNuH+rpUVyzZpV&LhV~%eB_AT4dZ>ueNPt)-=g?EARc7lx8nydh&JZ zCXeodnVf3(u0_2}QxF?U}dxcK3t=HIJPX?6R)mEL@H=BmNv%*ecX z%_~o=6H<@=Dy%4UfR*u6)3bAi)|RaI)+|YT-Ee91CpVYWX;&|X3zQu`GNG|_^WlBl z*C^jU+ugbS%CmbhRhf*Af;F>TBX#;)J}k~laV=Wmy2oSJvBs)pGgf_jD69WE@Ai*d z$I7n8_qOr=wU~tK#_Q}UGvOHj-R(|>(08JcW&(9 z4>-*eeZO?N^aJB-+bwP%<|uj|1uJd30u^*ln>M*VT$@nNVLWrMwyUo3lU<^AwHof*{pL&e-}v_DN$D@HJ@)9=+*)S*){ZId*5tI7js!0? zOaCPvA)$7yuC5=$b<-UA!*^WVbZ7Mp)>kFJv!A{0TX-NN-NWpO$^IXaJ?lDVJr%hm zrIdTNL^?fU*^1qEZ-0H{a*{niBYUl2pHB+sW(mN-i*N5IHF*^vT7=H8k{NxahKKaqsHj z#pasZ=AOGaRrJO?HPOJL+l$m}F28g+l^8r}(KY2&Z+~6Ncr7+}cGX1HAJf~q?p<9M zx#>wz=Ep9jm$p|!L&c018C;k2KB)gEY3175%qtt#Z+vi5U;M|kZwc&0o!iv!%qhy+ z^=aqcgA*7}irHDcnrsoH#wz3bJn3!K)Cu==e{Cq)yea5)eQs)2VR3grJg#?y)+1ku@?dh8@ z@{K1XpuXc#-#M*3C8>zr8B0^XC+?Ho9ne!=s%*6|bw}ThwdaZ?qN{#9j1*8znB!4h zY2fi|-5V|Io!L`l_TIMQyA~9)`)+LE4B@%kz3Oy2@=cVbH5N>gE%H|nJnB?3Ve{ue zM(NOq-N8#!jQyTW`@LFB>}$Zw?Z0M}u6$Tp6yrWIUi}W+ltbAKyA!u>-Q?h>C~hJ? zF}r-_uhw~e>ppMQ*&BD!b<>%5A~SMgl2+N>>FnsU(_OWL^Pq%Ex6brw;e}eeyf&6E zSQ(i%Ejg?vZO`9hFH8S39g-@ zyIA*!Oyyr|z+YPF`{7=C!NQz^%C{!xMD1E#mmGKtAK<0wa4yU7CgVL8LCX~O{o~yp z9TMs;`ytTt>a#8mi&ILPT?v95PEotcl8ibY?a=4?I{h+VCugFZiL37s@2$aH-E*`O z16d6;FHR3iJ$38t!P&gmte7VsJ-6=2L}p2iTkHNPY5izr*`rfr_$y$dv0U4`paqd@ z3X_+x&D^bf^m@v!Lo5F@cW(`uFp;CcW6mEB?ep_>gT5wjjSHOj(wV)tH8k^xDl^aH zB1Nu+N_xVYbM%Bwqpnm%J^Q@vn2w;1pu%m|AT7I_f=sIt3pzl{m;3FP|6Y>#e0A-N zLp{6PJ7ZjqxCYA4?47$j%h@GMvwVA+`%H<5I_aFkKt}h&1tC)ncNTQa4nF?(KZBpp ze%{wx_@otNYWt=k+owViu`cCAk`guDtWocvjw-$0cVi7M#xt>#tJ1B)xI!IV=Apo{IO2 zUrkc6`J#3&b>XXZ3oQ?*9rfHZOKHd2?^Z_FHm&>hIpF4$nX~-;va&4h9*pgj)4H|x zX-A*N@(9t&C-Dp}0Wsmc4s$YMHyB@>HZ6UvaDG-|RXnTwL` z?bREtTSGRjSkngpfEY+ssvX9c)f-yybbHY?6_ldN{x`=o(Ffk~tSdijUeI&Z| z%3YmP8*k->e>b_T9~o8lT8O#1Fl5r7)zv|BN@BBHw=U~mal)}6reNo`Rh&B}=v7U2 zk9hyNspQJe!tHs>cq_v{CRrWwQOGvLPzlK)&cIj?g>wb4ByGLJ-Ji9Gd zxw<(>y3Wvl;?>r8CiXj-y?@MN4GXWRM+=%h+OaCq_(aH7zFpUOvUZEjNIRa|TW>vC zRY~FQ*%Ltv_i{Z+=vGWx+&jyXr86KZe%7tL5F^KTx2*hk#+BCGmR;`dTV>!mn@#6> z^o-lyYDT+M*6+R=W}P#+XNKao&&wy}>n>W^5v_mA-0$9Vd%GI*U7ybyTsqxv_~QMx zp4F#rZF}sda#209CZy5TBUVv0FeaQc!`5iKr@2VC>Gmas-Pz%q3YYn;RP^>7c6!9j zFC;y)av{5DOksJ-$q=pZwUw*%j7l!w3OaFG=gbwpXx{E67ZX!v8$1`8)-yZzoxqka zg(8M`mgP#RpVZj#&_QpnM2{jSUIN8@^{`Rk!|g-MdCa~XUc6SzAhsv) zUEZ$83*N_7eKb7zc7>wC;-ZsRYd5+SUU6i0Iec!J!NYglsi>1?q@7=^=oPf#V&M1N zsjlIEFFp!gFVxTzJ%K7i3CM;!|0!8d1CoV2KQYCZZtw+!A zl*?y!aU?ttN@!`V)Y8&gwCKm{X;T)23%d0b-JTJ6OHR2?X^}M z4iAJ9T_!@DcD4M`XNTHjm*q|-Zw{*p_cAQh_|Fiv%wA}+pw{uD&l-OBF0-9nLCEwI3%R29s9dYOLJ)eyS`SULAin}e8VqG?SvvaTIK9Ow^O}7&j3|4ME=;&f{ zP$;qZ^Yqs%yMlIxhK8PfHT&d_rJ9jJQa@?YWa_yS!VCo@Z=7H<|IAj`9T*tGFkMo=SeU{A!R0 z%5t23Ec2&knA5CeoH(&4!8=VRJ-V>dX~pk%TIRfmTwMzTJ&>-RZYucX4lz{Pw%H_rbh7LE@K;eJwV1 z#7}tKvtq&GB(2^ZtJbdCrk;IyTDM;N#WT@LdnW3J9pgFs(qD}wSnY9Jc8gz@%j%QD z+AS_Vs@(o@R(6}RG^a=WwQ#Ppxq1HV#QeI~*=jN7Mjb7WO!`+edxdKl9JhN9Oyj0$%#g_Hv%QJpJQB*GFEnE!(80i+-DSv2ez1hZPUr zo4mSsFTgoBL^l1fW3g%4#*$XPmo<6!%A~JwT+$2HEm&t%wd?pyElnG}Z5+3ky!h1f zQ_+G!t9QN4iiPQc4@%q%UfkoGweL&&l1H9#o0STq@(msL+04j4Qn+pVvI<>O#i&$H zBi>C1)&&@B%P6nwc=TPn{gP{A_4Ml5)ybuw^jrR{+j>Ok`5EDL)?0g` zE9slfd0BR`BJHNamv;-cyYDdN{8ANgEHHKE^204J7w1dn*4{na#U;qpw7TiWDxqWB zD_;CETe~Cv?OhA!hO4KFgVUm;cHKH~CX%-MY7yuY|v_scdLzwR~V zYb&{)=g#>zzq`QGXxD=6B|)#=O808#tuWF0GEMmD4vmgaT5knSIcM{GU(+4^2hHuWzyr1$twm0A1 z-SI@)@57GXg5FJi40~f+59cyH-Sb@S(QIg#?+TkYMSt=yvrGJk+lyxx*50)^`tH;1 zLN{Z6?;^oH7aJvJP28+fx#c3q$95Ji)lF#!FYjyJH)X*#t1r_Xm)&i-Y^1d3$(O=! zGjds^D>|Fh;}Zf>mASg!o4BxxC@4hlQrzyiEn4@kp>t<;%iFEr7qq^+<9n`($z4pg zq<3o}r<+QlO3rLix1U^^LhH+vzW5!Ty<_QR7W1_iqY_uUB=0}u_EzI?@2*2znmUiF zot+lq@ z&QI}&pVgy;o(&oE-L5q3EZMWGJT&ffcvN1QhVH?wt^01b;3qrd99vD$8}cwzTx{E^E85oZID`d+wyNyn1n=wGi5eDuz?lEZSbzn)fgay>7)_$KqmbWWk9uTFW_7OOqDvRpP!OL)=TNZ}_ICsv$V zk#|R{>~z0pRNn36wC@F;8y8p>?YMpRQYv>-fLo;9LxokV+HUA;ymeJQQK32YsNAFT zuEkG0Ep5$=a_;0V%-Q2^{dLc=7YBCyoMh#~mHRHzUrj=7g3E+x2S*vbja9O{e8Qf8 zS)W^VY*X5)Xz_A|9zUI9DW(eB7cA-LUwcBQaDz%6pMXo?!=$3~$+k98dXuj%uh|!~ zX0plESBLHHOPMUrdKB2*arw!IMy}(PSAJf+}S~arqAh>gg}SFrbUme+7IMD4Jps(g*rc6bJp>_9mR=R%d5WL;@zspQK0a( zU}s*%Z80U2$H&}0i8F5Hef{u6qEXk2F1IYd>A7Nx6OH`lUg5uav#grABqdp!-xMj(fVD7`$cvaZ(7XRtf)}FnaO2qDWfc_*~Fw1 z>Cc%~pRu~pR!#eEyypN7U|3myH(}T<9*NqVnqfjMZlq zv`o*>bk;?~v^FZm8c=S*75cPjdf>O|!=oSdgiuG(079+|Y_(el2SsUdNi zAv5EubX(atZ(BKC4pP0f?(_QzQ4?1ro88{DRAukk9Z4;VuBBOYEYfo7(0-U0Fb|sC zD_(s1uJxZ`$)a;Rww*2)n_DM(P{P%%>PmW_^{Z>4-Yx64WJ&MQU1jMKvnWDq;YFLd zX0sAk`*w#$m8#5`S@m3xr|o>V=4bP`ng))E>$I1=T%h#UXBEGqi+62OQc|w2%l)FM zmxw%kb=&To*u6iTujfAIGd<*c zG_s%bfO4JF9zVUu6(72aWOR}_ANi zSmEKh@?PT9L)Xn28Xt3s#vqAd1q&^9JIeY4GNzb>% zm-nP*tjqH#GnqQUI{wbG$NgNzK`i0?SxW3Chn6pP?Xf)4arEx?kJY~GbGPkXe^G1i zHp|k#w|CEF$~wKgI4|s+ZPVjFVh@h9e*3oR#Sh1+#|o!Be-sk+VeN9aTl!I@oo3ZX zZ=OD~lE<-~D|F+sh?%B`b3EJTy=Gaxk-uoxHl@yuoQ^Rp@kOtroxjO9-&?lj)b6u; zJo=ZXFW#IcHF>?zriWUqR;_xh-QpU0NJ%YRay|R~uWYk-W@d=(*e1P2Ga$LaWN}%} zqQa@neZMwey>R7j;Hg!+R?TBr^d^VV?)uC9e~*d1xp)8E{l66@yW{i^-hT1gasMhs zuPLvK4lcfNgt=#}ptbV4g9(QdCp>2~2{m%)^0E_B5_P#-lD2T`%|oyCO#Idb-kjoa z_K@}YEvFBu-0m}CTW7-3XZ}#4E9Ia~O2_u}U!m{HJtynun%+Ip^R-NQ_wLoDeY{6! zo;z{uOuOu}d&No1Pk!xPIWd=Q)#R~M#lJQsi;5DIpSB~5{k>}yA6e0LRXO>54L+(wlA8&%x zj)otIQEqNgeX{ZUyuPiui`Ol=A!zRONcq9hQ^wC)?o}*My4|uYS1GT+Rb-Z^lZjwR zsP`4AyoXEPhTWdp_NLrAbnlJArN?)h-R9oq{Jv9KRi?ARf0dSU=M;H~XG`;9RZCAV z`MLM#&1>((f6lhLR#qOQv2nY#<%e(Y&VTyc!{0a2;-c-3db#Cq3bWVs=8NTK7j21( z$|_-7H%ZC8a(7Sq)dftZqLX~5DX-_D4 z*U>!5g)0>nc&ZCd4h_5GB4`@3{|SVsFl-`x0F5WJRTD^N9>tFw!j6CD=7$09Z{UHjkhun$eLtLX z7cFAS_0gJc`hA(?_0E@i+2K2rHBYh^^y~e4eDR=s;xk!}T#W_pzLR8c@0ANYoH^CS zq$t?RrK-Mq%`th=^zawY-<-?r5DZ>_=e^iJ%dLFg!3_5zCrL7-%m@-XvE{x>Q0yts zzb6&V7iZ6o%Db%Dp8Nj%bfXLpv-Jjd+79!y__pPDcir|{uIO4mD>ZbB%Sp9&OWtNm z_Bt>Ev8?`UHbCD>zsoPq>WKct8s#q2)|Oj(4&OOv6`j(`N|#g8mA|{Uo>S5`@cG5H556pk zoOmlU?`g?Y!4rKk$z1yw&V)-w99Yt-8uNJ4a_-K(qI*|9RGL~jS9Qg_8DGqF^Y*LG zC|ovKS77GqpwKCaF0P@TzA2kJlqY@oxhS!)P;QE%rIzTa(n)X4UT5x}dhMo`>&MvB zb2JukYIj_e{`1Jpb;B*!J02RhavdLSDw!#D!Lz(~`CVI&32!f2ot}I#@lDH@;LNIB zX6;iYaye_Zn<|I6oZ`}4EvKAQpZ`v-{4hXuBljHEr#_KiiIc>bT{eXZ&(% zu)FBg!1yVQ>y~>4n>0t|om_4*WqPW)P|C?oa*=93Qa|)CX{1Y8rdsVY6eEvM5Qh^F+VHvO<`M$%Lnugh0mmunSw2WqK<)&_MX}PRP%D_l1#IiXLT1| z+;K-|;+jwMUuPb?DSM*pWOIz|p*R8;W0iN;+x<)Lq#dmYKX@(Q zEL^J2+s4ssZp*t1;eShiM9XIE*%@Y<>_qymp@O7)pT6EEgiYzV|SY8R7bt+Ek!&0*X>+X za{Tg=<+oG&`W6W8c(Bd#^82nl)ms{?mbRQ)XL;%EiRq+M#d{+ zxlUZ}#h2L5!uwqPpMi7Ugc}t%tBx<7Rk|tAz&ddur_#f~K>tZgYwB-R$Nx*eRCiAQ zUbyC8dC%23(Yp(mB_6&~vR)5KF8JT&TmKn8+fDvfSodk3_mU5N&vv(bmDN5y|J%Il z{~2a}nZLRF`;`9-TfXi8bAHL+Iq`dzPkL#iymQ?{TX(Nd&;Ksp`k&!ht@@isf1ldF zwO#+8!T6Z_|09%e|Y0mv5B3ly`4MhT4O!Ra&!_73|s69rfI$ z*vYLwb5mu^gh@{)@1Cx*YEx{?`rn`9bhVw2TwJCseDyxJ)SURQF_~WBQ?HP6iXWEM z-*Q;)Y0bgB&h_QJGw-U5-u?`We|i31)Rq_iN;>urH~wb`F%8>Y7drh{@%L#+OR}SE zgO;4t^m=j93v}#ZBQ7#Fd-`vKy1DDG@s?$;E&9)p#(#P1uY*e_eCT&q-Tbho^=p>p zzRz3V%DVHs^D%gm-ng?+R{X}JF5wi96}vq}#q$bVOneW{S>7916U}#fmC5@wcU$f`qw}_~ zkNfG9iy!&P{%0`yyu-uS@x!!jhGj`C+r)$2njWyI-OBvthqBem+db%2J;wp;7Ab6h_AEYi_K<&5_1&xuV9@+{^Xw3IX+a;r<6@Ga2x+?~0$ z>fM^@wcB3Wh6`SvSM=CQ?D@fKoiV{et|A{iE%gE`wJKisi8e2_2)NnKcY4iZx1@w~ zsnZsnWXSVa#`;jiN4cY;qixRR*X!4}w!6vknj~Hoxusnr!>zt(R~x%E)I?J>jQMXNuzUR3$uk-fWML&@^OnP#bnPOo`-a?Xvd zhR+|JG@ih;V3D5CGGD>y+(2=Q8}>orL2E@yIh*cN^_4y-nOceecF zhM$XfOKLq>cWF)R!`J;gXLaA~FU!0qx8wKB6?ks<-E$I@2|Z!==GJvZS1}zHfO4~=lvOpv$urHmYyzN z#GvtF)udH@f`XQ-*5=P;t@+)*Wbdy_>(Bn%8EYEu7rF2F#S2MEYH#DFEUgg-Zzrc< z^8?LxJ9q`{GQ!_O4Uc;I?~MHN?61wSvtGySzuEldZQX`U72{h$Q=gX>oSPu<&|de7 zDx0)AC;PD#np2N||Fr(lYM|C%)A5ARY&S#^1o@2+eeKtb+e}Z4HzxK3i&OCkIWjBmPjY@(i zFsrz>9(w$A^3geop@paRD;Srx7nm;=VXeF{>2aHooY+mFR}Oaa>{?!H^>z2D#?`Fu zGhLFnh2i$b`w}ni9SBr(pSth)kDq#1OuL?i&srp;Ct4Y{=}=ruXW{l08$9i_mb3<@ zRviA+)!pj&{A}^*sWqmh+h^-r1>MMrFk+u@S0wBzPxGPY51zUf&Pg@=dj07u-D^*- zwB4I8b7vyYj8k`1nsc6dia*=d^)Ar0Y*Mc8>c@Asp0_hTH#yhjv9_4%!Iy%wCG!oB zJQ6;-Gj!wW44agnt5!u9ww%|@(ANv=k;l&)*TxV5yc1Jp0At-|wq!HJX1GZ~moN{dMQYr!x0l`rq%3 zNIx|Hl(qdL@%_=utBrTQIF0T0?kH?^MaEaJ$tFv+7ptPqTcYp%D_s}==HRcg{Sl@& z*KIxhcZR*+_1A2ZoNbqC#+3(6y?BK!HzJR3OA4D{tfFF!#wwNM7A@!_s4GD;#AH$ro_cR1_|4KzwU zt=-RQSah2nHNe^t{F zSqi?*F4EmG-tO^B{kkoy!`Cccuzr5wm+AYXLX(U9zODBPS~LYbEef9>C6z(LQyG?O z#!719E%me!75KWdCHdE8n4fm(4m}}jF-eg1V&>23Lz8&AQcK*msi=4|)x+(L5Fte+Wkk3M; z9~XmPE$6awvB*8#b|yJAICaK@8&a#14+*-sK0Q4*U25^dC);BexTd`{W&I{!u)lTJ zo&&R7K2HD7Aa%ud@uKglQHiIlw_H`9!Os07c%G?9{Ogbz+gIIt+vqrN-NrVZup42W z>x2srFeeHLs$FsM%Tk`do^w`Ca!T1H8I>%CYqgZF!$H+hTgwmoszbinl33XW4yrLdBij{R4Eh!p6$7|?zGZPub@pAaW%t; z6K}G`JmBNbjZb~~i`>88TVwpt|EcW!i`@6uUfw(N&X-i!u3O9H@2;(ucbitd^xbo= zn~dE#aXKseyLHWXFa#G)TBPO~D6IWB#H$(BhTOGl(_Oo_7pBc=&edF~^5o?w_rxuF zRtI`swB&UOO!&d1lC?xjqiL1Lif+&jzqI~KeC<-mO{so2qv`JB;H-?;)R{(eYumPMbFADnA>ZT7w)+h?JWYZ`RpgAGXX$AbyqVQ> z_2RXz4M%3K&bg3#!Ov`gb8FR{2Y02@6qs{W!f)5FUZgU2$;mZ7%Tyg~x;#DQtdpAcL zGJP#FJzk^zdyWd)tRan#{9V1I%ZBdUT*!spO^3 z(N4)lmEZ3bGHz=KR!Q+b;VLK^8a_!W+_duiQjS}ney@1{ZFflZ1>4Hr(ye>5UWGGv zZ2Ub}BiZ`e-O}90M+=nZN#|}BDo>PJWxelt&MVt*Q5O3pWZ#u$+&y^z?%coSYdv1u zmfLG@mJOCIe)26nz4^$3%R1p6;-_V}@2>r~k?Eo2&cN6k&POs2Ix!to(n<*x=jzxW zTb_Nc?5_RVE%)7|-0m(D4|Xcbo7h)=aMF{La|4gv-`3s4D?G=IS9!NR&vCUmx~m!= zZoAbpcW(D(f!u?u^s1gcUNZIOD!v2T?=JFo-zdDgtHI{&(Wvt!;>AyzcLo}6R9@9~ zmgzr3+U%vtucqbc^iKVuT)^3{&$^}0@rXNjof+TJQ}2!mAMbj1cDk6b(wCDu$1>*T zPBf2k5H;szU=*#N;^w3=&os!zFFWGzvvVJ7c%nDl$uUkn|6Z|Uaqhd~{u7>^0;~%k zbgW$1eOuh(gGjmF-Bl~kUv`^yW!FL-t7(S|Qyv*wo%>>)^P2nJZozjijMDY9Y%Ve? zXK7?S$YZ-*;xg-z)hemKZtnY|RbFYDNxa+h<;7a%Nfw23)FMM~t+=_T`LKA|3~^5H zx=TX0w+3b{y)<8V_q4cI-_PFLA2$8k@5bv@$7Amt54(G%z9r}3*FFCk9zM@|&)pt4 zmo*~)E?v%ZpTp*`Yp1x3tegg4jgW|rnuZC-ueO8g zfu5HqzMpn{ePERPlIYpfSXC#)u4>CwdMEhd@T_GvioY)H-uU$Bq%YHwPo_Rk+SPM{ z?T(Y0uY)hcMZ3%#108)Ef%Tn1o6h?3)jp5By>?dO?5lktlE!oFY^MaV?!BJuBe=`t z6_dH*<1**U?4FE8A6IVCc3Vjmp#$AV>xmwl)(c*9UG$vm!HGAgC&r7rns4K4Hw^XX+%9eM>&VgI zNsF$R?YX_=t<)*8);%63S2vorUgMqReSVMdz1&0A)lta3Q_|nV_#1y3U_r3mP7rypwUevTdJDP57X`JvS zRh#YV$F07*d|vw)UEOY7!o7QKlrG2DD>6G954R+(E>8?S<|1Dfr0AiPF{MM)QA#+w z5@mr6c?WV)R`nw{707A^#GX}O_2xp!+GQe(c9<*Kh((oH&r~g&(4@31aF4#pFYV=J ze;{|~macLQ(=A=RKiBr#cK+0pfA3m;p;9Jc6yI13;7S9ap`@7})tvj~U)xVd# zzwKYU_VCT3`ts1KV9Ti)2)-X&QEB*6<55l1)xU!SBIee#_gtUrw_E4Gb`gAZQk?Tf z-=>ZwId6StEDJ50-u-IT+rCFz2b))qJ|i(Iw=GsHNALv)7bP{Cnf_ zTe^Mo{Wrn81?`SKeDnRcsG?U_|GOjp8+TOO{yS>DQTR=s-1+*AK_UxAMMuMdaC+$8 zwrf&;u!`B0hRkFG4!;e#PbSO_b-B|yf6n~RYn&fKTYc*tug|v=`4@QeufX14ccpKx zF1`pqj^%pPZgbetEZ3tpYV#iraRHs6_Hos9C);;t)x6yL%eU|OwN7x`lSZ-nJKeMX zY6Rtlot}Glbw%v1g{#eeS57LJR}w04r%*JIJ2THk^xvZOrXfefmhFBu*EV;{&XsDn z^?GAs#pZ6@Ex4a0)UL(ldB0fjkyZ1ozFb`VtoL`!s-v53dOeuPzvKFpZO!XsG=){v*Ot&ZH|3Yt0<|sew zo4WO+*~N=#Dc@!qv4*;+2&shnELv8-Gt2(5^5XsbcZJ{j_`CG(hCQEURbEX_y)LD? z`R2qB&cMQBJO75Jy=(c;U^n^4(%)HcT#XUxOMaYq@&5h0so(b0-HrLZ(Ej|Af0}i- zUT?0Q^l=f-=`OAvzTItl&1p%iT9mRnR90@;skHuV{L0J?p>{@A*1vx*tz9p_-M^== z@87?d@!7}UUOo7F&9@!(hn~*b@j0i9d-a)~3+%`C=}Zd0U!wl=%lxDIw|$#tew=vm z{{6e!Z!7-ps!1s+|Nh37p*ovkGaXAi3$=;#s)4Gk3(v?cuRC6lCFVrnzG_WWnqTeoYYpmIo(P5bu(iPF3KY#WyL{|r|ze*Uv({vrLF zZvPon?SGZ+y{^4Bpsaen{h5@1f_10L?doTo{G;@D>a}%iZ$0L_nqOA)eTR>EOQ>Uz zl2V8uqoAv@k*cGhNRU#9i)*OMg30e{{xcX({^9yt^UlwI$?6}vzlFwKUY$GLdrx#u z#`Unfla90>Ouap?voT?Y@P{}7(^DsSw79w+?0jk%{6%)&^Yfo2?OWnE%{@Q=nNdB* z{?yWyfw6GW9Z!!>UmvTcNW$OySB#b@N5?=-X*6srMf>pu~gg=7vnas zV9uTSQHm40{zmw()!MpzZCLkm@9RH{=1;ULVab)s{c$_G|D@rD?Rxc(njeSy{CE|W zqNXbBC-f~m;2f6A ze;=*be?M-PVUkkJszrIv_SzYJ_1JQ7A?w!W+@~M^tX_39*Y(#CN73N_3`eAXt{@9Y$tm##U(spmkj&6CYz3BH|smHku7wtCB$dodZnXyFL=V)lC3e)qWCxho- zl)j(uv;Ss5wV(d`*I~P2SBLwFWa@3?vzgIxCgZY~^ST|MUHX{3%_q1BOu6bQ5`4(f z<5iPg=iZVL>LZ@1NGS-hmB@<+#{PWg;Gu}vCo zT@BATKlv!urtElktmTU*x2A6I!d?B$ff0p`4>(IxU7uuJShQMSYr(Xl%qh=yoc;aw z<@DcL{Fz7p{-&XErdEdR6^_v!an-hQkirk{)rLxJjm;PRR@n`MCwbOS@mZ`}T^km&oyU8@feQG$9 z)}D#szgG%oszu+fpEUokb=>Qz*VeWEdR??VdgAP~`BN)OpSN^MO}OlIqf4kboYQF4 zk{K?pAN4{l)7bav#{Qjm_S>AeyJ@GkU18g}-Dgr+^%AzK%il6zn<^RYF7ulO4BL!52P z(L>CFNp@#eOjdEbueo(*Ud2t9+{;YvGn1Svj2z=Ks$Dj1*j_7MI+6PaTmQoi#rMjt zCe1k_{x*PRX5Xzf+bnj-Ps#nxvS^~f;$^E^mgP=;k8r2;qpSCCzPX=y^zGGK+E&qS zv56(KzP?K~52{T+Q+xA|hoa<6Nu=e#O*H0s2v#krhWr9tnz!|T&G z*De>|?)PJB`L}BGTZPr7YAVrLOD~K6JF|XY?|+6@UI-tpsLfW7$dc7A+_ZgR>T%1Q z72K_bJs#Rq;xhODUUei_ElL+rY@k%#Tk^fOBkq|jU2Qz^lIzExd^Ux-C;X%)Ei$V( zwXS}BOua<;deiOyB)_fl)h=7;b^4#d`?&1;E{s zw{q?N59hb~_gG(_b^AX9&+m{^u`7Z${bxW3z!i<^Ilpx@3`WBMlwpQrIzSXUtLGn+ yeSJ3fKSNvXs?)pj_ng}2yUlyrZH0u}y^Bn`I$J{Gmxj+bU3*z<%FG-8Zvp^WkLK6_ diff --git a/ChibiOS_2.0.8/docs/rsc/eclipse008.jpg b/ChibiOS_2.0.8/docs/rsc/eclipse008.jpg deleted file mode 100644 index f602fa81e44584ccc3409cac89047d7bb5e4f9ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19051 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

      Q=W6yx)*%D@mA~56wyBq z^;f);tCn4Ac_=>cj?Fh~uMJCC>n*%rS+~zSp6ORG{Yp8%ZQrFenxlpek1(D3?9i#n mRY}g%ehNlq882A!(ro8M;jE5Xo^@GQmufBa3R<-P|4jfN{SQX~ diff --git a/ChibiOS_2.0.8/docs/rsc/eclipse010.jpg b/ChibiOS_2.0.8/docs/rsc/eclipse010.jpg deleted file mode 100644 index d92381ba2c6fdc69f8d78a058f62b733210f81ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29039 zcmex=Bm<7<_#hv=|r|I2gd-|33zC=c3fa zlGGH1^30M9g^-L?1$R&1fd97{oEcb|Sy)(@Sy@lpt#g$Z)$59pwN;ji#J_THZn1D3=RvQJayVd z6{nEIvWb&68=Dt5HmjNzmU1L5QcG@HxaI#51_?$m09ggYj7-cd|Bo=}2r@D-F)=c+ zuz{QemShxS5;SBM7EuhG$l@53*!Y39(8y`w!HfTIG4L=mGB61;3o_U<{9>BAx?;!S zEm3N*>-2LJof4jS6njl;I}p;b$t5&qqG*vz=vwbI#m#rV#~aPudhY_)W9~a=$~GQP zo%zw_@;~bsZq;|YEcD{aL)L0~v1*1k9G=z_e43{^_HFwTXCAvREx9}WHot3DT<98_ z(;BW~^kDULsU63js+DZMw56KmN%iKwLp#^p{m-zwe7VWJ;D6j(Z|0i5HL3n5Rebf+ z)9F%eTcdum?~HhQ??%#>GaTD4?^?a-+*|Qn9#)R~sj`9L2V7l4qn%Diq`yCI`|akY z^Ik2p{~3Pda|$;ujaG6Jy)v^)Yw@-= ztMyHlY7ZH|kx~+Cmn=DY?4(P}M2^4^A5UW;*YKRpNmJwc+jojjIWzs?jgL7y-k9{O zbX?T$H~OL3p}66JQcq)SlE+%jMSW>AyEN6LW!F!rK6A!iNLYMfwcy)n=ZyT`%FpB0 z={}aQZpE_RnVpKiFP#kt4HXrp zR^K_jP&C+Nj_!%gX4b9`6z(l^+jC5^>_gMrYa#770)=iZ=GC-n=*WHMrO~vEV^x<& z*V}2nmlm?~6v;ikWWvUjGp~4~+tcIo3(JIr52>6GSzwyLd&KMtLodg+wJF_Oc!Me? zPoC#h@I_#H@wS)?v89r!D?Yyyim$mUvc>GQo1cY;lFJIERZT436S`Jer_L5x;aL$r z@x-z~8t7`oB697%+?(Rqg7wPN?q%rTEHpmv z)gv^?#O=M&5~GXH7tG6C>vn9ZlZ!h`Xb7)xhmi8NNOQ02`#xo#>|OXerTk5~`I1<5 z9*v%@Wz$!jb-1G%sy-pWaoOF%;+U(_AtFkFLT!h3L{Hk|Y;{x4Oyr2*tlbAE7H;#H zSXL`NU2thn$BzXkl?3g|ZgtG)e4@I-F;Fme(`jDq;w|^p=c&*Be&pP?MIWxK?U`}^ z?YVR9$vd}Q4qkdlrR=RPcT6UqyQ$B-xTn60LVgy7oE5B4-WIvh>&{#Alg~S!{rzaX zc6sJLe;a@E_nmWdty5=}tgSXz+cV>Cp7{>LH|2(9XDt#v!u2j)@Hk~{B zb(!fVdXg!tHE-olJ}-Rs_oMV^znf`uwRQe^6tH9%sTjBG70YHWGUz+|%**1_qO=CB z{EmhCPFadR*Si)Kt})Z|{;9h!;z8WovX`3_VwBCbw0B=Ccq>&9(6C8eFxW68W~yNI zm$%dEE^W8={Z#p=a(|7_>r6DekUTzj*-x8~Huv|bm2P=EEpxbQ%0AOAx}MLGJ9M7W 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

      )0Vo}fuPiKFr`-W3|;=8xA>?=6i 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 diff --git a/ChibiOS_2.0.8/docs/rsc/eclipse011.jpg b/ChibiOS_2.0.8/docs/rsc/eclipse011.jpg deleted file mode 100644 index 1da3052794bdd7dfd1a540c7bc4b514316f9153c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34286 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 diff --git a/ChibiOS_2.0.8/docs/rsc/eclipse013.jpg b/ChibiOS_2.0.8/docs/rsc/eclipse013.jpg deleted file mode 100644 index bc8441eef78427c65ae3917df23cb87b7edf5eea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60847 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

      e$ab?;Zp*-VU^)l6h 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 diff --git a/ChibiOS_2.0.8/docs/rsc/footer.html b/ChibiOS_2.0.8/docs/rsc/footer.html deleted file mode 100644 index 48990ae..0000000 --- a/ChibiOS_2.0.8/docs/rsc/footer.html +++ /dev/null @@ -1,4 +0,0 @@ -
      - - diff --git a/ChibiOS_2.0.8/docs/rsc/header.html b/ChibiOS_2.0.8/docs/rsc/header.html deleted file mode 100644 index dde4980..0000000 --- a/ChibiOS_2.0.8/docs/rsc/header.html +++ /dev/null @@ -1,17 +0,0 @@ - - -$title - - - - - - - - - - - -
      ChibiOS/RT LogoChibiOS/RT

      Architecture - Reference Manual - Guides
      -
      \ No newline at end of file diff --git a/ChibiOS_2.0.8/docs/rsc/layout.xml b/ChibiOS_2.0.8/docs/rsc/layout.xml deleted file mode 100644 index eba6d68..0000000 --- a/ChibiOS_2.0.8/docs/rsc/layout.xml +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ChibiOS_2.0.8/docs/rsc/logo.png b/ChibiOS_2.0.8/docs/rsc/logo.png deleted file mode 100644 index 7948daefba4efcb498af91a331000ae5ac87c406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16818 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 F1OWWGs6+q& diff --git a/ChibiOS_2.0.8/docs/rsc/tabs.css b/ChibiOS_2.0.8/docs/rsc/tabs.css deleted file mode 100644 index 16b1be0..0000000 --- a/ChibiOS_2.0.8/docs/rsc/tabs.css +++ /dev/null @@ -1,102 +0,0 @@ -/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ - -DIV.tabs -{ - float : left; - width : 100%; - background : url("tab_b.gif") repeat-x bottom; - margin-bottom : 4px; -} - -DIV.tabs UL -{ - margin : 0px; - padding-left : 10px; - list-style : none; -} - -DIV.tabs LI, DIV.tabs FORM -{ - display : inline; - margin : 0px; - padding : 0px; -} - -DIV.tabs FORM -{ - float : right; -} - -DIV.tabs A -{ - float : left; - background : url("tab_r.gif") no-repeat right top; - border-bottom : 1px solid #84B0C7; - font-size : 8px; - font-weight : bold; - text-decoration : none; -} - -DIV.tabs A:hover -{ - background-position: 100% -150px; -} - -DIV.tabs A:link, DIV.tabs A:visited, -DIV.tabs A:active, DIV.tabs A:hover -{ - color: #1A419D; -} - -DIV.tabs SPAN -{ - float : left; - display : block; - background : url("tab_l.gif") no-repeat left top; - padding : 5px 9px; - white-space : nowrap; -} - -DIV.tabs INPUT -{ - float : right; - display : inline; - font-size : 1em; -} - -DIV.tabs TD -{ - font-size : 8px; - font-weight : bold; - text-decoration : none; -} - - - -/* Commented Backslash Hack hides rule from IE5-Mac \*/ -DIV.tabs SPAN {float : none;} -/* End IE5-Mac hack */ - -DIV.tabs A:hover SPAN -{ - background-position: 0% -150px; -} - -DIV.tabs LI.current A -{ - background-position: 100% -150px; - border-width : 0px; -} - -DIV.tabs LI.current SPAN -{ - background-position: 0% -150px; - padding-bottom : 6px; -} - -DIV.navpath -{ - background : none; - border : none; - border-bottom : 1px solid #84B0C7; -} diff --git a/ChibiOS_2.0.8/docs/rsc/tool001.jpg b/ChibiOS_2.0.8/docs/rsc/tool001.jpg deleted file mode 100644 index f4a004fbab9e91fd9927fbc01654491c83a6d312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22548 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 RC~mdtrB~3@&F%kh0sst8PNe_< diff --git a/ChibiOS_2.0.8/docs/rsc/tool002.jpg b/ChibiOS_2.0.8/docs/rsc/tool002.jpg deleted file mode 100644 index c36767ea3ff3652c8f9f6fab67a71836b2490749..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47193 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

      wkE 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 XFiSgS9>c?O&VO5&1AWe%{(lnykxXYs diff --git a/ChibiOS_2.0.8/docs/rsc/workspace.png b/ChibiOS_2.0.8/docs/rsc/workspace.png deleted file mode 100644 index 689178c0b6ea28cca19c76df0ae5410ce0c75b3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20994 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 XTq*r2J*c07fq}u()z4*}Q$iB}VH&0W diff --git a/ChibiOS_2.0.8/docs/rsc/workspace.svg b/ChibiOS_2.0.8/docs/rsc/workspace.svg deleted file mode 100644 index acc5de2..0000000 --- a/ChibiOS_2.0.8/docs/rsc/workspace.svg +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - Workspace base Workspace top - - - Thread Structure intctx Structure Thread Stack Stack Pointer - - - - Thread Local Storage - chThdLS() Stack Limit - - - extctx Structure INT_REQUIRED_STACK - diff --git a/ChibiOS_2.0.8/docs/src/architecture.dox b/ChibiOS_2.0.8/docs/src/architecture.dox deleted file mode 100644 index bd6be0a..0000000 --- a/ChibiOS_2.0.8/docs/src/architecture.dox +++ /dev/null @@ -1,268 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page architecture Architecture - * @brief ChibiOS/RT General Architecture - * - @ref components - * - @ref dependencies - * - @ref kernel_arch - * - @ref hal_arch - * . - * @section components Components - * ChibiOS/RT is composed of several major components, each component can be - * composed of one of more subsystems. The main components are: - * - Kernel, this is the platform independent part of the OS kernel. - * - HAL, this component contains a set of abstract device drivers - * that offer a common I/O API to the application across all the support - * platforms. The HAL code is totally portable across platforms. - * - Port, this is the platform dependent part of the OS kernel. This - * component is responsible of the system startup, interrupts abstraction, - * lock/unlock primitives, context switch related structures and code.
      - * The component usually contains very little code because the OS is very - * portable but the quality of the implementation of the Port component - * affects heavily the performance of the ported OS. It is probably the - * most critical part of the whole OS. - * - Platform, this component contains a set of device drivers - * implementations. - * - Various, a library of various extra components that do not belong - * to any particular component but can make life easier while developing an - * embedded application. - * . - * @section dependencies Dependencies - * The following diagram shows the relationships among the various components - * that compose the system:

      - * @dot - digraph example { - node [shape=rectangle, fontname=Helvetica, fontsize=8, - fixedsize="true", width="1.0", height="0.25"]; - edge [fontname=Helvetica, fontsize=8]; - - Application [label="Application"]; - HAL [label="HAL"]; - Platform [label="Platform"]; - Kernel [label="Kernel"]; - Port [label="Port"]; - HW [label="Hardware", style="filled", width="3.0", height="0.3"]; - - Application -> Kernel; - Application -> HAL; - Application -> HW [label=" (not recommended)"]; - HAL -> Platform; - HAL -> Kernel; - Platform -> Kernel; - Platform -> HW; - Kernel -> Port; - Port -> HW; - } - * @enddot - * - * @section kernel_arch Kernel Architecture - * The kernel itself is very modular and is composed of several subsystems, - * most subsystems are optional and can be switched of in the kernel - * configuration file @p chconf.h.
      - * The current kernel subsystems are divided in five categories: - * - @ref base, this category contains the mandatory kernel - * subsystems: - * - @ref system, low level locks, initialization. - * - @ref time, virtual timers and time APIs. - * - @ref scheduler, scheduler APIs, all the higher level synchronization - * mechanism are implemented through this subsystem, it is very flexible - * but not recommended for direct use in user code. - * - @ref threads, thread-related APIs. - * . - * Base services diagram:

      - * @dot - digraph example { - node [shape=rectangle, fontname=Helvetica, fontsize=8, - fixedsize="true", width="1.0", height="0.25"]; - edge [fontname=Helvetica, fontsize=8]; - - Threads -> Scheduler; - Scheduler-> System; - Scheduler-> Timers; - System-> Timers; - } - * @enddot - * - @ref synchronization, this category contains the synchronization-related - * subsystems, each one of the provided mechanism can be configured out of - * the kernel if not needed. - * - @ref semaphores, counter semaphores subsystem. - * - @ref mutexes, mutexes subsystem with support to the priority inheritance - * algorithm (fully implemented, any depht). - * - @ref condvars, condition variables, together with mutexes the condition - * variables allow the implementation of monitor constructs. - * - @ref events, event sources and event flags with flexible support for - * and/or conditions and automatic dispatching to handler functions. - * - @ref messages, lightweight synchronous messages. - * - @ref mailboxes, asynchronous messages queues. - * . - * All the synchronization mechanisms are built on top of the Scheduler APIs - * except Mailboxes that are build on top of Semaphores and Condition - * Variables that implicitly refer to Mutexes:

      - * @dot - digraph example { - node [shape=rectangle, fontname=Helvetica, fontsize=8, - fixedsize="true", width="1.0", height="0.25"]; - edge [fontname=Helvetica, fontsize=8]; - - Semaphores -> Scheduler; - Mutexes -> Scheduler; - Condvars -> Scheduler; - Condvars -> Mutexes; - Events -> Scheduler; - Messages -> Scheduler; - Mailboxes -> Semaphores; - } - * @enddot - * - @ref memory, memory management, multiple non-alternative schemes are - * available: - * - @ref memcore, centralized core memory manager, this subsystems is used - * by the other allocators in order to get chunks of memory in a consistent - * way. - * - @ref heaps, central heap manager using a first fit strategy, it also - * allow the creation of multiple heaps in order to handle non uniform - * memory areas. - * - @ref pools, very fast fixed size objects allocator. - * - @ref threads (dynamic), usually threads are static objects in ChibiOS/RT - * but there is the option for dynamic threads management, please see the - * article @ref article_lifecycle. - * . - * The various allocators follow a precise hierarchy:

      - * @dot - digraph example { - node [shape=rectangle, fontname=Helvetica, fontsize=8, - fixedsize="true", width="1.0", height="0.25"]; - edge [fontname=Helvetica, fontsize=8]; - - Core [label="Core Allocator"]; - Dynamic [label="Dynamic Threads"]; - Heaps [label="Dynamic Heaps"]; - Pools [label="Memory Pools"]; - C [label="C-runtime"]; - - Dynamic -> Heaps; - Dynamic -> Pools; - Heaps -> Core; - Pools -> Core; - C -> Core; - } - * @enddot - * Please also see the article @ref article_manage_memory. - * - @ref io_support, the kernel also provides mechanisms and abstract data - * interfaces that can be used by non-kernel components, the HAL as example. - * - @ref data_streams, abstract streams interface. - * - @ref io_channels, abstract I/O channels that inherits from the abstract - * stream interface. - * - @ref io_queues, generic, byte wide, I/O queues APIs. - * . - * - @ref debug, debug services and APIs. The @ref registry susystem can be - * seen as part of the debug category even if it finds use in non-debug - * roles. - * . - * @section hal_arch HAL Architecture - * The HAL is a collection of abstract device drivers, it relies on the - * Platform component for the low level implementation on specific - * hardware.
      - * The current internal HAL organization is the following:

      - * @dot - digraph example { - rankdir="LR"; - - node [shape=rectangle, fontname=Helvetica, fontsize=8, - fixedsize="true", width="1.0", height="0.25"]; - edge [fontname=Helvetica, fontsize=8]; - - subgraph cluster_HAL { - node [shape=rectangle, fontname=Helvetica, fontsize=8, - fixedsize="true", width="0.6", height="0.25"]; - ADC [label="ADC"]; - CAN [label="CAN"]; - HAL [label="HAL"]; - MAC [label="MAC"]; - PAL [label="PAL"]; - PWM [label="PWM"]; - SER [label="SER"]; - SPI [label="SPI"]; - MMC_SD [label="MMC/SD"]; - color = blue; - label = "HAL"; - } - - subgraph cluster_Platform { - node [shape=rectangle, fontname=Helvetica, fontsize=8, - fixedsize="true", width="0.6", height="0.25"]; - ADC_LLD [label="ADC_LLD"]; - CAN_LLD [label="CAN_LLD"]; - HAL_LLD [label="HAL_LLD"]; - MAC_LLD [label="MAC_LLD"]; - PAL_LLD [label="PAL_LLD"]; - PWM_LLD [label="PWM_LLD"]; - SER_LLD [label="SER_LLD"]; - SPI_LLD [label="SPI_LLD"]; - color = blue; - label = "Platform"; - } - - node [shape=rectangle, fontname=Helvetica, fontsize=8, - fixedsize="true", width="1", height="0.5"]; - edge [fontname=Helvetica, fontsize=8]; - - Application [label="Application"]; - HW [label="Hardware", style="filled"]; - - ADC -> ADC_LLD; - CAN -> CAN_LLD; - HAL -> HAL_LLD; - MAC -> MAC_LLD; - PAL -> PAL_LLD; - PWM -> PWM_LLD; - SER -> SER_LLD; - SPI -> SPI_LLD; - MMC_SD -> SPI [constraint=false]; - - Application -> ADC; - Application -> CAN; - Application -> HAL; - Application -> MAC; - Application -> PAL; - Application -> PWM; - Application -> SER; - Application -> SPI; - Application -> MMC_SD; - ADC_LLD -> HW; - CAN_LLD -> HW; - HAL_LLD -> HW; - MAC_LLD -> HW; - PAL_LLD -> HW; - PWM_LLD -> HW; - SER_LLD -> HW; - SPI_LLD -> HW; - } - * @enddot - *
      - * See @ref IO for details about the various HAL subsystems. - */ diff --git a/ChibiOS_2.0.8/docs/src/articles.dox b/ChibiOS_2.0.8/docs/src/articles.dox deleted file mode 100644 index 88990b4..0000000 --- a/ChibiOS_2.0.8/docs/src/articles.dox +++ /dev/null @@ -1,73 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page articles Articles and Code Samples - * ChibiOS/RT Articles and Code Samples: - * - @subpage page_general - * - @subpage page_kb - * - @subpage page_howtos - * . - */ - -/** - * @page page_general General - * Articles and guides not necessarily related to ChibiOS/RT. - * - @subpage article_eclipse - * - @subpage article_eclipse2 - * - @subpage article_jitter - * . - */ - -/** - * @page page_kb Knowledge Base - * Articles and guides about ChibiOS/RT. - * - @subpage article_integrationguide - * - @subpage article_portguide - * - @subpage article_events - * - @subpage article_debug - * - @subpage article_stacks - * - @subpage article_roundrobin - * - @subpage article_lifecycle - * - @subpage article_mutual_exclusion - * - @subpage article_atomic - * - @subpage article_saveram - * - @subpage article_timing - * - @subpage article_design - * . - */ - -/** - * @page page_howtos How To's - * Articles describing how to implement specific tasks using ChibiOS/RT. - * - @subpage article_create_thread - * - @subpage article_interrupts - * - @subpage article_wakeup - * - @subpage article_manage_memory - * - @subpage article_stop_os - * . - */ - diff --git a/ChibiOS_2.0.8/docs/src/atomic.dox b/ChibiOS_2.0.8/docs/src/atomic.dox deleted file mode 100644 index 6919b3e..0000000 --- a/ChibiOS_2.0.8/docs/src/atomic.dox +++ /dev/null @@ -1,64 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_atomic Invoking multiple primitives as a single atomic operation - * It is often necessary to invoke multiple operations involving a - * reschedule as a single atomic operation.
      - * ChibiOS/RT already implements APIs that perform complex operations, as - * example the API @p chSemSignalWait() performs two operations atomically.
      - * If more complex operations are required in your application then it is - * possible to build macro-operations, see the following example: - * @code - chSysLock(); - - chSemSignalI(&sem1); - chSemSignalI(&sem2); - chMtxUnlockS(); - chSchRescheduleS(); - - chSysUnlock(); - * @endcode - * The above example performs a signal operation on two semaphores, unlocks the - * last acquired mutex and finally performs a reschedule. All the operations - * are performed atomically.
      - * An hypothetical @p chSemSignalSignalWait() operation could be implemented as - * follow: - * @code - chSysLock(); - - chSemSignalI(&sem1); - chSemSignalI(&sem2); - chSemWaitS(&Sem3); /* May reschedule or not. */ - chSchRescheduleS(); /* This one reschedules if necessary. */ - - chSysUnlock(); - * @endcode - * In general multiple @ref I-Class and (non rescheduling) @ref S-Class APIs - * can be included and the block is terminated by a rescheduling @ref S-Class - * API. An extra @p chSchRescheduleS() can be present at the very end of the - * block, it only reschedules if a reschedule is still required. - */ diff --git a/ChibiOS_2.0.8/docs/src/concepts.dox b/ChibiOS_2.0.8/docs/src/concepts.dox deleted file mode 100644 index 71bafbf..0000000 --- a/ChibiOS_2.0.8/docs/src/concepts.dox +++ /dev/null @@ -1,290 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page concepts Kernel Concepts - * @brief ChibiOS/RT Kernel Concepts - * - @ref naming - * - @ref api_suffixes - * - @ref interrupt_classes - * - @ref system_states - * - @ref scheduling - * - @ref thread_states - * - @ref priority - * - @ref warea - * . - * @section naming Naming Conventions - * ChibiOS/RT APIs are all named following this convention: - * @a ch\\\(). - * The possible groups are: @a Sys, @a Sch, @a Time, @a VT, @a Thd, @a Sem, - * @a Mtx, @a Cond, @a Evt, @a Msg, @a SequentialStream, @a IO, @a IQ, @a OQ, - * @a Dbg, @a Core, @a Heap, @a Pool. - * - * @section api_suffixes API Names Suffixes - * The suffix can be one of the following: - * - None, APIs without any suffix can be invoked only from the user - * code in the Normal state unless differently specified. See - * @ref system_states. - * - @anchor I-Class "I", I-Class APIs are invokable only from the - * I-Locked or S-Locked states. See @ref system_states. - * - @anchor S-Class "S", S-Class APIs are invokable only from the - * S-Locked state. See @ref system_states. - * . - * Examples: @p chThdCreateStatic(), @p chSemSignalI(), @p chIQGetTimeout(). - * - * @section interrupt_classes Interrupt Classes - * In ChibiOS/RT there are three logical interrupt classes: - * - Regular Interrupts. Maskable interrupt sources that cannot - * preempt (small parts of) the kernel code and are thus able to invoke - * operating system APIs from within their handlers. The interrupt handlers - * belonging to this class must be written following some rules. See the - * @ref system APIs group and @ref article_interrupts. - * - Fast Interrupts. Maskable interrupt sources with the ability - * to preempt the kernel code and thus have a lower latency and are less - * subject to jitter, see @ref article_jitter. Such sources are not - * supported on all the architectures.
      - * Fast interrupts are not allowed to invoke any operating system API from - * within their handlers. Fast interrupt sources may, however, pend a lower - * priority regular interrupt where access to the operating system is - * possible. - * - Non Maskable Interrupts. Non maskable interrupt sources are - * totally out of the operating system control and have the lowest latency. - * Such sources are not supported on all the architectures. - * . - * The mapping of the above logical classes into physical interrupts priorities - * is, of course, port dependent. See the documentation of the various ports - * for details. - * - * @section system_states System States - * When using ChibiOS/RT the system can be in one of the following logical - * operating states: - * - Init. When the system is in this state all the maskable - * interrupt sources are disabled. In this state it is not possible to use - * any system API except @p chSysInit(). This state is entered after a - * physical reset. - * - Normal. All the interrupt sources are enabled and the system APIs - * are accessible, threads are running. - * - Suspended. In this state the fast interrupt sources are enabled but - * the regular interrupt sources are not. In this state it is not possible - * to use any system API except @p chSysDisable() or @p chSysEnable() in - * order to change state. - * - Disabled. When the system is in this state both the maskable - * regular and fast interrupt sources are disabled. In this state it is not - * possible to use any system API except @p chSysSuspend() or - * @p chSysEnable() in order to change state. - * - Sleep. Architecture-dependent low power mode, the idle thread - * goes in this state and waits for interrupts, after servicing the interrupt - * the Normal state is restored and the scheduler has a chance to reschedule. - * - S-Locked. Kernel locked and regular interrupt sources disabled. - * Fast interrupt sources are enabled. @ref S-Class and @ref I-Class APIs are - * invokable in this state. - * - I-Locked. Kernel locked and regular interrupt sources disabled. - * @ref I-Class APIs are invokable from this state. - * - Serving Regular Interrupt. No system APIs are accessible but it is - * possible to switch to the I-Locked state using @p chSysLockFromIsr() and - * then invoke any @ref I-Class API. Interrupt handlers can be preemptable on - * some architectures thus is important to switch to I-Locked state before - * invoking system APIs. - * - Serving Fast Interrupt. System APIs are not accessible. - * - Serving Non-Maskable Interrupt. System APIs are not accessible. - * - Halted. All interrupt sources are disabled and system stopped into - * an infinite loop. This state can be reached if the debug mode is activated - * and an error is detected or after explicitly invoking - * @p chSysHalt(). - * . - * Note that the above states are just Logical States that may have no - * real associated machine state on some architectures. The following diagram - * shows the possible transitions between the states: - * - * @dot - digraph example { - rankdir="LR"; - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"]; - edge [fontname=Helvetica, fontsize=8]; - init [label="Init", style="bold"]; - norm [label="Normal", shape=doublecircle]; - susp [label="Suspended"]; - disab [label="Disabled"]; - slock [label="S-Locked"]; - ilock [label="I-Locked"]; - slock [label="S-Locked"]; - sleep [label="Sleep"]; - sri [label="SRI"]; - init -> norm [label="chSysInit()"]; - norm -> slock [label="chSysLock()", constraint=false]; - slock -> norm [label="chSysUnlock()"]; - norm -> susp [label="chSysSuspend()"]; - susp -> disab [label="chSysDisable()"]; - norm -> disab [label="chSysDisable()"]; - susp -> norm [label="chSysEnable()"]; - disab -> norm [label="chSysEnable()"]; - slock -> ilock [label="Context Switch", dir="both"]; - norm -> sri [label="Regular IRQ", style="dotted"]; - sri -> norm [label="Regular IRQ return", fontname=Helvetica, fontsize=8]; - sri -> ilock [label="chSysLockFromIsr()", constraint=false]; - ilock -> sri [label="chSysUnlockFromIsr()", fontsize=8]; - norm -> sleep [label="Idle Thread"]; - sleep -> sri [label="Regular IRQ", style="dotted"]; - } - * @enddot - * Note, the SFI, Halted and SNMI states were not shown - * because those are reachable from most states: - * - * @dot - digraph example { - rankdir="LR"; - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"]; - edge [fontname=Helvetica, fontsize=8]; - any1 [label="Any State\nexcept *"]; - any2 [label="Any State"]; - sfi [label="SFI"]; - halt [label="Halted"]; - SNMI [label="SNMI"]; - any1 -> sfi [style="dotted", label="Fast IRQ"]; - sfi -> any1 [label="Fast IRQ return"]; - any2 -> halt [label="chSysHalt()"]; - any2 -> SNMI [label="Synchronous NMI"]; - any2 -> SNMI [label="Asynchronous NMI", style="dotted"]; - SNMI -> any2 [label="NMI return"]; - halt -> SNMI [label="Asynchronous NMI", style="dotted"]; - SNMI -> halt [label="NMI return"]; - } - * @enddot - * @attention * except: Init, Halt, SNMI, Disabled. - * - * @section scheduling Scheduling - * The strategy is very simple the currently ready thread with the highest - * priority is executed. If more than one thread with equal priority are - * eligible for execution then they are executed in a round-robin way, the - * CPU time slice constant is configurable. The ready list is a double linked - * list of threads ordered by priority.

      - * @dot - digraph example { - rankdir="LR"; - - node [shape=square, fontname=Helvetica, fontsize=8, - fixedsize="true", width="0.6", height="0.5"]; - edge [fontname=Helvetica, fontsize=8]; - - subgraph cluster_running { - node [shape=square, fontname=Helvetica, fontsize=8, - fixedsize="true", width="0.6", height="0.5"]; - currp [label="'currp'\npointer", style="bold"]; - T4 [label="Tuser(4)\nprio=100"]; - label = "Currently Running Thread"; - penwidth = 0; - } - - subgraph cluster_rlist { - node [shape=square, fontname=Helvetica, fontsize=8, - fixedsize="true", width="0.6", height="0.5"]; - rh [label="ready list\nheader\nprio=0", style="bold"]; - Ti [label="Tidle\nprio=1"]; - Tm [label="Tmain\nprio=64"]; - T1 [label="Tuser(1)\nprio=32"]; - T2 [label="Tuser(2)\nprio=32"]; - T3 [label="Tuser(3)\nprio=80"]; - label = "Threads Ready for Execution"; - penwidth = 0; - } - - currp -> T4 - rh -> Ti -> T1 -> T2 -> Tm -> T3 -> rh [label="p_next"]; - rh -> T3 -> Tm -> T2 -> T1 -> Ti -> rh [label="p_prev"]; - } - * @enddot - *
      - * Note that the currently running thread is not in the ready list, the list - * only contains the threads ready to be executed but still actually waiting. - * - * @section thread_states Threads States - * The image shows how threads can change their state in ChibiOS/RT.
      - * @dot - digraph example { - /*rankdir="LR";*/ - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"]; - edge [fontname=Helvetica, fontsize=8]; - start [label="Start", style="bold"]; - run [label="Running"]; - ready [label="Ready"]; - suspend [label="Suspended"]; - sleep [label="Sleeping"]; - stop [label="Stop", style="bold"]; - start -> suspend [label="chThdInit()", constraint=false]; - start -> run [label="chThdCreate()"]; - start -> ready [label="chThdCreate()"]; - run -> ready [label="Reschedule", dir="both"]; - suspend -> run [label="chThdResume()"]; - suspend -> ready [label="chThdResume()"]; - run -> sleep [label="chSchGoSleepS()"]; - sleep -> run [label="chSchWakepS()"]; - sleep -> ready [label="chSchWakepS()"]; - run -> stop [label="chThdExit()"]; - } - * @enddot - * - * @section priority Priority Levels - * Priorities in ChibiOS/RT are a contiguous numerical range but the initial - * and final values are not enforced.
      - * The following table describes the various priority boundaries (from lowest - * to highest): - * - @p IDLEPRIO, this is the lowest priority level and is reserved for the - * idle thread, no other threads should share this priority level. This is - * the lowest numerical value of the priorities space. - * - @p LOWPRIO, the lowest priority level that can be assigned to an user - * thread. - * - @p NORMALPRIO, this is the central priority level for user threads. It is - * advisable to assign priorities to threads as values relative to - * @p NORMALPRIO, as example NORMALPRIO-1 or NORMALPRIO+4, this ensures the - * portability of code should the numerical range change in future - * implementations. - * - @p HIGHPRIO, the highest priority level that can be assigned to an user - * thread. - * - @p ABSPRO, absolute maximum software priority level, it can be higher than - * @p HIGHPRIO but the numerical values above @p HIGHPRIO up to @p ABSPRIO - * (inclusive) are reserved. This is the highest numerical value of the - * priorities space. - * . - * @section warea Threads Working Area - * Each thread has its own stack, a Thread structure and some preemption - * areas. All the structures are allocated into a "Thread Working Area", - * a thread private heap, usually statically declared in your code. - * Threads do not use any memory outside the allocated working area - * except when accessing static shared data.

      - * @image html workspace.png - *
      - * Note that the preemption area is only present when the thread is not - * running (switched out), the context switching is done by pushing the - * registers on the stack of the switched-out thread and popping the registers - * of the switched-in thread from its stack. - * The preemption area can be divided in up to three structures: - * - External Context. - * - Interrupt Stack. - * - Internal Context. - * . - * See the @ref core documentation for details, the area may change on - * the various ports and some structures may not be present (or be zero-sized). - */ diff --git a/ChibiOS_2.0.8/docs/src/createthread.dox b/ChibiOS_2.0.8/docs/src/createthread.dox deleted file mode 100644 index ae1a19a..0000000 --- a/ChibiOS_2.0.8/docs/src/createthread.dox +++ /dev/null @@ -1,194 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_create_thread How to create a thread - * At the system startup there are already two active threads: - * - Idle thread. This thread has the lowest priority in the system so - * it runs only when the other threads in the system are sleeping. This - * threads usually switches the system in a low power mode and does nothing - * else. - * - Main thread. This thread executes your @p main() function at - * startup. The main thread is created at the @p NORMALPRIO level but it - * can change its own priority if required. It is from the main thread - * that the other threads are usually created. - * . - * There are two kind of threads in ChibiOS/RT: - * - Static Threads. This kind of threads are statically allocated in - * memory. The memory used by the thread cannot reused except for restarting - * the threads. - * - Dynamic Threads. Threads created by allocating memory from a memory - * heap or a memory pool. - * . - *

      Creating a static thread

      - * In order to create a static thread a working area must be declared using - * the macro @p WORKING_AREA as shown: - * @code -static WORKING_AREA(myThreadWorkingArea, 128); - * @endcode - * This macro reserves 128 bytes of stack for the thread and space for all - * the required thread related structures. The total size and the alignment - * problems are handled inside the macro, you only need to specify the pure - * stack size.
      - * A thread can be started by invoking @p chThdCreateStatic() as shown in this - * example: - * @code - Thread *tp = chThdCreateStatic(myThreadWorkingArea, - sizeof(myThreadWorkingArea), - NORMALPRIO, /* Initial priority. */ - myThread, /* Thread function. */ - NULL); /* Thread parameter. */ - * @endcode - * The variable tp receives the pointer to the thread object, it is taken - * by other APIs as parameter.
      - * Now a complete example: - * @code -/* -* * My simple application. - */ - -#include - -/* -* * Working area for the LED flashing thread. - */ -static WORKING_AREA(myThreadWorkingArea, 128); - -/* -* * LED flashing thread. - */ -static msg_t myThread(void *arg) { - - while (TRUE) { - LED_ON(); - chThdSleepMilliseconds(500); - LED_OFF(); - chThdSleepMilliseconds(500); - } -} - -int main(int argc, char *argv[]) { - - /* Starting the flashing LEDs thread.*/ - (void)chThdCreateStatic(myThreadWorkingArea, sizeof(myThreadWorkingArea), - NORMALPRIO, myThread, NULL); - . - . - . -} - * @endcode - * Note that the memory allocated to myThread() is statically defined and - * cannot be reused. Static threads are ideal for safety applications because - * there is no risk of a memory allocation failure because progressive heap - * fragmentation. - * - *

      Creating a dynamic thread using the heap allocator

      - * In order to create a thread from a memory heap is very easy: - * @code - Thread *tp = chThdCreateFromHeap(NULL, /* NULL = Default heap. */ - THD_WA_SIZE(128),/* Stack size. */ - NORMALPRIO, /* Initial priority. */ - myThread, /* Thread function. */ - NULL); /* Thread parameter. */ - * @endcode - * The memory is allocated from the spawned heap and the thread is started. - * Note that the memory is not freed when the thread terminates but when the - * thread final status (its return value) is collected by the spawning thread. - * As example: - * @code -static msg_t myThread(void *arg) { - - unsigned i = 10; - while (i > 0) { - LED_ON(); - chThdSleepMilliseconds(500); - LED_OFF(); - chThdSleepMilliseconds(500); - i--; - } - return (msg_t)i; -} - -int main(int argc, char *argv[]) { - - Thread *tp = chThdCreateFromHeap(NULL, THD_WA_SIZE(128), NORMALPRIO+1, - myThread, NULL); - if (tp == NULL) - chSysHalt(); /* Memory exausted. */ - - /* The main thread continues its normal execution.*/ - . - . - /* -* * Now waits for the spawned thread to terminate (if it has not terminated -* * already) then gets the thread exit message (msg) and returns the -* * terminated thread memory to the heap (default system heap in this -* * example). - */ - msg_t msg = chThdWait(tp); - . - . -} - * @endcode - * - *

      Creating a dynamic thread using the heap allocator

      - * A pool is a collection of equally sized memory blocks, creating a thread from - * a memry pool is very similar to the previous example but the memory of - * terminated threads is returned to the memory pool rather than to a heap: - * @code -static msg_t myThread(void *arg) { - - unsigned i = 10; - while (i > 0) { - LED_ON(); - chThdSleepMilliseconds(500); - LED_OFF(); - chThdSleepMilliseconds(500); - i--; - } - return (msg_t)i; -} - -int main(int argc, char *argv[]) { - - Thread *tp = chThdCreateFromMemoryPool(myPool, NORMALPRIO+1, myThread, NULL); - if (tp == NULL) - chSysHalt(); /* Pool empty. */ - - /* The main thread continues its normal execution.*/ - . - . - /* -* * Now waits for the spawned thread to terminate (if it has not terminated -* * already) then gets the thread exit message (msg) and returns the -* * terminated thread memory to the original memory pool. - */ - msg_t msg = chThdWait(tp); - . - . -} - * @endcode - */ diff --git a/ChibiOS_2.0.8/docs/src/credits.dox b/ChibiOS_2.0.8/docs/src/credits.dox deleted file mode 100644 index 0ba4d8b..0000000 --- a/ChibiOS_2.0.8/docs/src/credits.dox +++ /dev/null @@ -1,104 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page credits Copyright and Credits - * @brief Copyright and Credits - * - *

      Copyright Statement

      -@verbatim - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. -@endverbatim - * - *

      Contributions and Copyright Assignment

      - * If you plan to contribute code to the ChibiOS/RT project then there is a - * requirement you should be aware of: contributing code for inclusion in - * the ChibiOS/RT main line requires assigning the copyright on the - * contributed code to me (Giovanni Di Sirio).
      - * This may sound a bit strange but is pretty standard for this kind of - * projects, there are several reasons for this requirement: - * - ChibiOS/RT will probably also become a commercial product and it would - * not be possible to re-license the code without ownership. Note that the - * commercial product would not be a different or better product, just the - * same GPL product made available, on request, under a different license. - * The code will always be available to you under the current licensing - * terms. - * - Ownership is required when changing the licensing terms and this happens - * each time the project goes from development/unstable to stable and - * back because the addition/removal of the GPL linking exception. - * - It will be easier for the project adopters to have a single ownership - * point in case of licensing issues (both GPL or commercial). - * - Losing the ownership on the code could preclude me the opportunity to - * make this project a full time job as I hope. - * - I definitely don't want to have to sort out copyright related issues - * in the future so better be clear than sorry. - * . - * Note that contributions will always be welcome even without such copyright - * assignment, the difference is that the contributed code would not be - * merged into the main line, it will still made available as contributed - * code with the contributor(s) copyright notice intact.
      - * Submissions of code with copyright notice should only happen through - * email, please do not commit code with copyright notices directly on - * the repository.
      - * When submitting code please state clearly your intention to keep the - * copyright on your work by adding your own copyright notice within the - * source code and by clearly mentioning your intentions in the message. Code - * contributed without copyright notice will be considered donated.
      - * If in doubt with licensing issues please don't hesitate to contact me - * in order to sort out any problem you may have.
      - * Of course the copyright assignment does not mean you would not be - * recognized for your hard work, see the following section. - * - *

      Credits

      - * I want to thank all the people that directly or indirectly contributed - * to the project, I beg pardon if someone is missing: - * - Adamo Reggiani, working on the Fujitsu port. - * - Alexander Kozaruk, AT91SAM7S256 demo and description files for - * the Olimex SAM7-P256 board. - * - Brian Weaver, STM8 port, STM8 and STM32 testing and improvements. - * - Egon Carusi, STM32 port improvements, testing and bug fixes. - * - Enrico Cavazza, working on the Fujitsu port and a GUI subsystem. - * - Eric Weddington, because his work on WinAVR and helping me sorting - * out issues with the ChibiOS/RT license. - * - Isidoro Orabona, co-developer of the ChibiOS/RT grandfather back - * in 1988, it is a long long story involving a 6502 and a Z80... - * - Jacek, Ride7 demo for STM32 Primer. - * - Leon Woestenberg, CondVars idea and implementation, documentation - * improvements and a lot of other ideas, he also helped with the lwIP port - * (he is one of the developers of that project too). - * - Leszek Bednarz, H8S and ColdFire ports and drivers maintainer. - * - Liam Staskawicz, Posix simulator, AT91SAM7x and STM32 related - * contributions, general improvements, many bug fixes and excellent - * suggestions. - * - Michael Fischer, because the work on YAGARTO and the excellent - * feedback. - * - Riccardo Scanu, another long story, this time involving reverse - * engineering and giant robots... - * - Vladimir, first tested and fixed the AVR port, I don't know the - * surname but he has been the first contributor. - * - Walter Goossens, several fixes to the LPC21xx support. - * . - */ diff --git a/ChibiOS_2.0.8/docs/src/debug.dox b/ChibiOS_2.0.8/docs/src/debug.dox deleted file mode 100644 index d80defa..0000000 --- a/ChibiOS_2.0.8/docs/src/debug.dox +++ /dev/null @@ -1,145 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_debug Debugging ChibiOS/RT applications - * ChibiOS/RT offers several mechanisms that can help in the debug phase of - * the development cycle. - * - *

      What this guide does not cover

      - * This guide assumes knowledge in following areas: - * - General knowledge of embedded development. - * - RTOS concepts. - * - Setup of your specific target hardware and toolchain. - * - Knowledge of your toolchain. The guide will explain what you need to do, - * not how it is done using you specific debugger, compiler, JTAG probe and - * target hardware. - * . - *

      Helpful debugging configuration settings

      - * There are several settings in your kernel configuration file - * (see @ref templates/chconf.h) that you may want to enable during - * debugging and in general during the whole development process. - * - @p CH_OPTIMIZE_SPEED=FALSE, this disables inlining into the kernel code - * and makes it easier to debug using your debugger, you may also want - * to reduce or disable compiler optimizations (-O0 using GCC). - * - @p CH_DBG_ENABLE_CHECKS=TRUE, this setting enables the checks on the - * API parameters, useful to understand if you are passing wrong parameters - * to the OS functions. - * - @p CH_DBG_ENABLE_ASSERTS=TRUE, this setting enables the OS internal - * consistency checks, this can trap several kind of errors in the user - * code (or in the kernel itself). - * - @p CH_DBG_ENABLE_STACK_CHECK=TRUE, this setting enables checks on - * threads stack overflow. Note that this option is not available in - * all ports, check your port documentation. If not supported then it - * is silently ignored, see also the article @ref article_stacks. - * - @p CH_DBG_FILL_THREADS=TRUE, this setting enables the threads workspace - * filling, this can help examining the stack usage from your debugger. - * . - * Note that all the failed checks lock the kernel into the @p port_halt() - * function. In order to assess what triggered the lock the global variable - * @p panic_msg must be inspected using the debugger, the variable is a - * pointer to an error message (a zero terminated string), the pointer may - * contain @p NULL if the lock was triggered by a stack overflow. - * - *

      Common errors and symptoms

      - * There are some common errors while using an RTOS, use the following - * table as a check list, if your problem is not a generic programming error - * then probably it is one of the following common RTOS/embedded related - * mistakes: - * - Insufficient stack allocated to one or more threads.
      - * Common symptoms: - * - Target instability. - * - Target locked into the @p port_halt() function. - * - Target trapped into an exception handler (architecture dependent). - * - Target apparent self reset (not real resets usually). - * . - * - Insufficient stack allocated to the IRQ stack (in those architectures - * that have a separate IRQ stack, ARM as example).
      - * Common symptoms: - * - Target instability. - * - Target trapped into an exception handler (architecture dependent). - * - Target apparent self reset (not real resets usually). - * . - * - Use of a non reentrant function from within an interrupt handler, as - * example most C runtime functions.
      - * Common symptoms: - * - Target instability. - * - Unexpected application behavior. - * . - * - Missing use of a mutual exclusion mechanism to protect data - * (or non reentrant code) shared among multiple threads and/or - * threads and interrupt handlers, see also the article - * @ref article_mutual_exclusion.
      - * Common symptoms: - * - Target instability. - * - Unexpected application behavior. - * . - * - Use of S-class or I-class APIs outside a proper lock state, see the - * @ref concepts article, specifically the @ref api_suffixes and - * @ref system_states sections.
      - * Common symptoms: - * - Target instability. - * - Target trapped into an exception handler (architecture dependent). - * - Target apparent self reset (not real resets usually). - * . - * - Use of a non I-class API from an interrupt handler, see the - * @ref concepts article, specifically the @ref api_suffixes and - * @ref system_states sections.
      - * Common symptoms: - * - Target instability. - * - Target trapped into an exception handler (architecture dependent). - * - Target apparent self reset (not real resets usually). - * . - * - Wrong threads priority assignment. One of the most critical things - * to do when designing an RTOS based application is to assign correct - * priorities to the threads in the system.
      - * Common symptoms: - * - Excessive or unpredictable response times. - * - Threads that appear to be never executed (CPU intensive threads at - * higher priority). - * . - * . - *

      General suggestions

      - * For the less expert users, there are several things you may do in order - * to minimize the need for debugging: - * - Read carefully the documentation first. - * - Try to find a code examples for things are you going to do, good sources - * are: the documentation, the test code, under "./test" you will - * find examples for almost any API in the ChibiOS/RT kernel and most - * common RTOS related tasks, under "./testhal" there are examples - * regarding the various device drivers, the various demos contain - * good code samples too). - * - Start your application from an existing demo, add things one at a - * time and test often, if you add too many things at once then finding a - * small problem can become a debugging nightmare. Follow the cycle: think, - * implement, test, repeat. - * - If you are stuck for too much time then consider asking for advice. - * - Report bugs and problems, bugs can be fixed, problems can become new - * articles in the documentation (this and other documentation articles - * spawned from questions in the forum or in the tracker). - * - Never give up :-) - * . - */ diff --git a/ChibiOS_2.0.8/docs/src/design.dox b/ChibiOS_2.0.8/docs/src/design.dox deleted file mode 100644 index c395411..0000000 --- a/ChibiOS_2.0.8/docs/src/design.dox +++ /dev/null @@ -1,117 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_design Designing an embedded application - * ChibiOS/RT offers a variety of mechanisms and primitives, often it is - * better to focus on a single approach for the system design and use only - * part of the available subsystems.
      - * When designing your application you may choose among several design - * alternatives: - * - @ref nothreads - * - @ref messpass - * - @ref thdshared - * - @ref thdmixed - * . - * @section nothreads Single threaded superloop - * Correct, single thread, it is not mandatory to use the multithreading - * features of the OS. You may choose to implements everything as a complex - * state machine handled in the main thread alone. In this scenario the OS - * still offers a variety of useful mechanisms: - * - Interrupt handling. - * - Virtual Timers, very useful in state machines in order to handle time - * triggered state transitions. - * - Power management. - * - Event Flags and/or Semaphores as communication mechanism between - * interrupt handlers and the main. - * - I/O queues. - * - Memory allocation. - * - System time. - * . - * In this configuration the kernel size is really minimal, everything else - * is disabled and takes no space. You always have the option to use more - * threads at a later time in order to perform separate tasks. - * - * @section messpass Message Passing - * In this scenario there are multiple threads in the system that never - * share data, everything is done by exchanging messages. Each thread - * represents a service, the other threads can request the service by sending - * a message.
      - * In this scenario the following subsystems can be used: - * - Synchronous Messages. - * - Mailboxes (asynchronous message queues). - * . - * The advantage of this approach is to not have to deal with mutual exclusion, - * each functionality is encapsulated into a server thread that sequentially - * serves all the requests. As example, you can have the following scenario: - * - A buffers allocator server. - * - A disk driver server. - * - A file system server. - * - One or more client threads. - * . - * Example: - *

      - * @dot - digraph example { - rankdir="RL"; - node [shape=rectangle, fontname=Helvetica, fontsize=8, fixedsize="true", - width="1.2", height="0.75"]; - edge [fontname=Helvetica, fontsize=8]; - disk [label="Server Thread\nDisk Driver"]; - buf [label="Server Thread\nBuffers Allocator"]; - fs [label="Client&Server Thread\nFile System"]; - cl1 [label="Client Thread"]; - cl2 [label="Client Thread"]; - cl3 [label="Client Thread"]; - fs -> disk [label="I/O request", constraint=false]; - disk -> fs [label="status", style="dotted", constraint=false]; - fs -> buf [label="buffer request"]; - buf -> fs [label="buffer", style="dotted"]; - cl1 -> fs [label="FS transaction"]; - fs -> cl1 [label="result", style="dotted"]; - cl2 -> fs [label="FS transaction"]; - fs -> cl2 [label="result", style="dotted"]; - cl3 -> fs [label="FS transaction"]; - fs -> cl3 [label="result", style="dotted"]; - } - * @enddot - *

      - * Note that the threads should not exchange complex messages but just - * pointers to data structures in order to optimize the performance. - * Also note that a thread can be both client and server at the same - * time, the FS service in the previous scenario as example. - * - * @section thdshared Threads sharing data - * This is the most common scenario, several threads have access to both their - * private data and shared data. Synchronization happens with one of the - * mechanisms described in the @ref article_mutual_exclusion article.
      - * - * @section thdmixed Mixed - * All the above approaches can be freely mixed in a single application but - * usually I prefer to choose a way and consistently design the system around - * it. The OS is a toolbox that offers a lot of tools but you don't have - * to use them all necessarily. - */ diff --git a/ChibiOS_2.0.8/docs/src/eclipse.dox b/ChibiOS_2.0.8/docs/src/eclipse.dox deleted file mode 100644 index fd43cc1..0000000 --- a/ChibiOS_2.0.8/docs/src/eclipse.dox +++ /dev/null @@ -1,176 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_eclipse Setting up a free embedded IDE - * @brief Free advanced embedded IDE for ChibiOS/RT. - * details This article will explain how to setup a free toolchain for use with - * ChibiOS/RT and general embedded development.
      - * The guide is meant mainly for Windows users but notes about Linux and - * MAC OSX are present where the setup differs, mostly the toolchain is - * exactly the same. - * - *

      What this guide does not cover

      - * We will not enter in details of common system tasks like and not limited to: - * - Installing applications (unless a special procedure is required). - * - Creating desktop shortcuts. - * - Adding paths to the PATH variable. - * - Creating environment variables. - * - Any other normal PC usage task. - * - Use of the toolchain, the use is covered by the @ref article_eclipse2 - * article. - * . - * - *

      Article Index

      - * - @ref required_components - * - @ref install_chibios - * - @ref install_compiler - * - @ref install_eclipse - * - @ref install_zylin - * - @ref install_openocd - * - @ref install_doxygen - * - @ref install_graphviz - * - @ref install_eclox - * . - * - * @section required_components Required Components - * The first thing to do is to download all the required components, beginners - * should avoid the optional components initially: - * - A JTAG probe supporting GDB and OpenOCD, a list of compatible devices is - * available on the - * OpenOCD home page, more exactly - * here. - * - - * ChibiOS/RT latest stable release. - * - Java runtime, you - * probably already have this installed. - * - Eclipse IDE - * for C/C++ Developers - * - YAGARTO ARM toolchain - * for Windows, note that you need both the compiler and the tools (make - * and binutils). - * - Zylin plugin for on-board debugging, see @ref install_zylin section. - * - OpenOCD binaries for Windows, YAGARTO does not provide those anymore but - * you can download them from here. Linux users can try - * here. - * - Optional, MinGW compiler, needed if you want to compile, debug - * and run the simulator from within Eclipse. Linux users do not need this - * one because all Linux distributions include the native GCC. - * - Optional, Doxygen, it is only required if you want to - * generate documentation from source files. - * - Optional, - * Graphwiz, it is only required if you want to generate diagrams - * within documentation from source files. - * - Optional, - * Eclox, it is only required if you want to generate documentation - * from source files from within Eclipse. - * . - * - * @section install_chibios ChibiOS/RT Installation - * Just unzip it into a directory in your home folder, Windows users may - * consider c:@\projects@\chibios. It is strongly suggested to not put version - * numbers into the ChibiOS/RT directory name because Eclipse workspaces - * have absolute paths inside and you don't want to setup everything again - * each time a new ChibiOS/RT version is released, use plain "chibios". - * - * @section install_compiler GCC ARM Compiler Installation - * Simply follow the YAGARTO installation guide. Linux/MACOS users have several - * other options: - * - Download the latest CodeSourcery free Linux package. - * - Build it yourself, Liam recommended a build script - * - * here, it looks interesting. - * . - * Make sure that the compiler binaries directory is listed in the PATH - * variable or Eclipse would not be able to locate it. - * - * @section install_eclipse Eclipse Installation - * Eclipse is distributed into a compressed archive, there is no installation - * procedure: - * - Verify if you have Java installed, if not install the runtime. You may - * verify this using the command: "java -version". Make sure you have at - * least version 1.6. - * - Create an eclipse directory in your home and unpack the archive there. - * Windows users may unpack it into c:@\program files@\eclipse. - * - Create a desktop shortcut or other way to launch the Eclipse executable - * easily. - * - Launch Eclipse. - * - Eclipse will ask you a directory for its initial workspace, make it point - * to the ChibiOS/RT root directory (you may have as many workspaces you - * want, keep this for later), make sure to select the check box or it will - * ask you again each time. - *

      - * @image html tool001.jpg - *
      - * - Now you should see the welcome screen, close it and you will be in the - * normal C/C++ perspective. - * - Unselect "Project->Build Automatically" unless you like insanity. - * - Disable the "usage collector" in - * "Window->Preferences->Usage_Data_Collector" by unselecting "Enable - * capture". - * - If you are behind a proxy or firewall (corporate users usually are) - * configure the correct parameters in - * "Window->Preferences->General->Network_Connections". - * - Let Eclipse auto update to the latest version "Help->Check_for_Updates". - * . - * - * @section install_zylin Zylin Plugin Installation - * Eclipse requires an hardware debugger component in order to perform on board - * execution and debug. - * - Open Eclipse, then "Help->Install_New_Software...". - * - Press the "Add..." button and put http://opensource.zylin.com/zylincdt - * into the location field, then press OK. The Zylin plugin will appear in the - * available plugins view, select and install it. - *

      - * @image html tool002.jpg - * . - * - * @section install_openocd OpenOCD Installation - * Windows users just have to use the installer. Linux user should follow the - * normal installation procedure for deb or rpm packages, of course it is also - * possible to build it from the source code. - * - * @section install_doxygen Doxygen Installation - * Just use the installer, Linux users probably have Doxygen already available - * from the repositories. Make sure that the Doxygen binaries directory - * is listed in the PATH variable or Eclipse would not be able to locate it. - * - * @section install_graphviz Graphviz Installation - * Just use the installer, Linux users probably have Graphviz already available - * from the repositories. Make sure that the Graphviz binaries directory - * is listed in the PATH variable or Doxygen would not be able to locate it. - * - * @section install_eclox Eclox Installation - * Use the same installation steps used for the Zylin plugin except use - * http://download.gna.org/eclox/update as URL. Install "Eclox" not "Eclox - * Hot". - * After installing Eclox you will be able to compile Doxygen documentation - * using the button with the blue @@ inside. - */ diff --git a/ChibiOS_2.0.8/docs/src/eclipse2.dox b/ChibiOS_2.0.8/docs/src/eclipse2.dox deleted file mode 100644 index fe657b4..0000000 --- a/ChibiOS_2.0.8/docs/src/eclipse2.dox +++ /dev/null @@ -1,256 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_eclipse2 Embedded development using Eclipse - * @brief Compiling and debugging ChibiOS/RT applications using Eclipse. - * @details This article will explain how to use an Eclipse based toolchain - * (see @ref article_eclipse) to develop ChibiOS/RT based applications. - * This guide will allow you to: - * - Importing ChibiOS/RT demos into the Eclipse environment. - * - Edit and reformat your source code. - * - Compile and examine errors and warnings. - * - Upload your program on the target board. - * - Debug your code on the target board both in high level language and - * assembler. - * - Develop embedded applications with or without ChibiOS/RT. - * . - * - *

      What this guide does not cover

      - * This guide assumes knowledge in following areas: - * - OpenOCD setup is not covered by this guide because the setup changes - * depending on the JTAG probe used, the target MCU and also the target - * board. The guide will show the setup for a specific JTAG probe and a - * specific target, a valuable source for the OpenOCD setup is the - * - * dedicated forum, most questions you may have about OpenOCD have - * most likely already been answered there. - * - Hardware setup. - * . - * In general this guide is not a replacement for the Eclipse, GCC, Make, - * binutils, newlib, GDB, OpenOCD user manuals, the guide simply aims to - * give you a faster start. - * - *

      Article Index

      - * - @ref eclipse2_requirements - * - @ref eclipse2_importing - * - @ref eclipse2_creating - * - @ref eclipse2_compiling - * - @ref eclipse2_configuring - * - @ref eclipse2_configuring_gdb - * - @ref eclipse2_configuring_openocd - * . - * - @ref eclipse2_debugging - * - @ref eclipse2_debugging_start - * - @ref eclipse2_debugging_stop - * . - * . - * - * @section eclipse2_requirements Required Components - * This guide requires: - * - An Eclipse/GCC/OpenOCD based toolchain, as example the one described in - * the article @ref article_eclipse. - * - An Olimex ARM-USB-OCD JTAG probe, this guide applies to any other ARM - * JTAG probe as long it is supported by OpenOCD. - * - An Olimex STM32-P103 target board, this guide applies to any other ARM - * target except for the OpenOCD setup part. - * - A terminal emulator for capturing the board serial output, Windows users - * may use Hyper Terminal, Linux and MAC OS-X users may use - * CuteCom. - * All ChibiOS/RT demos generate on the serial port a test report when a - * button on the target board is pressed, other demos may activate a command - * shell on the serial port, in both cases a terminal emulator is required. - * . - * - * @section eclipse2_importing Importing existing ChibiOS/RT demos into Eclipse - * The first step is to import a project into the Eclipse environment. - * ChibiOS/RT demos do not include Eclipse project files but just a normal - * Makefile. Eclipse is able to import a Makefile project and create - * its own project file so this is not a problem. This is how it is done: - * - Open you Eclipse environment and select the workspace created into the - * ChibiOS/RT project directory. - * - From within Eclipse select "File->New->C_Project", a dialog box will show. - * - Select "Makefile_project->Empty_Project" in the "Project type:" box. - * - Select "-- Other Toolchain --" in the "Toolchains:" box. - * - Unselect the "Use default location" check box. - * - Select the demo directory using the "Browse..." button. Something like - * "C:\Projects\ChibiOS-RT\demos\ARMCM3-STM32F103-GCC" will appear in the - * "Location:" box. - * - In the project name box put the same name of the directory containing - * the demo, ARMCM3-STM32F103-GCC in this example. - *

      - * @image html eclipse003.jpg - *
      - * - Press the "Finish" button and the project will be created and shown in - * the "Project Explorer". - * - Right click on the imported project and select "Index->Rebuild", this - * will make Eclipse build its internal symbols database. - * - Repeat the above steps for each ChibiOS/RT demo you want to import in - * Eclipse, all the demos that have a makefile can be imported. - * . - * - * @section eclipse2_creating Creating a new ChibiOS/RT application - * If you want to create a new application it is recommended that you create - * a Makefile project first then you can import it into eclipse using the above - * procedure. Makefile projects have the advantage that can be compiled - * everywhere even without Eclipse. Creation steps: - * - Create your own development directory under the ChibiOS/RT installation - * directory, as example "chibios/myprojects". - * - Copy an existing demo, of course choose a demo using your same target, - * under the new directory and rename it, as example - * "chibios/myprojects/myapplication". - * - Customize the Makefile if needed, usually you just need to do this if - * your application is composed by more than one source file. You may also - * want to remove the ChibiOS/RT test code from your application. - * - Once your makefile is ready, import the project under the Eclipse - * workspace using the procedure described in @ref eclipse2_importing. - * . - * - * @section eclipse2_compiling Compiling and Cleaning applications - * Once imported, an application can be compiled by using the "Build All" in - * the toolbar or by right clicking on the project and selecting "Build - * Project". In order to clean a project (removing all the temporary and binary - * files) right click on the project and select "Clean Project". - *

      - * @image html eclipse004.jpg - *
      - * The compilation result is visible as a complete log in the "Console" window, - * the detail of all errors an warnings is available in the "Problems" window. - *

      - * @image html eclipse005.jpg - *
      - * The build process produces the binary files specified in the Makefile, all - * the ChibiOS/RT demos produce binary files named ch.elf, ch.bin and/or - * ch.hex. The image must be loaded on the target board in order to execute - * it. The build process usually creates also some other useful files - * containing details about the built application (usually named ch.map and - * ch.dmp). - * - * @section eclipse2_configuring Preparing for Debug - * In order to debug your application a debug configuration must be created. - * The configuration instructs GDB (the source debugger used by Eclipse) on - * how to load the image, load the symbols and place the initial breakpoint - * in the make function. Note that GDB performs its function by connecting - * to a "GDB server", the DGB server implements the low level communication - * with the target device through the JTAG probe. In our scenario the GDB - * server functionality is performed by OpenOCD, this mean that OpenOCD must - * be running while performing a debug session within Eclipse. - * - * @subsection eclipse2_configuring_gdb Creating a GDB Debug Configuration - * A target specific debug configuration is required in order to: - * - Establish a connection with the GDB server. - * - Stop and reset the target. - * - Upload the binary code in Flash or RAM. - * - Set an initial breakpoint in the main function. - * - Start the target (which will immediately stop on the breakpoint). - * . - * The first thing to do is to open the "Debug Configurations..." dialog: - *

      - * @image html eclipse006.jpg - *
      - * The configuration dialog will appear, we must create a native Zylin - * configuration: - *

      - * @image html eclipse007.jpg - *
      - * Now we must give the configuration a name, "ARMCM3-STM32F103-GCC (flash and - * run)" in this example, then setup the various configuration pages as follow: - *

      - * The "Main" tab: - * @image html eclipse008.jpg - *

      - * The "Debugger" tab: - * @image html eclipse009.jpg - *

      - * The "Commands" tab: - * @image html eclipse010.jpg - *
      - * Note that the "Commands" tab contains the part that changes depending on - * the target. The complete commands sequence (it is not fully visible in the - * image) for STM32 is: - * @code - * monitor soft_reset_halt - * monitor wait_halt - * monitor poll - * monitor flash probe 0 - * monitor stm32x mass_erase 0 - * monitor flash write_bank 0 ch.bin 0 - * monitor soft_reset_halt - * symbol-file ch.elf - * thbreak main - * continue - * @endcode - *

      - * The "Common" tab: - * @image html eclipse011.jpg - *
      - * Now the debug configuration is complete. - * - * @subsection eclipse2_configuring_openocd Configuring and running OpenOCD - * OpenOCD must be run, with appropriate parameters, before starting your - * debug session. Please refer to the OpenOCD documentation in order to - * properly launch it for your target. - *
      **To be completed** - * - * @section eclipse2_debugging Debugging - * Now we are ready to debug an application on the target. Note that Eclipse - * have a mechanism called "Perspectives", you edit and compile your source - * code while you are in the "C/C++ perspective" while the debugging is - * performed in the "Debug perspective". You can switch perspective at any - * time, even while there is an active debug session. If you install more of - * the many Eclipse extension plugins (there are thousands) you may have even - * more perspectives available. - * - * @subsection eclipse2_debugging_start Starting a Debug Session - * In order to start a debugging session first make sure that OpenOCD is - * running then press the drop down menu on the right side of the - * debug icon in the toolbar (the small green bug) and select your - * debug configuration (we created just one but you may have multiple - * debug configurations in your project, as example I usually create - * another debug configuration that just starts the target without - * uploading the code). - *

      - * @image html eclipse012.jpg - *
      - * The debugger will be initialized, you will see the operation in progress on - * the console then Eclipse will switch to the debug perspective and you will - * see your program stopped on the default breakpoint in the main function. - *

      - * @image html eclipse013.jpg - *
      - * From there you can perform all the usual debugging tasks, set breakpoints, - * single step execution, variables, memory and registers inspection etc. - * Please refer to the Eclipse documentation about those "normal" operations. - * Note that if the debugging start procedure hangs then there is probably - * an error in your configuration or problems with the target, read the - * console log and/or the OpenOCD output in order to understand where the - * problem is. - * - * @subsection eclipse2_debugging_stop Stopping a Debug Session - * From the debug perspective press the stop button (small red square) in the - * debug window, the target will be stopped and you may both return to the - * C/C++ perspective or start it again. - */ diff --git a/ChibiOS_2.0.8/docs/src/events.dox b/ChibiOS_2.0.8/docs/src/events.dox deleted file mode 100644 index 0f40c33..0000000 --- a/ChibiOS_2.0.8/docs/src/events.dox +++ /dev/null @@ -1,130 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_events Events Explained - * Events are an important feature in ChibiOS/RT, most device drivers generate - * events in order to notify the application that something happened at the - * I/O level.
      - * While event flags are not something unknown in other operating systems, - * their peculiar implementation in ChibiOS/RT requires a more in depth - * explanation.
      - * Lets start with the events related terminology: - * - Event Source, an @p EventSource is a system object that can be - * @a broadcasted asynchronously in response of a system event, as example, - * when the CAN driver receives a packet from the CAN bus it @a broadcasts - * an event source in order to inform the registered threads that a packet - * has just arrived. - * - Broadcast, the operation performed on an event source in order - * to inform the @a registered threads that an event just occurred. - * Broadcasting can happened both in interrupt handlers and in threads. - * - Event Listener, a system object that associates a @p Thread object - * to an event source. The process of associating a @p Thread to an - * @p EventSource using an @p EventListener is called @a registration. - * - Registration, action performed by a thread in order to be informed - * of events from a specific event source. Of course a thread can be - * @a registered on more than one event source by using multiple - * @p EventListener objects. Threads can also @a unregister from an event - * source. - * - Pend, each thread has a mask of @a pending events. The @a broadcast - * operation @a pends an event mask on all the @a registered threads. - * - Wait, synchronous operation performed by a thread in order to - * @a wait a specific combination of events. The API offers a variety of - * @a wait functions, please refer to the events API documentation. - * . - * Note that events are asynchronously generated, as example in an interrupt - * handler, but are synchronously served. - * - *

      Events related data structures

      - * The following diagram explains the relationship between an event source, - * its list of event listeners and the @a registered threads. - * @dot - digraph example { - rankdir="LR"; - - node [shape=rectangle, fontname=Helvetica, fontsize=8, - fixedsize="true", width="1.0", height="0.5"]; - edge [fontname=Helvetica, fontsize=8, sep=3.0]; - - es [shape=record, label="EventSource | es_next", style="bold"]; - - subgraph cluster_0 { - fontname=Helvetica; - label = "Listeners List"; - color = blue; - node [shape=record, fontname=Helvetica, fontsize=8, - fixedsize="true", width="1.5", height="1.0"]; - el4 [label="EventListener 4 | el_mask: 0x0001 | el_listener | el_next"]; - el3 [label="EventListener 3 | el_mask: 0x0C00 | el_listener | el_next"]; - el2 [label="EventListener 2 | el_mask: 0x0001 | el_listener | el_next"]; - el1 [label="EventListener 1 | el_mask: 0x0004 | el_listener | el_next"]; - el1 -> el2 -> el3 -> el4 [label=" el_next", constraint=false]; - } - - subgraph cluster_1 { - fontname=Helvetica; - label = "Registered Threads"; - color = blue; - node [shape=record, fontname=Helvetica, fontsize=8, - fixedsize="true", width="1.5", height="0.8"]; - t1 [label="Thread 1 | p_epending:0x0000 | p_ewmask:0xFFFF"]; - t2 [label="Thread 2 | p_epending:0x000F | p_ewmask:0x0C01"]; - t3 [label="Thread 3 | p_epending:0x0008 | p_ewmask:0x0001"]; - t4 [label="Thread 4 | p_epending:0x0000 | p_ewmask:0xFFFF"]; - } - - es -> el1 [label=" es_next"]; - el4 -> es [label=" el_next"]; - el1 -> t1 [label="el_listener"]; - el2 -> t2 [label="el_listener"]; - el3 -> t3 [label="el_listener"]; - el4 -> t4 [label="el_listener"]; - } - * @enddot - * Note that each event listener has a different bit mask to be @a pended on - * its associated thread when the event source is @a broadcasted, this means - * that each thread can define its own event identifiers independently. A - * @a broadcast operation can also @a pend more than one bit on the - * @a registered threads.
      - * The threads have a variety of @a wait primitives, they can @a wait for one - * or more event flags to become @a pending, and can also specify AND/OR - * conditions, as example a thread can @a wait for any event to become - * @a pending or @a wait for all the specified events to become @a pending.
      - * The field @p p_epending is the mask of the currently pending events, - * the field @p p_ewmask is the mask of the events the thread is interested - * on in that moment (AND or OR condition depending on the invoked - * @a wait API). - * - *

      Use Scenarios

      - * Events are best used when one of more of the following conditions are - * required: - * - Having to wait on multiple conditions, Events are the only mechanism - * that easily allow that. - * - Synchronous response to one or more asynchronous events. - * - Single threaded applications working in a event driver environment (but - * events are not limited to single threaded applications). - * . - */ diff --git a/ChibiOS_2.0.8/docs/src/goals.dox b/ChibiOS_2.0.8/docs/src/goals.dox deleted file mode 100644 index cf5acb6..0000000 --- a/ChibiOS_2.0.8/docs/src/goals.dox +++ /dev/null @@ -1,95 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page goals Project Goals - *

      Another RTOS?

      - * The first question to be answered is: there was really the need for YET - * ANOTHER RTOS?
      - * There are several reasons: - * - The ChibiOS/RT ancestor was created more than 15 years ago and while it - * had far less features than the current product it was complete and - * functioning. ChibiOS/RT is just a new (and silly) name given to - * something created when there were not many free RTOSes around (actually - * none, at least none in my knowledge, there was no widespread Internet - * at that time). - * - When, after a while, I needed a RTOS again, none of the existing FOSS - * projects met my expectations or my ideas of how a RTOS should be, not - * even close (see below). I decided that work on that old project was - * a better idea than contribute to, or fork, something else. - * - I wanted another toy. - * . - *

      Why is it different?

      - * Well, there are some design choices that should be explained and contribute - * to make ChibiOS/RT a peculiar design. Nothing really new in itself but - * the whole is interesting: - * - *

      Static design

      - * Everything in the kernel is static, nowhere memory is allocated or freed, - * there are three allocator subsystems but those are options and not part of - * core OS. Safety is something you design in, not something you can add later. - * - *

      No tables, arrays or other fixed structures

      - * The kernel has no internal tables, there is nothing that must be configured - * at compile time or that can overflow at run time. No upper bounds, the - * internal structures are all dynamic even if all the objects are statically - * allocated. - * - *

      No error conditions and no error checks

      - * All the system APIs have no error conditions, all the previous points are - * finalized to this objective. Everything you can invoke in the kernel is - * designed to not fail unless you pass garbage as parameters, stray pointers - * as examples. The APIs are not slowed down by parameter checks, - * parameter checks (and consistency checks) do exist but only when the - * debug switch is activated.
      - * All the static core APIs always succeed if correct parameters are passed. - * Exception to this are the optional allocators APIs that, of course, - * can report memory exhausted. - * - *

      Very simple APIs

      - * Each API should have the parameters you would expect for that function and - * do just one thing with no options. - * - *

      Fast and compact

      - * Note, first "fast" then "compact", the focus is on speed and execution - * efficiency and then on code size. This does not mean that the OS is large, - * the kernel size with all the subsystems activated weighs around 5.3KiB - * and can shrink down around to 1.2Kib in a minimal configuration - * (STM32, Cortex-M3). It would be possible to make something even smaller but: - * -# It would be pointless, it is already @a really small. - * -# I would not trade efficiency or features in order to save few bytes. - * . - * About the "fast" part, the kernel is able to start/exit over - * 220,000 threads per second on a 72MHz STM32. - * The Context Switch takes 1.2 microseconds on the same STM32. - * - *

      Tests and metrics

      - * I think it is nice to know how an OS is tested and how it performs before - * committing to use it. Test results on all the supported platforms and - * performance metrics are included in each ChibiOS/RT release. The test - * code is released as well, all the included demos are capable of executing - * the test suite and the OS benchmarks, see @ref testsuite. - */ diff --git a/ChibiOS_2.0.8/docs/src/integrationguide.dox b/ChibiOS_2.0.8/docs/src/integrationguide.dox deleted file mode 100644 index c2ae611..0000000 --- a/ChibiOS_2.0.8/docs/src/integrationguide.dox +++ /dev/null @@ -1,102 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_integrationguide Integration Guide - * All the delivered ChibiOS/RT demos are stand alone applications so if - * you just start your application from an existing demo there isn't any - * integration effort, you are simply using the existing makefiles, the - * default startup files etc, minimal effort.
      - * The matter is very different if you are going to integrate the OS into - * a different runtime framework or if you want to use a different build - * system, in that case you have the problem to integrate the OS source - * code into your application. - * - *

      What this guide does not cover

      - * This guide has a limited scope, the following topics are handled elsewhere: - * - Porting the OS to different architectures or different compilers is - * not covered in this guide, see @ref article_portguide instead. - * - This guide does not describe any specific environment or development - * tool, it is assumed you already know in detail the environment you - * want to work with. - * . - * - *

      Article Index

      - * - @ref integrationguide_kernel - * - @ref integrationguide_hal - * . - * @section integrationguide_kernel Integrating the Kernel - * This section covers the scenario where you want to use the ChibiOS/RT - * kernel into an existing application. In order to accomplish this you need - * to import in your project two components: - * - The portable kernel. - * - The port layer for your microcontroller. - * . - * See the @ref architecture for more details. - * You need to add the following files to your build process: - * - All the source files contained under ./os/kernel/src, note that - * you should add all of them even if you don't plan to use some of the - * subsystems. Unused subsystems can be excluded from the kernel - * configuration file @p chconf.h. - * - All the source files contained under - * ./os/ports/@/@. - * Note that those could be both C source files and assembler source files - * and that some architectures have an extra directories layer containing - * files required for a specific platform. - * . - * You also need to add to the compiler options the following paths for - * searching header files: - * - The portable kernel headers ./os/kernel/include. - * - The port layer headers - * ./os/ports/@/@. - * . - * @section integrationguide_hal Integrating the HAL - * If, in addition to the kernel as described in the previous section, you also - * need to integrate the HAL into your application you also need to import - * the following components: - * - HAL portable files. - * - Platform specific files. - * . - * See the @ref architecture for more details. - * You need to add the following files to your build process: - * - All the source files contained under ./os/hal/src, note that - * you should add all of them even if you don't plan to use some of the - * subsystems. Unused drivers can be excluded from the HAL configuration - * file @p halconf.h. - * - All the source files contained under - * ./os/hal/platforms/@. - * - All the source files contained under - * ./boards/@. - * . - * You also need to add to the compiler options the following paths for - * searching header files: - * - The portable HAL headers ./os/hal/include. - * - The platform layer headers - * ./os/hal/platforms/@. - * - The board description headers - * ./boards/@. - * . - */ diff --git a/ChibiOS_2.0.8/docs/src/interrupts.dox b/ChibiOS_2.0.8/docs/src/interrupts.dox deleted file mode 100644 index bb2c660..0000000 --- a/ChibiOS_2.0.8/docs/src/interrupts.dox +++ /dev/null @@ -1,76 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_interrupts How to write interrupt handlers - * Since version 1.1.0 ChibiOS/RT offers a cross-platform method for writing - * interrupt handlers. Port-related and compiler-related details are - * encapsulated within standard system macros. - * - *

      Writing Regular Interrupt handlers

      - * A Regular Interrupts handler (see @ref interrupt_classes) must be written - * using the following general form: - * @code -CH_IRQ_HANDLER(myIRQ) { - CH_IRQ_PROLOGUE(); - - // IRQ handling code, preemptable if the architecture supports it. - - chSysLockFromIsr(); - // Invocation of some I-Class system APIs, never preemptable. - chSysUnlockFromIsr(); - - // More IRQ handling code, again preemptable. - - CH_IRQ_EPILOGUE(); -} - * @endcode - * - *

      Writing Fast Interrupt handlers

      - * In those architectures (@ref ARM7 and @ref ARMCMx) supporting Fast - * Interrupts (see @ref interrupt_classes) handlers must be written - * using the following general form: - * @code -CH_FAST_IRQ_HANDLER(myIRQ) { - - // Fast IRQ handling code, preemptable if the architecture supports it. - // The invocation of any API is forbidden here because fast interrupt - // handlers can preempt the kernel even within its critical zones in - // order to minimize latency. -} - * @endcode - * - *

      Handlers naming

      - * A note about the handler name "myIRQ", in some ports it must be a - * vector number rather than a function name, it could also be a name from - * within a predefined set, see the notes about the various ports. - * - *

      Important Notes

      - * - There is an important application note about ARM7 interrupt handlers, - * please read about it in the ARM7 port section: @ref ARM7_IH - * . - */ - diff --git a/ChibiOS_2.0.8/docs/src/jitter.dox b/ChibiOS_2.0.8/docs/src/jitter.dox deleted file mode 100644 index 77b488e..0000000 --- a/ChibiOS_2.0.8/docs/src/jitter.dox +++ /dev/null @@ -1,142 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_jitter Response Time and Jitter - * Response time jitter is one of the most sneaky source of problems when - * designing a real time system. When using a RTOS like ChibiOS/RT one must - * be aware of what the jitter is and how it can affect the performance of the - * system. A good place to start is this - * Wikipedia - * article. - * - *

      Interrupt handlers execution time

      - * The total execution time of an interrupt handler includes: - * - Hardware interrupts latency, this parameter is pretty much fixed and - * characteristic of the system. - * - Fixed handler overhead, as example registers stacking/unstacking. - * - Interrupt specific handler code execution time, as example, in a serial - * driver, this is the time used by the handler to transfer data from/to - * the UART. - * - OS overhead. Any operating system requires to run some extra code - * in interrupt handlers in order to handle correct preemption and Context - * Switching. - * . - *

      Interrupt Response Time

      - * The Interrupt Response Time is the time from an interrupt event and the - * execution of the handler code. Unfortunately this time is not constant - * in most cases, see the following graph: - * - * @dot - digraph example { - rankdir="LR"; - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"]; - edge [fontname=Helvetica, fontsize=8]; - int [label="Interrupt"]; - busy [label="Busy"]; - served [label="Interrupt\nServed"]; - int -> served [label="Not Busy (minimum latency)"]; - int -> busy [label="Not Ready"]; - busy -> busy [label="Still Busy\n(added latency)"]; - busy -> served [label="Finally Ready"]; - } - * @enddot - * - * In this scenario the jitter (busy state) is represented by the sum of: - * - Higher or equal priority interrupt handlers execution time combined. - * This time can go from zero to the maximum randomly. This value can be - * guaranteed to be zero only if the interrupt has the highest priority in - * the system. - * - Highest execution time among lower priority handlers. This value is zero - * on those architectures (Cortex-M3 as example) where interrupt handlers - * can be preempted by higher priority sources. - * - Longest time in a kernel lock zone that can delay interrupt servicing. - * This value is zero for fast interrupt sources, see @ref system_states. - * . - *

      Threads Flyback Time

      - * This is the time between an event, as example an interrupt, and the - * execution of the thread that will process it. Imagine the following - * graph as the continuation of the previous one. - * - * @dot - digraph example { - rankdir="LR"; - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"]; - edge [fontname=Helvetica, fontsize=8]; - served [label="Interrupt\nServed"]; - busy [label="Busy"]; - thread [label="Thread\nAwakened"]; - served -> busy [label="Not highest Priority"]; - busy -> busy [label="Higher priority Threads\n(added latency)"]; - busy -> thread [label="Highest Priority"]; - served -> thread [label="Highest Priority (minimum latency)"]; - } - * @enddot - * - * In this scenario all the jitter sources previously discussed are also - * present and there is the added jitter caused by the activity of the - * higher priority threads. - * - *

      Jitter Mitigation

      - * For each of the previously described jitter sources there are possible - * mitigation actions. - * - *

      Interrupt handlers optimization

      - * An obvious mitigation action is to optimize the interrupt handler code as - * much as possible for speed.
      - * Complex actions should never be performed in interrupt handlers. - * An handler should just serve the interrupt and wakeup a dedicated thread in - * order to handle the bulk of the work.
      - * Another possible mitigation action is to evaluate if a specific interrupt - * handler really needs to interact with the OS, if the handler uses full - * stand-alone code then it is possible to remove the OS related overhead.
      - * - *

      Kernel lock zones

      - * The OS kernel protects some critical internal data structure by disabling - * (fully in simple architecture, to some extent in more advanced - * microcontrollers) the interrupt sources. Because of this the kernel itself - * is a jitter cause, a good OS design minimizes the jitter generated by the - * kernel by using adequate data structures, algorithms and coding - * practices.
      - * A good OS design is not the whole story, some OS primitives may generate - * more or less jitter depending on the system state, as example the maximum - * number of threads on a certain queue, the maximum number of nested mutexes - * and so on. Some algorithms employed internally can have constant execution - * time but others may have linear execution time or be even more complex. - * - *

      Higher priority threads activity

      - * At thread level, the response time is affected by the interrupt-related - * jitter but mainly by the activity of the higher priority threads and - * contention on protected resources.
      - * It is possible to improve the system overall response time and reduce jitter - * by carefully assigning priorities to the various threads and carefully - * designing mutual exclusion zones.
      - * The use of the proper synchronization mechanism (semaphores, mutexes, events, - * messages and so on) also helps to improve the overall system performance. - * The use of the Priority Inheritance algorithm implemented in the mutexes - * subsystem can improve the overall response time and reduce jitter but it is - * not a magic wand, a proper system design comes first. - */ diff --git a/ChibiOS_2.0.8/docs/src/licfaq.dox b/ChibiOS_2.0.8/docs/src/licfaq.dox deleted file mode 100644 index 13c4759..0000000 --- a/ChibiOS_2.0.8/docs/src/licfaq.dox +++ /dev/null @@ -1,126 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page lic_faq License and F.A.Q. - * ChibiOS/RT is a - * GPL3-licensed product but it offers a linking exception in its stable - * releases.
      - * This article contains some answers about the exception. - * - * @section faq Frequently Asked Questions - * - Is ChibiOS/RT free ?
      - * Yes, free as both in free beer and freedom. - * - Can I use it in my commercial embedded product?
      - * Yes, you just have to advertise that you are using ChibiOS/RT by putting - * a link to the project somewhere on your web site or documentation. - * - Am I forced to release the source code of my product?
      - * The exception to the GPL allows you to use ChibiOS/RT in your commercial - * application without have to release your source code under certains - * conditions. See the @ref exception_text under "Approved Interfaces" for - * details. - * - What I have to contribute back?
      - * In general you have to offer changes done on existing files (where - * allowed) or new developments done using the OS template files. As example: - * - Ports to new architectures because a new port uses copyrighted OS - * template files. - * - New, HAL-style, device drivers because device drivers use copyrighted - * template files. - * - Improvements on modifiable OS code as described in the - * "approved interfaces" section of the @ref exception_text. - * . - * - Is the exception applicable to any ChibiOS/RT version ?
      - * The exception is valid only for ChibiOS/RT releases marked as @e stable. - * Beta, unstable or development versions are covered by the GPL3 alone - * because are meant for testing only. - * - I don't want to be bound by any of the above restriction, is this - * possible?
      - * You may contact us about a commercial license. - * . - * @section exception_text GPL Exception Text - -
      GPL Exception Text for ChibiOS/RT 1.4.x
      - - In addition, as a special exception, the copyright holder of ChibiOS/RT, -gives You the additional right to link the unmodified code of this Program with -code not covered under the GNU General Public License ("Non-GPL Code") and to -distribute linked combinations including the two, subject to the limitations -in this paragraph. - - -# Non-GPL Code permitted under this exception must only link to the - unmodified code of this Program through those well defined interfaces - identified as "Approved Interfaces". - -# Every copy of the combined work is accompanied by a written statement - that details to the recipient the version of ChibiOS/RT used and an - offer by yourself to provide the ChibiOS/RT source code should the - recipient request it. - -# The combined work is not itself an RTOS, scheduler, kernel or related - product. - -# The combined work is not itself a binary library intended for linking - into other software applications. - . - -
      The Approved Interfaces
      - - -# The files of Non-GPL Code may include the unmodified ChibiOS/RT - distribution header files contained under: - - ./os/kernel/include - - ./os/hal/include - - ./os/hal/platforms - - ./os/various - . - without causing the resulting work to be covered by the GNU General - Public License. - -# The files of Non-GPL Code may link to the unmodified ChibiOS/RT - distribution files contained under: - - ./os/kernel/src - - ./os/hal/src - - ./os/hal/platforms - - ./os/various - . - without causing the resulting work to be covered by the GNU General - Public License. - -# The files of Non-GPL Code may link to, or include, the modified or - unmodified ChibiOS/RT distribution files contained under: - - ./os/kernel/templates - - ./os/hal/templates - - ./os/ports - - ./boards - - ./demos - . - without causing the resulting work to be covered by the GNU General - Public License. - . - - Only the copyright holder of ChibiOS/RT may make changes or additions to the -list of Approved Interfaces. - - You must obey the GNU General Public License in all respects for all of the -Program code and other code used in conjunction with the Program except the -Non-GPL Code covered by this exception. - * - */ - diff --git a/ChibiOS_2.0.8/docs/src/lifecycle.dox b/ChibiOS_2.0.8/docs/src/lifecycle.dox deleted file mode 100644 index 5126485..0000000 --- a/ChibiOS_2.0.8/docs/src/lifecycle.dox +++ /dev/null @@ -1,75 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_lifecycle Threads Lifecycle - * In ChibiOS/RT threads are divided in two categories: - * - Static threads. The memory used for static threads is allocated at - * compile time so static threads are always there, there is no management - * to be done. - * - Dynamic threads. Dynamic threads are allocated at runtime from one - * of the available allocators (see @ref heaps, @ref pools). - * . - * Dynamic threads create the problem of who is responsible of releasing - * their memory because a thread cannot dispose its own memory.
      - * This is handled in ChibiOS/RT through the mechanism of "thread references", - * When the @p CH_USE_DYNAMIC option is enabled the threads become objects - * with a reference counter. The memory of a thread, if dynamic, is freed - * when the last reference to the thread is released while the thread is in - * its @p THD_STATE_FINAL state.
      - * The following diagram explains the mechanism: - * @dot - digraph example { - rankdir="LR"; - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"]; - edge [fontname=Helvetica, fontsize=8]; - - init [label="No thread", style="bold"]; - alive [label="Alive"]; - final [label="Terminated"]; - detached [label="Detached", style="bold"]; - - init -> alive [label="chThdCreateX()"]; - alive -> alive [label="chThdAddRef()"]; - alive -> alive [label="chThdRelease()\n[ref > 0]"]; - alive -> detached [label="chThdRelease()\n[ref == 0]"]; - alive -> init [label="chThdWait()\n[ref == 0]"]; - alive -> final [label="chThdExit()\nreturn"]; - final -> final [label="chThdAddRef()"]; - final -> final [label="chThdRelease()\nchThdWait()\n[ref > 0]"]; - final -> init [label="chThdRelease()\nchThdWait()\n[ref == 0]"]; - } - * @enddot - *
      - * As you can see the easiest way to ensure that the memory is released is - * to make another thread perform a @p chThdWait() on the dynamic thread.
      - * If all the references to the threads are released while the thread is - * still alive then the thread goes in a "detached" state and its memory - * cannot be recovered unless there is a dedicated task in the system that - * scans the threads through the @ref registry subsystem, scanning the registry - * has the side effect to release the zombies (detached and then terminated - * threads). - */ diff --git a/ChibiOS_2.0.8/docs/src/main.dox b/ChibiOS_2.0.8/docs/src/main.dox deleted file mode 100644 index 887cd4b..0000000 --- a/ChibiOS_2.0.8/docs/src/main.dox +++ /dev/null @@ -1,77 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @mainpage ChibiOS/RT - * @author Giovanni Di Sirio (gdisirio@users.sourceforge.net). - * - *

      Chibi ?

      - * I didn't want a serious name for this project. It is the Japanese word for - * small as in small child. So ChibiOS/RT - * @htmlonly (ちびOS/RT) @endhtmlonly - * means small Real Time Operating System. - * Source Wikipedia. - * - *

      Features

      - * - Free software, GPL3 licensed. Stable releases include a exception clause - * to the GPL. - * - Designed for realtime applications. - * - Easily portable. - * - Preemptive scheduling. - * - 128 priority levels. Multiple threads at the same priority level allowed. - * - Round robin scheduling for threads at the same priority level. - * - Offers threads, virtual timers, semaphores, mutexes, condvars, - * event flags, messages, mailboxes, I/O queues. - * - No static setup at compile time, there is no need to configure a maximum - * number of all the above objects. - * - PC simulator target included, the development can be done on a PC - * under Linux or Windows.
      - * Timers, I/O channels and other HW resources are simulated in a guest OS - * process and the application code does not need to be aware of it. - * - No *need* for a memory allocator, all the kernel structures are static - * and declaratively allocated. - * - Optional, thread safe, Heap Allocator subsystem. - * - Optional, thread safe, Memory Pools Allocator subsystem. - * - Blocking and non blocking I/O channels with timeout and events generation - * capability. - * - Minimal system requirements: about 6KiB ROM with all options enabled and - * speed optimizations on. The size can shrink under 2KiB by disabling the - * the unused subsystems and optimizing for size. - * - Almost totally written in C with little ASM code required for ports. - * - Optional Hardware Abstraction Layer (HAL) with support for many device - * driver models and device driver implementations. - * . - *

      Related pages

      - * - @subpage credits - * - @subpage lic_faq - * - @subpage goals - * - @subpage target - * - @subpage architecture - * - @subpage concepts - * - @subpage articles - * - @subpage testsuite - * . - */ diff --git a/ChibiOS_2.0.8/docs/src/memory.dox b/ChibiOS_2.0.8/docs/src/memory.dox deleted file mode 100644 index e4c8e2e..0000000 --- a/ChibiOS_2.0.8/docs/src/memory.dox +++ /dev/null @@ -1,145 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_manage_memory How to manage memory - * ChibiOS/RT is a static kernel so you don't need to manage memory at all - * if your application doesn't really require it. This doesn't mean that - * the OS is unable to manage memory but just that memory management is an - * optional part of the whole.
      - * The OS offers three distinct ways to manage memory, each one with its - * weaknesses and strengths: - * - Core Memory Manager. See @ref memcore. - * - Heap Allocator. See @ref heaps. - * - Memory Pools. See @ref pools. - * . - * The three mechanisms are able to coexist and are well integrated, as example - * the heap allocator uses the core memory manager in order to get more - * memory blocks, memory pools can optionally do the same thing. - * - *

      The three subsystems

      - * This is a small comparison table regarding the three subsystems, C-runtime - * and static objects are thrown in there for comparison:

      - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
      - * Subsystem - * - * Free capable - * - * Constant time - * - * Safe - * - * From IRQ - * - * Notes - *
      - * Static Objects - * N/AN/AYESYES - * Preferred solution for safety applications. - *
      - * Core Memory Manager - * NOYESYESYES - * Fast and safe but unable to free allocated memory. - *
      - * Heap Allocator - * YESNONONO - * Unsafe because fragmentation and not constant time, cannot be used - * from IRQ handlers. - *
      - * Memory Pools - * YESYESYESYES - * Fast and safe but it can handle fixed size objects only, you may have - * multiple memory pools however. - *
      - * C-Runtime - * YESNONONO - * Unsafe because fragmentation, not constant time, cannot be used - * from IRQ handlers and not thread safe. The C runtime must also be - * modified in order to work with the other allocators. - *
      - *
      - * When designing a system it is recommended to proceed as follow: - * -# Use static objects and initializers whenever possible. - * -# Where dynamic allocation is required without have to free the allocated - * memory then use the Core Memory Manager allocation APIs. - * -# Where dynamic allocation is required evaluate if one or more memory - * pools can be used. - * -# If all the above points do not satisfy your requirements then use the - * heap allocator. - * -# Consider the C-runtime allocator only for legacy code. - * . - */ - diff --git a/ChibiOS_2.0.8/docs/src/mutualexcl.dox b/ChibiOS_2.0.8/docs/src/mutualexcl.dox deleted file mode 100644 index cb8d0e9..0000000 --- a/ChibiOS_2.0.8/docs/src/mutualexcl.dox +++ /dev/null @@ -1,217 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_mutual_exclusion Mutual Exclusion guide - * The most common problem when writing multithreaded code is the - * synchronization on the shared resources/services.
      - * ChibiOS/RT offers a rich variety of mechanisms that apparently solve the - * same problem. I wrote apparently because each mechanism has its pro and - * cons. - * This article will introduce the various mechanisms and the explain the - * right scenarios for each one. - * - *

      Basics

      - * Some of the concepts mentioned in this article can be found in the - * following Wikipedia articles: - * - - * Mutual Exclusion - * - - * Priority Inversion - * - Priority Inheritance - * - - * Priority Ceiling - * . - *

      Mutual exclusion by System Locks

      - * This is the lowest level mechanism, the system is locked by invoking the - * @p chSysLock() API and then unlocked by invoking @p chSysUnlock().
      - * The implementation is architecture dependent but it is guaranteed to, at - * least, disable the interrupt sources with hardware priority below or equal - * the kernel level. - * - *

      Advantages

      - * - It is the lightest as execution time, often a lock or unlock becomes just a - * single inlined assembler instruction. - * - It ensures mutual exclusion among threads but also interrupt handling code. - * - The implementation would ensure mutual exclusion even on multicore - * architectures where multiple hardware threads are present. - * . - *

      Disadvantages

      - * - Disabling interrupts for a long period of time can deteriorate the overall - * system response time and/or introduce jitter. - * . - *

      When use Locks

      - * - When mutual exclusion with interrupt handlers is required. - * - When the operation within the lock zone is very simple and has finite - * time. - * . - *

      Example

      - * @code - * ... - * chSysLock(); - * /* Protected code */ - * chSysUnlock(); - * ... - * @endcode - * - *

      Mutual exclusion by Semaphores

      - * In ChibiOS/RT the counting semaphores are mainly meant as a - * synchronization mechanism between interrupt handlers and high level code - * running at thread level. Usually a thread waits on a semaphore that is - * signaled asynchronously by an interrupt handler.
      - * The semaphores can, however, be used as simple mutexes by initializing - * the semaphore counter to one. - * - *

      Advantages

      - * - The semaphores code is "already there" if you use the I/O queues or - * mailboxes and you don't want to enable the mutexes too in order to save - * space. - * - Semaphores are lighter than mutexes because their queues are FIFO - * ordered and do not have any overhead caused by the priority inheritance - * algorithm. - * - A semaphore takes less RAM than a mutex (12 vs 16 bytes on 32 bit - * architectures). - * . - *

      Disadvantages

      - * - Semaphore queues are FIFO ordered by default, an option exist to make - * them priority ordered but this can impact I/O performance because - * semaphores are used in I/O queues. - * - Semaphores do not implement the Priority Inheritance algorithm. - * . - *

      When use Semaphores

      - * - When you don't need queuing by priority nor the Priority Inheritance - * algorithm. - * - When RAM/ROM space is scarce. - * . - *

      Example

      - * @code - * static Semaphore sem; /* Semaphore declaration */ - * ... - * chSemInit(&sem, 1); /* Semaphore initialization before use */ - * ... - * chSemWait(&sem); - * /* Protected code */ - * chSemSignal(&sem); - * ... - * @endcode - * - *

      Mutual exclusion by Mutexes

      - * The mutexes are the mechanism intended as the most general solution for - * Mutual Exclusion. - * - *

      Advantages

      - * - Mutexes implement the Priority Inheritance algorithm that is an important - * tool in reducing jitter and improve overall system response time (it is - * not a magic solution, just another tool for the system designer). - * . - *

      Disadvantages

      - * - Heaviest among all the possible choices. The Priority Inheritance method - * is efficiently implemented but nothing is more efficient than no code at - * all. - * . - *

      When use Mutexes

      - * - When you are designing a very complex system with hard realtime - * requirements. - * . - *

      Example

      - * @code - * static Mutex mtx; /* Mutex declaration */ - * ... - * chMtxInit(&mtx); /* Mutex initialization before use */ - * ... - * chMtxLock(&mtx); - * /* Protected code */ - * chMtxUnlock(); - * ... - * @endcode - * - *

      Mutual exclusion by priority boost

      - * Another way to implement mutual exclusion is to boost the thread priority - * to a level higher than all of the threads competing for a certain resource. - * This solution effectively implements an Immediate Priority Ceiling - * algorithm. - * - *

      Advantages

      - * - Almost free as code size, you need no semaphores nor mutexes. - * - No RAM overhead. - * - Fast execution, priority change is a quick operation under ChibiOS/RT. - * - The Priority Ceiling protocol can help mitigate potential Priority - * Inversion problems. - * . - *

      Disadvantages

      - * - Makes the design more complicated because priorities must be assigned to - * not just threads but also assigned to the resources to be protected. - * - Locking a resource affects all the threads with lower priority even if - * not interested to the resource. - * - All the threads that can access the resource must have lower priority - * than the resource itself. - * - The mechanism is not easy to understand in the code unless it is clearly - * documented. - * - This method does not work in on multicore architectures where multiple - * hardware threads are present. - * - Only useful in very simple applications. - * . - *

      Example

      - * @code - * /* Priority assigned to the resource, threads must have lower - * priority than this.*/ - * #define AAA_RESOURCE_PRIORITY NORMALPRIO+10 - * ... - * /* Locks the resources AAA.*/ - * tprio_t aaa_old_prio = chThdSetPriority(AAA_RESOURCE_PRIORITY); - * /* Accessing resource AAA */ - * chThdSetPriority(aaa_old_prio); /* Unlocks AAA.*/ - * ... - * @endcode - * - *

      Mutual exclusion by message passing

      - * Another method is to make a single dedicated thread execute the critical - * code and make it work as a messages server. The other threads can request - * the service to the server by sending a properly formatted message and - * then wait for the answer with the result.
      - * This method is very useful when integrating into the system components not - * designed to be reentrant or to be executed in a multithreaded environment, - * as example a 3rd part file system or a networking protocol stack. - * - *

      Advantages

      - * - It is possible to encapsulate very complex logic without worry about - * about concurrent accesses. - * - If the encapsulate code uses a large stack area only the server thread - * have to allocate enough RAM, the client threads save RAM by just - * requesting the service to the server. - * - Clean system architecture. - * - This method also implements a form of Priority Ceiling. The ceiling is - * the priority of the server thread itself. - * . - *

      Disadvantages

      - * - More complex implementation, a protocol must be created between clients - * and server. - * - Two context switches are required for each request to the server (but - * ChibiOSRT is very efficient at that). - * - Requires a dedicated thread as server. - * . - */ diff --git a/ChibiOS_2.0.8/docs/src/portguide.dox b/ChibiOS_2.0.8/docs/src/portguide.dox deleted file mode 100644 index c475bfd..0000000 --- a/ChibiOS_2.0.8/docs/src/portguide.dox +++ /dev/null @@ -1,127 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_portguide Porting ChibiOS/RT for Dummies - * Porting the operating system on a new platform is one of the most common - * tasks. The difficulty can range from easy to very difficult depending - * on several factors.
      - * We can divide in problem in several classes of progressively increasing - * difficulty: - * - @ref port_board - * - @ref port_family - * - @ref port_chip - * - @ref port_core - * . - * Another kind of port type is porting to another compiler and this is an - * added complexity level on the above classes. The kernel itself is portable - * but the port-specific code usually contains compiler specific extensions to - * the C language and the asm files syntax is almost never compatible. - * - * @section port_board Porting the OS to a new board - * This is the easiest port type, the scenario is that the specific - * microcontroller is already supported and a demo exists. This scenario also - * applies when porting the OS on a custom hardware using a supported - * microcontroller. This task can be easily performed with the following - * steps: - * -# Create a new directory under ./boards and copy inside the board files - * from another board using the same microcontroller. - * -# Customize the board files: - * - @p board.h This file contains the I/O pins setup for the uC, it - * may also contain other board-dependent settings, as example, the clock - * frequency. Customize this file depending on your target hardware. - * - @p board.c This file contains the initialization code, it is possible - * you just need to customize @p board.h and not this file. If you have - * some hardware specific initialization code then put it here. - * . - * -# Create a new directory under the ChibiOS/RT installation directory: - * ./projects/@ - * -# Copy an existing demo code under the newly created directory. - * -# Customize the demo: - * - @p Makefile You may edit this file in order to remove the test related - * sources and/or add you application source files. - * - @p main.c It contains the demo simple code, clean it and write your - * own @p main() function here, use this file just as a template. - * -# Compile your application and debug. - * . - * @section port_family Porting the OS to a closely related microcontroller - * In this scenario all the above steps are required but an analysis must - * be performed to evaluate the differences between from the supported micro - * and the target micro. Often the micros just differ for the memory area - * sizes and a change to the linker script is enough (the file is usually - * named @p ch.ld). Chips having more or less peripherals, everything else - * being the same or compatible are not a problem also as long the timer and - * the serial peripherals used by the port do not change.
      - * If there are differences in the internal peripherals, as example non - * compatible interrupt controllers (this happens in the LPC2000 family) - * or differences in UARTS, timers etc then the port falls in the following - * category. - * - * @section port_chip Porting the OS to another microcontroller using the same core - * This kind of port is required when a target microcontroller has the same - * core (a common example: ARM7) of a supported microcontroller but has - * differences in the internal peripherals.
      - * If this is your case proceed as follow: - * -# Create a new directory under @p ./os/io/platforms and - * name it with the microcontroller name (or family name).
      - * In case of the ARM-based microcontroller you also need to create a - * equally named directory under - * @p ./os/ports/@/@ and - * put there the microcontroller related files such as the vectors table, - * see the existing ports as example. - * -# Copy into the newly created directory the most closely related existing - * chip port or the naked template files from - * @p ./os/io/templates. - * -# Work out the differences in the drivers or implement them if you started - * from the templates. - * -# Edit/create the documentation file @p platform.dox, this - * is required if you want to regenerate this documentation including - * your work. - * . - * Usually this kind of port just requires a serial driver (and those are very - * similar each other) and some code for the interrupt controller (this one - * can be part of the core port, as example the Cortex-M3 has this as standard - * part of the core).
      - * When the chip port is completed created your application as seen in the - * previous sections. - * - * @section port_core Porting the OS to a whole new architecture - * This is the hardest scenario, the time required by core ports depends - * strongly by the target architecture complexity and the level of support you - * need for the architecture specific features.
      - * As a reference, the MSP430 port took me 2 hours and it worked at the first - * run, it can be a reference for simple architectures, the ARM Cortex-M3 was - * painful instead, the architecture enforces you to implement things in a very - * specific way and I spent 2 week to go through all the documentation and - * figure out the correct way to implement the port (you can see that the - * preemption context switch is done in a very peculiar way because the - * exceptions architecture).
      - * One thing is sure, port an OS to a new architecture is not an easy task and - * if you have the required experience for such an effort then probably you - * don't need any advice from me. Just follow the directory patterns and fill - * the OS template files, the hardest part is decide the correct and efficient - * way to implement the context switching. - */ diff --git a/ChibiOS_2.0.8/docs/src/roundrobin.dox b/ChibiOS_2.0.8/docs/src/roundrobin.dox deleted file mode 100644 index abe416f..0000000 --- a/ChibiOS_2.0.8/docs/src/roundrobin.dox +++ /dev/null @@ -1,57 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_roundrobin Round Robin scheduling explained - * Unlike many other RTOSes, ChibiOS/RT supports multiple threads at the - * same priority level and schedules them using an aggressive - * round-robin strategy.
      - * The strategy is defined as aggressive because any scheduling event - * causes the round-robin threads to rotate.
      - * A round-robin rotation can happen because of the following events: - * - The currently executed thread voluntarily invokes the @p chThdYield() - * API in order to allow the execution of another thread at the same - * priority level, if any. - * - The currently executed thread voluntarily goes into a sleep state - * (see @ref thread_states), when the thread is awakened it goes behind - * any other thread at the same priority level. - * - The currently executed thread is preempted by an higher priority - * thread, the thread is reinserted in the ready list (see @ref scheduling) - * behind any other thread at the same priority level. - * - If the @p CH_TIME_QUANTUM configuration constant is set to a value - * greater than zero and if the specified time quantum expired and if - * a thread with equal priority is ready then the currently executing - * thread is automatically reinserted in the ready list behind any - * other thread at the same priority level. - * . - * As you can see the @p CH_TIME_QUANTUM setting is really useful only if - * there are threads at the same priority level that can run not preempted - * for long periods of time and that do not explicitly yield using - * @p chThdYield(). Because of this you should consider setting - * @p CH_TIME_QUANTUM to zero in your configuration file, this makes the - * kernel much faster and smaller and does not forbid the use of - * multiple threads at the same priority level. - */ diff --git a/ChibiOS_2.0.8/docs/src/saveram.dox b/ChibiOS_2.0.8/docs/src/saveram.dox deleted file mode 100644 index f69df46..0000000 --- a/ChibiOS_2.0.8/docs/src/saveram.dox +++ /dev/null @@ -1,88 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_saveram Saving RAM by declaring thread functions "noreturn" - * One of the problems, when writing embedded multi-threaded applications, - * is that the thread functions do save the registers in the function - * entry code even if the system does not require it, exiting such - * a function would terminate the thread so there is no need to preserve - * the register values. This can waste tens of bytes for each thread.
      - * Consider the following code: - * @code -#include - -static WORKING_AREA(waMyThread, 64); - -static t_msg MyThread(void *arg) { - while (!chThdShoudTerminate()) { - /* Do thread inner work */ - } - return 1; -} - -main() { - chSysInit(); - ... - chThdCreateStatic(waMyThread, sizeof(waMyThread), NORMALPRIO, MyThread, NULL); - ... -} - * @endcode - * The resulting ASM code for the thread function would be something like this: - * @code -MyThread: - stmfd sp!, {r4, r5, r6, lr} - ... - ldmfd sp!, {r4, r5, r6, pc} - * @endcode - * Being that function a thread there is no need to save those registers, in - * embedded applications often the RAM is a scarce resource. That space can be - * saved by modifying the code as follow, using some advanced GCC extensions: - * @code -#include - -static WORKING_AREA(waMyThread, 64); - -__attribute__((noreturn)) -static void MyThread(void *arg) { - while (!chThdShoudTerminate()) { - /* Do thread inner work */ - } - chThdExit(1); -} - -main() { - chSysInit(); - ... - chThdCreateStatic(waMyThread, sizeof(waMyThread), NORMALPRIO, - (tfunc_t)MyThread, NULL); - ... -} - * @endcode - * This will make GCC believe that the function cannot return and there is no - * need to save registers. The code will be a bit less readable and less - * portable on other compilers however. - */ diff --git a/ChibiOS_2.0.8/docs/src/stacks.dox b/ChibiOS_2.0.8/docs/src/stacks.dox deleted file mode 100644 index 0dff8cd..0000000 --- a/ChibiOS_2.0.8/docs/src/stacks.dox +++ /dev/null @@ -1,114 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_stacks Stacks and stack sizes - * In an RTOS like ChibiOS/RT there are several dedicated stacks, each stack - * has a dedicated RAM space that must have a correctly sized assigned area. - *

      The stacks

      - * There are several stacks in the systems, some are always present, some - * others are present only in some architectures: - * - Main stack, this stack is used by the @p main() function and the - * thread that execute it. It is not a normal thread stack because it is - * initialized in the startup code and its size is defined in a port - * dependent way. Details are in the various ports documentation. - * - Interrupt Stack, some architectures have a dedicated interrupt - * stack. This is an important feature in a multithreaded environment, - * without a dedicated interrupt stack each thread has to reserve - * enough space, for interrupts servicing, within its own stack. This space, - * multiplied by the total threads number, can amount to a significant RAM - * overhead. - * - Thread Stack, each thread has a dedicated stack for its own - * execution and context switch. - * - Other Stacks, some architectures (ARM) can have other stacks but - * the OS does not directly use any of them. - * . - *

      Risks

      - * The most critical thing when writing an embedded multithreaded application - * is to determine the correct stack size for main, threads and, when present, - * interrupts.
      - * Assigning too much space to a stack is a waste of RAM, assigning too little - * space leads to crashes or, worst scenario, hard to track instability. - * - *

      Assigning the correct size

      - * You may try to examine the asm listings in order to calculate the exact - * stack requirements but this requires much time, experience and patience.
      - * An alternative way is to use an interactive method. Follow this procedure - * for each thread in the system: - * - Enable the following debug options in the kernel: - * - @p CH_DBG_ENABLE_STACK_CHECK, this enables a stack check before any - * context switch. This option halts the system in @p chSysHalt() just - * before a stack overflow happens. The halt condition is caused by - * a stack overflow when the global variable @p panic_msg is set to - * @p NULL, normally it would point to a panic message. - * - @p CH_DBG_FILL_THREADS, this option fills the threads working area - * with an easily recognizable pattern (0x55). - * - Assign a large and safe size to the thread stack, as example 256 bytes - * on 32 MCUs, 128 bytes on 8/16 bit MCUs. This is almost always too much - * for simple threads. - * - Run the application, if the application crashes or halts then increase - * the stack size and repeat (you know how to use the debugger right?). - * - Let the application run and make sure to trigger the thread in a way to - * make it follow most or all its code paths. If the application crashes or - * halts then increase the stack size and repeat. - * - Stop the application using the debugger and examine the thread working - * area (you know what a map file is, right?). You can see that the thread - * stack overwrote the fill pattern (0x55) from the top of the working area - * downward. You can estimate the excess stack by counting the untouched - * locations. - * - Trim down the stack size and repeat until the application still runs - * correctly and you have a decent margin in the stack. - * - Repeat for all the thread classes in the system. - * - Turn off the debug options. - * - Done. - * . - *

      Final Notes

      - * Some useful info: - * - Stack overflows are the most common problems source during development, - * when in trouble with crashes or anomalous behaviors always first verify - * stack sizes. - * - The required stack size can, and very often does change when changing - * compiler vendor, compiler version, compiler options, code type (ARM - * or THUMB as example). - * - Code compiled in THUMB mode uses more stack space compared to the - * same code compiled in ARM mode. In GCC this is related to lack of tail - * calls optimizations in THUMB mode, this is probably true also in other - * compilers. - * - Speed optimized code often requires less stack space compared to space - * optimized code. Be careful when changing optimizations. - * - The interrupts space overhead on the thread stacks (@p INT_REQUIRED_STACK - * defined in @p chcore.h) is included in the total working area size - * by the system macros @p THD_WA_SIZE() and @p WORKING_AREA().
      - * The correct way to reserve space into the thread stacks for interrupts - * processing is to override the @p INT_REQUIRED_STACK default value. - * Architectures with a dedicated interrupt stack do not require changes - * to this value. Resizing of the global interrupt stack may be required - * instead. - * - Often is a good idea to have some extra space in stacks unless you - * are really starved on RAM. Anyway, it is best to optimize stack space - * at the very end of your development cycle. - * . - */ diff --git a/ChibiOS_2.0.8/docs/src/stop_os.dox b/ChibiOS_2.0.8/docs/src/stop_os.dox deleted file mode 100644 index bc74b03..0000000 --- a/ChibiOS_2.0.8/docs/src/stop_os.dox +++ /dev/null @@ -1,140 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_stop_os How to cleanly stop the OS - * Stopping the OS should not be normally required but there are scenarios - * where one might want the complete control over the system again. - * As example entering into a bootload mode, or invoking some flashing - * algorithm locked in ROM.
      - * ChibiOS/RT does not have a shutdown API and there is a reason for this, - * stopping the kernel would not be enough, a well defined operations sequence - * is required.
      - * The shutdown operation should always be implemented into the @p main() - * function because in that context the stack pointer is guaranteed to be - * in the area allocated by the startup code. Stopping from a thread would - * leave the stack pointer "somewhere".
      - * The shutdown sequence should include the following steps, some steps - * are optional and depend on the application: - * - Safely stop critical threads. As example a thread that uses a File System - * should flush all the modified buffers to the persistent storage before - * terminating.
      - * The system should be designed to request the thread termination using - * @p chThdTerminate() and then wait its termination using @p chThdWait(). - * This phase can be skipped for non-critical threads. - * - Invoke the xxxStop() method on all the active device drivers, this - * disables the interrupt sources used by the various peripherals. This - * is required in order to not have interrupts after the shutdown that - * may invoke OS primitives. - * - Invoke chSysDisable(). - * - Stop the system timer whose service routine invokes - * @p chSysTimerHandlerI(). - * - Disable any other interrupt source that may invoke OS APIs. In general - * all the interrupt sources that have handlers declared by using the - * @p CH_IRQ_HANDLER() macro. - * - Perform any application related de-initialization. - * - Invoke chSysEnable(). - * . - * Now the OS is stopped and you can safely assume there are nothing going on - * under the hood. From here you can also restart the OS after finishing your - * critical operations using the following sequence: - * - Invoke chSysDisable(). - * - Restart the system timer. - * - Reinitialize the OS by invoking @p chSysInit(). - * - Restart your device drivers using the @p xxxStart() methods. - * - Restart all your threads. - * . - *

      Example

      - * This is an example of an hypothetical application that have to shutdown - * the OS when a certain event is generated. - * @code -#include "ch.h" -#include "hal.h" - -/* A shutdown flag.*/ -bool_t shutdown_required; - -/* Critical thread.*/ -static void my_thread(void *p) { - - while (!chThdShouldTerminate()) { - /* Normal thread activity code.*/ - } - /* Thread de-initialization before terminating, here you put the critical - thread finalization code.*/ - return 0; -} - -/* Main program, it is entered with interrupts disabled.*/ -void main(void) { - - /* HAL initialization, you need to do this just once.*/ - halInit(); - - /* Main loop, the main() function never exits.*/ - while (TRUE) { - Thread *tp; - - shutdown_required = FALSE; - - /* ChibiOS/RT initialization. This function becomes an OS thread.*/ - chSysInit(); - - /* Starting a device driver, SD2 in this case.*/ - sdStart(&SD2, NULL); - - /* Starting our critical thread.*/ - tp = chThdCreateFromHeap(NULL, THD_WA_SIZE(256), - NORMALPRIO, my_thread, &SD2); - - /* Main thread activity into a loop.*/ - while (!shutdown_required) { - /* Main activity, OS active until a shutdown becomes necessary.*/ - } - - /* Starting the shutdown sequence.*/ - chThdTerminate(tp); /* Requesting termination. */ - chThdWait(tp); /* Waiting for the actual termination. */ - sdStop(&SD2); /* Stopping serial port 2. */ - chSysDisable(); - stop_system_timer(); - stop_any_other_interrupt(); - chSysEnable(); - - /* Now the main function is again a normal function, no more a - OS thread.*/ - do_funny_stuff(); - - /* Restarting the OS but you could also stop the system or trigger a - reset instead.*/ - chSysDisable(); - } -} - * @endcode - * As you can see it is possible to jump in and out of the "OS mode" quite - * easily. Note that this is just an example, the real code could be very - * different depending on your requirements. - */ diff --git a/ChibiOS_2.0.8/docs/src/target.dox b/ChibiOS_2.0.8/docs/src/target.dox deleted file mode 100644 index 677c567..0000000 --- a/ChibiOS_2.0.8/docs/src/target.dox +++ /dev/null @@ -1,89 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page target Application Range - * @brief ChibiOS/RT Application Range. - * - @ref applications - * - @ref min_requirements - * - @ref desirable_features - * - @ref upper_limit - * . - * @section applications Application Scenarios - * ChibiOS/RT is usable in many applicative areas, as example and not limited - * to: - * - Automotive. - * - Robotic Applications. - * - Consumer Electronics. - * - Energy Management. - * - Teaching and Learning. - * - Hobby. - * . - * @section min_requirements Absolute Minimum Requirements - * A certain set of minimum system requirements must be satisfied in order to - * use ChibiOS/RT on a new architecture: - * - 8bits architecture minimum. - * - A "real" stack pointer that can be positioned anywhere in the data address - * space. The OS could be ported to architectures with an hardware stack but - * I wouldn't recommend it because the context switch would become - * ridiculously inefficient. - * - Support for maskable interrupt sources and at least an OS-dedicated timer. - * - Support for standard C89 (C99 supported) language with no - * architecture-related non-standard restrictions. Non standard mandatory - * language extensions or restrictions may result in reduced functionality - * or impossibility of use. - * - 256/512bytes RAM permanently allocated to the kernel and its two mandatory - * threads "idle" and "main", the exact amount depends on the architecture. - * This figure is not inclusive of the HAL and device drivers (non mandatory - * components). - * - 8KiB of program space for a full featured kernel scalable down to about - * 1.2KiB for reduced configurations. This figure is not inclusive of the - * HAL and device drivers (non mandatory components). - * . - * @section desirable_features Desirable Features - * - Efficient instruction set for linked lists traversal. The kernel makes - * extensive use of simple and bidirectional linked lists so the performance - * is directly affected by the supported addressing modes, number of - * registers etc. - * - Uniformly sized C pointers. - * - 2KiB RAM. - * - 16KiB ROM/Flash. - * . - * @section upper_limit Upper Recommended Limit - * The application range of ChibiOS/RT ends when one or more of the following - * features are required: - * - Separation between user code space and kernel space, both just logical or - * using a Memory Management/Protection Unit. Applications in ChibiOS/RT are - * supposed to be monolithic and trusted. The kernel and the application - * share the same address space. - * - Multiple applications. ChibiOS/RT supports the single multithreaded - * application model. - * - Multicore SMP architectures. Currently ChibiOS/RT only supports a single - * core unless running multiple distinct and separate OS instances. - * A true multicore kernel is planned for when multicore MCUs will become - * commonly available. - * . - */ diff --git a/ChibiOS_2.0.8/docs/src/timing.dox b/ChibiOS_2.0.8/docs/src/timing.dox deleted file mode 100644 index 721b164..0000000 --- a/ChibiOS_2.0.8/docs/src/timing.dox +++ /dev/null @@ -1,98 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_timing Reliable timings using Threads - * One common task is to have threads do something at regular, scheduled, - * intervals. - * An obvious solution is to write something like this: - * @code -msg_t my_thread(void *param) { - - while (TRUE) { - do_something(); - chThdSleepMilliseconds(1000); // Fixed interval - } -} - * @endcode - * This example works well assuming that the @p do_something() execution time - * is well below the system tick period and that @p my_thread() is not - * preempted by other threads that could insert long intervals.
      - * If the above conditions are not satisfied you may have @p do_something() - * executed at irregular intervals, as example:

      - * T0...T0+1000...T0+2002...T0+3002...T0+4005...etc.

      - * Also note that the error increases over time and this kind of behavior can - * lead to anomalies really hard to debug. - *

      A better solution

      - * It is possible to rewrite the above code using absolute deadlines rather - * than fixed intervals: - * @code -msg_t my_thread(void *param) { - - systick_t time = chTimeNow(); // T0 - while (TRUE) { - time += MS2ST(1000); // Next deadline - do_something(); - chThdSleepUntil(time); - } -} - * @endcode - * Using this code @p do_something() will always be executed at an absolute - * deadline time and the error will not accumulate over time regardless of - * the execution time and delays inserted by other threads.
      - * Note that this solution requires that the @p do_something() execution - * time must not exceed the deadline or the thread would stay sleeping into - * @p chThdSleepUntil(). - * - *

      A different way

      - * Another way to perform activities at regular intervals is the use of a - * virtual timer. Virtual timers are able to generate callbacks at scheduled - * intervals. Virtual timers are one shot timers so you need to restart them - * from within the callback if you need a periodic timer like in this case. - * @code -VirtualTimer vt; - -void do_something(void *p) { - - chVTSetI(&vt, MS2ST(1000), do_something, p); // Restarts the timer. - // Periodic code here. -} - -int main(int argc, char **argv) { - - chSysLock(); - chVTSetI(&vt, MS2ST(1000), do_something, NULL); // Starts the timer. - chSysUnlock(); - ... -} - * @endcode - * Note that the callback code is executed from within the I-Locked state (see - * @ref system_states) so you can only execute I-Class APIs from there (see - * @ref api_suffixes).
      - * This solution has the advantage to not require a dedicated thread and - * thus uses much less RAM but the periodic code must have a very short - * execution time or it would degrade the overall system response time. - */ diff --git a/ChibiOS_2.0.8/docs/src/wakeup.dox b/ChibiOS_2.0.8/docs/src/wakeup.dox deleted file mode 100644 index 42777cc..0000000 --- a/ChibiOS_2.0.8/docs/src/wakeup.dox +++ /dev/null @@ -1,155 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @page article_wakeup How to wake up a thread from an interrupt handler - * Waking up a thread after an hardware event is one of the most common tasks - * that an RTOS must be able to perform efficiently. In ChibiOS/RT there are - * several mechanisms that can be used, often each mechanism is best suited - * in a specific scenario. - * - *

      Synchronously waking up a specific thread

      - * A common situation is to have to synchronously wake up a specific thread. - * This can be accomplished without the use of any specific synchronization - * primitive, it uses the very efficient low level scheduler APIs, note that - * you can also optionally send a simple message from the IRQ handler to - * the thread. - * @code -static Thread *tp = NULL; - -void mythread(void *p) { - - while (TRUE) { - msg_t msg; - - // Waiting for the IRQ to happen. - chSysLock(); - tp = chThdSelf(); - chSchGoSleepS(PRSUSPENDED); - msg = chThdSelf()->p_rdymsg; // Retrieving the message, optional - chSysUnlock(); - // Perform processing here. - } -} - -CH_IRQ_HANDLER(myIRQ) { - CH_IRQ_PROLOGUE(); - - // Wakes up the thread. - chSysLockFromIsr(); - if (tp != NULL) { - tp->p_rdymsg = (msg_t)55; // Sending the message, optional - chSchReadyI(tp); - tp = NULL; - } - chSysUnlockFromIsr(). - - CH_IRQ_EPILOGUE(); -} - * @endcode - * - *

      Synchronously waking up one of the waiting threads

      - * Lets assume you have a queue of waiting threads, you want to wake up - * the threads one by one in FIFO order, if there are no waiting threads - * then nothing happens.
      - * This can be accomplished using a @p Semaphore object initialized to zero: - * @code -CH_IRQ_HANDLER(myIRQ) { - CH_IRQ_PROLOGUE(); - - // If there is at least one waiting thread then signal it. - chSysLockFromIsr(); - if (chSemGetCounterI(&mysem) < 0) - chSemSignalI(&mysem); - chSysUnlockFromIsr(). - - CH_IRQ_EPILOGUE(); -} - * @endcode - * - *

      Synchronously waking up all the waiting threads

      - * In this scenario you want to synchronously wake up all the waiting threads, - * if there are no waiting threads then nothing happens.
      - * This can be accomplished using a @p Semaphore object initialized to zero: - * @code -CH_IRQ_HANDLER(myIRQ) { - CH_IRQ_PROLOGUE(); - - // Wakes up all the threads waiting on the semaphore. - chSysLockFromIsr(); - chSemResetI(&mysem); - chSysUnlockFromIsr(). - - CH_IRQ_EPILOGUE(); -} - * @endcode - * - *

      Asynchronously waking up a specific thread

      - * If you have to asynchronously wake up a specific thread then a simple - * event flags can be used. - * @code -static Thread *tp; - -void mythread(void *p) { - - tp = chThdSelf(); - while (TRUE) { - // Checks if an IRQ happened else wait. - chEvtWaitAny((eventmask_t)1); - // Perform processing here. - } -} - -CH_IRQ_HANDLER(myIRQ) { - CH_IRQ_PROLOGUE(); - - // Wakes up the thread. - chSysLockFromIsr(); - chEvtSignalI(tp, (eventmask_t)1); - chSysUnlockFromIsr(). - - CH_IRQ_EPILOGUE(); -} - * @endcode - * - *

      Asynchronously waking up one or more threads

      - * By using event sources it is possible to asynchronously wake up one or more - * listener threads. The mechanism requires a single initialized - * @p EventSource object, all the threads registered as listeners on the - * event source will be broadcasted. - * @code -CH_IRQ_HANDLER(myIRQ) { - CH_IRQ_PROLOGUE(); - - // Pends an event flag on all the listening threads. - chSysLockFromIsr(); - chEvtBroadcastI(&my_event_source); - chSysUnlockFromIsr(). - - CH_IRQ_EPILOGUE(); -} - * @endcode - */ diff --git a/ChibiOS_2.0.8/exception.txt b/ChibiOS_2.0.8/exception.txt deleted file mode 100644 index 30ce186..0000000 --- a/ChibiOS_2.0.8/exception.txt +++ /dev/null @@ -1,54 +0,0 @@ - GPL Exception Text - - In addition, as a special exception, the copyright holder of ChibiOS/RT, -gives You the additional right to link the unmodified code of this Program with -code not covered under the GNU General Public License ("Non-GPL Code") and to -distribute linked combinations including the two, subject to the limitations -in this paragraph. - - 1. Non-GPL Code permitted under this exception must only link to the - unmodified code of this Program through those well defined interfaces - identified as "Approved Interfaces". - 2. Every copy of the combined work is accompanied by a written statement - that details to the recipient the version of ChibiOS/RT used and an - offer by yourself to provide the ChibiOS/RT source code should the - recipient request it. - 3. The combined work is not itself an RTOS, scheduler, kernel or related - product. - 4. The combined work is not itself a binary library intended for linking - into other software applications. - - The Approved Interfaces - - 1. The files of Non-GPL Code may include the unmodified ChibiOS/RT - distribution header files contained under: - ./os/kernel/include - ./os/hal/include - ./os/hal/platforms - ./os/various - without causing the resulting work to be covered by the GNU General - Public License. - 2. The files of Non-GPL Code may link to the unmodified ChibiOS/RT - distribution files contained under: - ./os/kernel/src - ./os/hal/src - ./os/hal/platforms - ./os/various - without causing the resulting work to be covered by the GNU General - Public License. - 3. The files of Non-GPL Code may link to, or include, the modified or - unmodified ChibiOS/RT distribution files contained under: - ./os/kernel/templates - ./os/hal/templates - ./os/ports - ./boards - ./demos - without causing the resulting work to be covered by the GNU General - Public License. - - Only the copyright holder of ChibiOS/RT may make changes or additions to the -list of Approved Interfaces. - - You must obey the GNU General Public License in all respects for all of the -Program code and other code used in conjunction with the Program except the -Non-GPL Code covered by this exception. diff --git a/ChibiOS_2.0.8/ext/ext.dox b/ChibiOS_2.0.8/ext/ext.dox deleted file mode 100644 index 6e07d87..0000000 --- a/ChibiOS_2.0.8/ext/ext.dox +++ /dev/null @@ -1,45 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup external External Components - * ChibiOS/RT supports several external libraries through support interfaces - * and/or demos. Credit should be given to the original authors for making - * available such useful code.
      - * The current list of supported component is: - * - uIP, by Adam Dunkels at the Swedish Institute of Computer Science, - * link. - * - lwIP, many authors, - * link. - * - FatFs, by "ChaN", - * link. - * . - * External components and libraries are not directly supported and are used - * "as is" or with minor integration patching. - */ diff --git a/ChibiOS_2.0.8/ext/ff007e-patched.zip b/ChibiOS_2.0.8/ext/ff007e-patched.zip deleted file mode 100644 index e6aab7a8be0fa25a47cc0a6717ec455f5103f45e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634222 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

      N`!+X)^X9xNH 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 z zCsSK-d%_31m%DE4KDyWP|0mPEpy*L&>HL*@wBqM>zNJr3+~3_?Zpzyief4{v(7S+0 zrrpd}JNDRwzchK1pIYPgYDeg7*JkbI@2xi%-~1hpW@VviqNcG|t+3yEA@JpG-C zsm-~#TgIL>uP@v?`1X20ajL!e!g+1^vR!s=6B& zPwv=RUw1t7!`jP*9yjLO^qwp2>%M-zcK`B&&(HVyoh$kI`@^Tdm2ol_88b9zxpW=@ zpR?`{?%n0T`}64sdf~gIwzKBrgW2+YdrZ#A_-<<{yIZOxE-Z&Fmi_bL@MjYr=vp(|-w&@D{7y}>{(ZKSIlV8&&)Fzb zXr?vj&gAk?s-3pFRs47 zF7Z}<#dFn%e-EB`b2n+n&)=(We7E5}_wsJ+qW^#5a^5S-TC3eZXLX}KW3{J+*8Ti% zzZG=i5X+-v^-+QOw@K_TOGIpP09yE2hwF5mQC-jaIurEX)y%9m0TL~h8g zn0KttZRur$yM-BQoo5=muOC1A^>guDwsM(Uj)!h)6@U6MZ|{_wfivX%4}a-eC3N~0 z|G#SsW9HU&KL|EGQ(8MWFsbr>jPmX7Dz4-65AX16{=33P<y?!EVC?cw0%ZJGZU>U6$+bIj(( z)XU|G&$W&eO2z#Cpw{`v`%dQOeDBqh?{;Q?x%}XBYZWLXWuFkg?w0QQonPLSO3m3D(&qB-=RAG!_2Rte zVqd+!XfSuL$f~y`UlRAuJpR05bMeh*YY+ZjKJW0ff^VlH_Uvssbzb}DYk}2mQ}ZUP z34%sAI_F=W;JeJ_;Ze|H82{$|lV47fsQG*tw03rb&!i*I&ge(C*L;j@ubFMqd0?(G zzu%uZZ8=7&T>79nsA{P-&iho@?*9RIcy%VLY_$A*`r5*nnrjR1sQD^^kAkvat~lGL z^ANaaJCE&kfL`Z8b9D~-(mDP0^SZ*vv(H<7Nib4TvIiY`R4UbVa@vYNn@V4Zm+$jGY``hR4>}{S z(2n=^5|2GOvd4~IJ9x2u^&B>Ld8a)pd;CwC*T3hh+8Da7_Qv;8sZ-{ek&FKAaZCOF zvWC5S`j=;yANbA9_S&KRFtnnsw{z}plh4&sHLvce#8}Urm410E|5}r>;|pUHxjgZ|(Bhxs=i;Qo|Gqi(@{`ZLdft~-=UX>Vzf|qHqxf~*kLz>pP5k+N|J!}- zZBMJ^4{e+KP5u|xoqgdUvN`!iYP_c}w(tFua(lpNClo(_y3;cH;jNe7|8##Z z?w&t=uV?hu7)#qUyvLE&3n#^|K}Kx~1|`Z|rS;Km3_JBlE+r z%Dul$eq6D&6?*r?dd-vXS?|B^`uRclnW{DK zoipC>3BP{$FMEaQJhuDVGgV}2U%Y*`vhl5LO!YiA_ryK+H%{JfzxVUm!A5yrYuCw| zpkw6Dw%)(|;Qf;wDpL1BYk4cA`*vo9Z%+BXiVvVxvQ$~0nzz!&)7KvE z-0`7SYL(}N44Iw9j}HDcu~BnPDtdaf*ZezZam~A;kB80u`SzH+5%S&U@@V?n!+Y?l zk7%y~tFO7X&~38r#2=}zH|Xir%x}vQQjv0hH>aY&jO++vgvCY-sgMAlQ=kok4Ju%Riy(&+=unwr%<*=Vi;g zu6Bn1AJ$JM5`pX~I9yX2Z z{QCJt@7?G1{NM66&MPhWa`5$|^WV>J6yL^Iy)i%9@2AO<_l8&0Chm8Mi>c!+=ldhu z+qHN;o4foc-HZ0`Pu<`B?DyP1e`MCxNX2kp-ge~Es(m-_rO5xOi#9#yr8nP9KRWTh z;+k`PZnoWzzsGz0G+7e=d`0Y`^G9W3{&aV*K3*f&oIiKnZtovEJ7&jn8&~YS>?gN8 z@m7~Y;{Sy?W$ul4Z z+~&!(@10jJUs&636}>Xw_Ltwp`qvYV|NZp&v*@YJ54H*$z1F-p4Bhs9L-~XFV9&Rp zI`GMZ?K2khFD%_=epCARd&4`PhqwI~NSgNH?Vrt?7aRDexIcYXDkZZt*89*+@0FiE zaLxYn=bC13l~j$rU%g6TcIbB=G7smwV==ES zZ;}dIdfko>PpYJ*c}~7@=V$8c0LUPWrXc75qR#u56J!sm2L5<<3bBZqUwmGS|6!v{ zq1o1;ru)%!*;lzns!aNQdn`YK>WV!oT=!!v3m#WU?ed%?0Xpt&^6Sh9HQ%Jor5WP< z`zo_4q75R2K#sW?w*0k;$Yg~;OVDDV&zTZxu8$rbn{2Hww>)vSjgbEN^M4;5HP7eG z=T}?bQhGvMeV=8q1@BQ6uMj`bZ39J8ZJtvrKzpmYk7wRc>pyb(T4Kze8f+Q>$`=_3AgXKc8PbcRu%ZzvpG174xrfZ=avM^X69m$0ioPKEzFLDgIaf{Acm{ zsdG1P_CNe#Z{bo+Bo-sM>Z*cHys`as1EY>+HXp>?qq6 z#`(PDU3cxRIr8u3SKIRLv(IPgjNcSzyZLu;+{EkGKg?shZWm+iS#duG)UwT5Tk~J) zaFxlPb8)MFPwlYZZeINBT54+9IluMG4_e-PJ#EGPTl**8KL0ZDx!%#*dA{Xww+uaR z^n3B2pYNPf&3~RlD$ZSgUb*)k`}o6QmcJ$hr#yetv*=;zmxrqYmFhZcHfyIIe)Q+B z%+*4vQ`aY~-TSv)UH#j-%8+kW64x^&!qmKM;upEhi+{Z4&78S~VVC|n-|{~6FJ(L5 zH@QQ4f8K`P|7tV)T-+^NuRs5`Z=HMNZ%^{$9M$icKdvdpMIZXU@XfJz@w?;Sh5Z6~ zWnPqOjrQLcf7TwpKWDGpyi%!}{)9V1>w3Aqr(d_T`I%Hb`SYGdZ|t{(sK`vMj`y3N zoLC-KaXxI$-*%nA{qw&qJ9y7IvU7jwjPun}HTw)UwQQEwzFqwy^K*H~JJ0QH*Z&>< z`gh&D@K4_r^Y{IH`r+o)9sm6ooz$IZ0Xl@~a^?!P$VH&5quIA#{xGAY^JKHQ{hrEs zZP!yk?eu4} zYCuhyxuqHxpG@_&aXdc}+O z_r>||{i*5uYT`3lZ{v@LXD7$ot#7ZJ`6K_!?0CNUmyb?-e|dt>A{Wqk!Qpw!7tSo{ zJlD)_58A$Z8M>Y4^@QfO>=?CehvrVN%Kq~=bdU4XAD{CA4?lh3tm~=tU+AgUo4bxl z)%;KQ`Za$)TkZAb{Lx)Es&8n2%9pL$c{y{&{p5_mL%*M`JUI38&YN8B@>v$=mt`-1 zpYrzZ&abi)4_^=9vgY~>Y9wWy6k6ANruFpsOx=Ii5~mbO#aP$w6}r1i^BJ?}+W$)SjtiEpZ_~`rZclLN6etOQkw(8&9y(Q}p)ak7|^zr%rpP4_dCBD~r z=r>n<_vfJZop<+to4fqr&78}{533)q+j&!TQF&_kscD5$&$h?j+`r+!z`PUtD|uBn z>}`L&=1CFz?WCt~?7!q{->H15*Sz-dtK|o`eyR2Raj#wU#!juDNze86el^(=^!oWN=Kr(2W;L#Lt~QBTS6guP?)l9wd-JuTURlVx zua__E>B{fSmyNn(^QZgJ`RV-25B@uRbymy!-faH&=U@N&>G#j-$)bmT+dZdqfLg=g zEh*89YV^dz`|eoGZOfaa$|hd7ye$Hl*Lap)J`2IcuZx3=zDtOWk zTCPYf>^<(eTH^c6I-_ z<%u(MIA4FbGynF{iTQp~@5De0HbD!D<(4m;VIwrv{Pw%b!si8`soV;Sk53MDzs|g& z=KJXBzn$@aKAcTgtv0AsU2}LBXfMIxObxZbMMa>wC&-@q!~Fj9_EdoP)UP?rH~;w2 ziSOrswu?5Dsh!d9@~86Kfp@p9jI5vk*OYqqc`tu|i?z_U6Lz`x=GMMH{BHR{%m0?1 zJIp?D+SJ!we|F#MOU(Mq52_!hO)sebefyMUdFI#Y@Ad1=dA~odKD24=hW`b}kKGTP z@g=XU&#lU@d9%qp&BXmxZh7|SH~#!x@^N0e?46xkw?-d|jN!NbC2;EWzEq1PmpAO6 zn&o=v_mY?KKFW%-^ zY%|X5EWIc0zi+R|-6k%2KDpq_!f#p+`9kz>SFb1s)fy#I$Mg$r`;UD795Xvs*hIc8 ztBirBBeqR0Xx9_FX(H4LIY&-Jvxyj?qAF7w7 zyIby0t}XanY_PLlJN|R#k82CB=sdi&Vq?X>fB&y>S(j%{zx?3MvA2O%)tTRa-n`ge zQd*Y2?YWKky198zC;qs$aQpQ7v!>6_-PB$)x9yYnlnE*^%G2`l?5~?|y3e0Fx9#KF z()U9B^N+UAy?ouezFvQxh5zAyzIQHGww3(+Jpt6pnB6vE(a8xOe?Vh!*E3hBt#|qT zhYhW<3|bSpO(}lQk7s8a<9QX2=f7RAFmXrGvtzBlGgqiNFZ%fGoPPiL@3m5LlQlp$ z1h$*6zx-j=kNj!f@%!xCXEVF=E_9i!GV#Yl&_zC%1AMo+Jf6PRc~3=w1#iFSq#1WW z=W%{E*`p@syp`|equKdEQxlZu`lZ8Z<) zT^Oqtw(c&dmpt)$riWUz(&y9LcE^BMcB*)kfR1=L{1dd&VB?NY&yMNaOF8ZL$w}W| zS@_`WL{Ky9mFh&$)?3&X=7$GCbIOUcNUbY}{W(3gWG-8IT-CIxMPDB7jg$Mw&2N3ZcFN@kd{d9!x?P{4 zyScpk@1ywQy;0W%-q;^Go?MaF+j)1t+1@{=zutTYYM{RheDvG;=B+39t-eSxTe~Ok zU%s$*vWUvB>k;wa)>-C%)6Di>elSwX(pyJ6yrTYm+=YbqiB~|w7A4s;zUxoC_UL}H z_xlc+`rgWCmnYQmZcgbuV_v<#AiZq=rJAryTltOm2))~LMNV#i+YPPX+n&z#YhJu* zJ)67yGrc!b6MjF8*RxN};COxMWxUS%_E|rp+hgiy&1j>6CDckWFs z{u^dCHhR@#e*s;2WZc&s*?*HuwBKDZ>7G`iAemJ3oD|+VN=dL35Wc zGB)?W$BqIiyZqDFFBIJtzIRz$!vBTa)gC^7RC(j| z!p)2M-|q51yq#|;D`)uvt;ySu3*7j=@J_mHoW1z=sa12&n#uFU@rxgSZ`fBP6~jEK zyXAfF?B3JozhC_s-G1wEW`TdBoXW55q1B&1%-Z|2+V+Wc7RU4G<;#!!`l;9W{rvjx zWrjar2W)Sf@n>$%c9#bSCK{{fLDt?vM^Nh3f2$h)c-GGB@3%a0W=iMTsqydTe?FQn zyQx$nP^sYIiK)WdK|?w%r4@Rht$TLht$UzD$4;Kl+`wn-owM%Grej5g*9A`J8mTbZ z%lu4zyi$b%#N>9F>{?d-RYPJVxGo!y~3Bc$`hTw(h;mGjz? zHi4Gs?>>BV?)%FIK21jsPgGZro8y1jOjAhz_A1ao&F;1v%_k>x{3&>JbmsTW4SXLb zt&rJS_~_hE6Q0RhA3>)XiQ6wvobA&&-S$=C$J5`>8_y|~c(>}aj`aIpu`R7-+{yzWp z)$+tYR_`aN>?@t|IPLWV*$&Zji`zjZz0dX*>r%hhMzyD|nf)(X+OkT~uUsc~y33!P z_H!ryf0htF;eDCZDf7zJEya7jKY9OLDR%Pj=XIdrCc|Y%KJR6_etLi9`Hzpj+KPWK zmio5++hUI!^(UlivSWDn%=vu3z3s)DrBQjD?oY3!-2eR{?414i>UnJT;)>o^)-QC+ zv;TheM|8X0=gfk)U*-tyQ-AZU_^tE9ub=%MnnbkURE@ix`*d4z?EN#_=TH7Dac;Yx zKBs$PTKf9-3pbaa54Ynz>c!Ui>+iA1sj@=Xf?-Gj7?V*LnOD>$klIg&Rs= z{55%Vf5~^fk9ED@|Ng9bfB4bu{GHLxC2yT8Y`m`9O-U{f^U$}pvb=XW;7^PW=l2;q z%zoQV`L}8B3IS6Wclk@#9=usvqC0Q?>qk$w|Fz*gmsafN>-EoWNq7D}%Yq9Nf=oJv zzz6DphqqOwKxe0YsFwOO_l#o_=-hep?Uz5yvWZuUxB2<(Xyf*_DT_~PC(52WJCj+w zZ~4MmDxj9UIp{#8RxUYr1d%LsX`L(|; z-`4%qdvj;0h<|goOZLPMFE7<@Ebm^qQ9HHx>V!A;Pcn8-UtH9`_4{7_RKBt=iZRO% zoLRjzHnoBa8o z={4(5+xfyJK$brHc7MZvgU2cFXI(%2ZcoU%%MXIT|M2=@8!7+q+QVI3^{+R~|11$> zJ@>Hk#lK5T%W^|}-@G`y*}r-7&3QT->-s_$?`{8n_D>b78Slxh{N-Ck-~au*FP`t( z)716tU*@sRH(#dk@OQwgN1uxIX21Ua%j2<$$z;`sx3@>9m9LQQt+hXAcmC+lYcF*l z=4{(~=R$jB!wEq zquUD#ACJMLJ1JUsJxriPmLqEBhB1N7e2 z%x_B+LM*NEoLF%)thd{GxBSC(Qk$}uKmW8M_P4;N!}m<5A3c{V_uFL0w11I8b^7-v z-d>;h^u)QBZ_`!J&z(N0&b`@k&9%GV$@(4sroZUOZ|^C2u`!mhpN_6$e7U~u z&8>EcHkUs??@8UM%zQV!w)&p6-(mfklj|qS)>b(Eee>cl-^|+6A13=X`$tZ1`P)9_ z=DowA+_$@>UYhJ^+jE2KzSUki?acRzEhqa9-HCLbckotP=lib{k`mXq@3i$-M-6@ z{zPxz{^jz6=$E_SmOa1rC#3B7!pIwr}pr3>+8hlX3M7kjhS-!!L9ahF+yLXe}DS4 zo$oE*n-?i>mLIgbqW3Xkdi&pbIla^8->s3l(|Bt4|4DypHJbD5EIwQb2r`KjdRe^J zviR8{_-S_S?B_2(c%QOcMeY6`i%-vLq~a!jQvGyvYW_Q!A2w|{vcFW3r$;}6t{u3y z{Ge5jcTy2(#Pa&(1X;QNi()|gGaB35f)<@ro>)=z3^exc=WNO;)T>;6&SuA)w&P2@ zBic(pJ~}k}cV>m}n%cb;8%u9AGS8p7=He1hm3N?!-G?xGfuo0)$h}nlK~wew9Ip2#GQ)b z=hLURUD6lMzMo%bS;HspzR%y;h*M}L=;}1f`E6-IDpuukHa{NLO099;qawzBFXrdd z&oMoxj}$+wmM`*rvp#8y-#58W!hX%0r?(v`NS}J+=G0BupTCEHtU8}u@b-((_9NT* z{Ab$K@t$Avr-t{XEw5dux6rvbslA{6?Oglq=Dow!bJteHNbg)b=WlzQ)cZsa#_pU?JuSG@P3 zNGa1#|9;-its!9sd(ewuIqnQ z=N-6~sQN9>aM|Sv`;LgJ-kG>2N6&tJ(2eaaM}M1ac^|(<_2I0CzthSW?20e*iM8$If*J;`ra%^1jSo;d)56{n_EC z)jTUV?R^zwD)O6uXGX#EYo)p0R=%$NxPIsUpH{s4+zUcGzh=K#`SIE8`2F_hia-AP z*S+fD*W!yz?Dnf?%eL-(clp7JmWg<+Br+)%}($&Q9q()T_;(_h(L9 zo{=h>eqF`qKXV>uMyN$56+fK*`gu*^<$%w*msFYbxACcNC|v+*f~Vkxkg6Li>+{6-=d7N; zX5qGkPadFy%u}Onp(8Gjj&Rh#|F}IB^Vx3ig)W*oVD8Slm3^`f=#IT} zGmmF#sP(%%J$o$?vbD-nh+lkOOl6@p@9ifOD=O>c#G^gk<=0hZt^iG@tH{)@n7KDw zuT{1-uYNxktLpXRU-uNt+I~&7e`kw#=ks2@*gkd5U&~(wg}>)m zS+{5N@Lv7re5$`?@ny@8>v!(U{q#%D`Tg>T)wWL}RPV(<>V5pV-sf)gq}MC9v0l*Q z{P@p>>DT=wr#86>{Qh^xIBdN|N5EL zSsSJEQ>CKs!3wK8zb6Q9pZ`7M&E-d{)D!>2Ilr|!BY&ylrp1|K@8-mPR=Kh8Q>oj| zUk11S*v#b*Ppy|vy!DQ0U?F-zeM{rUG4pS?PKp@soA!*)~4Tdy=~nS|84l=oAr#pP?vAd&wqOsw@h2)bqREk z^r6<*o-4GR-5hT>||W;@$eGp zG>wVe%O?kfZt8;!)%zb>Y*e!6&xa>RyT5xH@NHkLA3_Mck&`00ts!usdb6IV<8t}1+bU~aygP*ks0e;;VmhZ)~XE6z~W z7a29h&rdX8_N)lm)Hhw*KX1Ww(UVG{NvAGNtla$goOt*?f2ZJ1 zD=T%mIX@p33B^ra2D!;FpL4Br`=iir2h8u!u_&_R^j!Ml1n7dwQ;$_lrY>FlIqh+P ze%%i{&h=iG40nEdbZ)jhXKswvz5H;kCZItRax9_{{S@8a_Okn$J{_}^QKCd!e zx4*^gmFEWK#4f8}>y^K>uPv>&uJ($^6q>b~|EH`~&FNjrx1ZPVd9$+cqsk2XJ9j0Y zygJ<1{Pyxq;oZic=CjP7yoxVeK1}LOCA)v>?~-Y%3nTZ2-19zOZnx#;O} zo~rDLf7)xcCO2>H-QNbvyMJw%)ROjm>9#*SpWF9yY9(=x@x4yPtn=?~S>aGd(hH zUp=|z@E^tY?)T?spOt&2p?)y*_tesw#~YFpHm|7LT%CBRR%i}?`Q^m7)scVBF1lyF zsrtw#E6%XZPu<&B7lo%=`}{cjDvf`oAEzzr)TNJ~o&8w6+oI5dGg9@H#vIU?<5QKA zsSA@oJZU%IKmT{B&@!(Jp!2TclJ{A7zOY=8B5N+*cgNzR1!v^bi;%06LCN{?CD7oG z^8Pt~heA$TfzAxIpWZ#YC9cWqdg12>C-~Lt{GGyPT5;){@tr@~d)V`ZR^V~al`(ZY z=e4Z-^djQVr?mAerP{yG2{c`C$11N6G;>uXw8`sg;Euwl?b7?z7p~TkZ8n!~ul#)a zrHaqgHOU*VU(w5x+2Q@-ZJ4B$lKq??PtUwov3Mt160#38^72)MXX>)Y56|iI&-*i{ zWvNkVj@hQakIo)ToL{`@zSj0W=&89*ftprY;h@87?Kz!OUsU{fI9=U8PW|Bav)7j< zZ~mSZQ?q%wU;E?-ublM)-T&-N<(wxqJ^jfa?}&0+&VR8yZm0evemVGVjvoK__(v7* zCx3XoMl)Y_U+P-(+xP2A=GkxG>esY<<+@deLuYKWi{5=@-RxQ~ujwuCb{3Yuv8vg9 z_zG-Iia^Ah#K4~-G`PvHO*}l^b{Cxi5$m9f>s7rzSC)#wL zYY(|;_x^jO`P#Uwzt5gzS-LkI_XU(bK7iP;Dw%ts2o>lGpgZFbby*qR_n@j!R)fHDu{v2Bv@1OSj z`o76`Eo0wJ-q3UA!p3^N^&8`_?TXW9pC|Nd*WUZC?VlA@xAnh2y3Vde#;++fX6@@A zb^28%lhXLlAAWwX-FQ-2-dV#}1^xlGKmMNUzfti|=z4|UpL#bu&97?bwkQ_AuCTj5 zbM419=GFgPSE(PYxwOCN@E^taiOlNzEWIT(SBc1ikA&GVzh#wCiAmj#&rc4%R1~fwRQYB~VpVBAY-0XQZpDnv&Lgi#T!dXU6N<_&bG0T1n-b@%?;s@S%#0*7m;X%Ah5{-V$$v z3Pp4a9?xcXuk&*Xsw_>J7gMo$vEFsh3@u0Z=OAH=`7Pl~Ux1e0JU{Dv=*9G|^7ZU> zKcAhPc-_-OE4saK1^ASnc`eH(m6qt)?D%x}t;!y)^?fHNi|3p1z1<`JIOwC6t@*k* zn|Je1*WB3GvvfX-b(hcjgIC+D-1Y3&uilt1{@8N$+dEb3mp=Y|XU_bS-;CGKUh6yK ztI7^7`PqH>GG4rIqPHG7{BO$dJ>vbL*0-|_>QC(6uvP2*(fgq@%)Wd6IJVG4_8Gr_ ze9XS^zhc|kvhNGE{dA7q&UgO&>e?61*UhW#GyR*+cb`39@>Ow9^Y!z4<8scPD~&t6XU^8TV_R0~yKbw0>+xsx_J7kR zPnfebvVArG#tp0aUq1Y`cUhg#9qYeamMyNoH~YB0;KE`Lk-=f9ts&2#zx+Hsa`cpK>cZI;k%*Vfs!uk8+d7QA=9 zZ530i(Ry4zaoN%H=6+wTIM=PX>=5W!GIhn(JhH9w>;4oyt`ypJ>XM<|chHg9pK67c zd0p9P@$uOo%lH@-8_N|TvgYP}cPv2#d+IBVJv%<7JvLZ3`9f$@A86s@&!;s)%e*db z-0>;RJy5Ss#YT0-9;>{0IWqGObiSWFA#_pSA#lF(a|+M20&i2Aet)t-=(4_}-R9N$ zs|qX5R|htqTKo7JxZG7&TrDEosvVwpr(#aax=$}8{(L$-IX+JPpv9R5$r~4EiL3L~ z-0Ln|9U=?z!ko%EEsH+ASOL0<=-h7=i+80jD=a>oHuvvSPh6QIJNxwWy27Uid=FjD zpSn=_(_v6{^>+%4w9?8q{OplHmG?m zx4JK1W?gn&*?Z?xo%;(jzFKjbiVe|Hx1MVAS`7HEZL#-k;tV z+CBMgdfnWKTZ&&xPv-mFE@Zd+m%+ND`>XuEPx=tCH{|&0!+#d?Z8KBclk5)V+_Jk+b%lrIh)fM{KY#Y?vv1xrtT$CVyt3kaTphac zWyQY7`&4!m?=m&3-m$JgXwA?3xTROU-9FSldwTbDj{V~gUKP*&zTQ!MS#W>f&KsdS zZ7u8nzOOWYdq>La+QXfNn?LFAJoo$2KUr4`&a$|w-`5iT8)bj~-TCyu{pCkZ{SKM% zoxheSbMIee?7jad=G6zzZb{$ibvs^m|G8gZPNiKfE&8WA<=dQ=MUPB({Mr!q?7h~R z853h`GhVCA2sb~T`F!a_?fv&pES>%QeCn0S32}3`^I2P`Ki;tR;i=hg_ms?CeB)Rm zo9wzveJ9Vguio%H{?1>ODeHhf8Txote^@o9#C42sSdUCS+ zy5|k8zRgnY6@?EDnBNz=Cl$J=4{|k?pHt{cE2;8#HWeR=h2*BLeEjt2WOM2El6z;% zR$81B`|)hHvb&$U;>r|R=t0pf%Py6cfQDV#?@xZP||~IygfU;D~>NsdJ|jQk-F)x z*WpL`GGSGIPQSFSUrTI1RlYG_JU!`maNl>89qI+~RyMKI<2ScY5Wl_stDO45=g+iX z%!qfI`rwtbZ{MkN-kNh+thb-LZL#C~!aMx+k2i!p|DpQKn6E5O>g}b((nD$A?cNyO z^t1kM!})e~jIaCuIyX(5I?nUAa^|0_^RBr2`@*~xhyQ(h{48~eb@i`r7V8iGd8m6& z*IIw;of~{1-yh`5+$x>lk}q>>S4qU)EArdQG-LkMdR3)Q{4mQtX5q^h`&+*9{5zJo zPrv@L!EZax_vJCKFDA;|O3M!Yb@=yl)5$I6QENB#{N1waqgT$`psqh>)z)jzYsr^+ zmSa_ux2`p|SE@I5>S<7Y6~3GAzW$mckDmvKN3Z_0NB!a7(jK#th^yvi(Wj@W&az$e zd(Z55bI%>jpSGI6Fz!$7>w8tn_3}YhoOb5d!`pwR^u^S5rsi*Z9AN!^S@rVuGfPX} z%gwgEqxtFc=h?qJEB+pRVfAeK2KjF*cW$s=Uc5(T&pNw^>QCwSH&2;@~A>6i0{AHSCy?QOIbSDP~VK~~6Vt7qq5)>YQ- zH{WMGH;sR(52rEf)U}WQ#pr{M3$75_zi#Z-CkGts6c4bskMs>9-V5HzCQUv=&ZhjbLHj!d@2@NcIwi`ip_-*eT!mh z`WCTFjXr)BGywQ#PRkmjQjxeEnR&CNk59f3x~lJBulzfRj@8K@pPY>g-do{4^Ysg$;mSFIf5R$EUFOZH zDE_xI?xBjv)Fq2SD(x)D-&M3yd%phvd7(SM1s-4c*n4=cR{i}|v55u$zizLY%ksH>Q%TMI$*+WOUJhA5 z{rP(Pv)@%J^g=wX-fY?YDLs37l~cOYUa;QFAiC6`v2*p z55>IEhf2OGvdTW=SM)Zij>!CE&X;;u{oqf7S$y9weLu0kio3M9yl>w3Ls#4D_+|Si z?*8#rO5ESQwC~WlwGY3>&#=F{u+ABxSTb0M(L6H-n%UR+MIgyXXifk zgL}Vxzw)p~V&?4YB0sI=i(=FdzFHbk67l(e*thbcvTrLb=Uq?uXRvO?;k{qH7p>-B zyI-b`(_d0(*>b<~^@+3W_q=@iWp4BLG;95>HEHHW{n==Z-vM~;14fA_1( zpWegoqrZl?KR@>M)cXAnlb@egoxix?>%*F`%~da}=AZxltIjF?_qM((s%LUT?}wJo zuzzyq<@6uZ4$kwsKW}otA5~tfn7KJ~_uqVSuJO0|rnjIb)~5Ep=iVIrw*wQ*%DygK zI{87(2ir4V)9>#+*C@ZQ(knu9RgUb-&$WfmjJ${G6cJA-1DSQHIU%O9S>~(qK4$vh7;K3EX#}oA4$y9u(6_T5};_=fXpaFCB z#MKp3pFV15_TN|O9dXp+iMKnbZLT-R&nfhzm6Z6qI~5-+IQvg6e*6^FIRsfycr4^` z02BMZpU;dZnXU?vg>HClS@r2f#-F0+C!0ZiV$&BDpcc4zI_K(Gt-eL9d7xpM$0{mQ z*B&n14!SX6j-OMorj=E=+?}5f3x(pQh97?dYA${Mt(y4N`{?R7jrsd53!l^oP4c=p zaVKbj=yA^st^Pi6pBB^~NsO^lV~?x({7fUU*ZXMUt;)=Oli$z(9wAfTXF8|leQ{9i zv4dCJZB=L3Zkcj(d$;vmmh8Ll*B(CCGr4_k*`ox1PVeADo2oM3E_p27{(J47I=}0W z;)~vW-qV)aR)Tesk_+i1PJ#C%@=JMPDCQ zfugnSv;Io^%+1zqmu)!9ZtYyow|a-uldrNzuU7v5<-Au#=W~0+oXP7~8zg>yt6pNZ zI`6ScMO>8ew|BKCekWS%+s?K9uVkmb@UN9ykJYd9pQUW}9oc$g*8kFTp5gM}q)TqB zEY{t&zjnr(?@A$@r~f4KaekI=zo=e)tB51#|1Cj3C!7PlI?t+IKKqW->#fR`_o1yz58FCkfAXvzm` zJpF3vCh^_h7pnYA3oL&rH0@{ea@oI@HFAx%z8mxV-0Hj|p7E>xkbK6!u>9Y#h2Oeg z>o2@MIpN=hPiq(dkNKYRd)u|{wYfd#JuCJ``yMyv`^lHnZl!Is{buv>+kdnim%iAs zv*^jW&f}gZw7lJa{)vgPEO`7|rDW=o zsxMr@B0DudZ_bWlJ5J}NFDiC?I^C=Oee#A7Ioa8=q5CU}9u)h1i%xyrG5_$v z&$`r)^W7Xi-HrL;*X=mp&6RU*KkxZ7>ARiDwzAAEB|<%i4T7HWzfRlS9;)~4?IU5; zoX_od_GW#zTOxWhYHGmG-z6Wu+xs2Lm#KOg+a4No{aL=uwdfnmo45Hjtu88kS-^in z_UHFoRlMDA{coQ3{9w556=xeVpCfZqYEua5;tL6VW zPBxr&`eycrueR5i|Fbh~zj9;lrp?|rp7H0`m)hJv(R;*B)wcKTo|5I0AJm-iY(IbY z;trqevTtV}R+rzd)L&NlHMZo){Nukj`F9s?-0Hn_KFj@G_S5@*{fx`;y}x;9{rC-b8<&x#RyGZ#&M%(|@j6ba=0U^`_4c=jQCc z^bur3)Ynyae;btleRHopkg5K0!QSXY_qKnIY5#dR`o_MsFQ;XEyYR_|^Xc!mdnfT( z7cM=RHaUBvEUTLh=d-KVmp(4MW>#irGc&fg>a=IX{;tpipN;A>%0cDrv=8B(TA}Wb zj)69FsxMq+VHBvqKUr{kKD`J!%+ZfyMxXA%iJHx`W-Uo>no27(|>yFNBDaGf{-+R%dL|y)J>f?nQy-M@59&rEI*ZY zF>@}<{Mok`AMR_(+?+p~ng6@pkEB{v_FWH={%w}{ee#E1=Ze{U-y8OH9)JFK!}8~Mzk6-(t(JIV`Koel0zGdD{GA>-_e0e*d2LTGP)R#Ldi~szIne)RAb>Mwja>4U<_Wgh6w5&8L)rs44 zGcfgW!MRrxn!TzvXE0`=C`afD&eX7@o;+lJoUs?I%`MJ z7qU%V^!VASiR|iie&C_{{4&!|yLJ>>aK@^>l9==3;TiqulMO;w^&Nd%yn9FSgJO}l z(Dr!Yvs$53;hc`{PmlB(m+Pq~t_YFkH?RBo^yFt1ovEN<^hMI`zaJgg-f|&->I&te zM@L$XuTKsLnbmh{uJrypmGfE_ZYr_abJOC;fywVDZwOh`clKCaOw7;eSJtog<~V$A zt?H`|`|G=le^s76_;Y$dwiV}nizn~4-+Z-nxyZJ#rE2f?w`@A*`Qf`l<@P()wfp&h zPq|_i{n_5H>8Eqt`o4Ubd8PGrYjW@L*FQEmWw|=Gc82zg4PJ{&w{5eu&w0Mo(BCQW zrq!yAa)0LX|33TXa+3A_+0XdDKh}72XV<$!`u=6<@A4~q8NQzD zJN0JamvEpWI9x9_lT&!02z(BJCv^>sqWrWeF* zJ%2Vlz1;8o*?p;Z|Efg1w$qory+h*n`nYJ1H(I$nR9QZ^mzT({JN5R^{rl~Ov447< zU%&U%i2HgeaDVvS8+-ZRKh`)SSLLOCa4-LJ(;ey>`~LjeJM&NPVZN6tGyJcuIPACY z;_9-mif7Iow5;q)y6cwpqT}BC1MlYStEh~M(o|nqW3L=%^{2K%sQ&q3X}0=$`D6C$ z6Mw|^SiMH3lU;N!8{*3?R z_sQFTI`{W7m+!0e*by93S)x*B`T5DA*D4`X*DkL06EELaSzyE2?{)2C(ZiEd#kWu1 z5Gs?tucF{Vdw!kj9m`cdvYq1T_i|)Dl?tu$x^NLR=)t~x@`n{EvigwedCusg7E`*} z+3S8hGv-rWwegBu0M6fu=3-hv-keidG7eV^wHhdpr(7# zlM8$&FxwKO>;x5E++PtOT2k?Sno~rcUk|Y{JWPIAAWxH!zS7Gd9&Z1t~hpZ zkJ9$Lr8~HU<;z6Vs(9DgEs<5Z6Q&=@{{8ufpHgq4rwZM)`0`pMVz0<*zVo#w-rQ^7 zCvR3A@mS@@wc2X)v+_m!Z=%1KZO)JUT`lxx%jQ{ppHJHSly0v}-L~1u`tgIE{O_Ls z-(21F?dn*xb8;T_G8Kq2}k1lN0QAF6#SNsUv5<|9Zmt)|n4gcKj-+{C-CMTU}*sUHrDT*RewH-pAw^ zR+*Roh>`nd@~w1ZVa2MJ+kY0mTXA@gmD;!RBKtS*Q*H?5S#Mt!TXLf@%k~Z5C-cwi z?^Q>tAG~_a)MDi3 z_nPzPkIp{)yyl~1y9`kpB-+0}I@`A?#zyr>l1v)70+=a$ee#6RS$&7*f)`*y+Uuns z4>!i|^FI{g38?_Cb?hC*yEHTFB z=JxKdlM>FKFUvok`SntVjg9YCE3I((YxbP;q_3CO{Li~mYyR(;qTSrz=U@7%C$315 zJ%4^v~Wu+nO?6%b1>ps4H&CwG(e+9hj-e2fZ zT)(aCW!z7dihGWoR{K6H?s;>s{g2tZ`#b(#Rozj(YftcTbH3M7Im_qXy?M2Ln}5^u z_%|yKpYuK&7`gk)v18wsuK^7f{a$Oe=F$%7`o|kyrDRWcvgUkxT4s9Ruin3_?$p)2 zKa$382xceQgf{gZfh@Un<>WQ}O9=_x;HmLVKKdR)8i*@5`tx5em(d?NmICGPI~9|us}_T<(UX@`e;8U>;!{`o@yXeA znO{qjWOfy<5Wg=2Dfq8Uv;<$f=b51u>i+x~Xxr+Xmhh)nAxrSLx0v)e7vEWDcV^a& zz5K?TwrUyAZ;4OO*L_*=b)n6lzpE`yJ^A&yE6}Ov{o!40eAd(Yjyx{z%1NJED0D_X zircE@^*!_7*J{=O9ZURPEb@#$wQ}k@yCrvSEN@=@;rmLYP|YEzL3Q)3eFcu@3GrIF}7ABT_(%V-;&+oNYnfBSoFP_7)+GO3D!^I9x$=N1V3E4ZsY&qXa?$eXKTWBtKuKhs&#Jzrp zey@HqtK>|)(}~G<6=xaOKMwdV*`8?{ea-N!{GpW1CvV)?%m31jb6&mRa=!WE_s>0@ zUU2p3wKq1`Jq_wt1h?PsHmm#-^ZwYk+}d-JssAP%UVFH2>D#pD&T)I}muo2A+N`JN*v*#$k2mw}DXq{BZ7^ z;|q=a4*lMH>i4CGFK@qn_H?hto_aoQZ;y3$XKt@9d4G7X)$CCAvab*CepXqcuP9}? zdiuKTjnxiTx3`;aDHWP^|NGL#^_@?XvZXI4Sx>V4sB&ZGTbZMOcHWzOz5LkE>6Wu? zd&E?ph=k-)enLZ9q7|IK|fz3*tFx%H`B;OYdQ>K~$?G~~rz&W@ijOR4ANNg*p4TcqQx_zEJUjdG^P-QE?Lr}&`esAU zFl||LsT6Y7*n7_xTEWL39Och9<2w&ubaQNBT+OkCY*W{OCUdpb^VAhrm&mrVgD>6{ z+I8xRVa3P8vwII$&uv*LRH9?X_x90=#`6|iqE%mafR4L6^HxP<>bk|B9vtH@uk$|? zFcUmVp5|`5e)5KproOYs7RJk1evoXhTb&|1ksEZ2JPr}na#J_1eEq-XMR3kyJd31+Un|(h_#c{ zs&9R|eB)Njca*A3|=bUJPFT`tydrZ?8+X zAO9J!n{WQ)s^sr>Hm^6|bgumFsd0a`oX{Ehvh{B=Pk&Fz4lT0dEQ{;%J)ZpL=B=d> zdjC|XT5p-WVc*1=vF*>7rXGKLuYId}{bPeemR;Zf30+%yc<<$@cYkk4PRYLezSwWx z-05+$U!Pk_ZJ(d5_r~wnYnj%chq%(d(*GS%4BYt@BX!6{p1aEnq!au`?+h+tIt;~)*pQHu--f3`*efdeA)kuZ&zyW zn_PcV^?R+*zQPrWuQxpV@0GLv((X;NE4~$jW``4B7MQLw{dcb2mh1PGJDXc_{!N&_ z?(o(2@|t`1Ev~HI^!(7B=NjAgPhR<|fZyZHoVw1JnR8T+Oiqvqy6|vSOmey3{ohIZ z#n;Yfspe`~a`^tqQ)&F)Z`st>dD(Ej6YP$6H>{V?E_`stT%1$Yb?PeRLQu1}e{w*m zoNRAAsM!lzd3fz(-96AzzCY|ZqgCreH(Xo1LE@9sI2#(f<3=$D#)(&GqdbU(geMe1R!_-_D{ZWkQp@u1~B4 zkBX`}uc@%2nJ;_K z@09y`a=*(y-cvu=*Am$D)0wxo{&B$TQ*Z9I7tUwN-m^Zs{i>Gc2J5!Vhp(CK4|V!@ zCA0d^-q-+yWK^L_Vgm;L$d$o{IksdHIY zPd~I;`Tw7D=bk>d7Tfl0f8XQ_bu(*AW&b`GWRq^c9e8v5*H?d4_U!kX2U-!3t+%c1 zb>)pV3G1EzeyxA5vg5nr z9KQMD-_On~7tpfb-(o$dCG%gvtiGS0=XBfFTHo9AS8u;iSM~Dy4|klEFZ0cD-*nHS z>icoe4Xf7Qw>qvUseX zO)ud8R$gRo#`jrehJDPz^INJi-<eW{(# zO)FlNoC0c8)SW2@2n-1#ibQ`{4C_| zS*Nf{@Vw-cW3N?8rmjt{IS0D-_UUgGpQ$U73m={RS-kH@k24=m4TmkJpe&t9dmNy* zPAH30%lG(M$Pr^L;JMP6%FTs8`d3L+~Gn;et^`wgS`K~&0xHtZtOvRkG3?o$`{d0S6f)0&e zbyD}@573fEzU7ItTsn__3(z}P^ZBN8rO&D(r+b;p`)vH2jb?&x6n?Yjb*a>>le(b2 zdHVjKJBVF6&wdNg2dl5eRG-8D)+D6*#deqH=e`*j-9Eg>ui18u+Qxdh>6^2zKd;{S z-K>4B;_tou$)cR|&q&Oj`dx49otxGFUawaC{p8y7Od-3Oh5p~}J^TIi*Xiljpj#cS zf6l(Tntx&Zo83t{Hub!c@XVsT=QG z{rz$zu65_Mwm0AHj;MQ8d`YkhqCu(#~}tA#AHzujB-O)T=6ub@k@&89nFhDl=OyKiK>3Vr{`+1NrSU*2$$MynlEq z*!kP5!?V^OS$#42@vDb%y?dYkpS4_Zr|Yy6`+dK8FZPeqGA{aSx^DSgHhb-8(;qk6 zx3d49b8h?Q)hFdlQ}%y<_$u_!?&+I0M_k{2bHmO5yZVd8>?&8D)BRY-`}gSs$!{CN z<&W9%u3MZm>BPUV;(P1lF5TW)mtH7$_D#CH)AWdM0dn7N-?)F^bM?7tRZ=ydE|q%z zV7Yz8F8}?@-BQ0>cGZ}@{C;fda*vwx?K_3q-{)Ve__)2@W_sJ3Uk|%{m3AL}5MO*| z`N8vUTh}c7aed$Xm|vekXS)9>vgbXR;sKgQFML)jb;_J`x(jH1?H$WGZHYpvYT|Ks zDn46wSIpdT{o}Kv{Q2A3E9SN(6nVSUS$sS_6SS+sa}jvf{W^G8#gl{G>iKa}Ub}qe zq;G03`FL1=zl@)=L8s6}VfAx!cFt)_3R2bL&$HS2*^2jYiuVoYeH9XxVO!RFmiQ4jYS)PtJhOPSQ=}fBNW{d3hc9jJwIg`se1KKKgv4#&*x?pi4Bn zncrW2u;;ZZs5`+gUgz&@+9?F;rrPY7*OqxnMXdbZn~f{Q{dt$(Q}cfG@a(q>dVDqW z+cG|RsMJ{&KREQ!BxJJ6MT_F+hnin!&QSABDtr!7V^{rQ{ol}KM?U|Q`cuol`|wda z-e>##od2j^yC+mP&)DT$p5V@!bx%z~I#oZ`>c4+~*iKxX_uF2ZtCtP-w=MVhGpp!r zZ|$mQukC(WwtlzkcirBe@Vzc*q21*B@sB^3eaoM<#jp8%;2wR>|Kb+rzxO{B{qft} zckNG;inR&*gyM`(etQ%g_I+-p#p)8NWq0#BpNfg!cHVNbu+}eq^5bhCyngKb9&}@W zVRHKaYyQs7ub0nQr~6P{)GcAZ@D3ln`LAtw?pV8mTL0f%-?J}mX5Gs+c|0XT z?)|afpRZZi%Fo+;vU0Xg=kw3Ie|!~XV?WFvz-mn+syuJTl=yJ@}7 zulfE*vBQ}kzB|7cI&1vu>A9)w_R9~>?+#TFyT9jV_>Jq&E9JW1*1P6)zI}i4@22_H z^>TdkgDrS3>Mn9A>OL{kc>4KpTi(z`-doNW7JfH1u2%i1yF781>*NTV`gQB%+@fnf zUkiw}@2T_LQ&aq)U3vd<#hEOfXTYshe`jM&p}E?ih-e-EKIVu%DIn=5B{PG2# zE|=%0nx*~UEl-?z!+B@Lr?cJicGVi^s^f(k^ZWi3Jo;{uGFc(eqUh<7-p`pY)LfGa zo}TO#|9*Lc@0*2jHb0*o<)3f6qi)7^Rly(6z)R+x%{YZXH>2ILnBSHcq{0T8qb;=O zy?sRP*3rqe;XSkE?Y=MEd;dwT3X^}|{NhJP9-2JK56bWSv@-;>;Ime0*Evs?;$z2l4-p*M5jw z{CcI(<6?;%{@+hk?fnk_Q=7itP_Of-xqqFB9`Dt!hfDc87Zes;5wI+@f|S?$rheEo%+a#1$Cw^iypD+^PrU-ZsDZ=AW}a_QHpDsK{f`)n)< zt$1&yc#8DS)Gq(F{+XqJ^ZmL1{5b3Nk{v*({{Kc4=c z$)VQo@?^R&`#BkZXG2e+smA7dcXrNeOT46_25RZn*Xi-<-fF(i7X`Y=+<5;U|7P1I z8iG3u9-W$bJ5xi=dC{jw$7a7(yuUnghKnRz2-SLFxLqS)n%Gjceq zHN@5HEIwCDb$L!&F$c63!}-NC-!9yB{pYiG`MRG^E2Nq{Cw0sL4OV;w zZ*txV8r*oEDWT?lNbc6rZqTh|?#|lVJttIHd^+99{QRJnTg!bF9-N`xja5KSDJs`@`G~E zR6%Ecy?+Mvtn=d)EuOm}&F05m?oJaLu| zXY~#7{IamekBY?}o2?Y$=dY{W{6BWby2}E-a-iet)AelpoK0^Ez5QHU{JfpL{j!1Y zq9c!v%%1yn&yMVj&t{rJpj8o@ZEdb+cBpN4d30i?v3MTj*2`||{B7;uEqO0LnHnKe zxp}Y7`a?@T_e90Dp8Uu6$X5^CB zpKCv!eSXoW|D^KAPp3g!GnXsQOzAuWo-6coHhw8Im;LtP;*U>$o9Ikd*m!gAIdS!U zKW)@MCkLs-y_2cfWV;7+E>OSAv+3OI>*n}58=n-K%gqnj`uXUizIcAwy@yZR7q`X5 zO;!=CD0p%ba{kw$%H!SI`|nuHY0DE*WmBIwr?SwJ_x6$d-CrM_1Kl#5_2R2(q)?;z zZRcGUA8VyHom39|@f3Pq%kmN^LqaO+#qv>*pVe9+yb%iGDgusBU{?#f|FFTZg-kXWmeg zI`(y^{5?L!xRcyOxs_Ve$yymyy)@obNv)=6L1}sXsd-z6r=}YY(|8=XK@6 zb?t?Tter zIs9MmwCD1_owT7{5_HZQ=+FhNz#k7^*@ zmY)vKjMrPP2s#`G-0JdoHjEVdTD)_|$HQ~)Uj`kH^W;c3cm6slw>>_0URQwf-hLZ@ zXM;$gZvpv!e+r&`HxZev5oie-b2yzTp%$7{^!Vsp^ZA=Srl0&LbW-ltQU3dXJ{3zf zozxbzEO>Nc=H*Ncwa7)_qtmuuHt<;S)eo#os%(A~J= zeleEC_Pj?^JVNF{FJVuN5t^JI_r@|(&+h!mqS@eU+vivm*zsOm;-Rt*RFFcBNU_=Z zIW66G{bd8+yw0Qi`E~Z!yPMkr^CxS3EO<2Cm|btV;;fKP@a#6ISeYr*D_(vthyS$| z@8u`cBK~|xtIiOgZ(H$oVNC3!hbQ-GzdQNx^Q`5HyN;?(w7cJJ9IiLt*@E}$Y#XVl z-*c48Zet5Dr`@H3fvvNAW z?94fLXGhJy_jVzj3KuI1|HtIZfsV~xDRlb!i#_(=KUK!;G3hCs9V2x9dEk$y$G&a2 zcR7K7tA|SO%(n}5^`xNZhnhQQe_mVs zYs=i5NJ(ss}XMr8>H-mPU%Mv@R|9yB+B(=a}f4*%!Bd)DdK-t>=xyJvsc}6RJDDXRc6-UG(w6J3CRi`LBzm-aM2Q>SoU0 zXaC;&aHU^fb%*yMxp`;537D~;Tdp{3kC5l%XK#KSJsS5Zb3?nz#@W9OZpz&|)_ni6 zfvHO8(T~qxzDits!d#u#*hVe#(NpkQPsw)NZgOkhlS{l)t?@i^V5>|^pmOJ zcHjx~`L;`rt9b8;u_$gU1KACWtC z6x90raMQUG;|vx5ygh!-<~N1T{oV^|EzXCu1Z6<2zxlRTuB&*nKn9kjHhE6hu-WnH z$+6caC6jd%`5!(yX|7-Aci3!Wds$(^ebL~D&p+QaJ@d^gr1L)%asgum~KpYNSgeWLm8!uijgx3`C>zESkw)*feJ zdC$Mu_KH$q#YWpLhkTQ*dGDrp+&H|W@}JDQ*>4k%UQXb@eEq{K=bc8sJ#X&*u=wMg zqZOt;oYglbFMixP`B`&+xfi_51$?3Pp{iKr!65!RmmK2|90G+isJt=>n|Jl zET~jmjM(w`J&9-0Key%4@!xjyyUz`|j~9{@*t0uX8_n*vR~NdZO`iW`~-uQsMJ6&7fYQ@3xlm zw=tmQc{YBBO(KO}fByR^E&ZaN-FeUJ{Dx|s&p+S3S$=e{WUz)2j z@BI6O`KR`ax6l7xYWDK3_t!g0wS4BkSyq`B|Li+nA+^eLaz@Mz|5I_ZkDq^B=?6Lh z9Mm?;|6%jDZ+n56<@@|evyOb;nOA53{oKRP8KCa%O%_&#&S{UyGgUw@jsJOA_F9zDDCjqmbetot zDHc8WZE_^PsI>FT&u4S(?Zw4^7D}yhnUqmeT)tks|Ges)wx7P2rbNu&E1$-GU;f=G zbADdyit^W=z4pjh6g)Zc(?n&m(!`yh%JO$+hMM!D`Z|5Nn$O_FRl}1uZ|)FJ-?uaC z#z(_UA$@0F zVST;jiL-Z1|N7{lxjsn!D%&mIN(B#2OcZ{8d4g}3%fnMst<6ClkYCD%7N4IS?0%kk zL#^!Yo5Ywuwc$KFKYrdhe{;rq&xsuKv!A}Gc>JX@X1QYha6 z=8Br)$L;NHd*3V!?L5${%!_zc`x?i9F_%4TEdw$zL)p_2BvwL>@pHF{(-ujcV$MntLU9QtO?pW0M&Aj}4lfUynHCwMK=NA@THP~rcH=nJ# zBQU9^&fNdFeq3L*$@Qnd9{!qlwSM2vr|rV~WBi;ARtinDR+pPoIj`-L?=$5<%Yw%z z=3dT}P;-S`JD|@SzQ^a=^p0;E^y+>*oqjlzLoHAVG$3N!e>nh@=-zd-%!J z88VfHkIqIOo~kGO-RdrAPEx=BvVc#{rLTu;W9R&McIG|gSY6PH;pvwRd{!NK0y;Xw zE`6f@h`U_EZ~#Z2^vnpIBI<|=w#F%F?#c)))mdp;e7r#=Fg|IjfXQk z)B=?XADx-WJ^gZk?<$wa$L3n|%Pmiw<FBG)pkT#@P?dMQnklJlOy?)@;g;7T3Vl5{Q-1O z`JxuvE7RXD%-z;5>37)Vq)@l|?ZZX#+il-`?zy$yWqO5**8V*=&v(Q=G;x`%HgQMM zzZ(8;olMv5c)!lR6S}DI!8!AOP#0~P=ky4hx_z;>cN9OJjXW$XH(BXpU7tB9J}h`o zs(7XN#q20}S|v5hbNUOLiVx3zTE;F_Z=2!M z2D(i3r?&SdF4drm2S&W~rsVm}Qvh4jPuK&!lYzg^JpJYxbhDA-Vy(5q9go$Q;f}zXD9jfdCMz7wX+wdtgGAgC$Ydl@oPnEu>WKkm<* zw%kW{SGt++%lv#;EdL5rZX(@U20F0lajn#w#8{!`{CR&qJOZ`!p5N6gySGm6+U%b{ zWt!S`||UW>>aW8Jw__0p5NJFWw)~yT;h5r)#$Y@f7~j5{qhFioOSVc zempyP{<)m#opthV)hbO#p1k<+;K*N-8_xSxyN;axW{{Wn>8D9ar$QqC=fvuW#_2Wo zywQgqzyFmO2kOXu{%QF=agUlO=yHd~%g?Llw!O(#=~TM7v#zi8_Ve<&ZFxc}Z2t4+ zUw*K3jZgRtUtx&7_|7WRBroUbI z98`;X^~^7?t1No<_2>TI8+=u+9i5sl_orrE;NiV-leGjZ3jW;TQlAGZ>E%?pvOjF* zSGB#f@A1oP1;1r4`p*`6TnyTEa`dN3j_~)Q`1!|Ao8SNQq0;Z&^%Sp`^PeC7s1)_v z;hdo7<~qt8}&-?~k!4u;s-# zg--6!(Pq%CTXLO8_4Bv2mwmkH{JFNUyz}|<@8|w}I{ol-@%*+QzU$P$U1EPd8Gq-i zKRvdb&wu)^;>p3sCO+FWgu3(Z&0p;M?RBw5zw3V0O)a)dy5r?!D(16QpE!5>yq!&X z`hMBhoqufQPn}x6(2J$>+s~>W)pl3De0oqL1v<+vrn30Ajov${d4;oiI-eKw{V95O z;Iqk*{2)EZnBW~hXVaNNZ;SWBTD?t2l6IGW-OzQcvUc6`NZb5Qy^kI$b@tm&G_Jq= zVArnj&Lb0z_4R7b9r}8>XMM~6+Cc=Nk?<)kB@f4=*(i+?t#oo*V^d1UV9XcN76hwXT;>gI7)pJ=rXm%HPC z*d$Zv_2&2T>sPm{tL(GPt~d-Di(4nNqwq^FCKe-ukzE`*PrJsPn=z`=l9o2 zm3^}Le=>Na?)`iFuuiY@K& ziaDHlLrCs_VePw_@6Q{5_*^+ZeM-3ew=WgD>pcEG{ZSkt$AI{Q}g-3^WqGtdtd7&fAeZNuUhmcM&C~c z)KFCnv|D~?s`mEtmUBQC%^v?|r+_cU$}1pAQ#3yu1FSuAoWU zw)TG;Y}dRtxpCM>$Tc~+I%2N$`pXIYf2T=E#cylhdQ9-leodv<<2JU3o$x#A3; z&J*3j`P^B4bb2anZl0JEa)a@*MaPA}MZcEVZSBKzb-#O4kz`VAEO)5(H+uBPDpZzuwne4vk z6L@vR^28Y`ohN6C-*(>l;|=Jhw@2W$6gK|OCXqs&=GO0P3m^VA37PD^=;P_R%=~@J z6KAP(9-V1^+j;MgHw*8n`J$?SKL7sfM~6V8UHvYPr(3hj$@m{O@f7Mdh7^9yuiJly zbw2+*`RCsnUcUK%%x9`xChd-=%FGsp`KFv0{ zC-v=lU2R`~+lBne3Li6SZpytn`)$Iv%nl*&=eUdGY!l)k!W%)iWk@U%wn+s?wP@ zdG7AtCKVR@{0{#S@}It;eM?0>pN;ixClBB19oumUm5*8(0Z8~pSB~XA%~+j z+uBTbc{ZEdKIW$_?^zYdtp-nOq^5aJ1dj_I1CI+L%m>{@pR#Y~hr?6v!|yTkKes$_ zrby@6ZxbNK*FlWW-_~9*w=Jc}JEd;NhtpFLcNMEozr4X`PWjFqAJ5K}my=4W^j!wN z%gXw7#oV@>B5#p8(C*m7nJ?4=lL{W4oGCsXGA?-M$Fp<%pmD(zFP1o&%FVV*UYn#$ zj$ZWP@YMJ`89!(9PN8OD|8skG%xTL_;(z<-+&=BTQ|F&gGj+MnzdOA1KE71 zerF4*9C|Kg`RVk_;%-obDo$lzdEwFY&);h@N;mp1s5+eaBK|O!Q1kWl`M0C)cV92B znZNnN$+g-Q$9_DyR=4qd?p@oDpDXuCJ*x0s*jwyefHz$ zHQ!zxE_LlZ*r;9}H-CPK)Hm~;e{as29__PF*8fk2#rao1>n59fvG~c{O)7d+EA`2o z({WKvpE+nHY^l^6MbS>hzzVB>ABy&5cdU~S`W~TEeWEdcUJn1$ivriPgH)LI%k11d zzqSK(QfcHO(D4_4eJCzgwMsTYLGOw)a0T+}8`d(|+{c?TEa*Kl4Cmq#k=7R$27;==!!N zzYhMk{a5q(NxS&|J^s!=)P7Fts40HbZoGf_!Wk@`r@-eK`5!jW6oMSjlI;O*6hhTE z+fMOT`gFEa{@kB=ZAn5ZTJGQ-)4Ye5c=)W_v*Y8l&7hfK=UtVb4tKv@7`I$;#vP%F z@_v7co)t)Sc}`g|XGh_)b5B8c4jAtI_~_j1_O>bd!q4aC$APCPu4i(nZ3o>xxqpu3 zoVFw(RW0?rIXjCjc@Hn~^2ytCL+;ekbpEGiGllr|>nb;Ieg~Zz1vmKSv}FmYN~wd6 z9k%4Xyu?c~r`( zTk>92@wnlvf5$Y==7%lsw+;E7OAR;L>dc$|`1wzR{K<+Bt3IvzQ@78U-EaB9uTOq^ zsGOT)-`@Q<`y=QOf1b{7#r?g%pNmx1oO_=+Bd^d~r>-))Kt9%XOU=8(yL>ktIoukb zCsQ#Ww4CqK^P<9Mv$>B$=FX4(E#6!4p;&6!N$rgmAJgI!b5jQR8FZ}FaUvZs`HnljnTfG%MY+oX~yat?IpXqDKmC7C>+g~*R8 z#kL)heRXtpe%;O8`_9W|O}Ha9QQl9+qS%Jpb&`ozdS1+qVq0$KOD5p87N2dn*B_C+ z1y(LQuee=IWxLyxcF@v{^G*|0dcl|7#GF4g!KC*jXqm9h`9s=;?R6Wie@wo-Tffe( zzqnmaC0e;|p1Arx%g@DPT}v`U zYZPWmO%zwJyD599RIKaCHBj^Fz}(A`AJUh5U;puL!l~2$*jAZV)c3d7iv7{@@s3aa zZO!`X+3(`rKY!jie~53AyK>dB(=R{QfP8go`kLs)b#krJ?C-=t{_;&Odiu3e{a)RX zGO>NuS01f?nIG2`{`|JnPi(WJ56ilxmsiN2t84kLGey60m)qYtZ07yx@8+C4 zG$Ew-r)A6@n|+m^w*=JIb<|zER#DFA=LHWL%i>3ee(HpHUd#Y(i97gL z$LHh)&>Z%o>G9mAJDtDmyL{H%{!hV!0_}$JU_u{YXPNy!s7G0EW^QYj! zfr*bJJti#yZSy=d^>t*%q-7U(etvLp^7F`uNlQ0Yem?!~!kvZlthXR3FK92zPB|B| zW0UonBC%Odt`@Y5f)+dc)!A|QoYcDye0BAH-~ZfMfByW==JWg?<)rw_`Q|@9`>}Xd zx}s;7+p{CB($~)~ox^%x{PU$3QnQagH><2$_ghEj()Kg*>QNU$*<>ADk4tU{N?x_86oAGoE`J0YWlk`adPj)UR8U~YO}WKy_={~*8XcA zYq>_Ca&cmLM&n(@{>=~gK3{xczkSb5*?T8HSO2Lyf9Thw=a+8SN8dZUy#0&FKKu5B zg-6{tnH+j90a|MJSm%kpr|05==f5oD?^Mih{imv$#p7qQ^TVSmv29B-_q;J(0-CGU z-SWj_n%jf3?*jDwYUa1m`&W{s|s#A$p z{&4!;1wH)g%i4=RKAC-9_LTBXsmA!S_PWAHzjabhE{2ZoMZTD{#&E}nC#Sk^N8S)B zUjdpy`E>X>pQ*<-wy9;{YLgl<{ z)P$Vg6Z*Rk@3Ht?E7tYo;tJ4+z`2(?Jf7EP#8ebMJ^NN?k5KswasGe%w702mdf)Xv zb>Y_!rt208{(SbuQuJGFVf*HQeaC7uubhAS?3<;@yZN6>#g0us;-37=P<;J)(@)zB z&K+9)(6r}u@#;5xOFum}b>+_8ad?i@#iWNvrf&Xc$L+c}bBFV}I~E(Pr<94^S;)&< z{-X76BF{ZJ`SgcVcibsy7yY@dV6*j~=VECSN_sOMrj}=P-c5{8U%2D&rGobFPrnt{ z$GsD~7AX<`SWjxQ_WJXd8?E=8kF415_GRDoua-Ic?7w%a*wIITPwxxEW9fz=AQ zyEh6KZ%pJ?@0(-4{ke{a=YesK1+&Yt)noju@^ ztbKCpH#W~}9WkIKb#HYFLia&;#Xi&t@w}2T2XqG2Qym}As}XlVH!hr)y`);$Uh?@-yE%K^`6lZ( z-pU`(&Xm`aIp;LhrT18;b-G;4xkFQYc*`r|@7X_J{o(gdyY-6kLetNf^Vd}r|M(M= zuISa|_UOb+Vexb63%$DB9-jgoMwp)Hwd~lVqqF17+6(Tv?o^3$-nsMB;a=wNn*~&( z56eC}JCj-bUHU?=ZElaJ-&MS8^TU!mSja>y{ob3{Yu&3`v;Mxn_3#d3(+unzTpiUir=+snc`B*}3=LowVv>!Q%sSmHRhOPzhH4 z{OHhZ?fvNoWnV3Yj3@D>CweYA_Uw>;b@<;$c?-+$i@&~9QBnM0`s3$e=ba{%^#1ug zPpqb@V%@>7pJUHCP3GwZ-F0{V@Z|TKH>h|f7eAT){Q3LK&U?RC@*ZAq_a^-D&p&Q_ ze~SKC#=ejAh%dS?HIuo%+(WVG@1F0G8I!^ngXTQ#pRfM>r)K-+2lsbPcTcW%dvM+O zPG+3kew{Bb&rb;FoiG0>+9D!C#=gBmY|@i!C+6%dcywR(Rq4~s7xuYTnOeD*wO4$8 z@?A&g{0XUd6Y}e9-^J>dYaDg@{!{V#ijN;sKq-6S+RYF6lCyUlmWrt;`n%^dxT2_^ z9`*3y!AAAxn>VO9Cx3qQy?Bq^`|ioD`|>@nRe%POC!UVLo%pR#u1&!?Yu zx~;Q0=QLTT_nbce`i~Fa*NZ<~m7ZAZd7%-5^dCab9*rTZlc{Bi#e@2E2TgqlyCT6 zTXDx0W%KaaSblm`Bercx#-2B(Q@f?_*SrgmJ9&WvBzy!^0Iq(>_xsr?esjL`h2D#f zJpiA?mY(Rnr@IPtroMg6J=d@M?t3ePdqXmi_S;nH@^?1p4o&dsJ=rb3e^0&M^JU9V_f?0-^D=0v51g-sroVdkp+daw zt76;q`R8BnVVf_%PCM(z_U_%qzy7eD+j9=wRP4Qd{(}ud%fMv)j4qU5(hi_p5K#?0tT8az5Xm8oA4dKKxu56RVu1<5yGs@6Pc^jY&%b zZIz22ANu=QFFny?)iKa~=KJ&6b6Cq~=xx>Od&9T-ZmFVQCii(d<-kL7k{GpC}d-{(*2EosNSKFl2eE}tm z!+(8xR|Hx{R#?>cebo^;d1b}?;0ND!y1bLiPfzsNb?i&e?CZ~KK0YfGi#z{8>Rz|_ zZs)i^1sfmy{~y%rt^Dtfds6v|smAu{2W4-qeVD%?w)5^n_IG#AH(8%q`LKMm?ab-N zt#==m5LeFY_?UL>KcBg?$cEcj$i&KDZck-h-1*3eNoyYFZ&)k7fBx*Fm4(|3p6fo;!(0H*YZM zYO~(cdw>4?>e_qPpFiKz{r0)@JgNTM;brY}ZpylCHu(E)sd`TDneNliC3Y0qa{FE~ z*=N1QprWQv-2Ys9qUWq*|K_mme-pb;oSpmgUe(ygKj+Bv$?413*3E5IsWdeb*PHMC z{MXK9n=h!u9+r(t2bIr>Et?1GQ0mLD#FfwN?kTfokh`;BQJGQ zJgFeqK}fX!d#8Ps*A&i_lom4v+JZHzqCkxXF47 zXfozq03PFi!;IhIyw?I$3a%3igCEW)@7nRX7SwuPWN7)}Q_s0~6IQpr{p|eJ-1uEZ z{XYG=AI}b)kL;MV0D4bYm3zGV5cB85*~a;s z1ymiC3!j|n&`h%Vd*_G(O6w? z&UvS)BE83^TARz=Ie%yhPw&ym=DVHu{j0#&TY(>Pe7>82k6#vs?G(dtR@oD0*;o;{DAJ_>8ks*2U~7 zd|D?qDizD?t$*)LTJy2s;elS|>tORgKRcwq`|!SVPLpk< z<|_01+3cLts=88Y_V4rS{rOGz*VOAxZ#B1@6s`Q>@I+?yzVw6NPgmPxRh(>~vi4u8L1*Pam2sck&v?pH0?1-NN_N6}{zp!RxE%oO7C< z(t8lx06ceST1oHpyNaOeON-n8cx(eV`QqmMu;Y&Wlp(?gDjZA1cBy3Z=z$8yGO=w- zviH2Mh_x*S}TYR_k zKHWXm9&)|lixlRZcbX{Ddupn*`MW#k4^80dJvkXP68qGSd;O8!75aQ{_!e%iKfS5D z^*isRl^^daoGS0NKE{yh8d+MnNVT_SoqQbNix`P1RopZ8X7{=dFX zf4=;!@2hqGg92eLbN^-m)nMh1&(7#iKmWZ}Y}J#C88SOS_n_$bcwUQ$sVIIreRivM ztk8SoyEZ=_o@~4x*)eJD#2=~U6?%F#^INqlO{7380t&3SgD07aiQkL)`Lwvb#`BKi zeYo=Q!?K4!D+vC~Y1QJC0xf&Cv6$bgsVN1%Ke}jp!Bp=@wbN&-g9cRXxC1|B?Qq^> z@%e1){LKNXj?hy%HyfzBCKo;hjp5jpuYhFH506g#)=>d9*p_#L*LQ*2M4&BYMYi1D zmrTsc>u&DO5%=c~->vHX_~BX55KYb8R+XKmM)ollMNezQ?kr^KJvWuze4fp@Lz8lN z%UAI4f8+i_+?;!QeC>;cp!Q*npLu=xjnB5+?=DPs`!_F8PtX2&)Xq*}KL3kB`ppB+CqZ!-NaG z7U7{ziRTrGITc0Ejy~1N@w{4bQ})x*x%qbGCs35{!L9rhSh)s@@?BV!cUoTouT_0m z+%BaOtPDEZ)p&pU!Qc0$yFHyPZGXpdPOD<4)MR1(b9;8q0Tn}U!Q0wF#n#Cy9eXT3 zK0EUs)OEWAUb1W54w++kbabZq^vxf*e!* zpPOSpy$Up=apnA1(0bYHn+^6YQSJS?Gd-^6BuAHBn{@cd*`}xIlS`}wXT{f0lfByHww;yZ8;&|T|$Ikij z@6WwA{+I6GJ+!y!*p&`3E%pBVb2W2YKjqqOcl(-b0=gd0g8Q-ex^;&3?I%w68&p)= z%y0efz3BRe_2(@=|J}*+&HwDzJ#BCE7u@nZ{NKK(UD*9wwe)ox?x)c^Q7qap0&x+StfBx&Evj-17{_OmF+yC0n58Bn)~cThW73u|+A_Ds?wy-*t1}PhaRI*L$oH+S^R&J=$s>Uib5kV!TlK2{h&N za4TOJBUG+|ru@*+*7utORQugP!)yG0>4{#Ojy*aw`|iTHns)*Dpaw+&Y@lx9&(!zU zaWOybxP3omlz^7%KPeHLrjnhb2XBzQl;Y)$8 z8LFJ^qF1xo+UBi}N$;YIKU2$B@cVP0k1S~4WMYcT zhOcxEYq^J`ay8rjcL8eQ{l_<7&@t&t0o|J|O7Ijy=M zKQD~i^W)jsdtdF|FJe2n7}V1`G4pby#-v4%TRVP7N=#a5Sh@N8-?%+L!EKKWa8Kdz z^Vls4C#ArrHSC-Zp6e7hzjx=SE%$xdW2Kos`zk*kp8YtoLbdMP*KXtA>nx1z=Vxyf zsG6YC`(vlR-~8x@Yvj*4ee78nX#f7m*~gQAKc9H+&;*v=m!bS|^TQvk-4B|RD0;l9 z0JM_kZ=xbk`HfiRPe(h=pU;0i_q@|Y7T)p-^X>0Ht}ebVpPpEAvN-$9`Gp@Jo&5Kt zQYFTW-?J8vY>bZ5{=Zfe5eoCe% zX6%vrT&%OluKm<)CwuPo@|T}pTe|V*wt~-(KNh!(s(30FJxNh4cvdTR=ixo6cN4VC z-@V~8oXc9S;hCJ}6DKCN+j-x)L)ssuzNHp^c>A$kzTaN#5Z|Qe!?L%IzPn(Yu9tpL z*6r#FsmZgC9=-ectIiH*U#Z~5pEns)R{yc&UVr3w-Q7f&vi8!=)@N=zRWzq$xtx!f zvtzUMn-Z}umF$prck1R{PbshX4vq@j$4|fhJh#WzPRC`wd|SQ0{NuB|^6z9S=Co?e zlmZ>88)J9>dgO{p(ThJG26ZQ3MT_?SJ32>7JolV0K@^N_);8ePm&IbMRI*G!``;cE zi7i`_rIWX3=jYSUSI^Y%{5})B#H5@9)bNW|E_`riBKPvm0jiOULAO@0Z{KX78k_v_ z(b?JYb-G6$@m&mGe`n6mhvyoPM|MnFIk951^^$IG`}BogO>U3DM}MU!daXM4=-BMN z-Blke#lKGT>1_wCp#EvgeXo3{j8pKtx+uJ`9U(|PCppC6d{_<6v2r(csQvQzfmsONoo zH>Msm5o>aC@kPr|Kg7PJ{J$deI5OhC@x18d&xiHf&p&>Ys@NC(Da$6t^2384mRG=C zwc-bdCThRm{D99et0d2+;se+jucSaTGH+skUTu#$mp$YA^eam~7Cik>8QS+}Uh8{4 z-Jeyz|9seXv^9R+{Ax>X-%nXz&Od&1kpK7cB}V6)_8&Ae>-}qb>#TmY@9RgKH{_kX zR$=$O{qXaH+MjH=JvW(rdR|%l@X*xfkr|Vgg1Xm7-fcJ)844W z{pq&xXWxE)a!2a?^Qjg!_d1pDrz?7Ha(i~H)%^PTd<*V(AHsV7eb#C{{(N5LCp+%@ zvSm6_zl){coIk{4f2g`}i@@JkhqW9Z|BO*?Kd)Q#1XN;5Zg=}Phg&=@rheYWIjw4i zmi3=6$y)cHfBER;$6B#zPp;mWU#sqCXWL`+^I59mQTI)zO#5Z*uM_BN9)Df}o-n-x zoiHuKGhsSu-N#MVPrB9b*Swn`59!K&!D9UX@c+f&^QAX$P>p?@TCO4PzwhUrg*KDc z3jRnfmk?LqcOG2!F@rXt&27~?DFxnKykl;wZee@X#|N|3?Q7lzG^b>{)ZP3&Pdt6! zd8dgs;EviI%emkw0?@e~JHegJw~r2*`-3~DC$Dw<*<`(@+xUL^LJzs#Q;pK@;6)QD zy(e46!|&ZW2VQ>i@xkxs*7kosREpcycPpzo;d#kf2ep2n%XQ_rC&+6OT=q`~|iB+zfH}UfGsg}i-+^&~Q zwes`C%**S}ANtU<(9qOKzkKE%`~6RK_6SXndAEW2zFhvF4;v;-vwpKe@b13CPd!I} zR{sHwEKYNKI{o(Z^rGjrVr?oJK6RC~d~?4)ubA5!et7jgadl8RzrA%!^VwyBKc5}p z-|cM0z1zd2>}$`tcL93u=A1t?!H2i}guZ^ids+J|P$AiKT{h~;Z2h{5D3AOJIlVtV z>rB1;{8z!VID7Ck=kZ}p_yIjr^H5>tCm&K57fXQP`kU;fYc)BkH>bE@wr z|Goset*xEAeRF_nAmlXg>6;ByLz4?1pPd^oCswpe<=uq5xIZ7B9e^~&@hOK4v3)w* zEq_nu$DM=E+bd(GI`cuhGYYVmjNmc0ouDd?88jjK4*LvmNbk{J_!!&Dj~^Z#n5_)z zM%3x`f;S8mS#bLbnSyR?t}L?T_6{;NGq1ZTd+X?PzPCu_;yVGn%6}bw&R6$6=(gwM zhX)(u`|Q7OIPdgJ_3=rm`?9CvW6Q5aKQEnI_$P|(kLQ#tM@!{C-Cg7?Z{4=|_)m+qUELMcxhryV z%x0O)XtCZ_@n8|}waLonZ|P+@GtM15B>evImDLpzHW?m=jb`Rpe2lo!z5MW>YKLFf z+D^P*mZ&VddsBhf_SWtSk=zN@AL=$OE@m=*Hy-ye>)kqF@BQ9Jy0f>>IBrMB>Wgisj%>QP;jk>bO~IA6lS?*kEI2Ox z*;J?btD5-t3p~<%(Qh^$W~|Qb@KKWHRG(9Lj8!~$g^!jrZ~2{%N0{|O`vd`J7Xq1_wa;NYZv$)OH#%hVi-ZtfT77rUYoB62q_O|{m zf8&v-Ghg4yq{EMUE8is)90`*a5$0hk=J{$>^7MpzR z*s(j#CKU0m)wp=y_K(CZCz;WnZq;Z;}KTDkP;Rvt( zovn@45r6W`nsuMa9Xr71FIDu}M@*VA|BS6qv+%cD6K1lQarNzZ)FZ8T>%z5Dsd9~Nc5(-*z{ z)`gi8W^CswH#3 zB=t+5gIK6n@u+jU#Vg-W{}$@R9sJ#%rM4|;`v&3T9?tXTc_uVh&yX(WKmDj>vRR7S z?A|8pb&u{AK7Jf5Z6!UG_uWAen~%rtG=IIdVdjR7JvSa*0kU4x$q44ijymLL%k{@)c$5nJXFIdP@XZNA}q1OhB zgm&d`7MacolWunGc+jGKZbznb;-#A_Dju|{zpKbRoUrNUj7Pa24vFQz$DPH-(ql4ybGvEIh~=KBw?<+o2_!13w<%^}qA+ zQrp3l%?E8Qn#G^VbsenYKWg+b$3kYqaY6PuTNI5>=BUIJ91|74vt^;t%N!G%g5$#c zd$uGR-OTxL=iYCAxTV@djQvf)5jpi-4j&_F zLGd{SMf%CM8oT-0Xvws4=@ z@u+FGS%}))-Zu7k6^|OHoB62C=AE}&YLDUf0N!iWE2ed(AAZdPmNZ#9? zF{6P0;-d!Hz8jC1@HTp;DL-lwUT5)m8E>m+`r=28((`saUdr2iGOf8k7$c^Jj9i4)(Rl&G>L#zKW@rix)O09(rHCts=1ac z=ZA4!2dA~g=?I^1JIq)uQ+U8rT50krw?n+3`Xg9cYw}UI!_uGcTz$~E*33t(vA0$E zo<-;CgEQOWbSEEbJ1km#r{F-Ww9@2*Zil#w`OiLRT5A@f*4Nu+`_AG)<6<)(wVA!G z-1lZI&tfx|a!WWg|8{@E#{+!+Z$4gXJCL&Z;NFsE;cXVl%XwQn(-%MLkoMd0cnxo} zXKM1JHgUO%$G(R@fE;=}DRKAylnfyKF~d|8%ng{?nTT!8Ly2B}fPy2bCLF+76~{JZPH( zPS5U#PqcBymu^EV|D?}VWH~2py7}OJx>U3DwjIgKd7C@alOHvRKhx|w_)Fxd(a9W( zm<`88+3##oG?L6w*;6PM-OXKgD_|yznN;77$1Uu7w+v>Qn2EisNZxlW>%)@7kkcs} zAAUG?r+KqQ!g}6`o(akiJBC!b77e%QK`J^#qr1nk29*R^&IyxlfNB8ga}^n2$Hg@r~{*Uv>jC0XjpiRTO3gX9OvVI^YKdC zfs~DcACKK}HnT`x&D+|Uyf~>}ns3MB6}-)!Ny(3T;59&Ij>Vmg$C=q}wkjG$=6tww z^ihwjUPYF3>ZThR70L5(}49=vOR{dKqeyFC4!|7yO!dU#mXTmIdB z+nDnH{`Ye0&+pq+I-D11S9T%5Pzkc}b{`k7e>S>q1?kTzb=g+Sv*M2>HJN>-xyFFg(U(e28 z_q~44e!Jaw%IC-3x4*adm%iP(Ff1>w>_Qx;rjiB z+ZWaxuKoSt-}2@6*Les)w^Y88ZefsWW`Te_VkJ{hgSN`O@ z_9W}&_URVsHtAOBcIlSsw&~XC_RlSz+dQ{={&TU(?BZL+yNZ7mw-p~NURM09cv|tb z;(7nd;<9~;m#8aSp7{K8n&ooa<+#mw`P_D$?emwP-_j2>BiIX6e+JsItjr;tC<(MczD}nj2M~e0J4-sItdpLWhv2lD9~w)A{Vs5S)AJ|azs`9%=jWWK zbH2`buK85*Dd*FlPhLK``Q+r2oljOSLW$Mof8G_UpPo?RdTHYF@;Pe@%i64$pE+## z*z&UFXUo%;uPtv|{+wmuIgObxw>0>c)6(3cEn1sw`DSikmn)~lTJm&_1+Kz165`nnegEIK@W>gg^4PwT&7Q8U;RnA z`N8q9uh?R2kt9ltasFh!CdG*w`i_y)C4_>LJl_bP^N8S7M~+{$i>hr$rbGyR`q?wJ zKqyYh!=+PYqH34R)C{56Bo7_Vx&T$@s7n*)@ua8-&phcAwrS#AnI|gZC;55OF{4ps z{&nd~lls1-C@9Z7;Ul(b(w_y7&hFU9Z2#WnY46MR_rmYim;ZfNe*XQrb^Cw29qWmY z`#!(^-^Rn{yl&iS|k;q|B^7f7IRRx!3XQ9GrGGJB{YW>qs>1QUCwDqsI`{b_qi`+xWB|80De%;T*$G`9Y z{d51Hx9jVFdUo6Yw)uHFzy9Ccy)X0sZCJAZ=VSXQtNPFF^8Xk9z5FS^?$29&`}qC; zU+({R{QsB7^8bIx-){Y%{_Ee%|El@d|JEO`x9=<>@~p1~++Jrp-As84LnO4<7=%Suh`fKg@az%keX~Bg>gWZ1 z-(--}`6w9#!st)_%k9N0a`Kw)g$5x||+NQi6RSnC%OiCP$y} zFp|<=V<5WYfatosg^HOOB|8o?%YA5Bt~2GZioATj-9zDh54rh1ycJWL)NqX1-Qpns zoQF@u;#7Vt6lyCxBwlmS{7vEtMo$OjLxOb=*!>EMxFtIeeK@2KwtiP@+meMBAM){6 z91#AtC1c6a<;!l?98#}2EH3llwyui`V=sGOL6f}2;gh-o`L~)2A|#|z4d<}e9QyV5 zSHz7;+$VdF@v>VS5bXQ#SWHeuvX^ClK^ym@JahvY*? zep@}@wtF~NEV@XMGviJ{3-g}?f_`}q9VcD%_`sdM6Q=!yv`CPIG>N$P#z4&NRy!Nf%C z&OG+?M}Zto!eQplet%XUV-sC_B#)Q#Wbp~tGnmg zJ!E)2SFrAZyI7u1&8d6OPMbtEecq-CS3keY zIH6Q`v-JA%{QN{4{??a&BW_HZ9^rC%!7^Xf1N>rq$v-n)B6sMih)aEQd8Hpyx%{YC z?arLHN2jrB5PEws?vCDu*%_H|ttXjLC@kz)#lnkfc zL!S5zzaQ?MxF>@pLQGjz_mGry+V%+(Y%)?J#NuZdloma>K6$R7#=MxzY9DxoU+L}p zX`7HJ>Sn?ub;Tk$<{^jiu8`ZcYZo=Q7|da{=h>0`uz~%lOJal@C$m(XdZ!h>AN z<=py0wt)|rw8g~lJh-jPlTt7S8%!#=WYVS!z|~ z;*GbqOnkuc{?cAm{z>A!EaDc2Me80u6XTlH=hn)8=K*JV)X~Gb2J079tbQ80=QHE| zWA}vEBLkw>RP5igxfGQ9HY`7S+S)oZkncx}|Boj98?>%I|Is)(+QY+0 zO0w>uxL!fy>gW|7Qc}F{3fkFi9=sG&TiGiAigEr2&iD_kyX9Z?sw`M&Ba!&j@y~*p z`>v%fobSOVC2o^=YT2b#>_1Al1y8mfW4>R|#60KW3$ZvAuGB{1n1?*(KT5f$_%5CH zO#S-gW0xZ`P5Ey8HTcjRlpXV-CDdJZ!>bjSbyxK5x)2~+dU(}hrZrYtyIB7?WVzmY zw|veAPV*m4V-38%Khg;(3d2IMI;cnBP1?4CBMW@Nf zMbv5JIo3VsELfm8O6^Bt~_~2*}v3e zialS%>TRNZ9}2j=)^@hpXm(3|KIPQ7KQUm>7nkaj+mF`8(Hb6dCR%eIu$@k7kKb-ELF0<>x?|57&409%_uUej%55unVaEdwVeeOK zk~XtP7b)(%up`k{@BxFn#jaNNlg(~T!gC(-?BDRaF)I77^WsCIc?HeZckUi?FuE|~ zgGpa|q3r|VGJBUl3g?eX?|aC=ZgJ?Mu8oJBiO`$}Jn27L}YLKSvc__ z&;AeG;yZS;I!g|Hj{dkB6VXe+CL3!MX>>bsw~! zzkgQp+z0Oc1&!U&2l(gjpDlgo0bhB=fy25F*srePwO_OU7^vWWQ(x3+okQ0zl<*0nzQYw?eT?H+QM*_ZtJ@N>5%D3n^{ ze-v_q&1p0K1FFg&LCgU~imcp+0`4D%9{=Ns?`#_Og zz%A(M^0-mn0u;$*-1?Kmdzr*{fKpU3x2&go@&V>~8!Dr$MVsILx;;twWalx~cyN`} z9NpoeB*p&+TqSLeu9&zdLj=^kDQKP@{ldda3e>#$=zN6#>|X(Y6?G|46Q<@cBVV4P zQfG$E2WEAPgOca+9=d*76bNcT9pcT)Td4dpgQwzv@G*Y=x(yruPn+Z6XQKC`DgQ?s zv&EWge&F&C;^|oL{sUo9 zCaYB3d2t6gXA0KcIn=DOa3UmU?%2`Vv}93W;-3e`vyKE+^Vg`Q`xYwgys+Z|B$w=J z?Ret&xKS9KkxRMtCpEb>YJ)TK?$*AP1%?SntEIF{FEj3zpLDHK-$W1WBgVcwMWxCM z6<{Ap*4;hSy<|Zk*hgpLtM~s}cFk+P%;ujh+%*S9_dR?j#x$wV&1~JK4~I4d^!&c= zs{Q0o;Y5OBF zAv0^KQ~b=w_>~W_*4=S(U1VSqk@#Xmk|n5uQ8}{t6u)qoo_)ffgr(KqQ_ky~OgWuu zc!&{Hu?bCL@8wbd(P|v?;Gvk7P;1mvr-ko6aPt2s;uhvyn5QMq8n$!AhHv-pZMu+W zbMrz#UB!bF@7ezxxU8#^GcQBK{=}kB&h6a$-M24@@tyaY-Crakam|J@-fD>wyKEMd z4{J6T-DsG4ctvLT^RoTLZ}z^Oeg5p`(2DlNb)|I`$9Js{yQKT%ugm+YM|Y(*zv^V- zuXug-YH}fWZT1#PpTkuW#(W?DS%=STd3^2tHRJn}{+_moO>WQ3U4DK;Yvx>|#^cxG zQ$xgZ>JQsIWtaZFzL}Ht-0$zDMXYAs+t+sFdYW>x+TU1Fxh96^{_oDxI^n*Sis z>tS7!(^sFm9lrECchBdoG5fDcC7%8|XX)KZ-0_bsv(3X3;w^&wq~?@M^nKjAAYg7r zghbP&{d2-5&AM^#$E{ljr?CVH+eb*9*}9A?dR_eQwg)-;&%Y8|<*D^?Tlw~DMt3?} z>*SyPluKPW>wS6muAMW|r>?&3xJIbv)9&m1XT9DBe|1qhAG%}4^E->4ZZLIzC#Ewc z_TxLoa|K5(i~qSHz4q>%NiMQiFPykyA-Jt*V;Doi(^n70)~sngC4AWH^Qyv!36)ps z`=1<8;J$3L_4u#Z`dM?B?58xdsXxwNH}7iBt;yLAb(5ZR{fXlHbl+1uy7>O2uJ!6t z&u%^uV-wT1F<*aW8mlz#H(T*PiLYMy>CKyNyYbnT-u%zp+Rf3Q9;{^NeWlU*Qg6vK zUUQ2btgE+P%VW9B5%##}V#3p#(th7|e_g%(h}WrmyLa9Ev*FsbhX;ipdEUL3qA2GP zW|eQZGLcPYr?y zVis@ho9I3JYH;gRF*)w6_j|AHxp{BqtQ+@sR(&Ygx~*1Z`-Mz#PSvjuX1#8FJ2!S^ ztnywZ|86fEQMT;O;VBh|4qXa)>~s3A_QktS+*g*!_D*RsEv;^x?XF)|=c{zc)TI+jI861M8o*$35`!t=`q@ zCy{sAV(qfn<$Q_Nhi%#ZTsW5&X%Sy^rrAxg-FHW1^`rg#msag)^;~y$S>fE4U59?G zREc<-GpY4-)D%lOlWosdUD3CQ-t)Bm^q~_L+1^^JFWna3w0_1Iz4N53{hg`z9w~D_ zR4e63^|<00v1L|;YxMs8SB|WY4)9bG3*5VaBUq0salyTqr_N&YJWk*8RX!QazGmN@ z7Wr32=L1h>O;}R#ta;u|UiYHXChN?{KOfq@44*tJf0=mAA^l{j9W$0cHn+bJUj4Ma zD$w2}Vy!~rlD=KJ_v*Zbls9&^eUhiVE&f#>3Ml#UPqN8)?BMGt%=f^9lapu-QUTxGv(8ob=lWO>pW-|TfVb3W#!GU zeLnwIeDJNCcCS0`03Dywr(K~Fed&~KyZ-$1cam>l1vUy)B z`L-W;;h(y3@kO;Y_mUcQOT%BCKD6P|TCw)er?WRH9NNO>wc2xS#@~~=C&kuJyI8T3 zojYfxc&MLF{F=TsMW(N(|NZym)md}p&(hmuwjC4Su=LrND|=?#yuF%tHh1k`rpw;T zuI-lK7PF4ttJ--*Dah*JMUSX%S3KiWP8U2xl6T{eQsLI8{L^$Bb==*9__R? zlu7DKm3y=C-X$!Tt#hvGiae8!Gnv7B+4^wq#!1Upipsxk%;8Lqsyy}DapThsrE;wA zro0OlTlC3tUN^rj-^SL=uWX5@4?mS|JO1kb-v8O3z1JwkR6J*0y?ouY=~EBvJijq- zS^L8~FIUDJ6syH^-?Z79Z+LUg2j^zv+^^h|e|;_Co;z)t`n}0ldOsX}FT3tp;bc@LMW^=6dl2ra7%OfR(vTE0`=dhZ>@-ZN+NTHo@%_A!iE+qY_Z^ouV? zQW6b{@;@y3dw@SJv*7)sX&2H%=bAjpuDG`+Smq^bWtQL6dp&HaS9Mn`i8c6o^p`fb z*eR!zyZDdI{@Y+&`k8t1>9dogjV8t{J18?V>(=e-+Fy2G^|*TK=romAkA!=tTlQzv z$exKWyYY#?I4Qa)_@BQC*ZVz*+{u$!vvyw3dvr_a^Wkqd+7Bnro9gZNS6S?8B}9o?``2iNSZ(Y-ML&hK{fV7@8MlOjKut2|r3=IG5y4&25U z74BbW_IvV6{MxI~a_-5$7`SgE~jZo<;f= zQ8V^DjeT8urtuS>+lKQh_okYyPM&DF@pts5sI-uhMUJ;)I<{ZqJH{CPMSr`4^@^ec zw+=4dv}$XU(z5agZ;#H(KghH&tu6cQ&IbLoPii&6c{V)Xp6oL7l@jcgu6tX)^qs~U zX1?tXy3hPgxR*vR@%waNJ$Kf0->L=G+fO~4TzQKrzNgc;=JCnfx+x}SzBf*N7%GwY zDaZOj&dU7FYob3H{a>TbwY9#%bkgnz=UzN4<8HQ@d2z;*s6!<}-g_NwgKodwrh2vJ zzvuU}Jy)JF`v3a2{9~%v&AVGvUsZ~l=!C64+8B91&E}MCP4islXs2!?B`N*N4{h3i zU$L1d{oU2t==(@A!f>i<)~%cTJ0=_s*|ftxPnY4r>*I$?!U`KdGAoBg{ny=@X|63b z(PnyrcK7O<1HFa?#oS);m+a-wREqpq7`r!7=SJ4oX*}M(krn)x+6;7eu4TDbu+B} zkw$mM1@5TNMH{BR3!T)Xe{1qXvAnYd>o4T@J@bs*!@kl}f_Y_jy2G|3PCLV+%`Sg3 zl8R7^Xst{LD3u(le(L2j?Yl{*%-#v z6|J#na>Sk`dA=Kd`Tn~5W%k?Yw}rT$dg+-&7*0Jp=|yq$eI{+1R2#J5=s_h*pVj<#>Wt^*OUy{W{oB?o+r_FkJ0b5w%hqo) zDGLpcO_h&Q_c^>{bGr9NB~$;~ftyut@n62M!0%Or#4AzZ?#h7n(#RS5*6d3hSG#4Y zRjIt*r!gZUa(2%v7Fb3dw>YO23JqJKu?q;5p+2VQ48iP!Zu+kYOKtS+OQ zyK2Ujual-~M*jBsnN}th7P;kD!rXnvcI?^RzG4xAw_l6TX4cJZI(zx`Je3_2(sxJC zI5RQ)@(%uMZ;jTN-!b@oBIjI}TLS?TfXhl(#wnwP;6RqZraNjJZ3tNfwQ z&RI9E2sZ~BZ#?y7@f7=r|MSeQ-JUePDA4Ee-kHpv8?J4)_Bs9M?Bw@LVxM$QdU-na zN9x-bO;@dZHU+$$`}eZ&%{6kzSi>*XAG*?XHhA;KzR#MDvz4<~395ZP#msN>HgQ4h z9rfvEtJ!uwII&{IVX@Pp`MX%xE_5?ts|>J-^i<<%4qIQfQzEO4Ey8rKA){Lw}pdsC#$ch6mBG4r{I znw!oY_D>U8zHaGQe(ROw10VbBL;AbtE{fjpX}xHFc(t&$SjO(~Sl-Ro5`N2XbNPFm zz4ydE1KWu!?yARRnBP5A9AGcd=DyjT*>B1g>0_6d?rc4k*V5po%s;O{y*{Ku;F${d z8T**|LHjHZ2%nqsjII3BhbgST_^YREnE5No#lj%z>igEB$CZ~Vkm;ElK5b5$`q0DvRl`aCd19?!-`R5Axs!31vvh-j+F!XBr*BGr z)=gaRsC;G0f2#zq>hfznFD9^-^}UHMGv9nl$$#Hfo0Sn$9Qr;RY;fB3T`e~({(md8 znBNc8ud|~w-uSBCJF{qQnQ+|+envC@I^B>krtj<4ojtSr4D-4(UrHj1mA30_xTNkM z7WQ^n=Kh@?oPUwcdcRqd!@TgXK15jc`u{;7y0cICU_`sPE+e%BQi}m?}h*N zgw(>V3KkL1|mq%7>GGvhzE4wS00?zPw&* z!?%po8TT6d`LdSfuMbH7e0tUD2R?j{X?cAAI_QI;T@9k`{Gk@piEezNlU!dwExy>N#ePhV69ibo7dRE`%2~7=Lc{b;g zmV91gz;*6kx3~J;&5>fKJeU5}c*j0JR6m0yYp?XS@_ALxwJUg6ML)RGacNQ3p1_Bm zeT$x$_Ab(oT;L|T?qEdx`Qf%n$-IhC1XM*6Q7?yoNjxTjW_n^-9e*cwW_W{)U7zFlX|EM14@ zZ^?JpFz??Y-tuzOmTFzo?Jj?hXGwkc%x_RHxwUGa!Do|g`*y0f{##?kU?Av)n+>U;hBGM;By zjIXV3`FL@k<9Fu0b5zdTM#Xj%r0iXNsMqXm_Q5{_Y>6J~)#CXx{ig1aws5U;Tx70(^ka$u3M+R_5tJlFY4+(^N&Bzl(sJTo_GB0%(9J# z-#iHKGumsoU+mg{oscEv+bezxJMUe<@|i7uZJw2>$%Pr;j$CRf-So22RQvtYq@rz6 zKNHKUn+hwIf5|Re7+m(V>G?FCAobbDGBY;@@ozKGVLuR-UzC4on#v_7DgEj%O&^yU z@Z6}2=k3sG@rra-HhJdoFrzN=>^{S48_T8pRC{mzb!-0Slz1xZaNLc171i@%n!~T@ z`(M5=@4euI)Atn4i=9iaJo)O$f+Z0Zd|Cy`Wh)QPm3cld=ggTGbKjK3d@eHB_ntTH z{>Hge?hCDDv0HZV#e=A#Y_-j1( z+wtV-yfP~i#}`flzw$`qTVwX8&hE^uBGQYS#KP=F~|7zf%VZ98!a!c`0|yL`SB{# ze=XKAcbi^$niMJIGUX&jJY~J+$IS0MPc5*oGIRG-_jo@ojcNL;O|DJ9E%bFyWqKfY zaKcu8Nxvyib+}#k%5g8fKV^YU#8&gAhu_%zoTgK~sj_atwd&Os4=i`Ywp_GbS?gH3 z=-{t%!P(Cj6-8X{i#;FsH|@`lMGI$}7_Eto<6QS;(x&JO_d<1ejs>1t+@pT2Likzl zS?_BZZ+w-fOs+kAjz4)n$K+l2`lZ%4tybm3|heF>bO=ZM;@{|N5TD#Rr)tudZ$~E_QE^Hn_iTQR}fK*OYz4(>qcdFYlV; zbx$a5g-F})lx-d|nwf&f^6weXKf}7uW?{9!wHSpp>TGvje05x2xV$Xj1vZA#$o_+`-v``7%L zaN??S%_V2W_Q3pq`SX1ASAP@awTU*eImvHOExrHqw_V*1GoI zrsxYVbM`iGi=3Bgv+>-W!)sV7|0f#x?>_!*_Ez(^4U)dwSoUu@a#6Q{yYW)ftg_PS ziJvm+ANs6*k-B-qAyxYe@q5~I4EBXYy^JaT7-8UabN3?i&F8Lb-8tF3By_jr^6D(J zyVnXAEtC}!y(Z^BBlhvdXNlWXHmbARZ|K_{*78tXO?QR+Po+Q8Lc*Fj4)<)i%bE7q zYvY_J26sjO$Xv;K!&Y13eb6eGCEGr?N&4?QE$%mM_ud|9*MBSZ{)6XDSp)TBYvj@z&pPF04-1Yj60rsjIZ@%Y@eJkGAgLwr{3Ph)~Q7!Tt@u z_}52o2vGYuPd3~&QOo@AX@+c(+LMQ>rk~wxa(RWA|M|qw)q#@F($r@Eyf2jF7nyJ` zY-P0ZXa6OlkIz3<-+ti7Mggy9P2nrsSDH&_9$eR-mAqH?qEwXoV#7AUY;%*HRWe%^ z=OxbRaq#G_42TzCbL$U3uC(}Qs6ooXO9`BDCMUkT=B(WLB_T_N|L`u!#)&gqgT5=Q ziQ}8od9)?|@z>otFJe~Blh|^Eao(Enm}BWG*W}uQ%~e%Qv_9*o=a_c2KTL|*_hnHHGf0iJ+6Y}wTio18{J%*uLSF?*nI7zy2XW{_eC33J3qx=JaI)s{mhJI zcMF!P$!&V@*jr~qf5qH$?aIk_Sd6{%*Z!Zj$K#7jx|yR*uXSRT$>~S)YVuxrX1?IL zz`EL8;z7@Sx$OxbZ&l`fPT1nGLinqzeZsS@-1rOAGUk|G42aYgkl(esByNV(vil#r zch5|1l>N1u)p7Ad%}*=dZ3%jHt^053s;7V6wH~ydF+IB2`PeP_<(KZ|`Ms`++Q9T| zl#rEyrdbJF{!;91ZS+_cp$gF?kVxjWhjT!Qox*D|fVZt=BgxIn9~5 zSokoP@Yg51azn&w-b;S;+g1LtN&a`N*yKY2sg04F7ku&ma+ho4g;-s$vp#=6o(-J& zDQ;=tiq)LL+OFBR1k=n;KFi#$^65xt+p{j=IiCN;*Y$|m*iShnA>LcHNb#CYY`f{R zk5|_GNW7C#@+#@l{)^KmyZ#DYfA&cZr}ZikueHIm+YrMrGdXeS2F1Ms(#)o$)|7?6}K6TCP>P_EfE;uX2Y`>xG z0?*^gTiw^M&OdkR-L;(0Dd|=<+2!7CYjr++nFhicfEi6TzDoPZyxbG+f({g`>(H0R)0O!)OPIwdyJ-f`^NKM?raM1d-haG zO1yR!%2-`)J}a{axnkl7Vz_j_N~Fh3!!y5j|7?xlF=26nUqj*NOYVpMI{cQo)_zrQ z8sq&Rnum6sR^P=sH`uvZvTLipK;IU&q^}9Kx?RUYTN)>81ujf;bN>70>T%^#{m2z* z!CNI(Pe?v{=x}3&zs06|Z&%*Dae00DHYYjVg5@c9KO}s4u=1qT?|<(eJ#(00wPyEh ztu>*uoyFR|&6{xVR=1h(nrJ_+KO3g6-QC)9R+#r~-Vvq6%})zw{M6Qtj9yeHyl>gm z(>?arudaXci)HhncbhdnZi(6ZeNk?jX%$cMyVTg=eaB{f+)}wycV)|}MGJ55KcdBc zbB6HY>1QYAb>4a<-s`ir{Gk5hoTP=eF~&Pu9nV)UGR(}}ctURNQikZWXL1vwFJ(^7 zGhzGaV^A8R>@&xC=C-y?s{D)X@149A7`8{*^wfbvhpV=KP2BcmnF+gz1h3h~V+T0j zEtwm=Aoty;TCN`p4@|VuIo!Fgu82FUQr^Vkp=b5RK2@XBde@}>o|_yk^fA}5IqtoT z!Rzo%2mUZ`ch5WNxlVOT)N#qGrm4x5QRWHXpNLhsPiOt~poM#FjQX@X?OD$~{WiV1 zmAlzSm3z*%Xn%>h==s38#`aqO-{e()J(6(EW#wvp)*Cfnr)Btt`lonv zr@Qf=dU~blb)D(<3z5dE_wIb#?Dy`#E%RT8<{aO+@9(q>vzKm*4>Dd87gAbNSr=I` zL;BuwE_3xuPHV30esIXcZU<}8iQ~z$XCBlN+_oja|E;B___pRGZ@*h>8jhV^^_H1E z?IC+kWkqTfXryTG-m{nIEr_w1b3W2sMbmGyA(QcjIR4YWxZvJNozq%pKe$TxMLyWJ-BhvHt-<=wrTR4m zt+S&ON+;Q!T9tHTV&ub9HnNFHX1{JPkG(nT=dzBrOHJx>Z&TJAd|lN)>6-mBwv+s` z=7;T(pR47u!7qGoUZbht(*Mr?3b-eWwci(BuATG#;Is?%SFCsB)@aqg$lI=Y?$5ou zP7CdB)Q2x9-B*2JSMuJ2Gw<(>NqKw9Bcovclv9sZM}8N!%Y1F?{;{{Uw)@pHm)`~n zUnk{7l-t^FIs_TkL-tQR_ZpV8rz`GpnyO|S*e~58 z#lQ4`t>xD3EZmdrdOx4-E#;T#C@tiEB5`$#v9OozLNWD&QtkDJFKB48@~)l9GGlkb z%FUM!MqGH!e)rxbkN-=y9%1_(^@#U%wdPgb2)W>V{laH8qOum3mRBaeo3?GQM)acF zR(vKVTBi&)=R9puuQ|!I{qWo1)Y)%kv&$sYTyAs4M0DHTWlGFA(sc1)RCBxa;zf+c zv%YMaIb(Ww_oOep^Xd-ITCc+MMp)TD&ofix)2Nd~Xn5?3uK%a<}1~LkaCin%S~fRV{zt_SPUhfB()|v2nl8+(|nd z{>byytF8J>`#w&7elk3M^+n-te*A}{Pkfcl>k-=>ZQ#F&X@k^)OewFutD=SUf4JTE z-ah}qW#O#FY-e&7e_p`;Xk$WO@_hH3YxI35&icEccEyHk+w&q{oH1V^bL0NTEbEBk zc0s)j&oy2>bDt-zzi{4$%5&bc?jN>HZJew$K@|?VV9^G8o@f#~HCEKPx zymqem-ofu8;oVHeMf#%GR>e+hU2tjly{$i&Y}vmd%)`3InAz%%)3WnL3ldFVYVAGt zae-Zj!Cr;g{kMeP#+}Mw(Vo5OM?jubqQ@@t%;&Fk727YwJ;`|=@muww$4wan)%?GG ztZ4?{<=&sQT7K<;OLlzX*35YB$#&fS2G`0W$$@X`f4r^qXD z={t(9UpLoXwXdUa(L&KaCiim-eUk4VemZYS-HrQmZshn^-1^b`l0W7mf8Ijjw$mmO zx6N;P-o3i{+LMPVe{{vqG``z>W%f-^CHpU)eM&rMcn#P$ss0Lj*vMAReTtJmDlW-# z>$%rYlZx~w&6{z?{?hjP{^l#X8@6U%jk>3M@m7*cvm9Gu)%nvi%wH^)rVH3mPrIny#iR^2}kd zJv%wNDCmE>iQbRa{7(;fvzM6NWqLjPNz~n}&1MS@|2nszZvK@sj$%UAIZGY;lY8GL zgq;!L{)RUq!nnF1smpYTAl^qYDXJR;a(p|G(+ms!AQH zrO}BOzVjX9F6K|Rec)#Mb64xR7Xs&huCf(t%k$DGNMySc930Q|<4D@(R|mPGZ(fmD zUSOmbG4IYKC)tu2$5!szbzsZg*SyEVrtM$-t#xz3ZoXS{e(lP(mdb56FT6N&_<-Vt{6kD@Q?||AtDC4AvGB=kpVjku z?>~9Ou{x|KwQu>x`dYZ)AXz=nLPxj_*F3b5inXUV;=XuQdYt+0Yv7Gz9)-9oL2^#h#`)n`q z&k&BQat^P3l$hZEeqVFa=YQ5A=GT=sY*R^FlfL)#M9R?6sCtk4jle ztJ@ny)pQ+ilJ@;B^D-^$i0JC)YVLD4?DMj_!(`j1#(jqM#OD6Iy-Gcv_nl8}I`HaJ zp1fK5C-?TN+r_iZ4{LJ2;kjAPmvc?`v~b;u*+=zLzZP_{&ezNLQZFyySd4itIIi~v$9K_w(tEB?h^id`rgh< z8Lyt&7~DS=GNb1H%j-?&ILb}bYzq%v&^&8;*xYl|ZBZ@RX9#f1yH8C6ZuWq)~RT26i=_T{YIqmx-* zUL8It#^%rcZ1InIx2CbUC2bP;c$nM1hi}uy`BpM{j@k;BO}2!Gigi5;Ft&NoS=pD= zmi67oeD#~V8`5TTui0!cZ*fHSHJRgHroVQyoP3|ivmx(WG53|g-_o|TONG8QnLf+h z@J@ei-ogvFyE9(Y=!^aG)e|@F`X;&7G`ugLli9S--f+wD?FYq;=gkvquF6j_vDmJ0 zp0_sAMQqEt@H>YROctnbDQ>Y@m497h?Us2Dt%YzC$=PPJ%PQj7l`7x;myMUF zFaqft%owXeO^-Oax3r|MU$HFe)}Yd-(2KOGn?l-VsT^-F8X z3`4)uAG{;|@)k~7%y&6p|0!L*pnR#3_xXO?9dz9@-@Q2*xxBcymgi35)xdeP?yT8z++g-kr`bW*{oVK? zic@^WZusvmew(&d)^CTP+QxStZ}JiY?o}Q?ebaL3v+B>kTW;DvUK^*sxP$HFDCdlS5Oe{G2N*rKs#a^0m{&lxwfJFmQ1+TZv5A zYt|(T-*2|cUS8C|UApzThF@@&S>+3Fr7cHxsi$wXDOh+mNGB{UB}I>0*#5xu-omgw z4~5UOM=mJep8xU2n#nw}*D_DD*WF0By5qDoOgh7)D5SyKnq8#L^Z%k#Op6chZLcm) zcx!ope`~eTx4pf0bw#QqWO=`-Y4Yp~3wYpoYwxB5Q3u|A&F72g*l4_`+r zze*8ac~s`OmQ}&h>%|9p14D|qo3B(~xF9Z7>GVDB1XHoXo9*|7HgCw%H96B%trxq6 zUvgP~zVcRG%`M#-8TZ>iDcEidUU@b~QTP3{l3(uxdEJ(-d`wp?li2s`< z-*NNa{kmMe#9L`)tYv9Z@;%*)-+%d=lmy$lXdn*pD>G+}7msuKcf93Yb`#k%4Ys&E^&LY1OVcOS_~`}5$>qnF%rU(9VxEz`F& zWlHtjxpq3??Z6Z$aDF-zq$zVqca{@VC5S<01V=pv2v1UeA(!Tg9UfRXDxx*mYX_@Z2xYzqik{ z(-w~olAKs}IpNqUO|e-cl(9!twaFPax-+$$sLUb>^;x52zCGcu~8_C$HB&0D{3 z+uaA#r+shZPEI%<_$KT|Jj4Apn+t@m)i}3G?|pJxx5VcABEyfSAJbyfzn)3VzE2XZ@?O3jJq5S=l{r4wd%Aawmclr4hvVY{dSL{8@+&kUC zWyi&3u^Yan$ZYyxa9Gp-r{5Q*=sn@$EZ6)dJrw)!*5YEul`Z-<8sa}%C+#@*{-o2j zyB{mO;-5@Pk9@A_y5IlLw3Nn8k@l5&#S7-=e*AYYY0>@C=l`_1U9B_1UYMH~S&C)M z3_mVB?Whj-R)xxo547XG?k=1COQ>dYm>l=1d-Ggxu6f_Kcf-4R>bW=EXXJ>cc}FbI zW|wN*vNPeVSW3j!+Ucze>x>p&J9*6Nfs6e1gLk?=_;w#$X;hgN7NmW6*J2N!liGQS zL5F9g?Yhyp*X`8@XK(9XOW)5oDvG_Y)N?F5*z@cn|Bj8@Lw#Nc++|u?{hsUI8IIDu zhb@Bo_if0#wjyughJAN09N>T2VmWn%!QGyT`x80XrECPZoZoS{v&!i3meu#tV(Z!+ zOnKi;k6!*Zp=eH$=U>5ni5A%=~-O) z32!scik@UDUXtnQv)GtR$v)+eN&JkRj~*s!L@^%a|F!DFlet^Aoc{hHCHLUp3sc1Q zY>wUXj`f;E#G3c(StDP(5`El0@5N@7AE{!!20U+LzFv`;^;7+Cy4pPTH9Mbh6h~dJ zQiwj($@}R^?TYpPrRH1ptEQdFt~S`#a_M*H`?SqFZWTQCzW=1-SXA@|o1Ln&ba^s1 z6#2ZazudQOtE$C8FYdc@E=oz&Esr$iYuptr^YY~Cc~{O#R`0F;d{o%n=azu>-Ps3a zUQT<_cR5MQGxu|Yr0IF?zMkDpIzKXFY!_Ou5%S63FflALp6`RfllEz*izdEEzyHB| zP0B*4@9)H3Bx>v}m5zA3;hS7aM7+|fO$YX_-o5wE8d1ZfK##rO4*g1+e%#5rK=l18 zK`pVr(~fXVKD~eAf}D5xS~>e}Bo-giPdv5ZTZYZ12dgKVOU<3Rn>+3O=1*^`CQq&V z&U}C0ozEXnVn8`>TrFQtrR4f6Q8E zY|eA>_{F=jcf$9mYONLR_4}t`P<|~SjCpa^yU^Q{X3KnDB)GDf>rX&>?1o>$mv#3n zbDYP${MuWqn3>#19vzLE^tS(&(6fgz&fCpRW^Amtf6#7o=WbJ30E@{M{+^20zh^H# z{A=H}0`6V867~hvYo0MR^~*_}>GO%My)o&)y8Z0ECwA@EvDxxXea-CyyP`F=BysZ2 zbvma1aDj<=MDBM@?m0{E-eh6(Nc+Gce(6!mS*7a0 zZA$|GzwUI*j!(E7;3gqob<}L~W>xXUjncfg+HXGeu(f>X^K$>)Ca-JVY|kf%EK8qs zdiBPAIu|zSWbE(0H_`Kb;bG46b{pKfr$;9|E1Q(Pvhup6OvK{j44cCbf+_;x{VfYK zYLyPG*>#0Et?$UM!01JDm&^8^dEp@TGF{tr^}Y|UcFvmm(EI(09*-v{SFL{;7P0rq zLou~^O5vM@YA#OuU2FKbG;1ZeDdD4sgL!V-A2{+Ntu!6Tw4=`&Ag%-uggylzLR)a?Edl<6XiVH zGTqJBRL(4Y8nE@b{lXn*8b9W|Sg5z!VC@6jqKv8KHBw!EwF>O_LJIc%k$ZYUyX%KY z?C1VRCw~|pI2J2bZt-MA%cDaUJfDu|eo*T#vkb`I`0GdVV{fU)8|%409dN1gvy52u z#6+ZZljgfGSFCL+c3qX-GH+>d-Z2|iyEV6J`}ZDyHStUNAs*I=dt~eSyssZQ;~!Zk zK3mr0wev##wwxJ;XFWeGxYzUUz-_}*#p;*R3dO%KmQk^|q*W!eZk^(S8DA2$d`>== z($23D?Jca+oc(*#a*pOd6B19YdU#;o|3AqxTb}>-5t+EDDq*j1O2N`rt|E_bBEs!w zIG#%Fsj&WhsD0`oE%sy6znrO$$#mb@Ce;z#VqAUOhcEQ~!W@zAFoEOW1lt+iU+L^` zTlW345!d0sGq*#H5B&ZZ_pZR>q13KtHex<61D1gzZAF|Jldc*fyJ&ij}9zTjrcNxI;g-d1d*H zguTz@9-Q{5KlM;k|Lx=c-W@6xAHx{;%h&E+dBV|p%X*PkSu;ktIhPaOmVHiNSoig! zV9)NaChPyTm;8JD&-EEws9AM|W|a1;!0Q5u&ph&5r9TU*weOIaId{2758t;|C9TY{Ri##T8YIC-F^81fPeL>??`!1Ox<)w>W6g0CxRk78Z z6>C+bF?CmD*D*oKu)Dfu-|SN?4f2dML-hPw`4=Dlx#QKkRWcIpv6ffPov1zVi+}#} z!r6D0+IN>}ihtMKweQaL2flK=8=l>;<@;;7=IrGpALAz$+It`HW^X<9#6W$o{ko|4 zhF!kDSE{cm-#A_7OZB_QM~7 z)4Ap!zrNn_f9>2q29d4O<_CMT1*9#{+;Mzw>b-HLr*@6}X~p{f?eWfG_OBL6+(~aU zf85I}U-d4M?~K`Mw~yOD`?o0n)oG6G{j_o3{{8+x=f7S2B*)@%v`K_^$~^fW`?u7c zGn;9<#vohkd$YdsHRX1{msc&fZog`EM&~w9zq`tLH%o&)uj2tC^Xi*#>OZe}sLdX~ z{IS;a7Ur5Ar&;3Hom_t~qBdw}#GRvD1rN)czp5tG&+`8NJau7$Y1H?<(%Q$xuhn;E z72TL^m9cooma9)cCd&R`voK75R$j=pH_6%XWFqUmFPU03FDL%Gyk~0hq8-0xWi+Yh zMl?ree<@1*Ri%?`$=zr#w0`Mix19rq#m69)2HA0;&;`+DGpDpWM;0{DoCr#+THx? zoy(+u2h&;8!j9HokD7dPVJ5q1;R2KIGv&+wx^Lr^F2DKoK+iM7K8at?65F|L`xwpB zEZSv`EwTF%ut7fUp+%Z&qa@eO zDL!;-waJ~t4_|hiKbui-__^}*aEr^#A8jgcEIj);UcOrRe2t8fsb33!YA|2-`okL^ ze>>j0JL`jro~+rrl_wj&hiw*l8Q>>WqZ#?T@Yz}+>!K6gmPLIZ!rs}b^$eZ72U) zk~1&naa~QXUElNe)2H-JU;eZ6`rM-IZ+&?E6VbOjelN|4UAAC>dKuH1j0ZIZ>Aj^p z52v`tx+E4feV0Gpnfya;zIOYBmEGoDZl2Nx+RLgBO8pisU+~plvQ;qqoMh-O>oxE1 znp?WOW%kkdl6JcxG>@z1g#LBeFMTs?T_4SjcgMAm{j6A#cxfwI@cAg ziu;o=bq$xk%-zPa3sdBE3dC8LiQQpbwk+12Z<+oqGm*L9cWSS>$<*8{`SB&+?ApV^ zt^3|iPY7e1ayTrR=gGvFImx;rQ`T_5KXv&|LHgfAvfI-5)ws%b{}ilR-E%_j+Ld+J z1KsaGlhoKU{qKRf*Xj=a3j6S!ulu)&$n?1`Pd}c0Q}4M!kp1b&&zV=hem^bm|4jXQ z@_l~6hvMqLuGVWxv&$A{=xd#s;l}qy+q(F);;KFBBDciL9yrUVA3AetoeU6KdV`1qghV1QY4rZC}w$AW3--)?=zZ(XbgTekOO!@s9% z&F}2gF5lqTzj^V6|EnHG{`hY;yCAV|@5zJLCz*G#%110_eYD8%LJ9l52Rp0o-8x!m zbtWU|eAljBe*3v!W$iz|c>8OfYwHSR-nsLA&fd{1cf#>t?4IQ}_rG6kr%{m5HfPdT zZ%-Rv%`J=54o&^DDRJ#*+42W-()<_Nt!9n*yNdC(?qr?z3o|dq_zRjpx9Jal#KXOA z%2{3ZSC7)|RrwD7o&;srsT5QMHfkyqCI5JvbNlgV%rFvkA@%m-w6ujO-N% z&Yu?g@PyqHTk7xm0FRs-kXOp1xvqY6uszCk9EAc zg}&1kso$(VwBy(DnXBg+tlj_V#Z$fM)46|TMQ+?zWxVTfkNNxEt3POd;%z@LqkPw* zN$=I~{MdVNuGp$w&HIu><~3cqSKcDIb1jo}>h&iFzIXjx_OIV`f5L`epQQJ>7@bfw z{9kh|IHR|;$oJ-pg?SOHr+V|%9G|~Ew_Zl>HhcQ5vuxt;j7~1xC-U$5iGJHJq=!0RUeS@%_-l}BVSqdckvUR9h)aVIq=JDfqnP7txE5T zeI5xUtoW@U_|{|1XSUn^mltlGow@kJ_5}SJiRtU@`{FD2ufF?dsmV9{5|Jwg z=?5k&Go7*dx9{DC%w`Msjw@M$X0Q6Wv;R-AZaHkBwP42?^DV~%H*?C)+v4HQcTs~~ zxV0>E%5l&Cnh6J|7HxboVFkOto8gJAF{S@B)CKj9zPkwsS7_Sdf0zH5oR ze)003r5WX``*xh^oOk?+{N>2c6_I?scXi4azu5AW``O*dqf4d#zEf#m7b)U=Fl))9 zML*xnec%{#C(-BBBd3iguQET2<;d=@4c}>hHZs%Py6Yfc7i0GE&=&K>E8g(6UwzT) z6z}kCU$5!3nGan48Cpg>UZu|Uwb1;G=~~Y0N@e?K<6d z*~(e$t^1m$JUn#y?uL6-f9^EaF0@+yJy5Ae^X>=EFXn$E15S%t&hh$vG4bF2#vgX= z-;!nCJ?m&}ntR;l{}@PC3RaTo%;4td<+`|KQi=m$G*r^Hnu3Unp@!;d5cy_49udvQ&&MpB(&b zrxDRw*nT=s{N1J(nQ@jPwS_$q+g&1c3m)qpW|2-#s25vPurdD2@yTK94}Ce)(S5IY z+1r2KFSjgVKl(Gd-*$0(rS%#qwbO}yUO|orFB>bR|Ni*wyQoC@&&x5bI~O!283=J3 zti9LwA<1<2sl?^a4FYra-mib~HKM%m#ckdG!xvZWUAW_l=aGk5?EhPsKi`yVUmfS? zH1THP*Mq;_9c(aPe7u+Wy-57NBj1y2?Q;%J7SlK|EBfD^MB{T_8hnq}e6yI8KDTg# zHv6;8%HXHR=h~faGhc1=xv;MMYT9(?K-rc>0k37xMSlIefo1aR|Hl`Gt=qNOAZh`l zeo=N3Xc6qgWu$=(mMme$L9byzN3?&b@HE_;Pbe z#C>0_4~e;nryI)`Yc$*YJz2naxoka~{x#?2);VsjoJW_gKOd_)bq{Oy-1HNTU%AWF z{?91;a^T*)m>FLK^zSY;SiIEZ(sI+o3)Pb36U+Ahm0-X3KF=(`C+a&({=3_9`6Xp4s z)AoO@XaDy)al-rFfpI&1(ZZ5PhztB-)cU14oUE?#ePTt(`PrTJV=y#2t|M}l# zyw|=TJEGMY&NqElSb3p(@*N)O&Hd8*woKBB{MsFJ_5HtpGiKh2edtyf@gYT3;iO`Q zPQUYo-F$-cdII(zpLil_qVq2O)?W+K*81Igyy*W{y>n-7|1jMUHYMG0q5i3oio$SS zJDb&y_*PZ#Jb&t*aBS(~C9#hd&7AX+ulAzco8<{tb7dbHL`v@9J!dmpxqW5qfybKD zzAcKm5wTXyFS<6a{Kl=*vjQZPzw>?mqtB;q{OoR#MGxOe$0~EZ;KM)ucWh()Y-%~R zJKk&25*Cp&{^vefl(-eK`B(Wy@-^OM`V@0HdRcq1SlIk;EnBDOo>&<0-D}~-zo!gp z?{RKFbNPPJ1-pLJzyk527ZZOa9^AsW`{cp>yY|jcdUd+?&h~xZHnZDkvIg>bSN}R6 zEVFlhaN^m&ED_d|cgy50u|H|~F>T(`_S3b~j~g0A`4lX= zW?kg5D)V~qhFe>{H}qb!w>c+oZ12stvxv`mqeQ1}#pde`**b#lO6`lv3KwPcL};&B zf6(;C3HxV!vppUKF#8uDoH((%NqFMjq6@#x-z99xIguW%Onni2Ta0 z6y9gBzx-^%kIf3#`M5Q#3Ns8$&j?;#{!`xb*=!qoo_mV%@^@Z{#zw@ul((P!HB~7+ z>i@m|>EGtbSX|owWp~7ML;de-*Uy>5uh$d7XCqoBY}Y`?_M34 z8?)!ZK~opY54_g*X8rn@VtZIFIPCHpgW?xeV*5qDK0Oqi^7WtEoXW%9_q#v6nB;u+ ziiXCQqYGP|yJHSFT)lp}NMSy|=B}{i(lMP++P+@9Sje8tx@GYLE%k{qJpp+wou_9N zC0s2H++3tdLxa;|0WUwrx01NH0t3%4#_boh+j zV}q}}T<5R;`oHRXnn>r)c}%ZQa|zGe^7W#u*xw~>k0vbMcUTB*b zFWSreBraa;<0*qfXb_r4BFz- zHV>Zi&Hk9|zVN+CF|Y4?4!MZWKV12AC#f@YU7gIV_a#xu=Ei6Hrx&;Et;H@Ab<45t=r3spCpPM-X9 zgOq8u`@;A35^L6Ti~lgX{o-lT<@|eho~P}p1-&wT>ma% z%eS_qVD+WP1FQAa?(96R*S|u9k z`Ztvm3rmhomI+kbS##i(uF&*VrXu^>c4<`evhJQQDqcG=hb`j%4(XzdUcncR8&|I0 z`RZI>m*|6&I^FI?E9xF}9MpSw_o2($X%9}l-^EscyHD}y!-l}SFJgrKlSWX z?bqSFt+(EB_@DA@6wmf`<&(M{?7z-v=lh=#?=AB`s^o?9UG0de;)l|-uQM`_qwT%KUTcBeM$V9v|K1(@NVIbCs$@XJ2Y|U0>0P(zn7K2c=D>Psq*&j z2S0Bx<$U2gE4#vSxybZ?hwE~(F7wU#H)HwF>60@5E?x0PWmkc+pWwS5x!u+hPZuo? z$es7_tmV^!Om|y*owI)@CX4+(Qr7gfbrVCec==A|%_-lV4@Mml%I2|o;MqIn=?3On z%X1rr{j(2D&hGfINbJx11J&+Yp3jq2rX`$>FtHGftQT|7f59R$Rpwg4ui4uV%>HBo9XGdWA!wcMBohLA7zmZz`*6@Y9 zVEfFD(@oZU7bvn)oy=oG#lAeVJ9>Wc}B-+~Sv=Pkq;EE4_(VtG$wWe_UFpG3Ldp5uq#dE9;a_Q=uChp+zAa6Y(7+BjnRcI|V$ z1&ZuJo9Z;*Y zbo%|{6Eo7ocKkKmz2{$$N$~W*4<+Hv`b+0#`*i-<_;iBR-h(Yk1@qa>ejJjz`M>E*@- ze9L40EPZkNqqOVt`!)%^5n44r@6KOV`y^`Jtr@vnc#Qqm+pKzD^vf=&KHBSfg6>XD z_O}OSJUj4<|9~%_`)BVtk5}|xO5FRgGGXnborkaHnaz9FdnPi_Q-sr5Hn@PJqU`Kc9|hv%A3d&_sMr`&nrT`u-C`+uGN znenG~7I8FItzUQ|Cb%W^m;RdkuO;OQM&4bXGEzSC)50R+bv|2U)CEnvY`)sBX)Ckw z;i%-&_8BW2rMeEwcvQ|Qh+yw~@=&Ke46n@j5epIZgah%Mi-vdOvNZ#+1WCb0XJD8I)eLduK3Xp@B$u zj7-Ab-vx=Tx7IgSUfH1&wf3*z-75? zLB3Kp7uSiUk}DEHjXjKaJ&^|u;p{_ogqGpW5eXWhe+W8#l| zPe%2x|E5=J8FQ@v$-x7ElH=YQ{#~_+_t{>vt3~@o&bs$6@3^vL`{7?!GJT%fr#<;1 z-+L`OFBpMHckZ%V zrt%I44?h%)q=_o zw;QMYFnac~Xv2Yu$=MrxR+~LMB>lwZ?b7$R(=FE=<2%#oc`E|*rdfaJoAK$+MUQ<4R#h6?Xhu5o zZ5L?&{^#qyFuU)C7yfVUD_Fo@UGSiHU2X2d3wutt@#j`o&-t=uk<6u(+N{MF#Fcln z{rRYu+ju&8fAGiA)Qk~-z6P-vO)I2 zLCIY**Bq|NOFD&Ckl71t00(9c7@JpK2lWQ=xrEpoqxSxk~KMBIhuy-uL2NfdsGD z!v9wGa_N8nH?#UzU3@p8w`}9W0PPc|Q+>2=B)&ayrf9{N$))GqPVQulyCN^W%ypJ0 zUv1!|9c=&k_Y1GP5-GoCeO6sj!oP`M-^iQ4dd8q1wS@m(4_}u|&sVLv$t$NR7eyDh zvdOQz_{4$#i0qBmcS?MxUseA#`{!kyz3UX){Zc*!ySx=yv0-BKqvSNE&wNE5=NG<| zvAlfiudd&ha%1z4k|0nnr8H7DebJ_UM;`OTV>KZ1S$mlagH)5uq+sOTSqU5@szuIg5U)%qrfGM}Q zvdj6b*ZgH{TfhA-oH8%!-E=2kYi6#!+Trr*x3-8TEWWdYSvPlC-HM-&eP8f?HhJD? ze7)q!gs<{~b|T${;q8(;U+S4;-3#VBdZL(}b?vRc32RT~%!rKeez!p1Qh29S=3V7E zD+0CFL{{`S|7)MFbUov=f7{aw4-VZfbLCqbWPW<#M0=|>`qx-zSbqM`7rS`gPm#Sv zN1DFY{cq^qR=wkJ+P{MV7nppN%(tBTf3Q`uUxWRd+|%g5jQYdu(i5{kB&k}SXcWwz zd^jiOX^VBvhm<8{PaQJ1UcdE!$HjP)8x^;H8rJ^ayG>?V*=iS&nZIQU6tDY7Y^^V0 z|0cDg`ChBRjTgVeBa-(%;G4bipHrcP>*qh^3w6vQYWJ$PpVj+d87QHCDZ(+8VR2^q{_kIP9K7?P^=h77 z`!_@5HOqf`2l`hp&X{ua-;DJ|_d^rDHqMq|QuX9JGjm(%gQK@THSrr)zdMj~P$7K# z7sISLgV+D64>j+yIjxvE|K7wving{LanvUfnQwbrZDdg zUH0(6jOFng|Gf@w+giTy#KMdEv+lTNYiO;xd+FN_Y31*V?fW!ma~@57f3m_RlJgGd zyD##8^p-6=p<&{`TV8+f{_6>QZ3~}n5Y80{-zi>d?taJRZG6Jo-|m(%HtB8$H9EzX zZ1U4Ts5a{182 z+NVc8Hyf_sR3WCl*+1tnZ(P55;Vd=wqK$L=9&L*1J$$h%qD5Ibrhb5JpXUi2I zRO<`E&5fPkRes7^AL#CQGeo9__3xjLA4E&CX2hRbprR@=xh|+#{P~;y!^b5uPBi|q zpS|$Kn%8naKCF3_{7;?v{=pyK7yql?^PkAQHLB^V_AUd{OLL1(bg!PJ@#63+y{>2S zN7h_Ar_5fId);)3Tg<2A`O>>KJbE@!X11xZ($fDS<#s!Q&AY$m>i0hhk^j2L;z`oF zSvJw<8!tcJ`Xu4j=DUGBZl4~0T;zJm^zC<(m6`v8<|(afb;{o+857ZcZ^J(JqPvO3 zQ}49y_cfK9{Cc_I&DHN~@+|{)v;WHa%zY)0Jx#Q}_QS)MWirpoJth4GCDKnT8lBts z)$nh3O}k9c((mGd8EX2r=j0!+V^n|Dt=t~damQ(6r1Xh??}a*HGi0{gTTbzOd)Cr) zbr$=+HKGUh#UGN*QsfgpnsD{)fyv5;lB53D+VEYgjC!hR_PXMCv$6If-eZaBmU9l> zn7{i$x8SVUZ3cxr{V#u;%FE8U=WYE`GiZT%z{8{S>|{3W^S69DL0PwJp+}5!>*vR{ z4-Q?{efJ@&e5#E0%uCjZuYCW;ZM8o4WP$!c{d1OIWT$Y(-|~Irw7+}n(fw1L*It{S z^zya+_m9ie%f3CHTsbS0ul*mx;^wcpMU_=P^HtY#8oMw0zPV1bbzfC|*N=*uwR4oR zxp}Ys-W$nxtJz&HCbG7C$A>@qeD2EI_1Zs+RM%>-spi_JsXuzJKd18j*U8MbXS`nC zoqvxZuD|(W`pN#sm($m}{SC6xe5xsA`~J54^aD5UKR7G7P3D!m=fgQYV#jhf>|0$X zzx~9F?=ke+DmU#M()s`YE@WfuM_jXLq^ktOdQ zwVX6fnQ=99b$_&@e*0xMV{_)C%l4fxP<^@Nxbt6)$%j2OjJn*`iY31NH0y(Ed#R<* z)N+wqzxQ#Ud0&3`Tg5L^iT5)v_{lvxb3JauH`dZ01-+hp)&kj&HW+I+a=v@g&-gm` z?MuEjf9^Fonfg`N+*r7Or}wF&Uu-IG9=^Nt)aq$vaX$>Yy!xG$_{A-c^#7LeU-_|+mZ|0UAy{j6g2bSdC1Lg$#Rs@mE%K$vdu%5+146-+^&u0F%Ox| zf9!I8zN&=pQG&e9Lk4M?yNMGg1>{&9?rJ_L9#_;M@BTq2$zkI|4ta}%*JX|PL|K0> ztSM+^zVqM(-`puJNe3k76*Tg$d$+*CL`3@Chld?(@pa$-Ob}t8=gPI=pkOJ54g)MQ;t5gbLG=ulX=Lg ze&defh*CJy zod+D{76%W@8a?mP;OgQOZkKz&=3f57LPdnRwc?PZ*^mFRIx z!=Kj~{4EZ#saNcDR!d#1@u5+>Ch?JhUHOY8EF#Q(A6kTS3d-7Dy&N|_%7noumo)BdA`%uFEw7qT70)rigxbt58k9SsgeI6iVX7jW5P}ku?_M;CMDe!%6 z=9hWET|Mtj7jyVs<~~5m&_aW&=Hai3`hvrTyPegSE|8EBe8A~`TCUao-;*ur-l=KWXCJGWR*g!$fw7XCFBKIH*2 zdR@JT9x&_Au#j25_>FRFMD&9WUiTjdIQPACkh#{r=s?k$f)?pHcNP}&2Ju)NoUCk= z^Jm`O#EC%xIXe!qw=>1>IF(qt7ESFA?}H`+&!N#{tfD?_4oOy7?`_h)>P zM_mE~N_HG7%6M^B_5}a_-Ibsed5GQY$FAl_3$kx)IC$h?-G^3YzUa^V=U*OYbZt?d z^MED2{Dei02&-$OXgjlc-THSIJTo=e?mXn=zwzKDpFZE0$#r`ka%l6h#n<^4amaH$ z5@71$(dLu(`%u_ET|S9VgG=Tim->!_H)XA!>u9iXeQeRrDJW(?>e$u0=rFt7hgRE3 z9}hRC3o>&xEAM&0l3yMm!`Ho9+b7}YED|vvEflc;-d?8 z%mkW?3AdBq`SGnw_) z0_|TH-Y94gZRd=y`);+WUZbMQc7aDhi}9Qb`sF8<`;&4&IeD(qwjRRF6q)mfmw`;p9z$ zJU5z;x?<;eOT$~f*T)NI}iVQz+KIoEU$S*K@5CL0jJ)(37#u8xb8gQD&HZv z{VAX9Q3t~Zoc=cwn*Uqt1eta5%KtbZuEuw}_{yS~6N#)p4op;Ln)BcV-zk1^SI3DD zxYBnVJSw|F{#$#}f)yWHq;m?&+g(pNY<$Qmf8zmnwTgM+h1z!v?h%DI3Lbrb!Y6su zG4KJmaQo+jynOF2cwV$*p94)D-K!@hErt|5{Z9gAH2$kEkSJ(TpOaAB-s9{V7@)J` zkaXS$Xwmk)SzRWfd9k%lkWd$I`i}#w`!-xJ`mX%cHS0b@xy2z+`PlB$wNT?jllGp6 zZ1Uv+J1>~>>^Q8?r^$W;?Dk!!dX)~cpZnmtez(Pa_fzM8_cQN#(Ba%D9CKH3@}&Tg z9fw8b3Y!1NH$U0{3i+<)gU8-qmlflRHGTW+XTs6M!{T;D9P*mqHJvJA>?{s3`W2M4 zpRru3p&=CWkjH$-4rleHizEt~)$b%Ww_EE3sdfF`!S>^T;J$)M&VM`}Y9%*tgR|pK zXSJn^H9j`xtH+x`$N92!!C|8RSo)p5n+C};n9XfkT&k4jvF6x&p-aXS(JT$_osylMXC!7EDmw| zeJE@1adrs|klFF6x=FPCHQ$lM8VxoXSbb5PA|kE#;b8|)eBJl-KvDL2uDk{9%6zPT zAL`qEx@5TcnAiQe_YjmAWefv(ZX_H{Jj4dB{*SsT+I?u#uX%Dogk3~;!48AM8S--; zJm8x-rDM?nP^l^%a|cvY#mPM4`S7HJOM1V1dBl z(JwzSXY&G$f>zOXUh^M2oYkK$lIVX6O(Pn7yhq(8K44D&ap<4UF?X(TTSRTGDeT(F zyY54i^q#v5Cl>|q{5W(Zv3A43gR)|pf=AngYaZ~#-*{|bAJlP}r=VH+&O;Xd@)JvZ zL|Dy0)$WI~cE3}OhM?s9_aGa4dBhSI5oteAW=`yHu3aL)&W%^kXONzNofks$Dh{yE z`*8H2_qAUE1y{8p1;>L&e3I?0&}e?}j&JUi#-szn^EMo0(=QK@0cXpCBW?Qo<1KR@ zEwIXDw>Z#sxKa4e{l-59PXiJxLo5#Q`n|hgxm<+V@57T09_g4niG?k&#?J4}7V?@l z-NLZY0~yF9|Kq6Qa|UyZUCoaI0(e9?=M}W^)|R%nI`K)nHuLWf|8dBd@4IsAq*7*^ z2ORzu2cPlHEIzexK}12T`JD%k`MR3Vt+a>%)fZ+KJDNW=uPa*I@u5+;=3&p_zji@& z;s1{_t^-x)58m<3oYJ`HfUp{$>4DyCv+@8Lv95!Hg7XTRc>mRlcZ=L@{dBkuYMyGrG1b+dN?LFF&zFqKio%QV_KJopN=Qxy9~paexh!G*m>S&wXg*u6d}{{$t{y z&wY&V3R>9bJb1}>WFfl} z9scuxgWclbMOh`)^=yvaqyz7l_uxW24kCtOwuuT6DM8@$k_p{)!!<& zdTeFTw>SiD3izCI4U}8YzpkJ`TITM;$&&(jlq4UVd@pIXW5;2orHi1g_3E2%F?GBd$+}|2^OYm!(Gzu1`EHX;;vw|Hd*)fL+tAL0iUh z(Lv64?0^eLmRK%yA2*YH98LeeZb8AsXZCR1_=A;AS^DIhc ze0=uvPU1od4YMu=d5c3`&Gy}YCpxK=H;BtTK%!}*yEXDg^}5@5IE;6Yg{O~IoL zPc0rovKVhrjtHpFpnvCSfn89?6V4AUozA=kO^dBlf`q!5(svwU%_}HvKNsr(>LvAM zY&iJ;ebU55yCLn=*1ajQr&_aiN@i|1vd)7eHUTR-*!hIKL2~1F|OcA2cvq$E>N{4&@T6Y%YDbeld@Ktl1Cf3Z60z- z-?`)X^wEMF8dfzA7~^leSJL47uIc2ESkNLq=fPXPBM<8|MB16dL8V~Ly9=J2(9Y0< zH+|mm3pi@4hp_2Xll1k2~z7~l8$-EYF@G1S^en(i4U!v%@{@R z1pA;4XFgal8nE+(23O33Q-Z>I8+L+`Q_;2)ePrH&!qBmBg@)Ok2Zsd(_x-u|)WA-}B@fg;{4)>K5;(CW zM1(c3pw;@$gNJ;er9j~JUYN`>YYjf>qi%^G8pYRG$XK4~7fG`3Y_2V6VP0dA18&-X zI&R7i?-DPOC}>i5Pr32K7CBi}*KO!8evr_0xIuY;xW&icCD107XgizvkN>718=y_a zV)mmC7u?Vgt9ig1f8+DvAej^V+BSOfG7mxH1I>>V*dJ|p5@4xxu=jqmbxDv?7o&Q` zqX~)4-PSrmT3x*6KMu(5+c5pC@6LeRdzoWEZGwOXRR1@VtFw3T-t5#0R8b1|yJK;`ZF9TYMO7~Tbv8Tiwq1WR@yCwO zj}Fd$o*9wOFBLYS!t&Gc&g;1+)S?$ZiUYxm*+>Cjs5kuKQvt_ByS$~ z=fkr)sc+|xEZb&l)2Qt3Hz&{8?4(dDclf$HJMOj}e=_mKoyrdnPJTAqqqhFYae4i? zJ(bxU_SF{ue;do7?p+s`jz-&$G!t zeDknpjgY?nzlzURyf5Dz4A;JS_)p=J1D%g^Evjb-wZ^aWQ^{Lbzy0BxM9-3YHYO?a zV)71W2dUcS?fLQW>|c|V`Q1-zpC4#EFUO`nZ@Z$kpla8V(^Kv9_T(L2tms+NdG_0f ze-%YLc-MPQ`SHU<@7$iBd7I|gdQ3Ucx>$Is@b=pU-wK3UrNh3-b z|M2RC-g9hg_Eda)Rx9=DW^;Ae{OAl{^8_HDpvM3J3c=t zl#ZLM`SIiFZu@(C{G5N!tYDjMyGGufZ;r*iwwy^STe3#k0Ps&*R-+sl}bJ`X?e0XZEbpP!H{_pc* zlRiC|u3o?W;njk7KRtE+-F80RXnx+4*q?Z#uvF zMO8Kay2?-G(s7ejKYmQB*08@P<9GPa%!+4e4~|SUR@d9EI6I{CP_MTAogMevj;DCs zaOSnK`1GViI&QMg$HIq4rS%p&rdW9pT9l9H?H%Le0bcQiu-KU8TOs$ z8rj|F&4DB~f2Gfl4$Xd@X|ccFV*XKm50kz>1&`{aH?@T?^5EIlu3qrCLRxOJ%0Ef-MW4p6C^}->x{jr1Ma-wtwEAdu_*`On$Ma;zL?>#QxhK zX0dekE9?91`T1_)AD=f1S=PzyEPV9bEM>A@U`4^xlfCzEfB2Cl)~WaL!i=g`7J7b{_qHLdGu#{ zyL$WO3w3Jq7Km9uv{>AiZ*zHg@@nU)-rKnqK60Js=0b{zO1U^tvj2E|_Vvt)b8y9JN(=Dqt^Wc&C33Mf9|#A zeDV~Di>cgf`{jPF#r*EcFY5o*+05avvAoxIy>s#p6(Rj|dv?xgd%yhPyZs7*mb>Oz z?7WxfY*wklRld$<$HzUq{naU*=UUIp#m!rH{q_ehPyzFJbNkWR-!miTwI_bpE_krH zy?yfQk7g;Ikm&Sv-o=~Fzusl~37Z`sru@%4oV`iK?%tk%d+PRB&S|Ut_Tcq?X7j#3 z1(yW!oy|OjT8+bb=gxlp)XYXLbW!o+gZ%#Qwm&TGSN!<#$x;3JwmiHqpBE<{e<}Xs z>E`x+;q~D1)ir6e?HPGlA7go^Q*OXOn+8`IA@4zlsl!PX0FA^KPcftJ~}Y_ab}0T@Omq@b22*% z9#u(i@|>*kr{L+i-s8CyKFeI5PiL>Usl3~EJ;nRR;qQ-+Hk#kJT{6GZb_teZum9wf z7k@rI=vQBV`@^gp&guwIO8$J;`QOYN&U|w$iyj{NYL+rtE${~<7C+4J={%>;|F7cH zF5dMgr)_Be3o%}#+G74QA&cTChdN*9e)#)PjSEx_XJ%}FII%+I&BLmK=bHEP4`&;J z*gNeiKUYhwvYq3?`={s$D3lWT%>yew-v4}|_`&|#DT1IvLKR#{d@QlO+ZL|mT@zDb zIk9qgoWJvLPm7C8;eCE4et+(?y*c73(g`iZE`IPR>4bWGbGvRL|I_2$%=vxGA6iy_ zST+AZ^J3x7$*(_~&9Ma+l~P9LdfOiwt`wRp&0kkhw4ZlmW=)_Fn>9-U3KdT3-Xoct9`LUC?-*fs4n~D!lPQK5r@U`pg7uUa+!~eEis?FAC zwp63CyE+qE4f%N9@`c_ea(_NNsgsW5eLipgk%a0Bru=>Hlm7YaX_JJ8*a7UAcfKT_ceU*`vIPJFhR;{tZo zl>hr5np&!#lT*{b?tl2^;cBUU^IL@P-#mPLqPY6K?GN8PoT^bH^(OJpj-C5JVXU(2 z$g_u4Db*GA+aFH#5So7^GiF`-y%@j4zbqfhX?uk9-Ld#sEWN2sB~ZmGT<%WAy*78} zX)lDJ(VxyA{pk1SKak{j!(RA(5<7w9sMdYt=HayJiuyg487J(kKiE8p$6l|N%(MCN z^yK~A3g2l*j?aGk@b|}OyW1ZW7v6K_5CS#a=Hxq@X$rOaCqF&bJO6fpow)i%RV#iu zo637_;fIw!dhXftir+&s%h^u~h_TtFt&i%I^RQ{+FO6Om`@l)oO_D{Qc``Z*iZ9{M?A$yXlo!*`u zpPubLnZ^J7cM|U$3#*R>MYi|bbS|oPxjcOJE1`PDLo*w-z(vK64$f4ce*43&^r=5o z`ozue{h8DD&G@5U)PsW))z$0roy~r#aOtnxb5ritdovp~P>c0or~32TA7+Vk_G|0s z?fLocq2>AJBf=_H?s7T&{-~k#{L#c0LZG(7pF3^Wmw4CMRD67L_I>6Hd*S%AautP7 z&VIX4zg=-Q3#8belYcll2$Etx6-&oW*86z#&Bvlzkl&A;fAU9sWutxH9*d9rc%T1% zGGRme$H%7{rH|kKkTF9jR_Wt|Gm}r}R+#P)n(y-TXs`Kw-*fX%{>_i5EO>IV^ZxA# zzIL6TYd`&XlUP_>d$-L!$-AU8xq62EJej=1*+QyzetRrFKihrs`uFzF@4NFStbkVC zypD@JN}v@)o5n@eI5}|kIw!ZS#dZ&=ly??X$Y^~!Xi=t;oo|>gh)(SL9Ter>} z)LcKl#Jfb!rsC6+?`C`6MXK1XtNHff2fg@MSFSE`GX%lo<3c;cl+!6nK$e^KbLzsCVjl=jNa0z(c5<9 z=HZRDYvld;wm&rO6p~kun^ReQF`({S!M?2h2YQw5=j^!OmSd#C<-hJv(PL0ddN2B% zR(%640NOtoZ)_LXQTU`?`1|bz)&Etv*w^`is*~n-vZ}j|oNl(C_vxjX$2*`#?;i;>g$NufSooi8Dp<-1oXH$_?lXp0~$PX6%9`@fS zcr?b_RsXQ~2&zQY169m!JO2c=*w4vLbD7>@WAX7xjda{(rH_S>xcv3Me#P_m8;c&C zxY&8__&jzNBJTSCOf)=cn0}&Ft?t zvveMtDDMaEq)gBdIzCn1ybjc1QHL}+&%Z5~J}0;A$Z>srb*B95`!5Ham%Fo>?VgOO z3-*3tLUqNV+zQ`CM~-)jgNi&*mu0GM!Q&JB>hHEI&gSVnG+BH9ogce-`%g}KvFE1T zuYUFR+aG4RboLADp95u@Fz*L=TF zulDT%xFG>*;-8$LVYBno>E8XfKg`hSJU9DoBD|Ak@$u1_+3)4v?3h>GbD$B@Nt-aY z1Ky1Kkl`T|oAjx`_VW`^F&5X^Zy&d(;|=QK*+KK%RflV8Qs=j3*|JUkfc z{NUI}GaEI}Ma9n!ww{-JmRsQq)*_{qpSS$s*7nUS%{^>nb{0P>ls+f7&1K?@n4eFN z-OshCju4vbzu2}0l(3p@_o#m?eDKue$=fO$-d(SMM%6SLyYqtk1HN4@4^K^%Hm}P& z46fDYez!wegtxz>2WR*aR;-`mtU*}f%%yN0&&R#yxChu^zk*Zx? z<;UZ*&&#d4Z@=gH^RD;@CngH3pWCiDTcq>QRBeo`t2X}#*hTev`!5Te`_8`Jh^5ZL zN)Xh9zS*f4s3H`8?#_-oZSIFBppy5{4eB&K0GG25O*w_+-60*C zr|FMYhckskD{9Z_8a6vVJvsJ1x5CG+^ISK3{Cutd@8w>dKO&d) z;M7EE^*T@|G^bPP;?7SGj(s+(klQ!kWqL*BhvSp4=UP@#8{ixyhOre?C1Z?;p4Qq3KN_&^SZkgR|xQ=g%LJn@2=L^GDqtix1Cs zxBoNV*e-{^8Kkmb;bY;G&FyEuZKzwGc;m*+!yH1;5ua-lRJ)E8qNa{_5qXDiI#2yE zM`BOKr)S?y&dl%RJ-1-v$D4;A9r z{_7t5$>0ARIVbNP_h);%e*5hSzKdKQ9+_&4-ef#E;YY=%N7K#gmp}YHbIoVY$7esD ze_B^(ai{I`&WdxFwFGw-Jv#Q&%tp<1QSsA*z3TScADX@tlIP#nE(Pi=zD|D>x{ipD z$^g|+pYI-?W^?~+`2-Ic%i>2x(wo{8;f>P&?;gH?tpjcXp{A(wyEE*oKct8JX8mVj z6=+$woA>6Ei5gO3;n&eyn&7JNi@ZMH9?N-cAB;WgI|VEtjd^@c)5nmeX@|XVbqAIt za_)JO_nh}C_Huqc^Zwjx`#e|012U#GZGW|gy>PV$xNY_i);6>2g#>YpyKU#W)^_2k z%U^#*X`KC=d83pM);Rl@k|_kz|L`xQ!jbFL6NL6IrFI=r53DGBdiJf!l=+?41DMMD zY%D&4ddlj76`yV%Mk;t8{{Hx+Kss)+#>c`(M`xN(zZ`J>`JvTo92XTmIo3HJGSUa{ zVQf%=)SY|s4&OXHZA1H4P~YeH<%0jd&WC@R_x^qS!sXFt^`afTkxJeoohPn-MK82o z&+~lr_)I$gWb^&YAO5s_7;5ME=<$he;rF*En1*nkKm4!o>4DzIxfMQ>T%Mn4=JsE= z{o$L1o;80q*xq@4`)i%luba)wx3SNY`T2Co$DO=4mw1cV^@bik-g`awLzer57cxKJ zB!XKhexNb3$49%r*T-4TY5RD2!ujlp9Ws`Mk7}ehc}~=b*;(}X*!f(GY75?U{^f}l zh0i{lfJWSW@BPn>l48rBw>GmgER?4dMK?aAf6$rU1 zVOAtR&rMRXJGW=fj2!vz>2r?1m#;DZeZ5h7zU`hlKX&upOz{)}SLe^GuNF(oP1d_u z`Qd^9Xe0{MsGIBoZf~|1e0xyarVwaZ^!Ny*8TjGBsmap&K|QX?FZTR+^YHP@U;B91 zAF+H`Sy5l}ZNp8uXYWmp%n>U@`by307S1u1eFOLWD`dyx%b9R1m@}=1x zwa7=04|Qwj?_00<|IX!SMX+(TIkrBXN`;U*zQSjk%k#6}KKzA^4?`;<4SV6)TF>uK zkLz1!?zgUfyP~&^P^&eh|9AY!oz0(*H;en<+y1ad&+pM=P>~E8Q?8Obw=R1EERD4( z1cJJ!XyfoV4vVYW`PF>;@Tu(YzV2_6H~jwpf9-_xa$@TDwjcbwpDt>ry zs`~cZA7uj|{<}Rt z-zDB~{;K7Ur6uus=L@0OM-?BC2k`b(&Tp&S=fCUtmiBLtPc#Z2zdga!r&DR-j-qGB zo`OdjVi$dSaBTAY+aG3?boR5~J}g}ExmNuB&E~Uv8^zt#h19Qq&pja&`RGr|ug9;d z9v=H@W~1i2==0%bYk#@z5C5b{sn~U%?2f#5zvreUo#;)y>zN()>kt0!0~h%AQQ*T*{#=blgtTvYJr)J*B= zw?E7X={yI`W7orty=vxESQ=J*w&DG0!ylK*C#3KG57e!Rbe?DdDouW)PeQ#}=v5b2gg^nz#8=__$QMrhdow7dAik*ME!W0}WzsZrA+i zsS-D*^7Gv%KmQ)CylM&`WkEFFKqLKD`gYYnZp>e=e5Wn^(VQPDO5jlbWX=0FJ?XkG zs4Wd1jsFaqS@9DAO~pJu;#typtXY2E9nj>BSB+3JsNE{#fB3WUM?F}B?C?!z&`4qF zqQc_6_uJeb&Dmj}{^`NV;D7(yu0NS$asKe>ZhO1x8Os;Wx3##)3?0C)(YuAO#RTd~ zWlGo!uP&_GLb{JcMR+dl7%5R%W2^V7Mv$N%t`%Ny&z zW%B=pHu8DZ;SKQPOT0?*Y<@gE`Pb~m;T}*Q*pKJly62Za{8M@Jk5>pZxa;@lZd=YK z70|T8$H&JWn%TUIRJAe(%@EB2Rn5vDJyRgr|8V&{_Ua!@`(=JUe!>Uo*6%2M+AjV5 zcEPs|DpvV+)e<#zyFcybU4LZC4;3c;zCBOxU*1rscJKM$UcW~#em#0pwU77v_W+?* zZEytq+|AoB?7PUDMNX!&XczDLHup!9Pwd(8;aQc`HrqMr1?+W@`3rFW`QX*glV`tH zN}rR9>pUmVA6N73!#z+i|EK`<4+`e5`1pC}hfc};pKouG$2M^ITrPIe#|Q1|-*11I z#naiZu3uOAxm@bd`INt^P7go@H?-kYA-8Vz>rUzCw?E8)j)tNR({$KRey=actlzii zrrfpnW+{^u0xgQ3!lnzJpK6x&ugg1}eM!|$4%A@Y-TuXRW4j2rV%~r{tn)Kwj?42i zhdV*@Q5AD7I{g>H2EnA>*s*sW{J#Bd%{K#3zg#=;$KzAo|Gx7oeDw5*`}1kq`Q;1$_~dK?&#zqiakuSvIg3!Mc{ne>`Md20<*xZJ^5&7Vsr*ze z9mnhVXfim^ew&0;Ys5M8%2*VEW-)FYw(308xmtMU?AJfd=GcNf-`)mx8>~RDoYVHL z*q>MT!{KiMpt;M3Zx(usbV8f*ZxTI9I+1*D*W0b0UkA=GEVhl}?)Pf`wPoCE+uR<$ z=tCx`i2rP}=Jp2+n+GCPYN zl}T@^=Id1Y2$?AW%`by$w9}J8Guj(e?C$08e?C6@aORIXHM6g*n0eWvx6O)=6DKULeUf$GxeOVZmDfQ$}9wqNUqve&-ag)OzJqC@I*L>gb_Te9!oy_cg zGM0tAcyFqBi|BzGq-D}_lie2;KR?*4e*SjBK7YMV|3^=c%IC*PExT|3!}jZbaH9@V zic2kWnP{{qWaqIZ+t-F6+pibzszF?Ef!_Do} zg+a+!r}NP4w~7CE6z<^duMR`%EzE-V7LI(jv8nHrQ0Y@fE6An({8N0UaB=UlbBDj4 z`2OBB@38hnP^%G~^Dmu0q89w19jxc@&lsQ1L;B(Wc4W@j{%~T1Q0yb{)LPwrw)2Po zc-F{NfI70JQlD-%FSh^!#oS;4w!ycF`u=KY#c9T(5rp_J>&} zotxVqKmB$1_Sfg24$b;<%W8{0P+J?6x76WlD%=lGc_Gw_(VM+8zcc;ApR+$~`qtIY ziTR)BJS{?~)%>>eZ&1HUZnDNjOUR(B#r$s7kDeiMcPc&?OWitu2q>jM{XWIK2_ZO zXO*;Er*0zu`+j!zc{2Hjv%y_}9Uq?kmb&+O=Z2Nn<<^0RTG^_1bSfD_hg3{TIyblX zv+K{>lizGxW8c{iDp4)xvZ?>Byc$2@gv`!@N%OZWdZR25fK6n8#?$2Ux3zzLeD6{*ES=7N(DDb+#K&LbjqS3~ z31ZNka>3(Mpfd7djUKpOQD^g?xBX$w{21^APL0&|Ki59YyKn!aX3zf3?ME+uJy2im zVR@%5M@W@Recha$g*$ostLLr+kRP~PUw8R5=-af z7ggZFX?4Fv$X%IthLs;q2iM(g15dEM2KD~?mMhM)t>88M@aV+sw+sK|IbVY$Wfn+M zcIng$tlTjV+FP`!&e#)U-#hzuriZC~H8 zQSj{KQ?os4p^qLP>y`(Nzu8rPIP>&?yt_J^`gO<{)zkC8kEip4J6eX8-`_|v&9~K= zwJ1kqZc>OLm%t5$^hLJ*Z&2KyZM;S4=Z@XoFr|lNpWAhUBsFM@z&(o9m z{U1O^vz@>3%xgQee4&*gc=B5Kxm@fc(3slKI_bE{#r>PxkDmT|GM)doNlEpLvb(S{ z6Et7_upeCSy*9HEay@iEx%WV`vj5L2>A1;iA3q-Mw$7JZ{_s!iugWI32WQgxCkyZ2 zu4o;o(scxu`X{ShoO{FO-yhU*=hK-p()rEInalh9Lj2bC-!AxOpvtu$x@rmB_j_<~ zvikn*4@=McKYDyLonJmbZuvvo>J7imJ!Ebl{{HyLL$e!)Z90_%v5tIwGho)g&Ypk$ zF{p}(dn#`6`R3s#N8ab2P@C^^F#t5F^SD-8PJLC2?HYN0aCta`C>v+Wy{Nt4fa5C5Ba<1pVHi%*9;e}mT&Xx!QP>A|wZJ8kYs zUL~E659<5>%R9XKp~^WqvHx!spC6dLxb6LSs(<=$Nz61ws*PfJ?V|cHr5N8 zmh~4|7(dHjI$fUJnYHe4+UdtFHm8i%p7~@CN$y8ynv2`T>~H(C*|SqdMasR-qHsU& z%@hxjd7#mO*Jd_$&Qo99so1fx^3zV<_0s(&guxF4PbALh88;-NEd&(Eia zzt7D9k2v$+KKuuN7Z220`}yJS;m@`DZys{iSnS$p`Ee)jz4ot@H?)5*etN*y?oQir z6|WLM8;j3ZB*3M-So*z~9|eDE5%IzpBSzK6jFVA^eg-X|v=dbp_hP6#WvlyrL zZ+|%Tht#wqkIv5KpT9owM_kSRv#@E5ANShB5esNMC%^df;la7d$8#%ummPUD-CW;p z&;GWTwLgT6J!H1E{{>}>l*t-_7KKmG^q$WBu}?gDk#~sPoeIeG=*Ef<&rY_#m;UIsfbQB!2A= z&wiX&W%rZGKm2{Kg%GGjyxI#+cy~C2V!?&??c54emrm7>AD*3SKYo2fy_(rp=KYYR zS({Ey)Tr09UnjGpa1U?4=cE^PtIi*;gciI>g^$nj%fE|1{Ihad`WyvA*w`Mg>mm;o zXhqVdby3xhAJt*&+x~85uW$aQ@1fJT$MU58c13TQPNj=CoSDx;;JoHk;$V+`auS976o=@8(q8XtKA!Go@}>DJEAtNF3->dW*be$5XLPJj!< z*`OAowmf)_q~8;HaZ*y@)3d$&_idld@3egaDp^5mlitX33$-eTn~Ry>+y1an*|Vhc z@Hc~c8_PSOA-V{miQ7LPI$rrp>eP7`XU-T<2kWg_P4y2@?QSlYcW(Y|(E1d;kI*Hl zQu~fPIypPuZqL59Uzarlnf3efa{OxYoXZ}2|A^ZIjgf!yt&hD+I*%N#eDc!fe%tjW z9y;sx?ELufd3J{V`44BrEQ(7O7Z=6B8WFtB(&uk~n6XC)yl&O@AuO?ETjcP+{%&e> zUv7`1{{#*h%c4gmkY$Fj6<~-2{NvjO6|ww#c|LaM&R@UqHnFO^`oV#~!>6IkaX%zh zLl#3ko*B5P_|Zc*=xAe7;ls02`M0l6{NwYcj^!O_nOCLsrjy#>QTX2Txj(*5P~F4- z{CG37f8X|prk+CG#`$_RJL-5pr$3rIr%}G|j^)Q4yf;(4MCx{adUPzh`M+JndP|QI z(6~Kh3VGv>PtT6E&tL!W@5~>Ti1lKiL4b8NJO1wc16rT~TD$-onU095EPf2iCBJ_! zNMv0nbN2-(UA=LeyrErcN6{0t|99Fz6Z_^u{O4?Tf|fOS>E!MC`S9@H>>Kyx{`@PS z@I$7u2-Knjt*sOf=hX+TMKruAG?)LjGi1`>{2!@lE>F&O@;_hy@Q=?Pesz?Ug>N5n z-m$pXc3j1?KxOC>$&EWcJUi8X`?^4#8mMuGEp!FIOFln7MkEtc7CV{!Z9j}Zo{_M?HIcKY z;?uwXZS|9{Kk=xLf7Wl#ZddbtLY>;T2~6pIF&2e;d2cT96sg-$^!(UkGaI$wMW0VY zMt)5#!P9-k4-S{}|9sB-Dfr0&es^;r(A?{8@WPZ+Q>C}x{*WOd6#MAm!MW=Fw?EAC z={%~R9|x*GZXCWIz_efHE+|!&OK!(1kw@odv&-+R&afA*&H#1a=lrHN7q6n#Oeo6g0f8_j4 zX8FE)Jy2zT_a1*j_o%{`k5S~_6zP_Pe$ZTh`%i|X|;1UG1c4J4;(_?SVY}7y_Jk9K&j)-Zc zDri*T=ZBwCeYQTct*{L5_McR~xbyRagOi_wmm?hQHqW=q;eY==oxi?b{a-P`kp$5E z`fUFDwk*{V-vpTO4kUb-wMPiF458-7JH=avx3x>a+9BB2AzXhlHDXW2=Vyn@`A^FA z*)BN%ZgAn+SWxr7`lG2%C#1e-`~SaP{rApdEOQ5-at5}5NXXCwx zJ!?PY+}rbWgYA~zc3b9mp4|$aWdbjn1MPNzEo8hQHxD%YU*S9H z$fGl}x#iczgGP%r=O2L9!Z}8u=6_`&s98Q)8MG7;wE+L|Zejg>?)eMb?cdA0n@g$J zulz6d?EI1ZY&P?_zC9KvLCfm*NrT7TOy1r8Fhhp3dIofP_=P=90_!O23ymWvhEyYv5FgL*l5Q^Z~#mDCVBeY`}67HSJO55 z{Pz}!s+hTh6D0Cj>5p$0RIT{s@|B%Kw1+78epn=HYs9H<>!Z=pa1*~>X|I>IcN;( z5u7}JdxGyIm%_!xrSm}J2KT|MCY$5u?a4d5dNZiLynCZ&&V6&OzdkjuL@GYqm#aeB z@FAsc{`{$#jnI0R=SL6so|=3+_s6#ls?&}fo^35J7w`P<+k@Vdj!8vNrVFpXJ;8UI z%frK8&p!ptvTSJo?p?xXbEm^*F08Mzy$w`i1=OkSt5${8venP72ka;+T?}fq@3S@O z{5O3Cv|wBf8hC^DZ+;nnl+1z+&TVhk53DFCO)e_7gRHEMvoYBNT`8?&2ij@We)#%@ zx_K)XvUWlj6J=Y#XR$W4f1Uh7h@bzRP30Z7>WZc#k50@MmfvT8^t18DmGi-E)jxOI zaxSTM&DSa@wFCF)Pilh~s7*efTVZSLrQ^59612Ac`h|L-Zx@+wmBan+_l8 z^Tr)6P^@8Q*D&3MEWVn_E%pK2elby%$c+P_5@XE?*DOz ztzQ0{|Ds~hBG=`&Kh)}PJM!r8?cOu(-EBWMv;V&$Qx99nF~O7tzShY`4U{CC&He4R zAC&W(5;5n7+`0b#&wor?=C{mOV(C0|u@W@9kTO{(a7V#Y(ER0xy*oP3^|nicR{I~6 z%S-a)xo7k91Zam>p)#aU`nZo5wD8wMq%X#@@NtdwK3niQd2=rR=daE72!$qj=G;3c z{r_!Z?+4Q*^ILqEDF|8?JyN-!?>y~OY2qci6ni(Q7GWiK~--4}W6iGdX3 zys?YCWwy0{1Mdz}3rs2mrIh==*Yf%6&Pl0gx#!LK0a;nnJ9+izgWo>1p!L|+A9-~2 zb}y*hyRgsphu$`YkI)S`Qhm_XgRjkO)S?%CPON?b8u@CrJ)^(T;zOD8r$V{?ZO_#c zzxz-4Au|_c?DJ#&eP7=G^fb__A8F9=Kcd#I;r;u3W?k32S_$ZGmzye{BIjau7Cf$! z24#9shw5gnRT3v4Y!`p`^ZfO60{A%yXvz0q|`;TZ}R8``C z4sH(3lHt7H{r&iCX8FGO!@rF;zBWfJ2y}Vau3esIlXp1TNY!dTXo+;KbR4MGd<{~+ zuR6kBxHrsY~ydKh&RC=ct6yO*kkQHtEHj${mKFS-5?+BArL4 zZkO)nf4~0V{`wjJR$8`#+ZFRJWftV7XptH z3(vp(;qAk0jXgKyPC=q2(YwSBRN!0QZM&}Gt)sVR=ck9?Oqa~>yr0H($MO?+nLE-5 zN`=oVm*>#A?rb9!F@H$q{bYXUeOJDk8*;b$g~6-#TD~X#-(lqs+HiV&31kKM6KH^e z))dM2#XJ9;`D2PI5s~;85{WD9g{xO!i^Ti@&;SA?sN&2g9f8)Urd#H-*_Ur_|M>XD zo`NFS-X8EoUt2zC&hGI;x2GpTBLx*IV&(VpY-(=A&oH;O7rwtl9lWU^4wQng2dJ2Z z+vV_oE|-?$4Mv)N4o~t-fsAPVI)CI{HME|Cu0Q}!4ECP{Cua0^8>pk6$O4_MhVHiO zmVOUuO+`RkQ|mn^Ma-!zet5W?|8sg0KP-bN&IV6$fi^X^9e?6+crv?1=k6vp4fQrLA{Nw6yY{GiUnk3BIdb9v+)2pLZv}*>;Z3#ho7t zl0Q5F&pjq(uGljdJSz9uc;oM6{-@Bbtkr4Y zSSCb&d^1qlb>ul@NZd412-1&v``xtVef2|0MGqF7Q=D%fa)KB5cMIpAtJzV*`!W4d z@GB|UiQMYzwm;10 zuV(2~x`?*sVh>1*OXtzf?b4tjOvP&XKgFTvuyx4%|Dr6n5!=6~^5et5rc>s3man@3 z+mMVjtM_4sN#{98OQ`L7ikD7Z<>yC-%lW^iC-GmEy9eF(`@R~y3M@}0Z%+Q<$8MA1 zlat`~*?jYIyBhPGb!uienV`dw`)om5GFMBtzfJrL9?sd-cJgo~$`I3iUpxErUyAJ= zA3Z!VSGfQ71m9&Y52u4Ru;d?3E>hXU{~L3R>2La@xo_ZOOls57>nTWD{J!@Gd^jiZ zk55h(cwqwC#!qksecXOMY%eM#dwk8FVJ~d|oCmfSRV{eYhtpHVLF0tKtt(Y_9Z9d& z0Hycl?}>Gts)Cipj}HILuBcZt`^tvAxfC>5fVTS6G*hTs{@$IRAAW!`NPaPEo#iLc zBIXoOz4G?>RB$7}&{JrxF~6S8&Ua)UUSIhsq za~j(}qx8RP_O*Tf>|_6(bIuL9U*O{N?g=4RCFnX46Om56kChhdZRSGeqmT0EzpF7Z z<9+(w_~-7xx<+evUifxr@K|eJ^Y_F*Dpu^!bu#|8D$`t^oo(g6zFx7WdPaSx0IX<; zJggn4!WIr*U`*W^abruNq-&^p!!<=z=vsmtZr*vx%?`-4|W zr)pq@wR}xQ9cXLtbxY7BrttjR6KpqoiR6KnjP)MQ{qgMsWEH~|f&9bThN|GaadE=F zwok?%Z|gL2yRVyL^6vHo-#*Z+RXA_&?9ZT`ETCES3m?Fn{w6DKGyxUTC(f^5_)q1} z9MgiwFOGrR@Od^uu1UpD58rG5yPLPaP4A*A6KJX$sSaFru->=oUH)X<4^LhkJACqI zwe+TwlQj11%zAOB;!fM~6t9xHO32>Od6nSA4{ACTynFv>V|zZhp#>f5)rZWvJo$h9 zg9l>STX_1kh?t7qhCeLU$2bFgEqY794x|$ueypNY3Ja5@_1k!Lqs~1Yg8=1rV@=W~B-OfEB)bBF!N6cJMgRXf$KhoCac{f$X`0v^L%+QEG{L{1I zxgUI~B(L`(kCJug%+2k#KLj;`z;pT6b2qgAoE#xjQT*hvr}N*N&Gq-z>_5=D-xf67 z-~4^yf0eGbQ;-cb$(K}j9RtrcY=3yw09S@Vnxg|vFU%F^H#hTt{@ZMin){>MhtsPi z?CoUswf!*O_*w$GX5ho#3h>%mb1m~c(9DGwd}ZZoMQ9)!>~H%r`GaOK=;)0{D)-?H zIy3XyD*opgcf96KK$F)mc)Nr&HKTLi@gU=4xu+iLk zKUKxd@8#Ll?5OAcdb`<$R|vL295Ud41GJFM25B4P+lAhc*_@vrO}ET%IlEQC(9)_N zZBFw?+#T>(#M#N`b2qfl25nwG+sJ=>{llM`A8uDQLHGNjG$Y>3cX@u`aPPs(m3u&I z1S5nxw|}0_zkdC~|2{dJ*um{-(6Z8bGeK)t^ISl~%-h?wE~*+q%Hwe7$q_>H&Fw+{ zc$}VeT^ZV@dwBb>a^Q~Q(&XY|yM1i`|2=%706Ki)`9$^Qw?E8E={(wM9&UGMU)#^m zKK9Rf_E_xt2tFD@I(m@@&pMl(pbk8*`ysh=p!F+K*K#X-K^@<30d+MNHN5L>Wp>vw ztM}!(_?`QldqT)_k%!2-bH?bKSJLZvyQTBZ*={@Ut&X@aXOoN=@^}Fs@~A*Mf?#{Q z{>F+=Wsjd8{@#1*zMM+ggQFLF&vu^A{b09czRN@K_{a8#AAQdM__w=C`9p#7=O;zd zapsGTOj-e%w6d`0t-G%dn$)==HxFf`{m=IH`uPvNOZ05+tbm>f6CtIQ{~R<`^7gy& z&-K6O!>26M%{mY9hnw@=cK(02EuTLYsWq&)QN;){t@JSc(Q*!0m49Cj)J9k>J$d%$ zQfax)_ioc~*vtVf<2jsNr1B>5Pet*A!ymId?9X2jI6VJ(|6*zI&bGT8h)^(b>D2p( zHp5$EKJ!iDFUw%iIObu{IOadQGxJ?0u85h-o_FqcZiUJs7ub0cX zg>;@uzvtu)?YAu~z(LL14-e`UprAJOr~%EN?cu%oWU2;e8}YH{W;YJkwn0``Jbj*9 zp}OeEqa(A8<@e17&ADecN<)?b-2eT-OC&Dlt^{bycRqjgBJVxW?kunSq3=n5D~ca1 zeptiXZ<}L24?IFH^*9&OI9#PzSR9Awo?e*&US1>?eox9u{`uSN7xtX{*UD8Cl{^M- za5Ikst*)|)zf*A^)R8FRo%}ZOe}z?j{^9IRpjpV88*=B~XG?th@b{lPT9L7{=&}UL z9^3WlCY?w5^UbB?>-M$%e0xyZxcLZZ0{Hyx38pojN*{}!9_`)E_CNOj$J2<-&u^a{*;HvNZ1YP~_JIUqYnW^07>p&I2bdEay z;uS?Di;F;OKBd>YOss&;;z><&nLfj2PX4@e;6sjhAzhZg-%VTg+x~d(`uF*PiHoHh zCx0%H-sCbxLkM)t&!_*{6-YbTzxL>F-0`vOF=(c=aO7QLi-dK1g3tG%K z7rgEclt&@6{Ldc$`6u#HJ@LDyhfd!)ZP4)`vypa|7;gvfKYVoZx7i-4z9W-vA2`0dIl&WAG(2;BIc=d9-X;edNTk0@1Rp#cCp-(`MJS%&wfx_ z&O-$IMu~_!m7gCR{+zwSUif_i?;gk~Ik@J+zCBO}JRiBc{adZR&0^L(nY$I>mJ(=m zEoWWL4Y_ac&1|H0xlHGw=IU-vU6b*g4nNC;m}+ zQ^nGG3^7Rjr}zYP`t$M3e)z7MxXEgesp$UoiT`}wB(fp*E1qKMSE%hi^6230-eZtu zDkggx*>5}Zf)00jGcy=z79t$6u7%e-33OuBj}L!9U6=F-@D%HhJ8k*=@rynrR%h6M zD=+#BJ%!@=LmRZY?hW`^rkk@?7-8LzK8el_9F)Fe|-C3suP#P z|M>XvpZ}x|-T(byzy6Q;%|{--K%WNvVZE~+%ar#!#eY73?il{r`Nsk>aWfhFj^@dZ zhvZ&8KRc0s`Fch0j0&vDYv(*gLx?~89eSHz&Ha$vEzq>R3}}e>Ps#uqlrF?-E@xtvvObr!n< zEiB(7*17(uN32`Do?B77YJH+-&b^u&a>wqb{QmY}rtTl_Kl1$FC#js|Ol2(bJ}2My zz~XoOq?D=Z5?kjUe_Hi~`~0eDSFUM-d#by5!QDaV^02&1Ds1KRY$`tP;oWbW)2X}h z$K&bz_kF(|Kk}^V!QpQKa;OXE+wQ+Vs&4q>L&@S#kIJOqJhTytUiA5RGyi?xKKJJL z^*5aVT7q{CAdTy9XctyxQ=gYt5_j%%ZiQ;wk!c!#Ea%r${FQo^{HS+kqd8~~&`#cO z7vx}z2%ODN3V}9e?%8n{bP`66+@Fsr)i1uUjqC69-^rxjH^;ING<@zQk_VYf-*s{d zXczM7?(g99V$Qa|O|+@`@$TW@zi~e_?;Yq}EDi3V-hCki-ka!Kcc(4SNVQFR>hjM= zPgm~dUGE8si^nJ1udh%1|1IIV^@nFKj-5XFvs`*pi}XKB<8z>9*U$H6C6kp6?|9f) zZni!1+-wiHTe;u%iOi3JKc+SP()<4Fd#LoCvsQop(=4S^5j-q&=gITj7ec;C1gKvAElIy*EC|JLTVw4-Z!*+I@SlpXZ#qhY5T!&kbkZ7|Wu^CDL`(CqSWQZlwSG ztJxkk-=yN_{>~2%Z&$QYlX8NcVOIT2KTt&sw5D?(Z|vbI5<>F+c5iAkKyRS zmsWwNCJUb+c_h*1j>Vm}JRwljc~Et8shLC|h#> znw6Z_5pquY@Z{vTfWzS9DV`mXPq(YNzvA1BA6G!fQ^3c(j!uow+mr8X{!@ibep~yu z50AjRm^bEb`}ExA z?>Fs>KOa0Uf_Ueq8Afns!u=+phSVCloxv zR{R*85fk|zKRnqe4w<_?JJVjTW=B>;zwHm{RNF>tceyzg_rROi_JbCvy*DeFog?J@ zXoKyU_UrcBA;;L5ssFS1{P0sY$Nu}=_T?Pl>DxQ`&euST!CF#CsU+mX|g z&Gr9*j$~1Jv(V;G;e*2;uM5;yf5<&{Kp(ms3)Wn^lkaRUDb%cf+nINd1$b~J=iHw{ zP!La$6P|Cx3ST)iN#jq^)3d$%Z(jfnXl-d%XODyIk1$II1s{^Df*huB!S?fHiJFRC6G2((-@YGmow|WPA0KOfZyhPeYgft%?!tpM;Z~}0 z<*)lw__$d5&BJb?X5rh1D=G?ifR3oVA!Ss5PFVij{AFYvG7#+7o=Ark1e3eeG!7krl;`BBVkWBKV3_*}=0J3kx;W%I)oJ~gKV zD?sNEUC%wCw%+C8*{Sw1+#?GIJWyN*md0SQ?HdExu_cahx36}DdtU5VN0JEQ&G5=cfIH28+U#_ zKG^qw_Eg*fO&Hv8<_E=^=i%Qsn*ZPZTgxO4nm6AK zKGFcRLho^@^sbZIh83Tm^o!321#4X=r0TTzBh^&D&q7Gi!v%7zN~H4y4I#)8uFmE! zg+R^dJr#G^sx1POiXWZtozDM0-nqsn$B2y=bmZr!=Vlf1&y)lIRXzh%oV{PoN+zor z?)ZFV0w{;Cmv&C_7Wp^F-|pP|bdUZczr2^g%bv-aptY>iK~rS659=FNd@gzX`01bB zy!Gand4y&w*U$NpVY8p@|G$Iv|Nq~IO|iU@1f6#C$_=y~yu^IfkqJL4iyj~SYqm$K zu2a|W$74`2zkZ>OTHQGzXhQt)cA>Y3T+H1ScjlbGeZhCykq6V4w;k*Lom=7CcI4Sf zd40P-|D;|$o_X(}luBLSpTb9=^V#ALy?3qNVP$`34yc}aU7qaW0x7cAdrrI&1I~kL zvu$F)oUOA9JFopf^XLm(0K*=@3ucQl@yw-UccwZhg$hx$&Y@& zZ?x|NwdIPz>oh@o2#@_VE13-06NT)mn(qd3!qpNG< z%cWbzuiyT#>!Wv0=P~(mJDWP*&leNE8+-Wl?Xma>8rq(w@u%?V;co%+ZhyG#JXzvS zbE)9`vh&R+-;vyPlpQ6s`2(_(cBY@rNr-epvd0_l-S*oZtwZ z)hL;)YWU;n$=Txd+aH2g&B_1!_wy`hVB&YB&!zoG>YDcQ^qoUGjTSUU?fm_WreVd$ zlH^a1N~Pn><2rReem*{%zkYw)hl~jvj*mdC5XhW3{3M(0?fyw09=>!-t`>C`oZ6kg6% zK705zK_0v9T#ZtA{jc9wKUvA}Pl&z$^Qq$7!6zY{ZML76!~b{R)t`nRR~Dll0SNYt z`Anf^asRr?kNZI9%5MC*!M3NJ|Gw>%<45GY@GIYczguggs@=aI8*I<~4!iE&?Em(@ z{Tt|h;S|sa1$52(-6ftp?`$eRJgStgtNx*C<_~WAu8()FR(Z3FwR8UB&u2S9n=txX zY^St?_ZT{VKcfpuE$8;^052EM$@^3I{P6d=Z~8mWmcDo91+9RBo@fSH75nGg2T#zM z((L;4wm&qD1U0WKK0kba-9S$G{<973-wGgmCF{DB1ONT8jk)UqTBq>NZGr@7Yg62v zyu+&%y>dW1$L(s&E#EHu&0`FT5aH*y6Zr4z2U--DE-omJ%X6N-Ldf~i^Ot)*KB|+B zo2k>+2uv)aoYRI{+@r?zH7hjy)vz z?C{t5`@x$-?y7k5oU_^a;Zc=z-26ljcn1D`F(KI6;}2?^?(IUG?F(nKbRL|jt{yiB zJOpSK{%^;}hrefkwN*3w$vO|zho%9?sZ zXtI4=&5yd-&o4f>ZR7apIj94${h-_}gF%~Vz)dHYhbO^_G3x}hlXyPfxx(jKyb?>D<)>#y z?&tn^yU;@fwD4IjPbSaVyi>?I`RPlWkB@3V$JuS%`RRBs|Mz(38k=Axws$gjB|vSu zH^(shFFE|5cku&%i5fpvPW0Q#%Ngh1&Y$`v3mI?YNdGGo2@fjqWl&`yexB@Z;^5K9hfX{Ndj-eoV>VaI$~# z=VP7Fj_8w9-O~HFFPxpz32L6@@V^E1D<|BL`T6)r`{(tE_GW zSpI=_+*yM5chv~pYyVqNT6aV46l!N~o}|h)mxuk@@_GB)eq?+&BLUf=a}RWUO@%zT zfxrCr1>b-9zn&j#RSyRhding3NyQJ(_ntdm`PX#G@gvsLnaca5z^B`THf-sK-vb@X zc-Of7$OMZV{+Ns*Gvh`n-yLX&ak6G2zb&M+c%c@VQ~=HOvr0Na zRS;;L=T!2e+uE=;^#1$Znt>G?ZF}0K+izdE3-bJvlbzzvZ-23{eB%)5O-b=#2%95!?7_x!lS_Wp2<$~XJtGCv-lXn${gQ||nf zj7DL1b0g3x^1DBJi*$l!ecx?gn5_Zn@poSbZ-zKK+y38=4|h}kzdgA8-9!CAImjX3 zH&r}EdV5!Y2JIhwp$6*FoSZA(fBQq#GyRRKYPX$vYkvF_d2IMGxCi+_Iq0cPd7D(& z_S;l`e)JwROMFP~)?sh_E8>lRg!0;e!&)|H?}{PR4;h)!tL=Bo4b(X zbf3MdDR^8dz3b#8i9es7obBF!`$JXQ#2Z4O;(@pS?$@*&L=^zB708@lPmmMN58#4rE;=6r zI(#V4B=1hXb9u5iPv^nO>iTipA71_7nbSGl{$97ReM zBWLb+d3fS#?~${WyLe-jym>n3FaLa~`*kkpWUOcBUp1j^f|BbEdY92)0%}| zh(=)ss09K^kh6R`&vx6_{rvFH^vZoXo5gIM{mP(LHRu2W6)tzkp&fUZK&G)lEf)Ku zpe}H6@`s1N?Y7*P%UO5RnIGDe0^Njwt+{qXXtq75x%T6)>6ha!&iqn*?$71b?Y1BM zZ9u4z18#e9?140jHnjirm{PB2iMxdO@h;I$?VAB}KB)FCmi`mB#(hyiLbV3JIp6k$ zy9HI-j+~z?3>xLS`oTK~bkl=fjrmSF;n^{b?CzjO&YiaVa-dy3S9?#Kt=!8StK`Yk zc?@lkQf`0S_m4iE<{uusIQHboYqJ#dI`DiYcofD|r}Ln`KWMhQ8r0u_W|H4-Z|}?1 zoRS5n`6qusyAk9&4>hiC11(m6p%$C;;lattZx^O`-hzQp5pik zKcI)Y^X>;N*8t}eq*3Z0Zx?#yq?teKS7G7@>?S!7r&*p=S0`KyiCJ|Fn^zq_)KWfs4hn3c-MJL`>Wt%xLQQ$4XElm-j^TQGCdmY`|`kt znUp>DfK_k@=kx!bC?Pa;`R4=3gYDlg9A2+@`|!8F&kuAimYz8IGwj&JEN~MYdHg2* zAE?UC;{j)o?d+XGDq`++mLK==MjoD`AtVo4wEK7`?_Cv8$J-Lre5|XE0CfcJXw=NP zKYx*(P+5HQk>eLDA0rNYJ=%N!_66I|9z31k`ZllGwx+-3e)q|Lf1OV^@*j_PuJ(De zi}jog{N#Tu{l@L>3L91VZaY{0DEMLe<@gcn8_ck|iS!O3*F{B7kM;h}eIYgJ$OH+S zO4R1f{rO2YYIa{a5S1uw*>cj~Z(s0jJM!SKW(PAN>E<`TV_uvY@k~P<4Fxz1IRu zrTf#g=3BrXLoAmA!A6#H_)U>K{`7jmzrTN0htL1S0bG3>Y`#+0M50@y~eS45UTTWrwjVRL?012UJtB1iKpLuN@Sm@jv;6R=LOSk# z8fbv1SQ%9Bdh|+qKF@uj=AHBbI@X-e@0|4c$@$*H$AA7Z zeezsC5OnU>^u?b+7ZyR5fPhc^xnNuD&C_{ovbDY(c=YD?c~j8f!18$KN}rlnLa>QV zHOL7C((7+u@Qv#{2p)O5({^30p0hfGzaBh$b>;Yx?UBsT{mB0(<xMHw#z3uewNK3{F;LeJylEY2ptc7wP&+H7^DJn>;>Wv%_WOL#zW_DOtkmVUEAF1C z3c5!I+?EG7%^*XN3H+ZY-uQ1*{GeZ1e&1}F{kAu*aNM!jH4!%5$2)iRXK_4)H`&%xgQ#h;Iy z{J9f(-m=+tjgH}t4<*WVA2)+1Kh`5pek@Y7{r2JCfBXNI1rJ`hJ$+(xuTAHoN|(zc$SEC2 z6;_3GLB{ zALHlm?2i7E|GbYJkcTW`eo(u@aZ!dv%v{ix@#g#8e?35xohQI!KD`9Yu+xj-7^QWRQl{(dtPv{UFY*gksVfSr}K3l zn!H-N7hZmSyTGguIT~TMaed5>4}UdJB|i$D20l^FCLeUML~H!IJv%>^OYZ{h==k{I z$$@Uj5|d|Vd*VmpeT9PE6adqT|{ zv}WDh{9m54xuwwK^G~5uSie6fdgj#qgcK1k`lansp%WQ-&euM`Z(lhmmj$1}`vdCQ zKdk;yy!b<*TpjOY!;fbKEefv$fERBs0gY}~7JC}mi*{>Orx;- zxj8%Tw7r?R-euy7n4RF^h&EkA$gs-Yw(!I18&%`}fd}C}*s0x{ab51%;fdgL0k^j+ z2mY&(TL<2(;9RZ@s;}>A?AZZcQlIng&&LO#Rga+I2x||WzCT5eYNa=wR1X9VGq&Hh ze=n1F7}RgY9Cx?=X$v|`Z~n@H5<5%F_1hIe%T!@~SkR9DN@(G27Ydqo0R{8!lb?4a z@~eA*w-WA#G$iIiR-)NnQ82WC%*6h93yGJ-9}4%GJ~{sT!TY0sSUNEVB=)oY|F3?V z2Q*m&o=SP}eUYuuZ035Ip9Q~6TaK&zS9N*-y{id&AJ(>ZIq-lN=$0aIs$b%jGrRYX zWj<&y?xW$ymC2yFE|fXnW2l{eHPE8=erfrA)gJwzONS;a>x0fu$=RgJRS!Cz<;-)l zKW`tNc1!}zrGa|avqU<}GlX0p zZLr+}?(zFBI`ZJiWMh3j@D+o%(_evnJ*OWuCVVFY(xSHo^<&@%soh;Z3p7w|uBD&1 z{bA|jsW*h?+RN2E`M!Rkz1qK!*9Ut~Ui|s+NzL81oKIdN_dqi-pcR-^Ds1fA+CP3M zlFJ93)VR&%(fP_JhhKung|BhIr#8+AL5___t$?#Zn_NCWd_UhGbQn{S9q4>JXzd6( zt>Yc&EJR2r)-1ZhsvchIFHH_(9F)&^ z`SF1hTp|%%D(=UgzkB#HTdUk8W_9@b<=^lA&0^z~7Y@2`LM&b{u0Q7IUhcEjliZ%4 zIczQDzkd4e51A>wO9Lyb_kMVorFh-_QF%Obd7sUXr=D?C{p}w;{>Zt3hPt83-)x%Lecd`-uKb{E)P)x^l^;$|z8w2QB{CU& z2$DH>rJd0HA~rdh%1@{7$9ha!IuW#m^4*2`yDz9XE-rp@P~YFL{Nd!3UhpFSn)e@U zh01?`Hvas4`d&}v^xdKKhZ#D(=Vr6- zcIFiORH-uWGfSOi(WB{~V+-0pXQc4O>{(p!wQ3Ky@8YbI-s$bvrTyQPKb*|ddvvmS zeN9EA#`(wj%l5lfGNt$3+xYWovG}BN5#IlLuMUHbcQ0QUxk4)T@l(*{Q@cNSb{%_k zYPPieJ29_<_Qirs<$d=Ie|-J5gWJ={)TsUqpKig^3h`M_uD+N9J`Pf^=HIhR5mHml z&FyO53&?ZtdoN+a=05Mwr*iSS@(kq+Xpoj4l>N2%q9y2gelU?eDuU>{*;y^3G;Y@&`yzUjYZTz1<$2DStfvWEF4t zQ26CnV)=>lu^#s}ni%El-4onVw1@kwb)VbyipqjVCx7bwus!3RoC&HL3N{CvQZD>0 zRI$N&$^rf3yC_|YVz&aA1blQA0M2Z%wI3&Rr|-+ zKag3y@7~5APiw^|m8bNsDZC;3>hRRVu^E$AfUalhRDX^V%+)G-*Z;^xJvcEj-aq!8 z)1?a2O>R#geLXVub8N<>Mc~U|CjXB8@#pNajXOSn>pR%Ky!Dd&`wK4|A3r|P9e=M} zF>;1fSYosG(5)aIy$*`3(8|_2G7L@nWYcOk#>yde2^bJvUyi zT+wrx+p~Ud{dIfZJAF3qce`%!hVSvipU%Z9&luMSUS z-Y@gsY10OiO~+2R3WIV@Xq4APXp3%sEf4Rl~D)#@A{4P{LvW>^2MGx;E zt=dtsx9Dk^_^c(_pz{SkJ$bKJ^Dpf}giK}i@kfVmJJsGf`2X8VJ4bNn#`BdcMtVp^ zDi=MRuDyKs1(nFf#o+4=c7O2Pb?ni>+3NEDbgq2xxVB!fY56Icz575J?T_5C#S{O} z2?n+3_LndGIoow{@zaO0;51O_emO#_)jZs;Mqg5%TTimt?fHr3_<7}uo_4)wy1Db$ z)x2x6UbFCGPJSHwLx-hz>BmpcjRNk+Uic~KC zSoQeSUp}EMcTe!=*I)a%Js)2^ zA=Tb}9UMQNU2WEL+S{*d`{$KE{M@%-qls0%TunvPimw|VSY}@UU5hmRd#s089600r zLd!T0_|!9X&h6Q|_`}2B-C6xd^jEQRw=TYJz2D}Y({CPD$HeWcb z{L$R$!P$xY`|aO9*HiJla^g?XLwJ_|2s*hk_J>Mv^2bMK+wVTSv%I7KNbr#Zt;+m$ zKX-F`ZUPlu^?k}kPrvJ#cwT*R2YmXoUd^PH8!JBkt8}y5qx#_fd*{AvY zC+_@H8GC(x_&)Bp)8{O?_OM=F+Kq>Rei$5QK{Peb|yx;nM`WpA-!Y5~2 z&!10^c=2}P4<6kQ$0wTauh&z))2iYrHB(zWF6QT*)^Fa=z;)Dg_3OJoc+NWZsQ>%< z_(zA2I=$~dviw~m`|$b-b5GBI%@MQnPOI8Wsk!XnyIQ&L>(A^z_UQ2M=lUNW{+4{E z{87Xh)UJ-V1Er;}87Xz3Hph*ZdM2J13)+J#|LlAVu50Q}R+@;hgU*=Seqq1+qn-N? z%zixo_X<#rdrAMNUGJaID`WoI>^t!F`CL#6RL?9~XY=Fn$=gl)_dfTK>ekMGS5p!3 z;`L9}%lQSMmA@Z=tN6_4xVT%72yXGZ+3A7k+*z!hZh2{pI_N zKfI6jUmPWI{2%@cyCY%*vL#{S>CLz8rRK_|%0 zKm7S~jm{ha6-VWwC)4Bo=Dc&7meLEkeg2)(^pf6#&FcRDe(dJ<-eh8yZ}*1pqU^rv zb_t@DueV-P-EQvD za*uZ#-pd9}VCg+EF}}{Sa2I#vBva@GEZnh|OxgJ7+5CL`UQg%br5k&GZm>=%xA@Ly ziQoK><>J#)GT+!Ae`x&X`T2*lWq#^NANwEu|2zNRa9&-QQsf0Y0K*8bo0|6k<)|E>RL|Nrp*zsK$W)&G?L|Lp$X z+Baf}p!+qC{MAc2c>#1)V_JE|C}+kBhAMC zdVAhEP0i^&)?Rx|q@rLCckrjInmHAP&(1#8lj&T(g5R9)j^(Ef0$*RnThH}UPF~S~?9qQRN=dgY0pyN*3O* z}SDtfwT!cy(cEe z-+RNSe6Llf(v(Ym9q7n-?${tx(AuOQk88#6B(n9Moyh;Y=l)Ey=R;GcfYBsh~&`r*yi@+@VgCielqWz zrn&SU(hv8$v*S*yUZxbNsrKjN9&YbXnK^MaH-g`__qT4io9NyPO3#*sJGmn-nR5Aq zFS+M_SFq^VgCmo*>+igS8vonp`NQ9meiLMRe?0#R?yr2;OYyu0x$Eq&UdhP|5;m2e zp1ptm;ZCb+r_}8G_Qypm3ZLXCE(;Gb0bTvL^TQ7AP$N?*eb6qyo!s+`*?Rkx_3J8& zcX7K)VaYymk6w z#izfa{o$LSX|ieucc_r5)c!k`A0O0+FI$pP6H{6E`0QUjna<~P`2G3zSbo|lu-v-G zUAYk44=!KmwaM)BW6eOMM*@%{Flah}&aVn8>2{?!XPc_G7Q z=jY?i*JEc)TKn;1VtK?w^W`A*N%k?I<$vGJcgA~O_pq_}{N&JUy^xdFGHPzfmOVK5 zQP1b(>W_ubj<%X#-(8?mSN#0pIncnJ*rQ6-`EH;a{=`8ok#mbLS`<7#(R_cmfvV?Y zPypwz6T2s(@_*Cc=O-q|$IYp@-}-0z8}%%ax}Bga9Q8^(FG|EzetOWqfABj1M<%-^`+#VjAYHco8zR-Kwu?O#;3sn?8`5ikYyvU^H z)Q^H^2U;J;u9y_QxbV@rne5Yd8>ogpetfLkI$y5*p~sztc7F;V9G&=H_La7!)VmLE z=l&EutPx+eB*Wz0oyt!Se$UQvd=$Lx#O!#xH^$2<#5bvALWgn0cco0aY`G5PKYk!|##CGyR zht1EYM?1gAo&Y7izu;MWNZvm(*|A1eW-=6nQ z(`0zdCHTR+4_fsqP1)4v&H4GbNPOCotem`>8?x69f9KQoSmySm9}*inmQwEw!;G)BawzY=RG{sC&pg#{yDxrLT+GQMi{o_L2!(`8=B+ zk1NHerDX3o+*NZU-G*PC`#tBRHG(@ooSrJ&zk7me@Zt}kp@{jrAMpJ~EqVVHdx1`Q z5euqPjaB~m;EcTZz4C=#eQnQe_{;fhEbg^xR+`$K1789q-ghMUNjvCHk;+JqpHp){ z=j_fu|GD5{f%qzwER(vO#g7i&bkcHsWa<6noIbyw&3mV5HQ-*^8{@VD@m(reJfPU> z{~Q}JY0*Z|8ED0|JEA>IJ=)x!oYb$MQ*pOd=cZIE|8D1+9fdo%V}(rFb~|&=vG}yt zxmwj#8Fain_xIfas?Li)J~=m=eg5tTx2u|u9oN@Cw`b>_R^^W?e;@7zjj!n}`RBFF z?a|qH6Xf*fymOkG(hF{`+q^q8#izF)e4+3@ZudvxCU+Fs`D83VWh?fEPcjioKNqv3 zU@v#*B@?M~(7ir;xPv#D+S$F~d;0L~Lr7V%UuH+aliwnrr<(L0nF~6U=)Kd_8mV5; zyFa>ruWASAq(@LuadP=YP#p^{gXN$FSCRO#C0R9hDhi*UeXJ+bnV)SBx?uLi zcg<}m1=l3E$Kdh4@S7iIA za0j=ykg3`Jnj7h-_{F&`**&jz-1+hJT<7uF6O&egR#cqr1(p1NLB;))0~0~T{hmon zCR!9fJJbp)z87AsD0<${zJ9lXYV_mBhxe@(uKZjr-gjjAI(~7`f|~6UUTaHAb*h8* zW$oe)-DD~y|8Muc(Eu=>$A+3;A$DSQ)znf@R z^WLC2CClaC4@5!n5~-j#1ggc~ADZOTd$ybZch7w5C&!)sHK}B{^np65Z(%L4T9z;(r(PIC-dHE zsz~p#sn+Fk(6U8b|K6UTcUa3SYG3^XnXbHF>{N}aE2vzZ%w1o;&}*98`-huX&I$jNsd8`5&kfdJ zp6i8pUdWiUv-sh`uX;Y7*MC%ecyx01^wwETPvYZ#7C$*WugGSO#hq52PN~*-@H$BD z*dP_k!mKnjgo`m=yl_@e$Dd3XoRC9Z*Z>JKtB3 za*!x^oNobWOYL;_`|+jRLi=Bd?fi7QSNQwx398PEKRh`#yY|@MJFR-0Qq9W#bw3}M zh)+|=&e5y65&X6NefdRDUXJ?%I#F70$6-#XR^{-zorSx&V<(xiiO-Aq`M6AcT1rOF zzaJZxOYq-c{=vTT`16Y$GN7R$P)X^!xZvrjxzeDL(mNS+?aBW6hl|ChsepT5<%aTl zVy}26EfWOIsR-AXD|%0J16?e!+nEPjSv2MT;k!_qz%5y@wjL-Sht3Yt{3V0(JlX6z=8r zzGMnIL#s?o3iLY9cWs-Mi=jR87;>%L9YW7roe0KJ^-j98Mmv=?gS%4CBJh$%tNsGW& z%(fnnT`_6p#UGDBH@$POW$Dac{bP#lr_=iC=gJkmyWAe0nyPO8@14_honFv*@weFC z3h`+wnV_>uR9_#y>$KX@$W#f`!+BH;?$jLubzdy*x9Vw1HQTy!-?8{q+x5+>%?(_j zBf7coA0B+D=i_+=bo~(|@4veszfPv2;7R7fukbEK*beT{Pgy2@cPu|YfYi)36(5h! z{vK-~G{0!aVX$Y`x0=OyUiG+R`8lE7;(Y9iN#JC8sCoZx16A+GkI%k7{~lWDt$hxj zJ-Va2exFzT1hoNP_xt~~1=sz@oqpd@#9o_UGO+^{W6vtZ`;KhiDi;Sjpsl+7 zDc}3W6D>eJsQbGER6Q3LK0DXSetoxrs_$cPD9;1ssYGbQg73EMCBmv7+JK$%o$t8p zCnVLOiwmEhYi3`+`vKq6i$5$tClAJR+p?Z~f6dl4@6V?PNAAa-n6xzT$A;x=CQ9!w zU+BH**aKKq$ODaRq?X}B37HquWKEb5-M05N< zi;w%bBa2M#B(krQ+4-?re3wc#crWwuzj`_+FWj*CxncPX{`>b2^FT7%oOa>%-4j#; z7lT^z=I6>6dUqWI?PjgN^Zw8za7g`jt>wR;|CxKzV!{7&=C#Lz&ZtKp+c2MZ2T=-d zuwK*tUN&rk3~xC{V|?G7AA7kYCz)`;`xDTyu~JZfA_p{57yP#U{q~*BPp)>%`2iYf ziajxDRbWNI(|+moyDz9lCx1vRuaN&|0U3FSw|k>`?(la_zX>6|Cwk-G&8fK4sxwon z)gCgm5nE((N72^C^270udO9apZ?ybdx#Yl1WpQrhy^~f=+yP3FNcsN#ZUa^K!^O`) zlXG+4ADTENUfDjz5>!EGe$t*P)oBmvnC#;YEi$>Y(B<8niVuJFye9m(qFVHLy0yAo zxuW+nw};?i_VR{hxcSs-9A_jpe_^UTt698rZxf)8!o~Nq*K#Ik_Cs zbQLpUt9~c;eK;Mo z4q3P7pI4U~s9Y3(SH94z&F%5Yx%P5<-XEGG1L_p&^X;(&^$+emet4#l+kM~uS0BB0 zLHY-ABCVg~5w7Q{%!+1a3W`diIwhbMx11-d<7LA{l8 zpi}BWt^rLjS-Z>qx!0=cDFv>Ni}!N7KMH;i?g#$dZ17DxQmWHD-7er?u-rr(5q?efe|t&)d6O zXEra%!WxSrrfj=oIAbh}HXEGQeks+-4!R=k4(og)c8JXu_gghJrR2lo?o<@-2YKvz zyE^;5H+-s5GrmsUBh@Jk>J{E;)mkalD-CMpM$FLlsCgy!^YL_X^?T)t-hFNUk+?hV zU)tZxR)IS1^85F|GX6qa@D1(ayPjN?m{U>otp9Xu#H3XlcYaJPm*Br|-GkQoaIW7` z^x)V>y^@ow!RNEcPv5;kB{aDhoJ#hU&j8hO^?yLe=IW)KyjajK2x{$oj(ss{k>QR{ zPtM8LmnV8oJNE2sd+o9Fvd{kN?NiW{0@s9v`?({HOh6}{-jLk~@0}w#XF8}oaTwg5 z*lfM#L?@_$1MLc4$1(-*TW_27o8yP>I0~64frg}yyo8KUf_Dq+m3Us4u&Ma;r2l$s z#H6(we{Qgz^Zfbe4}X2s)J)o(`=kemptgj%AYGNN8*m3y#heroyE8n-S zd3Qms_Xv3A@?NW!r&O;$6BmklBJRd z>Twi`uS&@>`3EZ8e(U*wQaPk>C^lR-Kh3#4B)er{K^N%-&mD(INt;bfyo z+jZ{VbN|n=+|#PmDFwPg@y^aYt%@t9CQIwT`}47aJKD&UPk-MVzR$ z)y?s|Y;ou3rtr7&{@m5ZU9gb( zxoQ83-;a|L?<=g7nkcRQZcgQ%R;8IzQ^n2g-tZ~!ZB;xeHJMu4KlSd2i?hD$?aWax~CX)5a{8Lx-p&W^}sh4K1qByMP(*v3EsaQ zpX#`Mi%hKI%i7-`pL{<*u=z-Spt8E(9LwTLZr31Ft@1pZou8|?oj+yz+}rcx!}0IB zKem4Je_Zh3bllClIXZL1R6uKAj!ZS)zCA!CcJZeN$0l2^-)^8X|5!@-i$;F;y7CwM zKK(HilswmHS&& zEv4k+%i6y@KKxKOrZc?8-VfB_%zRh_T3AsZQ&If%v)HUBSv#CTlQK`fh)n~}z7#(` z{8u-o^M2BQ(E9L+_v5elO%Dt^>H>KwC^Y44Z_xHQlG?k1R8Bo~VJapFa)Aw_;mBan+ zSQOWDyBe8j`RDD~@%g)0+mj5ReQ%~dJ}%$BeS>P?yQDBv^9?>SA3;Vs_*-erI9(1euU zlda<6|90$c)txETZolu%rPs%=ANu-#&++%m1ua1ftuIGwOj;DU6O=Q5M@vjvXju8_ z(NX#O{6z0<#~vP@{x|IY`|}UeAJ&1J1%7iZitD&tgG{u-^X}~UT*2*ZWU8hg_vhpB z-?}*`FIv>xlwB15PTrlnoZa(M#~jPThiAU(ig;dLacAep2j@QP@|?Uh-1yZ?0bjY+Et zf84LH{!{ee{ll+-<^$u7O;I@#0b#oPnU0`-H}B2{yTKU#gd zUw^mr@4_eFyC$gwDi=RGG*x^1_6sV`i$6aBHC?&)OR2;KD#w58{d;`o;b@IXD*`PG zAD@~F3cRJD^Jb?14SW1uY@14kOkd4S^R4pf-225;T$Mpr6&Qct9-!h3DwMme>+=&m zwjE2^@5^6v)BId{`#cp#WzZEj+RwLNPywxsJJ_rKeftI#(6Hfbae2G^hhBS%e{2l{ zpR~)pf1--3a`Dqcz1rUqZkxaT0pET9$B$3U7M4E;QlIn>)b^aXy!E~hXr1q7>o-TH zevZz7t)zS&9RV6!ANte5&L2E;6y(_lED~@%F>fJA}%2*!#&?6hA3%pRE$AT>SXZ zWbO6aFQ`N>{`~OZ^t+1f+c&6yrc*&T35q%KP1?Vn&+^lgBl79{@()^{_Fr7|;Mhd# z>)Q=fe3L&tI6B!r4weVr&+m@k{ZFSw2)x?mNT)HVZVg`i=@GncO^J`KP41SljN~x& z>~aH5wuH-J`s?@FU;X^;+Y40h-K+!mg5QhkdM7S_2$EV*-{PW{(A`3Xb{e6GF z73?~2%|F|E{&oYE@WZlU4~}-)pUY45?mG7H)b!fNe?I=!O#=-a@~iKA!*~C^u88M_ z6*4;uADw%u%j0=<#+{0f5Bi@+-K>Eao`9!1@)vsSa(jBP zSG_zgKheXk_hkF^`G@=M`|=aLCmnluX8PV&|8_)in0w4}dvdT-Jv}aep~p72r-ys> zcRTasCweS8_T)&naed6aL(@Wf55JwC3|bPiMWA?6jnqugCFDQ%vA*}Q?*&iP&$)MK zl1XnrJ80qJKGyx^-*}%M2c66EXWv2<&#RyX!B0-T)&(sH29L2$Ufdedtn$}13+~W1 zH_&+{<^S#-nvm0bvRyp>Tl7^>z^y2>_?)^v%YL0$5;thFtN78una`s&CM^vFT@yU_ zeRM(lx63o$Tz}oD>|R$NXbW0!hNZD!*V}KNZ&&kUAM5_G^7fC9L6Zh`ZSozECLCQSJA0GY?TX*EY+4FwToXF0o4r9+*ZlICH@Ok+QJ*T-n?+5w! z-l0h`yyY|O@5%fqsNoKO#P|9*XvO@Wy0cSNoRvR6In=HFe)|O#_r;%6%OmXP$=o|M z$)&enIA5=32dHRyT?@Xo=}D?$o#&@a(1jxfPk)QudB`mVKK^&-9?&Sby!kzwA0I%b zU%zGl57Y%Z?sUhq$n;JkxE)o;?Hgob6)yLGPub&>e|2@hOEsPyZQl>dQk8Wz79Uc} zE$q2Js(6A{X%{>?^;6fx^WqE8o+EVS?+WU{%6GiyGxuzAdv*dehmpU~v&#*%HQaw* zKB&`u9CWkg|3815TBkHWd9NJ|IzAUxq1o*G`0(HJ57pexLZ)i!aW+35{}lTcFH|qp z&K&e`(I6iR7o?nr*FTY61o^vN2>F4 zuVnAM{ryC@aQ&R0ds>xtO6}Y9Z%5&Sb02kiJTJ|dQ(5@1|8?|@Ny`d%e17`z`NzlK zv-=bxr6$_@?Xmn^$?aNXdS~HZ9O_fcXV}-3&v4viqEtVpqWIZou`WU(|dCI-9)#47JFNDHKp3M z-$c@Qwnsq)SR7r zTa{i)O=UNqcc*f1tKv@+HTkl3*`JTUh;38JmRVP`^Y70;6%iilpv4+TLE~Kc3q97g zS-*;rriPhl;0^d%F%@_lc%@3fyMc8Pb=Qo)~(kIXinzdZm{g1+mQ zW`8Gh|Ih@L-jluJ{QoNUwdzJnwSTvNF7u<{Nw(te`g^~>Up@g^UU2HAE_fYs<%cIH zU+e0eT>cSsqb~pb?FIiQJy?CZA9Sk8&WIDL*eXEXCsHc+B0-Idk4TM+Lvvq8OH5j3 zxbyR)gYxIMZ&3Aq{NWj>Bl4&2>@&WXNDa9)fjbKxpPG9+T4K^V!<)OSADo;xz4gxI zCznCHb{?MkuKVMZjER-I+?$==K8Df7>nYF8l|Y@ww(T*~91Exd&QS*Ds!buja>|R_(%- zZ}~oh%Hg`{caR-($n%BTC`UKYOWvtuDj##r*ogdt&nqKpFAfmng}}JZR+vp zj7cj&ccJ#Hzu&$=#r^T))9*g~{ZUZC9scO<_v7FN7dlU%&5F6&{o6071TO|fhyOir z9}QFu|Nl|2Az)MaukA4>CklfWChl!jl9U3Sk8`JTf2*RU)MWkYr$0X)f2f<|dBtMR zkD`CYKMOYocufEev7{r6?lCY1D^0PVQhbI)mF4R|Zm zouB(y%TL(%o@^9%2j}~hQti_5-&TEnoVjofDBGKZ+8|HAi*>1Fg!J99CW<7`s|Zf*OIJ|ygNIJpMMl8Kh=%#{F^-mTsVE&?d&;eF#_qC%Y==6d+1vU4ZtnbWsdwQT(x!f;5(PI<1 z0|FXd52&70(hKgh@3{xwX$b1G|J>L5Re$IH`Nxh=1l{xs>cW5jQ3%q#KfV~W7w`{g zPvQCKj7h66{+Fq@H?I<0HKt&u0??dN5SP=*t1K=+iO6uuAmj%t4c_a=VsO;U$% z-qJNWdFjO;(1x}1(Gj4e_7!xICTQ?s&+k7L#Sacmyf5oF$ppFw^S;w$o!)cu{P%2r z?rBxsDfR9GxX=VOpJd;GTTeglK2*bPIQW*%KC!58e*fp?SRxJ66+J)JY<+&afr@wX zr{mq`^)>enO^e}uFJr$?=3h+RpLYRGDw!^Nb9NLx`zF@4Bs)azPDRo4uVQUaF3)&# z*Yv}~6W5(q?<@L8aJ)$tav#Iby9;+7=8~GJEbbR$xxZCSQwqF;e`j=tt;e3--~+{< zz1I~vd2L0_j*qGLfBe07XaY+w=q&Yr7W-RuAvrj^U!I>km*wP@jy)D1AD#h~tb9_S ztDLb9XKtTmZzp!Er2X^d4jIeBM`wQOig;cGpMr4iuP)EY3o~pgKR)W;zkP#h^y3c? zPk%puTK3)V*)asV1@CopPF}O9`LW5m=Ks47f9u}!#e=sD2&;ofT10xm$JpJue`o?v zFK7exzaQ0*0n>eN_-@M{+I^Uh*j~!R9nLl77DPKIrrhH_A7sA+XbviWp+}e7Q}D1) zexgU)u_q_H#q0OnKQv9I_we`m)!$D2d3@ra(|L^1%sZ8zDnOGMc5!=tK0f?gH|FHe z>?xoDyHAf#Ty)Y0)pnqn@S<97-%BQt+HTW@>{R~k+Y40R8Gy@x6Yu$yJ?(nWfI8Zs z5~pXyMaz#54o!X?9WiOyM^I+tU%$OTHO{bpkL8DlC*F%*mQA~IV$RNjr>EZPns{D+ z0nfe{3))3NSJS=Kjp@vX-23_jG&s@MW?chr{@sUcvSRn2x98rWNjbg!{Q3Ld@LBI^ z)&6+(J~+GYjCc_b+IG~-?Z2)DR2lM?TY$SFHQe5lpbempV(X5Czmo^e?0%{~>IW(Z zzJq%=`3pTKfqDeiupWUtw8`+|pDAGl>Kik_q_oUft@+BlVmZE#}Ge;Fq5VCEmO z@5g5{hxgsl`7&E2R{1k%xy1VI5BLm0dv_hu?+`dv52^OD7!pG7~5e->^v@S0%Kdt$P%{5ep7PeCf;R~<{a z9|F4TNVjK}insFTXNTIg?{9yg{Tg*p=j3d0`G24y_|><^ha2^GJ9CSopjpNI1{(PL4cm_0sDz1JH+L?K`feCat zHf$1L-Jim0?&wRVeEj>~OnrU)^q~mHPnj-ub3jGF{_O!Oj*CIpZ&**?ZlDsHT=e*8 zv;DmMMDJzrz?>x$}@^-y6~2$KQ)udvv)y zIn^nhE|6aNLTFZ{KxtQk5T4GzHi^4 z>iqb_lhbj9^?%|D5627DNlgS#KJ0H*(v$)nds=lnrP?ps zp9c+YB_%$CjD^jM`B@E`#Moo}x1!+D$)~zHp!EYEpPg$z4jTE7tlMMp;rPVut&x+S zWTfnS!}s&})WgxBeb<&BADo$dUp8yP4(HxG79Ss+`K&8)^3sYwg^$n9Js&MGY4t;G z?A)Aug=`(y7SR$Nm*YYcC$u6l56;_lX)lT$KMKZHS6G6xQp$|$f{rC~w_s)Ol^+)WotQ%;|bN~G$ zHP34&VnBD^ztx3oxBYN@GPK(M46C;PM7;*z4`risW~xfC^5;j8)if5|H6&g{sAw$`~2|m^+Tr~>VJISJr&fQv@EXWcD-bx#Sfje+GMIGA6Iiz z`|*3-98b{nTG6lKpC7ATIVUX>tOT`8K^Y|)IwAqB+~WelYhTvP!ZNU2pP%Tt?bz{l z^Z0MkPeJoanilvg*7YPKWZxUU$H(U$j+U6T!qD>L zqcif;w{K7leO&PP^xyOM``cT;vO-!l$7g_*DcI<&Rn#$TgKQ3gbt8S)LyLG%={XYA7V%N|IBfcRGMj)wwZeMTt;n9iPho(<{ zl2P%TGsdFu=^wFKOEOB<+3fiEg(#Uw`vZ zybx%QC$=_E%KLYqKA=vGEp+Pg_pu+<+`dB40f|a(?;umVygfTVKLpjsyN~yagEGV4 z(0-MjQtu{!@8H;rXshmTRh5*I_Xo|+g7S{&W!X>t%%a$%fW{+`21l`v7&w=b_WbP^RKgF-R)LNx0!^cU){@NDmd^vt(tQ3?0ouQG z|NaxtN&fH(n(y&)L>p_-$HJ#)d-=bE20Cl&Z6MKHJ{eN5e?}?TPe(_9){=mhsq=GN zS1+&6eIHrL14V@;cK^?LU6#L74)Ed^fzJ`*(N{C;_$C9L*ZW4QCrPSB0ukvB{| zceySzfseV^SqvHT0}uJb+V-FRe*O@BHzTnhdCX4|v^e13 zj?Z=6&P68A?5D?rYApB^$L;yg`**k6HiOn)BW3$L|74iT`|=Y#CLIHfSJ&UUcW7Ek z@8SQt|39a$kFt*w`^E)YwOQ~8wBjOvp+}S3(-XbI<>&GfJ-Uv8PEfD6xqoPy4k)=- zU;X|#JF))V1kBVv4>}7W9$(h}r`@ZeCSg(@`b?mql$Z>t(7bnrgP!qnqd{9?CxbAD{f|5JwuInad6 zwqs9D*R6&O$wCKDZuhshUT#XsasiF0AO=tTo}Bv$o_~6?y86MniTAauK*v~gbH{({ zHQ&>!)+set7<6wjBIo}p{(BTO8aey%@tGip>&}^oXyRV@H%S0mw4jZ3hM$+0=L4;a zIDcrSr;v#e=w2=49#j=*{m30f)_XEP3u?K;AHA>p3tsJ&&z-J%^5Th_o3ceuz@xm- zxrN8NIw!CE0F77izX$beKK}i&$$H9(iT73agVrrri_67S?rT+xgsxjK-Gf@~fBStL zwC(LrUH4o_iv?6%Jm7n~{37Ubrpce9BPK!f|M~3&s{4L{Zv>vWzP0!c%;qpB)74lPXX2Y&v!t zG-wDnNoADLBqHAK&vhE z^Z)(W@ICAJ?gEv#(rWO)%=_RipwLwZ9ayoO+joR$|gh!^)43rpNz#cS!xF)NKCU&YwhH zKg@Z!2DGlpT3v2V<-Jy=NbtDm8$QcBt%{velZEy5K$6Z4J)4FauPYPyZbIL&Y_@`03$yUuL~M z&#AoMs$?nk?t)yN%#Pwc+|H9s)WYNL{CHX@Zg=v^jXgg$T;Fkbp}p8S=&;ABnb%`A zCWV8{2Q9BJhn9@&`}e#%q+V%iR$o)`zedhZ>|9~HBy_FJ4(M8$Jv%?|0&NOsvx7Vk(M2yHQNyKo_K)y&r2a z>2tQo`|siw1y4?#JQO@hB|AkgW(W8XqLhph(AAnxt{)0+KC(9Z$>F%ibr!`txLt)z zwbb)sb`+{l!k=&autk9r+Ml`)?@#T#->N7nHQBbD ze~-ndTJvhysboUN7r~o@_JA%6Gp{dy=&|S3#}5xb6nDt{+$XLKpA#(y z&xwML3~=TFZ*M!@X%E>2_EF?Bct7_(f5XWsnJM?)@V$I^>Z6{C=OxI2AYb)#JTF&( zZaV|-F1K5C{qSsN`Lgz!``uGjz)MYLYERz{o!6VJz8-SG_vgKb z-jkM11a179`aCvc($b4RpB|L=zgM2<+1F;h<%GQYy_k20CjOXlhu<8u$m{QnJD#7w zXOBHQ^;~a@x5J(&Y2D}syrvBa?@YX!}-jffXOMwPn6tBPsUSJmgtN64Jv?^pz^!>x~ z?2r|y-)|kB3ffkz+cFJQJDhH{2Oae_S%$a#259MHj82Q3N?d6_XzJn2V?B|RS61xV z@$vNB{ksiRqLV)*zQ0=e<7t7oo#&MsbAA;3tF(#HZ4m??bAia7pswxw(7k-#L z%U2YMtM8jwKY#Oi&-bxE>UzIq<#5mC-+j62hu#{6pC)${Q~Y8qs=MmMyHYYBV?v;E zZMk9P=SPRvU;lEa)nCYDTeoZh-(ofHb*~BB z+tz;j{Uyz!=OyCD;)UidF|6mp`1W)BCr0MopdH z{qxU1o_`-aXF;IJqw|G@kEU<#ZwGld^UD0{r^kA&kM9Oep#QQ}*O&WKw3~bWlI)!S z^N!fN-!Jd~Q1B!}@fqk8BV*8N2S^>l&Ogtl@@}hYrD@#1ACE!1B|elIR-O9<-rlLs zy-@`|sGtWQdi>63>S0sfyT|fl;(9~da(F{fuN>C!+Hdpjkorui+2Zow^0v3zb8lol zd99=7hU}-qGY`i?*Myy!dpZ_0;(AlI>cP2*?`5H_nf)<8q1DwlDeosIUxLovsMrZA z;rl^rzmq^4vQAHYAKasIQwp@rqBq9!KBC)mAJpy9_Xo|6y$2oPGJ{|KU#%@?{F4*k zHJ7c|IKOzJ<;VM%ZO@;Ish@xP^giyl>jm#GyIB9vivM55r#;->MkaCl)1RNWkAL&~ ztmL~xAGK}1SN-W~uZ``UT^q|=o~U}h)@0Lt<>H^Q?)pI_}Ti)^PCQ z0L8`iKMFQXIHmk?jw)z5r113J6I4SN7d$>S8N54c{;>yVC)l~v z{@sVA!Dk=^nQ(=Jdh@%$$4vaI`1I`PbG;ph#X(0r?ELsJPw}k#qoU96`JUT=@5RJ+ zh*R92cZakqL7S;RKRf(=((9k92ao^d0*z#2-|=zuwcZ}krd{yLqW2$mIhVAXgSL8N zKT=A3{q7H-ozeF9_Wb;?_waMRld}6jtB|lCC>6KoU6b{jRUb2JK(q7J?Qi*R%9epf z`_%o)6}>mPJp{*F`9kkq#~y(8vd5J_oVo|P^tQVFG2c;HKO$7W;j8nSy?K4t{cRJ9 zr^xWei>oG7ZgzCim4=Fh+Wxwy{a!`{PP zlU7W$0B!m>9lK)Es*5{7+d_}W&H$gTcUr&x&)rttn^Ns}AC|U%DtJ)cZtk_n?a`5$ z#^QSA3%ypkftLI8%atd3Ej#w;sQ&&xAIrtJrDV&LwV#)Lb-3}p>^_Z7%q?2rg9y6C z_y75H{C+HGP2mmMZPr`bneSV_AyRpt^%s!xIRup#u-C7OD*EtsA?U#3_SQ+Dc#H#G zd|WJE6RU$BkL7kX^B36&`3ExT_wBhUo3#gZ-=zr~|GYP**AAR^S{e8$OXZ)%=VynW z>s3sBdl7O9(@Q-c&ubAeKc1eF-@bc;YV6|;)}R}V_myXWl;1H~St9u_mJo->?&!iO}LHjX4JI~x7@hKNPKG7_Ee)j}b zZ_tiY`@B8xouKC0{l=h`iBT(_PTUf|7@VUYRf=y)$pmL( z>pc(kN<6Pf%&FM4d`08?;42!LQk~YI4$Qq)tw^a}^XlIFhrx##tl7BZ!|AE^dF6@T z%Z??kUupZN=)rlX+`vtyLZEeMI|}x2haw%)@@Vf1@EzMf_KDkq4iD&u9AOk*Dc1`+ zJ|b?;yF=Qb-Hf1RHroS^D}S7$3_1rwEjZ2xMB_}+svpP$$K{Ajm9{Ccg7 znmHApA3io!;V!imdjFm4&JEe5q;ij!dY~h(O~iIP$KCldA9P4ba>4V=jUPd~@D*#M z<{vwJJL%!$`Q_YSOWWW4t!qAdVj{EpymCeFHqefK?%jtszjvBmBXxNF4V#}IK7~M2 zC}{MOpZjaI%D=ronCfLJi;GSch;LHK5&^ABeOw6M5dN>?Q(F0n^RX4Gj*mf0??9(5 z)TzWh<%3-Hqqn2kJ~Z3%N6%)9Pp3QWxpmV)2fFR}C&OgkSH94D5_ki;eqQ;*sXV>? z>iKasKek>trTnw57qlzv@H+v}c?U}ZK___izK(q{X_?`U&nfLYK-A-Qe_*3+( zA9{}2Y9H9iNuE;O#`|M_JgyQ4t)?k!|Mua*f$w~}pdGN&jq9ODTfCbf533M%R)Z^q zJh7MtM_O3;r-{YDysA@y14V-pR_#t^Cj?|=%1{6kXjI%FI-dp zIJ1=1?hW7PhesajrFdS^m{+~Y`U});$q^Pde?On=J|0`~w`<))zRe$>oqM-Ij{9w` zie1+I1K^3t_fDuysE3yFpeejP-0MMWeQwHLdvf@+({H)X{u%n9(?r!lBNfLMLvKQj zeKBdxL;t$u)ba}XIGJ}%)?ZeB{P^gs{_ex!x?BF<_>z}bK11I9-kcwIT62msMS2f{ zR?L+z^p5LI{P_4JzrJ7j!>=Nqj~^ery}sh-kLOpN&hNAP5t(!zv?S@xYUk>AP7_&r zPl0!hy+1TTr1#`haq~LR5y_iOK<66;Pix=a8rK9mAf?`-@WGjndLo{eR?OL1`0(6U zJs!`?Gw#%{Yh-udSH1$Y;|UbopcA)GUi_eS9DHzHd7|f}W2a|AyZD9e-wK`|XjZ;& zy+tKb3M~3*C%C5zSs$+RMNVbjZt#F2sH+59s#7Z7_T(yf=ZpUQ-4E_Y^&fk7p#5&5 zP0f1)@Ck);c7S_Un0>l;AMDB>PG$j}Xt;d-^TRit=I@^`Yny+y!@iz>`TXZk{yZ0W z9lK(`ifiw=_T%R*KYX$NvU@{aZ_>km-|wi`*ByQK_x1HE@xJ?q*MIn%vW6ct5*YPD z+k2ARL-01G@`c{Bjy*UxnO%Qg`NOF?z5Vg`{(O9xyKsO1k+<>X8DRDIT6H|7T8+c? zz^5ZX4no{haj!M}5#PTYgL=?`dOz%re)q6BDsBPV!16lw#H3|`JHVGS#lD!d6m;;T zy#BrNhf_g4Zm{xuiS|O}H$eMTk+yNZ;rqIiJ5~sEWcr+n!hPK9VLQ$4I@$LhS#1N( zL7=k^K7k79+H=2d+}F{3saN88O``57=>Dg_rQ&fXSA(XG>$#QL=fCZ4owyiv2WlMX zRLlFIL;E)V*s#9n{$cs{-QX=@zjoThSQKnE@S0-M3qKf4r}vmX=%&|w+`*4_t`6TR z52`4)7-UUTfu4){-f6l|FZjmRAG^8NgVwv=s4kVWtGR#no5!Bnx~Sa=$f+{H$sZn_ ze0PEQzV#Q4n^K+p&+Yf0KiqmacEzL>7cB~5TY)!%#vknEAeBnF1SrgOdIak|Iixz3 z)BR$0Anj*|HJ0}Ld|WJkN6}8IeebKE1!?zP-)ANMu(N7eFtM&T`D2~@-5r1C9Ex2r zY01SM#s4ksK?lRV{QgDz-S?ZFwe$bV{`<1MwQ&FCJgMXFA5MDx@Zi4td+M8$)@X1- zY{WR319VO8kH_Eja!xKUtoZ-OuI7g9p}mKtRUMTJpPcFBe!e?E)pc><({sI$qmPn5 zKAA55+b(-gd7`&n@8NeJY-=q3*nrx9#8_}c_8Vvu@?GmUsP1`p!3e&;x!Za__zb;m zDVZ|gNy!eoXx(wAH5@!aS^4Qfp|?dsN>o0nvYKrT`d-<6WdQwO?H z`+IDKs{7&HSLH$5GqxBUSN?cMx!~D}R^jWrC#d=^E&%OnfV%DUWc#>1?+caMieClA;>fGADxgM)O(S{e+DOn+LcYZuR z_gjzW4&aKcAL}+j(BQ5%Xiiat;3b%QYO0OqKHeKqo*Ji^CTzSBbYR$@G!4 zzkXn{vOf1}HRwvYxW~WmAm+&KwW_|9f(+bz2Mye0fO7Q>*?kF#TUEe2b5UnKq9SZP zY|{Jx6oFP1><&fqsI@G*AP<`PMbxkydWLhpx*qe|P6SY~^O%&%NC9pIinX_MB6G<2#=&yga>U}wa@gX^ z{eQrhB;?$yxgpzUJ*T=|7|k(%KhJJHe|EOAJoozdRr{Y`JOR3~^3+ez5#x{@L!Uus zOIQ4S3>x<+fA~kpzPIW$_&Tnd`HNIMFP?}2ZM6X1{;>KYXh!>;fIN3TuaJKrWZB+M z@HTSuJewV#_i#IJGEuAFQ}OxqbG?e~mlkid{E+B>RnAZB9%38$Ztym8(46l6a_}a$ zdAr%|-k3i7o%c~27=k#0E|H2E%ZW{3MMAOwl&IX<9c>HixMe&2f?*!f- zKkPMW0d(0`EPOBN@7Rb*3qO8((l4H0_x{kt9fyB^cy{33hr(UuKNf)x+O;f%oEN*p zoAb`!&!?Ji$Ih6vZezs&`(fE%pNm07)s_!e2@fRa@t(gc z#|J9dQXXb|2ALX}gO;i9;r88RVpR`Xrv6*x?&>-77J-^wMbApaL3Q=Ip$W*r2f&b`rq`>pkaVf2e@fzcY~66DuoYudmut{Nxy@ ze_D=Mp!og}=zORjO!|F)igt0&haQnPt$lWDY}1l#7tju%XQkp@Pp(4O{lylv|IP3z zYX?oNRJYGkiBv8I4ZdyP4d3|;I*4Z5vD58)!__}Ls}S!~`78And;-!su`=&T%O+NW zPV{`g`+`c`*7I9_SAy2GeAld+P|+o~v*6LGnYUv#CM^uCEP8wtHnZ~ZYjMSor?8oo z4a=qY?|)BX@x0t|$MWNoGq3eTPOc98`S{puYtTt}hFLy-dv<_sUa6V1Y-8nzM1Mp1 zI59uIN%w>2fG)A0Z46SSnFZRGTJ*e3ylqLgkKCS$Pp4n&)l3Rc{(QXM*0u77ooiwH zp9~k!d^jjNRI)?#KnIRMl$W)GE*JxOem&?y81S7V;gNFCouBUxO-kvV&Rri<2|3pK z_Tg^kdYQ^-i?gy>;JpXWPCeBFZ~Ox7Jy_p*x%tT2>L-WelB<#CEq500hHq(o`W`%2 z@^i!YRn=V|Kh$;!sst(*JvuVg`1|ev74Y_A{qleBAR9&RCc4yF-fi^{GBFFcyHhuh zzyJQBs+whABmd0@U0(;8UAeZR=7wzA6Ij2d^5cW)&tre6cqe~;b~rA$u>EU9g%^Bv zJVqINZ?;rLA!x!Cx?L=B{m0sOh;8!V!;+^<*Wao9yo1~Q(N2*6_sjgO^VtTOr#Sq* z;Aw$4{2&U@0c-CrD1(nzfK3_yDSG}MG7EpBdaHb$C1|$F)J)y(jpp&gXAeOq;X%7; z^h7{s#C$FQZ8D6NfNU~6slR^r2hj1+^73Ube}35b!KYsDuZ`41X3$Zgcj21=>-o;d zN=#Z{X!+^U5q-$zLeEaM-#-8P;qSn`&?P5N&)knKX#bHBat?Il?fqEru?jCA9&L<& z2fiultp0B2Z9nX4>=)ew&ABa10i6+1Eq-UAt<+Rz(18BkR>hZ6lht=S*F)0pr5kg8 z7X18K{iE*dfA~^@?|M59SD0v}=Rv)Fv7r6uherqWzk{#Gcy_XVZ`E1vby$`4SkL6- zl^1(JB`^56@W)RN-#@ST=~<0<-;vdNkQ)JNyCy-FqR5BeD_;njCq8nZS=oQzdskke z_pZH=lPUDzCsX{^tC*?@%AgjXPe0YGnFKx!YyC!B8{HN$6>nwGaLu_r@0}*f@Rpwd zTL5Xq*p~ChSQKp)r~)la0k5}x58hy-&ySeKefqGUIlm8luAvR++^rLbog_flZ|Q^X zRIL@C1?tz=g36kYdODt$K=WvG%|T}<#eJ>$k!t_Gy29J2!itOl1VeY1vbYCt4OiJohdDbY0aF z@T~c6=jwNdCaLs-M}LYz2dO=NSo`DY0eN>ju|u!ycOU*<@MQM~RnJQ&{%o>-)2{t|_XED=pqrO| zJU#hb??>g`&l!7Uemp)m`*^H{kUanIhy91oD;EE;yxV_rF6g9)XP~1Wc7t{y{+}Zc zI+|@4Xg_D%x<4PEoP8f_A#}c0?jGpm>l5Ga+JI^%@W2LWI=|M$iXF5PV?Q@&F0k&V z?5)GIcel={js0S&@eH)8|6AzBqr1UNJ;A#`u(by@yViHvMs%opEOL8tq|-QkUHL+f zS#F@-UirN8M2~65Qv5?fr&a45c@^5{u3QWn6+^itYJ&>sk~Prk&3A_;?%D5F{o^tC z04tO78U4`B*yZre*m7b?{6gn%qLy>nF^$lv;G$IsdymbJy z?6+z;F#B<=#iTVKKRtW@JmVqv99^6EDLK9E{LAOhKlk(b97rWHSK9yGp7)0)?2-EX zd=lv3^QU?;o|h|rZl6>1#$C|EhWR}TbS*qNA25NuYgw4*6sXoe4b$&7U!|=w|Rd^{o_1k(DhLA`{qCMnB;$0 zcHRNd;ll5nCad&fq28JG?;5$&*VTxp zfwq3i_s@5KauVDyzhU$9!?Wr8cR!e2TJ=iQqUcGx{J!%WCZ%Mg#DUIVDh3rMFaB(_ zUUOpd<=BWxYc}ru@bH}e``r)tZXW{ekbDffU0@OqZ@C5NB7iyXohFy?mRB(I>%F-j z+*SuZ?>Mfe;`8rfp7Mv2f9&ypaAcyjy^YS2$)MFR&knV}KJUK^dP3D5@VcD|n~ps@ z)GodM&ig~^g(t7e7CksI5#;UJDzS%Uy+E1y`EKwTHO~*uzPqq(_XEDQ**S7G6`QTU z?EX+Ev|oPTfw{{3brq2w@t_q+68xZThWEkuJ(=%5{N@c`^?lZI3rEncF|*_C#ESa% z$=B7ZKX149vtNE-=Hpn6N$#M|>s0IQ@WRJ@{_X;m^~X-j*W0J(2QuB?t`Ybt!)A^} z;nOpJVM}(NoqMjwb8@xe&FGNx5lZ%dB2JisR)QY_%?_1AcU_1>);)oaB(Hz7dDTa~ z8lm~F+@R$t?cJ?+CN0TI0WB^A72ql0UDi)e&TqYAoBBEPYr8yXHx{g0cW3A49o*2v zk3KznulHk1)rE?m5Bv8X<(Q-UL{QcB@k7v-p?BpAJ)lQ^+=G@8;`ML%l<%}EcS`Bo z|Ji7L=D>Hp%jTzkn#`MjA9Nnkz4C+Rr^G>9Iri-MypwzXGvQ63waV7{apey^wjKLj zeCE%_qoO+^PiT9!9sB%Q*y8UTqx5^_3;#^IWU7^)XMg>`+~2VhpnIouKR-G&85@*a3Qll{M^nk?W&St-5Kt?TXGx#J(~{^06)3FM?hpptI?l9b+4tARVwlY?KM!;+>`#+#=Z!x+JfUx2 z{&4b=_{A)sGkOmncG8428ESTXsurL15;jxb(YVLwOfNb;Jp4j z<>Tgnk8TYzjm!J9(R=%W(@vRzn@r{GK&R+}T9BVn3zI9L!sNXwXl>!VPrWfeP|7ZN zPJcB0{_Y2tf7v|cfTlVlNUEzScv>kwDX?Y{cfkB1LC&4kQU)a5}+)5yie&p#IP+gQR5#?|}tX&?8#$oBagnbOPJC4W5p z&7%!kv48g62IFwOa`5qTN1M(4>)tn6&snh1^7F$(`k+hO{;a#(DDH0ehA)3ZK-r{} z-ZOLWKD_KWUMq~GPfBwY0KjaD9 zG6+g|awb;gW$lGGWYhM6j=eL>FKZ9|@w80buG4$pyA90l=l*>7s}oml;iz2v@X%~+ zPzNsm0^~B)uX;KsuidEm@!|Np4@Y-@@QnHNS;w&W$szvx*5H%r^1o@%KQr}oENEZi z&d(1HPJSNyVRP_>8!|r&o=xA~`pW;_#r>aG{KS?C<9biZub-d%;Os{|nUjk@7Cq|! zd|tI+V}SRRkluET1&6JQm8NRDoxk?@KWKk1n>EQsYNoLGIq>y$;N#$63nOQX%isI+ zX(#vmBeGEs`tK^*{wdfL5Dh;L?j5*c3r?m{D{Q@NO21F}`4Dt`AY|MJe0<<;1C{m1 zp7hs-seXF)Tu%nnn*DJ6UJ}c`e8WXcvTbZEV7=mpe5M7D+pU-HHc*L7E`lA=>-_jB z$Ybdbk{8~q*A_6515L9(s}b*7k`V$r9rt;$c+KP~3k)qkKRP@6{UMu4{*V9eWczm` zdhLhLJYui9Caw5b@C=p{KxalBn~1QY+x-3R0?_bC*@OPSEwVrK-e_1#@z=lMQ!jW{ zA>Oqld&lA3H|_5xJvjGKkH_=cj5{}f+qas(-~Hfa@U;*7FW$L%JEZyD|_CFOn6l*bQ#mAzD@1Gw(BwZ1) zA|KT1fYcAaAp;48zb(_jr9@8e&*GDNc5JY|QXt-^lD+57P1&e|iw7<`{avJzX%l1d z@!1(ryO&>Tsxjzf4ZRxYPnkOogJxdAp?tMs=gxvJe?NRWJim2Xt^PLf&{n%PdUG}T z^Mk{a^pWlgl4!x`U1uvxlyE1YKuZ{?KFAvD0(y%i6_$+*{~+@=`@b@uR~t@9z#!ncrr8 z29yqC-W{3{(tGmWDtEa*A8NbjsdzuWAN&t=S@YEUyDzBBZ(AP254x1&UaM-R)NE^c zxj&zFanC;z+;>3V{of7QvMm?fh)Au~=MTuc@89(K@OR0yNjbfL?7ja*{keMR%eLY> zt!k0~Go$7lj_==Jb$cr0a;3R{Pu&HrCg1b^b@;ji?ROt?|M^hcHdQ5B`SZg=^8epm zaNfb~D+D@+^A6}v0Y{N!VBnPh+c zK)dyR8=Wt2sz3gyogm*g=f}e{FZDz`L7joZr{~`4!N$YS{??N@d9mW>)BgSQy?^}V z6|3r;wBqB3!=Sx!=tI^i#u09WbQx&vnX&e3E>_mS1 zKT$7qJ?(n`JXdGYliB&HSRAyF{hZB?4^Ofde%JWuzy03_(9ve^LDL6|Kb`Ki|JGx8 zuT`G(~li)zkFV|_*oIC1PHlzr|unO!U1xC9<;6_i4te|@D={fN`P1=t1x(Av?ojh9mA&u=XFWm$U8=AF~ToZer> ze0P34JogtIFMBFJJ_PlT_b&l=;@_;jci_9^J&l`E?*fd~_2%q^4kYb%<_6ESoRpeu zz1!J;kLCSVWlbr4^M5y@>)siF<}D?`{XlT?bN!SN^6pMW!E?~4ZpMzo=l1N_Y&{3m zEXvr?{OrWV?}wkXPj8(#`N`E2e+qwEx~}_kr&Y}py21D^G%e198em-oU z+!}~&KSXZg6^)PnyMKK+-D&@=NA(W)2x0lWIXjB?aXSZrH+z83K?jA&pN-aA4jexO zT3u%IXQTBMq^5PN_4VBbD!$1@|965)mn{ZWlXM{GHT=2Ps`k^wCY9U9;?tAodODuq zv8{*GU&sDXd1t^>-e>dUVRbuvo7MjEg`Rf2^OY==Z6Q=zsLSi$$RgA&zhz0&xgZz4_SB`nHYgC z@%glq+xJuEm-)$04$f4EAJIM+T;f-pG6%OQ|3pfxx3&R~jQ48y@4f)44}(BEI-l>} z0O}eQff{RmI;ebEchp{~et( zGPU+UgsbX)JUt@+eExCJ%p&-BMdWepXQkqOPcruW`E>l=qL%sTTMWFX*hulK`^8uk z?*;GuE=No?Rj-!%`Lx}hdvnz(Q4=Hk7>mNEHRAAnz?Gm&P;=~Rex%O7+6Qv%DKXHx z4gUM*7pZz)2AxI++V^2{a`nZZ$>kP}>i4(52z>PI@53XYIU>kF&q2^xi-`Wr=BmTs z>iW}R`RdhzKlUB%n6&I;0jP_A9`$L@wuRP#WhMrJW1Rgz@x2IyW^_d#+JBh5l)2(+m zFQ1?P;5SeHl#)Y+A?|Y~x<9V&3^7C=A zeFx^Z{yZ8#Y4fqet-|FXmrdLw_4WBA&;liRU6NG30;JvhU3acu< zp4YS~2Op_)3Uur}?3xqt{eSMZzMp>NNA{Eh{O*2#3N~)=LhCl^?>_wb!;_T6s~UwT ze-%7E(hKVbJp`?MdDpbuCouWbVbHn4iT1c<##*t&9S`K zs#IwL+L8sH+PGw@_WMuulau`V+^f}3UOQ0(S{=E6_XADu3om3UKO9C3V4MQ?IPN5} z$jMZGI{cka8M3i7e%+tDtmP{l7Z*P{$nWo0o(LMoKGY7nGx?BuVY_6-hWC?i{d}02 z=zCv77c|-mPup=e6`!9Ji`Ojv0`AeA)xY2R)ALV$Ve5R*?bGt_#IAXPdc~VJThBQ# z^>J**q&1-C+PQZh+F&=>w#MHpfB5}h{D*ngpxZa+&wsr4u-~MGpcA;xPCXx+v0sI~ z_uNGG^m%vQANr-Lnvv62v*W|>&nLM{n4J*DE+JI!#=u|xLd3q2;efsQjS&nt&b;pf|xKlF&}oo@dvGB@9p$(_5} z<>caz1)v$S?XVd#(BvSb+jRG#%e_B$T9rMe^wa;{NH=B<=dS+cR@r^*@Lb{ibN2N= z!Hbvg?D+WL-*bsWu@aNk81DT1%aRS;uF2`0&R_rLlJeEhYO^`4kt_oT%iK~0)-_QwmvyHv75 z>UI=90?&b6obhIFHE72e_i}aES*gGEAhpx^A1w1^-XEG|1KP=Z?oSb@_g&o&I@_+U zBEmu$a@d}ExLx@|&$!-m^1Ge6z+)tpCT8k(bACQ861VHLK69YAcD{|gz5VjvJjR}K zy=P{gKEJd0?@q|A?8VOx&V7FVtKJ#V^^)fDc7Oied3WfKO5HQAJ(iyyw%c>3?{w~$ znrSUA2OiV|-Doe)Z}*1J7;+({HDpZS-3G`3wjU24K6LY40qETRcOTf+&3WfEIR$h^ zeEz(ecc5L{?>@NN#r%9)CvMm2|C%LErtAAQVboK)1 z@`>o=|9?{KVt#gPdi1AKcnB-+h?x z4d3$nt^SWB_Z^t6T>pme{olVIR8KC3>=Fg-AkhaOx%c@`G2dUkHSt2t$Nv312_8h| z61xX#uBKanGw2J3k)3w~0kg?4FQn@Z*O^ zLFcc6Q^YCx-Oilg7IvkHTJ?J=OVHIGrtlL{%b`bt^ZSGD^sSMyTPyYR!(sj9yFYlI zT7Qu#yzkDBhj|ZkL2WmG&}Q>}+`gZ(b~uCEtj7=CUVLQvb@_91cA)J4E(R^Z{V>HA zdeQWxMIVbmvj-eDx_gwpwjDdHum10btQ%y9F;ba_GO3W9Z^?ZB{Gs`Kicd-L=lj)I z{GanXR%8E?G|-r3IcN^#hpH}UShV89zn$&7A4sRB^iDUgx7RK#`m&i;E5p6&DY=+ z5f@k3KR?sUUH%SMN}5ATN#1gePWx{@>IEA=%+tt};s>9MzmwY)6fC@;_4A-9l5Ef& zkrtnxm4L@dVtyn~uVKEwz2fdd_TF}5^*re2@u~J@?SeatcY-%qm&fh7DVw$f)XBP& znELNV?7jnc5B+vMd7%On$urM`c8?#HEqith(xdo4t9~BnM#{6F^<++7tN8i%^Yq2< z+o#L_)2X@n{Sgmn9aG(oBG_z0Ol8q-@W7zI-JTy$YsKwO{xtP^FddX0wIhCbfz~C# zrVijI6#mGX(i6Yf4z%~-%x};-ffav>9{1Zm25l%^bnFSZs(XKEqDb#_?fN%-x*zsB zcTZaQ5!?@+51lf)`_SdxpF7}XbbCYlV}3qNd-&S(lBp5sY>7|1z6@Xj~><57baTFSw%+)GXn??=fj9=(daL+Ms%2--?Uiya4J2xF#1rJ=_~F2byWw zlJ?;2K7YRl?eEhKC#z(qyo;%;V-D{t2cIc-sM*}#4tyW>-_PPd3Z8*GSbAHT^80Fj zJiLBr`=lqAPt>ndEO>YVF}8GW@^?^oi48Q*$zNA_x7GjA-tr$mPs;2Bb!E0sPRRxp z2C3y95B1=C&fkJ>rQ35uw&=n1$FVYj1lxhd=QpdB<;y96}BeQ4_U*bGn&WBTF2 z*~$BNKj72N%6V5)@d4bw`fhw5I+^q1o(gEms1ayuEw~H!&cGNHWOqS3Qr~T0lJEOd zw2yoKk?MNTmF92wtRsGa+bF`~dNGyvTh%P3Ky8$BHb3=hyo*fkJmjsh_;lK?TXxfX z*Lw9Q?e>24dWzt|#3vU)r$xb*=i5|#d~)_RY$RoGD5w4L1jQ*Dol^Yvb1VwMCpjCZ6^N~X8P$gf4!K~*D3y>bBsS6o_ZP5+WYX})MU^`)O8y{hxUM%liXPdYEM0F ze=j@BdI{#p-+k*Z8inouK0G)w*?2uP_1GrEr(wn8AT=4ZvX*FkAKjx-X?kZN3v{*- zX?+po$k`9izU#@HT>g;H^waTsNo@P_4Qm(gaen;p?91o+1`N->ltt;I7k;MJX9Jdn`YmephfPR%6n-z@Hne_sj&ZKaGA|-Yy5)V+R^` zc`2p;e_B%CK6xYi7~LatRD3~a&Ck{b4?Oh#D+ZVOka3Ebp9PPnACLW^GH(~?4BQWg zzw3HUssZ)o#QS1??gSq~5iVy_`Dv3t_LLo^wLc0TO*gJDKN#G%BJk(KW1ZH|cN?g< zf)5fl|Gv9G1w5esJ16QvuHrTgODX>SbABY3&v>W@I?n7*!Q&%yKSQ>6SARb-S6)sm z$sclBFSxHTDSYwgczGBuJfYoBye zHVQH>n=W^!^3xvfcNdyLH(Ltt2c6sTG4t(#US<8dA9Z5Zprt-NXIlBeotHB!F7DiH zz2@v>P=jEusad(*o}03MpgjKmkuazzeD~p=|7Xw`_?(-v`@rRh(DYC0n*^CaVT?|<=zoHG9G)L*?V@j=aQ&q3!#-zz^T8+GBv zoSz@k%3u5iP0oH7uh?webAbPTtG;I&=&B6<-G})gBco@az1?MP)^iTDEAOA9V{`NS zqE>Z#@OiZFV>KrEFaB2pzTpQpEReUS@?NX*O)35Te>SG;JbZ2*QQdDN^h z@8Wh3GKpLFXXAFM#@(&yE})tgbYdT96$t2@mUk0y49c!edyx8Y=Dt9`ixoSHK(|N4 zYD`)i__N^mPhQBf5mPnuxILAhcXGRb%G_gL-)P@wzy848Lz}_*@Mn3uBvU$cy80;i zu$ja^lV+HzmB-oJH-A50dB0WJQtJJA)epz(4)N89mrarBZMO$47cJhy?Rv@d&O+I; z_IWpD-S%_8+pz7}lf&;eFz25GPg$RCxBnJ)T=raTx3H?`)u*>@k7293<}mj5vN z|87H*>uK#a$W+$zub+iMXO}#m{$$0+qUZg4k4jfWSKRyI?RBAINAaVBGtWa>Tfd55 z->KMO-BT-mC$W^b++yb4hiCWfyxXcQDYf7F&4!-)a>$0C(%P#N>^&u8KH zP7`gUrb>fu6Tj1{cvEU}e4PFA1G9g}T7cFqzYkv~Q)@3%_hajXqDeJUKc9o@R9M9U zy4~w}Ecn{Pr-$YD+fOeLx9eQ4(yr6#{W3ov9(Q`>Imr}qeExoJ_+1{=;?tg7{*c*wqFufYv`X~RWhwAA&>w2MCnBfB z^=;N?4m8WpoAVB|m=!YU3Tj2@{yTp~R>gADp#YJ)LMlv01X$kGd%hJj7cu=+_+x$i z%^RUha*b?-=gs)KMB?9vWed+7I-#g|UTMdpF6nC-FM1?6Yu7cgud8?@$J;HanppAR z?;Rn#h(!;L4*9HY5jEzweaIg!bt*}&ZIXaZ!O^yv?K2lGG+v}4!f*58kZ`n#j++_h zvqa8&J03NgO6e)z@k*BSDL5utZz0F6-NPev=CI$6q=RP;PXyca?BOMc&wi5rYc6h( zkW}H3zIWd8Ay}Kqn-=kN6_4Nl?5^I(t?cEr;o+|sw!HIK7cJaBahivQn9YWVo#iGv zZhD;07N+mnnDoriRBA^1!Sgnp;d3@V;y=FE;>=+Yp(gEhJ07>Wn;7tGPfU>W`Ea0Z zX8YVljg=N&hc+ZWd#F~k!R>Hri~DP}Jq5?4_g7kYW@v0TSfs)tz3zNu!C_^oU(!E? zIFCy5>r^E5wtaQ;QcARV+{Tmng8eE4)L`HMV^&uzP2( zdGf({lMpwq&NkNaI~yL!@iq&p8h$*$?VnTOdN}RL1dAV!Ucc+CHWccsHZ)RhJ<_hN zw2aVx)B&EmxU6X$ry{CU{DbGmWj!p6-P--f7u zeAvisrt`y%S=-B7Me5v+1knop0T2bqq9xanBO?@sHGH}a_f;JP2%frY;ZlCmNGd(PAB=-H zmE9gy{}a-S*pSfOcIt%M#ScgS?o?T0;eI&5#nXU4^ur-h>1!D`dL%fXE#%xcqiu4* za!0?klnDuPRfky9bs`omG+Lxm_xZ#9Sp~;MwYOy?$fc-CI+xBO?=n)a>l9t=?xRafCYpUCht8Wi; zi|^U^K$v&xMDM0(P0sQ;8z1RIf>u=j&W6O^wzDTx3O^hY{~Yn9#hiC*x*K07fBYGn zEBxGg7Xu_$sz}Y-@winq+Jwi=tg~~c@2rnU?;H~|UfC+BsJP={mvvsm;)TXWo*Ho# z4|>(@E^d(6sZz0}>X>x>j|W1$(*@ItRPGcUldZRScT}T?N2p1CUB$yTf0GhWj&&54 z`*B!!dPYPK2j^kY{5u~G+JZ`oS2I5xx;fY7L%TL_shFD;=RxM{&u0}J7UG>NsJigH z?!!i2|2>NvMVG1zwXx>s{CFVC`@L7={DP_TmOtpx{w(U*q>+Y=$SHoLknwq%*XcLwyf5PzD<=DoZ&h<61&^Z zolsl&Bk9>gHJie|wxb=B49fka-#?%9;h-hRfv4tfc+{i*Z=UMKfbv9@$pSG2N1LSA zUA!P^DAZ*xci!}2r>c~gvfH5#$E4%W*ldyEoi6z9yXOsq&lh-&`K7i$6mgrv^4UNb z6k)1TR?1#Yl@Xl$b3Psc>6+T|u+!Y^j7>xr+q1-CX}!+{tm$ih6xXl39FU)wGGW5= zIR&-y8e80G@u6m(rj(en)1eIy|L!rei&*^7$S5vJHOJy{_e}Qg+Z(u) zE5)6rrUgIe{7cXY@v!! zlW4e2!C`GFD`hvQkH^k5bIjY}#{Bt0Z_C5pne4tl5<1&XbMUG^>;>gXiO#k%F6Egm z2}ecw?`&{o{%j!3d9;gNuHum>Z#O9BBbv;^YCsYRf4XNE9F^4m_hG@p*k_6ALQSH^ z{OXU}yiH2ndRiX!&TOCk;fN4#x1e%j#p7Q6XRjt|UcQi?_T=s>yZz7i6jn}aVf8k- zVjk4%Qk}my;Ga^15YU6#Maib?j==sjH8pH2d>NXiKtc{aY zX0%T$I4H_}En`Iwj}Wi^osY-PI8V=z=m`-L){eVj@Ogm{@9c?Qj~?{tFZ-w>^SNL~ z`$P`|{>@3x4vKKgT?~*k1XtXT`L(ZQNc8Xs3G46qa12z5-{=VuV%Od`<95Z&c4=O7 z;~>wP9gmyX#mc=krL>f1x*Tq@4qJ2H()DnH%H$b49<;Jbue-QG(opF6%*SeTCAt57 zSmqeX9~CIn#J=u^!S|pblM**AlnDAAX?!o@!$D9};?J3>8xo%_EdBG)v03lgLUo}g z<8=`RpBI4g($tou!_4_-YhHj@rW2GjVrL zck$Gat4KI}=CB8}@VZy=u-TmV^IGYh8j6y4}!+3hIeo4#l0&QH~Vhe%XY3p zHaT4Axvg31!`FIqZ)cp;^~^{(7o9cv$n$f)1%>NVBW7%u=FOKYnx`_WdQIo=&;K_3 z%3ZhF<#5G$M_rX?yTvmfJ-t@CVW<1`j2rn+OoWct{%Y5kJ8!+WI&*H@&ighZ-YRzG z)7wseHq^;`Yc92_|IS5Elld#v*vrfPxmQQ$_qIJ$HrDL?S)(79_uHuMe7i}RNsj!_ zTZ)DAs*hc_<=_5r$@hq!3Y|XnrzS%Awkt|={ybZFx9@0emy2`l_iQntv$p4tz5l6D znpoODXHnu0kLk{bo+o};S+V!|@vxkC@$=Z~!mj2|vUsQ4_P+X$v2pd~&s}Y^YoGi! z>O3ENyS>uxP0vwV*F_8W%{<`9G?!xgAcj-7wjs zqxyT(>(8fl>|B4$XOr9$EtM;OYbE*1WoKMX@HoT#`rxVVmc2Xow{72j^4Rg*ON$S_ zUoW%x;HA%RE%slv)BUsabMNhhqwXPkoR!AWR_lH|_;$xcYFGaiBaao;b2{69KkKR8 zb3Jl#;!lsuZinWTAHKbJOY%Rif0;Y%l+GNkdVNq<^Whug@U-LeXRq%3bz*k=s?L@j z*Z&lhexFtNSpA64Cb=70DpzW+ANY5FV))U|wr2C)4u6`sNsP02cF3N)zcs#9X59a` z=;1GqOq(e6ovHqF=KCL?|GTEM?d!GXdCMjWd|$yGKL6!j^SpPH{Y^^J+GbX7FI%$j z;{$!4qo03fnXLJ)^RB(c_I}&<**n7wS0A*!c;Mr~r*)g%X<}e%M)CxwFwV zOF|VD-zm#p|K9UT)cpIOFq1Fkt6wWFd>_`|b3D4R>d@u2lNLR+l`oP~IrI1BvEP+7 zKPnE-k>@ot*6yo3^z8dHEA^N=>D<$pk~vYOEGLJlp)$^U;oc(VF|Y zYtBqo{jNKi&G`MbpQ1u**za!W->xIPzcM1(-8uEFl*+AYx2t`-cdtmC&u)2nQDZp! z?ggOEGckE`H_kEhD%pSw_lYZ6SJ9)Qy(LuBG?7Av;-z9~`zspK)*7_#K zyQcfHhsnIF?3=aB4!_EK>vp(8IeX%a^Wg^j#TO?R=fA!9;o8w9Q;$^clZ@Za^X%c0 z=aHEkCg1Py6_QbZ+t?jFJF(JEjQ6VhvwbSJKIiV(y**^j`NbC!_E>rBoHXP7(??Iw zRVEfszqlyz_ld0DBZc=fzAT$)@O*!NkrD5=w44krm3_|_?bwk%H{#Cg43moOF~2>2 zz?(L?9g%ITEd3z+XXorvsc(9Ai`GsS_tnmtywPKW+#P=Y?XQmR z30KjS65G!{w`K41TJIlgyWXnR+}Z1C5+i?e=FG=e9ld$e|HY;Jv5mgNeNWeF`phKT z3I2t({YNc!d@K(Fr7~01g*IkQ$7kPMdE>d`yNHVi0t=0WzTGi?_97vs=FVy_69fL` z`&icV1^HUoZ|}9QD>vqyUEY1_jY`Y?XRUj8PPa9vSO4A9_Rjcfn&QH|+46OtFMNGu z&cD3o;(^_-)F&s{dUXB#ZNM}CdqnQyhaX-gG+D|MV)sMS1_{*~OtB^NRtY;HCZ z<4u45{lym7M`sVOK~sitP}p8ZW(d+*VBxO&jzUzAN(vZihH+=efIA8(!8_7kG3Bvyl=hXeDkxDKKGxj zE6T7i|Lt*m`jO}RRzCQo!~WZ*C&gH5Re#S9@w2wsNAK=^c4$x5IVs-9y&kHD^Iso( zebdV9`(DGzd!naQs~^12ey!-7?RrFV)N?VsRz&At?q66=l0Cq z>F#MOxp!-2{lDMrWZT!e=V`V|#Mf<)-mWuEw)2dW;{Dz$b8ct+N!y%>1y?bT1y*KB0e#F=uU@ zVJ|2=#gm-*=Ny|6_O&pPY>={dcdeRERTtSfzcBeT12AE+v* zs^+}byesp;x}HyyR6vi%e5wVHb5cyZCgNAE5f&X@J* zZ+oS@T2-ibze3yZ->awbhowbllXG}lx zBrJW;hlAgws=M3%x|vM0c(;o;zC8PmT3BL zvpBUKyK`06yqoK1(qmp^%-J{l_rcS(XARuX&RW#?_}N|0Iq7BG#eKD}e?H)km-?iW zzhu&kH!C)`YKxs&6~4IfYr<4dr@P-oZRY(x_BnEYM#P$Db6fU`rfS^F`zd8t;dZ!I z`P5a8u&Q~in>Vk}1`PuqO;4NUdE)cV9lP37?iBR5o$Hu%;klh*J*)fCH_G0cQrDy- zC%5ceuk~zib6!e5Po;c~AJ1?Cv)2rrQO=`+l5twq`Zvk6+Z7pOfRN$65LAPF7fRkaeC( z3dlXzzD`Ow9_wAP!(YGR(ua!&%+0<DzRkFY5Sp+m_o0s$Ku8N$uFz zx@?X|jfvcuSNFNazP}XWy=tB6BeaIS?WfAmdtFyQuZ%R|srx_m$P>w}2Jc1Z_r0zB zp7FqVv!$oZyQ4?XI8RSMXT9TN#0K%@OaDwvkn;i!KmO=uvvXeA?4lf4aJ)(MdWJ-g ziI8ylo()O!+YQV5+I*8HSX4afo_TX_fsL58@g`63@K2hYimP*~%H)h6hh@e8%;UfA zWx^xml=P_UX5ePMXEsy5x*o3Ue|A=dkC!+8%$a##q@ou;w4T{A>4$;w>2&rmy)?NL zH|Nxpi5WKvj!SFXT{Mu`sWPK|)`vrq)x~quFMQazIiqeW%X_u&tv3s&XYT1dHsj=M zNlg_yogELlShr`a=qV9;vvG&CF@NaBM}oY~JI#b-%;$IAERWIq7Gs_5#{B&86VF4> z9lalRNzQ34J9Xgx=PZ*CZ_SF9P88^y%$HVQ8g}PSmaWte>xj$;R~=(z`=4L_P~z`< zaYIeYTCb+xn$o}PtL9dQbg<6+Be6uh2aeuX8hQ=|!&9glUOPxwoC~4zNPPGezf|$ z{AHh)Hs){7G|PB!)p0Fr@jXY;nmr$vWNbJcQ>^{-&4OnwH`8a?{jm*S+PGKjtBKH_ z=r2qAD(!ljXGi;Yv7NJi)!VWw*Zj=Q@YN5@`JZQ)e7N~gQ^n%Hm+1TFWgiOr*Iy2} z5t-6iY4Nf$bz3*W=cm9fNldNfX^}%zC zmI)j4SGzJF_l)wK@q1lgq-glTe7T^1iyodmJiX#iew7|)`oB}AXFe}HVsqz^@sh~` zY2P0Fx+9c#emkhKySBS!*ZG`^9q)g9coG+Bq9d0Ud*;>?qy*Z1;$@2Xvvt|Rs19Bb?> zj}Lq1GglXTUo-suGOD}nm)kqFi+6Hm&+KzDUGx6uM1PYW^Q7h@HT`LGD}MT9>CFi5 z)|KPF*1U4&k;=}qxk>4P^X|0Gou?}m!M`uobHir~$!CAMZ*DBuGjs96Pyd3IF3$UY z^zPoz2T!SYit#o-W>r3TuPM}EzxeW`#}&bg8qZ&m`rmY(&u;CE$`yZDzRkRLG4sLt zs@D^L%yT~|Bb#&d(Y$Mm8#jNgR=jBOYVMBx?%`5t>5hGD*O>pBaelkKy}NR13g_(K z(#BHXUQh9PWaECgw7zrxfvkdLxt6a9{6cR`=9WGzmtmL$IUeZ|qe5AH6C zvEn=zyjL`Q`-%2SI~h%y!$wi9b*5Z9g)*{iE-nu%o+p<+sawYm+hpf<ZLQCjxH*3nJnOY+ zXa4COpSM>g_I0H%U${}O=Om~BxQ9i*JX&`1;jH!%8xy&H7+?@p<(?{?-=KmPhpW!eA#>EY9RZykMh zuiWkMw~3cCAFN3UJ$&8Pig(V`J?V=YwPUh3IzIY*Y!Zuj-JzqOY`jcD!sfU&l~4YD zbkFoT87ZbO;``a+OzY>e9A_^xT%F`SBi!?^3$u0iKA%SyR{Yqt|Ja#(Pr|xqKH0;( zx&O%bJ?eVr!#8}WzO;B@k;^TQf*Jwdx&CbY&-O05yQs0WkVj~8xC(pmzt)-=pY@;h zv3;9$LZ$G|r%AgvpEoHzW2zNqBQ|$+NX%W87Wd%7QvZ`XcCM|xc)@a&riz8s9pU2M zStTE9zOP!7k>GyTy=kuN@{%*J=JTh`&kU5Z@GqaDtiSO_q9*s}dkuVlHY#hsJDSvf zRafPR?X(B4?oBFuY{Syc7WTiybHiaHUYmK*hhkPQ@5^}b@n1{J&aJv<{+&9%;r!tX zRf`@Lxtv;@Ij8-b>>0kUbu$(pyqNLg*w66$N(U?5D-)hQ^tp3`cj?6omT@ywrhH$V z`DB)BBujDbv^$FvKVG++yrF#c)`w?*eMl^ecnO+{G7h%3l}D>MqGd5qirE~E@?U5|?h3|~@p3QPy{P<+uX;I$py=PjFM2mk8{PS$# z^EOMXA3bdA3hwUodU9U=_;k+V5F5KQ>aMvi%+{W_R1Qx4^{#z)^z_79J1^$<-u;HX zEa~xK2j6JNa7$Zf`I+R%TW+0Xv4_iR#^&{G_KB+I_ZK`=Uemow<%f@L>6xG6n>Oxv zZoa5-v;KGYMLXBa+^O{alUO=^)8fYLD_b0s?BWlfu6=j(*xs0n2Uaf$^N=Z*XD@!b zt>4Xi&Ei(Jbp>mq#5m9GJHtBtdxYoFN82_nTKH+@nu!_tM5njzE9RTbI*<9tomu_tU~Yox3o+g`?8y@oY-c<^+R zJ^jvjwPT)B^Cr1Fah?Ssd#v=%FHd;*UBlh^>qOP5Eb~>>kN!1%apcs*S+30QXL>6g zOh36f>Dj`#KhF*pEp)Wh-ucA!(T>}HKh)kcDG1xNWCw3e*@WjR2Y0VnoN&*0a_`g1 zD;W=504yoUUG4UwL<*ZU4-l z)e}A*-@DF)=bZE8EuJTe@6Y&tnm2Wa0>{+~iazNi~{krd)bZyk@4;Psf+zWiC zaz^*t!?*96+15o)x!u8Lr=9dxPJ8EDu5)klei*nP{d~b7?BPe%gH<2ic3Yl4B9-^% z7?{PrNlek zedh1)$edYqBg&+}Y~6>9y^^xkd~+((zd!1q|Kp-TS>p6_?oK^j=r(pmhnKUY%K?8@%Ok7W%G?b&Tjv-HX}jK%(&db+xE=X*>*?e z&;N2f{9to)tr+Jy?>X$()1zlBZZ=uGaKGSdl^=U&aPybRshu&+dDX#ICb!M)(7ax@ zu;xFhXKe1s@lFqa^jlT0T4zb(xohXy>upxsOR>EdyK3fHU^+jtAXRqnjoI%1t4vDd zZ|Y7CC@a*cTm9%}m-_F;MJ77m++~HHP22RLEPUsT%@?*@Hn~=f^fJo!oIV z?*FS=)ObFibkYN^>$3{Vw-*~eUvOWVcTT&R7H8R&Esf&Z0SDh`%Na|VSr_qhu1nD7 zE;iBlw&&94p6ZQ8`_E2hxvmq%D}IhsbB1i#(M1dQ2?`4JUad`7_vAWvnB7(Tiw8v4 zZJj*h&t02}o$ueyxVryoM#9(qPLDohx*VUrH}j76W2=3cmko6HPu%J8VcpD_n0fCH zHR(!e9Z#F-Qf((*eopbovh!w(5(}m{GtZa3qBvu*WA+UHNt<1n-_LsL(v-dVO0WKN zmX8_lkHjyT!G4X|bNZ3*d+cI%JZnf;mmhB;HG_S&iqv=Ghwr8pZYUC4(`25crX6vdqEKdAxX#Ar0MOxe&$WP(Vwurx!rB1H}m%!aTeCUJ$%*n{K2z(m$)#8 z@A${XS$nOQefLZCdG8EOr7HTr1Pj&NZ!9_UUG_^Kf3MTE0U|&JzMllI(yp112=EZ-g&?CZ*i0Hx*6Zu zitcpBR!mo!C}1Zjx#QQF)SEkYM$f)@ApO;S)rIG66XRr`w9aJT4N6A)`&&NV-t+Mo zyL_Fws??3-ixq4eFPALqyqS54?ccm|lR1a_R(U#A{9z66+iaXSr#)!V!p)D1COmlm z!0gP|bH#@y%g#2J5__MaDim|OFzk%_N%iD?yqa4xcF6qwsJ~;;%BjttH_QC7eeZfW z$@a%H)q_*-`xZR?>TkMJ4?dsWrJi2#G$Ue8xl7a6guXuW>q#$W zgl;sG%Gva4qQSN1X@;vEZROL{JtZ#&RQ}QKJT~$A!MSspCAF<@rOb>} zwKBB!+$Y8RX8ZGx>Cf*PNdDNB|43bD-&fV+dn0DpWatL&K~}8$#^y6 zb)oNqeQe*=4py?qAA7np<;?bdcf@$lI9sdS2)wTK?v2a22+QwvZp_u(ztjvZZwa5V zso^fJ{cQ|tzvY9vQ85Oqlb-(HEOkf68@qzlqK1 zwst=$s=YoV+GK;=7Vo58PqQm*`&%rvKQ76*vFGqk51H>d>l2GzFNdoCn^(Ow@%$&Z zGaetx3m!!9Npg7OjxJWY;kc3a^Ira&A1cK<*{(I8U7KdR;j&@)jn;4x1WwqR@j$2aY22GH zd-%`2n=Ah8r$H~^#ana#;EmoR4=psq&jenQ`0@B>VCIeX(vP!Mp6pCJleK`g zn0NL!SLXZ7i{`R~=SRvv`?)~)bIk-n-q*cf91q*qjx{|u${BE@>;a>xzvu`;l^j;4{lx5n9q2o zndSHD*9T9ptxhbyziCn9`=2x1n%-~!q4sQZ^RfT^pZR*&_Pt+lHq_%o#rbYa>)ldf z-}hQd-FrN@NcG~K_`5rHpT0Ara)zzcG3lGFM`p9@au-iKd1A)?rls!8zq_>iSzjOY zkt{ZwS0Jrpn|)@69=u~Jji$Y z%7-dD*4ew?it^T&zl&7aVdeb$L+SZ5dp4XenVWIrXYU=)ru<&trta$dO_pB2#CXp{ z>`k8V;5Xl=V|Qa`CG|~eb3I(4{CU!hcXiTn6^UWZI~OtDp8B&Aq*-@qKG%FN^ir zXUE={%obi9z224C+TgqDLB7=+4d<(zK60$fWKmqZPm;Sr&N$#<>Gi1Yx6aH~6b37c|Ix|}3hNlv9v2Rnc!E@Ose$3$k7xQC;UagBX zyuLl3d-LQcZp^O_UiE2u?{!Z8Ufx`B`FE~1VspwTh#9B8ys4LFAA9WBRGXz23)b$L zXzAIp`)S|mYR^Mwb1Pk(>y_JCULVx#I=AePdAVGx$KtJDlPkqM2mf!rW)R#yH{0eN7#8?l^@%#Xjkk= z*PoGHx#+x^+;-CtdJGg)yqOSp}^hl4kL{2MrJ?N9!d!Jpz+)meQl3|l`} zKuFl&iP}EdAF(Iz)@YxT*L$bdwz`_Po2_rs8mFds=hN)`-^;bto z?4s?3nI5z53*A+*`>reh?4Hi!2d~y?x;s~UXQ^JC|NOw?O6hs;?wLyc2-9(Ly3w^U z?|Uxq>f0%9hi^-tarU_LJa)s*{hQ|b7k$?;Q8}mDzgp#nv<$EK_noZ9_v_ANe0cIJ zOzq;`uh|tl!fh*dZNHQ8AUbHi%8|9bZu?}{gl*gvnr$KzU$oEl(XRK~4PPt1{OtQ~ zThi<&tDc0Kab7!IUQj7^P{w$-5O2P1guKeH+mGK!etun1{qW_z-`#9=w&kTlpW>u< zSM2t;nqho$vkS9(;BCc&Jf~|m>^vWH{@A@oz1I&JC0|iJ_+IwK(W86)4qn~sy14QF zl>cm<|8knzf1l>`FF!BF`&u{Ct*JQc{-NJD4Hi4vTT59SpJmi}`p3d|Iz4P_AHTOe z)_ta8LbY;W{sjA|hd(5Yc=Gz$TubUiYV(@CJYg6EQm70pR zJjLw0=PqiT**g9C-pRY`+csBk>#_fS@1um-{YjH1t~hV`_?g}J!*l)biSWwE&S*VS zay`ay{kQTBJD%%ZJW%s{t;&_!XGf0L9yPfBD7~Al+PkGb_~yIw?Z(wvvi0YUrM7H% zGHJ!TdE$BR<{G~{Z|=%$oVVXMX;b~o4^?_5MWRu^O{Bg>U*hL1{ciH1(0kuF1c zdB067k$dWSe)q#S|GpiVUmcNi^^er7DUMBx)7XpGc?XV&*M9b8_yrS<5^L(G-t-%=6xSa<*hG1I2k9LJ?Z0utV2Id&5q8m{x|LNf$hyk z?3{M&&yUq`=^b3tUbwjNYk?l;yMo!g>(gIGRG1c<6qs0Qaz2|irSWHt1n1{{85a-u zT(+#_xwCo2n!cHtWJ0taV?`D}w?PyMYsq*Xd zjEWsgb9eE>qU0>=}v=MjbyK}K03+h)t z{<$aIq`>|0PR|pYdG>rf@~fuGq`EHk0be|va8YgQP|%gYwxy>qivlC$u-{^P%U#Gl34Zgyope&+3j1e+a_ zvu{7E*!ME>k>Q>c|F6m)cis+-xno?vV^{e0j0fQlqZBXRt=2nJrNMhXUHjsLlYx1P zitqBo^S=umeRc1v3$wdtk?O(iN7pA5*Ux10eitOnEC1NhRO-=nLvFpim-6e*M=fsr z`^?g#r2M2f|92l*|L?aJMLot zNjKUx4{dKQ^$7X?;`7Xl2mB7d5xw2Z_Rh1&PDn;sS9bmLkBN1HR`)Y*b5zif(l+82FW zsTqNbXCEo)4%u@jN^RQns>O+$pG*k&?kjJXcUm(3-f2~-9siOpFIdxlzMyWM{J%TN z$CEF7niipYaPOZ@kDkeWKYVv@mkaalW;3Du>J_UWeO<%eUA3g9#=Cj|KRo5Ydvh= zCbzsjcxiLooV&`Re|D-K4Le&=kUDuqUbM9NzJ)1gW~Ss`Jn-E4q{^~t@1w7OmYsPo zdq$LZ_7SCpdA`!}+cOWI(U~!mZC!%Vf1R@Wp0kq0@z1vumTuR%c;ISTlFF{=HOckU zzGfYoeEyXTZ};&4j}7J(V$UQzjn=F$yqodhy1>>+53XOh)qeKwt=fB?xjQZfSVk== zpY$L)=-iCeKDQ3dF}$rVwd0&ii%WU=?us4hCO+Gr2=l%X6<1a~f9pfp`j`#7{G%=w z+?!P9vFEG7ka%N!^FKC*em9PfQoO;1)#$UAm)Zt>x(v3Y%L-`Fm@FWUY7y20~+ zOYO^dZ;|4Ssg2a18>?-~9F z-zPnrsn*Tbw`iKL)17LuH>Z#9V%Gkj)ZeyU?v$3wy4_iap2v+ufAVIx!%6eQJUe!;>D&JM4S(_S^C}k) z?1(Vu{Ko&PaC2_i#@?O5;h|De*B8nf3SF(;{NUKU-HGpRN0pfr#DBl*>GS=-}U<*6Y@+WH+yZp=TuObSXAa)l<__VrA+EZekeTc@#B+3xkTmZvcBpQv8?$?0u-d{k(_8whJ&(sM-Ir%laK)!$iuulR;W>A&i58cp ztuiq=*1X5M^VPqwV`p_gC!9aK##U-ZWej)c%XzAa*PP$a_-(aZly`RRR~M)Gz8@a$ znEPnET-Cda2ezv`)|cQf3Y>GdHvG@d@ZPTnDgsg_u6UQsU7Q!lQr@>}ZpMS+qB5a< zau=xM+NyhMQR048KDj?G3l=KEc#lLfx_y7lpv9QHcg z$yWDWwN&W3E~sf$l6ijCozLCZoATLDt972&y;)HBKDO|w;hl_(c{{FomI$>S|Lirx zdiORF-q*UCvs*rhOXh#$;|tqqF)zH*?&VD>-jCJnJ1709;E{h8 z{n;?)?#?e68Tp>kDptI#pS2sKKGfLhN{Q76dUmL%neLgtJ5g1hw}-vjMCf{L-oaz> zU!I?ydwbuFRrzX$9t9#>o9OtjC>3&Y`gn|8 zd*8(aXAa-=*kIcd$$xrYucVmu6$l?vYx%`PClJ;$QrD9GNTCX3+e|Oz3Lu@q=fU zU+uE)RhGK(&UEsFh{D*4kK)4IaTgEld9=$@gYzJJevKuY(c*(Y);u$Ob0l8loQ$*o zkLr2T+Yb6%HWlmqr6X>>eOl-5%~LZTL=?VMS#~??*z2Dh&#s=cmiiX`Ns_bl`Lqv} zc5Ul-_lWQw`~2)`a#~=nbo#&lN9TB3O>J9vX8U!|MZ1>9-MLdPdM9&BM#Ap2xlGYttE&ohTbp8bczlZu# zpthA--n$~>wD$+RKn;pI51;KT6V5GAJCkAHw#M@q^GkWob^9lE_wNSPqRaKABKT+L zelptrAY@LZF4w<1)iP3Sj~l=FF1lo4@Hw~q;N1WAixWS*5)ry=TYTuu{y5R@+m|}q z{!V+Lba3acr)+s;rpNa-X5Hhd5gXC)wDf@#qXmH zKl@B~J)Ce>N9eL}B&&XTw(RN6ktPLO>(;AWu}yvO_?p^}UAf{?YTtD}&AjpM{9M<< z!s*{0zPh*3*5{mTkBMi=c8{a)uU`A~@Z~m>MUBNPN+&<)Yu%ji?DDm)ua)aEEbjdj zRXq47>*kD^u6u3YKS}djuYYpSX0gumwZ(^9%O@qgOOFdSso3P3tFohbaoU-h-_;*W zw%=LQXkFXy;&exh_s-%Z(>3qbsY~6fidZ`-!L~+rvz%Uw?PI=pxJqn~@qOmwzA@^QMOt-9y#a`7|YKD>`C=%3}|^#1em z8+VF(pHIH?+>QA;-%46;<*IswNYEk3; zbN{6}-{oEX@E|zg!x3w#dsQCWCkm8rYu#R5*LHR9K4ISHx{;t1-*k3we)YB^$pKQ! zQm1WrCc)oVGox4|{lTksJ3*bgFvW}W-zHr(gcDchr@c=Im5O-2_*=hA>Gu3bZKBneeHObM{-CBFb{JU9F=pBlP2 zalh*GNdep1yLNij#?{=tR%B98`t3pGyeH@8KX{{O^|9TY_w|(RN4PpqX_yyO+p(5! zuQQdhxmheG^trOGV(0A8Gqv|`_pyDOd`)5DyC`A1ckAT$y}KG@awB@vjja5td)(>Y zJ!R|jZf^|z{Pw}@*)FBqFBcSlFDopcU3c-oUCCDphV$1xe0nZ?!;arM7dPCWWbLUD zH)Ce|^2e{Y*)3|6ET8x1=A_-zdp1|swN=KOEKMwQ57wN^V!Xlh@w0iJ1<$Sh``QkM zo%x(*GvV9Ar}thb72fu`c;MoqogN0CE&OZl+@JSjSG2ZCM@n3G{N&%o->()_ZsQOC zzCo7vZE2d~Mca+u$C{td{qV%l+r(h8n>MH0|ELdT(^DhvetniM9D zKKIV1N0D#-Ov_OHxO2PMnLUT{AH6zvbkV|}lai*ol)uiY*x?^pvFrVhMTvV=wI@FK z8!vS4T@cUe-P;6t_uNyTyyKmvvDx;k-`2#`UKQqDG&6V8)M@_O%Xs;zrBx!h#W zR|6r=W6j2_#cOuNzS)`e)rGmbxpd-$=f#G%51)v*tL)k=_wAon=j&-xHtsZC`+V|^ z=#H-iM(JmSJI~kdZ{}Wqwte;PYqGp&r_ae&kr3bd;NiNLkAB{%Hu>;dytQpcW>&@S z^xF}4wa;ffD3`zF{%BMD)eSq_FBMF#zJ6oX%*-lx#g994Q_rk-ddh$Ox!%PKHx{vV zzU%xZDR+L;hm!Y-7dPA!%2YX0+y1DR|Jw7~#f`=6lRWM`Prh--@@%?y#YKf4c317r z^LI}jXO)uZ`uZO{}@Plu6#@w0T?!s)W z^IFMpe(A%fdViCy9rnDqA##%Ep0{<&TKWI~ukMR?*1mY4_MdwF!k3lx7MBA+n~Qt; zb+7v@+7*6($Ih)fcQP|B8bn<3EI6|#{ET6-WW>GXJ*HASq|7Gb>8Jg z2Y+<`6jFcKYAp8Wp)YgwUt?b7gFUlK49iWvUj#^(9buOPLuo9`}M%~=5Mk>Urqa3 zW>-fXyleZumu=lO`?*I-Uh7uuEx&YX#@?gFiyFT!=w_MEA8qh?eQx4D-F3peHPL7O zw5pc-ai)Kd>$+ccLUWtOvF04NMY~>y-npY~dgpF*v`NAHWm7$UzVBew-+uDYA33k} z7Y|(hb=hM@^^If4ZL1GXf9sqX@Gj`#b-!IZe?^%+t9uq)Si4VG%ED_>i%a@yyNUK6as$iMpbr@pq&)3*3FUHpG~M)`l=^VSc2n%|w7)PJO%J1u`h zOw8S<+cGl#xT+r9VId@UzUqUDJntOqh;5!6oqaotlY`crU+QwW(mPGH@b3MyH|{J= zOtrmJp=+`^WzvJ~h2Iadil13wvDi_Xx7+1-lVw_-sQ-5_DcEpM%;~6 zmD(|RJy&P9=pyjUKg~#Yjw46XWO@FGEx%!L1$-tO%U~$S$+QTH*yLd#_u}9mrIPp^yUVjL9++#hed3Ju z4@36EIScB%(=wLY(LPsC=vPh~|Npc@;{6#0(_VPLIWjNo;LW+OkIeu5YS}{rxg}dY zLdxHXo0rd&Eid0H$lJrdd*Y0DD<$>6|1?WmZ*g>1ip_~|j}^OXgyqXmGv7~-y_itL z{U|WIXf@xTZNJua+25=5Ivi-n?&}d!e!pvHdS}j^yMJe2G`KfQ#w*G0eW$o`{^3V< zzg?L3bD8sV)_q^7WoOgfvi^6EzSIplw%79(yME@IbGO>}&(2&9-sc8~Uu{s6T z2QD67r?PB!E$jN{p&M;hyE41;pI2P?ZZh|`r`p|*UgsrWC}{ouzl!tN>1odo9*r%1 z_)6}658Jt!Z(W*phg@l9U!QmAvhC^4wy)FHI62+fF0*I8|H1rxgWik>^IX55RPnr9{=R$Sj(3JqX5U|ZkDMI+X+h)O`|F&XB*ix;Tss`OW7lc* zix(um@^!wuSN-Ur-O`6A&1VSm-m~r26?(KT_rcq|w$Qtm%1mV9Knb>-@65e~xbubV zyKk)Gf6u*F<%Zm>M7N{S1*O+jE?%hVyyLTI_x8FUd-bzsSM0i-aq+-TmDMU1)0c?m z+g&w#7JX^W#RFd}zE0TjZmzl6_G_POCjXvxLrvd!P2a=^=8umbJGys&@9OB#MUB7z zeD_*pf4`^wx7p##x#6H%bDPJB>aD*H-H!D;cFKA+s2pgUkkEEj@5Y^-=hMBw$j*GxWEcP^COCO4^E6y-pvDlrt z`l#mQ3(v29sGQbZ`Q5yit=gNdzHrj+Yn_{`GY`(M)?au~fW=HKpR+o$`?JIT)b*y-43M?dALOPS60baJ}8IJf3bF<;Hy z?0cZfw{!o7FE)JV^6rY)zcXHZa7JP%sAKcx;kO#r^6l%SdFMp`;p_Yv!@B;t@x~qd z?}3_{t5mMU?rZ6Z6YF>iH~rQ0g;>UB?VEq=I1 zb(d$%cXjUByQja86wbDr$NIRjR7!%si$m|-D)#X5-P%$XUO~p7$q)9pie2t@7Y}Sd zTIzA)vt-5Y>9T9`PU}kDkh99}DrVowpL2e@?ffUt!spj`ep3x?Ir3c2wV-hQwZfx9 zyl-_a-4^YB>Rn;8zHNE*^^Uf$(_ET&_^++l{eFSry9}#Ejf>m2dB&7a?>ei?d;iOx z$8(RCW~A#1&HsI_r`C4O7uA^gzdPCPiEp3q;$57X-1+4XUtYVtsIf3GlD~(27F$}{ zLA@FNj=C2QTzq2Y8M9sO;4{6q)oE!L%ac~8*=YQn@L<=G{0EQjWj}bet#omtb?tkX zMZ1gdSL}G6S+VPU=kWtOn}5X$J(~8RZ2qsr+Bhj*8CT7jEahcS4O33O`_1`pp7&x! zW4S4Xo+0IDg^Sg8E=_l9{%FkG!~VQXsE6Ii;JeBXvuCeX>s>r>FX5)jmE5ZzD(AJ` zl+L+$U}tmbId20wm9;Y@MPfg+tMgWV)=nt%4EesQP5SoXLw9S>^|I9of8*d>XPn8d z|6N1!^ya4-4{kqDSGlsb{Ly2(r-!fCu6AkuDKz`f?3ngx-wxz_HGg>i?z07opWiyH zp0wiKWV<`_?2rD9+?VknCdf?a^4;^tPV2I+wmC1xyXU{V(!zJvtn%BZHqDHWEHWwJ zUwvwI<)z}^1!dQxK0Z&IHeEk)-cDVit7|VAyyq7Ev#otjkx9>X7wgWKa#kOU-e*VL z$+DI*i@u<=Fi(?xv#rU&9RAhr%(o9ez4|C4(64Lr?$X2aqw^Lv`v0`t-_P>+;Pk?3 zIbLI_3>)ra&8colRmq-`#cDsTBj&yBX6u`I-LI+Gv&!Ik0NXR4O><;wnLceH-rtJslkZgcnT z=8S|d`zN>T_${#KZnEr}^SfP`_jBI17rMUIHnBR+t=9x41E1SLG8rwf$&Ism=VZ<<)&+yxo79l@;Ip zs;$^v9Sb^{u)P|=SM}%|J>Pj*bJ0|e)G((UiYy^Sb5`x19P^l zRG*ws|1mG-&NksR6OE0ohH@g7DiZuv2On38*xXg_&3JGxck`r*$4MJ|wpYg%JM#cZ$tQxnvLRV+=J8{l?;;#?S@toGQdiQ-{-k7CztuE#Ap*DBQ z_@5OQMVf5bKSP@H;oZ6q(fo(mo<$dTn@aBQtMn)cnfrDj$MG|3AD_Rw^>Tm&e~!6O zOns_+Ufyic;;pgkE*`MFV(RIW?{o7*k$7yxowpGt2A8);bJp$?HO;?^JW1TXVDf=Bw9>7QXp3ZN-Fy-S5SXwXU`9-aSp4_wnA{*-D0YjkKTbYCgYV z$LkFlH})ObHQ~bd{5LKAw~u^yI>V!%ZCmxjtrx!3u%vI#I66Q2v%7Pm&5qB?fp>Qm z-r1b-X#3Uosuv9;7PlOEQYp9Rj<&ka`Ow9U_c`>tTXuan{BzBDuWbDHAATkh_Y*6= zT9i+CckpKHmIvo;-E;Wc_Z~F!4B1mqZFcbPU6;j;i(S(v&RDaOU;mC__~WIbyuWpS z8gZ7^FMjwqPxbNZX^SoLtMt85BRm^Uy+4(ERD)0QKhwtL5 z7ByB^W~v(A4YS*0;dgoCj^EQ4Cw{&e<56(eG4jWb{o6j2PQSeP;El`AA|-Ag&a>Fv zuKH)^b~UN4soS6U30=*tO|+9&d3^3)T0h&fh$H(gE2ngcCtLE)u|8o18h^g#QD9QZ z^=$g*wTWqBTl}1#W=uT)wA^^Jhqm6kt>)|Q&G^>Iw$3TP*X8-;xQ`DeUo-fgmSHNj zBRx=1=+m}?g&)f5BRAO17vkOX|E+T2U0*4)@1eE#I(4-!29&4WkM%H+`_f`L`3}$Z z=X*iLt-O$ouGZEE5A(7gy^Oox)wW&koTbVQ?Q3n@qe~M@gSy7+qS;)Ney z*T|>stKE08pyGR+(DmBl5Xlk+&P;Z_+tYR`^kllJ(EQ(VhwuFVr*>xMliQ0M7pL7< zy*U5&(ZjmSlkC(#ceWkP$X7WM`~FBw?{=-Q@8;PibGARp5xQ1RQ0bu-TuxBZUy{L@YDn|T`4z>l4`UF~~LlktD2!}DHyYVrEs)Sfrf zrS$qdgZq4^4$l2v)YWz{&QJN^`s8y>*R!W|-_#ZZx2wFG7Po6A)_qUZ{I=}hTVdW~ z`=qizseJbmfBxL?&bxA5}*_~`B|K{+cd2d|~*LfdP zSomgl_?eA|?|vw~9+L6m(DQ_<&U4$Fi>&nCMTxC@7nfyXvahjB=BpVD=`nXEv0i_^Yf)pdhLy*c^xG9X*2ddd?u%WV_;Zq8 zcgqf4?QhGTT5jKUUGHK+P3PABBdPE66RNL$J2Uf1B|q<zTdOpa4OWHErMp36#k=E#&S>WeuTQs(xRd@K)HKUd*`c+QJMGGE zvwd%V*IrDxXDRgmSz214rN!=0mijlQ;Zkgm9slxmzKW~1KYnIW+wR}bWO$qZdMX>< zl;e7KBOyNGM*W418*`k!RU-K3C%n7zRkh~s&UYCPWL`bFdilw$b#Za4Cs3DY-~`sTgH$LX%F6kqncN3Yje zx-x$^IkQKsy?DjTM`va-9G+j@=Xcnm)%~tVh}*T^+116>WAa|1^OHF*?$WQ zO*Jk55Y2x-Vn_A9xpKVC{!@ICb}cR2bLY6$vsbG%FCO@&(B5J<`@v(m>{dR3O zRPVojU&y#$G`(C`w*FmY((ET06MG$-zPHNUx$`{d&$Yv6l%;m)y+&&?|?y8tw-sHZW?V;yPe2z7rTWu-HUvz)Rj?=a~ijIXWZrrXSa2g2i(`?`TThm#-=z_u2*B9I>JAb_W)53jUpMPCmrmoa1^DFujU%Z=ZE%)v= z_q_ApyV=$`dpb3}UY~YQ#`;dv)w`!UK}!c>RMzd@-uqMch}C?{$uU7T-IF7WJZf$f z6kfksSZmhV_U&4(mddW*ZI$s)`j-EWwwAh~eQ##V4)5#=W2MqHHK(3tBrMBRKNxya zSL&?o>F+f+y{$He-aj*M+Qc6cfA#g=-7;Qx{&#oVGw)|MD!Zzm^7FgR=w1GMw-E2? z=|0vfNA`vvyK`}i*%_bBv7jDcJKH*EZ_DK3`jz(4NoV<_mQ`+=WhxXi)rLDV-xQr{Jk$b+73_hdbDe)*!QG) znOA#e+E49mQ*F&pYGrv}FTG>uR<5)wlO=i2XixJ_GOBhojNY50le0Mi@WB1Bwtng-1%Du;qj|3ZJ3c672+9E{#rioeDULV_qMt-e}4OR z(v1AQYno@q$MP2I)?LiFp+C`#votz;#?PylK9;Uexp=@wXs-Uk&PoN&^zHAOEZuHN z@pgY)(Brshm;3u2J41z^-FEc8cwpy~8c(0?&%T|>Fz`S2=$$^net@YIbUq}&%H~N+-!Tq?u=FI&QtQ8zjRp5?Fw1Sw{I2WeXP6D<C?5==8_8)unni&enak?73}W+4i^(-)&mkj-FAv zIoqXl{@sG)yvIl8IKQ-&+VS{jkkIA3#}AyYJ$`78qpz{lx9CNaS;}8q$k)AIc)x3B zc>k4*4cnhg*l=W5*qMzfKR-O*wk0E?hyC8$b$L5w&A)GK+}Rxadr{&Bdjk)j?=RT( zzps((j!y4yJ1dx@{P9}z)K32A3FiCWy%&~pF?y_U|Hjk9+{N|3uN0*2-I7sp-gv9q zqTR3cDs~({)Wf#g)1+XpZ@kJAODT)wb;7Hwdj)ylu=YAOUHq?o!-9MByz-*;(HRrw z&fNNO;*WXn51d&sQ-0mMQhyVZc%|w|6|W!O7B9YX z+psJBYKFxgtJz1MYIq)d_O58YY2npK8@8`cPVJod^TOE4{xd70!Q~RNTLR*SVbId5@zOoHu$<|Dcvrg}>lzb7^h!td7_1JSQ4#Slkp& z>+TR-8lACKSi$X|?VG*fTHBg$9E#g}WA^V46KvKvZ;E)k>X*^0#P?Uf=*&7e`Qeqx zhxh&{lH-rretx&plfLE3&EK=7*4>|UtjHprec?N0W>#=WsV)N(Zi`A?& z->!Y3c~Rxr7jApDHASzRsC%b#{_h_Sx2K#jN?|FSZ6tRz`1_8$w-T?{9f*isIPu^N zmA6M$SLn&+&(U2I+xRwCR`QSR0-Fz-acM`U|GHVmx=!@@O3CUoi#j&j@925`@4yTd zqoc)VS5FW;GC8v%#9z|?QSH}Q#bVaQlLD_C?+pJaDtzzC`Aymd=hv_qwf!>saYTFH z4fp5k4qR%zKi%4{u+UKE!5)okkF zUA}*>WjX7)No?6&-yUpX-9ATF@6Jkp|5m?hgIML}$4_)BMCPkK^4xwkPv7dTqj58j zt)0*P!g=R6appf-*c010ul=_v+g>MWyV99K$ER1EnaH*Hq!x#TSEDq z`L}-Q$6whQCh~gSh0MQ;6%TiQpH`s1ujqK?zePV|8=w26sVjGWPbvKNOXQIp$o_vrQv%lcq zJ;x0d6S@kw#5!iVS4$a9`oYC~{!zMi#YI!eXX^q=Pt81$@#vcLp4IQWoNZY5Yx^u? zF`8D9D`NY!g^DKy=%iSlo`%&U<(ht zc4%{j7N`Cr+jFsv7p0vP7q6V&QU1|H%kGG`Z8__@MN>SF1<8BXT#~Z5U%32!MAd>r zIrFaBP7*v4J;UPpk+(;7HfOzFx8VKd>uzp>{AmwE@AB{IJibYL%er7UmE;cn`bU%Z zRy^pQmr)#UVY%tkzTJY~iyuw<+}%;UJflp@=N5B$l~GfLCu9Gs0Zh4@4PWDPbq5JNg z+ga1uYa@&*ei?o@Qx?~|{JPCQUVgXM)Bo~SamhQ*8^xZl zbh%$}j?eABsNYN>;or=*-9e{zJk^jWI9@*Iuih5h6`yrdJkqu(J`VirQz7(y*&D8z z+h*|GV&1G>bhajHk7wPc!tfV1z3)#-*a(Mw(3DF*B0hi5UiXV~J!iH>wB<`kZhzCv zS-xk{!b34{`0FMKUU5F8JpWx&@mZVMv5j9hXkQSnb(^y>+UH;;U+S{hg|Bzb>+U%i zXZ=BQUeNLBzh>-aN8E_p_vqRmM$FIGFTDD9r-f}Wm!#vJ%5L|MBI5I|gx?ai zu)E^r7Wn>0)&F=k2Yp_}h8r_uJL&;p^q|>+EfPA8j{!-OX?ROJ^7H4vy8G|% zvwvrc>pnjE@rL90^7g4baW1F+9k=?Ccr)9tJoLx;O@AJ#r_Migd%2GCzh}1s&cD~& z`toUE`QP7PF2COEv3B_q?az-N{|xe*E|QdwX~9yf=G|-Os>p#&-*E^49O@j}tDP{`=FryXF1%o{8tH{{MLO z@!Qvrhh^V+vxq|Wl^X1 zqHSSrO80N57zIsoIcKMm)@gHJGw_x9%VAQoFV4-|bYrQui4bnoQG}dRBAk+KpVAC%#tb z9gYqbjWratn!lB6eMi@t6KI*?Q#BedLQ<(a(f-arf202NkEUqcbA-KJd2Il7i;bS;zMntNUn8Y96xt>>Qi z9@1=5(plFV4xEXO91*d!?yk=QKDXYsJfMBtNd$E8WgoWA$P1(xDhgD=a^3BOxc`sYo$e|q}y|1}>MpVaTa-EUu4c;e0+ z{(lwQ=D&CI|MGdcQq{g6{sG?1EFugH3>*w8JC0hlt_=PEqo0u>{{b6=1Oo#@T4G6B zv3_w;vVML+NoIbYesZ#@=vGWVvCJ(GFOD}1Fob5+bP zaWFYvym|aq!zNZ4Syr}3^7D6gov&Da$D85pxm)~}7C$}(t>)-32+w1?n|M#c8e%`mo`+xFpuV41RVD|roOP?R#|Es_L z$Lsrly-Ysm*Z+Mxz5d73<3GOIFR%am`2X#C`@8=tf4}wr|78FFuiN+k++F{tzW@K9{=aYWbwT&P-2eYWy#DL_f7kzp|G)gR-2UI|`oAB;Ki^;fH~jy?|NOs? z@Bgvg-tO(sjJltP<^TQTxBvI}{=Z-R_I3YX-~apR@#pvX_5Y8{@BjPh^!vJ>cl+b( ze}6Rp|D)ah&!^k+_22%!um5}g|Bv?l|8D-;|0D9#_WOT-{f@qD|L5c6U*`3{)aB3G z|M__QzuEue|Mvg+ar}PW*ZTjb|9{>8U*7)T+y4L0-yZs3R`dVQfA#&b-|yT0e_C1f z^RxW<`j>e-&hNMX88h$Sr;505D-XSUw*JF&3m%zE#iHDC7IGg;zkDu|_`Uq_>`NXq zHLUhLV3e;AOrCUj(%}lxg*#6h9+LAbX!z{kZmv2hC_rV$A<4Xg#@&`7K_br0>USQp z@>k40tnze0#PrL|`8N)-e=B;yuQ~tQ-Zu|8*ewnUo_jXILsP>j<{^{$jzf24q%^-A z4&V{~_Mu61^4G%wA?&P%Pub6HXy$%%cHtzU027NtvVI>LHe31xadokVR~+WG+wk>p zjmJXyWzFg`4_MtRW;fre4Y=^`(*f49g4VV2B`H(4>;2y`|NlRmFk_jAT-Q(kwcT`Y zid&bL&yEA!#||z(U3ltXdJtO|)AG{?9~(Sm;kRrl3_eyYI(OsEcd6g+g#EmcD6{PM z%MZ&;L>_Ayt-h79q1pP)L-RIs)d@y{E)@qk?-jK5TTYp6BrhUbR?z(S>9;#!bISep zY4%O&ICPkmub{~|=Ip`=mjXg64)E^#`#^SWSHAx~&A(b*7XQ2PbyNKVCHD0i z;$1BMI|7vs$@)Dr@CfYWeJr6=^MEDaQpNv@#S`{-8_pGRpZjooa(>sjthZXTq8{o; z`?sBrHB7PO`Ff?)gTHu_$c@9I^9qhDT2B4(<@jmAc?GTFI_)a#>xJgm$4^s=;XCzx z!>742LWX~ACfEGjayfxL{6_q~zaN&d1o3rMRO(tx)Nk*3Y~JR?X&K_>vm;RH;M_k6 ze9cpOlY$l<=&rHMiTeBPiLc|rGI^O7JO51he}J$3`;Hx&8f;ws&MjB{i+Vm>R}6G2 zP5G62xK)UI-HXkZCL*gg3#W=rzW=b%*`U4i(87o_Gjx}=$XuEHKI5K<$gB2drH+%! zMO}?Q*uK6iA|l-SE9y<6B}>KZ=5yUHk%cGZz7;eu%RCKG*5q_;GM@90NqomFXVs+( zGrl}wF8{=D^B|XR@|4!3gTnVdH1OwW`*43zS$utqT#CiPBRAyFUGe6-JJD(G;lq-A z1x@NTPdnz-w zMHjmnyU#sq|9{__;_tWZA6B0D|3c6D$K0#=UFxa}0?t>?D6X8C+`OM}j^}45!w0mFaI- zcSrlq!!*9;DSb(Yx)MQtHfnc1wU5i~eerb;>l=sV>iXB1t4#Zs@Q3m@4)T55(7slFM)Lc)uTKm56@bDx ziSL%^N)4?$57_S4?MOd7|GNc0pX2JE=U*?K&R_HT%DY3)orK~xOm?1pIQMzF+=1<( zyPW^dkxP8pEF*UO_xbD@({1l0-u2(J@#xuA;*W24nIE0_D3HbCK>pp$M_I1Vp1;Y` zBuJ@?PrTwl(F}_^*=wOCS9h*Iw8-wmt~VJ+_cB!m%V_c)eY*iII0`@{W~Awf)B zQKe>k^8eL6V79h2IR5H<>BrQqyANfhwq&Mml4!c+>d#s(D(U|2&gXXp6`zk6JX>%v zQ$wmxQf`aUp~+H}CjBH21KZ#JGJKjYXYW3K zzKfBspyBH0Yh5MD5y^`d$eaA@ER)v%G}-da>`$NXPv<`)bEa3~#dM*LgEH^5?C0$Z z+{35sR`o9Ka^IStLHFyg|LIHXT~Z-3Q^PpsrNyhF zjCoT!l?<|FWlqKyG__lcUW+!`#yjA3HdcS=(pX^KD_bxY(0!Y=}xt-gs4S>Iw^$9S3`kR<8RO z;V<{`57EcHHZx6JvKxWHnHLe}?yM+dTwS}(pQvNdS| zM?tHy=?O>eGe+%QNs9tjKiN^xGktHCPSFS9_SQ$!URWO99;*85bd2s3>sk3;3tSup z11&5b3q16yGj8|uay49+EcHR9{t&m`vkjdO9Saj=7B?%)6jY>toju7jQiCh|Yn%33 zjRNIkseF@PD_IIGO$)hW!SZ85KA&gp={0_Q=Qb=CmE$|I;jCk=eSnI^ftfdRH8kUH4%DTRxxg(dMLsSx1+(d@>Cy%X!u=bY{Vti`g5Niwa-M$Sdy9;OlB? zmdRiJYE?n{n?B2)*+%SLo}KLXo@lon-dTNOq0N*9&)-Dl9-e3=J?BDt@d*vBE++pS zLe34+Z_X@yywZw&jg@Ko(+v+&_+|?+x8CwRf300evg}C0=Y>^4Qe6$nEm!%O{R&Ll zeL5SQ{suho+P7ok{j-j5ziEiAjrgEAe_k%XVKmR#g%KK8R&lvo9OiuYY(ZFwNY>Fd z?Kcnm4kz1kAn8AT>Sn?>xw$I_xm#gH1T1&Yf6ZSuuARlD+f8QI8jfwts z?U_fH&yi8mRz5_kyrfU%FcilbJ^pr7p`ja?Y$_&#}ySQC!@Y5%q3#2 zN0G+F6`@XRB?{WK*GO(Z(|GX}`%x!HpRa$*Ywm4n&iDCxo8NRoP=Jb;%8m*34;a;p zXDnIK*XrEz{p|HM`F($s+Lx^m>jE|F1bwpthK>A3-}2e( zFJ9Gqy42nxEZ(M7y-uk)n$F%^L8wWduWh`t6Ch#f1516c=S^2-!Sv>f{OkwA!*nWL5GZ!F|6A{0|uDRSAKQ=cD1vKlNMRsFRR;jKcwmTzKLO< z;%+`a<;yqmd5LouL->qzcg+Kw-<~aaZYJ#7$R6{M)%=FrWl8%Lk?US%=kJ1MeBh$fFCb!-O^2o5+6bA5c%RSrRnP^fe{q3`x(i{oy zr|DTeMH;PB8WtVmoOh>R$ocB5G~39pVaMDSrmqluSI{JGXjOb+Gegy?jnPXsX54yd zZBV}BzU0*{-<4gH{xGlEcw@sn*V|s%yO(X*Y=7iILYc2!XC@jh0`glr6eoyoFV~;&5-B^s@zf6E(#aue7@Al{9DKye$%GN~#MI_>b(E zB>#}lx;UZ#un4F#BfFeeB;0xYP=J03E&82rliZ4tI4$Lrl zA9?P!bQyQqhG$EzOPAeTtkCuo-0j(GY4Yre+rk-EYrZS8?U{KslCSUiFZou6V*sOOP zmb=$8b*qxi5`okQGjDcnXqS~q$mi>v!rmJ8nKxVa{f29w()i|1X-qoswW#DnW971< z`Iq)-+VorSclr1*>P?xD?EL=B!o?jLY%vcw(<=_1lrhu%Qks+=zV^YdN1t;zugx-h zGGWUq!{;ToiK-EY&je;in6a--;$>Yu?UVJTRcd;xO~N4=uATb!=q2 ziX#oLv|qh@kZ;@LMXzq23 zXJucqwutkZ*7S#r?!_~fh=^2eesN&Ukya@-?F;3#7fjE1X_#?&y*T;d+dNO|+~GCbxBjva5o~?7 zw|Q%I!Gj}ntBubbHkY8tcGW62(Owlue2F;cQy^A8N&A5)1Ja{c3ch_|P^LOT| zlQ#v1^vz*2PutpTU2HM?u)@*>7b0^HTGg*$TYEK_?~U5t-D~x&*L5+!N#uY1_UCb# zlCRSPMWRX*&K_hfUzgBq`64TS(T=r0Y8biYukj~+*mYd8=)=fpX$^)3IJ(h>8wT%^3Mb@Kx^`;&p%L8k3Txr75htSPkJ;MRY! zM{2in`wIQrbyf90KYtOtHnqCtYwT^K_LAT=eJ)pIuWhYuF3rtfd*NPRTELqP?WVW5 z<9eo^Z9nq$(fP&SQu(Vb4hZ&rxbB$!(d}a7)h8A&#Vudm*eW?ye$g_QvVs=o?=0)9kZPkS2Zm@#6Y+q5EGSey%rfm6+DIm+`g5iw$WD z&bA+wxg43hQhjCd>&jyd?`uAMU-#4ZqSmxPms`Gbe{EW5VsZGQjFu`N*V@Rgg~3V( znfaa>Xc`9Uh;%u+|86SXa(m8|?;`g7C#TECB=DzOJTN%p`1Xs2)|&)Z+XtMl@5suB z&6xlB;Zp{4i$k2}J{Ytgx~S{w8u;*-)V7Cy`;6Niy<7|*vd0xPn%_D5FyQ!3uI~#z zY>1kf$iKh%lkdtkj?%5`_OP9i_0;>I^8fXQi0aU!!`yb$x&JM`a(BZ3mx@DKM;FQOvCNTS;<~lBW1*b|OT_OT-h83gUD;iixU^ke#U=jbu#A?W zjRsqwRm9qe4^HuC6N8&HW-ofTVbQ$}X)zO>y_Zyobp2`+ecWRGGn#L%}P<|0lsY)uY4D? zx_qwTF|)gj?3@$lpDid87hyfl7cOIS=fr=joFJht=lurV)3Z7@MCGpC;eMqk=);`z z&z_`(|Ff_-bW=u1^-00=6<-fO`t6pOan~Yz zB8;^T2-cdipOxreboj^<<39(owtijm{*LHsmiPPLaOg)Z{o}jOoV{#~MS887LgAbZ z%Jm22+>1FF&-W-jQt;a#V|3^2!VAW7u17B(?6nfMd630-OO`|9hVpaEd(YWggm{;Q zelP!aPvmZ=x8Osb)uPhpp0F3MxUx`4*0o)9YsEu}vx$p4G)&B7*gcacC$LA`tN3?$ zsmPeES)m^DqJ4dHT7bhs*>gH#6^Pj7Fmkvr-pSkUv~ zZTtEBhX-40^7*EQomjZgV#7BdcAFF1=Upjhw-VESKXoyv+uS-`Ec6E68 zki*?#;reG20$21o@$g=Y(2QSOai;O&#jJbkTt~MQOjw+@VD8s8<<@!9a(NrlBATv# z?zhZnGr0HboP+zVnuKFc@sc&shRo+bT6cMHK5O1*eWU2i^!;lul(SpueYxA{R&3@K z5|J-MpD2Fq4SnhYuL-pDhT}5$Ue`_+cT7;m@XhCl0=rozwcL?_Ihx+q{An z^Iz)^@6?p){%}C>TJdZ?cA5K@KbN_P2)jPYZDUK9v5hG_@oYiZik7IrhlQVe#eW`@ zG1KH^U7HkEfA6c>{exAHAKC7@FXHdzxN!3<8Ka-v>k7=;-A=h&OtkdbaY(9Lxm_gh z)cHBnxoy86SQY%U_q)p;%N5T<9)0r;-v6Y1c_8<**R!fi_G>l@$+@~re8^I6vAFzM zK%j|8SCC=Jjzge&!!vM7w-wVG^U3Bl7j9pS%~*bHk%b8JH&8Iwol(5>ozL~y!vn2C zl3}a6Emz!K_1MjJxtGk0x(DBr<{3Q+knL)N42~rdaWNxS}~mj6-e zJ!Km?y@H0X|3b{#`;-<*Y>-i(^MEzlf0O$w)5UGiduQ>sPfrf1Q)yFcpBP}HVbsMX zzT<%KyJrQ9tJd4Z-V4(Ac(3M4uIoox*FC$SxzLL3&O=|$PyO?FW*vUG5)>WM zZxZH(FX6~`k1<|l^Znn)y`++X+p595_z0G>Vx`6GLFV5T!;5o-HIOaoA8lP9t_VwK)8TFqRWyCZYk1lg*<^S2UtnTv% zyRG%XOq%>%9n7|?pWn7UEX`N6;raE~T5n#KwwK26?0E3t%)*5en)`&ON<7K0ICNP? zOm#`X6gfMCzZ2wcR2jWI+t_(1nB7?8evS0qHM=U-Lue%(DUy#aG8JpL+PvqpnprXYoxgO-|QV={pY? z%PVGr8nY1vZRT$hj^-?0`QEfNrsV7CM&><MR$$t8I=Fdlxts?vvzp2^CJdfM; zh@+~|Pj)>Ewc?B=CL+RNJlyRZ`8Te$e-3DxXVtaq&^#gOurp_6lr-g7%imcYp5yb6 zSv+dynT3lqG^DsJOCn5Pyu4z>zSVj`!0z`vtIjjCN35-Ret7nymCjuqNryTw#(}1$ zL|#c~Tv^3qo;Kr?HQ#L+HdQUIt*Z`jPdnVUS7wgeXW_r6w=BxvVQ9uDS76@m>E*mI zdplqLr@yKHC)huEAgjsiy1=DH`KRQynw8H2JUBJ9<|IS~irp#fdFG(qwkT#p^VKe1 zd6_1erdzJ}*|)Ab6lKr0CXBB*z*@NL2v2vxvLj90Yi~UZ==|ll@S^nx1^WYUHr78+ zv6zw|=KeLMQCjuLo7eT#Mtng_W^8B=O>YA=9Va;1tGxZxpO**rydE>k@T~!NL6f|7D%okT+ z!2VUGc*BmC~$ zWiqSEcC6fNCBppeisZwF#pdi=wHKeTDB1Dg!vRshXA7Pi6}_-nbpWo2|mpp z*J=&LvM1INYd2iX5p;D7EX??@=WoiI*zbva(ycP*Qn#+kzFvFKeA#>bw>4oABGRr- z4-;&yXKbk3tvS=#*)V`d#@eQ^CgCWkz1(DJE@Si1p_8lp-IKR3%o3`tu~_D0BAys>7W%(q~WF)dY1m9Xc%9&SqXQgV}nw)oI_i{=%1w zp14QszIcsadjW^W7J1tTF8kWIO6MkjEWZBXuJTmp=1`~I8zkilOxfS=78BVXI$!_Z z1Lns&Y;$aPZspf*{g%ic^JAIK0nu;I4)i^n$b4V+WyIajpQ;kxs)<<2+^wuFin~@V zFMLh(c$2#JMsxPH-J-2w6WEMjzkK;^!|am&Zu8dt9R_kDlYi&%7yq9*b^p%enME7E zGdvHqIDf-r#=O{5{$D0rTGYPY61c%XS}wvmhV>oDEn;g{f7s=%wPE>uE18F&dUeY! zbCFh!&_#x`_}v^#dWFU;3u-*ckhAU?V@ov*zt*u6l*CMKi2SvzO(%KbWKD=&Y$ z`|9ZrgIj!Q-!-Fo3=RJ=ww7h_#b|y!aI62;vkNm7Wn16PGOl@0Vrl!KI%W@OidM;h zU3Se1+c_85i!W3!Tm@~R%;OQm#FP;t=I#?*x52#Kud~-_?TigkipO358MOBSs^$=ijo-W)H1Ek-uikL_NKh@YVi<%l}@->l#~}?(fRT`BuEML-yyj$2vpH&^P_LEzj>-PoJFNb^c|H5^A{V!XVFv%)1JiFDHe1a1+_U#+XF-$j zn}>GHWPlWww@lDH5M;W(C{IHgP&v*2++3zl%7I2s~Y&9~$N|ap$XpfxA1URtH>+ z*8Z~e)H#iJb%&qtR<4-r&-<%(#_yIdzJ*IlMCJ)`^Ig&Gdt(1=!b;->8X8X`68T@B zJYdk?*Su)X6par}ms4w}7v1lx3zq3>Jha$iL)68@uYZ#HB-=X|EfBcerRje3&Dq2U z4+2(*O2=7rng1!ZSaRXr8g)kLZ&zME=(ty9v^rL_HSJ2vRV~Ymeu~h1!n5^j6cd<1%Jk?M{Xd7VKZKP&C8hMw-a| zxgx#aIX*DEA5%KO*`CHH>FN@wH`{rsOQZD9n=)2iJxK?+uNhC})vuU&SS@vtg+)P( z&sh!j&pl6XcX`^+PA?Df=(EP2PXd zuykoDq+u!g?%4&8z`1j4Yd$92e|ms>uWaPD?yBk{8@{*=?d&oSK!w|vBaasZT#;V4 z#ppoQy^UuR7gPlJ+&Fw>Ma}mQOCHE}o2yQk1e(d0TvyOI*U}`&ri-t<;sE2b?Z?uM z+Iy4YTEnL>mld>BuC9sX`Sa+)<<6k`+h+&R_&OCy$fy6fF=OGgxd(!B(HgObIJZkhEFHRXmYzYn9Jy&o;dg3`PLPdAFTIw zhrQ6Z66X((_<8H6_A>*Il^SYu9sP>QL1Ip+wvT@sqNbNB1a2FLlW+q%34gwH+*6FZ<=#rZd^g?xl@71eT~}>+DuO} zd@kWzR%O3FD}LP`>H7Ua^}$S!X9v27F#7c@`(%3SqKwHsP(xwO#djOrZbv0n?-xGm zcyQviE$zD!%D(N>&b|C2Or-VW`GVG|_Y!v6z;+kP4dX$rcw$;Le7 zF}Ij`_~DL(JFz=^~GUMq`@?Ows;DXMfpA)>j_rN-WYbtC;xy zOyXoG>+8;)jMkr&*Hqii=J!5c?JlS(m~gi~WXGYiGCLj{w4be7ID_xZ#k}w}W%sU_ zzFwzcW0Sa!ZFjTs&(ktn+)PDwmA&7v?hf}F?eB?vF_D?aa(d4)zqaz`+jY+C*#^&r z>wiAYx2=ArJ=^~vmvxw{bob)djcrc%*Sbc;*U0WD3bT23K)4`mLT2?c*=v4r&6b+VzZt4;AG|0u$Oxqe$HS{x7?~^_n}F4Poiz} z=8HX5^Hg2;-H~1MJW}>rWWmhld3q-ji;k`QpcHSITQTFXV(YvoU7tVKFqIXwDj)B( zRGC{S#Z~t2tfTc`>AX4iO_m!D|K0pVz=em7Zi3S^7|3q zXL*K>FVD;EvV4*4ef4DUZ;j)Jdz9NA%~*VmfByg7#Tyn} z*c#JTntJWwxrt$C5+?)&`b6*@St6lze%W%%kiM|3yUi>P$)5YruvT=J-4-G4qs;O% zF6Q!ANp~NcxLBg(uZ6J811|S32W5n~Zk;rDG?Ty8xN_m^$Su8TWwTYa~GMd!CsTlx5m-FrvKf-It>k` zn8etf`4Ma1JPXix7#K2R#+TE5R-e)u-_9}B)|7Q^X1?=~rT_H((xR-`5ZT#6!gdD9 zTfh9deJyL=t^L<0>a%-^SR4`!TfNEhg5KQ7>F@Zg)>z+SULAT*=E}NWr?mweq7G*5 zkF0#F^^vmy>e^2urZB+ircy7a4&%aemEHg^X@0|Gl zL19@cUsuth3zuKre)rYJ!eU18jlJ1*!A9vb8WtUplbf?x$mU@hU-y*8q{jjeo&W87 zBl9zq@6Wc!zi(^nyNk$%^+<;G+?J8jWOiMCj*0)1@R}K$Ei=MZ7Fir|*%|l*xiy4P| zfBogw(pO*Sz&}S*QSXU)@d^#KF1GR=hXv<-Flu-8aw}ZXyh1tr=<~)>_H0|ptLNI3 z7Q84pbnswnSaos073S7?va%81A97!-{bAVN%Urso-AXPZSvl;CC!glTM}Zp4xb90$ z>%03VarV{7a&~D~r;i6%{R&!h-9D;ib*^%LEB9eZOFMs6u|}W7iQa z^kc*JzC{aWd}tG&^MF^s*rFmRy%sb+V0;Z&?x~)KzJjTQM>IA+LLJ!hP4kK6bth^HgPTOwM2Zw_{0( z2IQ;8Sskds%33enGUhTD-SNzf#OK$+q}wKlcPOir+{Rx!(W& zeo#f_hdav-zB#0SwBW?{pBpOrW4cP;^G!;M5-cll%0I4ly*=#trRzqLad%`dasBP{ z+bFp-{!(Ck{=L+BN&og;^Vo3iu9=v1V7o}w_Emob;)p3ob z=d-iFUd)>$!nkfj*>tOz9em}_7VK_pPAWXc`Qg~cgI{Lfef{?Nu@C=ty*kY}Z^OI8 z+G}h#XY%dRp4R-X(Rk0v;}>79%R1edUw1FIdAcyy)Ds^XO26+oGvO{5ntB27e1)CSsZS{^yYy(-@VC?0$6Sw7Mzy6s4anSYIeD1iTMI6c4M8x+e*g687`L7aG5Bu>3r$d7aoc z%aU_h8hIzrm+ecM_2hJ6A-G~VsbL|!TJ-5d8MSMxZafXxqNXb{(bPkA%WJ!YwSlK) zw%Eyt>^gSVApY^p=CT9ZEi-C8G``Ki^>aw|hDtJA0q&-?dU}vvdy&>TR%m5xMzT{C)?MjMjOkuXkK{ z&waOi_I;7HlUZA@on*_Ndj`Bz!RBc|1pCtkr6vbu^`0%58p0>++8PPqFc2j)u6vgDDG6WO)@j=}e`S&63)nu(pBY!sLw z8`A0VuSxjMS;gQ*3pF&j)?Bqa81=T@^279VTf^2L1obI6uWq(!1^n`6JO>MNc(^}EflpkD{pT>Z}X)c0cW z)JCO^ld5(Ue9_)7)| z^l8C^nKP$K9C?s9SHH>fMUCT?n8$U`RAdtP-EYY3anoOXL2~JVsY3jBPON{nz&PK1 z=c3BGH-e=e##PGkcM8_QDIX7aG2{xZLSD*yp?NMdklX-%m3i zZBw^NynC=FIU&Em==rI`5k5Bz#m+?9&fb^5d5`9?tV>M-8AE`mtBtCmZAMYFd=KbBc^^|XMhK3E-+M`7h z9~#xGq8C>%{fmp=zh-gyAvw7XeOHtDW-VoB4R?*29Mvpe@nFN*#6=z&W^WSa@uU4ByUO=``Mc9q=Ko%QaQkUF@xr^G z1%Cq)+0AEcezLc&BDmspbm@l2KP#oh=E+o^iZ3u>FFR?n`ugFE(TVKhHx8HO)a_Z< z>^$)S`?)!l%4e!R+J3HkwM(-oV+zNIM=#LRE)G2vap)@k#d_L;MPO>w*! zxZ+3y^O||K&klH1Kfm|9|F+GP4ujpje-FskC07Kq+3pPV5qZRFUa{FvtT=$@pVl4c zPCo03gL3WVZhJKukGcpJ@@%NubV%~tvw(ttPPf%hR+On%JlJriv8wFM+LPk@lr=eikXkCtPd;L}aXEG!>7#{WECy^Kx8R<`=Peb5<8;IKcZ zI3PY>gtHGc6509Edhwz~S{iD163+5R z&yP*dQrehf9(wd%mAMiu?fUGN?g7?z&Txwv&FjQN-H#tUI9W<;O`YVk19=ORGWhxA zzCBToSi9lp1);7sCD4$7;RC-q^Y+F?i)Vaj5|2sfjh);a`&7s|{E8gk6Y+@acf}3| z?9O~%@S)B2`VPT9iwOG+|1asW`srRLK7Kp=+&XN>qW{M(?8wX0FqtJOH|4{JmdTbn zi-N95v%A)IFt-0Z@a#ai^ZWJp_sRsYMED;OTN7qoyyNY*N_%dbhh9EK0jpPAmb@y_ z$k=|asW@oSVeVR!_FkvbSL-^$bdTStu$Yj4-9UR%P~eKWtk+(o?pU~8xjQy&_V?@s z78~634|Uhf4t%rf*2Jyyi_UF`5=`)4t=qOX>_Tu&Xv*_;<>QQ}Kc0A4@$7JO)BXAj zT*XSNPi9sv345|h)47dOkEd$HFtV+&hXUGfGi_Q2|jM-gWd9~uN+;M#hd-793roj;(l z!>QGO8=BsK?~*x|T0G;$UdtR2;iHW&+aEk+JT86McGvwWJ&P6xOksZ}t}?CN{O4Vn zyxr9*ug>q^F3MNtBAa;h!?{=Hs)EkW3ulO}`OaXr=6URK87WmG(9(E;#YwY{1e|f) z9Ada)Zc)hjOZq1-Yh}A~Ein-hytkpON^H){n<;!#HMqO@(j$^T9;ljUdNwgQ-D%;* z#?6Nn56%0d&@SUKQ7Q1yLGxGVt)n-5TfWOOV}9=97Zxlt-ka}^*jzQ^@Uh8}(Q;lD z5yo1FrMSBnX6SHn^&V{!Uc07X*|9V}*49^7HZ$J(`}4b%T!qkL<91&z+empYpBur? z+bZ9Gk#=6{7yKf#CE~ob_L+0>{LeN>tZj2L3|zD_-FVG?>+OKppS6|YD2M=61uNIux{@5vhyH?iT+pCmUYPT^OtN-t8p0`p=q_^zU!rUVnYE*fF|fcx6|J2!qd#qX&vpBulfpwaxVlHHTrYyQ=DT1{4QcT(V}>ojdte*J&G zNph^*%EitPR03`-eJAY^p!)vJvaEuI`wxlgr;1Rwzp~Pr_chX}*=+JVc0RlmwBLoNp#7`e-xlFFt1pySg{v(5t}dVRq4npw*EM+;viCYC9Tcy# z5ng_5$@41Dwj&L_p4E% ze0S!HNN##})r#}(F6o#T@*4_mUCdty^D7rx%x3v~eWibk{G0F)&MgLuT<&R~F?j!` zvc7Gz^pDg(Tq-}#&D$LJ+dg9bn=`zVuNO@`k~EjoPJTOg{I9)jtKMf6xn4c-cF{pj zGmFDVd0VG>Eh^p}VX%FV^#e|Qa~(Gyq1i5N`Z0Ff82lx5E+wf5-FbM1hgt7SxOqsF z8E3Qf8TCcxhs6I~{g9D(?wER#{(+B=s~@=Rzkb1pO*zn`qqlkryZNup(rj&BPT@bB z#cLk={!6#8;O1N#yyiAz`ekO*Sjnm*0-h<)atacUH1$f>wH@p5U6kyzAx!cCr@DC# z&)g%e?0+8o{MaGU$D@4ll1EC#Vb;S<+J8^;TCH_nbkOKaf9T~u6@T6>e)hob<)j$} z&En}BAND@n`OrXV@{SKJ@;!;HH+Z!l%~3JxWEJ0WU}{Zy^TZb_zm8iUXb$D6m}sAO zVV6-SvwFm8qaTSmMsHlWP2Vs{=Sb+^NhogiQ=brUmG#<9o{03%cQ$0MRN2zScE3Nq zLB3zywM|&!;2d?M^wzDXIMaXZaD2T_Wy?EW(DZa%p2U`nbDaDUuj4*E3%nR!DE@lU zso$z)ogWfi+VySjevmlmXKS~0FPpoYjKxO_>C}pu?zcP^C7dZ(dW=o_&z%c19#49q za)deV!;)if+FZR=7tYQ4(3ra8%8WZ7B94Za^4)4@$d+fDV-Uh)nX)RxY4xpw^fng$ zUuSu(e3dsoWR~A?Nc>%1#TJ8fo;hJn%Aw*jX5~*&6pJ!hbcoe#)v~rDtF}pBN;v18 zwCNqYz8g!$Wc@sg_|tkSC1!89-+u`cPXDxT^3DrF9umbSJ1*NNT(!BoV3j$i9cLDM z*wshQ|8_mRbjWY&fjQiL5^{4+{LY-_vuLu$h8|I~8wNb)CeN;P@a0z+BpnofTy}Vo zYvIUR%{IT~hVg`wD}+MNn`%_ned!Qw4il{EQDrJ#Dd;xoePdv4b;t%PCRS zXP?hsO?fak&fZq~LyNewT+NQSHfcTGsYjY`?i90|$L8J>+%_%aVn^4)gEd*^)@wp% zNLv-V2u%*nsW`}d@63if2X^(8em~H`=bm<=KL(^<%x!f^YB|^%KAF=j>r7ro$WM^E5S?d_Pw6fM2t>}X0Yd1Z4gaqeF@a=iF2cOa`c8U)4LmXIGG$*O#INAT65+?YQ-Aw?*{rwZweOKACNp; z&xX4K9(6J6~{!il07t3{ae4S>nBJuF#+O7{xXL)~T&zyYZXOG(9)FVyuf1TST zW(Yg`d}uOO7K(ZBw9SjRwPoUtf@b+UC&SG%=FUn!D0@#rt>)pQwszzC&LyF;7D;mo zlSga}1FZ&VMx{QkWkzj?;oxknm#uVwQ6IOy0WGh_1S z^OAiZ%Bwb~MWlbfv*5C|ic}{X|BZyJH|{LBd{O4lqt}}zw@QV#DIe2z4!qiVZ|T#8R!(J1z9q1!dt#JlFJ?I+LAOIY3|BpYWi-_Ay|bk=EJ>2&plt5QR*^46Vs zke(RDS{(I6PVL}SsUvQ7yBBWEQ~fbtJNwX|-nTy=v>NVkTpjQzLFdEYp3eu~8|#^G zacKIS-&tF+;hWuo)_;%Nyp$#y2pO5JI=A86t6hl!p(=)vt_|Wb4-fZT2F|U*dr~B3PV-xIh}rDitAo9g zlccS5XR}!ER<Uq?mPz?$0@$`D< zP5>o2(|7&J3+zt|7~h|;Q)S;?y|4#f{~LMl)n4lROc<6#Zz_f4;QEHtJEEzYMlNaGoJ9c&27=77aI;X3-ZtV zP|AEhuw3Dwxn6jSyifi0?W*&6Y%djgz9`&$KyqEd!@5no7ZzrRIz6|ylWW|pSKp(WslotOY?>L3yH^lc>K#l{``TL;gZYZ z9-9eu?)5KN==Sw>zG;cM$-6`or~3;8UT=QNsQ=Etj%}?s=h~#h{d=FU2}=mA6Vonq zbrq8I+wk{e9pkmnz0ceJ-JM;XwBa3}e%RE9XIIsm%3L$`u(@{j=9?2Q&1Rhc>pv+m zJ&LK5$$dxCiw*BO=S!Cy)e(}ux4~}d#D|ya?|jHu_)6HKn_2zGp_$PKr#_SjzoKyQ z0iXXlr9<7f&lWV#V_n(CeR{?IfNysDYWAhbt^@k^t%bSG%dbdr_oTl*u~yJKu`t|Qcaq%GB=XUB)XKhn%?vJ#f-B+V#j(vLCt;TNT9=poU`Qf_g` zrg`pJ-q~WkJ8W)A|4GQoVk~p+meA^CDc@n>l=Gp$dGXUp4}xdheb9LEfoI+B#EBN{{O2Z*iz@1WWxP+$xK5b&ciL%dmbFzeDqbD zCwK9Sxv|f=&3{akH(KMs{W@l%ps?Q;>6jP)CAB(z79He$x2H(@L&I6#$P-!GtY+W0$*RPpLn96o!ff)1Fm#)lPE6ETH%ieyXTty z*f9Ad@2%)ne!I56FZlELy4su@+f|)U-4WyGd|alK{CHK~hO(;Nj{8gQsEFx2ZWFJ0 z@Vd>LJM`I!my&1hH`P9Js-LPD9wpUzu7iW$;(+kEyofC-LelF#B(^cVzWS*6a578h zqU&Ys&%Rro>#e)r{wZ{?mztr(#)q!;&E|9N6lAPa(PR7AeDkE#12yN~EhR!f`>Qz% zQrkGPLof683VQLloiIpjHg9{#wsz5k3tD1-5`O6(*f;sl(yfuwooCi%hq1X~3;*M0H7F(Yy3!ig(Xtk^y#_(^{C`nM}F@qtcR1GkLi#)P#> zr#3{ko?H;h60zFghCzvW$ukR;kgv_pkLSe{lpRhxqEa}c_@LEl9{a2>n=R&qJ>BA` zBKVL+-eU59NiN;FF3a0^_<4lq6_g!b)Fq3OVrRRw@voUXub{PC+A37KlhMB-D7Z=7IL18Zn&#m~$v~!< zhaCBmUPRr&vt*jUG@G;w7{b~;r9>I6=^BMSg z4)S)lxaIIj+IHTeEfX*rt~PGPA=)3f>!C(9eEOGDm{Hx z>1{Zdb$Ir_H*M}sbEO(Bg=8cZ{hmzbQQmycb5THPbFUzG-WPWB6<(5NrYS!R79HlF zXXNwN_WI!-6|p%h3J=VbtZQp}I5DF~puES3hvzo0aP!0n6{$TBS+hfr@=kBz*>x!5 zJ6BIf!IJ-{HVC!3J8gf){aJUO?1QevlN(B_-uyLl>$rV9{lMJ1^^W_kt=*Ci3O?K1 zQu@HTzUc5#&qpjb9(eFd`pthB-dvYzCf<3dgDc!k{g+MJ*u^|Ubasnh_JL+WBcGmwyxr5hoL<*_ zNNr=aPy2AWW)J`J><^itg4bT!T3oijyWq07N=cRQwU?$l4j$!=Dpxf$kf}H%dCk=N z&IZF0A@+aIWE!QOw}mDjH)!%(J|SSL^t%tO>c%?eI#Ftzb6X>}FX4&bvFo9s`!6BG z1I&GA1Rl05JRwkOHP`68Dd*CU_W4@$gojXpj=IT4O_) z;GGMZ6B7@}&U-T_Vs%8`jV(Mv(^r}QdGS0at7SedX%=oY@{>-XdrOkQo=eGFuhnn2IB`>q`BCqfD81=xF3lF*N-*IvNodwxJ z#XLgn*R*)!9|Fi*Db+yM8 z`*~jvwkaOuJzRKL;i89+kZ9cei(GqVK1|=y^S~~Xt%tGii@!y3jnNq=rAaH~XWx)0 zd~l5CFz?(|dYo&s4n|#V*t+Uj+u07MM-wJIJS156q*i{~wX>mnzSMT`zWyQ=V^C(E zaksH0(V`&PrIr2I8@9ElJu*T??Rq#qEUn+|_&Q0w{D{PZmWKze&T1dllbB)w8=c?&Vp6SoS}CgvOl+*7>4<*fE3k9vZ+4+AQm@GL>x|`E8}2R$)e+))@@*_@h1+ z;+;J4I|72+wAqTACmIOJ`fb=JtI527@4mCV(_2>68N7~@^eZ^{z*J|k>g0@qMr*d_ zS*RZ`m+e|B&ptg0}s$UUlY4s7Q7GyjpOS zd)wi5t znV0+pO^bO9Kkt3yd*~le7;j$u|I-ES^=*#bSu+Y6-^=%Jwe$P+?9)WWm(la*9{IoX z-{&>V&t|8FpZTu1W=G?DsXbng4)E3)tUe|9&M2ieuF~Vf%$u17iANfG>x!KhFP;42 zL&MjXhg-hRJXLg9X`@HZj|1(3()&J?98PB8-23{M+MEY`={rsaXz98gdcgHr?uJ*v z^7rLEc{Ryq=1J<^OjiCUB^H$@|o#zg@an{!Yq_MzM9bX6|^J0xDDPT-qkB z)#-8Q0h4)NFkJIsT;3re>`z3vCcF=K4z!gBIzFO z6%#XJ`1$AANX1kXi=F3f-|V3xw|&X4k9-A<#@6;JH(IB8I=wfSz43rMJAJjZmF}$M zg83#7PA;x(`zddyzoYTKRfNJpeUoiJ3j3QM)@;8Tx{F7BK;l}ZosQoPVjRsAW_9F9l-~7}6iSMY}#G`*P$RlOPp?KcyE;|mNI{15{ zP5&*$18nX)l5QwoyyTg(E>Mz7r}3aRafYF|Jm${ z7{{NFC3d`;%wu>-$n%Bd%SP_)(qFIl-!5(bXtBfNMY$*Mwftl@n};vkj?S5W%K42e_ot7n&Pmiu2bkCllnXLqms@= z%%OYzk`777eQ5nIe_rU$f%g~ov~f%SF<8@|z2N@$g=#|0E{*&#k`o_%`)HLXu_Z>R zTafjhgnG@1eDj#HRg)@I?j2vYidiPnp8IimM(IR@iUV&SZ+iIeY{X(|Hf5tuPhaUc z3BH;W;pR3`H&%)n*jQYWf9S%i=6qU3t&Nb%U@ekC0?sL1G(sIL}SqTkXD!44=2K_umzrC($Oo z<(!YxbK3{(nBvt1Mx{%+=u z|0VqAMZJ;9+Sz;aS_N6x-T7smBe6?bDl}I}Hf}?h;^89!cQ?#9?2(f-3sm`u_vKy4 zEV^eq!J}YN{o$E)>lcbgrCfN)d&58^Vzpe}gRTSQkrlfboT?FUh!+0`sN`*y)K7uJmj0-|NKwZueVF;Zk8!`@`ld{y~1LD z<9nj&HBVmcCT3g3ny6gWPE64KBIMp*E)c? zbFRe3hle_tvPJLmx+zW0xKi@)9FGxS+K#*nR=r0KeR#mj|6>FHRbGDP=e10o4DPG? z3Yyw^)Qy!UUU=!d!{~5R@4x45Z3`z{$c(Glz}2k&_cm|0Wy+0$CjL1OyA^jo3=}QC z2bxxLZWsRR+qSyaK&Vwv_?n$d#Pa)hFJyYEuoa(JQEFdt@Hnq@vs=bp*?nK!BfhWp zY!jC_DEe7RnQ2Z$YK!seHF+8mTAZ=pd9VHC-*GWNPhyLR&}2)qJr7v(?+NDSJ+OK{ z?+e@9XH7qK9_H>yy5bkN?`w4A^WIy(IX_DutbW*g@lL_MmS-LPT82v+5)TUI87;|Q zpDw9l)X6NK)={vue)mC-5Fy^hJhFNpl0+}^N;j{vD`?bLPN}&PkaD8Y(%=b4x`pAQ z!&bAOv8~-aamD(dTEPlnX z`WQF=ugN@ni_dO+w=Oi{f#tic9Pt)A9@grvs(LY-iQO;0zP3Q^y|pEm?&Ox*w!06G z&5?cgMctg|*$x%4V?6n8Ckj@4-1RWYLuHGW+ZhIZi=fH#pZQprDovgNN^~nVcO6^- z>Y|$2JY?11vCDC}v4>4oQ+PrfmwVXO)QHX&w+vBGPaq+=?I|ebNSrB5SnKpx`dprc z1XCxs|Bpc7wzZoxjozH-@Ni1s{Ltrr)7DiF+2;BwB%UdJ*!J<@+<&jwVkgf$vg8$; ze%@b+uhsiR?<}Y_5c*|yxJ~}=-^ao;4yIU443+3~naY1|P12#(KPAlfA5}KCd|P;6 zt`y&%hq{NK{+>A5Qt$N~cDwj`;rLHSdHV(L6vd^;>&sbpO05yeFL^$h0U z><-PHwMd#RG*zg(r6O5G{?mEh>8rFj*S?zl`D3ieYRSGY@jUt}Jnb%Nq5SL4R3;vt zaQA|Tj?mmy);1BLt?GYPKQuT58pipvLa>kX@HE9VA-6>bSl5NzO`LnQq ze<5{QORreuN8*AunG?V5o_H*p;IRQT;uOwvnAgo)Wnrn>j^s5T64Dn-tLd&vOpN%D z*2ed`?91xL`{{Cd?5?j(EQ-XK&wY`X>?-q9z9%2OaGBHt?$6cdXQ!;_Jfb+!ejT%3 z&xDPW;`1`L*a*!PeB`*>aTWG|Q0FR7N$!n|h)`ZHM zOXx~nl(_hSQGZ5gWWiyjK+l{ki4Tcv&H6TX7L*qGZgWUF95prKdh>f{W1+b%VILFb z_Wn}eb7w=u^sE~yOlvk9{V3}F$J5UeTK0F>yMs|jTS~~LIuxI@sO#3Jx;tMT7`U4a>#Dq1xOb3>b@jpNJ?|=Pp zD&y2sX+HWsQ5XT-xk;t)~o+ZfU(vC#Tmb@8cKjKQ!^5-r>tu)}2i3Gve>> zWBY8sB)a6VQlLl9jfB5hKM(fTm2GMj$oRScc)g7MKJjazc?C=V?>x9dYeI&Kn9YiZ z2PRAImKNhYyVEe|#{r`lo{PNwQW35_1x?(_OlQ`Y&%Q3un}6C~=xy@qg7hN|peb(AZ2aI%NWvE%9og!?ws&3|fYQoDS<)Q_@1I)cxlpL{*^ z>)V%N=l@YU6KC{Pd{}0GfW6P?!|EWp!hgk}?I>K~7CR4SXsY};_f8~!hLpQXzEO{h z(&PZ%M@;NHCiUk9@by8Lz!}BpNFn zWY_!9THof*UA*pq3};_Ki*e=s_D~NIA<=aO$y3GONvx7q(``I*lp%kg`ZcMXg6WCo zQEZ+0ec`Dyid@I<#wmYC>~BE+rtC49%hi@bBS_&XWx zD~ys3&6Zpy&8KUWAv)(BZ$YE-o7Fp_TonRWJUmn*?rCgOn|{3f)6?}!*@Rk;wDtbu zGyk<*+N#qn$>4c|x^l{c%cpkT*ZcF-u z7wkVQczBwksvC>YOhNH=ADVd&mw+dEmhsxp*nEny`Mq`%P9=k5i`i=I5sYCbGk#qY$-+d@*_S2p)<4Qo{+US~{ht~1rFXx60l<5bqnSQuRaV z^?`|kl73%)`+aKywKBxbcsTRE_?z=YnRRwzNlLS2NyN3l2fsI|HgMlxkGl#_v`VirTKJc9{KAwh1I_2 z%m(H?sW&E0b5=Sid+tiWL#El%TFO$Ki`AN?WghzVp66|z=9^@sbf8;OuV$s<&WDCg zd+it>HwxE0Y`U0jA)2m`s3LY}=E4KbHD%4K@>Im`JUq+6Q`P^)Ofqjlt5*J#y$5-h z_v;>H<;z~E<~;W{ zMyZH(GUe|$)c&XNuxg@;T<6c@nl2Rws={-VJrpP3P|@mSuD6~&yQlZx(>Bj;A!)e} z2RGRDRh>VR-BIPAGfCq^)7N|F+tl~mS+M`9`e8-IeS0P=A8zjF*>nHKj-;Sdd-#PD zfB#sy|L@0$eO&iqx0reK=x>xf`2KU3^pDgxCgw6xx2B(X*#G_2hIPN#rH`pOzmqU& zx?W{^aPo70_Be@M(qCpho3z75FX>ABIfEY8^-uP;ExKOS?(%TrwnKNq;v1w*dCW6J zn~x;)@%cymt=gNI_dwMBs!ad${-=*;-Du}d&nj^?m3wN%xwm}JL&vMa^R8UDv%y10 z=+|qxkh9f|n^k^Xe4n29=PFb3bDcx1eg$nmyM@K>T)1)4GwA^LwcYNI&Ytr#kBQ>r z+`GAXBkM2mIWN9n&Y5{cEzm<}#`oB?CTW?w7j`bv9v@X&cs|6;rlMv-V$u8icQ))S&1U&;9G8CBdO_&#ElhvwX00yx zeO^T?=E2FeHy<#ogF5x?vO7xiEiT0;-i`mERi-x4Q$&a@{Fii2LE+&Ca!)2+sQuh3 z{+Iop{O$7vD`y=^6xBX3QBc&cV9G<0C?U?|bG)zPJ{+9;?{%Bwqe(L)jQ2cb_$>GP z+vXirYtlr`4~d`aS+U{X{kl8@p;ni6W*dXNic9nFZpe68RWY;r5}){vLu}@fagXPP zDqG!ozdq@(xz*pzwfzHHuXxk2B*O~%tjh*J-=d}PMLT?;3@Q0Z}L`?~H{ z^VhhCg@+fVPQLM>rE>iTwI2rq+k_+ziUteqNwDqni+FFQYaTME@yHJz?=`FB_ZZ5V z%S4$xe>!ohWp=_jUiVMYY_-bUB|F;^56=C^#s6bh;-w-ForpGO{~w3W^7f1QU1qX* zz>z;=*7EtSq4V@@gxKyQRN$xpe;g*kiE1^X-Az&n>R=wu`Cit)F$YYU&xk z&$YL2E#rx;uiZD<16))e+Pvsp+o|Mf6Ak3#+3xJP9=!jZdA%vm9I1o%W9RT*d%c1A zb!qt2#G2)sd$coBDh{#66}0Y_?s@Jz*G1Xz!Qs#C%=Yshr%0wL9F#FW#OwE=g*zv2 zg@rb!vf%^2`X+XnyBjhzRm|FWD92fHN~OPihNPuU?M^yk5ck9-ncJl2Np>Jud=Caz67U53oyR8s+wnEw_S=}H_dMYH z&m-)tw(%j8yv2d()q9_|xj(x7T8L@RgA;T3&q=Vg32}9LFPfCG;h=Ed8G*YOG9^{M zWF;IFc5WB{`HXGtZ4Vi@H~ov}HO5uc+3aPTCmPPJ!p9jl5fsnrl0lDtK319NDG~F4 zEBw=GUN_!}F73iL1|=0qFY+SRe4cRQL(|q(Jn_GlOUwD4vt}2PzP5{dPJ;Q9p2P_n zA6m6_79Tv$8x^j+@cCJZuWKqzEiS$P9U#={y6AwQS;b*tzr2VoDMIXaA6nJ_B&=V! z%4^j+!F2^q+%XScx1HK$vS^|~#RdC^oZ{v>QDUGOrbE1S8%`ehoN~|i=lMT=g`M0r z557J1FFPFmv~Kp1lq1dOk6RxScP?yR^++cw!KFc2`3UE?%Q-VcZG@(}w6L#d6WjCf zWt+3N^2fJ#G#Q@>hujVOZ&<4CIq9*7h|BsTjLbWa9QiH3()-YS#p=*S8~9lrE?Mq$ zzgE0reqx1Rn^NIzJ?`|c?Ba8_FU;yRl>75Y{Qi!ITX^rz_;yYDzTLhbo4T5W?-f^U zo~9Kj$B5efe#l%#H;6Pp(km zs{7b0oqW4(o$51#!sGJW%6}i+5q{CXQ?c-2SAG8M{*s4HpUpzvFW-Dbx$wb{qyO4> zSKVa0zi^vGvZu*_`$M0)quMTfcyv=srpnBRp`)`f*HuZb>$~CG* zwb${_Kk{_NydT@<3i<7~yta?`rcQom(llB7XBjN{b?b|AnwK|6s*2Us{ZU;VVewd> zCw}8Pk1O)qh0DKl%kEy+mn}VQ+KZ15ANPMQv?x!nd3b0-f3){hk9FeWeV<<(;g`ED zke?OTX_2mL^Rd15)@#u=<8y0-o@*99;GX~E+s?}EikX!vk9^M^IQo3aqgT48Z?zr& z*Dv?6B;vz{d_9@pkM6bgADmWny}Fk@vhN<7KePGJ>0k3uo9Fx5r_)wEyYR7@{oDUejcn;z(=-kD z3Tyr_e;uj+=b2wqC7t+qCechXyr2einYq{Gi~dgOcX%2{+r;sR|wbxbZ{#+tpPD z*9@*a>N63#s;>Unz4l?aZSLWczABYz#TO3E|LuPJY3J?*Vr}Y{&3A;3eqH#W%Q$bH zc(U}a#a5mb`rCWwm(G4%J>#=<+xL>RtI7K>{werZX!{|#Wee}eZ3f3OejF9PF2B9P z{737;yZfhAdZ=`E8pm1KnI}unn)c%2R|)%f?a5z`O;7&8>AZjI9-%^?vKWa)|4yvW zt=M{GhHrnH^|^`@-*aa~EjoTkvYuz#7mEVk!xmdrIwPJR@!b1hP29GHSu2IkmPy>0 zJ-h5tyl!3l>9{B^eZ_g&H6_i;C`XTMJ1ht{>5YHwVvkGm~U9(U|V zUGb{>js7){x$_T~XLC9qVogtOTlk<@dX=R~C%gWiN1d|;FPW8`oALER@`H%-L*9Gy z4^qmtB^eP(W1Dl^LpjxN6X}nt&7{1=)u#eIkE7~>gUIwH|{r> zqkeeO4oSH=bze&#=-6*xn2{-T&-{z9`JBSzrP6KFqLUtR>(@Nk!S&1_rd_P<^%4Gk zAG-68ZQ=D?5fj=X+k@{CnX`awCMcIosAa-}~@$b-iT#j+TXK z`?ckT`hTwy-v4frSYP&?TWt%UPM+~j-?;Dp`-H>$b#Djp9xmP$Z}Lodzs?+sozgiw zW<1`?8+uyz zbEuS_W$ZP%!#MLevwg**a_MPeZDRi1{Ca)Agsa0N&Kqo5_jE!>vfks=_hK^sYpO-> zZr_mj;^Z#*hSXqsy1ttdQQ(-pZnv?rET)ll~*MD^Y5M~^E6(< zZCZs2mmVnC`c`b@JzHj>snt**yY^03U3H}Q@vje$p1r!TE%C!GSu@#X`V4!!$3H(Ee%}9F zw(aw!BCk6?4oIs1d9;Vu*L&iNV=)zvI_>9g$=$)H%M*TPOXQ= zqD@@grgqwGvzn+kdw(C1jjwnhz24xC=jkaOk#RdLba}lkCJqL zr1eyV`QHvuX>&0>)-G>rRCo2dnMr4`(zTm~Yd#&iT()al;!gRF$od~Y3u`6$Y_7aF zxRPnj(`m5pNAUL4`ObUW9$IdV5fVT5;~1~{v3;ClPKbcuW6NuDM#1;=^$|KuIM5~Mn9b-je$ntOb6 z4qxzVbANP5_I|~KGap(G?!IpN_QcJJdpWuCjTp7+}nH>#*DuD#6vwbNfYCh>*% z^9eh?zOZ;HcueR1wuKpyLZbdM{#zt}|9(GhTVh7%kt5>&HoP^`JC-Z)aeHB`(!Sh^ zkE`YG6x?omcu&{UC+6cJ$@(2FiE{P2mgkOs-mZH2SHUNqJB2m&^R_)SfBh%4^ZE22 zpti#QzW$(7W=G03CQ7_p>?ad05nUvEuBcq%+R+OtdEeK__uY@zm-#;ZyqQf@T<4C* z6(0=RTb5_X+-rO46QyeB{`KqQ_XR#`HMeFf^W0B;ZzHrlwDiyHuQ}>!`FNmKdYSIm+ePOKZ;FeTh5unqznyDj<9_iHC^~H!VihFFKs>? zQh%3dp|9(#lvevV<;;W3{C-}SXmr=H+Z|91L`+}A9= zTxq#B)sIr25Amws`M8m{d7-CIF~{Mc{~y}ZCEgugbLLZDX?l$z+x=JH%~aYnC-xc^ ztf_v;{@p-j|MWiHshf1Ke`wB!r1z;3KMo3u@9DX5XaaxdKkp~p>N3yU*^mERnA5!Z zMoGwY=l&l3ufpnIb2TEpr&fGukKa>pxK?^ssjbjqox>JiD?T1dmbSB%$Xb*1NZ4Ga z{GB$>*8frayp`T1ikH>@l>PDh>SxKe=Lr)&O!s@Q^TX`f5l;Kt6SkUkHd(K;cz9jr zx!I95?MDvr|C7kM`90+Sp%3@2m3kb};Xe1{=+RZ@b63pqeRNQEKaYH#MZR;+Ywt(f z*M2v=#rL(vzfG{M%u}Ruw&KGjafQden}yi=byhV0d>H=sm~U;4^K+iV2PFM%ul4^< zwBDQeV!F%pj?fs3mHv0`{9c~>p{#O_kn^L1+_(Ld=jrV?=$ZX+qQ{S;Ganx7ue#e7 z?mf99GVRXC*7iSpd4o?YZY+?nJ7d6q%$(=*6b~UzahcUCEcOLw-@agLZYv}lU-8hO zuA(JTHtNmV(nsR)J0413&pi<}$;I?^qrA+q@PGH(mZ^I4*jn|4KCImyaY*2QTIiWi zy9=Mi0V3WNVtApX5H8C7QF$I_msl|RfXa#9{0r` z+s5ncE%9e})Y%!&7vB5WnJ#h8`}BkzADe~iHr{X9UM>Ak>v5j1QeFJs4;LOE3a-sN zJjrAKkn*nbY9}pJYSOQrQIvh9Zuik_iFd#E zq1k`mACwG_vC*B9yCN#ClfC`n(Zr0NOzBVh zo28sn3M@D*>VN0Mt+sQKs%&*1uOvTc{cTng^+kidZo~HVFJl5+mA+ zH!Ek{6=L_Z&kNLl_1!E)clnWS;k;)B5A%-fpouRM^k4A-T3}5-s?RyO^);CbvhR%^=t|xp7o!;)wcAgOi@wqsT~ibkDIP- zRkRoKT=cNXdf$fw&&?|4>0FED3*Xx2|K|bs{zQ$BZ^BgMVhU|e`ri3?qwV3Y3U8k| z9}a~D@`s;P=lOc&lb6c%4XuykC)X4dp53+mVd2?RLWR9rJ07km|0%@wzw6aRzRvTa zC+^kqh0ke?-Mmkk$G@mdU+Ct}p9fjRV?N$!YhUQKN9Z7L`JIoud7Zr{|Cn?4>_gjv z!yi}g*XPNfRH6Dw-;nQ3`I5JXMCacYNdK<-(W<j`BR^JCV8e%$)zb)DJ`t(PG?GGm#91G8B zZ(6-M=GgwwsTU7_IBL1V>xiXBh1KGiABWYQ?fIfVO@DE`Gk?y%AAaoTe%xwHirz2O z?{Y|g-HwNQc)h(R{@7qSr+x4451B{A+CE=;JaNaz&btfG8SFdfkSaav$b=U{=JQ@j z>VK7Ldwn74%GP9G8a%+>p53SJ>?;@V7PLxnPx8t$h=iv{Wu^w-C)U%MIoJ8XBy>g z{r;SKo}2M(gUT)!3AV$n%d76UsTO+I2yJt=`_Sya=gpy?X>wX?E-&gpnaMkSzTX{O0xYxOH9A15ITVhtF$~3ucF}7FiYaWTVRb{>u0y$dz z`Tfe$xwiw>7#}lv{pX?k-Lk4Z%BPKa{2$e*Y;q|GU2pMD{+gMIEnnw4_YVQ*D;{m( z_4e-hX!zoz+$(XrkCJWXVG~tyR{ngr=y-2(=yfw2q4h_)t>5iPSnYM+%*QX;#6Rij z(dCx9b0pj)Zk>-z`!a(^{NI(cE9bu|m#DflNp+JPcX-T)~{f-<3QyS-Q(*`U)Za zx(|oe*W7MP<1;+n_xA3Orw?EJI8x2`F}7Glzt z$5px5hTS||ASYBcr|?Yb8|hC)j~mbD&WKvo@}BKiqkZYI*9SCtuCF|hHN4QF5KXUSAZeyAuEBQMU9fx%n=~g^!oNlRdu5TjE{B^u3k$t88w(U;DdNz9#4J zYWK-6EP9ytR~XH?y`fGw*R$rvs!I!x_x}C2%P!I5=H!UUD}Eg1U-#o^s`RXB?nx4h zA9YH8{`mMkhx5ML_48GQ{4D;J?r4j**|snejgPl;$ZnVao-V!1<;#!Ulau84eCW3SZ~tAgt?IAP)v_OV{kIvh z_2sXYxGO8CnSXfoQV)|k1vcgPe*~{jtl-lHOW<#{afGylABQXs-KlU)zcY z8+n7f-+q|4BQgKevF^v6rL7Oo3dJt^BlP+}sBI7b;qAO1r+o1^5`5|V!l{Y&}ytbp+ks^Ih+@<(^V3 z{b*mMCr>A{e_NaQyW1ZOZxkuN%WR%6uYc@EYSPWNi>i8^jsAbk({^*sYpfJI zQb>HA#Y6Vrr<_NPySAioUO!v+ zc*pr)1;wmUw+*)VbpF`4=<$7-psnWnnZFzSI6Y;SU+3wY`yMQ*d+=zD#rA`R_a_~B ztYcpI|M7CSTC3N4Z-2Obf8+LNg%+ztWuC8T)c<drhg~eijwk^z#6gtLQNAK>;{TNVxXv6)8I-&dh%R}$5@B7$!-{8*lY3`4Xai%B7?Rc<( zR*K*GxSiLzKRC(j4ye|&IXoe0ZrV)0&bH*KqR~%(qtr{tdDQpW%ttq|BUB_uw9w`14RKqZuUqy{cUiOQ zk#zgRt*Y~LGu|~Vb2%Z&Yn-}_bO$I<16()%R)3~W5TC!OG77XR~r{d#Uk zWSmg&qKB>G|IVyzf7ly2>ua^4Sk3Binc{ti1>PsVRyDlyR@bKf>!l6((_U}pm2ZA~ zp>O^}>yIn{J@DS!w(#z;6GDc|AFQf-82)$uLQj#-#GY35cNK-4{PiNMd2N6%Zlc!!cD``_T{Ln7G&HVXMgF_GE_N~$SXpzPL=aIPi zob3yZRXQ~bAGUJ;tNZz$HRw%smYvLB--t3I6jv*yE(k3T+yyuZC+%N-$kv-Zyh&zk*f+8*xdF;vNG z<5rjX+Vj~=MAvtbk=~sv-0z+hGW4Jj@j|zV&T;K?GG<5_ShpN%713UW844pobBp$O+A0i&8YvlHm)$p|MrBfDV<3@ z{NZg)@-=yfPhU`xT32DNDf)gey@1N^l3_k#wK&FXrKFWqwQ06=6si_J3co1%dFPAeL-cD%Xhz= z2S40W9(F!A)3JTC_W1#MyN`#ipTBUSgg@dxzOz<3s7%jJRc`*# zzQ-NeJ06!yzu8;ndF0;gADh>|lTW{2U(4Sd&(k|Cj`RPjXB_A1|6J*L{P!tO^ZxsL zPAeML&9R>M<1qJsMciLXg@Dbv^|Ko7a`L{FPBvx!Pey$y;!nUsOWQ+XqC%bvqe|DUlVYgTQ zUEjq%_PpB$vP&-}|J*YBaP=zv8q2oz275lXSy!bTzth?+r=E9?KUsR0Tx8M%Y5zGN zl3pZcv@gCf5q)p)=g!(Q zFCOM67kzlnVccG5VOJz^>}5xk&~%qW=KBh#&A%NWYZ&|JsIYlV!SPb*M|*3(%n;&_ zd&OPLg-4fd{qKA@`XO=u&$rpqo2Ge$xECHOT-N*RN1^RD#e17|JI~L&IxU*r z?qlbAgEid?z3)^!=uz)8e!rWyU+i_?cD1)heD^-;J8j0J+kfPUyXa?^JmdeXDiz>%#|*s=vP7_Uf`s@-Ml3nF@)A$3FL` zTWwD?JR)Pa=6L0c!Uw|fi5B|FDxF6J-qaZQ%Y-l3#2cz~tmZ>we9gmu=__8|VSC;# zYCFwk!)M2wo3Fpzywi4i_MI{>k@?-+$D_9z?CE>8iPzVAnnd5lUypwmtov8+=C2G} zeqhyJ)koh0c*Sqqz1sNwzhvC)Zxd&1i#g=I_mO|CbltnivXvuRm=9T22)n0dhk?l zPs;Cq_3?4lpB*)cE0#|K6}9p1XA5+iYzMzuCCu?r=rQ$kZbZY*aBi zw_}F$!9v%p+Yh9+yjlBxLdAzp?!M>!xj*tcRVNl4kL+)h|GJZRy~~%3A4g^NZO;6> z)wc5Kgotnd^F^N*8r1waV%Yw9$C*`LDSsX{vDbar&U;qoT>PUm>&|i?-)i&F-M0N< z&DN04K6#t^IsALB95<_px}{$@x8hOv!z0@*-&)3ap4Jvzt+C?~|Nc*<(z~X;F#PhO z;*og$r*esR&fTT=*RPH%`2F^7&7;ix`r8}6Y>>UAEBI!+`r9L}|9G8ORq1rLS--1F zu_?IUmN~86<;==Q{TKJ0{P-vG@C1L`t|Lp2AJ|@1a41uH)3oSCyFah1c+ew$Z?#6d zSX3)Uo-nyuHfy%6)??!Kal4H`je! zYgd?aawo5AzhYqFA%5q>>qF<=zOW@mX#U@`KV*I!6u(zok@x+g>!Jre+UtHKX59YZ zrP8T(u`oQp;z7CevS~9?*BqMmW&N|OC6Bs-CF1tWa322cbq6$N|8Xy`v-hMK7LSis zJosUIhRfOd%LdikOOLna+p6i!v%i}D^^8fRQxx5WD#G<}&L+*Y4Js&#f z8+qth^^R?*{cVFSM|76U@yG3W$ba3S$GN-K zP;bu1-uyW|Kk}Tf8L4#1iLZMly#LjI9^XaYJa<0ihhDe%(0<;)=l+D_qN(%j*MSBc z-@N>It8JAk&quqehZXyLZtP!p`;u8nXY`@(RredGzYj3#+h3xc7}1{ZB6+P-cwe3E zv*yRTUborK`)>9U2|vhvT=>}K-#ph3MNxsIs zyZfBG#J*DkwsLbmc5~;2ea&_L{&T-do1uE#w#&_rC7&nm=sUctE;**~d=!7pPVX#> znZbA4-gHe?$@wkQc3dW3W`6fZ-m`^uo<{_y6|Tv8m>HTcaW2C3uj;wWvM*X6=UzT^ zQs#W_iFFpSi!8#^@0@*jxcTGlwwLpsPK!9UX^3_~WXKc}91HL;SkMDS15Wj7XZsmQ8hb`Ra`ug|rx}Ki0qT)gO!(;1z-D*>t zsM?nN?x67gABS~$UT)AoV-&mNQH$}pA2-`xt>`|JbFQ?V?z0K}e;x^! z*F3asugP91bW>98aTE8t9eK_*-zFXDKK!8T%iJB0lcn3Hc_-~;y8GkstEVNko{1XU zr|C@m(A%x;b47mszfHXBr)gb`P2`fZkCUIbZ}I!v8*0A!b^Zu1d*1)p_T4k@e_YPJ zkN-_P(YLej_56iPgzf9^1l?|1s9NP?Q+Vd%vH8Ea4i{&9^sIVk|L*M}&ifYscYMpu z5L(`1K4-Q%-{T~S+aEFuZ7VZmfz_Su1cPFELO9JEAP22@Vdux5083ZsH%;``rM9E zzs`vC!}H~M{vI&p`Fo|v>rM}^`mt8yx@`+*luldGqhD8WCB7!d`SBc~!n0BpE6Qb7 z$KBpwQETS@=B)Jbd%HjM21_g}U*MW_Y-;&~XxoP^=M9eRzF*}fGN&MQj>WzB@3}98 zT$3ao9{{yFEO|brncMAsZPMPAubeXH$@$z9LhD@)Ca(B#s6Vvk_Jy9EDpvbG9$@t^ zK5<*%^`swswrX}~6CZm24Y%ujG%At#z3Ab6(afdBJn4xB?LWl+ zXa6YuA5k!U|Mo-=pU$t3>;C?*`jYWu(*4ytCLPh9s45rp;lNdnN@=;x^Mv%13l4K0 zm(0jJ{9upjGDG2i5@#OT^;#S%h>u!z_UYGN86Ys`#(Tg53m)i=- z{kYMV*`u}bL#w^pZAJMXT+V%^;hfdwx;4_Dk9hvQ-F7G;|60YlD2u;4WGo)bv_;kF z-hN>DTKdO9@jSN~w=bwJJ92>AKiRJ0VZO9o@doqx!H*7^o4M~-*>PF0ZMjhhXq?`3 zd7E_IwuREko;-IxY7*@7GYA0J@<_V@alM2YMAfyPJh&R1$ z5ARWlewV9{kM;lRj#s{xn_>Ta7ijdZ&Cq_&mCI%k<=eU{XE`4_$-#f_Rk}pl!!tq~ zyBg)cGFQ7B&C7jJRU>qG2CM(=#D@{Cx7+;rqqAhM&Hb?Qc&onhIfFH~C1RBx8l?Pr z*!4cQV{fU~o@WIQ($4hkuDRW&_|Ze>&!hgpzt$h(j+SRts_NZ-dL%4T-0xGa^d^^y z8flV$UKBp8_`PSF;x)<6K5MxiN&jM-Z3lP#R{Z$)#&Szp^}|QDTh8Tq=`kmAkpWN4 zRqeW~^K&!iTwMIPi9N33QML3m!$~e{9{v4T8R2?#c@_WRO3xUf!Zytv$;CUad=_uh zw#yD(^uNMS=KuOxJxX!G~}t@`fqaofkA(=+txWcYDS}4sCLGNWCI$w@vX{tV)|9zs=f52gB}0Nd&FAz0YIgxxW0G$0?Rc0j zy{oiV$nbTec$`Jw0m-(a8B<*>b5C;L|8Z>Q#~W=)e6fqXRQ^aTd^p`O*Lh8n2hW}l zSCo@iM;$k-Ic9LWD&qN}?Uto;3b>um9?KEhn9sKEm8iX&$L$ZV3{__xX-&T0qS&`W zuI;%|Tk<>2syj0l)>`mXO51V1uKW9KiOh}tdyMku)Y+^v*z+-Zvf@V%lRy7@eja=q z{=OF6)p&97C>d66;8ZS$u`lh<=k^j%U3RN-3ptmJXHZLYKNX^)c5Mt0{zg)Mt;3sgU!(ouWZ06c#k zmpJ2^C4c8_8M`?W&D?e1Aseg3mTTkpUX!-BXieO^e_D{Ll-`cV+`nx@|EEXnpJt|F zmuyhOe$Jv!bVvBd*!?d5RPvJVS*-Mrk?7A|Q8h4)mM2-joV_x^pTQlIa9O__()euvQ>i@uZT(n;@mJD0g1-*~DkIsR*I$6nFRf4+Fw z?|U?(rf|(KuEV9-ma3C7d3=sk-`?s6ZP(38bPZ1@TKm|1JhbuE zM&9|6FAL>&JQSXPqa(BJVV~im> z^;ce&8&M^(Sw=|RuGiq>(H*=`uYK}Rsd;!NqTnEC!mHioO}F^|9S=cn+uU;`VNJy= z!@@VKCEKK`Pv2W3ssCs8*Hh+wwS_r{7pr>jsfyXLQe9^MikG(yRQx#i$L8{!U+8{l z`JcF>#hE`<@@(_wNchh=`|(cOp$}dmwsL=76g~+5cdKog`{a(&Hp6dcTh*O!w=G@j zRl~FGP4x`t51B_q+RU#>cAg0+T=VJR##Qxg5#iG_c!bN9TM8dkODDxTCmHJek=*=e z$I*MWhc5WFML#;kef(ao#lwxf|Jq7QI<*2nBwy37dwSXI#%$ALf4(HVXqV&vw)=5i zyW+pp9*M>3a|({}inndy4fXE%_@FEKT4KhJyKR|0dK)F;{;Z6CYEi&>c*hnSA@g+> z4?8ytuFKUBid^)lF*#JdFZ3$7Xbe{B*|>_i{#Cg|+8f>K{9nHJ&iqK?__qF0&)%-T z+8;GP8qE0-T3>iLS-MTmGfC?40dHF#`Fq6?X|lhoV}%Zy?<+Jqw3m0|I+egLD}ER{ z9e=NXe}8TU&vKXRiyt(K&--z+En>RzE9-)T8&7rV?|J?~bbnop(A7CcbrSr4qFu8} zrDshGU-Y=?d45abzfgvK-j5@^>N2Y}+|7<@2A)~?u#3I!X@71<=#d$+ z4U#ai=yRM=|QM7*NBvmcF z9|uLh%lGf%eSH1Wa+g0^KMsGq?Nk0W1?|2=&6V_}~2^~aMWgjoIC8mHIrAFj?Q4B5Y2?x6YO z-pPM%wM87&4wSH3_lmu);C5TM_r#1J$2P8F_y4+)_wTzWKbg?># zxId3}@%nmCdQtJ9QGMQz+ihR7U$!4f=d0>DEMsgZxz3=+`?O}^<5pqkqmh5_wJCk{ z3Yk-o)7}*SbtiAE_vDV!$1ls}?|1$!T2P-jW4l=LyZDbfZ=!dF7EYai`$I;jVO(3| z?5cyYe{Z)b3T~eFdhSVf@jZt=gz9=eI>>vx{PaQJy*bYRRgWodtb21Ork`2A#>l6wDu!qIkzV~d zUv_K^tvzlgVyhI`Yx%L6y-xDKwZD-`o61F1J)44K!u7W|Z21!ZsAT^K)tbK*dw-ZM zmutJcy??3ao_7{%c|GFqUS&(OIZuladR8L)Y{G|?c83aLc|spe)3BI%xO4NL&Adk? zyca#WtOV04w0rq(oJR47mwf#2mK7P3N)y0pXao%US9%)~_Qf%4Qy*k)0 z2+AEMo$K5WZd}E#Uz2-ydHdd}e4A?u*StC+J}=Q@<2wIE9(Qh(Ybo;-hU~xnAbM(@ zXU&aiXV~pN{(QXc`2>Ak-$!Q8S||T%e%$fuc7RG!h3?t3474}X8(%%oHC;>Ygx zP!|6=+Y(=HRI%fX-XwGE&5tSfS8Gg{<9Rx5N5P@QGoNy$yA0c0rvCV_c;AQLtNW9s zXUVm@%yE>HxxMf~rr&)toz52@AO3kPwOY$!=4I(Nsn@fFTo*k&HKAZlR^H+K*u5@F zVWEY`w_PqiH9xUJ@0|Og?In*7c=q=hue%+vH3if>Jt{vB)L8f{bW`WPb3gn1A4jME z5pVl`ZIepUwM3mCheGS}oX`B4mSNEo+uzsz%l`0{ODfY!<9-}|-haFGy}_2*3q2~# zzt}H(r{WzX+r8+;6bDt4P{aRu>cI#kiSnOJwO(5iC5yX6o{=aXu>94p^bYIT( z2xoo8|9u<#7Or~J5^r&=d-k`+-QS9M>K;aTCV86t$<(j^6C<9SUa{_WlwRk8~$5HXTAM+QkX6bCqx6!?9b+_)mM5Xk*=%pSme;#~E_sD(Nvp-p* zYLAd;_@75DzvZWk^d+uH>Fmtk^WT2Xx5ovU{kH}3I>VJ7u)D_;CV3oxU|YLS^;`8X ze*21t(;r&39V_rG>1<*@eB`(8-)f%w>y6f??ol!O?>002xa055yoRexI^UfA*M9nZ z!L8NbN_qNEO{w_$V#oi&lf2dE0y(7&ix;^Z*Tf!rc!_Z{;U@B|Bny9 zJpTF6y_r3)C1&NutNzLld3@-w5%;`$o6{C;sj@xR)u*q?%Fl~Pin54q-@vr#n&fGRPl6b8h*TV??d}* zGn?sMxqt8Q$gRW_=8s5Z8%sE{wT@_fVs`c*2LDu~i^3K7XLd@ni9}jTb-!{+_y+@7c27BH~eG`^=D4F2}gV+oa#?&h2}6 zak1x~9|wCEKI%Jd$YUGV*=c=m@tGf&>v&#=ZQLIA_1*e}_l4Pq{;s!OTEOG{bXo+D zY&}oUebxHh!{x67RhjAvzKG>MJo4jwz?T_9qUn3w1wVAZPtK^?BP6SD^Wnf`MY-m} z*^BpF&#l*&>3MYcX05Top76j*)o;5GHpRacHh=q8VwcM_35!Rq$NS%RE9M`r^)BgD z2rN9p@Av7Y#HJ(Kfhtn#c06Feo@{V#b5B}y`Wx#7-@t7D!zgHbji~qAZXkfSfdH+`4{+|y| z2whyW{L$aj1&8-(&A)DF)7P%B@&DHo9rl}DkC{K(#QW@GZJf|iE1Mlz{67wUH!R7% zsd~nvuW;9G_dNxcZT?5gGR*xfc1Y{U)c?u1-lFo+Q{?)=M(KAII}UwGo^kGbc+$f@ z`<(bM3GsJsU+Au#sG`+ZvENr}hvnvflFL3PdFi-U9+FS{a%}e#<1WcJ^|sIc-FkcY zq~Q)rYo__h8d|Q8j*6Q9wtv|7+3?Rh_V6yD;H1ybD>lkrQ?1WGyem|%vw^v6+9X1sIc;wo{-32$=^6$@Heq`Tb9+{6vP6~cKzoCDH zPN1x#uzlZxhVQ!<7xLT{+{}Bp^wZJbzV{BzYwTMXJ6-uzddBZ~&o$6(!R2{{<@S~Ri7R|K<0IC#*gs!Y>NQ<;ORk6c;Yl7s!s&ZH#67Rz zd6)EhQijEYM&)@uUnQn_P5kl2psOY_?ZEbL)zU=?KU5~kiJx=3S$Hw7f1%NvBhBn} zAG@s&*Ycb;`l2D8R}tSSFB4O_KUX6#^}B|}jomej&8!$c4wpf`1?K{=Jp= z>!cO?UG{!F!00YhXw~*bI(?tYrb7Rif@7lFlMU91sz^QV-Tkejy|kkL;bW7o=f~vv zc0BI5Zf4_|>XCAK#*PgA9a;5#2V>t$v^{^v?tkZ_di}MBd+R%E_g6F@IWjTvb6xlc zS?7z7Cs#-a*KIAovt@d6#I%Py@_+w$@#C6Z!I50)sGvxpn?_7}x3t&YdTsb-Yo8GB z{fhj|=f2@g<;R!S zK3rg%d$?oHc9%_OT8$64bDujN@O6gJzE7FF?+e}Ud@SV&eme1o&S62*{67y8I+LZ- zrmPU++;8!?ty}e4@(Lm6L-(S^>k1FeU6|i&zV|+l(B-ld6%YID|Kv2!{ARi8x~^ft z0dv0{a);~I%@Vq5<@)D^Vd3=ueTlC=dg;vhaQs2V54}Hmhs$3Vda`sjEdJIu`CA1~ zq^hTgt<}082m5Oa<(-Y!sa~u9r!G}XXCB9kIx7Ec8neQt+$Qa&MSLtoGsKvZm z_hFOzx*f8I7aOTaJ#O9otw;Uc@eMZa`G?g5>uchBIPc$jY<9=->BNp7hpXR<&e^*E zctA*#%T_;O`&;>cvf__lsOzlrEa~LuZ);s1*qVGJpIhaSYT@Gp0Uzq7TWm}G&-*e< zNHRU9;ONwa@`oS)H1sm*Y}@^xVt|&PA zR3a{Ws>-Y*M`X)w3M|@I8mWkFi@o%8<*%dP?+ZQtu}!gczl+aymv1qD6Z7lR4_1p@ zH?)}+s2XR>ly^)1&PSWJrS6k{YSM(*W z$T^&H;>YE@_$%DUb64D3RPVj$U!k9PolGM4{tCI~a_h?PFMb@GT===JJfiPm@J93b zudgpQmDyr%@o*Qff7nf1uDXr-8-k9!-QHr^x6qrVvr&J~hQK|)cQ4q=n;$Y$=;Zf6 z^K%vtK26tuY1Q^u{K4%Hk6Lf9cVAiYppxhJ?hWCOes7G|KK_2ywRvG5>e_elDwj=F zeKWq41fNvSw5!kVQ8liZ}^?UW6aBwf5;df zyZc>mTjl(>!tOse^4^_&x5hiAt+D%Chc@5w4=YkSr!RcmCVyw`;c_15)bBGY9v%Jg z=)BNnvmWoGJI(XjTECb5C^+(3V$!JzC+z=i+nAOA1o5czi~n@Mxvlee?2<&GPK%sO&J|J#=r;eRS)cNm<}UXjw-B7E+d4*$LKqt7K)ozi}| z^VOG%t>$;O>_2W`TlnTkyX5=Rmz@rzUDV7uJXdAWk$JEAV{CLwVm?~5U9U0nE-}tO zt#k74qKA*XZf{!{GBx~BVHy9QN1eNi%ViH2wB#JNQHTa-rE8C*_m_pecWGl z;P>};O~U7RqS9gl7wtM-`{Uxg53lEaJAWaxEGg-j@$twTQ!VUoe^BYvoT#c*x3zvp zrvC8_>(^Kt*2gf#{Wv7QZ~Mc&Au{~$&+aI=5La;Iqr@byNguR*_7@c9>isCSsX6{Y zykFmgXAkfE$A|CbO<#S_a7%Q5w9+fX5Bt@({oDSqdZP82+9~`suMG>Q?BAZ4 zHdQOI;E<^Kp9ilc;-Mx8zYSq4_RHxYcd9 zEqw4@;!j(gey6+Aqv?f@mhF{uPUjGE?ibg;^YQqEZ4Y;=yy<>_jF;VeM`6l|;}cXC zxlGom*pZfdxNh_1{)68qq^jF>-q*NRn#pgGQ7>^#G<2EECFMsw`Y})TC$G@*2DO1~ zJ{)-~5#t%Fe!X_5pWdGJi)H`2eOyv4{ceSjs?ffIw2Fd*ZzWdAMLs&nxW9@ARFA$8 zT7P7MM}^eY_UVDolYfNtD8=;5&VS3vUX$zGQT4{<5NrCJ!h@eBR-Kwup{x8LPefS% z=PurhF|`qCd(IwVzGwWk6I@NDN^?Cnv*D4id-~as$9BHR$I#g9YH3m>htl{-91LTG-fgzL^N`+uZy+zx0u zqAVy0st|PS`xknYbZTwIeSw!XhY zQyv+XOw}v}`V#*i+NxqSZ-)U(OrcHN z-|p~<89egy>Uy;*9@e+{AGNsMYW%Nv)sx2hNoua?s9*A;onZXV{UJ_-}p}3BmbQR>-+5OkCWfrFWi?aaWHU>>NhLiJ8KRf z`rCgy>bQZ;xQcz6b5S*~44@fk#+X>72#G z24lbD0cRF3cR9*!|Klj{_T(4qH2RMm5cZGxc<8l+o#<(f>8T|$9}jTa-+u63KWvu@ zSMqWFyd4h0CeBW^Wv@xX1Cg;Sr6CDwB@18^7D};5#_kO2q%kn!h7^{qYTF zG8Z3dmkm70Q+mfD!~gb#MMqR8sxY0ic$}0L*0*p~NGH4f4Vkjo9ohB$iC%Yv_U(vb ze7{pBdEW=aC(%p2SYir}@Tz<7=vSO=?hD#^R`Gy+eR4(UEYPl^XTJRNe%Q7x4O0EH zHP@(X)ALBq_m$VS^QwBJbY_HodC;Q!@b2f%N0CC_fFn>yZ_bt$J#3`E>HqV;kKZ42>~B<#yKOL8Zo11q)n{fRdv0s<-A?E$db@XP z-kbshV`+=5{^Jk+mUIh6_P27s`!Uh~_yv_^F4H+G9!cxJp0NGlZizXO_vii1z4!i% zwVwUIcgZWNLOR*??|kUCer(ltu+r1VmMyNz-S_2 zq4_S;X6$&-v|BRMrfuOS;eT8k<9-}|d;ELrX|p@#&XYWZxYJ__4?dPyJ{g6GcCL_uTOEMNN11ypB=Ar>k94L z)_nq=j$Qy zZ}-0K-nQ`F&fn@A??2I-^YKX9(a-Z2Mz!mFe6g{2y_|X8HANZc=^R4NkB(iQ^X=ei z84J0?>WT3-;&MNZ@v`69{;>1emOv%XJr>bv2db@)B(LDH{`jC}Z>`OpLOZtjK@#Kooyv{!1xM!if^*i#McZcNsE_=+* zo*i3wD z&dhmV9<;Lm`>>n$vDxKK*OVWzr`uYstB^aq_>-qeThH!qt<%44;w`>!uKFx4?Qr!w zv4W$2CFG`tKRU_@+GGD#qV3cKgXycy|82SL_xezw^tH9eRRs$U1ok%x&pSRLRF3oh z>21=#S3SOcCujS2iCw4E4ZrO8kizq0a{ac4AZO>>%ZA8o;g|Vn)3)T2>NlCxg!fFv z2hWD;$vRJ8A;he{$6fH_rj}Bk`EvV@)W-feYF<~6@Pg;NsA`+bA;$DOg$J)2hD=ra z_@F2L^qd{DMYkr;(As_ckZk>qKR@;r+-mzBwo>R>*3V;}zq`5X`WC(tR5??1%xuq( zLuY@VEamwdzH;~R2^AlY2u(fEh|2GsQh`D#P|7;?fr_r z#Qg`egx1Tkn#U9#|0(e;u*Tcx^ooj?7eBOLHap_Yf4axKuJFR+gBNE`?N^-n)umG> zu;8GmeVWQkiMZlvniq4X_gTwTJgnsTeOA_a*M|e!CA|&^-oHKJ+w~2xN{<`4^D6!u zMf4r~-*-#D^ZMPrk8Am}cRc>rL#>~&f-z6sLb&XD4-ZB5_i@V|50IR7q}w{L%ID73|HeMg|G)c~n0~GLq4@nB zxrcYp|2N5HO2voQU7L13tl^1W>h(jqq4eR(y^o)EeUUw^o~V1fm3?2~VaDmX854^= zQ^Gg$UzdN*ZGQ_?A1hq6U72cAaPV^I2kW-K-R@I=NXQ2My_Ebg`d`l?_V9B$f`tcv z$MgR!xHhkE;VPHT>r+b~{e60(`FlLi{^J|=Z@kgj+Iwm{o2qNge~a_E5{~`hhs?#k z9{YKHaZQE&$=>7@^Cop2+4m^n{oBhsJ|xUIzTv)mdFNBF*&m;4rO$nq`ua{v*xYb%lp}6=e@ks8Chg=BNEau+ZdGx^!3(yQGloqDNi2 z2d{Jca~=QSRnmEEN5S>Shn%Zz+fH6knI?Db*Y2+sg-3Fw_bvJ4k#ej_`*E-Q&pMv< zr>4w!*FD?b=AT83cplHgU7<}a*4cXtugohvbl)(=w##K=#11R9_&<+oczpXc3_o-) zmlLhOH9vQUe&_S)JM!-oTv+^giLH!tSf|j@6fvIm^v!J7ogF9Qk8hZNWz~`9 z_&-J|cXS@wwXJlY98vM0|KK#A>EHJ8YI>`5CQ0ho)!h-RdwSUL&DJWFU8y=YJ-Z*C z6zEU%%sG5KL*(bBxDRIwa-I3EeVW`+wFk7I?%nYX-;XL^)LHy!UG1Y(+0SNEyj>UF znO69?!`QFqzF|t6N?^eOQGJ^N`?i&rRP1tgU)ih5%(o-YSvT!y|B-p_;W=`5h4MbV zmDnZcob;z6uENM?&z#Pm5_X)wfA5r#m)T-2)4M6>@Z_%*s$Hpfc06j5KUT`)`)JaO z3Tbw}8!KMfAAWS@@!s5aY4_I_g-H^(Kcuzk1%9~^vo-xsM*i^+QKvO7e&N^={j8h) zuvOd1gxlM_`}^{b@w3;sU0mcf)q`iYvEGgo_m6M*9yaO5<3Ar(?|pR4qJLqrTjza? z@NKeH2YB7*Y+qQtE!$J+vGjEL>0R1~OL_Jkm}|Xp{!_a>*H4y7h(C^OFZ5R7^k4Gz zSYUsLu;1|sy2YL%i#saTe{Gic{*hi08rRvj{owkt?1zc6`;uo=g><$W|NF9m@AIKV z>1S(?Pq|UO{?UrshduL?SIoKn;Xz+~%!ebdCB&Y;`{-%WbZu$v=F+@$5$(v=8i8Ll zc06j7|8suB^&)kt$GzW0UmTP_yp{L<()PVS@Ak~Dz5PS=Peph@|HG*rLcH-i{(tn~ zvCa8C8GvC8)XA}fgr22S7-v?exKB2YUCGk$o+RI0(uY8npY;WLiz9jE^r^VpUpMJ{{$A*QNCW=nf+Mb6HRDtp>> z#p~+lNY=^=U#sSER`T>|>zMwn&;GT|wugJaZjimV;P|tYnf&K&?N8Pa@?G@r2ltPI z;&r+o?b_4|y-QB7sCdM#Z`1$q@s=~6`)VE~$XfS(%9V}^S}7!19-~wIuhCV%n)GKY9)s-qe3P`};oc+ZUR>CU#Wu%-OQP;{DkQp3v6B3jcUz zKDVtux3}#0W!AIgxNhLr8-HFH7F@RLOI%?iv~Txw3l23GKI*(~sAH?w>3>LYYu=v+39{>QBPKqa z>>(s5{#G`8@www0j!#u>lM~h7^Dp9^cl@2U_uG5sG`UPY@#7%#{+_22vs@;>u#eN1 zn^utcKj~`6@eN;Q2+2SG^|&O~;^7GaiA!7EHwssauo>VJn_Q;N&Og!dC3(yGov3(J@7CoDjLnUw7-cp$(|REuZ(}sOKT4tLf`&5mIf4OcK9u@Yt=}TNG;rdbZ!>)o0_crXc-=C}D*&qGrm(GvgGLMgl$NjKt^FR9WLyZ079Upr0W$Nzi&#mY={rgqS_xJbt|NTw+wxp#t zKT^Ierv1BjWYVtHQ|0Z&A9w#f8zFuBLH4xOWt~YgCGB@4?C1VJ|6qK}bxp%HsfUI4 z-*{i6D|h&~L0#wfON$>z|31{Hm~&Vb#H}3sEt|dQslY8k-TU^Ml zmgUFwABF!mGrQCGusnQs&_oHL+3Il>51&ieiDp}V`~0+hap|tYV~Nsj|NDP-3r$UY z=w5w5|8ObKJ@q-MWwv@YA9}y9cxC2u-eCUY#CPd4TAAf69#!&mDte{F6ddFpV80;5e)Qoxa4CH=^I?wh0yU-X|_BaJcLAN!^XM!Q;)(L+!J_iSw7=E8_7!YVo_( zc;DSh;d|fD=1c#o`yQ++XKPd!`!#RRdj6*p-@YbFf18=MyQg-UXwB{4#nNsCE~=d! z+*PQ8zb>_mQ*++?P4wwxk9i(y=WdyczXi<% zn%Pw8{P}n5bnEWqPj+oDXWX$Bd-vmaVcHJ;wjI3R*B+n1A;jqZR$i|{?(pMP-@Nwh zc>K2}5Hdq-BQ&3dPkfz)#i`e3Eh~alzI{G+Ao91F*z==SZLe%Hg!+#h(a+m)a{uuQ zs=JOHV1BPYg&kCSY?*vBq4#&E%A>z~Hhx(A*RCyG)x*Tr&ZhpY?Zej3h85y3_N+K5 zy=F>bN$rnuvP^ya@d8dhQK-=l`MKW={To$L>+Bt;dhTb?b6Z?0fZU zx=Xp-or(ty(^Z$`YD_Qo?=QN2U$*-HmGbJup5qDc*C>2^wXt%)@a&2mTKkS~2+`Rb zx8tF$@NA1m+jvcH21PD<(6m}k*1kffIbZO&>czrizt8Rdutk4gazxb~A^9>n8}Ys$ z$4aH=EtsUD#AoraX>;kXzK4Z2Z&FQa9_Qu1|JHffP{;P0kv-?@FYkUj9Ta_@TOsd$ z;@wBDoV;~K%=~+{9o)VqewV7)w)|U9t$sb4otWob{4|G0cbA{voEUZU^q&PhuKlVX zUtBCa%w2BNm$+h&P@S{w;)q+aPt%TWynFjXx7U;v77wmZ-TJWax8aYu%c7p$*k2GL zQ+V*?dcpfWFOmkYlXkF?ap{Ny>FHUE4uwyFMp1gP)n zb>;CSk9AuZ)2}aS(mr?m!!9xP&Nk(D?`HFtO^q&;{-*z|`v3LYwI2^1ynLYfasO?r zwk4nb3cW3yyQX44wFPY`@wD%`@QdH z>v+xzhN$lPYx}XFhQ(%Ue{zJD_oKt-mK5IHEqVW2-HkTEkVP(^{zMiedi*&0QDWEM z`KoRD%x})#d^?-H{>R<6r`OwR@2r1O`?Ps;^{w{ryAMB?h?}Z+@k96S$B7SD*2*1T z{^-qLCb_J@2tu}Y8HCd)CV&*@*d!lkoI zxK4uoo7lcP$1kjXs=o2Vq2K!~>t*uVvZb9SNeKO(ceU{9z7NTqpC#ft{TCVP-1&Hb z`M+_+wbPDC_YYhB+j8H&Pu%aeK>kz>!4IvAQ|l~tr=3l{vH6aw;fEuatxWfPDCU{p zrL1+Ahq-#&Yx8sKstToprtVOY3*X7Vze?p!?B#i&#!%A3KaXo3w&aH&Og`bb)XT*- zZcYp<_qlgX?+xE*zchPe{rZ`E^}+S3Q<4jo+O|DBH|s-@{N9hx?W(RVytD4CP=29q z-i`f^6ZQXC#CmsJ^%2hJ$tS8pI`d|7C zt@HYZ-(;R1b*w%rcsy4kH1&H$Y$p4=ABP_w|7_Q$8K^4u?#JP4h40E&WlJx6zM{&T zMW!&NqVN!CXw7kvhfmDfudVWLUrWTbsa*Wn+AhcHzjy|yMh?>6vDigsE<3CGoNbAz zQ|~T*B)Vaimczz=32F&{x|ptK?v zJ?8e8`LHklT=EC&b-QDB=i3T>+phok(9KZ8{KK(##5W)5=FY29x%07_$NA~x89N@e z=DsX=xQ|zHg-K_Jy5En3lGBq{XgMFM-59fDr@!8vyS%pyLF>;XmEwNa$Bg<9-fk}QHtB3-e^>E8>SlkU=bO~J8&S_s3n}qgimVFC%g{OBOx6S#y+WoNX`DBSIk>Ls?hh|c$p8)n-|;3IR|PA ziK_p3(DVJTs=RZtoKNS|sJS27B@eZpHeMj##(XGiiS2+v6Y0*1ofdXy3?dXyw)Hvh56ic=h@RX{WCx-^dPCZAQdnihMZq`%HD=rn|QcQ>M<h=#XEi*(yH9Iwe7}eH_P5hk(@yXE zv2EcUq3JEpUx|LWw@EnsPT#|e$@<9;I=)Z6uJLN=-&<`}#qV4W$)^8#*mT`68Zg-gvyLtV?JcZ^>%03WUeXL)#Ew@59Ie%rjeY^Rd z={Lax=cgupm{ZFm>%Zs2jkdDL?8O<|kF+;`>k!`8uedr!s5S8+d-)xkouF9-$D~Is z;`=_PcUDSQm6_eXzxP3({GUhS=aXlEYL0c?kBh$9|F{;nJ<(;V&cqJ~Sk*yug2#LIx(Xv9xQ+`R~&1Z;Pd!ChbtMNuPeUUyghK59_vdpS*Z%K9nrqD!a(K*q$vv@6~^e-P6M| zr@h(pI9cA}{zF-A>7%7%m5j^$T63m^u$hNps8Xc=(ccu5qyk&$=r1c@+;^*PG|4O=h`%_5H;)jZbCO*Q|dS zD?ZnA(WDy@5&zayR5~a3x-EL#d~><&hux<)#W%AEy=hjtQ+TY2)jU5y&8um*R_TLY zal49rY`u40C(fQ#c$igtUB!h1TTcm{Rgu#BardTV#e>gMeow0=8JGXKe*E~+Khu8P z-0}Hj+}^|qGgQo;?RdZYo{z=DKT>-8&lf0nCfSLHU(<*>Z=L(IH#k+`uPz) zT%EnF@oVOnb5vZ|@N;dCu~Mhgqeor*V(SvNn`?CXEqd5%oqa)IXO+xr(<4W|K2{C% z&{(H4KO!=2&q6~<6{~wQtfizrq*Z=zJM7{Sb0%(igSKDAzP2ehPrELfbRr^RU*X~7 z(pK3fLU+<7W#!k&v+uj{U6EbwO=(}n!yZ=dclQ?LY@U>%Vpey3k7)jiiMHQ zxzi4OdcM8?UVu=ii_+sB?Yy-a6JeBPQlzuSJsPLul0q7qQ{ejXetucdFbAl(qSIL^?fx zhfhXEiKbHdL9laIaN?dDv+=HI%j zW_}e(>o&Vr@y5=O5$e*;Gts$I__^(%lvmOui;9glkI#O3$lHEIq0sY!1=DHezKFQP z9zIf?J?eTUWjZ?h?;R*S@33g%iye=9+4b%nSl%e=nG<7he<8=|^pwgvUSq>d6(g~j z438b3I@79~4Nj_vsNc!Z*s=Lf)!~HMjYm{AemKM`e`jx_d;W%FT`F3BZ=8?KeEQjR z&8d_L0XjQ2_H*)2TW#)Rx6ntZ+f?gb#K(mXD-Nd~O5Vua%k5rMaOkb+p8P#wN(W=F zhi-h(GqvVho7*GP5}A()vzh(Z+}kiCM`$+N!S<)J@ip;>J8RY{6$;r|JZ|C+%YRV( z%~GZ1$dQ_^OD*>U+45(s3G~#d`M6B+@!?Mod8c!BN`E-UsXr&PXZ=GlwZjKK1E=mtO?yKKu<(_x%K>Cf9DkA28 z>^6p-NnU(bT5Ymx(&l4F+n>rT-RHlfPUO_?zkDk9{O|QmH@(te-gmEHZSlm6_upOk zpS{1~cDQDL>EY}LyPHhon;&)Df4-snXYDS-y@>{rD)*jq9)0ii_mOX1YaS|7Sn96p7(Z&Pmr|STlJqfxXHVt%RWrVSdffl4V!i3PuNCJn z_Ehq{YtinH{lZrF{XvLO%{e*Fe7V^@{C?{b+0N;n-x+Da&l*0jP;h^_!dJGZkv5(_ z-;5If$vw7{|7N(qO|(Mi#xt)!cWR!+Pmf_V|Ms(j`FypeidnYHpKXyJe%suNJIt3e z*?6ZiFX#U2jz?N|bDosedcJLfKulqBZwI@3;oihe;oV0LG3VQSJa||7$Cq-8;ODj9 zqIZ0lvv$X$Pf~pbfkIuZ=JWVD{pWqXENwQ~_tAsa`=+|Rd)B}Dbo|l2@etfWc`Qww-$@PltLT{Y==B(@xUffLsV>LgOK#op z=p}FONd?27H|Kn;-kCX>NUH}WzN+q72fog%6jzI=|gqf)$0M;w{FyG(quT3wNtP;2^)Bcl2`71hm`CU}035jiT$ zZ&UES?c|b)7B<uGZmt7G)C#JJ6fp;&@AK9b#_DIkBW7-$-L$cJr&upca(&Ikvc{?7x=1mgjR1rzP zQ*cmrwK>~=F2%UqNeo9vSG zxQAbF#^RXQrXC50%v2vWTb}wm=i^tlzTYfDqV75t55HMXeZo8Uq>|x>W5V;#o9{Wk z=yHMcGYj+1LsF9AcQ#D0zjvWRC(ijeJO8yEKWrbbGuQd1HR;Bjl@0u-xu0#^(ayHc z!@cTu$3+`vKZ{2_lg&lcX1W|@NoMI&eWDz`g@hnUlC_AWGtRMEN@@!{Yv%jpkzdp%Vy zg2ex<<6C6@;nljSN7N=7tbgZx_~DA~J#E4>H9F6HR!;7FRek0E+xq?gzv=(~`u%?0 z|F`o0KmGsz>A3x$f4AlT{aIfB=k)sjoB#d(5x@W6pYQ)C{CnwN|7ZXI_t)!xe?7nd z|F`Y+pXdL3{!@Pcztijg|6OkX@8S9S@8AFbyuSYbg!;c{@7GydE{Z+!MBvc=-wXE@ zBvl@f{Ji+b`nognLiZDwP7v8IUoWgJckjZC7@@hxI(FVT$>_gL;ogQBAwusDDLrUb z-gl$_&?H5lZ@b)tKuyzQk9b=-dH)@WjL4BsK6Wb5H9tdztJ6>E@kibDQ6Ew&Kem-C zR(j@~OF7J5UX!_Ey(5$GM{yQ?fjJ+J&D>MvoOsD2r25#ACf4vZPj;J|s5QH!_cpNi zRZNAZlbs&z)w8mj@!3de-ugrpwQiSV(&9A*Pc854ahy>i)Fqx*@%Vd2 ze!hecA7|YEosU|D>(2jr!`t3DVaJTe^BUVa7ymVp_$BqMdXI7E`~ShQ!s0cBrsv=A z9#WYYaLr;z?KFiQk6-aNn@%}$q-lDk%bvmyZHMi0gv38b=v13~C_i4Wd31hlM5poL z!e6r^kG*Gl{pi=z%eU?+*r;1`9%VM)Q+WKiG}~nG#`^OoyDP7Ge`q_bGO6M`yHxoB z>CZJceo2`wo3zUH363>KluxpI5Xm_GEi zt7@+Qp;~Cz|BQ3TgO1nP7M-0FPQ3rbQ7jj9T$DdwV0Mp}lPAj^i&fp0{GTr!czbcqn1PmA9OhR@mSID0m)!o%H<*Ht`z!~6cZiul*o>yB|2pCUruY`4nrP`w=BF{ONC_x-C5hYo#u zz9_bMJVFE@{w=a{pZtvKG|QLnJw`h{t;*Elbl z;eO=m9X_#|y^fh0DpK}|O#k|p9lQ1Mz-4K*$<9d+d$&g_*;!N{{;T$`S7*vz6^}tp^{T_Ehm75r z-&xH1e28=U^#yaL1# zZ>}3C37>oNz{2#wnNQu8r=<2QG^*r1B*m=VH)FBQNolLeK1mO{)b(a8zVd>1wx?2| zL2q63q{Xuss}J}12z9m?pWE@EX|;KXnv>Ipq@%p%clI{U|1abL+AGAVKWA^Ev8D>& zx*tj33R%~zPjpr5bvYzkyj{UHrr=ZCDV50rF&iFrNsHyb@R@St0I&a@jekYXs8$_L z3-XYOF+AU1E@GWv-z7UUMTk>;PT^73Zu1Z|FQ;^8CS z*`BI}8yZu-1|DbC_i?`Cruwbmm?Wwx{F zSR~c*&YEE&Bw7B)^tpuAx`;iFGc-6s(NcK)Ff2pft9bmFx1BS+$fcOa;$ere-}*$% zO6WnKy4<}DGkk=k^=m#H6Q6(GfLZw5;U_jr8ie~S9zWr2^;8QiJlLcirgQJY42{k{ zX}KNA)z_Ba-J5tbW$%$=%<^k~Jo+is7t7n0n7;1DZ)Z!z2N~;R)u*{jd7bnz>P*r* zKees*=$#|dQ%)*fJX4%tXZpOmJ#v+~kJ{uTM)MoKKNp$D-*>Md_fqDHhsAxO?!}!J zGhbKnn%+(^6>9x_sqm;Uciz1PK5U%loM-KrU3|ECanC&i%kNW<9OBKF>+a^ayH`-D z)2G_<{BVcGEi>-}oyIfcn^R`raa>gJ%xK-5<$XtM>ZHER&e)@J>v@^lyZO~?DrQWs zI=rPbP3ZOKHH`T(9}nJ?UgxWq?sxdPs9xW*DFsI9^(LmbU6eaNRle_C{WC=8ne<-A znJPlO>32RJeEj+16W+^e^CITw�K4d@SBC=;r#w55M|lj(S);`2OntjP%-HnGY)G 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Ν&!7AJ&+99V*LT0HwdYF_WjA|W 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 z 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�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

      b@0}~(|BlU}N#9l`ef7InF~$>Jn0nn7%kR%? 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

      s5kM?>T;&tJ)TQ^&h;H#u|L^rU5S^+ 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 diff --git a/ChibiOS_2.0.8/ext/readme.txt b/ChibiOS_2.0.8/ext/readme.txt deleted file mode 100644 index d9573d8..0000000 --- a/ChibiOS_2.0.8/ext/readme.txt +++ /dev/null @@ -1,32 +0,0 @@ -***************************************************************************** -** External Libraries. ** -***************************************************************************** - -The libraries under this directory are not part of ChibiOS/RT but are used by -some of the demo applications. -Please note that each item is covered by its own license, please read the -instructions contained in the various distributions. - -The currently included items are: - -1. uip-1.0, a minimal TCP/IP implementation: http://www.sics.se/~adam/uip/ -2. lwip-1.3.1, lightweight TCP/IP stack: http://savannah.nongnu.org/projects/lwip/ -3. STM32 firmware library 3.3.0 (partial, library only) the full download is - available from http://www.st.com -4. FatFS 0.7e (patched), the original version is available from - http://elm-chan.org/fsw/ff/00index_e.html - -The above files are included packed as downloaded from the original repository -and without any modification, in order to use the libraries unpack them -under ./ext as: - -./ext/uip-1.0 -./ext/lwip -./ext/stm32lib -./ext/fatfs - -Some patches are also present: - -1. uip-1.0 patches, small fixes to the uIP required to make it work with - ChibiOS/RT, unpack the archive over the uIP distribution and replace the - files. diff --git a/ChibiOS_2.0.8/ext/stm32lib-3.3.0.zip b/ChibiOS_2.0.8/ext/stm32lib-3.3.0.zip deleted file mode 100644 index e920c27e68baceda8e5f8762ca482b596f8622a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172514 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 diff --git a/ChibiOS_2.0.8/ext/uip-1.0.patches.zip b/ChibiOS_2.0.8/ext/uip-1.0.patches.zip deleted file mode 100644 index bdff1db6bc1ac302b7fbe9e9f3f54d137b8efb05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21462 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 OjiH>8fx$Bf!~+10ZY(tb diff --git a/ChibiOS_2.0.8/ext/uip-1.0.tar.gz b/ChibiOS_2.0.8/ext/uip-1.0.tar.gz deleted file mode 100644 index d5530ec3de09b6ea756c30c12b43becfc0ab5a85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1348599 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ℜbo=9<*&ToIYYm@@6CF6rQGMx_4#2wT?xg) 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

      Q+IE(& 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 z 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≶+_ig^6AeSZQ12k;zZr-77%~EA|$#lD+ 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

      = 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�ETA{Ssg=}~!=(sQ;W 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ϕX9<{|MbE);n?LR9(NA-ADUAY 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�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

      +t`#+NlqTtNa7{br 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%0Ad*WB`oU*35d~3+7UV}=$0^NDcU)E33 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 diff --git a/ChibiOS_2.0.8/license.txt b/ChibiOS_2.0.8/license.txt deleted file mode 100644 index 94a9ed0..0000000 --- a/ChibiOS_2.0.8/license.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/ChibiOS_2.0.8/os/hal/hal.dox b/ChibiOS_2.0.8/os/hal/hal.dox deleted file mode 100644 index 03df8d8..0000000 --- a/ChibiOS_2.0.8/os/hal/hal.dox +++ /dev/null @@ -1,404 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup IO HAL - * @brief Hardware Abstraction Layer. - * @details Under ChibiOS/RT the set of the various device driver interfaces - * is called the HAL subsystem: Hardware Abstraction Layer.
      - * A device driver is usually split in two layers: - * - High Level Device Driver (HLD). This layer contains the definitions - * of the driver's APIs and the platform independent part of the driver.
      - * An HLD is composed by two files: - * - @.c, the HLD implementation file. This file must be - * included in the Makefile in order to use the driver. - * - @.h, the HLD header file. This file is implicitly - * included by the HAL header file @p hal.h. - * . - * - Low Level Device Driver (LLD). This layer contains the platform - * dependent part of the driver.
      - * A LLD is composed by two files: - * - @_lld.c, the LLD implementation file. This file must be - * included in the Makefile in order to use the driver. - * - @_lld.h, the LLD header file. This file is implicitly - * included by the HLD header file. - * . - * The LLD may be not present in those drivers that do not access the - * hardware directly but through other device drivers, as example the - * @ref MMC_SPI driver uses the @ref SPI and @ref PAL drivers in order - * to implement its functionalities. - * . - *

      Available Device Drivers

      - * The I/O subsystem currently includes support for: - * - @ref HAL. - * - @ref PAL. - * - @ref SERIAL. - * - @ref ADC. - * - @ref CAN. - * - @ref MAC. - * - @ref MMC_SPI. - * - @ref SPI. - * . - */ - -/** - * @defgroup HAL HAL Driver - * @brief Hardware Abstraction Layer. - * @details The HAL driver performs the system initialization and includes - * the platform support code shared by the other drivers. - * - * @ingroup IO - */ - -/** - * @defgroup HAL_LLD HAL Low Level Driver - * @brief @ref HAL low level driver template. - * - * @ingroup HAL - */ - -/** - * @defgroup HAL_CONF Configuration - * @brief @ref HAL Configuration. - * - * @ingroup HAL - */ - -/** - * @defgroup PAL PAL Driver - * @brief I/O Ports Abstraction Layer - * @details This module defines an abstract interface for digital I/O ports. - * Note that most I/O ports functions are just macros. The macros - * have default software implementations that can be redefined in a - * @ref PAL_LLD if the target hardware supports special features like, as - * example, atomic bit set/reset/masking. Please refer to the ports specific - * documentation for details.
      - * The @ref PAL has the advantage to make the access to the I/O ports platform - * independent and still be optimized for the specific architectures.
      - * Note that the @ref PAL_LLD may also offer non standard macro and functions - * in order to support specific features but, of course, the use of such - * interfaces would not be portable. Such interfaces shall be marked with - * the architecture name inside the function names. - * - *

      Implementation Rules

      - * In implementing an @ref PAL_LLD there are some rules/behaviors that - * should be respected. - * - *

      Writing on input pads

      - * The behavior is not specified but there are implementations better than - * others, this is the list of possible implementations, preferred options - * are on top: - * -# The written value is not actually output but latched, should the pads - * be reprogrammed as outputs the value would be in effect. - * -# The write operation is ignored. - * -# The write operation has side effects, as example disabling/enabling - * pull up/down resistors or changing the pad direction. This scenario is - * discouraged, please try to avoid this scenario. - * . - *

      Reading from output pads

      - * The behavior is not specified but there are implementations better than - * others, this is the list of possible implementations, preferred options - * are on top: - * -# The actual pads states are read (not the output latch). - * -# The output latch value is read (regardless of the actual pads states). - * -# Unspecified, please try to avoid this scenario. - * . - *

      Writing unused or unimplemented port bits

      - * The behavior is not specified. - * - *

      Reading from unused or unimplemented port bits

      - * The behavior is not specified. - * - *

      Reading or writing on pins associated to other functionalities

      - * The behavior is not specified. - * - *

      Usage

      - * The use of I/O ports requires the inclusion of the header file @p pal.h, - * this file is not automatically included @p ch.h like the other header - * files. - * - * @ingroup IO - */ - -/** - * @defgroup PAL_LLD PAL Low Level Driver - * @brief @ref PAL low level driver template. - * @details This file is a template for an I/O port low level driver. - * - * @ingroup PAL - */ - -/** - * @defgroup SERIAL Serial Driver - * @brief Generic Serial Driver. - * @details This module implements a generic full duplex serial driver. The - * driver implements a @p SerialDriver interface and uses I/O Queues for - * communication between the upper and the lower driver. Event flags are used - * to notify the application about incoming data, outgoing data and other I/O - * events.
      - * The module also contains functions that make the implementation of the - * interrupt service routines much easier. - * - * @ingroup IO - */ - -/** - * @defgroup SERIAL_LLD Serial Low Level Driver - * @brief @ref SERIAL low level driver template. - * @details This file is a template for a serial low level driver. - * - * @ingroup SERIAL - */ - -/** - * @defgroup SPI SPI Driver - * @brief Generic SPI Driver. - * @details This module implements a generic SPI driver. The driver implements - * a state machine internally: - * @dot - digraph example { - rankdir="LR"; - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.8", height="0.8"]; - edge [fontname=Helvetica, fontsize=8]; - uninit [label="SPI_UNINIT", style="bold"]; - stop [label="SPI_STOP\nLow Power"]; - ready [label="SPI_READY\nClock Enabled"]; - active [label="SPI_ACTIVE\nBus Active"]; - uninit -> stop [label="spiInit()"]; - stop -> ready [label="spiStart()"]; - ready -> ready [label="spiStart()"]; - ready -> ready [label="spiIgnore()"]; - ready -> stop [label="spiStop()"]; - stop -> stop [label="spiStop()"]; - ready -> active [label="spiSelect()"]; - active -> active [label="spiSelect()"]; - active -> ready [label="spiUnselect()"]; - ready -> ready [label="spiUnselect()"]; - active -> active [label="spiIgnore()\nspiExchange()\nspiSend()\nspiReceive()"]; - } - * @enddot - * - * The driver is not thread safe for performance reasons, if you need to access - * the SPI bus from multiple thread then use the @p spiAcquireBus() and - * @p spiReleaseBus() APIs in order to gain exclusive access. - * - * @ingroup IO - */ - -/** - * @defgroup SPI_LLD SPI Low Level Driver - * @brief @ref SPI low level driver template. - * @details This file is a template for a SPI low level driver. - * - * @ingroup SPI - */ - -/** - * @defgroup ADC ADC Driver - * @brief Generic ADC Driver. - * @details This module implements a generic ADC driver. The driver implements - * a state machine internally: - * @dot - digraph example { - rankdir="LR"; - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.8", height="0.8"]; - edge [fontname=Helvetica, fontsize=8]; - uninit [label="ADC_UNINIT", style="bold"]; - stop [label="ADC_STOP\nLow Power"]; - ready [label="ADC_READY\nClock Enabled"]; - running [label="ADC_RUNNING"]; - complete [label="ADC_COMPLETE"]; - uninit -> stop [label="adcInit()"]; - stop -> ready [label="adcStart()"]; - ready -> ready [label="adcStart()"]; - ready -> ready [label="adcWaitConversion()"]; - ready -> stop [label="adcStop()"]; - stop -> stop [label="adcStop()"]; - ready -> running [label="adcStartConversion()"]; - running -> ready [label="adcStopConversion()"]; - running -> complete [label="End of Conversion"]; - complete -> running [label="adcStartConversion()"]; - complete -> ready [label="adcStopConversion()"]; - complete -> ready [label="adcWaitConversion()"]; - complete -> stop [label="adcStop()"]; - } - * @enddot - * - * The driver supports a continuous conversion mode with circular buffer, - * callback functions allow to process the converted data in real time. - * Please refer to the documentation of the function @p adcStartConversion(). - * - * @ingroup IO - */ - -/** - * @defgroup ADC_LLD ADC Low Level Driver - * @brief @ref ADC low level driver template. - * @details This file is a template for a ADC low level driver. - * - * @ingroup ADC - */ - -/** - * @defgroup CAN CAN Driver - * @brief Generic CAN Driver. - * @details This module implements a generic ADC driver. The driver implements - * a state machine internally: - * @dot - digraph example { - rankdir="LR"; - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.8", height="0.8"]; - edge [fontname=Helvetica, fontsize=8]; - uninit [label="CAN_UNINIT", style="bold"]; - stop [label="CAN_STOP\nLow Power"]; - ready [label="CAN_READY\nClock Enabled"]; - sleep [label="CAN_SLEEP\nLow Power"]; - uninit -> stop [label="canInit()"]; - stop -> stop [label="canStop()"]; - stop -> ready [label="canStart()"]; - ready -> stop [label="canStop()"]; - ready -> ready [label="canReceive()\ncanTransmit()"]; - ready -> ready [label="canStart()"]; - ready -> sleep [label="canSleep()"]; - sleep -> sleep [label="canSleep()"]; - sleep -> ready [label="canWakeup()"]; - sleep -> ready [label="wakeup event"]; - } - * @enddot - * - * @ingroup IO - */ - -/** - * @defgroup CAN_LLD CAN Low Level Driver - * @brief @ref CAN low level driver template. - * - * @ingroup CAN - */ - -/** - * @defgroup PWM PWM Driver - * @brief Generic PWM Driver. - * @details This module implements a generic PWM driver. The driver implements - * a state machine internally: - * @dot - digraph example { - rankdir="LR"; - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.8", height="0.8"]; - edge [fontname=Helvetica, fontsize=8]; - uninit [label="PWM_UNINIT", style="bold"]; - stop [label="PWM_STOP\nLow Power"]; - ready [label="PWM_READY\nClock Enabled"]; - uninit -> stop [label="pwmInit()"]; - stop -> stop [label="pwmStop()"]; - stop -> ready [label="pwmStart()"]; - ready -> stop [label="pwmStop()"]; - ready -> ready [label="pwmEnableChannel()\npwmDisableChannel()"]; - } - * @enddot - * - * @ingroup IO - */ - -/** - * @defgroup PWM_LLD PWM Low Level Driver - * @brief @ref PWM low level driver template. - * - * @ingroup PWM - */ - -/** - * @defgroup MAC MAC Driver - * @brief Generic MAC driver. - * @details This module implements a generic interface for MAC (Media - * Access Control) drivers, as example Ethernet controllers. - * - * @ingroup IO - */ - -/** - * @defgroup MAC_LLD MAC Low Level Driver - * @brief @ref MAC low level driver template. - * @details This file is a template for a MAC low level driver. - * - * @ingroup MAC - */ - -/** - * @defgroup MMC_SPI MMC over SPI Driver - * @brief Generic MMC driver. - * @details This module implements a portable MMC driver that uses a SPI - * driver as physical layer.
      - * The driver implements the following state machine: - * @dot - digraph example { - rankdir="LR"; - node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.8", height="0.8"]; - edge [fontname=Helvetica, fontsize=8]; - - any [label="Any State"]; - stop2 [label="MMC_STOP\nLow Power"]; - uninit [label="MMC_UNINIT", style="bold"]; - stop [label="MMC_STOP\nLow Power"]; - wait [label="MMC_WAIT\nWaiting Card"]; - inserted [label="MMC_INSERTED\nCard Inserted"]; - ready [label="MMC_READY\nCard Ready"]; - reading [label="MMC_READING\nReading"]; - writing [label="MMC_WRITING\nWriting"]; - - uninit -> stop [label="mmcInit()"]; - stop -> wait [label="mmcStart()", constraint=false]; - wait -> inserted [label="insertion (inserted event)"]; - inserted -> inserted [label="mmcDisconnect()"]; - inserted -> ready [label="mmcConnect()"]; - ready -> ready [label="mmcConnect()"]; - ready -> inserted [label="mmcDisconnect()"]; - ready -> reading [label="mmcStartSequentialRead()"]; - reading -> reading [label="mmcSequentialRead()"]; - reading -> ready [label="mmcStopSequentialRead()"]; - reading -> ready [label="read error"]; - ready -> writing [label="mmcStartSequentialWrite()"]; - writing -> writing [label="mmcSequentialWrite()"]; - writing -> ready [label="mmcStopSequentialWrite()"]; - writing -> ready [label="write error"]; - - inserted -> wait [label="removal (removed event)"]; - ready -> wait [label="removal (removed event)"]; - reading -> wait [label="removal (removed event)"]; - writing -> wait [label="removal (removed event)"]; - - any -> stop2 [label="mmcStop()"]; - } - * @enddot - * - * The MMC drivers currently supports only cards with capacity up to 2GB - * and does not implement CRC checking. Hot plugging and removal are supported - * through kernel events. - * - * @ingroup IO - */ - - diff --git a/ChibiOS_2.0.8/os/hal/hal.mk b/ChibiOS_2.0.8/os/hal/hal.mk deleted file mode 100644 index 4ff7e83..0000000 --- a/ChibiOS_2.0.8/os/hal/hal.mk +++ /dev/null @@ -1,14 +0,0 @@ -# List of all the ChibiOS/RT HAL files, there is no need to remove the files -# from this list, you can disable parts of the kernel by editing halconf.h. -HALSRC = ${CHIBIOS}/os/hal/src/hal.c \ - ${CHIBIOS}/os/hal/src/adc.c \ - ${CHIBIOS}/os/hal/src/can.c \ - ${CHIBIOS}/os/hal/src/mac.c \ - ${CHIBIOS}/os/hal/src/pal.c \ - ${CHIBIOS}/os/hal/src/pwm.c \ - ${CHIBIOS}/os/hal/src/serial.c \ - ${CHIBIOS}/os/hal/src/spi.c \ - ${CHIBIOS}/os/hal/src/mmc_spi.c - -# Required include directories -HALINC = ${CHIBIOS}/os/hal/include diff --git a/ChibiOS_2.0.8/os/hal/include/adc.h b/ChibiOS_2.0.8/os/hal/include/adc.h deleted file mode 100644 index 127b546..0000000 --- a/ChibiOS_2.0.8/os/hal/include/adc.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file adc.h - * @brief ADC Driver macros and structures. - * - * @addtogroup ADC - * @{ - */ - -#ifndef _ADC_H_ -#define _ADC_H_ - -#if CH_HAL_USE_ADC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if !CH_USE_SEMAPHORES -#error "ADC driver requires CH_USE_SEMAPHORES" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver state machine possible states. - */ -typedef enum { - ADC_UNINIT = 0, /**< @brief Not initialized. */ - ADC_STOP = 1, /**< @brief Stopped. */ - ADC_READY = 2, /**< @brief Ready. */ - ADC_RUNNING = 3, /**< @brief Conversion running. */ - ADC_COMPLETE = 4 /**< @brief Conversion complete.*/ -} adcstate_t; - -#include "adc_lld.h" - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void adcInit(void); - void adcObjectInit(ADCDriver *adcp); - void adcStart(ADCDriver *adcp, const ADCConfig *config); - void adcStop(ADCDriver *adcp); - bool_t adcStartConversion(ADCDriver *adcp, - const ADCConversionGroup *grpp, - adcsample_t *samples, - size_t depth, - adccallback_t callback); - void adcStopConversion(ADCDriver *adcp); - msg_t adcWaitConversion(ADCDriver *adcp, systime_t timeout); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_ADC */ - -#endif /* _ADC_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/include/can.h b/ChibiOS_2.0.8/os/hal/include/can.h deleted file mode 100644 index 6041615..0000000 --- a/ChibiOS_2.0.8/os/hal/include/can.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file can.h - * @brief CAN Driver macros and structures. - * - * @addtogroup CAN - * @{ - */ - -#ifndef _CAN_H_ -#define _CAN_H_ - -#if CH_HAL_USE_CAN || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Errors rate warning. - */ -#define CAN_LIMIT_WARNING 1 -/** - * @brief Errors rate error. - */ -#define CAN_LIMIT_ERROR 2 -/** - * @brief Bus off condition reached. - */ -#define CAN_BUS_OFF_ERROR 4 -/** - * @brief Framing error of some kind on the CAN bus. - */ -#define CAN_FRAMING_ERROR 8 -/** - * @brief Overflow in receive queue. - */ -#define CAN_OVERFLOW_ERROR 16 - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Sleep mode related APIs inclusion switch. - */ -#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) -#define CAN_USE_SLEEP_MODE TRUE -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if !CH_USE_SEMAPHORES || !CH_USE_EVENTS -#error "CAN driver requires CH_USE_SEMAPHORES and CH_USE_EVENTS" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver state machine possible states. - */ -typedef enum { - CAN_UNINIT = 0, /**< @brief Not initialized. */ - CAN_STOP = 1, /**< @brief Stopped. */ - CAN_STARTING = 2, /**< @brief Starting. */ - CAN_READY = 3, /**< @brief Ready. */ - CAN_SLEEP = 4 /**< @brief Sleep state. */ -} canstate_t; - -#include "can_lld.h" - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Adds some flags to the CAN status mask. - * - * @param[in] canp pointer to the @p CANDriver object - * @param[in] mask flags to be added to the status mask - */ -#define canAddFlagsI(canp, mask) ((canp)->cd_status |= (mask)) - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void canInit(void); - void canObjectInit(CANDriver *canp); - void canStart(CANDriver *canp, const CANConfig *config); - void canStop(CANDriver *canp); - msg_t canTransmit(CANDriver *canp, const CANTxFrame *ctfp, systime_t timeout); - msg_t canReceive(CANDriver *canp, CANRxFrame *crfp, systime_t timeout); - canstatus_t canGetAndClearFlags(CANDriver *canp); -#if CAN_USE_SLEEP_MODE - void canSleep(CANDriver *canp); - void canWakeup(CANDriver *canp); -#endif /* CAN_USE_SLEEP_MODE */ -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_CAN */ - -#endif /* _CAN_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/include/hal.h b/ChibiOS_2.0.8/os/hal/include/hal.h deleted file mode 100644 index c912ab0..0000000 --- a/ChibiOS_2.0.8/os/hal/include/hal.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file hal.h - * @brief HAL subsystem header. - * - * @addtogroup HAL - * @{ - */ - -#ifndef _HAL_H_ -#define _HAL_H_ - -#include "board.h" -#include "halconf.h" - -#include "hal_lld.h" - -#include "pal.h" -#include "adc.h" -#include "can.h" -#include "mac.h" -#include "pwm.h" -#include "serial.h" -#include "spi.h" -#include "mmc_spi.h" - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void halInit(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/include/mac.h b/ChibiOS_2.0.8/os/hal/include/mac.h deleted file mode 100644 index d6942ee..0000000 --- a/ChibiOS_2.0.8/os/hal/include/mac.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file mac.h - * @brief MAC Driver macros and structures. - * @addtogroup MAC - * @{ - */ - -#ifndef _MAC_H_ -#define _MAC_H_ - -#if CH_HAL_USE_MAC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if !CH_USE_SEMAPHORES || !CH_USE_EVENTS -#error "the MAC driver requires CH_USE_SEMAPHORES and CH_USE_EVENTS" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -#include "mac_lld.h" - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Returns the received frames event source. - * - * @param[in] macp pointer to the @p MACDriver object - * @return The pointer to the @p EventSource structure. - */ -#if CH_USE_EVENTS || defined(__DOXYGEN__) -#define macGetReceiveEventSource(macp) (&(macp)->md_rdevent) -#endif - -/** - * @brief Writes to a transmit descriptor's stream. - * - * @param[in] tdp pointer to a @p MACTransmitDescriptor structure - * @param[in] buf pointer to the buffer containing the data to be written - * @param[in] size number of bytes to be written - * @return The number of bytes written into the descriptor's - * stream, this value can be less than the amount - * specified in the parameter @p size if the maximum frame - * size is reached. - */ -#define macWriteTransmitDescriptor(tdp, buf, size) \ - mac_lld_write_transmit_descriptor(tdp, buf, size) - -/** - * @brief Reads from a receive descriptor's stream. - * - * @param[in] rdp pointer to a @p MACReceiveDescriptor structure - * @param[in] buf pointer to the buffer that will receive the read data - * @param[in] size number of bytes to be read - * @return The number of bytes read from the descriptor's stream, this - * value can be less than the amount specified in the - * parameter @p size if there are no more bytes to read. - */ -#define macReadReceiveDescriptor(rdp, buf, size) \ - mac_lld_read_receive_descriptor(rdp, buf, size) - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void macInit(void); - void macObjectInit(MACDriver *macp); - void macSetAddress(MACDriver *macp, const uint8_t *p); - msg_t macWaitTransmitDescriptor(MACDriver *macp, - MACTransmitDescriptor *tdp, - systime_t time); - void macReleaseTransmitDescriptor(MACTransmitDescriptor *tdp); - msg_t macWaitReceiveDescriptor(MACDriver *macp, - MACReceiveDescriptor *rdp, - systime_t time); - void macReleaseReceiveDescriptor(MACReceiveDescriptor *rdp); - bool_t macPollLinkStatus(MACDriver *macp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_MAC */ - -#endif /* _MAC_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/include/mii.h b/ChibiOS_2.0.8/os/hal/include/mii.h deleted file mode 100644 index c6824b7..0000000 --- a/ChibiOS_2.0.8/os/hal/include/mii.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * Parts of this file are borrowed by the Linux include file linux/mii.h: - * Copyright (C) 1996, 1999, 2001 David S. Miller (davem@redhat.com) - */ - -/*-* - * @file mii.h - * @brief MII Driver macros and structures. - * - * @addtogroup MII - * @{ - */ - -#ifndef _MII_H_ -#define _MII_H_ - -/* - * Generic MII registers. Note, not all registers are present on all PHY - * devices and some extra registers may be present. - */ -#define MII_BMCR 0x00 /**< Basic mode control register. */ -#define MII_BMSR 0x01 /**< Basic mode status register. */ -#define MII_PHYSID1 0x02 /**< PHYS ID 1. */ -#define MII_PHYSID2 0x03 /**< PHYS ID 2. */ -#define MII_ADVERTISE 0x04 /**< Advertisement control reg. */ -#define MII_LPA 0x05 /**< Link partner ability reg. */ -#define MII_EXPANSION 0x06 /**< Expansion register. */ -#define MII_CTRL1000 0x09 /**< 1000BASE-T control. */ -#define MII_STAT1000 0x0a /**< 1000BASE-T status. */ -#define MII_ESTATUS 0x0f /**< Extended Status. */ -#define MII_DCOUNTER 0x12 /**< Disconnect counter. */ -#define MII_FCSCOUNTER 0x13 /**< False carrier counter. */ -#define MII_NWAYTEST 0x14 /**< N-way auto-neg test reg. */ -#define MII_RERRCOUNTER 0x15 /**< Receive error counter. */ -#define MII_SREVISION 0x16 /**< Silicon revision. */ -#define MII_RESV1 0x17 /**< Reserved. */ -#define MII_LBRERROR 0x18 /**< Lpback, rx, bypass error. */ -#define MII_PHYADDR 0x19 /**< PHY address. */ -#define MII_RESV2 0x1a /**< Reserved. */ -#define MII_TPISTATUS 0x1b /**< TPI status for 10mbps. */ -#define MII_NCONFIG 0x1c /**< Network interface config. */ - -/* - * Basic mode control register. - */ -#define BMCR_RESV 0x003f /**< Unused. */ -#define BMCR_SPEED1000 0x0040 /**< MSB of Speed (1000). */ -#define BMCR_CTST 0x0080 /**< Collision test. */ -#define BMCR_FULLDPLX 0x0100 /**< Full duplex. */ -#define BMCR_ANRESTART 0x0200 /**< Auto negotiation restart. */ -#define BMCR_ISOLATE 0x0400 /**< Disconnect DP83840 from MII. */ -#define BMCR_PDOWN 0x0800 /**< Powerdown. */ -#define BMCR_ANENABLE 0x1000 /**< Enable auto negotiation. */ -#define BMCR_SPEED100 0x2000 /**< Select 100Mbps. */ -#define BMCR_LOOPBACK 0x4000 /**< TXD loopback bits. */ -#define BMCR_RESET 0x8000 /**< Reset. */ - -/* - * Basic mode status register. - */ -#define BMSR_ERCAP 0x0001 /**< Ext-reg capability. */ -#define BMSR_JCD 0x0002 /**< Jabber detected. */ -#define BMSR_LSTATUS 0x0004 /**< Link status. */ -#define BMSR_ANEGCAPABLE 0x0008 /**< Able to do auto-negotiation. */ -#define BMSR_RFAULT 0x0010 /**< Remote fault detected. */ -#define BMSR_ANEGCOMPLETE 0x0020 /**< Auto-negotiation complete. */ -#define BMSR_RESV 0x00c0 /**< Unused. */ -#define BMSR_ESTATEN 0x0100 /**< Extended Status in R15. */ -#define BMSR_100HALF2 0x0200 /**< Can do 100BASE-T2 HDX. */ -#define BMSR_100FULL2 0x0400 /**< Can do 100BASE-T2 FDX. */ -#define BMSR_10HALF 0x0800 /**< Can do 10mbps, half-duplex. */ -#define BMSR_10FULL 0x1000 /**< Can do 10mbps, full-duplex. */ -#define BMSR_100HALF 0x2000 /**< Can do 100mbps, half-duplex. */ -#define BMSR_100FULL 0x4000 /**< Can do 100mbps, full-duplex. */ -#define BMSR_100BASE4 0x8000 /**< Can do 100mbps, 4k packets. */ - -/* - * Advertisement control register. - */ -#define ADVERTISE_SLCT 0x001f /**< Selector bits. */ -#define ADVERTISE_CSMA 0x0001 /**< Only selector supported. */ -#define ADVERTISE_10HALF 0x0020 /**< Try for 10mbps half-duplex. */ -#define ADVERTISE_1000XFULL 0x0020 /**< Try for 1000BASE-X full-duplex.*/ -#define ADVERTISE_10FULL 0x0040 /**< Try for 10mbps full-duplex. */ -#define ADVERTISE_1000XHALF 0x0040 /**< Try for 1000BASE-X half-duplex.*/ -#define ADVERTISE_100HALF 0x0080 /**< Try for 100mbps half-duplex. */ -#define ADVERTISE_1000XPAUSE 0x0080 /**< Try for 1000BASE-X pause. */ -#define ADVERTISE_100FULL 0x0100 /**< Try for 100mbps full-duplex. */ -#define ADVERTISE_1000XPSE_ASYM 0x0100 /**< Try for 1000BASE-X asym pause. */ -#define ADVERTISE_100BASE4 0x0200 /**< Try for 100mbps 4k packets. */ -#define ADVERTISE_PAUSE_CAP 0x0400 /**< Try for pause. */ -#define ADVERTISE_PAUSE_ASYM 0x0800 /**< Try for asymetric pause. */ -#define ADVERTISE_RESV 0x1000 /**< Unused. */ -#define ADVERTISE_RFAULT 0x2000 /**< Say we can detect faults. */ -#define ADVERTISE_LPACK 0x4000 /**< Ack link partners response. */ -#define ADVERTISE_NPAGE 0x8000 /**< Next page bit. */ - -#define ADVERTISE_FULL (ADVERTISE_100FULL | ADVERTISE_10FULL | \ - ADVERTISE_CSMA) -#define ADVERTISE_ALL (ADVERTISE_10HALF | ADVERTISE_10FULL | \ - ADVERTISE_100HALF | ADVERTISE_100FULL) - -/* - * Link partner ability register. - */ -#define LPA_SLCT 0x001f /**< Same as advertise selector. */ -#define LPA_10HALF 0x0020 /**< Can do 10mbps half-duplex. */ -#define LPA_1000XFULL 0x0020 /**< Can do 1000BASE-X full-duplex. */ -#define LPA_10FULL 0x0040 /**< Can do 10mbps full-duplex. */ -#define LPA_1000XHALF 0x0040 /**< Can do 1000BASE-X half-duplex. */ -#define LPA_100HALF 0x0080 /**< Can do 100mbps half-duplex. */ -#define LPA_1000XPAUSE 0x0080 /**< Can do 1000BASE-X pause. */ -#define LPA_100FULL 0x0100 /**< Can do 100mbps full-duplex. */ -#define LPA_1000XPAUSE_ASYM 0x0100 /**< Can do 1000BASE-X pause asym. */ -#define LPA_100BASE4 0x0200 /**< Can do 100mbps 4k packets. */ -#define LPA_PAUSE_CAP 0x0400 /**< Can pause. */ -#define LPA_PAUSE_ASYM 0x0800 /**< Can pause asymetrically. */ -#define LPA_RESV 0x1000 /**< Unused. */ -#define LPA_RFAULT 0x2000 /**< Link partner faulted. */ -#define LPA_LPACK 0x4000 /**< Link partner acked us. */ -#define LPA_NPAGE 0x8000 /**< Next page bit. */ - -#define LPA_DUPLEX (LPA_10FULL | LPA_100FULL) -#define LPA_100 (LPA_100FULL | LPA_100HALF | LPA_100BASE4) - -/* - * Expansion register for auto-negotiation. - */ -#define EXPANSION_NWAY 0x0001 /**< Can do N-way auto-nego. */ -#define EXPANSION_LCWP 0x0002 /**< Got new RX page code word. */ -#define EXPANSION_ENABLENPAGE 0x0004 /**< This enables npage words. */ -#define EXPANSION_NPCAPABLE 0x0008 /**< Link partner supports npage. */ -#define EXPANSION_MFAULTS 0x0010 /**< Multiple faults detected. */ -#define EXPANSION_RESV 0xffe0 /**< Unused. */ - -#define ESTATUS_1000_TFULL 0x2000 /**< Can do 1000BT Full. */ -#define ESTATUS_1000_THALF 0x1000 /**< Can do 1000BT Half. */ - -/* - * N-way test register. - */ -#define NWAYTEST_RESV1 0x00ff /**< Unused. */ -#define NWAYTEST_LOOPBACK 0x0100 /**< Enable loopback for N-way. */ -#define NWAYTEST_RESV2 0xfe00 /**< Unused. */ - -/* - * 1000BASE-T Control register. - */ -#define ADVERTISE_1000FULL 0x0200 /**< Advertise 1000BASE-T full duplex.*/ -#define ADVERTISE_1000HALF 0x0100 /**< Advertise 1000BASE-T half duplex.*/ - -/* - * 1000BASE-T Status register. - */ -#define LPA_1000LOCALRXOK 0x2000 /**< Link partner local receiver status.*/ -#define LPA_1000REMRXOK 0x1000 /**< Link partner remote receiver status.*/ -#define LPA_1000FULL 0x0800 /**< Link partner 1000BASE-T full duplex.*/ -#define LPA_1000HALF 0x0400 /**< Link partner 1000BASE-T half duplex.*/ - -/* - * PHY identifiers. - */ -#define MII_DM9161_ID 0x0181b8a0 -#define MII_AM79C875_ID 0x00225540 -#define MII_KS8721_ID 0x00221610 - -#endif /* _MII_H_ */ - -/*-* @} */ diff --git a/ChibiOS_2.0.8/os/hal/include/mmc_spi.h b/ChibiOS_2.0.8/os/hal/include/mmc_spi.h deleted file mode 100644 index 64723d6..0000000 --- a/ChibiOS_2.0.8/os/hal/include/mmc_spi.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file mmc_spi.h - * @brief MMC over SPI driver header. - * - * @addtogroup MMC_SPI - * @{ - */ - -#ifndef _MMC_SPI_H_ -#define _MMC_SPI_H_ - -#if CH_HAL_USE_MMC_SPI || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -#define MMC_CMD0_RETRY 10 -#define MMC_CMD1_RETRY 100 -#define MMC_WAIT_DATA 10000 - -#define MMC_CMDGOIDLE 0 -#define MMC_CMDINIT 1 -#define MMC_CMDREADCSD 9 -#define MMC_CMDSTOP 12 -#define MMC_CMDSETBLOCKLEN 16 -#define MMC_CMDREAD 17 -#define MMC_CMDREADMULTIPLE 18 -#define MMC_CMDWRITE 24 -#define MMC_CMDWRITEMULTIPLE 25 - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Block size for MMC transfers. - */ -#if !defined(MMC_SECTOR_SIZE) || defined(__DOXYGEN__) -#define MMC_SECTOR_SIZE 512 -#endif - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - * This option is recommended also if the SPI driver does not - * use a DMA channel and heavily loads the CPU. - */ -#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) -#define MMC_NICE_WAITING TRUE -#endif - -/** - * @brief Number of positive insertion queries before generating the - * insertion event. - */ -#if !defined(MMC_POLLING_INTERVAL) || defined(__DOXYGEN__) -#define MMC_POLLING_INTERVAL 10 -#endif - -/** - * @brief Interval, in milliseconds, between insertion queries. - */ -#if !defined(MMC_POLLING_DELAY) || defined(__DOXYGEN__) -#define MMC_POLLING_DELAY 10 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if !CH_HAL_USE_SPI || !CH_USE_EVENTS -#error "MMC_SPI driver requires CH_HAL_USE_SPI and CH_USE_EVENTS" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver state machine possible states. - */ -typedef enum { - MMC_UNINIT = 0, /**< @brief Not initialized. */ - MMC_STOP = 1, /**< @brief Stopped. */ - MMC_WAIT = 2, /**< @brief Waiting card. */ - MMC_INSERTED = 3, /**< @brief Card inserted. */ - MMC_READY = 4, /**< @brief Card ready. */ - MMC_READING = 5, /**< @brief Reading. */ - MMC_WRITING = 6 /**< @brief Writing. */ -} mmcstate_t; - -/** - * @brief Function used to query some hardware status bits. - * - * @return The status. - */ -typedef bool_t (*mmcquery_t)(void); - -/** - * @brief Driver configuration structure. - */ -typedef struct { - -} MMCConfig; - -/** - * @brief Structure representing a MMC driver. - */ -typedef struct { - /** - * @brief Driver state. - */ - mmcstate_t mmc_state; - /** - * @brief Current configuration data. - */ - const MMCConfig *mmc_config; - /** - * @brief SPI driver associated to this MMC driver. - */ - SPIDriver *mmc_spip; - /** - * @brief SPI low speed configuration used during initialization. - */ - const SPIConfig *mmc_lscfg; - /** - * @brief SPI high speed configuration used during transfers. - */ - const SPIConfig *mmc_hscfg; - /** - * @brief Write protect status query function. - */ - mmcquery_t mmc_is_protected; - /** - * @brief Insertion status query function. - */ - mmcquery_t mmc_is_inserted; - /** - * @brief Card insertion event source. - */ - EventSource mmc_inserted_event; - /** - * @brief Card removal event source. - */ - EventSource mmc_removed_event; - /** - * @brief MMC insertion polling timer. - */ - VirtualTimer mmc_vt; - /** - * @brief Insertion counter. - */ - uint_fast8_t mmc_cnt; -} MMCDriver; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Returns the driver state. - */ -#define mmcGetDriverState(mmcp) ((mmcp)->mmc_state) - -/** - * @brief Returns the write protect status. - */ -#define mmcIsWriteProtected(mmcp) ((mmcp)->mmc_is_protected()) - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void mmcInit(void); - void mmcObjectInit(MMCDriver *mmcp, SPIDriver *spip, - const SPIConfig *lscfg, const SPIConfig *hscfg, - mmcquery_t is_protected, mmcquery_t is_inserted); - void mmcStart(MMCDriver *mmcp, const MMCConfig *config); - void mmcStop(MMCDriver *mmcp); - bool_t mmcConnect(MMCDriver *mmcp); - bool_t mmcDisconnect(MMCDriver *mmcp); - bool_t mmcStartSequentialRead(MMCDriver *mmcp, uint32_t startblk); - bool_t mmcSequentialRead(MMCDriver *mmcp, uint8_t *buffer); - bool_t mmcStopSequentialRead(MMCDriver *mmcp); - bool_t mmcStartSequentialWrite(MMCDriver *mmcp, uint32_t startblk); - bool_t mmcSequentialWrite(MMCDriver *mmcp, const uint8_t *buffer); - bool_t mmcStopSequentialWrite(MMCDriver *mmcp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_MMC_SPI */ - -#endif /* _MMC_SPI_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/include/pal.h b/ChibiOS_2.0.8/os/hal/include/pal.h deleted file mode 100644 index 05cb4aa..0000000 --- a/ChibiOS_2.0.8/os/hal/include/pal.h +++ /dev/null @@ -1,508 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file pal.h - * @brief I/O Ports Abstraction Layer macros, types and structures. - * - * @addtogroup PAL - * @{ - */ - -#ifndef _PAL_H_ -#define _PAL_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Bits in a mode word dedicated as mode selector. - * @details The other bits are not defined and may be used as device-specific - * option bits. - */ -#define PAL_MODE_MASK 0xF - -/** - * @brief After reset state. - * @details The state itself is not specified and is architecture dependent, - * it is guaranteed to be equal to the after-reset state. It is - * usually an input state. - */ -#define PAL_MODE_RESET 0 - -/** - * @brief Safe state for unconnected pads. - * @details The state itself is not specified and is architecture dependent, - * it may be mapped on @p PAL_MODE_INPUT_PULLUP, - * @p PAL_MODE_INPUT_PULLDOWN or @p PAL_MODE_OUTPUT_PUSHPULL as - * example. - */ -#define PAL_MODE_UNCONNECTED 1 - -/** - * @brief Regular input high-Z pad. - */ -#define PAL_MODE_INPUT 2 - -/** - * @brief Input pad with weak pull up resistor. - */ -#define PAL_MODE_INPUT_PULLUP 3 - -/** - * @brief Input pad with weak pull down resistor. - */ -#define PAL_MODE_INPUT_PULLDOWN 4 - -/** - * @brief Analog input mode. - */ -#define PAL_MODE_INPUT_ANALOG 5 - -/** - * @brief Push-pull output pad. - */ -#define PAL_MODE_OUTPUT_PUSHPULL 6 - -/** - * @brief Open-drain output pad. - */ -#define PAL_MODE_OUTPUT_OPENDRAIN 7 - -/** - * @brief Logical low state. - */ -#define PAL_LOW 0 - -/** - * @brief Logical high state. - */ -#define PAL_HIGH 1 - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -#include "pal_lld.h" - -/** - * @brief I/O bus descriptor. - * @details This structure describes a group of contiguous digital I/O lines - * that have to be handled as bus. - * @note I/O operations on a bus do not affect I/O lines on the same port but - * not belonging to the bus. - */ -typedef struct { - /** - * @brief Port identifier. - */ - ioportid_t bus_portid; - /** - * @brief Bus mask aligned to port bit 0. - * @note The bus mask implicitly define the bus width. A logical AND is - * performed on the bus data. - */ - ioportmask_t bus_mask; - /** - * @brief Offset, within the port, of the least significant bit of the bus. - */ - uint_fast8_t bus_offset; -} IOBus; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Port bit helper macro. - * @details This macro calculates the mask of a bit within a port. - * - * @param[in] n bit position within the port - * @return The bit mask. - */ -#define PAL_PORT_BIT(n) ((ioportmask_t)(1 << (n))) - - -/** - * @brief Bits group mask helper. - * @details This macro calculates the mask of a bits group. - * - * @param[in] width group width - * @return The group mask. - */ -#define PAL_GROUP_MASK(width) ((ioportmask_t)(1 << (width)) - 1) - -/** - * @brief Data part of a static I/O bus initializer. - * @details This macro should be used when statically initializing an I/O bus - * that is part of a bigger structure. - * - * @param[in] name name of the IOBus variable - * @param[in] port I/O port descriptor - * @param[in] width bus width in bits - * @param[in] offset bus bit offset within the port - */ -#define _IOBUS_DATA(name, port, width, offset) \ - {port, PAL_GROUP_MASK(width), offset} - -/** - * @brief Static I/O bus initializer. - * - * @param[in] name name of the IOBus variable - * @param[in] port I/O port descriptor - * @param[in] width bus width in bits - * @param[in] offset bus bit offset within the port - */ -#define IOBUS_DECL(name, port, width, offset) \ - IOBus name = _IOBUS_DATA(name, port, width, offset) - -/** - * @brief PAL subsystem initialization. - * - * @param[in] config pointer to an architecture specific configuration - * structure. This structure is defined in the low level driver - * header. - */ -#define palInit(config) pal_lld_init(config) - -/** - * @brief Reads the physical I/O port states. - * @note The default implementation always return zero and computes the - * parameter eventual side effects. - * - * @param[in] port port identifier - * @return The port logical states. - */ -#if !defined(pal_lld_readport) || defined(__DOXYGEN__) -#define palReadPort(port) ((void)(port), 0) -#else -#define palReadPort(port) pal_lld_readport(port) -#endif - -/** - * @brief Reads the output latch. - * @details The purpose of this function is to read back the latched output - * value. - * @note The default implementation always return zero and computes the - * parameter eventual side effects. - * - * @param[in] port port identifier - * @return The latched logical states. - */ -#if !defined(pal_lld_readlatch) || defined(__DOXYGEN__) -#define palReadLatch(port) ((void)(port), 0) -#else -#define palReadLatch(port) pal_lld_readlatch(port) -#endif - -/** - * @brief Writes a bits mask on a I/O port. - * @note The default implementation does nothing except computing the - * parameters eventual side effects. - * - * @param[in] port port identifier - * @param[in] bits bits to be written on the specified port - */ -#if !defined(pal_lld_writeport) || defined(__DOXYGEN__) -#define palWritePort(port, bits) ((void)(port), (void)(bits)) -#else -#define palWritePort(port, bits) pal_lld_writeport(port, bits) -#endif - -/** - * @brief Sets a bits mask on a I/O port. - * @note The operation is not guaranteed to be atomic on all the - * architectures, for atomicity and/or portability reasons you may - * need to enclose port I/O operations between @p chSysLock() and - * @p chSysUnlock(). - * @note The default implementation is non atomic and not necessarily - * optimal. Low level drivers may optimize the function by using - * specific hardware or coding. - * - * @param[in] port port identifier - * @param[in] bits bits to be ORed on the specified port - */ -#if !defined(pal_lld_setport) || defined(__DOXYGEN__) -#define palSetPort(port, bits) { \ - palWritePort(port, palReadLatch(port) | (bits)); \ -} -#else -#define palSetPort(port, bits) pal_lld_setport(port, bits) -#endif - -/** - * @brief Clears a bits mask on a I/O port. - * @note The operation is not guaranteed to be atomic on all the - * architectures, for atomicity and/or portability reasons you may - * need to enclose port I/O operations between @p chSysLock() and - * @p chSysUnlock(). - * @note The default implementation is non atomic and not necessarily - * optimal. Low level drivers may optimize the function by using - * specific hardware or coding. - * - * @param[in] port port identifier - * @param[in] bits bits to be cleared on the specified port - * - */ -#if !defined(pal_lld_clearport) || defined(__DOXYGEN__) -#define palClearPort(port, bits) { \ - palWritePort(port, palReadLatch(port) & ~(bits)); \ -} -#else -#define palClearPort(port, bits) pal_lld_clearport(port, bits) -#endif - -/** - * @brief Toggles a bits mask on a I/O port. - * @note The operation is not guaranteed to be atomic on all the - * architectures, for atomicity and/or portability reasons you may - * need to enclose port I/O operations between @p chSysLock() and - * @p chSysUnlock(). - * @note The default implementation is non atomic and not necessarily - * optimal. Low level drivers may optimize the function by using - * specific hardware or coding. - * - * @param[in] port port identifier - * @param[in] bits bits to be XORed on the specified port - */ -#if !defined(pal_lld_toggleport) || defined(__DOXYGEN__) -#define palTogglePort(port, bits) { \ - palWritePort(port, palReadLatch(port) ^ (bits)); \ -} -#else -#define palTogglePort(port, bits) pal_lld_toggleport(port, bits) -#endif - -/** - * @brief Reads a group of bits. - * - * @param[in] port port identifier - * @param[in] mask group mask, a logical AND is performed on the input - * data - * @param[in] offset group bit offset within the port - * @return The group logical states. - */ -#if !defined(pal_lld_readgroup) || defined(__DOXYGEN__) -#define palReadGroup(port, mask, offset) \ - ((palReadPort(port) >> (offset)) & (mask)) -#else -#define palReadGroup(port, mask, offset) pal_lld_readgroup(port, mask, offset) -#endif - -/** - * @brief Writes a group of bits. - * - * @param[in] port port identifier - * @param[in] mask group mask, a logical AND is performed on the - * output data - * @param[in] offset group bit offset within the port - * @param[in] bits bits to be written. Values exceeding the group - * width are masked. - */ -#if !defined(pal_lld_writegroup) || defined(__DOXYGEN__) -#define palWriteGroup(port, mask, offset, bits) { \ - palWritePort(port, (palReadLatch(port) & ~((mask) << (offset))) | \ - (((bits) & (mask)) << (offset))); \ -} -#else -#define palWriteGroup(port, mask, offset, bits) \ - pal_lld_writegroup(port, mask, offset, bits) -#endif - - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * @note Programming an unknown or unsupported mode is silently ignored. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] mode group mode - * - */ -#if !defined(pal_lld_setgroupmode) || defined(__DOXYGEN__) -#define palSetGroupMode(port, mask, mode) -#else -#define palSetGroupMode(port, mask, mode) pal_lld_setgroupmode(port, mask, mode) -#endif - -/** - * @brief Reads an input pad logical state. - * @note The default implementation not necessarily optimal. Low level - * drivers may optimize the function by using specific hardware - * or coding. - * @note The default implementation internally uses the @p palReadPort(). - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - * @return The logical state. - * @retval PAL_LOW low logical state. - * @retval PAL_HIGH high logical state. - * - */ -#if !defined(pal_lld_readpad) || defined(__DOXYGEN__) -#define palReadPad(port, pad) ((palReadPort(port) >> (pad)) & 1) -#else -#define palReadPad(port, pad) pal_lld_readpad(port, pad) -#endif - -/** - * @brief Writes a logical state on an output pad. - * @note The operation is not guaranteed to be atomic on all the - * architectures, for atomicity and/or portability reasons you may - * need to enclose port I/O operations between @p chSysLock() and - * @p chSysUnlock(). - * @note The default implementation is non atomic and not necessarily - * optimal. Low level drivers may optimize the function by using - * specific hardware or coding. - * @note The default implementation internally uses the @p palReadLatch() - * and @p palWritePort(). - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - * @param[in] bit logical value, the value must be @p PAL_LOW or - * @p PAL_HIGH - */ -#if !defined(pal_lld_writepad) || defined(__DOXYGEN__) -#define palWritePad(port, pad, bit) { \ - palWritePort(port, (palReadLatch(port) & ~PAL_PORT_BIT(pad)) | \ - (((bit) & 1) << pad)); \ -} -#else -#define palWritePad(port, pad, bit) pal_lld_writepad(port, pad, bit) -#endif - -/** - * @brief Sets a pad logical state to @p PAL_HIGH. - * @note The operation is not guaranteed to be atomic on all the - * architectures, for atomicity and/or portability reasons you may - * need to enclose port I/O operations between @p chSysLock() and - * @p chSysUnlock(). - * @note The default implementation is non atomic and not necessarily - * optimal. Low level drivers may optimize the function by using - * specific hardware or coding. - * @note The default implementation internally uses the @p palSetPort(). - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - */ -#if !defined(pal_lld_setpad) || defined(__DOXYGEN__) -#define palSetPad(port, pad) palSetPort(port, PAL_PORT_BIT(pad)) -#else -#define palSetPad(port, pad) pal_lld_setpad(port, pad) -#endif - -/** - * @brief Clears a pad logical state to @p PAL_LOW. - * @note The operation is not guaranteed to be atomic on all the - * architectures, for atomicity and/or portability reasons you may - * need to enclose port I/O operations between @p chSysLock() and - * @p chSysUnlock(). - * @note The default implementation is non atomic and not necessarily - * optimal. Low level drivers may optimize the function by using - * specific hardware or coding. - * @note The default implementation internally uses the @p palClearPort(). - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - */ -#if !defined(pal_lld_clearpad) || defined(__DOXYGEN__) -#define palClearPad(port, pad) palClearPort(port, PAL_PORT_BIT(pad)) -#else -#define palClearPad(port, pad) pal_lld_clearpad(port, pad) -#endif - -/** - * @brief Toggles a pad logical state. - * @note The operation is not guaranteed to be atomic on all the - * architectures, for atomicity and/or portability reasons you may - * need to enclose port I/O operations between @p chSysLock() and - * @p chSysUnlock(). - * @note The default implementation is non atomic and not necessarily - * optimal. Low level drivers may optimize the function by using - * specific hardware or coding. - * @note The default implementation internally uses the @p palTogglePort(). - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - */ -#if !defined(pal_lld_togglepad) || defined(__DOXYGEN__) -#define palTogglePad(port, pad) palTogglePort(port, PAL_PORT_BIT(pad)) -#else -#define palTogglePad(port, pad) pal_lld_togglepad(port, pad) -#endif - - -/** - * @brief Pad mode setup. - * @details This function programs a pad with the specified mode. - * @note The default implementation not necessarily optimal. Low level - * drivers may optimize the function by using specific hardware - * or coding. - * @note Programming an unknown or unsupported mode is silently ignored. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - * @param[in] mode pad mode - */ -#if !defined(pal_lld_setpadmode) || defined(__DOXYGEN__) -#define palSetPadMode(port, pad, mode) \ - palSetGroupMode(port, PAL_PORT_BIT(pad), mode) -#else -#define palSetPadMode(port, pad, mode) pal_lld_setpadmode(port, pad, mode) -#endif - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - ioportmask_t palReadBus(IOBus *bus); - void palWriteBus(IOBus *bus, ioportmask_t bits); - void palSetBusMode(IOBus *bus, uint_fast8_t mode); -#ifdef __cplusplus -} -#endif - -#endif /* _PAL_H_ */ - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/include/pwm.h b/ChibiOS_2.0.8/os/hal/include/pwm.h deleted file mode 100644 index 6b4f511..0000000 --- a/ChibiOS_2.0.8/os/hal/include/pwm.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file pwm.h - * @brief PWM Driver macros and structures. - * - * @addtogroup PWM - * @{ - */ - -#ifndef _PWM_H_ -#define _PWM_H_ - -#if CH_HAL_USE_PWM || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver state machine possible states. - */ -typedef enum { - PWM_UNINIT = 0, /**< Not initialized. */ - PWM_STOP = 1, /**< Stopped. */ - PWM_READY = 2, /**< Ready. */ -} pwmstate_t; - -/** - * @brief PWM logic mode. - */ -typedef enum { - PWM_OUTPUT_DISABLED = 0, /**< Output not driven, callback only. */ - PWM_OUTPUT_ACTIVE_HIGH = 1, /**< Idle is logic level 0. */ - PWM_OUTPUT_ACTIVE_LOW = 2 /**< Idle is logic level 1. */ -} pwmmode_t; - -#include "pwm_lld.h" - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Enables a PWM channel. - * @details Programs (or reprograms) a PWM channel. - * @note This function has to be invoked from a lock zone. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] channel PWM channel identifier - * @param[in] width PWM pulse width as clock pulses number - */ -#define pwmEnableChannelI(pwmp, channel, width) \ - pwm_lld_enable_channel(pwmp, channel, width) - -/** - * @brief Disables a PWM channel. - * @details The channel is disabled and its output line returned to the - * idle state. - * @note This function has to be invoked from a lock zone. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] channel PWM channel identifier - */ -#define pwmDisableChannelI(pwmp, channel) \ - pwm_lld_disable_channel(pwmp, channel) - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void pwmInit(void); - void pwmObjectInit(PWMDriver *pwmp); - void pwmStart(PWMDriver *pwmp, const PWMConfig *config); - void pwmStop(PWMDriver *pwmp); - void pwmEnableChannel(PWMDriver *pwmp, - pwmchannel_t channel, - pwmcnt_t width); - void pwmDisableChannel(PWMDriver *pwmp, pwmchannel_t channel); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PWM */ - -#endif /* _PWM_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/include/serial.h b/ChibiOS_2.0.8/os/hal/include/serial.h deleted file mode 100644 index 5a78a33..0000000 --- a/ChibiOS_2.0.8/os/hal/include/serial.h +++ /dev/null @@ -1,305 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file serial.h - * @brief Serial Driver macros and structures. - * - * @addtogroup SERIAL - * @{ - */ - -#ifndef _SERIAL_H_ -#define _SERIAL_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** @brief No pending conditions.*/ -#define SD_NO_ERROR 0 -/** @brief Connection happened.*/ -#define SD_CONNECTED 1 -/** @brief Disconnection happened.*/ -#define SD_DISCONNECTED 2 -/** @brief Parity error happened.*/ -#define SD_PARITY_ERROR 4 -/** @brief Framing error happened.*/ -#define SD_FRAMING_ERROR 8 -/** @brief Overflow happened.*/ -#define SD_OVERRUN_ERROR 16 -/** @brief Noise on the line.*/ -#define SD_NOISE_ERROR 32 -/** @brief Break detected.*/ -#define SD_BREAK_DETECTED 64 - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Default bit rate. - * @details Configuration parameter, this is the baud rate selected for the - * default configuration. - */ -#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) -#define SERIAL_DEFAULT_BITRATE 38400 -#endif - -/** - * @brief Serial buffers size. - * @details Configuration parameter, you can change the depth of the queue - * buffers depending on the requirements of your application. - * @note The default is 64 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_BUFFERS_SIZE 64 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if !CH_USE_QUEUES && !CH_USE_EVENTS -#error "Serial Driver requires CH_USE_QUEUES and CH_USE_EVENTS" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver state machine possible states. - */ -typedef enum { - SD_UNINIT = 0, /**< @brief Not initialized. */ - SD_STOP = 1, /**< @brief Stopped. */ - SD_READY = 2 /**< @brief Ready. */ -} sdstate_t; - -/** - * @brief Structure representing a serial driver. - */ -typedef struct _SerialDriver SerialDriver; - -#include "serial_lld.h" - -/** - * @brief @p SerialDriver specific methods. - */ -#define _serial_driver_methods \ - _base_asynchronous_channel_methods - -/** - * @brief @p SerialDriver virtual methods table. - */ -struct SerialDriverVMT { - _serial_driver_methods -}; - -/** - * @extends BaseAsynchronousChannel - * - * @brief Full duplex serial driver class. - * @details This class extends @p BaseAsynchronousChannel by adding physical - * I/O queues. - */ -struct _SerialDriver { - /** @brief Virtual Methods Table.*/ - const struct SerialDriverVMT *vmt; - _serial_driver_data -}; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Direct output check on a @p SerialDriver. - * @details This function bypasses the indirect access to the channel and - * checks directly the output queue. This is faster but cannot - * be used to check different channels implementations. - * - * @see chIOPutWouldBlock() - */ -#define sdPutWouldBlock(sdp) chOQIsFull(&(sdp)->oqueue) - -/** - * @brief Direct input check on a @p SerialDriver. - * @details This function bypasses the indirect access to the channel and - * checks directly the input queue. This is faster but cannot - * be used to check different channels implementations. - * - * @see chIOGetWouldBlock() - */ -#define sdGetWouldBlock(sdp) chIQIsEmpty(&(sdp)->iqueue) - -/** - * @brief Direct write to a @p SerialDriver. - * @details This function bypasses the indirect access to the channel and - * writes directly on the output queue. This is faster but cannot - * be used to write to different channels implementations. - * - * @see chIOPut() - */ -#define sdPut(sdp, b) chOQPut(&(sdp)->oqueue, b) - -/** - * @brief Direct write to a @p SerialDriver with timeout specification. - * @details This function bypasses the indirect access to the channel and - * writes directly on the output queue. This is faster but cannot - * be used to write to different channels implementations. - * - * @see chIOPutTimeout() - */ -#define sdPutTimeout(sdp, b, t) chOQPutTimeout(&(sdp)->iqueue, b, t) - -/** - * @brief Direct read from a @p SerialDriver. - * @details This function bypasses the indirect access to the channel and - * reads directly from the input queue. This is faster but cannot - * be used to read from different channels implementations. - * - * @see chIOGet() - */ -#define sdGet(sdp) chIQGet(&(sdp)->iqueue) - -/** - * @brief Direct read from a @p SerialDriver with timeout specification. - * @details This function bypasses the indirect access to the channel and - * reads directly from the input queue. This is faster but cannot - * be used to read from different channels implementations. - * - * @see chIOGetTimeout() - */ -#define sdGetTimeout(sdp, t) chIQGetTimeout(&(sdp)->iqueue, t) - -/** - * @brief Direct blocking write to a @p SerialDriver. - * @details This function bypasses the indirect access to the channel and - * writes directly to the output queue. This is faster but cannot - * be used to write from different channels implementations. - * - * @see chIOWriteTimeout() - */ -#define sdWrite(sdp, b, n) \ - chOQWriteTimeout(&(sdp)->oqueue, b, n, TIME_INFINITE) - -/** - * @brief Direct blocking write to a @p SerialDriver with timeout - * specification. - * @details This function bypasses the indirect access to the channel and - * writes directly to the output queue. This is faster but cannot - * be used to write from different channels implementations. - * - * @see chIOWriteTimeout() - */ -#define sdWriteTimeout(sdp, b, n, t) \ - chOQWriteTimeout(&(sdp)->oqueue, b, n, t) - -/** - * @brief Direct non-blocking write to a @p SerialDriver. - * @details This function bypasses the indirect access to the channel and - * writes directly to the output queue. This is faster but cannot - * be used to write from different channels implementations. - * - * @see chIOWriteTimeout() - */ -#define sdAsynchronousWrite(sdp, b, n) \ - chOQWriteTimeout(&(sdp)->oqueue, b, n, TIME_IMMEDIATE) - -/** - * @brief Direct blocking read from a @p SerialDriver. - * @details This function bypasses the indirect access to the channel and - * reads directly from the input queue. This is faster but cannot - * be used to read from different channels implementations. - * - * @see chIOReadTimeout() - */ -#define sdRead(sdp, b, n) \ - chIQReadTimeout(&(sdp)->iqueue, b, n, TIME_INFINITE) - -/** - * @brief Direct blocking read from a @p SerialDriver with timeout - * specification. - * @details This function bypasses the indirect access to the channel and - * reads directly from the input queue. This is faster but cannot - * be used to read from different channels implementations. - * - * @see chIOReadTimeout() - */ -#define sdReadTimeout(sdp, b, n, t) \ - chIQReadTimeout(&(sdp)->iqueue, b, n, t) - -/** - * @brief Direct non-blocking read from a @p SerialDriver. - * @details This function bypasses the indirect access to the channel and - * reads directly from the input queue. This is faster but cannot - * be used to read from different channels implementations. - * - * @see chIOReadTimeout() - */ -#define sdAsynchronousRead(sdp, b, n) \ - chIQReadTimeout(&(sdp)->iqueue, b, n, TIME_IMMEDIATE) - -/** - * @brief Returns the status change event source. - * @details The status change event source is broadcasted when the channel - * status is updated, the status flags can then be fetched and - * cheared by using @p sdGetAndClearFlags(). - * - * @param[in] ip pointer to a @p SerialDriver object - * @return A pointer to an @p EventSource object. - */ -#define sdGetStatusChangeEventSource(ip) (&((ip)->vmt->sevent)) - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void sdInit(void); - void sdObjectInit(SerialDriver *sdp, qnotify_t inotify, qnotify_t onotify); - void sdStart(SerialDriver *sdp, const SerialConfig *config); - void sdStop(SerialDriver *sdp); - void sdIncomingDataI(SerialDriver *sdp, uint8_t b); - msg_t sdRequestDataI(SerialDriver *sdp); - void sdAddFlagsI(SerialDriver *sdp, sdflags_t mask); - sdflags_t sdGetAndClearFlags(SerialDriver *sdp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/include/spi.h b/ChibiOS_2.0.8/os/hal/include/spi.h deleted file mode 100644 index 0e6d732..0000000 --- a/ChibiOS_2.0.8/os/hal/include/spi.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file spi.h - * @brief SPI Driver macros and structures. - * - * @addtogroup SPI - * @{ - */ - -#ifndef _SPI_H_ -#define _SPI_H_ - -#if CH_HAL_USE_SPI || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the mutual exclusion APIs on the SPI bus. - */ -#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define SPI_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if SPI_USE_MUTUAL_EXCLUSION && !CH_USE_MUTEXES && !CH_USE_SEMAPHORES -#error "SPI_USE_MUTUAL_EXCLUSION requires CH_USE_MUTEXES and/or CH_USE_SEMAPHORES" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver state machine possible states. - */ -typedef enum { - SPI_UNINIT = 0, /**< @brief Not initialized. */ - SPI_STOP = 1, /**< @brief Stopped. */ - SPI_READY = 2, /**< @brief Ready. */ - SPI_ACTIVE = 3 /**< @brief Slave selected. */ -} spistate_t; - -#include "spi_lld.h" - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void spiInit(void); - void spiObjectInit(SPIDriver *spip); - void spiStart(SPIDriver *spip, const SPIConfig *config); - void spiStop(SPIDriver *spip); - void spiSelect(SPIDriver *spip); - void spiUnselect(SPIDriver *spip); - void spiIgnore(SPIDriver *spip, size_t n); - void spiExchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf); - void spiSend(SPIDriver *spip, size_t n, const void *txbuf); - void spiReceive(SPIDriver *spip, size_t n, void *rxbuf); -#if SPI_USE_MUTUAL_EXCLUSION - void spiAcquireBus(SPIDriver *spip); - void spiReleaseBus(SPIDriver *spip); -#endif /* SPI_USE_MUTUAL_EXCLUSION */ -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SPI */ - -#endif /* _SPI_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S128.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S128.h deleted file mode 100644 index 5eb3450..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S128.h +++ /dev/null @@ -1,2229 +0,0 @@ -// ---------------------------------------------------------------------------- -// ATMEL Microcontroller Software Support - ROUSSET - -// ---------------------------------------------------------------------------- -// Copyright (c) 2006, Atmel Corporation -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, -// this list of conditions and the disclaimer below. -// -// Atmel's name may not be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR -// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE -// DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// ---------------------------------------------------------------------------- -// File Name : AT91SAM7S128.h -// Object : AT91SAM7S128 definitions -// Generated : AT91 SW Application Group 07/07/2008 (16:12:49) -// -// CVS Reference : /AT91SAM7S128.pl/1.12/Wed Aug 30 14:08:34 2006// -// CVS Reference : /SYS_SAM7S.pl/1.2/Thu Feb 3 10:47:39 2005// -// CVS Reference : /MC_SAM7S.pl/1.4/Thu Feb 16 16:45:50 2006// -// CVS Reference : /PMC_SAM7S_USB.pl/1.4/Tue Feb 8 14:00:19 2005// -// CVS Reference : /RSTC_SAM7S.pl/1.2/Wed Jul 13 15:25:17 2005// -// CVS Reference : /UDP_4ept.pl/1.1/Thu Aug 3 12:26:00 2006// -// CVS Reference : /PWM_SAM7S.pl/1.1/Tue May 10 12:38:54 2005// -// CVS Reference : /RTTC_6081A.pl/1.2/Thu Nov 4 13:57:22 2004// -// CVS Reference : /PITC_6079A.pl/1.2/Thu Nov 4 13:56:22 2004// -// CVS Reference : /WDTC_6080A.pl/1.3/Thu Nov 4 13:58:52 2004// -// CVS Reference : /VREG_6085B.pl/1.1/Tue Feb 1 16:40:38 2005// -// CVS Reference : /AIC_6075B.pl/1.3/Fri May 20 14:21:42 2005// -// CVS Reference : /PIO_6057A.pl/1.2/Thu Feb 3 10:29:42 2005// -// CVS Reference : /DBGU_6059D.pl/1.1/Mon Jan 31 13:54:41 2005// -// CVS Reference : /US_6089C.pl/1.1/Mon Jan 31 13:56:02 2005// -// CVS Reference : /SPI_6088D.pl/1.3/Fri May 20 14:23:02 2005// -// CVS Reference : /SSC_6078A.pl/1.1/Tue Jul 13 07:10:41 2004// -// CVS Reference : /TC_6082A.pl/1.7/Wed Mar 9 16:31:51 2005// -// CVS Reference : /TWI_6061A.pl/1.2/Fri Oct 27 11:40:48 2006// -// CVS Reference : /PDC_6074C.pl/1.2/Thu Feb 3 09:02:11 2005// -// CVS Reference : /ADC_6051C.pl/1.1/Mon Jan 31 13:12:40 2005// -// ---------------------------------------------------------------------------- - -#ifndef AT91SAM7S128_H -#define AT91SAM7S128_H - -#ifndef __ASSEMBLY__ -typedef volatile unsigned int AT91_REG;// Hardware register definition -#define AT91_CAST(a) (a) -#else -#define AT91_CAST(a) -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR System Peripherals -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SYS { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register - AT91_REG Reserved2[45]; // - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved3[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved4[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register - AT91_REG Reserved5[54]; // - AT91_REG PIOA_PER; // PIO Enable Register - AT91_REG PIOA_PDR; // PIO Disable Register - AT91_REG PIOA_PSR; // PIO Status Register - AT91_REG Reserved6[1]; // - AT91_REG PIOA_OER; // Output Enable Register - AT91_REG PIOA_ODR; // Output Disable Registerr - AT91_REG PIOA_OSR; // Output Status Register - AT91_REG Reserved7[1]; // - AT91_REG PIOA_IFER; // Input Filter Enable Register - AT91_REG PIOA_IFDR; // Input Filter Disable Register - AT91_REG PIOA_IFSR; // Input Filter Status Register - AT91_REG Reserved8[1]; // - AT91_REG PIOA_SODR; // Set Output Data Register - AT91_REG PIOA_CODR; // Clear Output Data Register - AT91_REG PIOA_ODSR; // Output Data Status Register - AT91_REG PIOA_PDSR; // Pin Data Status Register - AT91_REG PIOA_IER; // Interrupt Enable Register - AT91_REG PIOA_IDR; // Interrupt Disable Register - AT91_REG PIOA_IMR; // Interrupt Mask Register - AT91_REG PIOA_ISR; // Interrupt Status Register - AT91_REG PIOA_MDER; // Multi-driver Enable Register - AT91_REG PIOA_MDDR; // Multi-driver Disable Register - AT91_REG PIOA_MDSR; // Multi-driver Status Register - AT91_REG Reserved9[1]; // - AT91_REG PIOA_PPUDR; // Pull-up Disable Register - AT91_REG PIOA_PPUER; // Pull-up Enable Register - AT91_REG PIOA_PPUSR; // Pull-up Status Register - AT91_REG Reserved10[1]; // - AT91_REG PIOA_ASR; // Select A Register - AT91_REG PIOA_BSR; // Select B Register - AT91_REG PIOA_ABSR; // AB Select Status Register - AT91_REG Reserved11[9]; // - AT91_REG PIOA_OWER; // Output Write Enable Register - AT91_REG PIOA_OWDR; // Output Write Disable Register - AT91_REG PIOA_OWSR; // Output Write Status Register - AT91_REG Reserved12[469]; // - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved13[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved14[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved15[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved16[3]; // - AT91_REG PMC_PCKR[3]; // Programmable Clock Register - AT91_REG Reserved17[5]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register - AT91_REG Reserved18[36]; // - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register - AT91_REG Reserved19[5]; // - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register - AT91_REG Reserved20[5]; // - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_SYS, *AT91PS_SYS; -#else - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Advanced Interrupt Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_AIC { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register -} AT91S_AIC, *AT91PS_AIC; -#else -#define AIC_SMR (AT91_CAST(AT91_REG *) 0x00000000) // (AIC_SMR) Source Mode Register -#define AIC_SVR (AT91_CAST(AT91_REG *) 0x00000080) // (AIC_SVR) Source Vector Register -#define AIC_IVR (AT91_CAST(AT91_REG *) 0x00000100) // (AIC_IVR) IRQ Vector Register -#define AIC_FVR (AT91_CAST(AT91_REG *) 0x00000104) // (AIC_FVR) FIQ Vector Register -#define AIC_ISR (AT91_CAST(AT91_REG *) 0x00000108) // (AIC_ISR) Interrupt Status Register -#define AIC_IPR (AT91_CAST(AT91_REG *) 0x0000010C) // (AIC_IPR) Interrupt Pending Register -#define AIC_IMR (AT91_CAST(AT91_REG *) 0x00000110) // (AIC_IMR) Interrupt Mask Register -#define AIC_CISR (AT91_CAST(AT91_REG *) 0x00000114) // (AIC_CISR) Core Interrupt Status Register -#define AIC_IECR (AT91_CAST(AT91_REG *) 0x00000120) // (AIC_IECR) Interrupt Enable Command Register -#define AIC_IDCR (AT91_CAST(AT91_REG *) 0x00000124) // (AIC_IDCR) Interrupt Disable Command Register -#define AIC_ICCR (AT91_CAST(AT91_REG *) 0x00000128) // (AIC_ICCR) Interrupt Clear Command Register -#define AIC_ISCR (AT91_CAST(AT91_REG *) 0x0000012C) // (AIC_ISCR) Interrupt Set Command Register -#define AIC_EOICR (AT91_CAST(AT91_REG *) 0x00000130) // (AIC_EOICR) End of Interrupt Command Register -#define AIC_SPU (AT91_CAST(AT91_REG *) 0x00000134) // (AIC_SPU) Spurious Vector Register -#define AIC_DCR (AT91_CAST(AT91_REG *) 0x00000138) // (AIC_DCR) Debug Control Register (Protect) -#define AIC_FFER (AT91_CAST(AT91_REG *) 0x00000140) // (AIC_FFER) Fast Forcing Enable Register -#define AIC_FFDR (AT91_CAST(AT91_REG *) 0x00000144) // (AIC_FFDR) Fast Forcing Disable Register -#define AIC_FFSR (AT91_CAST(AT91_REG *) 0x00000148) // (AIC_FFSR) Fast Forcing Status Register - -#endif -// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- -#define AT91C_AIC_PRIOR (0x7 << 0) // (AIC) Priority Level -#define AT91C_AIC_PRIOR_LOWEST (0x0) // (AIC) Lowest priority level -#define AT91C_AIC_PRIOR_HIGHEST (0x7) // (AIC) Highest priority level -#define AT91C_AIC_SRCTYPE (0x3 << 5) // (AIC) Interrupt Source Type -#define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL (0x0 << 5) // (AIC) Internal Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL (0x0 << 5) // (AIC) External Sources Code Label Low-level Sensitive -#define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE (0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered -#define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE (0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered -#define AT91C_AIC_SRCTYPE_HIGH_LEVEL (0x2 << 5) // (AIC) Internal Or External Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_POSITIVE_EDGE (0x3 << 5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered -// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- -#define AT91C_AIC_NFIQ (0x1 << 0) // (AIC) NFIQ Status -#define AT91C_AIC_NIRQ (0x1 << 1) // (AIC) NIRQ Status -// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- -#define AT91C_AIC_DCR_PROT (0x1 << 0) // (AIC) Protection Mode -#define AT91C_AIC_DCR_GMSK (0x1 << 1) // (AIC) General Mask - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Peripheral DMA Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PDC { - AT91_REG PDC_RPR; // Receive Pointer Register - AT91_REG PDC_RCR; // Receive Counter Register - AT91_REG PDC_TPR; // Transmit Pointer Register - AT91_REG PDC_TCR; // Transmit Counter Register - AT91_REG PDC_RNPR; // Receive Next Pointer Register - AT91_REG PDC_RNCR; // Receive Next Counter Register - AT91_REG PDC_TNPR; // Transmit Next Pointer Register - AT91_REG PDC_TNCR; // Transmit Next Counter Register - AT91_REG PDC_PTCR; // PDC Transfer Control Register - AT91_REG PDC_PTSR; // PDC Transfer Status Register -} AT91S_PDC, *AT91PS_PDC; -#else -#define PDC_RPR (AT91_CAST(AT91_REG *) 0x00000000) // (PDC_RPR) Receive Pointer Register -#define PDC_RCR (AT91_CAST(AT91_REG *) 0x00000004) // (PDC_RCR) Receive Counter Register -#define PDC_TPR (AT91_CAST(AT91_REG *) 0x00000008) // (PDC_TPR) Transmit Pointer Register -#define PDC_TCR (AT91_CAST(AT91_REG *) 0x0000000C) // (PDC_TCR) Transmit Counter Register -#define PDC_RNPR (AT91_CAST(AT91_REG *) 0x00000010) // (PDC_RNPR) Receive Next Pointer Register -#define PDC_RNCR (AT91_CAST(AT91_REG *) 0x00000014) // (PDC_RNCR) Receive Next Counter Register -#define PDC_TNPR (AT91_CAST(AT91_REG *) 0x00000018) // (PDC_TNPR) Transmit Next Pointer Register -#define PDC_TNCR (AT91_CAST(AT91_REG *) 0x0000001C) // (PDC_TNCR) Transmit Next Counter Register -#define PDC_PTCR (AT91_CAST(AT91_REG *) 0x00000020) // (PDC_PTCR) PDC Transfer Control Register -#define PDC_PTSR (AT91_CAST(AT91_REG *) 0x00000024) // (PDC_PTSR) PDC Transfer Status Register - -#endif -// -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- -#define AT91C_PDC_RXTEN (0x1 << 0) // (PDC) Receiver Transfer Enable -#define AT91C_PDC_RXTDIS (0x1 << 1) // (PDC) Receiver Transfer Disable -#define AT91C_PDC_TXTEN (0x1 << 8) // (PDC) Transmitter Transfer Enable -#define AT91C_PDC_TXTDIS (0x1 << 9) // (PDC) Transmitter Transfer Disable -// -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Debug Unit -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_DBGU { - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved0[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved1[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register -} AT91S_DBGU, *AT91PS_DBGU; -#else -#define DBGU_CR (AT91_CAST(AT91_REG *) 0x00000000) // (DBGU_CR) Control Register -#define DBGU_MR (AT91_CAST(AT91_REG *) 0x00000004) // (DBGU_MR) Mode Register -#define DBGU_IER (AT91_CAST(AT91_REG *) 0x00000008) // (DBGU_IER) Interrupt Enable Register -#define DBGU_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (DBGU_IDR) Interrupt Disable Register -#define DBGU_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (DBGU_IMR) Interrupt Mask Register -#define DBGU_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (DBGU_CSR) Channel Status Register -#define DBGU_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (DBGU_RHR) Receiver Holding Register -#define DBGU_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (DBGU_THR) Transmitter Holding Register -#define DBGU_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (DBGU_BRGR) Baud Rate Generator Register -#define DBGU_CIDR (AT91_CAST(AT91_REG *) 0x00000040) // (DBGU_CIDR) Chip ID Register -#define DBGU_EXID (AT91_CAST(AT91_REG *) 0x00000044) // (DBGU_EXID) Chip ID Extension Register -#define DBGU_FNTR (AT91_CAST(AT91_REG *) 0x00000048) // (DBGU_FNTR) Force NTRST Register - -#endif -// -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_RSTRX (0x1 << 2) // (DBGU) Reset Receiver -#define AT91C_US_RSTTX (0x1 << 3) // (DBGU) Reset Transmitter -#define AT91C_US_RXEN (0x1 << 4) // (DBGU) Receiver Enable -#define AT91C_US_RXDIS (0x1 << 5) // (DBGU) Receiver Disable -#define AT91C_US_TXEN (0x1 << 6) // (DBGU) Transmitter Enable -#define AT91C_US_TXDIS (0x1 << 7) // (DBGU) Transmitter Disable -#define AT91C_US_RSTSTA (0x1 << 8) // (DBGU) Reset Status Bits -// -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_PAR (0x7 << 9) // (DBGU) Parity type -#define AT91C_US_PAR_EVEN (0x0 << 9) // (DBGU) Even Parity -#define AT91C_US_PAR_ODD (0x1 << 9) // (DBGU) Odd Parity -#define AT91C_US_PAR_SPACE (0x2 << 9) // (DBGU) Parity forced to 0 (Space) -#define AT91C_US_PAR_MARK (0x3 << 9) // (DBGU) Parity forced to 1 (Mark) -#define AT91C_US_PAR_NONE (0x4 << 9) // (DBGU) No Parity -#define AT91C_US_PAR_MULTI_DROP (0x6 << 9) // (DBGU) Multi-drop mode -#define AT91C_US_CHMODE (0x3 << 14) // (DBGU) Channel Mode -#define AT91C_US_CHMODE_NORMAL (0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART. -#define AT91C_US_CHMODE_AUTO (0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin. -#define AT91C_US_CHMODE_LOCAL (0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal. -#define AT91C_US_CHMODE_REMOTE (0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin. -// -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXRDY (0x1 << 0) // (DBGU) RXRDY Interrupt -#define AT91C_US_TXRDY (0x1 << 1) // (DBGU) TXRDY Interrupt -#define AT91C_US_ENDRX (0x1 << 3) // (DBGU) End of Receive Transfer Interrupt -#define AT91C_US_ENDTX (0x1 << 4) // (DBGU) End of Transmit Interrupt -#define AT91C_US_OVRE (0x1 << 5) // (DBGU) Overrun Interrupt -#define AT91C_US_FRAME (0x1 << 6) // (DBGU) Framing Error Interrupt -#define AT91C_US_PARE (0x1 << 7) // (DBGU) Parity Error Interrupt -#define AT91C_US_TXEMPTY (0x1 << 9) // (DBGU) TXEMPTY Interrupt -#define AT91C_US_TXBUFE (0x1 << 11) // (DBGU) TXBUFE Interrupt -#define AT91C_US_RXBUFF (0x1 << 12) // (DBGU) RXBUFF Interrupt -#define AT91C_US_COMM_TX (0x1 << 30) // (DBGU) COMM_TX Interrupt -#define AT91C_US_COMM_RX (0x1 << 31) // (DBGU) COMM_RX Interrupt -// -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register -------- -// -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register -------- -#define AT91C_US_FORCE_NTRST (0x1 << 0) // (DBGU) Force NTRST in JTAG - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Parallel Input Output Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PIO { - AT91_REG PIO_PER; // PIO Enable Register - AT91_REG PIO_PDR; // PIO Disable Register - AT91_REG PIO_PSR; // PIO Status Register - AT91_REG Reserved0[1]; // - AT91_REG PIO_OER; // Output Enable Register - AT91_REG PIO_ODR; // Output Disable Registerr - AT91_REG PIO_OSR; // Output Status Register - AT91_REG Reserved1[1]; // - AT91_REG PIO_IFER; // Input Filter Enable Register - AT91_REG PIO_IFDR; // Input Filter Disable Register - AT91_REG PIO_IFSR; // Input Filter Status Register - AT91_REG Reserved2[1]; // - AT91_REG PIO_SODR; // Set Output Data Register - AT91_REG PIO_CODR; // Clear Output Data Register - AT91_REG PIO_ODSR; // Output Data Status Register - AT91_REG PIO_PDSR; // Pin Data Status Register - AT91_REG PIO_IER; // Interrupt Enable Register - AT91_REG PIO_IDR; // Interrupt Disable Register - AT91_REG PIO_IMR; // Interrupt Mask Register - AT91_REG PIO_ISR; // Interrupt Status Register - AT91_REG PIO_MDER; // Multi-driver Enable Register - AT91_REG PIO_MDDR; // Multi-driver Disable Register - AT91_REG PIO_MDSR; // Multi-driver Status Register - AT91_REG Reserved3[1]; // - AT91_REG PIO_PPUDR; // Pull-up Disable Register - AT91_REG PIO_PPUER; // Pull-up Enable Register - AT91_REG PIO_PPUSR; // Pull-up Status Register - AT91_REG Reserved4[1]; // - AT91_REG PIO_ASR; // Select A Register - AT91_REG PIO_BSR; // Select B Register - AT91_REG PIO_ABSR; // AB Select Status Register - AT91_REG Reserved5[9]; // - AT91_REG PIO_OWER; // Output Write Enable Register - AT91_REG PIO_OWDR; // Output Write Disable Register - AT91_REG PIO_OWSR; // Output Write Status Register -} AT91S_PIO, *AT91PS_PIO; -#else -#define PIO_PER (AT91_CAST(AT91_REG *) 0x00000000) // (PIO_PER) PIO Enable Register -#define PIO_PDR (AT91_CAST(AT91_REG *) 0x00000004) // (PIO_PDR) PIO Disable Register -#define PIO_PSR (AT91_CAST(AT91_REG *) 0x00000008) // (PIO_PSR) PIO Status Register -#define PIO_OER (AT91_CAST(AT91_REG *) 0x00000010) // (PIO_OER) Output Enable Register -#define PIO_ODR (AT91_CAST(AT91_REG *) 0x00000014) // (PIO_ODR) Output Disable Registerr -#define PIO_OSR (AT91_CAST(AT91_REG *) 0x00000018) // (PIO_OSR) Output Status Register -#define PIO_IFER (AT91_CAST(AT91_REG *) 0x00000020) // (PIO_IFER) Input Filter Enable Register -#define PIO_IFDR (AT91_CAST(AT91_REG *) 0x00000024) // (PIO_IFDR) Input Filter Disable Register -#define PIO_IFSR (AT91_CAST(AT91_REG *) 0x00000028) // (PIO_IFSR) Input Filter Status Register -#define PIO_SODR (AT91_CAST(AT91_REG *) 0x00000030) // (PIO_SODR) Set Output Data Register -#define PIO_CODR (AT91_CAST(AT91_REG *) 0x00000034) // (PIO_CODR) Clear Output Data Register -#define PIO_ODSR (AT91_CAST(AT91_REG *) 0x00000038) // (PIO_ODSR) Output Data Status Register -#define PIO_PDSR (AT91_CAST(AT91_REG *) 0x0000003C) // (PIO_PDSR) Pin Data Status Register -#define PIO_IER (AT91_CAST(AT91_REG *) 0x00000040) // (PIO_IER) Interrupt Enable Register -#define PIO_IDR (AT91_CAST(AT91_REG *) 0x00000044) // (PIO_IDR) Interrupt Disable Register -#define PIO_IMR (AT91_CAST(AT91_REG *) 0x00000048) // (PIO_IMR) Interrupt Mask Register -#define PIO_ISR (AT91_CAST(AT91_REG *) 0x0000004C) // (PIO_ISR) Interrupt Status Register -#define PIO_MDER (AT91_CAST(AT91_REG *) 0x00000050) // (PIO_MDER) Multi-driver Enable Register -#define PIO_MDDR (AT91_CAST(AT91_REG *) 0x00000054) // (PIO_MDDR) Multi-driver Disable Register -#define PIO_MDSR (AT91_CAST(AT91_REG *) 0x00000058) // (PIO_MDSR) Multi-driver Status Register -#define PIO_PPUDR (AT91_CAST(AT91_REG *) 0x00000060) // (PIO_PPUDR) Pull-up Disable Register -#define PIO_PPUER (AT91_CAST(AT91_REG *) 0x00000064) // (PIO_PPUER) Pull-up Enable Register -#define PIO_PPUSR (AT91_CAST(AT91_REG *) 0x00000068) // (PIO_PPUSR) Pull-up Status Register -#define PIO_ASR (AT91_CAST(AT91_REG *) 0x00000070) // (PIO_ASR) Select A Register -#define PIO_BSR (AT91_CAST(AT91_REG *) 0x00000074) // (PIO_BSR) Select B Register -#define PIO_ABSR (AT91_CAST(AT91_REG *) 0x00000078) // (PIO_ABSR) AB Select Status Register -#define PIO_OWER (AT91_CAST(AT91_REG *) 0x000000A0) // (PIO_OWER) Output Write Enable Register -#define PIO_OWDR (AT91_CAST(AT91_REG *) 0x000000A4) // (PIO_OWDR) Output Write Disable Register -#define PIO_OWSR (AT91_CAST(AT91_REG *) 0x000000A8) // (PIO_OWSR) Output Write Status Register - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Clock Generator Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CKGR { - AT91_REG CKGR_MOR; // Main Oscillator Register - AT91_REG CKGR_MCFR; // Main Clock Frequency Register - AT91_REG Reserved0[1]; // - AT91_REG CKGR_PLLR; // PLL Register -} AT91S_CKGR, *AT91PS_CKGR; -#else -#define CKGR_MOR (AT91_CAST(AT91_REG *) 0x00000000) // (CKGR_MOR) Main Oscillator Register -#define CKGR_MCFR (AT91_CAST(AT91_REG *) 0x00000004) // (CKGR_MCFR) Main Clock Frequency Register -#define CKGR_PLLR (AT91_CAST(AT91_REG *) 0x0000000C) // (CKGR_PLLR) PLL Register - -#endif -// -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- -#define AT91C_CKGR_MOSCEN (0x1 << 0) // (CKGR) Main Oscillator Enable -#define AT91C_CKGR_OSCBYPASS (0x1 << 1) // (CKGR) Main Oscillator Bypass -#define AT91C_CKGR_OSCOUNT (0xFF << 8) // (CKGR) Main Oscillator Start-up Time -// -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- -#define AT91C_CKGR_MAINF (0xFFFF << 0) // (CKGR) Main Clock Frequency -#define AT91C_CKGR_MAINRDY (0x1 << 16) // (CKGR) Main Clock Ready -// -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register -------- -#define AT91C_CKGR_DIV (0xFF << 0) // (CKGR) Divider Selected -#define AT91C_CKGR_DIV_0 (0x0) // (CKGR) Divider output is 0 -#define AT91C_CKGR_DIV_BYPASS (0x1) // (CKGR) Divider is bypassed -#define AT91C_CKGR_PLLCOUNT (0x3F << 8) // (CKGR) PLL Counter -#define AT91C_CKGR_OUT (0x3 << 14) // (CKGR) PLL Output Frequency Range -#define AT91C_CKGR_OUT_0 (0x0 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_1 (0x1 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_2 (0x2 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_3 (0x3 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_MUL (0x7FF << 16) // (CKGR) PLL Multiplier -#define AT91C_CKGR_USBDIV (0x3 << 28) // (CKGR) Divider for USB Clocks -#define AT91C_CKGR_USBDIV_0 (0x0 << 28) // (CKGR) Divider output is PLL clock output -#define AT91C_CKGR_USBDIV_1 (0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2 -#define AT91C_CKGR_USBDIV_2 (0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Power Management Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PMC { - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved0[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved1[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved2[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved3[3]; // - AT91_REG PMC_PCKR[3]; // Programmable Clock Register - AT91_REG Reserved4[5]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register -} AT91S_PMC, *AT91PS_PMC; -#else -#define PMC_SCER (AT91_CAST(AT91_REG *) 0x00000000) // (PMC_SCER) System Clock Enable Register -#define PMC_SCDR (AT91_CAST(AT91_REG *) 0x00000004) // (PMC_SCDR) System Clock Disable Register -#define PMC_SCSR (AT91_CAST(AT91_REG *) 0x00000008) // (PMC_SCSR) System Clock Status Register -#define PMC_PCER (AT91_CAST(AT91_REG *) 0x00000010) // (PMC_PCER) Peripheral Clock Enable Register -#define PMC_PCDR (AT91_CAST(AT91_REG *) 0x00000014) // (PMC_PCDR) Peripheral Clock Disable Register -#define PMC_PCSR (AT91_CAST(AT91_REG *) 0x00000018) // (PMC_PCSR) Peripheral Clock Status Register -#define PMC_MCKR (AT91_CAST(AT91_REG *) 0x00000030) // (PMC_MCKR) Master Clock Register -#define PMC_PCKR (AT91_CAST(AT91_REG *) 0x00000040) // (PMC_PCKR) Programmable Clock Register -#define PMC_IER (AT91_CAST(AT91_REG *) 0x00000060) // (PMC_IER) Interrupt Enable Register -#define PMC_IDR (AT91_CAST(AT91_REG *) 0x00000064) // (PMC_IDR) Interrupt Disable Register -#define PMC_SR (AT91_CAST(AT91_REG *) 0x00000068) // (PMC_SR) Status Register -#define PMC_IMR (AT91_CAST(AT91_REG *) 0x0000006C) // (PMC_IMR) Interrupt Mask Register - -#endif -// -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register -------- -#define AT91C_PMC_PCK (0x1 << 0) // (PMC) Processor Clock -#define AT91C_PMC_UDP (0x1 << 7) // (PMC) USB Device Port Clock -#define AT91C_PMC_PCK0 (0x1 << 8) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK1 (0x1 << 9) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK2 (0x1 << 10) // (PMC) Programmable Clock Output -// -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register -------- -// -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------- -// -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register -------- -// -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register -------- -// -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register -------- -// -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register -------- -#define AT91C_PMC_CSS (0x3 << 0) // (PMC) Programmable Clock Selection -#define AT91C_PMC_CSS_SLOW_CLK (0x0) // (PMC) Slow Clock is selected -#define AT91C_PMC_CSS_MAIN_CLK (0x1) // (PMC) Main Clock is selected -#define AT91C_PMC_CSS_PLL_CLK (0x3) // (PMC) Clock from PLL is selected -#define AT91C_PMC_PRES (0x7 << 2) // (PMC) Programmable Clock Prescaler -#define AT91C_PMC_PRES_CLK (0x0 << 2) // (PMC) Selected clock -#define AT91C_PMC_PRES_CLK_2 (0x1 << 2) // (PMC) Selected clock divided by 2 -#define AT91C_PMC_PRES_CLK_4 (0x2 << 2) // (PMC) Selected clock divided by 4 -#define AT91C_PMC_PRES_CLK_8 (0x3 << 2) // (PMC) Selected clock divided by 8 -#define AT91C_PMC_PRES_CLK_16 (0x4 << 2) // (PMC) Selected clock divided by 16 -#define AT91C_PMC_PRES_CLK_32 (0x5 << 2) // (PMC) Selected clock divided by 32 -#define AT91C_PMC_PRES_CLK_64 (0x6 << 2) // (PMC) Selected clock divided by 64 -// -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register -------- -// -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------- -#define AT91C_PMC_MOSCS (0x1 << 0) // (PMC) MOSC Status/Enable/Disable/Mask -#define AT91C_PMC_LOCK (0x1 << 2) // (PMC) PLL Status/Enable/Disable/Mask -#define AT91C_PMC_MCKRDY (0x1 << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK0RDY (0x1 << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK1RDY (0x1 << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK2RDY (0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask -// -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register -------- -// -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register -------- -// -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Reset Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RSTC { - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register -} AT91S_RSTC, *AT91PS_RSTC; -#else -#define RSTC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (RSTC_RCR) Reset Control Register -#define RSTC_RSR (AT91_CAST(AT91_REG *) 0x00000004) // (RSTC_RSR) Reset Status Register -#define RSTC_RMR (AT91_CAST(AT91_REG *) 0x00000008) // (RSTC_RMR) Reset Mode Register - -#endif -// -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register -------- -#define AT91C_RSTC_PROCRST (0x1 << 0) // (RSTC) Processor Reset -#define AT91C_RSTC_PERRST (0x1 << 2) // (RSTC) Peripheral Reset -#define AT91C_RSTC_EXTRST (0x1 << 3) // (RSTC) External Reset -#define AT91C_RSTC_KEY (0xFF << 24) // (RSTC) Password -// -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register -------- -#define AT91C_RSTC_URSTS (0x1 << 0) // (RSTC) User Reset Status -#define AT91C_RSTC_BODSTS (0x1 << 1) // (RSTC) Brownout Detection Status -#define AT91C_RSTC_RSTTYP (0x7 << 8) // (RSTC) Reset Type -#define AT91C_RSTC_RSTTYP_POWERUP (0x0 << 8) // (RSTC) Power-up Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WAKEUP (0x1 << 8) // (RSTC) WakeUp Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WATCHDOG (0x2 << 8) // (RSTC) Watchdog Reset. Watchdog overflow occured. -#define AT91C_RSTC_RSTTYP_SOFTWARE (0x3 << 8) // (RSTC) Software Reset. Processor reset required by the software. -#define AT91C_RSTC_RSTTYP_USER (0x4 << 8) // (RSTC) User Reset. NRST pin detected low. -#define AT91C_RSTC_RSTTYP_BROWNOUT (0x5 << 8) // (RSTC) Brownout Reset occured. -#define AT91C_RSTC_NRSTL (0x1 << 16) // (RSTC) NRST pin level -#define AT91C_RSTC_SRCMP (0x1 << 17) // (RSTC) Software Reset Command in Progress. -// -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register -------- -#define AT91C_RSTC_URSTEN (0x1 << 0) // (RSTC) User Reset Enable -#define AT91C_RSTC_URSTIEN (0x1 << 4) // (RSTC) User Reset Interrupt Enable -#define AT91C_RSTC_ERSTL (0xF << 8) // (RSTC) User Reset Length -#define AT91C_RSTC_BODIEN (0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Real Time Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RTTC { - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register -} AT91S_RTTC, *AT91PS_RTTC; -#else -#define RTTC_RTMR (AT91_CAST(AT91_REG *) 0x00000000) // (RTTC_RTMR) Real-time Mode Register -#define RTTC_RTAR (AT91_CAST(AT91_REG *) 0x00000004) // (RTTC_RTAR) Real-time Alarm Register -#define RTTC_RTVR (AT91_CAST(AT91_REG *) 0x00000008) // (RTTC_RTVR) Real-time Value Register -#define RTTC_RTSR (AT91_CAST(AT91_REG *) 0x0000000C) // (RTTC_RTSR) Real-time Status Register - -#endif -// -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register -------- -#define AT91C_RTTC_RTPRES (0xFFFF << 0) // (RTTC) Real-time Timer Prescaler Value -#define AT91C_RTTC_ALMIEN (0x1 << 16) // (RTTC) Alarm Interrupt Enable -#define AT91C_RTTC_RTTINCIEN (0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable -#define AT91C_RTTC_RTTRST (0x1 << 18) // (RTTC) Real Time Timer Restart -// -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register -------- -#define AT91C_RTTC_ALMV (0x0 << 0) // (RTTC) Alarm Value -// -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register -------- -#define AT91C_RTTC_CRTV (0x0 << 0) // (RTTC) Current Real-time Value -// -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register -------- -#define AT91C_RTTC_ALMS (0x1 << 0) // (RTTC) Real-time Alarm Status -#define AT91C_RTTC_RTTINC (0x1 << 1) // (RTTC) Real-time Timer Increment - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Periodic Interval Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PITC { - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register -} AT91S_PITC, *AT91PS_PITC; -#else -#define PITC_PIMR (AT91_CAST(AT91_REG *) 0x00000000) // (PITC_PIMR) Period Interval Mode Register -#define PITC_PISR (AT91_CAST(AT91_REG *) 0x00000004) // (PITC_PISR) Period Interval Status Register -#define PITC_PIVR (AT91_CAST(AT91_REG *) 0x00000008) // (PITC_PIVR) Period Interval Value Register -#define PITC_PIIR (AT91_CAST(AT91_REG *) 0x0000000C) // (PITC_PIIR) Period Interval Image Register - -#endif -// -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register -------- -#define AT91C_PITC_PIV (0xFFFFF << 0) // (PITC) Periodic Interval Value -#define AT91C_PITC_PITEN (0x1 << 24) // (PITC) Periodic Interval Timer Enabled -#define AT91C_PITC_PITIEN (0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable -// -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register -------- -#define AT91C_PITC_PITS (0x1 << 0) // (PITC) Periodic Interval Timer Status -// -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register -------- -#define AT91C_PITC_CPIV (0xFFFFF << 0) // (PITC) Current Periodic Interval Value -#define AT91C_PITC_PICNT (0xFFF << 20) // (PITC) Periodic Interval Counter -// -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Watchdog Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_WDTC { - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register -} AT91S_WDTC, *AT91PS_WDTC; -#else -#define WDTC_WDCR (AT91_CAST(AT91_REG *) 0x00000000) // (WDTC_WDCR) Watchdog Control Register -#define WDTC_WDMR (AT91_CAST(AT91_REG *) 0x00000004) // (WDTC_WDMR) Watchdog Mode Register -#define WDTC_WDSR (AT91_CAST(AT91_REG *) 0x00000008) // (WDTC_WDSR) Watchdog Status Register - -#endif -// -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register -------- -#define AT91C_WDTC_WDRSTT (0x1 << 0) // (WDTC) Watchdog Restart -#define AT91C_WDTC_KEY (0xFF << 24) // (WDTC) Watchdog KEY Password -// -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register -------- -#define AT91C_WDTC_WDV (0xFFF << 0) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDFIEN (0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable -#define AT91C_WDTC_WDRSTEN (0x1 << 13) // (WDTC) Watchdog Reset Enable -#define AT91C_WDTC_WDRPROC (0x1 << 14) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDDIS (0x1 << 15) // (WDTC) Watchdog Disable -#define AT91C_WDTC_WDD (0xFFF << 16) // (WDTC) Watchdog Delta Value -#define AT91C_WDTC_WDDBGHLT (0x1 << 28) // (WDTC) Watchdog Debug Halt -#define AT91C_WDTC_WDIDLEHLT (0x1 << 29) // (WDTC) Watchdog Idle Halt -// -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register -------- -#define AT91C_WDTC_WDUNF (0x1 << 0) // (WDTC) Watchdog Underflow -#define AT91C_WDTC_WDERR (0x1 << 1) // (WDTC) Watchdog Error - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Voltage Regulator Mode Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_VREG { - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_VREG, *AT91PS_VREG; -#else -#define VREG_MR (AT91_CAST(AT91_REG *) 0x00000000) // (VREG_MR) Voltage Regulator Mode Register - -#endif -// -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register -------- -#define AT91C_VREG_PSTDBY (0x1 << 0) // (VREG) Voltage Regulator Power Standby Mode - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Memory Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_MC { - AT91_REG MC_RCR; // MC Remap Control Register - AT91_REG MC_ASR; // MC Abort Status Register - AT91_REG MC_AASR; // MC Abort Address Status Register - AT91_REG Reserved0[21]; // - AT91_REG MC_FMR; // MC Flash Mode Register - AT91_REG MC_FCR; // MC Flash Command Register - AT91_REG MC_FSR; // MC Flash Status Register -} AT91S_MC, *AT91PS_MC; -#else -#define MC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (MC_RCR) MC Remap Control Register -#define MC_ASR (AT91_CAST(AT91_REG *) 0x00000004) // (MC_ASR) MC Abort Status Register -#define MC_AASR (AT91_CAST(AT91_REG *) 0x00000008) // (MC_AASR) MC Abort Address Status Register -#define MC_FMR (AT91_CAST(AT91_REG *) 0x00000060) // (MC_FMR) MC Flash Mode Register -#define MC_FCR (AT91_CAST(AT91_REG *) 0x00000064) // (MC_FCR) MC Flash Command Register -#define MC_FSR (AT91_CAST(AT91_REG *) 0x00000068) // (MC_FSR) MC Flash Status Register - -#endif -// -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register -------- -#define AT91C_MC_RCB (0x1 << 0) // (MC) Remap Command Bit -// -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register -------- -#define AT91C_MC_UNDADD (0x1 << 0) // (MC) Undefined Addess Abort Status -#define AT91C_MC_MISADD (0x1 << 1) // (MC) Misaligned Addess Abort Status -#define AT91C_MC_ABTSZ (0x3 << 8) // (MC) Abort Size Status -#define AT91C_MC_ABTSZ_BYTE (0x0 << 8) // (MC) Byte -#define AT91C_MC_ABTSZ_HWORD (0x1 << 8) // (MC) Half-word -#define AT91C_MC_ABTSZ_WORD (0x2 << 8) // (MC) Word -#define AT91C_MC_ABTTYP (0x3 << 10) // (MC) Abort Type Status -#define AT91C_MC_ABTTYP_DATAR (0x0 << 10) // (MC) Data Read -#define AT91C_MC_ABTTYP_DATAW (0x1 << 10) // (MC) Data Write -#define AT91C_MC_ABTTYP_FETCH (0x2 << 10) // (MC) Code Fetch -#define AT91C_MC_MST0 (0x1 << 16) // (MC) Master 0 Abort Source -#define AT91C_MC_MST1 (0x1 << 17) // (MC) Master 1 Abort Source -#define AT91C_MC_SVMST0 (0x1 << 24) // (MC) Saved Master 0 Abort Source -#define AT91C_MC_SVMST1 (0x1 << 25) // (MC) Saved Master 1 Abort Source -// -------- MC_FMR : (MC Offset: 0x60) MC Flash Mode Register -------- -#define AT91C_MC_FRDY (0x1 << 0) // (MC) Flash Ready -#define AT91C_MC_LOCKE (0x1 << 2) // (MC) Lock Error -#define AT91C_MC_PROGE (0x1 << 3) // (MC) Programming Error -#define AT91C_MC_NEBP (0x1 << 7) // (MC) No Erase Before Programming -#define AT91C_MC_FWS (0x3 << 8) // (MC) Flash Wait State -#define AT91C_MC_FWS_0FWS (0x0 << 8) // (MC) 1 cycle for Read, 2 for Write operations -#define AT91C_MC_FWS_1FWS (0x1 << 8) // (MC) 2 cycles for Read, 3 for Write operations -#define AT91C_MC_FWS_2FWS (0x2 << 8) // (MC) 3 cycles for Read, 4 for Write operations -#define AT91C_MC_FWS_3FWS (0x3 << 8) // (MC) 4 cycles for Read, 4 for Write operations -#define AT91C_MC_FMCN (0xFF << 16) // (MC) Flash Microsecond Cycle Number -// -------- MC_FCR : (MC Offset: 0x64) MC Flash Command Register -------- -#define AT91C_MC_FCMD (0xF << 0) // (MC) Flash Command -#define AT91C_MC_FCMD_START_PROG (0x1) // (MC) Starts the programming of th epage specified by PAGEN. -#define AT91C_MC_FCMD_LOCK (0x2) // (MC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_PROG_AND_LOCK (0x3) // (MC) The lock sequence automatically happens after the programming sequence is completed. -#define AT91C_MC_FCMD_UNLOCK (0x4) // (MC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_ERASE_ALL (0x8) // (MC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled. -#define AT91C_MC_FCMD_SET_GP_NVM (0xB) // (MC) Set General Purpose NVM bits. -#define AT91C_MC_FCMD_CLR_GP_NVM (0xD) // (MC) Clear General Purpose NVM bits. -#define AT91C_MC_FCMD_SET_SECURITY (0xF) // (MC) Set Security Bit. -#define AT91C_MC_PAGEN (0x3FF << 8) // (MC) Page Number -#define AT91C_MC_KEY (0xFF << 24) // (MC) Writing Protect Key -// -------- MC_FSR : (MC Offset: 0x68) MC Flash Command Register -------- -#define AT91C_MC_SECURITY (0x1 << 4) // (MC) Security Bit Status -#define AT91C_MC_GPNVM0 (0x1 << 8) // (MC) Sector 0 Lock Status -#define AT91C_MC_GPNVM1 (0x1 << 9) // (MC) Sector 1 Lock Status -#define AT91C_MC_GPNVM2 (0x1 << 10) // (MC) Sector 2 Lock Status -#define AT91C_MC_GPNVM3 (0x1 << 11) // (MC) Sector 3 Lock Status -#define AT91C_MC_GPNVM4 (0x1 << 12) // (MC) Sector 4 Lock Status -#define AT91C_MC_GPNVM5 (0x1 << 13) // (MC) Sector 5 Lock Status -#define AT91C_MC_GPNVM6 (0x1 << 14) // (MC) Sector 6 Lock Status -#define AT91C_MC_GPNVM7 (0x1 << 15) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS0 (0x1 << 16) // (MC) Sector 0 Lock Status -#define AT91C_MC_LOCKS1 (0x1 << 17) // (MC) Sector 1 Lock Status -#define AT91C_MC_LOCKS2 (0x1 << 18) // (MC) Sector 2 Lock Status -#define AT91C_MC_LOCKS3 (0x1 << 19) // (MC) Sector 3 Lock Status -#define AT91C_MC_LOCKS4 (0x1 << 20) // (MC) Sector 4 Lock Status -#define AT91C_MC_LOCKS5 (0x1 << 21) // (MC) Sector 5 Lock Status -#define AT91C_MC_LOCKS6 (0x1 << 22) // (MC) Sector 6 Lock Status -#define AT91C_MC_LOCKS7 (0x1 << 23) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS8 (0x1 << 24) // (MC) Sector 8 Lock Status -#define AT91C_MC_LOCKS9 (0x1 << 25) // (MC) Sector 9 Lock Status -#define AT91C_MC_LOCKS10 (0x1 << 26) // (MC) Sector 10 Lock Status -#define AT91C_MC_LOCKS11 (0x1 << 27) // (MC) Sector 11 Lock Status -#define AT91C_MC_LOCKS12 (0x1 << 28) // (MC) Sector 12 Lock Status -#define AT91C_MC_LOCKS13 (0x1 << 29) // (MC) Sector 13 Lock Status -#define AT91C_MC_LOCKS14 (0x1 << 30) // (MC) Sector 14 Lock Status -#define AT91C_MC_LOCKS15 (0x1 << 31) // (MC) Sector 15 Lock Status - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Serial Parallel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SPI { - AT91_REG SPI_CR; // Control Register - AT91_REG SPI_MR; // Mode Register - AT91_REG SPI_RDR; // Receive Data Register - AT91_REG SPI_TDR; // Transmit Data Register - AT91_REG SPI_SR; // Status Register - AT91_REG SPI_IER; // Interrupt Enable Register - AT91_REG SPI_IDR; // Interrupt Disable Register - AT91_REG SPI_IMR; // Interrupt Mask Register - AT91_REG Reserved0[4]; // - AT91_REG SPI_CSR[4]; // Chip Select Register - AT91_REG Reserved1[48]; // - AT91_REG SPI_RPR; // Receive Pointer Register - AT91_REG SPI_RCR; // Receive Counter Register - AT91_REG SPI_TPR; // Transmit Pointer Register - AT91_REG SPI_TCR; // Transmit Counter Register - AT91_REG SPI_RNPR; // Receive Next Pointer Register - AT91_REG SPI_RNCR; // Receive Next Counter Register - AT91_REG SPI_TNPR; // Transmit Next Pointer Register - AT91_REG SPI_TNCR; // Transmit Next Counter Register - AT91_REG SPI_PTCR; // PDC Transfer Control Register - AT91_REG SPI_PTSR; // PDC Transfer Status Register -} AT91S_SPI, *AT91PS_SPI; -#else -#define SPI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SPI_CR) Control Register -#define SPI_MR (AT91_CAST(AT91_REG *) 0x00000004) // (SPI_MR) Mode Register -#define SPI_RDR (AT91_CAST(AT91_REG *) 0x00000008) // (SPI_RDR) Receive Data Register -#define SPI_TDR (AT91_CAST(AT91_REG *) 0x0000000C) // (SPI_TDR) Transmit Data Register -#define SPI_SR (AT91_CAST(AT91_REG *) 0x00000010) // (SPI_SR) Status Register -#define SPI_IER (AT91_CAST(AT91_REG *) 0x00000014) // (SPI_IER) Interrupt Enable Register -#define SPI_IDR (AT91_CAST(AT91_REG *) 0x00000018) // (SPI_IDR) Interrupt Disable Register -#define SPI_IMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SPI_IMR) Interrupt Mask Register -#define SPI_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (SPI_CSR) Chip Select Register - -#endif -// -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- -#define AT91C_SPI_SPIEN (0x1 << 0) // (SPI) SPI Enable -#define AT91C_SPI_SPIDIS (0x1 << 1) // (SPI) SPI Disable -#define AT91C_SPI_SWRST (0x1 << 7) // (SPI) SPI Software reset -#define AT91C_SPI_LASTXFER (0x1 << 24) // (SPI) SPI Last Transfer -// -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- -#define AT91C_SPI_MSTR (0x1 << 0) // (SPI) Master/Slave Mode -#define AT91C_SPI_PS (0x1 << 1) // (SPI) Peripheral Select -#define AT91C_SPI_PS_FIXED (0x0 << 1) // (SPI) Fixed Peripheral Select -#define AT91C_SPI_PS_VARIABLE (0x1 << 1) // (SPI) Variable Peripheral Select -#define AT91C_SPI_PCSDEC (0x1 << 2) // (SPI) Chip Select Decode -#define AT91C_SPI_FDIV (0x1 << 3) // (SPI) Clock Selection -#define AT91C_SPI_MODFDIS (0x1 << 4) // (SPI) Mode Fault Detection -#define AT91C_SPI_LLB (0x1 << 7) // (SPI) Clock Selection -#define AT91C_SPI_PCS (0xF << 16) // (SPI) Peripheral Chip Select -#define AT91C_SPI_DLYBCS (0xFF << 24) // (SPI) Delay Between Chip Selects -// -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- -#define AT91C_SPI_RD (0xFFFF << 0) // (SPI) Receive Data -#define AT91C_SPI_RPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- -#define AT91C_SPI_TD (0xFFFF << 0) // (SPI) Transmit Data -#define AT91C_SPI_TPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- -#define AT91C_SPI_RDRF (0x1 << 0) // (SPI) Receive Data Register Full -#define AT91C_SPI_TDRE (0x1 << 1) // (SPI) Transmit Data Register Empty -#define AT91C_SPI_MODF (0x1 << 2) // (SPI) Mode Fault Error -#define AT91C_SPI_OVRES (0x1 << 3) // (SPI) Overrun Error Status -#define AT91C_SPI_ENDRX (0x1 << 4) // (SPI) End of Receiver Transfer -#define AT91C_SPI_ENDTX (0x1 << 5) // (SPI) End of Receiver Transfer -#define AT91C_SPI_RXBUFF (0x1 << 6) // (SPI) RXBUFF Interrupt -#define AT91C_SPI_TXBUFE (0x1 << 7) // (SPI) TXBUFE Interrupt -#define AT91C_SPI_NSSR (0x1 << 8) // (SPI) NSSR Interrupt -#define AT91C_SPI_TXEMPTY (0x1 << 9) // (SPI) TXEMPTY Interrupt -#define AT91C_SPI_SPIENS (0x1 << 16) // (SPI) Enable Status -// -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- -// -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- -// -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- -// -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- -#define AT91C_SPI_CPOL (0x1 << 0) // (SPI) Clock Polarity -#define AT91C_SPI_NCPHA (0x1 << 1) // (SPI) Clock Phase -#define AT91C_SPI_CSAAT (0x1 << 3) // (SPI) Chip Select Active After Transfer -#define AT91C_SPI_BITS (0xF << 4) // (SPI) Bits Per Transfer -#define AT91C_SPI_BITS_8 (0x0 << 4) // (SPI) 8 Bits Per transfer -#define AT91C_SPI_BITS_9 (0x1 << 4) // (SPI) 9 Bits Per transfer -#define AT91C_SPI_BITS_10 (0x2 << 4) // (SPI) 10 Bits Per transfer -#define AT91C_SPI_BITS_11 (0x3 << 4) // (SPI) 11 Bits Per transfer -#define AT91C_SPI_BITS_12 (0x4 << 4) // (SPI) 12 Bits Per transfer -#define AT91C_SPI_BITS_13 (0x5 << 4) // (SPI) 13 Bits Per transfer -#define AT91C_SPI_BITS_14 (0x6 << 4) // (SPI) 14 Bits Per transfer -#define AT91C_SPI_BITS_15 (0x7 << 4) // (SPI) 15 Bits Per transfer -#define AT91C_SPI_BITS_16 (0x8 << 4) // (SPI) 16 Bits Per transfer -#define AT91C_SPI_SCBR (0xFF << 8) // (SPI) Serial Clock Baud Rate -#define AT91C_SPI_DLYBS (0xFF << 16) // (SPI) Delay Before SPCK -#define AT91C_SPI_DLYBCT (0xFF << 24) // (SPI) Delay Between Consecutive Transfers - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Analog to Digital Convertor -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_ADC { - AT91_REG ADC_CR; // ADC Control Register - AT91_REG ADC_MR; // ADC Mode Register - AT91_REG Reserved0[2]; // - AT91_REG ADC_CHER; // ADC Channel Enable Register - AT91_REG ADC_CHDR; // ADC Channel Disable Register - AT91_REG ADC_CHSR; // ADC Channel Status Register - AT91_REG ADC_SR; // ADC Status Register - AT91_REG ADC_LCDR; // ADC Last Converted Data Register - AT91_REG ADC_IER; // ADC Interrupt Enable Register - AT91_REG ADC_IDR; // ADC Interrupt Disable Register - AT91_REG ADC_IMR; // ADC Interrupt Mask Register - AT91_REG ADC_CDR0; // ADC Channel Data Register 0 - AT91_REG ADC_CDR1; // ADC Channel Data Register 1 - AT91_REG ADC_CDR2; // ADC Channel Data Register 2 - AT91_REG ADC_CDR3; // ADC Channel Data Register 3 - AT91_REG ADC_CDR4; // ADC Channel Data Register 4 - AT91_REG ADC_CDR5; // ADC Channel Data Register 5 - AT91_REG ADC_CDR6; // ADC Channel Data Register 6 - AT91_REG ADC_CDR7; // ADC Channel Data Register 7 - AT91_REG Reserved1[44]; // - AT91_REG ADC_RPR; // Receive Pointer Register - AT91_REG ADC_RCR; // Receive Counter Register - AT91_REG ADC_TPR; // Transmit Pointer Register - AT91_REG ADC_TCR; // Transmit Counter Register - AT91_REG ADC_RNPR; // Receive Next Pointer Register - AT91_REG ADC_RNCR; // Receive Next Counter Register - AT91_REG ADC_TNPR; // Transmit Next Pointer Register - AT91_REG ADC_TNCR; // Transmit Next Counter Register - AT91_REG ADC_PTCR; // PDC Transfer Control Register - AT91_REG ADC_PTSR; // PDC Transfer Status Register -} AT91S_ADC, *AT91PS_ADC; -#else -#define ADC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (ADC_CR) ADC Control Register -#define ADC_MR (AT91_CAST(AT91_REG *) 0x00000004) // (ADC_MR) ADC Mode Register -#define ADC_CHER (AT91_CAST(AT91_REG *) 0x00000010) // (ADC_CHER) ADC Channel Enable Register -#define ADC_CHDR (AT91_CAST(AT91_REG *) 0x00000014) // (ADC_CHDR) ADC Channel Disable Register -#define ADC_CHSR (AT91_CAST(AT91_REG *) 0x00000018) // (ADC_CHSR) ADC Channel Status Register -#define ADC_SR (AT91_CAST(AT91_REG *) 0x0000001C) // (ADC_SR) ADC Status Register -#define ADC_LCDR (AT91_CAST(AT91_REG *) 0x00000020) // (ADC_LCDR) ADC Last Converted Data Register -#define ADC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (ADC_IER) ADC Interrupt Enable Register -#define ADC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (ADC_IDR) ADC Interrupt Disable Register -#define ADC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (ADC_IMR) ADC Interrupt Mask Register -#define ADC_CDR0 (AT91_CAST(AT91_REG *) 0x00000030) // (ADC_CDR0) ADC Channel Data Register 0 -#define ADC_CDR1 (AT91_CAST(AT91_REG *) 0x00000034) // (ADC_CDR1) ADC Channel Data Register 1 -#define ADC_CDR2 (AT91_CAST(AT91_REG *) 0x00000038) // (ADC_CDR2) ADC Channel Data Register 2 -#define ADC_CDR3 (AT91_CAST(AT91_REG *) 0x0000003C) // (ADC_CDR3) ADC Channel Data Register 3 -#define ADC_CDR4 (AT91_CAST(AT91_REG *) 0x00000040) // (ADC_CDR4) ADC Channel Data Register 4 -#define ADC_CDR5 (AT91_CAST(AT91_REG *) 0x00000044) // (ADC_CDR5) ADC Channel Data Register 5 -#define ADC_CDR6 (AT91_CAST(AT91_REG *) 0x00000048) // (ADC_CDR6) ADC Channel Data Register 6 -#define ADC_CDR7 (AT91_CAST(AT91_REG *) 0x0000004C) // (ADC_CDR7) ADC Channel Data Register 7 - -#endif -// -------- ADC_CR : (ADC Offset: 0x0) ADC Control Register -------- -#define AT91C_ADC_SWRST (0x1 << 0) // (ADC) Software Reset -#define AT91C_ADC_START (0x1 << 1) // (ADC) Start Conversion -// -------- ADC_MR : (ADC Offset: 0x4) ADC Mode Register -------- -#define AT91C_ADC_TRGEN (0x1 << 0) // (ADC) Trigger Enable -#define AT91C_ADC_TRGEN_DIS (0x0) // (ADC) Hradware triggers are disabled. Starting a conversion is only possible by software -#define AT91C_ADC_TRGEN_EN (0x1) // (ADC) Hardware trigger selected by TRGSEL field is enabled. -#define AT91C_ADC_TRGSEL (0x7 << 1) // (ADC) Trigger Selection -#define AT91C_ADC_TRGSEL_TIOA0 (0x0 << 1) // (ADC) Selected TRGSEL = TIAO0 -#define AT91C_ADC_TRGSEL_TIOA1 (0x1 << 1) // (ADC) Selected TRGSEL = TIAO1 -#define AT91C_ADC_TRGSEL_TIOA2 (0x2 << 1) // (ADC) Selected TRGSEL = TIAO2 -#define AT91C_ADC_TRGSEL_TIOA3 (0x3 << 1) // (ADC) Selected TRGSEL = TIAO3 -#define AT91C_ADC_TRGSEL_TIOA4 (0x4 << 1) // (ADC) Selected TRGSEL = TIAO4 -#define AT91C_ADC_TRGSEL_TIOA5 (0x5 << 1) // (ADC) Selected TRGSEL = TIAO5 -#define AT91C_ADC_TRGSEL_EXT (0x6 << 1) // (ADC) Selected TRGSEL = External Trigger -#define AT91C_ADC_LOWRES (0x1 << 4) // (ADC) Resolution. -#define AT91C_ADC_LOWRES_10_BIT (0x0 << 4) // (ADC) 10-bit resolution -#define AT91C_ADC_LOWRES_8_BIT (0x1 << 4) // (ADC) 8-bit resolution -#define AT91C_ADC_SLEEP (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_SLEEP_NORMAL_MODE (0x0 << 5) // (ADC) Normal Mode -#define AT91C_ADC_SLEEP_MODE (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_PRESCAL (0x3F << 8) // (ADC) Prescaler rate selection -#define AT91C_ADC_STARTUP (0x1F << 16) // (ADC) Startup Time -#define AT91C_ADC_SHTIM (0xF << 24) // (ADC) Sample & Hold Time -// -------- ADC_CHER : (ADC Offset: 0x10) ADC Channel Enable Register -------- -#define AT91C_ADC_CH0 (0x1 << 0) // (ADC) Channel 0 -#define AT91C_ADC_CH1 (0x1 << 1) // (ADC) Channel 1 -#define AT91C_ADC_CH2 (0x1 << 2) // (ADC) Channel 2 -#define AT91C_ADC_CH3 (0x1 << 3) // (ADC) Channel 3 -#define AT91C_ADC_CH4 (0x1 << 4) // (ADC) Channel 4 -#define AT91C_ADC_CH5 (0x1 << 5) // (ADC) Channel 5 -#define AT91C_ADC_CH6 (0x1 << 6) // (ADC) Channel 6 -#define AT91C_ADC_CH7 (0x1 << 7) // (ADC) Channel 7 -// -------- ADC_CHDR : (ADC Offset: 0x14) ADC Channel Disable Register -------- -// -------- ADC_CHSR : (ADC Offset: 0x18) ADC Channel Status Register -------- -// -------- ADC_SR : (ADC Offset: 0x1c) ADC Status Register -------- -#define AT91C_ADC_EOC0 (0x1 << 0) // (ADC) End of Conversion -#define AT91C_ADC_EOC1 (0x1 << 1) // (ADC) End of Conversion -#define AT91C_ADC_EOC2 (0x1 << 2) // (ADC) End of Conversion -#define AT91C_ADC_EOC3 (0x1 << 3) // (ADC) End of Conversion -#define AT91C_ADC_EOC4 (0x1 << 4) // (ADC) End of Conversion -#define AT91C_ADC_EOC5 (0x1 << 5) // (ADC) End of Conversion -#define AT91C_ADC_EOC6 (0x1 << 6) // (ADC) End of Conversion -#define AT91C_ADC_EOC7 (0x1 << 7) // (ADC) End of Conversion -#define AT91C_ADC_OVRE0 (0x1 << 8) // (ADC) Overrun Error -#define AT91C_ADC_OVRE1 (0x1 << 9) // (ADC) Overrun Error -#define AT91C_ADC_OVRE2 (0x1 << 10) // (ADC) Overrun Error -#define AT91C_ADC_OVRE3 (0x1 << 11) // (ADC) Overrun Error -#define AT91C_ADC_OVRE4 (0x1 << 12) // (ADC) Overrun Error -#define AT91C_ADC_OVRE5 (0x1 << 13) // (ADC) Overrun Error -#define AT91C_ADC_OVRE6 (0x1 << 14) // (ADC) Overrun Error -#define AT91C_ADC_OVRE7 (0x1 << 15) // (ADC) Overrun Error -#define AT91C_ADC_DRDY (0x1 << 16) // (ADC) Data Ready -#define AT91C_ADC_GOVRE (0x1 << 17) // (ADC) General Overrun -#define AT91C_ADC_ENDRX (0x1 << 18) // (ADC) End of Receiver Transfer -#define AT91C_ADC_RXBUFF (0x1 << 19) // (ADC) RXBUFF Interrupt -// -------- ADC_LCDR : (ADC Offset: 0x20) ADC Last Converted Data Register -------- -#define AT91C_ADC_LDATA (0x3FF << 0) // (ADC) Last Data Converted -// -------- ADC_IER : (ADC Offset: 0x24) ADC Interrupt Enable Register -------- -// -------- ADC_IDR : (ADC Offset: 0x28) ADC Interrupt Disable Register -------- -// -------- ADC_IMR : (ADC Offset: 0x2c) ADC Interrupt Mask Register -------- -// -------- ADC_CDR0 : (ADC Offset: 0x30) ADC Channel Data Register 0 -------- -#define AT91C_ADC_DATA (0x3FF << 0) // (ADC) Converted Data -// -------- ADC_CDR1 : (ADC Offset: 0x34) ADC Channel Data Register 1 -------- -// -------- ADC_CDR2 : (ADC Offset: 0x38) ADC Channel Data Register 2 -------- -// -------- ADC_CDR3 : (ADC Offset: 0x3c) ADC Channel Data Register 3 -------- -// -------- ADC_CDR4 : (ADC Offset: 0x40) ADC Channel Data Register 4 -------- -// -------- ADC_CDR5 : (ADC Offset: 0x44) ADC Channel Data Register 5 -------- -// -------- ADC_CDR6 : (ADC Offset: 0x48) ADC Channel Data Register 6 -------- -// -------- ADC_CDR7 : (ADC Offset: 0x4c) ADC Channel Data Register 7 -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SSC { - AT91_REG SSC_CR; // Control Register - AT91_REG SSC_CMR; // Clock Mode Register - AT91_REG Reserved0[2]; // - AT91_REG SSC_RCMR; // Receive Clock ModeRegister - AT91_REG SSC_RFMR; // Receive Frame Mode Register - AT91_REG SSC_TCMR; // Transmit Clock Mode Register - AT91_REG SSC_TFMR; // Transmit Frame Mode Register - AT91_REG SSC_RHR; // Receive Holding Register - AT91_REG SSC_THR; // Transmit Holding Register - AT91_REG Reserved1[2]; // - AT91_REG SSC_RSHR; // Receive Sync Holding Register - AT91_REG SSC_TSHR; // Transmit Sync Holding Register - AT91_REG Reserved2[2]; // - AT91_REG SSC_SR; // Status Register - AT91_REG SSC_IER; // Interrupt Enable Register - AT91_REG SSC_IDR; // Interrupt Disable Register - AT91_REG SSC_IMR; // Interrupt Mask Register - AT91_REG Reserved3[44]; // - AT91_REG SSC_RPR; // Receive Pointer Register - AT91_REG SSC_RCR; // Receive Counter Register - AT91_REG SSC_TPR; // Transmit Pointer Register - AT91_REG SSC_TCR; // Transmit Counter Register - AT91_REG SSC_RNPR; // Receive Next Pointer Register - AT91_REG SSC_RNCR; // Receive Next Counter Register - AT91_REG SSC_TNPR; // Transmit Next Pointer Register - AT91_REG SSC_TNCR; // Transmit Next Counter Register - AT91_REG SSC_PTCR; // PDC Transfer Control Register - AT91_REG SSC_PTSR; // PDC Transfer Status Register -} AT91S_SSC, *AT91PS_SSC; -#else -#define SSC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SSC_CR) Control Register -#define SSC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (SSC_CMR) Clock Mode Register -#define SSC_RCMR (AT91_CAST(AT91_REG *) 0x00000010) // (SSC_RCMR) Receive Clock ModeRegister -#define SSC_RFMR (AT91_CAST(AT91_REG *) 0x00000014) // (SSC_RFMR) Receive Frame Mode Register -#define SSC_TCMR (AT91_CAST(AT91_REG *) 0x00000018) // (SSC_TCMR) Transmit Clock Mode Register -#define SSC_TFMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SSC_TFMR) Transmit Frame Mode Register -#define SSC_RHR (AT91_CAST(AT91_REG *) 0x00000020) // (SSC_RHR) Receive Holding Register -#define SSC_THR (AT91_CAST(AT91_REG *) 0x00000024) // (SSC_THR) Transmit Holding Register -#define SSC_RSHR (AT91_CAST(AT91_REG *) 0x00000030) // (SSC_RSHR) Receive Sync Holding Register -#define SSC_TSHR (AT91_CAST(AT91_REG *) 0x00000034) // (SSC_TSHR) Transmit Sync Holding Register -#define SSC_SR (AT91_CAST(AT91_REG *) 0x00000040) // (SSC_SR) Status Register -#define SSC_IER (AT91_CAST(AT91_REG *) 0x00000044) // (SSC_IER) Interrupt Enable Register -#define SSC_IDR (AT91_CAST(AT91_REG *) 0x00000048) // (SSC_IDR) Interrupt Disable Register -#define SSC_IMR (AT91_CAST(AT91_REG *) 0x0000004C) // (SSC_IMR) Interrupt Mask Register - -#endif -// -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register -------- -#define AT91C_SSC_RXEN (0x1 << 0) // (SSC) Receive Enable -#define AT91C_SSC_RXDIS (0x1 << 1) // (SSC) Receive Disable -#define AT91C_SSC_TXEN (0x1 << 8) // (SSC) Transmit Enable -#define AT91C_SSC_TXDIS (0x1 << 9) // (SSC) Transmit Disable -#define AT91C_SSC_SWRST (0x1 << 15) // (SSC) Software Reset -// -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register -------- -#define AT91C_SSC_CKS (0x3 << 0) // (SSC) Receive/Transmit Clock Selection -#define AT91C_SSC_CKS_DIV (0x0) // (SSC) Divided Clock -#define AT91C_SSC_CKS_TK (0x1) // (SSC) TK Clock signal -#define AT91C_SSC_CKS_RK (0x2) // (SSC) RK pin -#define AT91C_SSC_CKO (0x7 << 2) // (SSC) Receive/Transmit Clock Output Mode Selection -#define AT91C_SSC_CKO_NONE (0x0 << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only -#define AT91C_SSC_CKO_CONTINOUS (0x1 << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output -#define AT91C_SSC_CKO_DATA_TX (0x2 << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output -#define AT91C_SSC_CKI (0x1 << 5) // (SSC) Receive/Transmit Clock Inversion -#define AT91C_SSC_START (0xF << 8) // (SSC) Receive/Transmit Start Selection -#define AT91C_SSC_START_CONTINOUS (0x0 << 8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. -#define AT91C_SSC_START_TX (0x1 << 8) // (SSC) Transmit/Receive start -#define AT91C_SSC_START_LOW_RF (0x2 << 8) // (SSC) Detection of a low level on RF input -#define AT91C_SSC_START_HIGH_RF (0x3 << 8) // (SSC) Detection of a high level on RF input -#define AT91C_SSC_START_FALL_RF (0x4 << 8) // (SSC) Detection of a falling edge on RF input -#define AT91C_SSC_START_RISE_RF (0x5 << 8) // (SSC) Detection of a rising edge on RF input -#define AT91C_SSC_START_LEVEL_RF (0x6 << 8) // (SSC) Detection of any level change on RF input -#define AT91C_SSC_START_EDGE_RF (0x7 << 8) // (SSC) Detection of any edge on RF input -#define AT91C_SSC_START_0 (0x8 << 8) // (SSC) Compare 0 -#define AT91C_SSC_STTDLY (0xFF << 16) // (SSC) Receive/Transmit Start Delay -#define AT91C_SSC_PERIOD (0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection -// -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register -------- -#define AT91C_SSC_DATLEN (0x1F << 0) // (SSC) Data Length -#define AT91C_SSC_LOOP (0x1 << 5) // (SSC) Loop Mode -#define AT91C_SSC_MSBF (0x1 << 7) // (SSC) Most Significant Bit First -#define AT91C_SSC_DATNB (0xF << 8) // (SSC) Data Number per Frame -#define AT91C_SSC_FSLEN (0xF << 16) // (SSC) Receive/Transmit Frame Sync length -#define AT91C_SSC_FSOS (0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection -#define AT91C_SSC_FSOS_NONE (0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only -#define AT91C_SSC_FSOS_NEGATIVE (0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse -#define AT91C_SSC_FSOS_POSITIVE (0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse -#define AT91C_SSC_FSOS_LOW (0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer -#define AT91C_SSC_FSOS_HIGH (0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer -#define AT91C_SSC_FSOS_TOGGLE (0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer -#define AT91C_SSC_FSEDGE (0x1 << 24) // (SSC) Frame Sync Edge Detection -// -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register -------- -// -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register -------- -#define AT91C_SSC_DATDEF (0x1 << 5) // (SSC) Data Default Value -#define AT91C_SSC_FSDEN (0x1 << 23) // (SSC) Frame Sync Data Enable -// -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register -------- -#define AT91C_SSC_TXRDY (0x1 << 0) // (SSC) Transmit Ready -#define AT91C_SSC_TXEMPTY (0x1 << 1) // (SSC) Transmit Empty -#define AT91C_SSC_ENDTX (0x1 << 2) // (SSC) End Of Transmission -#define AT91C_SSC_TXBUFE (0x1 << 3) // (SSC) Transmit Buffer Empty -#define AT91C_SSC_RXRDY (0x1 << 4) // (SSC) Receive Ready -#define AT91C_SSC_OVRUN (0x1 << 5) // (SSC) Receive Overrun -#define AT91C_SSC_ENDRX (0x1 << 6) // (SSC) End of Reception -#define AT91C_SSC_RXBUFF (0x1 << 7) // (SSC) Receive Buffer Full -#define AT91C_SSC_TXSYN (0x1 << 10) // (SSC) Transmit Sync -#define AT91C_SSC_RXSYN (0x1 << 11) // (SSC) Receive Sync -#define AT91C_SSC_TXENA (0x1 << 16) // (SSC) Transmit Enable -#define AT91C_SSC_RXENA (0x1 << 17) // (SSC) Receive Enable -// -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register -------- -// -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register -------- -// -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Usart -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_USART { - AT91_REG US_CR; // Control Register - AT91_REG US_MR; // Mode Register - AT91_REG US_IER; // Interrupt Enable Register - AT91_REG US_IDR; // Interrupt Disable Register - AT91_REG US_IMR; // Interrupt Mask Register - AT91_REG US_CSR; // Channel Status Register - AT91_REG US_RHR; // Receiver Holding Register - AT91_REG US_THR; // Transmitter Holding Register - AT91_REG US_BRGR; // Baud Rate Generator Register - AT91_REG US_RTOR; // Receiver Time-out Register - AT91_REG US_TTGR; // Transmitter Time-guard Register - AT91_REG Reserved0[5]; // - AT91_REG US_FIDI; // FI_DI_Ratio Register - AT91_REG US_NER; // Nb Errors Register - AT91_REG Reserved1[1]; // - AT91_REG US_IF; // IRDA_FILTER Register - AT91_REG Reserved2[44]; // - AT91_REG US_RPR; // Receive Pointer Register - AT91_REG US_RCR; // Receive Counter Register - AT91_REG US_TPR; // Transmit Pointer Register - AT91_REG US_TCR; // Transmit Counter Register - AT91_REG US_RNPR; // Receive Next Pointer Register - AT91_REG US_RNCR; // Receive Next Counter Register - AT91_REG US_TNPR; // Transmit Next Pointer Register - AT91_REG US_TNCR; // Transmit Next Counter Register - AT91_REG US_PTCR; // PDC Transfer Control Register - AT91_REG US_PTSR; // PDC Transfer Status Register -} AT91S_USART, *AT91PS_USART; -#else -#define US_CR (AT91_CAST(AT91_REG *) 0x00000000) // (US_CR) Control Register -#define US_MR (AT91_CAST(AT91_REG *) 0x00000004) // (US_MR) Mode Register -#define US_IER (AT91_CAST(AT91_REG *) 0x00000008) // (US_IER) Interrupt Enable Register -#define US_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (US_IDR) Interrupt Disable Register -#define US_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (US_IMR) Interrupt Mask Register -#define US_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (US_CSR) Channel Status Register -#define US_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (US_RHR) Receiver Holding Register -#define US_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (US_THR) Transmitter Holding Register -#define US_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (US_BRGR) Baud Rate Generator Register -#define US_RTOR (AT91_CAST(AT91_REG *) 0x00000024) // (US_RTOR) Receiver Time-out Register -#define US_TTGR (AT91_CAST(AT91_REG *) 0x00000028) // (US_TTGR) Transmitter Time-guard Register -#define US_FIDI (AT91_CAST(AT91_REG *) 0x00000040) // (US_FIDI) FI_DI_Ratio Register -#define US_NER (AT91_CAST(AT91_REG *) 0x00000044) // (US_NER) Nb Errors Register -#define US_IF (AT91_CAST(AT91_REG *) 0x0000004C) // (US_IF) IRDA_FILTER Register - -#endif -// -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_STTBRK (0x1 << 9) // (USART) Start Break -#define AT91C_US_STPBRK (0x1 << 10) // (USART) Stop Break -#define AT91C_US_STTTO (0x1 << 11) // (USART) Start Time-out -#define AT91C_US_SENDA (0x1 << 12) // (USART) Send Address -#define AT91C_US_RSTIT (0x1 << 13) // (USART) Reset Iterations -#define AT91C_US_RSTNACK (0x1 << 14) // (USART) Reset Non Acknowledge -#define AT91C_US_RETTO (0x1 << 15) // (USART) Rearm Time-out -#define AT91C_US_DTREN (0x1 << 16) // (USART) Data Terminal ready Enable -#define AT91C_US_DTRDIS (0x1 << 17) // (USART) Data Terminal ready Disable -#define AT91C_US_RTSEN (0x1 << 18) // (USART) Request to Send enable -#define AT91C_US_RTSDIS (0x1 << 19) // (USART) Request to Send Disable -// -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_USMODE (0xF << 0) // (USART) Usart mode -#define AT91C_US_USMODE_NORMAL (0x0) // (USART) Normal -#define AT91C_US_USMODE_RS485 (0x1) // (USART) RS485 -#define AT91C_US_USMODE_HWHSH (0x2) // (USART) Hardware Handshaking -#define AT91C_US_USMODE_MODEM (0x3) // (USART) Modem -#define AT91C_US_USMODE_ISO7816_0 (0x4) // (USART) ISO7816 protocol: T = 0 -#define AT91C_US_USMODE_ISO7816_1 (0x6) // (USART) ISO7816 protocol: T = 1 -#define AT91C_US_USMODE_IRDA (0x8) // (USART) IrDA -#define AT91C_US_USMODE_SWHSH (0xC) // (USART) Software Handshaking -#define AT91C_US_CLKS (0x3 << 4) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CLKS_CLOCK (0x0 << 4) // (USART) Clock -#define AT91C_US_CLKS_FDIV1 (0x1 << 4) // (USART) fdiv1 -#define AT91C_US_CLKS_SLOW (0x2 << 4) // (USART) slow_clock (ARM) -#define AT91C_US_CLKS_EXT (0x3 << 4) // (USART) External (SCK) -#define AT91C_US_CHRL (0x3 << 6) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CHRL_5_BITS (0x0 << 6) // (USART) Character Length: 5 bits -#define AT91C_US_CHRL_6_BITS (0x1 << 6) // (USART) Character Length: 6 bits -#define AT91C_US_CHRL_7_BITS (0x2 << 6) // (USART) Character Length: 7 bits -#define AT91C_US_CHRL_8_BITS (0x3 << 6) // (USART) Character Length: 8 bits -#define AT91C_US_SYNC (0x1 << 8) // (USART) Synchronous Mode Select -#define AT91C_US_NBSTOP (0x3 << 12) // (USART) Number of Stop bits -#define AT91C_US_NBSTOP_1_BIT (0x0 << 12) // (USART) 1 stop bit -#define AT91C_US_NBSTOP_15_BIT (0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits -#define AT91C_US_NBSTOP_2_BIT (0x2 << 12) // (USART) 2 stop bits -#define AT91C_US_MSBF (0x1 << 16) // (USART) Bit Order -#define AT91C_US_MODE9 (0x1 << 17) // (USART) 9-bit Character length -#define AT91C_US_CKLO (0x1 << 18) // (USART) Clock Output Select -#define AT91C_US_OVER (0x1 << 19) // (USART) Over Sampling Mode -#define AT91C_US_INACK (0x1 << 20) // (USART) Inhibit Non Acknowledge -#define AT91C_US_DSNACK (0x1 << 21) // (USART) Disable Successive NACK -#define AT91C_US_MAX_ITER (0x1 << 24) // (USART) Number of Repetitions -#define AT91C_US_FILTER (0x1 << 28) // (USART) Receive Line Filter -// -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXBRK (0x1 << 2) // (USART) Break Received/End of Break -#define AT91C_US_TIMEOUT (0x1 << 8) // (USART) Receiver Time-out -#define AT91C_US_ITERATION (0x1 << 10) // (USART) Max number of Repetitions Reached -#define AT91C_US_NACK (0x1 << 13) // (USART) Non Acknowledge -#define AT91C_US_RIIC (0x1 << 16) // (USART) Ring INdicator Input Change Flag -#define AT91C_US_DSRIC (0x1 << 17) // (USART) Data Set Ready Input Change Flag -#define AT91C_US_DCDIC (0x1 << 18) // (USART) Data Carrier Flag -#define AT91C_US_CTSIC (0x1 << 19) // (USART) Clear To Send Input Change Flag -// -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register -------- -#define AT91C_US_RI (0x1 << 20) // (USART) Image of RI Input -#define AT91C_US_DSR (0x1 << 21) // (USART) Image of DSR Input -#define AT91C_US_DCD (0x1 << 22) // (USART) Image of DCD Input -#define AT91C_US_CTS (0x1 << 23) // (USART) Image of CTS Input - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Two-wire Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TWI { - AT91_REG TWI_CR; // Control Register - AT91_REG TWI_MMR; // Master Mode Register - AT91_REG Reserved0[1]; // - AT91_REG TWI_IADR; // Internal Address Register - AT91_REG TWI_CWGR; // Clock Waveform Generator Register - AT91_REG Reserved1[3]; // - AT91_REG TWI_SR; // Status Register - AT91_REG TWI_IER; // Interrupt Enable Register - AT91_REG TWI_IDR; // Interrupt Disable Register - AT91_REG TWI_IMR; // Interrupt Mask Register - AT91_REG TWI_RHR; // Receive Holding Register - AT91_REG TWI_THR; // Transmit Holding Register - AT91_REG Reserved2[50]; // - AT91_REG TWI_RPR; // Receive Pointer Register - AT91_REG TWI_RCR; // Receive Counter Register - AT91_REG TWI_TPR; // Transmit Pointer Register - AT91_REG TWI_TCR; // Transmit Counter Register - AT91_REG TWI_RNPR; // Receive Next Pointer Register - AT91_REG TWI_RNCR; // Receive Next Counter Register - AT91_REG TWI_TNPR; // Transmit Next Pointer Register - AT91_REG TWI_TNCR; // Transmit Next Counter Register - AT91_REG TWI_PTCR; // PDC Transfer Control Register - AT91_REG TWI_PTSR; // PDC Transfer Status Register -} AT91S_TWI, *AT91PS_TWI; -#else -#define TWI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (TWI_CR) Control Register -#define TWI_MMR (AT91_CAST(AT91_REG *) 0x00000004) // (TWI_MMR) Master Mode Register -#define TWI_IADR (AT91_CAST(AT91_REG *) 0x0000000C) // (TWI_IADR) Internal Address Register -#define TWI_CWGR (AT91_CAST(AT91_REG *) 0x00000010) // (TWI_CWGR) Clock Waveform Generator Register -#define TWI_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TWI_SR) Status Register -#define TWI_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TWI_IER) Interrupt Enable Register -#define TWI_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TWI_IDR) Interrupt Disable Register -#define TWI_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TWI_IMR) Interrupt Mask Register -#define TWI_RHR (AT91_CAST(AT91_REG *) 0x00000030) // (TWI_RHR) Receive Holding Register -#define TWI_THR (AT91_CAST(AT91_REG *) 0x00000034) // (TWI_THR) Transmit Holding Register - -#endif -// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- -#define AT91C_TWI_START (0x1 << 0) // (TWI) Send a START Condition -#define AT91C_TWI_STOP (0x1 << 1) // (TWI) Send a STOP Condition -#define AT91C_TWI_MSEN (0x1 << 2) // (TWI) TWI Master Transfer Enabled -#define AT91C_TWI_MSDIS (0x1 << 3) // (TWI) TWI Master Transfer Disabled -#define AT91C_TWI_SWRST (0x1 << 7) // (TWI) Software Reset -// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- -#define AT91C_TWI_IADRSZ (0x3 << 8) // (TWI) Internal Device Address Size -#define AT91C_TWI_IADRSZ_NO (0x0 << 8) // (TWI) No internal device address -#define AT91C_TWI_IADRSZ_1_BYTE (0x1 << 8) // (TWI) One-byte internal device address -#define AT91C_TWI_IADRSZ_2_BYTE (0x2 << 8) // (TWI) Two-byte internal device address -#define AT91C_TWI_IADRSZ_3_BYTE (0x3 << 8) // (TWI) Three-byte internal device address -#define AT91C_TWI_MREAD (0x1 << 12) // (TWI) Master Read Direction -#define AT91C_TWI_DADR (0x7F << 16) // (TWI) Device Address -// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- -#define AT91C_TWI_CLDIV (0xFF << 0) // (TWI) Clock Low Divider -#define AT91C_TWI_CHDIV (0xFF << 8) // (TWI) Clock High Divider -#define AT91C_TWI_CKDIV (0x7 << 16) // (TWI) Clock Divider -// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- -#define AT91C_TWI_TXCOMP (0x1 << 0) // (TWI) Transmission Completed -#define AT91C_TWI_RXRDY (0x1 << 1) // (TWI) Receive holding register ReaDY -#define AT91C_TWI_TXRDY (0x1 << 2) // (TWI) Transmit holding register ReaDY -#define AT91C_TWI_OVRE (0x1 << 6) // (TWI) Overrun Error -#define AT91C_TWI_UNRE (0x1 << 7) // (TWI) Underrun Error -#define AT91C_TWI_NACK (0x1 << 8) // (TWI) Not Acknowledged -#define AT91C_TWI_ENDRX (0x1 << 12) // (TWI) -#define AT91C_TWI_ENDTX (0x1 << 13) // (TWI) -#define AT91C_TWI_RXBUFF (0x1 << 14) // (TWI) -#define AT91C_TWI_TXBUFE (0x1 << 15) // (TWI) -// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- -// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- -// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TC { - AT91_REG TC_CCR; // Channel Control Register - AT91_REG TC_CMR; // Channel Mode Register (Capture Mode / Waveform Mode) - AT91_REG Reserved0[2]; // - AT91_REG TC_CV; // Counter Value - AT91_REG TC_RA; // Register A - AT91_REG TC_RB; // Register B - AT91_REG TC_RC; // Register C - AT91_REG TC_SR; // Status Register - AT91_REG TC_IER; // Interrupt Enable Register - AT91_REG TC_IDR; // Interrupt Disable Register - AT91_REG TC_IMR; // Interrupt Mask Register -} AT91S_TC, *AT91PS_TC; -#else -#define TC_CCR (AT91_CAST(AT91_REG *) 0x00000000) // (TC_CCR) Channel Control Register -#define TC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (TC_CMR) Channel Mode Register (Capture Mode / Waveform Mode) -#define TC_CV (AT91_CAST(AT91_REG *) 0x00000010) // (TC_CV) Counter Value -#define TC_RA (AT91_CAST(AT91_REG *) 0x00000014) // (TC_RA) Register A -#define TC_RB (AT91_CAST(AT91_REG *) 0x00000018) // (TC_RB) Register B -#define TC_RC (AT91_CAST(AT91_REG *) 0x0000001C) // (TC_RC) Register C -#define TC_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TC_SR) Status Register -#define TC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TC_IER) Interrupt Enable Register -#define TC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TC_IDR) Interrupt Disable Register -#define TC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TC_IMR) Interrupt Mask Register - -#endif -// -------- TC_CCR : (TC Offset: 0x0) TC Channel Control Register -------- -#define AT91C_TC_CLKEN (0x1 << 0) // (TC) Counter Clock Enable Command -#define AT91C_TC_CLKDIS (0x1 << 1) // (TC) Counter Clock Disable Command -#define AT91C_TC_SWTRG (0x1 << 2) // (TC) Software Trigger Command -// -------- TC_CMR : (TC Offset: 0x4) TC Channel Mode Register: Capture Mode / Waveform Mode -------- -#define AT91C_TC_CLKS (0x7 << 0) // (TC) Clock Selection -#define AT91C_TC_CLKS_TIMER_DIV1_CLOCK (0x0) // (TC) Clock selected: TIMER_DIV1_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV2_CLOCK (0x1) // (TC) Clock selected: TIMER_DIV2_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV3_CLOCK (0x2) // (TC) Clock selected: TIMER_DIV3_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV4_CLOCK (0x3) // (TC) Clock selected: TIMER_DIV4_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV5_CLOCK (0x4) // (TC) Clock selected: TIMER_DIV5_CLOCK -#define AT91C_TC_CLKS_XC0 (0x5) // (TC) Clock selected: XC0 -#define AT91C_TC_CLKS_XC1 (0x6) // (TC) Clock selected: XC1 -#define AT91C_TC_CLKS_XC2 (0x7) // (TC) Clock selected: XC2 -#define AT91C_TC_CLKI (0x1 << 3) // (TC) Clock Invert -#define AT91C_TC_BURST (0x3 << 4) // (TC) Burst Signal Selection -#define AT91C_TC_BURST_NONE (0x0 << 4) // (TC) The clock is not gated by an external signal -#define AT91C_TC_BURST_XC0 (0x1 << 4) // (TC) XC0 is ANDed with the selected clock -#define AT91C_TC_BURST_XC1 (0x2 << 4) // (TC) XC1 is ANDed with the selected clock -#define AT91C_TC_BURST_XC2 (0x3 << 4) // (TC) XC2 is ANDed with the selected clock -#define AT91C_TC_CPCSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RC Compare -#define AT91C_TC_LDBSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RB Loading -#define AT91C_TC_CPCDIS (0x1 << 7) // (TC) Counter Clock Disable with RC Compare -#define AT91C_TC_LDBDIS (0x1 << 7) // (TC) Counter Clock Disabled with RB Loading -#define AT91C_TC_ETRGEDG (0x3 << 8) // (TC) External Trigger Edge Selection -#define AT91C_TC_ETRGEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_ETRGEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_ETRGEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_ETRGEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVTEDG (0x3 << 8) // (TC) External Event Edge Selection -#define AT91C_TC_EEVTEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_EEVTEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_EEVTEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_EEVTEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVT (0x3 << 10) // (TC) External Event Selection -#define AT91C_TC_EEVT_TIOB (0x0 << 10) // (TC) Signal selected as external event: TIOB TIOB direction: input -#define AT91C_TC_EEVT_XC0 (0x1 << 10) // (TC) Signal selected as external event: XC0 TIOB direction: output -#define AT91C_TC_EEVT_XC1 (0x2 << 10) // (TC) Signal selected as external event: XC1 TIOB direction: output -#define AT91C_TC_EEVT_XC2 (0x3 << 10) // (TC) Signal selected as external event: XC2 TIOB direction: output -#define AT91C_TC_ABETRG (0x1 << 10) // (TC) TIOA or TIOB External Trigger Selection -#define AT91C_TC_ENETRG (0x1 << 12) // (TC) External Event Trigger enable -#define AT91C_TC_WAVESEL (0x3 << 13) // (TC) Waveform Selection -#define AT91C_TC_WAVESEL_UP (0x0 << 13) // (TC) UP mode without atomatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN (0x1 << 13) // (TC) UPDOWN mode without automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UP_AUTO (0x2 << 13) // (TC) UP mode with automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN_AUTO (0x3 << 13) // (TC) UPDOWN mode with automatic trigger on RC Compare -#define AT91C_TC_CPCTRG (0x1 << 14) // (TC) RC Compare Trigger Enable -#define AT91C_TC_WAVE (0x1 << 15) // (TC) -#define AT91C_TC_ACPA (0x3 << 16) // (TC) RA Compare Effect on TIOA -#define AT91C_TC_ACPA_NONE (0x0 << 16) // (TC) Effect: none -#define AT91C_TC_ACPA_SET (0x1 << 16) // (TC) Effect: set -#define AT91C_TC_ACPA_CLEAR (0x2 << 16) // (TC) Effect: clear -#define AT91C_TC_ACPA_TOGGLE (0x3 << 16) // (TC) Effect: toggle -#define AT91C_TC_LDRA (0x3 << 16) // (TC) RA Loading Selection -#define AT91C_TC_LDRA_NONE (0x0 << 16) // (TC) Edge: None -#define AT91C_TC_LDRA_RISING (0x1 << 16) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRA_FALLING (0x2 << 16) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRA_BOTH (0x3 << 16) // (TC) Edge: each edge of TIOA -#define AT91C_TC_ACPC (0x3 << 18) // (TC) RC Compare Effect on TIOA -#define AT91C_TC_ACPC_NONE (0x0 << 18) // (TC) Effect: none -#define AT91C_TC_ACPC_SET (0x1 << 18) // (TC) Effect: set -#define AT91C_TC_ACPC_CLEAR (0x2 << 18) // (TC) Effect: clear -#define AT91C_TC_ACPC_TOGGLE (0x3 << 18) // (TC) Effect: toggle -#define AT91C_TC_LDRB (0x3 << 18) // (TC) RB Loading Selection -#define AT91C_TC_LDRB_NONE (0x0 << 18) // (TC) Edge: None -#define AT91C_TC_LDRB_RISING (0x1 << 18) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRB_FALLING (0x2 << 18) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRB_BOTH (0x3 << 18) // (TC) Edge: each edge of TIOA -#define AT91C_TC_AEEVT (0x3 << 20) // (TC) External Event Effect on TIOA -#define AT91C_TC_AEEVT_NONE (0x0 << 20) // (TC) Effect: none -#define AT91C_TC_AEEVT_SET (0x1 << 20) // (TC) Effect: set -#define AT91C_TC_AEEVT_CLEAR (0x2 << 20) // (TC) Effect: clear -#define AT91C_TC_AEEVT_TOGGLE (0x3 << 20) // (TC) Effect: toggle -#define AT91C_TC_ASWTRG (0x3 << 22) // (TC) Software Trigger Effect on TIOA -#define AT91C_TC_ASWTRG_NONE (0x0 << 22) // (TC) Effect: none -#define AT91C_TC_ASWTRG_SET (0x1 << 22) // (TC) Effect: set -#define AT91C_TC_ASWTRG_CLEAR (0x2 << 22) // (TC) Effect: clear -#define AT91C_TC_ASWTRG_TOGGLE (0x3 << 22) // (TC) Effect: toggle -#define AT91C_TC_BCPB (0x3 << 24) // (TC) RB Compare Effect on TIOB -#define AT91C_TC_BCPB_NONE (0x0 << 24) // (TC) Effect: none -#define AT91C_TC_BCPB_SET (0x1 << 24) // (TC) Effect: set -#define AT91C_TC_BCPB_CLEAR (0x2 << 24) // (TC) Effect: clear -#define AT91C_TC_BCPB_TOGGLE (0x3 << 24) // (TC) Effect: toggle -#define AT91C_TC_BCPC (0x3 << 26) // (TC) RC Compare Effect on TIOB -#define AT91C_TC_BCPC_NONE (0x0 << 26) // (TC) Effect: none -#define AT91C_TC_BCPC_SET (0x1 << 26) // (TC) Effect: set -#define AT91C_TC_BCPC_CLEAR (0x2 << 26) // (TC) Effect: clear -#define AT91C_TC_BCPC_TOGGLE (0x3 << 26) // (TC) Effect: toggle -#define AT91C_TC_BEEVT (0x3 << 28) // (TC) External Event Effect on TIOB -#define AT91C_TC_BEEVT_NONE (0x0 << 28) // (TC) Effect: none -#define AT91C_TC_BEEVT_SET (0x1 << 28) // (TC) Effect: set -#define AT91C_TC_BEEVT_CLEAR (0x2 << 28) // (TC) Effect: clear -#define AT91C_TC_BEEVT_TOGGLE (0x3 << 28) // (TC) Effect: toggle -#define AT91C_TC_BSWTRG (0x3 << 30) // (TC) Software Trigger Effect on TIOB -#define AT91C_TC_BSWTRG_NONE (0x0 << 30) // (TC) Effect: none -#define AT91C_TC_BSWTRG_SET (0x1 << 30) // (TC) Effect: set -#define AT91C_TC_BSWTRG_CLEAR (0x2 << 30) // (TC) Effect: clear -#define AT91C_TC_BSWTRG_TOGGLE (0x3 << 30) // (TC) Effect: toggle -// -------- TC_SR : (TC Offset: 0x20) TC Channel Status Register -------- -#define AT91C_TC_COVFS (0x1 << 0) // (TC) Counter Overflow -#define AT91C_TC_LOVRS (0x1 << 1) // (TC) Load Overrun -#define AT91C_TC_CPAS (0x1 << 2) // (TC) RA Compare -#define AT91C_TC_CPBS (0x1 << 3) // (TC) RB Compare -#define AT91C_TC_CPCS (0x1 << 4) // (TC) RC Compare -#define AT91C_TC_LDRAS (0x1 << 5) // (TC) RA Loading -#define AT91C_TC_LDRBS (0x1 << 6) // (TC) RB Loading -#define AT91C_TC_ETRGS (0x1 << 7) // (TC) External Trigger -#define AT91C_TC_CLKSTA (0x1 << 16) // (TC) Clock Enabling -#define AT91C_TC_MTIOA (0x1 << 17) // (TC) TIOA Mirror -#define AT91C_TC_MTIOB (0x1 << 18) // (TC) TIOA Mirror -// -------- TC_IER : (TC Offset: 0x24) TC Channel Interrupt Enable Register -------- -// -------- TC_IDR : (TC Offset: 0x28) TC Channel Interrupt Disable Register -------- -// -------- TC_IMR : (TC Offset: 0x2c) TC Channel Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TCB { - AT91S_TC TCB_TC0; // TC Channel 0 - AT91_REG Reserved0[4]; // - AT91S_TC TCB_TC1; // TC Channel 1 - AT91_REG Reserved1[4]; // - AT91S_TC TCB_TC2; // TC Channel 2 - AT91_REG Reserved2[4]; // - AT91_REG TCB_BCR; // TC Block Control Register - AT91_REG TCB_BMR; // TC Block Mode Register -} AT91S_TCB, *AT91PS_TCB; -#else -#define TCB_BCR (AT91_CAST(AT91_REG *) 0x000000C0) // (TCB_BCR) TC Block Control Register -#define TCB_BMR (AT91_CAST(AT91_REG *) 0x000000C4) // (TCB_BMR) TC Block Mode Register - -#endif -// -------- TCB_BCR : (TCB Offset: 0xc0) TC Block Control Register -------- -#define AT91C_TCB_SYNC (0x1 << 0) // (TCB) Synchro Command -// -------- TCB_BMR : (TCB Offset: 0xc4) TC Block Mode Register -------- -#define AT91C_TCB_TC0XC0S (0x3 << 0) // (TCB) External Clock Signal 0 Selection -#define AT91C_TCB_TC0XC0S_TCLK0 (0x0) // (TCB) TCLK0 connected to XC0 -#define AT91C_TCB_TC0XC0S_NONE (0x1) // (TCB) None signal connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA1 (0x2) // (TCB) TIOA1 connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA2 (0x3) // (TCB) TIOA2 connected to XC0 -#define AT91C_TCB_TC1XC1S (0x3 << 2) // (TCB) External Clock Signal 1 Selection -#define AT91C_TCB_TC1XC1S_TCLK1 (0x0 << 2) // (TCB) TCLK1 connected to XC1 -#define AT91C_TCB_TC1XC1S_NONE (0x1 << 2) // (TCB) None signal connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA0 (0x2 << 2) // (TCB) TIOA0 connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA2 (0x3 << 2) // (TCB) TIOA2 connected to XC1 -#define AT91C_TCB_TC2XC2S (0x3 << 4) // (TCB) External Clock Signal 2 Selection -#define AT91C_TCB_TC2XC2S_TCLK2 (0x0 << 4) // (TCB) TCLK2 connected to XC2 -#define AT91C_TCB_TC2XC2S_NONE (0x1 << 4) // (TCB) None signal connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA0 (0x2 << 4) // (TCB) TIOA0 connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA1 (0x3 << 4) // (TCB) TIOA2 connected to XC2 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR PWMC Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC_CH { - AT91_REG PWMC_CMR; // Channel Mode Register - AT91_REG PWMC_CDTYR; // Channel Duty Cycle Register - AT91_REG PWMC_CPRDR; // Channel Period Register - AT91_REG PWMC_CCNTR; // Channel Counter Register - AT91_REG PWMC_CUPDR; // Channel Update Register - AT91_REG PWMC_Reserved[3]; // Reserved -} AT91S_PWMC_CH, *AT91PS_PWMC_CH; -#else -#define PWMC_CMR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_CMR) Channel Mode Register -#define PWMC_CDTYR (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_CDTYR) Channel Duty Cycle Register -#define PWMC_CPRDR (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_CPRDR) Channel Period Register -#define PWMC_CCNTR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_CCNTR) Channel Counter Register -#define PWMC_CUPDR (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_CUPDR) Channel Update Register -#define Reserved (AT91_CAST(AT91_REG *) 0x00000014) // (Reserved) Reserved - -#endif -// -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register -------- -#define AT91C_PWMC_CPRE (0xF << 0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx -#define AT91C_PWMC_CPRE_MCK (0x0) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKA (0xB) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKB (0xC) // (PWMC_CH) -#define AT91C_PWMC_CALG (0x1 << 8) // (PWMC_CH) Channel Alignment -#define AT91C_PWMC_CPOL (0x1 << 9) // (PWMC_CH) Channel Polarity -#define AT91C_PWMC_CPD (0x1 << 10) // (PWMC_CH) Channel Update Period -// -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register -------- -#define AT91C_PWMC_CDTY (0x0 << 0) // (PWMC_CH) Channel Duty Cycle -// -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register -------- -#define AT91C_PWMC_CPRD (0x0 << 0) // (PWMC_CH) Channel Period -// -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register -------- -#define AT91C_PWMC_CCNT (0x0 << 0) // (PWMC_CH) Channel Counter -// -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register -------- -#define AT91C_PWMC_CUPD (0x0 << 0) // (PWMC_CH) Channel Update - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC { - AT91_REG PWMC_MR; // PWMC Mode Register - AT91_REG PWMC_ENA; // PWMC Enable Register - AT91_REG PWMC_DIS; // PWMC Disable Register - AT91_REG PWMC_SR; // PWMC Status Register - AT91_REG PWMC_IER; // PWMC Interrupt Enable Register - AT91_REG PWMC_IDR; // PWMC Interrupt Disable Register - AT91_REG PWMC_IMR; // PWMC Interrupt Mask Register - AT91_REG PWMC_ISR; // PWMC Interrupt Status Register - AT91_REG Reserved0[55]; // - AT91_REG PWMC_VR; // PWMC Version Register - AT91_REG Reserved1[64]; // - AT91S_PWMC_CH PWMC_CH[4]; // PWMC Channel -} AT91S_PWMC, *AT91PS_PWMC; -#else -#define PWMC_MR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_MR) PWMC Mode Register -#define PWMC_ENA (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_ENA) PWMC Enable Register -#define PWMC_DIS (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_DIS) PWMC Disable Register -#define PWMC_SR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_SR) PWMC Status Register -#define PWMC_IER (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_IER) PWMC Interrupt Enable Register -#define PWMC_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (PWMC_IDR) PWMC Interrupt Disable Register -#define PWMC_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (PWMC_IMR) PWMC Interrupt Mask Register -#define PWMC_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (PWMC_ISR) PWMC Interrupt Status Register -#define PWMC_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (PWMC_VR) PWMC Version Register - -#endif -// -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register -------- -#define AT91C_PWMC_DIVA (0xFF << 0) // (PWMC) CLKA divide factor. -#define AT91C_PWMC_PREA (0xF << 8) // (PWMC) Divider Input Clock Prescaler A -#define AT91C_PWMC_PREA_MCK (0x0 << 8) // (PWMC) -#define AT91C_PWMC_DIVB (0xFF << 16) // (PWMC) CLKB divide factor. -#define AT91C_PWMC_PREB (0xF << 24) // (PWMC) Divider Input Clock Prescaler B -#define AT91C_PWMC_PREB_MCK (0x0 << 24) // (PWMC) -// -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register -------- -#define AT91C_PWMC_CHID0 (0x1 << 0) // (PWMC) Channel ID 0 -#define AT91C_PWMC_CHID1 (0x1 << 1) // (PWMC) Channel ID 1 -#define AT91C_PWMC_CHID2 (0x1 << 2) // (PWMC) Channel ID 2 -#define AT91C_PWMC_CHID3 (0x1 << 3) // (PWMC) Channel ID 3 -// -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register -------- -// -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register -------- -// -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register -------- -// -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register -------- -// -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register -------- -// -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR USB Device Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_UDP { - AT91_REG UDP_NUM; // Frame Number Register - AT91_REG UDP_GLBSTATE; // Global State Register - AT91_REG UDP_FADDR; // Function Address Register - AT91_REG Reserved0[1]; // - AT91_REG UDP_IER; // Interrupt Enable Register - AT91_REG UDP_IDR; // Interrupt Disable Register - AT91_REG UDP_IMR; // Interrupt Mask Register - AT91_REG UDP_ISR; // Interrupt Status Register - AT91_REG UDP_ICR; // Interrupt Clear Register - AT91_REG Reserved1[1]; // - AT91_REG UDP_RSTEP; // Reset Endpoint Register - AT91_REG Reserved2[1]; // - AT91_REG UDP_CSR[4]; // Endpoint Control and Status Register - AT91_REG Reserved3[4]; // - AT91_REG UDP_FDR[4]; // Endpoint FIFO Data Register - AT91_REG Reserved4[5]; // - AT91_REG UDP_TXVC; // Transceiver Control Register -} AT91S_UDP, *AT91PS_UDP; -#else -#define UDP_FRM_NUM (AT91_CAST(AT91_REG *) 0x00000000) // (UDP_FRM_NUM) Frame Number Register -#define UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0x00000004) // (UDP_GLBSTATE) Global State Register -#define UDP_FADDR (AT91_CAST(AT91_REG *) 0x00000008) // (UDP_FADDR) Function Address Register -#define UDP_IER (AT91_CAST(AT91_REG *) 0x00000010) // (UDP_IER) Interrupt Enable Register -#define UDP_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (UDP_IDR) Interrupt Disable Register -#define UDP_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (UDP_IMR) Interrupt Mask Register -#define UDP_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (UDP_ISR) Interrupt Status Register -#define UDP_ICR (AT91_CAST(AT91_REG *) 0x00000020) // (UDP_ICR) Interrupt Clear Register -#define UDP_RSTEP (AT91_CAST(AT91_REG *) 0x00000028) // (UDP_RSTEP) Reset Endpoint Register -#define UDP_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (UDP_CSR) Endpoint Control and Status Register -#define UDP_FDR (AT91_CAST(AT91_REG *) 0x00000050) // (UDP_FDR) Endpoint FIFO Data Register -#define UDP_TXVC (AT91_CAST(AT91_REG *) 0x00000074) // (UDP_TXVC) Transceiver Control Register - -#endif -// -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register -------- -#define AT91C_UDP_FRM_NUM (0x7FF << 0) // (UDP) Frame Number as Defined in the Packet Field Formats -#define AT91C_UDP_FRM_ERR (0x1 << 16) // (UDP) Frame Error -#define AT91C_UDP_FRM_OK (0x1 << 17) // (UDP) Frame OK -// -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register -------- -#define AT91C_UDP_FADDEN (0x1 << 0) // (UDP) Function Address Enable -#define AT91C_UDP_CONFG (0x1 << 1) // (UDP) Configured -#define AT91C_UDP_ESR (0x1 << 2) // (UDP) Enable Send Resume -#define AT91C_UDP_RSMINPR (0x1 << 3) // (UDP) A Resume Has Been Sent to the Host -#define AT91C_UDP_RMWUPE (0x1 << 4) // (UDP) Remote Wake Up Enable -// -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register -------- -#define AT91C_UDP_FADD (0xFF << 0) // (UDP) Function Address Value -#define AT91C_UDP_FEN (0x1 << 8) // (UDP) Function Enable -// -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register -------- -#define AT91C_UDP_EPINT0 (0x1 << 0) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT1 (0x1 << 1) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT2 (0x1 << 2) // (UDP) Endpoint 2 Interrupt -#define AT91C_UDP_EPINT3 (0x1 << 3) // (UDP) Endpoint 3 Interrupt -#define AT91C_UDP_RXSUSP (0x1 << 8) // (UDP) USB Suspend Interrupt -#define AT91C_UDP_RXRSM (0x1 << 9) // (UDP) USB Resume Interrupt -#define AT91C_UDP_EXTRSM (0x1 << 10) // (UDP) USB External Resume Interrupt -#define AT91C_UDP_SOFINT (0x1 << 11) // (UDP) USB Start Of frame Interrupt -#define AT91C_UDP_WAKEUP (0x1 << 13) // (UDP) USB Resume Interrupt -// -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register -------- -// -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register -------- -// -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register -------- -#define AT91C_UDP_ENDBUSRES (0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt -// -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register -------- -// -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register -------- -#define AT91C_UDP_EP0 (0x1 << 0) // (UDP) Reset Endpoint 0 -#define AT91C_UDP_EP1 (0x1 << 1) // (UDP) Reset Endpoint 1 -#define AT91C_UDP_EP2 (0x1 << 2) // (UDP) Reset Endpoint 2 -#define AT91C_UDP_EP3 (0x1 << 3) // (UDP) Reset Endpoint 3 -// -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register -------- -#define AT91C_UDP_TXCOMP (0x1 << 0) // (UDP) Generates an IN packet with data previously written in the DPR -#define AT91C_UDP_RX_DATA_BK0 (0x1 << 1) // (UDP) Receive Data Bank 0 -#define AT91C_UDP_RXSETUP (0x1 << 2) // (UDP) Sends STALL to the Host (Control endpoints) -#define AT91C_UDP_ISOERROR (0x1 << 3) // (UDP) Isochronous error (Isochronous endpoints) -#define AT91C_UDP_STALLSENT (0x1 << 3) // (UDP) Stall sent (Control, bulk, interrupt endpoints) -#define AT91C_UDP_TXPKTRDY (0x1 << 4) // (UDP) Transmit Packet Ready -#define AT91C_UDP_FORCESTALL (0x1 << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints). -#define AT91C_UDP_RX_DATA_BK1 (0x1 << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes). -#define AT91C_UDP_DIR (0x1 << 7) // (UDP) Transfer Direction -#define AT91C_UDP_EPTYPE (0x7 << 8) // (UDP) Endpoint type -#define AT91C_UDP_EPTYPE_CTRL (0x0 << 8) // (UDP) Control -#define AT91C_UDP_EPTYPE_ISO_OUT (0x1 << 8) // (UDP) Isochronous OUT -#define AT91C_UDP_EPTYPE_BULK_OUT (0x2 << 8) // (UDP) Bulk OUT -#define AT91C_UDP_EPTYPE_INT_OUT (0x3 << 8) // (UDP) Interrupt OUT -#define AT91C_UDP_EPTYPE_ISO_IN (0x5 << 8) // (UDP) Isochronous IN -#define AT91C_UDP_EPTYPE_BULK_IN (0x6 << 8) // (UDP) Bulk IN -#define AT91C_UDP_EPTYPE_INT_IN (0x7 << 8) // (UDP) Interrupt IN -#define AT91C_UDP_DTGLE (0x1 << 11) // (UDP) Data Toggle -#define AT91C_UDP_EPEDS (0x1 << 15) // (UDP) Endpoint Enable Disable -#define AT91C_UDP_RXBYTECNT (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO -// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register -------- -#define AT91C_UDP_TXVDIS (0x1 << 8) // (UDP) - -// ***************************************************************************** -// REGISTER ADDRESS DEFINITION FOR AT91SAM7S128 -// ***************************************************************************** -// ========== Register definition for SYS peripheral ========== -// ========== Register definition for AIC peripheral ========== -#define AT91C_AIC_IVR (AT91_CAST(AT91_REG *) 0xFFFFF100) // (AIC) IRQ Vector Register -#define AT91C_AIC_SMR (AT91_CAST(AT91_REG *) 0xFFFFF000) // (AIC) Source Mode Register -#define AT91C_AIC_FVR (AT91_CAST(AT91_REG *) 0xFFFFF104) // (AIC) FIQ Vector Register -#define AT91C_AIC_DCR (AT91_CAST(AT91_REG *) 0xFFFFF138) // (AIC) Debug Control Register (Protect) -#define AT91C_AIC_EOICR (AT91_CAST(AT91_REG *) 0xFFFFF130) // (AIC) End of Interrupt Command Register -#define AT91C_AIC_SVR (AT91_CAST(AT91_REG *) 0xFFFFF080) // (AIC) Source Vector Register -#define AT91C_AIC_FFSR (AT91_CAST(AT91_REG *) 0xFFFFF148) // (AIC) Fast Forcing Status Register -#define AT91C_AIC_ICCR (AT91_CAST(AT91_REG *) 0xFFFFF128) // (AIC) Interrupt Clear Command Register -#define AT91C_AIC_ISR (AT91_CAST(AT91_REG *) 0xFFFFF108) // (AIC) Interrupt Status Register -#define AT91C_AIC_IMR (AT91_CAST(AT91_REG *) 0xFFFFF110) // (AIC) Interrupt Mask Register -#define AT91C_AIC_IPR (AT91_CAST(AT91_REG *) 0xFFFFF10C) // (AIC) Interrupt Pending Register -#define AT91C_AIC_FFER (AT91_CAST(AT91_REG *) 0xFFFFF140) // (AIC) Fast Forcing Enable Register -#define AT91C_AIC_IECR (AT91_CAST(AT91_REG *) 0xFFFFF120) // (AIC) Interrupt Enable Command Register -#define AT91C_AIC_ISCR (AT91_CAST(AT91_REG *) 0xFFFFF12C) // (AIC) Interrupt Set Command Register -#define AT91C_AIC_FFDR (AT91_CAST(AT91_REG *) 0xFFFFF144) // (AIC) Fast Forcing Disable Register -#define AT91C_AIC_CISR (AT91_CAST(AT91_REG *) 0xFFFFF114) // (AIC) Core Interrupt Status Register -#define AT91C_AIC_IDCR (AT91_CAST(AT91_REG *) 0xFFFFF124) // (AIC) Interrupt Disable Command Register -#define AT91C_AIC_SPU (AT91_CAST(AT91_REG *) 0xFFFFF134) // (AIC) Spurious Vector Register -// ========== Register definition for PDC_DBGU peripheral ========== -#define AT91C_DBGU_TCR (AT91_CAST(AT91_REG *) 0xFFFFF30C) // (PDC_DBGU) Transmit Counter Register -#define AT91C_DBGU_RNPR (AT91_CAST(AT91_REG *) 0xFFFFF310) // (PDC_DBGU) Receive Next Pointer Register -#define AT91C_DBGU_TNPR (AT91_CAST(AT91_REG *) 0xFFFFF318) // (PDC_DBGU) Transmit Next Pointer Register -#define AT91C_DBGU_TPR (AT91_CAST(AT91_REG *) 0xFFFFF308) // (PDC_DBGU) Transmit Pointer Register -#define AT91C_DBGU_RPR (AT91_CAST(AT91_REG *) 0xFFFFF300) // (PDC_DBGU) Receive Pointer Register -#define AT91C_DBGU_RCR (AT91_CAST(AT91_REG *) 0xFFFFF304) // (PDC_DBGU) Receive Counter Register -#define AT91C_DBGU_RNCR (AT91_CAST(AT91_REG *) 0xFFFFF314) // (PDC_DBGU) Receive Next Counter Register -#define AT91C_DBGU_PTCR (AT91_CAST(AT91_REG *) 0xFFFFF320) // (PDC_DBGU) PDC Transfer Control Register -#define AT91C_DBGU_PTSR (AT91_CAST(AT91_REG *) 0xFFFFF324) // (PDC_DBGU) PDC Transfer Status Register -#define AT91C_DBGU_TNCR (AT91_CAST(AT91_REG *) 0xFFFFF31C) // (PDC_DBGU) Transmit Next Counter Register -// ========== Register definition for DBGU peripheral ========== -#define AT91C_DBGU_EXID (AT91_CAST(AT91_REG *) 0xFFFFF244) // (DBGU) Chip ID Extension Register -#define AT91C_DBGU_BRGR (AT91_CAST(AT91_REG *) 0xFFFFF220) // (DBGU) Baud Rate Generator Register -#define AT91C_DBGU_IDR (AT91_CAST(AT91_REG *) 0xFFFFF20C) // (DBGU) Interrupt Disable Register -#define AT91C_DBGU_CSR (AT91_CAST(AT91_REG *) 0xFFFFF214) // (DBGU) Channel Status Register -#define AT91C_DBGU_CIDR (AT91_CAST(AT91_REG *) 0xFFFFF240) // (DBGU) Chip ID Register -#define AT91C_DBGU_MR (AT91_CAST(AT91_REG *) 0xFFFFF204) // (DBGU) Mode Register -#define AT91C_DBGU_IMR (AT91_CAST(AT91_REG *) 0xFFFFF210) // (DBGU) Interrupt Mask Register -#define AT91C_DBGU_CR (AT91_CAST(AT91_REG *) 0xFFFFF200) // (DBGU) Control Register -#define AT91C_DBGU_FNTR (AT91_CAST(AT91_REG *) 0xFFFFF248) // (DBGU) Force NTRST Register -#define AT91C_DBGU_THR (AT91_CAST(AT91_REG *) 0xFFFFF21C) // (DBGU) Transmitter Holding Register -#define AT91C_DBGU_RHR (AT91_CAST(AT91_REG *) 0xFFFFF218) // (DBGU) Receiver Holding Register -#define AT91C_DBGU_IER (AT91_CAST(AT91_REG *) 0xFFFFF208) // (DBGU) Interrupt Enable Register -// ========== Register definition for PIOA peripheral ========== -#define AT91C_PIOA_ODR (AT91_CAST(AT91_REG *) 0xFFFFF414) // (PIOA) Output Disable Registerr -#define AT91C_PIOA_SODR (AT91_CAST(AT91_REG *) 0xFFFFF430) // (PIOA) Set Output Data Register -#define AT91C_PIOA_ISR (AT91_CAST(AT91_REG *) 0xFFFFF44C) // (PIOA) Interrupt Status Register -#define AT91C_PIOA_ABSR (AT91_CAST(AT91_REG *) 0xFFFFF478) // (PIOA) AB Select Status Register -#define AT91C_PIOA_IER (AT91_CAST(AT91_REG *) 0xFFFFF440) // (PIOA) Interrupt Enable Register -#define AT91C_PIOA_PPUDR (AT91_CAST(AT91_REG *) 0xFFFFF460) // (PIOA) Pull-up Disable Register -#define AT91C_PIOA_IMR (AT91_CAST(AT91_REG *) 0xFFFFF448) // (PIOA) Interrupt Mask Register -#define AT91C_PIOA_PER (AT91_CAST(AT91_REG *) 0xFFFFF400) // (PIOA) PIO Enable Register -#define AT91C_PIOA_IFDR (AT91_CAST(AT91_REG *) 0xFFFFF424) // (PIOA) Input Filter Disable Register -#define AT91C_PIOA_OWDR (AT91_CAST(AT91_REG *) 0xFFFFF4A4) // (PIOA) Output Write Disable Register -#define AT91C_PIOA_MDSR (AT91_CAST(AT91_REG *) 0xFFFFF458) // (PIOA) Multi-driver Status Register -#define AT91C_PIOA_IDR (AT91_CAST(AT91_REG *) 0xFFFFF444) // (PIOA) Interrupt Disable Register -#define AT91C_PIOA_ODSR (AT91_CAST(AT91_REG *) 0xFFFFF438) // (PIOA) Output Data Status Register -#define AT91C_PIOA_PPUSR (AT91_CAST(AT91_REG *) 0xFFFFF468) // (PIOA) Pull-up Status Register -#define AT91C_PIOA_OWSR (AT91_CAST(AT91_REG *) 0xFFFFF4A8) // (PIOA) Output Write Status Register -#define AT91C_PIOA_BSR (AT91_CAST(AT91_REG *) 0xFFFFF474) // (PIOA) Select B Register -#define AT91C_PIOA_OWER (AT91_CAST(AT91_REG *) 0xFFFFF4A0) // (PIOA) Output Write Enable Register -#define AT91C_PIOA_IFER (AT91_CAST(AT91_REG *) 0xFFFFF420) // (PIOA) Input Filter Enable Register -#define AT91C_PIOA_PDSR (AT91_CAST(AT91_REG *) 0xFFFFF43C) // (PIOA) Pin Data Status Register -#define AT91C_PIOA_PPUER (AT91_CAST(AT91_REG *) 0xFFFFF464) // (PIOA) Pull-up Enable Register -#define AT91C_PIOA_OSR (AT91_CAST(AT91_REG *) 0xFFFFF418) // (PIOA) Output Status Register -#define AT91C_PIOA_ASR (AT91_CAST(AT91_REG *) 0xFFFFF470) // (PIOA) Select A Register -#define AT91C_PIOA_MDDR (AT91_CAST(AT91_REG *) 0xFFFFF454) // (PIOA) Multi-driver Disable Register -#define AT91C_PIOA_CODR (AT91_CAST(AT91_REG *) 0xFFFFF434) // (PIOA) Clear Output Data Register -#define AT91C_PIOA_MDER (AT91_CAST(AT91_REG *) 0xFFFFF450) // (PIOA) Multi-driver Enable Register -#define AT91C_PIOA_PDR (AT91_CAST(AT91_REG *) 0xFFFFF404) // (PIOA) PIO Disable Register -#define AT91C_PIOA_IFSR (AT91_CAST(AT91_REG *) 0xFFFFF428) // (PIOA) Input Filter Status Register -#define AT91C_PIOA_OER (AT91_CAST(AT91_REG *) 0xFFFFF410) // (PIOA) Output Enable Register -#define AT91C_PIOA_PSR (AT91_CAST(AT91_REG *) 0xFFFFF408) // (PIOA) PIO Status Register -// ========== Register definition for CKGR peripheral ========== -#define AT91C_CKGR_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (CKGR) Main Oscillator Register -#define AT91C_CKGR_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (CKGR) PLL Register -#define AT91C_CKGR_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (CKGR) Main Clock Frequency Register -// ========== Register definition for PMC peripheral ========== -#define AT91C_PMC_IDR (AT91_CAST(AT91_REG *) 0xFFFFFC64) // (PMC) Interrupt Disable Register -#define AT91C_PMC_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (PMC) Main Oscillator Register -#define AT91C_PMC_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (PMC) PLL Register -#define AT91C_PMC_PCER (AT91_CAST(AT91_REG *) 0xFFFFFC10) // (PMC) Peripheral Clock Enable Register -#define AT91C_PMC_PCKR (AT91_CAST(AT91_REG *) 0xFFFFFC40) // (PMC) Programmable Clock Register -#define AT91C_PMC_MCKR (AT91_CAST(AT91_REG *) 0xFFFFFC30) // (PMC) Master Clock Register -#define AT91C_PMC_SCDR (AT91_CAST(AT91_REG *) 0xFFFFFC04) // (PMC) System Clock Disable Register -#define AT91C_PMC_PCDR (AT91_CAST(AT91_REG *) 0xFFFFFC14) // (PMC) Peripheral Clock Disable Register -#define AT91C_PMC_SCSR (AT91_CAST(AT91_REG *) 0xFFFFFC08) // (PMC) System Clock Status Register -#define AT91C_PMC_PCSR (AT91_CAST(AT91_REG *) 0xFFFFFC18) // (PMC) Peripheral Clock Status Register -#define AT91C_PMC_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (PMC) Main Clock Frequency Register -#define AT91C_PMC_SCER (AT91_CAST(AT91_REG *) 0xFFFFFC00) // (PMC) System Clock Enable Register -#define AT91C_PMC_IMR (AT91_CAST(AT91_REG *) 0xFFFFFC6C) // (PMC) Interrupt Mask Register -#define AT91C_PMC_IER (AT91_CAST(AT91_REG *) 0xFFFFFC60) // (PMC) Interrupt Enable Register -#define AT91C_PMC_SR (AT91_CAST(AT91_REG *) 0xFFFFFC68) // (PMC) Status Register -// ========== Register definition for RSTC peripheral ========== -#define AT91C_RSTC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFD00) // (RSTC) Reset Control Register -#define AT91C_RSTC_RMR (AT91_CAST(AT91_REG *) 0xFFFFFD08) // (RSTC) Reset Mode Register -#define AT91C_RSTC_RSR (AT91_CAST(AT91_REG *) 0xFFFFFD04) // (RSTC) Reset Status Register -// ========== Register definition for RTTC peripheral ========== -#define AT91C_RTTC_RTSR (AT91_CAST(AT91_REG *) 0xFFFFFD2C) // (RTTC) Real-time Status Register -#define AT91C_RTTC_RTMR (AT91_CAST(AT91_REG *) 0xFFFFFD20) // (RTTC) Real-time Mode Register -#define AT91C_RTTC_RTVR (AT91_CAST(AT91_REG *) 0xFFFFFD28) // (RTTC) Real-time Value Register -#define AT91C_RTTC_RTAR (AT91_CAST(AT91_REG *) 0xFFFFFD24) // (RTTC) Real-time Alarm Register -// ========== Register definition for PITC peripheral ========== -#define AT91C_PITC_PIVR (AT91_CAST(AT91_REG *) 0xFFFFFD38) // (PITC) Period Interval Value Register -#define AT91C_PITC_PISR (AT91_CAST(AT91_REG *) 0xFFFFFD34) // (PITC) Period Interval Status Register -#define AT91C_PITC_PIIR (AT91_CAST(AT91_REG *) 0xFFFFFD3C) // (PITC) Period Interval Image Register -#define AT91C_PITC_PIMR (AT91_CAST(AT91_REG *) 0xFFFFFD30) // (PITC) Period Interval Mode Register -// ========== Register definition for WDTC peripheral ========== -#define AT91C_WDTC_WDCR (AT91_CAST(AT91_REG *) 0xFFFFFD40) // (WDTC) Watchdog Control Register -#define AT91C_WDTC_WDSR (AT91_CAST(AT91_REG *) 0xFFFFFD48) // (WDTC) Watchdog Status Register -#define AT91C_WDTC_WDMR (AT91_CAST(AT91_REG *) 0xFFFFFD44) // (WDTC) Watchdog Mode Register -// ========== Register definition for VREG peripheral ========== -#define AT91C_VREG_MR (AT91_CAST(AT91_REG *) 0xFFFFFD60) // (VREG) Voltage Regulator Mode Register -// ========== Register definition for MC peripheral ========== -#define AT91C_MC_ASR (AT91_CAST(AT91_REG *) 0xFFFFFF04) // (MC) MC Abort Status Register -#define AT91C_MC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFF00) // (MC) MC Remap Control Register -#define AT91C_MC_FCR (AT91_CAST(AT91_REG *) 0xFFFFFF64) // (MC) MC Flash Command Register -#define AT91C_MC_AASR (AT91_CAST(AT91_REG *) 0xFFFFFF08) // (MC) MC Abort Address Status Register -#define AT91C_MC_FSR (AT91_CAST(AT91_REG *) 0xFFFFFF68) // (MC) MC Flash Status Register -#define AT91C_MC_FMR (AT91_CAST(AT91_REG *) 0xFFFFFF60) // (MC) MC Flash Mode Register -// ========== Register definition for PDC_SPI peripheral ========== -#define AT91C_SPI_PTCR (AT91_CAST(AT91_REG *) 0xFFFE0120) // (PDC_SPI) PDC Transfer Control Register -#define AT91C_SPI_TPR (AT91_CAST(AT91_REG *) 0xFFFE0108) // (PDC_SPI) Transmit Pointer Register -#define AT91C_SPI_TCR (AT91_CAST(AT91_REG *) 0xFFFE010C) // (PDC_SPI) Transmit Counter Register -#define AT91C_SPI_RCR (AT91_CAST(AT91_REG *) 0xFFFE0104) // (PDC_SPI) Receive Counter Register -#define AT91C_SPI_PTSR (AT91_CAST(AT91_REG *) 0xFFFE0124) // (PDC_SPI) PDC Transfer Status Register -#define AT91C_SPI_RNPR (AT91_CAST(AT91_REG *) 0xFFFE0110) // (PDC_SPI) Receive Next Pointer Register -#define AT91C_SPI_RPR (AT91_CAST(AT91_REG *) 0xFFFE0100) // (PDC_SPI) Receive Pointer Register -#define AT91C_SPI_TNCR (AT91_CAST(AT91_REG *) 0xFFFE011C) // (PDC_SPI) Transmit Next Counter Register -#define AT91C_SPI_RNCR (AT91_CAST(AT91_REG *) 0xFFFE0114) // (PDC_SPI) Receive Next Counter Register -#define AT91C_SPI_TNPR (AT91_CAST(AT91_REG *) 0xFFFE0118) // (PDC_SPI) Transmit Next Pointer Register -// ========== Register definition for SPI peripheral ========== -#define AT91C_SPI_IER (AT91_CAST(AT91_REG *) 0xFFFE0014) // (SPI) Interrupt Enable Register -#define AT91C_SPI_SR (AT91_CAST(AT91_REG *) 0xFFFE0010) // (SPI) Status Register -#define AT91C_SPI_IDR (AT91_CAST(AT91_REG *) 0xFFFE0018) // (SPI) Interrupt Disable Register -#define AT91C_SPI_CR (AT91_CAST(AT91_REG *) 0xFFFE0000) // (SPI) Control Register -#define AT91C_SPI_MR (AT91_CAST(AT91_REG *) 0xFFFE0004) // (SPI) Mode Register -#define AT91C_SPI_IMR (AT91_CAST(AT91_REG *) 0xFFFE001C) // (SPI) Interrupt Mask Register -#define AT91C_SPI_TDR (AT91_CAST(AT91_REG *) 0xFFFE000C) // (SPI) Transmit Data Register -#define AT91C_SPI_RDR (AT91_CAST(AT91_REG *) 0xFFFE0008) // (SPI) Receive Data Register -#define AT91C_SPI_CSR (AT91_CAST(AT91_REG *) 0xFFFE0030) // (SPI) Chip Select Register -// ========== Register definition for PDC_ADC peripheral ========== -#define AT91C_ADC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD8124) // (PDC_ADC) PDC Transfer Status Register -#define AT91C_ADC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD8120) // (PDC_ADC) PDC Transfer Control Register -#define AT91C_ADC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD8118) // (PDC_ADC) Transmit Next Pointer Register -#define AT91C_ADC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD811C) // (PDC_ADC) Transmit Next Counter Register -#define AT91C_ADC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD8110) // (PDC_ADC) Receive Next Pointer Register -#define AT91C_ADC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD8114) // (PDC_ADC) Receive Next Counter Register -#define AT91C_ADC_RPR (AT91_CAST(AT91_REG *) 0xFFFD8100) // (PDC_ADC) Receive Pointer Register -#define AT91C_ADC_TCR (AT91_CAST(AT91_REG *) 0xFFFD810C) // (PDC_ADC) Transmit Counter Register -#define AT91C_ADC_TPR (AT91_CAST(AT91_REG *) 0xFFFD8108) // (PDC_ADC) Transmit Pointer Register -#define AT91C_ADC_RCR (AT91_CAST(AT91_REG *) 0xFFFD8104) // (PDC_ADC) Receive Counter Register -// ========== Register definition for ADC peripheral ========== -#define AT91C_ADC_CDR2 (AT91_CAST(AT91_REG *) 0xFFFD8038) // (ADC) ADC Channel Data Register 2 -#define AT91C_ADC_CDR3 (AT91_CAST(AT91_REG *) 0xFFFD803C) // (ADC) ADC Channel Data Register 3 -#define AT91C_ADC_CDR0 (AT91_CAST(AT91_REG *) 0xFFFD8030) // (ADC) ADC Channel Data Register 0 -#define AT91C_ADC_CDR5 (AT91_CAST(AT91_REG *) 0xFFFD8044) // (ADC) ADC Channel Data Register 5 -#define AT91C_ADC_CHDR (AT91_CAST(AT91_REG *) 0xFFFD8014) // (ADC) ADC Channel Disable Register -#define AT91C_ADC_SR (AT91_CAST(AT91_REG *) 0xFFFD801C) // (ADC) ADC Status Register -#define AT91C_ADC_CDR4 (AT91_CAST(AT91_REG *) 0xFFFD8040) // (ADC) ADC Channel Data Register 4 -#define AT91C_ADC_CDR1 (AT91_CAST(AT91_REG *) 0xFFFD8034) // (ADC) ADC Channel Data Register 1 -#define AT91C_ADC_LCDR (AT91_CAST(AT91_REG *) 0xFFFD8020) // (ADC) ADC Last Converted Data Register -#define AT91C_ADC_IDR (AT91_CAST(AT91_REG *) 0xFFFD8028) // (ADC) ADC Interrupt Disable Register -#define AT91C_ADC_CR (AT91_CAST(AT91_REG *) 0xFFFD8000) // (ADC) ADC Control Register -#define AT91C_ADC_CDR7 (AT91_CAST(AT91_REG *) 0xFFFD804C) // (ADC) ADC Channel Data Register 7 -#define AT91C_ADC_CDR6 (AT91_CAST(AT91_REG *) 0xFFFD8048) // (ADC) ADC Channel Data Register 6 -#define AT91C_ADC_IER (AT91_CAST(AT91_REG *) 0xFFFD8024) // (ADC) ADC Interrupt Enable Register -#define AT91C_ADC_CHER (AT91_CAST(AT91_REG *) 0xFFFD8010) // (ADC) ADC Channel Enable Register -#define AT91C_ADC_CHSR (AT91_CAST(AT91_REG *) 0xFFFD8018) // (ADC) ADC Channel Status Register -#define AT91C_ADC_MR (AT91_CAST(AT91_REG *) 0xFFFD8004) // (ADC) ADC Mode Register -#define AT91C_ADC_IMR (AT91_CAST(AT91_REG *) 0xFFFD802C) // (ADC) ADC Interrupt Mask Register -// ========== Register definition for PDC_SSC peripheral ========== -#define AT91C_SSC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD411C) // (PDC_SSC) Transmit Next Counter Register -#define AT91C_SSC_RPR (AT91_CAST(AT91_REG *) 0xFFFD4100) // (PDC_SSC) Receive Pointer Register -#define AT91C_SSC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD4114) // (PDC_SSC) Receive Next Counter Register -#define AT91C_SSC_TPR (AT91_CAST(AT91_REG *) 0xFFFD4108) // (PDC_SSC) Transmit Pointer Register -#define AT91C_SSC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD4120) // (PDC_SSC) PDC Transfer Control Register -#define AT91C_SSC_TCR (AT91_CAST(AT91_REG *) 0xFFFD410C) // (PDC_SSC) Transmit Counter Register -#define AT91C_SSC_RCR (AT91_CAST(AT91_REG *) 0xFFFD4104) // (PDC_SSC) Receive Counter Register -#define AT91C_SSC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD4110) // (PDC_SSC) Receive Next Pointer Register -#define AT91C_SSC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD4118) // (PDC_SSC) Transmit Next Pointer Register -#define AT91C_SSC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD4124) // (PDC_SSC) PDC Transfer Status Register -// ========== Register definition for SSC peripheral ========== -#define AT91C_SSC_RHR (AT91_CAST(AT91_REG *) 0xFFFD4020) // (SSC) Receive Holding Register -#define AT91C_SSC_RSHR (AT91_CAST(AT91_REG *) 0xFFFD4030) // (SSC) Receive Sync Holding Register -#define AT91C_SSC_TFMR (AT91_CAST(AT91_REG *) 0xFFFD401C) // (SSC) Transmit Frame Mode Register -#define AT91C_SSC_IDR (AT91_CAST(AT91_REG *) 0xFFFD4048) // (SSC) Interrupt Disable Register -#define AT91C_SSC_THR (AT91_CAST(AT91_REG *) 0xFFFD4024) // (SSC) Transmit Holding Register -#define AT91C_SSC_RCMR (AT91_CAST(AT91_REG *) 0xFFFD4010) // (SSC) Receive Clock ModeRegister -#define AT91C_SSC_IER (AT91_CAST(AT91_REG *) 0xFFFD4044) // (SSC) Interrupt Enable Register -#define AT91C_SSC_TSHR (AT91_CAST(AT91_REG *) 0xFFFD4034) // (SSC) Transmit Sync Holding Register -#define AT91C_SSC_SR (AT91_CAST(AT91_REG *) 0xFFFD4040) // (SSC) Status Register -#define AT91C_SSC_CMR (AT91_CAST(AT91_REG *) 0xFFFD4004) // (SSC) Clock Mode Register -#define AT91C_SSC_TCMR (AT91_CAST(AT91_REG *) 0xFFFD4018) // (SSC) Transmit Clock Mode Register -#define AT91C_SSC_CR (AT91_CAST(AT91_REG *) 0xFFFD4000) // (SSC) Control Register -#define AT91C_SSC_IMR (AT91_CAST(AT91_REG *) 0xFFFD404C) // (SSC) Interrupt Mask Register -#define AT91C_SSC_RFMR (AT91_CAST(AT91_REG *) 0xFFFD4014) // (SSC) Receive Frame Mode Register -// ========== Register definition for PDC_US1 peripheral ========== -#define AT91C_US1_RNCR (AT91_CAST(AT91_REG *) 0xFFFC4114) // (PDC_US1) Receive Next Counter Register -#define AT91C_US1_PTCR (AT91_CAST(AT91_REG *) 0xFFFC4120) // (PDC_US1) PDC Transfer Control Register -#define AT91C_US1_TCR (AT91_CAST(AT91_REG *) 0xFFFC410C) // (PDC_US1) Transmit Counter Register -#define AT91C_US1_PTSR (AT91_CAST(AT91_REG *) 0xFFFC4124) // (PDC_US1) PDC Transfer Status Register -#define AT91C_US1_TNPR (AT91_CAST(AT91_REG *) 0xFFFC4118) // (PDC_US1) Transmit Next Pointer Register -#define AT91C_US1_RCR (AT91_CAST(AT91_REG *) 0xFFFC4104) // (PDC_US1) Receive Counter Register -#define AT91C_US1_RNPR (AT91_CAST(AT91_REG *) 0xFFFC4110) // (PDC_US1) Receive Next Pointer Register -#define AT91C_US1_RPR (AT91_CAST(AT91_REG *) 0xFFFC4100) // (PDC_US1) Receive Pointer Register -#define AT91C_US1_TNCR (AT91_CAST(AT91_REG *) 0xFFFC411C) // (PDC_US1) Transmit Next Counter Register -#define AT91C_US1_TPR (AT91_CAST(AT91_REG *) 0xFFFC4108) // (PDC_US1) Transmit Pointer Register -// ========== Register definition for US1 peripheral ========== -#define AT91C_US1_IF (AT91_CAST(AT91_REG *) 0xFFFC404C) // (US1) IRDA_FILTER Register -#define AT91C_US1_NER (AT91_CAST(AT91_REG *) 0xFFFC4044) // (US1) Nb Errors Register -#define AT91C_US1_RTOR (AT91_CAST(AT91_REG *) 0xFFFC4024) // (US1) Receiver Time-out Register -#define AT91C_US1_CSR (AT91_CAST(AT91_REG *) 0xFFFC4014) // (US1) Channel Status Register -#define AT91C_US1_IDR (AT91_CAST(AT91_REG *) 0xFFFC400C) // (US1) Interrupt Disable Register -#define AT91C_US1_IER (AT91_CAST(AT91_REG *) 0xFFFC4008) // (US1) Interrupt Enable Register -#define AT91C_US1_THR (AT91_CAST(AT91_REG *) 0xFFFC401C) // (US1) Transmitter Holding Register -#define AT91C_US1_TTGR (AT91_CAST(AT91_REG *) 0xFFFC4028) // (US1) Transmitter Time-guard Register -#define AT91C_US1_RHR (AT91_CAST(AT91_REG *) 0xFFFC4018) // (US1) Receiver Holding Register -#define AT91C_US1_BRGR (AT91_CAST(AT91_REG *) 0xFFFC4020) // (US1) Baud Rate Generator Register -#define AT91C_US1_IMR (AT91_CAST(AT91_REG *) 0xFFFC4010) // (US1) Interrupt Mask Register -#define AT91C_US1_FIDI (AT91_CAST(AT91_REG *) 0xFFFC4040) // (US1) FI_DI_Ratio Register -#define AT91C_US1_CR (AT91_CAST(AT91_REG *) 0xFFFC4000) // (US1) Control Register -#define AT91C_US1_MR (AT91_CAST(AT91_REG *) 0xFFFC4004) // (US1) Mode Register -// ========== Register definition for PDC_US0 peripheral ========== -#define AT91C_US0_TNPR (AT91_CAST(AT91_REG *) 0xFFFC0118) // (PDC_US0) Transmit Next Pointer Register -#define AT91C_US0_RNPR (AT91_CAST(AT91_REG *) 0xFFFC0110) // (PDC_US0) Receive Next Pointer Register -#define AT91C_US0_TCR (AT91_CAST(AT91_REG *) 0xFFFC010C) // (PDC_US0) Transmit Counter Register -#define AT91C_US0_PTCR (AT91_CAST(AT91_REG *) 0xFFFC0120) // (PDC_US0) PDC Transfer Control Register -#define AT91C_US0_PTSR (AT91_CAST(AT91_REG *) 0xFFFC0124) // (PDC_US0) PDC Transfer Status Register -#define AT91C_US0_TNCR (AT91_CAST(AT91_REG *) 0xFFFC011C) // (PDC_US0) Transmit Next Counter Register -#define AT91C_US0_TPR (AT91_CAST(AT91_REG *) 0xFFFC0108) // (PDC_US0) Transmit Pointer Register -#define AT91C_US0_RCR (AT91_CAST(AT91_REG *) 0xFFFC0104) // (PDC_US0) Receive Counter Register -#define AT91C_US0_RPR (AT91_CAST(AT91_REG *) 0xFFFC0100) // (PDC_US0) Receive Pointer Register -#define AT91C_US0_RNCR (AT91_CAST(AT91_REG *) 0xFFFC0114) // (PDC_US0) Receive Next Counter Register -// ========== Register definition for US0 peripheral ========== -#define AT91C_US0_BRGR (AT91_CAST(AT91_REG *) 0xFFFC0020) // (US0) Baud Rate Generator Register -#define AT91C_US0_NER (AT91_CAST(AT91_REG *) 0xFFFC0044) // (US0) Nb Errors Register -#define AT91C_US0_CR (AT91_CAST(AT91_REG *) 0xFFFC0000) // (US0) Control Register -#define AT91C_US0_IMR (AT91_CAST(AT91_REG *) 0xFFFC0010) // (US0) Interrupt Mask Register -#define AT91C_US0_FIDI (AT91_CAST(AT91_REG *) 0xFFFC0040) // (US0) FI_DI_Ratio Register -#define AT91C_US0_TTGR (AT91_CAST(AT91_REG *) 0xFFFC0028) // (US0) Transmitter Time-guard Register -#define AT91C_US0_MR (AT91_CAST(AT91_REG *) 0xFFFC0004) // (US0) Mode Register -#define AT91C_US0_RTOR (AT91_CAST(AT91_REG *) 0xFFFC0024) // (US0) Receiver Time-out Register -#define AT91C_US0_CSR (AT91_CAST(AT91_REG *) 0xFFFC0014) // (US0) Channel Status Register -#define AT91C_US0_RHR (AT91_CAST(AT91_REG *) 0xFFFC0018) // (US0) Receiver Holding Register -#define AT91C_US0_IDR (AT91_CAST(AT91_REG *) 0xFFFC000C) // (US0) Interrupt Disable Register -#define AT91C_US0_THR (AT91_CAST(AT91_REG *) 0xFFFC001C) // (US0) Transmitter Holding Register -#define AT91C_US0_IF (AT91_CAST(AT91_REG *) 0xFFFC004C) // (US0) IRDA_FILTER Register -#define AT91C_US0_IER (AT91_CAST(AT91_REG *) 0xFFFC0008) // (US0) Interrupt Enable Register -// ========== Register definition for TWI peripheral ========== -#define AT91C_TWI_IER (AT91_CAST(AT91_REG *) 0xFFFB8024) // (TWI) Interrupt Enable Register -#define AT91C_TWI_CR (AT91_CAST(AT91_REG *) 0xFFFB8000) // (TWI) Control Register -#define AT91C_TWI_SR (AT91_CAST(AT91_REG *) 0xFFFB8020) // (TWI) Status Register -#define AT91C_TWI_IMR (AT91_CAST(AT91_REG *) 0xFFFB802C) // (TWI) Interrupt Mask Register -#define AT91C_TWI_THR (AT91_CAST(AT91_REG *) 0xFFFB8034) // (TWI) Transmit Holding Register -#define AT91C_TWI_IDR (AT91_CAST(AT91_REG *) 0xFFFB8028) // (TWI) Interrupt Disable Register -#define AT91C_TWI_IADR (AT91_CAST(AT91_REG *) 0xFFFB800C) // (TWI) Internal Address Register -#define AT91C_TWI_MMR (AT91_CAST(AT91_REG *) 0xFFFB8004) // (TWI) Master Mode Register -#define AT91C_TWI_CWGR (AT91_CAST(AT91_REG *) 0xFFFB8010) // (TWI) Clock Waveform Generator Register -#define AT91C_TWI_RHR (AT91_CAST(AT91_REG *) 0xFFFB8030) // (TWI) Receive Holding Register -// ========== Register definition for TC0 peripheral ========== -#define AT91C_TC0_SR (AT91_CAST(AT91_REG *) 0xFFFA0020) // (TC0) Status Register -#define AT91C_TC0_RC (AT91_CAST(AT91_REG *) 0xFFFA001C) // (TC0) Register C -#define AT91C_TC0_RB (AT91_CAST(AT91_REG *) 0xFFFA0018) // (TC0) Register B -#define AT91C_TC0_CCR (AT91_CAST(AT91_REG *) 0xFFFA0000) // (TC0) Channel Control Register -#define AT91C_TC0_CMR (AT91_CAST(AT91_REG *) 0xFFFA0004) // (TC0) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC0_IER (AT91_CAST(AT91_REG *) 0xFFFA0024) // (TC0) Interrupt Enable Register -#define AT91C_TC0_RA (AT91_CAST(AT91_REG *) 0xFFFA0014) // (TC0) Register A -#define AT91C_TC0_IDR (AT91_CAST(AT91_REG *) 0xFFFA0028) // (TC0) Interrupt Disable Register -#define AT91C_TC0_CV (AT91_CAST(AT91_REG *) 0xFFFA0010) // (TC0) Counter Value -#define AT91C_TC0_IMR (AT91_CAST(AT91_REG *) 0xFFFA002C) // (TC0) Interrupt Mask Register -// ========== Register definition for TC1 peripheral ========== -#define AT91C_TC1_RB (AT91_CAST(AT91_REG *) 0xFFFA0058) // (TC1) Register B -#define AT91C_TC1_CCR (AT91_CAST(AT91_REG *) 0xFFFA0040) // (TC1) Channel Control Register -#define AT91C_TC1_IER (AT91_CAST(AT91_REG *) 0xFFFA0064) // (TC1) Interrupt Enable Register -#define AT91C_TC1_IDR (AT91_CAST(AT91_REG *) 0xFFFA0068) // (TC1) Interrupt Disable Register -#define AT91C_TC1_SR (AT91_CAST(AT91_REG *) 0xFFFA0060) // (TC1) Status Register -#define AT91C_TC1_CMR (AT91_CAST(AT91_REG *) 0xFFFA0044) // (TC1) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC1_RA (AT91_CAST(AT91_REG *) 0xFFFA0054) // (TC1) Register A -#define AT91C_TC1_RC (AT91_CAST(AT91_REG *) 0xFFFA005C) // (TC1) Register C -#define AT91C_TC1_IMR (AT91_CAST(AT91_REG *) 0xFFFA006C) // (TC1) Interrupt Mask Register -#define AT91C_TC1_CV (AT91_CAST(AT91_REG *) 0xFFFA0050) // (TC1) Counter Value -// ========== Register definition for TC2 peripheral ========== -#define AT91C_TC2_CMR (AT91_CAST(AT91_REG *) 0xFFFA0084) // (TC2) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC2_CCR (AT91_CAST(AT91_REG *) 0xFFFA0080) // (TC2) Channel Control Register -#define AT91C_TC2_CV (AT91_CAST(AT91_REG *) 0xFFFA0090) // (TC2) Counter Value -#define AT91C_TC2_RA (AT91_CAST(AT91_REG *) 0xFFFA0094) // (TC2) Register A -#define AT91C_TC2_RB (AT91_CAST(AT91_REG *) 0xFFFA0098) // (TC2) Register B -#define AT91C_TC2_IDR (AT91_CAST(AT91_REG *) 0xFFFA00A8) // (TC2) Interrupt Disable Register -#define AT91C_TC2_IMR (AT91_CAST(AT91_REG *) 0xFFFA00AC) // (TC2) Interrupt Mask Register -#define AT91C_TC2_RC (AT91_CAST(AT91_REG *) 0xFFFA009C) // (TC2) Register C -#define AT91C_TC2_IER (AT91_CAST(AT91_REG *) 0xFFFA00A4) // (TC2) Interrupt Enable Register -#define AT91C_TC2_SR (AT91_CAST(AT91_REG *) 0xFFFA00A0) // (TC2) Status Register -// ========== Register definition for TCB peripheral ========== -#define AT91C_TCB_BMR (AT91_CAST(AT91_REG *) 0xFFFA00C4) // (TCB) TC Block Mode Register -#define AT91C_TCB_BCR (AT91_CAST(AT91_REG *) 0xFFFA00C0) // (TCB) TC Block Control Register -// ========== Register definition for PWMC_CH3 peripheral ========== -#define AT91C_PWMC_CH3_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC270) // (PWMC_CH3) Channel Update Register -#define AT91C_PWMC_CH3_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC274) // (PWMC_CH3) Reserved -#define AT91C_PWMC_CH3_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC268) // (PWMC_CH3) Channel Period Register -#define AT91C_PWMC_CH3_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC264) // (PWMC_CH3) Channel Duty Cycle Register -#define AT91C_PWMC_CH3_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC26C) // (PWMC_CH3) Channel Counter Register -#define AT91C_PWMC_CH3_CMR (AT91_CAST(AT91_REG *) 0xFFFCC260) // (PWMC_CH3) Channel Mode Register -// ========== Register definition for PWMC_CH2 peripheral ========== -#define AT91C_PWMC_CH2_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC254) // (PWMC_CH2) Reserved -#define AT91C_PWMC_CH2_CMR (AT91_CAST(AT91_REG *) 0xFFFCC240) // (PWMC_CH2) Channel Mode Register -#define AT91C_PWMC_CH2_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC24C) // (PWMC_CH2) Channel Counter Register -#define AT91C_PWMC_CH2_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC248) // (PWMC_CH2) Channel Period Register -#define AT91C_PWMC_CH2_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC250) // (PWMC_CH2) Channel Update Register -#define AT91C_PWMC_CH2_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC244) // (PWMC_CH2) Channel Duty Cycle Register -// ========== Register definition for PWMC_CH1 peripheral ========== -#define AT91C_PWMC_CH1_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC234) // (PWMC_CH1) Reserved -#define AT91C_PWMC_CH1_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC230) // (PWMC_CH1) Channel Update Register -#define AT91C_PWMC_CH1_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC228) // (PWMC_CH1) Channel Period Register -#define AT91C_PWMC_CH1_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC22C) // (PWMC_CH1) Channel Counter Register -#define AT91C_PWMC_CH1_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC224) // (PWMC_CH1) Channel Duty Cycle Register -#define AT91C_PWMC_CH1_CMR (AT91_CAST(AT91_REG *) 0xFFFCC220) // (PWMC_CH1) Channel Mode Register -// ========== Register definition for PWMC_CH0 peripheral ========== -#define AT91C_PWMC_CH0_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC214) // (PWMC_CH0) Reserved -#define AT91C_PWMC_CH0_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC208) // (PWMC_CH0) Channel Period Register -#define AT91C_PWMC_CH0_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC204) // (PWMC_CH0) Channel Duty Cycle Register -#define AT91C_PWMC_CH0_CMR (AT91_CAST(AT91_REG *) 0xFFFCC200) // (PWMC_CH0) Channel Mode Register -#define AT91C_PWMC_CH0_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC210) // (PWMC_CH0) Channel Update Register -#define AT91C_PWMC_CH0_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC20C) // (PWMC_CH0) Channel Counter Register -// ========== Register definition for PWMC peripheral ========== -#define AT91C_PWMC_IDR (AT91_CAST(AT91_REG *) 0xFFFCC014) // (PWMC) PWMC Interrupt Disable Register -#define AT91C_PWMC_DIS (AT91_CAST(AT91_REG *) 0xFFFCC008) // (PWMC) PWMC Disable Register -#define AT91C_PWMC_IER (AT91_CAST(AT91_REG *) 0xFFFCC010) // (PWMC) PWMC Interrupt Enable Register -#define AT91C_PWMC_VR (AT91_CAST(AT91_REG *) 0xFFFCC0FC) // (PWMC) PWMC Version Register -#define AT91C_PWMC_ISR (AT91_CAST(AT91_REG *) 0xFFFCC01C) // (PWMC) PWMC Interrupt Status Register -#define AT91C_PWMC_SR (AT91_CAST(AT91_REG *) 0xFFFCC00C) // (PWMC) PWMC Status Register -#define AT91C_PWMC_IMR (AT91_CAST(AT91_REG *) 0xFFFCC018) // (PWMC) PWMC Interrupt Mask Register -#define AT91C_PWMC_MR (AT91_CAST(AT91_REG *) 0xFFFCC000) // (PWMC) PWMC Mode Register -#define AT91C_PWMC_ENA (AT91_CAST(AT91_REG *) 0xFFFCC004) // (PWMC) PWMC Enable Register -// ========== Register definition for UDP peripheral ========== -#define AT91C_UDP_IMR (AT91_CAST(AT91_REG *) 0xFFFB0018) // (UDP) Interrupt Mask Register -#define AT91C_UDP_FADDR (AT91_CAST(AT91_REG *) 0xFFFB0008) // (UDP) Function Address Register -#define AT91C_UDP_NUM (AT91_CAST(AT91_REG *) 0xFFFB0000) // (UDP) Frame Number Register -#define AT91C_UDP_FDR (AT91_CAST(AT91_REG *) 0xFFFB0050) // (UDP) Endpoint FIFO Data Register -#define AT91C_UDP_ISR (AT91_CAST(AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register -#define AT91C_UDP_CSR (AT91_CAST(AT91_REG *) 0xFFFB0030) // (UDP) Endpoint Control and Status Register -#define AT91C_UDP_IDR (AT91_CAST(AT91_REG *) 0xFFFB0014) // (UDP) Interrupt Disable Register -#define AT91C_UDP_ICR (AT91_CAST(AT91_REG *) 0xFFFB0020) // (UDP) Interrupt Clear Register -#define AT91C_UDP_RSTEP (AT91_CAST(AT91_REG *) 0xFFFB0028) // (UDP) Reset Endpoint Register -#define AT91C_UDP_TXVC (AT91_CAST(AT91_REG *) 0xFFFB0074) // (UDP) Transceiver Control Register -#define AT91C_UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0xFFFB0004) // (UDP) Global State Register -#define AT91C_UDP_IER (AT91_CAST(AT91_REG *) 0xFFFB0010) // (UDP) Interrupt Enable Register - -// ***************************************************************************** -// PIO DEFINITIONS FOR AT91SAM7S128 -// ***************************************************************************** -#define AT91C_PIO_PA0 (1 << 0) // Pin Controlled by PA0 -#define AT91C_PA0_PWM0 (AT91C_PIO_PA0) // PWM Channel 0 -#define AT91C_PA0_TIOA0 (AT91C_PIO_PA0) // Timer Counter 0 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA1 (1 << 1) // Pin Controlled by PA1 -#define AT91C_PA1_PWM1 (AT91C_PIO_PA1) // PWM Channel 1 -#define AT91C_PA1_TIOB0 (AT91C_PIO_PA1) // Timer Counter 0 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA10 (1 << 10) // Pin Controlled by PA10 -#define AT91C_PA10_DTXD (AT91C_PIO_PA10) // DBGU Debug Transmit Data -#define AT91C_PA10_NPCS2 (AT91C_PIO_PA10) // SPI Peripheral Chip Select 2 -#define AT91C_PIO_PA11 (1 << 11) // Pin Controlled by PA11 -#define AT91C_PA11_NPCS0 (AT91C_PIO_PA11) // SPI Peripheral Chip Select 0 -#define AT91C_PA11_PWM0 (AT91C_PIO_PA11) // PWM Channel 0 -#define AT91C_PIO_PA12 (1 << 12) // Pin Controlled by PA12 -#define AT91C_PA12_MISO (AT91C_PIO_PA12) // SPI Master In Slave -#define AT91C_PA12_PWM1 (AT91C_PIO_PA12) // PWM Channel 1 -#define AT91C_PIO_PA13 (1 << 13) // Pin Controlled by PA13 -#define AT91C_PA13_MOSI (AT91C_PIO_PA13) // SPI Master Out Slave -#define AT91C_PA13_PWM2 (AT91C_PIO_PA13) // PWM Channel 2 -#define AT91C_PIO_PA14 (1 << 14) // Pin Controlled by PA14 -#define AT91C_PA14_SPCK (AT91C_PIO_PA14) // SPI Serial Clock -#define AT91C_PA14_PWM3 (AT91C_PIO_PA14) // PWM Channel 3 -#define AT91C_PIO_PA15 (1 << 15) // Pin Controlled by PA15 -#define AT91C_PA15_TF (AT91C_PIO_PA15) // SSC Transmit Frame Sync -#define AT91C_PA15_TIOA1 (AT91C_PIO_PA15) // Timer Counter 1 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA16 (1 << 16) // Pin Controlled by PA16 -#define AT91C_PA16_TK (AT91C_PIO_PA16) // SSC Transmit Clock -#define AT91C_PA16_TIOB1 (AT91C_PIO_PA16) // Timer Counter 1 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA17 (1 << 17) // Pin Controlled by PA17 -#define AT91C_PA17_TD (AT91C_PIO_PA17) // SSC Transmit data -#define AT91C_PA17_PCK1 (AT91C_PIO_PA17) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA18 (1 << 18) // Pin Controlled by PA18 -#define AT91C_PA18_RD (AT91C_PIO_PA18) // SSC Receive Data -#define AT91C_PA18_PCK2 (AT91C_PIO_PA18) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA19 (1 << 19) // Pin Controlled by PA19 -#define AT91C_PA19_RK (AT91C_PIO_PA19) // SSC Receive Clock -#define AT91C_PA19_FIQ (AT91C_PIO_PA19) // AIC Fast Interrupt Input -#define AT91C_PIO_PA2 (1 << 2) // Pin Controlled by PA2 -#define AT91C_PA2_PWM2 (AT91C_PIO_PA2) // PWM Channel 2 -#define AT91C_PA2_SCK0 (AT91C_PIO_PA2) // USART 0 Serial Clock -#define AT91C_PIO_PA20 (1 << 20) // Pin Controlled by PA20 -#define AT91C_PA20_RF (AT91C_PIO_PA20) // SSC Receive Frame Sync -#define AT91C_PA20_IRQ0 (AT91C_PIO_PA20) // External Interrupt 0 -#define AT91C_PIO_PA21 (1 << 21) // Pin Controlled by PA21 -#define AT91C_PA21_RXD1 (AT91C_PIO_PA21) // USART 1 Receive Data -#define AT91C_PA21_PCK1 (AT91C_PIO_PA21) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA22 (1 << 22) // Pin Controlled by PA22 -#define AT91C_PA22_TXD1 (AT91C_PIO_PA22) // USART 1 Transmit Data -#define AT91C_PA22_NPCS3 (AT91C_PIO_PA22) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA23 (1 << 23) // Pin Controlled by PA23 -#define AT91C_PA23_SCK1 (AT91C_PIO_PA23) // USART 1 Serial Clock -#define AT91C_PA23_PWM0 (AT91C_PIO_PA23) // PWM Channel 0 -#define AT91C_PIO_PA24 (1 << 24) // Pin Controlled by PA24 -#define AT91C_PA24_RTS1 (AT91C_PIO_PA24) // USART 1 Ready To Send -#define AT91C_PA24_PWM1 (AT91C_PIO_PA24) // PWM Channel 1 -#define AT91C_PIO_PA25 (1 << 25) // Pin Controlled by PA25 -#define AT91C_PA25_CTS1 (AT91C_PIO_PA25) // USART 1 Clear To Send -#define AT91C_PA25_PWM2 (AT91C_PIO_PA25) // PWM Channel 2 -#define AT91C_PIO_PA26 (1 << 26) // Pin Controlled by PA26 -#define AT91C_PA26_DCD1 (AT91C_PIO_PA26) // USART 1 Data Carrier Detect -#define AT91C_PA26_TIOA2 (AT91C_PIO_PA26) // Timer Counter 2 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA27 (1 << 27) // Pin Controlled by PA27 -#define AT91C_PA27_DTR1 (AT91C_PIO_PA27) // USART 1 Data Terminal ready -#define AT91C_PA27_TIOB2 (AT91C_PIO_PA27) // Timer Counter 2 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA28 (1 << 28) // Pin Controlled by PA28 -#define AT91C_PA28_DSR1 (AT91C_PIO_PA28) // USART 1 Data Set ready -#define AT91C_PA28_TCLK1 (AT91C_PIO_PA28) // Timer Counter 1 external clock input -#define AT91C_PIO_PA29 (1 << 29) // Pin Controlled by PA29 -#define AT91C_PA29_RI1 (AT91C_PIO_PA29) // USART 1 Ring Indicator -#define AT91C_PA29_TCLK2 (AT91C_PIO_PA29) // Timer Counter 2 external clock input -#define AT91C_PIO_PA3 (1 << 3) // Pin Controlled by PA3 -#define AT91C_PA3_TWD (AT91C_PIO_PA3) // TWI Two-wire Serial Data -#define AT91C_PA3_NPCS3 (AT91C_PIO_PA3) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA30 (1 << 30) // Pin Controlled by PA30 -#define AT91C_PA30_IRQ1 (AT91C_PIO_PA30) // External Interrupt 1 -#define AT91C_PA30_NPCS2 (AT91C_PIO_PA30) // SPI Peripheral Chip Select 2 -#define AT91C_PIO_PA31 (1 << 31) // Pin Controlled by PA31 -#define AT91C_PA31_NPCS1 (AT91C_PIO_PA31) // SPI Peripheral Chip Select 1 -#define AT91C_PA31_PCK2 (AT91C_PIO_PA31) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA4 (1 << 4) // Pin Controlled by PA4 -#define AT91C_PA4_TWCK (AT91C_PIO_PA4) // TWI Two-wire Serial Clock -#define AT91C_PA4_TCLK0 (AT91C_PIO_PA4) // Timer Counter 0 external clock input -#define AT91C_PIO_PA5 (1 << 5) // Pin Controlled by PA5 -#define AT91C_PA5_RXD0 (AT91C_PIO_PA5) // USART 0 Receive Data -#define AT91C_PA5_NPCS3 (AT91C_PIO_PA5) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA6 (1 << 6) // Pin Controlled by PA6 -#define AT91C_PA6_TXD0 (AT91C_PIO_PA6) // USART 0 Transmit Data -#define AT91C_PA6_PCK0 (AT91C_PIO_PA6) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PA7 (1 << 7) // Pin Controlled by PA7 -#define AT91C_PA7_RTS0 (AT91C_PIO_PA7) // USART 0 Ready To Send -#define AT91C_PA7_PWM3 (AT91C_PIO_PA7) // PWM Channel 3 -#define AT91C_PIO_PA8 (1 << 8) // Pin Controlled by PA8 -#define AT91C_PA8_CTS0 (AT91C_PIO_PA8) // USART 0 Clear To Send -#define AT91C_PA8_ADTRG (AT91C_PIO_PA8) // ADC External Trigger -#define AT91C_PIO_PA9 (1 << 9) // Pin Controlled by PA9 -#define AT91C_PA9_DRXD (AT91C_PIO_PA9) // DBGU Debug Receive Data -#define AT91C_PA9_NPCS1 (AT91C_PIO_PA9) // SPI Peripheral Chip Select 1 - -// ***************************************************************************** -// PERIPHERAL ID DEFINITIONS FOR AT91SAM7S128 -// ***************************************************************************** -#define AT91C_ID_FIQ ( 0) // Advanced Interrupt Controller (FIQ) -#define AT91C_ID_SYS ( 1) // System Peripheral -#define AT91C_ID_PIOA ( 2) // Parallel IO Controller -#define AT91C_ID_3_Reserved ( 3) // Reserved -#define AT91C_ID_ADC ( 4) // Analog-to-Digital Converter -#define AT91C_ID_SPI ( 5) // Serial Peripheral Interface -#define AT91C_ID_US0 ( 6) // USART 0 -#define AT91C_ID_US1 ( 7) // USART 1 -#define AT91C_ID_SSC ( 8) // Serial Synchronous Controller -#define AT91C_ID_TWI ( 9) // Two-Wire Interface -#define AT91C_ID_PWMC (10) // PWM Controller -#define AT91C_ID_UDP (11) // USB Device Port -#define AT91C_ID_TC0 (12) // Timer Counter 0 -#define AT91C_ID_TC1 (13) // Timer Counter 1 -#define AT91C_ID_TC2 (14) // Timer Counter 2 -#define AT91C_ID_15_Reserved (15) // Reserved -#define AT91C_ID_16_Reserved (16) // Reserved -#define AT91C_ID_17_Reserved (17) // Reserved -#define AT91C_ID_18_Reserved (18) // Reserved -#define AT91C_ID_19_Reserved (19) // Reserved -#define AT91C_ID_20_Reserved (20) // Reserved -#define AT91C_ID_21_Reserved (21) // Reserved -#define AT91C_ID_22_Reserved (22) // Reserved -#define AT91C_ID_23_Reserved (23) // Reserved -#define AT91C_ID_24_Reserved (24) // Reserved -#define AT91C_ID_25_Reserved (25) // Reserved -#define AT91C_ID_26_Reserved (26) // Reserved -#define AT91C_ID_27_Reserved (27) // Reserved -#define AT91C_ID_28_Reserved (28) // Reserved -#define AT91C_ID_29_Reserved (29) // Reserved -#define AT91C_ID_IRQ0 (30) // Advanced Interrupt Controller (IRQ0) -#define AT91C_ID_IRQ1 (31) // Advanced Interrupt Controller (IRQ1) -#define AT91C_ALL_INT (0xC0007FF7) // ALL VALID INTERRUPTS - -// ***************************************************************************** -// BASE ADDRESS DEFINITIONS FOR AT91SAM7S128 -// ***************************************************************************** -#define AT91C_BASE_SYS (AT91_CAST(AT91PS_SYS) 0xFFFFF000) // (SYS) Base Address -#define AT91C_BASE_AIC (AT91_CAST(AT91PS_AIC) 0xFFFFF000) // (AIC) Base Address -#define AT91C_BASE_PDC_DBGU (AT91_CAST(AT91PS_PDC) 0xFFFFF300) // (PDC_DBGU) Base Address -#define AT91C_BASE_DBGU (AT91_CAST(AT91PS_DBGU) 0xFFFFF200) // (DBGU) Base Address -#define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address -#define AT91C_BASE_CKGR (AT91_CAST(AT91PS_CKGR) 0xFFFFFC20) // (CKGR) Base Address -#define AT91C_BASE_PMC (AT91_CAST(AT91PS_PMC) 0xFFFFFC00) // (PMC) Base Address -#define AT91C_BASE_RSTC (AT91_CAST(AT91PS_RSTC) 0xFFFFFD00) // (RSTC) Base Address -#define AT91C_BASE_RTTC (AT91_CAST(AT91PS_RTTC) 0xFFFFFD20) // (RTTC) Base Address -#define AT91C_BASE_PITC (AT91_CAST(AT91PS_PITC) 0xFFFFFD30) // (PITC) Base Address -#define AT91C_BASE_WDTC (AT91_CAST(AT91PS_WDTC) 0xFFFFFD40) // (WDTC) Base Address -#define AT91C_BASE_VREG (AT91_CAST(AT91PS_VREG) 0xFFFFFD60) // (VREG) Base Address -#define AT91C_BASE_MC (AT91_CAST(AT91PS_MC) 0xFFFFFF00) // (MC) Base Address -#define AT91C_BASE_PDC_SPI (AT91_CAST(AT91PS_PDC) 0xFFFE0100) // (PDC_SPI) Base Address -#define AT91C_BASE_SPI (AT91_CAST(AT91PS_SPI) 0xFFFE0000) // (SPI) Base Address -#define AT91C_BASE_PDC_ADC (AT91_CAST(AT91PS_PDC) 0xFFFD8100) // (PDC_ADC) Base Address -#define AT91C_BASE_ADC (AT91_CAST(AT91PS_ADC) 0xFFFD8000) // (ADC) Base Address -#define AT91C_BASE_PDC_SSC (AT91_CAST(AT91PS_PDC) 0xFFFD4100) // (PDC_SSC) Base Address -#define AT91C_BASE_SSC (AT91_CAST(AT91PS_SSC) 0xFFFD4000) // (SSC) Base Address -#define AT91C_BASE_PDC_US1 (AT91_CAST(AT91PS_PDC) 0xFFFC4100) // (PDC_US1) Base Address -#define AT91C_BASE_US1 (AT91_CAST(AT91PS_USART) 0xFFFC4000) // (US1) Base Address -#define AT91C_BASE_PDC_US0 (AT91_CAST(AT91PS_PDC) 0xFFFC0100) // (PDC_US0) Base Address -#define AT91C_BASE_US0 (AT91_CAST(AT91PS_USART) 0xFFFC0000) // (US0) Base Address -#define AT91C_BASE_TWI (AT91_CAST(AT91PS_TWI) 0xFFFB8000) // (TWI) Base Address -#define AT91C_BASE_TC0 (AT91_CAST(AT91PS_TC) 0xFFFA0000) // (TC0) Base Address -#define AT91C_BASE_TC1 (AT91_CAST(AT91PS_TC) 0xFFFA0040) // (TC1) Base Address -#define AT91C_BASE_TC2 (AT91_CAST(AT91PS_TC) 0xFFFA0080) // (TC2) Base Address -#define AT91C_BASE_TCB (AT91_CAST(AT91PS_TCB) 0xFFFA0000) // (TCB) Base Address -#define AT91C_BASE_PWMC_CH3 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC260) // (PWMC_CH3) Base Address -#define AT91C_BASE_PWMC_CH2 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC240) // (PWMC_CH2) Base Address -#define AT91C_BASE_PWMC_CH1 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC220) // (PWMC_CH1) Base Address -#define AT91C_BASE_PWMC_CH0 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC200) // (PWMC_CH0) Base Address -#define AT91C_BASE_PWMC (AT91_CAST(AT91PS_PWMC) 0xFFFCC000) // (PWMC) Base Address -#define AT91C_BASE_UDP (AT91_CAST(AT91PS_UDP) 0xFFFB0000) // (UDP) Base Address - -// ***************************************************************************** -// MEMORY MAPPING DEFINITIONS FOR AT91SAM7S128 -// ***************************************************************************** -// ISRAM -#define AT91C_ISRAM (0x00200000) // Internal SRAM base address -#define AT91C_ISRAM_SIZE (0x00008000) // Internal SRAM size in byte (32 Kbytes) -// IFLASH -#define AT91C_IFLASH (0x00100000) // Internal FLASH base address -#define AT91C_IFLASH_SIZE (0x00020000) // Internal FLASH size in byte (128 Kbytes) -#define AT91C_IFLASH_PAGE_SIZE (256) // Internal FLASH Page Size: 256 bytes -#define AT91C_IFLASH_LOCK_REGION_SIZE (16384) // Internal FLASH Lock Region Size: 16 Kbytes -#define AT91C_IFLASH_NB_OF_PAGES (512) // Internal FLASH Number of Pages: 512 bytes -#define AT91C_IFLASH_NB_OF_LOCK_BITS (8) // Internal FLASH Number of Lock Bits: 8 bytes - -#endif diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S256.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S256.h deleted file mode 100644 index 812f3fa..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S256.h +++ /dev/null @@ -1,2229 +0,0 @@ -// ---------------------------------------------------------------------------- -// ATMEL Microcontroller Software Support - ROUSSET - -// ---------------------------------------------------------------------------- -// Copyright (c) 2006, Atmel Corporation -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, -// this list of conditions and the disclaimer below. -// -// Atmel's name may not be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR -// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE -// DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// ---------------------------------------------------------------------------- -// File Name : AT91SAM7S256.h -// Object : AT91SAM7S256 definitions -// Generated : AT91 SW Application Group 07/07/2008 (16:12:57) -// -// CVS Reference : /AT91SAM7S256.pl/1.12/Wed Aug 30 14:08:39 2006// -// CVS Reference : /SYS_SAM7S.pl/1.2/Thu Feb 3 10:47:39 2005// -// CVS Reference : /MC_SAM7S.pl/1.4/Thu Feb 16 16:45:50 2006// -// CVS Reference : /PMC_SAM7S_USB.pl/1.4/Tue Feb 8 14:00:19 2005// -// CVS Reference : /RSTC_SAM7S.pl/1.2/Wed Jul 13 15:25:17 2005// -// CVS Reference : /UDP_4ept.pl/1.1/Thu Aug 3 12:26:00 2006// -// CVS Reference : /PWM_SAM7S.pl/1.1/Tue May 10 12:38:54 2005// -// CVS Reference : /RTTC_6081A.pl/1.2/Thu Nov 4 13:57:22 2004// -// CVS Reference : /PITC_6079A.pl/1.2/Thu Nov 4 13:56:22 2004// -// CVS Reference : /WDTC_6080A.pl/1.3/Thu Nov 4 13:58:52 2004// -// CVS Reference : /VREG_6085B.pl/1.1/Tue Feb 1 16:40:38 2005// -// CVS Reference : /AIC_6075B.pl/1.3/Fri May 20 14:21:42 2005// -// CVS Reference : /PIO_6057A.pl/1.2/Thu Feb 3 10:29:42 2005// -// CVS Reference : /DBGU_6059D.pl/1.1/Mon Jan 31 13:54:41 2005// -// CVS Reference : /US_6089C.pl/1.1/Mon Jan 31 13:56:02 2005// -// CVS Reference : /SPI_6088D.pl/1.3/Fri May 20 14:23:02 2005// -// CVS Reference : /SSC_6078A.pl/1.1/Tue Jul 13 07:10:41 2004// -// CVS Reference : /TC_6082A.pl/1.7/Wed Mar 9 16:31:51 2005// -// CVS Reference : /TWI_6061A.pl/1.2/Fri Oct 27 11:40:48 2006// -// CVS Reference : /PDC_6074C.pl/1.2/Thu Feb 3 09:02:11 2005// -// CVS Reference : /ADC_6051C.pl/1.1/Mon Jan 31 13:12:40 2005// -// ---------------------------------------------------------------------------- - -#ifndef AT91SAM7S256_H -#define AT91SAM7S256_H - -#ifndef __ASSEMBLY__ -typedef volatile unsigned int AT91_REG;// Hardware register definition -#define AT91_CAST(a) (a) -#else -#define AT91_CAST(a) -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR System Peripherals -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SYS { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register - AT91_REG Reserved2[45]; // - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved3[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved4[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register - AT91_REG Reserved5[54]; // - AT91_REG PIOA_PER; // PIO Enable Register - AT91_REG PIOA_PDR; // PIO Disable Register - AT91_REG PIOA_PSR; // PIO Status Register - AT91_REG Reserved6[1]; // - AT91_REG PIOA_OER; // Output Enable Register - AT91_REG PIOA_ODR; // Output Disable Registerr - AT91_REG PIOA_OSR; // Output Status Register - AT91_REG Reserved7[1]; // - AT91_REG PIOA_IFER; // Input Filter Enable Register - AT91_REG PIOA_IFDR; // Input Filter Disable Register - AT91_REG PIOA_IFSR; // Input Filter Status Register - AT91_REG Reserved8[1]; // - AT91_REG PIOA_SODR; // Set Output Data Register - AT91_REG PIOA_CODR; // Clear Output Data Register - AT91_REG PIOA_ODSR; // Output Data Status Register - AT91_REG PIOA_PDSR; // Pin Data Status Register - AT91_REG PIOA_IER; // Interrupt Enable Register - AT91_REG PIOA_IDR; // Interrupt Disable Register - AT91_REG PIOA_IMR; // Interrupt Mask Register - AT91_REG PIOA_ISR; // Interrupt Status Register - AT91_REG PIOA_MDER; // Multi-driver Enable Register - AT91_REG PIOA_MDDR; // Multi-driver Disable Register - AT91_REG PIOA_MDSR; // Multi-driver Status Register - AT91_REG Reserved9[1]; // - AT91_REG PIOA_PPUDR; // Pull-up Disable Register - AT91_REG PIOA_PPUER; // Pull-up Enable Register - AT91_REG PIOA_PPUSR; // Pull-up Status Register - AT91_REG Reserved10[1]; // - AT91_REG PIOA_ASR; // Select A Register - AT91_REG PIOA_BSR; // Select B Register - AT91_REG PIOA_ABSR; // AB Select Status Register - AT91_REG Reserved11[9]; // - AT91_REG PIOA_OWER; // Output Write Enable Register - AT91_REG PIOA_OWDR; // Output Write Disable Register - AT91_REG PIOA_OWSR; // Output Write Status Register - AT91_REG Reserved12[469]; // - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved13[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved14[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved15[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved16[3]; // - AT91_REG PMC_PCKR[3]; // Programmable Clock Register - AT91_REG Reserved17[5]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register - AT91_REG Reserved18[36]; // - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register - AT91_REG Reserved19[5]; // - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register - AT91_REG Reserved20[5]; // - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_SYS, *AT91PS_SYS; -#else - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Advanced Interrupt Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_AIC { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register -} AT91S_AIC, *AT91PS_AIC; -#else -#define AIC_SMR (AT91_CAST(AT91_REG *) 0x00000000) // (AIC_SMR) Source Mode Register -#define AIC_SVR (AT91_CAST(AT91_REG *) 0x00000080) // (AIC_SVR) Source Vector Register -#define AIC_IVR (AT91_CAST(AT91_REG *) 0x00000100) // (AIC_IVR) IRQ Vector Register -#define AIC_FVR (AT91_CAST(AT91_REG *) 0x00000104) // (AIC_FVR) FIQ Vector Register -#define AIC_ISR (AT91_CAST(AT91_REG *) 0x00000108) // (AIC_ISR) Interrupt Status Register -#define AIC_IPR (AT91_CAST(AT91_REG *) 0x0000010C) // (AIC_IPR) Interrupt Pending Register -#define AIC_IMR (AT91_CAST(AT91_REG *) 0x00000110) // (AIC_IMR) Interrupt Mask Register -#define AIC_CISR (AT91_CAST(AT91_REG *) 0x00000114) // (AIC_CISR) Core Interrupt Status Register -#define AIC_IECR (AT91_CAST(AT91_REG *) 0x00000120) // (AIC_IECR) Interrupt Enable Command Register -#define AIC_IDCR (AT91_CAST(AT91_REG *) 0x00000124) // (AIC_IDCR) Interrupt Disable Command Register -#define AIC_ICCR (AT91_CAST(AT91_REG *) 0x00000128) // (AIC_ICCR) Interrupt Clear Command Register -#define AIC_ISCR (AT91_CAST(AT91_REG *) 0x0000012C) // (AIC_ISCR) Interrupt Set Command Register -#define AIC_EOICR (AT91_CAST(AT91_REG *) 0x00000130) // (AIC_EOICR) End of Interrupt Command Register -#define AIC_SPU (AT91_CAST(AT91_REG *) 0x00000134) // (AIC_SPU) Spurious Vector Register -#define AIC_DCR (AT91_CAST(AT91_REG *) 0x00000138) // (AIC_DCR) Debug Control Register (Protect) -#define AIC_FFER (AT91_CAST(AT91_REG *) 0x00000140) // (AIC_FFER) Fast Forcing Enable Register -#define AIC_FFDR (AT91_CAST(AT91_REG *) 0x00000144) // (AIC_FFDR) Fast Forcing Disable Register -#define AIC_FFSR (AT91_CAST(AT91_REG *) 0x00000148) // (AIC_FFSR) Fast Forcing Status Register - -#endif -// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- -#define AT91C_AIC_PRIOR (0x7 << 0) // (AIC) Priority Level -#define AT91C_AIC_PRIOR_LOWEST (0x0) // (AIC) Lowest priority level -#define AT91C_AIC_PRIOR_HIGHEST (0x7) // (AIC) Highest priority level -#define AT91C_AIC_SRCTYPE (0x3 << 5) // (AIC) Interrupt Source Type -#define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL (0x0 << 5) // (AIC) Internal Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL (0x0 << 5) // (AIC) External Sources Code Label Low-level Sensitive -#define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE (0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered -#define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE (0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered -#define AT91C_AIC_SRCTYPE_HIGH_LEVEL (0x2 << 5) // (AIC) Internal Or External Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_POSITIVE_EDGE (0x3 << 5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered -// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- -#define AT91C_AIC_NFIQ (0x1 << 0) // (AIC) NFIQ Status -#define AT91C_AIC_NIRQ (0x1 << 1) // (AIC) NIRQ Status -// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- -#define AT91C_AIC_DCR_PROT (0x1 << 0) // (AIC) Protection Mode -#define AT91C_AIC_DCR_GMSK (0x1 << 1) // (AIC) General Mask - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Peripheral DMA Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PDC { - AT91_REG PDC_RPR; // Receive Pointer Register - AT91_REG PDC_RCR; // Receive Counter Register - AT91_REG PDC_TPR; // Transmit Pointer Register - AT91_REG PDC_TCR; // Transmit Counter Register - AT91_REG PDC_RNPR; // Receive Next Pointer Register - AT91_REG PDC_RNCR; // Receive Next Counter Register - AT91_REG PDC_TNPR; // Transmit Next Pointer Register - AT91_REG PDC_TNCR; // Transmit Next Counter Register - AT91_REG PDC_PTCR; // PDC Transfer Control Register - AT91_REG PDC_PTSR; // PDC Transfer Status Register -} AT91S_PDC, *AT91PS_PDC; -#else -#define PDC_RPR (AT91_CAST(AT91_REG *) 0x00000000) // (PDC_RPR) Receive Pointer Register -#define PDC_RCR (AT91_CAST(AT91_REG *) 0x00000004) // (PDC_RCR) Receive Counter Register -#define PDC_TPR (AT91_CAST(AT91_REG *) 0x00000008) // (PDC_TPR) Transmit Pointer Register -#define PDC_TCR (AT91_CAST(AT91_REG *) 0x0000000C) // (PDC_TCR) Transmit Counter Register -#define PDC_RNPR (AT91_CAST(AT91_REG *) 0x00000010) // (PDC_RNPR) Receive Next Pointer Register -#define PDC_RNCR (AT91_CAST(AT91_REG *) 0x00000014) // (PDC_RNCR) Receive Next Counter Register -#define PDC_TNPR (AT91_CAST(AT91_REG *) 0x00000018) // (PDC_TNPR) Transmit Next Pointer Register -#define PDC_TNCR (AT91_CAST(AT91_REG *) 0x0000001C) // (PDC_TNCR) Transmit Next Counter Register -#define PDC_PTCR (AT91_CAST(AT91_REG *) 0x00000020) // (PDC_PTCR) PDC Transfer Control Register -#define PDC_PTSR (AT91_CAST(AT91_REG *) 0x00000024) // (PDC_PTSR) PDC Transfer Status Register - -#endif -// -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- -#define AT91C_PDC_RXTEN (0x1 << 0) // (PDC) Receiver Transfer Enable -#define AT91C_PDC_RXTDIS (0x1 << 1) // (PDC) Receiver Transfer Disable -#define AT91C_PDC_TXTEN (0x1 << 8) // (PDC) Transmitter Transfer Enable -#define AT91C_PDC_TXTDIS (0x1 << 9) // (PDC) Transmitter Transfer Disable -// -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Debug Unit -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_DBGU { - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved0[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved1[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register -} AT91S_DBGU, *AT91PS_DBGU; -#else -#define DBGU_CR (AT91_CAST(AT91_REG *) 0x00000000) // (DBGU_CR) Control Register -#define DBGU_MR (AT91_CAST(AT91_REG *) 0x00000004) // (DBGU_MR) Mode Register -#define DBGU_IER (AT91_CAST(AT91_REG *) 0x00000008) // (DBGU_IER) Interrupt Enable Register -#define DBGU_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (DBGU_IDR) Interrupt Disable Register -#define DBGU_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (DBGU_IMR) Interrupt Mask Register -#define DBGU_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (DBGU_CSR) Channel Status Register -#define DBGU_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (DBGU_RHR) Receiver Holding Register -#define DBGU_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (DBGU_THR) Transmitter Holding Register -#define DBGU_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (DBGU_BRGR) Baud Rate Generator Register -#define DBGU_CIDR (AT91_CAST(AT91_REG *) 0x00000040) // (DBGU_CIDR) Chip ID Register -#define DBGU_EXID (AT91_CAST(AT91_REG *) 0x00000044) // (DBGU_EXID) Chip ID Extension Register -#define DBGU_FNTR (AT91_CAST(AT91_REG *) 0x00000048) // (DBGU_FNTR) Force NTRST Register - -#endif -// -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_RSTRX (0x1 << 2) // (DBGU) Reset Receiver -#define AT91C_US_RSTTX (0x1 << 3) // (DBGU) Reset Transmitter -#define AT91C_US_RXEN (0x1 << 4) // (DBGU) Receiver Enable -#define AT91C_US_RXDIS (0x1 << 5) // (DBGU) Receiver Disable -#define AT91C_US_TXEN (0x1 << 6) // (DBGU) Transmitter Enable -#define AT91C_US_TXDIS (0x1 << 7) // (DBGU) Transmitter Disable -#define AT91C_US_RSTSTA (0x1 << 8) // (DBGU) Reset Status Bits -// -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_PAR (0x7 << 9) // (DBGU) Parity type -#define AT91C_US_PAR_EVEN (0x0 << 9) // (DBGU) Even Parity -#define AT91C_US_PAR_ODD (0x1 << 9) // (DBGU) Odd Parity -#define AT91C_US_PAR_SPACE (0x2 << 9) // (DBGU) Parity forced to 0 (Space) -#define AT91C_US_PAR_MARK (0x3 << 9) // (DBGU) Parity forced to 1 (Mark) -#define AT91C_US_PAR_NONE (0x4 << 9) // (DBGU) No Parity -#define AT91C_US_PAR_MULTI_DROP (0x6 << 9) // (DBGU) Multi-drop mode -#define AT91C_US_CHMODE (0x3 << 14) // (DBGU) Channel Mode -#define AT91C_US_CHMODE_NORMAL (0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART. -#define AT91C_US_CHMODE_AUTO (0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin. -#define AT91C_US_CHMODE_LOCAL (0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal. -#define AT91C_US_CHMODE_REMOTE (0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin. -// -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXRDY (0x1 << 0) // (DBGU) RXRDY Interrupt -#define AT91C_US_TXRDY (0x1 << 1) // (DBGU) TXRDY Interrupt -#define AT91C_US_ENDRX (0x1 << 3) // (DBGU) End of Receive Transfer Interrupt -#define AT91C_US_ENDTX (0x1 << 4) // (DBGU) End of Transmit Interrupt -#define AT91C_US_OVRE (0x1 << 5) // (DBGU) Overrun Interrupt -#define AT91C_US_FRAME (0x1 << 6) // (DBGU) Framing Error Interrupt -#define AT91C_US_PARE (0x1 << 7) // (DBGU) Parity Error Interrupt -#define AT91C_US_TXEMPTY (0x1 << 9) // (DBGU) TXEMPTY Interrupt -#define AT91C_US_TXBUFE (0x1 << 11) // (DBGU) TXBUFE Interrupt -#define AT91C_US_RXBUFF (0x1 << 12) // (DBGU) RXBUFF Interrupt -#define AT91C_US_COMM_TX (0x1 << 30) // (DBGU) COMM_TX Interrupt -#define AT91C_US_COMM_RX (0x1 << 31) // (DBGU) COMM_RX Interrupt -// -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register -------- -// -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register -------- -#define AT91C_US_FORCE_NTRST (0x1 << 0) // (DBGU) Force NTRST in JTAG - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Parallel Input Output Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PIO { - AT91_REG PIO_PER; // PIO Enable Register - AT91_REG PIO_PDR; // PIO Disable Register - AT91_REG PIO_PSR; // PIO Status Register - AT91_REG Reserved0[1]; // - AT91_REG PIO_OER; // Output Enable Register - AT91_REG PIO_ODR; // Output Disable Registerr - AT91_REG PIO_OSR; // Output Status Register - AT91_REG Reserved1[1]; // - AT91_REG PIO_IFER; // Input Filter Enable Register - AT91_REG PIO_IFDR; // Input Filter Disable Register - AT91_REG PIO_IFSR; // Input Filter Status Register - AT91_REG Reserved2[1]; // - AT91_REG PIO_SODR; // Set Output Data Register - AT91_REG PIO_CODR; // Clear Output Data Register - AT91_REG PIO_ODSR; // Output Data Status Register - AT91_REG PIO_PDSR; // Pin Data Status Register - AT91_REG PIO_IER; // Interrupt Enable Register - AT91_REG PIO_IDR; // Interrupt Disable Register - AT91_REG PIO_IMR; // Interrupt Mask Register - AT91_REG PIO_ISR; // Interrupt Status Register - AT91_REG PIO_MDER; // Multi-driver Enable Register - AT91_REG PIO_MDDR; // Multi-driver Disable Register - AT91_REG PIO_MDSR; // Multi-driver Status Register - AT91_REG Reserved3[1]; // - AT91_REG PIO_PPUDR; // Pull-up Disable Register - AT91_REG PIO_PPUER; // Pull-up Enable Register - AT91_REG PIO_PPUSR; // Pull-up Status Register - AT91_REG Reserved4[1]; // - AT91_REG PIO_ASR; // Select A Register - AT91_REG PIO_BSR; // Select B Register - AT91_REG PIO_ABSR; // AB Select Status Register - AT91_REG Reserved5[9]; // - AT91_REG PIO_OWER; // Output Write Enable Register - AT91_REG PIO_OWDR; // Output Write Disable Register - AT91_REG PIO_OWSR; // Output Write Status Register -} AT91S_PIO, *AT91PS_PIO; -#else -#define PIO_PER (AT91_CAST(AT91_REG *) 0x00000000) // (PIO_PER) PIO Enable Register -#define PIO_PDR (AT91_CAST(AT91_REG *) 0x00000004) // (PIO_PDR) PIO Disable Register -#define PIO_PSR (AT91_CAST(AT91_REG *) 0x00000008) // (PIO_PSR) PIO Status Register -#define PIO_OER (AT91_CAST(AT91_REG *) 0x00000010) // (PIO_OER) Output Enable Register -#define PIO_ODR (AT91_CAST(AT91_REG *) 0x00000014) // (PIO_ODR) Output Disable Registerr -#define PIO_OSR (AT91_CAST(AT91_REG *) 0x00000018) // (PIO_OSR) Output Status Register -#define PIO_IFER (AT91_CAST(AT91_REG *) 0x00000020) // (PIO_IFER) Input Filter Enable Register -#define PIO_IFDR (AT91_CAST(AT91_REG *) 0x00000024) // (PIO_IFDR) Input Filter Disable Register -#define PIO_IFSR (AT91_CAST(AT91_REG *) 0x00000028) // (PIO_IFSR) Input Filter Status Register -#define PIO_SODR (AT91_CAST(AT91_REG *) 0x00000030) // (PIO_SODR) Set Output Data Register -#define PIO_CODR (AT91_CAST(AT91_REG *) 0x00000034) // (PIO_CODR) Clear Output Data Register -#define PIO_ODSR (AT91_CAST(AT91_REG *) 0x00000038) // (PIO_ODSR) Output Data Status Register -#define PIO_PDSR (AT91_CAST(AT91_REG *) 0x0000003C) // (PIO_PDSR) Pin Data Status Register -#define PIO_IER (AT91_CAST(AT91_REG *) 0x00000040) // (PIO_IER) Interrupt Enable Register -#define PIO_IDR (AT91_CAST(AT91_REG *) 0x00000044) // (PIO_IDR) Interrupt Disable Register -#define PIO_IMR (AT91_CAST(AT91_REG *) 0x00000048) // (PIO_IMR) Interrupt Mask Register -#define PIO_ISR (AT91_CAST(AT91_REG *) 0x0000004C) // (PIO_ISR) Interrupt Status Register -#define PIO_MDER (AT91_CAST(AT91_REG *) 0x00000050) // (PIO_MDER) Multi-driver Enable Register -#define PIO_MDDR (AT91_CAST(AT91_REG *) 0x00000054) // (PIO_MDDR) Multi-driver Disable Register -#define PIO_MDSR (AT91_CAST(AT91_REG *) 0x00000058) // (PIO_MDSR) Multi-driver Status Register -#define PIO_PPUDR (AT91_CAST(AT91_REG *) 0x00000060) // (PIO_PPUDR) Pull-up Disable Register -#define PIO_PPUER (AT91_CAST(AT91_REG *) 0x00000064) // (PIO_PPUER) Pull-up Enable Register -#define PIO_PPUSR (AT91_CAST(AT91_REG *) 0x00000068) // (PIO_PPUSR) Pull-up Status Register -#define PIO_ASR (AT91_CAST(AT91_REG *) 0x00000070) // (PIO_ASR) Select A Register -#define PIO_BSR (AT91_CAST(AT91_REG *) 0x00000074) // (PIO_BSR) Select B Register -#define PIO_ABSR (AT91_CAST(AT91_REG *) 0x00000078) // (PIO_ABSR) AB Select Status Register -#define PIO_OWER (AT91_CAST(AT91_REG *) 0x000000A0) // (PIO_OWER) Output Write Enable Register -#define PIO_OWDR (AT91_CAST(AT91_REG *) 0x000000A4) // (PIO_OWDR) Output Write Disable Register -#define PIO_OWSR (AT91_CAST(AT91_REG *) 0x000000A8) // (PIO_OWSR) Output Write Status Register - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Clock Generator Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CKGR { - AT91_REG CKGR_MOR; // Main Oscillator Register - AT91_REG CKGR_MCFR; // Main Clock Frequency Register - AT91_REG Reserved0[1]; // - AT91_REG CKGR_PLLR; // PLL Register -} AT91S_CKGR, *AT91PS_CKGR; -#else -#define CKGR_MOR (AT91_CAST(AT91_REG *) 0x00000000) // (CKGR_MOR) Main Oscillator Register -#define CKGR_MCFR (AT91_CAST(AT91_REG *) 0x00000004) // (CKGR_MCFR) Main Clock Frequency Register -#define CKGR_PLLR (AT91_CAST(AT91_REG *) 0x0000000C) // (CKGR_PLLR) PLL Register - -#endif -// -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- -#define AT91C_CKGR_MOSCEN (0x1 << 0) // (CKGR) Main Oscillator Enable -#define AT91C_CKGR_OSCBYPASS (0x1 << 1) // (CKGR) Main Oscillator Bypass -#define AT91C_CKGR_OSCOUNT (0xFF << 8) // (CKGR) Main Oscillator Start-up Time -// -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- -#define AT91C_CKGR_MAINF (0xFFFF << 0) // (CKGR) Main Clock Frequency -#define AT91C_CKGR_MAINRDY (0x1 << 16) // (CKGR) Main Clock Ready -// -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register -------- -#define AT91C_CKGR_DIV (0xFF << 0) // (CKGR) Divider Selected -#define AT91C_CKGR_DIV_0 (0x0) // (CKGR) Divider output is 0 -#define AT91C_CKGR_DIV_BYPASS (0x1) // (CKGR) Divider is bypassed -#define AT91C_CKGR_PLLCOUNT (0x3F << 8) // (CKGR) PLL Counter -#define AT91C_CKGR_OUT (0x3 << 14) // (CKGR) PLL Output Frequency Range -#define AT91C_CKGR_OUT_0 (0x0 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_1 (0x1 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_2 (0x2 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_3 (0x3 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_MUL (0x7FF << 16) // (CKGR) PLL Multiplier -#define AT91C_CKGR_USBDIV (0x3 << 28) // (CKGR) Divider for USB Clocks -#define AT91C_CKGR_USBDIV_0 (0x0 << 28) // (CKGR) Divider output is PLL clock output -#define AT91C_CKGR_USBDIV_1 (0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2 -#define AT91C_CKGR_USBDIV_2 (0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Power Management Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PMC { - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved0[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved1[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved2[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved3[3]; // - AT91_REG PMC_PCKR[3]; // Programmable Clock Register - AT91_REG Reserved4[5]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register -} AT91S_PMC, *AT91PS_PMC; -#else -#define PMC_SCER (AT91_CAST(AT91_REG *) 0x00000000) // (PMC_SCER) System Clock Enable Register -#define PMC_SCDR (AT91_CAST(AT91_REG *) 0x00000004) // (PMC_SCDR) System Clock Disable Register -#define PMC_SCSR (AT91_CAST(AT91_REG *) 0x00000008) // (PMC_SCSR) System Clock Status Register -#define PMC_PCER (AT91_CAST(AT91_REG *) 0x00000010) // (PMC_PCER) Peripheral Clock Enable Register -#define PMC_PCDR (AT91_CAST(AT91_REG *) 0x00000014) // (PMC_PCDR) Peripheral Clock Disable Register -#define PMC_PCSR (AT91_CAST(AT91_REG *) 0x00000018) // (PMC_PCSR) Peripheral Clock Status Register -#define PMC_MCKR (AT91_CAST(AT91_REG *) 0x00000030) // (PMC_MCKR) Master Clock Register -#define PMC_PCKR (AT91_CAST(AT91_REG *) 0x00000040) // (PMC_PCKR) Programmable Clock Register -#define PMC_IER (AT91_CAST(AT91_REG *) 0x00000060) // (PMC_IER) Interrupt Enable Register -#define PMC_IDR (AT91_CAST(AT91_REG *) 0x00000064) // (PMC_IDR) Interrupt Disable Register -#define PMC_SR (AT91_CAST(AT91_REG *) 0x00000068) // (PMC_SR) Status Register -#define PMC_IMR (AT91_CAST(AT91_REG *) 0x0000006C) // (PMC_IMR) Interrupt Mask Register - -#endif -// -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register -------- -#define AT91C_PMC_PCK (0x1 << 0) // (PMC) Processor Clock -#define AT91C_PMC_UDP (0x1 << 7) // (PMC) USB Device Port Clock -#define AT91C_PMC_PCK0 (0x1 << 8) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK1 (0x1 << 9) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK2 (0x1 << 10) // (PMC) Programmable Clock Output -// -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register -------- -// -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------- -// -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register -------- -// -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register -------- -// -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register -------- -// -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register -------- -#define AT91C_PMC_CSS (0x3 << 0) // (PMC) Programmable Clock Selection -#define AT91C_PMC_CSS_SLOW_CLK (0x0) // (PMC) Slow Clock is selected -#define AT91C_PMC_CSS_MAIN_CLK (0x1) // (PMC) Main Clock is selected -#define AT91C_PMC_CSS_PLL_CLK (0x3) // (PMC) Clock from PLL is selected -#define AT91C_PMC_PRES (0x7 << 2) // (PMC) Programmable Clock Prescaler -#define AT91C_PMC_PRES_CLK (0x0 << 2) // (PMC) Selected clock -#define AT91C_PMC_PRES_CLK_2 (0x1 << 2) // (PMC) Selected clock divided by 2 -#define AT91C_PMC_PRES_CLK_4 (0x2 << 2) // (PMC) Selected clock divided by 4 -#define AT91C_PMC_PRES_CLK_8 (0x3 << 2) // (PMC) Selected clock divided by 8 -#define AT91C_PMC_PRES_CLK_16 (0x4 << 2) // (PMC) Selected clock divided by 16 -#define AT91C_PMC_PRES_CLK_32 (0x5 << 2) // (PMC) Selected clock divided by 32 -#define AT91C_PMC_PRES_CLK_64 (0x6 << 2) // (PMC) Selected clock divided by 64 -// -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register -------- -// -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------- -#define AT91C_PMC_MOSCS (0x1 << 0) // (PMC) MOSC Status/Enable/Disable/Mask -#define AT91C_PMC_LOCK (0x1 << 2) // (PMC) PLL Status/Enable/Disable/Mask -#define AT91C_PMC_MCKRDY (0x1 << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK0RDY (0x1 << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK1RDY (0x1 << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK2RDY (0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask -// -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register -------- -// -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register -------- -// -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Reset Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RSTC { - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register -} AT91S_RSTC, *AT91PS_RSTC; -#else -#define RSTC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (RSTC_RCR) Reset Control Register -#define RSTC_RSR (AT91_CAST(AT91_REG *) 0x00000004) // (RSTC_RSR) Reset Status Register -#define RSTC_RMR (AT91_CAST(AT91_REG *) 0x00000008) // (RSTC_RMR) Reset Mode Register - -#endif -// -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register -------- -#define AT91C_RSTC_PROCRST (0x1 << 0) // (RSTC) Processor Reset -#define AT91C_RSTC_PERRST (0x1 << 2) // (RSTC) Peripheral Reset -#define AT91C_RSTC_EXTRST (0x1 << 3) // (RSTC) External Reset -#define AT91C_RSTC_KEY (0xFF << 24) // (RSTC) Password -// -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register -------- -#define AT91C_RSTC_URSTS (0x1 << 0) // (RSTC) User Reset Status -#define AT91C_RSTC_BODSTS (0x1 << 1) // (RSTC) Brownout Detection Status -#define AT91C_RSTC_RSTTYP (0x7 << 8) // (RSTC) Reset Type -#define AT91C_RSTC_RSTTYP_POWERUP (0x0 << 8) // (RSTC) Power-up Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WAKEUP (0x1 << 8) // (RSTC) WakeUp Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WATCHDOG (0x2 << 8) // (RSTC) Watchdog Reset. Watchdog overflow occured. -#define AT91C_RSTC_RSTTYP_SOFTWARE (0x3 << 8) // (RSTC) Software Reset. Processor reset required by the software. -#define AT91C_RSTC_RSTTYP_USER (0x4 << 8) // (RSTC) User Reset. NRST pin detected low. -#define AT91C_RSTC_RSTTYP_BROWNOUT (0x5 << 8) // (RSTC) Brownout Reset occured. -#define AT91C_RSTC_NRSTL (0x1 << 16) // (RSTC) NRST pin level -#define AT91C_RSTC_SRCMP (0x1 << 17) // (RSTC) Software Reset Command in Progress. -// -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register -------- -#define AT91C_RSTC_URSTEN (0x1 << 0) // (RSTC) User Reset Enable -#define AT91C_RSTC_URSTIEN (0x1 << 4) // (RSTC) User Reset Interrupt Enable -#define AT91C_RSTC_ERSTL (0xF << 8) // (RSTC) User Reset Length -#define AT91C_RSTC_BODIEN (0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Real Time Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RTTC { - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register -} AT91S_RTTC, *AT91PS_RTTC; -#else -#define RTTC_RTMR (AT91_CAST(AT91_REG *) 0x00000000) // (RTTC_RTMR) Real-time Mode Register -#define RTTC_RTAR (AT91_CAST(AT91_REG *) 0x00000004) // (RTTC_RTAR) Real-time Alarm Register -#define RTTC_RTVR (AT91_CAST(AT91_REG *) 0x00000008) // (RTTC_RTVR) Real-time Value Register -#define RTTC_RTSR (AT91_CAST(AT91_REG *) 0x0000000C) // (RTTC_RTSR) Real-time Status Register - -#endif -// -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register -------- -#define AT91C_RTTC_RTPRES (0xFFFF << 0) // (RTTC) Real-time Timer Prescaler Value -#define AT91C_RTTC_ALMIEN (0x1 << 16) // (RTTC) Alarm Interrupt Enable -#define AT91C_RTTC_RTTINCIEN (0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable -#define AT91C_RTTC_RTTRST (0x1 << 18) // (RTTC) Real Time Timer Restart -// -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register -------- -#define AT91C_RTTC_ALMV (0x0 << 0) // (RTTC) Alarm Value -// -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register -------- -#define AT91C_RTTC_CRTV (0x0 << 0) // (RTTC) Current Real-time Value -// -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register -------- -#define AT91C_RTTC_ALMS (0x1 << 0) // (RTTC) Real-time Alarm Status -#define AT91C_RTTC_RTTINC (0x1 << 1) // (RTTC) Real-time Timer Increment - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Periodic Interval Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PITC { - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register -} AT91S_PITC, *AT91PS_PITC; -#else -#define PITC_PIMR (AT91_CAST(AT91_REG *) 0x00000000) // (PITC_PIMR) Period Interval Mode Register -#define PITC_PISR (AT91_CAST(AT91_REG *) 0x00000004) // (PITC_PISR) Period Interval Status Register -#define PITC_PIVR (AT91_CAST(AT91_REG *) 0x00000008) // (PITC_PIVR) Period Interval Value Register -#define PITC_PIIR (AT91_CAST(AT91_REG *) 0x0000000C) // (PITC_PIIR) Period Interval Image Register - -#endif -// -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register -------- -#define AT91C_PITC_PIV (0xFFFFF << 0) // (PITC) Periodic Interval Value -#define AT91C_PITC_PITEN (0x1 << 24) // (PITC) Periodic Interval Timer Enabled -#define AT91C_PITC_PITIEN (0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable -// -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register -------- -#define AT91C_PITC_PITS (0x1 << 0) // (PITC) Periodic Interval Timer Status -// -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register -------- -#define AT91C_PITC_CPIV (0xFFFFF << 0) // (PITC) Current Periodic Interval Value -#define AT91C_PITC_PICNT (0xFFF << 20) // (PITC) Periodic Interval Counter -// -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Watchdog Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_WDTC { - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register -} AT91S_WDTC, *AT91PS_WDTC; -#else -#define WDTC_WDCR (AT91_CAST(AT91_REG *) 0x00000000) // (WDTC_WDCR) Watchdog Control Register -#define WDTC_WDMR (AT91_CAST(AT91_REG *) 0x00000004) // (WDTC_WDMR) Watchdog Mode Register -#define WDTC_WDSR (AT91_CAST(AT91_REG *) 0x00000008) // (WDTC_WDSR) Watchdog Status Register - -#endif -// -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register -------- -#define AT91C_WDTC_WDRSTT (0x1 << 0) // (WDTC) Watchdog Restart -#define AT91C_WDTC_KEY (0xFF << 24) // (WDTC) Watchdog KEY Password -// -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register -------- -#define AT91C_WDTC_WDV (0xFFF << 0) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDFIEN (0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable -#define AT91C_WDTC_WDRSTEN (0x1 << 13) // (WDTC) Watchdog Reset Enable -#define AT91C_WDTC_WDRPROC (0x1 << 14) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDDIS (0x1 << 15) // (WDTC) Watchdog Disable -#define AT91C_WDTC_WDD (0xFFF << 16) // (WDTC) Watchdog Delta Value -#define AT91C_WDTC_WDDBGHLT (0x1 << 28) // (WDTC) Watchdog Debug Halt -#define AT91C_WDTC_WDIDLEHLT (0x1 << 29) // (WDTC) Watchdog Idle Halt -// -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register -------- -#define AT91C_WDTC_WDUNF (0x1 << 0) // (WDTC) Watchdog Underflow -#define AT91C_WDTC_WDERR (0x1 << 1) // (WDTC) Watchdog Error - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Voltage Regulator Mode Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_VREG { - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_VREG, *AT91PS_VREG; -#else -#define VREG_MR (AT91_CAST(AT91_REG *) 0x00000000) // (VREG_MR) Voltage Regulator Mode Register - -#endif -// -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register -------- -#define AT91C_VREG_PSTDBY (0x1 << 0) // (VREG) Voltage Regulator Power Standby Mode - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Memory Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_MC { - AT91_REG MC_RCR; // MC Remap Control Register - AT91_REG MC_ASR; // MC Abort Status Register - AT91_REG MC_AASR; // MC Abort Address Status Register - AT91_REG Reserved0[21]; // - AT91_REG MC_FMR; // MC Flash Mode Register - AT91_REG MC_FCR; // MC Flash Command Register - AT91_REG MC_FSR; // MC Flash Status Register -} AT91S_MC, *AT91PS_MC; -#else -#define MC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (MC_RCR) MC Remap Control Register -#define MC_ASR (AT91_CAST(AT91_REG *) 0x00000004) // (MC_ASR) MC Abort Status Register -#define MC_AASR (AT91_CAST(AT91_REG *) 0x00000008) // (MC_AASR) MC Abort Address Status Register -#define MC_FMR (AT91_CAST(AT91_REG *) 0x00000060) // (MC_FMR) MC Flash Mode Register -#define MC_FCR (AT91_CAST(AT91_REG *) 0x00000064) // (MC_FCR) MC Flash Command Register -#define MC_FSR (AT91_CAST(AT91_REG *) 0x00000068) // (MC_FSR) MC Flash Status Register - -#endif -// -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register -------- -#define AT91C_MC_RCB (0x1 << 0) // (MC) Remap Command Bit -// -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register -------- -#define AT91C_MC_UNDADD (0x1 << 0) // (MC) Undefined Addess Abort Status -#define AT91C_MC_MISADD (0x1 << 1) // (MC) Misaligned Addess Abort Status -#define AT91C_MC_ABTSZ (0x3 << 8) // (MC) Abort Size Status -#define AT91C_MC_ABTSZ_BYTE (0x0 << 8) // (MC) Byte -#define AT91C_MC_ABTSZ_HWORD (0x1 << 8) // (MC) Half-word -#define AT91C_MC_ABTSZ_WORD (0x2 << 8) // (MC) Word -#define AT91C_MC_ABTTYP (0x3 << 10) // (MC) Abort Type Status -#define AT91C_MC_ABTTYP_DATAR (0x0 << 10) // (MC) Data Read -#define AT91C_MC_ABTTYP_DATAW (0x1 << 10) // (MC) Data Write -#define AT91C_MC_ABTTYP_FETCH (0x2 << 10) // (MC) Code Fetch -#define AT91C_MC_MST0 (0x1 << 16) // (MC) Master 0 Abort Source -#define AT91C_MC_MST1 (0x1 << 17) // (MC) Master 1 Abort Source -#define AT91C_MC_SVMST0 (0x1 << 24) // (MC) Saved Master 0 Abort Source -#define AT91C_MC_SVMST1 (0x1 << 25) // (MC) Saved Master 1 Abort Source -// -------- MC_FMR : (MC Offset: 0x60) MC Flash Mode Register -------- -#define AT91C_MC_FRDY (0x1 << 0) // (MC) Flash Ready -#define AT91C_MC_LOCKE (0x1 << 2) // (MC) Lock Error -#define AT91C_MC_PROGE (0x1 << 3) // (MC) Programming Error -#define AT91C_MC_NEBP (0x1 << 7) // (MC) No Erase Before Programming -#define AT91C_MC_FWS (0x3 << 8) // (MC) Flash Wait State -#define AT91C_MC_FWS_0FWS (0x0 << 8) // (MC) 1 cycle for Read, 2 for Write operations -#define AT91C_MC_FWS_1FWS (0x1 << 8) // (MC) 2 cycles for Read, 3 for Write operations -#define AT91C_MC_FWS_2FWS (0x2 << 8) // (MC) 3 cycles for Read, 4 for Write operations -#define AT91C_MC_FWS_3FWS (0x3 << 8) // (MC) 4 cycles for Read, 4 for Write operations -#define AT91C_MC_FMCN (0xFF << 16) // (MC) Flash Microsecond Cycle Number -// -------- MC_FCR : (MC Offset: 0x64) MC Flash Command Register -------- -#define AT91C_MC_FCMD (0xF << 0) // (MC) Flash Command -#define AT91C_MC_FCMD_START_PROG (0x1) // (MC) Starts the programming of th epage specified by PAGEN. -#define AT91C_MC_FCMD_LOCK (0x2) // (MC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_PROG_AND_LOCK (0x3) // (MC) The lock sequence automatically happens after the programming sequence is completed. -#define AT91C_MC_FCMD_UNLOCK (0x4) // (MC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_ERASE_ALL (0x8) // (MC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled. -#define AT91C_MC_FCMD_SET_GP_NVM (0xB) // (MC) Set General Purpose NVM bits. -#define AT91C_MC_FCMD_CLR_GP_NVM (0xD) // (MC) Clear General Purpose NVM bits. -#define AT91C_MC_FCMD_SET_SECURITY (0xF) // (MC) Set Security Bit. -#define AT91C_MC_PAGEN (0x3FF << 8) // (MC) Page Number -#define AT91C_MC_KEY (0xFF << 24) // (MC) Writing Protect Key -// -------- MC_FSR : (MC Offset: 0x68) MC Flash Command Register -------- -#define AT91C_MC_SECURITY (0x1 << 4) // (MC) Security Bit Status -#define AT91C_MC_GPNVM0 (0x1 << 8) // (MC) Sector 0 Lock Status -#define AT91C_MC_GPNVM1 (0x1 << 9) // (MC) Sector 1 Lock Status -#define AT91C_MC_GPNVM2 (0x1 << 10) // (MC) Sector 2 Lock Status -#define AT91C_MC_GPNVM3 (0x1 << 11) // (MC) Sector 3 Lock Status -#define AT91C_MC_GPNVM4 (0x1 << 12) // (MC) Sector 4 Lock Status -#define AT91C_MC_GPNVM5 (0x1 << 13) // (MC) Sector 5 Lock Status -#define AT91C_MC_GPNVM6 (0x1 << 14) // (MC) Sector 6 Lock Status -#define AT91C_MC_GPNVM7 (0x1 << 15) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS0 (0x1 << 16) // (MC) Sector 0 Lock Status -#define AT91C_MC_LOCKS1 (0x1 << 17) // (MC) Sector 1 Lock Status -#define AT91C_MC_LOCKS2 (0x1 << 18) // (MC) Sector 2 Lock Status -#define AT91C_MC_LOCKS3 (0x1 << 19) // (MC) Sector 3 Lock Status -#define AT91C_MC_LOCKS4 (0x1 << 20) // (MC) Sector 4 Lock Status -#define AT91C_MC_LOCKS5 (0x1 << 21) // (MC) Sector 5 Lock Status -#define AT91C_MC_LOCKS6 (0x1 << 22) // (MC) Sector 6 Lock Status -#define AT91C_MC_LOCKS7 (0x1 << 23) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS8 (0x1 << 24) // (MC) Sector 8 Lock Status -#define AT91C_MC_LOCKS9 (0x1 << 25) // (MC) Sector 9 Lock Status -#define AT91C_MC_LOCKS10 (0x1 << 26) // (MC) Sector 10 Lock Status -#define AT91C_MC_LOCKS11 (0x1 << 27) // (MC) Sector 11 Lock Status -#define AT91C_MC_LOCKS12 (0x1 << 28) // (MC) Sector 12 Lock Status -#define AT91C_MC_LOCKS13 (0x1 << 29) // (MC) Sector 13 Lock Status -#define AT91C_MC_LOCKS14 (0x1 << 30) // (MC) Sector 14 Lock Status -#define AT91C_MC_LOCKS15 (0x1 << 31) // (MC) Sector 15 Lock Status - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Serial Parallel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SPI { - AT91_REG SPI_CR; // Control Register - AT91_REG SPI_MR; // Mode Register - AT91_REG SPI_RDR; // Receive Data Register - AT91_REG SPI_TDR; // Transmit Data Register - AT91_REG SPI_SR; // Status Register - AT91_REG SPI_IER; // Interrupt Enable Register - AT91_REG SPI_IDR; // Interrupt Disable Register - AT91_REG SPI_IMR; // Interrupt Mask Register - AT91_REG Reserved0[4]; // - AT91_REG SPI_CSR[4]; // Chip Select Register - AT91_REG Reserved1[48]; // - AT91_REG SPI_RPR; // Receive Pointer Register - AT91_REG SPI_RCR; // Receive Counter Register - AT91_REG SPI_TPR; // Transmit Pointer Register - AT91_REG SPI_TCR; // Transmit Counter Register - AT91_REG SPI_RNPR; // Receive Next Pointer Register - AT91_REG SPI_RNCR; // Receive Next Counter Register - AT91_REG SPI_TNPR; // Transmit Next Pointer Register - AT91_REG SPI_TNCR; // Transmit Next Counter Register - AT91_REG SPI_PTCR; // PDC Transfer Control Register - AT91_REG SPI_PTSR; // PDC Transfer Status Register -} AT91S_SPI, *AT91PS_SPI; -#else -#define SPI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SPI_CR) Control Register -#define SPI_MR (AT91_CAST(AT91_REG *) 0x00000004) // (SPI_MR) Mode Register -#define SPI_RDR (AT91_CAST(AT91_REG *) 0x00000008) // (SPI_RDR) Receive Data Register -#define SPI_TDR (AT91_CAST(AT91_REG *) 0x0000000C) // (SPI_TDR) Transmit Data Register -#define SPI_SR (AT91_CAST(AT91_REG *) 0x00000010) // (SPI_SR) Status Register -#define SPI_IER (AT91_CAST(AT91_REG *) 0x00000014) // (SPI_IER) Interrupt Enable Register -#define SPI_IDR (AT91_CAST(AT91_REG *) 0x00000018) // (SPI_IDR) Interrupt Disable Register -#define SPI_IMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SPI_IMR) Interrupt Mask Register -#define SPI_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (SPI_CSR) Chip Select Register - -#endif -// -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- -#define AT91C_SPI_SPIEN (0x1 << 0) // (SPI) SPI Enable -#define AT91C_SPI_SPIDIS (0x1 << 1) // (SPI) SPI Disable -#define AT91C_SPI_SWRST (0x1 << 7) // (SPI) SPI Software reset -#define AT91C_SPI_LASTXFER (0x1 << 24) // (SPI) SPI Last Transfer -// -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- -#define AT91C_SPI_MSTR (0x1 << 0) // (SPI) Master/Slave Mode -#define AT91C_SPI_PS (0x1 << 1) // (SPI) Peripheral Select -#define AT91C_SPI_PS_FIXED (0x0 << 1) // (SPI) Fixed Peripheral Select -#define AT91C_SPI_PS_VARIABLE (0x1 << 1) // (SPI) Variable Peripheral Select -#define AT91C_SPI_PCSDEC (0x1 << 2) // (SPI) Chip Select Decode -#define AT91C_SPI_FDIV (0x1 << 3) // (SPI) Clock Selection -#define AT91C_SPI_MODFDIS (0x1 << 4) // (SPI) Mode Fault Detection -#define AT91C_SPI_LLB (0x1 << 7) // (SPI) Clock Selection -#define AT91C_SPI_PCS (0xF << 16) // (SPI) Peripheral Chip Select -#define AT91C_SPI_DLYBCS (0xFF << 24) // (SPI) Delay Between Chip Selects -// -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- -#define AT91C_SPI_RD (0xFFFF << 0) // (SPI) Receive Data -#define AT91C_SPI_RPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- -#define AT91C_SPI_TD (0xFFFF << 0) // (SPI) Transmit Data -#define AT91C_SPI_TPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- -#define AT91C_SPI_RDRF (0x1 << 0) // (SPI) Receive Data Register Full -#define AT91C_SPI_TDRE (0x1 << 1) // (SPI) Transmit Data Register Empty -#define AT91C_SPI_MODF (0x1 << 2) // (SPI) Mode Fault Error -#define AT91C_SPI_OVRES (0x1 << 3) // (SPI) Overrun Error Status -#define AT91C_SPI_ENDRX (0x1 << 4) // (SPI) End of Receiver Transfer -#define AT91C_SPI_ENDTX (0x1 << 5) // (SPI) End of Receiver Transfer -#define AT91C_SPI_RXBUFF (0x1 << 6) // (SPI) RXBUFF Interrupt -#define AT91C_SPI_TXBUFE (0x1 << 7) // (SPI) TXBUFE Interrupt -#define AT91C_SPI_NSSR (0x1 << 8) // (SPI) NSSR Interrupt -#define AT91C_SPI_TXEMPTY (0x1 << 9) // (SPI) TXEMPTY Interrupt -#define AT91C_SPI_SPIENS (0x1 << 16) // (SPI) Enable Status -// -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- -// -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- -// -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- -// -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- -#define AT91C_SPI_CPOL (0x1 << 0) // (SPI) Clock Polarity -#define AT91C_SPI_NCPHA (0x1 << 1) // (SPI) Clock Phase -#define AT91C_SPI_CSAAT (0x1 << 3) // (SPI) Chip Select Active After Transfer -#define AT91C_SPI_BITS (0xF << 4) // (SPI) Bits Per Transfer -#define AT91C_SPI_BITS_8 (0x0 << 4) // (SPI) 8 Bits Per transfer -#define AT91C_SPI_BITS_9 (0x1 << 4) // (SPI) 9 Bits Per transfer -#define AT91C_SPI_BITS_10 (0x2 << 4) // (SPI) 10 Bits Per transfer -#define AT91C_SPI_BITS_11 (0x3 << 4) // (SPI) 11 Bits Per transfer -#define AT91C_SPI_BITS_12 (0x4 << 4) // (SPI) 12 Bits Per transfer -#define AT91C_SPI_BITS_13 (0x5 << 4) // (SPI) 13 Bits Per transfer -#define AT91C_SPI_BITS_14 (0x6 << 4) // (SPI) 14 Bits Per transfer -#define AT91C_SPI_BITS_15 (0x7 << 4) // (SPI) 15 Bits Per transfer -#define AT91C_SPI_BITS_16 (0x8 << 4) // (SPI) 16 Bits Per transfer -#define AT91C_SPI_SCBR (0xFF << 8) // (SPI) Serial Clock Baud Rate -#define AT91C_SPI_DLYBS (0xFF << 16) // (SPI) Delay Before SPCK -#define AT91C_SPI_DLYBCT (0xFF << 24) // (SPI) Delay Between Consecutive Transfers - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Analog to Digital Convertor -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_ADC { - AT91_REG ADC_CR; // ADC Control Register - AT91_REG ADC_MR; // ADC Mode Register - AT91_REG Reserved0[2]; // - AT91_REG ADC_CHER; // ADC Channel Enable Register - AT91_REG ADC_CHDR; // ADC Channel Disable Register - AT91_REG ADC_CHSR; // ADC Channel Status Register - AT91_REG ADC_SR; // ADC Status Register - AT91_REG ADC_LCDR; // ADC Last Converted Data Register - AT91_REG ADC_IER; // ADC Interrupt Enable Register - AT91_REG ADC_IDR; // ADC Interrupt Disable Register - AT91_REG ADC_IMR; // ADC Interrupt Mask Register - AT91_REG ADC_CDR0; // ADC Channel Data Register 0 - AT91_REG ADC_CDR1; // ADC Channel Data Register 1 - AT91_REG ADC_CDR2; // ADC Channel Data Register 2 - AT91_REG ADC_CDR3; // ADC Channel Data Register 3 - AT91_REG ADC_CDR4; // ADC Channel Data Register 4 - AT91_REG ADC_CDR5; // ADC Channel Data Register 5 - AT91_REG ADC_CDR6; // ADC Channel Data Register 6 - AT91_REG ADC_CDR7; // ADC Channel Data Register 7 - AT91_REG Reserved1[44]; // - AT91_REG ADC_RPR; // Receive Pointer Register - AT91_REG ADC_RCR; // Receive Counter Register - AT91_REG ADC_TPR; // Transmit Pointer Register - AT91_REG ADC_TCR; // Transmit Counter Register - AT91_REG ADC_RNPR; // Receive Next Pointer Register - AT91_REG ADC_RNCR; // Receive Next Counter Register - AT91_REG ADC_TNPR; // Transmit Next Pointer Register - AT91_REG ADC_TNCR; // Transmit Next Counter Register - AT91_REG ADC_PTCR; // PDC Transfer Control Register - AT91_REG ADC_PTSR; // PDC Transfer Status Register -} AT91S_ADC, *AT91PS_ADC; -#else -#define ADC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (ADC_CR) ADC Control Register -#define ADC_MR (AT91_CAST(AT91_REG *) 0x00000004) // (ADC_MR) ADC Mode Register -#define ADC_CHER (AT91_CAST(AT91_REG *) 0x00000010) // (ADC_CHER) ADC Channel Enable Register -#define ADC_CHDR (AT91_CAST(AT91_REG *) 0x00000014) // (ADC_CHDR) ADC Channel Disable Register -#define ADC_CHSR (AT91_CAST(AT91_REG *) 0x00000018) // (ADC_CHSR) ADC Channel Status Register -#define ADC_SR (AT91_CAST(AT91_REG *) 0x0000001C) // (ADC_SR) ADC Status Register -#define ADC_LCDR (AT91_CAST(AT91_REG *) 0x00000020) // (ADC_LCDR) ADC Last Converted Data Register -#define ADC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (ADC_IER) ADC Interrupt Enable Register -#define ADC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (ADC_IDR) ADC Interrupt Disable Register -#define ADC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (ADC_IMR) ADC Interrupt Mask Register -#define ADC_CDR0 (AT91_CAST(AT91_REG *) 0x00000030) // (ADC_CDR0) ADC Channel Data Register 0 -#define ADC_CDR1 (AT91_CAST(AT91_REG *) 0x00000034) // (ADC_CDR1) ADC Channel Data Register 1 -#define ADC_CDR2 (AT91_CAST(AT91_REG *) 0x00000038) // (ADC_CDR2) ADC Channel Data Register 2 -#define ADC_CDR3 (AT91_CAST(AT91_REG *) 0x0000003C) // (ADC_CDR3) ADC Channel Data Register 3 -#define ADC_CDR4 (AT91_CAST(AT91_REG *) 0x00000040) // (ADC_CDR4) ADC Channel Data Register 4 -#define ADC_CDR5 (AT91_CAST(AT91_REG *) 0x00000044) // (ADC_CDR5) ADC Channel Data Register 5 -#define ADC_CDR6 (AT91_CAST(AT91_REG *) 0x00000048) // (ADC_CDR6) ADC Channel Data Register 6 -#define ADC_CDR7 (AT91_CAST(AT91_REG *) 0x0000004C) // (ADC_CDR7) ADC Channel Data Register 7 - -#endif -// -------- ADC_CR : (ADC Offset: 0x0) ADC Control Register -------- -#define AT91C_ADC_SWRST (0x1 << 0) // (ADC) Software Reset -#define AT91C_ADC_START (0x1 << 1) // (ADC) Start Conversion -// -------- ADC_MR : (ADC Offset: 0x4) ADC Mode Register -------- -#define AT91C_ADC_TRGEN (0x1 << 0) // (ADC) Trigger Enable -#define AT91C_ADC_TRGEN_DIS (0x0) // (ADC) Hradware triggers are disabled. Starting a conversion is only possible by software -#define AT91C_ADC_TRGEN_EN (0x1) // (ADC) Hardware trigger selected by TRGSEL field is enabled. -#define AT91C_ADC_TRGSEL (0x7 << 1) // (ADC) Trigger Selection -#define AT91C_ADC_TRGSEL_TIOA0 (0x0 << 1) // (ADC) Selected TRGSEL = TIAO0 -#define AT91C_ADC_TRGSEL_TIOA1 (0x1 << 1) // (ADC) Selected TRGSEL = TIAO1 -#define AT91C_ADC_TRGSEL_TIOA2 (0x2 << 1) // (ADC) Selected TRGSEL = TIAO2 -#define AT91C_ADC_TRGSEL_TIOA3 (0x3 << 1) // (ADC) Selected TRGSEL = TIAO3 -#define AT91C_ADC_TRGSEL_TIOA4 (0x4 << 1) // (ADC) Selected TRGSEL = TIAO4 -#define AT91C_ADC_TRGSEL_TIOA5 (0x5 << 1) // (ADC) Selected TRGSEL = TIAO5 -#define AT91C_ADC_TRGSEL_EXT (0x6 << 1) // (ADC) Selected TRGSEL = External Trigger -#define AT91C_ADC_LOWRES (0x1 << 4) // (ADC) Resolution. -#define AT91C_ADC_LOWRES_10_BIT (0x0 << 4) // (ADC) 10-bit resolution -#define AT91C_ADC_LOWRES_8_BIT (0x1 << 4) // (ADC) 8-bit resolution -#define AT91C_ADC_SLEEP (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_SLEEP_NORMAL_MODE (0x0 << 5) // (ADC) Normal Mode -#define AT91C_ADC_SLEEP_MODE (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_PRESCAL (0x3F << 8) // (ADC) Prescaler rate selection -#define AT91C_ADC_STARTUP (0x1F << 16) // (ADC) Startup Time -#define AT91C_ADC_SHTIM (0xF << 24) // (ADC) Sample & Hold Time -// -------- ADC_CHER : (ADC Offset: 0x10) ADC Channel Enable Register -------- -#define AT91C_ADC_CH0 (0x1 << 0) // (ADC) Channel 0 -#define AT91C_ADC_CH1 (0x1 << 1) // (ADC) Channel 1 -#define AT91C_ADC_CH2 (0x1 << 2) // (ADC) Channel 2 -#define AT91C_ADC_CH3 (0x1 << 3) // (ADC) Channel 3 -#define AT91C_ADC_CH4 (0x1 << 4) // (ADC) Channel 4 -#define AT91C_ADC_CH5 (0x1 << 5) // (ADC) Channel 5 -#define AT91C_ADC_CH6 (0x1 << 6) // (ADC) Channel 6 -#define AT91C_ADC_CH7 (0x1 << 7) // (ADC) Channel 7 -// -------- ADC_CHDR : (ADC Offset: 0x14) ADC Channel Disable Register -------- -// -------- ADC_CHSR : (ADC Offset: 0x18) ADC Channel Status Register -------- -// -------- ADC_SR : (ADC Offset: 0x1c) ADC Status Register -------- -#define AT91C_ADC_EOC0 (0x1 << 0) // (ADC) End of Conversion -#define AT91C_ADC_EOC1 (0x1 << 1) // (ADC) End of Conversion -#define AT91C_ADC_EOC2 (0x1 << 2) // (ADC) End of Conversion -#define AT91C_ADC_EOC3 (0x1 << 3) // (ADC) End of Conversion -#define AT91C_ADC_EOC4 (0x1 << 4) // (ADC) End of Conversion -#define AT91C_ADC_EOC5 (0x1 << 5) // (ADC) End of Conversion -#define AT91C_ADC_EOC6 (0x1 << 6) // (ADC) End of Conversion -#define AT91C_ADC_EOC7 (0x1 << 7) // (ADC) End of Conversion -#define AT91C_ADC_OVRE0 (0x1 << 8) // (ADC) Overrun Error -#define AT91C_ADC_OVRE1 (0x1 << 9) // (ADC) Overrun Error -#define AT91C_ADC_OVRE2 (0x1 << 10) // (ADC) Overrun Error -#define AT91C_ADC_OVRE3 (0x1 << 11) // (ADC) Overrun Error -#define AT91C_ADC_OVRE4 (0x1 << 12) // (ADC) Overrun Error -#define AT91C_ADC_OVRE5 (0x1 << 13) // (ADC) Overrun Error -#define AT91C_ADC_OVRE6 (0x1 << 14) // (ADC) Overrun Error -#define AT91C_ADC_OVRE7 (0x1 << 15) // (ADC) Overrun Error -#define AT91C_ADC_DRDY (0x1 << 16) // (ADC) Data Ready -#define AT91C_ADC_GOVRE (0x1 << 17) // (ADC) General Overrun -#define AT91C_ADC_ENDRX (0x1 << 18) // (ADC) End of Receiver Transfer -#define AT91C_ADC_RXBUFF (0x1 << 19) // (ADC) RXBUFF Interrupt -// -------- ADC_LCDR : (ADC Offset: 0x20) ADC Last Converted Data Register -------- -#define AT91C_ADC_LDATA (0x3FF << 0) // (ADC) Last Data Converted -// -------- ADC_IER : (ADC Offset: 0x24) ADC Interrupt Enable Register -------- -// -------- ADC_IDR : (ADC Offset: 0x28) ADC Interrupt Disable Register -------- -// -------- ADC_IMR : (ADC Offset: 0x2c) ADC Interrupt Mask Register -------- -// -------- ADC_CDR0 : (ADC Offset: 0x30) ADC Channel Data Register 0 -------- -#define AT91C_ADC_DATA (0x3FF << 0) // (ADC) Converted Data -// -------- ADC_CDR1 : (ADC Offset: 0x34) ADC Channel Data Register 1 -------- -// -------- ADC_CDR2 : (ADC Offset: 0x38) ADC Channel Data Register 2 -------- -// -------- ADC_CDR3 : (ADC Offset: 0x3c) ADC Channel Data Register 3 -------- -// -------- ADC_CDR4 : (ADC Offset: 0x40) ADC Channel Data Register 4 -------- -// -------- ADC_CDR5 : (ADC Offset: 0x44) ADC Channel Data Register 5 -------- -// -------- ADC_CDR6 : (ADC Offset: 0x48) ADC Channel Data Register 6 -------- -// -------- ADC_CDR7 : (ADC Offset: 0x4c) ADC Channel Data Register 7 -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SSC { - AT91_REG SSC_CR; // Control Register - AT91_REG SSC_CMR; // Clock Mode Register - AT91_REG Reserved0[2]; // - AT91_REG SSC_RCMR; // Receive Clock ModeRegister - AT91_REG SSC_RFMR; // Receive Frame Mode Register - AT91_REG SSC_TCMR; // Transmit Clock Mode Register - AT91_REG SSC_TFMR; // Transmit Frame Mode Register - AT91_REG SSC_RHR; // Receive Holding Register - AT91_REG SSC_THR; // Transmit Holding Register - AT91_REG Reserved1[2]; // - AT91_REG SSC_RSHR; // Receive Sync Holding Register - AT91_REG SSC_TSHR; // Transmit Sync Holding Register - AT91_REG Reserved2[2]; // - AT91_REG SSC_SR; // Status Register - AT91_REG SSC_IER; // Interrupt Enable Register - AT91_REG SSC_IDR; // Interrupt Disable Register - AT91_REG SSC_IMR; // Interrupt Mask Register - AT91_REG Reserved3[44]; // - AT91_REG SSC_RPR; // Receive Pointer Register - AT91_REG SSC_RCR; // Receive Counter Register - AT91_REG SSC_TPR; // Transmit Pointer Register - AT91_REG SSC_TCR; // Transmit Counter Register - AT91_REG SSC_RNPR; // Receive Next Pointer Register - AT91_REG SSC_RNCR; // Receive Next Counter Register - AT91_REG SSC_TNPR; // Transmit Next Pointer Register - AT91_REG SSC_TNCR; // Transmit Next Counter Register - AT91_REG SSC_PTCR; // PDC Transfer Control Register - AT91_REG SSC_PTSR; // PDC Transfer Status Register -} AT91S_SSC, *AT91PS_SSC; -#else -#define SSC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SSC_CR) Control Register -#define SSC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (SSC_CMR) Clock Mode Register -#define SSC_RCMR (AT91_CAST(AT91_REG *) 0x00000010) // (SSC_RCMR) Receive Clock ModeRegister -#define SSC_RFMR (AT91_CAST(AT91_REG *) 0x00000014) // (SSC_RFMR) Receive Frame Mode Register -#define SSC_TCMR (AT91_CAST(AT91_REG *) 0x00000018) // (SSC_TCMR) Transmit Clock Mode Register -#define SSC_TFMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SSC_TFMR) Transmit Frame Mode Register -#define SSC_RHR (AT91_CAST(AT91_REG *) 0x00000020) // (SSC_RHR) Receive Holding Register -#define SSC_THR (AT91_CAST(AT91_REG *) 0x00000024) // (SSC_THR) Transmit Holding Register -#define SSC_RSHR (AT91_CAST(AT91_REG *) 0x00000030) // (SSC_RSHR) Receive Sync Holding Register -#define SSC_TSHR (AT91_CAST(AT91_REG *) 0x00000034) // (SSC_TSHR) Transmit Sync Holding Register -#define SSC_SR (AT91_CAST(AT91_REG *) 0x00000040) // (SSC_SR) Status Register -#define SSC_IER (AT91_CAST(AT91_REG *) 0x00000044) // (SSC_IER) Interrupt Enable Register -#define SSC_IDR (AT91_CAST(AT91_REG *) 0x00000048) // (SSC_IDR) Interrupt Disable Register -#define SSC_IMR (AT91_CAST(AT91_REG *) 0x0000004C) // (SSC_IMR) Interrupt Mask Register - -#endif -// -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register -------- -#define AT91C_SSC_RXEN (0x1 << 0) // (SSC) Receive Enable -#define AT91C_SSC_RXDIS (0x1 << 1) // (SSC) Receive Disable -#define AT91C_SSC_TXEN (0x1 << 8) // (SSC) Transmit Enable -#define AT91C_SSC_TXDIS (0x1 << 9) // (SSC) Transmit Disable -#define AT91C_SSC_SWRST (0x1 << 15) // (SSC) Software Reset -// -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register -------- -#define AT91C_SSC_CKS (0x3 << 0) // (SSC) Receive/Transmit Clock Selection -#define AT91C_SSC_CKS_DIV (0x0) // (SSC) Divided Clock -#define AT91C_SSC_CKS_TK (0x1) // (SSC) TK Clock signal -#define AT91C_SSC_CKS_RK (0x2) // (SSC) RK pin -#define AT91C_SSC_CKO (0x7 << 2) // (SSC) Receive/Transmit Clock Output Mode Selection -#define AT91C_SSC_CKO_NONE (0x0 << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only -#define AT91C_SSC_CKO_CONTINOUS (0x1 << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output -#define AT91C_SSC_CKO_DATA_TX (0x2 << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output -#define AT91C_SSC_CKI (0x1 << 5) // (SSC) Receive/Transmit Clock Inversion -#define AT91C_SSC_START (0xF << 8) // (SSC) Receive/Transmit Start Selection -#define AT91C_SSC_START_CONTINOUS (0x0 << 8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. -#define AT91C_SSC_START_TX (0x1 << 8) // (SSC) Transmit/Receive start -#define AT91C_SSC_START_LOW_RF (0x2 << 8) // (SSC) Detection of a low level on RF input -#define AT91C_SSC_START_HIGH_RF (0x3 << 8) // (SSC) Detection of a high level on RF input -#define AT91C_SSC_START_FALL_RF (0x4 << 8) // (SSC) Detection of a falling edge on RF input -#define AT91C_SSC_START_RISE_RF (0x5 << 8) // (SSC) Detection of a rising edge on RF input -#define AT91C_SSC_START_LEVEL_RF (0x6 << 8) // (SSC) Detection of any level change on RF input -#define AT91C_SSC_START_EDGE_RF (0x7 << 8) // (SSC) Detection of any edge on RF input -#define AT91C_SSC_START_0 (0x8 << 8) // (SSC) Compare 0 -#define AT91C_SSC_STTDLY (0xFF << 16) // (SSC) Receive/Transmit Start Delay -#define AT91C_SSC_PERIOD (0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection -// -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register -------- -#define AT91C_SSC_DATLEN (0x1F << 0) // (SSC) Data Length -#define AT91C_SSC_LOOP (0x1 << 5) // (SSC) Loop Mode -#define AT91C_SSC_MSBF (0x1 << 7) // (SSC) Most Significant Bit First -#define AT91C_SSC_DATNB (0xF << 8) // (SSC) Data Number per Frame -#define AT91C_SSC_FSLEN (0xF << 16) // (SSC) Receive/Transmit Frame Sync length -#define AT91C_SSC_FSOS (0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection -#define AT91C_SSC_FSOS_NONE (0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only -#define AT91C_SSC_FSOS_NEGATIVE (0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse -#define AT91C_SSC_FSOS_POSITIVE (0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse -#define AT91C_SSC_FSOS_LOW (0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer -#define AT91C_SSC_FSOS_HIGH (0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer -#define AT91C_SSC_FSOS_TOGGLE (0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer -#define AT91C_SSC_FSEDGE (0x1 << 24) // (SSC) Frame Sync Edge Detection -// -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register -------- -// -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register -------- -#define AT91C_SSC_DATDEF (0x1 << 5) // (SSC) Data Default Value -#define AT91C_SSC_FSDEN (0x1 << 23) // (SSC) Frame Sync Data Enable -// -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register -------- -#define AT91C_SSC_TXRDY (0x1 << 0) // (SSC) Transmit Ready -#define AT91C_SSC_TXEMPTY (0x1 << 1) // (SSC) Transmit Empty -#define AT91C_SSC_ENDTX (0x1 << 2) // (SSC) End Of Transmission -#define AT91C_SSC_TXBUFE (0x1 << 3) // (SSC) Transmit Buffer Empty -#define AT91C_SSC_RXRDY (0x1 << 4) // (SSC) Receive Ready -#define AT91C_SSC_OVRUN (0x1 << 5) // (SSC) Receive Overrun -#define AT91C_SSC_ENDRX (0x1 << 6) // (SSC) End of Reception -#define AT91C_SSC_RXBUFF (0x1 << 7) // (SSC) Receive Buffer Full -#define AT91C_SSC_TXSYN (0x1 << 10) // (SSC) Transmit Sync -#define AT91C_SSC_RXSYN (0x1 << 11) // (SSC) Receive Sync -#define AT91C_SSC_TXENA (0x1 << 16) // (SSC) Transmit Enable -#define AT91C_SSC_RXENA (0x1 << 17) // (SSC) Receive Enable -// -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register -------- -// -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register -------- -// -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Usart -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_USART { - AT91_REG US_CR; // Control Register - AT91_REG US_MR; // Mode Register - AT91_REG US_IER; // Interrupt Enable Register - AT91_REG US_IDR; // Interrupt Disable Register - AT91_REG US_IMR; // Interrupt Mask Register - AT91_REG US_CSR; // Channel Status Register - AT91_REG US_RHR; // Receiver Holding Register - AT91_REG US_THR; // Transmitter Holding Register - AT91_REG US_BRGR; // Baud Rate Generator Register - AT91_REG US_RTOR; // Receiver Time-out Register - AT91_REG US_TTGR; // Transmitter Time-guard Register - AT91_REG Reserved0[5]; // - AT91_REG US_FIDI; // FI_DI_Ratio Register - AT91_REG US_NER; // Nb Errors Register - AT91_REG Reserved1[1]; // - AT91_REG US_IF; // IRDA_FILTER Register - AT91_REG Reserved2[44]; // - AT91_REG US_RPR; // Receive Pointer Register - AT91_REG US_RCR; // Receive Counter Register - AT91_REG US_TPR; // Transmit Pointer Register - AT91_REG US_TCR; // Transmit Counter Register - AT91_REG US_RNPR; // Receive Next Pointer Register - AT91_REG US_RNCR; // Receive Next Counter Register - AT91_REG US_TNPR; // Transmit Next Pointer Register - AT91_REG US_TNCR; // Transmit Next Counter Register - AT91_REG US_PTCR; // PDC Transfer Control Register - AT91_REG US_PTSR; // PDC Transfer Status Register -} AT91S_USART, *AT91PS_USART; -#else -#define US_CR (AT91_CAST(AT91_REG *) 0x00000000) // (US_CR) Control Register -#define US_MR (AT91_CAST(AT91_REG *) 0x00000004) // (US_MR) Mode Register -#define US_IER (AT91_CAST(AT91_REG *) 0x00000008) // (US_IER) Interrupt Enable Register -#define US_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (US_IDR) Interrupt Disable Register -#define US_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (US_IMR) Interrupt Mask Register -#define US_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (US_CSR) Channel Status Register -#define US_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (US_RHR) Receiver Holding Register -#define US_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (US_THR) Transmitter Holding Register -#define US_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (US_BRGR) Baud Rate Generator Register -#define US_RTOR (AT91_CAST(AT91_REG *) 0x00000024) // (US_RTOR) Receiver Time-out Register -#define US_TTGR (AT91_CAST(AT91_REG *) 0x00000028) // (US_TTGR) Transmitter Time-guard Register -#define US_FIDI (AT91_CAST(AT91_REG *) 0x00000040) // (US_FIDI) FI_DI_Ratio Register -#define US_NER (AT91_CAST(AT91_REG *) 0x00000044) // (US_NER) Nb Errors Register -#define US_IF (AT91_CAST(AT91_REG *) 0x0000004C) // (US_IF) IRDA_FILTER Register - -#endif -// -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_STTBRK (0x1 << 9) // (USART) Start Break -#define AT91C_US_STPBRK (0x1 << 10) // (USART) Stop Break -#define AT91C_US_STTTO (0x1 << 11) // (USART) Start Time-out -#define AT91C_US_SENDA (0x1 << 12) // (USART) Send Address -#define AT91C_US_RSTIT (0x1 << 13) // (USART) Reset Iterations -#define AT91C_US_RSTNACK (0x1 << 14) // (USART) Reset Non Acknowledge -#define AT91C_US_RETTO (0x1 << 15) // (USART) Rearm Time-out -#define AT91C_US_DTREN (0x1 << 16) // (USART) Data Terminal ready Enable -#define AT91C_US_DTRDIS (0x1 << 17) // (USART) Data Terminal ready Disable -#define AT91C_US_RTSEN (0x1 << 18) // (USART) Request to Send enable -#define AT91C_US_RTSDIS (0x1 << 19) // (USART) Request to Send Disable -// -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_USMODE (0xF << 0) // (USART) Usart mode -#define AT91C_US_USMODE_NORMAL (0x0) // (USART) Normal -#define AT91C_US_USMODE_RS485 (0x1) // (USART) RS485 -#define AT91C_US_USMODE_HWHSH (0x2) // (USART) Hardware Handshaking -#define AT91C_US_USMODE_MODEM (0x3) // (USART) Modem -#define AT91C_US_USMODE_ISO7816_0 (0x4) // (USART) ISO7816 protocol: T = 0 -#define AT91C_US_USMODE_ISO7816_1 (0x6) // (USART) ISO7816 protocol: T = 1 -#define AT91C_US_USMODE_IRDA (0x8) // (USART) IrDA -#define AT91C_US_USMODE_SWHSH (0xC) // (USART) Software Handshaking -#define AT91C_US_CLKS (0x3 << 4) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CLKS_CLOCK (0x0 << 4) // (USART) Clock -#define AT91C_US_CLKS_FDIV1 (0x1 << 4) // (USART) fdiv1 -#define AT91C_US_CLKS_SLOW (0x2 << 4) // (USART) slow_clock (ARM) -#define AT91C_US_CLKS_EXT (0x3 << 4) // (USART) External (SCK) -#define AT91C_US_CHRL (0x3 << 6) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CHRL_5_BITS (0x0 << 6) // (USART) Character Length: 5 bits -#define AT91C_US_CHRL_6_BITS (0x1 << 6) // (USART) Character Length: 6 bits -#define AT91C_US_CHRL_7_BITS (0x2 << 6) // (USART) Character Length: 7 bits -#define AT91C_US_CHRL_8_BITS (0x3 << 6) // (USART) Character Length: 8 bits -#define AT91C_US_SYNC (0x1 << 8) // (USART) Synchronous Mode Select -#define AT91C_US_NBSTOP (0x3 << 12) // (USART) Number of Stop bits -#define AT91C_US_NBSTOP_1_BIT (0x0 << 12) // (USART) 1 stop bit -#define AT91C_US_NBSTOP_15_BIT (0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits -#define AT91C_US_NBSTOP_2_BIT (0x2 << 12) // (USART) 2 stop bits -#define AT91C_US_MSBF (0x1 << 16) // (USART) Bit Order -#define AT91C_US_MODE9 (0x1 << 17) // (USART) 9-bit Character length -#define AT91C_US_CKLO (0x1 << 18) // (USART) Clock Output Select -#define AT91C_US_OVER (0x1 << 19) // (USART) Over Sampling Mode -#define AT91C_US_INACK (0x1 << 20) // (USART) Inhibit Non Acknowledge -#define AT91C_US_DSNACK (0x1 << 21) // (USART) Disable Successive NACK -#define AT91C_US_MAX_ITER (0x1 << 24) // (USART) Number of Repetitions -#define AT91C_US_FILTER (0x1 << 28) // (USART) Receive Line Filter -// -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXBRK (0x1 << 2) // (USART) Break Received/End of Break -#define AT91C_US_TIMEOUT (0x1 << 8) // (USART) Receiver Time-out -#define AT91C_US_ITERATION (0x1 << 10) // (USART) Max number of Repetitions Reached -#define AT91C_US_NACK (0x1 << 13) // (USART) Non Acknowledge -#define AT91C_US_RIIC (0x1 << 16) // (USART) Ring INdicator Input Change Flag -#define AT91C_US_DSRIC (0x1 << 17) // (USART) Data Set Ready Input Change Flag -#define AT91C_US_DCDIC (0x1 << 18) // (USART) Data Carrier Flag -#define AT91C_US_CTSIC (0x1 << 19) // (USART) Clear To Send Input Change Flag -// -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register -------- -#define AT91C_US_RI (0x1 << 20) // (USART) Image of RI Input -#define AT91C_US_DSR (0x1 << 21) // (USART) Image of DSR Input -#define AT91C_US_DCD (0x1 << 22) // (USART) Image of DCD Input -#define AT91C_US_CTS (0x1 << 23) // (USART) Image of CTS Input - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Two-wire Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TWI { - AT91_REG TWI_CR; // Control Register - AT91_REG TWI_MMR; // Master Mode Register - AT91_REG Reserved0[1]; // - AT91_REG TWI_IADR; // Internal Address Register - AT91_REG TWI_CWGR; // Clock Waveform Generator Register - AT91_REG Reserved1[3]; // - AT91_REG TWI_SR; // Status Register - AT91_REG TWI_IER; // Interrupt Enable Register - AT91_REG TWI_IDR; // Interrupt Disable Register - AT91_REG TWI_IMR; // Interrupt Mask Register - AT91_REG TWI_RHR; // Receive Holding Register - AT91_REG TWI_THR; // Transmit Holding Register - AT91_REG Reserved2[50]; // - AT91_REG TWI_RPR; // Receive Pointer Register - AT91_REG TWI_RCR; // Receive Counter Register - AT91_REG TWI_TPR; // Transmit Pointer Register - AT91_REG TWI_TCR; // Transmit Counter Register - AT91_REG TWI_RNPR; // Receive Next Pointer Register - AT91_REG TWI_RNCR; // Receive Next Counter Register - AT91_REG TWI_TNPR; // Transmit Next Pointer Register - AT91_REG TWI_TNCR; // Transmit Next Counter Register - AT91_REG TWI_PTCR; // PDC Transfer Control Register - AT91_REG TWI_PTSR; // PDC Transfer Status Register -} AT91S_TWI, *AT91PS_TWI; -#else -#define TWI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (TWI_CR) Control Register -#define TWI_MMR (AT91_CAST(AT91_REG *) 0x00000004) // (TWI_MMR) Master Mode Register -#define TWI_IADR (AT91_CAST(AT91_REG *) 0x0000000C) // (TWI_IADR) Internal Address Register -#define TWI_CWGR (AT91_CAST(AT91_REG *) 0x00000010) // (TWI_CWGR) Clock Waveform Generator Register -#define TWI_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TWI_SR) Status Register -#define TWI_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TWI_IER) Interrupt Enable Register -#define TWI_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TWI_IDR) Interrupt Disable Register -#define TWI_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TWI_IMR) Interrupt Mask Register -#define TWI_RHR (AT91_CAST(AT91_REG *) 0x00000030) // (TWI_RHR) Receive Holding Register -#define TWI_THR (AT91_CAST(AT91_REG *) 0x00000034) // (TWI_THR) Transmit Holding Register - -#endif -// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- -#define AT91C_TWI_START (0x1 << 0) // (TWI) Send a START Condition -#define AT91C_TWI_STOP (0x1 << 1) // (TWI) Send a STOP Condition -#define AT91C_TWI_MSEN (0x1 << 2) // (TWI) TWI Master Transfer Enabled -#define AT91C_TWI_MSDIS (0x1 << 3) // (TWI) TWI Master Transfer Disabled -#define AT91C_TWI_SWRST (0x1 << 7) // (TWI) Software Reset -// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- -#define AT91C_TWI_IADRSZ (0x3 << 8) // (TWI) Internal Device Address Size -#define AT91C_TWI_IADRSZ_NO (0x0 << 8) // (TWI) No internal device address -#define AT91C_TWI_IADRSZ_1_BYTE (0x1 << 8) // (TWI) One-byte internal device address -#define AT91C_TWI_IADRSZ_2_BYTE (0x2 << 8) // (TWI) Two-byte internal device address -#define AT91C_TWI_IADRSZ_3_BYTE (0x3 << 8) // (TWI) Three-byte internal device address -#define AT91C_TWI_MREAD (0x1 << 12) // (TWI) Master Read Direction -#define AT91C_TWI_DADR (0x7F << 16) // (TWI) Device Address -// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- -#define AT91C_TWI_CLDIV (0xFF << 0) // (TWI) Clock Low Divider -#define AT91C_TWI_CHDIV (0xFF << 8) // (TWI) Clock High Divider -#define AT91C_TWI_CKDIV (0x7 << 16) // (TWI) Clock Divider -// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- -#define AT91C_TWI_TXCOMP (0x1 << 0) // (TWI) Transmission Completed -#define AT91C_TWI_RXRDY (0x1 << 1) // (TWI) Receive holding register ReaDY -#define AT91C_TWI_TXRDY (0x1 << 2) // (TWI) Transmit holding register ReaDY -#define AT91C_TWI_OVRE (0x1 << 6) // (TWI) Overrun Error -#define AT91C_TWI_UNRE (0x1 << 7) // (TWI) Underrun Error -#define AT91C_TWI_NACK (0x1 << 8) // (TWI) Not Acknowledged -#define AT91C_TWI_ENDRX (0x1 << 12) // (TWI) -#define AT91C_TWI_ENDTX (0x1 << 13) // (TWI) -#define AT91C_TWI_RXBUFF (0x1 << 14) // (TWI) -#define AT91C_TWI_TXBUFE (0x1 << 15) // (TWI) -// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- -// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- -// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TC { - AT91_REG TC_CCR; // Channel Control Register - AT91_REG TC_CMR; // Channel Mode Register (Capture Mode / Waveform Mode) - AT91_REG Reserved0[2]; // - AT91_REG TC_CV; // Counter Value - AT91_REG TC_RA; // Register A - AT91_REG TC_RB; // Register B - AT91_REG TC_RC; // Register C - AT91_REG TC_SR; // Status Register - AT91_REG TC_IER; // Interrupt Enable Register - AT91_REG TC_IDR; // Interrupt Disable Register - AT91_REG TC_IMR; // Interrupt Mask Register -} AT91S_TC, *AT91PS_TC; -#else -#define TC_CCR (AT91_CAST(AT91_REG *) 0x00000000) // (TC_CCR) Channel Control Register -#define TC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (TC_CMR) Channel Mode Register (Capture Mode / Waveform Mode) -#define TC_CV (AT91_CAST(AT91_REG *) 0x00000010) // (TC_CV) Counter Value -#define TC_RA (AT91_CAST(AT91_REG *) 0x00000014) // (TC_RA) Register A -#define TC_RB (AT91_CAST(AT91_REG *) 0x00000018) // (TC_RB) Register B -#define TC_RC (AT91_CAST(AT91_REG *) 0x0000001C) // (TC_RC) Register C -#define TC_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TC_SR) Status Register -#define TC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TC_IER) Interrupt Enable Register -#define TC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TC_IDR) Interrupt Disable Register -#define TC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TC_IMR) Interrupt Mask Register - -#endif -// -------- TC_CCR : (TC Offset: 0x0) TC Channel Control Register -------- -#define AT91C_TC_CLKEN (0x1 << 0) // (TC) Counter Clock Enable Command -#define AT91C_TC_CLKDIS (0x1 << 1) // (TC) Counter Clock Disable Command -#define AT91C_TC_SWTRG (0x1 << 2) // (TC) Software Trigger Command -// -------- TC_CMR : (TC Offset: 0x4) TC Channel Mode Register: Capture Mode / Waveform Mode -------- -#define AT91C_TC_CLKS (0x7 << 0) // (TC) Clock Selection -#define AT91C_TC_CLKS_TIMER_DIV1_CLOCK (0x0) // (TC) Clock selected: TIMER_DIV1_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV2_CLOCK (0x1) // (TC) Clock selected: TIMER_DIV2_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV3_CLOCK (0x2) // (TC) Clock selected: TIMER_DIV3_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV4_CLOCK (0x3) // (TC) Clock selected: TIMER_DIV4_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV5_CLOCK (0x4) // (TC) Clock selected: TIMER_DIV5_CLOCK -#define AT91C_TC_CLKS_XC0 (0x5) // (TC) Clock selected: XC0 -#define AT91C_TC_CLKS_XC1 (0x6) // (TC) Clock selected: XC1 -#define AT91C_TC_CLKS_XC2 (0x7) // (TC) Clock selected: XC2 -#define AT91C_TC_CLKI (0x1 << 3) // (TC) Clock Invert -#define AT91C_TC_BURST (0x3 << 4) // (TC) Burst Signal Selection -#define AT91C_TC_BURST_NONE (0x0 << 4) // (TC) The clock is not gated by an external signal -#define AT91C_TC_BURST_XC0 (0x1 << 4) // (TC) XC0 is ANDed with the selected clock -#define AT91C_TC_BURST_XC1 (0x2 << 4) // (TC) XC1 is ANDed with the selected clock -#define AT91C_TC_BURST_XC2 (0x3 << 4) // (TC) XC2 is ANDed with the selected clock -#define AT91C_TC_CPCSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RC Compare -#define AT91C_TC_LDBSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RB Loading -#define AT91C_TC_CPCDIS (0x1 << 7) // (TC) Counter Clock Disable with RC Compare -#define AT91C_TC_LDBDIS (0x1 << 7) // (TC) Counter Clock Disabled with RB Loading -#define AT91C_TC_ETRGEDG (0x3 << 8) // (TC) External Trigger Edge Selection -#define AT91C_TC_ETRGEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_ETRGEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_ETRGEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_ETRGEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVTEDG (0x3 << 8) // (TC) External Event Edge Selection -#define AT91C_TC_EEVTEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_EEVTEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_EEVTEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_EEVTEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVT (0x3 << 10) // (TC) External Event Selection -#define AT91C_TC_EEVT_TIOB (0x0 << 10) // (TC) Signal selected as external event: TIOB TIOB direction: input -#define AT91C_TC_EEVT_XC0 (0x1 << 10) // (TC) Signal selected as external event: XC0 TIOB direction: output -#define AT91C_TC_EEVT_XC1 (0x2 << 10) // (TC) Signal selected as external event: XC1 TIOB direction: output -#define AT91C_TC_EEVT_XC2 (0x3 << 10) // (TC) Signal selected as external event: XC2 TIOB direction: output -#define AT91C_TC_ABETRG (0x1 << 10) // (TC) TIOA or TIOB External Trigger Selection -#define AT91C_TC_ENETRG (0x1 << 12) // (TC) External Event Trigger enable -#define AT91C_TC_WAVESEL (0x3 << 13) // (TC) Waveform Selection -#define AT91C_TC_WAVESEL_UP (0x0 << 13) // (TC) UP mode without atomatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN (0x1 << 13) // (TC) UPDOWN mode without automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UP_AUTO (0x2 << 13) // (TC) UP mode with automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN_AUTO (0x3 << 13) // (TC) UPDOWN mode with automatic trigger on RC Compare -#define AT91C_TC_CPCTRG (0x1 << 14) // (TC) RC Compare Trigger Enable -#define AT91C_TC_WAVE (0x1 << 15) // (TC) -#define AT91C_TC_ACPA (0x3 << 16) // (TC) RA Compare Effect on TIOA -#define AT91C_TC_ACPA_NONE (0x0 << 16) // (TC) Effect: none -#define AT91C_TC_ACPA_SET (0x1 << 16) // (TC) Effect: set -#define AT91C_TC_ACPA_CLEAR (0x2 << 16) // (TC) Effect: clear -#define AT91C_TC_ACPA_TOGGLE (0x3 << 16) // (TC) Effect: toggle -#define AT91C_TC_LDRA (0x3 << 16) // (TC) RA Loading Selection -#define AT91C_TC_LDRA_NONE (0x0 << 16) // (TC) Edge: None -#define AT91C_TC_LDRA_RISING (0x1 << 16) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRA_FALLING (0x2 << 16) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRA_BOTH (0x3 << 16) // (TC) Edge: each edge of TIOA -#define AT91C_TC_ACPC (0x3 << 18) // (TC) RC Compare Effect on TIOA -#define AT91C_TC_ACPC_NONE (0x0 << 18) // (TC) Effect: none -#define AT91C_TC_ACPC_SET (0x1 << 18) // (TC) Effect: set -#define AT91C_TC_ACPC_CLEAR (0x2 << 18) // (TC) Effect: clear -#define AT91C_TC_ACPC_TOGGLE (0x3 << 18) // (TC) Effect: toggle -#define AT91C_TC_LDRB (0x3 << 18) // (TC) RB Loading Selection -#define AT91C_TC_LDRB_NONE (0x0 << 18) // (TC) Edge: None -#define AT91C_TC_LDRB_RISING (0x1 << 18) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRB_FALLING (0x2 << 18) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRB_BOTH (0x3 << 18) // (TC) Edge: each edge of TIOA -#define AT91C_TC_AEEVT (0x3 << 20) // (TC) External Event Effect on TIOA -#define AT91C_TC_AEEVT_NONE (0x0 << 20) // (TC) Effect: none -#define AT91C_TC_AEEVT_SET (0x1 << 20) // (TC) Effect: set -#define AT91C_TC_AEEVT_CLEAR (0x2 << 20) // (TC) Effect: clear -#define AT91C_TC_AEEVT_TOGGLE (0x3 << 20) // (TC) Effect: toggle -#define AT91C_TC_ASWTRG (0x3 << 22) // (TC) Software Trigger Effect on TIOA -#define AT91C_TC_ASWTRG_NONE (0x0 << 22) // (TC) Effect: none -#define AT91C_TC_ASWTRG_SET (0x1 << 22) // (TC) Effect: set -#define AT91C_TC_ASWTRG_CLEAR (0x2 << 22) // (TC) Effect: clear -#define AT91C_TC_ASWTRG_TOGGLE (0x3 << 22) // (TC) Effect: toggle -#define AT91C_TC_BCPB (0x3 << 24) // (TC) RB Compare Effect on TIOB -#define AT91C_TC_BCPB_NONE (0x0 << 24) // (TC) Effect: none -#define AT91C_TC_BCPB_SET (0x1 << 24) // (TC) Effect: set -#define AT91C_TC_BCPB_CLEAR (0x2 << 24) // (TC) Effect: clear -#define AT91C_TC_BCPB_TOGGLE (0x3 << 24) // (TC) Effect: toggle -#define AT91C_TC_BCPC (0x3 << 26) // (TC) RC Compare Effect on TIOB -#define AT91C_TC_BCPC_NONE (0x0 << 26) // (TC) Effect: none -#define AT91C_TC_BCPC_SET (0x1 << 26) // (TC) Effect: set -#define AT91C_TC_BCPC_CLEAR (0x2 << 26) // (TC) Effect: clear -#define AT91C_TC_BCPC_TOGGLE (0x3 << 26) // (TC) Effect: toggle -#define AT91C_TC_BEEVT (0x3 << 28) // (TC) External Event Effect on TIOB -#define AT91C_TC_BEEVT_NONE (0x0 << 28) // (TC) Effect: none -#define AT91C_TC_BEEVT_SET (0x1 << 28) // (TC) Effect: set -#define AT91C_TC_BEEVT_CLEAR (0x2 << 28) // (TC) Effect: clear -#define AT91C_TC_BEEVT_TOGGLE (0x3 << 28) // (TC) Effect: toggle -#define AT91C_TC_BSWTRG (0x3 << 30) // (TC) Software Trigger Effect on TIOB -#define AT91C_TC_BSWTRG_NONE (0x0 << 30) // (TC) Effect: none -#define AT91C_TC_BSWTRG_SET (0x1 << 30) // (TC) Effect: set -#define AT91C_TC_BSWTRG_CLEAR (0x2 << 30) // (TC) Effect: clear -#define AT91C_TC_BSWTRG_TOGGLE (0x3 << 30) // (TC) Effect: toggle -// -------- TC_SR : (TC Offset: 0x20) TC Channel Status Register -------- -#define AT91C_TC_COVFS (0x1 << 0) // (TC) Counter Overflow -#define AT91C_TC_LOVRS (0x1 << 1) // (TC) Load Overrun -#define AT91C_TC_CPAS (0x1 << 2) // (TC) RA Compare -#define AT91C_TC_CPBS (0x1 << 3) // (TC) RB Compare -#define AT91C_TC_CPCS (0x1 << 4) // (TC) RC Compare -#define AT91C_TC_LDRAS (0x1 << 5) // (TC) RA Loading -#define AT91C_TC_LDRBS (0x1 << 6) // (TC) RB Loading -#define AT91C_TC_ETRGS (0x1 << 7) // (TC) External Trigger -#define AT91C_TC_CLKSTA (0x1 << 16) // (TC) Clock Enabling -#define AT91C_TC_MTIOA (0x1 << 17) // (TC) TIOA Mirror -#define AT91C_TC_MTIOB (0x1 << 18) // (TC) TIOA Mirror -// -------- TC_IER : (TC Offset: 0x24) TC Channel Interrupt Enable Register -------- -// -------- TC_IDR : (TC Offset: 0x28) TC Channel Interrupt Disable Register -------- -// -------- TC_IMR : (TC Offset: 0x2c) TC Channel Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TCB { - AT91S_TC TCB_TC0; // TC Channel 0 - AT91_REG Reserved0[4]; // - AT91S_TC TCB_TC1; // TC Channel 1 - AT91_REG Reserved1[4]; // - AT91S_TC TCB_TC2; // TC Channel 2 - AT91_REG Reserved2[4]; // - AT91_REG TCB_BCR; // TC Block Control Register - AT91_REG TCB_BMR; // TC Block Mode Register -} AT91S_TCB, *AT91PS_TCB; -#else -#define TCB_BCR (AT91_CAST(AT91_REG *) 0x000000C0) // (TCB_BCR) TC Block Control Register -#define TCB_BMR (AT91_CAST(AT91_REG *) 0x000000C4) // (TCB_BMR) TC Block Mode Register - -#endif -// -------- TCB_BCR : (TCB Offset: 0xc0) TC Block Control Register -------- -#define AT91C_TCB_SYNC (0x1 << 0) // (TCB) Synchro Command -// -------- TCB_BMR : (TCB Offset: 0xc4) TC Block Mode Register -------- -#define AT91C_TCB_TC0XC0S (0x3 << 0) // (TCB) External Clock Signal 0 Selection -#define AT91C_TCB_TC0XC0S_TCLK0 (0x0) // (TCB) TCLK0 connected to XC0 -#define AT91C_TCB_TC0XC0S_NONE (0x1) // (TCB) None signal connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA1 (0x2) // (TCB) TIOA1 connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA2 (0x3) // (TCB) TIOA2 connected to XC0 -#define AT91C_TCB_TC1XC1S (0x3 << 2) // (TCB) External Clock Signal 1 Selection -#define AT91C_TCB_TC1XC1S_TCLK1 (0x0 << 2) // (TCB) TCLK1 connected to XC1 -#define AT91C_TCB_TC1XC1S_NONE (0x1 << 2) // (TCB) None signal connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA0 (0x2 << 2) // (TCB) TIOA0 connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA2 (0x3 << 2) // (TCB) TIOA2 connected to XC1 -#define AT91C_TCB_TC2XC2S (0x3 << 4) // (TCB) External Clock Signal 2 Selection -#define AT91C_TCB_TC2XC2S_TCLK2 (0x0 << 4) // (TCB) TCLK2 connected to XC2 -#define AT91C_TCB_TC2XC2S_NONE (0x1 << 4) // (TCB) None signal connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA0 (0x2 << 4) // (TCB) TIOA0 connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA1 (0x3 << 4) // (TCB) TIOA2 connected to XC2 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR PWMC Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC_CH { - AT91_REG PWMC_CMR; // Channel Mode Register - AT91_REG PWMC_CDTYR; // Channel Duty Cycle Register - AT91_REG PWMC_CPRDR; // Channel Period Register - AT91_REG PWMC_CCNTR; // Channel Counter Register - AT91_REG PWMC_CUPDR; // Channel Update Register - AT91_REG PWMC_Reserved[3]; // Reserved -} AT91S_PWMC_CH, *AT91PS_PWMC_CH; -#else -#define PWMC_CMR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_CMR) Channel Mode Register -#define PWMC_CDTYR (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_CDTYR) Channel Duty Cycle Register -#define PWMC_CPRDR (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_CPRDR) Channel Period Register -#define PWMC_CCNTR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_CCNTR) Channel Counter Register -#define PWMC_CUPDR (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_CUPDR) Channel Update Register -#define Reserved (AT91_CAST(AT91_REG *) 0x00000014) // (Reserved) Reserved - -#endif -// -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register -------- -#define AT91C_PWMC_CPRE (0xF << 0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx -#define AT91C_PWMC_CPRE_MCK (0x0) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKA (0xB) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKB (0xC) // (PWMC_CH) -#define AT91C_PWMC_CALG (0x1 << 8) // (PWMC_CH) Channel Alignment -#define AT91C_PWMC_CPOL (0x1 << 9) // (PWMC_CH) Channel Polarity -#define AT91C_PWMC_CPD (0x1 << 10) // (PWMC_CH) Channel Update Period -// -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register -------- -#define AT91C_PWMC_CDTY (0x0 << 0) // (PWMC_CH) Channel Duty Cycle -// -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register -------- -#define AT91C_PWMC_CPRD (0x0 << 0) // (PWMC_CH) Channel Period -// -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register -------- -#define AT91C_PWMC_CCNT (0x0 << 0) // (PWMC_CH) Channel Counter -// -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register -------- -#define AT91C_PWMC_CUPD (0x0 << 0) // (PWMC_CH) Channel Update - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC { - AT91_REG PWMC_MR; // PWMC Mode Register - AT91_REG PWMC_ENA; // PWMC Enable Register - AT91_REG PWMC_DIS; // PWMC Disable Register - AT91_REG PWMC_SR; // PWMC Status Register - AT91_REG PWMC_IER; // PWMC Interrupt Enable Register - AT91_REG PWMC_IDR; // PWMC Interrupt Disable Register - AT91_REG PWMC_IMR; // PWMC Interrupt Mask Register - AT91_REG PWMC_ISR; // PWMC Interrupt Status Register - AT91_REG Reserved0[55]; // - AT91_REG PWMC_VR; // PWMC Version Register - AT91_REG Reserved1[64]; // - AT91S_PWMC_CH PWMC_CH[4]; // PWMC Channel -} AT91S_PWMC, *AT91PS_PWMC; -#else -#define PWMC_MR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_MR) PWMC Mode Register -#define PWMC_ENA (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_ENA) PWMC Enable Register -#define PWMC_DIS (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_DIS) PWMC Disable Register -#define PWMC_SR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_SR) PWMC Status Register -#define PWMC_IER (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_IER) PWMC Interrupt Enable Register -#define PWMC_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (PWMC_IDR) PWMC Interrupt Disable Register -#define PWMC_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (PWMC_IMR) PWMC Interrupt Mask Register -#define PWMC_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (PWMC_ISR) PWMC Interrupt Status Register -#define PWMC_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (PWMC_VR) PWMC Version Register - -#endif -// -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register -------- -#define AT91C_PWMC_DIVA (0xFF << 0) // (PWMC) CLKA divide factor. -#define AT91C_PWMC_PREA (0xF << 8) // (PWMC) Divider Input Clock Prescaler A -#define AT91C_PWMC_PREA_MCK (0x0 << 8) // (PWMC) -#define AT91C_PWMC_DIVB (0xFF << 16) // (PWMC) CLKB divide factor. -#define AT91C_PWMC_PREB (0xF << 24) // (PWMC) Divider Input Clock Prescaler B -#define AT91C_PWMC_PREB_MCK (0x0 << 24) // (PWMC) -// -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register -------- -#define AT91C_PWMC_CHID0 (0x1 << 0) // (PWMC) Channel ID 0 -#define AT91C_PWMC_CHID1 (0x1 << 1) // (PWMC) Channel ID 1 -#define AT91C_PWMC_CHID2 (0x1 << 2) // (PWMC) Channel ID 2 -#define AT91C_PWMC_CHID3 (0x1 << 3) // (PWMC) Channel ID 3 -// -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register -------- -// -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register -------- -// -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register -------- -// -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register -------- -// -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register -------- -// -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR USB Device Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_UDP { - AT91_REG UDP_NUM; // Frame Number Register - AT91_REG UDP_GLBSTATE; // Global State Register - AT91_REG UDP_FADDR; // Function Address Register - AT91_REG Reserved0[1]; // - AT91_REG UDP_IER; // Interrupt Enable Register - AT91_REG UDP_IDR; // Interrupt Disable Register - AT91_REG UDP_IMR; // Interrupt Mask Register - AT91_REG UDP_ISR; // Interrupt Status Register - AT91_REG UDP_ICR; // Interrupt Clear Register - AT91_REG Reserved1[1]; // - AT91_REG UDP_RSTEP; // Reset Endpoint Register - AT91_REG Reserved2[1]; // - AT91_REG UDP_CSR[4]; // Endpoint Control and Status Register - AT91_REG Reserved3[4]; // - AT91_REG UDP_FDR[4]; // Endpoint FIFO Data Register - AT91_REG Reserved4[5]; // - AT91_REG UDP_TXVC; // Transceiver Control Register -} AT91S_UDP, *AT91PS_UDP; -#else -#define UDP_FRM_NUM (AT91_CAST(AT91_REG *) 0x00000000) // (UDP_FRM_NUM) Frame Number Register -#define UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0x00000004) // (UDP_GLBSTATE) Global State Register -#define UDP_FADDR (AT91_CAST(AT91_REG *) 0x00000008) // (UDP_FADDR) Function Address Register -#define UDP_IER (AT91_CAST(AT91_REG *) 0x00000010) // (UDP_IER) Interrupt Enable Register -#define UDP_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (UDP_IDR) Interrupt Disable Register -#define UDP_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (UDP_IMR) Interrupt Mask Register -#define UDP_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (UDP_ISR) Interrupt Status Register -#define UDP_ICR (AT91_CAST(AT91_REG *) 0x00000020) // (UDP_ICR) Interrupt Clear Register -#define UDP_RSTEP (AT91_CAST(AT91_REG *) 0x00000028) // (UDP_RSTEP) Reset Endpoint Register -#define UDP_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (UDP_CSR) Endpoint Control and Status Register -#define UDP_FDR (AT91_CAST(AT91_REG *) 0x00000050) // (UDP_FDR) Endpoint FIFO Data Register -#define UDP_TXVC (AT91_CAST(AT91_REG *) 0x00000074) // (UDP_TXVC) Transceiver Control Register - -#endif -// -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register -------- -#define AT91C_UDP_FRM_NUM (0x7FF << 0) // (UDP) Frame Number as Defined in the Packet Field Formats -#define AT91C_UDP_FRM_ERR (0x1 << 16) // (UDP) Frame Error -#define AT91C_UDP_FRM_OK (0x1 << 17) // (UDP) Frame OK -// -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register -------- -#define AT91C_UDP_FADDEN (0x1 << 0) // (UDP) Function Address Enable -#define AT91C_UDP_CONFG (0x1 << 1) // (UDP) Configured -#define AT91C_UDP_ESR (0x1 << 2) // (UDP) Enable Send Resume -#define AT91C_UDP_RSMINPR (0x1 << 3) // (UDP) A Resume Has Been Sent to the Host -#define AT91C_UDP_RMWUPE (0x1 << 4) // (UDP) Remote Wake Up Enable -// -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register -------- -#define AT91C_UDP_FADD (0xFF << 0) // (UDP) Function Address Value -#define AT91C_UDP_FEN (0x1 << 8) // (UDP) Function Enable -// -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register -------- -#define AT91C_UDP_EPINT0 (0x1 << 0) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT1 (0x1 << 1) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT2 (0x1 << 2) // (UDP) Endpoint 2 Interrupt -#define AT91C_UDP_EPINT3 (0x1 << 3) // (UDP) Endpoint 3 Interrupt -#define AT91C_UDP_RXSUSP (0x1 << 8) // (UDP) USB Suspend Interrupt -#define AT91C_UDP_RXRSM (0x1 << 9) // (UDP) USB Resume Interrupt -#define AT91C_UDP_EXTRSM (0x1 << 10) // (UDP) USB External Resume Interrupt -#define AT91C_UDP_SOFINT (0x1 << 11) // (UDP) USB Start Of frame Interrupt -#define AT91C_UDP_WAKEUP (0x1 << 13) // (UDP) USB Resume Interrupt -// -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register -------- -// -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register -------- -// -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register -------- -#define AT91C_UDP_ENDBUSRES (0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt -// -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register -------- -// -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register -------- -#define AT91C_UDP_EP0 (0x1 << 0) // (UDP) Reset Endpoint 0 -#define AT91C_UDP_EP1 (0x1 << 1) // (UDP) Reset Endpoint 1 -#define AT91C_UDP_EP2 (0x1 << 2) // (UDP) Reset Endpoint 2 -#define AT91C_UDP_EP3 (0x1 << 3) // (UDP) Reset Endpoint 3 -// -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register -------- -#define AT91C_UDP_TXCOMP (0x1 << 0) // (UDP) Generates an IN packet with data previously written in the DPR -#define AT91C_UDP_RX_DATA_BK0 (0x1 << 1) // (UDP) Receive Data Bank 0 -#define AT91C_UDP_RXSETUP (0x1 << 2) // (UDP) Sends STALL to the Host (Control endpoints) -#define AT91C_UDP_ISOERROR (0x1 << 3) // (UDP) Isochronous error (Isochronous endpoints) -#define AT91C_UDP_STALLSENT (0x1 << 3) // (UDP) Stall sent (Control, bulk, interrupt endpoints) -#define AT91C_UDP_TXPKTRDY (0x1 << 4) // (UDP) Transmit Packet Ready -#define AT91C_UDP_FORCESTALL (0x1 << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints). -#define AT91C_UDP_RX_DATA_BK1 (0x1 << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes). -#define AT91C_UDP_DIR (0x1 << 7) // (UDP) Transfer Direction -#define AT91C_UDP_EPTYPE (0x7 << 8) // (UDP) Endpoint type -#define AT91C_UDP_EPTYPE_CTRL (0x0 << 8) // (UDP) Control -#define AT91C_UDP_EPTYPE_ISO_OUT (0x1 << 8) // (UDP) Isochronous OUT -#define AT91C_UDP_EPTYPE_BULK_OUT (0x2 << 8) // (UDP) Bulk OUT -#define AT91C_UDP_EPTYPE_INT_OUT (0x3 << 8) // (UDP) Interrupt OUT -#define AT91C_UDP_EPTYPE_ISO_IN (0x5 << 8) // (UDP) Isochronous IN -#define AT91C_UDP_EPTYPE_BULK_IN (0x6 << 8) // (UDP) Bulk IN -#define AT91C_UDP_EPTYPE_INT_IN (0x7 << 8) // (UDP) Interrupt IN -#define AT91C_UDP_DTGLE (0x1 << 11) // (UDP) Data Toggle -#define AT91C_UDP_EPEDS (0x1 << 15) // (UDP) Endpoint Enable Disable -#define AT91C_UDP_RXBYTECNT (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO -// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register -------- -#define AT91C_UDP_TXVDIS (0x1 << 8) // (UDP) - -// ***************************************************************************** -// REGISTER ADDRESS DEFINITION FOR AT91SAM7S256 -// ***************************************************************************** -// ========== Register definition for SYS peripheral ========== -// ========== Register definition for AIC peripheral ========== -#define AT91C_AIC_IVR (AT91_CAST(AT91_REG *) 0xFFFFF100) // (AIC) IRQ Vector Register -#define AT91C_AIC_SMR (AT91_CAST(AT91_REG *) 0xFFFFF000) // (AIC) Source Mode Register -#define AT91C_AIC_FVR (AT91_CAST(AT91_REG *) 0xFFFFF104) // (AIC) FIQ Vector Register -#define AT91C_AIC_DCR (AT91_CAST(AT91_REG *) 0xFFFFF138) // (AIC) Debug Control Register (Protect) -#define AT91C_AIC_EOICR (AT91_CAST(AT91_REG *) 0xFFFFF130) // (AIC) End of Interrupt Command Register -#define AT91C_AIC_SVR (AT91_CAST(AT91_REG *) 0xFFFFF080) // (AIC) Source Vector Register -#define AT91C_AIC_FFSR (AT91_CAST(AT91_REG *) 0xFFFFF148) // (AIC) Fast Forcing Status Register -#define AT91C_AIC_ICCR (AT91_CAST(AT91_REG *) 0xFFFFF128) // (AIC) Interrupt Clear Command Register -#define AT91C_AIC_ISR (AT91_CAST(AT91_REG *) 0xFFFFF108) // (AIC) Interrupt Status Register -#define AT91C_AIC_IMR (AT91_CAST(AT91_REG *) 0xFFFFF110) // (AIC) Interrupt Mask Register -#define AT91C_AIC_IPR (AT91_CAST(AT91_REG *) 0xFFFFF10C) // (AIC) Interrupt Pending Register -#define AT91C_AIC_FFER (AT91_CAST(AT91_REG *) 0xFFFFF140) // (AIC) Fast Forcing Enable Register -#define AT91C_AIC_IECR (AT91_CAST(AT91_REG *) 0xFFFFF120) // (AIC) Interrupt Enable Command Register -#define AT91C_AIC_ISCR (AT91_CAST(AT91_REG *) 0xFFFFF12C) // (AIC) Interrupt Set Command Register -#define AT91C_AIC_FFDR (AT91_CAST(AT91_REG *) 0xFFFFF144) // (AIC) Fast Forcing Disable Register -#define AT91C_AIC_CISR (AT91_CAST(AT91_REG *) 0xFFFFF114) // (AIC) Core Interrupt Status Register -#define AT91C_AIC_IDCR (AT91_CAST(AT91_REG *) 0xFFFFF124) // (AIC) Interrupt Disable Command Register -#define AT91C_AIC_SPU (AT91_CAST(AT91_REG *) 0xFFFFF134) // (AIC) Spurious Vector Register -// ========== Register definition for PDC_DBGU peripheral ========== -#define AT91C_DBGU_TCR (AT91_CAST(AT91_REG *) 0xFFFFF30C) // (PDC_DBGU) Transmit Counter Register -#define AT91C_DBGU_RNPR (AT91_CAST(AT91_REG *) 0xFFFFF310) // (PDC_DBGU) Receive Next Pointer Register -#define AT91C_DBGU_TNPR (AT91_CAST(AT91_REG *) 0xFFFFF318) // (PDC_DBGU) Transmit Next Pointer Register -#define AT91C_DBGU_TPR (AT91_CAST(AT91_REG *) 0xFFFFF308) // (PDC_DBGU) Transmit Pointer Register -#define AT91C_DBGU_RPR (AT91_CAST(AT91_REG *) 0xFFFFF300) // (PDC_DBGU) Receive Pointer Register -#define AT91C_DBGU_RCR (AT91_CAST(AT91_REG *) 0xFFFFF304) // (PDC_DBGU) Receive Counter Register -#define AT91C_DBGU_RNCR (AT91_CAST(AT91_REG *) 0xFFFFF314) // (PDC_DBGU) Receive Next Counter Register -#define AT91C_DBGU_PTCR (AT91_CAST(AT91_REG *) 0xFFFFF320) // (PDC_DBGU) PDC Transfer Control Register -#define AT91C_DBGU_PTSR (AT91_CAST(AT91_REG *) 0xFFFFF324) // (PDC_DBGU) PDC Transfer Status Register -#define AT91C_DBGU_TNCR (AT91_CAST(AT91_REG *) 0xFFFFF31C) // (PDC_DBGU) Transmit Next Counter Register -// ========== Register definition for DBGU peripheral ========== -#define AT91C_DBGU_EXID (AT91_CAST(AT91_REG *) 0xFFFFF244) // (DBGU) Chip ID Extension Register -#define AT91C_DBGU_BRGR (AT91_CAST(AT91_REG *) 0xFFFFF220) // (DBGU) Baud Rate Generator Register -#define AT91C_DBGU_IDR (AT91_CAST(AT91_REG *) 0xFFFFF20C) // (DBGU) Interrupt Disable Register -#define AT91C_DBGU_CSR (AT91_CAST(AT91_REG *) 0xFFFFF214) // (DBGU) Channel Status Register -#define AT91C_DBGU_CIDR (AT91_CAST(AT91_REG *) 0xFFFFF240) // (DBGU) Chip ID Register -#define AT91C_DBGU_MR (AT91_CAST(AT91_REG *) 0xFFFFF204) // (DBGU) Mode Register -#define AT91C_DBGU_IMR (AT91_CAST(AT91_REG *) 0xFFFFF210) // (DBGU) Interrupt Mask Register -#define AT91C_DBGU_CR (AT91_CAST(AT91_REG *) 0xFFFFF200) // (DBGU) Control Register -#define AT91C_DBGU_FNTR (AT91_CAST(AT91_REG *) 0xFFFFF248) // (DBGU) Force NTRST Register -#define AT91C_DBGU_THR (AT91_CAST(AT91_REG *) 0xFFFFF21C) // (DBGU) Transmitter Holding Register -#define AT91C_DBGU_RHR (AT91_CAST(AT91_REG *) 0xFFFFF218) // (DBGU) Receiver Holding Register -#define AT91C_DBGU_IER (AT91_CAST(AT91_REG *) 0xFFFFF208) // (DBGU) Interrupt Enable Register -// ========== Register definition for PIOA peripheral ========== -#define AT91C_PIOA_ODR (AT91_CAST(AT91_REG *) 0xFFFFF414) // (PIOA) Output Disable Registerr -#define AT91C_PIOA_SODR (AT91_CAST(AT91_REG *) 0xFFFFF430) // (PIOA) Set Output Data Register -#define AT91C_PIOA_ISR (AT91_CAST(AT91_REG *) 0xFFFFF44C) // (PIOA) Interrupt Status Register -#define AT91C_PIOA_ABSR (AT91_CAST(AT91_REG *) 0xFFFFF478) // (PIOA) AB Select Status Register -#define AT91C_PIOA_IER (AT91_CAST(AT91_REG *) 0xFFFFF440) // (PIOA) Interrupt Enable Register -#define AT91C_PIOA_PPUDR (AT91_CAST(AT91_REG *) 0xFFFFF460) // (PIOA) Pull-up Disable Register -#define AT91C_PIOA_IMR (AT91_CAST(AT91_REG *) 0xFFFFF448) // (PIOA) Interrupt Mask Register -#define AT91C_PIOA_PER (AT91_CAST(AT91_REG *) 0xFFFFF400) // (PIOA) PIO Enable Register -#define AT91C_PIOA_IFDR (AT91_CAST(AT91_REG *) 0xFFFFF424) // (PIOA) Input Filter Disable Register -#define AT91C_PIOA_OWDR (AT91_CAST(AT91_REG *) 0xFFFFF4A4) // (PIOA) Output Write Disable Register -#define AT91C_PIOA_MDSR (AT91_CAST(AT91_REG *) 0xFFFFF458) // (PIOA) Multi-driver Status Register -#define AT91C_PIOA_IDR (AT91_CAST(AT91_REG *) 0xFFFFF444) // (PIOA) Interrupt Disable Register -#define AT91C_PIOA_ODSR (AT91_CAST(AT91_REG *) 0xFFFFF438) // (PIOA) Output Data Status Register -#define AT91C_PIOA_PPUSR (AT91_CAST(AT91_REG *) 0xFFFFF468) // (PIOA) Pull-up Status Register -#define AT91C_PIOA_OWSR (AT91_CAST(AT91_REG *) 0xFFFFF4A8) // (PIOA) Output Write Status Register -#define AT91C_PIOA_BSR (AT91_CAST(AT91_REG *) 0xFFFFF474) // (PIOA) Select B Register -#define AT91C_PIOA_OWER (AT91_CAST(AT91_REG *) 0xFFFFF4A0) // (PIOA) Output Write Enable Register -#define AT91C_PIOA_IFER (AT91_CAST(AT91_REG *) 0xFFFFF420) // (PIOA) Input Filter Enable Register -#define AT91C_PIOA_PDSR (AT91_CAST(AT91_REG *) 0xFFFFF43C) // (PIOA) Pin Data Status Register -#define AT91C_PIOA_PPUER (AT91_CAST(AT91_REG *) 0xFFFFF464) // (PIOA) Pull-up Enable Register -#define AT91C_PIOA_OSR (AT91_CAST(AT91_REG *) 0xFFFFF418) // (PIOA) Output Status Register -#define AT91C_PIOA_ASR (AT91_CAST(AT91_REG *) 0xFFFFF470) // (PIOA) Select A Register -#define AT91C_PIOA_MDDR (AT91_CAST(AT91_REG *) 0xFFFFF454) // (PIOA) Multi-driver Disable Register -#define AT91C_PIOA_CODR (AT91_CAST(AT91_REG *) 0xFFFFF434) // (PIOA) Clear Output Data Register -#define AT91C_PIOA_MDER (AT91_CAST(AT91_REG *) 0xFFFFF450) // (PIOA) Multi-driver Enable Register -#define AT91C_PIOA_PDR (AT91_CAST(AT91_REG *) 0xFFFFF404) // (PIOA) PIO Disable Register -#define AT91C_PIOA_IFSR (AT91_CAST(AT91_REG *) 0xFFFFF428) // (PIOA) Input Filter Status Register -#define AT91C_PIOA_OER (AT91_CAST(AT91_REG *) 0xFFFFF410) // (PIOA) Output Enable Register -#define AT91C_PIOA_PSR (AT91_CAST(AT91_REG *) 0xFFFFF408) // (PIOA) PIO Status Register -// ========== Register definition for CKGR peripheral ========== -#define AT91C_CKGR_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (CKGR) Main Oscillator Register -#define AT91C_CKGR_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (CKGR) PLL Register -#define AT91C_CKGR_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (CKGR) Main Clock Frequency Register -// ========== Register definition for PMC peripheral ========== -#define AT91C_PMC_IDR (AT91_CAST(AT91_REG *) 0xFFFFFC64) // (PMC) Interrupt Disable Register -#define AT91C_PMC_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (PMC) Main Oscillator Register -#define AT91C_PMC_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (PMC) PLL Register -#define AT91C_PMC_PCER (AT91_CAST(AT91_REG *) 0xFFFFFC10) // (PMC) Peripheral Clock Enable Register -#define AT91C_PMC_PCKR (AT91_CAST(AT91_REG *) 0xFFFFFC40) // (PMC) Programmable Clock Register -#define AT91C_PMC_MCKR (AT91_CAST(AT91_REG *) 0xFFFFFC30) // (PMC) Master Clock Register -#define AT91C_PMC_SCDR (AT91_CAST(AT91_REG *) 0xFFFFFC04) // (PMC) System Clock Disable Register -#define AT91C_PMC_PCDR (AT91_CAST(AT91_REG *) 0xFFFFFC14) // (PMC) Peripheral Clock Disable Register -#define AT91C_PMC_SCSR (AT91_CAST(AT91_REG *) 0xFFFFFC08) // (PMC) System Clock Status Register -#define AT91C_PMC_PCSR (AT91_CAST(AT91_REG *) 0xFFFFFC18) // (PMC) Peripheral Clock Status Register -#define AT91C_PMC_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (PMC) Main Clock Frequency Register -#define AT91C_PMC_SCER (AT91_CAST(AT91_REG *) 0xFFFFFC00) // (PMC) System Clock Enable Register -#define AT91C_PMC_IMR (AT91_CAST(AT91_REG *) 0xFFFFFC6C) // (PMC) Interrupt Mask Register -#define AT91C_PMC_IER (AT91_CAST(AT91_REG *) 0xFFFFFC60) // (PMC) Interrupt Enable Register -#define AT91C_PMC_SR (AT91_CAST(AT91_REG *) 0xFFFFFC68) // (PMC) Status Register -// ========== Register definition for RSTC peripheral ========== -#define AT91C_RSTC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFD00) // (RSTC) Reset Control Register -#define AT91C_RSTC_RMR (AT91_CAST(AT91_REG *) 0xFFFFFD08) // (RSTC) Reset Mode Register -#define AT91C_RSTC_RSR (AT91_CAST(AT91_REG *) 0xFFFFFD04) // (RSTC) Reset Status Register -// ========== Register definition for RTTC peripheral ========== -#define AT91C_RTTC_RTSR (AT91_CAST(AT91_REG *) 0xFFFFFD2C) // (RTTC) Real-time Status Register -#define AT91C_RTTC_RTMR (AT91_CAST(AT91_REG *) 0xFFFFFD20) // (RTTC) Real-time Mode Register -#define AT91C_RTTC_RTVR (AT91_CAST(AT91_REG *) 0xFFFFFD28) // (RTTC) Real-time Value Register -#define AT91C_RTTC_RTAR (AT91_CAST(AT91_REG *) 0xFFFFFD24) // (RTTC) Real-time Alarm Register -// ========== Register definition for PITC peripheral ========== -#define AT91C_PITC_PIVR (AT91_CAST(AT91_REG *) 0xFFFFFD38) // (PITC) Period Interval Value Register -#define AT91C_PITC_PISR (AT91_CAST(AT91_REG *) 0xFFFFFD34) // (PITC) Period Interval Status Register -#define AT91C_PITC_PIIR (AT91_CAST(AT91_REG *) 0xFFFFFD3C) // (PITC) Period Interval Image Register -#define AT91C_PITC_PIMR (AT91_CAST(AT91_REG *) 0xFFFFFD30) // (PITC) Period Interval Mode Register -// ========== Register definition for WDTC peripheral ========== -#define AT91C_WDTC_WDCR (AT91_CAST(AT91_REG *) 0xFFFFFD40) // (WDTC) Watchdog Control Register -#define AT91C_WDTC_WDSR (AT91_CAST(AT91_REG *) 0xFFFFFD48) // (WDTC) Watchdog Status Register -#define AT91C_WDTC_WDMR (AT91_CAST(AT91_REG *) 0xFFFFFD44) // (WDTC) Watchdog Mode Register -// ========== Register definition for VREG peripheral ========== -#define AT91C_VREG_MR (AT91_CAST(AT91_REG *) 0xFFFFFD60) // (VREG) Voltage Regulator Mode Register -// ========== Register definition for MC peripheral ========== -#define AT91C_MC_ASR (AT91_CAST(AT91_REG *) 0xFFFFFF04) // (MC) MC Abort Status Register -#define AT91C_MC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFF00) // (MC) MC Remap Control Register -#define AT91C_MC_FCR (AT91_CAST(AT91_REG *) 0xFFFFFF64) // (MC) MC Flash Command Register -#define AT91C_MC_AASR (AT91_CAST(AT91_REG *) 0xFFFFFF08) // (MC) MC Abort Address Status Register -#define AT91C_MC_FSR (AT91_CAST(AT91_REG *) 0xFFFFFF68) // (MC) MC Flash Status Register -#define AT91C_MC_FMR (AT91_CAST(AT91_REG *) 0xFFFFFF60) // (MC) MC Flash Mode Register -// ========== Register definition for PDC_SPI peripheral ========== -#define AT91C_SPI_PTCR (AT91_CAST(AT91_REG *) 0xFFFE0120) // (PDC_SPI) PDC Transfer Control Register -#define AT91C_SPI_TPR (AT91_CAST(AT91_REG *) 0xFFFE0108) // (PDC_SPI) Transmit Pointer Register -#define AT91C_SPI_TCR (AT91_CAST(AT91_REG *) 0xFFFE010C) // (PDC_SPI) Transmit Counter Register -#define AT91C_SPI_RCR (AT91_CAST(AT91_REG *) 0xFFFE0104) // (PDC_SPI) Receive Counter Register -#define AT91C_SPI_PTSR (AT91_CAST(AT91_REG *) 0xFFFE0124) // (PDC_SPI) PDC Transfer Status Register -#define AT91C_SPI_RNPR (AT91_CAST(AT91_REG *) 0xFFFE0110) // (PDC_SPI) Receive Next Pointer Register -#define AT91C_SPI_RPR (AT91_CAST(AT91_REG *) 0xFFFE0100) // (PDC_SPI) Receive Pointer Register -#define AT91C_SPI_TNCR (AT91_CAST(AT91_REG *) 0xFFFE011C) // (PDC_SPI) Transmit Next Counter Register -#define AT91C_SPI_RNCR (AT91_CAST(AT91_REG *) 0xFFFE0114) // (PDC_SPI) Receive Next Counter Register -#define AT91C_SPI_TNPR (AT91_CAST(AT91_REG *) 0xFFFE0118) // (PDC_SPI) Transmit Next Pointer Register -// ========== Register definition for SPI peripheral ========== -#define AT91C_SPI_IER (AT91_CAST(AT91_REG *) 0xFFFE0014) // (SPI) Interrupt Enable Register -#define AT91C_SPI_SR (AT91_CAST(AT91_REG *) 0xFFFE0010) // (SPI) Status Register -#define AT91C_SPI_IDR (AT91_CAST(AT91_REG *) 0xFFFE0018) // (SPI) Interrupt Disable Register -#define AT91C_SPI_CR (AT91_CAST(AT91_REG *) 0xFFFE0000) // (SPI) Control Register -#define AT91C_SPI_MR (AT91_CAST(AT91_REG *) 0xFFFE0004) // (SPI) Mode Register -#define AT91C_SPI_IMR (AT91_CAST(AT91_REG *) 0xFFFE001C) // (SPI) Interrupt Mask Register -#define AT91C_SPI_TDR (AT91_CAST(AT91_REG *) 0xFFFE000C) // (SPI) Transmit Data Register -#define AT91C_SPI_RDR (AT91_CAST(AT91_REG *) 0xFFFE0008) // (SPI) Receive Data Register -#define AT91C_SPI_CSR (AT91_CAST(AT91_REG *) 0xFFFE0030) // (SPI) Chip Select Register -// ========== Register definition for PDC_ADC peripheral ========== -#define AT91C_ADC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD8124) // (PDC_ADC) PDC Transfer Status Register -#define AT91C_ADC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD8120) // (PDC_ADC) PDC Transfer Control Register -#define AT91C_ADC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD8118) // (PDC_ADC) Transmit Next Pointer Register -#define AT91C_ADC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD811C) // (PDC_ADC) Transmit Next Counter Register -#define AT91C_ADC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD8110) // (PDC_ADC) Receive Next Pointer Register -#define AT91C_ADC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD8114) // (PDC_ADC) Receive Next Counter Register -#define AT91C_ADC_RPR (AT91_CAST(AT91_REG *) 0xFFFD8100) // (PDC_ADC) Receive Pointer Register -#define AT91C_ADC_TCR (AT91_CAST(AT91_REG *) 0xFFFD810C) // (PDC_ADC) Transmit Counter Register -#define AT91C_ADC_TPR (AT91_CAST(AT91_REG *) 0xFFFD8108) // (PDC_ADC) Transmit Pointer Register -#define AT91C_ADC_RCR (AT91_CAST(AT91_REG *) 0xFFFD8104) // (PDC_ADC) Receive Counter Register -// ========== Register definition for ADC peripheral ========== -#define AT91C_ADC_CDR2 (AT91_CAST(AT91_REG *) 0xFFFD8038) // (ADC) ADC Channel Data Register 2 -#define AT91C_ADC_CDR3 (AT91_CAST(AT91_REG *) 0xFFFD803C) // (ADC) ADC Channel Data Register 3 -#define AT91C_ADC_CDR0 (AT91_CAST(AT91_REG *) 0xFFFD8030) // (ADC) ADC Channel Data Register 0 -#define AT91C_ADC_CDR5 (AT91_CAST(AT91_REG *) 0xFFFD8044) // (ADC) ADC Channel Data Register 5 -#define AT91C_ADC_CHDR (AT91_CAST(AT91_REG *) 0xFFFD8014) // (ADC) ADC Channel Disable Register -#define AT91C_ADC_SR (AT91_CAST(AT91_REG *) 0xFFFD801C) // (ADC) ADC Status Register -#define AT91C_ADC_CDR4 (AT91_CAST(AT91_REG *) 0xFFFD8040) // (ADC) ADC Channel Data Register 4 -#define AT91C_ADC_CDR1 (AT91_CAST(AT91_REG *) 0xFFFD8034) // (ADC) ADC Channel Data Register 1 -#define AT91C_ADC_LCDR (AT91_CAST(AT91_REG *) 0xFFFD8020) // (ADC) ADC Last Converted Data Register -#define AT91C_ADC_IDR (AT91_CAST(AT91_REG *) 0xFFFD8028) // (ADC) ADC Interrupt Disable Register -#define AT91C_ADC_CR (AT91_CAST(AT91_REG *) 0xFFFD8000) // (ADC) ADC Control Register -#define AT91C_ADC_CDR7 (AT91_CAST(AT91_REG *) 0xFFFD804C) // (ADC) ADC Channel Data Register 7 -#define AT91C_ADC_CDR6 (AT91_CAST(AT91_REG *) 0xFFFD8048) // (ADC) ADC Channel Data Register 6 -#define AT91C_ADC_IER (AT91_CAST(AT91_REG *) 0xFFFD8024) // (ADC) ADC Interrupt Enable Register -#define AT91C_ADC_CHER (AT91_CAST(AT91_REG *) 0xFFFD8010) // (ADC) ADC Channel Enable Register -#define AT91C_ADC_CHSR (AT91_CAST(AT91_REG *) 0xFFFD8018) // (ADC) ADC Channel Status Register -#define AT91C_ADC_MR (AT91_CAST(AT91_REG *) 0xFFFD8004) // (ADC) ADC Mode Register -#define AT91C_ADC_IMR (AT91_CAST(AT91_REG *) 0xFFFD802C) // (ADC) ADC Interrupt Mask Register -// ========== Register definition for PDC_SSC peripheral ========== -#define AT91C_SSC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD411C) // (PDC_SSC) Transmit Next Counter Register -#define AT91C_SSC_RPR (AT91_CAST(AT91_REG *) 0xFFFD4100) // (PDC_SSC) Receive Pointer Register -#define AT91C_SSC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD4114) // (PDC_SSC) Receive Next Counter Register -#define AT91C_SSC_TPR (AT91_CAST(AT91_REG *) 0xFFFD4108) // (PDC_SSC) Transmit Pointer Register -#define AT91C_SSC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD4120) // (PDC_SSC) PDC Transfer Control Register -#define AT91C_SSC_TCR (AT91_CAST(AT91_REG *) 0xFFFD410C) // (PDC_SSC) Transmit Counter Register -#define AT91C_SSC_RCR (AT91_CAST(AT91_REG *) 0xFFFD4104) // (PDC_SSC) Receive Counter Register -#define AT91C_SSC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD4110) // (PDC_SSC) Receive Next Pointer Register -#define AT91C_SSC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD4118) // (PDC_SSC) Transmit Next Pointer Register -#define AT91C_SSC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD4124) // (PDC_SSC) PDC Transfer Status Register -// ========== Register definition for SSC peripheral ========== -#define AT91C_SSC_RHR (AT91_CAST(AT91_REG *) 0xFFFD4020) // (SSC) Receive Holding Register -#define AT91C_SSC_RSHR (AT91_CAST(AT91_REG *) 0xFFFD4030) // (SSC) Receive Sync Holding Register -#define AT91C_SSC_TFMR (AT91_CAST(AT91_REG *) 0xFFFD401C) // (SSC) Transmit Frame Mode Register -#define AT91C_SSC_IDR (AT91_CAST(AT91_REG *) 0xFFFD4048) // (SSC) Interrupt Disable Register -#define AT91C_SSC_THR (AT91_CAST(AT91_REG *) 0xFFFD4024) // (SSC) Transmit Holding Register -#define AT91C_SSC_RCMR (AT91_CAST(AT91_REG *) 0xFFFD4010) // (SSC) Receive Clock ModeRegister -#define AT91C_SSC_IER (AT91_CAST(AT91_REG *) 0xFFFD4044) // (SSC) Interrupt Enable Register -#define AT91C_SSC_TSHR (AT91_CAST(AT91_REG *) 0xFFFD4034) // (SSC) Transmit Sync Holding Register -#define AT91C_SSC_SR (AT91_CAST(AT91_REG *) 0xFFFD4040) // (SSC) Status Register -#define AT91C_SSC_CMR (AT91_CAST(AT91_REG *) 0xFFFD4004) // (SSC) Clock Mode Register -#define AT91C_SSC_TCMR (AT91_CAST(AT91_REG *) 0xFFFD4018) // (SSC) Transmit Clock Mode Register -#define AT91C_SSC_CR (AT91_CAST(AT91_REG *) 0xFFFD4000) // (SSC) Control Register -#define AT91C_SSC_IMR (AT91_CAST(AT91_REG *) 0xFFFD404C) // (SSC) Interrupt Mask Register -#define AT91C_SSC_RFMR (AT91_CAST(AT91_REG *) 0xFFFD4014) // (SSC) Receive Frame Mode Register -// ========== Register definition for PDC_US1 peripheral ========== -#define AT91C_US1_RNCR (AT91_CAST(AT91_REG *) 0xFFFC4114) // (PDC_US1) Receive Next Counter Register -#define AT91C_US1_PTCR (AT91_CAST(AT91_REG *) 0xFFFC4120) // (PDC_US1) PDC Transfer Control Register -#define AT91C_US1_TCR (AT91_CAST(AT91_REG *) 0xFFFC410C) // (PDC_US1) Transmit Counter Register -#define AT91C_US1_PTSR (AT91_CAST(AT91_REG *) 0xFFFC4124) // (PDC_US1) PDC Transfer Status Register -#define AT91C_US1_TNPR (AT91_CAST(AT91_REG *) 0xFFFC4118) // (PDC_US1) Transmit Next Pointer Register -#define AT91C_US1_RCR (AT91_CAST(AT91_REG *) 0xFFFC4104) // (PDC_US1) Receive Counter Register -#define AT91C_US1_RNPR (AT91_CAST(AT91_REG *) 0xFFFC4110) // (PDC_US1) Receive Next Pointer Register -#define AT91C_US1_RPR (AT91_CAST(AT91_REG *) 0xFFFC4100) // (PDC_US1) Receive Pointer Register -#define AT91C_US1_TNCR (AT91_CAST(AT91_REG *) 0xFFFC411C) // (PDC_US1) Transmit Next Counter Register -#define AT91C_US1_TPR (AT91_CAST(AT91_REG *) 0xFFFC4108) // (PDC_US1) Transmit Pointer Register -// ========== Register definition for US1 peripheral ========== -#define AT91C_US1_IF (AT91_CAST(AT91_REG *) 0xFFFC404C) // (US1) IRDA_FILTER Register -#define AT91C_US1_NER (AT91_CAST(AT91_REG *) 0xFFFC4044) // (US1) Nb Errors Register -#define AT91C_US1_RTOR (AT91_CAST(AT91_REG *) 0xFFFC4024) // (US1) Receiver Time-out Register -#define AT91C_US1_CSR (AT91_CAST(AT91_REG *) 0xFFFC4014) // (US1) Channel Status Register -#define AT91C_US1_IDR (AT91_CAST(AT91_REG *) 0xFFFC400C) // (US1) Interrupt Disable Register -#define AT91C_US1_IER (AT91_CAST(AT91_REG *) 0xFFFC4008) // (US1) Interrupt Enable Register -#define AT91C_US1_THR (AT91_CAST(AT91_REG *) 0xFFFC401C) // (US1) Transmitter Holding Register -#define AT91C_US1_TTGR (AT91_CAST(AT91_REG *) 0xFFFC4028) // (US1) Transmitter Time-guard Register -#define AT91C_US1_RHR (AT91_CAST(AT91_REG *) 0xFFFC4018) // (US1) Receiver Holding Register -#define AT91C_US1_BRGR (AT91_CAST(AT91_REG *) 0xFFFC4020) // (US1) Baud Rate Generator Register -#define AT91C_US1_IMR (AT91_CAST(AT91_REG *) 0xFFFC4010) // (US1) Interrupt Mask Register -#define AT91C_US1_FIDI (AT91_CAST(AT91_REG *) 0xFFFC4040) // (US1) FI_DI_Ratio Register -#define AT91C_US1_CR (AT91_CAST(AT91_REG *) 0xFFFC4000) // (US1) Control Register -#define AT91C_US1_MR (AT91_CAST(AT91_REG *) 0xFFFC4004) // (US1) Mode Register -// ========== Register definition for PDC_US0 peripheral ========== -#define AT91C_US0_TNPR (AT91_CAST(AT91_REG *) 0xFFFC0118) // (PDC_US0) Transmit Next Pointer Register -#define AT91C_US0_RNPR (AT91_CAST(AT91_REG *) 0xFFFC0110) // (PDC_US0) Receive Next Pointer Register -#define AT91C_US0_TCR (AT91_CAST(AT91_REG *) 0xFFFC010C) // (PDC_US0) Transmit Counter Register -#define AT91C_US0_PTCR (AT91_CAST(AT91_REG *) 0xFFFC0120) // (PDC_US0) PDC Transfer Control Register -#define AT91C_US0_PTSR (AT91_CAST(AT91_REG *) 0xFFFC0124) // (PDC_US0) PDC Transfer Status Register -#define AT91C_US0_TNCR (AT91_CAST(AT91_REG *) 0xFFFC011C) // (PDC_US0) Transmit Next Counter Register -#define AT91C_US0_TPR (AT91_CAST(AT91_REG *) 0xFFFC0108) // (PDC_US0) Transmit Pointer Register -#define AT91C_US0_RCR (AT91_CAST(AT91_REG *) 0xFFFC0104) // (PDC_US0) Receive Counter Register -#define AT91C_US0_RPR (AT91_CAST(AT91_REG *) 0xFFFC0100) // (PDC_US0) Receive Pointer Register -#define AT91C_US0_RNCR (AT91_CAST(AT91_REG *) 0xFFFC0114) // (PDC_US0) Receive Next Counter Register -// ========== Register definition for US0 peripheral ========== -#define AT91C_US0_BRGR (AT91_CAST(AT91_REG *) 0xFFFC0020) // (US0) Baud Rate Generator Register -#define AT91C_US0_NER (AT91_CAST(AT91_REG *) 0xFFFC0044) // (US0) Nb Errors Register -#define AT91C_US0_CR (AT91_CAST(AT91_REG *) 0xFFFC0000) // (US0) Control Register -#define AT91C_US0_IMR (AT91_CAST(AT91_REG *) 0xFFFC0010) // (US0) Interrupt Mask Register -#define AT91C_US0_FIDI (AT91_CAST(AT91_REG *) 0xFFFC0040) // (US0) FI_DI_Ratio Register -#define AT91C_US0_TTGR (AT91_CAST(AT91_REG *) 0xFFFC0028) // (US0) Transmitter Time-guard Register -#define AT91C_US0_MR (AT91_CAST(AT91_REG *) 0xFFFC0004) // (US0) Mode Register -#define AT91C_US0_RTOR (AT91_CAST(AT91_REG *) 0xFFFC0024) // (US0) Receiver Time-out Register -#define AT91C_US0_CSR (AT91_CAST(AT91_REG *) 0xFFFC0014) // (US0) Channel Status Register -#define AT91C_US0_RHR (AT91_CAST(AT91_REG *) 0xFFFC0018) // (US0) Receiver Holding Register -#define AT91C_US0_IDR (AT91_CAST(AT91_REG *) 0xFFFC000C) // (US0) Interrupt Disable Register -#define AT91C_US0_THR (AT91_CAST(AT91_REG *) 0xFFFC001C) // (US0) Transmitter Holding Register -#define AT91C_US0_IF (AT91_CAST(AT91_REG *) 0xFFFC004C) // (US0) IRDA_FILTER Register -#define AT91C_US0_IER (AT91_CAST(AT91_REG *) 0xFFFC0008) // (US0) Interrupt Enable Register -// ========== Register definition for TWI peripheral ========== -#define AT91C_TWI_IER (AT91_CAST(AT91_REG *) 0xFFFB8024) // (TWI) Interrupt Enable Register -#define AT91C_TWI_CR (AT91_CAST(AT91_REG *) 0xFFFB8000) // (TWI) Control Register -#define AT91C_TWI_SR (AT91_CAST(AT91_REG *) 0xFFFB8020) // (TWI) Status Register -#define AT91C_TWI_IMR (AT91_CAST(AT91_REG *) 0xFFFB802C) // (TWI) Interrupt Mask Register -#define AT91C_TWI_THR (AT91_CAST(AT91_REG *) 0xFFFB8034) // (TWI) Transmit Holding Register -#define AT91C_TWI_IDR (AT91_CAST(AT91_REG *) 0xFFFB8028) // (TWI) Interrupt Disable Register -#define AT91C_TWI_IADR (AT91_CAST(AT91_REG *) 0xFFFB800C) // (TWI) Internal Address Register -#define AT91C_TWI_MMR (AT91_CAST(AT91_REG *) 0xFFFB8004) // (TWI) Master Mode Register -#define AT91C_TWI_CWGR (AT91_CAST(AT91_REG *) 0xFFFB8010) // (TWI) Clock Waveform Generator Register -#define AT91C_TWI_RHR (AT91_CAST(AT91_REG *) 0xFFFB8030) // (TWI) Receive Holding Register -// ========== Register definition for TC0 peripheral ========== -#define AT91C_TC0_SR (AT91_CAST(AT91_REG *) 0xFFFA0020) // (TC0) Status Register -#define AT91C_TC0_RC (AT91_CAST(AT91_REG *) 0xFFFA001C) // (TC0) Register C -#define AT91C_TC0_RB (AT91_CAST(AT91_REG *) 0xFFFA0018) // (TC0) Register B -#define AT91C_TC0_CCR (AT91_CAST(AT91_REG *) 0xFFFA0000) // (TC0) Channel Control Register -#define AT91C_TC0_CMR (AT91_CAST(AT91_REG *) 0xFFFA0004) // (TC0) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC0_IER (AT91_CAST(AT91_REG *) 0xFFFA0024) // (TC0) Interrupt Enable Register -#define AT91C_TC0_RA (AT91_CAST(AT91_REG *) 0xFFFA0014) // (TC0) Register A -#define AT91C_TC0_IDR (AT91_CAST(AT91_REG *) 0xFFFA0028) // (TC0) Interrupt Disable Register -#define AT91C_TC0_CV (AT91_CAST(AT91_REG *) 0xFFFA0010) // (TC0) Counter Value -#define AT91C_TC0_IMR (AT91_CAST(AT91_REG *) 0xFFFA002C) // (TC0) Interrupt Mask Register -// ========== Register definition for TC1 peripheral ========== -#define AT91C_TC1_RB (AT91_CAST(AT91_REG *) 0xFFFA0058) // (TC1) Register B -#define AT91C_TC1_CCR (AT91_CAST(AT91_REG *) 0xFFFA0040) // (TC1) Channel Control Register -#define AT91C_TC1_IER (AT91_CAST(AT91_REG *) 0xFFFA0064) // (TC1) Interrupt Enable Register -#define AT91C_TC1_IDR (AT91_CAST(AT91_REG *) 0xFFFA0068) // (TC1) Interrupt Disable Register -#define AT91C_TC1_SR (AT91_CAST(AT91_REG *) 0xFFFA0060) // (TC1) Status Register -#define AT91C_TC1_CMR (AT91_CAST(AT91_REG *) 0xFFFA0044) // (TC1) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC1_RA (AT91_CAST(AT91_REG *) 0xFFFA0054) // (TC1) Register A -#define AT91C_TC1_RC (AT91_CAST(AT91_REG *) 0xFFFA005C) // (TC1) Register C -#define AT91C_TC1_IMR (AT91_CAST(AT91_REG *) 0xFFFA006C) // (TC1) Interrupt Mask Register -#define AT91C_TC1_CV (AT91_CAST(AT91_REG *) 0xFFFA0050) // (TC1) Counter Value -// ========== Register definition for TC2 peripheral ========== -#define AT91C_TC2_CMR (AT91_CAST(AT91_REG *) 0xFFFA0084) // (TC2) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC2_CCR (AT91_CAST(AT91_REG *) 0xFFFA0080) // (TC2) Channel Control Register -#define AT91C_TC2_CV (AT91_CAST(AT91_REG *) 0xFFFA0090) // (TC2) Counter Value -#define AT91C_TC2_RA (AT91_CAST(AT91_REG *) 0xFFFA0094) // (TC2) Register A -#define AT91C_TC2_RB (AT91_CAST(AT91_REG *) 0xFFFA0098) // (TC2) Register B -#define AT91C_TC2_IDR (AT91_CAST(AT91_REG *) 0xFFFA00A8) // (TC2) Interrupt Disable Register -#define AT91C_TC2_IMR (AT91_CAST(AT91_REG *) 0xFFFA00AC) // (TC2) Interrupt Mask Register -#define AT91C_TC2_RC (AT91_CAST(AT91_REG *) 0xFFFA009C) // (TC2) Register C -#define AT91C_TC2_IER (AT91_CAST(AT91_REG *) 0xFFFA00A4) // (TC2) Interrupt Enable Register -#define AT91C_TC2_SR (AT91_CAST(AT91_REG *) 0xFFFA00A0) // (TC2) Status Register -// ========== Register definition for TCB peripheral ========== -#define AT91C_TCB_BMR (AT91_CAST(AT91_REG *) 0xFFFA00C4) // (TCB) TC Block Mode Register -#define AT91C_TCB_BCR (AT91_CAST(AT91_REG *) 0xFFFA00C0) // (TCB) TC Block Control Register -// ========== Register definition for PWMC_CH3 peripheral ========== -#define AT91C_PWMC_CH3_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC270) // (PWMC_CH3) Channel Update Register -#define AT91C_PWMC_CH3_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC274) // (PWMC_CH3) Reserved -#define AT91C_PWMC_CH3_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC268) // (PWMC_CH3) Channel Period Register -#define AT91C_PWMC_CH3_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC264) // (PWMC_CH3) Channel Duty Cycle Register -#define AT91C_PWMC_CH3_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC26C) // (PWMC_CH3) Channel Counter Register -#define AT91C_PWMC_CH3_CMR (AT91_CAST(AT91_REG *) 0xFFFCC260) // (PWMC_CH3) Channel Mode Register -// ========== Register definition for PWMC_CH2 peripheral ========== -#define AT91C_PWMC_CH2_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC254) // (PWMC_CH2) Reserved -#define AT91C_PWMC_CH2_CMR (AT91_CAST(AT91_REG *) 0xFFFCC240) // (PWMC_CH2) Channel Mode Register -#define AT91C_PWMC_CH2_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC24C) // (PWMC_CH2) Channel Counter Register -#define AT91C_PWMC_CH2_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC248) // (PWMC_CH2) Channel Period Register -#define AT91C_PWMC_CH2_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC250) // (PWMC_CH2) Channel Update Register -#define AT91C_PWMC_CH2_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC244) // (PWMC_CH2) Channel Duty Cycle Register -// ========== Register definition for PWMC_CH1 peripheral ========== -#define AT91C_PWMC_CH1_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC234) // (PWMC_CH1) Reserved -#define AT91C_PWMC_CH1_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC230) // (PWMC_CH1) Channel Update Register -#define AT91C_PWMC_CH1_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC228) // (PWMC_CH1) Channel Period Register -#define AT91C_PWMC_CH1_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC22C) // (PWMC_CH1) Channel Counter Register -#define AT91C_PWMC_CH1_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC224) // (PWMC_CH1) Channel Duty Cycle Register -#define AT91C_PWMC_CH1_CMR (AT91_CAST(AT91_REG *) 0xFFFCC220) // (PWMC_CH1) Channel Mode Register -// ========== Register definition for PWMC_CH0 peripheral ========== -#define AT91C_PWMC_CH0_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC214) // (PWMC_CH0) Reserved -#define AT91C_PWMC_CH0_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC208) // (PWMC_CH0) Channel Period Register -#define AT91C_PWMC_CH0_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC204) // (PWMC_CH0) Channel Duty Cycle Register -#define AT91C_PWMC_CH0_CMR (AT91_CAST(AT91_REG *) 0xFFFCC200) // (PWMC_CH0) Channel Mode Register -#define AT91C_PWMC_CH0_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC210) // (PWMC_CH0) Channel Update Register -#define AT91C_PWMC_CH0_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC20C) // (PWMC_CH0) Channel Counter Register -// ========== Register definition for PWMC peripheral ========== -#define AT91C_PWMC_IDR (AT91_CAST(AT91_REG *) 0xFFFCC014) // (PWMC) PWMC Interrupt Disable Register -#define AT91C_PWMC_DIS (AT91_CAST(AT91_REG *) 0xFFFCC008) // (PWMC) PWMC Disable Register -#define AT91C_PWMC_IER (AT91_CAST(AT91_REG *) 0xFFFCC010) // (PWMC) PWMC Interrupt Enable Register -#define AT91C_PWMC_VR (AT91_CAST(AT91_REG *) 0xFFFCC0FC) // (PWMC) PWMC Version Register -#define AT91C_PWMC_ISR (AT91_CAST(AT91_REG *) 0xFFFCC01C) // (PWMC) PWMC Interrupt Status Register -#define AT91C_PWMC_SR (AT91_CAST(AT91_REG *) 0xFFFCC00C) // (PWMC) PWMC Status Register -#define AT91C_PWMC_IMR (AT91_CAST(AT91_REG *) 0xFFFCC018) // (PWMC) PWMC Interrupt Mask Register -#define AT91C_PWMC_MR (AT91_CAST(AT91_REG *) 0xFFFCC000) // (PWMC) PWMC Mode Register -#define AT91C_PWMC_ENA (AT91_CAST(AT91_REG *) 0xFFFCC004) // (PWMC) PWMC Enable Register -// ========== Register definition for UDP peripheral ========== -#define AT91C_UDP_IMR (AT91_CAST(AT91_REG *) 0xFFFB0018) // (UDP) Interrupt Mask Register -#define AT91C_UDP_FADDR (AT91_CAST(AT91_REG *) 0xFFFB0008) // (UDP) Function Address Register -#define AT91C_UDP_NUM (AT91_CAST(AT91_REG *) 0xFFFB0000) // (UDP) Frame Number Register -#define AT91C_UDP_FDR (AT91_CAST(AT91_REG *) 0xFFFB0050) // (UDP) Endpoint FIFO Data Register -#define AT91C_UDP_ISR (AT91_CAST(AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register -#define AT91C_UDP_CSR (AT91_CAST(AT91_REG *) 0xFFFB0030) // (UDP) Endpoint Control and Status Register -#define AT91C_UDP_IDR (AT91_CAST(AT91_REG *) 0xFFFB0014) // (UDP) Interrupt Disable Register -#define AT91C_UDP_ICR (AT91_CAST(AT91_REG *) 0xFFFB0020) // (UDP) Interrupt Clear Register -#define AT91C_UDP_RSTEP (AT91_CAST(AT91_REG *) 0xFFFB0028) // (UDP) Reset Endpoint Register -#define AT91C_UDP_TXVC (AT91_CAST(AT91_REG *) 0xFFFB0074) // (UDP) Transceiver Control Register -#define AT91C_UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0xFFFB0004) // (UDP) Global State Register -#define AT91C_UDP_IER (AT91_CAST(AT91_REG *) 0xFFFB0010) // (UDP) Interrupt Enable Register - -// ***************************************************************************** -// PIO DEFINITIONS FOR AT91SAM7S256 -// ***************************************************************************** -#define AT91C_PIO_PA0 (1 << 0) // Pin Controlled by PA0 -#define AT91C_PA0_PWM0 (AT91C_PIO_PA0) // PWM Channel 0 -#define AT91C_PA0_TIOA0 (AT91C_PIO_PA0) // Timer Counter 0 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA1 (1 << 1) // Pin Controlled by PA1 -#define AT91C_PA1_PWM1 (AT91C_PIO_PA1) // PWM Channel 1 -#define AT91C_PA1_TIOB0 (AT91C_PIO_PA1) // Timer Counter 0 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA10 (1 << 10) // Pin Controlled by PA10 -#define AT91C_PA10_DTXD (AT91C_PIO_PA10) // DBGU Debug Transmit Data -#define AT91C_PA10_NPCS2 (AT91C_PIO_PA10) // SPI Peripheral Chip Select 2 -#define AT91C_PIO_PA11 (1 << 11) // Pin Controlled by PA11 -#define AT91C_PA11_NPCS0 (AT91C_PIO_PA11) // SPI Peripheral Chip Select 0 -#define AT91C_PA11_PWM0 (AT91C_PIO_PA11) // PWM Channel 0 -#define AT91C_PIO_PA12 (1 << 12) // Pin Controlled by PA12 -#define AT91C_PA12_MISO (AT91C_PIO_PA12) // SPI Master In Slave -#define AT91C_PA12_PWM1 (AT91C_PIO_PA12) // PWM Channel 1 -#define AT91C_PIO_PA13 (1 << 13) // Pin Controlled by PA13 -#define AT91C_PA13_MOSI (AT91C_PIO_PA13) // SPI Master Out Slave -#define AT91C_PA13_PWM2 (AT91C_PIO_PA13) // PWM Channel 2 -#define AT91C_PIO_PA14 (1 << 14) // Pin Controlled by PA14 -#define AT91C_PA14_SPCK (AT91C_PIO_PA14) // SPI Serial Clock -#define AT91C_PA14_PWM3 (AT91C_PIO_PA14) // PWM Channel 3 -#define AT91C_PIO_PA15 (1 << 15) // Pin Controlled by PA15 -#define AT91C_PA15_TF (AT91C_PIO_PA15) // SSC Transmit Frame Sync -#define AT91C_PA15_TIOA1 (AT91C_PIO_PA15) // Timer Counter 1 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA16 (1 << 16) // Pin Controlled by PA16 -#define AT91C_PA16_TK (AT91C_PIO_PA16) // SSC Transmit Clock -#define AT91C_PA16_TIOB1 (AT91C_PIO_PA16) // Timer Counter 1 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA17 (1 << 17) // Pin Controlled by PA17 -#define AT91C_PA17_TD (AT91C_PIO_PA17) // SSC Transmit data -#define AT91C_PA17_PCK1 (AT91C_PIO_PA17) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA18 (1 << 18) // Pin Controlled by PA18 -#define AT91C_PA18_RD (AT91C_PIO_PA18) // SSC Receive Data -#define AT91C_PA18_PCK2 (AT91C_PIO_PA18) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA19 (1 << 19) // Pin Controlled by PA19 -#define AT91C_PA19_RK (AT91C_PIO_PA19) // SSC Receive Clock -#define AT91C_PA19_FIQ (AT91C_PIO_PA19) // AIC Fast Interrupt Input -#define AT91C_PIO_PA2 (1 << 2) // Pin Controlled by PA2 -#define AT91C_PA2_PWM2 (AT91C_PIO_PA2) // PWM Channel 2 -#define AT91C_PA2_SCK0 (AT91C_PIO_PA2) // USART 0 Serial Clock -#define AT91C_PIO_PA20 (1 << 20) // Pin Controlled by PA20 -#define AT91C_PA20_RF (AT91C_PIO_PA20) // SSC Receive Frame Sync -#define AT91C_PA20_IRQ0 (AT91C_PIO_PA20) // External Interrupt 0 -#define AT91C_PIO_PA21 (1 << 21) // Pin Controlled by PA21 -#define AT91C_PA21_RXD1 (AT91C_PIO_PA21) // USART 1 Receive Data -#define AT91C_PA21_PCK1 (AT91C_PIO_PA21) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA22 (1 << 22) // Pin Controlled by PA22 -#define AT91C_PA22_TXD1 (AT91C_PIO_PA22) // USART 1 Transmit Data -#define AT91C_PA22_NPCS3 (AT91C_PIO_PA22) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA23 (1 << 23) // Pin Controlled by PA23 -#define AT91C_PA23_SCK1 (AT91C_PIO_PA23) // USART 1 Serial Clock -#define AT91C_PA23_PWM0 (AT91C_PIO_PA23) // PWM Channel 0 -#define AT91C_PIO_PA24 (1 << 24) // Pin Controlled by PA24 -#define AT91C_PA24_RTS1 (AT91C_PIO_PA24) // USART 1 Ready To Send -#define AT91C_PA24_PWM1 (AT91C_PIO_PA24) // PWM Channel 1 -#define AT91C_PIO_PA25 (1 << 25) // Pin Controlled by PA25 -#define AT91C_PA25_CTS1 (AT91C_PIO_PA25) // USART 1 Clear To Send -#define AT91C_PA25_PWM2 (AT91C_PIO_PA25) // PWM Channel 2 -#define AT91C_PIO_PA26 (1 << 26) // Pin Controlled by PA26 -#define AT91C_PA26_DCD1 (AT91C_PIO_PA26) // USART 1 Data Carrier Detect -#define AT91C_PA26_TIOA2 (AT91C_PIO_PA26) // Timer Counter 2 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA27 (1 << 27) // Pin Controlled by PA27 -#define AT91C_PA27_DTR1 (AT91C_PIO_PA27) // USART 1 Data Terminal ready -#define AT91C_PA27_TIOB2 (AT91C_PIO_PA27) // Timer Counter 2 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA28 (1 << 28) // Pin Controlled by PA28 -#define AT91C_PA28_DSR1 (AT91C_PIO_PA28) // USART 1 Data Set ready -#define AT91C_PA28_TCLK1 (AT91C_PIO_PA28) // Timer Counter 1 external clock input -#define AT91C_PIO_PA29 (1 << 29) // Pin Controlled by PA29 -#define AT91C_PA29_RI1 (AT91C_PIO_PA29) // USART 1 Ring Indicator -#define AT91C_PA29_TCLK2 (AT91C_PIO_PA29) // Timer Counter 2 external clock input -#define AT91C_PIO_PA3 (1 << 3) // Pin Controlled by PA3 -#define AT91C_PA3_TWD (AT91C_PIO_PA3) // TWI Two-wire Serial Data -#define AT91C_PA3_NPCS3 (AT91C_PIO_PA3) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA30 (1 << 30) // Pin Controlled by PA30 -#define AT91C_PA30_IRQ1 (AT91C_PIO_PA30) // External Interrupt 1 -#define AT91C_PA30_NPCS2 (AT91C_PIO_PA30) // SPI Peripheral Chip Select 2 -#define AT91C_PIO_PA31 (1 << 31) // Pin Controlled by PA31 -#define AT91C_PA31_NPCS1 (AT91C_PIO_PA31) // SPI Peripheral Chip Select 1 -#define AT91C_PA31_PCK2 (AT91C_PIO_PA31) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA4 (1 << 4) // Pin Controlled by PA4 -#define AT91C_PA4_TWCK (AT91C_PIO_PA4) // TWI Two-wire Serial Clock -#define AT91C_PA4_TCLK0 (AT91C_PIO_PA4) // Timer Counter 0 external clock input -#define AT91C_PIO_PA5 (1 << 5) // Pin Controlled by PA5 -#define AT91C_PA5_RXD0 (AT91C_PIO_PA5) // USART 0 Receive Data -#define AT91C_PA5_NPCS3 (AT91C_PIO_PA5) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA6 (1 << 6) // Pin Controlled by PA6 -#define AT91C_PA6_TXD0 (AT91C_PIO_PA6) // USART 0 Transmit Data -#define AT91C_PA6_PCK0 (AT91C_PIO_PA6) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PA7 (1 << 7) // Pin Controlled by PA7 -#define AT91C_PA7_RTS0 (AT91C_PIO_PA7) // USART 0 Ready To Send -#define AT91C_PA7_PWM3 (AT91C_PIO_PA7) // PWM Channel 3 -#define AT91C_PIO_PA8 (1 << 8) // Pin Controlled by PA8 -#define AT91C_PA8_CTS0 (AT91C_PIO_PA8) // USART 0 Clear To Send -#define AT91C_PA8_ADTRG (AT91C_PIO_PA8) // ADC External Trigger -#define AT91C_PIO_PA9 (1 << 9) // Pin Controlled by PA9 -#define AT91C_PA9_DRXD (AT91C_PIO_PA9) // DBGU Debug Receive Data -#define AT91C_PA9_NPCS1 (AT91C_PIO_PA9) // SPI Peripheral Chip Select 1 - -// ***************************************************************************** -// PERIPHERAL ID DEFINITIONS FOR AT91SAM7S256 -// ***************************************************************************** -#define AT91C_ID_FIQ ( 0) // Advanced Interrupt Controller (FIQ) -#define AT91C_ID_SYS ( 1) // System Peripheral -#define AT91C_ID_PIOA ( 2) // Parallel IO Controller -#define AT91C_ID_3_Reserved ( 3) // Reserved -#define AT91C_ID_ADC ( 4) // Analog-to-Digital Converter -#define AT91C_ID_SPI ( 5) // Serial Peripheral Interface -#define AT91C_ID_US0 ( 6) // USART 0 -#define AT91C_ID_US1 ( 7) // USART 1 -#define AT91C_ID_SSC ( 8) // Serial Synchronous Controller -#define AT91C_ID_TWI ( 9) // Two-Wire Interface -#define AT91C_ID_PWMC (10) // PWM Controller -#define AT91C_ID_UDP (11) // USB Device Port -#define AT91C_ID_TC0 (12) // Timer Counter 0 -#define AT91C_ID_TC1 (13) // Timer Counter 1 -#define AT91C_ID_TC2 (14) // Timer Counter 2 -#define AT91C_ID_15_Reserved (15) // Reserved -#define AT91C_ID_16_Reserved (16) // Reserved -#define AT91C_ID_17_Reserved (17) // Reserved -#define AT91C_ID_18_Reserved (18) // Reserved -#define AT91C_ID_19_Reserved (19) // Reserved -#define AT91C_ID_20_Reserved (20) // Reserved -#define AT91C_ID_21_Reserved (21) // Reserved -#define AT91C_ID_22_Reserved (22) // Reserved -#define AT91C_ID_23_Reserved (23) // Reserved -#define AT91C_ID_24_Reserved (24) // Reserved -#define AT91C_ID_25_Reserved (25) // Reserved -#define AT91C_ID_26_Reserved (26) // Reserved -#define AT91C_ID_27_Reserved (27) // Reserved -#define AT91C_ID_28_Reserved (28) // Reserved -#define AT91C_ID_29_Reserved (29) // Reserved -#define AT91C_ID_IRQ0 (30) // Advanced Interrupt Controller (IRQ0) -#define AT91C_ID_IRQ1 (31) // Advanced Interrupt Controller (IRQ1) -#define AT91C_ALL_INT (0xC0007FF7) // ALL VALID INTERRUPTS - -// ***************************************************************************** -// BASE ADDRESS DEFINITIONS FOR AT91SAM7S256 -// ***************************************************************************** -#define AT91C_BASE_SYS (AT91_CAST(AT91PS_SYS) 0xFFFFF000) // (SYS) Base Address -#define AT91C_BASE_AIC (AT91_CAST(AT91PS_AIC) 0xFFFFF000) // (AIC) Base Address -#define AT91C_BASE_PDC_DBGU (AT91_CAST(AT91PS_PDC) 0xFFFFF300) // (PDC_DBGU) Base Address -#define AT91C_BASE_DBGU (AT91_CAST(AT91PS_DBGU) 0xFFFFF200) // (DBGU) Base Address -#define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address -#define AT91C_BASE_CKGR (AT91_CAST(AT91PS_CKGR) 0xFFFFFC20) // (CKGR) Base Address -#define AT91C_BASE_PMC (AT91_CAST(AT91PS_PMC) 0xFFFFFC00) // (PMC) Base Address -#define AT91C_BASE_RSTC (AT91_CAST(AT91PS_RSTC) 0xFFFFFD00) // (RSTC) Base Address -#define AT91C_BASE_RTTC (AT91_CAST(AT91PS_RTTC) 0xFFFFFD20) // (RTTC) Base Address -#define AT91C_BASE_PITC (AT91_CAST(AT91PS_PITC) 0xFFFFFD30) // (PITC) Base Address -#define AT91C_BASE_WDTC (AT91_CAST(AT91PS_WDTC) 0xFFFFFD40) // (WDTC) Base Address -#define AT91C_BASE_VREG (AT91_CAST(AT91PS_VREG) 0xFFFFFD60) // (VREG) Base Address -#define AT91C_BASE_MC (AT91_CAST(AT91PS_MC) 0xFFFFFF00) // (MC) Base Address -#define AT91C_BASE_PDC_SPI (AT91_CAST(AT91PS_PDC) 0xFFFE0100) // (PDC_SPI) Base Address -#define AT91C_BASE_SPI (AT91_CAST(AT91PS_SPI) 0xFFFE0000) // (SPI) Base Address -#define AT91C_BASE_PDC_ADC (AT91_CAST(AT91PS_PDC) 0xFFFD8100) // (PDC_ADC) Base Address -#define AT91C_BASE_ADC (AT91_CAST(AT91PS_ADC) 0xFFFD8000) // (ADC) Base Address -#define AT91C_BASE_PDC_SSC (AT91_CAST(AT91PS_PDC) 0xFFFD4100) // (PDC_SSC) Base Address -#define AT91C_BASE_SSC (AT91_CAST(AT91PS_SSC) 0xFFFD4000) // (SSC) Base Address -#define AT91C_BASE_PDC_US1 (AT91_CAST(AT91PS_PDC) 0xFFFC4100) // (PDC_US1) Base Address -#define AT91C_BASE_US1 (AT91_CAST(AT91PS_USART) 0xFFFC4000) // (US1) Base Address -#define AT91C_BASE_PDC_US0 (AT91_CAST(AT91PS_PDC) 0xFFFC0100) // (PDC_US0) Base Address -#define AT91C_BASE_US0 (AT91_CAST(AT91PS_USART) 0xFFFC0000) // (US0) Base Address -#define AT91C_BASE_TWI (AT91_CAST(AT91PS_TWI) 0xFFFB8000) // (TWI) Base Address -#define AT91C_BASE_TC0 (AT91_CAST(AT91PS_TC) 0xFFFA0000) // (TC0) Base Address -#define AT91C_BASE_TC1 (AT91_CAST(AT91PS_TC) 0xFFFA0040) // (TC1) Base Address -#define AT91C_BASE_TC2 (AT91_CAST(AT91PS_TC) 0xFFFA0080) // (TC2) Base Address -#define AT91C_BASE_TCB (AT91_CAST(AT91PS_TCB) 0xFFFA0000) // (TCB) Base Address -#define AT91C_BASE_PWMC_CH3 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC260) // (PWMC_CH3) Base Address -#define AT91C_BASE_PWMC_CH2 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC240) // (PWMC_CH2) Base Address -#define AT91C_BASE_PWMC_CH1 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC220) // (PWMC_CH1) Base Address -#define AT91C_BASE_PWMC_CH0 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC200) // (PWMC_CH0) Base Address -#define AT91C_BASE_PWMC (AT91_CAST(AT91PS_PWMC) 0xFFFCC000) // (PWMC) Base Address -#define AT91C_BASE_UDP (AT91_CAST(AT91PS_UDP) 0xFFFB0000) // (UDP) Base Address - -// ***************************************************************************** -// MEMORY MAPPING DEFINITIONS FOR AT91SAM7S256 -// ***************************************************************************** -// ISRAM -#define AT91C_ISRAM (0x00200000) // Internal SRAM base address -#define AT91C_ISRAM_SIZE (0x00010000) // Internal SRAM size in byte (64 Kbytes) -// IFLASH -#define AT91C_IFLASH (0x00100000) // Internal FLASH base address -#define AT91C_IFLASH_SIZE (0x00040000) // Internal FLASH size in byte (256 Kbytes) -#define AT91C_IFLASH_PAGE_SIZE (256) // Internal FLASH Page Size: 256 bytes -#define AT91C_IFLASH_LOCK_REGION_SIZE (16384) // Internal FLASH Lock Region Size: 16 Kbytes -#define AT91C_IFLASH_NB_OF_PAGES (1024) // Internal FLASH Number of Pages: 1024 bytes -#define AT91C_IFLASH_NB_OF_LOCK_BITS (16) // Internal FLASH Number of Lock Bits: 16 bytes - -#endif diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S512.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S512.h deleted file mode 100644 index 2b8841d..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S512.h +++ /dev/null @@ -1,2303 +0,0 @@ -// ---------------------------------------------------------------------------- -// ATMEL Microcontroller Software Support - ROUSSET - -// ---------------------------------------------------------------------------- -// Copyright (c) 2006, Atmel Corporation -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, -// this list of conditions and the disclaimer below. -// -// Atmel's name may not be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR -// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE -// DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// ---------------------------------------------------------------------------- -// File Name : AT91SAM7S512.h -// Object : AT91SAM7S512 definitions -// Generated : AT91 SW Application Group 07/07/2008 (16:13:20) -// -// CVS Reference : /AT91SAM7S512.pl/1.6/Wed Aug 30 14:08:44 2006// -// CVS Reference : /SYS_SAM7S.pl/1.2/Thu Feb 3 10:47:39 2005// -// CVS Reference : /MC_SAM7SE.pl/1.10/Thu Feb 16 16:35:28 2006// -// CVS Reference : /PMC_SAM7S_USB.pl/1.4/Tue Feb 8 14:00:19 2005// -// CVS Reference : /RSTC_SAM7S.pl/1.2/Wed Jul 13 15:25:17 2005// -// CVS Reference : /UDP_4ept.pl/1.1/Thu Aug 3 12:26:00 2006// -// CVS Reference : /PWM_SAM7S.pl/1.1/Tue May 10 12:38:54 2005// -// CVS Reference : /AIC_6075B.pl/1.3/Fri May 20 14:21:42 2005// -// CVS Reference : /PIO_6057A.pl/1.2/Thu Feb 3 10:29:42 2005// -// CVS Reference : /RTTC_6081A.pl/1.2/Thu Nov 4 13:57:22 2004// -// CVS Reference : /PITC_6079A.pl/1.2/Thu Nov 4 13:56:22 2004// -// CVS Reference : /WDTC_6080A.pl/1.3/Thu Nov 4 13:58:52 2004// -// CVS Reference : /VREG_6085B.pl/1.1/Tue Feb 1 16:40:38 2005// -// CVS Reference : /PDC_6074C.pl/1.2/Thu Feb 3 09:02:11 2005// -// CVS Reference : /DBGU_6059D.pl/1.1/Mon Jan 31 13:54:41 2005// -// CVS Reference : /SPI_6088D.pl/1.3/Fri May 20 14:23:02 2005// -// CVS Reference : /US_6089C.pl/1.1/Mon Jan 31 13:56:02 2005// -// CVS Reference : /SSC_6078A.pl/1.1/Tue Jul 13 07:10:41 2004// -// CVS Reference : /TWI_6061A.pl/1.2/Fri Oct 27 11:40:48 2006// -// CVS Reference : /TC_6082A.pl/1.7/Wed Mar 9 16:31:51 2005// -// CVS Reference : /ADC_6051C.pl/1.1/Mon Jan 31 13:12:40 2005// -// CVS Reference : /EBI_SAM7SE512.pl/1.22/Fri Nov 18 17:47:47 2005// -// CVS Reference : /SMC_1783A.pl/1.4/Thu Feb 3 10:30:06 2005// -// CVS Reference : /SDRC_SAM7SE512.pl/1.7/Fri Jul 8 07:50:18 2005// -// CVS Reference : /HECC_SAM7SE512.pl/1.8/Tue Jul 12 06:31:42 2005// -// ---------------------------------------------------------------------------- - -#ifndef AT91SAM7S512_H -#define AT91SAM7S512_H - -#ifndef __ASSEMBLY__ -typedef volatile unsigned int AT91_REG;// Hardware register definition -#define AT91_CAST(a) (a) -#else -#define AT91_CAST(a) -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR System Peripherals -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SYS { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register - AT91_REG Reserved2[45]; // - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved3[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved4[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register - AT91_REG Reserved5[54]; // - AT91_REG PIOA_PER; // PIO Enable Register - AT91_REG PIOA_PDR; // PIO Disable Register - AT91_REG PIOA_PSR; // PIO Status Register - AT91_REG Reserved6[1]; // - AT91_REG PIOA_OER; // Output Enable Register - AT91_REG PIOA_ODR; // Output Disable Registerr - AT91_REG PIOA_OSR; // Output Status Register - AT91_REG Reserved7[1]; // - AT91_REG PIOA_IFER; // Input Filter Enable Register - AT91_REG PIOA_IFDR; // Input Filter Disable Register - AT91_REG PIOA_IFSR; // Input Filter Status Register - AT91_REG Reserved8[1]; // - AT91_REG PIOA_SODR; // Set Output Data Register - AT91_REG PIOA_CODR; // Clear Output Data Register - AT91_REG PIOA_ODSR; // Output Data Status Register - AT91_REG PIOA_PDSR; // Pin Data Status Register - AT91_REG PIOA_IER; // Interrupt Enable Register - AT91_REG PIOA_IDR; // Interrupt Disable Register - AT91_REG PIOA_IMR; // Interrupt Mask Register - AT91_REG PIOA_ISR; // Interrupt Status Register - AT91_REG PIOA_MDER; // Multi-driver Enable Register - AT91_REG PIOA_MDDR; // Multi-driver Disable Register - AT91_REG PIOA_MDSR; // Multi-driver Status Register - AT91_REG Reserved9[1]; // - AT91_REG PIOA_PPUDR; // Pull-up Disable Register - AT91_REG PIOA_PPUER; // Pull-up Enable Register - AT91_REG PIOA_PPUSR; // Pull-up Status Register - AT91_REG Reserved10[1]; // - AT91_REG PIOA_ASR; // Select A Register - AT91_REG PIOA_BSR; // Select B Register - AT91_REG PIOA_ABSR; // AB Select Status Register - AT91_REG Reserved11[9]; // - AT91_REG PIOA_OWER; // Output Write Enable Register - AT91_REG PIOA_OWDR; // Output Write Disable Register - AT91_REG PIOA_OWSR; // Output Write Status Register - AT91_REG Reserved12[469]; // - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved13[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved14[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved15[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved16[3]; // - AT91_REG PMC_PCKR[3]; // Programmable Clock Register - AT91_REG Reserved17[5]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register - AT91_REG Reserved18[36]; // - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register - AT91_REG Reserved19[5]; // - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register - AT91_REG Reserved20[5]; // - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_SYS, *AT91PS_SYS; -#else - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Advanced Interrupt Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_AIC { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register -} AT91S_AIC, *AT91PS_AIC; -#else -#define AIC_SMR (AT91_CAST(AT91_REG *) 0x00000000) // (AIC_SMR) Source Mode Register -#define AIC_SVR (AT91_CAST(AT91_REG *) 0x00000080) // (AIC_SVR) Source Vector Register -#define AIC_IVR (AT91_CAST(AT91_REG *) 0x00000100) // (AIC_IVR) IRQ Vector Register -#define AIC_FVR (AT91_CAST(AT91_REG *) 0x00000104) // (AIC_FVR) FIQ Vector Register -#define AIC_ISR (AT91_CAST(AT91_REG *) 0x00000108) // (AIC_ISR) Interrupt Status Register -#define AIC_IPR (AT91_CAST(AT91_REG *) 0x0000010C) // (AIC_IPR) Interrupt Pending Register -#define AIC_IMR (AT91_CAST(AT91_REG *) 0x00000110) // (AIC_IMR) Interrupt Mask Register -#define AIC_CISR (AT91_CAST(AT91_REG *) 0x00000114) // (AIC_CISR) Core Interrupt Status Register -#define AIC_IECR (AT91_CAST(AT91_REG *) 0x00000120) // (AIC_IECR) Interrupt Enable Command Register -#define AIC_IDCR (AT91_CAST(AT91_REG *) 0x00000124) // (AIC_IDCR) Interrupt Disable Command Register -#define AIC_ICCR (AT91_CAST(AT91_REG *) 0x00000128) // (AIC_ICCR) Interrupt Clear Command Register -#define AIC_ISCR (AT91_CAST(AT91_REG *) 0x0000012C) // (AIC_ISCR) Interrupt Set Command Register -#define AIC_EOICR (AT91_CAST(AT91_REG *) 0x00000130) // (AIC_EOICR) End of Interrupt Command Register -#define AIC_SPU (AT91_CAST(AT91_REG *) 0x00000134) // (AIC_SPU) Spurious Vector Register -#define AIC_DCR (AT91_CAST(AT91_REG *) 0x00000138) // (AIC_DCR) Debug Control Register (Protect) -#define AIC_FFER (AT91_CAST(AT91_REG *) 0x00000140) // (AIC_FFER) Fast Forcing Enable Register -#define AIC_FFDR (AT91_CAST(AT91_REG *) 0x00000144) // (AIC_FFDR) Fast Forcing Disable Register -#define AIC_FFSR (AT91_CAST(AT91_REG *) 0x00000148) // (AIC_FFSR) Fast Forcing Status Register - -#endif -// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- -#define AT91C_AIC_PRIOR (0x7 << 0) // (AIC) Priority Level -#define AT91C_AIC_PRIOR_LOWEST (0x0) // (AIC) Lowest priority level -#define AT91C_AIC_PRIOR_HIGHEST (0x7) // (AIC) Highest priority level -#define AT91C_AIC_SRCTYPE (0x3 << 5) // (AIC) Interrupt Source Type -#define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL (0x0 << 5) // (AIC) Internal Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL (0x0 << 5) // (AIC) External Sources Code Label Low-level Sensitive -#define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE (0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered -#define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE (0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered -#define AT91C_AIC_SRCTYPE_HIGH_LEVEL (0x2 << 5) // (AIC) Internal Or External Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_POSITIVE_EDGE (0x3 << 5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered -// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- -#define AT91C_AIC_NFIQ (0x1 << 0) // (AIC) NFIQ Status -#define AT91C_AIC_NIRQ (0x1 << 1) // (AIC) NIRQ Status -// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- -#define AT91C_AIC_DCR_PROT (0x1 << 0) // (AIC) Protection Mode -#define AT91C_AIC_DCR_GMSK (0x1 << 1) // (AIC) General Mask - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Peripheral DMA Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PDC { - AT91_REG PDC_RPR; // Receive Pointer Register - AT91_REG PDC_RCR; // Receive Counter Register - AT91_REG PDC_TPR; // Transmit Pointer Register - AT91_REG PDC_TCR; // Transmit Counter Register - AT91_REG PDC_RNPR; // Receive Next Pointer Register - AT91_REG PDC_RNCR; // Receive Next Counter Register - AT91_REG PDC_TNPR; // Transmit Next Pointer Register - AT91_REG PDC_TNCR; // Transmit Next Counter Register - AT91_REG PDC_PTCR; // PDC Transfer Control Register - AT91_REG PDC_PTSR; // PDC Transfer Status Register -} AT91S_PDC, *AT91PS_PDC; -#else -#define PDC_RPR (AT91_CAST(AT91_REG *) 0x00000000) // (PDC_RPR) Receive Pointer Register -#define PDC_RCR (AT91_CAST(AT91_REG *) 0x00000004) // (PDC_RCR) Receive Counter Register -#define PDC_TPR (AT91_CAST(AT91_REG *) 0x00000008) // (PDC_TPR) Transmit Pointer Register -#define PDC_TCR (AT91_CAST(AT91_REG *) 0x0000000C) // (PDC_TCR) Transmit Counter Register -#define PDC_RNPR (AT91_CAST(AT91_REG *) 0x00000010) // (PDC_RNPR) Receive Next Pointer Register -#define PDC_RNCR (AT91_CAST(AT91_REG *) 0x00000014) // (PDC_RNCR) Receive Next Counter Register -#define PDC_TNPR (AT91_CAST(AT91_REG *) 0x00000018) // (PDC_TNPR) Transmit Next Pointer Register -#define PDC_TNCR (AT91_CAST(AT91_REG *) 0x0000001C) // (PDC_TNCR) Transmit Next Counter Register -#define PDC_PTCR (AT91_CAST(AT91_REG *) 0x00000020) // (PDC_PTCR) PDC Transfer Control Register -#define PDC_PTSR (AT91_CAST(AT91_REG *) 0x00000024) // (PDC_PTSR) PDC Transfer Status Register - -#endif -// -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- -#define AT91C_PDC_RXTEN (0x1 << 0) // (PDC) Receiver Transfer Enable -#define AT91C_PDC_RXTDIS (0x1 << 1) // (PDC) Receiver Transfer Disable -#define AT91C_PDC_TXTEN (0x1 << 8) // (PDC) Transmitter Transfer Enable -#define AT91C_PDC_TXTDIS (0x1 << 9) // (PDC) Transmitter Transfer Disable -// -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Debug Unit -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_DBGU { - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved0[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved1[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register -} AT91S_DBGU, *AT91PS_DBGU; -#else -#define DBGU_CR (AT91_CAST(AT91_REG *) 0x00000000) // (DBGU_CR) Control Register -#define DBGU_MR (AT91_CAST(AT91_REG *) 0x00000004) // (DBGU_MR) Mode Register -#define DBGU_IER (AT91_CAST(AT91_REG *) 0x00000008) // (DBGU_IER) Interrupt Enable Register -#define DBGU_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (DBGU_IDR) Interrupt Disable Register -#define DBGU_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (DBGU_IMR) Interrupt Mask Register -#define DBGU_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (DBGU_CSR) Channel Status Register -#define DBGU_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (DBGU_RHR) Receiver Holding Register -#define DBGU_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (DBGU_THR) Transmitter Holding Register -#define DBGU_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (DBGU_BRGR) Baud Rate Generator Register -#define DBGU_CIDR (AT91_CAST(AT91_REG *) 0x00000040) // (DBGU_CIDR) Chip ID Register -#define DBGU_EXID (AT91_CAST(AT91_REG *) 0x00000044) // (DBGU_EXID) Chip ID Extension Register -#define DBGU_FNTR (AT91_CAST(AT91_REG *) 0x00000048) // (DBGU_FNTR) Force NTRST Register - -#endif -// -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_RSTRX (0x1 << 2) // (DBGU) Reset Receiver -#define AT91C_US_RSTTX (0x1 << 3) // (DBGU) Reset Transmitter -#define AT91C_US_RXEN (0x1 << 4) // (DBGU) Receiver Enable -#define AT91C_US_RXDIS (0x1 << 5) // (DBGU) Receiver Disable -#define AT91C_US_TXEN (0x1 << 6) // (DBGU) Transmitter Enable -#define AT91C_US_TXDIS (0x1 << 7) // (DBGU) Transmitter Disable -#define AT91C_US_RSTSTA (0x1 << 8) // (DBGU) Reset Status Bits -// -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_PAR (0x7 << 9) // (DBGU) Parity type -#define AT91C_US_PAR_EVEN (0x0 << 9) // (DBGU) Even Parity -#define AT91C_US_PAR_ODD (0x1 << 9) // (DBGU) Odd Parity -#define AT91C_US_PAR_SPACE (0x2 << 9) // (DBGU) Parity forced to 0 (Space) -#define AT91C_US_PAR_MARK (0x3 << 9) // (DBGU) Parity forced to 1 (Mark) -#define AT91C_US_PAR_NONE (0x4 << 9) // (DBGU) No Parity -#define AT91C_US_PAR_MULTI_DROP (0x6 << 9) // (DBGU) Multi-drop mode -#define AT91C_US_CHMODE (0x3 << 14) // (DBGU) Channel Mode -#define AT91C_US_CHMODE_NORMAL (0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART. -#define AT91C_US_CHMODE_AUTO (0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin. -#define AT91C_US_CHMODE_LOCAL (0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal. -#define AT91C_US_CHMODE_REMOTE (0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin. -// -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXRDY (0x1 << 0) // (DBGU) RXRDY Interrupt -#define AT91C_US_TXRDY (0x1 << 1) // (DBGU) TXRDY Interrupt -#define AT91C_US_ENDRX (0x1 << 3) // (DBGU) End of Receive Transfer Interrupt -#define AT91C_US_ENDTX (0x1 << 4) // (DBGU) End of Transmit Interrupt -#define AT91C_US_OVRE (0x1 << 5) // (DBGU) Overrun Interrupt -#define AT91C_US_FRAME (0x1 << 6) // (DBGU) Framing Error Interrupt -#define AT91C_US_PARE (0x1 << 7) // (DBGU) Parity Error Interrupt -#define AT91C_US_TXEMPTY (0x1 << 9) // (DBGU) TXEMPTY Interrupt -#define AT91C_US_TXBUFE (0x1 << 11) // (DBGU) TXBUFE Interrupt -#define AT91C_US_RXBUFF (0x1 << 12) // (DBGU) RXBUFF Interrupt -#define AT91C_US_COMM_TX (0x1 << 30) // (DBGU) COMM_TX Interrupt -#define AT91C_US_COMM_RX (0x1 << 31) // (DBGU) COMM_RX Interrupt -// -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register -------- -// -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register -------- -#define AT91C_US_FORCE_NTRST (0x1 << 0) // (DBGU) Force NTRST in JTAG - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Parallel Input Output Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PIO { - AT91_REG PIO_PER; // PIO Enable Register - AT91_REG PIO_PDR; // PIO Disable Register - AT91_REG PIO_PSR; // PIO Status Register - AT91_REG Reserved0[1]; // - AT91_REG PIO_OER; // Output Enable Register - AT91_REG PIO_ODR; // Output Disable Registerr - AT91_REG PIO_OSR; // Output Status Register - AT91_REG Reserved1[1]; // - AT91_REG PIO_IFER; // Input Filter Enable Register - AT91_REG PIO_IFDR; // Input Filter Disable Register - AT91_REG PIO_IFSR; // Input Filter Status Register - AT91_REG Reserved2[1]; // - AT91_REG PIO_SODR; // Set Output Data Register - AT91_REG PIO_CODR; // Clear Output Data Register - AT91_REG PIO_ODSR; // Output Data Status Register - AT91_REG PIO_PDSR; // Pin Data Status Register - AT91_REG PIO_IER; // Interrupt Enable Register - AT91_REG PIO_IDR; // Interrupt Disable Register - AT91_REG PIO_IMR; // Interrupt Mask Register - AT91_REG PIO_ISR; // Interrupt Status Register - AT91_REG PIO_MDER; // Multi-driver Enable Register - AT91_REG PIO_MDDR; // Multi-driver Disable Register - AT91_REG PIO_MDSR; // Multi-driver Status Register - AT91_REG Reserved3[1]; // - AT91_REG PIO_PPUDR; // Pull-up Disable Register - AT91_REG PIO_PPUER; // Pull-up Enable Register - AT91_REG PIO_PPUSR; // Pull-up Status Register - AT91_REG Reserved4[1]; // - AT91_REG PIO_ASR; // Select A Register - AT91_REG PIO_BSR; // Select B Register - AT91_REG PIO_ABSR; // AB Select Status Register - AT91_REG Reserved5[9]; // - AT91_REG PIO_OWER; // Output Write Enable Register - AT91_REG PIO_OWDR; // Output Write Disable Register - AT91_REG PIO_OWSR; // Output Write Status Register -} AT91S_PIO, *AT91PS_PIO; -#else -#define PIO_PER (AT91_CAST(AT91_REG *) 0x00000000) // (PIO_PER) PIO Enable Register -#define PIO_PDR (AT91_CAST(AT91_REG *) 0x00000004) // (PIO_PDR) PIO Disable Register -#define PIO_PSR (AT91_CAST(AT91_REG *) 0x00000008) // (PIO_PSR) PIO Status Register -#define PIO_OER (AT91_CAST(AT91_REG *) 0x00000010) // (PIO_OER) Output Enable Register -#define PIO_ODR (AT91_CAST(AT91_REG *) 0x00000014) // (PIO_ODR) Output Disable Registerr -#define PIO_OSR (AT91_CAST(AT91_REG *) 0x00000018) // (PIO_OSR) Output Status Register -#define PIO_IFER (AT91_CAST(AT91_REG *) 0x00000020) // (PIO_IFER) Input Filter Enable Register -#define PIO_IFDR (AT91_CAST(AT91_REG *) 0x00000024) // (PIO_IFDR) Input Filter Disable Register -#define PIO_IFSR (AT91_CAST(AT91_REG *) 0x00000028) // (PIO_IFSR) Input Filter Status Register -#define PIO_SODR (AT91_CAST(AT91_REG *) 0x00000030) // (PIO_SODR) Set Output Data Register -#define PIO_CODR (AT91_CAST(AT91_REG *) 0x00000034) // (PIO_CODR) Clear Output Data Register -#define PIO_ODSR (AT91_CAST(AT91_REG *) 0x00000038) // (PIO_ODSR) Output Data Status Register -#define PIO_PDSR (AT91_CAST(AT91_REG *) 0x0000003C) // (PIO_PDSR) Pin Data Status Register -#define PIO_IER (AT91_CAST(AT91_REG *) 0x00000040) // (PIO_IER) Interrupt Enable Register -#define PIO_IDR (AT91_CAST(AT91_REG *) 0x00000044) // (PIO_IDR) Interrupt Disable Register -#define PIO_IMR (AT91_CAST(AT91_REG *) 0x00000048) // (PIO_IMR) Interrupt Mask Register -#define PIO_ISR (AT91_CAST(AT91_REG *) 0x0000004C) // (PIO_ISR) Interrupt Status Register -#define PIO_MDER (AT91_CAST(AT91_REG *) 0x00000050) // (PIO_MDER) Multi-driver Enable Register -#define PIO_MDDR (AT91_CAST(AT91_REG *) 0x00000054) // (PIO_MDDR) Multi-driver Disable Register -#define PIO_MDSR (AT91_CAST(AT91_REG *) 0x00000058) // (PIO_MDSR) Multi-driver Status Register -#define PIO_PPUDR (AT91_CAST(AT91_REG *) 0x00000060) // (PIO_PPUDR) Pull-up Disable Register -#define PIO_PPUER (AT91_CAST(AT91_REG *) 0x00000064) // (PIO_PPUER) Pull-up Enable Register -#define PIO_PPUSR (AT91_CAST(AT91_REG *) 0x00000068) // (PIO_PPUSR) Pull-up Status Register -#define PIO_ASR (AT91_CAST(AT91_REG *) 0x00000070) // (PIO_ASR) Select A Register -#define PIO_BSR (AT91_CAST(AT91_REG *) 0x00000074) // (PIO_BSR) Select B Register -#define PIO_ABSR (AT91_CAST(AT91_REG *) 0x00000078) // (PIO_ABSR) AB Select Status Register -#define PIO_OWER (AT91_CAST(AT91_REG *) 0x000000A0) // (PIO_OWER) Output Write Enable Register -#define PIO_OWDR (AT91_CAST(AT91_REG *) 0x000000A4) // (PIO_OWDR) Output Write Disable Register -#define PIO_OWSR (AT91_CAST(AT91_REG *) 0x000000A8) // (PIO_OWSR) Output Write Status Register - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Clock Generator Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CKGR { - AT91_REG CKGR_MOR; // Main Oscillator Register - AT91_REG CKGR_MCFR; // Main Clock Frequency Register - AT91_REG Reserved0[1]; // - AT91_REG CKGR_PLLR; // PLL Register -} AT91S_CKGR, *AT91PS_CKGR; -#else -#define CKGR_MOR (AT91_CAST(AT91_REG *) 0x00000000) // (CKGR_MOR) Main Oscillator Register -#define CKGR_MCFR (AT91_CAST(AT91_REG *) 0x00000004) // (CKGR_MCFR) Main Clock Frequency Register -#define CKGR_PLLR (AT91_CAST(AT91_REG *) 0x0000000C) // (CKGR_PLLR) PLL Register - -#endif -// -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- -#define AT91C_CKGR_MOSCEN (0x1 << 0) // (CKGR) Main Oscillator Enable -#define AT91C_CKGR_OSCBYPASS (0x1 << 1) // (CKGR) Main Oscillator Bypass -#define AT91C_CKGR_OSCOUNT (0xFF << 8) // (CKGR) Main Oscillator Start-up Time -// -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- -#define AT91C_CKGR_MAINF (0xFFFF << 0) // (CKGR) Main Clock Frequency -#define AT91C_CKGR_MAINRDY (0x1 << 16) // (CKGR) Main Clock Ready -// -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register -------- -#define AT91C_CKGR_DIV (0xFF << 0) // (CKGR) Divider Selected -#define AT91C_CKGR_DIV_0 (0x0) // (CKGR) Divider output is 0 -#define AT91C_CKGR_DIV_BYPASS (0x1) // (CKGR) Divider is bypassed -#define AT91C_CKGR_PLLCOUNT (0x3F << 8) // (CKGR) PLL Counter -#define AT91C_CKGR_OUT (0x3 << 14) // (CKGR) PLL Output Frequency Range -#define AT91C_CKGR_OUT_0 (0x0 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_1 (0x1 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_2 (0x2 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_3 (0x3 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_MUL (0x7FF << 16) // (CKGR) PLL Multiplier -#define AT91C_CKGR_USBDIV (0x3 << 28) // (CKGR) Divider for USB Clocks -#define AT91C_CKGR_USBDIV_0 (0x0 << 28) // (CKGR) Divider output is PLL clock output -#define AT91C_CKGR_USBDIV_1 (0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2 -#define AT91C_CKGR_USBDIV_2 (0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Power Management Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PMC { - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved0[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved1[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved2[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved3[3]; // - AT91_REG PMC_PCKR[3]; // Programmable Clock Register - AT91_REG Reserved4[5]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register -} AT91S_PMC, *AT91PS_PMC; -#else -#define PMC_SCER (AT91_CAST(AT91_REG *) 0x00000000) // (PMC_SCER) System Clock Enable Register -#define PMC_SCDR (AT91_CAST(AT91_REG *) 0x00000004) // (PMC_SCDR) System Clock Disable Register -#define PMC_SCSR (AT91_CAST(AT91_REG *) 0x00000008) // (PMC_SCSR) System Clock Status Register -#define PMC_PCER (AT91_CAST(AT91_REG *) 0x00000010) // (PMC_PCER) Peripheral Clock Enable Register -#define PMC_PCDR (AT91_CAST(AT91_REG *) 0x00000014) // (PMC_PCDR) Peripheral Clock Disable Register -#define PMC_PCSR (AT91_CAST(AT91_REG *) 0x00000018) // (PMC_PCSR) Peripheral Clock Status Register -#define PMC_MCKR (AT91_CAST(AT91_REG *) 0x00000030) // (PMC_MCKR) Master Clock Register -#define PMC_PCKR (AT91_CAST(AT91_REG *) 0x00000040) // (PMC_PCKR) Programmable Clock Register -#define PMC_IER (AT91_CAST(AT91_REG *) 0x00000060) // (PMC_IER) Interrupt Enable Register -#define PMC_IDR (AT91_CAST(AT91_REG *) 0x00000064) // (PMC_IDR) Interrupt Disable Register -#define PMC_SR (AT91_CAST(AT91_REG *) 0x00000068) // (PMC_SR) Status Register -#define PMC_IMR (AT91_CAST(AT91_REG *) 0x0000006C) // (PMC_IMR) Interrupt Mask Register - -#endif -// -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register -------- -#define AT91C_PMC_PCK (0x1 << 0) // (PMC) Processor Clock -#define AT91C_PMC_UDP (0x1 << 7) // (PMC) USB Device Port Clock -#define AT91C_PMC_PCK0 (0x1 << 8) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK1 (0x1 << 9) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK2 (0x1 << 10) // (PMC) Programmable Clock Output -// -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register -------- -// -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------- -// -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register -------- -// -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register -------- -// -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register -------- -// -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register -------- -#define AT91C_PMC_CSS (0x3 << 0) // (PMC) Programmable Clock Selection -#define AT91C_PMC_CSS_SLOW_CLK (0x0) // (PMC) Slow Clock is selected -#define AT91C_PMC_CSS_MAIN_CLK (0x1) // (PMC) Main Clock is selected -#define AT91C_PMC_CSS_PLL_CLK (0x3) // (PMC) Clock from PLL is selected -#define AT91C_PMC_PRES (0x7 << 2) // (PMC) Programmable Clock Prescaler -#define AT91C_PMC_PRES_CLK (0x0 << 2) // (PMC) Selected clock -#define AT91C_PMC_PRES_CLK_2 (0x1 << 2) // (PMC) Selected clock divided by 2 -#define AT91C_PMC_PRES_CLK_4 (0x2 << 2) // (PMC) Selected clock divided by 4 -#define AT91C_PMC_PRES_CLK_8 (0x3 << 2) // (PMC) Selected clock divided by 8 -#define AT91C_PMC_PRES_CLK_16 (0x4 << 2) // (PMC) Selected clock divided by 16 -#define AT91C_PMC_PRES_CLK_32 (0x5 << 2) // (PMC) Selected clock divided by 32 -#define AT91C_PMC_PRES_CLK_64 (0x6 << 2) // (PMC) Selected clock divided by 64 -// -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register -------- -// -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------- -#define AT91C_PMC_MOSCS (0x1 << 0) // (PMC) MOSC Status/Enable/Disable/Mask -#define AT91C_PMC_LOCK (0x1 << 2) // (PMC) PLL Status/Enable/Disable/Mask -#define AT91C_PMC_MCKRDY (0x1 << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK0RDY (0x1 << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK1RDY (0x1 << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK2RDY (0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask -// -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register -------- -// -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register -------- -// -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Reset Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RSTC { - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register -} AT91S_RSTC, *AT91PS_RSTC; -#else -#define RSTC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (RSTC_RCR) Reset Control Register -#define RSTC_RSR (AT91_CAST(AT91_REG *) 0x00000004) // (RSTC_RSR) Reset Status Register -#define RSTC_RMR (AT91_CAST(AT91_REG *) 0x00000008) // (RSTC_RMR) Reset Mode Register - -#endif -// -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register -------- -#define AT91C_RSTC_PROCRST (0x1 << 0) // (RSTC) Processor Reset -#define AT91C_RSTC_PERRST (0x1 << 2) // (RSTC) Peripheral Reset -#define AT91C_RSTC_EXTRST (0x1 << 3) // (RSTC) External Reset -#define AT91C_RSTC_KEY (0xFF << 24) // (RSTC) Password -// -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register -------- -#define AT91C_RSTC_URSTS (0x1 << 0) // (RSTC) User Reset Status -#define AT91C_RSTC_BODSTS (0x1 << 1) // (RSTC) Brownout Detection Status -#define AT91C_RSTC_RSTTYP (0x7 << 8) // (RSTC) Reset Type -#define AT91C_RSTC_RSTTYP_POWERUP (0x0 << 8) // (RSTC) Power-up Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WAKEUP (0x1 << 8) // (RSTC) WakeUp Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WATCHDOG (0x2 << 8) // (RSTC) Watchdog Reset. Watchdog overflow occured. -#define AT91C_RSTC_RSTTYP_SOFTWARE (0x3 << 8) // (RSTC) Software Reset. Processor reset required by the software. -#define AT91C_RSTC_RSTTYP_USER (0x4 << 8) // (RSTC) User Reset. NRST pin detected low. -#define AT91C_RSTC_RSTTYP_BROWNOUT (0x5 << 8) // (RSTC) Brownout Reset occured. -#define AT91C_RSTC_NRSTL (0x1 << 16) // (RSTC) NRST pin level -#define AT91C_RSTC_SRCMP (0x1 << 17) // (RSTC) Software Reset Command in Progress. -// -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register -------- -#define AT91C_RSTC_URSTEN (0x1 << 0) // (RSTC) User Reset Enable -#define AT91C_RSTC_URSTIEN (0x1 << 4) // (RSTC) User Reset Interrupt Enable -#define AT91C_RSTC_ERSTL (0xF << 8) // (RSTC) User Reset Length -#define AT91C_RSTC_BODIEN (0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Real Time Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RTTC { - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register -} AT91S_RTTC, *AT91PS_RTTC; -#else -#define RTTC_RTMR (AT91_CAST(AT91_REG *) 0x00000000) // (RTTC_RTMR) Real-time Mode Register -#define RTTC_RTAR (AT91_CAST(AT91_REG *) 0x00000004) // (RTTC_RTAR) Real-time Alarm Register -#define RTTC_RTVR (AT91_CAST(AT91_REG *) 0x00000008) // (RTTC_RTVR) Real-time Value Register -#define RTTC_RTSR (AT91_CAST(AT91_REG *) 0x0000000C) // (RTTC_RTSR) Real-time Status Register - -#endif -// -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register -------- -#define AT91C_RTTC_RTPRES (0xFFFF << 0) // (RTTC) Real-time Timer Prescaler Value -#define AT91C_RTTC_ALMIEN (0x1 << 16) // (RTTC) Alarm Interrupt Enable -#define AT91C_RTTC_RTTINCIEN (0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable -#define AT91C_RTTC_RTTRST (0x1 << 18) // (RTTC) Real Time Timer Restart -// -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register -------- -#define AT91C_RTTC_ALMV (0x0 << 0) // (RTTC) Alarm Value -// -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register -------- -#define AT91C_RTTC_CRTV (0x0 << 0) // (RTTC) Current Real-time Value -// -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register -------- -#define AT91C_RTTC_ALMS (0x1 << 0) // (RTTC) Real-time Alarm Status -#define AT91C_RTTC_RTTINC (0x1 << 1) // (RTTC) Real-time Timer Increment - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Periodic Interval Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PITC { - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register -} AT91S_PITC, *AT91PS_PITC; -#else -#define PITC_PIMR (AT91_CAST(AT91_REG *) 0x00000000) // (PITC_PIMR) Period Interval Mode Register -#define PITC_PISR (AT91_CAST(AT91_REG *) 0x00000004) // (PITC_PISR) Period Interval Status Register -#define PITC_PIVR (AT91_CAST(AT91_REG *) 0x00000008) // (PITC_PIVR) Period Interval Value Register -#define PITC_PIIR (AT91_CAST(AT91_REG *) 0x0000000C) // (PITC_PIIR) Period Interval Image Register - -#endif -// -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register -------- -#define AT91C_PITC_PIV (0xFFFFF << 0) // (PITC) Periodic Interval Value -#define AT91C_PITC_PITEN (0x1 << 24) // (PITC) Periodic Interval Timer Enabled -#define AT91C_PITC_PITIEN (0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable -// -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register -------- -#define AT91C_PITC_PITS (0x1 << 0) // (PITC) Periodic Interval Timer Status -// -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register -------- -#define AT91C_PITC_CPIV (0xFFFFF << 0) // (PITC) Current Periodic Interval Value -#define AT91C_PITC_PICNT (0xFFF << 20) // (PITC) Periodic Interval Counter -// -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Watchdog Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_WDTC { - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register -} AT91S_WDTC, *AT91PS_WDTC; -#else -#define WDTC_WDCR (AT91_CAST(AT91_REG *) 0x00000000) // (WDTC_WDCR) Watchdog Control Register -#define WDTC_WDMR (AT91_CAST(AT91_REG *) 0x00000004) // (WDTC_WDMR) Watchdog Mode Register -#define WDTC_WDSR (AT91_CAST(AT91_REG *) 0x00000008) // (WDTC_WDSR) Watchdog Status Register - -#endif -// -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register -------- -#define AT91C_WDTC_WDRSTT (0x1 << 0) // (WDTC) Watchdog Restart -#define AT91C_WDTC_KEY (0xFF << 24) // (WDTC) Watchdog KEY Password -// -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register -------- -#define AT91C_WDTC_WDV (0xFFF << 0) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDFIEN (0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable -#define AT91C_WDTC_WDRSTEN (0x1 << 13) // (WDTC) Watchdog Reset Enable -#define AT91C_WDTC_WDRPROC (0x1 << 14) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDDIS (0x1 << 15) // (WDTC) Watchdog Disable -#define AT91C_WDTC_WDD (0xFFF << 16) // (WDTC) Watchdog Delta Value -#define AT91C_WDTC_WDDBGHLT (0x1 << 28) // (WDTC) Watchdog Debug Halt -#define AT91C_WDTC_WDIDLEHLT (0x1 << 29) // (WDTC) Watchdog Idle Halt -// -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register -------- -#define AT91C_WDTC_WDUNF (0x1 << 0) // (WDTC) Watchdog Underflow -#define AT91C_WDTC_WDERR (0x1 << 1) // (WDTC) Watchdog Error - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Voltage Regulator Mode Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_VREG { - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_VREG, *AT91PS_VREG; -#else -#define VREG_MR (AT91_CAST(AT91_REG *) 0x00000000) // (VREG_MR) Voltage Regulator Mode Register - -#endif -// -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register -------- -#define AT91C_VREG_PSTDBY (0x1 << 0) // (VREG) Voltage Regulator Power Standby Mode - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Embedded Flash Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_EFC { - AT91_REG EFC_FMR; // MC Flash Mode Register - AT91_REG EFC_FCR; // MC Flash Command Register - AT91_REG EFC_FSR; // MC Flash Status Register - AT91_REG EFC_VR; // MC Flash Version Register -} AT91S_EFC, *AT91PS_EFC; -#else -#define MC_FMR (AT91_CAST(AT91_REG *) 0x00000000) // (MC_FMR) MC Flash Mode Register -#define MC_FCR (AT91_CAST(AT91_REG *) 0x00000004) // (MC_FCR) MC Flash Command Register -#define MC_FSR (AT91_CAST(AT91_REG *) 0x00000008) // (MC_FSR) MC Flash Status Register -#define MC_VR (AT91_CAST(AT91_REG *) 0x0000000C) // (MC_VR) MC Flash Version Register - -#endif -// -------- MC_FMR : (EFC Offset: 0x0) MC Flash Mode Register -------- -#define AT91C_MC_FRDY (0x1 << 0) // (EFC) Flash Ready -#define AT91C_MC_LOCKE (0x1 << 2) // (EFC) Lock Error -#define AT91C_MC_PROGE (0x1 << 3) // (EFC) Programming Error -#define AT91C_MC_NEBP (0x1 << 7) // (EFC) No Erase Before Programming -#define AT91C_MC_FWS (0x3 << 8) // (EFC) Flash Wait State -#define AT91C_MC_FWS_0FWS (0x0 << 8) // (EFC) 1 cycle for Read, 2 for Write operations -#define AT91C_MC_FWS_1FWS (0x1 << 8) // (EFC) 2 cycles for Read, 3 for Write operations -#define AT91C_MC_FWS_2FWS (0x2 << 8) // (EFC) 3 cycles for Read, 4 for Write operations -#define AT91C_MC_FWS_3FWS (0x3 << 8) // (EFC) 4 cycles for Read, 4 for Write operations -#define AT91C_MC_FMCN (0xFF << 16) // (EFC) Flash Microsecond Cycle Number -// -------- MC_FCR : (EFC Offset: 0x4) MC Flash Command Register -------- -#define AT91C_MC_FCMD (0xF << 0) // (EFC) Flash Command -#define AT91C_MC_FCMD_START_PROG (0x1) // (EFC) Starts the programming of th epage specified by PAGEN. -#define AT91C_MC_FCMD_LOCK (0x2) // (EFC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_PROG_AND_LOCK (0x3) // (EFC) The lock sequence automatically happens after the programming sequence is completed. -#define AT91C_MC_FCMD_UNLOCK (0x4) // (EFC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_ERASE_ALL (0x8) // (EFC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled. -#define AT91C_MC_FCMD_SET_GP_NVM (0xB) // (EFC) Set General Purpose NVM bits. -#define AT91C_MC_FCMD_CLR_GP_NVM (0xD) // (EFC) Clear General Purpose NVM bits. -#define AT91C_MC_FCMD_SET_SECURITY (0xF) // (EFC) Set Security Bit. -#define AT91C_MC_PAGEN (0x3FF << 8) // (EFC) Page Number -#define AT91C_MC_KEY (0xFF << 24) // (EFC) Writing Protect Key -// -------- MC_FSR : (EFC Offset: 0x8) MC Flash Command Register -------- -#define AT91C_MC_SECURITY (0x1 << 4) // (EFC) Security Bit Status -#define AT91C_MC_GPNVM0 (0x1 << 8) // (EFC) Sector 0 Lock Status -#define AT91C_MC_GPNVM1 (0x1 << 9) // (EFC) Sector 1 Lock Status -#define AT91C_MC_GPNVM2 (0x1 << 10) // (EFC) Sector 2 Lock Status -#define AT91C_MC_GPNVM3 (0x1 << 11) // (EFC) Sector 3 Lock Status -#define AT91C_MC_GPNVM4 (0x1 << 12) // (EFC) Sector 4 Lock Status -#define AT91C_MC_GPNVM5 (0x1 << 13) // (EFC) Sector 5 Lock Status -#define AT91C_MC_GPNVM6 (0x1 << 14) // (EFC) Sector 6 Lock Status -#define AT91C_MC_GPNVM7 (0x1 << 15) // (EFC) Sector 7 Lock Status -#define AT91C_MC_LOCKS0 (0x1 << 16) // (EFC) Sector 0 Lock Status -#define AT91C_MC_LOCKS1 (0x1 << 17) // (EFC) Sector 1 Lock Status -#define AT91C_MC_LOCKS2 (0x1 << 18) // (EFC) Sector 2 Lock Status -#define AT91C_MC_LOCKS3 (0x1 << 19) // (EFC) Sector 3 Lock Status -#define AT91C_MC_LOCKS4 (0x1 << 20) // (EFC) Sector 4 Lock Status -#define AT91C_MC_LOCKS5 (0x1 << 21) // (EFC) Sector 5 Lock Status -#define AT91C_MC_LOCKS6 (0x1 << 22) // (EFC) Sector 6 Lock Status -#define AT91C_MC_LOCKS7 (0x1 << 23) // (EFC) Sector 7 Lock Status -#define AT91C_MC_LOCKS8 (0x1 << 24) // (EFC) Sector 8 Lock Status -#define AT91C_MC_LOCKS9 (0x1 << 25) // (EFC) Sector 9 Lock Status -#define AT91C_MC_LOCKS10 (0x1 << 26) // (EFC) Sector 10 Lock Status -#define AT91C_MC_LOCKS11 (0x1 << 27) // (EFC) Sector 11 Lock Status -#define AT91C_MC_LOCKS12 (0x1 << 28) // (EFC) Sector 12 Lock Status -#define AT91C_MC_LOCKS13 (0x1 << 29) // (EFC) Sector 13 Lock Status -#define AT91C_MC_LOCKS14 (0x1 << 30) // (EFC) Sector 14 Lock Status -#define AT91C_MC_LOCKS15 (0x1 << 31) // (EFC) Sector 15 Lock Status -// -------- EFC_VR : (EFC Offset: 0xc) EFC version register -------- -#define AT91C_EFC_VERSION (0xFFF << 0) // (EFC) EFC version number -#define AT91C_EFC_MFN (0x7 << 16) // (EFC) EFC MFN - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Memory Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_MC { - AT91_REG MC_RCR; // MC Remap Control Register - AT91_REG MC_ASR; // MC Abort Status Register - AT91_REG MC_AASR; // MC Abort Address Status Register - AT91_REG Reserved0[1]; // - AT91_REG MC_PUIA[16]; // MC Protection Unit Area - AT91_REG MC_PUP; // MC Protection Unit Peripherals - AT91_REG MC_PUER; // MC Protection Unit Enable Register - AT91_REG Reserved1[2]; // - AT91_REG MC0_FMR; // MC Flash Mode Register - AT91_REG MC0_FCR; // MC Flash Command Register - AT91_REG MC0_FSR; // MC Flash Status Register - AT91_REG MC0_VR; // MC Flash Version Register - AT91_REG MC1_FMR; // MC Flash Mode Register - AT91_REG MC1_FCR; // MC Flash Command Register - AT91_REG MC1_FSR; // MC Flash Status Register - AT91_REG MC1_VR; // MC Flash Version Register -} AT91S_MC, *AT91PS_MC; -#else -#define MC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (MC_RCR) MC Remap Control Register -#define MC_ASR (AT91_CAST(AT91_REG *) 0x00000004) // (MC_ASR) MC Abort Status Register -#define MC_AASR (AT91_CAST(AT91_REG *) 0x00000008) // (MC_AASR) MC Abort Address Status Register -#define MC_PUIA (AT91_CAST(AT91_REG *) 0x00000010) // (MC_PUIA) MC Protection Unit Area -#define MC_PUP (AT91_CAST(AT91_REG *) 0x00000050) // (MC_PUP) MC Protection Unit Peripherals -#define MC_PUER (AT91_CAST(AT91_REG *) 0x00000054) // (MC_PUER) MC Protection Unit Enable Register - -#endif -// -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register -------- -#define AT91C_MC_RCB (0x1 << 0) // (MC) Remap Command Bit -// -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register -------- -#define AT91C_MC_UNDADD (0x1 << 0) // (MC) Undefined Addess Abort Status -#define AT91C_MC_MISADD (0x1 << 1) // (MC) Misaligned Addess Abort Status -#define AT91C_MC_MPU (0x1 << 2) // (MC) Memory protection Unit Abort Status -#define AT91C_MC_ABTSZ (0x3 << 8) // (MC) Abort Size Status -#define AT91C_MC_ABTSZ_BYTE (0x0 << 8) // (MC) Byte -#define AT91C_MC_ABTSZ_HWORD (0x1 << 8) // (MC) Half-word -#define AT91C_MC_ABTSZ_WORD (0x2 << 8) // (MC) Word -#define AT91C_MC_ABTTYP (0x3 << 10) // (MC) Abort Type Status -#define AT91C_MC_ABTTYP_DATAR (0x0 << 10) // (MC) Data Read -#define AT91C_MC_ABTTYP_DATAW (0x1 << 10) // (MC) Data Write -#define AT91C_MC_ABTTYP_FETCH (0x2 << 10) // (MC) Code Fetch -#define AT91C_MC_MST0 (0x1 << 16) // (MC) Master 0 Abort Source -#define AT91C_MC_MST1 (0x1 << 17) // (MC) Master 1 Abort Source -#define AT91C_MC_SVMST0 (0x1 << 24) // (MC) Saved Master 0 Abort Source -#define AT91C_MC_SVMST1 (0x1 << 25) // (MC) Saved Master 1 Abort Source -// -------- MC_PUIA : (MC Offset: 0x10) MC Protection Unit Area -------- -#define AT91C_MC_PROT (0x3 << 0) // (MC) Protection -#define AT91C_MC_PROT_PNAUNA (0x0) // (MC) Privilege: No Access, User: No Access -#define AT91C_MC_PROT_PRWUNA (0x1) // (MC) Privilege: Read/Write, User: No Access -#define AT91C_MC_PROT_PRWURO (0x2) // (MC) Privilege: Read/Write, User: Read Only -#define AT91C_MC_PROT_PRWURW (0x3) // (MC) Privilege: Read/Write, User: Read/Write -#define AT91C_MC_SIZE (0xF << 4) // (MC) Internal Area Size -#define AT91C_MC_SIZE_1KB (0x0 << 4) // (MC) Area size 1KByte -#define AT91C_MC_SIZE_2KB (0x1 << 4) // (MC) Area size 2KByte -#define AT91C_MC_SIZE_4KB (0x2 << 4) // (MC) Area size 4KByte -#define AT91C_MC_SIZE_8KB (0x3 << 4) // (MC) Area size 8KByte -#define AT91C_MC_SIZE_16KB (0x4 << 4) // (MC) Area size 16KByte -#define AT91C_MC_SIZE_32KB (0x5 << 4) // (MC) Area size 32KByte -#define AT91C_MC_SIZE_64KB (0x6 << 4) // (MC) Area size 64KByte -#define AT91C_MC_SIZE_128KB (0x7 << 4) // (MC) Area size 128KByte -#define AT91C_MC_SIZE_256KB (0x8 << 4) // (MC) Area size 256KByte -#define AT91C_MC_SIZE_512KB (0x9 << 4) // (MC) Area size 512KByte -#define AT91C_MC_SIZE_1MB (0xA << 4) // (MC) Area size 1MByte -#define AT91C_MC_SIZE_2MB (0xB << 4) // (MC) Area size 2MByte -#define AT91C_MC_SIZE_4MB (0xC << 4) // (MC) Area size 4MByte -#define AT91C_MC_SIZE_8MB (0xD << 4) // (MC) Area size 8MByte -#define AT91C_MC_SIZE_16MB (0xE << 4) // (MC) Area size 16MByte -#define AT91C_MC_SIZE_64MB (0xF << 4) // (MC) Area size 64MByte -#define AT91C_MC_BA (0x3FFFF << 10) // (MC) Internal Area Base Address -// -------- MC_PUP : (MC Offset: 0x50) MC Protection Unit Peripheral -------- -// -------- MC_PUER : (MC Offset: 0x54) MC Protection Unit Area -------- -#define AT91C_MC_PUEB (0x1 << 0) // (MC) Protection Unit enable Bit - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Serial Parallel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SPI { - AT91_REG SPI_CR; // Control Register - AT91_REG SPI_MR; // Mode Register - AT91_REG SPI_RDR; // Receive Data Register - AT91_REG SPI_TDR; // Transmit Data Register - AT91_REG SPI_SR; // Status Register - AT91_REG SPI_IER; // Interrupt Enable Register - AT91_REG SPI_IDR; // Interrupt Disable Register - AT91_REG SPI_IMR; // Interrupt Mask Register - AT91_REG Reserved0[4]; // - AT91_REG SPI_CSR[4]; // Chip Select Register - AT91_REG Reserved1[48]; // - AT91_REG SPI_RPR; // Receive Pointer Register - AT91_REG SPI_RCR; // Receive Counter Register - AT91_REG SPI_TPR; // Transmit Pointer Register - AT91_REG SPI_TCR; // Transmit Counter Register - AT91_REG SPI_RNPR; // Receive Next Pointer Register - AT91_REG SPI_RNCR; // Receive Next Counter Register - AT91_REG SPI_TNPR; // Transmit Next Pointer Register - AT91_REG SPI_TNCR; // Transmit Next Counter Register - AT91_REG SPI_PTCR; // PDC Transfer Control Register - AT91_REG SPI_PTSR; // PDC Transfer Status Register -} AT91S_SPI, *AT91PS_SPI; -#else -#define SPI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SPI_CR) Control Register -#define SPI_MR (AT91_CAST(AT91_REG *) 0x00000004) // (SPI_MR) Mode Register -#define SPI_RDR (AT91_CAST(AT91_REG *) 0x00000008) // (SPI_RDR) Receive Data Register -#define SPI_TDR (AT91_CAST(AT91_REG *) 0x0000000C) // (SPI_TDR) Transmit Data Register -#define SPI_SR (AT91_CAST(AT91_REG *) 0x00000010) // (SPI_SR) Status Register -#define SPI_IER (AT91_CAST(AT91_REG *) 0x00000014) // (SPI_IER) Interrupt Enable Register -#define SPI_IDR (AT91_CAST(AT91_REG *) 0x00000018) // (SPI_IDR) Interrupt Disable Register -#define SPI_IMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SPI_IMR) Interrupt Mask Register -#define SPI_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (SPI_CSR) Chip Select Register - -#endif -// -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- -#define AT91C_SPI_SPIEN (0x1 << 0) // (SPI) SPI Enable -#define AT91C_SPI_SPIDIS (0x1 << 1) // (SPI) SPI Disable -#define AT91C_SPI_SWRST (0x1 << 7) // (SPI) SPI Software reset -#define AT91C_SPI_LASTXFER (0x1 << 24) // (SPI) SPI Last Transfer -// -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- -#define AT91C_SPI_MSTR (0x1 << 0) // (SPI) Master/Slave Mode -#define AT91C_SPI_PS (0x1 << 1) // (SPI) Peripheral Select -#define AT91C_SPI_PS_FIXED (0x0 << 1) // (SPI) Fixed Peripheral Select -#define AT91C_SPI_PS_VARIABLE (0x1 << 1) // (SPI) Variable Peripheral Select -#define AT91C_SPI_PCSDEC (0x1 << 2) // (SPI) Chip Select Decode -#define AT91C_SPI_FDIV (0x1 << 3) // (SPI) Clock Selection -#define AT91C_SPI_MODFDIS (0x1 << 4) // (SPI) Mode Fault Detection -#define AT91C_SPI_LLB (0x1 << 7) // (SPI) Clock Selection -#define AT91C_SPI_PCS (0xF << 16) // (SPI) Peripheral Chip Select -#define AT91C_SPI_DLYBCS (0xFF << 24) // (SPI) Delay Between Chip Selects -// -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- -#define AT91C_SPI_RD (0xFFFF << 0) // (SPI) Receive Data -#define AT91C_SPI_RPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- -#define AT91C_SPI_TD (0xFFFF << 0) // (SPI) Transmit Data -#define AT91C_SPI_TPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- -#define AT91C_SPI_RDRF (0x1 << 0) // (SPI) Receive Data Register Full -#define AT91C_SPI_TDRE (0x1 << 1) // (SPI) Transmit Data Register Empty -#define AT91C_SPI_MODF (0x1 << 2) // (SPI) Mode Fault Error -#define AT91C_SPI_OVRES (0x1 << 3) // (SPI) Overrun Error Status -#define AT91C_SPI_ENDRX (0x1 << 4) // (SPI) End of Receiver Transfer -#define AT91C_SPI_ENDTX (0x1 << 5) // (SPI) End of Receiver Transfer -#define AT91C_SPI_RXBUFF (0x1 << 6) // (SPI) RXBUFF Interrupt -#define AT91C_SPI_TXBUFE (0x1 << 7) // (SPI) TXBUFE Interrupt -#define AT91C_SPI_NSSR (0x1 << 8) // (SPI) NSSR Interrupt -#define AT91C_SPI_TXEMPTY (0x1 << 9) // (SPI) TXEMPTY Interrupt -#define AT91C_SPI_SPIENS (0x1 << 16) // (SPI) Enable Status -// -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- -// -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- -// -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- -// -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- -#define AT91C_SPI_CPOL (0x1 << 0) // (SPI) Clock Polarity -#define AT91C_SPI_NCPHA (0x1 << 1) // (SPI) Clock Phase -#define AT91C_SPI_CSAAT (0x1 << 3) // (SPI) Chip Select Active After Transfer -#define AT91C_SPI_BITS (0xF << 4) // (SPI) Bits Per Transfer -#define AT91C_SPI_BITS_8 (0x0 << 4) // (SPI) 8 Bits Per transfer -#define AT91C_SPI_BITS_9 (0x1 << 4) // (SPI) 9 Bits Per transfer -#define AT91C_SPI_BITS_10 (0x2 << 4) // (SPI) 10 Bits Per transfer -#define AT91C_SPI_BITS_11 (0x3 << 4) // (SPI) 11 Bits Per transfer -#define AT91C_SPI_BITS_12 (0x4 << 4) // (SPI) 12 Bits Per transfer -#define AT91C_SPI_BITS_13 (0x5 << 4) // (SPI) 13 Bits Per transfer -#define AT91C_SPI_BITS_14 (0x6 << 4) // (SPI) 14 Bits Per transfer -#define AT91C_SPI_BITS_15 (0x7 << 4) // (SPI) 15 Bits Per transfer -#define AT91C_SPI_BITS_16 (0x8 << 4) // (SPI) 16 Bits Per transfer -#define AT91C_SPI_SCBR (0xFF << 8) // (SPI) Serial Clock Baud Rate -#define AT91C_SPI_DLYBS (0xFF << 16) // (SPI) Delay Before SPCK -#define AT91C_SPI_DLYBCT (0xFF << 24) // (SPI) Delay Between Consecutive Transfers - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Analog to Digital Convertor -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_ADC { - AT91_REG ADC_CR; // ADC Control Register - AT91_REG ADC_MR; // ADC Mode Register - AT91_REG Reserved0[2]; // - AT91_REG ADC_CHER; // ADC Channel Enable Register - AT91_REG ADC_CHDR; // ADC Channel Disable Register - AT91_REG ADC_CHSR; // ADC Channel Status Register - AT91_REG ADC_SR; // ADC Status Register - AT91_REG ADC_LCDR; // ADC Last Converted Data Register - AT91_REG ADC_IER; // ADC Interrupt Enable Register - AT91_REG ADC_IDR; // ADC Interrupt Disable Register - AT91_REG ADC_IMR; // ADC Interrupt Mask Register - AT91_REG ADC_CDR0; // ADC Channel Data Register 0 - AT91_REG ADC_CDR1; // ADC Channel Data Register 1 - AT91_REG ADC_CDR2; // ADC Channel Data Register 2 - AT91_REG ADC_CDR3; // ADC Channel Data Register 3 - AT91_REG ADC_CDR4; // ADC Channel Data Register 4 - AT91_REG ADC_CDR5; // ADC Channel Data Register 5 - AT91_REG ADC_CDR6; // ADC Channel Data Register 6 - AT91_REG ADC_CDR7; // ADC Channel Data Register 7 - AT91_REG Reserved1[44]; // - AT91_REG ADC_RPR; // Receive Pointer Register - AT91_REG ADC_RCR; // Receive Counter Register - AT91_REG ADC_TPR; // Transmit Pointer Register - AT91_REG ADC_TCR; // Transmit Counter Register - AT91_REG ADC_RNPR; // Receive Next Pointer Register - AT91_REG ADC_RNCR; // Receive Next Counter Register - AT91_REG ADC_TNPR; // Transmit Next Pointer Register - AT91_REG ADC_TNCR; // Transmit Next Counter Register - AT91_REG ADC_PTCR; // PDC Transfer Control Register - AT91_REG ADC_PTSR; // PDC Transfer Status Register -} AT91S_ADC, *AT91PS_ADC; -#else -#define ADC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (ADC_CR) ADC Control Register -#define ADC_MR (AT91_CAST(AT91_REG *) 0x00000004) // (ADC_MR) ADC Mode Register -#define ADC_CHER (AT91_CAST(AT91_REG *) 0x00000010) // (ADC_CHER) ADC Channel Enable Register -#define ADC_CHDR (AT91_CAST(AT91_REG *) 0x00000014) // (ADC_CHDR) ADC Channel Disable Register -#define ADC_CHSR (AT91_CAST(AT91_REG *) 0x00000018) // (ADC_CHSR) ADC Channel Status Register -#define ADC_SR (AT91_CAST(AT91_REG *) 0x0000001C) // (ADC_SR) ADC Status Register -#define ADC_LCDR (AT91_CAST(AT91_REG *) 0x00000020) // (ADC_LCDR) ADC Last Converted Data Register -#define ADC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (ADC_IER) ADC Interrupt Enable Register -#define ADC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (ADC_IDR) ADC Interrupt Disable Register -#define ADC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (ADC_IMR) ADC Interrupt Mask Register -#define ADC_CDR0 (AT91_CAST(AT91_REG *) 0x00000030) // (ADC_CDR0) ADC Channel Data Register 0 -#define ADC_CDR1 (AT91_CAST(AT91_REG *) 0x00000034) // (ADC_CDR1) ADC Channel Data Register 1 -#define ADC_CDR2 (AT91_CAST(AT91_REG *) 0x00000038) // (ADC_CDR2) ADC Channel Data Register 2 -#define ADC_CDR3 (AT91_CAST(AT91_REG *) 0x0000003C) // (ADC_CDR3) ADC Channel Data Register 3 -#define ADC_CDR4 (AT91_CAST(AT91_REG *) 0x00000040) // (ADC_CDR4) ADC Channel Data Register 4 -#define ADC_CDR5 (AT91_CAST(AT91_REG *) 0x00000044) // (ADC_CDR5) ADC Channel Data Register 5 -#define ADC_CDR6 (AT91_CAST(AT91_REG *) 0x00000048) // (ADC_CDR6) ADC Channel Data Register 6 -#define ADC_CDR7 (AT91_CAST(AT91_REG *) 0x0000004C) // (ADC_CDR7) ADC Channel Data Register 7 - -#endif -// -------- ADC_CR : (ADC Offset: 0x0) ADC Control Register -------- -#define AT91C_ADC_SWRST (0x1 << 0) // (ADC) Software Reset -#define AT91C_ADC_START (0x1 << 1) // (ADC) Start Conversion -// -------- ADC_MR : (ADC Offset: 0x4) ADC Mode Register -------- -#define AT91C_ADC_TRGEN (0x1 << 0) // (ADC) Trigger Enable -#define AT91C_ADC_TRGEN_DIS (0x0) // (ADC) Hradware triggers are disabled. Starting a conversion is only possible by software -#define AT91C_ADC_TRGEN_EN (0x1) // (ADC) Hardware trigger selected by TRGSEL field is enabled. -#define AT91C_ADC_TRGSEL (0x7 << 1) // (ADC) Trigger Selection -#define AT91C_ADC_TRGSEL_TIOA0 (0x0 << 1) // (ADC) Selected TRGSEL = TIAO0 -#define AT91C_ADC_TRGSEL_TIOA1 (0x1 << 1) // (ADC) Selected TRGSEL = TIAO1 -#define AT91C_ADC_TRGSEL_TIOA2 (0x2 << 1) // (ADC) Selected TRGSEL = TIAO2 -#define AT91C_ADC_TRGSEL_TIOA3 (0x3 << 1) // (ADC) Selected TRGSEL = TIAO3 -#define AT91C_ADC_TRGSEL_TIOA4 (0x4 << 1) // (ADC) Selected TRGSEL = TIAO4 -#define AT91C_ADC_TRGSEL_TIOA5 (0x5 << 1) // (ADC) Selected TRGSEL = TIAO5 -#define AT91C_ADC_TRGSEL_EXT (0x6 << 1) // (ADC) Selected TRGSEL = External Trigger -#define AT91C_ADC_LOWRES (0x1 << 4) // (ADC) Resolution. -#define AT91C_ADC_LOWRES_10_BIT (0x0 << 4) // (ADC) 10-bit resolution -#define AT91C_ADC_LOWRES_8_BIT (0x1 << 4) // (ADC) 8-bit resolution -#define AT91C_ADC_SLEEP (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_SLEEP_NORMAL_MODE (0x0 << 5) // (ADC) Normal Mode -#define AT91C_ADC_SLEEP_MODE (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_PRESCAL (0x3F << 8) // (ADC) Prescaler rate selection -#define AT91C_ADC_STARTUP (0x1F << 16) // (ADC) Startup Time -#define AT91C_ADC_SHTIM (0xF << 24) // (ADC) Sample & Hold Time -// -------- ADC_CHER : (ADC Offset: 0x10) ADC Channel Enable Register -------- -#define AT91C_ADC_CH0 (0x1 << 0) // (ADC) Channel 0 -#define AT91C_ADC_CH1 (0x1 << 1) // (ADC) Channel 1 -#define AT91C_ADC_CH2 (0x1 << 2) // (ADC) Channel 2 -#define AT91C_ADC_CH3 (0x1 << 3) // (ADC) Channel 3 -#define AT91C_ADC_CH4 (0x1 << 4) // (ADC) Channel 4 -#define AT91C_ADC_CH5 (0x1 << 5) // (ADC) Channel 5 -#define AT91C_ADC_CH6 (0x1 << 6) // (ADC) Channel 6 -#define AT91C_ADC_CH7 (0x1 << 7) // (ADC) Channel 7 -// -------- ADC_CHDR : (ADC Offset: 0x14) ADC Channel Disable Register -------- -// -------- ADC_CHSR : (ADC Offset: 0x18) ADC Channel Status Register -------- -// -------- ADC_SR : (ADC Offset: 0x1c) ADC Status Register -------- -#define AT91C_ADC_EOC0 (0x1 << 0) // (ADC) End of Conversion -#define AT91C_ADC_EOC1 (0x1 << 1) // (ADC) End of Conversion -#define AT91C_ADC_EOC2 (0x1 << 2) // (ADC) End of Conversion -#define AT91C_ADC_EOC3 (0x1 << 3) // (ADC) End of Conversion -#define AT91C_ADC_EOC4 (0x1 << 4) // (ADC) End of Conversion -#define AT91C_ADC_EOC5 (0x1 << 5) // (ADC) End of Conversion -#define AT91C_ADC_EOC6 (0x1 << 6) // (ADC) End of Conversion -#define AT91C_ADC_EOC7 (0x1 << 7) // (ADC) End of Conversion -#define AT91C_ADC_OVRE0 (0x1 << 8) // (ADC) Overrun Error -#define AT91C_ADC_OVRE1 (0x1 << 9) // (ADC) Overrun Error -#define AT91C_ADC_OVRE2 (0x1 << 10) // (ADC) Overrun Error -#define AT91C_ADC_OVRE3 (0x1 << 11) // (ADC) Overrun Error -#define AT91C_ADC_OVRE4 (0x1 << 12) // (ADC) Overrun Error -#define AT91C_ADC_OVRE5 (0x1 << 13) // (ADC) Overrun Error -#define AT91C_ADC_OVRE6 (0x1 << 14) // (ADC) Overrun Error -#define AT91C_ADC_OVRE7 (0x1 << 15) // (ADC) Overrun Error -#define AT91C_ADC_DRDY (0x1 << 16) // (ADC) Data Ready -#define AT91C_ADC_GOVRE (0x1 << 17) // (ADC) General Overrun -#define AT91C_ADC_ENDRX (0x1 << 18) // (ADC) End of Receiver Transfer -#define AT91C_ADC_RXBUFF (0x1 << 19) // (ADC) RXBUFF Interrupt -// -------- ADC_LCDR : (ADC Offset: 0x20) ADC Last Converted Data Register -------- -#define AT91C_ADC_LDATA (0x3FF << 0) // (ADC) Last Data Converted -// -------- ADC_IER : (ADC Offset: 0x24) ADC Interrupt Enable Register -------- -// -------- ADC_IDR : (ADC Offset: 0x28) ADC Interrupt Disable Register -------- -// -------- ADC_IMR : (ADC Offset: 0x2c) ADC Interrupt Mask Register -------- -// -------- ADC_CDR0 : (ADC Offset: 0x30) ADC Channel Data Register 0 -------- -#define AT91C_ADC_DATA (0x3FF << 0) // (ADC) Converted Data -// -------- ADC_CDR1 : (ADC Offset: 0x34) ADC Channel Data Register 1 -------- -// -------- ADC_CDR2 : (ADC Offset: 0x38) ADC Channel Data Register 2 -------- -// -------- ADC_CDR3 : (ADC Offset: 0x3c) ADC Channel Data Register 3 -------- -// -------- ADC_CDR4 : (ADC Offset: 0x40) ADC Channel Data Register 4 -------- -// -------- ADC_CDR5 : (ADC Offset: 0x44) ADC Channel Data Register 5 -------- -// -------- ADC_CDR6 : (ADC Offset: 0x48) ADC Channel Data Register 6 -------- -// -------- ADC_CDR7 : (ADC Offset: 0x4c) ADC Channel Data Register 7 -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SSC { - AT91_REG SSC_CR; // Control Register - AT91_REG SSC_CMR; // Clock Mode Register - AT91_REG Reserved0[2]; // - AT91_REG SSC_RCMR; // Receive Clock ModeRegister - AT91_REG SSC_RFMR; // Receive Frame Mode Register - AT91_REG SSC_TCMR; // Transmit Clock Mode Register - AT91_REG SSC_TFMR; // Transmit Frame Mode Register - AT91_REG SSC_RHR; // Receive Holding Register - AT91_REG SSC_THR; // Transmit Holding Register - AT91_REG Reserved1[2]; // - AT91_REG SSC_RSHR; // Receive Sync Holding Register - AT91_REG SSC_TSHR; // Transmit Sync Holding Register - AT91_REG Reserved2[2]; // - AT91_REG SSC_SR; // Status Register - AT91_REG SSC_IER; // Interrupt Enable Register - AT91_REG SSC_IDR; // Interrupt Disable Register - AT91_REG SSC_IMR; // Interrupt Mask Register - AT91_REG Reserved3[44]; // - AT91_REG SSC_RPR; // Receive Pointer Register - AT91_REG SSC_RCR; // Receive Counter Register - AT91_REG SSC_TPR; // Transmit Pointer Register - AT91_REG SSC_TCR; // Transmit Counter Register - AT91_REG SSC_RNPR; // Receive Next Pointer Register - AT91_REG SSC_RNCR; // Receive Next Counter Register - AT91_REG SSC_TNPR; // Transmit Next Pointer Register - AT91_REG SSC_TNCR; // Transmit Next Counter Register - AT91_REG SSC_PTCR; // PDC Transfer Control Register - AT91_REG SSC_PTSR; // PDC Transfer Status Register -} AT91S_SSC, *AT91PS_SSC; -#else -#define SSC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SSC_CR) Control Register -#define SSC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (SSC_CMR) Clock Mode Register -#define SSC_RCMR (AT91_CAST(AT91_REG *) 0x00000010) // (SSC_RCMR) Receive Clock ModeRegister -#define SSC_RFMR (AT91_CAST(AT91_REG *) 0x00000014) // (SSC_RFMR) Receive Frame Mode Register -#define SSC_TCMR (AT91_CAST(AT91_REG *) 0x00000018) // (SSC_TCMR) Transmit Clock Mode Register -#define SSC_TFMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SSC_TFMR) Transmit Frame Mode Register -#define SSC_RHR (AT91_CAST(AT91_REG *) 0x00000020) // (SSC_RHR) Receive Holding Register -#define SSC_THR (AT91_CAST(AT91_REG *) 0x00000024) // (SSC_THR) Transmit Holding Register -#define SSC_RSHR (AT91_CAST(AT91_REG *) 0x00000030) // (SSC_RSHR) Receive Sync Holding Register -#define SSC_TSHR (AT91_CAST(AT91_REG *) 0x00000034) // (SSC_TSHR) Transmit Sync Holding Register -#define SSC_SR (AT91_CAST(AT91_REG *) 0x00000040) // (SSC_SR) Status Register -#define SSC_IER (AT91_CAST(AT91_REG *) 0x00000044) // (SSC_IER) Interrupt Enable Register -#define SSC_IDR (AT91_CAST(AT91_REG *) 0x00000048) // (SSC_IDR) Interrupt Disable Register -#define SSC_IMR (AT91_CAST(AT91_REG *) 0x0000004C) // (SSC_IMR) Interrupt Mask Register - -#endif -// -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register -------- -#define AT91C_SSC_RXEN (0x1 << 0) // (SSC) Receive Enable -#define AT91C_SSC_RXDIS (0x1 << 1) // (SSC) Receive Disable -#define AT91C_SSC_TXEN (0x1 << 8) // (SSC) Transmit Enable -#define AT91C_SSC_TXDIS (0x1 << 9) // (SSC) Transmit Disable -#define AT91C_SSC_SWRST (0x1 << 15) // (SSC) Software Reset -// -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register -------- -#define AT91C_SSC_CKS (0x3 << 0) // (SSC) Receive/Transmit Clock Selection -#define AT91C_SSC_CKS_DIV (0x0) // (SSC) Divided Clock -#define AT91C_SSC_CKS_TK (0x1) // (SSC) TK Clock signal -#define AT91C_SSC_CKS_RK (0x2) // (SSC) RK pin -#define AT91C_SSC_CKO (0x7 << 2) // (SSC) Receive/Transmit Clock Output Mode Selection -#define AT91C_SSC_CKO_NONE (0x0 << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only -#define AT91C_SSC_CKO_CONTINOUS (0x1 << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output -#define AT91C_SSC_CKO_DATA_TX (0x2 << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output -#define AT91C_SSC_CKI (0x1 << 5) // (SSC) Receive/Transmit Clock Inversion -#define AT91C_SSC_START (0xF << 8) // (SSC) Receive/Transmit Start Selection -#define AT91C_SSC_START_CONTINOUS (0x0 << 8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. -#define AT91C_SSC_START_TX (0x1 << 8) // (SSC) Transmit/Receive start -#define AT91C_SSC_START_LOW_RF (0x2 << 8) // (SSC) Detection of a low level on RF input -#define AT91C_SSC_START_HIGH_RF (0x3 << 8) // (SSC) Detection of a high level on RF input -#define AT91C_SSC_START_FALL_RF (0x4 << 8) // (SSC) Detection of a falling edge on RF input -#define AT91C_SSC_START_RISE_RF (0x5 << 8) // (SSC) Detection of a rising edge on RF input -#define AT91C_SSC_START_LEVEL_RF (0x6 << 8) // (SSC) Detection of any level change on RF input -#define AT91C_SSC_START_EDGE_RF (0x7 << 8) // (SSC) Detection of any edge on RF input -#define AT91C_SSC_START_0 (0x8 << 8) // (SSC) Compare 0 -#define AT91C_SSC_STTDLY (0xFF << 16) // (SSC) Receive/Transmit Start Delay -#define AT91C_SSC_PERIOD (0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection -// -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register -------- -#define AT91C_SSC_DATLEN (0x1F << 0) // (SSC) Data Length -#define AT91C_SSC_LOOP (0x1 << 5) // (SSC) Loop Mode -#define AT91C_SSC_MSBF (0x1 << 7) // (SSC) Most Significant Bit First -#define AT91C_SSC_DATNB (0xF << 8) // (SSC) Data Number per Frame -#define AT91C_SSC_FSLEN (0xF << 16) // (SSC) Receive/Transmit Frame Sync length -#define AT91C_SSC_FSOS (0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection -#define AT91C_SSC_FSOS_NONE (0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only -#define AT91C_SSC_FSOS_NEGATIVE (0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse -#define AT91C_SSC_FSOS_POSITIVE (0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse -#define AT91C_SSC_FSOS_LOW (0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer -#define AT91C_SSC_FSOS_HIGH (0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer -#define AT91C_SSC_FSOS_TOGGLE (0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer -#define AT91C_SSC_FSEDGE (0x1 << 24) // (SSC) Frame Sync Edge Detection -// -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register -------- -// -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register -------- -#define AT91C_SSC_DATDEF (0x1 << 5) // (SSC) Data Default Value -#define AT91C_SSC_FSDEN (0x1 << 23) // (SSC) Frame Sync Data Enable -// -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register -------- -#define AT91C_SSC_TXRDY (0x1 << 0) // (SSC) Transmit Ready -#define AT91C_SSC_TXEMPTY (0x1 << 1) // (SSC) Transmit Empty -#define AT91C_SSC_ENDTX (0x1 << 2) // (SSC) End Of Transmission -#define AT91C_SSC_TXBUFE (0x1 << 3) // (SSC) Transmit Buffer Empty -#define AT91C_SSC_RXRDY (0x1 << 4) // (SSC) Receive Ready -#define AT91C_SSC_OVRUN (0x1 << 5) // (SSC) Receive Overrun -#define AT91C_SSC_ENDRX (0x1 << 6) // (SSC) End of Reception -#define AT91C_SSC_RXBUFF (0x1 << 7) // (SSC) Receive Buffer Full -#define AT91C_SSC_TXSYN (0x1 << 10) // (SSC) Transmit Sync -#define AT91C_SSC_RXSYN (0x1 << 11) // (SSC) Receive Sync -#define AT91C_SSC_TXENA (0x1 << 16) // (SSC) Transmit Enable -#define AT91C_SSC_RXENA (0x1 << 17) // (SSC) Receive Enable -// -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register -------- -// -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register -------- -// -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Usart -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_USART { - AT91_REG US_CR; // Control Register - AT91_REG US_MR; // Mode Register - AT91_REG US_IER; // Interrupt Enable Register - AT91_REG US_IDR; // Interrupt Disable Register - AT91_REG US_IMR; // Interrupt Mask Register - AT91_REG US_CSR; // Channel Status Register - AT91_REG US_RHR; // Receiver Holding Register - AT91_REG US_THR; // Transmitter Holding Register - AT91_REG US_BRGR; // Baud Rate Generator Register - AT91_REG US_RTOR; // Receiver Time-out Register - AT91_REG US_TTGR; // Transmitter Time-guard Register - AT91_REG Reserved0[5]; // - AT91_REG US_FIDI; // FI_DI_Ratio Register - AT91_REG US_NER; // Nb Errors Register - AT91_REG Reserved1[1]; // - AT91_REG US_IF; // IRDA_FILTER Register - AT91_REG Reserved2[44]; // - AT91_REG US_RPR; // Receive Pointer Register - AT91_REG US_RCR; // Receive Counter Register - AT91_REG US_TPR; // Transmit Pointer Register - AT91_REG US_TCR; // Transmit Counter Register - AT91_REG US_RNPR; // Receive Next Pointer Register - AT91_REG US_RNCR; // Receive Next Counter Register - AT91_REG US_TNPR; // Transmit Next Pointer Register - AT91_REG US_TNCR; // Transmit Next Counter Register - AT91_REG US_PTCR; // PDC Transfer Control Register - AT91_REG US_PTSR; // PDC Transfer Status Register -} AT91S_USART, *AT91PS_USART; -#else -#define US_CR (AT91_CAST(AT91_REG *) 0x00000000) // (US_CR) Control Register -#define US_MR (AT91_CAST(AT91_REG *) 0x00000004) // (US_MR) Mode Register -#define US_IER (AT91_CAST(AT91_REG *) 0x00000008) // (US_IER) Interrupt Enable Register -#define US_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (US_IDR) Interrupt Disable Register -#define US_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (US_IMR) Interrupt Mask Register -#define US_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (US_CSR) Channel Status Register -#define US_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (US_RHR) Receiver Holding Register -#define US_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (US_THR) Transmitter Holding Register -#define US_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (US_BRGR) Baud Rate Generator Register -#define US_RTOR (AT91_CAST(AT91_REG *) 0x00000024) // (US_RTOR) Receiver Time-out Register -#define US_TTGR (AT91_CAST(AT91_REG *) 0x00000028) // (US_TTGR) Transmitter Time-guard Register -#define US_FIDI (AT91_CAST(AT91_REG *) 0x00000040) // (US_FIDI) FI_DI_Ratio Register -#define US_NER (AT91_CAST(AT91_REG *) 0x00000044) // (US_NER) Nb Errors Register -#define US_IF (AT91_CAST(AT91_REG *) 0x0000004C) // (US_IF) IRDA_FILTER Register - -#endif -// -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_STTBRK (0x1 << 9) // (USART) Start Break -#define AT91C_US_STPBRK (0x1 << 10) // (USART) Stop Break -#define AT91C_US_STTTO (0x1 << 11) // (USART) Start Time-out -#define AT91C_US_SENDA (0x1 << 12) // (USART) Send Address -#define AT91C_US_RSTIT (0x1 << 13) // (USART) Reset Iterations -#define AT91C_US_RSTNACK (0x1 << 14) // (USART) Reset Non Acknowledge -#define AT91C_US_RETTO (0x1 << 15) // (USART) Rearm Time-out -#define AT91C_US_DTREN (0x1 << 16) // (USART) Data Terminal ready Enable -#define AT91C_US_DTRDIS (0x1 << 17) // (USART) Data Terminal ready Disable -#define AT91C_US_RTSEN (0x1 << 18) // (USART) Request to Send enable -#define AT91C_US_RTSDIS (0x1 << 19) // (USART) Request to Send Disable -// -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_USMODE (0xF << 0) // (USART) Usart mode -#define AT91C_US_USMODE_NORMAL (0x0) // (USART) Normal -#define AT91C_US_USMODE_RS485 (0x1) // (USART) RS485 -#define AT91C_US_USMODE_HWHSH (0x2) // (USART) Hardware Handshaking -#define AT91C_US_USMODE_MODEM (0x3) // (USART) Modem -#define AT91C_US_USMODE_ISO7816_0 (0x4) // (USART) ISO7816 protocol: T = 0 -#define AT91C_US_USMODE_ISO7816_1 (0x6) // (USART) ISO7816 protocol: T = 1 -#define AT91C_US_USMODE_IRDA (0x8) // (USART) IrDA -#define AT91C_US_USMODE_SWHSH (0xC) // (USART) Software Handshaking -#define AT91C_US_CLKS (0x3 << 4) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CLKS_CLOCK (0x0 << 4) // (USART) Clock -#define AT91C_US_CLKS_FDIV1 (0x1 << 4) // (USART) fdiv1 -#define AT91C_US_CLKS_SLOW (0x2 << 4) // (USART) slow_clock (ARM) -#define AT91C_US_CLKS_EXT (0x3 << 4) // (USART) External (SCK) -#define AT91C_US_CHRL (0x3 << 6) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CHRL_5_BITS (0x0 << 6) // (USART) Character Length: 5 bits -#define AT91C_US_CHRL_6_BITS (0x1 << 6) // (USART) Character Length: 6 bits -#define AT91C_US_CHRL_7_BITS (0x2 << 6) // (USART) Character Length: 7 bits -#define AT91C_US_CHRL_8_BITS (0x3 << 6) // (USART) Character Length: 8 bits -#define AT91C_US_SYNC (0x1 << 8) // (USART) Synchronous Mode Select -#define AT91C_US_NBSTOP (0x3 << 12) // (USART) Number of Stop bits -#define AT91C_US_NBSTOP_1_BIT (0x0 << 12) // (USART) 1 stop bit -#define AT91C_US_NBSTOP_15_BIT (0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits -#define AT91C_US_NBSTOP_2_BIT (0x2 << 12) // (USART) 2 stop bits -#define AT91C_US_MSBF (0x1 << 16) // (USART) Bit Order -#define AT91C_US_MODE9 (0x1 << 17) // (USART) 9-bit Character length -#define AT91C_US_CKLO (0x1 << 18) // (USART) Clock Output Select -#define AT91C_US_OVER (0x1 << 19) // (USART) Over Sampling Mode -#define AT91C_US_INACK (0x1 << 20) // (USART) Inhibit Non Acknowledge -#define AT91C_US_DSNACK (0x1 << 21) // (USART) Disable Successive NACK -#define AT91C_US_MAX_ITER (0x1 << 24) // (USART) Number of Repetitions -#define AT91C_US_FILTER (0x1 << 28) // (USART) Receive Line Filter -// -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXBRK (0x1 << 2) // (USART) Break Received/End of Break -#define AT91C_US_TIMEOUT (0x1 << 8) // (USART) Receiver Time-out -#define AT91C_US_ITERATION (0x1 << 10) // (USART) Max number of Repetitions Reached -#define AT91C_US_NACK (0x1 << 13) // (USART) Non Acknowledge -#define AT91C_US_RIIC (0x1 << 16) // (USART) Ring INdicator Input Change Flag -#define AT91C_US_DSRIC (0x1 << 17) // (USART) Data Set Ready Input Change Flag -#define AT91C_US_DCDIC (0x1 << 18) // (USART) Data Carrier Flag -#define AT91C_US_CTSIC (0x1 << 19) // (USART) Clear To Send Input Change Flag -// -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register -------- -#define AT91C_US_RI (0x1 << 20) // (USART) Image of RI Input -#define AT91C_US_DSR (0x1 << 21) // (USART) Image of DSR Input -#define AT91C_US_DCD (0x1 << 22) // (USART) Image of DCD Input -#define AT91C_US_CTS (0x1 << 23) // (USART) Image of CTS Input - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Two-wire Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TWI { - AT91_REG TWI_CR; // Control Register - AT91_REG TWI_MMR; // Master Mode Register - AT91_REG Reserved0[1]; // - AT91_REG TWI_IADR; // Internal Address Register - AT91_REG TWI_CWGR; // Clock Waveform Generator Register - AT91_REG Reserved1[3]; // - AT91_REG TWI_SR; // Status Register - AT91_REG TWI_IER; // Interrupt Enable Register - AT91_REG TWI_IDR; // Interrupt Disable Register - AT91_REG TWI_IMR; // Interrupt Mask Register - AT91_REG TWI_RHR; // Receive Holding Register - AT91_REG TWI_THR; // Transmit Holding Register - AT91_REG Reserved2[50]; // - AT91_REG TWI_RPR; // Receive Pointer Register - AT91_REG TWI_RCR; // Receive Counter Register - AT91_REG TWI_TPR; // Transmit Pointer Register - AT91_REG TWI_TCR; // Transmit Counter Register - AT91_REG TWI_RNPR; // Receive Next Pointer Register - AT91_REG TWI_RNCR; // Receive Next Counter Register - AT91_REG TWI_TNPR; // Transmit Next Pointer Register - AT91_REG TWI_TNCR; // Transmit Next Counter Register - AT91_REG TWI_PTCR; // PDC Transfer Control Register - AT91_REG TWI_PTSR; // PDC Transfer Status Register -} AT91S_TWI, *AT91PS_TWI; -#else -#define TWI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (TWI_CR) Control Register -#define TWI_MMR (AT91_CAST(AT91_REG *) 0x00000004) // (TWI_MMR) Master Mode Register -#define TWI_IADR (AT91_CAST(AT91_REG *) 0x0000000C) // (TWI_IADR) Internal Address Register -#define TWI_CWGR (AT91_CAST(AT91_REG *) 0x00000010) // (TWI_CWGR) Clock Waveform Generator Register -#define TWI_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TWI_SR) Status Register -#define TWI_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TWI_IER) Interrupt Enable Register -#define TWI_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TWI_IDR) Interrupt Disable Register -#define TWI_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TWI_IMR) Interrupt Mask Register -#define TWI_RHR (AT91_CAST(AT91_REG *) 0x00000030) // (TWI_RHR) Receive Holding Register -#define TWI_THR (AT91_CAST(AT91_REG *) 0x00000034) // (TWI_THR) Transmit Holding Register - -#endif -// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- -#define AT91C_TWI_START (0x1 << 0) // (TWI) Send a START Condition -#define AT91C_TWI_STOP (0x1 << 1) // (TWI) Send a STOP Condition -#define AT91C_TWI_MSEN (0x1 << 2) // (TWI) TWI Master Transfer Enabled -#define AT91C_TWI_MSDIS (0x1 << 3) // (TWI) TWI Master Transfer Disabled -#define AT91C_TWI_SWRST (0x1 << 7) // (TWI) Software Reset -// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- -#define AT91C_TWI_IADRSZ (0x3 << 8) // (TWI) Internal Device Address Size -#define AT91C_TWI_IADRSZ_NO (0x0 << 8) // (TWI) No internal device address -#define AT91C_TWI_IADRSZ_1_BYTE (0x1 << 8) // (TWI) One-byte internal device address -#define AT91C_TWI_IADRSZ_2_BYTE (0x2 << 8) // (TWI) Two-byte internal device address -#define AT91C_TWI_IADRSZ_3_BYTE (0x3 << 8) // (TWI) Three-byte internal device address -#define AT91C_TWI_MREAD (0x1 << 12) // (TWI) Master Read Direction -#define AT91C_TWI_DADR (0x7F << 16) // (TWI) Device Address -// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- -#define AT91C_TWI_CLDIV (0xFF << 0) // (TWI) Clock Low Divider -#define AT91C_TWI_CHDIV (0xFF << 8) // (TWI) Clock High Divider -#define AT91C_TWI_CKDIV (0x7 << 16) // (TWI) Clock Divider -// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- -#define AT91C_TWI_TXCOMP (0x1 << 0) // (TWI) Transmission Completed -#define AT91C_TWI_RXRDY (0x1 << 1) // (TWI) Receive holding register ReaDY -#define AT91C_TWI_TXRDY (0x1 << 2) // (TWI) Transmit holding register ReaDY -#define AT91C_TWI_OVRE (0x1 << 6) // (TWI) Overrun Error -#define AT91C_TWI_UNRE (0x1 << 7) // (TWI) Underrun Error -#define AT91C_TWI_NACK (0x1 << 8) // (TWI) Not Acknowledged -#define AT91C_TWI_ENDRX (0x1 << 12) // (TWI) -#define AT91C_TWI_ENDTX (0x1 << 13) // (TWI) -#define AT91C_TWI_RXBUFF (0x1 << 14) // (TWI) -#define AT91C_TWI_TXBUFE (0x1 << 15) // (TWI) -// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- -// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- -// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TC { - AT91_REG TC_CCR; // Channel Control Register - AT91_REG TC_CMR; // Channel Mode Register (Capture Mode / Waveform Mode) - AT91_REG Reserved0[2]; // - AT91_REG TC_CV; // Counter Value - AT91_REG TC_RA; // Register A - AT91_REG TC_RB; // Register B - AT91_REG TC_RC; // Register C - AT91_REG TC_SR; // Status Register - AT91_REG TC_IER; // Interrupt Enable Register - AT91_REG TC_IDR; // Interrupt Disable Register - AT91_REG TC_IMR; // Interrupt Mask Register -} AT91S_TC, *AT91PS_TC; -#else -#define TC_CCR (AT91_CAST(AT91_REG *) 0x00000000) // (TC_CCR) Channel Control Register -#define TC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (TC_CMR) Channel Mode Register (Capture Mode / Waveform Mode) -#define TC_CV (AT91_CAST(AT91_REG *) 0x00000010) // (TC_CV) Counter Value -#define TC_RA (AT91_CAST(AT91_REG *) 0x00000014) // (TC_RA) Register A -#define TC_RB (AT91_CAST(AT91_REG *) 0x00000018) // (TC_RB) Register B -#define TC_RC (AT91_CAST(AT91_REG *) 0x0000001C) // (TC_RC) Register C -#define TC_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TC_SR) Status Register -#define TC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TC_IER) Interrupt Enable Register -#define TC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TC_IDR) Interrupt Disable Register -#define TC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TC_IMR) Interrupt Mask Register - -#endif -// -------- TC_CCR : (TC Offset: 0x0) TC Channel Control Register -------- -#define AT91C_TC_CLKEN (0x1 << 0) // (TC) Counter Clock Enable Command -#define AT91C_TC_CLKDIS (0x1 << 1) // (TC) Counter Clock Disable Command -#define AT91C_TC_SWTRG (0x1 << 2) // (TC) Software Trigger Command -// -------- TC_CMR : (TC Offset: 0x4) TC Channel Mode Register: Capture Mode / Waveform Mode -------- -#define AT91C_TC_CLKS (0x7 << 0) // (TC) Clock Selection -#define AT91C_TC_CLKS_TIMER_DIV1_CLOCK (0x0) // (TC) Clock selected: TIMER_DIV1_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV2_CLOCK (0x1) // (TC) Clock selected: TIMER_DIV2_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV3_CLOCK (0x2) // (TC) Clock selected: TIMER_DIV3_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV4_CLOCK (0x3) // (TC) Clock selected: TIMER_DIV4_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV5_CLOCK (0x4) // (TC) Clock selected: TIMER_DIV5_CLOCK -#define AT91C_TC_CLKS_XC0 (0x5) // (TC) Clock selected: XC0 -#define AT91C_TC_CLKS_XC1 (0x6) // (TC) Clock selected: XC1 -#define AT91C_TC_CLKS_XC2 (0x7) // (TC) Clock selected: XC2 -#define AT91C_TC_CLKI (0x1 << 3) // (TC) Clock Invert -#define AT91C_TC_BURST (0x3 << 4) // (TC) Burst Signal Selection -#define AT91C_TC_BURST_NONE (0x0 << 4) // (TC) The clock is not gated by an external signal -#define AT91C_TC_BURST_XC0 (0x1 << 4) // (TC) XC0 is ANDed with the selected clock -#define AT91C_TC_BURST_XC1 (0x2 << 4) // (TC) XC1 is ANDed with the selected clock -#define AT91C_TC_BURST_XC2 (0x3 << 4) // (TC) XC2 is ANDed with the selected clock -#define AT91C_TC_CPCSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RC Compare -#define AT91C_TC_LDBSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RB Loading -#define AT91C_TC_CPCDIS (0x1 << 7) // (TC) Counter Clock Disable with RC Compare -#define AT91C_TC_LDBDIS (0x1 << 7) // (TC) Counter Clock Disabled with RB Loading -#define AT91C_TC_ETRGEDG (0x3 << 8) // (TC) External Trigger Edge Selection -#define AT91C_TC_ETRGEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_ETRGEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_ETRGEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_ETRGEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVTEDG (0x3 << 8) // (TC) External Event Edge Selection -#define AT91C_TC_EEVTEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_EEVTEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_EEVTEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_EEVTEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVT (0x3 << 10) // (TC) External Event Selection -#define AT91C_TC_EEVT_TIOB (0x0 << 10) // (TC) Signal selected as external event: TIOB TIOB direction: input -#define AT91C_TC_EEVT_XC0 (0x1 << 10) // (TC) Signal selected as external event: XC0 TIOB direction: output -#define AT91C_TC_EEVT_XC1 (0x2 << 10) // (TC) Signal selected as external event: XC1 TIOB direction: output -#define AT91C_TC_EEVT_XC2 (0x3 << 10) // (TC) Signal selected as external event: XC2 TIOB direction: output -#define AT91C_TC_ABETRG (0x1 << 10) // (TC) TIOA or TIOB External Trigger Selection -#define AT91C_TC_ENETRG (0x1 << 12) // (TC) External Event Trigger enable -#define AT91C_TC_WAVESEL (0x3 << 13) // (TC) Waveform Selection -#define AT91C_TC_WAVESEL_UP (0x0 << 13) // (TC) UP mode without atomatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN (0x1 << 13) // (TC) UPDOWN mode without automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UP_AUTO (0x2 << 13) // (TC) UP mode with automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN_AUTO (0x3 << 13) // (TC) UPDOWN mode with automatic trigger on RC Compare -#define AT91C_TC_CPCTRG (0x1 << 14) // (TC) RC Compare Trigger Enable -#define AT91C_TC_WAVE (0x1 << 15) // (TC) -#define AT91C_TC_ACPA (0x3 << 16) // (TC) RA Compare Effect on TIOA -#define AT91C_TC_ACPA_NONE (0x0 << 16) // (TC) Effect: none -#define AT91C_TC_ACPA_SET (0x1 << 16) // (TC) Effect: set -#define AT91C_TC_ACPA_CLEAR (0x2 << 16) // (TC) Effect: clear -#define AT91C_TC_ACPA_TOGGLE (0x3 << 16) // (TC) Effect: toggle -#define AT91C_TC_LDRA (0x3 << 16) // (TC) RA Loading Selection -#define AT91C_TC_LDRA_NONE (0x0 << 16) // (TC) Edge: None -#define AT91C_TC_LDRA_RISING (0x1 << 16) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRA_FALLING (0x2 << 16) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRA_BOTH (0x3 << 16) // (TC) Edge: each edge of TIOA -#define AT91C_TC_ACPC (0x3 << 18) // (TC) RC Compare Effect on TIOA -#define AT91C_TC_ACPC_NONE (0x0 << 18) // (TC) Effect: none -#define AT91C_TC_ACPC_SET (0x1 << 18) // (TC) Effect: set -#define AT91C_TC_ACPC_CLEAR (0x2 << 18) // (TC) Effect: clear -#define AT91C_TC_ACPC_TOGGLE (0x3 << 18) // (TC) Effect: toggle -#define AT91C_TC_LDRB (0x3 << 18) // (TC) RB Loading Selection -#define AT91C_TC_LDRB_NONE (0x0 << 18) // (TC) Edge: None -#define AT91C_TC_LDRB_RISING (0x1 << 18) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRB_FALLING (0x2 << 18) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRB_BOTH (0x3 << 18) // (TC) Edge: each edge of TIOA -#define AT91C_TC_AEEVT (0x3 << 20) // (TC) External Event Effect on TIOA -#define AT91C_TC_AEEVT_NONE (0x0 << 20) // (TC) Effect: none -#define AT91C_TC_AEEVT_SET (0x1 << 20) // (TC) Effect: set -#define AT91C_TC_AEEVT_CLEAR (0x2 << 20) // (TC) Effect: clear -#define AT91C_TC_AEEVT_TOGGLE (0x3 << 20) // (TC) Effect: toggle -#define AT91C_TC_ASWTRG (0x3 << 22) // (TC) Software Trigger Effect on TIOA -#define AT91C_TC_ASWTRG_NONE (0x0 << 22) // (TC) Effect: none -#define AT91C_TC_ASWTRG_SET (0x1 << 22) // (TC) Effect: set -#define AT91C_TC_ASWTRG_CLEAR (0x2 << 22) // (TC) Effect: clear -#define AT91C_TC_ASWTRG_TOGGLE (0x3 << 22) // (TC) Effect: toggle -#define AT91C_TC_BCPB (0x3 << 24) // (TC) RB Compare Effect on TIOB -#define AT91C_TC_BCPB_NONE (0x0 << 24) // (TC) Effect: none -#define AT91C_TC_BCPB_SET (0x1 << 24) // (TC) Effect: set -#define AT91C_TC_BCPB_CLEAR (0x2 << 24) // (TC) Effect: clear -#define AT91C_TC_BCPB_TOGGLE (0x3 << 24) // (TC) Effect: toggle -#define AT91C_TC_BCPC (0x3 << 26) // (TC) RC Compare Effect on TIOB -#define AT91C_TC_BCPC_NONE (0x0 << 26) // (TC) Effect: none -#define AT91C_TC_BCPC_SET (0x1 << 26) // (TC) Effect: set -#define AT91C_TC_BCPC_CLEAR (0x2 << 26) // (TC) Effect: clear -#define AT91C_TC_BCPC_TOGGLE (0x3 << 26) // (TC) Effect: toggle -#define AT91C_TC_BEEVT (0x3 << 28) // (TC) External Event Effect on TIOB -#define AT91C_TC_BEEVT_NONE (0x0 << 28) // (TC) Effect: none -#define AT91C_TC_BEEVT_SET (0x1 << 28) // (TC) Effect: set -#define AT91C_TC_BEEVT_CLEAR (0x2 << 28) // (TC) Effect: clear -#define AT91C_TC_BEEVT_TOGGLE (0x3 << 28) // (TC) Effect: toggle -#define AT91C_TC_BSWTRG (0x3 << 30) // (TC) Software Trigger Effect on TIOB -#define AT91C_TC_BSWTRG_NONE (0x0 << 30) // (TC) Effect: none -#define AT91C_TC_BSWTRG_SET (0x1 << 30) // (TC) Effect: set -#define AT91C_TC_BSWTRG_CLEAR (0x2 << 30) // (TC) Effect: clear -#define AT91C_TC_BSWTRG_TOGGLE (0x3 << 30) // (TC) Effect: toggle -// -------- TC_SR : (TC Offset: 0x20) TC Channel Status Register -------- -#define AT91C_TC_COVFS (0x1 << 0) // (TC) Counter Overflow -#define AT91C_TC_LOVRS (0x1 << 1) // (TC) Load Overrun -#define AT91C_TC_CPAS (0x1 << 2) // (TC) RA Compare -#define AT91C_TC_CPBS (0x1 << 3) // (TC) RB Compare -#define AT91C_TC_CPCS (0x1 << 4) // (TC) RC Compare -#define AT91C_TC_LDRAS (0x1 << 5) // (TC) RA Loading -#define AT91C_TC_LDRBS (0x1 << 6) // (TC) RB Loading -#define AT91C_TC_ETRGS (0x1 << 7) // (TC) External Trigger -#define AT91C_TC_CLKSTA (0x1 << 16) // (TC) Clock Enabling -#define AT91C_TC_MTIOA (0x1 << 17) // (TC) TIOA Mirror -#define AT91C_TC_MTIOB (0x1 << 18) // (TC) TIOA Mirror -// -------- TC_IER : (TC Offset: 0x24) TC Channel Interrupt Enable Register -------- -// -------- TC_IDR : (TC Offset: 0x28) TC Channel Interrupt Disable Register -------- -// -------- TC_IMR : (TC Offset: 0x2c) TC Channel Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TCB { - AT91S_TC TCB_TC0; // TC Channel 0 - AT91_REG Reserved0[4]; // - AT91S_TC TCB_TC1; // TC Channel 1 - AT91_REG Reserved1[4]; // - AT91S_TC TCB_TC2; // TC Channel 2 - AT91_REG Reserved2[4]; // - AT91_REG TCB_BCR; // TC Block Control Register - AT91_REG TCB_BMR; // TC Block Mode Register -} AT91S_TCB, *AT91PS_TCB; -#else -#define TCB_BCR (AT91_CAST(AT91_REG *) 0x000000C0) // (TCB_BCR) TC Block Control Register -#define TCB_BMR (AT91_CAST(AT91_REG *) 0x000000C4) // (TCB_BMR) TC Block Mode Register - -#endif -// -------- TCB_BCR : (TCB Offset: 0xc0) TC Block Control Register -------- -#define AT91C_TCB_SYNC (0x1 << 0) // (TCB) Synchro Command -// -------- TCB_BMR : (TCB Offset: 0xc4) TC Block Mode Register -------- -#define AT91C_TCB_TC0XC0S (0x3 << 0) // (TCB) External Clock Signal 0 Selection -#define AT91C_TCB_TC0XC0S_TCLK0 (0x0) // (TCB) TCLK0 connected to XC0 -#define AT91C_TCB_TC0XC0S_NONE (0x1) // (TCB) None signal connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA1 (0x2) // (TCB) TIOA1 connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA2 (0x3) // (TCB) TIOA2 connected to XC0 -#define AT91C_TCB_TC1XC1S (0x3 << 2) // (TCB) External Clock Signal 1 Selection -#define AT91C_TCB_TC1XC1S_TCLK1 (0x0 << 2) // (TCB) TCLK1 connected to XC1 -#define AT91C_TCB_TC1XC1S_NONE (0x1 << 2) // (TCB) None signal connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA0 (0x2 << 2) // (TCB) TIOA0 connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA2 (0x3 << 2) // (TCB) TIOA2 connected to XC1 -#define AT91C_TCB_TC2XC2S (0x3 << 4) // (TCB) External Clock Signal 2 Selection -#define AT91C_TCB_TC2XC2S_TCLK2 (0x0 << 4) // (TCB) TCLK2 connected to XC2 -#define AT91C_TCB_TC2XC2S_NONE (0x1 << 4) // (TCB) None signal connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA0 (0x2 << 4) // (TCB) TIOA0 connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA1 (0x3 << 4) // (TCB) TIOA2 connected to XC2 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR PWMC Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC_CH { - AT91_REG PWMC_CMR; // Channel Mode Register - AT91_REG PWMC_CDTYR; // Channel Duty Cycle Register - AT91_REG PWMC_CPRDR; // Channel Period Register - AT91_REG PWMC_CCNTR; // Channel Counter Register - AT91_REG PWMC_CUPDR; // Channel Update Register - AT91_REG PWMC_Reserved[3]; // Reserved -} AT91S_PWMC_CH, *AT91PS_PWMC_CH; -#else -#define PWMC_CMR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_CMR) Channel Mode Register -#define PWMC_CDTYR (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_CDTYR) Channel Duty Cycle Register -#define PWMC_CPRDR (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_CPRDR) Channel Period Register -#define PWMC_CCNTR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_CCNTR) Channel Counter Register -#define PWMC_CUPDR (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_CUPDR) Channel Update Register -#define Reserved (AT91_CAST(AT91_REG *) 0x00000014) // (Reserved) Reserved - -#endif -// -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register -------- -#define AT91C_PWMC_CPRE (0xF << 0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx -#define AT91C_PWMC_CPRE_MCK (0x0) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKA (0xB) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKB (0xC) // (PWMC_CH) -#define AT91C_PWMC_CALG (0x1 << 8) // (PWMC_CH) Channel Alignment -#define AT91C_PWMC_CPOL (0x1 << 9) // (PWMC_CH) Channel Polarity -#define AT91C_PWMC_CPD (0x1 << 10) // (PWMC_CH) Channel Update Period -// -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register -------- -#define AT91C_PWMC_CDTY (0x0 << 0) // (PWMC_CH) Channel Duty Cycle -// -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register -------- -#define AT91C_PWMC_CPRD (0x0 << 0) // (PWMC_CH) Channel Period -// -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register -------- -#define AT91C_PWMC_CCNT (0x0 << 0) // (PWMC_CH) Channel Counter -// -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register -------- -#define AT91C_PWMC_CUPD (0x0 << 0) // (PWMC_CH) Channel Update - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC { - AT91_REG PWMC_MR; // PWMC Mode Register - AT91_REG PWMC_ENA; // PWMC Enable Register - AT91_REG PWMC_DIS; // PWMC Disable Register - AT91_REG PWMC_SR; // PWMC Status Register - AT91_REG PWMC_IER; // PWMC Interrupt Enable Register - AT91_REG PWMC_IDR; // PWMC Interrupt Disable Register - AT91_REG PWMC_IMR; // PWMC Interrupt Mask Register - AT91_REG PWMC_ISR; // PWMC Interrupt Status Register - AT91_REG Reserved0[55]; // - AT91_REG PWMC_VR; // PWMC Version Register - AT91_REG Reserved1[64]; // - AT91S_PWMC_CH PWMC_CH[4]; // PWMC Channel -} AT91S_PWMC, *AT91PS_PWMC; -#else -#define PWMC_MR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_MR) PWMC Mode Register -#define PWMC_ENA (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_ENA) PWMC Enable Register -#define PWMC_DIS (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_DIS) PWMC Disable Register -#define PWMC_SR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_SR) PWMC Status Register -#define PWMC_IER (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_IER) PWMC Interrupt Enable Register -#define PWMC_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (PWMC_IDR) PWMC Interrupt Disable Register -#define PWMC_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (PWMC_IMR) PWMC Interrupt Mask Register -#define PWMC_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (PWMC_ISR) PWMC Interrupt Status Register -#define PWMC_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (PWMC_VR) PWMC Version Register - -#endif -// -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register -------- -#define AT91C_PWMC_DIVA (0xFF << 0) // (PWMC) CLKA divide factor. -#define AT91C_PWMC_PREA (0xF << 8) // (PWMC) Divider Input Clock Prescaler A -#define AT91C_PWMC_PREA_MCK (0x0 << 8) // (PWMC) -#define AT91C_PWMC_DIVB (0xFF << 16) // (PWMC) CLKB divide factor. -#define AT91C_PWMC_PREB (0xF << 24) // (PWMC) Divider Input Clock Prescaler B -#define AT91C_PWMC_PREB_MCK (0x0 << 24) // (PWMC) -// -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register -------- -#define AT91C_PWMC_CHID0 (0x1 << 0) // (PWMC) Channel ID 0 -#define AT91C_PWMC_CHID1 (0x1 << 1) // (PWMC) Channel ID 1 -#define AT91C_PWMC_CHID2 (0x1 << 2) // (PWMC) Channel ID 2 -#define AT91C_PWMC_CHID3 (0x1 << 3) // (PWMC) Channel ID 3 -// -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register -------- -// -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register -------- -// -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register -------- -// -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register -------- -// -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register -------- -// -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR USB Device Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_UDP { - AT91_REG UDP_NUM; // Frame Number Register - AT91_REG UDP_GLBSTATE; // Global State Register - AT91_REG UDP_FADDR; // Function Address Register - AT91_REG Reserved0[1]; // - AT91_REG UDP_IER; // Interrupt Enable Register - AT91_REG UDP_IDR; // Interrupt Disable Register - AT91_REG UDP_IMR; // Interrupt Mask Register - AT91_REG UDP_ISR; // Interrupt Status Register - AT91_REG UDP_ICR; // Interrupt Clear Register - AT91_REG Reserved1[1]; // - AT91_REG UDP_RSTEP; // Reset Endpoint Register - AT91_REG Reserved2[1]; // - AT91_REG UDP_CSR[4]; // Endpoint Control and Status Register - AT91_REG Reserved3[4]; // - AT91_REG UDP_FDR[4]; // Endpoint FIFO Data Register - AT91_REG Reserved4[5]; // - AT91_REG UDP_TXVC; // Transceiver Control Register -} AT91S_UDP, *AT91PS_UDP; -#else -#define UDP_FRM_NUM (AT91_CAST(AT91_REG *) 0x00000000) // (UDP_FRM_NUM) Frame Number Register -#define UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0x00000004) // (UDP_GLBSTATE) Global State Register -#define UDP_FADDR (AT91_CAST(AT91_REG *) 0x00000008) // (UDP_FADDR) Function Address Register -#define UDP_IER (AT91_CAST(AT91_REG *) 0x00000010) // (UDP_IER) Interrupt Enable Register -#define UDP_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (UDP_IDR) Interrupt Disable Register -#define UDP_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (UDP_IMR) Interrupt Mask Register -#define UDP_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (UDP_ISR) Interrupt Status Register -#define UDP_ICR (AT91_CAST(AT91_REG *) 0x00000020) // (UDP_ICR) Interrupt Clear Register -#define UDP_RSTEP (AT91_CAST(AT91_REG *) 0x00000028) // (UDP_RSTEP) Reset Endpoint Register -#define UDP_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (UDP_CSR) Endpoint Control and Status Register -#define UDP_FDR (AT91_CAST(AT91_REG *) 0x00000050) // (UDP_FDR) Endpoint FIFO Data Register -#define UDP_TXVC (AT91_CAST(AT91_REG *) 0x00000074) // (UDP_TXVC) Transceiver Control Register - -#endif -// -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register -------- -#define AT91C_UDP_FRM_NUM (0x7FF << 0) // (UDP) Frame Number as Defined in the Packet Field Formats -#define AT91C_UDP_FRM_ERR (0x1 << 16) // (UDP) Frame Error -#define AT91C_UDP_FRM_OK (0x1 << 17) // (UDP) Frame OK -// -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register -------- -#define AT91C_UDP_FADDEN (0x1 << 0) // (UDP) Function Address Enable -#define AT91C_UDP_CONFG (0x1 << 1) // (UDP) Configured -#define AT91C_UDP_ESR (0x1 << 2) // (UDP) Enable Send Resume -#define AT91C_UDP_RSMINPR (0x1 << 3) // (UDP) A Resume Has Been Sent to the Host -#define AT91C_UDP_RMWUPE (0x1 << 4) // (UDP) Remote Wake Up Enable -// -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register -------- -#define AT91C_UDP_FADD (0xFF << 0) // (UDP) Function Address Value -#define AT91C_UDP_FEN (0x1 << 8) // (UDP) Function Enable -// -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register -------- -#define AT91C_UDP_EPINT0 (0x1 << 0) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT1 (0x1 << 1) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT2 (0x1 << 2) // (UDP) Endpoint 2 Interrupt -#define AT91C_UDP_EPINT3 (0x1 << 3) // (UDP) Endpoint 3 Interrupt -#define AT91C_UDP_RXSUSP (0x1 << 8) // (UDP) USB Suspend Interrupt -#define AT91C_UDP_RXRSM (0x1 << 9) // (UDP) USB Resume Interrupt -#define AT91C_UDP_EXTRSM (0x1 << 10) // (UDP) USB External Resume Interrupt -#define AT91C_UDP_SOFINT (0x1 << 11) // (UDP) USB Start Of frame Interrupt -#define AT91C_UDP_WAKEUP (0x1 << 13) // (UDP) USB Resume Interrupt -// -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register -------- -// -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register -------- -// -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register -------- -#define AT91C_UDP_ENDBUSRES (0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt -// -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register -------- -// -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register -------- -#define AT91C_UDP_EP0 (0x1 << 0) // (UDP) Reset Endpoint 0 -#define AT91C_UDP_EP1 (0x1 << 1) // (UDP) Reset Endpoint 1 -#define AT91C_UDP_EP2 (0x1 << 2) // (UDP) Reset Endpoint 2 -#define AT91C_UDP_EP3 (0x1 << 3) // (UDP) Reset Endpoint 3 -// -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register -------- -#define AT91C_UDP_TXCOMP (0x1 << 0) // (UDP) Generates an IN packet with data previously written in the DPR -#define AT91C_UDP_RX_DATA_BK0 (0x1 << 1) // (UDP) Receive Data Bank 0 -#define AT91C_UDP_RXSETUP (0x1 << 2) // (UDP) Sends STALL to the Host (Control endpoints) -#define AT91C_UDP_ISOERROR (0x1 << 3) // (UDP) Isochronous error (Isochronous endpoints) -#define AT91C_UDP_STALLSENT (0x1 << 3) // (UDP) Stall sent (Control, bulk, interrupt endpoints) -#define AT91C_UDP_TXPKTRDY (0x1 << 4) // (UDP) Transmit Packet Ready -#define AT91C_UDP_FORCESTALL (0x1 << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints). -#define AT91C_UDP_RX_DATA_BK1 (0x1 << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes). -#define AT91C_UDP_DIR (0x1 << 7) // (UDP) Transfer Direction -#define AT91C_UDP_EPTYPE (0x7 << 8) // (UDP) Endpoint type -#define AT91C_UDP_EPTYPE_CTRL (0x0 << 8) // (UDP) Control -#define AT91C_UDP_EPTYPE_ISO_OUT (0x1 << 8) // (UDP) Isochronous OUT -#define AT91C_UDP_EPTYPE_BULK_OUT (0x2 << 8) // (UDP) Bulk OUT -#define AT91C_UDP_EPTYPE_INT_OUT (0x3 << 8) // (UDP) Interrupt OUT -#define AT91C_UDP_EPTYPE_ISO_IN (0x5 << 8) // (UDP) Isochronous IN -#define AT91C_UDP_EPTYPE_BULK_IN (0x6 << 8) // (UDP) Bulk IN -#define AT91C_UDP_EPTYPE_INT_IN (0x7 << 8) // (UDP) Interrupt IN -#define AT91C_UDP_DTGLE (0x1 << 11) // (UDP) Data Toggle -#define AT91C_UDP_EPEDS (0x1 << 15) // (UDP) Endpoint Enable Disable -#define AT91C_UDP_RXBYTECNT (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO -// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register -------- -#define AT91C_UDP_TXVDIS (0x1 << 8) // (UDP) - -// ***************************************************************************** -// REGISTER ADDRESS DEFINITION FOR AT91SAM7S512 -// ***************************************************************************** -// ========== Register definition for SYS peripheral ========== -// ========== Register definition for AIC peripheral ========== -#define AT91C_AIC_IVR (AT91_CAST(AT91_REG *) 0xFFFFF100) // (AIC) IRQ Vector Register -#define AT91C_AIC_SMR (AT91_CAST(AT91_REG *) 0xFFFFF000) // (AIC) Source Mode Register -#define AT91C_AIC_FVR (AT91_CAST(AT91_REG *) 0xFFFFF104) // (AIC) FIQ Vector Register -#define AT91C_AIC_DCR (AT91_CAST(AT91_REG *) 0xFFFFF138) // (AIC) Debug Control Register (Protect) -#define AT91C_AIC_EOICR (AT91_CAST(AT91_REG *) 0xFFFFF130) // (AIC) End of Interrupt Command Register -#define AT91C_AIC_SVR (AT91_CAST(AT91_REG *) 0xFFFFF080) // (AIC) Source Vector Register -#define AT91C_AIC_FFSR (AT91_CAST(AT91_REG *) 0xFFFFF148) // (AIC) Fast Forcing Status Register -#define AT91C_AIC_ICCR (AT91_CAST(AT91_REG *) 0xFFFFF128) // (AIC) Interrupt Clear Command Register -#define AT91C_AIC_ISR (AT91_CAST(AT91_REG *) 0xFFFFF108) // (AIC) Interrupt Status Register -#define AT91C_AIC_IMR (AT91_CAST(AT91_REG *) 0xFFFFF110) // (AIC) Interrupt Mask Register -#define AT91C_AIC_IPR (AT91_CAST(AT91_REG *) 0xFFFFF10C) // (AIC) Interrupt Pending Register -#define AT91C_AIC_FFER (AT91_CAST(AT91_REG *) 0xFFFFF140) // (AIC) Fast Forcing Enable Register -#define AT91C_AIC_IECR (AT91_CAST(AT91_REG *) 0xFFFFF120) // (AIC) Interrupt Enable Command Register -#define AT91C_AIC_ISCR (AT91_CAST(AT91_REG *) 0xFFFFF12C) // (AIC) Interrupt Set Command Register -#define AT91C_AIC_FFDR (AT91_CAST(AT91_REG *) 0xFFFFF144) // (AIC) Fast Forcing Disable Register -#define AT91C_AIC_CISR (AT91_CAST(AT91_REG *) 0xFFFFF114) // (AIC) Core Interrupt Status Register -#define AT91C_AIC_IDCR (AT91_CAST(AT91_REG *) 0xFFFFF124) // (AIC) Interrupt Disable Command Register -#define AT91C_AIC_SPU (AT91_CAST(AT91_REG *) 0xFFFFF134) // (AIC) Spurious Vector Register -// ========== Register definition for PDC_DBGU peripheral ========== -#define AT91C_DBGU_TCR (AT91_CAST(AT91_REG *) 0xFFFFF30C) // (PDC_DBGU) Transmit Counter Register -#define AT91C_DBGU_RNPR (AT91_CAST(AT91_REG *) 0xFFFFF310) // (PDC_DBGU) Receive Next Pointer Register -#define AT91C_DBGU_TNPR (AT91_CAST(AT91_REG *) 0xFFFFF318) // (PDC_DBGU) Transmit Next Pointer Register -#define AT91C_DBGU_TPR (AT91_CAST(AT91_REG *) 0xFFFFF308) // (PDC_DBGU) Transmit Pointer Register -#define AT91C_DBGU_RPR (AT91_CAST(AT91_REG *) 0xFFFFF300) // (PDC_DBGU) Receive Pointer Register -#define AT91C_DBGU_RCR (AT91_CAST(AT91_REG *) 0xFFFFF304) // (PDC_DBGU) Receive Counter Register -#define AT91C_DBGU_RNCR (AT91_CAST(AT91_REG *) 0xFFFFF314) // (PDC_DBGU) Receive Next Counter Register -#define AT91C_DBGU_PTCR (AT91_CAST(AT91_REG *) 0xFFFFF320) // (PDC_DBGU) PDC Transfer Control Register -#define AT91C_DBGU_PTSR (AT91_CAST(AT91_REG *) 0xFFFFF324) // (PDC_DBGU) PDC Transfer Status Register -#define AT91C_DBGU_TNCR (AT91_CAST(AT91_REG *) 0xFFFFF31C) // (PDC_DBGU) Transmit Next Counter Register -// ========== Register definition for DBGU peripheral ========== -#define AT91C_DBGU_EXID (AT91_CAST(AT91_REG *) 0xFFFFF244) // (DBGU) Chip ID Extension Register -#define AT91C_DBGU_BRGR (AT91_CAST(AT91_REG *) 0xFFFFF220) // (DBGU) Baud Rate Generator Register -#define AT91C_DBGU_IDR (AT91_CAST(AT91_REG *) 0xFFFFF20C) // (DBGU) Interrupt Disable Register -#define AT91C_DBGU_CSR (AT91_CAST(AT91_REG *) 0xFFFFF214) // (DBGU) Channel Status Register -#define AT91C_DBGU_CIDR (AT91_CAST(AT91_REG *) 0xFFFFF240) // (DBGU) Chip ID Register -#define AT91C_DBGU_MR (AT91_CAST(AT91_REG *) 0xFFFFF204) // (DBGU) Mode Register -#define AT91C_DBGU_IMR (AT91_CAST(AT91_REG *) 0xFFFFF210) // (DBGU) Interrupt Mask Register -#define AT91C_DBGU_CR (AT91_CAST(AT91_REG *) 0xFFFFF200) // (DBGU) Control Register -#define AT91C_DBGU_FNTR (AT91_CAST(AT91_REG *) 0xFFFFF248) // (DBGU) Force NTRST Register -#define AT91C_DBGU_THR (AT91_CAST(AT91_REG *) 0xFFFFF21C) // (DBGU) Transmitter Holding Register -#define AT91C_DBGU_RHR (AT91_CAST(AT91_REG *) 0xFFFFF218) // (DBGU) Receiver Holding Register -#define AT91C_DBGU_IER (AT91_CAST(AT91_REG *) 0xFFFFF208) // (DBGU) Interrupt Enable Register -// ========== Register definition for PIOA peripheral ========== -#define AT91C_PIOA_ODR (AT91_CAST(AT91_REG *) 0xFFFFF414) // (PIOA) Output Disable Registerr -#define AT91C_PIOA_SODR (AT91_CAST(AT91_REG *) 0xFFFFF430) // (PIOA) Set Output Data Register -#define AT91C_PIOA_ISR (AT91_CAST(AT91_REG *) 0xFFFFF44C) // (PIOA) Interrupt Status Register -#define AT91C_PIOA_ABSR (AT91_CAST(AT91_REG *) 0xFFFFF478) // (PIOA) AB Select Status Register -#define AT91C_PIOA_IER (AT91_CAST(AT91_REG *) 0xFFFFF440) // (PIOA) Interrupt Enable Register -#define AT91C_PIOA_PPUDR (AT91_CAST(AT91_REG *) 0xFFFFF460) // (PIOA) Pull-up Disable Register -#define AT91C_PIOA_IMR (AT91_CAST(AT91_REG *) 0xFFFFF448) // (PIOA) Interrupt Mask Register -#define AT91C_PIOA_PER (AT91_CAST(AT91_REG *) 0xFFFFF400) // (PIOA) PIO Enable Register -#define AT91C_PIOA_IFDR (AT91_CAST(AT91_REG *) 0xFFFFF424) // (PIOA) Input Filter Disable Register -#define AT91C_PIOA_OWDR (AT91_CAST(AT91_REG *) 0xFFFFF4A4) // (PIOA) Output Write Disable Register -#define AT91C_PIOA_MDSR (AT91_CAST(AT91_REG *) 0xFFFFF458) // (PIOA) Multi-driver Status Register -#define AT91C_PIOA_IDR (AT91_CAST(AT91_REG *) 0xFFFFF444) // (PIOA) Interrupt Disable Register -#define AT91C_PIOA_ODSR (AT91_CAST(AT91_REG *) 0xFFFFF438) // (PIOA) Output Data Status Register -#define AT91C_PIOA_PPUSR (AT91_CAST(AT91_REG *) 0xFFFFF468) // (PIOA) Pull-up Status Register -#define AT91C_PIOA_OWSR (AT91_CAST(AT91_REG *) 0xFFFFF4A8) // (PIOA) Output Write Status Register -#define AT91C_PIOA_BSR (AT91_CAST(AT91_REG *) 0xFFFFF474) // (PIOA) Select B Register -#define AT91C_PIOA_OWER (AT91_CAST(AT91_REG *) 0xFFFFF4A0) // (PIOA) Output Write Enable Register -#define AT91C_PIOA_IFER (AT91_CAST(AT91_REG *) 0xFFFFF420) // (PIOA) Input Filter Enable Register -#define AT91C_PIOA_PDSR (AT91_CAST(AT91_REG *) 0xFFFFF43C) // (PIOA) Pin Data Status Register -#define AT91C_PIOA_PPUER (AT91_CAST(AT91_REG *) 0xFFFFF464) // (PIOA) Pull-up Enable Register -#define AT91C_PIOA_OSR (AT91_CAST(AT91_REG *) 0xFFFFF418) // (PIOA) Output Status Register -#define AT91C_PIOA_ASR (AT91_CAST(AT91_REG *) 0xFFFFF470) // (PIOA) Select A Register -#define AT91C_PIOA_MDDR (AT91_CAST(AT91_REG *) 0xFFFFF454) // (PIOA) Multi-driver Disable Register -#define AT91C_PIOA_CODR (AT91_CAST(AT91_REG *) 0xFFFFF434) // (PIOA) Clear Output Data Register -#define AT91C_PIOA_MDER (AT91_CAST(AT91_REG *) 0xFFFFF450) // (PIOA) Multi-driver Enable Register -#define AT91C_PIOA_PDR (AT91_CAST(AT91_REG *) 0xFFFFF404) // (PIOA) PIO Disable Register -#define AT91C_PIOA_IFSR (AT91_CAST(AT91_REG *) 0xFFFFF428) // (PIOA) Input Filter Status Register -#define AT91C_PIOA_OER (AT91_CAST(AT91_REG *) 0xFFFFF410) // (PIOA) Output Enable Register -#define AT91C_PIOA_PSR (AT91_CAST(AT91_REG *) 0xFFFFF408) // (PIOA) PIO Status Register -// ========== Register definition for CKGR peripheral ========== -#define AT91C_CKGR_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (CKGR) Main Oscillator Register -#define AT91C_CKGR_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (CKGR) PLL Register -#define AT91C_CKGR_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (CKGR) Main Clock Frequency Register -// ========== Register definition for PMC peripheral ========== -#define AT91C_PMC_IDR (AT91_CAST(AT91_REG *) 0xFFFFFC64) // (PMC) Interrupt Disable Register -#define AT91C_PMC_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (PMC) Main Oscillator Register -#define AT91C_PMC_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (PMC) PLL Register -#define AT91C_PMC_PCER (AT91_CAST(AT91_REG *) 0xFFFFFC10) // (PMC) Peripheral Clock Enable Register -#define AT91C_PMC_PCKR (AT91_CAST(AT91_REG *) 0xFFFFFC40) // (PMC) Programmable Clock Register -#define AT91C_PMC_MCKR (AT91_CAST(AT91_REG *) 0xFFFFFC30) // (PMC) Master Clock Register -#define AT91C_PMC_SCDR (AT91_CAST(AT91_REG *) 0xFFFFFC04) // (PMC) System Clock Disable Register -#define AT91C_PMC_PCDR (AT91_CAST(AT91_REG *) 0xFFFFFC14) // (PMC) Peripheral Clock Disable Register -#define AT91C_PMC_SCSR (AT91_CAST(AT91_REG *) 0xFFFFFC08) // (PMC) System Clock Status Register -#define AT91C_PMC_PCSR (AT91_CAST(AT91_REG *) 0xFFFFFC18) // (PMC) Peripheral Clock Status Register -#define AT91C_PMC_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (PMC) Main Clock Frequency Register -#define AT91C_PMC_SCER (AT91_CAST(AT91_REG *) 0xFFFFFC00) // (PMC) System Clock Enable Register -#define AT91C_PMC_IMR (AT91_CAST(AT91_REG *) 0xFFFFFC6C) // (PMC) Interrupt Mask Register -#define AT91C_PMC_IER (AT91_CAST(AT91_REG *) 0xFFFFFC60) // (PMC) Interrupt Enable Register -#define AT91C_PMC_SR (AT91_CAST(AT91_REG *) 0xFFFFFC68) // (PMC) Status Register -// ========== Register definition for RSTC peripheral ========== -#define AT91C_RSTC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFD00) // (RSTC) Reset Control Register -#define AT91C_RSTC_RMR (AT91_CAST(AT91_REG *) 0xFFFFFD08) // (RSTC) Reset Mode Register -#define AT91C_RSTC_RSR (AT91_CAST(AT91_REG *) 0xFFFFFD04) // (RSTC) Reset Status Register -// ========== Register definition for RTTC peripheral ========== -#define AT91C_RTTC_RTSR (AT91_CAST(AT91_REG *) 0xFFFFFD2C) // (RTTC) Real-time Status Register -#define AT91C_RTTC_RTMR (AT91_CAST(AT91_REG *) 0xFFFFFD20) // (RTTC) Real-time Mode Register -#define AT91C_RTTC_RTVR (AT91_CAST(AT91_REG *) 0xFFFFFD28) // (RTTC) Real-time Value Register -#define AT91C_RTTC_RTAR (AT91_CAST(AT91_REG *) 0xFFFFFD24) // (RTTC) Real-time Alarm Register -// ========== Register definition for PITC peripheral ========== -#define AT91C_PITC_PIVR (AT91_CAST(AT91_REG *) 0xFFFFFD38) // (PITC) Period Interval Value Register -#define AT91C_PITC_PISR (AT91_CAST(AT91_REG *) 0xFFFFFD34) // (PITC) Period Interval Status Register -#define AT91C_PITC_PIIR (AT91_CAST(AT91_REG *) 0xFFFFFD3C) // (PITC) Period Interval Image Register -#define AT91C_PITC_PIMR (AT91_CAST(AT91_REG *) 0xFFFFFD30) // (PITC) Period Interval Mode Register -// ========== Register definition for WDTC peripheral ========== -#define AT91C_WDTC_WDCR (AT91_CAST(AT91_REG *) 0xFFFFFD40) // (WDTC) Watchdog Control Register -#define AT91C_WDTC_WDSR (AT91_CAST(AT91_REG *) 0xFFFFFD48) // (WDTC) Watchdog Status Register -#define AT91C_WDTC_WDMR (AT91_CAST(AT91_REG *) 0xFFFFFD44) // (WDTC) Watchdog Mode Register -// ========== Register definition for VREG peripheral ========== -#define AT91C_VREG_MR (AT91_CAST(AT91_REG *) 0xFFFFFD60) // (VREG) Voltage Regulator Mode Register -// ========== Register definition for EFC0 peripheral ========== -#define AT91C_EFC0_FCR (AT91_CAST(AT91_REG *) 0xFFFFFF64) // (EFC0) MC Flash Command Register -#define AT91C_EFC0_FSR (AT91_CAST(AT91_REG *) 0xFFFFFF68) // (EFC0) MC Flash Status Register -#define AT91C_EFC0_VR (AT91_CAST(AT91_REG *) 0xFFFFFF6C) // (EFC0) MC Flash Version Register -#define AT91C_EFC0_FMR (AT91_CAST(AT91_REG *) 0xFFFFFF60) // (EFC0) MC Flash Mode Register -// ========== Register definition for EFC1 peripheral ========== -#define AT91C_EFC1_VR (AT91_CAST(AT91_REG *) 0xFFFFFF7C) // (EFC1) MC Flash Version Register -#define AT91C_EFC1_FCR (AT91_CAST(AT91_REG *) 0xFFFFFF74) // (EFC1) MC Flash Command Register -#define AT91C_EFC1_FSR (AT91_CAST(AT91_REG *) 0xFFFFFF78) // (EFC1) MC Flash Status Register -#define AT91C_EFC1_FMR (AT91_CAST(AT91_REG *) 0xFFFFFF70) // (EFC1) MC Flash Mode Register -// ========== Register definition for MC peripheral ========== -#define AT91C_MC_ASR (AT91_CAST(AT91_REG *) 0xFFFFFF04) // (MC) MC Abort Status Register -#define AT91C_MC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFF00) // (MC) MC Remap Control Register -#define AT91C_MC_PUP (AT91_CAST(AT91_REG *) 0xFFFFFF50) // (MC) MC Protection Unit Peripherals -#define AT91C_MC_PUIA (AT91_CAST(AT91_REG *) 0xFFFFFF10) // (MC) MC Protection Unit Area -#define AT91C_MC_AASR (AT91_CAST(AT91_REG *) 0xFFFFFF08) // (MC) MC Abort Address Status Register -#define AT91C_MC_PUER (AT91_CAST(AT91_REG *) 0xFFFFFF54) // (MC) MC Protection Unit Enable Register -// ========== Register definition for PDC_SPI peripheral ========== -#define AT91C_SPI_PTCR (AT91_CAST(AT91_REG *) 0xFFFE0120) // (PDC_SPI) PDC Transfer Control Register -#define AT91C_SPI_TPR (AT91_CAST(AT91_REG *) 0xFFFE0108) // (PDC_SPI) Transmit Pointer Register -#define AT91C_SPI_TCR (AT91_CAST(AT91_REG *) 0xFFFE010C) // (PDC_SPI) Transmit Counter Register -#define AT91C_SPI_RCR (AT91_CAST(AT91_REG *) 0xFFFE0104) // (PDC_SPI) Receive Counter Register -#define AT91C_SPI_PTSR (AT91_CAST(AT91_REG *) 0xFFFE0124) // (PDC_SPI) PDC Transfer Status Register -#define AT91C_SPI_RNPR (AT91_CAST(AT91_REG *) 0xFFFE0110) // (PDC_SPI) Receive Next Pointer Register -#define AT91C_SPI_RPR (AT91_CAST(AT91_REG *) 0xFFFE0100) // (PDC_SPI) Receive Pointer Register -#define AT91C_SPI_TNCR (AT91_CAST(AT91_REG *) 0xFFFE011C) // (PDC_SPI) Transmit Next Counter Register -#define AT91C_SPI_RNCR (AT91_CAST(AT91_REG *) 0xFFFE0114) // (PDC_SPI) Receive Next Counter Register -#define AT91C_SPI_TNPR (AT91_CAST(AT91_REG *) 0xFFFE0118) // (PDC_SPI) Transmit Next Pointer Register -// ========== Register definition for SPI peripheral ========== -#define AT91C_SPI_IER (AT91_CAST(AT91_REG *) 0xFFFE0014) // (SPI) Interrupt Enable Register -#define AT91C_SPI_SR (AT91_CAST(AT91_REG *) 0xFFFE0010) // (SPI) Status Register -#define AT91C_SPI_IDR (AT91_CAST(AT91_REG *) 0xFFFE0018) // (SPI) Interrupt Disable Register -#define AT91C_SPI_CR (AT91_CAST(AT91_REG *) 0xFFFE0000) // (SPI) Control Register -#define AT91C_SPI_MR (AT91_CAST(AT91_REG *) 0xFFFE0004) // (SPI) Mode Register -#define AT91C_SPI_IMR (AT91_CAST(AT91_REG *) 0xFFFE001C) // (SPI) Interrupt Mask Register -#define AT91C_SPI_TDR (AT91_CAST(AT91_REG *) 0xFFFE000C) // (SPI) Transmit Data Register -#define AT91C_SPI_RDR (AT91_CAST(AT91_REG *) 0xFFFE0008) // (SPI) Receive Data Register -#define AT91C_SPI_CSR (AT91_CAST(AT91_REG *) 0xFFFE0030) // (SPI) Chip Select Register -// ========== Register definition for PDC_ADC peripheral ========== -#define AT91C_ADC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD8124) // (PDC_ADC) PDC Transfer Status Register -#define AT91C_ADC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD8120) // (PDC_ADC) PDC Transfer Control Register -#define AT91C_ADC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD8118) // (PDC_ADC) Transmit Next Pointer Register -#define AT91C_ADC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD811C) // (PDC_ADC) Transmit Next Counter Register -#define AT91C_ADC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD8110) // (PDC_ADC) Receive Next Pointer Register -#define AT91C_ADC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD8114) // (PDC_ADC) Receive Next Counter Register -#define AT91C_ADC_RPR (AT91_CAST(AT91_REG *) 0xFFFD8100) // (PDC_ADC) Receive Pointer Register -#define AT91C_ADC_TCR (AT91_CAST(AT91_REG *) 0xFFFD810C) // (PDC_ADC) Transmit Counter Register -#define AT91C_ADC_TPR (AT91_CAST(AT91_REG *) 0xFFFD8108) // (PDC_ADC) Transmit Pointer Register -#define AT91C_ADC_RCR (AT91_CAST(AT91_REG *) 0xFFFD8104) // (PDC_ADC) Receive Counter Register -// ========== Register definition for ADC peripheral ========== -#define AT91C_ADC_CDR2 (AT91_CAST(AT91_REG *) 0xFFFD8038) // (ADC) ADC Channel Data Register 2 -#define AT91C_ADC_CDR3 (AT91_CAST(AT91_REG *) 0xFFFD803C) // (ADC) ADC Channel Data Register 3 -#define AT91C_ADC_CDR0 (AT91_CAST(AT91_REG *) 0xFFFD8030) // (ADC) ADC Channel Data Register 0 -#define AT91C_ADC_CDR5 (AT91_CAST(AT91_REG *) 0xFFFD8044) // (ADC) ADC Channel Data Register 5 -#define AT91C_ADC_CHDR (AT91_CAST(AT91_REG *) 0xFFFD8014) // (ADC) ADC Channel Disable Register -#define AT91C_ADC_SR (AT91_CAST(AT91_REG *) 0xFFFD801C) // (ADC) ADC Status Register -#define AT91C_ADC_CDR4 (AT91_CAST(AT91_REG *) 0xFFFD8040) // (ADC) ADC Channel Data Register 4 -#define AT91C_ADC_CDR1 (AT91_CAST(AT91_REG *) 0xFFFD8034) // (ADC) ADC Channel Data Register 1 -#define AT91C_ADC_LCDR (AT91_CAST(AT91_REG *) 0xFFFD8020) // (ADC) ADC Last Converted Data Register -#define AT91C_ADC_IDR (AT91_CAST(AT91_REG *) 0xFFFD8028) // (ADC) ADC Interrupt Disable Register -#define AT91C_ADC_CR (AT91_CAST(AT91_REG *) 0xFFFD8000) // (ADC) ADC Control Register -#define AT91C_ADC_CDR7 (AT91_CAST(AT91_REG *) 0xFFFD804C) // (ADC) ADC Channel Data Register 7 -#define AT91C_ADC_CDR6 (AT91_CAST(AT91_REG *) 0xFFFD8048) // (ADC) ADC Channel Data Register 6 -#define AT91C_ADC_IER (AT91_CAST(AT91_REG *) 0xFFFD8024) // (ADC) ADC Interrupt Enable Register -#define AT91C_ADC_CHER (AT91_CAST(AT91_REG *) 0xFFFD8010) // (ADC) ADC Channel Enable Register -#define AT91C_ADC_CHSR (AT91_CAST(AT91_REG *) 0xFFFD8018) // (ADC) ADC Channel Status Register -#define AT91C_ADC_MR (AT91_CAST(AT91_REG *) 0xFFFD8004) // (ADC) ADC Mode Register -#define AT91C_ADC_IMR (AT91_CAST(AT91_REG *) 0xFFFD802C) // (ADC) ADC Interrupt Mask Register -// ========== Register definition for PDC_SSC peripheral ========== -#define AT91C_SSC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD411C) // (PDC_SSC) Transmit Next Counter Register -#define AT91C_SSC_RPR (AT91_CAST(AT91_REG *) 0xFFFD4100) // (PDC_SSC) Receive Pointer Register -#define AT91C_SSC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD4114) // (PDC_SSC) Receive Next Counter Register -#define AT91C_SSC_TPR (AT91_CAST(AT91_REG *) 0xFFFD4108) // (PDC_SSC) Transmit Pointer Register -#define AT91C_SSC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD4120) // (PDC_SSC) PDC Transfer Control Register -#define AT91C_SSC_TCR (AT91_CAST(AT91_REG *) 0xFFFD410C) // (PDC_SSC) Transmit Counter Register -#define AT91C_SSC_RCR (AT91_CAST(AT91_REG *) 0xFFFD4104) // (PDC_SSC) Receive Counter Register -#define AT91C_SSC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD4110) // (PDC_SSC) Receive Next Pointer Register -#define AT91C_SSC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD4118) // (PDC_SSC) Transmit Next Pointer Register -#define AT91C_SSC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD4124) // (PDC_SSC) PDC Transfer Status Register -// ========== Register definition for SSC peripheral ========== -#define AT91C_SSC_RHR (AT91_CAST(AT91_REG *) 0xFFFD4020) // (SSC) Receive Holding Register -#define AT91C_SSC_RSHR (AT91_CAST(AT91_REG *) 0xFFFD4030) // (SSC) Receive Sync Holding Register -#define AT91C_SSC_TFMR (AT91_CAST(AT91_REG *) 0xFFFD401C) // (SSC) Transmit Frame Mode Register -#define AT91C_SSC_IDR (AT91_CAST(AT91_REG *) 0xFFFD4048) // (SSC) Interrupt Disable Register -#define AT91C_SSC_THR (AT91_CAST(AT91_REG *) 0xFFFD4024) // (SSC) Transmit Holding Register -#define AT91C_SSC_RCMR (AT91_CAST(AT91_REG *) 0xFFFD4010) // (SSC) Receive Clock ModeRegister -#define AT91C_SSC_IER (AT91_CAST(AT91_REG *) 0xFFFD4044) // (SSC) Interrupt Enable Register -#define AT91C_SSC_TSHR (AT91_CAST(AT91_REG *) 0xFFFD4034) // (SSC) Transmit Sync Holding Register -#define AT91C_SSC_SR (AT91_CAST(AT91_REG *) 0xFFFD4040) // (SSC) Status Register -#define AT91C_SSC_CMR (AT91_CAST(AT91_REG *) 0xFFFD4004) // (SSC) Clock Mode Register -#define AT91C_SSC_TCMR (AT91_CAST(AT91_REG *) 0xFFFD4018) // (SSC) Transmit Clock Mode Register -#define AT91C_SSC_CR (AT91_CAST(AT91_REG *) 0xFFFD4000) // (SSC) Control Register -#define AT91C_SSC_IMR (AT91_CAST(AT91_REG *) 0xFFFD404C) // (SSC) Interrupt Mask Register -#define AT91C_SSC_RFMR (AT91_CAST(AT91_REG *) 0xFFFD4014) // (SSC) Receive Frame Mode Register -// ========== Register definition for PDC_US1 peripheral ========== -#define AT91C_US1_RNCR (AT91_CAST(AT91_REG *) 0xFFFC4114) // (PDC_US1) Receive Next Counter Register -#define AT91C_US1_PTCR (AT91_CAST(AT91_REG *) 0xFFFC4120) // (PDC_US1) PDC Transfer Control Register -#define AT91C_US1_TCR (AT91_CAST(AT91_REG *) 0xFFFC410C) // (PDC_US1) Transmit Counter Register -#define AT91C_US1_PTSR (AT91_CAST(AT91_REG *) 0xFFFC4124) // (PDC_US1) PDC Transfer Status Register -#define AT91C_US1_TNPR (AT91_CAST(AT91_REG *) 0xFFFC4118) // (PDC_US1) Transmit Next Pointer Register -#define AT91C_US1_RCR (AT91_CAST(AT91_REG *) 0xFFFC4104) // (PDC_US1) Receive Counter Register -#define AT91C_US1_RNPR (AT91_CAST(AT91_REG *) 0xFFFC4110) // (PDC_US1) Receive Next Pointer Register -#define AT91C_US1_RPR (AT91_CAST(AT91_REG *) 0xFFFC4100) // (PDC_US1) Receive Pointer Register -#define AT91C_US1_TNCR (AT91_CAST(AT91_REG *) 0xFFFC411C) // (PDC_US1) Transmit Next Counter Register -#define AT91C_US1_TPR (AT91_CAST(AT91_REG *) 0xFFFC4108) // (PDC_US1) Transmit Pointer Register -// ========== Register definition for US1 peripheral ========== -#define AT91C_US1_IF (AT91_CAST(AT91_REG *) 0xFFFC404C) // (US1) IRDA_FILTER Register -#define AT91C_US1_NER (AT91_CAST(AT91_REG *) 0xFFFC4044) // (US1) Nb Errors Register -#define AT91C_US1_RTOR (AT91_CAST(AT91_REG *) 0xFFFC4024) // (US1) Receiver Time-out Register -#define AT91C_US1_CSR (AT91_CAST(AT91_REG *) 0xFFFC4014) // (US1) Channel Status Register -#define AT91C_US1_IDR (AT91_CAST(AT91_REG *) 0xFFFC400C) // (US1) Interrupt Disable Register -#define AT91C_US1_IER (AT91_CAST(AT91_REG *) 0xFFFC4008) // (US1) Interrupt Enable Register -#define AT91C_US1_THR (AT91_CAST(AT91_REG *) 0xFFFC401C) // (US1) Transmitter Holding Register -#define AT91C_US1_TTGR (AT91_CAST(AT91_REG *) 0xFFFC4028) // (US1) Transmitter Time-guard Register -#define AT91C_US1_RHR (AT91_CAST(AT91_REG *) 0xFFFC4018) // (US1) Receiver Holding Register -#define AT91C_US1_BRGR (AT91_CAST(AT91_REG *) 0xFFFC4020) // (US1) Baud Rate Generator Register -#define AT91C_US1_IMR (AT91_CAST(AT91_REG *) 0xFFFC4010) // (US1) Interrupt Mask Register -#define AT91C_US1_FIDI (AT91_CAST(AT91_REG *) 0xFFFC4040) // (US1) FI_DI_Ratio Register -#define AT91C_US1_CR (AT91_CAST(AT91_REG *) 0xFFFC4000) // (US1) Control Register -#define AT91C_US1_MR (AT91_CAST(AT91_REG *) 0xFFFC4004) // (US1) Mode Register -// ========== Register definition for PDC_US0 peripheral ========== -#define AT91C_US0_TNPR (AT91_CAST(AT91_REG *) 0xFFFC0118) // (PDC_US0) Transmit Next Pointer Register -#define AT91C_US0_RNPR (AT91_CAST(AT91_REG *) 0xFFFC0110) // (PDC_US0) Receive Next Pointer Register -#define AT91C_US0_TCR (AT91_CAST(AT91_REG *) 0xFFFC010C) // (PDC_US0) Transmit Counter Register -#define AT91C_US0_PTCR (AT91_CAST(AT91_REG *) 0xFFFC0120) // (PDC_US0) PDC Transfer Control Register -#define AT91C_US0_PTSR (AT91_CAST(AT91_REG *) 0xFFFC0124) // (PDC_US0) PDC Transfer Status Register -#define AT91C_US0_TNCR (AT91_CAST(AT91_REG *) 0xFFFC011C) // (PDC_US0) Transmit Next Counter Register -#define AT91C_US0_TPR (AT91_CAST(AT91_REG *) 0xFFFC0108) // (PDC_US0) Transmit Pointer Register -#define AT91C_US0_RCR (AT91_CAST(AT91_REG *) 0xFFFC0104) // (PDC_US0) Receive Counter Register -#define AT91C_US0_RPR (AT91_CAST(AT91_REG *) 0xFFFC0100) // (PDC_US0) Receive Pointer Register -#define AT91C_US0_RNCR (AT91_CAST(AT91_REG *) 0xFFFC0114) // (PDC_US0) Receive Next Counter Register -// ========== Register definition for US0 peripheral ========== -#define AT91C_US0_BRGR (AT91_CAST(AT91_REG *) 0xFFFC0020) // (US0) Baud Rate Generator Register -#define AT91C_US0_NER (AT91_CAST(AT91_REG *) 0xFFFC0044) // (US0) Nb Errors Register -#define AT91C_US0_CR (AT91_CAST(AT91_REG *) 0xFFFC0000) // (US0) Control Register -#define AT91C_US0_IMR (AT91_CAST(AT91_REG *) 0xFFFC0010) // (US0) Interrupt Mask Register -#define AT91C_US0_FIDI (AT91_CAST(AT91_REG *) 0xFFFC0040) // (US0) FI_DI_Ratio Register -#define AT91C_US0_TTGR (AT91_CAST(AT91_REG *) 0xFFFC0028) // (US0) Transmitter Time-guard Register -#define AT91C_US0_MR (AT91_CAST(AT91_REG *) 0xFFFC0004) // (US0) Mode Register -#define AT91C_US0_RTOR (AT91_CAST(AT91_REG *) 0xFFFC0024) // (US0) Receiver Time-out Register -#define AT91C_US0_CSR (AT91_CAST(AT91_REG *) 0xFFFC0014) // (US0) Channel Status Register -#define AT91C_US0_RHR (AT91_CAST(AT91_REG *) 0xFFFC0018) // (US0) Receiver Holding Register -#define AT91C_US0_IDR (AT91_CAST(AT91_REG *) 0xFFFC000C) // (US0) Interrupt Disable Register -#define AT91C_US0_THR (AT91_CAST(AT91_REG *) 0xFFFC001C) // (US0) Transmitter Holding Register -#define AT91C_US0_IF (AT91_CAST(AT91_REG *) 0xFFFC004C) // (US0) IRDA_FILTER Register -#define AT91C_US0_IER (AT91_CAST(AT91_REG *) 0xFFFC0008) // (US0) Interrupt Enable Register -// ========== Register definition for TWI peripheral ========== -#define AT91C_TWI_IER (AT91_CAST(AT91_REG *) 0xFFFB8024) // (TWI) Interrupt Enable Register -#define AT91C_TWI_CR (AT91_CAST(AT91_REG *) 0xFFFB8000) // (TWI) Control Register -#define AT91C_TWI_SR (AT91_CAST(AT91_REG *) 0xFFFB8020) // (TWI) Status Register -#define AT91C_TWI_IMR (AT91_CAST(AT91_REG *) 0xFFFB802C) // (TWI) Interrupt Mask Register -#define AT91C_TWI_THR (AT91_CAST(AT91_REG *) 0xFFFB8034) // (TWI) Transmit Holding Register -#define AT91C_TWI_IDR (AT91_CAST(AT91_REG *) 0xFFFB8028) // (TWI) Interrupt Disable Register -#define AT91C_TWI_IADR (AT91_CAST(AT91_REG *) 0xFFFB800C) // (TWI) Internal Address Register -#define AT91C_TWI_MMR (AT91_CAST(AT91_REG *) 0xFFFB8004) // (TWI) Master Mode Register -#define AT91C_TWI_CWGR (AT91_CAST(AT91_REG *) 0xFFFB8010) // (TWI) Clock Waveform Generator Register -#define AT91C_TWI_RHR (AT91_CAST(AT91_REG *) 0xFFFB8030) // (TWI) Receive Holding Register -// ========== Register definition for TC0 peripheral ========== -#define AT91C_TC0_SR (AT91_CAST(AT91_REG *) 0xFFFA0020) // (TC0) Status Register -#define AT91C_TC0_RC (AT91_CAST(AT91_REG *) 0xFFFA001C) // (TC0) Register C -#define AT91C_TC0_RB (AT91_CAST(AT91_REG *) 0xFFFA0018) // (TC0) Register B -#define AT91C_TC0_CCR (AT91_CAST(AT91_REG *) 0xFFFA0000) // (TC0) Channel Control Register -#define AT91C_TC0_CMR (AT91_CAST(AT91_REG *) 0xFFFA0004) // (TC0) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC0_IER (AT91_CAST(AT91_REG *) 0xFFFA0024) // (TC0) Interrupt Enable Register -#define AT91C_TC0_RA (AT91_CAST(AT91_REG *) 0xFFFA0014) // (TC0) Register A -#define AT91C_TC0_IDR (AT91_CAST(AT91_REG *) 0xFFFA0028) // (TC0) Interrupt Disable Register -#define AT91C_TC0_CV (AT91_CAST(AT91_REG *) 0xFFFA0010) // (TC0) Counter Value -#define AT91C_TC0_IMR (AT91_CAST(AT91_REG *) 0xFFFA002C) // (TC0) Interrupt Mask Register -// ========== Register definition for TC1 peripheral ========== -#define AT91C_TC1_RB (AT91_CAST(AT91_REG *) 0xFFFA0058) // (TC1) Register B -#define AT91C_TC1_CCR (AT91_CAST(AT91_REG *) 0xFFFA0040) // (TC1) Channel Control Register -#define AT91C_TC1_IER (AT91_CAST(AT91_REG *) 0xFFFA0064) // (TC1) Interrupt Enable Register -#define AT91C_TC1_IDR (AT91_CAST(AT91_REG *) 0xFFFA0068) // (TC1) Interrupt Disable Register -#define AT91C_TC1_SR (AT91_CAST(AT91_REG *) 0xFFFA0060) // (TC1) Status Register -#define AT91C_TC1_CMR (AT91_CAST(AT91_REG *) 0xFFFA0044) // (TC1) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC1_RA (AT91_CAST(AT91_REG *) 0xFFFA0054) // (TC1) Register A -#define AT91C_TC1_RC (AT91_CAST(AT91_REG *) 0xFFFA005C) // (TC1) Register C -#define AT91C_TC1_IMR (AT91_CAST(AT91_REG *) 0xFFFA006C) // (TC1) Interrupt Mask Register -#define AT91C_TC1_CV (AT91_CAST(AT91_REG *) 0xFFFA0050) // (TC1) Counter Value -// ========== Register definition for TC2 peripheral ========== -#define AT91C_TC2_CMR (AT91_CAST(AT91_REG *) 0xFFFA0084) // (TC2) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC2_CCR (AT91_CAST(AT91_REG *) 0xFFFA0080) // (TC2) Channel Control Register -#define AT91C_TC2_CV (AT91_CAST(AT91_REG *) 0xFFFA0090) // (TC2) Counter Value -#define AT91C_TC2_RA (AT91_CAST(AT91_REG *) 0xFFFA0094) // (TC2) Register A -#define AT91C_TC2_RB (AT91_CAST(AT91_REG *) 0xFFFA0098) // (TC2) Register B -#define AT91C_TC2_IDR (AT91_CAST(AT91_REG *) 0xFFFA00A8) // (TC2) Interrupt Disable Register -#define AT91C_TC2_IMR (AT91_CAST(AT91_REG *) 0xFFFA00AC) // (TC2) Interrupt Mask Register -#define AT91C_TC2_RC (AT91_CAST(AT91_REG *) 0xFFFA009C) // (TC2) Register C -#define AT91C_TC2_IER (AT91_CAST(AT91_REG *) 0xFFFA00A4) // (TC2) Interrupt Enable Register -#define AT91C_TC2_SR (AT91_CAST(AT91_REG *) 0xFFFA00A0) // (TC2) Status Register -// ========== Register definition for TCB peripheral ========== -#define AT91C_TCB_BMR (AT91_CAST(AT91_REG *) 0xFFFA00C4) // (TCB) TC Block Mode Register -#define AT91C_TCB_BCR (AT91_CAST(AT91_REG *) 0xFFFA00C0) // (TCB) TC Block Control Register -// ========== Register definition for PWMC_CH3 peripheral ========== -#define AT91C_PWMC_CH3_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC270) // (PWMC_CH3) Channel Update Register -#define AT91C_PWMC_CH3_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC274) // (PWMC_CH3) Reserved -#define AT91C_PWMC_CH3_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC268) // (PWMC_CH3) Channel Period Register -#define AT91C_PWMC_CH3_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC264) // (PWMC_CH3) Channel Duty Cycle Register -#define AT91C_PWMC_CH3_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC26C) // (PWMC_CH3) Channel Counter Register -#define AT91C_PWMC_CH3_CMR (AT91_CAST(AT91_REG *) 0xFFFCC260) // (PWMC_CH3) Channel Mode Register -// ========== Register definition for PWMC_CH2 peripheral ========== -#define AT91C_PWMC_CH2_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC254) // (PWMC_CH2) Reserved -#define AT91C_PWMC_CH2_CMR (AT91_CAST(AT91_REG *) 0xFFFCC240) // (PWMC_CH2) Channel Mode Register -#define AT91C_PWMC_CH2_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC24C) // (PWMC_CH2) Channel Counter Register -#define AT91C_PWMC_CH2_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC248) // (PWMC_CH2) Channel Period Register -#define AT91C_PWMC_CH2_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC250) // (PWMC_CH2) Channel Update Register -#define AT91C_PWMC_CH2_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC244) // (PWMC_CH2) Channel Duty Cycle Register -// ========== Register definition for PWMC_CH1 peripheral ========== -#define AT91C_PWMC_CH1_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC234) // (PWMC_CH1) Reserved -#define AT91C_PWMC_CH1_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC230) // (PWMC_CH1) Channel Update Register -#define AT91C_PWMC_CH1_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC228) // (PWMC_CH1) Channel Period Register -#define AT91C_PWMC_CH1_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC22C) // (PWMC_CH1) Channel Counter Register -#define AT91C_PWMC_CH1_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC224) // (PWMC_CH1) Channel Duty Cycle Register -#define AT91C_PWMC_CH1_CMR (AT91_CAST(AT91_REG *) 0xFFFCC220) // (PWMC_CH1) Channel Mode Register -// ========== Register definition for PWMC_CH0 peripheral ========== -#define AT91C_PWMC_CH0_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC214) // (PWMC_CH0) Reserved -#define AT91C_PWMC_CH0_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC208) // (PWMC_CH0) Channel Period Register -#define AT91C_PWMC_CH0_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC204) // (PWMC_CH0) Channel Duty Cycle Register -#define AT91C_PWMC_CH0_CMR (AT91_CAST(AT91_REG *) 0xFFFCC200) // (PWMC_CH0) Channel Mode Register -#define AT91C_PWMC_CH0_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC210) // (PWMC_CH0) Channel Update Register -#define AT91C_PWMC_CH0_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC20C) // (PWMC_CH0) Channel Counter Register -// ========== Register definition for PWMC peripheral ========== -#define AT91C_PWMC_IDR (AT91_CAST(AT91_REG *) 0xFFFCC014) // (PWMC) PWMC Interrupt Disable Register -#define AT91C_PWMC_DIS (AT91_CAST(AT91_REG *) 0xFFFCC008) // (PWMC) PWMC Disable Register -#define AT91C_PWMC_IER (AT91_CAST(AT91_REG *) 0xFFFCC010) // (PWMC) PWMC Interrupt Enable Register -#define AT91C_PWMC_VR (AT91_CAST(AT91_REG *) 0xFFFCC0FC) // (PWMC) PWMC Version Register -#define AT91C_PWMC_ISR (AT91_CAST(AT91_REG *) 0xFFFCC01C) // (PWMC) PWMC Interrupt Status Register -#define AT91C_PWMC_SR (AT91_CAST(AT91_REG *) 0xFFFCC00C) // (PWMC) PWMC Status Register -#define AT91C_PWMC_IMR (AT91_CAST(AT91_REG *) 0xFFFCC018) // (PWMC) PWMC Interrupt Mask Register -#define AT91C_PWMC_MR (AT91_CAST(AT91_REG *) 0xFFFCC000) // (PWMC) PWMC Mode Register -#define AT91C_PWMC_ENA (AT91_CAST(AT91_REG *) 0xFFFCC004) // (PWMC) PWMC Enable Register -// ========== Register definition for UDP peripheral ========== -#define AT91C_UDP_IMR (AT91_CAST(AT91_REG *) 0xFFFB0018) // (UDP) Interrupt Mask Register -#define AT91C_UDP_FADDR (AT91_CAST(AT91_REG *) 0xFFFB0008) // (UDP) Function Address Register -#define AT91C_UDP_NUM (AT91_CAST(AT91_REG *) 0xFFFB0000) // (UDP) Frame Number Register -#define AT91C_UDP_FDR (AT91_CAST(AT91_REG *) 0xFFFB0050) // (UDP) Endpoint FIFO Data Register -#define AT91C_UDP_ISR (AT91_CAST(AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register -#define AT91C_UDP_CSR (AT91_CAST(AT91_REG *) 0xFFFB0030) // (UDP) Endpoint Control and Status Register -#define AT91C_UDP_IDR (AT91_CAST(AT91_REG *) 0xFFFB0014) // (UDP) Interrupt Disable Register -#define AT91C_UDP_ICR (AT91_CAST(AT91_REG *) 0xFFFB0020) // (UDP) Interrupt Clear Register -#define AT91C_UDP_RSTEP (AT91_CAST(AT91_REG *) 0xFFFB0028) // (UDP) Reset Endpoint Register -#define AT91C_UDP_TXVC (AT91_CAST(AT91_REG *) 0xFFFB0074) // (UDP) Transceiver Control Register -#define AT91C_UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0xFFFB0004) // (UDP) Global State Register -#define AT91C_UDP_IER (AT91_CAST(AT91_REG *) 0xFFFB0010) // (UDP) Interrupt Enable Register - -// ***************************************************************************** -// PIO DEFINITIONS FOR AT91SAM7S512 -// ***************************************************************************** -#define AT91C_PIO_PA0 (1 << 0) // Pin Controlled by PA0 -#define AT91C_PA0_PWM0 (AT91C_PIO_PA0) // PWM Channel 0 -#define AT91C_PA0_TIOA0 (AT91C_PIO_PA0) // Timer Counter 0 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA1 (1 << 1) // Pin Controlled by PA1 -#define AT91C_PA1_PWM1 (AT91C_PIO_PA1) // PWM Channel 1 -#define AT91C_PA1_TIOB0 (AT91C_PIO_PA1) // Timer Counter 0 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA10 (1 << 10) // Pin Controlled by PA10 -#define AT91C_PA10_DTXD (AT91C_PIO_PA10) // DBGU Debug Transmit Data -#define AT91C_PA10_NPCS2 (AT91C_PIO_PA10) // SPI Peripheral Chip Select 2 -#define AT91C_PIO_PA11 (1 << 11) // Pin Controlled by PA11 -#define AT91C_PA11_NPCS0 (AT91C_PIO_PA11) // SPI Peripheral Chip Select 0 -#define AT91C_PA11_PWM0 (AT91C_PIO_PA11) // PWM Channel 0 -#define AT91C_PIO_PA12 (1 << 12) // Pin Controlled by PA12 -#define AT91C_PA12_MISO (AT91C_PIO_PA12) // SPI Master In Slave -#define AT91C_PA12_PWM1 (AT91C_PIO_PA12) // PWM Channel 1 -#define AT91C_PIO_PA13 (1 << 13) // Pin Controlled by PA13 -#define AT91C_PA13_MOSI (AT91C_PIO_PA13) // SPI Master Out Slave -#define AT91C_PA13_PWM2 (AT91C_PIO_PA13) // PWM Channel 2 -#define AT91C_PIO_PA14 (1 << 14) // Pin Controlled by PA14 -#define AT91C_PA14_SPCK (AT91C_PIO_PA14) // SPI Serial Clock -#define AT91C_PA14_PWM3 (AT91C_PIO_PA14) // PWM Channel 3 -#define AT91C_PIO_PA15 (1 << 15) // Pin Controlled by PA15 -#define AT91C_PA15_TF (AT91C_PIO_PA15) // SSC Transmit Frame Sync -#define AT91C_PA15_TIOA1 (AT91C_PIO_PA15) // Timer Counter 1 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA16 (1 << 16) // Pin Controlled by PA16 -#define AT91C_PA16_TK (AT91C_PIO_PA16) // SSC Transmit Clock -#define AT91C_PA16_TIOB1 (AT91C_PIO_PA16) // Timer Counter 1 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA17 (1 << 17) // Pin Controlled by PA17 -#define AT91C_PA17_TD (AT91C_PIO_PA17) // SSC Transmit data -#define AT91C_PA17_PCK1 (AT91C_PIO_PA17) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA18 (1 << 18) // Pin Controlled by PA18 -#define AT91C_PA18_RD (AT91C_PIO_PA18) // SSC Receive Data -#define AT91C_PA18_PCK2 (AT91C_PIO_PA18) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA19 (1 << 19) // Pin Controlled by PA19 -#define AT91C_PA19_RK (AT91C_PIO_PA19) // SSC Receive Clock -#define AT91C_PA19_FIQ (AT91C_PIO_PA19) // AIC Fast Interrupt Input -#define AT91C_PIO_PA2 (1 << 2) // Pin Controlled by PA2 -#define AT91C_PA2_PWM2 (AT91C_PIO_PA2) // PWM Channel 2 -#define AT91C_PA2_SCK0 (AT91C_PIO_PA2) // USART 0 Serial Clock -#define AT91C_PIO_PA20 (1 << 20) // Pin Controlled by PA20 -#define AT91C_PA20_RF (AT91C_PIO_PA20) // SSC Receive Frame Sync -#define AT91C_PA20_IRQ0 (AT91C_PIO_PA20) // External Interrupt 0 -#define AT91C_PIO_PA21 (1 << 21) // Pin Controlled by PA21 -#define AT91C_PA21_RXD1 (AT91C_PIO_PA21) // USART 1 Receive Data -#define AT91C_PA21_PCK1 (AT91C_PIO_PA21) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA22 (1 << 22) // Pin Controlled by PA22 -#define AT91C_PA22_TXD1 (AT91C_PIO_PA22) // USART 1 Transmit Data -#define AT91C_PA22_NPCS3 (AT91C_PIO_PA22) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA23 (1 << 23) // Pin Controlled by PA23 -#define AT91C_PA23_SCK1 (AT91C_PIO_PA23) // USART 1 Serial Clock -#define AT91C_PA23_PWM0 (AT91C_PIO_PA23) // PWM Channel 0 -#define AT91C_PIO_PA24 (1 << 24) // Pin Controlled by PA24 -#define AT91C_PA24_RTS1 (AT91C_PIO_PA24) // USART 1 Ready To Send -#define AT91C_PA24_PWM1 (AT91C_PIO_PA24) // PWM Channel 1 -#define AT91C_PIO_PA25 (1 << 25) // Pin Controlled by PA25 -#define AT91C_PA25_CTS1 (AT91C_PIO_PA25) // USART 1 Clear To Send -#define AT91C_PA25_PWM2 (AT91C_PIO_PA25) // PWM Channel 2 -#define AT91C_PIO_PA26 (1 << 26) // Pin Controlled by PA26 -#define AT91C_PA26_DCD1 (AT91C_PIO_PA26) // USART 1 Data Carrier Detect -#define AT91C_PA26_TIOA2 (AT91C_PIO_PA26) // Timer Counter 2 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA27 (1 << 27) // Pin Controlled by PA27 -#define AT91C_PA27_DTR1 (AT91C_PIO_PA27) // USART 1 Data Terminal ready -#define AT91C_PA27_TIOB2 (AT91C_PIO_PA27) // Timer Counter 2 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA28 (1 << 28) // Pin Controlled by PA28 -#define AT91C_PA28_DSR1 (AT91C_PIO_PA28) // USART 1 Data Set ready -#define AT91C_PA28_TCLK1 (AT91C_PIO_PA28) // Timer Counter 1 external clock input -#define AT91C_PIO_PA29 (1 << 29) // Pin Controlled by PA29 -#define AT91C_PA29_RI1 (AT91C_PIO_PA29) // USART 1 Ring Indicator -#define AT91C_PA29_TCLK2 (AT91C_PIO_PA29) // Timer Counter 2 external clock input -#define AT91C_PIO_PA3 (1 << 3) // Pin Controlled by PA3 -#define AT91C_PA3_TWD (AT91C_PIO_PA3) // TWI Two-wire Serial Data -#define AT91C_PA3_NPCS3 (AT91C_PIO_PA3) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA30 (1 << 30) // Pin Controlled by PA30 -#define AT91C_PA30_IRQ1 (AT91C_PIO_PA30) // External Interrupt 1 -#define AT91C_PA30_NPCS2 (AT91C_PIO_PA30) // SPI Peripheral Chip Select 2 -#define AT91C_PIO_PA31 (1 << 31) // Pin Controlled by PA31 -#define AT91C_PA31_NPCS1 (AT91C_PIO_PA31) // SPI Peripheral Chip Select 1 -#define AT91C_PA31_PCK2 (AT91C_PIO_PA31) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA4 (1 << 4) // Pin Controlled by PA4 -#define AT91C_PA4_TWCK (AT91C_PIO_PA4) // TWI Two-wire Serial Clock -#define AT91C_PA4_TCLK0 (AT91C_PIO_PA4) // Timer Counter 0 external clock input -#define AT91C_PIO_PA5 (1 << 5) // Pin Controlled by PA5 -#define AT91C_PA5_RXD0 (AT91C_PIO_PA5) // USART 0 Receive Data -#define AT91C_PA5_NPCS3 (AT91C_PIO_PA5) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA6 (1 << 6) // Pin Controlled by PA6 -#define AT91C_PA6_TXD0 (AT91C_PIO_PA6) // USART 0 Transmit Data -#define AT91C_PA6_PCK0 (AT91C_PIO_PA6) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PA7 (1 << 7) // Pin Controlled by PA7 -#define AT91C_PA7_RTS0 (AT91C_PIO_PA7) // USART 0 Ready To Send -#define AT91C_PA7_PWM3 (AT91C_PIO_PA7) // PWM Channel 3 -#define AT91C_PIO_PA8 (1 << 8) // Pin Controlled by PA8 -#define AT91C_PA8_CTS0 (AT91C_PIO_PA8) // USART 0 Clear To Send -#define AT91C_PA8_ADTRG (AT91C_PIO_PA8) // ADC External Trigger -#define AT91C_PIO_PA9 (1 << 9) // Pin Controlled by PA9 -#define AT91C_PA9_DRXD (AT91C_PIO_PA9) // DBGU Debug Receive Data -#define AT91C_PA9_NPCS1 (AT91C_PIO_PA9) // SPI Peripheral Chip Select 1 - -// ***************************************************************************** -// PERIPHERAL ID DEFINITIONS FOR AT91SAM7S512 -// ***************************************************************************** -#define AT91C_ID_FIQ ( 0) // Advanced Interrupt Controller (FIQ) -#define AT91C_ID_SYS ( 1) // System Peripheral -#define AT91C_ID_PIOA ( 2) // Parallel IO Controller -#define AT91C_ID_3_Reserved ( 3) // Reserved -#define AT91C_ID_ADC ( 4) // Analog-to-Digital Converter -#define AT91C_ID_SPI ( 5) // Serial Peripheral Interface -#define AT91C_ID_US0 ( 6) // USART 0 -#define AT91C_ID_US1 ( 7) // USART 1 -#define AT91C_ID_SSC ( 8) // Serial Synchronous Controller -#define AT91C_ID_TWI ( 9) // Two-Wire Interface -#define AT91C_ID_PWMC (10) // PWM Controller -#define AT91C_ID_UDP (11) // USB Device Port -#define AT91C_ID_TC0 (12) // Timer Counter 0 -#define AT91C_ID_TC1 (13) // Timer Counter 1 -#define AT91C_ID_TC2 (14) // Timer Counter 2 -#define AT91C_ID_15_Reserved (15) // Reserved -#define AT91C_ID_16_Reserved (16) // Reserved -#define AT91C_ID_17_Reserved (17) // Reserved -#define AT91C_ID_18_Reserved (18) // Reserved -#define AT91C_ID_19_Reserved (19) // Reserved -#define AT91C_ID_20_Reserved (20) // Reserved -#define AT91C_ID_21_Reserved (21) // Reserved -#define AT91C_ID_22_Reserved (22) // Reserved -#define AT91C_ID_23_Reserved (23) // Reserved -#define AT91C_ID_24_Reserved (24) // Reserved -#define AT91C_ID_25_Reserved (25) // Reserved -#define AT91C_ID_26_Reserved (26) // Reserved -#define AT91C_ID_27_Reserved (27) // Reserved -#define AT91C_ID_28_Reserved (28) // Reserved -#define AT91C_ID_29_Reserved (29) // Reserved -#define AT91C_ID_IRQ0 (30) // Advanced Interrupt Controller (IRQ0) -#define AT91C_ID_IRQ1 (31) // Advanced Interrupt Controller (IRQ1) -#define AT91C_ALL_INT (0xC0007FF7) // ALL VALID INTERRUPTS - -// ***************************************************************************** -// BASE ADDRESS DEFINITIONS FOR AT91SAM7S512 -// ***************************************************************************** -#define AT91C_BASE_SYS (AT91_CAST(AT91PS_SYS) 0xFFFFF000) // (SYS) Base Address -#define AT91C_BASE_AIC (AT91_CAST(AT91PS_AIC) 0xFFFFF000) // (AIC) Base Address -#define AT91C_BASE_PDC_DBGU (AT91_CAST(AT91PS_PDC) 0xFFFFF300) // (PDC_DBGU) Base Address -#define AT91C_BASE_DBGU (AT91_CAST(AT91PS_DBGU) 0xFFFFF200) // (DBGU) Base Address -#define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address -#define AT91C_BASE_CKGR (AT91_CAST(AT91PS_CKGR) 0xFFFFFC20) // (CKGR) Base Address -#define AT91C_BASE_PMC (AT91_CAST(AT91PS_PMC) 0xFFFFFC00) // (PMC) Base Address -#define AT91C_BASE_RSTC (AT91_CAST(AT91PS_RSTC) 0xFFFFFD00) // (RSTC) Base Address -#define AT91C_BASE_RTTC (AT91_CAST(AT91PS_RTTC) 0xFFFFFD20) // (RTTC) Base Address -#define AT91C_BASE_PITC (AT91_CAST(AT91PS_PITC) 0xFFFFFD30) // (PITC) Base Address -#define AT91C_BASE_WDTC (AT91_CAST(AT91PS_WDTC) 0xFFFFFD40) // (WDTC) Base Address -#define AT91C_BASE_VREG (AT91_CAST(AT91PS_VREG) 0xFFFFFD60) // (VREG) Base Address -#define AT91C_BASE_EFC0 (AT91_CAST(AT91PS_EFC) 0xFFFFFF60) // (EFC0) Base Address -#define AT91C_BASE_EFC1 (AT91_CAST(AT91PS_EFC) 0xFFFFFF70) // (EFC1) Base Address -#define AT91C_BASE_MC (AT91_CAST(AT91PS_MC) 0xFFFFFF00) // (MC) Base Address -#define AT91C_BASE_PDC_SPI (AT91_CAST(AT91PS_PDC) 0xFFFE0100) // (PDC_SPI) Base Address -#define AT91C_BASE_SPI (AT91_CAST(AT91PS_SPI) 0xFFFE0000) // (SPI) Base Address -#define AT91C_BASE_PDC_ADC (AT91_CAST(AT91PS_PDC) 0xFFFD8100) // (PDC_ADC) Base Address -#define AT91C_BASE_ADC (AT91_CAST(AT91PS_ADC) 0xFFFD8000) // (ADC) Base Address -#define AT91C_BASE_PDC_SSC (AT91_CAST(AT91PS_PDC) 0xFFFD4100) // (PDC_SSC) Base Address -#define AT91C_BASE_SSC (AT91_CAST(AT91PS_SSC) 0xFFFD4000) // (SSC) Base Address -#define AT91C_BASE_PDC_US1 (AT91_CAST(AT91PS_PDC) 0xFFFC4100) // (PDC_US1) Base Address -#define AT91C_BASE_US1 (AT91_CAST(AT91PS_USART) 0xFFFC4000) // (US1) Base Address -#define AT91C_BASE_PDC_US0 (AT91_CAST(AT91PS_PDC) 0xFFFC0100) // (PDC_US0) Base Address -#define AT91C_BASE_US0 (AT91_CAST(AT91PS_USART) 0xFFFC0000) // (US0) Base Address -#define AT91C_BASE_TWI (AT91_CAST(AT91PS_TWI) 0xFFFB8000) // (TWI) Base Address -#define AT91C_BASE_TC0 (AT91_CAST(AT91PS_TC) 0xFFFA0000) // (TC0) Base Address -#define AT91C_BASE_TC1 (AT91_CAST(AT91PS_TC) 0xFFFA0040) // (TC1) Base Address -#define AT91C_BASE_TC2 (AT91_CAST(AT91PS_TC) 0xFFFA0080) // (TC2) Base Address -#define AT91C_BASE_TCB (AT91_CAST(AT91PS_TCB) 0xFFFA0000) // (TCB) Base Address -#define AT91C_BASE_PWMC_CH3 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC260) // (PWMC_CH3) Base Address -#define AT91C_BASE_PWMC_CH2 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC240) // (PWMC_CH2) Base Address -#define AT91C_BASE_PWMC_CH1 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC220) // (PWMC_CH1) Base Address -#define AT91C_BASE_PWMC_CH0 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC200) // (PWMC_CH0) Base Address -#define AT91C_BASE_PWMC (AT91_CAST(AT91PS_PWMC) 0xFFFCC000) // (PWMC) Base Address -#define AT91C_BASE_UDP (AT91_CAST(AT91PS_UDP) 0xFFFB0000) // (UDP) Base Address - -// ***************************************************************************** -// MEMORY MAPPING DEFINITIONS FOR AT91SAM7S512 -// ***************************************************************************** -// ISRAM -#define AT91C_ISRAM (0x00200000) // Internal SRAM base address -#define AT91C_ISRAM_SIZE (0x00010000) // Internal SRAM size in byte (64 Kbytes) -// IFLASH -#define AT91C_IFLASH (0x00100000) // Internal FLASH base address -#define AT91C_IFLASH_SIZE (0x00080000) // Internal FLASH size in byte (512 Kbytes) -#define AT91C_IFLASH_PAGE_SIZE (256) // Internal FLASH Page Size: 256 bytes -#define AT91C_IFLASH_LOCK_REGION_SIZE (16384) // Internal FLASH Lock Region Size: 16 Kbytes -#define AT91C_IFLASH_NB_OF_PAGES (2048) // Internal FLASH Number of Pages: 2048 bytes -#define AT91C_IFLASH_NB_OF_LOCK_BITS (32) // Internal FLASH Number of Lock Bits: 32 bytes - -#endif diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S64.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S64.h deleted file mode 100644 index af386a7..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7S64.h +++ /dev/null @@ -1,2229 +0,0 @@ -// ---------------------------------------------------------------------------- -// ATMEL Microcontroller Software Support - ROUSSET - -// ---------------------------------------------------------------------------- -// Copyright (c) 2006, Atmel Corporation -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, -// this list of conditions and the disclaimer below. -// -// Atmel's name may not be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR -// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE -// DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// ---------------------------------------------------------------------------- -// File Name : AT91SAM7S64.h -// Object : AT91SAM7S64 definitions -// Generated : AT91 SW Application Group 07/07/2008 (16:13:29) -// -// CVS Reference : /AT91SAM7S64.pl/1.23/Wed Aug 30 14:08:51 2006// -// CVS Reference : /SYS_SAM7S.pl/1.2/Thu Feb 3 10:47:39 2005// -// CVS Reference : /MC_SAM7S.pl/1.4/Thu Feb 16 16:45:50 2006// -// CVS Reference : /PMC_SAM7S_USB.pl/1.4/Tue Feb 8 14:00:19 2005// -// CVS Reference : /RSTC_SAM7S.pl/1.2/Wed Jul 13 15:25:17 2005// -// CVS Reference : /UDP_4ept.pl/1.1/Thu Aug 3 12:26:00 2006// -// CVS Reference : /PWM_SAM7S.pl/1.1/Tue May 10 12:38:54 2005// -// CVS Reference : /RTTC_6081A.pl/1.2/Thu Nov 4 13:57:22 2004// -// CVS Reference : /PITC_6079A.pl/1.2/Thu Nov 4 13:56:22 2004// -// CVS Reference : /WDTC_6080A.pl/1.3/Thu Nov 4 13:58:52 2004// -// CVS Reference : /VREG_6085B.pl/1.1/Tue Feb 1 16:40:38 2005// -// CVS Reference : /AIC_6075B.pl/1.3/Fri May 20 14:21:42 2005// -// CVS Reference : /PIO_6057A.pl/1.2/Thu Feb 3 10:29:42 2005// -// CVS Reference : /DBGU_6059D.pl/1.1/Mon Jan 31 13:54:41 2005// -// CVS Reference : /US_6089C.pl/1.1/Mon Jan 31 13:56:02 2005// -// CVS Reference : /SPI_6088D.pl/1.3/Fri May 20 14:23:02 2005// -// CVS Reference : /SSC_6078A.pl/1.1/Tue Jul 13 07:10:41 2004// -// CVS Reference : /TC_6082A.pl/1.7/Wed Mar 9 16:31:51 2005// -// CVS Reference : /TWI_6061A.pl/1.2/Fri Oct 27 11:40:48 2006// -// CVS Reference : /PDC_6074C.pl/1.2/Thu Feb 3 09:02:11 2005// -// CVS Reference : /ADC_6051C.pl/1.1/Mon Jan 31 13:12:40 2005// -// ---------------------------------------------------------------------------- - -#ifndef AT91SAM7S64_H -#define AT91SAM7S64_H - -#ifndef __ASSEMBLY__ -typedef volatile unsigned int AT91_REG;// Hardware register definition -#define AT91_CAST(a) (a) -#else -#define AT91_CAST(a) -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR System Peripherals -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SYS { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register - AT91_REG Reserved2[45]; // - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved3[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved4[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register - AT91_REG Reserved5[54]; // - AT91_REG PIOA_PER; // PIO Enable Register - AT91_REG PIOA_PDR; // PIO Disable Register - AT91_REG PIOA_PSR; // PIO Status Register - AT91_REG Reserved6[1]; // - AT91_REG PIOA_OER; // Output Enable Register - AT91_REG PIOA_ODR; // Output Disable Registerr - AT91_REG PIOA_OSR; // Output Status Register - AT91_REG Reserved7[1]; // - AT91_REG PIOA_IFER; // Input Filter Enable Register - AT91_REG PIOA_IFDR; // Input Filter Disable Register - AT91_REG PIOA_IFSR; // Input Filter Status Register - AT91_REG Reserved8[1]; // - AT91_REG PIOA_SODR; // Set Output Data Register - AT91_REG PIOA_CODR; // Clear Output Data Register - AT91_REG PIOA_ODSR; // Output Data Status Register - AT91_REG PIOA_PDSR; // Pin Data Status Register - AT91_REG PIOA_IER; // Interrupt Enable Register - AT91_REG PIOA_IDR; // Interrupt Disable Register - AT91_REG PIOA_IMR; // Interrupt Mask Register - AT91_REG PIOA_ISR; // Interrupt Status Register - AT91_REG PIOA_MDER; // Multi-driver Enable Register - AT91_REG PIOA_MDDR; // Multi-driver Disable Register - AT91_REG PIOA_MDSR; // Multi-driver Status Register - AT91_REG Reserved9[1]; // - AT91_REG PIOA_PPUDR; // Pull-up Disable Register - AT91_REG PIOA_PPUER; // Pull-up Enable Register - AT91_REG PIOA_PPUSR; // Pull-up Status Register - AT91_REG Reserved10[1]; // - AT91_REG PIOA_ASR; // Select A Register - AT91_REG PIOA_BSR; // Select B Register - AT91_REG PIOA_ABSR; // AB Select Status Register - AT91_REG Reserved11[9]; // - AT91_REG PIOA_OWER; // Output Write Enable Register - AT91_REG PIOA_OWDR; // Output Write Disable Register - AT91_REG PIOA_OWSR; // Output Write Status Register - AT91_REG Reserved12[469]; // - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved13[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved14[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved15[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved16[3]; // - AT91_REG PMC_PCKR[3]; // Programmable Clock Register - AT91_REG Reserved17[5]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register - AT91_REG Reserved18[36]; // - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register - AT91_REG Reserved19[5]; // - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register - AT91_REG Reserved20[5]; // - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_SYS, *AT91PS_SYS; -#else - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Advanced Interrupt Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_AIC { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register -} AT91S_AIC, *AT91PS_AIC; -#else -#define AIC_SMR (AT91_CAST(AT91_REG *) 0x00000000) // (AIC_SMR) Source Mode Register -#define AIC_SVR (AT91_CAST(AT91_REG *) 0x00000080) // (AIC_SVR) Source Vector Register -#define AIC_IVR (AT91_CAST(AT91_REG *) 0x00000100) // (AIC_IVR) IRQ Vector Register -#define AIC_FVR (AT91_CAST(AT91_REG *) 0x00000104) // (AIC_FVR) FIQ Vector Register -#define AIC_ISR (AT91_CAST(AT91_REG *) 0x00000108) // (AIC_ISR) Interrupt Status Register -#define AIC_IPR (AT91_CAST(AT91_REG *) 0x0000010C) // (AIC_IPR) Interrupt Pending Register -#define AIC_IMR (AT91_CAST(AT91_REG *) 0x00000110) // (AIC_IMR) Interrupt Mask Register -#define AIC_CISR (AT91_CAST(AT91_REG *) 0x00000114) // (AIC_CISR) Core Interrupt Status Register -#define AIC_IECR (AT91_CAST(AT91_REG *) 0x00000120) // (AIC_IECR) Interrupt Enable Command Register -#define AIC_IDCR (AT91_CAST(AT91_REG *) 0x00000124) // (AIC_IDCR) Interrupt Disable Command Register -#define AIC_ICCR (AT91_CAST(AT91_REG *) 0x00000128) // (AIC_ICCR) Interrupt Clear Command Register -#define AIC_ISCR (AT91_CAST(AT91_REG *) 0x0000012C) // (AIC_ISCR) Interrupt Set Command Register -#define AIC_EOICR (AT91_CAST(AT91_REG *) 0x00000130) // (AIC_EOICR) End of Interrupt Command Register -#define AIC_SPU (AT91_CAST(AT91_REG *) 0x00000134) // (AIC_SPU) Spurious Vector Register -#define AIC_DCR (AT91_CAST(AT91_REG *) 0x00000138) // (AIC_DCR) Debug Control Register (Protect) -#define AIC_FFER (AT91_CAST(AT91_REG *) 0x00000140) // (AIC_FFER) Fast Forcing Enable Register -#define AIC_FFDR (AT91_CAST(AT91_REG *) 0x00000144) // (AIC_FFDR) Fast Forcing Disable Register -#define AIC_FFSR (AT91_CAST(AT91_REG *) 0x00000148) // (AIC_FFSR) Fast Forcing Status Register - -#endif -// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- -#define AT91C_AIC_PRIOR (0x7 << 0) // (AIC) Priority Level -#define AT91C_AIC_PRIOR_LOWEST (0x0) // (AIC) Lowest priority level -#define AT91C_AIC_PRIOR_HIGHEST (0x7) // (AIC) Highest priority level -#define AT91C_AIC_SRCTYPE (0x3 << 5) // (AIC) Interrupt Source Type -#define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL (0x0 << 5) // (AIC) Internal Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL (0x0 << 5) // (AIC) External Sources Code Label Low-level Sensitive -#define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE (0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered -#define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE (0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered -#define AT91C_AIC_SRCTYPE_HIGH_LEVEL (0x2 << 5) // (AIC) Internal Or External Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_POSITIVE_EDGE (0x3 << 5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered -// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- -#define AT91C_AIC_NFIQ (0x1 << 0) // (AIC) NFIQ Status -#define AT91C_AIC_NIRQ (0x1 << 1) // (AIC) NIRQ Status -// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- -#define AT91C_AIC_DCR_PROT (0x1 << 0) // (AIC) Protection Mode -#define AT91C_AIC_DCR_GMSK (0x1 << 1) // (AIC) General Mask - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Peripheral DMA Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PDC { - AT91_REG PDC_RPR; // Receive Pointer Register - AT91_REG PDC_RCR; // Receive Counter Register - AT91_REG PDC_TPR; // Transmit Pointer Register - AT91_REG PDC_TCR; // Transmit Counter Register - AT91_REG PDC_RNPR; // Receive Next Pointer Register - AT91_REG PDC_RNCR; // Receive Next Counter Register - AT91_REG PDC_TNPR; // Transmit Next Pointer Register - AT91_REG PDC_TNCR; // Transmit Next Counter Register - AT91_REG PDC_PTCR; // PDC Transfer Control Register - AT91_REG PDC_PTSR; // PDC Transfer Status Register -} AT91S_PDC, *AT91PS_PDC; -#else -#define PDC_RPR (AT91_CAST(AT91_REG *) 0x00000000) // (PDC_RPR) Receive Pointer Register -#define PDC_RCR (AT91_CAST(AT91_REG *) 0x00000004) // (PDC_RCR) Receive Counter Register -#define PDC_TPR (AT91_CAST(AT91_REG *) 0x00000008) // (PDC_TPR) Transmit Pointer Register -#define PDC_TCR (AT91_CAST(AT91_REG *) 0x0000000C) // (PDC_TCR) Transmit Counter Register -#define PDC_RNPR (AT91_CAST(AT91_REG *) 0x00000010) // (PDC_RNPR) Receive Next Pointer Register -#define PDC_RNCR (AT91_CAST(AT91_REG *) 0x00000014) // (PDC_RNCR) Receive Next Counter Register -#define PDC_TNPR (AT91_CAST(AT91_REG *) 0x00000018) // (PDC_TNPR) Transmit Next Pointer Register -#define PDC_TNCR (AT91_CAST(AT91_REG *) 0x0000001C) // (PDC_TNCR) Transmit Next Counter Register -#define PDC_PTCR (AT91_CAST(AT91_REG *) 0x00000020) // (PDC_PTCR) PDC Transfer Control Register -#define PDC_PTSR (AT91_CAST(AT91_REG *) 0x00000024) // (PDC_PTSR) PDC Transfer Status Register - -#endif -// -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- -#define AT91C_PDC_RXTEN (0x1 << 0) // (PDC) Receiver Transfer Enable -#define AT91C_PDC_RXTDIS (0x1 << 1) // (PDC) Receiver Transfer Disable -#define AT91C_PDC_TXTEN (0x1 << 8) // (PDC) Transmitter Transfer Enable -#define AT91C_PDC_TXTDIS (0x1 << 9) // (PDC) Transmitter Transfer Disable -// -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Debug Unit -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_DBGU { - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved0[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved1[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register -} AT91S_DBGU, *AT91PS_DBGU; -#else -#define DBGU_CR (AT91_CAST(AT91_REG *) 0x00000000) // (DBGU_CR) Control Register -#define DBGU_MR (AT91_CAST(AT91_REG *) 0x00000004) // (DBGU_MR) Mode Register -#define DBGU_IER (AT91_CAST(AT91_REG *) 0x00000008) // (DBGU_IER) Interrupt Enable Register -#define DBGU_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (DBGU_IDR) Interrupt Disable Register -#define DBGU_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (DBGU_IMR) Interrupt Mask Register -#define DBGU_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (DBGU_CSR) Channel Status Register -#define DBGU_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (DBGU_RHR) Receiver Holding Register -#define DBGU_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (DBGU_THR) Transmitter Holding Register -#define DBGU_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (DBGU_BRGR) Baud Rate Generator Register -#define DBGU_CIDR (AT91_CAST(AT91_REG *) 0x00000040) // (DBGU_CIDR) Chip ID Register -#define DBGU_EXID (AT91_CAST(AT91_REG *) 0x00000044) // (DBGU_EXID) Chip ID Extension Register -#define DBGU_FNTR (AT91_CAST(AT91_REG *) 0x00000048) // (DBGU_FNTR) Force NTRST Register - -#endif -// -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_RSTRX (0x1 << 2) // (DBGU) Reset Receiver -#define AT91C_US_RSTTX (0x1 << 3) // (DBGU) Reset Transmitter -#define AT91C_US_RXEN (0x1 << 4) // (DBGU) Receiver Enable -#define AT91C_US_RXDIS (0x1 << 5) // (DBGU) Receiver Disable -#define AT91C_US_TXEN (0x1 << 6) // (DBGU) Transmitter Enable -#define AT91C_US_TXDIS (0x1 << 7) // (DBGU) Transmitter Disable -#define AT91C_US_RSTSTA (0x1 << 8) // (DBGU) Reset Status Bits -// -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_PAR (0x7 << 9) // (DBGU) Parity type -#define AT91C_US_PAR_EVEN (0x0 << 9) // (DBGU) Even Parity -#define AT91C_US_PAR_ODD (0x1 << 9) // (DBGU) Odd Parity -#define AT91C_US_PAR_SPACE (0x2 << 9) // (DBGU) Parity forced to 0 (Space) -#define AT91C_US_PAR_MARK (0x3 << 9) // (DBGU) Parity forced to 1 (Mark) -#define AT91C_US_PAR_NONE (0x4 << 9) // (DBGU) No Parity -#define AT91C_US_PAR_MULTI_DROP (0x6 << 9) // (DBGU) Multi-drop mode -#define AT91C_US_CHMODE (0x3 << 14) // (DBGU) Channel Mode -#define AT91C_US_CHMODE_NORMAL (0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART. -#define AT91C_US_CHMODE_AUTO (0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin. -#define AT91C_US_CHMODE_LOCAL (0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal. -#define AT91C_US_CHMODE_REMOTE (0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin. -// -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXRDY (0x1 << 0) // (DBGU) RXRDY Interrupt -#define AT91C_US_TXRDY (0x1 << 1) // (DBGU) TXRDY Interrupt -#define AT91C_US_ENDRX (0x1 << 3) // (DBGU) End of Receive Transfer Interrupt -#define AT91C_US_ENDTX (0x1 << 4) // (DBGU) End of Transmit Interrupt -#define AT91C_US_OVRE (0x1 << 5) // (DBGU) Overrun Interrupt -#define AT91C_US_FRAME (0x1 << 6) // (DBGU) Framing Error Interrupt -#define AT91C_US_PARE (0x1 << 7) // (DBGU) Parity Error Interrupt -#define AT91C_US_TXEMPTY (0x1 << 9) // (DBGU) TXEMPTY Interrupt -#define AT91C_US_TXBUFE (0x1 << 11) // (DBGU) TXBUFE Interrupt -#define AT91C_US_RXBUFF (0x1 << 12) // (DBGU) RXBUFF Interrupt -#define AT91C_US_COMM_TX (0x1 << 30) // (DBGU) COMM_TX Interrupt -#define AT91C_US_COMM_RX (0x1 << 31) // (DBGU) COMM_RX Interrupt -// -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register -------- -// -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register -------- -#define AT91C_US_FORCE_NTRST (0x1 << 0) // (DBGU) Force NTRST in JTAG - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Parallel Input Output Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PIO { - AT91_REG PIO_PER; // PIO Enable Register - AT91_REG PIO_PDR; // PIO Disable Register - AT91_REG PIO_PSR; // PIO Status Register - AT91_REG Reserved0[1]; // - AT91_REG PIO_OER; // Output Enable Register - AT91_REG PIO_ODR; // Output Disable Registerr - AT91_REG PIO_OSR; // Output Status Register - AT91_REG Reserved1[1]; // - AT91_REG PIO_IFER; // Input Filter Enable Register - AT91_REG PIO_IFDR; // Input Filter Disable Register - AT91_REG PIO_IFSR; // Input Filter Status Register - AT91_REG Reserved2[1]; // - AT91_REG PIO_SODR; // Set Output Data Register - AT91_REG PIO_CODR; // Clear Output Data Register - AT91_REG PIO_ODSR; // Output Data Status Register - AT91_REG PIO_PDSR; // Pin Data Status Register - AT91_REG PIO_IER; // Interrupt Enable Register - AT91_REG PIO_IDR; // Interrupt Disable Register - AT91_REG PIO_IMR; // Interrupt Mask Register - AT91_REG PIO_ISR; // Interrupt Status Register - AT91_REG PIO_MDER; // Multi-driver Enable Register - AT91_REG PIO_MDDR; // Multi-driver Disable Register - AT91_REG PIO_MDSR; // Multi-driver Status Register - AT91_REG Reserved3[1]; // - AT91_REG PIO_PPUDR; // Pull-up Disable Register - AT91_REG PIO_PPUER; // Pull-up Enable Register - AT91_REG PIO_PPUSR; // Pull-up Status Register - AT91_REG Reserved4[1]; // - AT91_REG PIO_ASR; // Select A Register - AT91_REG PIO_BSR; // Select B Register - AT91_REG PIO_ABSR; // AB Select Status Register - AT91_REG Reserved5[9]; // - AT91_REG PIO_OWER; // Output Write Enable Register - AT91_REG PIO_OWDR; // Output Write Disable Register - AT91_REG PIO_OWSR; // Output Write Status Register -} AT91S_PIO, *AT91PS_PIO; -#else -#define PIO_PER (AT91_CAST(AT91_REG *) 0x00000000) // (PIO_PER) PIO Enable Register -#define PIO_PDR (AT91_CAST(AT91_REG *) 0x00000004) // (PIO_PDR) PIO Disable Register -#define PIO_PSR (AT91_CAST(AT91_REG *) 0x00000008) // (PIO_PSR) PIO Status Register -#define PIO_OER (AT91_CAST(AT91_REG *) 0x00000010) // (PIO_OER) Output Enable Register -#define PIO_ODR (AT91_CAST(AT91_REG *) 0x00000014) // (PIO_ODR) Output Disable Registerr -#define PIO_OSR (AT91_CAST(AT91_REG *) 0x00000018) // (PIO_OSR) Output Status Register -#define PIO_IFER (AT91_CAST(AT91_REG *) 0x00000020) // (PIO_IFER) Input Filter Enable Register -#define PIO_IFDR (AT91_CAST(AT91_REG *) 0x00000024) // (PIO_IFDR) Input Filter Disable Register -#define PIO_IFSR (AT91_CAST(AT91_REG *) 0x00000028) // (PIO_IFSR) Input Filter Status Register -#define PIO_SODR (AT91_CAST(AT91_REG *) 0x00000030) // (PIO_SODR) Set Output Data Register -#define PIO_CODR (AT91_CAST(AT91_REG *) 0x00000034) // (PIO_CODR) Clear Output Data Register -#define PIO_ODSR (AT91_CAST(AT91_REG *) 0x00000038) // (PIO_ODSR) Output Data Status Register -#define PIO_PDSR (AT91_CAST(AT91_REG *) 0x0000003C) // (PIO_PDSR) Pin Data Status Register -#define PIO_IER (AT91_CAST(AT91_REG *) 0x00000040) // (PIO_IER) Interrupt Enable Register -#define PIO_IDR (AT91_CAST(AT91_REG *) 0x00000044) // (PIO_IDR) Interrupt Disable Register -#define PIO_IMR (AT91_CAST(AT91_REG *) 0x00000048) // (PIO_IMR) Interrupt Mask Register -#define PIO_ISR (AT91_CAST(AT91_REG *) 0x0000004C) // (PIO_ISR) Interrupt Status Register -#define PIO_MDER (AT91_CAST(AT91_REG *) 0x00000050) // (PIO_MDER) Multi-driver Enable Register -#define PIO_MDDR (AT91_CAST(AT91_REG *) 0x00000054) // (PIO_MDDR) Multi-driver Disable Register -#define PIO_MDSR (AT91_CAST(AT91_REG *) 0x00000058) // (PIO_MDSR) Multi-driver Status Register -#define PIO_PPUDR (AT91_CAST(AT91_REG *) 0x00000060) // (PIO_PPUDR) Pull-up Disable Register -#define PIO_PPUER (AT91_CAST(AT91_REG *) 0x00000064) // (PIO_PPUER) Pull-up Enable Register -#define PIO_PPUSR (AT91_CAST(AT91_REG *) 0x00000068) // (PIO_PPUSR) Pull-up Status Register -#define PIO_ASR (AT91_CAST(AT91_REG *) 0x00000070) // (PIO_ASR) Select A Register -#define PIO_BSR (AT91_CAST(AT91_REG *) 0x00000074) // (PIO_BSR) Select B Register -#define PIO_ABSR (AT91_CAST(AT91_REG *) 0x00000078) // (PIO_ABSR) AB Select Status Register -#define PIO_OWER (AT91_CAST(AT91_REG *) 0x000000A0) // (PIO_OWER) Output Write Enable Register -#define PIO_OWDR (AT91_CAST(AT91_REG *) 0x000000A4) // (PIO_OWDR) Output Write Disable Register -#define PIO_OWSR (AT91_CAST(AT91_REG *) 0x000000A8) // (PIO_OWSR) Output Write Status Register - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Clock Generator Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CKGR { - AT91_REG CKGR_MOR; // Main Oscillator Register - AT91_REG CKGR_MCFR; // Main Clock Frequency Register - AT91_REG Reserved0[1]; // - AT91_REG CKGR_PLLR; // PLL Register -} AT91S_CKGR, *AT91PS_CKGR; -#else -#define CKGR_MOR (AT91_CAST(AT91_REG *) 0x00000000) // (CKGR_MOR) Main Oscillator Register -#define CKGR_MCFR (AT91_CAST(AT91_REG *) 0x00000004) // (CKGR_MCFR) Main Clock Frequency Register -#define CKGR_PLLR (AT91_CAST(AT91_REG *) 0x0000000C) // (CKGR_PLLR) PLL Register - -#endif -// -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- -#define AT91C_CKGR_MOSCEN (0x1 << 0) // (CKGR) Main Oscillator Enable -#define AT91C_CKGR_OSCBYPASS (0x1 << 1) // (CKGR) Main Oscillator Bypass -#define AT91C_CKGR_OSCOUNT (0xFF << 8) // (CKGR) Main Oscillator Start-up Time -// -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- -#define AT91C_CKGR_MAINF (0xFFFF << 0) // (CKGR) Main Clock Frequency -#define AT91C_CKGR_MAINRDY (0x1 << 16) // (CKGR) Main Clock Ready -// -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register -------- -#define AT91C_CKGR_DIV (0xFF << 0) // (CKGR) Divider Selected -#define AT91C_CKGR_DIV_0 (0x0) // (CKGR) Divider output is 0 -#define AT91C_CKGR_DIV_BYPASS (0x1) // (CKGR) Divider is bypassed -#define AT91C_CKGR_PLLCOUNT (0x3F << 8) // (CKGR) PLL Counter -#define AT91C_CKGR_OUT (0x3 << 14) // (CKGR) PLL Output Frequency Range -#define AT91C_CKGR_OUT_0 (0x0 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_1 (0x1 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_2 (0x2 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_3 (0x3 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_MUL (0x7FF << 16) // (CKGR) PLL Multiplier -#define AT91C_CKGR_USBDIV (0x3 << 28) // (CKGR) Divider for USB Clocks -#define AT91C_CKGR_USBDIV_0 (0x0 << 28) // (CKGR) Divider output is PLL clock output -#define AT91C_CKGR_USBDIV_1 (0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2 -#define AT91C_CKGR_USBDIV_2 (0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Power Management Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PMC { - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved0[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved1[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved2[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved3[3]; // - AT91_REG PMC_PCKR[3]; // Programmable Clock Register - AT91_REG Reserved4[5]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register -} AT91S_PMC, *AT91PS_PMC; -#else -#define PMC_SCER (AT91_CAST(AT91_REG *) 0x00000000) // (PMC_SCER) System Clock Enable Register -#define PMC_SCDR (AT91_CAST(AT91_REG *) 0x00000004) // (PMC_SCDR) System Clock Disable Register -#define PMC_SCSR (AT91_CAST(AT91_REG *) 0x00000008) // (PMC_SCSR) System Clock Status Register -#define PMC_PCER (AT91_CAST(AT91_REG *) 0x00000010) // (PMC_PCER) Peripheral Clock Enable Register -#define PMC_PCDR (AT91_CAST(AT91_REG *) 0x00000014) // (PMC_PCDR) Peripheral Clock Disable Register -#define PMC_PCSR (AT91_CAST(AT91_REG *) 0x00000018) // (PMC_PCSR) Peripheral Clock Status Register -#define PMC_MCKR (AT91_CAST(AT91_REG *) 0x00000030) // (PMC_MCKR) Master Clock Register -#define PMC_PCKR (AT91_CAST(AT91_REG *) 0x00000040) // (PMC_PCKR) Programmable Clock Register -#define PMC_IER (AT91_CAST(AT91_REG *) 0x00000060) // (PMC_IER) Interrupt Enable Register -#define PMC_IDR (AT91_CAST(AT91_REG *) 0x00000064) // (PMC_IDR) Interrupt Disable Register -#define PMC_SR (AT91_CAST(AT91_REG *) 0x00000068) // (PMC_SR) Status Register -#define PMC_IMR (AT91_CAST(AT91_REG *) 0x0000006C) // (PMC_IMR) Interrupt Mask Register - -#endif -// -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register -------- -#define AT91C_PMC_PCK (0x1 << 0) // (PMC) Processor Clock -#define AT91C_PMC_UDP (0x1 << 7) // (PMC) USB Device Port Clock -#define AT91C_PMC_PCK0 (0x1 << 8) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK1 (0x1 << 9) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK2 (0x1 << 10) // (PMC) Programmable Clock Output -// -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register -------- -// -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------- -// -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register -------- -// -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register -------- -// -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register -------- -// -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register -------- -#define AT91C_PMC_CSS (0x3 << 0) // (PMC) Programmable Clock Selection -#define AT91C_PMC_CSS_SLOW_CLK (0x0) // (PMC) Slow Clock is selected -#define AT91C_PMC_CSS_MAIN_CLK (0x1) // (PMC) Main Clock is selected -#define AT91C_PMC_CSS_PLL_CLK (0x3) // (PMC) Clock from PLL is selected -#define AT91C_PMC_PRES (0x7 << 2) // (PMC) Programmable Clock Prescaler -#define AT91C_PMC_PRES_CLK (0x0 << 2) // (PMC) Selected clock -#define AT91C_PMC_PRES_CLK_2 (0x1 << 2) // (PMC) Selected clock divided by 2 -#define AT91C_PMC_PRES_CLK_4 (0x2 << 2) // (PMC) Selected clock divided by 4 -#define AT91C_PMC_PRES_CLK_8 (0x3 << 2) // (PMC) Selected clock divided by 8 -#define AT91C_PMC_PRES_CLK_16 (0x4 << 2) // (PMC) Selected clock divided by 16 -#define AT91C_PMC_PRES_CLK_32 (0x5 << 2) // (PMC) Selected clock divided by 32 -#define AT91C_PMC_PRES_CLK_64 (0x6 << 2) // (PMC) Selected clock divided by 64 -// -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register -------- -// -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------- -#define AT91C_PMC_MOSCS (0x1 << 0) // (PMC) MOSC Status/Enable/Disable/Mask -#define AT91C_PMC_LOCK (0x1 << 2) // (PMC) PLL Status/Enable/Disable/Mask -#define AT91C_PMC_MCKRDY (0x1 << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK0RDY (0x1 << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK1RDY (0x1 << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK2RDY (0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask -// -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register -------- -// -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register -------- -// -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Reset Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RSTC { - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register -} AT91S_RSTC, *AT91PS_RSTC; -#else -#define RSTC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (RSTC_RCR) Reset Control Register -#define RSTC_RSR (AT91_CAST(AT91_REG *) 0x00000004) // (RSTC_RSR) Reset Status Register -#define RSTC_RMR (AT91_CAST(AT91_REG *) 0x00000008) // (RSTC_RMR) Reset Mode Register - -#endif -// -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register -------- -#define AT91C_RSTC_PROCRST (0x1 << 0) // (RSTC) Processor Reset -#define AT91C_RSTC_PERRST (0x1 << 2) // (RSTC) Peripheral Reset -#define AT91C_RSTC_EXTRST (0x1 << 3) // (RSTC) External Reset -#define AT91C_RSTC_KEY (0xFF << 24) // (RSTC) Password -// -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register -------- -#define AT91C_RSTC_URSTS (0x1 << 0) // (RSTC) User Reset Status -#define AT91C_RSTC_BODSTS (0x1 << 1) // (RSTC) Brownout Detection Status -#define AT91C_RSTC_RSTTYP (0x7 << 8) // (RSTC) Reset Type -#define AT91C_RSTC_RSTTYP_POWERUP (0x0 << 8) // (RSTC) Power-up Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WAKEUP (0x1 << 8) // (RSTC) WakeUp Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WATCHDOG (0x2 << 8) // (RSTC) Watchdog Reset. Watchdog overflow occured. -#define AT91C_RSTC_RSTTYP_SOFTWARE (0x3 << 8) // (RSTC) Software Reset. Processor reset required by the software. -#define AT91C_RSTC_RSTTYP_USER (0x4 << 8) // (RSTC) User Reset. NRST pin detected low. -#define AT91C_RSTC_RSTTYP_BROWNOUT (0x5 << 8) // (RSTC) Brownout Reset occured. -#define AT91C_RSTC_NRSTL (0x1 << 16) // (RSTC) NRST pin level -#define AT91C_RSTC_SRCMP (0x1 << 17) // (RSTC) Software Reset Command in Progress. -// -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register -------- -#define AT91C_RSTC_URSTEN (0x1 << 0) // (RSTC) User Reset Enable -#define AT91C_RSTC_URSTIEN (0x1 << 4) // (RSTC) User Reset Interrupt Enable -#define AT91C_RSTC_ERSTL (0xF << 8) // (RSTC) User Reset Length -#define AT91C_RSTC_BODIEN (0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Real Time Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RTTC { - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register -} AT91S_RTTC, *AT91PS_RTTC; -#else -#define RTTC_RTMR (AT91_CAST(AT91_REG *) 0x00000000) // (RTTC_RTMR) Real-time Mode Register -#define RTTC_RTAR (AT91_CAST(AT91_REG *) 0x00000004) // (RTTC_RTAR) Real-time Alarm Register -#define RTTC_RTVR (AT91_CAST(AT91_REG *) 0x00000008) // (RTTC_RTVR) Real-time Value Register -#define RTTC_RTSR (AT91_CAST(AT91_REG *) 0x0000000C) // (RTTC_RTSR) Real-time Status Register - -#endif -// -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register -------- -#define AT91C_RTTC_RTPRES (0xFFFF << 0) // (RTTC) Real-time Timer Prescaler Value -#define AT91C_RTTC_ALMIEN (0x1 << 16) // (RTTC) Alarm Interrupt Enable -#define AT91C_RTTC_RTTINCIEN (0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable -#define AT91C_RTTC_RTTRST (0x1 << 18) // (RTTC) Real Time Timer Restart -// -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register -------- -#define AT91C_RTTC_ALMV (0x0 << 0) // (RTTC) Alarm Value -// -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register -------- -#define AT91C_RTTC_CRTV (0x0 << 0) // (RTTC) Current Real-time Value -// -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register -------- -#define AT91C_RTTC_ALMS (0x1 << 0) // (RTTC) Real-time Alarm Status -#define AT91C_RTTC_RTTINC (0x1 << 1) // (RTTC) Real-time Timer Increment - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Periodic Interval Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PITC { - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register -} AT91S_PITC, *AT91PS_PITC; -#else -#define PITC_PIMR (AT91_CAST(AT91_REG *) 0x00000000) // (PITC_PIMR) Period Interval Mode Register -#define PITC_PISR (AT91_CAST(AT91_REG *) 0x00000004) // (PITC_PISR) Period Interval Status Register -#define PITC_PIVR (AT91_CAST(AT91_REG *) 0x00000008) // (PITC_PIVR) Period Interval Value Register -#define PITC_PIIR (AT91_CAST(AT91_REG *) 0x0000000C) // (PITC_PIIR) Period Interval Image Register - -#endif -// -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register -------- -#define AT91C_PITC_PIV (0xFFFFF << 0) // (PITC) Periodic Interval Value -#define AT91C_PITC_PITEN (0x1 << 24) // (PITC) Periodic Interval Timer Enabled -#define AT91C_PITC_PITIEN (0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable -// -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register -------- -#define AT91C_PITC_PITS (0x1 << 0) // (PITC) Periodic Interval Timer Status -// -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register -------- -#define AT91C_PITC_CPIV (0xFFFFF << 0) // (PITC) Current Periodic Interval Value -#define AT91C_PITC_PICNT (0xFFF << 20) // (PITC) Periodic Interval Counter -// -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Watchdog Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_WDTC { - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register -} AT91S_WDTC, *AT91PS_WDTC; -#else -#define WDTC_WDCR (AT91_CAST(AT91_REG *) 0x00000000) // (WDTC_WDCR) Watchdog Control Register -#define WDTC_WDMR (AT91_CAST(AT91_REG *) 0x00000004) // (WDTC_WDMR) Watchdog Mode Register -#define WDTC_WDSR (AT91_CAST(AT91_REG *) 0x00000008) // (WDTC_WDSR) Watchdog Status Register - -#endif -// -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register -------- -#define AT91C_WDTC_WDRSTT (0x1 << 0) // (WDTC) Watchdog Restart -#define AT91C_WDTC_KEY (0xFF << 24) // (WDTC) Watchdog KEY Password -// -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register -------- -#define AT91C_WDTC_WDV (0xFFF << 0) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDFIEN (0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable -#define AT91C_WDTC_WDRSTEN (0x1 << 13) // (WDTC) Watchdog Reset Enable -#define AT91C_WDTC_WDRPROC (0x1 << 14) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDDIS (0x1 << 15) // (WDTC) Watchdog Disable -#define AT91C_WDTC_WDD (0xFFF << 16) // (WDTC) Watchdog Delta Value -#define AT91C_WDTC_WDDBGHLT (0x1 << 28) // (WDTC) Watchdog Debug Halt -#define AT91C_WDTC_WDIDLEHLT (0x1 << 29) // (WDTC) Watchdog Idle Halt -// -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register -------- -#define AT91C_WDTC_WDUNF (0x1 << 0) // (WDTC) Watchdog Underflow -#define AT91C_WDTC_WDERR (0x1 << 1) // (WDTC) Watchdog Error - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Voltage Regulator Mode Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_VREG { - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_VREG, *AT91PS_VREG; -#else -#define VREG_MR (AT91_CAST(AT91_REG *) 0x00000000) // (VREG_MR) Voltage Regulator Mode Register - -#endif -// -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register -------- -#define AT91C_VREG_PSTDBY (0x1 << 0) // (VREG) Voltage Regulator Power Standby Mode - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Memory Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_MC { - AT91_REG MC_RCR; // MC Remap Control Register - AT91_REG MC_ASR; // MC Abort Status Register - AT91_REG MC_AASR; // MC Abort Address Status Register - AT91_REG Reserved0[21]; // - AT91_REG MC_FMR; // MC Flash Mode Register - AT91_REG MC_FCR; // MC Flash Command Register - AT91_REG MC_FSR; // MC Flash Status Register -} AT91S_MC, *AT91PS_MC; -#else -#define MC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (MC_RCR) MC Remap Control Register -#define MC_ASR (AT91_CAST(AT91_REG *) 0x00000004) // (MC_ASR) MC Abort Status Register -#define MC_AASR (AT91_CAST(AT91_REG *) 0x00000008) // (MC_AASR) MC Abort Address Status Register -#define MC_FMR (AT91_CAST(AT91_REG *) 0x00000060) // (MC_FMR) MC Flash Mode Register -#define MC_FCR (AT91_CAST(AT91_REG *) 0x00000064) // (MC_FCR) MC Flash Command Register -#define MC_FSR (AT91_CAST(AT91_REG *) 0x00000068) // (MC_FSR) MC Flash Status Register - -#endif -// -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register -------- -#define AT91C_MC_RCB (0x1 << 0) // (MC) Remap Command Bit -// -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register -------- -#define AT91C_MC_UNDADD (0x1 << 0) // (MC) Undefined Addess Abort Status -#define AT91C_MC_MISADD (0x1 << 1) // (MC) Misaligned Addess Abort Status -#define AT91C_MC_ABTSZ (0x3 << 8) // (MC) Abort Size Status -#define AT91C_MC_ABTSZ_BYTE (0x0 << 8) // (MC) Byte -#define AT91C_MC_ABTSZ_HWORD (0x1 << 8) // (MC) Half-word -#define AT91C_MC_ABTSZ_WORD (0x2 << 8) // (MC) Word -#define AT91C_MC_ABTTYP (0x3 << 10) // (MC) Abort Type Status -#define AT91C_MC_ABTTYP_DATAR (0x0 << 10) // (MC) Data Read -#define AT91C_MC_ABTTYP_DATAW (0x1 << 10) // (MC) Data Write -#define AT91C_MC_ABTTYP_FETCH (0x2 << 10) // (MC) Code Fetch -#define AT91C_MC_MST0 (0x1 << 16) // (MC) Master 0 Abort Source -#define AT91C_MC_MST1 (0x1 << 17) // (MC) Master 1 Abort Source -#define AT91C_MC_SVMST0 (0x1 << 24) // (MC) Saved Master 0 Abort Source -#define AT91C_MC_SVMST1 (0x1 << 25) // (MC) Saved Master 1 Abort Source -// -------- MC_FMR : (MC Offset: 0x60) MC Flash Mode Register -------- -#define AT91C_MC_FRDY (0x1 << 0) // (MC) Flash Ready -#define AT91C_MC_LOCKE (0x1 << 2) // (MC) Lock Error -#define AT91C_MC_PROGE (0x1 << 3) // (MC) Programming Error -#define AT91C_MC_NEBP (0x1 << 7) // (MC) No Erase Before Programming -#define AT91C_MC_FWS (0x3 << 8) // (MC) Flash Wait State -#define AT91C_MC_FWS_0FWS (0x0 << 8) // (MC) 1 cycle for Read, 2 for Write operations -#define AT91C_MC_FWS_1FWS (0x1 << 8) // (MC) 2 cycles for Read, 3 for Write operations -#define AT91C_MC_FWS_2FWS (0x2 << 8) // (MC) 3 cycles for Read, 4 for Write operations -#define AT91C_MC_FWS_3FWS (0x3 << 8) // (MC) 4 cycles for Read, 4 for Write operations -#define AT91C_MC_FMCN (0xFF << 16) // (MC) Flash Microsecond Cycle Number -// -------- MC_FCR : (MC Offset: 0x64) MC Flash Command Register -------- -#define AT91C_MC_FCMD (0xF << 0) // (MC) Flash Command -#define AT91C_MC_FCMD_START_PROG (0x1) // (MC) Starts the programming of th epage specified by PAGEN. -#define AT91C_MC_FCMD_LOCK (0x2) // (MC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_PROG_AND_LOCK (0x3) // (MC) The lock sequence automatically happens after the programming sequence is completed. -#define AT91C_MC_FCMD_UNLOCK (0x4) // (MC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_ERASE_ALL (0x8) // (MC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled. -#define AT91C_MC_FCMD_SET_GP_NVM (0xB) // (MC) Set General Purpose NVM bits. -#define AT91C_MC_FCMD_CLR_GP_NVM (0xD) // (MC) Clear General Purpose NVM bits. -#define AT91C_MC_FCMD_SET_SECURITY (0xF) // (MC) Set Security Bit. -#define AT91C_MC_PAGEN (0x3FF << 8) // (MC) Page Number -#define AT91C_MC_KEY (0xFF << 24) // (MC) Writing Protect Key -// -------- MC_FSR : (MC Offset: 0x68) MC Flash Command Register -------- -#define AT91C_MC_SECURITY (0x1 << 4) // (MC) Security Bit Status -#define AT91C_MC_GPNVM0 (0x1 << 8) // (MC) Sector 0 Lock Status -#define AT91C_MC_GPNVM1 (0x1 << 9) // (MC) Sector 1 Lock Status -#define AT91C_MC_GPNVM2 (0x1 << 10) // (MC) Sector 2 Lock Status -#define AT91C_MC_GPNVM3 (0x1 << 11) // (MC) Sector 3 Lock Status -#define AT91C_MC_GPNVM4 (0x1 << 12) // (MC) Sector 4 Lock Status -#define AT91C_MC_GPNVM5 (0x1 << 13) // (MC) Sector 5 Lock Status -#define AT91C_MC_GPNVM6 (0x1 << 14) // (MC) Sector 6 Lock Status -#define AT91C_MC_GPNVM7 (0x1 << 15) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS0 (0x1 << 16) // (MC) Sector 0 Lock Status -#define AT91C_MC_LOCKS1 (0x1 << 17) // (MC) Sector 1 Lock Status -#define AT91C_MC_LOCKS2 (0x1 << 18) // (MC) Sector 2 Lock Status -#define AT91C_MC_LOCKS3 (0x1 << 19) // (MC) Sector 3 Lock Status -#define AT91C_MC_LOCKS4 (0x1 << 20) // (MC) Sector 4 Lock Status -#define AT91C_MC_LOCKS5 (0x1 << 21) // (MC) Sector 5 Lock Status -#define AT91C_MC_LOCKS6 (0x1 << 22) // (MC) Sector 6 Lock Status -#define AT91C_MC_LOCKS7 (0x1 << 23) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS8 (0x1 << 24) // (MC) Sector 8 Lock Status -#define AT91C_MC_LOCKS9 (0x1 << 25) // (MC) Sector 9 Lock Status -#define AT91C_MC_LOCKS10 (0x1 << 26) // (MC) Sector 10 Lock Status -#define AT91C_MC_LOCKS11 (0x1 << 27) // (MC) Sector 11 Lock Status -#define AT91C_MC_LOCKS12 (0x1 << 28) // (MC) Sector 12 Lock Status -#define AT91C_MC_LOCKS13 (0x1 << 29) // (MC) Sector 13 Lock Status -#define AT91C_MC_LOCKS14 (0x1 << 30) // (MC) Sector 14 Lock Status -#define AT91C_MC_LOCKS15 (0x1 << 31) // (MC) Sector 15 Lock Status - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Serial Parallel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SPI { - AT91_REG SPI_CR; // Control Register - AT91_REG SPI_MR; // Mode Register - AT91_REG SPI_RDR; // Receive Data Register - AT91_REG SPI_TDR; // Transmit Data Register - AT91_REG SPI_SR; // Status Register - AT91_REG SPI_IER; // Interrupt Enable Register - AT91_REG SPI_IDR; // Interrupt Disable Register - AT91_REG SPI_IMR; // Interrupt Mask Register - AT91_REG Reserved0[4]; // - AT91_REG SPI_CSR[4]; // Chip Select Register - AT91_REG Reserved1[48]; // - AT91_REG SPI_RPR; // Receive Pointer Register - AT91_REG SPI_RCR; // Receive Counter Register - AT91_REG SPI_TPR; // Transmit Pointer Register - AT91_REG SPI_TCR; // Transmit Counter Register - AT91_REG SPI_RNPR; // Receive Next Pointer Register - AT91_REG SPI_RNCR; // Receive Next Counter Register - AT91_REG SPI_TNPR; // Transmit Next Pointer Register - AT91_REG SPI_TNCR; // Transmit Next Counter Register - AT91_REG SPI_PTCR; // PDC Transfer Control Register - AT91_REG SPI_PTSR; // PDC Transfer Status Register -} AT91S_SPI, *AT91PS_SPI; -#else -#define SPI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SPI_CR) Control Register -#define SPI_MR (AT91_CAST(AT91_REG *) 0x00000004) // (SPI_MR) Mode Register -#define SPI_RDR (AT91_CAST(AT91_REG *) 0x00000008) // (SPI_RDR) Receive Data Register -#define SPI_TDR (AT91_CAST(AT91_REG *) 0x0000000C) // (SPI_TDR) Transmit Data Register -#define SPI_SR (AT91_CAST(AT91_REG *) 0x00000010) // (SPI_SR) Status Register -#define SPI_IER (AT91_CAST(AT91_REG *) 0x00000014) // (SPI_IER) Interrupt Enable Register -#define SPI_IDR (AT91_CAST(AT91_REG *) 0x00000018) // (SPI_IDR) Interrupt Disable Register -#define SPI_IMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SPI_IMR) Interrupt Mask Register -#define SPI_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (SPI_CSR) Chip Select Register - -#endif -// -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- -#define AT91C_SPI_SPIEN (0x1 << 0) // (SPI) SPI Enable -#define AT91C_SPI_SPIDIS (0x1 << 1) // (SPI) SPI Disable -#define AT91C_SPI_SWRST (0x1 << 7) // (SPI) SPI Software reset -#define AT91C_SPI_LASTXFER (0x1 << 24) // (SPI) SPI Last Transfer -// -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- -#define AT91C_SPI_MSTR (0x1 << 0) // (SPI) Master/Slave Mode -#define AT91C_SPI_PS (0x1 << 1) // (SPI) Peripheral Select -#define AT91C_SPI_PS_FIXED (0x0 << 1) // (SPI) Fixed Peripheral Select -#define AT91C_SPI_PS_VARIABLE (0x1 << 1) // (SPI) Variable Peripheral Select -#define AT91C_SPI_PCSDEC (0x1 << 2) // (SPI) Chip Select Decode -#define AT91C_SPI_FDIV (0x1 << 3) // (SPI) Clock Selection -#define AT91C_SPI_MODFDIS (0x1 << 4) // (SPI) Mode Fault Detection -#define AT91C_SPI_LLB (0x1 << 7) // (SPI) Clock Selection -#define AT91C_SPI_PCS (0xF << 16) // (SPI) Peripheral Chip Select -#define AT91C_SPI_DLYBCS (0xFF << 24) // (SPI) Delay Between Chip Selects -// -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- -#define AT91C_SPI_RD (0xFFFF << 0) // (SPI) Receive Data -#define AT91C_SPI_RPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- -#define AT91C_SPI_TD (0xFFFF << 0) // (SPI) Transmit Data -#define AT91C_SPI_TPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- -#define AT91C_SPI_RDRF (0x1 << 0) // (SPI) Receive Data Register Full -#define AT91C_SPI_TDRE (0x1 << 1) // (SPI) Transmit Data Register Empty -#define AT91C_SPI_MODF (0x1 << 2) // (SPI) Mode Fault Error -#define AT91C_SPI_OVRES (0x1 << 3) // (SPI) Overrun Error Status -#define AT91C_SPI_ENDRX (0x1 << 4) // (SPI) End of Receiver Transfer -#define AT91C_SPI_ENDTX (0x1 << 5) // (SPI) End of Receiver Transfer -#define AT91C_SPI_RXBUFF (0x1 << 6) // (SPI) RXBUFF Interrupt -#define AT91C_SPI_TXBUFE (0x1 << 7) // (SPI) TXBUFE Interrupt -#define AT91C_SPI_NSSR (0x1 << 8) // (SPI) NSSR Interrupt -#define AT91C_SPI_TXEMPTY (0x1 << 9) // (SPI) TXEMPTY Interrupt -#define AT91C_SPI_SPIENS (0x1 << 16) // (SPI) Enable Status -// -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- -// -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- -// -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- -// -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- -#define AT91C_SPI_CPOL (0x1 << 0) // (SPI) Clock Polarity -#define AT91C_SPI_NCPHA (0x1 << 1) // (SPI) Clock Phase -#define AT91C_SPI_CSAAT (0x1 << 3) // (SPI) Chip Select Active After Transfer -#define AT91C_SPI_BITS (0xF << 4) // (SPI) Bits Per Transfer -#define AT91C_SPI_BITS_8 (0x0 << 4) // (SPI) 8 Bits Per transfer -#define AT91C_SPI_BITS_9 (0x1 << 4) // (SPI) 9 Bits Per transfer -#define AT91C_SPI_BITS_10 (0x2 << 4) // (SPI) 10 Bits Per transfer -#define AT91C_SPI_BITS_11 (0x3 << 4) // (SPI) 11 Bits Per transfer -#define AT91C_SPI_BITS_12 (0x4 << 4) // (SPI) 12 Bits Per transfer -#define AT91C_SPI_BITS_13 (0x5 << 4) // (SPI) 13 Bits Per transfer -#define AT91C_SPI_BITS_14 (0x6 << 4) // (SPI) 14 Bits Per transfer -#define AT91C_SPI_BITS_15 (0x7 << 4) // (SPI) 15 Bits Per transfer -#define AT91C_SPI_BITS_16 (0x8 << 4) // (SPI) 16 Bits Per transfer -#define AT91C_SPI_SCBR (0xFF << 8) // (SPI) Serial Clock Baud Rate -#define AT91C_SPI_DLYBS (0xFF << 16) // (SPI) Delay Before SPCK -#define AT91C_SPI_DLYBCT (0xFF << 24) // (SPI) Delay Between Consecutive Transfers - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Analog to Digital Convertor -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_ADC { - AT91_REG ADC_CR; // ADC Control Register - AT91_REG ADC_MR; // ADC Mode Register - AT91_REG Reserved0[2]; // - AT91_REG ADC_CHER; // ADC Channel Enable Register - AT91_REG ADC_CHDR; // ADC Channel Disable Register - AT91_REG ADC_CHSR; // ADC Channel Status Register - AT91_REG ADC_SR; // ADC Status Register - AT91_REG ADC_LCDR; // ADC Last Converted Data Register - AT91_REG ADC_IER; // ADC Interrupt Enable Register - AT91_REG ADC_IDR; // ADC Interrupt Disable Register - AT91_REG ADC_IMR; // ADC Interrupt Mask Register - AT91_REG ADC_CDR0; // ADC Channel Data Register 0 - AT91_REG ADC_CDR1; // ADC Channel Data Register 1 - AT91_REG ADC_CDR2; // ADC Channel Data Register 2 - AT91_REG ADC_CDR3; // ADC Channel Data Register 3 - AT91_REG ADC_CDR4; // ADC Channel Data Register 4 - AT91_REG ADC_CDR5; // ADC Channel Data Register 5 - AT91_REG ADC_CDR6; // ADC Channel Data Register 6 - AT91_REG ADC_CDR7; // ADC Channel Data Register 7 - AT91_REG Reserved1[44]; // - AT91_REG ADC_RPR; // Receive Pointer Register - AT91_REG ADC_RCR; // Receive Counter Register - AT91_REG ADC_TPR; // Transmit Pointer Register - AT91_REG ADC_TCR; // Transmit Counter Register - AT91_REG ADC_RNPR; // Receive Next Pointer Register - AT91_REG ADC_RNCR; // Receive Next Counter Register - AT91_REG ADC_TNPR; // Transmit Next Pointer Register - AT91_REG ADC_TNCR; // Transmit Next Counter Register - AT91_REG ADC_PTCR; // PDC Transfer Control Register - AT91_REG ADC_PTSR; // PDC Transfer Status Register -} AT91S_ADC, *AT91PS_ADC; -#else -#define ADC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (ADC_CR) ADC Control Register -#define ADC_MR (AT91_CAST(AT91_REG *) 0x00000004) // (ADC_MR) ADC Mode Register -#define ADC_CHER (AT91_CAST(AT91_REG *) 0x00000010) // (ADC_CHER) ADC Channel Enable Register -#define ADC_CHDR (AT91_CAST(AT91_REG *) 0x00000014) // (ADC_CHDR) ADC Channel Disable Register -#define ADC_CHSR (AT91_CAST(AT91_REG *) 0x00000018) // (ADC_CHSR) ADC Channel Status Register -#define ADC_SR (AT91_CAST(AT91_REG *) 0x0000001C) // (ADC_SR) ADC Status Register -#define ADC_LCDR (AT91_CAST(AT91_REG *) 0x00000020) // (ADC_LCDR) ADC Last Converted Data Register -#define ADC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (ADC_IER) ADC Interrupt Enable Register -#define ADC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (ADC_IDR) ADC Interrupt Disable Register -#define ADC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (ADC_IMR) ADC Interrupt Mask Register -#define ADC_CDR0 (AT91_CAST(AT91_REG *) 0x00000030) // (ADC_CDR0) ADC Channel Data Register 0 -#define ADC_CDR1 (AT91_CAST(AT91_REG *) 0x00000034) // (ADC_CDR1) ADC Channel Data Register 1 -#define ADC_CDR2 (AT91_CAST(AT91_REG *) 0x00000038) // (ADC_CDR2) ADC Channel Data Register 2 -#define ADC_CDR3 (AT91_CAST(AT91_REG *) 0x0000003C) // (ADC_CDR3) ADC Channel Data Register 3 -#define ADC_CDR4 (AT91_CAST(AT91_REG *) 0x00000040) // (ADC_CDR4) ADC Channel Data Register 4 -#define ADC_CDR5 (AT91_CAST(AT91_REG *) 0x00000044) // (ADC_CDR5) ADC Channel Data Register 5 -#define ADC_CDR6 (AT91_CAST(AT91_REG *) 0x00000048) // (ADC_CDR6) ADC Channel Data Register 6 -#define ADC_CDR7 (AT91_CAST(AT91_REG *) 0x0000004C) // (ADC_CDR7) ADC Channel Data Register 7 - -#endif -// -------- ADC_CR : (ADC Offset: 0x0) ADC Control Register -------- -#define AT91C_ADC_SWRST (0x1 << 0) // (ADC) Software Reset -#define AT91C_ADC_START (0x1 << 1) // (ADC) Start Conversion -// -------- ADC_MR : (ADC Offset: 0x4) ADC Mode Register -------- -#define AT91C_ADC_TRGEN (0x1 << 0) // (ADC) Trigger Enable -#define AT91C_ADC_TRGEN_DIS (0x0) // (ADC) Hradware triggers are disabled. Starting a conversion is only possible by software -#define AT91C_ADC_TRGEN_EN (0x1) // (ADC) Hardware trigger selected by TRGSEL field is enabled. -#define AT91C_ADC_TRGSEL (0x7 << 1) // (ADC) Trigger Selection -#define AT91C_ADC_TRGSEL_TIOA0 (0x0 << 1) // (ADC) Selected TRGSEL = TIAO0 -#define AT91C_ADC_TRGSEL_TIOA1 (0x1 << 1) // (ADC) Selected TRGSEL = TIAO1 -#define AT91C_ADC_TRGSEL_TIOA2 (0x2 << 1) // (ADC) Selected TRGSEL = TIAO2 -#define AT91C_ADC_TRGSEL_TIOA3 (0x3 << 1) // (ADC) Selected TRGSEL = TIAO3 -#define AT91C_ADC_TRGSEL_TIOA4 (0x4 << 1) // (ADC) Selected TRGSEL = TIAO4 -#define AT91C_ADC_TRGSEL_TIOA5 (0x5 << 1) // (ADC) Selected TRGSEL = TIAO5 -#define AT91C_ADC_TRGSEL_EXT (0x6 << 1) // (ADC) Selected TRGSEL = External Trigger -#define AT91C_ADC_LOWRES (0x1 << 4) // (ADC) Resolution. -#define AT91C_ADC_LOWRES_10_BIT (0x0 << 4) // (ADC) 10-bit resolution -#define AT91C_ADC_LOWRES_8_BIT (0x1 << 4) // (ADC) 8-bit resolution -#define AT91C_ADC_SLEEP (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_SLEEP_NORMAL_MODE (0x0 << 5) // (ADC) Normal Mode -#define AT91C_ADC_SLEEP_MODE (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_PRESCAL (0x3F << 8) // (ADC) Prescaler rate selection -#define AT91C_ADC_STARTUP (0x1F << 16) // (ADC) Startup Time -#define AT91C_ADC_SHTIM (0xF << 24) // (ADC) Sample & Hold Time -// -------- ADC_CHER : (ADC Offset: 0x10) ADC Channel Enable Register -------- -#define AT91C_ADC_CH0 (0x1 << 0) // (ADC) Channel 0 -#define AT91C_ADC_CH1 (0x1 << 1) // (ADC) Channel 1 -#define AT91C_ADC_CH2 (0x1 << 2) // (ADC) Channel 2 -#define AT91C_ADC_CH3 (0x1 << 3) // (ADC) Channel 3 -#define AT91C_ADC_CH4 (0x1 << 4) // (ADC) Channel 4 -#define AT91C_ADC_CH5 (0x1 << 5) // (ADC) Channel 5 -#define AT91C_ADC_CH6 (0x1 << 6) // (ADC) Channel 6 -#define AT91C_ADC_CH7 (0x1 << 7) // (ADC) Channel 7 -// -------- ADC_CHDR : (ADC Offset: 0x14) ADC Channel Disable Register -------- -// -------- ADC_CHSR : (ADC Offset: 0x18) ADC Channel Status Register -------- -// -------- ADC_SR : (ADC Offset: 0x1c) ADC Status Register -------- -#define AT91C_ADC_EOC0 (0x1 << 0) // (ADC) End of Conversion -#define AT91C_ADC_EOC1 (0x1 << 1) // (ADC) End of Conversion -#define AT91C_ADC_EOC2 (0x1 << 2) // (ADC) End of Conversion -#define AT91C_ADC_EOC3 (0x1 << 3) // (ADC) End of Conversion -#define AT91C_ADC_EOC4 (0x1 << 4) // (ADC) End of Conversion -#define AT91C_ADC_EOC5 (0x1 << 5) // (ADC) End of Conversion -#define AT91C_ADC_EOC6 (0x1 << 6) // (ADC) End of Conversion -#define AT91C_ADC_EOC7 (0x1 << 7) // (ADC) End of Conversion -#define AT91C_ADC_OVRE0 (0x1 << 8) // (ADC) Overrun Error -#define AT91C_ADC_OVRE1 (0x1 << 9) // (ADC) Overrun Error -#define AT91C_ADC_OVRE2 (0x1 << 10) // (ADC) Overrun Error -#define AT91C_ADC_OVRE3 (0x1 << 11) // (ADC) Overrun Error -#define AT91C_ADC_OVRE4 (0x1 << 12) // (ADC) Overrun Error -#define AT91C_ADC_OVRE5 (0x1 << 13) // (ADC) Overrun Error -#define AT91C_ADC_OVRE6 (0x1 << 14) // (ADC) Overrun Error -#define AT91C_ADC_OVRE7 (0x1 << 15) // (ADC) Overrun Error -#define AT91C_ADC_DRDY (0x1 << 16) // (ADC) Data Ready -#define AT91C_ADC_GOVRE (0x1 << 17) // (ADC) General Overrun -#define AT91C_ADC_ENDRX (0x1 << 18) // (ADC) End of Receiver Transfer -#define AT91C_ADC_RXBUFF (0x1 << 19) // (ADC) RXBUFF Interrupt -// -------- ADC_LCDR : (ADC Offset: 0x20) ADC Last Converted Data Register -------- -#define AT91C_ADC_LDATA (0x3FF << 0) // (ADC) Last Data Converted -// -------- ADC_IER : (ADC Offset: 0x24) ADC Interrupt Enable Register -------- -// -------- ADC_IDR : (ADC Offset: 0x28) ADC Interrupt Disable Register -------- -// -------- ADC_IMR : (ADC Offset: 0x2c) ADC Interrupt Mask Register -------- -// -------- ADC_CDR0 : (ADC Offset: 0x30) ADC Channel Data Register 0 -------- -#define AT91C_ADC_DATA (0x3FF << 0) // (ADC) Converted Data -// -------- ADC_CDR1 : (ADC Offset: 0x34) ADC Channel Data Register 1 -------- -// -------- ADC_CDR2 : (ADC Offset: 0x38) ADC Channel Data Register 2 -------- -// -------- ADC_CDR3 : (ADC Offset: 0x3c) ADC Channel Data Register 3 -------- -// -------- ADC_CDR4 : (ADC Offset: 0x40) ADC Channel Data Register 4 -------- -// -------- ADC_CDR5 : (ADC Offset: 0x44) ADC Channel Data Register 5 -------- -// -------- ADC_CDR6 : (ADC Offset: 0x48) ADC Channel Data Register 6 -------- -// -------- ADC_CDR7 : (ADC Offset: 0x4c) ADC Channel Data Register 7 -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SSC { - AT91_REG SSC_CR; // Control Register - AT91_REG SSC_CMR; // Clock Mode Register - AT91_REG Reserved0[2]; // - AT91_REG SSC_RCMR; // Receive Clock ModeRegister - AT91_REG SSC_RFMR; // Receive Frame Mode Register - AT91_REG SSC_TCMR; // Transmit Clock Mode Register - AT91_REG SSC_TFMR; // Transmit Frame Mode Register - AT91_REG SSC_RHR; // Receive Holding Register - AT91_REG SSC_THR; // Transmit Holding Register - AT91_REG Reserved1[2]; // - AT91_REG SSC_RSHR; // Receive Sync Holding Register - AT91_REG SSC_TSHR; // Transmit Sync Holding Register - AT91_REG Reserved2[2]; // - AT91_REG SSC_SR; // Status Register - AT91_REG SSC_IER; // Interrupt Enable Register - AT91_REG SSC_IDR; // Interrupt Disable Register - AT91_REG SSC_IMR; // Interrupt Mask Register - AT91_REG Reserved3[44]; // - AT91_REG SSC_RPR; // Receive Pointer Register - AT91_REG SSC_RCR; // Receive Counter Register - AT91_REG SSC_TPR; // Transmit Pointer Register - AT91_REG SSC_TCR; // Transmit Counter Register - AT91_REG SSC_RNPR; // Receive Next Pointer Register - AT91_REG SSC_RNCR; // Receive Next Counter Register - AT91_REG SSC_TNPR; // Transmit Next Pointer Register - AT91_REG SSC_TNCR; // Transmit Next Counter Register - AT91_REG SSC_PTCR; // PDC Transfer Control Register - AT91_REG SSC_PTSR; // PDC Transfer Status Register -} AT91S_SSC, *AT91PS_SSC; -#else -#define SSC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SSC_CR) Control Register -#define SSC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (SSC_CMR) Clock Mode Register -#define SSC_RCMR (AT91_CAST(AT91_REG *) 0x00000010) // (SSC_RCMR) Receive Clock ModeRegister -#define SSC_RFMR (AT91_CAST(AT91_REG *) 0x00000014) // (SSC_RFMR) Receive Frame Mode Register -#define SSC_TCMR (AT91_CAST(AT91_REG *) 0x00000018) // (SSC_TCMR) Transmit Clock Mode Register -#define SSC_TFMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SSC_TFMR) Transmit Frame Mode Register -#define SSC_RHR (AT91_CAST(AT91_REG *) 0x00000020) // (SSC_RHR) Receive Holding Register -#define SSC_THR (AT91_CAST(AT91_REG *) 0x00000024) // (SSC_THR) Transmit Holding Register -#define SSC_RSHR (AT91_CAST(AT91_REG *) 0x00000030) // (SSC_RSHR) Receive Sync Holding Register -#define SSC_TSHR (AT91_CAST(AT91_REG *) 0x00000034) // (SSC_TSHR) Transmit Sync Holding Register -#define SSC_SR (AT91_CAST(AT91_REG *) 0x00000040) // (SSC_SR) Status Register -#define SSC_IER (AT91_CAST(AT91_REG *) 0x00000044) // (SSC_IER) Interrupt Enable Register -#define SSC_IDR (AT91_CAST(AT91_REG *) 0x00000048) // (SSC_IDR) Interrupt Disable Register -#define SSC_IMR (AT91_CAST(AT91_REG *) 0x0000004C) // (SSC_IMR) Interrupt Mask Register - -#endif -// -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register -------- -#define AT91C_SSC_RXEN (0x1 << 0) // (SSC) Receive Enable -#define AT91C_SSC_RXDIS (0x1 << 1) // (SSC) Receive Disable -#define AT91C_SSC_TXEN (0x1 << 8) // (SSC) Transmit Enable -#define AT91C_SSC_TXDIS (0x1 << 9) // (SSC) Transmit Disable -#define AT91C_SSC_SWRST (0x1 << 15) // (SSC) Software Reset -// -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register -------- -#define AT91C_SSC_CKS (0x3 << 0) // (SSC) Receive/Transmit Clock Selection -#define AT91C_SSC_CKS_DIV (0x0) // (SSC) Divided Clock -#define AT91C_SSC_CKS_TK (0x1) // (SSC) TK Clock signal -#define AT91C_SSC_CKS_RK (0x2) // (SSC) RK pin -#define AT91C_SSC_CKO (0x7 << 2) // (SSC) Receive/Transmit Clock Output Mode Selection -#define AT91C_SSC_CKO_NONE (0x0 << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only -#define AT91C_SSC_CKO_CONTINOUS (0x1 << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output -#define AT91C_SSC_CKO_DATA_TX (0x2 << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output -#define AT91C_SSC_CKI (0x1 << 5) // (SSC) Receive/Transmit Clock Inversion -#define AT91C_SSC_START (0xF << 8) // (SSC) Receive/Transmit Start Selection -#define AT91C_SSC_START_CONTINOUS (0x0 << 8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. -#define AT91C_SSC_START_TX (0x1 << 8) // (SSC) Transmit/Receive start -#define AT91C_SSC_START_LOW_RF (0x2 << 8) // (SSC) Detection of a low level on RF input -#define AT91C_SSC_START_HIGH_RF (0x3 << 8) // (SSC) Detection of a high level on RF input -#define AT91C_SSC_START_FALL_RF (0x4 << 8) // (SSC) Detection of a falling edge on RF input -#define AT91C_SSC_START_RISE_RF (0x5 << 8) // (SSC) Detection of a rising edge on RF input -#define AT91C_SSC_START_LEVEL_RF (0x6 << 8) // (SSC) Detection of any level change on RF input -#define AT91C_SSC_START_EDGE_RF (0x7 << 8) // (SSC) Detection of any edge on RF input -#define AT91C_SSC_START_0 (0x8 << 8) // (SSC) Compare 0 -#define AT91C_SSC_STTDLY (0xFF << 16) // (SSC) Receive/Transmit Start Delay -#define AT91C_SSC_PERIOD (0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection -// -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register -------- -#define AT91C_SSC_DATLEN (0x1F << 0) // (SSC) Data Length -#define AT91C_SSC_LOOP (0x1 << 5) // (SSC) Loop Mode -#define AT91C_SSC_MSBF (0x1 << 7) // (SSC) Most Significant Bit First -#define AT91C_SSC_DATNB (0xF << 8) // (SSC) Data Number per Frame -#define AT91C_SSC_FSLEN (0xF << 16) // (SSC) Receive/Transmit Frame Sync length -#define AT91C_SSC_FSOS (0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection -#define AT91C_SSC_FSOS_NONE (0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only -#define AT91C_SSC_FSOS_NEGATIVE (0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse -#define AT91C_SSC_FSOS_POSITIVE (0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse -#define AT91C_SSC_FSOS_LOW (0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer -#define AT91C_SSC_FSOS_HIGH (0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer -#define AT91C_SSC_FSOS_TOGGLE (0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer -#define AT91C_SSC_FSEDGE (0x1 << 24) // (SSC) Frame Sync Edge Detection -// -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register -------- -// -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register -------- -#define AT91C_SSC_DATDEF (0x1 << 5) // (SSC) Data Default Value -#define AT91C_SSC_FSDEN (0x1 << 23) // (SSC) Frame Sync Data Enable -// -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register -------- -#define AT91C_SSC_TXRDY (0x1 << 0) // (SSC) Transmit Ready -#define AT91C_SSC_TXEMPTY (0x1 << 1) // (SSC) Transmit Empty -#define AT91C_SSC_ENDTX (0x1 << 2) // (SSC) End Of Transmission -#define AT91C_SSC_TXBUFE (0x1 << 3) // (SSC) Transmit Buffer Empty -#define AT91C_SSC_RXRDY (0x1 << 4) // (SSC) Receive Ready -#define AT91C_SSC_OVRUN (0x1 << 5) // (SSC) Receive Overrun -#define AT91C_SSC_ENDRX (0x1 << 6) // (SSC) End of Reception -#define AT91C_SSC_RXBUFF (0x1 << 7) // (SSC) Receive Buffer Full -#define AT91C_SSC_TXSYN (0x1 << 10) // (SSC) Transmit Sync -#define AT91C_SSC_RXSYN (0x1 << 11) // (SSC) Receive Sync -#define AT91C_SSC_TXENA (0x1 << 16) // (SSC) Transmit Enable -#define AT91C_SSC_RXENA (0x1 << 17) // (SSC) Receive Enable -// -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register -------- -// -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register -------- -// -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Usart -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_USART { - AT91_REG US_CR; // Control Register - AT91_REG US_MR; // Mode Register - AT91_REG US_IER; // Interrupt Enable Register - AT91_REG US_IDR; // Interrupt Disable Register - AT91_REG US_IMR; // Interrupt Mask Register - AT91_REG US_CSR; // Channel Status Register - AT91_REG US_RHR; // Receiver Holding Register - AT91_REG US_THR; // Transmitter Holding Register - AT91_REG US_BRGR; // Baud Rate Generator Register - AT91_REG US_RTOR; // Receiver Time-out Register - AT91_REG US_TTGR; // Transmitter Time-guard Register - AT91_REG Reserved0[5]; // - AT91_REG US_FIDI; // FI_DI_Ratio Register - AT91_REG US_NER; // Nb Errors Register - AT91_REG Reserved1[1]; // - AT91_REG US_IF; // IRDA_FILTER Register - AT91_REG Reserved2[44]; // - AT91_REG US_RPR; // Receive Pointer Register - AT91_REG US_RCR; // Receive Counter Register - AT91_REG US_TPR; // Transmit Pointer Register - AT91_REG US_TCR; // Transmit Counter Register - AT91_REG US_RNPR; // Receive Next Pointer Register - AT91_REG US_RNCR; // Receive Next Counter Register - AT91_REG US_TNPR; // Transmit Next Pointer Register - AT91_REG US_TNCR; // Transmit Next Counter Register - AT91_REG US_PTCR; // PDC Transfer Control Register - AT91_REG US_PTSR; // PDC Transfer Status Register -} AT91S_USART, *AT91PS_USART; -#else -#define US_CR (AT91_CAST(AT91_REG *) 0x00000000) // (US_CR) Control Register -#define US_MR (AT91_CAST(AT91_REG *) 0x00000004) // (US_MR) Mode Register -#define US_IER (AT91_CAST(AT91_REG *) 0x00000008) // (US_IER) Interrupt Enable Register -#define US_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (US_IDR) Interrupt Disable Register -#define US_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (US_IMR) Interrupt Mask Register -#define US_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (US_CSR) Channel Status Register -#define US_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (US_RHR) Receiver Holding Register -#define US_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (US_THR) Transmitter Holding Register -#define US_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (US_BRGR) Baud Rate Generator Register -#define US_RTOR (AT91_CAST(AT91_REG *) 0x00000024) // (US_RTOR) Receiver Time-out Register -#define US_TTGR (AT91_CAST(AT91_REG *) 0x00000028) // (US_TTGR) Transmitter Time-guard Register -#define US_FIDI (AT91_CAST(AT91_REG *) 0x00000040) // (US_FIDI) FI_DI_Ratio Register -#define US_NER (AT91_CAST(AT91_REG *) 0x00000044) // (US_NER) Nb Errors Register -#define US_IF (AT91_CAST(AT91_REG *) 0x0000004C) // (US_IF) IRDA_FILTER Register - -#endif -// -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_STTBRK (0x1 << 9) // (USART) Start Break -#define AT91C_US_STPBRK (0x1 << 10) // (USART) Stop Break -#define AT91C_US_STTTO (0x1 << 11) // (USART) Start Time-out -#define AT91C_US_SENDA (0x1 << 12) // (USART) Send Address -#define AT91C_US_RSTIT (0x1 << 13) // (USART) Reset Iterations -#define AT91C_US_RSTNACK (0x1 << 14) // (USART) Reset Non Acknowledge -#define AT91C_US_RETTO (0x1 << 15) // (USART) Rearm Time-out -#define AT91C_US_DTREN (0x1 << 16) // (USART) Data Terminal ready Enable -#define AT91C_US_DTRDIS (0x1 << 17) // (USART) Data Terminal ready Disable -#define AT91C_US_RTSEN (0x1 << 18) // (USART) Request to Send enable -#define AT91C_US_RTSDIS (0x1 << 19) // (USART) Request to Send Disable -// -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_USMODE (0xF << 0) // (USART) Usart mode -#define AT91C_US_USMODE_NORMAL (0x0) // (USART) Normal -#define AT91C_US_USMODE_RS485 (0x1) // (USART) RS485 -#define AT91C_US_USMODE_HWHSH (0x2) // (USART) Hardware Handshaking -#define AT91C_US_USMODE_MODEM (0x3) // (USART) Modem -#define AT91C_US_USMODE_ISO7816_0 (0x4) // (USART) ISO7816 protocol: T = 0 -#define AT91C_US_USMODE_ISO7816_1 (0x6) // (USART) ISO7816 protocol: T = 1 -#define AT91C_US_USMODE_IRDA (0x8) // (USART) IrDA -#define AT91C_US_USMODE_SWHSH (0xC) // (USART) Software Handshaking -#define AT91C_US_CLKS (0x3 << 4) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CLKS_CLOCK (0x0 << 4) // (USART) Clock -#define AT91C_US_CLKS_FDIV1 (0x1 << 4) // (USART) fdiv1 -#define AT91C_US_CLKS_SLOW (0x2 << 4) // (USART) slow_clock (ARM) -#define AT91C_US_CLKS_EXT (0x3 << 4) // (USART) External (SCK) -#define AT91C_US_CHRL (0x3 << 6) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CHRL_5_BITS (0x0 << 6) // (USART) Character Length: 5 bits -#define AT91C_US_CHRL_6_BITS (0x1 << 6) // (USART) Character Length: 6 bits -#define AT91C_US_CHRL_7_BITS (0x2 << 6) // (USART) Character Length: 7 bits -#define AT91C_US_CHRL_8_BITS (0x3 << 6) // (USART) Character Length: 8 bits -#define AT91C_US_SYNC (0x1 << 8) // (USART) Synchronous Mode Select -#define AT91C_US_NBSTOP (0x3 << 12) // (USART) Number of Stop bits -#define AT91C_US_NBSTOP_1_BIT (0x0 << 12) // (USART) 1 stop bit -#define AT91C_US_NBSTOP_15_BIT (0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits -#define AT91C_US_NBSTOP_2_BIT (0x2 << 12) // (USART) 2 stop bits -#define AT91C_US_MSBF (0x1 << 16) // (USART) Bit Order -#define AT91C_US_MODE9 (0x1 << 17) // (USART) 9-bit Character length -#define AT91C_US_CKLO (0x1 << 18) // (USART) Clock Output Select -#define AT91C_US_OVER (0x1 << 19) // (USART) Over Sampling Mode -#define AT91C_US_INACK (0x1 << 20) // (USART) Inhibit Non Acknowledge -#define AT91C_US_DSNACK (0x1 << 21) // (USART) Disable Successive NACK -#define AT91C_US_MAX_ITER (0x1 << 24) // (USART) Number of Repetitions -#define AT91C_US_FILTER (0x1 << 28) // (USART) Receive Line Filter -// -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXBRK (0x1 << 2) // (USART) Break Received/End of Break -#define AT91C_US_TIMEOUT (0x1 << 8) // (USART) Receiver Time-out -#define AT91C_US_ITERATION (0x1 << 10) // (USART) Max number of Repetitions Reached -#define AT91C_US_NACK (0x1 << 13) // (USART) Non Acknowledge -#define AT91C_US_RIIC (0x1 << 16) // (USART) Ring INdicator Input Change Flag -#define AT91C_US_DSRIC (0x1 << 17) // (USART) Data Set Ready Input Change Flag -#define AT91C_US_DCDIC (0x1 << 18) // (USART) Data Carrier Flag -#define AT91C_US_CTSIC (0x1 << 19) // (USART) Clear To Send Input Change Flag -// -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register -------- -#define AT91C_US_RI (0x1 << 20) // (USART) Image of RI Input -#define AT91C_US_DSR (0x1 << 21) // (USART) Image of DSR Input -#define AT91C_US_DCD (0x1 << 22) // (USART) Image of DCD Input -#define AT91C_US_CTS (0x1 << 23) // (USART) Image of CTS Input - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Two-wire Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TWI { - AT91_REG TWI_CR; // Control Register - AT91_REG TWI_MMR; // Master Mode Register - AT91_REG Reserved0[1]; // - AT91_REG TWI_IADR; // Internal Address Register - AT91_REG TWI_CWGR; // Clock Waveform Generator Register - AT91_REG Reserved1[3]; // - AT91_REG TWI_SR; // Status Register - AT91_REG TWI_IER; // Interrupt Enable Register - AT91_REG TWI_IDR; // Interrupt Disable Register - AT91_REG TWI_IMR; // Interrupt Mask Register - AT91_REG TWI_RHR; // Receive Holding Register - AT91_REG TWI_THR; // Transmit Holding Register - AT91_REG Reserved2[50]; // - AT91_REG TWI_RPR; // Receive Pointer Register - AT91_REG TWI_RCR; // Receive Counter Register - AT91_REG TWI_TPR; // Transmit Pointer Register - AT91_REG TWI_TCR; // Transmit Counter Register - AT91_REG TWI_RNPR; // Receive Next Pointer Register - AT91_REG TWI_RNCR; // Receive Next Counter Register - AT91_REG TWI_TNPR; // Transmit Next Pointer Register - AT91_REG TWI_TNCR; // Transmit Next Counter Register - AT91_REG TWI_PTCR; // PDC Transfer Control Register - AT91_REG TWI_PTSR; // PDC Transfer Status Register -} AT91S_TWI, *AT91PS_TWI; -#else -#define TWI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (TWI_CR) Control Register -#define TWI_MMR (AT91_CAST(AT91_REG *) 0x00000004) // (TWI_MMR) Master Mode Register -#define TWI_IADR (AT91_CAST(AT91_REG *) 0x0000000C) // (TWI_IADR) Internal Address Register -#define TWI_CWGR (AT91_CAST(AT91_REG *) 0x00000010) // (TWI_CWGR) Clock Waveform Generator Register -#define TWI_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TWI_SR) Status Register -#define TWI_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TWI_IER) Interrupt Enable Register -#define TWI_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TWI_IDR) Interrupt Disable Register -#define TWI_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TWI_IMR) Interrupt Mask Register -#define TWI_RHR (AT91_CAST(AT91_REG *) 0x00000030) // (TWI_RHR) Receive Holding Register -#define TWI_THR (AT91_CAST(AT91_REG *) 0x00000034) // (TWI_THR) Transmit Holding Register - -#endif -// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- -#define AT91C_TWI_START (0x1 << 0) // (TWI) Send a START Condition -#define AT91C_TWI_STOP (0x1 << 1) // (TWI) Send a STOP Condition -#define AT91C_TWI_MSEN (0x1 << 2) // (TWI) TWI Master Transfer Enabled -#define AT91C_TWI_MSDIS (0x1 << 3) // (TWI) TWI Master Transfer Disabled -#define AT91C_TWI_SWRST (0x1 << 7) // (TWI) Software Reset -// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- -#define AT91C_TWI_IADRSZ (0x3 << 8) // (TWI) Internal Device Address Size -#define AT91C_TWI_IADRSZ_NO (0x0 << 8) // (TWI) No internal device address -#define AT91C_TWI_IADRSZ_1_BYTE (0x1 << 8) // (TWI) One-byte internal device address -#define AT91C_TWI_IADRSZ_2_BYTE (0x2 << 8) // (TWI) Two-byte internal device address -#define AT91C_TWI_IADRSZ_3_BYTE (0x3 << 8) // (TWI) Three-byte internal device address -#define AT91C_TWI_MREAD (0x1 << 12) // (TWI) Master Read Direction -#define AT91C_TWI_DADR (0x7F << 16) // (TWI) Device Address -// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- -#define AT91C_TWI_CLDIV (0xFF << 0) // (TWI) Clock Low Divider -#define AT91C_TWI_CHDIV (0xFF << 8) // (TWI) Clock High Divider -#define AT91C_TWI_CKDIV (0x7 << 16) // (TWI) Clock Divider -// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- -#define AT91C_TWI_TXCOMP (0x1 << 0) // (TWI) Transmission Completed -#define AT91C_TWI_RXRDY (0x1 << 1) // (TWI) Receive holding register ReaDY -#define AT91C_TWI_TXRDY (0x1 << 2) // (TWI) Transmit holding register ReaDY -#define AT91C_TWI_OVRE (0x1 << 6) // (TWI) Overrun Error -#define AT91C_TWI_UNRE (0x1 << 7) // (TWI) Underrun Error -#define AT91C_TWI_NACK (0x1 << 8) // (TWI) Not Acknowledged -#define AT91C_TWI_ENDRX (0x1 << 12) // (TWI) -#define AT91C_TWI_ENDTX (0x1 << 13) // (TWI) -#define AT91C_TWI_RXBUFF (0x1 << 14) // (TWI) -#define AT91C_TWI_TXBUFE (0x1 << 15) // (TWI) -// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- -// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- -// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TC { - AT91_REG TC_CCR; // Channel Control Register - AT91_REG TC_CMR; // Channel Mode Register (Capture Mode / Waveform Mode) - AT91_REG Reserved0[2]; // - AT91_REG TC_CV; // Counter Value - AT91_REG TC_RA; // Register A - AT91_REG TC_RB; // Register B - AT91_REG TC_RC; // Register C - AT91_REG TC_SR; // Status Register - AT91_REG TC_IER; // Interrupt Enable Register - AT91_REG TC_IDR; // Interrupt Disable Register - AT91_REG TC_IMR; // Interrupt Mask Register -} AT91S_TC, *AT91PS_TC; -#else -#define TC_CCR (AT91_CAST(AT91_REG *) 0x00000000) // (TC_CCR) Channel Control Register -#define TC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (TC_CMR) Channel Mode Register (Capture Mode / Waveform Mode) -#define TC_CV (AT91_CAST(AT91_REG *) 0x00000010) // (TC_CV) Counter Value -#define TC_RA (AT91_CAST(AT91_REG *) 0x00000014) // (TC_RA) Register A -#define TC_RB (AT91_CAST(AT91_REG *) 0x00000018) // (TC_RB) Register B -#define TC_RC (AT91_CAST(AT91_REG *) 0x0000001C) // (TC_RC) Register C -#define TC_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TC_SR) Status Register -#define TC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TC_IER) Interrupt Enable Register -#define TC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TC_IDR) Interrupt Disable Register -#define TC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TC_IMR) Interrupt Mask Register - -#endif -// -------- TC_CCR : (TC Offset: 0x0) TC Channel Control Register -------- -#define AT91C_TC_CLKEN (0x1 << 0) // (TC) Counter Clock Enable Command -#define AT91C_TC_CLKDIS (0x1 << 1) // (TC) Counter Clock Disable Command -#define AT91C_TC_SWTRG (0x1 << 2) // (TC) Software Trigger Command -// -------- TC_CMR : (TC Offset: 0x4) TC Channel Mode Register: Capture Mode / Waveform Mode -------- -#define AT91C_TC_CLKS (0x7 << 0) // (TC) Clock Selection -#define AT91C_TC_CLKS_TIMER_DIV1_CLOCK (0x0) // (TC) Clock selected: TIMER_DIV1_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV2_CLOCK (0x1) // (TC) Clock selected: TIMER_DIV2_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV3_CLOCK (0x2) // (TC) Clock selected: TIMER_DIV3_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV4_CLOCK (0x3) // (TC) Clock selected: TIMER_DIV4_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV5_CLOCK (0x4) // (TC) Clock selected: TIMER_DIV5_CLOCK -#define AT91C_TC_CLKS_XC0 (0x5) // (TC) Clock selected: XC0 -#define AT91C_TC_CLKS_XC1 (0x6) // (TC) Clock selected: XC1 -#define AT91C_TC_CLKS_XC2 (0x7) // (TC) Clock selected: XC2 -#define AT91C_TC_CLKI (0x1 << 3) // (TC) Clock Invert -#define AT91C_TC_BURST (0x3 << 4) // (TC) Burst Signal Selection -#define AT91C_TC_BURST_NONE (0x0 << 4) // (TC) The clock is not gated by an external signal -#define AT91C_TC_BURST_XC0 (0x1 << 4) // (TC) XC0 is ANDed with the selected clock -#define AT91C_TC_BURST_XC1 (0x2 << 4) // (TC) XC1 is ANDed with the selected clock -#define AT91C_TC_BURST_XC2 (0x3 << 4) // (TC) XC2 is ANDed with the selected clock -#define AT91C_TC_CPCSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RC Compare -#define AT91C_TC_LDBSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RB Loading -#define AT91C_TC_CPCDIS (0x1 << 7) // (TC) Counter Clock Disable with RC Compare -#define AT91C_TC_LDBDIS (0x1 << 7) // (TC) Counter Clock Disabled with RB Loading -#define AT91C_TC_ETRGEDG (0x3 << 8) // (TC) External Trigger Edge Selection -#define AT91C_TC_ETRGEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_ETRGEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_ETRGEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_ETRGEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVTEDG (0x3 << 8) // (TC) External Event Edge Selection -#define AT91C_TC_EEVTEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_EEVTEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_EEVTEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_EEVTEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVT (0x3 << 10) // (TC) External Event Selection -#define AT91C_TC_EEVT_TIOB (0x0 << 10) // (TC) Signal selected as external event: TIOB TIOB direction: input -#define AT91C_TC_EEVT_XC0 (0x1 << 10) // (TC) Signal selected as external event: XC0 TIOB direction: output -#define AT91C_TC_EEVT_XC1 (0x2 << 10) // (TC) Signal selected as external event: XC1 TIOB direction: output -#define AT91C_TC_EEVT_XC2 (0x3 << 10) // (TC) Signal selected as external event: XC2 TIOB direction: output -#define AT91C_TC_ABETRG (0x1 << 10) // (TC) TIOA or TIOB External Trigger Selection -#define AT91C_TC_ENETRG (0x1 << 12) // (TC) External Event Trigger enable -#define AT91C_TC_WAVESEL (0x3 << 13) // (TC) Waveform Selection -#define AT91C_TC_WAVESEL_UP (0x0 << 13) // (TC) UP mode without atomatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN (0x1 << 13) // (TC) UPDOWN mode without automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UP_AUTO (0x2 << 13) // (TC) UP mode with automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN_AUTO (0x3 << 13) // (TC) UPDOWN mode with automatic trigger on RC Compare -#define AT91C_TC_CPCTRG (0x1 << 14) // (TC) RC Compare Trigger Enable -#define AT91C_TC_WAVE (0x1 << 15) // (TC) -#define AT91C_TC_ACPA (0x3 << 16) // (TC) RA Compare Effect on TIOA -#define AT91C_TC_ACPA_NONE (0x0 << 16) // (TC) Effect: none -#define AT91C_TC_ACPA_SET (0x1 << 16) // (TC) Effect: set -#define AT91C_TC_ACPA_CLEAR (0x2 << 16) // (TC) Effect: clear -#define AT91C_TC_ACPA_TOGGLE (0x3 << 16) // (TC) Effect: toggle -#define AT91C_TC_LDRA (0x3 << 16) // (TC) RA Loading Selection -#define AT91C_TC_LDRA_NONE (0x0 << 16) // (TC) Edge: None -#define AT91C_TC_LDRA_RISING (0x1 << 16) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRA_FALLING (0x2 << 16) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRA_BOTH (0x3 << 16) // (TC) Edge: each edge of TIOA -#define AT91C_TC_ACPC (0x3 << 18) // (TC) RC Compare Effect on TIOA -#define AT91C_TC_ACPC_NONE (0x0 << 18) // (TC) Effect: none -#define AT91C_TC_ACPC_SET (0x1 << 18) // (TC) Effect: set -#define AT91C_TC_ACPC_CLEAR (0x2 << 18) // (TC) Effect: clear -#define AT91C_TC_ACPC_TOGGLE (0x3 << 18) // (TC) Effect: toggle -#define AT91C_TC_LDRB (0x3 << 18) // (TC) RB Loading Selection -#define AT91C_TC_LDRB_NONE (0x0 << 18) // (TC) Edge: None -#define AT91C_TC_LDRB_RISING (0x1 << 18) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRB_FALLING (0x2 << 18) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRB_BOTH (0x3 << 18) // (TC) Edge: each edge of TIOA -#define AT91C_TC_AEEVT (0x3 << 20) // (TC) External Event Effect on TIOA -#define AT91C_TC_AEEVT_NONE (0x0 << 20) // (TC) Effect: none -#define AT91C_TC_AEEVT_SET (0x1 << 20) // (TC) Effect: set -#define AT91C_TC_AEEVT_CLEAR (0x2 << 20) // (TC) Effect: clear -#define AT91C_TC_AEEVT_TOGGLE (0x3 << 20) // (TC) Effect: toggle -#define AT91C_TC_ASWTRG (0x3 << 22) // (TC) Software Trigger Effect on TIOA -#define AT91C_TC_ASWTRG_NONE (0x0 << 22) // (TC) Effect: none -#define AT91C_TC_ASWTRG_SET (0x1 << 22) // (TC) Effect: set -#define AT91C_TC_ASWTRG_CLEAR (0x2 << 22) // (TC) Effect: clear -#define AT91C_TC_ASWTRG_TOGGLE (0x3 << 22) // (TC) Effect: toggle -#define AT91C_TC_BCPB (0x3 << 24) // (TC) RB Compare Effect on TIOB -#define AT91C_TC_BCPB_NONE (0x0 << 24) // (TC) Effect: none -#define AT91C_TC_BCPB_SET (0x1 << 24) // (TC) Effect: set -#define AT91C_TC_BCPB_CLEAR (0x2 << 24) // (TC) Effect: clear -#define AT91C_TC_BCPB_TOGGLE (0x3 << 24) // (TC) Effect: toggle -#define AT91C_TC_BCPC (0x3 << 26) // (TC) RC Compare Effect on TIOB -#define AT91C_TC_BCPC_NONE (0x0 << 26) // (TC) Effect: none -#define AT91C_TC_BCPC_SET (0x1 << 26) // (TC) Effect: set -#define AT91C_TC_BCPC_CLEAR (0x2 << 26) // (TC) Effect: clear -#define AT91C_TC_BCPC_TOGGLE (0x3 << 26) // (TC) Effect: toggle -#define AT91C_TC_BEEVT (0x3 << 28) // (TC) External Event Effect on TIOB -#define AT91C_TC_BEEVT_NONE (0x0 << 28) // (TC) Effect: none -#define AT91C_TC_BEEVT_SET (0x1 << 28) // (TC) Effect: set -#define AT91C_TC_BEEVT_CLEAR (0x2 << 28) // (TC) Effect: clear -#define AT91C_TC_BEEVT_TOGGLE (0x3 << 28) // (TC) Effect: toggle -#define AT91C_TC_BSWTRG (0x3 << 30) // (TC) Software Trigger Effect on TIOB -#define AT91C_TC_BSWTRG_NONE (0x0 << 30) // (TC) Effect: none -#define AT91C_TC_BSWTRG_SET (0x1 << 30) // (TC) Effect: set -#define AT91C_TC_BSWTRG_CLEAR (0x2 << 30) // (TC) Effect: clear -#define AT91C_TC_BSWTRG_TOGGLE (0x3 << 30) // (TC) Effect: toggle -// -------- TC_SR : (TC Offset: 0x20) TC Channel Status Register -------- -#define AT91C_TC_COVFS (0x1 << 0) // (TC) Counter Overflow -#define AT91C_TC_LOVRS (0x1 << 1) // (TC) Load Overrun -#define AT91C_TC_CPAS (0x1 << 2) // (TC) RA Compare -#define AT91C_TC_CPBS (0x1 << 3) // (TC) RB Compare -#define AT91C_TC_CPCS (0x1 << 4) // (TC) RC Compare -#define AT91C_TC_LDRAS (0x1 << 5) // (TC) RA Loading -#define AT91C_TC_LDRBS (0x1 << 6) // (TC) RB Loading -#define AT91C_TC_ETRGS (0x1 << 7) // (TC) External Trigger -#define AT91C_TC_CLKSTA (0x1 << 16) // (TC) Clock Enabling -#define AT91C_TC_MTIOA (0x1 << 17) // (TC) TIOA Mirror -#define AT91C_TC_MTIOB (0x1 << 18) // (TC) TIOA Mirror -// -------- TC_IER : (TC Offset: 0x24) TC Channel Interrupt Enable Register -------- -// -------- TC_IDR : (TC Offset: 0x28) TC Channel Interrupt Disable Register -------- -// -------- TC_IMR : (TC Offset: 0x2c) TC Channel Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TCB { - AT91S_TC TCB_TC0; // TC Channel 0 - AT91_REG Reserved0[4]; // - AT91S_TC TCB_TC1; // TC Channel 1 - AT91_REG Reserved1[4]; // - AT91S_TC TCB_TC2; // TC Channel 2 - AT91_REG Reserved2[4]; // - AT91_REG TCB_BCR; // TC Block Control Register - AT91_REG TCB_BMR; // TC Block Mode Register -} AT91S_TCB, *AT91PS_TCB; -#else -#define TCB_BCR (AT91_CAST(AT91_REG *) 0x000000C0) // (TCB_BCR) TC Block Control Register -#define TCB_BMR (AT91_CAST(AT91_REG *) 0x000000C4) // (TCB_BMR) TC Block Mode Register - -#endif -// -------- TCB_BCR : (TCB Offset: 0xc0) TC Block Control Register -------- -#define AT91C_TCB_SYNC (0x1 << 0) // (TCB) Synchro Command -// -------- TCB_BMR : (TCB Offset: 0xc4) TC Block Mode Register -------- -#define AT91C_TCB_TC0XC0S (0x3 << 0) // (TCB) External Clock Signal 0 Selection -#define AT91C_TCB_TC0XC0S_TCLK0 (0x0) // (TCB) TCLK0 connected to XC0 -#define AT91C_TCB_TC0XC0S_NONE (0x1) // (TCB) None signal connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA1 (0x2) // (TCB) TIOA1 connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA2 (0x3) // (TCB) TIOA2 connected to XC0 -#define AT91C_TCB_TC1XC1S (0x3 << 2) // (TCB) External Clock Signal 1 Selection -#define AT91C_TCB_TC1XC1S_TCLK1 (0x0 << 2) // (TCB) TCLK1 connected to XC1 -#define AT91C_TCB_TC1XC1S_NONE (0x1 << 2) // (TCB) None signal connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA0 (0x2 << 2) // (TCB) TIOA0 connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA2 (0x3 << 2) // (TCB) TIOA2 connected to XC1 -#define AT91C_TCB_TC2XC2S (0x3 << 4) // (TCB) External Clock Signal 2 Selection -#define AT91C_TCB_TC2XC2S_TCLK2 (0x0 << 4) // (TCB) TCLK2 connected to XC2 -#define AT91C_TCB_TC2XC2S_NONE (0x1 << 4) // (TCB) None signal connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA0 (0x2 << 4) // (TCB) TIOA0 connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA1 (0x3 << 4) // (TCB) TIOA2 connected to XC2 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR PWMC Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC_CH { - AT91_REG PWMC_CMR; // Channel Mode Register - AT91_REG PWMC_CDTYR; // Channel Duty Cycle Register - AT91_REG PWMC_CPRDR; // Channel Period Register - AT91_REG PWMC_CCNTR; // Channel Counter Register - AT91_REG PWMC_CUPDR; // Channel Update Register - AT91_REG PWMC_Reserved[3]; // Reserved -} AT91S_PWMC_CH, *AT91PS_PWMC_CH; -#else -#define PWMC_CMR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_CMR) Channel Mode Register -#define PWMC_CDTYR (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_CDTYR) Channel Duty Cycle Register -#define PWMC_CPRDR (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_CPRDR) Channel Period Register -#define PWMC_CCNTR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_CCNTR) Channel Counter Register -#define PWMC_CUPDR (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_CUPDR) Channel Update Register -#define Reserved (AT91_CAST(AT91_REG *) 0x00000014) // (Reserved) Reserved - -#endif -// -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register -------- -#define AT91C_PWMC_CPRE (0xF << 0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx -#define AT91C_PWMC_CPRE_MCK (0x0) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKA (0xB) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKB (0xC) // (PWMC_CH) -#define AT91C_PWMC_CALG (0x1 << 8) // (PWMC_CH) Channel Alignment -#define AT91C_PWMC_CPOL (0x1 << 9) // (PWMC_CH) Channel Polarity -#define AT91C_PWMC_CPD (0x1 << 10) // (PWMC_CH) Channel Update Period -// -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register -------- -#define AT91C_PWMC_CDTY (0x0 << 0) // (PWMC_CH) Channel Duty Cycle -// -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register -------- -#define AT91C_PWMC_CPRD (0x0 << 0) // (PWMC_CH) Channel Period -// -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register -------- -#define AT91C_PWMC_CCNT (0x0 << 0) // (PWMC_CH) Channel Counter -// -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register -------- -#define AT91C_PWMC_CUPD (0x0 << 0) // (PWMC_CH) Channel Update - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC { - AT91_REG PWMC_MR; // PWMC Mode Register - AT91_REG PWMC_ENA; // PWMC Enable Register - AT91_REG PWMC_DIS; // PWMC Disable Register - AT91_REG PWMC_SR; // PWMC Status Register - AT91_REG PWMC_IER; // PWMC Interrupt Enable Register - AT91_REG PWMC_IDR; // PWMC Interrupt Disable Register - AT91_REG PWMC_IMR; // PWMC Interrupt Mask Register - AT91_REG PWMC_ISR; // PWMC Interrupt Status Register - AT91_REG Reserved0[55]; // - AT91_REG PWMC_VR; // PWMC Version Register - AT91_REG Reserved1[64]; // - AT91S_PWMC_CH PWMC_CH[4]; // PWMC Channel -} AT91S_PWMC, *AT91PS_PWMC; -#else -#define PWMC_MR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_MR) PWMC Mode Register -#define PWMC_ENA (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_ENA) PWMC Enable Register -#define PWMC_DIS (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_DIS) PWMC Disable Register -#define PWMC_SR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_SR) PWMC Status Register -#define PWMC_IER (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_IER) PWMC Interrupt Enable Register -#define PWMC_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (PWMC_IDR) PWMC Interrupt Disable Register -#define PWMC_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (PWMC_IMR) PWMC Interrupt Mask Register -#define PWMC_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (PWMC_ISR) PWMC Interrupt Status Register -#define PWMC_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (PWMC_VR) PWMC Version Register - -#endif -// -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register -------- -#define AT91C_PWMC_DIVA (0xFF << 0) // (PWMC) CLKA divide factor. -#define AT91C_PWMC_PREA (0xF << 8) // (PWMC) Divider Input Clock Prescaler A -#define AT91C_PWMC_PREA_MCK (0x0 << 8) // (PWMC) -#define AT91C_PWMC_DIVB (0xFF << 16) // (PWMC) CLKB divide factor. -#define AT91C_PWMC_PREB (0xF << 24) // (PWMC) Divider Input Clock Prescaler B -#define AT91C_PWMC_PREB_MCK (0x0 << 24) // (PWMC) -// -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register -------- -#define AT91C_PWMC_CHID0 (0x1 << 0) // (PWMC) Channel ID 0 -#define AT91C_PWMC_CHID1 (0x1 << 1) // (PWMC) Channel ID 1 -#define AT91C_PWMC_CHID2 (0x1 << 2) // (PWMC) Channel ID 2 -#define AT91C_PWMC_CHID3 (0x1 << 3) // (PWMC) Channel ID 3 -// -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register -------- -// -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register -------- -// -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register -------- -// -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register -------- -// -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register -------- -// -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR USB Device Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_UDP { - AT91_REG UDP_NUM; // Frame Number Register - AT91_REG UDP_GLBSTATE; // Global State Register - AT91_REG UDP_FADDR; // Function Address Register - AT91_REG Reserved0[1]; // - AT91_REG UDP_IER; // Interrupt Enable Register - AT91_REG UDP_IDR; // Interrupt Disable Register - AT91_REG UDP_IMR; // Interrupt Mask Register - AT91_REG UDP_ISR; // Interrupt Status Register - AT91_REG UDP_ICR; // Interrupt Clear Register - AT91_REG Reserved1[1]; // - AT91_REG UDP_RSTEP; // Reset Endpoint Register - AT91_REG Reserved2[1]; // - AT91_REG UDP_CSR[4]; // Endpoint Control and Status Register - AT91_REG Reserved3[4]; // - AT91_REG UDP_FDR[4]; // Endpoint FIFO Data Register - AT91_REG Reserved4[5]; // - AT91_REG UDP_TXVC; // Transceiver Control Register -} AT91S_UDP, *AT91PS_UDP; -#else -#define UDP_FRM_NUM (AT91_CAST(AT91_REG *) 0x00000000) // (UDP_FRM_NUM) Frame Number Register -#define UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0x00000004) // (UDP_GLBSTATE) Global State Register -#define UDP_FADDR (AT91_CAST(AT91_REG *) 0x00000008) // (UDP_FADDR) Function Address Register -#define UDP_IER (AT91_CAST(AT91_REG *) 0x00000010) // (UDP_IER) Interrupt Enable Register -#define UDP_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (UDP_IDR) Interrupt Disable Register -#define UDP_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (UDP_IMR) Interrupt Mask Register -#define UDP_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (UDP_ISR) Interrupt Status Register -#define UDP_ICR (AT91_CAST(AT91_REG *) 0x00000020) // (UDP_ICR) Interrupt Clear Register -#define UDP_RSTEP (AT91_CAST(AT91_REG *) 0x00000028) // (UDP_RSTEP) Reset Endpoint Register -#define UDP_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (UDP_CSR) Endpoint Control and Status Register -#define UDP_FDR (AT91_CAST(AT91_REG *) 0x00000050) // (UDP_FDR) Endpoint FIFO Data Register -#define UDP_TXVC (AT91_CAST(AT91_REG *) 0x00000074) // (UDP_TXVC) Transceiver Control Register - -#endif -// -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register -------- -#define AT91C_UDP_FRM_NUM (0x7FF << 0) // (UDP) Frame Number as Defined in the Packet Field Formats -#define AT91C_UDP_FRM_ERR (0x1 << 16) // (UDP) Frame Error -#define AT91C_UDP_FRM_OK (0x1 << 17) // (UDP) Frame OK -// -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register -------- -#define AT91C_UDP_FADDEN (0x1 << 0) // (UDP) Function Address Enable -#define AT91C_UDP_CONFG (0x1 << 1) // (UDP) Configured -#define AT91C_UDP_ESR (0x1 << 2) // (UDP) Enable Send Resume -#define AT91C_UDP_RSMINPR (0x1 << 3) // (UDP) A Resume Has Been Sent to the Host -#define AT91C_UDP_RMWUPE (0x1 << 4) // (UDP) Remote Wake Up Enable -// -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register -------- -#define AT91C_UDP_FADD (0xFF << 0) // (UDP) Function Address Value -#define AT91C_UDP_FEN (0x1 << 8) // (UDP) Function Enable -// -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register -------- -#define AT91C_UDP_EPINT0 (0x1 << 0) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT1 (0x1 << 1) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT2 (0x1 << 2) // (UDP) Endpoint 2 Interrupt -#define AT91C_UDP_EPINT3 (0x1 << 3) // (UDP) Endpoint 3 Interrupt -#define AT91C_UDP_RXSUSP (0x1 << 8) // (UDP) USB Suspend Interrupt -#define AT91C_UDP_RXRSM (0x1 << 9) // (UDP) USB Resume Interrupt -#define AT91C_UDP_EXTRSM (0x1 << 10) // (UDP) USB External Resume Interrupt -#define AT91C_UDP_SOFINT (0x1 << 11) // (UDP) USB Start Of frame Interrupt -#define AT91C_UDP_WAKEUP (0x1 << 13) // (UDP) USB Resume Interrupt -// -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register -------- -// -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register -------- -// -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register -------- -#define AT91C_UDP_ENDBUSRES (0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt -// -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register -------- -// -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register -------- -#define AT91C_UDP_EP0 (0x1 << 0) // (UDP) Reset Endpoint 0 -#define AT91C_UDP_EP1 (0x1 << 1) // (UDP) Reset Endpoint 1 -#define AT91C_UDP_EP2 (0x1 << 2) // (UDP) Reset Endpoint 2 -#define AT91C_UDP_EP3 (0x1 << 3) // (UDP) Reset Endpoint 3 -// -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register -------- -#define AT91C_UDP_TXCOMP (0x1 << 0) // (UDP) Generates an IN packet with data previously written in the DPR -#define AT91C_UDP_RX_DATA_BK0 (0x1 << 1) // (UDP) Receive Data Bank 0 -#define AT91C_UDP_RXSETUP (0x1 << 2) // (UDP) Sends STALL to the Host (Control endpoints) -#define AT91C_UDP_ISOERROR (0x1 << 3) // (UDP) Isochronous error (Isochronous endpoints) -#define AT91C_UDP_STALLSENT (0x1 << 3) // (UDP) Stall sent (Control, bulk, interrupt endpoints) -#define AT91C_UDP_TXPKTRDY (0x1 << 4) // (UDP) Transmit Packet Ready -#define AT91C_UDP_FORCESTALL (0x1 << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints). -#define AT91C_UDP_RX_DATA_BK1 (0x1 << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes). -#define AT91C_UDP_DIR (0x1 << 7) // (UDP) Transfer Direction -#define AT91C_UDP_EPTYPE (0x7 << 8) // (UDP) Endpoint type -#define AT91C_UDP_EPTYPE_CTRL (0x0 << 8) // (UDP) Control -#define AT91C_UDP_EPTYPE_ISO_OUT (0x1 << 8) // (UDP) Isochronous OUT -#define AT91C_UDP_EPTYPE_BULK_OUT (0x2 << 8) // (UDP) Bulk OUT -#define AT91C_UDP_EPTYPE_INT_OUT (0x3 << 8) // (UDP) Interrupt OUT -#define AT91C_UDP_EPTYPE_ISO_IN (0x5 << 8) // (UDP) Isochronous IN -#define AT91C_UDP_EPTYPE_BULK_IN (0x6 << 8) // (UDP) Bulk IN -#define AT91C_UDP_EPTYPE_INT_IN (0x7 << 8) // (UDP) Interrupt IN -#define AT91C_UDP_DTGLE (0x1 << 11) // (UDP) Data Toggle -#define AT91C_UDP_EPEDS (0x1 << 15) // (UDP) Endpoint Enable Disable -#define AT91C_UDP_RXBYTECNT (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO -// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register -------- -#define AT91C_UDP_TXVDIS (0x1 << 8) // (UDP) - -// ***************************************************************************** -// REGISTER ADDRESS DEFINITION FOR AT91SAM7S64 -// ***************************************************************************** -// ========== Register definition for SYS peripheral ========== -// ========== Register definition for AIC peripheral ========== -#define AT91C_AIC_IVR (AT91_CAST(AT91_REG *) 0xFFFFF100) // (AIC) IRQ Vector Register -#define AT91C_AIC_SMR (AT91_CAST(AT91_REG *) 0xFFFFF000) // (AIC) Source Mode Register -#define AT91C_AIC_FVR (AT91_CAST(AT91_REG *) 0xFFFFF104) // (AIC) FIQ Vector Register -#define AT91C_AIC_DCR (AT91_CAST(AT91_REG *) 0xFFFFF138) // (AIC) Debug Control Register (Protect) -#define AT91C_AIC_EOICR (AT91_CAST(AT91_REG *) 0xFFFFF130) // (AIC) End of Interrupt Command Register -#define AT91C_AIC_SVR (AT91_CAST(AT91_REG *) 0xFFFFF080) // (AIC) Source Vector Register -#define AT91C_AIC_FFSR (AT91_CAST(AT91_REG *) 0xFFFFF148) // (AIC) Fast Forcing Status Register -#define AT91C_AIC_ICCR (AT91_CAST(AT91_REG *) 0xFFFFF128) // (AIC) Interrupt Clear Command Register -#define AT91C_AIC_ISR (AT91_CAST(AT91_REG *) 0xFFFFF108) // (AIC) Interrupt Status Register -#define AT91C_AIC_IMR (AT91_CAST(AT91_REG *) 0xFFFFF110) // (AIC) Interrupt Mask Register -#define AT91C_AIC_IPR (AT91_CAST(AT91_REG *) 0xFFFFF10C) // (AIC) Interrupt Pending Register -#define AT91C_AIC_FFER (AT91_CAST(AT91_REG *) 0xFFFFF140) // (AIC) Fast Forcing Enable Register -#define AT91C_AIC_IECR (AT91_CAST(AT91_REG *) 0xFFFFF120) // (AIC) Interrupt Enable Command Register -#define AT91C_AIC_ISCR (AT91_CAST(AT91_REG *) 0xFFFFF12C) // (AIC) Interrupt Set Command Register -#define AT91C_AIC_FFDR (AT91_CAST(AT91_REG *) 0xFFFFF144) // (AIC) Fast Forcing Disable Register -#define AT91C_AIC_CISR (AT91_CAST(AT91_REG *) 0xFFFFF114) // (AIC) Core Interrupt Status Register -#define AT91C_AIC_IDCR (AT91_CAST(AT91_REG *) 0xFFFFF124) // (AIC) Interrupt Disable Command Register -#define AT91C_AIC_SPU (AT91_CAST(AT91_REG *) 0xFFFFF134) // (AIC) Spurious Vector Register -// ========== Register definition for PDC_DBGU peripheral ========== -#define AT91C_DBGU_TCR (AT91_CAST(AT91_REG *) 0xFFFFF30C) // (PDC_DBGU) Transmit Counter Register -#define AT91C_DBGU_RNPR (AT91_CAST(AT91_REG *) 0xFFFFF310) // (PDC_DBGU) Receive Next Pointer Register -#define AT91C_DBGU_TNPR (AT91_CAST(AT91_REG *) 0xFFFFF318) // (PDC_DBGU) Transmit Next Pointer Register -#define AT91C_DBGU_TPR (AT91_CAST(AT91_REG *) 0xFFFFF308) // (PDC_DBGU) Transmit Pointer Register -#define AT91C_DBGU_RPR (AT91_CAST(AT91_REG *) 0xFFFFF300) // (PDC_DBGU) Receive Pointer Register -#define AT91C_DBGU_RCR (AT91_CAST(AT91_REG *) 0xFFFFF304) // (PDC_DBGU) Receive Counter Register -#define AT91C_DBGU_RNCR (AT91_CAST(AT91_REG *) 0xFFFFF314) // (PDC_DBGU) Receive Next Counter Register -#define AT91C_DBGU_PTCR (AT91_CAST(AT91_REG *) 0xFFFFF320) // (PDC_DBGU) PDC Transfer Control Register -#define AT91C_DBGU_PTSR (AT91_CAST(AT91_REG *) 0xFFFFF324) // (PDC_DBGU) PDC Transfer Status Register -#define AT91C_DBGU_TNCR (AT91_CAST(AT91_REG *) 0xFFFFF31C) // (PDC_DBGU) Transmit Next Counter Register -// ========== Register definition for DBGU peripheral ========== -#define AT91C_DBGU_EXID (AT91_CAST(AT91_REG *) 0xFFFFF244) // (DBGU) Chip ID Extension Register -#define AT91C_DBGU_BRGR (AT91_CAST(AT91_REG *) 0xFFFFF220) // (DBGU) Baud Rate Generator Register -#define AT91C_DBGU_IDR (AT91_CAST(AT91_REG *) 0xFFFFF20C) // (DBGU) Interrupt Disable Register -#define AT91C_DBGU_CSR (AT91_CAST(AT91_REG *) 0xFFFFF214) // (DBGU) Channel Status Register -#define AT91C_DBGU_CIDR (AT91_CAST(AT91_REG *) 0xFFFFF240) // (DBGU) Chip ID Register -#define AT91C_DBGU_MR (AT91_CAST(AT91_REG *) 0xFFFFF204) // (DBGU) Mode Register -#define AT91C_DBGU_IMR (AT91_CAST(AT91_REG *) 0xFFFFF210) // (DBGU) Interrupt Mask Register -#define AT91C_DBGU_CR (AT91_CAST(AT91_REG *) 0xFFFFF200) // (DBGU) Control Register -#define AT91C_DBGU_FNTR (AT91_CAST(AT91_REG *) 0xFFFFF248) // (DBGU) Force NTRST Register -#define AT91C_DBGU_THR (AT91_CAST(AT91_REG *) 0xFFFFF21C) // (DBGU) Transmitter Holding Register -#define AT91C_DBGU_RHR (AT91_CAST(AT91_REG *) 0xFFFFF218) // (DBGU) Receiver Holding Register -#define AT91C_DBGU_IER (AT91_CAST(AT91_REG *) 0xFFFFF208) // (DBGU) Interrupt Enable Register -// ========== Register definition for PIOA peripheral ========== -#define AT91C_PIOA_ODR (AT91_CAST(AT91_REG *) 0xFFFFF414) // (PIOA) Output Disable Registerr -#define AT91C_PIOA_SODR (AT91_CAST(AT91_REG *) 0xFFFFF430) // (PIOA) Set Output Data Register -#define AT91C_PIOA_ISR (AT91_CAST(AT91_REG *) 0xFFFFF44C) // (PIOA) Interrupt Status Register -#define AT91C_PIOA_ABSR (AT91_CAST(AT91_REG *) 0xFFFFF478) // (PIOA) AB Select Status Register -#define AT91C_PIOA_IER (AT91_CAST(AT91_REG *) 0xFFFFF440) // (PIOA) Interrupt Enable Register -#define AT91C_PIOA_PPUDR (AT91_CAST(AT91_REG *) 0xFFFFF460) // (PIOA) Pull-up Disable Register -#define AT91C_PIOA_IMR (AT91_CAST(AT91_REG *) 0xFFFFF448) // (PIOA) Interrupt Mask Register -#define AT91C_PIOA_PER (AT91_CAST(AT91_REG *) 0xFFFFF400) // (PIOA) PIO Enable Register -#define AT91C_PIOA_IFDR (AT91_CAST(AT91_REG *) 0xFFFFF424) // (PIOA) Input Filter Disable Register -#define AT91C_PIOA_OWDR (AT91_CAST(AT91_REG *) 0xFFFFF4A4) // (PIOA) Output Write Disable Register -#define AT91C_PIOA_MDSR (AT91_CAST(AT91_REG *) 0xFFFFF458) // (PIOA) Multi-driver Status Register -#define AT91C_PIOA_IDR (AT91_CAST(AT91_REG *) 0xFFFFF444) // (PIOA) Interrupt Disable Register -#define AT91C_PIOA_ODSR (AT91_CAST(AT91_REG *) 0xFFFFF438) // (PIOA) Output Data Status Register -#define AT91C_PIOA_PPUSR (AT91_CAST(AT91_REG *) 0xFFFFF468) // (PIOA) Pull-up Status Register -#define AT91C_PIOA_OWSR (AT91_CAST(AT91_REG *) 0xFFFFF4A8) // (PIOA) Output Write Status Register -#define AT91C_PIOA_BSR (AT91_CAST(AT91_REG *) 0xFFFFF474) // (PIOA) Select B Register -#define AT91C_PIOA_OWER (AT91_CAST(AT91_REG *) 0xFFFFF4A0) // (PIOA) Output Write Enable Register -#define AT91C_PIOA_IFER (AT91_CAST(AT91_REG *) 0xFFFFF420) // (PIOA) Input Filter Enable Register -#define AT91C_PIOA_PDSR (AT91_CAST(AT91_REG *) 0xFFFFF43C) // (PIOA) Pin Data Status Register -#define AT91C_PIOA_PPUER (AT91_CAST(AT91_REG *) 0xFFFFF464) // (PIOA) Pull-up Enable Register -#define AT91C_PIOA_OSR (AT91_CAST(AT91_REG *) 0xFFFFF418) // (PIOA) Output Status Register -#define AT91C_PIOA_ASR (AT91_CAST(AT91_REG *) 0xFFFFF470) // (PIOA) Select A Register -#define AT91C_PIOA_MDDR (AT91_CAST(AT91_REG *) 0xFFFFF454) // (PIOA) Multi-driver Disable Register -#define AT91C_PIOA_CODR (AT91_CAST(AT91_REG *) 0xFFFFF434) // (PIOA) Clear Output Data Register -#define AT91C_PIOA_MDER (AT91_CAST(AT91_REG *) 0xFFFFF450) // (PIOA) Multi-driver Enable Register -#define AT91C_PIOA_PDR (AT91_CAST(AT91_REG *) 0xFFFFF404) // (PIOA) PIO Disable Register -#define AT91C_PIOA_IFSR (AT91_CAST(AT91_REG *) 0xFFFFF428) // (PIOA) Input Filter Status Register -#define AT91C_PIOA_OER (AT91_CAST(AT91_REG *) 0xFFFFF410) // (PIOA) Output Enable Register -#define AT91C_PIOA_PSR (AT91_CAST(AT91_REG *) 0xFFFFF408) // (PIOA) PIO Status Register -// ========== Register definition for CKGR peripheral ========== -#define AT91C_CKGR_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (CKGR) Main Oscillator Register -#define AT91C_CKGR_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (CKGR) PLL Register -#define AT91C_CKGR_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (CKGR) Main Clock Frequency Register -// ========== Register definition for PMC peripheral ========== -#define AT91C_PMC_IDR (AT91_CAST(AT91_REG *) 0xFFFFFC64) // (PMC) Interrupt Disable Register -#define AT91C_PMC_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (PMC) Main Oscillator Register -#define AT91C_PMC_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (PMC) PLL Register -#define AT91C_PMC_PCER (AT91_CAST(AT91_REG *) 0xFFFFFC10) // (PMC) Peripheral Clock Enable Register -#define AT91C_PMC_PCKR (AT91_CAST(AT91_REG *) 0xFFFFFC40) // (PMC) Programmable Clock Register -#define AT91C_PMC_MCKR (AT91_CAST(AT91_REG *) 0xFFFFFC30) // (PMC) Master Clock Register -#define AT91C_PMC_SCDR (AT91_CAST(AT91_REG *) 0xFFFFFC04) // (PMC) System Clock Disable Register -#define AT91C_PMC_PCDR (AT91_CAST(AT91_REG *) 0xFFFFFC14) // (PMC) Peripheral Clock Disable Register -#define AT91C_PMC_SCSR (AT91_CAST(AT91_REG *) 0xFFFFFC08) // (PMC) System Clock Status Register -#define AT91C_PMC_PCSR (AT91_CAST(AT91_REG *) 0xFFFFFC18) // (PMC) Peripheral Clock Status Register -#define AT91C_PMC_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (PMC) Main Clock Frequency Register -#define AT91C_PMC_SCER (AT91_CAST(AT91_REG *) 0xFFFFFC00) // (PMC) System Clock Enable Register -#define AT91C_PMC_IMR (AT91_CAST(AT91_REG *) 0xFFFFFC6C) // (PMC) Interrupt Mask Register -#define AT91C_PMC_IER (AT91_CAST(AT91_REG *) 0xFFFFFC60) // (PMC) Interrupt Enable Register -#define AT91C_PMC_SR (AT91_CAST(AT91_REG *) 0xFFFFFC68) // (PMC) Status Register -// ========== Register definition for RSTC peripheral ========== -#define AT91C_RSTC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFD00) // (RSTC) Reset Control Register -#define AT91C_RSTC_RMR (AT91_CAST(AT91_REG *) 0xFFFFFD08) // (RSTC) Reset Mode Register -#define AT91C_RSTC_RSR (AT91_CAST(AT91_REG *) 0xFFFFFD04) // (RSTC) Reset Status Register -// ========== Register definition for RTTC peripheral ========== -#define AT91C_RTTC_RTSR (AT91_CAST(AT91_REG *) 0xFFFFFD2C) // (RTTC) Real-time Status Register -#define AT91C_RTTC_RTMR (AT91_CAST(AT91_REG *) 0xFFFFFD20) // (RTTC) Real-time Mode Register -#define AT91C_RTTC_RTVR (AT91_CAST(AT91_REG *) 0xFFFFFD28) // (RTTC) Real-time Value Register -#define AT91C_RTTC_RTAR (AT91_CAST(AT91_REG *) 0xFFFFFD24) // (RTTC) Real-time Alarm Register -// ========== Register definition for PITC peripheral ========== -#define AT91C_PITC_PIVR (AT91_CAST(AT91_REG *) 0xFFFFFD38) // (PITC) Period Interval Value Register -#define AT91C_PITC_PISR (AT91_CAST(AT91_REG *) 0xFFFFFD34) // (PITC) Period Interval Status Register -#define AT91C_PITC_PIIR (AT91_CAST(AT91_REG *) 0xFFFFFD3C) // (PITC) Period Interval Image Register -#define AT91C_PITC_PIMR (AT91_CAST(AT91_REG *) 0xFFFFFD30) // (PITC) Period Interval Mode Register -// ========== Register definition for WDTC peripheral ========== -#define AT91C_WDTC_WDCR (AT91_CAST(AT91_REG *) 0xFFFFFD40) // (WDTC) Watchdog Control Register -#define AT91C_WDTC_WDSR (AT91_CAST(AT91_REG *) 0xFFFFFD48) // (WDTC) Watchdog Status Register -#define AT91C_WDTC_WDMR (AT91_CAST(AT91_REG *) 0xFFFFFD44) // (WDTC) Watchdog Mode Register -// ========== Register definition for VREG peripheral ========== -#define AT91C_VREG_MR (AT91_CAST(AT91_REG *) 0xFFFFFD60) // (VREG) Voltage Regulator Mode Register -// ========== Register definition for MC peripheral ========== -#define AT91C_MC_ASR (AT91_CAST(AT91_REG *) 0xFFFFFF04) // (MC) MC Abort Status Register -#define AT91C_MC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFF00) // (MC) MC Remap Control Register -#define AT91C_MC_FCR (AT91_CAST(AT91_REG *) 0xFFFFFF64) // (MC) MC Flash Command Register -#define AT91C_MC_AASR (AT91_CAST(AT91_REG *) 0xFFFFFF08) // (MC) MC Abort Address Status Register -#define AT91C_MC_FSR (AT91_CAST(AT91_REG *) 0xFFFFFF68) // (MC) MC Flash Status Register -#define AT91C_MC_FMR (AT91_CAST(AT91_REG *) 0xFFFFFF60) // (MC) MC Flash Mode Register -// ========== Register definition for PDC_SPI peripheral ========== -#define AT91C_SPI_PTCR (AT91_CAST(AT91_REG *) 0xFFFE0120) // (PDC_SPI) PDC Transfer Control Register -#define AT91C_SPI_TPR (AT91_CAST(AT91_REG *) 0xFFFE0108) // (PDC_SPI) Transmit Pointer Register -#define AT91C_SPI_TCR (AT91_CAST(AT91_REG *) 0xFFFE010C) // (PDC_SPI) Transmit Counter Register -#define AT91C_SPI_RCR (AT91_CAST(AT91_REG *) 0xFFFE0104) // (PDC_SPI) Receive Counter Register -#define AT91C_SPI_PTSR (AT91_CAST(AT91_REG *) 0xFFFE0124) // (PDC_SPI) PDC Transfer Status Register -#define AT91C_SPI_RNPR (AT91_CAST(AT91_REG *) 0xFFFE0110) // (PDC_SPI) Receive Next Pointer Register -#define AT91C_SPI_RPR (AT91_CAST(AT91_REG *) 0xFFFE0100) // (PDC_SPI) Receive Pointer Register -#define AT91C_SPI_TNCR (AT91_CAST(AT91_REG *) 0xFFFE011C) // (PDC_SPI) Transmit Next Counter Register -#define AT91C_SPI_RNCR (AT91_CAST(AT91_REG *) 0xFFFE0114) // (PDC_SPI) Receive Next Counter Register -#define AT91C_SPI_TNPR (AT91_CAST(AT91_REG *) 0xFFFE0118) // (PDC_SPI) Transmit Next Pointer Register -// ========== Register definition for SPI peripheral ========== -#define AT91C_SPI_IER (AT91_CAST(AT91_REG *) 0xFFFE0014) // (SPI) Interrupt Enable Register -#define AT91C_SPI_SR (AT91_CAST(AT91_REG *) 0xFFFE0010) // (SPI) Status Register -#define AT91C_SPI_IDR (AT91_CAST(AT91_REG *) 0xFFFE0018) // (SPI) Interrupt Disable Register -#define AT91C_SPI_CR (AT91_CAST(AT91_REG *) 0xFFFE0000) // (SPI) Control Register -#define AT91C_SPI_MR (AT91_CAST(AT91_REG *) 0xFFFE0004) // (SPI) Mode Register -#define AT91C_SPI_IMR (AT91_CAST(AT91_REG *) 0xFFFE001C) // (SPI) Interrupt Mask Register -#define AT91C_SPI_TDR (AT91_CAST(AT91_REG *) 0xFFFE000C) // (SPI) Transmit Data Register -#define AT91C_SPI_RDR (AT91_CAST(AT91_REG *) 0xFFFE0008) // (SPI) Receive Data Register -#define AT91C_SPI_CSR (AT91_CAST(AT91_REG *) 0xFFFE0030) // (SPI) Chip Select Register -// ========== Register definition for PDC_ADC peripheral ========== -#define AT91C_ADC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD8124) // (PDC_ADC) PDC Transfer Status Register -#define AT91C_ADC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD8120) // (PDC_ADC) PDC Transfer Control Register -#define AT91C_ADC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD8118) // (PDC_ADC) Transmit Next Pointer Register -#define AT91C_ADC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD811C) // (PDC_ADC) Transmit Next Counter Register -#define AT91C_ADC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD8110) // (PDC_ADC) Receive Next Pointer Register -#define AT91C_ADC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD8114) // (PDC_ADC) Receive Next Counter Register -#define AT91C_ADC_RPR (AT91_CAST(AT91_REG *) 0xFFFD8100) // (PDC_ADC) Receive Pointer Register -#define AT91C_ADC_TCR (AT91_CAST(AT91_REG *) 0xFFFD810C) // (PDC_ADC) Transmit Counter Register -#define AT91C_ADC_TPR (AT91_CAST(AT91_REG *) 0xFFFD8108) // (PDC_ADC) Transmit Pointer Register -#define AT91C_ADC_RCR (AT91_CAST(AT91_REG *) 0xFFFD8104) // (PDC_ADC) Receive Counter Register -// ========== Register definition for ADC peripheral ========== -#define AT91C_ADC_CDR2 (AT91_CAST(AT91_REG *) 0xFFFD8038) // (ADC) ADC Channel Data Register 2 -#define AT91C_ADC_CDR3 (AT91_CAST(AT91_REG *) 0xFFFD803C) // (ADC) ADC Channel Data Register 3 -#define AT91C_ADC_CDR0 (AT91_CAST(AT91_REG *) 0xFFFD8030) // (ADC) ADC Channel Data Register 0 -#define AT91C_ADC_CDR5 (AT91_CAST(AT91_REG *) 0xFFFD8044) // (ADC) ADC Channel Data Register 5 -#define AT91C_ADC_CHDR (AT91_CAST(AT91_REG *) 0xFFFD8014) // (ADC) ADC Channel Disable Register -#define AT91C_ADC_SR (AT91_CAST(AT91_REG *) 0xFFFD801C) // (ADC) ADC Status Register -#define AT91C_ADC_CDR4 (AT91_CAST(AT91_REG *) 0xFFFD8040) // (ADC) ADC Channel Data Register 4 -#define AT91C_ADC_CDR1 (AT91_CAST(AT91_REG *) 0xFFFD8034) // (ADC) ADC Channel Data Register 1 -#define AT91C_ADC_LCDR (AT91_CAST(AT91_REG *) 0xFFFD8020) // (ADC) ADC Last Converted Data Register -#define AT91C_ADC_IDR (AT91_CAST(AT91_REG *) 0xFFFD8028) // (ADC) ADC Interrupt Disable Register -#define AT91C_ADC_CR (AT91_CAST(AT91_REG *) 0xFFFD8000) // (ADC) ADC Control Register -#define AT91C_ADC_CDR7 (AT91_CAST(AT91_REG *) 0xFFFD804C) // (ADC) ADC Channel Data Register 7 -#define AT91C_ADC_CDR6 (AT91_CAST(AT91_REG *) 0xFFFD8048) // (ADC) ADC Channel Data Register 6 -#define AT91C_ADC_IER (AT91_CAST(AT91_REG *) 0xFFFD8024) // (ADC) ADC Interrupt Enable Register -#define AT91C_ADC_CHER (AT91_CAST(AT91_REG *) 0xFFFD8010) // (ADC) ADC Channel Enable Register -#define AT91C_ADC_CHSR (AT91_CAST(AT91_REG *) 0xFFFD8018) // (ADC) ADC Channel Status Register -#define AT91C_ADC_MR (AT91_CAST(AT91_REG *) 0xFFFD8004) // (ADC) ADC Mode Register -#define AT91C_ADC_IMR (AT91_CAST(AT91_REG *) 0xFFFD802C) // (ADC) ADC Interrupt Mask Register -// ========== Register definition for PDC_SSC peripheral ========== -#define AT91C_SSC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD411C) // (PDC_SSC) Transmit Next Counter Register -#define AT91C_SSC_RPR (AT91_CAST(AT91_REG *) 0xFFFD4100) // (PDC_SSC) Receive Pointer Register -#define AT91C_SSC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD4114) // (PDC_SSC) Receive Next Counter Register -#define AT91C_SSC_TPR (AT91_CAST(AT91_REG *) 0xFFFD4108) // (PDC_SSC) Transmit Pointer Register -#define AT91C_SSC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD4120) // (PDC_SSC) PDC Transfer Control Register -#define AT91C_SSC_TCR (AT91_CAST(AT91_REG *) 0xFFFD410C) // (PDC_SSC) Transmit Counter Register -#define AT91C_SSC_RCR (AT91_CAST(AT91_REG *) 0xFFFD4104) // (PDC_SSC) Receive Counter Register -#define AT91C_SSC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD4110) // (PDC_SSC) Receive Next Pointer Register -#define AT91C_SSC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD4118) // (PDC_SSC) Transmit Next Pointer Register -#define AT91C_SSC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD4124) // (PDC_SSC) PDC Transfer Status Register -// ========== Register definition for SSC peripheral ========== -#define AT91C_SSC_RHR (AT91_CAST(AT91_REG *) 0xFFFD4020) // (SSC) Receive Holding Register -#define AT91C_SSC_RSHR (AT91_CAST(AT91_REG *) 0xFFFD4030) // (SSC) Receive Sync Holding Register -#define AT91C_SSC_TFMR (AT91_CAST(AT91_REG *) 0xFFFD401C) // (SSC) Transmit Frame Mode Register -#define AT91C_SSC_IDR (AT91_CAST(AT91_REG *) 0xFFFD4048) // (SSC) Interrupt Disable Register -#define AT91C_SSC_THR (AT91_CAST(AT91_REG *) 0xFFFD4024) // (SSC) Transmit Holding Register -#define AT91C_SSC_RCMR (AT91_CAST(AT91_REG *) 0xFFFD4010) // (SSC) Receive Clock ModeRegister -#define AT91C_SSC_IER (AT91_CAST(AT91_REG *) 0xFFFD4044) // (SSC) Interrupt Enable Register -#define AT91C_SSC_TSHR (AT91_CAST(AT91_REG *) 0xFFFD4034) // (SSC) Transmit Sync Holding Register -#define AT91C_SSC_SR (AT91_CAST(AT91_REG *) 0xFFFD4040) // (SSC) Status Register -#define AT91C_SSC_CMR (AT91_CAST(AT91_REG *) 0xFFFD4004) // (SSC) Clock Mode Register -#define AT91C_SSC_TCMR (AT91_CAST(AT91_REG *) 0xFFFD4018) // (SSC) Transmit Clock Mode Register -#define AT91C_SSC_CR (AT91_CAST(AT91_REG *) 0xFFFD4000) // (SSC) Control Register -#define AT91C_SSC_IMR (AT91_CAST(AT91_REG *) 0xFFFD404C) // (SSC) Interrupt Mask Register -#define AT91C_SSC_RFMR (AT91_CAST(AT91_REG *) 0xFFFD4014) // (SSC) Receive Frame Mode Register -// ========== Register definition for PDC_US1 peripheral ========== -#define AT91C_US1_RNCR (AT91_CAST(AT91_REG *) 0xFFFC4114) // (PDC_US1) Receive Next Counter Register -#define AT91C_US1_PTCR (AT91_CAST(AT91_REG *) 0xFFFC4120) // (PDC_US1) PDC Transfer Control Register -#define AT91C_US1_TCR (AT91_CAST(AT91_REG *) 0xFFFC410C) // (PDC_US1) Transmit Counter Register -#define AT91C_US1_PTSR (AT91_CAST(AT91_REG *) 0xFFFC4124) // (PDC_US1) PDC Transfer Status Register -#define AT91C_US1_TNPR (AT91_CAST(AT91_REG *) 0xFFFC4118) // (PDC_US1) Transmit Next Pointer Register -#define AT91C_US1_RCR (AT91_CAST(AT91_REG *) 0xFFFC4104) // (PDC_US1) Receive Counter Register -#define AT91C_US1_RNPR (AT91_CAST(AT91_REG *) 0xFFFC4110) // (PDC_US1) Receive Next Pointer Register -#define AT91C_US1_RPR (AT91_CAST(AT91_REG *) 0xFFFC4100) // (PDC_US1) Receive Pointer Register -#define AT91C_US1_TNCR (AT91_CAST(AT91_REG *) 0xFFFC411C) // (PDC_US1) Transmit Next Counter Register -#define AT91C_US1_TPR (AT91_CAST(AT91_REG *) 0xFFFC4108) // (PDC_US1) Transmit Pointer Register -// ========== Register definition for US1 peripheral ========== -#define AT91C_US1_IF (AT91_CAST(AT91_REG *) 0xFFFC404C) // (US1) IRDA_FILTER Register -#define AT91C_US1_NER (AT91_CAST(AT91_REG *) 0xFFFC4044) // (US1) Nb Errors Register -#define AT91C_US1_RTOR (AT91_CAST(AT91_REG *) 0xFFFC4024) // (US1) Receiver Time-out Register -#define AT91C_US1_CSR (AT91_CAST(AT91_REG *) 0xFFFC4014) // (US1) Channel Status Register -#define AT91C_US1_IDR (AT91_CAST(AT91_REG *) 0xFFFC400C) // (US1) Interrupt Disable Register -#define AT91C_US1_IER (AT91_CAST(AT91_REG *) 0xFFFC4008) // (US1) Interrupt Enable Register -#define AT91C_US1_THR (AT91_CAST(AT91_REG *) 0xFFFC401C) // (US1) Transmitter Holding Register -#define AT91C_US1_TTGR (AT91_CAST(AT91_REG *) 0xFFFC4028) // (US1) Transmitter Time-guard Register -#define AT91C_US1_RHR (AT91_CAST(AT91_REG *) 0xFFFC4018) // (US1) Receiver Holding Register -#define AT91C_US1_BRGR (AT91_CAST(AT91_REG *) 0xFFFC4020) // (US1) Baud Rate Generator Register -#define AT91C_US1_IMR (AT91_CAST(AT91_REG *) 0xFFFC4010) // (US1) Interrupt Mask Register -#define AT91C_US1_FIDI (AT91_CAST(AT91_REG *) 0xFFFC4040) // (US1) FI_DI_Ratio Register -#define AT91C_US1_CR (AT91_CAST(AT91_REG *) 0xFFFC4000) // (US1) Control Register -#define AT91C_US1_MR (AT91_CAST(AT91_REG *) 0xFFFC4004) // (US1) Mode Register -// ========== Register definition for PDC_US0 peripheral ========== -#define AT91C_US0_TNPR (AT91_CAST(AT91_REG *) 0xFFFC0118) // (PDC_US0) Transmit Next Pointer Register -#define AT91C_US0_RNPR (AT91_CAST(AT91_REG *) 0xFFFC0110) // (PDC_US0) Receive Next Pointer Register -#define AT91C_US0_TCR (AT91_CAST(AT91_REG *) 0xFFFC010C) // (PDC_US0) Transmit Counter Register -#define AT91C_US0_PTCR (AT91_CAST(AT91_REG *) 0xFFFC0120) // (PDC_US0) PDC Transfer Control Register -#define AT91C_US0_PTSR (AT91_CAST(AT91_REG *) 0xFFFC0124) // (PDC_US0) PDC Transfer Status Register -#define AT91C_US0_TNCR (AT91_CAST(AT91_REG *) 0xFFFC011C) // (PDC_US0) Transmit Next Counter Register -#define AT91C_US0_TPR (AT91_CAST(AT91_REG *) 0xFFFC0108) // (PDC_US0) Transmit Pointer Register -#define AT91C_US0_RCR (AT91_CAST(AT91_REG *) 0xFFFC0104) // (PDC_US0) Receive Counter Register -#define AT91C_US0_RPR (AT91_CAST(AT91_REG *) 0xFFFC0100) // (PDC_US0) Receive Pointer Register -#define AT91C_US0_RNCR (AT91_CAST(AT91_REG *) 0xFFFC0114) // (PDC_US0) Receive Next Counter Register -// ========== Register definition for US0 peripheral ========== -#define AT91C_US0_BRGR (AT91_CAST(AT91_REG *) 0xFFFC0020) // (US0) Baud Rate Generator Register -#define AT91C_US0_NER (AT91_CAST(AT91_REG *) 0xFFFC0044) // (US0) Nb Errors Register -#define AT91C_US0_CR (AT91_CAST(AT91_REG *) 0xFFFC0000) // (US0) Control Register -#define AT91C_US0_IMR (AT91_CAST(AT91_REG *) 0xFFFC0010) // (US0) Interrupt Mask Register -#define AT91C_US0_FIDI (AT91_CAST(AT91_REG *) 0xFFFC0040) // (US0) FI_DI_Ratio Register -#define AT91C_US0_TTGR (AT91_CAST(AT91_REG *) 0xFFFC0028) // (US0) Transmitter Time-guard Register -#define AT91C_US0_MR (AT91_CAST(AT91_REG *) 0xFFFC0004) // (US0) Mode Register -#define AT91C_US0_RTOR (AT91_CAST(AT91_REG *) 0xFFFC0024) // (US0) Receiver Time-out Register -#define AT91C_US0_CSR (AT91_CAST(AT91_REG *) 0xFFFC0014) // (US0) Channel Status Register -#define AT91C_US0_RHR (AT91_CAST(AT91_REG *) 0xFFFC0018) // (US0) Receiver Holding Register -#define AT91C_US0_IDR (AT91_CAST(AT91_REG *) 0xFFFC000C) // (US0) Interrupt Disable Register -#define AT91C_US0_THR (AT91_CAST(AT91_REG *) 0xFFFC001C) // (US0) Transmitter Holding Register -#define AT91C_US0_IF (AT91_CAST(AT91_REG *) 0xFFFC004C) // (US0) IRDA_FILTER Register -#define AT91C_US0_IER (AT91_CAST(AT91_REG *) 0xFFFC0008) // (US0) Interrupt Enable Register -// ========== Register definition for TWI peripheral ========== -#define AT91C_TWI_IER (AT91_CAST(AT91_REG *) 0xFFFB8024) // (TWI) Interrupt Enable Register -#define AT91C_TWI_CR (AT91_CAST(AT91_REG *) 0xFFFB8000) // (TWI) Control Register -#define AT91C_TWI_SR (AT91_CAST(AT91_REG *) 0xFFFB8020) // (TWI) Status Register -#define AT91C_TWI_IMR (AT91_CAST(AT91_REG *) 0xFFFB802C) // (TWI) Interrupt Mask Register -#define AT91C_TWI_THR (AT91_CAST(AT91_REG *) 0xFFFB8034) // (TWI) Transmit Holding Register -#define AT91C_TWI_IDR (AT91_CAST(AT91_REG *) 0xFFFB8028) // (TWI) Interrupt Disable Register -#define AT91C_TWI_IADR (AT91_CAST(AT91_REG *) 0xFFFB800C) // (TWI) Internal Address Register -#define AT91C_TWI_MMR (AT91_CAST(AT91_REG *) 0xFFFB8004) // (TWI) Master Mode Register -#define AT91C_TWI_CWGR (AT91_CAST(AT91_REG *) 0xFFFB8010) // (TWI) Clock Waveform Generator Register -#define AT91C_TWI_RHR (AT91_CAST(AT91_REG *) 0xFFFB8030) // (TWI) Receive Holding Register -// ========== Register definition for TC0 peripheral ========== -#define AT91C_TC0_SR (AT91_CAST(AT91_REG *) 0xFFFA0020) // (TC0) Status Register -#define AT91C_TC0_RC (AT91_CAST(AT91_REG *) 0xFFFA001C) // (TC0) Register C -#define AT91C_TC0_RB (AT91_CAST(AT91_REG *) 0xFFFA0018) // (TC0) Register B -#define AT91C_TC0_CCR (AT91_CAST(AT91_REG *) 0xFFFA0000) // (TC0) Channel Control Register -#define AT91C_TC0_CMR (AT91_CAST(AT91_REG *) 0xFFFA0004) // (TC0) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC0_IER (AT91_CAST(AT91_REG *) 0xFFFA0024) // (TC0) Interrupt Enable Register -#define AT91C_TC0_RA (AT91_CAST(AT91_REG *) 0xFFFA0014) // (TC0) Register A -#define AT91C_TC0_IDR (AT91_CAST(AT91_REG *) 0xFFFA0028) // (TC0) Interrupt Disable Register -#define AT91C_TC0_CV (AT91_CAST(AT91_REG *) 0xFFFA0010) // (TC0) Counter Value -#define AT91C_TC0_IMR (AT91_CAST(AT91_REG *) 0xFFFA002C) // (TC0) Interrupt Mask Register -// ========== Register definition for TC1 peripheral ========== -#define AT91C_TC1_RB (AT91_CAST(AT91_REG *) 0xFFFA0058) // (TC1) Register B -#define AT91C_TC1_CCR (AT91_CAST(AT91_REG *) 0xFFFA0040) // (TC1) Channel Control Register -#define AT91C_TC1_IER (AT91_CAST(AT91_REG *) 0xFFFA0064) // (TC1) Interrupt Enable Register -#define AT91C_TC1_IDR (AT91_CAST(AT91_REG *) 0xFFFA0068) // (TC1) Interrupt Disable Register -#define AT91C_TC1_SR (AT91_CAST(AT91_REG *) 0xFFFA0060) // (TC1) Status Register -#define AT91C_TC1_CMR (AT91_CAST(AT91_REG *) 0xFFFA0044) // (TC1) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC1_RA (AT91_CAST(AT91_REG *) 0xFFFA0054) // (TC1) Register A -#define AT91C_TC1_RC (AT91_CAST(AT91_REG *) 0xFFFA005C) // (TC1) Register C -#define AT91C_TC1_IMR (AT91_CAST(AT91_REG *) 0xFFFA006C) // (TC1) Interrupt Mask Register -#define AT91C_TC1_CV (AT91_CAST(AT91_REG *) 0xFFFA0050) // (TC1) Counter Value -// ========== Register definition for TC2 peripheral ========== -#define AT91C_TC2_CMR (AT91_CAST(AT91_REG *) 0xFFFA0084) // (TC2) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC2_CCR (AT91_CAST(AT91_REG *) 0xFFFA0080) // (TC2) Channel Control Register -#define AT91C_TC2_CV (AT91_CAST(AT91_REG *) 0xFFFA0090) // (TC2) Counter Value -#define AT91C_TC2_RA (AT91_CAST(AT91_REG *) 0xFFFA0094) // (TC2) Register A -#define AT91C_TC2_RB (AT91_CAST(AT91_REG *) 0xFFFA0098) // (TC2) Register B -#define AT91C_TC2_IDR (AT91_CAST(AT91_REG *) 0xFFFA00A8) // (TC2) Interrupt Disable Register -#define AT91C_TC2_IMR (AT91_CAST(AT91_REG *) 0xFFFA00AC) // (TC2) Interrupt Mask Register -#define AT91C_TC2_RC (AT91_CAST(AT91_REG *) 0xFFFA009C) // (TC2) Register C -#define AT91C_TC2_IER (AT91_CAST(AT91_REG *) 0xFFFA00A4) // (TC2) Interrupt Enable Register -#define AT91C_TC2_SR (AT91_CAST(AT91_REG *) 0xFFFA00A0) // (TC2) Status Register -// ========== Register definition for TCB peripheral ========== -#define AT91C_TCB_BMR (AT91_CAST(AT91_REG *) 0xFFFA00C4) // (TCB) TC Block Mode Register -#define AT91C_TCB_BCR (AT91_CAST(AT91_REG *) 0xFFFA00C0) // (TCB) TC Block Control Register -// ========== Register definition for PWMC_CH3 peripheral ========== -#define AT91C_PWMC_CH3_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC270) // (PWMC_CH3) Channel Update Register -#define AT91C_PWMC_CH3_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC274) // (PWMC_CH3) Reserved -#define AT91C_PWMC_CH3_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC268) // (PWMC_CH3) Channel Period Register -#define AT91C_PWMC_CH3_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC264) // (PWMC_CH3) Channel Duty Cycle Register -#define AT91C_PWMC_CH3_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC26C) // (PWMC_CH3) Channel Counter Register -#define AT91C_PWMC_CH3_CMR (AT91_CAST(AT91_REG *) 0xFFFCC260) // (PWMC_CH3) Channel Mode Register -// ========== Register definition for PWMC_CH2 peripheral ========== -#define AT91C_PWMC_CH2_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC254) // (PWMC_CH2) Reserved -#define AT91C_PWMC_CH2_CMR (AT91_CAST(AT91_REG *) 0xFFFCC240) // (PWMC_CH2) Channel Mode Register -#define AT91C_PWMC_CH2_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC24C) // (PWMC_CH2) Channel Counter Register -#define AT91C_PWMC_CH2_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC248) // (PWMC_CH2) Channel Period Register -#define AT91C_PWMC_CH2_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC250) // (PWMC_CH2) Channel Update Register -#define AT91C_PWMC_CH2_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC244) // (PWMC_CH2) Channel Duty Cycle Register -// ========== Register definition for PWMC_CH1 peripheral ========== -#define AT91C_PWMC_CH1_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC234) // (PWMC_CH1) Reserved -#define AT91C_PWMC_CH1_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC230) // (PWMC_CH1) Channel Update Register -#define AT91C_PWMC_CH1_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC228) // (PWMC_CH1) Channel Period Register -#define AT91C_PWMC_CH1_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC22C) // (PWMC_CH1) Channel Counter Register -#define AT91C_PWMC_CH1_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC224) // (PWMC_CH1) Channel Duty Cycle Register -#define AT91C_PWMC_CH1_CMR (AT91_CAST(AT91_REG *) 0xFFFCC220) // (PWMC_CH1) Channel Mode Register -// ========== Register definition for PWMC_CH0 peripheral ========== -#define AT91C_PWMC_CH0_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC214) // (PWMC_CH0) Reserved -#define AT91C_PWMC_CH0_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC208) // (PWMC_CH0) Channel Period Register -#define AT91C_PWMC_CH0_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC204) // (PWMC_CH0) Channel Duty Cycle Register -#define AT91C_PWMC_CH0_CMR (AT91_CAST(AT91_REG *) 0xFFFCC200) // (PWMC_CH0) Channel Mode Register -#define AT91C_PWMC_CH0_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC210) // (PWMC_CH0) Channel Update Register -#define AT91C_PWMC_CH0_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC20C) // (PWMC_CH0) Channel Counter Register -// ========== Register definition for PWMC peripheral ========== -#define AT91C_PWMC_IDR (AT91_CAST(AT91_REG *) 0xFFFCC014) // (PWMC) PWMC Interrupt Disable Register -#define AT91C_PWMC_DIS (AT91_CAST(AT91_REG *) 0xFFFCC008) // (PWMC) PWMC Disable Register -#define AT91C_PWMC_IER (AT91_CAST(AT91_REG *) 0xFFFCC010) // (PWMC) PWMC Interrupt Enable Register -#define AT91C_PWMC_VR (AT91_CAST(AT91_REG *) 0xFFFCC0FC) // (PWMC) PWMC Version Register -#define AT91C_PWMC_ISR (AT91_CAST(AT91_REG *) 0xFFFCC01C) // (PWMC) PWMC Interrupt Status Register -#define AT91C_PWMC_SR (AT91_CAST(AT91_REG *) 0xFFFCC00C) // (PWMC) PWMC Status Register -#define AT91C_PWMC_IMR (AT91_CAST(AT91_REG *) 0xFFFCC018) // (PWMC) PWMC Interrupt Mask Register -#define AT91C_PWMC_MR (AT91_CAST(AT91_REG *) 0xFFFCC000) // (PWMC) PWMC Mode Register -#define AT91C_PWMC_ENA (AT91_CAST(AT91_REG *) 0xFFFCC004) // (PWMC) PWMC Enable Register -// ========== Register definition for UDP peripheral ========== -#define AT91C_UDP_IMR (AT91_CAST(AT91_REG *) 0xFFFB0018) // (UDP) Interrupt Mask Register -#define AT91C_UDP_FADDR (AT91_CAST(AT91_REG *) 0xFFFB0008) // (UDP) Function Address Register -#define AT91C_UDP_NUM (AT91_CAST(AT91_REG *) 0xFFFB0000) // (UDP) Frame Number Register -#define AT91C_UDP_FDR (AT91_CAST(AT91_REG *) 0xFFFB0050) // (UDP) Endpoint FIFO Data Register -#define AT91C_UDP_ISR (AT91_CAST(AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register -#define AT91C_UDP_CSR (AT91_CAST(AT91_REG *) 0xFFFB0030) // (UDP) Endpoint Control and Status Register -#define AT91C_UDP_IDR (AT91_CAST(AT91_REG *) 0xFFFB0014) // (UDP) Interrupt Disable Register -#define AT91C_UDP_ICR (AT91_CAST(AT91_REG *) 0xFFFB0020) // (UDP) Interrupt Clear Register -#define AT91C_UDP_RSTEP (AT91_CAST(AT91_REG *) 0xFFFB0028) // (UDP) Reset Endpoint Register -#define AT91C_UDP_TXVC (AT91_CAST(AT91_REG *) 0xFFFB0074) // (UDP) Transceiver Control Register -#define AT91C_UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0xFFFB0004) // (UDP) Global State Register -#define AT91C_UDP_IER (AT91_CAST(AT91_REG *) 0xFFFB0010) // (UDP) Interrupt Enable Register - -// ***************************************************************************** -// PIO DEFINITIONS FOR AT91SAM7S64 -// ***************************************************************************** -#define AT91C_PIO_PA0 (1 << 0) // Pin Controlled by PA0 -#define AT91C_PA0_PWM0 (AT91C_PIO_PA0) // PWM Channel 0 -#define AT91C_PA0_TIOA0 (AT91C_PIO_PA0) // Timer Counter 0 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA1 (1 << 1) // Pin Controlled by PA1 -#define AT91C_PA1_PWM1 (AT91C_PIO_PA1) // PWM Channel 1 -#define AT91C_PA1_TIOB0 (AT91C_PIO_PA1) // Timer Counter 0 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA10 (1 << 10) // Pin Controlled by PA10 -#define AT91C_PA10_DTXD (AT91C_PIO_PA10) // DBGU Debug Transmit Data -#define AT91C_PA10_NPCS2 (AT91C_PIO_PA10) // SPI Peripheral Chip Select 2 -#define AT91C_PIO_PA11 (1 << 11) // Pin Controlled by PA11 -#define AT91C_PA11_NPCS0 (AT91C_PIO_PA11) // SPI Peripheral Chip Select 0 -#define AT91C_PA11_PWM0 (AT91C_PIO_PA11) // PWM Channel 0 -#define AT91C_PIO_PA12 (1 << 12) // Pin Controlled by PA12 -#define AT91C_PA12_MISO (AT91C_PIO_PA12) // SPI Master In Slave -#define AT91C_PA12_PWM1 (AT91C_PIO_PA12) // PWM Channel 1 -#define AT91C_PIO_PA13 (1 << 13) // Pin Controlled by PA13 -#define AT91C_PA13_MOSI (AT91C_PIO_PA13) // SPI Master Out Slave -#define AT91C_PA13_PWM2 (AT91C_PIO_PA13) // PWM Channel 2 -#define AT91C_PIO_PA14 (1 << 14) // Pin Controlled by PA14 -#define AT91C_PA14_SPCK (AT91C_PIO_PA14) // SPI Serial Clock -#define AT91C_PA14_PWM3 (AT91C_PIO_PA14) // PWM Channel 3 -#define AT91C_PIO_PA15 (1 << 15) // Pin Controlled by PA15 -#define AT91C_PA15_TF (AT91C_PIO_PA15) // SSC Transmit Frame Sync -#define AT91C_PA15_TIOA1 (AT91C_PIO_PA15) // Timer Counter 1 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA16 (1 << 16) // Pin Controlled by PA16 -#define AT91C_PA16_TK (AT91C_PIO_PA16) // SSC Transmit Clock -#define AT91C_PA16_TIOB1 (AT91C_PIO_PA16) // Timer Counter 1 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA17 (1 << 17) // Pin Controlled by PA17 -#define AT91C_PA17_TD (AT91C_PIO_PA17) // SSC Transmit data -#define AT91C_PA17_PCK1 (AT91C_PIO_PA17) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA18 (1 << 18) // Pin Controlled by PA18 -#define AT91C_PA18_RD (AT91C_PIO_PA18) // SSC Receive Data -#define AT91C_PA18_PCK2 (AT91C_PIO_PA18) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA19 (1 << 19) // Pin Controlled by PA19 -#define AT91C_PA19_RK (AT91C_PIO_PA19) // SSC Receive Clock -#define AT91C_PA19_FIQ (AT91C_PIO_PA19) // AIC Fast Interrupt Input -#define AT91C_PIO_PA2 (1 << 2) // Pin Controlled by PA2 -#define AT91C_PA2_PWM2 (AT91C_PIO_PA2) // PWM Channel 2 -#define AT91C_PA2_SCK0 (AT91C_PIO_PA2) // USART 0 Serial Clock -#define AT91C_PIO_PA20 (1 << 20) // Pin Controlled by PA20 -#define AT91C_PA20_RF (AT91C_PIO_PA20) // SSC Receive Frame Sync -#define AT91C_PA20_IRQ0 (AT91C_PIO_PA20) // External Interrupt 0 -#define AT91C_PIO_PA21 (1 << 21) // Pin Controlled by PA21 -#define AT91C_PA21_RXD1 (AT91C_PIO_PA21) // USART 1 Receive Data -#define AT91C_PA21_PCK1 (AT91C_PIO_PA21) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA22 (1 << 22) // Pin Controlled by PA22 -#define AT91C_PA22_TXD1 (AT91C_PIO_PA22) // USART 1 Transmit Data -#define AT91C_PA22_NPCS3 (AT91C_PIO_PA22) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA23 (1 << 23) // Pin Controlled by PA23 -#define AT91C_PA23_SCK1 (AT91C_PIO_PA23) // USART 1 Serial Clock -#define AT91C_PA23_PWM0 (AT91C_PIO_PA23) // PWM Channel 0 -#define AT91C_PIO_PA24 (1 << 24) // Pin Controlled by PA24 -#define AT91C_PA24_RTS1 (AT91C_PIO_PA24) // USART 1 Ready To Send -#define AT91C_PA24_PWM1 (AT91C_PIO_PA24) // PWM Channel 1 -#define AT91C_PIO_PA25 (1 << 25) // Pin Controlled by PA25 -#define AT91C_PA25_CTS1 (AT91C_PIO_PA25) // USART 1 Clear To Send -#define AT91C_PA25_PWM2 (AT91C_PIO_PA25) // PWM Channel 2 -#define AT91C_PIO_PA26 (1 << 26) // Pin Controlled by PA26 -#define AT91C_PA26_DCD1 (AT91C_PIO_PA26) // USART 1 Data Carrier Detect -#define AT91C_PA26_TIOA2 (AT91C_PIO_PA26) // Timer Counter 2 Multipurpose Timer I/O Pin A -#define AT91C_PIO_PA27 (1 << 27) // Pin Controlled by PA27 -#define AT91C_PA27_DTR1 (AT91C_PIO_PA27) // USART 1 Data Terminal ready -#define AT91C_PA27_TIOB2 (AT91C_PIO_PA27) // Timer Counter 2 Multipurpose Timer I/O Pin B -#define AT91C_PIO_PA28 (1 << 28) // Pin Controlled by PA28 -#define AT91C_PA28_DSR1 (AT91C_PIO_PA28) // USART 1 Data Set ready -#define AT91C_PA28_TCLK1 (AT91C_PIO_PA28) // Timer Counter 1 external clock input -#define AT91C_PIO_PA29 (1 << 29) // Pin Controlled by PA29 -#define AT91C_PA29_RI1 (AT91C_PIO_PA29) // USART 1 Ring Indicator -#define AT91C_PA29_TCLK2 (AT91C_PIO_PA29) // Timer Counter 2 external clock input -#define AT91C_PIO_PA3 (1 << 3) // Pin Controlled by PA3 -#define AT91C_PA3_TWD (AT91C_PIO_PA3) // TWI Two-wire Serial Data -#define AT91C_PA3_NPCS3 (AT91C_PIO_PA3) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA30 (1 << 30) // Pin Controlled by PA30 -#define AT91C_PA30_IRQ1 (AT91C_PIO_PA30) // External Interrupt 1 -#define AT91C_PA30_NPCS2 (AT91C_PIO_PA30) // SPI Peripheral Chip Select 2 -#define AT91C_PIO_PA31 (1 << 31) // Pin Controlled by PA31 -#define AT91C_PA31_NPCS1 (AT91C_PIO_PA31) // SPI Peripheral Chip Select 1 -#define AT91C_PA31_PCK2 (AT91C_PIO_PA31) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA4 (1 << 4) // Pin Controlled by PA4 -#define AT91C_PA4_TWCK (AT91C_PIO_PA4) // TWI Two-wire Serial Clock -#define AT91C_PA4_TCLK0 (AT91C_PIO_PA4) // Timer Counter 0 external clock input -#define AT91C_PIO_PA5 (1 << 5) // Pin Controlled by PA5 -#define AT91C_PA5_RXD0 (AT91C_PIO_PA5) // USART 0 Receive Data -#define AT91C_PA5_NPCS3 (AT91C_PIO_PA5) // SPI Peripheral Chip Select 3 -#define AT91C_PIO_PA6 (1 << 6) // Pin Controlled by PA6 -#define AT91C_PA6_TXD0 (AT91C_PIO_PA6) // USART 0 Transmit Data -#define AT91C_PA6_PCK0 (AT91C_PIO_PA6) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PA7 (1 << 7) // Pin Controlled by PA7 -#define AT91C_PA7_RTS0 (AT91C_PIO_PA7) // USART 0 Ready To Send -#define AT91C_PA7_PWM3 (AT91C_PIO_PA7) // PWM Channel 3 -#define AT91C_PIO_PA8 (1 << 8) // Pin Controlled by PA8 -#define AT91C_PA8_CTS0 (AT91C_PIO_PA8) // USART 0 Clear To Send -#define AT91C_PA8_ADTRG (AT91C_PIO_PA8) // ADC External Trigger -#define AT91C_PIO_PA9 (1 << 9) // Pin Controlled by PA9 -#define AT91C_PA9_DRXD (AT91C_PIO_PA9) // DBGU Debug Receive Data -#define AT91C_PA9_NPCS1 (AT91C_PIO_PA9) // SPI Peripheral Chip Select 1 - -// ***************************************************************************** -// PERIPHERAL ID DEFINITIONS FOR AT91SAM7S64 -// ***************************************************************************** -#define AT91C_ID_FIQ ( 0) // Advanced Interrupt Controller (FIQ) -#define AT91C_ID_SYS ( 1) // System Peripheral -#define AT91C_ID_PIOA ( 2) // Parallel IO Controller -#define AT91C_ID_3_Reserved ( 3) // Reserved -#define AT91C_ID_ADC ( 4) // Analog-to-Digital Converter -#define AT91C_ID_SPI ( 5) // Serial Peripheral Interface -#define AT91C_ID_US0 ( 6) // USART 0 -#define AT91C_ID_US1 ( 7) // USART 1 -#define AT91C_ID_SSC ( 8) // Serial Synchronous Controller -#define AT91C_ID_TWI ( 9) // Two-Wire Interface -#define AT91C_ID_PWMC (10) // PWM Controller -#define AT91C_ID_UDP (11) // USB Device Port -#define AT91C_ID_TC0 (12) // Timer Counter 0 -#define AT91C_ID_TC1 (13) // Timer Counter 1 -#define AT91C_ID_TC2 (14) // Timer Counter 2 -#define AT91C_ID_15_Reserved (15) // Reserved -#define AT91C_ID_16_Reserved (16) // Reserved -#define AT91C_ID_17_Reserved (17) // Reserved -#define AT91C_ID_18_Reserved (18) // Reserved -#define AT91C_ID_19_Reserved (19) // Reserved -#define AT91C_ID_20_Reserved (20) // Reserved -#define AT91C_ID_21_Reserved (21) // Reserved -#define AT91C_ID_22_Reserved (22) // Reserved -#define AT91C_ID_23_Reserved (23) // Reserved -#define AT91C_ID_24_Reserved (24) // Reserved -#define AT91C_ID_25_Reserved (25) // Reserved -#define AT91C_ID_26_Reserved (26) // Reserved -#define AT91C_ID_27_Reserved (27) // Reserved -#define AT91C_ID_28_Reserved (28) // Reserved -#define AT91C_ID_29_Reserved (29) // Reserved -#define AT91C_ID_IRQ0 (30) // Advanced Interrupt Controller (IRQ0) -#define AT91C_ID_IRQ1 (31) // Advanced Interrupt Controller (IRQ1) -#define AT91C_ALL_INT (0xC0007FF7) // ALL VALID INTERRUPTS - -// ***************************************************************************** -// BASE ADDRESS DEFINITIONS FOR AT91SAM7S64 -// ***************************************************************************** -#define AT91C_BASE_SYS (AT91_CAST(AT91PS_SYS) 0xFFFFF000) // (SYS) Base Address -#define AT91C_BASE_AIC (AT91_CAST(AT91PS_AIC) 0xFFFFF000) // (AIC) Base Address -#define AT91C_BASE_PDC_DBGU (AT91_CAST(AT91PS_PDC) 0xFFFFF300) // (PDC_DBGU) Base Address -#define AT91C_BASE_DBGU (AT91_CAST(AT91PS_DBGU) 0xFFFFF200) // (DBGU) Base Address -#define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address -#define AT91C_BASE_CKGR (AT91_CAST(AT91PS_CKGR) 0xFFFFFC20) // (CKGR) Base Address -#define AT91C_BASE_PMC (AT91_CAST(AT91PS_PMC) 0xFFFFFC00) // (PMC) Base Address -#define AT91C_BASE_RSTC (AT91_CAST(AT91PS_RSTC) 0xFFFFFD00) // (RSTC) Base Address -#define AT91C_BASE_RTTC (AT91_CAST(AT91PS_RTTC) 0xFFFFFD20) // (RTTC) Base Address -#define AT91C_BASE_PITC (AT91_CAST(AT91PS_PITC) 0xFFFFFD30) // (PITC) Base Address -#define AT91C_BASE_WDTC (AT91_CAST(AT91PS_WDTC) 0xFFFFFD40) // (WDTC) Base Address -#define AT91C_BASE_VREG (AT91_CAST(AT91PS_VREG) 0xFFFFFD60) // (VREG) Base Address -#define AT91C_BASE_MC (AT91_CAST(AT91PS_MC) 0xFFFFFF00) // (MC) Base Address -#define AT91C_BASE_PDC_SPI (AT91_CAST(AT91PS_PDC) 0xFFFE0100) // (PDC_SPI) Base Address -#define AT91C_BASE_SPI (AT91_CAST(AT91PS_SPI) 0xFFFE0000) // (SPI) Base Address -#define AT91C_BASE_PDC_ADC (AT91_CAST(AT91PS_PDC) 0xFFFD8100) // (PDC_ADC) Base Address -#define AT91C_BASE_ADC (AT91_CAST(AT91PS_ADC) 0xFFFD8000) // (ADC) Base Address -#define AT91C_BASE_PDC_SSC (AT91_CAST(AT91PS_PDC) 0xFFFD4100) // (PDC_SSC) Base Address -#define AT91C_BASE_SSC (AT91_CAST(AT91PS_SSC) 0xFFFD4000) // (SSC) Base Address -#define AT91C_BASE_PDC_US1 (AT91_CAST(AT91PS_PDC) 0xFFFC4100) // (PDC_US1) Base Address -#define AT91C_BASE_US1 (AT91_CAST(AT91PS_USART) 0xFFFC4000) // (US1) Base Address -#define AT91C_BASE_PDC_US0 (AT91_CAST(AT91PS_PDC) 0xFFFC0100) // (PDC_US0) Base Address -#define AT91C_BASE_US0 (AT91_CAST(AT91PS_USART) 0xFFFC0000) // (US0) Base Address -#define AT91C_BASE_TWI (AT91_CAST(AT91PS_TWI) 0xFFFB8000) // (TWI) Base Address -#define AT91C_BASE_TC0 (AT91_CAST(AT91PS_TC) 0xFFFA0000) // (TC0) Base Address -#define AT91C_BASE_TC1 (AT91_CAST(AT91PS_TC) 0xFFFA0040) // (TC1) Base Address -#define AT91C_BASE_TC2 (AT91_CAST(AT91PS_TC) 0xFFFA0080) // (TC2) Base Address -#define AT91C_BASE_TCB (AT91_CAST(AT91PS_TCB) 0xFFFA0000) // (TCB) Base Address -#define AT91C_BASE_PWMC_CH3 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC260) // (PWMC_CH3) Base Address -#define AT91C_BASE_PWMC_CH2 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC240) // (PWMC_CH2) Base Address -#define AT91C_BASE_PWMC_CH1 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC220) // (PWMC_CH1) Base Address -#define AT91C_BASE_PWMC_CH0 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC200) // (PWMC_CH0) Base Address -#define AT91C_BASE_PWMC (AT91_CAST(AT91PS_PWMC) 0xFFFCC000) // (PWMC) Base Address -#define AT91C_BASE_UDP (AT91_CAST(AT91PS_UDP) 0xFFFB0000) // (UDP) Base Address - -// ***************************************************************************** -// MEMORY MAPPING DEFINITIONS FOR AT91SAM7S64 -// ***************************************************************************** -// ISRAM -#define AT91C_ISRAM (0x00200000) // Internal SRAM base address -#define AT91C_ISRAM_SIZE (0x00004000) // Internal SRAM size in byte (16 Kbytes) -// IFLASH -#define AT91C_IFLASH (0x00100000) // Internal FLASH base address -#define AT91C_IFLASH_SIZE (0x00010000) // Internal FLASH size in byte (64 Kbytes) -#define AT91C_IFLASH_PAGE_SIZE (128) // Internal FLASH Page Size: 128 bytes -#define AT91C_IFLASH_LOCK_REGION_SIZE (4096) // Internal FLASH Lock Region Size: 4 Kbytes -#define AT91C_IFLASH_NB_OF_PAGES (512) // Internal FLASH Number of Pages: 512 bytes -#define AT91C_IFLASH_NB_OF_LOCK_BITS (16) // Internal FLASH Number of Lock Bits: 16 bytes - -#endif diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X128.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X128.h deleted file mode 100644 index 458b252..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X128.h +++ /dev/null @@ -1,2914 +0,0 @@ -// ---------------------------------------------------------------------------- -// ATMEL Microcontroller Software Support - ROUSSET - -// ---------------------------------------------------------------------------- -// Copyright (c) 2006, Atmel Corporation -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, -// this list of conditions and the disclaimer below. -// -// Atmel's name may not be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR -// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE -// DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// ---------------------------------------------------------------------------- -// File Name : AT91SAM7X128.h -// Object : AT91SAM7X128 definitions -// Generated : AT91 SW Application Group 07/07/2008 (16:15:23) -// -// CVS Reference : /AT91SAM7X128.pl/1.19/Wed Aug 30 14:09:08 2006// -// CVS Reference : /SYS_SAM7X.pl/1.3/Wed Feb 2 15:48:15 2005// -// CVS Reference : /MC_SAM7X.pl/1.2/Fri May 20 14:22:29 2005// -// CVS Reference : /PMC_SAM7X.pl/1.4/Tue Feb 8 14:00:19 2005// -// CVS Reference : /RSTC_SAM7X.pl/1.2/Wed Jul 13 15:25:17 2005// -// CVS Reference : /UDP_6ept.pl/1.1/Wed Aug 30 10:56:49 2006// -// CVS Reference : /PWM_SAM7X.pl/1.1/Tue May 10 12:38:54 2005// -// CVS Reference : /AIC_6075B.pl/1.3/Fri May 20 14:21:42 2005// -// CVS Reference : /PIO_6057A.pl/1.2/Thu Feb 3 10:29:42 2005// -// CVS Reference : /RTTC_6081A.pl/1.2/Thu Nov 4 13:57:22 2004// -// CVS Reference : /PITC_6079A.pl/1.2/Thu Nov 4 13:56:22 2004// -// CVS Reference : /WDTC_6080A.pl/1.3/Thu Nov 4 13:58:52 2004// -// CVS Reference : /VREG_6085B.pl/1.1/Tue Feb 1 16:40:38 2005// -// CVS Reference : /PDC_6074C.pl/1.2/Thu Feb 3 09:02:11 2005// -// CVS Reference : /DBGU_6059D.pl/1.1/Mon Jan 31 13:54:41 2005// -// CVS Reference : /SPI_6088D.pl/1.3/Fri May 20 14:23:02 2005// -// CVS Reference : /US_6089C.pl/1.1/Mon Jan 31 13:56:02 2005// -// CVS Reference : /SSC_6078B.pl/1.2/Wed Apr 16 08:28:18 2008// -// CVS Reference : /TWI_6061A.pl/1.2/Fri Oct 27 11:40:48 2006// -// CVS Reference : /TC_6082A.pl/1.7/Wed Mar 9 16:31:51 2005// -// CVS Reference : /CAN_6019B.pl/1.1/Mon Jan 31 13:54:30 2005// -// CVS Reference : /EMACB_6119A.pl/1.6/Wed Jul 13 15:25:00 2005// -// CVS Reference : /ADC_6051C.pl/1.1/Mon Jan 31 13:12:40 2005// -// ---------------------------------------------------------------------------- - -#ifndef AT91SAM7X128_H -#define AT91SAM7X128_H - -#ifndef __ASSEMBLY__ -typedef volatile unsigned int AT91_REG;// Hardware register definition -#define AT91_CAST(a) (a) -#else -#define AT91_CAST(a) -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR System Peripherals -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SYS { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register - AT91_REG Reserved2[45]; // - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved3[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved4[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register - AT91_REG Reserved5[54]; // - AT91_REG PIOA_PER; // PIO Enable Register - AT91_REG PIOA_PDR; // PIO Disable Register - AT91_REG PIOA_PSR; // PIO Status Register - AT91_REG Reserved6[1]; // - AT91_REG PIOA_OER; // Output Enable Register - AT91_REG PIOA_ODR; // Output Disable Registerr - AT91_REG PIOA_OSR; // Output Status Register - AT91_REG Reserved7[1]; // - AT91_REG PIOA_IFER; // Input Filter Enable Register - AT91_REG PIOA_IFDR; // Input Filter Disable Register - AT91_REG PIOA_IFSR; // Input Filter Status Register - AT91_REG Reserved8[1]; // - AT91_REG PIOA_SODR; // Set Output Data Register - AT91_REG PIOA_CODR; // Clear Output Data Register - AT91_REG PIOA_ODSR; // Output Data Status Register - AT91_REG PIOA_PDSR; // Pin Data Status Register - AT91_REG PIOA_IER; // Interrupt Enable Register - AT91_REG PIOA_IDR; // Interrupt Disable Register - AT91_REG PIOA_IMR; // Interrupt Mask Register - AT91_REG PIOA_ISR; // Interrupt Status Register - AT91_REG PIOA_MDER; // Multi-driver Enable Register - AT91_REG PIOA_MDDR; // Multi-driver Disable Register - AT91_REG PIOA_MDSR; // Multi-driver Status Register - AT91_REG Reserved9[1]; // - AT91_REG PIOA_PPUDR; // Pull-up Disable Register - AT91_REG PIOA_PPUER; // Pull-up Enable Register - AT91_REG PIOA_PPUSR; // Pull-up Status Register - AT91_REG Reserved10[1]; // - AT91_REG PIOA_ASR; // Select A Register - AT91_REG PIOA_BSR; // Select B Register - AT91_REG PIOA_ABSR; // AB Select Status Register - AT91_REG Reserved11[9]; // - AT91_REG PIOA_OWER; // Output Write Enable Register - AT91_REG PIOA_OWDR; // Output Write Disable Register - AT91_REG PIOA_OWSR; // Output Write Status Register - AT91_REG Reserved12[85]; // - AT91_REG PIOB_PER; // PIO Enable Register - AT91_REG PIOB_PDR; // PIO Disable Register - AT91_REG PIOB_PSR; // PIO Status Register - AT91_REG Reserved13[1]; // - AT91_REG PIOB_OER; // Output Enable Register - AT91_REG PIOB_ODR; // Output Disable Registerr - AT91_REG PIOB_OSR; // Output Status Register - AT91_REG Reserved14[1]; // - AT91_REG PIOB_IFER; // Input Filter Enable Register - AT91_REG PIOB_IFDR; // Input Filter Disable Register - AT91_REG PIOB_IFSR; // Input Filter Status Register - AT91_REG Reserved15[1]; // - AT91_REG PIOB_SODR; // Set Output Data Register - AT91_REG PIOB_CODR; // Clear Output Data Register - AT91_REG PIOB_ODSR; // Output Data Status Register - AT91_REG PIOB_PDSR; // Pin Data Status Register - AT91_REG PIOB_IER; // Interrupt Enable Register - AT91_REG PIOB_IDR; // Interrupt Disable Register - AT91_REG PIOB_IMR; // Interrupt Mask Register - AT91_REG PIOB_ISR; // Interrupt Status Register - AT91_REG PIOB_MDER; // Multi-driver Enable Register - AT91_REG PIOB_MDDR; // Multi-driver Disable Register - AT91_REG PIOB_MDSR; // Multi-driver Status Register - AT91_REG Reserved16[1]; // - AT91_REG PIOB_PPUDR; // Pull-up Disable Register - AT91_REG PIOB_PPUER; // Pull-up Enable Register - AT91_REG PIOB_PPUSR; // Pull-up Status Register - AT91_REG Reserved17[1]; // - AT91_REG PIOB_ASR; // Select A Register - AT91_REG PIOB_BSR; // Select B Register - AT91_REG PIOB_ABSR; // AB Select Status Register - AT91_REG Reserved18[9]; // - AT91_REG PIOB_OWER; // Output Write Enable Register - AT91_REG PIOB_OWDR; // Output Write Disable Register - AT91_REG PIOB_OWSR; // Output Write Status Register - AT91_REG Reserved19[341]; // - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved20[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved21[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved22[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved23[3]; // - AT91_REG PMC_PCKR[4]; // Programmable Clock Register - AT91_REG Reserved24[4]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register - AT91_REG Reserved25[36]; // - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register - AT91_REG Reserved26[5]; // - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register - AT91_REG Reserved27[5]; // - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_SYS, *AT91PS_SYS; -#else - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Advanced Interrupt Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_AIC { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register -} AT91S_AIC, *AT91PS_AIC; -#else -#define AIC_SMR (AT91_CAST(AT91_REG *) 0x00000000) // (AIC_SMR) Source Mode Register -#define AIC_SVR (AT91_CAST(AT91_REG *) 0x00000080) // (AIC_SVR) Source Vector Register -#define AIC_IVR (AT91_CAST(AT91_REG *) 0x00000100) // (AIC_IVR) IRQ Vector Register -#define AIC_FVR (AT91_CAST(AT91_REG *) 0x00000104) // (AIC_FVR) FIQ Vector Register -#define AIC_ISR (AT91_CAST(AT91_REG *) 0x00000108) // (AIC_ISR) Interrupt Status Register -#define AIC_IPR (AT91_CAST(AT91_REG *) 0x0000010C) // (AIC_IPR) Interrupt Pending Register -#define AIC_IMR (AT91_CAST(AT91_REG *) 0x00000110) // (AIC_IMR) Interrupt Mask Register -#define AIC_CISR (AT91_CAST(AT91_REG *) 0x00000114) // (AIC_CISR) Core Interrupt Status Register -#define AIC_IECR (AT91_CAST(AT91_REG *) 0x00000120) // (AIC_IECR) Interrupt Enable Command Register -#define AIC_IDCR (AT91_CAST(AT91_REG *) 0x00000124) // (AIC_IDCR) Interrupt Disable Command Register -#define AIC_ICCR (AT91_CAST(AT91_REG *) 0x00000128) // (AIC_ICCR) Interrupt Clear Command Register -#define AIC_ISCR (AT91_CAST(AT91_REG *) 0x0000012C) // (AIC_ISCR) Interrupt Set Command Register -#define AIC_EOICR (AT91_CAST(AT91_REG *) 0x00000130) // (AIC_EOICR) End of Interrupt Command Register -#define AIC_SPU (AT91_CAST(AT91_REG *) 0x00000134) // (AIC_SPU) Spurious Vector Register -#define AIC_DCR (AT91_CAST(AT91_REG *) 0x00000138) // (AIC_DCR) Debug Control Register (Protect) -#define AIC_FFER (AT91_CAST(AT91_REG *) 0x00000140) // (AIC_FFER) Fast Forcing Enable Register -#define AIC_FFDR (AT91_CAST(AT91_REG *) 0x00000144) // (AIC_FFDR) Fast Forcing Disable Register -#define AIC_FFSR (AT91_CAST(AT91_REG *) 0x00000148) // (AIC_FFSR) Fast Forcing Status Register - -#endif -// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- -#define AT91C_AIC_PRIOR (0x7 << 0) // (AIC) Priority Level -#define AT91C_AIC_PRIOR_LOWEST (0x0) // (AIC) Lowest priority level -#define AT91C_AIC_PRIOR_HIGHEST (0x7) // (AIC) Highest priority level -#define AT91C_AIC_SRCTYPE (0x3 << 5) // (AIC) Interrupt Source Type -#define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL (0x0 << 5) // (AIC) Internal Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL (0x0 << 5) // (AIC) External Sources Code Label Low-level Sensitive -#define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE (0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered -#define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE (0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered -#define AT91C_AIC_SRCTYPE_HIGH_LEVEL (0x2 << 5) // (AIC) Internal Or External Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_POSITIVE_EDGE (0x3 << 5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered -// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- -#define AT91C_AIC_NFIQ (0x1 << 0) // (AIC) NFIQ Status -#define AT91C_AIC_NIRQ (0x1 << 1) // (AIC) NIRQ Status -// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- -#define AT91C_AIC_DCR_PROT (0x1 << 0) // (AIC) Protection Mode -#define AT91C_AIC_DCR_GMSK (0x1 << 1) // (AIC) General Mask - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Peripheral DMA Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PDC { - AT91_REG PDC_RPR; // Receive Pointer Register - AT91_REG PDC_RCR; // Receive Counter Register - AT91_REG PDC_TPR; // Transmit Pointer Register - AT91_REG PDC_TCR; // Transmit Counter Register - AT91_REG PDC_RNPR; // Receive Next Pointer Register - AT91_REG PDC_RNCR; // Receive Next Counter Register - AT91_REG PDC_TNPR; // Transmit Next Pointer Register - AT91_REG PDC_TNCR; // Transmit Next Counter Register - AT91_REG PDC_PTCR; // PDC Transfer Control Register - AT91_REG PDC_PTSR; // PDC Transfer Status Register -} AT91S_PDC, *AT91PS_PDC; -#else -#define PDC_RPR (AT91_CAST(AT91_REG *) 0x00000000) // (PDC_RPR) Receive Pointer Register -#define PDC_RCR (AT91_CAST(AT91_REG *) 0x00000004) // (PDC_RCR) Receive Counter Register -#define PDC_TPR (AT91_CAST(AT91_REG *) 0x00000008) // (PDC_TPR) Transmit Pointer Register -#define PDC_TCR (AT91_CAST(AT91_REG *) 0x0000000C) // (PDC_TCR) Transmit Counter Register -#define PDC_RNPR (AT91_CAST(AT91_REG *) 0x00000010) // (PDC_RNPR) Receive Next Pointer Register -#define PDC_RNCR (AT91_CAST(AT91_REG *) 0x00000014) // (PDC_RNCR) Receive Next Counter Register -#define PDC_TNPR (AT91_CAST(AT91_REG *) 0x00000018) // (PDC_TNPR) Transmit Next Pointer Register -#define PDC_TNCR (AT91_CAST(AT91_REG *) 0x0000001C) // (PDC_TNCR) Transmit Next Counter Register -#define PDC_PTCR (AT91_CAST(AT91_REG *) 0x00000020) // (PDC_PTCR) PDC Transfer Control Register -#define PDC_PTSR (AT91_CAST(AT91_REG *) 0x00000024) // (PDC_PTSR) PDC Transfer Status Register - -#endif -// -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- -#define AT91C_PDC_RXTEN (0x1 << 0) // (PDC) Receiver Transfer Enable -#define AT91C_PDC_RXTDIS (0x1 << 1) // (PDC) Receiver Transfer Disable -#define AT91C_PDC_TXTEN (0x1 << 8) // (PDC) Transmitter Transfer Enable -#define AT91C_PDC_TXTDIS (0x1 << 9) // (PDC) Transmitter Transfer Disable -// -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Debug Unit -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_DBGU { - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved0[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved1[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register -} AT91S_DBGU, *AT91PS_DBGU; -#else -#define DBGU_CR (AT91_CAST(AT91_REG *) 0x00000000) // (DBGU_CR) Control Register -#define DBGU_MR (AT91_CAST(AT91_REG *) 0x00000004) // (DBGU_MR) Mode Register -#define DBGU_IER (AT91_CAST(AT91_REG *) 0x00000008) // (DBGU_IER) Interrupt Enable Register -#define DBGU_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (DBGU_IDR) Interrupt Disable Register -#define DBGU_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (DBGU_IMR) Interrupt Mask Register -#define DBGU_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (DBGU_CSR) Channel Status Register -#define DBGU_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (DBGU_RHR) Receiver Holding Register -#define DBGU_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (DBGU_THR) Transmitter Holding Register -#define DBGU_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (DBGU_BRGR) Baud Rate Generator Register -#define DBGU_CIDR (AT91_CAST(AT91_REG *) 0x00000040) // (DBGU_CIDR) Chip ID Register -#define DBGU_EXID (AT91_CAST(AT91_REG *) 0x00000044) // (DBGU_EXID) Chip ID Extension Register -#define DBGU_FNTR (AT91_CAST(AT91_REG *) 0x00000048) // (DBGU_FNTR) Force NTRST Register - -#endif -// -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_RSTRX (0x1 << 2) // (DBGU) Reset Receiver -#define AT91C_US_RSTTX (0x1 << 3) // (DBGU) Reset Transmitter -#define AT91C_US_RXEN (0x1 << 4) // (DBGU) Receiver Enable -#define AT91C_US_RXDIS (0x1 << 5) // (DBGU) Receiver Disable -#define AT91C_US_TXEN (0x1 << 6) // (DBGU) Transmitter Enable -#define AT91C_US_TXDIS (0x1 << 7) // (DBGU) Transmitter Disable -#define AT91C_US_RSTSTA (0x1 << 8) // (DBGU) Reset Status Bits -// -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_PAR (0x7 << 9) // (DBGU) Parity type -#define AT91C_US_PAR_EVEN (0x0 << 9) // (DBGU) Even Parity -#define AT91C_US_PAR_ODD (0x1 << 9) // (DBGU) Odd Parity -#define AT91C_US_PAR_SPACE (0x2 << 9) // (DBGU) Parity forced to 0 (Space) -#define AT91C_US_PAR_MARK (0x3 << 9) // (DBGU) Parity forced to 1 (Mark) -#define AT91C_US_PAR_NONE (0x4 << 9) // (DBGU) No Parity -#define AT91C_US_PAR_MULTI_DROP (0x6 << 9) // (DBGU) Multi-drop mode -#define AT91C_US_CHMODE (0x3 << 14) // (DBGU) Channel Mode -#define AT91C_US_CHMODE_NORMAL (0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART. -#define AT91C_US_CHMODE_AUTO (0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin. -#define AT91C_US_CHMODE_LOCAL (0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal. -#define AT91C_US_CHMODE_REMOTE (0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin. -// -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXRDY (0x1 << 0) // (DBGU) RXRDY Interrupt -#define AT91C_US_TXRDY (0x1 << 1) // (DBGU) TXRDY Interrupt -#define AT91C_US_ENDRX (0x1 << 3) // (DBGU) End of Receive Transfer Interrupt -#define AT91C_US_ENDTX (0x1 << 4) // (DBGU) End of Transmit Interrupt -#define AT91C_US_OVRE (0x1 << 5) // (DBGU) Overrun Interrupt -#define AT91C_US_FRAME (0x1 << 6) // (DBGU) Framing Error Interrupt -#define AT91C_US_PARE (0x1 << 7) // (DBGU) Parity Error Interrupt -#define AT91C_US_TXEMPTY (0x1 << 9) // (DBGU) TXEMPTY Interrupt -#define AT91C_US_TXBUFE (0x1 << 11) // (DBGU) TXBUFE Interrupt -#define AT91C_US_RXBUFF (0x1 << 12) // (DBGU) RXBUFF Interrupt -#define AT91C_US_COMM_TX (0x1 << 30) // (DBGU) COMM_TX Interrupt -#define AT91C_US_COMM_RX (0x1 << 31) // (DBGU) COMM_RX Interrupt -// -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register -------- -// -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register -------- -#define AT91C_US_FORCE_NTRST (0x1 << 0) // (DBGU) Force NTRST in JTAG - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Parallel Input Output Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PIO { - AT91_REG PIO_PER; // PIO Enable Register - AT91_REG PIO_PDR; // PIO Disable Register - AT91_REG PIO_PSR; // PIO Status Register - AT91_REG Reserved0[1]; // - AT91_REG PIO_OER; // Output Enable Register - AT91_REG PIO_ODR; // Output Disable Registerr - AT91_REG PIO_OSR; // Output Status Register - AT91_REG Reserved1[1]; // - AT91_REG PIO_IFER; // Input Filter Enable Register - AT91_REG PIO_IFDR; // Input Filter Disable Register - AT91_REG PIO_IFSR; // Input Filter Status Register - AT91_REG Reserved2[1]; // - AT91_REG PIO_SODR; // Set Output Data Register - AT91_REG PIO_CODR; // Clear Output Data Register - AT91_REG PIO_ODSR; // Output Data Status Register - AT91_REG PIO_PDSR; // Pin Data Status Register - AT91_REG PIO_IER; // Interrupt Enable Register - AT91_REG PIO_IDR; // Interrupt Disable Register - AT91_REG PIO_IMR; // Interrupt Mask Register - AT91_REG PIO_ISR; // Interrupt Status Register - AT91_REG PIO_MDER; // Multi-driver Enable Register - AT91_REG PIO_MDDR; // Multi-driver Disable Register - AT91_REG PIO_MDSR; // Multi-driver Status Register - AT91_REG Reserved3[1]; // - AT91_REG PIO_PPUDR; // Pull-up Disable Register - AT91_REG PIO_PPUER; // Pull-up Enable Register - AT91_REG PIO_PPUSR; // Pull-up Status Register - AT91_REG Reserved4[1]; // - AT91_REG PIO_ASR; // Select A Register - AT91_REG PIO_BSR; // Select B Register - AT91_REG PIO_ABSR; // AB Select Status Register - AT91_REG Reserved5[9]; // - AT91_REG PIO_OWER; // Output Write Enable Register - AT91_REG PIO_OWDR; // Output Write Disable Register - AT91_REG PIO_OWSR; // Output Write Status Register -} AT91S_PIO, *AT91PS_PIO; -#else -#define PIO_PER (AT91_CAST(AT91_REG *) 0x00000000) // (PIO_PER) PIO Enable Register -#define PIO_PDR (AT91_CAST(AT91_REG *) 0x00000004) // (PIO_PDR) PIO Disable Register -#define PIO_PSR (AT91_CAST(AT91_REG *) 0x00000008) // (PIO_PSR) PIO Status Register -#define PIO_OER (AT91_CAST(AT91_REG *) 0x00000010) // (PIO_OER) Output Enable Register -#define PIO_ODR (AT91_CAST(AT91_REG *) 0x00000014) // (PIO_ODR) Output Disable Registerr -#define PIO_OSR (AT91_CAST(AT91_REG *) 0x00000018) // (PIO_OSR) Output Status Register -#define PIO_IFER (AT91_CAST(AT91_REG *) 0x00000020) // (PIO_IFER) Input Filter Enable Register -#define PIO_IFDR (AT91_CAST(AT91_REG *) 0x00000024) // (PIO_IFDR) Input Filter Disable Register -#define PIO_IFSR (AT91_CAST(AT91_REG *) 0x00000028) // (PIO_IFSR) Input Filter Status Register -#define PIO_SODR (AT91_CAST(AT91_REG *) 0x00000030) // (PIO_SODR) Set Output Data Register -#define PIO_CODR (AT91_CAST(AT91_REG *) 0x00000034) // (PIO_CODR) Clear Output Data Register -#define PIO_ODSR (AT91_CAST(AT91_REG *) 0x00000038) // (PIO_ODSR) Output Data Status Register -#define PIO_PDSR (AT91_CAST(AT91_REG *) 0x0000003C) // (PIO_PDSR) Pin Data Status Register -#define PIO_IER (AT91_CAST(AT91_REG *) 0x00000040) // (PIO_IER) Interrupt Enable Register -#define PIO_IDR (AT91_CAST(AT91_REG *) 0x00000044) // (PIO_IDR) Interrupt Disable Register -#define PIO_IMR (AT91_CAST(AT91_REG *) 0x00000048) // (PIO_IMR) Interrupt Mask Register -#define PIO_ISR (AT91_CAST(AT91_REG *) 0x0000004C) // (PIO_ISR) Interrupt Status Register -#define PIO_MDER (AT91_CAST(AT91_REG *) 0x00000050) // (PIO_MDER) Multi-driver Enable Register -#define PIO_MDDR (AT91_CAST(AT91_REG *) 0x00000054) // (PIO_MDDR) Multi-driver Disable Register -#define PIO_MDSR (AT91_CAST(AT91_REG *) 0x00000058) // (PIO_MDSR) Multi-driver Status Register -#define PIO_PPUDR (AT91_CAST(AT91_REG *) 0x00000060) // (PIO_PPUDR) Pull-up Disable Register -#define PIO_PPUER (AT91_CAST(AT91_REG *) 0x00000064) // (PIO_PPUER) Pull-up Enable Register -#define PIO_PPUSR (AT91_CAST(AT91_REG *) 0x00000068) // (PIO_PPUSR) Pull-up Status Register -#define PIO_ASR (AT91_CAST(AT91_REG *) 0x00000070) // (PIO_ASR) Select A Register -#define PIO_BSR (AT91_CAST(AT91_REG *) 0x00000074) // (PIO_BSR) Select B Register -#define PIO_ABSR (AT91_CAST(AT91_REG *) 0x00000078) // (PIO_ABSR) AB Select Status Register -#define PIO_OWER (AT91_CAST(AT91_REG *) 0x000000A0) // (PIO_OWER) Output Write Enable Register -#define PIO_OWDR (AT91_CAST(AT91_REG *) 0x000000A4) // (PIO_OWDR) Output Write Disable Register -#define PIO_OWSR (AT91_CAST(AT91_REG *) 0x000000A8) // (PIO_OWSR) Output Write Status Register - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Clock Generator Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CKGR { - AT91_REG CKGR_MOR; // Main Oscillator Register - AT91_REG CKGR_MCFR; // Main Clock Frequency Register - AT91_REG Reserved0[1]; // - AT91_REG CKGR_PLLR; // PLL Register -} AT91S_CKGR, *AT91PS_CKGR; -#else -#define CKGR_MOR (AT91_CAST(AT91_REG *) 0x00000000) // (CKGR_MOR) Main Oscillator Register -#define CKGR_MCFR (AT91_CAST(AT91_REG *) 0x00000004) // (CKGR_MCFR) Main Clock Frequency Register -#define CKGR_PLLR (AT91_CAST(AT91_REG *) 0x0000000C) // (CKGR_PLLR) PLL Register - -#endif -// -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- -#define AT91C_CKGR_MOSCEN (0x1 << 0) // (CKGR) Main Oscillator Enable -#define AT91C_CKGR_OSCBYPASS (0x1 << 1) // (CKGR) Main Oscillator Bypass -#define AT91C_CKGR_OSCOUNT (0xFF << 8) // (CKGR) Main Oscillator Start-up Time -// -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- -#define AT91C_CKGR_MAINF (0xFFFF << 0) // (CKGR) Main Clock Frequency -#define AT91C_CKGR_MAINRDY (0x1 << 16) // (CKGR) Main Clock Ready -// -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register -------- -#define AT91C_CKGR_DIV (0xFF << 0) // (CKGR) Divider Selected -#define AT91C_CKGR_DIV_0 (0x0) // (CKGR) Divider output is 0 -#define AT91C_CKGR_DIV_BYPASS (0x1) // (CKGR) Divider is bypassed -#define AT91C_CKGR_PLLCOUNT (0x3F << 8) // (CKGR) PLL Counter -#define AT91C_CKGR_OUT (0x3 << 14) // (CKGR) PLL Output Frequency Range -#define AT91C_CKGR_OUT_0 (0x0 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_1 (0x1 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_2 (0x2 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_3 (0x3 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_MUL (0x7FF << 16) // (CKGR) PLL Multiplier -#define AT91C_CKGR_USBDIV (0x3 << 28) // (CKGR) Divider for USB Clocks -#define AT91C_CKGR_USBDIV_0 (0x0 << 28) // (CKGR) Divider output is PLL clock output -#define AT91C_CKGR_USBDIV_1 (0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2 -#define AT91C_CKGR_USBDIV_2 (0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Power Management Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PMC { - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved0[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved1[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved2[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved3[3]; // - AT91_REG PMC_PCKR[4]; // Programmable Clock Register - AT91_REG Reserved4[4]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register -} AT91S_PMC, *AT91PS_PMC; -#else -#define PMC_SCER (AT91_CAST(AT91_REG *) 0x00000000) // (PMC_SCER) System Clock Enable Register -#define PMC_SCDR (AT91_CAST(AT91_REG *) 0x00000004) // (PMC_SCDR) System Clock Disable Register -#define PMC_SCSR (AT91_CAST(AT91_REG *) 0x00000008) // (PMC_SCSR) System Clock Status Register -#define PMC_PCER (AT91_CAST(AT91_REG *) 0x00000010) // (PMC_PCER) Peripheral Clock Enable Register -#define PMC_PCDR (AT91_CAST(AT91_REG *) 0x00000014) // (PMC_PCDR) Peripheral Clock Disable Register -#define PMC_PCSR (AT91_CAST(AT91_REG *) 0x00000018) // (PMC_PCSR) Peripheral Clock Status Register -#define PMC_MCKR (AT91_CAST(AT91_REG *) 0x00000030) // (PMC_MCKR) Master Clock Register -#define PMC_PCKR (AT91_CAST(AT91_REG *) 0x00000040) // (PMC_PCKR) Programmable Clock Register -#define PMC_IER (AT91_CAST(AT91_REG *) 0x00000060) // (PMC_IER) Interrupt Enable Register -#define PMC_IDR (AT91_CAST(AT91_REG *) 0x00000064) // (PMC_IDR) Interrupt Disable Register -#define PMC_SR (AT91_CAST(AT91_REG *) 0x00000068) // (PMC_SR) Status Register -#define PMC_IMR (AT91_CAST(AT91_REG *) 0x0000006C) // (PMC_IMR) Interrupt Mask Register - -#endif -// -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register -------- -#define AT91C_PMC_PCK (0x1 << 0) // (PMC) Processor Clock -#define AT91C_PMC_UDP (0x1 << 7) // (PMC) USB Device Port Clock -#define AT91C_PMC_PCK0 (0x1 << 8) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK1 (0x1 << 9) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK2 (0x1 << 10) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK3 (0x1 << 11) // (PMC) Programmable Clock Output -// -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register -------- -// -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------- -// -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register -------- -// -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register -------- -// -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register -------- -// -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register -------- -#define AT91C_PMC_CSS (0x3 << 0) // (PMC) Programmable Clock Selection -#define AT91C_PMC_CSS_SLOW_CLK (0x0) // (PMC) Slow Clock is selected -#define AT91C_PMC_CSS_MAIN_CLK (0x1) // (PMC) Main Clock is selected -#define AT91C_PMC_CSS_PLL_CLK (0x3) // (PMC) Clock from PLL is selected -#define AT91C_PMC_PRES (0x7 << 2) // (PMC) Programmable Clock Prescaler -#define AT91C_PMC_PRES_CLK (0x0 << 2) // (PMC) Selected clock -#define AT91C_PMC_PRES_CLK_2 (0x1 << 2) // (PMC) Selected clock divided by 2 -#define AT91C_PMC_PRES_CLK_4 (0x2 << 2) // (PMC) Selected clock divided by 4 -#define AT91C_PMC_PRES_CLK_8 (0x3 << 2) // (PMC) Selected clock divided by 8 -#define AT91C_PMC_PRES_CLK_16 (0x4 << 2) // (PMC) Selected clock divided by 16 -#define AT91C_PMC_PRES_CLK_32 (0x5 << 2) // (PMC) Selected clock divided by 32 -#define AT91C_PMC_PRES_CLK_64 (0x6 << 2) // (PMC) Selected clock divided by 64 -// -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register -------- -// -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------- -#define AT91C_PMC_MOSCS (0x1 << 0) // (PMC) MOSC Status/Enable/Disable/Mask -#define AT91C_PMC_LOCK (0x1 << 2) // (PMC) PLL Status/Enable/Disable/Mask -#define AT91C_PMC_MCKRDY (0x1 << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK0RDY (0x1 << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK1RDY (0x1 << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK2RDY (0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK3RDY (0x1 << 11) // (PMC) PCK3_RDY Status/Enable/Disable/Mask -// -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register -------- -// -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register -------- -// -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Reset Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RSTC { - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register -} AT91S_RSTC, *AT91PS_RSTC; -#else -#define RSTC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (RSTC_RCR) Reset Control Register -#define RSTC_RSR (AT91_CAST(AT91_REG *) 0x00000004) // (RSTC_RSR) Reset Status Register -#define RSTC_RMR (AT91_CAST(AT91_REG *) 0x00000008) // (RSTC_RMR) Reset Mode Register - -#endif -// -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register -------- -#define AT91C_RSTC_PROCRST (0x1 << 0) // (RSTC) Processor Reset -#define AT91C_RSTC_PERRST (0x1 << 2) // (RSTC) Peripheral Reset -#define AT91C_RSTC_EXTRST (0x1 << 3) // (RSTC) External Reset -#define AT91C_RSTC_KEY (0xFF << 24) // (RSTC) Password -// -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register -------- -#define AT91C_RSTC_URSTS (0x1 << 0) // (RSTC) User Reset Status -#define AT91C_RSTC_BODSTS (0x1 << 1) // (RSTC) Brownout Detection Status -#define AT91C_RSTC_RSTTYP (0x7 << 8) // (RSTC) Reset Type -#define AT91C_RSTC_RSTTYP_POWERUP (0x0 << 8) // (RSTC) Power-up Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WAKEUP (0x1 << 8) // (RSTC) WakeUp Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WATCHDOG (0x2 << 8) // (RSTC) Watchdog Reset. Watchdog overflow occured. -#define AT91C_RSTC_RSTTYP_SOFTWARE (0x3 << 8) // (RSTC) Software Reset. Processor reset required by the software. -#define AT91C_RSTC_RSTTYP_USER (0x4 << 8) // (RSTC) User Reset. NRST pin detected low. -#define AT91C_RSTC_RSTTYP_BROWNOUT (0x5 << 8) // (RSTC) Brownout Reset occured. -#define AT91C_RSTC_NRSTL (0x1 << 16) // (RSTC) NRST pin level -#define AT91C_RSTC_SRCMP (0x1 << 17) // (RSTC) Software Reset Command in Progress. -// -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register -------- -#define AT91C_RSTC_URSTEN (0x1 << 0) // (RSTC) User Reset Enable -#define AT91C_RSTC_URSTIEN (0x1 << 4) // (RSTC) User Reset Interrupt Enable -#define AT91C_RSTC_ERSTL (0xF << 8) // (RSTC) User Reset Length -#define AT91C_RSTC_BODIEN (0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Real Time Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RTTC { - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register -} AT91S_RTTC, *AT91PS_RTTC; -#else -#define RTTC_RTMR (AT91_CAST(AT91_REG *) 0x00000000) // (RTTC_RTMR) Real-time Mode Register -#define RTTC_RTAR (AT91_CAST(AT91_REG *) 0x00000004) // (RTTC_RTAR) Real-time Alarm Register -#define RTTC_RTVR (AT91_CAST(AT91_REG *) 0x00000008) // (RTTC_RTVR) Real-time Value Register -#define RTTC_RTSR (AT91_CAST(AT91_REG *) 0x0000000C) // (RTTC_RTSR) Real-time Status Register - -#endif -// -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register -------- -#define AT91C_RTTC_RTPRES (0xFFFF << 0) // (RTTC) Real-time Timer Prescaler Value -#define AT91C_RTTC_ALMIEN (0x1 << 16) // (RTTC) Alarm Interrupt Enable -#define AT91C_RTTC_RTTINCIEN (0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable -#define AT91C_RTTC_RTTRST (0x1 << 18) // (RTTC) Real Time Timer Restart -// -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register -------- -#define AT91C_RTTC_ALMV (0x0 << 0) // (RTTC) Alarm Value -// -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register -------- -#define AT91C_RTTC_CRTV (0x0 << 0) // (RTTC) Current Real-time Value -// -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register -------- -#define AT91C_RTTC_ALMS (0x1 << 0) // (RTTC) Real-time Alarm Status -#define AT91C_RTTC_RTTINC (0x1 << 1) // (RTTC) Real-time Timer Increment - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Periodic Interval Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PITC { - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register -} AT91S_PITC, *AT91PS_PITC; -#else -#define PITC_PIMR (AT91_CAST(AT91_REG *) 0x00000000) // (PITC_PIMR) Period Interval Mode Register -#define PITC_PISR (AT91_CAST(AT91_REG *) 0x00000004) // (PITC_PISR) Period Interval Status Register -#define PITC_PIVR (AT91_CAST(AT91_REG *) 0x00000008) // (PITC_PIVR) Period Interval Value Register -#define PITC_PIIR (AT91_CAST(AT91_REG *) 0x0000000C) // (PITC_PIIR) Period Interval Image Register - -#endif -// -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register -------- -#define AT91C_PITC_PIV (0xFFFFF << 0) // (PITC) Periodic Interval Value -#define AT91C_PITC_PITEN (0x1 << 24) // (PITC) Periodic Interval Timer Enabled -#define AT91C_PITC_PITIEN (0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable -// -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register -------- -#define AT91C_PITC_PITS (0x1 << 0) // (PITC) Periodic Interval Timer Status -// -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register -------- -#define AT91C_PITC_CPIV (0xFFFFF << 0) // (PITC) Current Periodic Interval Value -#define AT91C_PITC_PICNT (0xFFF << 20) // (PITC) Periodic Interval Counter -// -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Watchdog Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_WDTC { - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register -} AT91S_WDTC, *AT91PS_WDTC; -#else -#define WDTC_WDCR (AT91_CAST(AT91_REG *) 0x00000000) // (WDTC_WDCR) Watchdog Control Register -#define WDTC_WDMR (AT91_CAST(AT91_REG *) 0x00000004) // (WDTC_WDMR) Watchdog Mode Register -#define WDTC_WDSR (AT91_CAST(AT91_REG *) 0x00000008) // (WDTC_WDSR) Watchdog Status Register - -#endif -// -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register -------- -#define AT91C_WDTC_WDRSTT (0x1 << 0) // (WDTC) Watchdog Restart -#define AT91C_WDTC_KEY (0xFF << 24) // (WDTC) Watchdog KEY Password -// -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register -------- -#define AT91C_WDTC_WDV (0xFFF << 0) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDFIEN (0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable -#define AT91C_WDTC_WDRSTEN (0x1 << 13) // (WDTC) Watchdog Reset Enable -#define AT91C_WDTC_WDRPROC (0x1 << 14) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDDIS (0x1 << 15) // (WDTC) Watchdog Disable -#define AT91C_WDTC_WDD (0xFFF << 16) // (WDTC) Watchdog Delta Value -#define AT91C_WDTC_WDDBGHLT (0x1 << 28) // (WDTC) Watchdog Debug Halt -#define AT91C_WDTC_WDIDLEHLT (0x1 << 29) // (WDTC) Watchdog Idle Halt -// -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register -------- -#define AT91C_WDTC_WDUNF (0x1 << 0) // (WDTC) Watchdog Underflow -#define AT91C_WDTC_WDERR (0x1 << 1) // (WDTC) Watchdog Error - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Voltage Regulator Mode Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_VREG { - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_VREG, *AT91PS_VREG; -#else -#define VREG_MR (AT91_CAST(AT91_REG *) 0x00000000) // (VREG_MR) Voltage Regulator Mode Register - -#endif -// -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register -------- -#define AT91C_VREG_PSTDBY (0x1 << 0) // (VREG) Voltage Regulator Power Standby Mode - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Memory Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_MC { - AT91_REG MC_RCR; // MC Remap Control Register - AT91_REG MC_ASR; // MC Abort Status Register - AT91_REG MC_AASR; // MC Abort Address Status Register - AT91_REG Reserved0[21]; // - AT91_REG MC_FMR; // MC Flash Mode Register - AT91_REG MC_FCR; // MC Flash Command Register - AT91_REG MC_FSR; // MC Flash Status Register -} AT91S_MC, *AT91PS_MC; -#else -#define MC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (MC_RCR) MC Remap Control Register -#define MC_ASR (AT91_CAST(AT91_REG *) 0x00000004) // (MC_ASR) MC Abort Status Register -#define MC_AASR (AT91_CAST(AT91_REG *) 0x00000008) // (MC_AASR) MC Abort Address Status Register -#define MC_FMR (AT91_CAST(AT91_REG *) 0x00000060) // (MC_FMR) MC Flash Mode Register -#define MC_FCR (AT91_CAST(AT91_REG *) 0x00000064) // (MC_FCR) MC Flash Command Register -#define MC_FSR (AT91_CAST(AT91_REG *) 0x00000068) // (MC_FSR) MC Flash Status Register - -#endif -// -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register -------- -#define AT91C_MC_RCB (0x1 << 0) // (MC) Remap Command Bit -// -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register -------- -#define AT91C_MC_UNDADD (0x1 << 0) // (MC) Undefined Addess Abort Status -#define AT91C_MC_MISADD (0x1 << 1) // (MC) Misaligned Addess Abort Status -#define AT91C_MC_ABTSZ (0x3 << 8) // (MC) Abort Size Status -#define AT91C_MC_ABTSZ_BYTE (0x0 << 8) // (MC) Byte -#define AT91C_MC_ABTSZ_HWORD (0x1 << 8) // (MC) Half-word -#define AT91C_MC_ABTSZ_WORD (0x2 << 8) // (MC) Word -#define AT91C_MC_ABTTYP (0x3 << 10) // (MC) Abort Type Status -#define AT91C_MC_ABTTYP_DATAR (0x0 << 10) // (MC) Data Read -#define AT91C_MC_ABTTYP_DATAW (0x1 << 10) // (MC) Data Write -#define AT91C_MC_ABTTYP_FETCH (0x2 << 10) // (MC) Code Fetch -#define AT91C_MC_MST0 (0x1 << 16) // (MC) Master 0 Abort Source -#define AT91C_MC_MST1 (0x1 << 17) // (MC) Master 1 Abort Source -#define AT91C_MC_SVMST0 (0x1 << 24) // (MC) Saved Master 0 Abort Source -#define AT91C_MC_SVMST1 (0x1 << 25) // (MC) Saved Master 1 Abort Source -// -------- MC_FMR : (MC Offset: 0x60) MC Flash Mode Register -------- -#define AT91C_MC_FRDY (0x1 << 0) // (MC) Flash Ready -#define AT91C_MC_LOCKE (0x1 << 2) // (MC) Lock Error -#define AT91C_MC_PROGE (0x1 << 3) // (MC) Programming Error -#define AT91C_MC_NEBP (0x1 << 7) // (MC) No Erase Before Programming -#define AT91C_MC_FWS (0x3 << 8) // (MC) Flash Wait State -#define AT91C_MC_FWS_0FWS (0x0 << 8) // (MC) 1 cycle for Read, 2 for Write operations -#define AT91C_MC_FWS_1FWS (0x1 << 8) // (MC) 2 cycles for Read, 3 for Write operations -#define AT91C_MC_FWS_2FWS (0x2 << 8) // (MC) 3 cycles for Read, 4 for Write operations -#define AT91C_MC_FWS_3FWS (0x3 << 8) // (MC) 4 cycles for Read, 4 for Write operations -#define AT91C_MC_FMCN (0xFF << 16) // (MC) Flash Microsecond Cycle Number -// -------- MC_FCR : (MC Offset: 0x64) MC Flash Command Register -------- -#define AT91C_MC_FCMD (0xF << 0) // (MC) Flash Command -#define AT91C_MC_FCMD_START_PROG (0x1) // (MC) Starts the programming of th epage specified by PAGEN. -#define AT91C_MC_FCMD_LOCK (0x2) // (MC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_PROG_AND_LOCK (0x3) // (MC) The lock sequence automatically happens after the programming sequence is completed. -#define AT91C_MC_FCMD_UNLOCK (0x4) // (MC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_ERASE_ALL (0x8) // (MC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled. -#define AT91C_MC_FCMD_SET_GP_NVM (0xB) // (MC) Set General Purpose NVM bits. -#define AT91C_MC_FCMD_CLR_GP_NVM (0xD) // (MC) Clear General Purpose NVM bits. -#define AT91C_MC_FCMD_SET_SECURITY (0xF) // (MC) Set Security Bit. -#define AT91C_MC_PAGEN (0x3FF << 8) // (MC) Page Number -#define AT91C_MC_KEY (0xFF << 24) // (MC) Writing Protect Key -// -------- MC_FSR : (MC Offset: 0x68) MC Flash Command Register -------- -#define AT91C_MC_SECURITY (0x1 << 4) // (MC) Security Bit Status -#define AT91C_MC_GPNVM0 (0x1 << 8) // (MC) Sector 0 Lock Status -#define AT91C_MC_GPNVM1 (0x1 << 9) // (MC) Sector 1 Lock Status -#define AT91C_MC_GPNVM2 (0x1 << 10) // (MC) Sector 2 Lock Status -#define AT91C_MC_GPNVM3 (0x1 << 11) // (MC) Sector 3 Lock Status -#define AT91C_MC_GPNVM4 (0x1 << 12) // (MC) Sector 4 Lock Status -#define AT91C_MC_GPNVM5 (0x1 << 13) // (MC) Sector 5 Lock Status -#define AT91C_MC_GPNVM6 (0x1 << 14) // (MC) Sector 6 Lock Status -#define AT91C_MC_GPNVM7 (0x1 << 15) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS0 (0x1 << 16) // (MC) Sector 0 Lock Status -#define AT91C_MC_LOCKS1 (0x1 << 17) // (MC) Sector 1 Lock Status -#define AT91C_MC_LOCKS2 (0x1 << 18) // (MC) Sector 2 Lock Status -#define AT91C_MC_LOCKS3 (0x1 << 19) // (MC) Sector 3 Lock Status -#define AT91C_MC_LOCKS4 (0x1 << 20) // (MC) Sector 4 Lock Status -#define AT91C_MC_LOCKS5 (0x1 << 21) // (MC) Sector 5 Lock Status -#define AT91C_MC_LOCKS6 (0x1 << 22) // (MC) Sector 6 Lock Status -#define AT91C_MC_LOCKS7 (0x1 << 23) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS8 (0x1 << 24) // (MC) Sector 8 Lock Status -#define AT91C_MC_LOCKS9 (0x1 << 25) // (MC) Sector 9 Lock Status -#define AT91C_MC_LOCKS10 (0x1 << 26) // (MC) Sector 10 Lock Status -#define AT91C_MC_LOCKS11 (0x1 << 27) // (MC) Sector 11 Lock Status -#define AT91C_MC_LOCKS12 (0x1 << 28) // (MC) Sector 12 Lock Status -#define AT91C_MC_LOCKS13 (0x1 << 29) // (MC) Sector 13 Lock Status -#define AT91C_MC_LOCKS14 (0x1 << 30) // (MC) Sector 14 Lock Status -#define AT91C_MC_LOCKS15 (0x1 << 31) // (MC) Sector 15 Lock Status - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Serial Parallel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SPI { - AT91_REG SPI_CR; // Control Register - AT91_REG SPI_MR; // Mode Register - AT91_REG SPI_RDR; // Receive Data Register - AT91_REG SPI_TDR; // Transmit Data Register - AT91_REG SPI_SR; // Status Register - AT91_REG SPI_IER; // Interrupt Enable Register - AT91_REG SPI_IDR; // Interrupt Disable Register - AT91_REG SPI_IMR; // Interrupt Mask Register - AT91_REG Reserved0[4]; // - AT91_REG SPI_CSR[4]; // Chip Select Register - AT91_REG Reserved1[48]; // - AT91_REG SPI_RPR; // Receive Pointer Register - AT91_REG SPI_RCR; // Receive Counter Register - AT91_REG SPI_TPR; // Transmit Pointer Register - AT91_REG SPI_TCR; // Transmit Counter Register - AT91_REG SPI_RNPR; // Receive Next Pointer Register - AT91_REG SPI_RNCR; // Receive Next Counter Register - AT91_REG SPI_TNPR; // Transmit Next Pointer Register - AT91_REG SPI_TNCR; // Transmit Next Counter Register - AT91_REG SPI_PTCR; // PDC Transfer Control Register - AT91_REG SPI_PTSR; // PDC Transfer Status Register -} AT91S_SPI, *AT91PS_SPI; -#else -#define SPI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SPI_CR) Control Register -#define SPI_MR (AT91_CAST(AT91_REG *) 0x00000004) // (SPI_MR) Mode Register -#define SPI_RDR (AT91_CAST(AT91_REG *) 0x00000008) // (SPI_RDR) Receive Data Register -#define SPI_TDR (AT91_CAST(AT91_REG *) 0x0000000C) // (SPI_TDR) Transmit Data Register -#define SPI_SR (AT91_CAST(AT91_REG *) 0x00000010) // (SPI_SR) Status Register -#define SPI_IER (AT91_CAST(AT91_REG *) 0x00000014) // (SPI_IER) Interrupt Enable Register -#define SPI_IDR (AT91_CAST(AT91_REG *) 0x00000018) // (SPI_IDR) Interrupt Disable Register -#define SPI_IMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SPI_IMR) Interrupt Mask Register -#define SPI_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (SPI_CSR) Chip Select Register - -#endif -// -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- -#define AT91C_SPI_SPIEN (0x1 << 0) // (SPI) SPI Enable -#define AT91C_SPI_SPIDIS (0x1 << 1) // (SPI) SPI Disable -#define AT91C_SPI_SWRST (0x1 << 7) // (SPI) SPI Software reset -#define AT91C_SPI_LASTXFER (0x1 << 24) // (SPI) SPI Last Transfer -// -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- -#define AT91C_SPI_MSTR (0x1 << 0) // (SPI) Master/Slave Mode -#define AT91C_SPI_PS (0x1 << 1) // (SPI) Peripheral Select -#define AT91C_SPI_PS_FIXED (0x0 << 1) // (SPI) Fixed Peripheral Select -#define AT91C_SPI_PS_VARIABLE (0x1 << 1) // (SPI) Variable Peripheral Select -#define AT91C_SPI_PCSDEC (0x1 << 2) // (SPI) Chip Select Decode -#define AT91C_SPI_FDIV (0x1 << 3) // (SPI) Clock Selection -#define AT91C_SPI_MODFDIS (0x1 << 4) // (SPI) Mode Fault Detection -#define AT91C_SPI_LLB (0x1 << 7) // (SPI) Clock Selection -#define AT91C_SPI_PCS (0xF << 16) // (SPI) Peripheral Chip Select -#define AT91C_SPI_DLYBCS (0xFF << 24) // (SPI) Delay Between Chip Selects -// -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- -#define AT91C_SPI_RD (0xFFFF << 0) // (SPI) Receive Data -#define AT91C_SPI_RPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- -#define AT91C_SPI_TD (0xFFFF << 0) // (SPI) Transmit Data -#define AT91C_SPI_TPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- -#define AT91C_SPI_RDRF (0x1 << 0) // (SPI) Receive Data Register Full -#define AT91C_SPI_TDRE (0x1 << 1) // (SPI) Transmit Data Register Empty -#define AT91C_SPI_MODF (0x1 << 2) // (SPI) Mode Fault Error -#define AT91C_SPI_OVRES (0x1 << 3) // (SPI) Overrun Error Status -#define AT91C_SPI_ENDRX (0x1 << 4) // (SPI) End of Receiver Transfer -#define AT91C_SPI_ENDTX (0x1 << 5) // (SPI) End of Receiver Transfer -#define AT91C_SPI_RXBUFF (0x1 << 6) // (SPI) RXBUFF Interrupt -#define AT91C_SPI_TXBUFE (0x1 << 7) // (SPI) TXBUFE Interrupt -#define AT91C_SPI_NSSR (0x1 << 8) // (SPI) NSSR Interrupt -#define AT91C_SPI_TXEMPTY (0x1 << 9) // (SPI) TXEMPTY Interrupt -#define AT91C_SPI_SPIENS (0x1 << 16) // (SPI) Enable Status -// -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- -// -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- -// -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- -// -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- -#define AT91C_SPI_CPOL (0x1 << 0) // (SPI) Clock Polarity -#define AT91C_SPI_NCPHA (0x1 << 1) // (SPI) Clock Phase -#define AT91C_SPI_CSAAT (0x1 << 3) // (SPI) Chip Select Active After Transfer -#define AT91C_SPI_BITS (0xF << 4) // (SPI) Bits Per Transfer -#define AT91C_SPI_BITS_8 (0x0 << 4) // (SPI) 8 Bits Per transfer -#define AT91C_SPI_BITS_9 (0x1 << 4) // (SPI) 9 Bits Per transfer -#define AT91C_SPI_BITS_10 (0x2 << 4) // (SPI) 10 Bits Per transfer -#define AT91C_SPI_BITS_11 (0x3 << 4) // (SPI) 11 Bits Per transfer -#define AT91C_SPI_BITS_12 (0x4 << 4) // (SPI) 12 Bits Per transfer -#define AT91C_SPI_BITS_13 (0x5 << 4) // (SPI) 13 Bits Per transfer -#define AT91C_SPI_BITS_14 (0x6 << 4) // (SPI) 14 Bits Per transfer -#define AT91C_SPI_BITS_15 (0x7 << 4) // (SPI) 15 Bits Per transfer -#define AT91C_SPI_BITS_16 (0x8 << 4) // (SPI) 16 Bits Per transfer -#define AT91C_SPI_SCBR (0xFF << 8) // (SPI) Serial Clock Baud Rate -#define AT91C_SPI_DLYBS (0xFF << 16) // (SPI) Delay Before SPCK -#define AT91C_SPI_DLYBCT (0xFF << 24) // (SPI) Delay Between Consecutive Transfers - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Usart -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_USART { - AT91_REG US_CR; // Control Register - AT91_REG US_MR; // Mode Register - AT91_REG US_IER; // Interrupt Enable Register - AT91_REG US_IDR; // Interrupt Disable Register - AT91_REG US_IMR; // Interrupt Mask Register - AT91_REG US_CSR; // Channel Status Register - AT91_REG US_RHR; // Receiver Holding Register - AT91_REG US_THR; // Transmitter Holding Register - AT91_REG US_BRGR; // Baud Rate Generator Register - AT91_REG US_RTOR; // Receiver Time-out Register - AT91_REG US_TTGR; // Transmitter Time-guard Register - AT91_REG Reserved0[5]; // - AT91_REG US_FIDI; // FI_DI_Ratio Register - AT91_REG US_NER; // Nb Errors Register - AT91_REG Reserved1[1]; // - AT91_REG US_IF; // IRDA_FILTER Register - AT91_REG Reserved2[44]; // - AT91_REG US_RPR; // Receive Pointer Register - AT91_REG US_RCR; // Receive Counter Register - AT91_REG US_TPR; // Transmit Pointer Register - AT91_REG US_TCR; // Transmit Counter Register - AT91_REG US_RNPR; // Receive Next Pointer Register - AT91_REG US_RNCR; // Receive Next Counter Register - AT91_REG US_TNPR; // Transmit Next Pointer Register - AT91_REG US_TNCR; // Transmit Next Counter Register - AT91_REG US_PTCR; // PDC Transfer Control Register - AT91_REG US_PTSR; // PDC Transfer Status Register -} AT91S_USART, *AT91PS_USART; -#else -#define US_CR (AT91_CAST(AT91_REG *) 0x00000000) // (US_CR) Control Register -#define US_MR (AT91_CAST(AT91_REG *) 0x00000004) // (US_MR) Mode Register -#define US_IER (AT91_CAST(AT91_REG *) 0x00000008) // (US_IER) Interrupt Enable Register -#define US_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (US_IDR) Interrupt Disable Register -#define US_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (US_IMR) Interrupt Mask Register -#define US_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (US_CSR) Channel Status Register -#define US_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (US_RHR) Receiver Holding Register -#define US_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (US_THR) Transmitter Holding Register -#define US_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (US_BRGR) Baud Rate Generator Register -#define US_RTOR (AT91_CAST(AT91_REG *) 0x00000024) // (US_RTOR) Receiver Time-out Register -#define US_TTGR (AT91_CAST(AT91_REG *) 0x00000028) // (US_TTGR) Transmitter Time-guard Register -#define US_FIDI (AT91_CAST(AT91_REG *) 0x00000040) // (US_FIDI) FI_DI_Ratio Register -#define US_NER (AT91_CAST(AT91_REG *) 0x00000044) // (US_NER) Nb Errors Register -#define US_IF (AT91_CAST(AT91_REG *) 0x0000004C) // (US_IF) IRDA_FILTER Register - -#endif -// -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_STTBRK (0x1 << 9) // (USART) Start Break -#define AT91C_US_STPBRK (0x1 << 10) // (USART) Stop Break -#define AT91C_US_STTTO (0x1 << 11) // (USART) Start Time-out -#define AT91C_US_SENDA (0x1 << 12) // (USART) Send Address -#define AT91C_US_RSTIT (0x1 << 13) // (USART) Reset Iterations -#define AT91C_US_RSTNACK (0x1 << 14) // (USART) Reset Non Acknowledge -#define AT91C_US_RETTO (0x1 << 15) // (USART) Rearm Time-out -#define AT91C_US_DTREN (0x1 << 16) // (USART) Data Terminal ready Enable -#define AT91C_US_DTRDIS (0x1 << 17) // (USART) Data Terminal ready Disable -#define AT91C_US_RTSEN (0x1 << 18) // (USART) Request to Send enable -#define AT91C_US_RTSDIS (0x1 << 19) // (USART) Request to Send Disable -// -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_USMODE (0xF << 0) // (USART) Usart mode -#define AT91C_US_USMODE_NORMAL (0x0) // (USART) Normal -#define AT91C_US_USMODE_RS485 (0x1) // (USART) RS485 -#define AT91C_US_USMODE_HWHSH (0x2) // (USART) Hardware Handshaking -#define AT91C_US_USMODE_MODEM (0x3) // (USART) Modem -#define AT91C_US_USMODE_ISO7816_0 (0x4) // (USART) ISO7816 protocol: T = 0 -#define AT91C_US_USMODE_ISO7816_1 (0x6) // (USART) ISO7816 protocol: T = 1 -#define AT91C_US_USMODE_IRDA (0x8) // (USART) IrDA -#define AT91C_US_USMODE_SWHSH (0xC) // (USART) Software Handshaking -#define AT91C_US_CLKS (0x3 << 4) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CLKS_CLOCK (0x0 << 4) // (USART) Clock -#define AT91C_US_CLKS_FDIV1 (0x1 << 4) // (USART) fdiv1 -#define AT91C_US_CLKS_SLOW (0x2 << 4) // (USART) slow_clock (ARM) -#define AT91C_US_CLKS_EXT (0x3 << 4) // (USART) External (SCK) -#define AT91C_US_CHRL (0x3 << 6) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CHRL_5_BITS (0x0 << 6) // (USART) Character Length: 5 bits -#define AT91C_US_CHRL_6_BITS (0x1 << 6) // (USART) Character Length: 6 bits -#define AT91C_US_CHRL_7_BITS (0x2 << 6) // (USART) Character Length: 7 bits -#define AT91C_US_CHRL_8_BITS (0x3 << 6) // (USART) Character Length: 8 bits -#define AT91C_US_SYNC (0x1 << 8) // (USART) Synchronous Mode Select -#define AT91C_US_NBSTOP (0x3 << 12) // (USART) Number of Stop bits -#define AT91C_US_NBSTOP_1_BIT (0x0 << 12) // (USART) 1 stop bit -#define AT91C_US_NBSTOP_15_BIT (0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits -#define AT91C_US_NBSTOP_2_BIT (0x2 << 12) // (USART) 2 stop bits -#define AT91C_US_MSBF (0x1 << 16) // (USART) Bit Order -#define AT91C_US_MODE9 (0x1 << 17) // (USART) 9-bit Character length -#define AT91C_US_CKLO (0x1 << 18) // (USART) Clock Output Select -#define AT91C_US_OVER (0x1 << 19) // (USART) Over Sampling Mode -#define AT91C_US_INACK (0x1 << 20) // (USART) Inhibit Non Acknowledge -#define AT91C_US_DSNACK (0x1 << 21) // (USART) Disable Successive NACK -#define AT91C_US_MAX_ITER (0x1 << 24) // (USART) Number of Repetitions -#define AT91C_US_FILTER (0x1 << 28) // (USART) Receive Line Filter -// -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXBRK (0x1 << 2) // (USART) Break Received/End of Break -#define AT91C_US_TIMEOUT (0x1 << 8) // (USART) Receiver Time-out -#define AT91C_US_ITERATION (0x1 << 10) // (USART) Max number of Repetitions Reached -#define AT91C_US_NACK (0x1 << 13) // (USART) Non Acknowledge -#define AT91C_US_RIIC (0x1 << 16) // (USART) Ring INdicator Input Change Flag -#define AT91C_US_DSRIC (0x1 << 17) // (USART) Data Set Ready Input Change Flag -#define AT91C_US_DCDIC (0x1 << 18) // (USART) Data Carrier Flag -#define AT91C_US_CTSIC (0x1 << 19) // (USART) Clear To Send Input Change Flag -// -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register -------- -#define AT91C_US_RI (0x1 << 20) // (USART) Image of RI Input -#define AT91C_US_DSR (0x1 << 21) // (USART) Image of DSR Input -#define AT91C_US_DCD (0x1 << 22) // (USART) Image of DCD Input -#define AT91C_US_CTS (0x1 << 23) // (USART) Image of CTS Input - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SSC { - AT91_REG SSC_CR; // Control Register - AT91_REG SSC_CMR; // Clock Mode Register - AT91_REG Reserved0[2]; // - AT91_REG SSC_RCMR; // Receive Clock ModeRegister - AT91_REG SSC_RFMR; // Receive Frame Mode Register - AT91_REG SSC_TCMR; // Transmit Clock Mode Register - AT91_REG SSC_TFMR; // Transmit Frame Mode Register - AT91_REG SSC_RHR; // Receive Holding Register - AT91_REG SSC_THR; // Transmit Holding Register - AT91_REG Reserved1[2]; // - AT91_REG SSC_RSHR; // Receive Sync Holding Register - AT91_REG SSC_TSHR; // Transmit Sync Holding Register - AT91_REG Reserved2[2]; // - AT91_REG SSC_SR; // Status Register - AT91_REG SSC_IER; // Interrupt Enable Register - AT91_REG SSC_IDR; // Interrupt Disable Register - AT91_REG SSC_IMR; // Interrupt Mask Register - AT91_REG Reserved3[44]; // - AT91_REG SSC_RPR; // Receive Pointer Register - AT91_REG SSC_RCR; // Receive Counter Register - AT91_REG SSC_TPR; // Transmit Pointer Register - AT91_REG SSC_TCR; // Transmit Counter Register - AT91_REG SSC_RNPR; // Receive Next Pointer Register - AT91_REG SSC_RNCR; // Receive Next Counter Register - AT91_REG SSC_TNPR; // Transmit Next Pointer Register - AT91_REG SSC_TNCR; // Transmit Next Counter Register - AT91_REG SSC_PTCR; // PDC Transfer Control Register - AT91_REG SSC_PTSR; // PDC Transfer Status Register -} AT91S_SSC, *AT91PS_SSC; -#else -#define SSC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SSC_CR) Control Register -#define SSC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (SSC_CMR) Clock Mode Register -#define SSC_RCMR (AT91_CAST(AT91_REG *) 0x00000010) // (SSC_RCMR) Receive Clock ModeRegister -#define SSC_RFMR (AT91_CAST(AT91_REG *) 0x00000014) // (SSC_RFMR) Receive Frame Mode Register -#define SSC_TCMR (AT91_CAST(AT91_REG *) 0x00000018) // (SSC_TCMR) Transmit Clock Mode Register -#define SSC_TFMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SSC_TFMR) Transmit Frame Mode Register -#define SSC_RHR (AT91_CAST(AT91_REG *) 0x00000020) // (SSC_RHR) Receive Holding Register -#define SSC_THR (AT91_CAST(AT91_REG *) 0x00000024) // (SSC_THR) Transmit Holding Register -#define SSC_RSHR (AT91_CAST(AT91_REG *) 0x00000030) // (SSC_RSHR) Receive Sync Holding Register -#define SSC_TSHR (AT91_CAST(AT91_REG *) 0x00000034) // (SSC_TSHR) Transmit Sync Holding Register -#define SSC_SR (AT91_CAST(AT91_REG *) 0x00000040) // (SSC_SR) Status Register -#define SSC_IER (AT91_CAST(AT91_REG *) 0x00000044) // (SSC_IER) Interrupt Enable Register -#define SSC_IDR (AT91_CAST(AT91_REG *) 0x00000048) // (SSC_IDR) Interrupt Disable Register -#define SSC_IMR (AT91_CAST(AT91_REG *) 0x0000004C) // (SSC_IMR) Interrupt Mask Register - -#endif -// -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register -------- -#define AT91C_SSC_RXEN (0x1 << 0) // (SSC) Receive Enable -#define AT91C_SSC_RXDIS (0x1 << 1) // (SSC) Receive Disable -#define AT91C_SSC_TXEN (0x1 << 8) // (SSC) Transmit Enable -#define AT91C_SSC_TXDIS (0x1 << 9) // (SSC) Transmit Disable -#define AT91C_SSC_SWRST (0x1 << 15) // (SSC) Software Reset -// -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register -------- -#define AT91C_SSC_CKS (0x3 << 0) // (SSC) Receive/Transmit Clock Selection -#define AT91C_SSC_CKS_DIV (0x0) // (SSC) Divided Clock -#define AT91C_SSC_CKS_TK (0x1) // (SSC) TK Clock signal -#define AT91C_SSC_CKS_RK (0x2) // (SSC) RK pin -#define AT91C_SSC_CKO (0x7 << 2) // (SSC) Receive/Transmit Clock Output Mode Selection -#define AT91C_SSC_CKO_NONE (0x0 << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only -#define AT91C_SSC_CKO_CONTINOUS (0x1 << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output -#define AT91C_SSC_CKO_DATA_TX (0x2 << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output -#define AT91C_SSC_CKI (0x1 << 5) // (SSC) Receive/Transmit Clock Inversion -#define AT91C_SSC_CKG (0x3 << 6) // (SSC) Receive/Transmit Clock Gating Selection -#define AT91C_SSC_CKG_NONE (0x0 << 6) // (SSC) Receive/Transmit Clock Gating: None, continuous clock -#define AT91C_SSC_CKG_LOW (0x1 << 6) // (SSC) Receive/Transmit Clock enabled only if RF Low -#define AT91C_SSC_CKG_HIGH (0x2 << 6) // (SSC) Receive/Transmit Clock enabled only if RF High -#define AT91C_SSC_START (0xF << 8) // (SSC) Receive/Transmit Start Selection -#define AT91C_SSC_START_CONTINOUS (0x0 << 8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. -#define AT91C_SSC_START_TX (0x1 << 8) // (SSC) Transmit/Receive start -#define AT91C_SSC_START_LOW_RF (0x2 << 8) // (SSC) Detection of a low level on RF input -#define AT91C_SSC_START_HIGH_RF (0x3 << 8) // (SSC) Detection of a high level on RF input -#define AT91C_SSC_START_FALL_RF (0x4 << 8) // (SSC) Detection of a falling edge on RF input -#define AT91C_SSC_START_RISE_RF (0x5 << 8) // (SSC) Detection of a rising edge on RF input -#define AT91C_SSC_START_LEVEL_RF (0x6 << 8) // (SSC) Detection of any level change on RF input -#define AT91C_SSC_START_EDGE_RF (0x7 << 8) // (SSC) Detection of any edge on RF input -#define AT91C_SSC_START_0 (0x8 << 8) // (SSC) Compare 0 -#define AT91C_SSC_STOP (0x1 << 12) // (SSC) Receive Stop Selection -#define AT91C_SSC_STTDLY (0xFF << 16) // (SSC) Receive/Transmit Start Delay -#define AT91C_SSC_PERIOD (0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection -// -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register -------- -#define AT91C_SSC_DATLEN (0x1F << 0) // (SSC) Data Length -#define AT91C_SSC_LOOP (0x1 << 5) // (SSC) Loop Mode -#define AT91C_SSC_MSBF (0x1 << 7) // (SSC) Most Significant Bit First -#define AT91C_SSC_DATNB (0xF << 8) // (SSC) Data Number per Frame -#define AT91C_SSC_FSLEN (0xF << 16) // (SSC) Receive/Transmit Frame Sync length -#define AT91C_SSC_FSOS (0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection -#define AT91C_SSC_FSOS_NONE (0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only -#define AT91C_SSC_FSOS_NEGATIVE (0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse -#define AT91C_SSC_FSOS_POSITIVE (0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse -#define AT91C_SSC_FSOS_LOW (0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer -#define AT91C_SSC_FSOS_HIGH (0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer -#define AT91C_SSC_FSOS_TOGGLE (0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer -#define AT91C_SSC_FSEDGE (0x1 << 24) // (SSC) Frame Sync Edge Detection -// -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register -------- -// -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register -------- -#define AT91C_SSC_DATDEF (0x1 << 5) // (SSC) Data Default Value -#define AT91C_SSC_FSDEN (0x1 << 23) // (SSC) Frame Sync Data Enable -// -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register -------- -#define AT91C_SSC_TXRDY (0x1 << 0) // (SSC) Transmit Ready -#define AT91C_SSC_TXEMPTY (0x1 << 1) // (SSC) Transmit Empty -#define AT91C_SSC_ENDTX (0x1 << 2) // (SSC) End Of Transmission -#define AT91C_SSC_TXBUFE (0x1 << 3) // (SSC) Transmit Buffer Empty -#define AT91C_SSC_RXRDY (0x1 << 4) // (SSC) Receive Ready -#define AT91C_SSC_OVRUN (0x1 << 5) // (SSC) Receive Overrun -#define AT91C_SSC_ENDRX (0x1 << 6) // (SSC) End of Reception -#define AT91C_SSC_RXBUFF (0x1 << 7) // (SSC) Receive Buffer Full -#define AT91C_SSC_CP0 (0x1 << 8) // (SSC) Compare 0 -#define AT91C_SSC_CP1 (0x1 << 9) // (SSC) Compare 1 -#define AT91C_SSC_TXSYN (0x1 << 10) // (SSC) Transmit Sync -#define AT91C_SSC_RXSYN (0x1 << 11) // (SSC) Receive Sync -#define AT91C_SSC_TXENA (0x1 << 16) // (SSC) Transmit Enable -#define AT91C_SSC_RXENA (0x1 << 17) // (SSC) Receive Enable -// -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register -------- -// -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register -------- -// -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Two-wire Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TWI { - AT91_REG TWI_CR; // Control Register - AT91_REG TWI_MMR; // Master Mode Register - AT91_REG Reserved0[1]; // - AT91_REG TWI_IADR; // Internal Address Register - AT91_REG TWI_CWGR; // Clock Waveform Generator Register - AT91_REG Reserved1[3]; // - AT91_REG TWI_SR; // Status Register - AT91_REG TWI_IER; // Interrupt Enable Register - AT91_REG TWI_IDR; // Interrupt Disable Register - AT91_REG TWI_IMR; // Interrupt Mask Register - AT91_REG TWI_RHR; // Receive Holding Register - AT91_REG TWI_THR; // Transmit Holding Register - AT91_REG Reserved2[50]; // - AT91_REG TWI_RPR; // Receive Pointer Register - AT91_REG TWI_RCR; // Receive Counter Register - AT91_REG TWI_TPR; // Transmit Pointer Register - AT91_REG TWI_TCR; // Transmit Counter Register - AT91_REG TWI_RNPR; // Receive Next Pointer Register - AT91_REG TWI_RNCR; // Receive Next Counter Register - AT91_REG TWI_TNPR; // Transmit Next Pointer Register - AT91_REG TWI_TNCR; // Transmit Next Counter Register - AT91_REG TWI_PTCR; // PDC Transfer Control Register - AT91_REG TWI_PTSR; // PDC Transfer Status Register -} AT91S_TWI, *AT91PS_TWI; -#else -#define TWI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (TWI_CR) Control Register -#define TWI_MMR (AT91_CAST(AT91_REG *) 0x00000004) // (TWI_MMR) Master Mode Register -#define TWI_IADR (AT91_CAST(AT91_REG *) 0x0000000C) // (TWI_IADR) Internal Address Register -#define TWI_CWGR (AT91_CAST(AT91_REG *) 0x00000010) // (TWI_CWGR) Clock Waveform Generator Register -#define TWI_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TWI_SR) Status Register -#define TWI_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TWI_IER) Interrupt Enable Register -#define TWI_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TWI_IDR) Interrupt Disable Register -#define TWI_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TWI_IMR) Interrupt Mask Register -#define TWI_RHR (AT91_CAST(AT91_REG *) 0x00000030) // (TWI_RHR) Receive Holding Register -#define TWI_THR (AT91_CAST(AT91_REG *) 0x00000034) // (TWI_THR) Transmit Holding Register - -#endif -// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- -#define AT91C_TWI_START (0x1 << 0) // (TWI) Send a START Condition -#define AT91C_TWI_STOP (0x1 << 1) // (TWI) Send a STOP Condition -#define AT91C_TWI_MSEN (0x1 << 2) // (TWI) TWI Master Transfer Enabled -#define AT91C_TWI_MSDIS (0x1 << 3) // (TWI) TWI Master Transfer Disabled -#define AT91C_TWI_SWRST (0x1 << 7) // (TWI) Software Reset -// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- -#define AT91C_TWI_IADRSZ (0x3 << 8) // (TWI) Internal Device Address Size -#define AT91C_TWI_IADRSZ_NO (0x0 << 8) // (TWI) No internal device address -#define AT91C_TWI_IADRSZ_1_BYTE (0x1 << 8) // (TWI) One-byte internal device address -#define AT91C_TWI_IADRSZ_2_BYTE (0x2 << 8) // (TWI) Two-byte internal device address -#define AT91C_TWI_IADRSZ_3_BYTE (0x3 << 8) // (TWI) Three-byte internal device address -#define AT91C_TWI_MREAD (0x1 << 12) // (TWI) Master Read Direction -#define AT91C_TWI_DADR (0x7F << 16) // (TWI) Device Address -// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- -#define AT91C_TWI_CLDIV (0xFF << 0) // (TWI) Clock Low Divider -#define AT91C_TWI_CHDIV (0xFF << 8) // (TWI) Clock High Divider -#define AT91C_TWI_CKDIV (0x7 << 16) // (TWI) Clock Divider -// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- -#define AT91C_TWI_TXCOMP (0x1 << 0) // (TWI) Transmission Completed -#define AT91C_TWI_RXRDY (0x1 << 1) // (TWI) Receive holding register ReaDY -#define AT91C_TWI_TXRDY (0x1 << 2) // (TWI) Transmit holding register ReaDY -#define AT91C_TWI_OVRE (0x1 << 6) // (TWI) Overrun Error -#define AT91C_TWI_UNRE (0x1 << 7) // (TWI) Underrun Error -#define AT91C_TWI_NACK (0x1 << 8) // (TWI) Not Acknowledged -#define AT91C_TWI_ENDRX (0x1 << 12) // (TWI) -#define AT91C_TWI_ENDTX (0x1 << 13) // (TWI) -#define AT91C_TWI_RXBUFF (0x1 << 14) // (TWI) -#define AT91C_TWI_TXBUFE (0x1 << 15) // (TWI) -// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- -// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- -// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR PWMC Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC_CH { - AT91_REG PWMC_CMR; // Channel Mode Register - AT91_REG PWMC_CDTYR; // Channel Duty Cycle Register - AT91_REG PWMC_CPRDR; // Channel Period Register - AT91_REG PWMC_CCNTR; // Channel Counter Register - AT91_REG PWMC_CUPDR; // Channel Update Register - AT91_REG PWMC_Reserved[3]; // Reserved -} AT91S_PWMC_CH, *AT91PS_PWMC_CH; -#else -#define PWMC_CMR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_CMR) Channel Mode Register -#define PWMC_CDTYR (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_CDTYR) Channel Duty Cycle Register -#define PWMC_CPRDR (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_CPRDR) Channel Period Register -#define PWMC_CCNTR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_CCNTR) Channel Counter Register -#define PWMC_CUPDR (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_CUPDR) Channel Update Register -#define Reserved (AT91_CAST(AT91_REG *) 0x00000014) // (Reserved) Reserved - -#endif -// -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register -------- -#define AT91C_PWMC_CPRE (0xF << 0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx -#define AT91C_PWMC_CPRE_MCK (0x0) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKA (0xB) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKB (0xC) // (PWMC_CH) -#define AT91C_PWMC_CALG (0x1 << 8) // (PWMC_CH) Channel Alignment -#define AT91C_PWMC_CPOL (0x1 << 9) // (PWMC_CH) Channel Polarity -#define AT91C_PWMC_CPD (0x1 << 10) // (PWMC_CH) Channel Update Period -// -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register -------- -#define AT91C_PWMC_CDTY (0x0 << 0) // (PWMC_CH) Channel Duty Cycle -// -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register -------- -#define AT91C_PWMC_CPRD (0x0 << 0) // (PWMC_CH) Channel Period -// -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register -------- -#define AT91C_PWMC_CCNT (0x0 << 0) // (PWMC_CH) Channel Counter -// -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register -------- -#define AT91C_PWMC_CUPD (0x0 << 0) // (PWMC_CH) Channel Update - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC { - AT91_REG PWMC_MR; // PWMC Mode Register - AT91_REG PWMC_ENA; // PWMC Enable Register - AT91_REG PWMC_DIS; // PWMC Disable Register - AT91_REG PWMC_SR; // PWMC Status Register - AT91_REG PWMC_IER; // PWMC Interrupt Enable Register - AT91_REG PWMC_IDR; // PWMC Interrupt Disable Register - AT91_REG PWMC_IMR; // PWMC Interrupt Mask Register - AT91_REG PWMC_ISR; // PWMC Interrupt Status Register - AT91_REG Reserved0[55]; // - AT91_REG PWMC_VR; // PWMC Version Register - AT91_REG Reserved1[64]; // - AT91S_PWMC_CH PWMC_CH[4]; // PWMC Channel -} AT91S_PWMC, *AT91PS_PWMC; -#else -#define PWMC_MR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_MR) PWMC Mode Register -#define PWMC_ENA (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_ENA) PWMC Enable Register -#define PWMC_DIS (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_DIS) PWMC Disable Register -#define PWMC_SR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_SR) PWMC Status Register -#define PWMC_IER (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_IER) PWMC Interrupt Enable Register -#define PWMC_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (PWMC_IDR) PWMC Interrupt Disable Register -#define PWMC_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (PWMC_IMR) PWMC Interrupt Mask Register -#define PWMC_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (PWMC_ISR) PWMC Interrupt Status Register -#define PWMC_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (PWMC_VR) PWMC Version Register - -#endif -// -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register -------- -#define AT91C_PWMC_DIVA (0xFF << 0) // (PWMC) CLKA divide factor. -#define AT91C_PWMC_PREA (0xF << 8) // (PWMC) Divider Input Clock Prescaler A -#define AT91C_PWMC_PREA_MCK (0x0 << 8) // (PWMC) -#define AT91C_PWMC_DIVB (0xFF << 16) // (PWMC) CLKB divide factor. -#define AT91C_PWMC_PREB (0xF << 24) // (PWMC) Divider Input Clock Prescaler B -#define AT91C_PWMC_PREB_MCK (0x0 << 24) // (PWMC) -// -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register -------- -#define AT91C_PWMC_CHID0 (0x1 << 0) // (PWMC) Channel ID 0 -#define AT91C_PWMC_CHID1 (0x1 << 1) // (PWMC) Channel ID 1 -#define AT91C_PWMC_CHID2 (0x1 << 2) // (PWMC) Channel ID 2 -#define AT91C_PWMC_CHID3 (0x1 << 3) // (PWMC) Channel ID 3 -// -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register -------- -// -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register -------- -// -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register -------- -// -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register -------- -// -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register -------- -// -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR USB Device Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_UDP { - AT91_REG UDP_NUM; // Frame Number Register - AT91_REG UDP_GLBSTATE; // Global State Register - AT91_REG UDP_FADDR; // Function Address Register - AT91_REG Reserved0[1]; // - AT91_REG UDP_IER; // Interrupt Enable Register - AT91_REG UDP_IDR; // Interrupt Disable Register - AT91_REG UDP_IMR; // Interrupt Mask Register - AT91_REG UDP_ISR; // Interrupt Status Register - AT91_REG UDP_ICR; // Interrupt Clear Register - AT91_REG Reserved1[1]; // - AT91_REG UDP_RSTEP; // Reset Endpoint Register - AT91_REG Reserved2[1]; // - AT91_REG UDP_CSR[6]; // Endpoint Control and Status Register - AT91_REG Reserved3[2]; // - AT91_REG UDP_FDR[6]; // Endpoint FIFO Data Register - AT91_REG Reserved4[3]; // - AT91_REG UDP_TXVC; // Transceiver Control Register -} AT91S_UDP, *AT91PS_UDP; -#else -#define UDP_FRM_NUM (AT91_CAST(AT91_REG *) 0x00000000) // (UDP_FRM_NUM) Frame Number Register -#define UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0x00000004) // (UDP_GLBSTATE) Global State Register -#define UDP_FADDR (AT91_CAST(AT91_REG *) 0x00000008) // (UDP_FADDR) Function Address Register -#define UDP_IER (AT91_CAST(AT91_REG *) 0x00000010) // (UDP_IER) Interrupt Enable Register -#define UDP_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (UDP_IDR) Interrupt Disable Register -#define UDP_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (UDP_IMR) Interrupt Mask Register -#define UDP_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (UDP_ISR) Interrupt Status Register -#define UDP_ICR (AT91_CAST(AT91_REG *) 0x00000020) // (UDP_ICR) Interrupt Clear Register -#define UDP_RSTEP (AT91_CAST(AT91_REG *) 0x00000028) // (UDP_RSTEP) Reset Endpoint Register -#define UDP_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (UDP_CSR) Endpoint Control and Status Register -#define UDP_FDR (AT91_CAST(AT91_REG *) 0x00000050) // (UDP_FDR) Endpoint FIFO Data Register -#define UDP_TXVC (AT91_CAST(AT91_REG *) 0x00000074) // (UDP_TXVC) Transceiver Control Register - -#endif -// -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register -------- -#define AT91C_UDP_FRM_NUM (0x7FF << 0) // (UDP) Frame Number as Defined in the Packet Field Formats -#define AT91C_UDP_FRM_ERR (0x1 << 16) // (UDP) Frame Error -#define AT91C_UDP_FRM_OK (0x1 << 17) // (UDP) Frame OK -// -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register -------- -#define AT91C_UDP_FADDEN (0x1 << 0) // (UDP) Function Address Enable -#define AT91C_UDP_CONFG (0x1 << 1) // (UDP) Configured -#define AT91C_UDP_ESR (0x1 << 2) // (UDP) Enable Send Resume -#define AT91C_UDP_RSMINPR (0x1 << 3) // (UDP) A Resume Has Been Sent to the Host -#define AT91C_UDP_RMWUPE (0x1 << 4) // (UDP) Remote Wake Up Enable -// -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register -------- -#define AT91C_UDP_FADD (0xFF << 0) // (UDP) Function Address Value -#define AT91C_UDP_FEN (0x1 << 8) // (UDP) Function Enable -// -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register -------- -#define AT91C_UDP_EPINT0 (0x1 << 0) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT1 (0x1 << 1) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT2 (0x1 << 2) // (UDP) Endpoint 2 Interrupt -#define AT91C_UDP_EPINT3 (0x1 << 3) // (UDP) Endpoint 3 Interrupt -#define AT91C_UDP_EPINT4 (0x1 << 4) // (UDP) Endpoint 4 Interrupt -#define AT91C_UDP_EPINT5 (0x1 << 5) // (UDP) Endpoint 5 Interrupt -#define AT91C_UDP_RXSUSP (0x1 << 8) // (UDP) USB Suspend Interrupt -#define AT91C_UDP_RXRSM (0x1 << 9) // (UDP) USB Resume Interrupt -#define AT91C_UDP_EXTRSM (0x1 << 10) // (UDP) USB External Resume Interrupt -#define AT91C_UDP_SOFINT (0x1 << 11) // (UDP) USB Start Of frame Interrupt -#define AT91C_UDP_WAKEUP (0x1 << 13) // (UDP) USB Resume Interrupt -// -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register -------- -// -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register -------- -// -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register -------- -#define AT91C_UDP_ENDBUSRES (0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt -// -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register -------- -// -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register -------- -#define AT91C_UDP_EP0 (0x1 << 0) // (UDP) Reset Endpoint 0 -#define AT91C_UDP_EP1 (0x1 << 1) // (UDP) Reset Endpoint 1 -#define AT91C_UDP_EP2 (0x1 << 2) // (UDP) Reset Endpoint 2 -#define AT91C_UDP_EP3 (0x1 << 3) // (UDP) Reset Endpoint 3 -#define AT91C_UDP_EP4 (0x1 << 4) // (UDP) Reset Endpoint 4 -#define AT91C_UDP_EP5 (0x1 << 5) // (UDP) Reset Endpoint 5 -// -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register -------- -#define AT91C_UDP_TXCOMP (0x1 << 0) // (UDP) Generates an IN packet with data previously written in the DPR -#define AT91C_UDP_RX_DATA_BK0 (0x1 << 1) // (UDP) Receive Data Bank 0 -#define AT91C_UDP_RXSETUP (0x1 << 2) // (UDP) Sends STALL to the Host (Control endpoints) -#define AT91C_UDP_ISOERROR (0x1 << 3) // (UDP) Isochronous error (Isochronous endpoints) -#define AT91C_UDP_STALLSENT (0x1 << 3) // (UDP) Stall sent (Control, bulk, interrupt endpoints) -#define AT91C_UDP_TXPKTRDY (0x1 << 4) // (UDP) Transmit Packet Ready -#define AT91C_UDP_FORCESTALL (0x1 << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints). -#define AT91C_UDP_RX_DATA_BK1 (0x1 << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes). -#define AT91C_UDP_DIR (0x1 << 7) // (UDP) Transfer Direction -#define AT91C_UDP_EPTYPE (0x7 << 8) // (UDP) Endpoint type -#define AT91C_UDP_EPTYPE_CTRL (0x0 << 8) // (UDP) Control -#define AT91C_UDP_EPTYPE_ISO_OUT (0x1 << 8) // (UDP) Isochronous OUT -#define AT91C_UDP_EPTYPE_BULK_OUT (0x2 << 8) // (UDP) Bulk OUT -#define AT91C_UDP_EPTYPE_INT_OUT (0x3 << 8) // (UDP) Interrupt OUT -#define AT91C_UDP_EPTYPE_ISO_IN (0x5 << 8) // (UDP) Isochronous IN -#define AT91C_UDP_EPTYPE_BULK_IN (0x6 << 8) // (UDP) Bulk IN -#define AT91C_UDP_EPTYPE_INT_IN (0x7 << 8) // (UDP) Interrupt IN -#define AT91C_UDP_DTGLE (0x1 << 11) // (UDP) Data Toggle -#define AT91C_UDP_EPEDS (0x1 << 15) // (UDP) Endpoint Enable Disable -#define AT91C_UDP_RXBYTECNT (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO -// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register -------- -#define AT91C_UDP_TXVDIS (0x1 << 8) // (UDP) - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TC { - AT91_REG TC_CCR; // Channel Control Register - AT91_REG TC_CMR; // Channel Mode Register (Capture Mode / Waveform Mode) - AT91_REG Reserved0[2]; // - AT91_REG TC_CV; // Counter Value - AT91_REG TC_RA; // Register A - AT91_REG TC_RB; // Register B - AT91_REG TC_RC; // Register C - AT91_REG TC_SR; // Status Register - AT91_REG TC_IER; // Interrupt Enable Register - AT91_REG TC_IDR; // Interrupt Disable Register - AT91_REG TC_IMR; // Interrupt Mask Register -} AT91S_TC, *AT91PS_TC; -#else -#define TC_CCR (AT91_CAST(AT91_REG *) 0x00000000) // (TC_CCR) Channel Control Register -#define TC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (TC_CMR) Channel Mode Register (Capture Mode / Waveform Mode) -#define TC_CV (AT91_CAST(AT91_REG *) 0x00000010) // (TC_CV) Counter Value -#define TC_RA (AT91_CAST(AT91_REG *) 0x00000014) // (TC_RA) Register A -#define TC_RB (AT91_CAST(AT91_REG *) 0x00000018) // (TC_RB) Register B -#define TC_RC (AT91_CAST(AT91_REG *) 0x0000001C) // (TC_RC) Register C -#define TC_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TC_SR) Status Register -#define TC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TC_IER) Interrupt Enable Register -#define TC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TC_IDR) Interrupt Disable Register -#define TC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TC_IMR) Interrupt Mask Register - -#endif -// -------- TC_CCR : (TC Offset: 0x0) TC Channel Control Register -------- -#define AT91C_TC_CLKEN (0x1 << 0) // (TC) Counter Clock Enable Command -#define AT91C_TC_CLKDIS (0x1 << 1) // (TC) Counter Clock Disable Command -#define AT91C_TC_SWTRG (0x1 << 2) // (TC) Software Trigger Command -// -------- TC_CMR : (TC Offset: 0x4) TC Channel Mode Register: Capture Mode / Waveform Mode -------- -#define AT91C_TC_CLKS (0x7 << 0) // (TC) Clock Selection -#define AT91C_TC_CLKS_TIMER_DIV1_CLOCK (0x0) // (TC) Clock selected: TIMER_DIV1_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV2_CLOCK (0x1) // (TC) Clock selected: TIMER_DIV2_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV3_CLOCK (0x2) // (TC) Clock selected: TIMER_DIV3_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV4_CLOCK (0x3) // (TC) Clock selected: TIMER_DIV4_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV5_CLOCK (0x4) // (TC) Clock selected: TIMER_DIV5_CLOCK -#define AT91C_TC_CLKS_XC0 (0x5) // (TC) Clock selected: XC0 -#define AT91C_TC_CLKS_XC1 (0x6) // (TC) Clock selected: XC1 -#define AT91C_TC_CLKS_XC2 (0x7) // (TC) Clock selected: XC2 -#define AT91C_TC_CLKI (0x1 << 3) // (TC) Clock Invert -#define AT91C_TC_BURST (0x3 << 4) // (TC) Burst Signal Selection -#define AT91C_TC_BURST_NONE (0x0 << 4) // (TC) The clock is not gated by an external signal -#define AT91C_TC_BURST_XC0 (0x1 << 4) // (TC) XC0 is ANDed with the selected clock -#define AT91C_TC_BURST_XC1 (0x2 << 4) // (TC) XC1 is ANDed with the selected clock -#define AT91C_TC_BURST_XC2 (0x3 << 4) // (TC) XC2 is ANDed with the selected clock -#define AT91C_TC_CPCSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RC Compare -#define AT91C_TC_LDBSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RB Loading -#define AT91C_TC_CPCDIS (0x1 << 7) // (TC) Counter Clock Disable with RC Compare -#define AT91C_TC_LDBDIS (0x1 << 7) // (TC) Counter Clock Disabled with RB Loading -#define AT91C_TC_ETRGEDG (0x3 << 8) // (TC) External Trigger Edge Selection -#define AT91C_TC_ETRGEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_ETRGEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_ETRGEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_ETRGEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVTEDG (0x3 << 8) // (TC) External Event Edge Selection -#define AT91C_TC_EEVTEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_EEVTEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_EEVTEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_EEVTEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVT (0x3 << 10) // (TC) External Event Selection -#define AT91C_TC_EEVT_TIOB (0x0 << 10) // (TC) Signal selected as external event: TIOB TIOB direction: input -#define AT91C_TC_EEVT_XC0 (0x1 << 10) // (TC) Signal selected as external event: XC0 TIOB direction: output -#define AT91C_TC_EEVT_XC1 (0x2 << 10) // (TC) Signal selected as external event: XC1 TIOB direction: output -#define AT91C_TC_EEVT_XC2 (0x3 << 10) // (TC) Signal selected as external event: XC2 TIOB direction: output -#define AT91C_TC_ABETRG (0x1 << 10) // (TC) TIOA or TIOB External Trigger Selection -#define AT91C_TC_ENETRG (0x1 << 12) // (TC) External Event Trigger enable -#define AT91C_TC_WAVESEL (0x3 << 13) // (TC) Waveform Selection -#define AT91C_TC_WAVESEL_UP (0x0 << 13) // (TC) UP mode without atomatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN (0x1 << 13) // (TC) UPDOWN mode without automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UP_AUTO (0x2 << 13) // (TC) UP mode with automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN_AUTO (0x3 << 13) // (TC) UPDOWN mode with automatic trigger on RC Compare -#define AT91C_TC_CPCTRG (0x1 << 14) // (TC) RC Compare Trigger Enable -#define AT91C_TC_WAVE (0x1 << 15) // (TC) -#define AT91C_TC_ACPA (0x3 << 16) // (TC) RA Compare Effect on TIOA -#define AT91C_TC_ACPA_NONE (0x0 << 16) // (TC) Effect: none -#define AT91C_TC_ACPA_SET (0x1 << 16) // (TC) Effect: set -#define AT91C_TC_ACPA_CLEAR (0x2 << 16) // (TC) Effect: clear -#define AT91C_TC_ACPA_TOGGLE (0x3 << 16) // (TC) Effect: toggle -#define AT91C_TC_LDRA (0x3 << 16) // (TC) RA Loading Selection -#define AT91C_TC_LDRA_NONE (0x0 << 16) // (TC) Edge: None -#define AT91C_TC_LDRA_RISING (0x1 << 16) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRA_FALLING (0x2 << 16) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRA_BOTH (0x3 << 16) // (TC) Edge: each edge of TIOA -#define AT91C_TC_ACPC (0x3 << 18) // (TC) RC Compare Effect on TIOA -#define AT91C_TC_ACPC_NONE (0x0 << 18) // (TC) Effect: none -#define AT91C_TC_ACPC_SET (0x1 << 18) // (TC) Effect: set -#define AT91C_TC_ACPC_CLEAR (0x2 << 18) // (TC) Effect: clear -#define AT91C_TC_ACPC_TOGGLE (0x3 << 18) // (TC) Effect: toggle -#define AT91C_TC_LDRB (0x3 << 18) // (TC) RB Loading Selection -#define AT91C_TC_LDRB_NONE (0x0 << 18) // (TC) Edge: None -#define AT91C_TC_LDRB_RISING (0x1 << 18) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRB_FALLING (0x2 << 18) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRB_BOTH (0x3 << 18) // (TC) Edge: each edge of TIOA -#define AT91C_TC_AEEVT (0x3 << 20) // (TC) External Event Effect on TIOA -#define AT91C_TC_AEEVT_NONE (0x0 << 20) // (TC) Effect: none -#define AT91C_TC_AEEVT_SET (0x1 << 20) // (TC) Effect: set -#define AT91C_TC_AEEVT_CLEAR (0x2 << 20) // (TC) Effect: clear -#define AT91C_TC_AEEVT_TOGGLE (0x3 << 20) // (TC) Effect: toggle -#define AT91C_TC_ASWTRG (0x3 << 22) // (TC) Software Trigger Effect on TIOA -#define AT91C_TC_ASWTRG_NONE (0x0 << 22) // (TC) Effect: none -#define AT91C_TC_ASWTRG_SET (0x1 << 22) // (TC) Effect: set -#define AT91C_TC_ASWTRG_CLEAR (0x2 << 22) // (TC) Effect: clear -#define AT91C_TC_ASWTRG_TOGGLE (0x3 << 22) // (TC) Effect: toggle -#define AT91C_TC_BCPB (0x3 << 24) // (TC) RB Compare Effect on TIOB -#define AT91C_TC_BCPB_NONE (0x0 << 24) // (TC) Effect: none -#define AT91C_TC_BCPB_SET (0x1 << 24) // (TC) Effect: set -#define AT91C_TC_BCPB_CLEAR (0x2 << 24) // (TC) Effect: clear -#define AT91C_TC_BCPB_TOGGLE (0x3 << 24) // (TC) Effect: toggle -#define AT91C_TC_BCPC (0x3 << 26) // (TC) RC Compare Effect on TIOB -#define AT91C_TC_BCPC_NONE (0x0 << 26) // (TC) Effect: none -#define AT91C_TC_BCPC_SET (0x1 << 26) // (TC) Effect: set -#define AT91C_TC_BCPC_CLEAR (0x2 << 26) // (TC) Effect: clear -#define AT91C_TC_BCPC_TOGGLE (0x3 << 26) // (TC) Effect: toggle -#define AT91C_TC_BEEVT (0x3 << 28) // (TC) External Event Effect on TIOB -#define AT91C_TC_BEEVT_NONE (0x0 << 28) // (TC) Effect: none -#define AT91C_TC_BEEVT_SET (0x1 << 28) // (TC) Effect: set -#define AT91C_TC_BEEVT_CLEAR (0x2 << 28) // (TC) Effect: clear -#define AT91C_TC_BEEVT_TOGGLE (0x3 << 28) // (TC) Effect: toggle -#define AT91C_TC_BSWTRG (0x3 << 30) // (TC) Software Trigger Effect on TIOB -#define AT91C_TC_BSWTRG_NONE (0x0 << 30) // (TC) Effect: none -#define AT91C_TC_BSWTRG_SET (0x1 << 30) // (TC) Effect: set -#define AT91C_TC_BSWTRG_CLEAR (0x2 << 30) // (TC) Effect: clear -#define AT91C_TC_BSWTRG_TOGGLE (0x3 << 30) // (TC) Effect: toggle -// -------- TC_SR : (TC Offset: 0x20) TC Channel Status Register -------- -#define AT91C_TC_COVFS (0x1 << 0) // (TC) Counter Overflow -#define AT91C_TC_LOVRS (0x1 << 1) // (TC) Load Overrun -#define AT91C_TC_CPAS (0x1 << 2) // (TC) RA Compare -#define AT91C_TC_CPBS (0x1 << 3) // (TC) RB Compare -#define AT91C_TC_CPCS (0x1 << 4) // (TC) RC Compare -#define AT91C_TC_LDRAS (0x1 << 5) // (TC) RA Loading -#define AT91C_TC_LDRBS (0x1 << 6) // (TC) RB Loading -#define AT91C_TC_ETRGS (0x1 << 7) // (TC) External Trigger -#define AT91C_TC_CLKSTA (0x1 << 16) // (TC) Clock Enabling -#define AT91C_TC_MTIOA (0x1 << 17) // (TC) TIOA Mirror -#define AT91C_TC_MTIOB (0x1 << 18) // (TC) TIOA Mirror -// -------- TC_IER : (TC Offset: 0x24) TC Channel Interrupt Enable Register -------- -// -------- TC_IDR : (TC Offset: 0x28) TC Channel Interrupt Disable Register -------- -// -------- TC_IMR : (TC Offset: 0x2c) TC Channel Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TCB { - AT91S_TC TCB_TC0; // TC Channel 0 - AT91_REG Reserved0[4]; // - AT91S_TC TCB_TC1; // TC Channel 1 - AT91_REG Reserved1[4]; // - AT91S_TC TCB_TC2; // TC Channel 2 - AT91_REG Reserved2[4]; // - AT91_REG TCB_BCR; // TC Block Control Register - AT91_REG TCB_BMR; // TC Block Mode Register -} AT91S_TCB, *AT91PS_TCB; -#else -#define TCB_BCR (AT91_CAST(AT91_REG *) 0x000000C0) // (TCB_BCR) TC Block Control Register -#define TCB_BMR (AT91_CAST(AT91_REG *) 0x000000C4) // (TCB_BMR) TC Block Mode Register - -#endif -// -------- TCB_BCR : (TCB Offset: 0xc0) TC Block Control Register -------- -#define AT91C_TCB_SYNC (0x1 << 0) // (TCB) Synchro Command -// -------- TCB_BMR : (TCB Offset: 0xc4) TC Block Mode Register -------- -#define AT91C_TCB_TC0XC0S (0x3 << 0) // (TCB) External Clock Signal 0 Selection -#define AT91C_TCB_TC0XC0S_TCLK0 (0x0) // (TCB) TCLK0 connected to XC0 -#define AT91C_TCB_TC0XC0S_NONE (0x1) // (TCB) None signal connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA1 (0x2) // (TCB) TIOA1 connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA2 (0x3) // (TCB) TIOA2 connected to XC0 -#define AT91C_TCB_TC1XC1S (0x3 << 2) // (TCB) External Clock Signal 1 Selection -#define AT91C_TCB_TC1XC1S_TCLK1 (0x0 << 2) // (TCB) TCLK1 connected to XC1 -#define AT91C_TCB_TC1XC1S_NONE (0x1 << 2) // (TCB) None signal connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA0 (0x2 << 2) // (TCB) TIOA0 connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA2 (0x3 << 2) // (TCB) TIOA2 connected to XC1 -#define AT91C_TCB_TC2XC2S (0x3 << 4) // (TCB) External Clock Signal 2 Selection -#define AT91C_TCB_TC2XC2S_TCLK2 (0x0 << 4) // (TCB) TCLK2 connected to XC2 -#define AT91C_TCB_TC2XC2S_NONE (0x1 << 4) // (TCB) None signal connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA0 (0x2 << 4) // (TCB) TIOA0 connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA1 (0x3 << 4) // (TCB) TIOA2 connected to XC2 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Control Area Network MailBox Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CAN_MB { - AT91_REG CAN_MB_MMR; // MailBox Mode Register - AT91_REG CAN_MB_MAM; // MailBox Acceptance Mask Register - AT91_REG CAN_MB_MID; // MailBox ID Register - AT91_REG CAN_MB_MFID; // MailBox Family ID Register - AT91_REG CAN_MB_MSR; // MailBox Status Register - AT91_REG CAN_MB_MDL; // MailBox Data Low Register - AT91_REG CAN_MB_MDH; // MailBox Data High Register - AT91_REG CAN_MB_MCR; // MailBox Control Register -} AT91S_CAN_MB, *AT91PS_CAN_MB; -#else -#define CAN_MMR (AT91_CAST(AT91_REG *) 0x00000000) // (CAN_MMR) MailBox Mode Register -#define CAN_MAM (AT91_CAST(AT91_REG *) 0x00000004) // (CAN_MAM) MailBox Acceptance Mask Register -#define CAN_MID (AT91_CAST(AT91_REG *) 0x00000008) // (CAN_MID) MailBox ID Register -#define CAN_MFID (AT91_CAST(AT91_REG *) 0x0000000C) // (CAN_MFID) MailBox Family ID Register -#define CAN_MSR (AT91_CAST(AT91_REG *) 0x00000010) // (CAN_MSR) MailBox Status Register -#define CAN_MDL (AT91_CAST(AT91_REG *) 0x00000014) // (CAN_MDL) MailBox Data Low Register -#define CAN_MDH (AT91_CAST(AT91_REG *) 0x00000018) // (CAN_MDH) MailBox Data High Register -#define CAN_MCR (AT91_CAST(AT91_REG *) 0x0000001C) // (CAN_MCR) MailBox Control Register - -#endif -// -------- CAN_MMR : (CAN_MB Offset: 0x0) CAN Message Mode Register -------- -#define AT91C_CAN_MTIMEMARK (0xFFFF << 0) // (CAN_MB) Mailbox Timemark -#define AT91C_CAN_PRIOR (0xF << 16) // (CAN_MB) Mailbox Priority -#define AT91C_CAN_MOT (0x7 << 24) // (CAN_MB) Mailbox Object Type -#define AT91C_CAN_MOT_DIS (0x0 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_RX (0x1 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_RXOVERWRITE (0x2 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_TX (0x3 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_CONSUMER (0x4 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_PRODUCER (0x5 << 24) // (CAN_MB) -// -------- CAN_MAM : (CAN_MB Offset: 0x4) CAN Message Acceptance Mask Register -------- -#define AT91C_CAN_MIDvB (0x3FFFF << 0) // (CAN_MB) Complementary bits for identifier in extended mode -#define AT91C_CAN_MIDvA (0x7FF << 18) // (CAN_MB) Identifier for standard frame mode -#define AT91C_CAN_MIDE (0x1 << 29) // (CAN_MB) Identifier Version -// -------- CAN_MID : (CAN_MB Offset: 0x8) CAN Message ID Register -------- -// -------- CAN_MFID : (CAN_MB Offset: 0xc) CAN Message Family ID Register -------- -// -------- CAN_MSR : (CAN_MB Offset: 0x10) CAN Message Status Register -------- -#define AT91C_CAN_MTIMESTAMP (0xFFFF << 0) // (CAN_MB) Timer Value -#define AT91C_CAN_MDLC (0xF << 16) // (CAN_MB) Mailbox Data Length Code -#define AT91C_CAN_MRTR (0x1 << 20) // (CAN_MB) Mailbox Remote Transmission Request -#define AT91C_CAN_MABT (0x1 << 22) // (CAN_MB) Mailbox Message Abort -#define AT91C_CAN_MRDY (0x1 << 23) // (CAN_MB) Mailbox Ready -#define AT91C_CAN_MMI (0x1 << 24) // (CAN_MB) Mailbox Message Ignored -// -------- CAN_MDL : (CAN_MB Offset: 0x14) CAN Message Data Low Register -------- -// -------- CAN_MDH : (CAN_MB Offset: 0x18) CAN Message Data High Register -------- -// -------- CAN_MCR : (CAN_MB Offset: 0x1c) CAN Message Control Register -------- -#define AT91C_CAN_MACR (0x1 << 22) // (CAN_MB) Abort Request for Mailbox -#define AT91C_CAN_MTCR (0x1 << 23) // (CAN_MB) Mailbox Transfer Command - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Control Area Network Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CAN { - AT91_REG CAN_MR; // Mode Register - AT91_REG CAN_IER; // Interrupt Enable Register - AT91_REG CAN_IDR; // Interrupt Disable Register - AT91_REG CAN_IMR; // Interrupt Mask Register - AT91_REG CAN_SR; // Status Register - AT91_REG CAN_BR; // Baudrate Register - AT91_REG CAN_TIM; // Timer Register - AT91_REG CAN_TIMESTP; // Time Stamp Register - AT91_REG CAN_ECR; // Error Counter Register - AT91_REG CAN_TCR; // Transfer Command Register - AT91_REG CAN_ACR; // Abort Command Register - AT91_REG Reserved0[52]; // - AT91_REG CAN_VR; // Version Register - AT91_REG Reserved1[64]; // - AT91S_CAN_MB CAN_MB0; // CAN Mailbox 0 - AT91S_CAN_MB CAN_MB1; // CAN Mailbox 1 - AT91S_CAN_MB CAN_MB2; // CAN Mailbox 2 - AT91S_CAN_MB CAN_MB3; // CAN Mailbox 3 - AT91S_CAN_MB CAN_MB4; // CAN Mailbox 4 - AT91S_CAN_MB CAN_MB5; // CAN Mailbox 5 - AT91S_CAN_MB CAN_MB6; // CAN Mailbox 6 - AT91S_CAN_MB CAN_MB7; // CAN Mailbox 7 - AT91S_CAN_MB CAN_MB8; // CAN Mailbox 8 - AT91S_CAN_MB CAN_MB9; // CAN Mailbox 9 - AT91S_CAN_MB CAN_MB10; // CAN Mailbox 10 - AT91S_CAN_MB CAN_MB11; // CAN Mailbox 11 - AT91S_CAN_MB CAN_MB12; // CAN Mailbox 12 - AT91S_CAN_MB CAN_MB13; // CAN Mailbox 13 - AT91S_CAN_MB CAN_MB14; // CAN Mailbox 14 - AT91S_CAN_MB CAN_MB15; // CAN Mailbox 15 -} AT91S_CAN, *AT91PS_CAN; -#else -#define CAN_MR (AT91_CAST(AT91_REG *) 0x00000000) // (CAN_MR) Mode Register -#define CAN_IER (AT91_CAST(AT91_REG *) 0x00000004) // (CAN_IER) Interrupt Enable Register -#define CAN_IDR (AT91_CAST(AT91_REG *) 0x00000008) // (CAN_IDR) Interrupt Disable Register -#define CAN_IMR (AT91_CAST(AT91_REG *) 0x0000000C) // (CAN_IMR) Interrupt Mask Register -#define CAN_SR (AT91_CAST(AT91_REG *) 0x00000010) // (CAN_SR) Status Register -#define CAN_BR (AT91_CAST(AT91_REG *) 0x00000014) // (CAN_BR) Baudrate Register -#define CAN_TIM (AT91_CAST(AT91_REG *) 0x00000018) // (CAN_TIM) Timer Register -#define CAN_TIMESTP (AT91_CAST(AT91_REG *) 0x0000001C) // (CAN_TIMESTP) Time Stamp Register -#define CAN_ECR (AT91_CAST(AT91_REG *) 0x00000020) // (CAN_ECR) Error Counter Register -#define CAN_TCR (AT91_CAST(AT91_REG *) 0x00000024) // (CAN_TCR) Transfer Command Register -#define CAN_ACR (AT91_CAST(AT91_REG *) 0x00000028) // (CAN_ACR) Abort Command Register -#define CAN_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (CAN_VR) Version Register - -#endif -// -------- CAN_MR : (CAN Offset: 0x0) CAN Mode Register -------- -#define AT91C_CAN_CANEN (0x1 << 0) // (CAN) CAN Controller Enable -#define AT91C_CAN_LPM (0x1 << 1) // (CAN) Disable/Enable Low Power Mode -#define AT91C_CAN_ABM (0x1 << 2) // (CAN) Disable/Enable Autobaud/Listen Mode -#define AT91C_CAN_OVL (0x1 << 3) // (CAN) Disable/Enable Overload Frame -#define AT91C_CAN_TEOF (0x1 << 4) // (CAN) Time Stamp messages at each end of Frame -#define AT91C_CAN_TTM (0x1 << 5) // (CAN) Disable/Enable Time Trigger Mode -#define AT91C_CAN_TIMFRZ (0x1 << 6) // (CAN) Enable Timer Freeze -#define AT91C_CAN_DRPT (0x1 << 7) // (CAN) Disable Repeat -// -------- CAN_IER : (CAN Offset: 0x4) CAN Interrupt Enable Register -------- -#define AT91C_CAN_MB0 (0x1 << 0) // (CAN) Mailbox 0 Flag -#define AT91C_CAN_MB1 (0x1 << 1) // (CAN) Mailbox 1 Flag -#define AT91C_CAN_MB2 (0x1 << 2) // (CAN) Mailbox 2 Flag -#define AT91C_CAN_MB3 (0x1 << 3) // (CAN) Mailbox 3 Flag -#define AT91C_CAN_MB4 (0x1 << 4) // (CAN) Mailbox 4 Flag -#define AT91C_CAN_MB5 (0x1 << 5) // (CAN) Mailbox 5 Flag -#define AT91C_CAN_MB6 (0x1 << 6) // (CAN) Mailbox 6 Flag -#define AT91C_CAN_MB7 (0x1 << 7) // (CAN) Mailbox 7 Flag -#define AT91C_CAN_MB8 (0x1 << 8) // (CAN) Mailbox 8 Flag -#define AT91C_CAN_MB9 (0x1 << 9) // (CAN) Mailbox 9 Flag -#define AT91C_CAN_MB10 (0x1 << 10) // (CAN) Mailbox 10 Flag -#define AT91C_CAN_MB11 (0x1 << 11) // (CAN) Mailbox 11 Flag -#define AT91C_CAN_MB12 (0x1 << 12) // (CAN) Mailbox 12 Flag -#define AT91C_CAN_MB13 (0x1 << 13) // (CAN) Mailbox 13 Flag -#define AT91C_CAN_MB14 (0x1 << 14) // (CAN) Mailbox 14 Flag -#define AT91C_CAN_MB15 (0x1 << 15) // (CAN) Mailbox 15 Flag -#define AT91C_CAN_ERRA (0x1 << 16) // (CAN) Error Active Mode Flag -#define AT91C_CAN_WARN (0x1 << 17) // (CAN) Warning Limit Flag -#define AT91C_CAN_ERRP (0x1 << 18) // (CAN) Error Passive Mode Flag -#define AT91C_CAN_BOFF (0x1 << 19) // (CAN) Bus Off Mode Flag -#define AT91C_CAN_SLEEP (0x1 << 20) // (CAN) Sleep Flag -#define AT91C_CAN_WAKEUP (0x1 << 21) // (CAN) Wakeup Flag -#define AT91C_CAN_TOVF (0x1 << 22) // (CAN) Timer Overflow Flag -#define AT91C_CAN_TSTP (0x1 << 23) // (CAN) Timestamp Flag -#define AT91C_CAN_CERR (0x1 << 24) // (CAN) CRC Error -#define AT91C_CAN_SERR (0x1 << 25) // (CAN) Stuffing Error -#define AT91C_CAN_AERR (0x1 << 26) // (CAN) Acknowledgment Error -#define AT91C_CAN_FERR (0x1 << 27) // (CAN) Form Error -#define AT91C_CAN_BERR (0x1 << 28) // (CAN) Bit Error -// -------- CAN_IDR : (CAN Offset: 0x8) CAN Interrupt Disable Register -------- -// -------- CAN_IMR : (CAN Offset: 0xc) CAN Interrupt Mask Register -------- -// -------- CAN_SR : (CAN Offset: 0x10) CAN Status Register -------- -#define AT91C_CAN_RBSY (0x1 << 29) // (CAN) Receiver Busy -#define AT91C_CAN_TBSY (0x1 << 30) // (CAN) Transmitter Busy -#define AT91C_CAN_OVLY (0x1 << 31) // (CAN) Overload Busy -// -------- CAN_BR : (CAN Offset: 0x14) CAN Baudrate Register -------- -#define AT91C_CAN_PHASE2 (0x7 << 0) // (CAN) Phase 2 segment -#define AT91C_CAN_PHASE1 (0x7 << 4) // (CAN) Phase 1 segment -#define AT91C_CAN_PROPAG (0x7 << 8) // (CAN) Programmation time segment -#define AT91C_CAN_SYNC (0x3 << 12) // (CAN) Re-synchronization jump width segment -#define AT91C_CAN_BRP (0x7F << 16) // (CAN) Baudrate Prescaler -#define AT91C_CAN_SMP (0x1 << 24) // (CAN) Sampling mode -// -------- CAN_TIM : (CAN Offset: 0x18) CAN Timer Register -------- -#define AT91C_CAN_TIMER (0xFFFF << 0) // (CAN) Timer field -// -------- CAN_TIMESTP : (CAN Offset: 0x1c) CAN Timestamp Register -------- -// -------- CAN_ECR : (CAN Offset: 0x20) CAN Error Counter Register -------- -#define AT91C_CAN_REC (0xFF << 0) // (CAN) Receive Error Counter -#define AT91C_CAN_TEC (0xFF << 16) // (CAN) Transmit Error Counter -// -------- CAN_TCR : (CAN Offset: 0x24) CAN Transfer Command Register -------- -#define AT91C_CAN_TIMRST (0x1 << 31) // (CAN) Timer Reset Field -// -------- CAN_ACR : (CAN Offset: 0x28) CAN Abort Command Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Ethernet MAC 10/100 -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_EMAC { - AT91_REG EMAC_NCR; // Network Control Register - AT91_REG EMAC_NCFGR; // Network Configuration Register - AT91_REG EMAC_NSR; // Network Status Register - AT91_REG Reserved0[2]; // - AT91_REG EMAC_TSR; // Transmit Status Register - AT91_REG EMAC_RBQP; // Receive Buffer Queue Pointer - AT91_REG EMAC_TBQP; // Transmit Buffer Queue Pointer - AT91_REG EMAC_RSR; // Receive Status Register - AT91_REG EMAC_ISR; // Interrupt Status Register - AT91_REG EMAC_IER; // Interrupt Enable Register - AT91_REG EMAC_IDR; // Interrupt Disable Register - AT91_REG EMAC_IMR; // Interrupt Mask Register - AT91_REG EMAC_MAN; // PHY Maintenance Register - AT91_REG EMAC_PTR; // Pause Time Register - AT91_REG EMAC_PFR; // Pause Frames received Register - AT91_REG EMAC_FTO; // Frames Transmitted OK Register - AT91_REG EMAC_SCF; // Single Collision Frame Register - AT91_REG EMAC_MCF; // Multiple Collision Frame Register - AT91_REG EMAC_FRO; // Frames Received OK Register - AT91_REG EMAC_FCSE; // Frame Check Sequence Error Register - AT91_REG EMAC_ALE; // Alignment Error Register - AT91_REG EMAC_DTF; // Deferred Transmission Frame Register - AT91_REG EMAC_LCOL; // Late Collision Register - AT91_REG EMAC_ECOL; // Excessive Collision Register - AT91_REG EMAC_TUND; // Transmit Underrun Error Register - AT91_REG EMAC_CSE; // Carrier Sense Error Register - AT91_REG EMAC_RRE; // Receive Ressource Error Register - AT91_REG EMAC_ROV; // Receive Overrun Errors Register - AT91_REG EMAC_RSE; // Receive Symbol Errors Register - AT91_REG EMAC_ELE; // Excessive Length Errors Register - AT91_REG EMAC_RJA; // Receive Jabbers Register - AT91_REG EMAC_USF; // Undersize Frames Register - AT91_REG EMAC_STE; // SQE Test Error Register - AT91_REG EMAC_RLE; // Receive Length Field Mismatch Register - AT91_REG EMAC_TPF; // Transmitted Pause Frames Register - AT91_REG EMAC_HRB; // Hash Address Bottom[31:0] - AT91_REG EMAC_HRT; // Hash Address Top[63:32] - AT91_REG EMAC_SA1L; // Specific Address 1 Bottom, First 4 bytes - AT91_REG EMAC_SA1H; // Specific Address 1 Top, Last 2 bytes - AT91_REG EMAC_SA2L; // Specific Address 2 Bottom, First 4 bytes - AT91_REG EMAC_SA2H; // Specific Address 2 Top, Last 2 bytes - AT91_REG EMAC_SA3L; // Specific Address 3 Bottom, First 4 bytes - AT91_REG EMAC_SA3H; // Specific Address 3 Top, Last 2 bytes - AT91_REG EMAC_SA4L; // Specific Address 4 Bottom, First 4 bytes - AT91_REG EMAC_SA4H; // Specific Address 4 Top, Last 2 bytes - AT91_REG EMAC_TID; // Type ID Checking Register - AT91_REG EMAC_TPQ; // Transmit Pause Quantum Register - AT91_REG EMAC_USRIO; // USER Input/Output Register - AT91_REG EMAC_WOL; // Wake On LAN Register - AT91_REG Reserved1[13]; // - AT91_REG EMAC_REV; // Revision Register -} AT91S_EMAC, *AT91PS_EMAC; -#else -#define EMAC_NCR (AT91_CAST(AT91_REG *) 0x00000000) // (EMAC_NCR) Network Control Register -#define EMAC_NCFGR (AT91_CAST(AT91_REG *) 0x00000004) // (EMAC_NCFGR) Network Configuration Register -#define EMAC_NSR (AT91_CAST(AT91_REG *) 0x00000008) // (EMAC_NSR) Network Status Register -#define EMAC_TSR (AT91_CAST(AT91_REG *) 0x00000014) // (EMAC_TSR) Transmit Status Register -#define EMAC_RBQP (AT91_CAST(AT91_REG *) 0x00000018) // (EMAC_RBQP) Receive Buffer Queue Pointer -#define EMAC_TBQP (AT91_CAST(AT91_REG *) 0x0000001C) // (EMAC_TBQP) Transmit Buffer Queue Pointer -#define EMAC_RSR (AT91_CAST(AT91_REG *) 0x00000020) // (EMAC_RSR) Receive Status Register -#define EMAC_ISR (AT91_CAST(AT91_REG *) 0x00000024) // (EMAC_ISR) Interrupt Status Register -#define EMAC_IER (AT91_CAST(AT91_REG *) 0x00000028) // (EMAC_IER) Interrupt Enable Register -#define EMAC_IDR (AT91_CAST(AT91_REG *) 0x0000002C) // (EMAC_IDR) Interrupt Disable Register -#define EMAC_IMR (AT91_CAST(AT91_REG *) 0x00000030) // (EMAC_IMR) Interrupt Mask Register -#define EMAC_MAN (AT91_CAST(AT91_REG *) 0x00000034) // (EMAC_MAN) PHY Maintenance Register -#define EMAC_PTR (AT91_CAST(AT91_REG *) 0x00000038) // (EMAC_PTR) Pause Time Register -#define EMAC_PFR (AT91_CAST(AT91_REG *) 0x0000003C) // (EMAC_PFR) Pause Frames received Register -#define EMAC_FTO (AT91_CAST(AT91_REG *) 0x00000040) // (EMAC_FTO) Frames Transmitted OK Register -#define EMAC_SCF (AT91_CAST(AT91_REG *) 0x00000044) // (EMAC_SCF) Single Collision Frame Register -#define EMAC_MCF (AT91_CAST(AT91_REG *) 0x00000048) // (EMAC_MCF) Multiple Collision Frame Register -#define EMAC_FRO (AT91_CAST(AT91_REG *) 0x0000004C) // (EMAC_FRO) Frames Received OK Register -#define EMAC_FCSE (AT91_CAST(AT91_REG *) 0x00000050) // (EMAC_FCSE) Frame Check Sequence Error Register -#define EMAC_ALE (AT91_CAST(AT91_REG *) 0x00000054) // (EMAC_ALE) Alignment Error Register -#define EMAC_DTF (AT91_CAST(AT91_REG *) 0x00000058) // (EMAC_DTF) Deferred Transmission Frame Register -#define EMAC_LCOL (AT91_CAST(AT91_REG *) 0x0000005C) // (EMAC_LCOL) Late Collision Register -#define EMAC_ECOL (AT91_CAST(AT91_REG *) 0x00000060) // (EMAC_ECOL) Excessive Collision Register -#define EMAC_TUND (AT91_CAST(AT91_REG *) 0x00000064) // (EMAC_TUND) Transmit Underrun Error Register -#define EMAC_CSE (AT91_CAST(AT91_REG *) 0x00000068) // (EMAC_CSE) Carrier Sense Error Register -#define EMAC_RRE (AT91_CAST(AT91_REG *) 0x0000006C) // (EMAC_RRE) Receive Ressource Error Register -#define EMAC_ROV (AT91_CAST(AT91_REG *) 0x00000070) // (EMAC_ROV) Receive Overrun Errors Register -#define EMAC_RSE (AT91_CAST(AT91_REG *) 0x00000074) // (EMAC_RSE) Receive Symbol Errors Register -#define EMAC_ELE (AT91_CAST(AT91_REG *) 0x00000078) // (EMAC_ELE) Excessive Length Errors Register -#define EMAC_RJA (AT91_CAST(AT91_REG *) 0x0000007C) // (EMAC_RJA) Receive Jabbers Register -#define EMAC_USF (AT91_CAST(AT91_REG *) 0x00000080) // (EMAC_USF) Undersize Frames Register -#define EMAC_STE (AT91_CAST(AT91_REG *) 0x00000084) // (EMAC_STE) SQE Test Error Register -#define EMAC_RLE (AT91_CAST(AT91_REG *) 0x00000088) // (EMAC_RLE) Receive Length Field Mismatch Register -#define EMAC_TPF (AT91_CAST(AT91_REG *) 0x0000008C) // (EMAC_TPF) Transmitted Pause Frames Register -#define EMAC_HRB (AT91_CAST(AT91_REG *) 0x00000090) // (EMAC_HRB) Hash Address Bottom[31:0] -#define EMAC_HRT (AT91_CAST(AT91_REG *) 0x00000094) // (EMAC_HRT) Hash Address Top[63:32] -#define EMAC_SA1L (AT91_CAST(AT91_REG *) 0x00000098) // (EMAC_SA1L) Specific Address 1 Bottom, First 4 bytes -#define EMAC_SA1H (AT91_CAST(AT91_REG *) 0x0000009C) // (EMAC_SA1H) Specific Address 1 Top, Last 2 bytes -#define EMAC_SA2L (AT91_CAST(AT91_REG *) 0x000000A0) // (EMAC_SA2L) Specific Address 2 Bottom, First 4 bytes -#define EMAC_SA2H (AT91_CAST(AT91_REG *) 0x000000A4) // (EMAC_SA2H) Specific Address 2 Top, Last 2 bytes -#define EMAC_SA3L (AT91_CAST(AT91_REG *) 0x000000A8) // (EMAC_SA3L) Specific Address 3 Bottom, First 4 bytes -#define EMAC_SA3H (AT91_CAST(AT91_REG *) 0x000000AC) // (EMAC_SA3H) Specific Address 3 Top, Last 2 bytes -#define EMAC_SA4L (AT91_CAST(AT91_REG *) 0x000000B0) // (EMAC_SA4L) Specific Address 4 Bottom, First 4 bytes -#define EMAC_SA4H (AT91_CAST(AT91_REG *) 0x000000B4) // (EMAC_SA4H) Specific Address 4 Top, Last 2 bytes -#define EMAC_TID (AT91_CAST(AT91_REG *) 0x000000B8) // (EMAC_TID) Type ID Checking Register -#define EMAC_TPQ (AT91_CAST(AT91_REG *) 0x000000BC) // (EMAC_TPQ) Transmit Pause Quantum Register -#define EMAC_USRIO (AT91_CAST(AT91_REG *) 0x000000C0) // (EMAC_USRIO) USER Input/Output Register -#define EMAC_WOL (AT91_CAST(AT91_REG *) 0x000000C4) // (EMAC_WOL) Wake On LAN Register -#define EMAC_REV (AT91_CAST(AT91_REG *) 0x000000FC) // (EMAC_REV) Revision Register - -#endif -// -------- EMAC_NCR : (EMAC Offset: 0x0) -------- -#define AT91C_EMAC_LB (0x1 << 0) // (EMAC) Loopback. Optional. When set, loopback signal is at high level. -#define AT91C_EMAC_LLB (0x1 << 1) // (EMAC) Loopback local. -#define AT91C_EMAC_RE (0x1 << 2) // (EMAC) Receive enable. -#define AT91C_EMAC_TE (0x1 << 3) // (EMAC) Transmit enable. -#define AT91C_EMAC_MPE (0x1 << 4) // (EMAC) Management port enable. -#define AT91C_EMAC_CLRSTAT (0x1 << 5) // (EMAC) Clear statistics registers. -#define AT91C_EMAC_INCSTAT (0x1 << 6) // (EMAC) Increment statistics registers. -#define AT91C_EMAC_WESTAT (0x1 << 7) // (EMAC) Write enable for statistics registers. -#define AT91C_EMAC_BP (0x1 << 8) // (EMAC) Back pressure. -#define AT91C_EMAC_TSTART (0x1 << 9) // (EMAC) Start Transmission. -#define AT91C_EMAC_THALT (0x1 << 10) // (EMAC) Transmission Halt. -#define AT91C_EMAC_TPFR (0x1 << 11) // (EMAC) Transmit pause frame -#define AT91C_EMAC_TZQ (0x1 << 12) // (EMAC) Transmit zero quantum pause frame -// -------- EMAC_NCFGR : (EMAC Offset: 0x4) Network Configuration Register -------- -#define AT91C_EMAC_SPD (0x1 << 0) // (EMAC) Speed. -#define AT91C_EMAC_FD (0x1 << 1) // (EMAC) Full duplex. -#define AT91C_EMAC_JFRAME (0x1 << 3) // (EMAC) Jumbo Frames. -#define AT91C_EMAC_CAF (0x1 << 4) // (EMAC) Copy all frames. -#define AT91C_EMAC_NBC (0x1 << 5) // (EMAC) No broadcast. -#define AT91C_EMAC_MTI (0x1 << 6) // (EMAC) Multicast hash event enable -#define AT91C_EMAC_UNI (0x1 << 7) // (EMAC) Unicast hash enable. -#define AT91C_EMAC_BIG (0x1 << 8) // (EMAC) Receive 1522 bytes. -#define AT91C_EMAC_EAE (0x1 << 9) // (EMAC) External address match enable. -#define AT91C_EMAC_CLK (0x3 << 10) // (EMAC) -#define AT91C_EMAC_CLK_HCLK_8 (0x0 << 10) // (EMAC) HCLK divided by 8 -#define AT91C_EMAC_CLK_HCLK_16 (0x1 << 10) // (EMAC) HCLK divided by 16 -#define AT91C_EMAC_CLK_HCLK_32 (0x2 << 10) // (EMAC) HCLK divided by 32 -#define AT91C_EMAC_CLK_HCLK_64 (0x3 << 10) // (EMAC) HCLK divided by 64 -#define AT91C_EMAC_RTY (0x1 << 12) // (EMAC) -#define AT91C_EMAC_PAE (0x1 << 13) // (EMAC) -#define AT91C_EMAC_RBOF (0x3 << 14) // (EMAC) -#define AT91C_EMAC_RBOF_OFFSET_0 (0x0 << 14) // (EMAC) no offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_1 (0x1 << 14) // (EMAC) one byte offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_2 (0x2 << 14) // (EMAC) two bytes offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_3 (0x3 << 14) // (EMAC) three bytes offset from start of receive buffer -#define AT91C_EMAC_RLCE (0x1 << 16) // (EMAC) Receive Length field Checking Enable -#define AT91C_EMAC_DRFCS (0x1 << 17) // (EMAC) Discard Receive FCS -#define AT91C_EMAC_EFRHD (0x1 << 18) // (EMAC) -#define AT91C_EMAC_IRXFCS (0x1 << 19) // (EMAC) Ignore RX FCS -// -------- EMAC_NSR : (EMAC Offset: 0x8) Network Status Register -------- -#define AT91C_EMAC_LINKR (0x1 << 0) // (EMAC) -#define AT91C_EMAC_MDIO (0x1 << 1) // (EMAC) -#define AT91C_EMAC_IDLE (0x1 << 2) // (EMAC) -// -------- EMAC_TSR : (EMAC Offset: 0x14) Transmit Status Register -------- -#define AT91C_EMAC_UBR (0x1 << 0) // (EMAC) -#define AT91C_EMAC_COL (0x1 << 1) // (EMAC) -#define AT91C_EMAC_RLES (0x1 << 2) // (EMAC) -#define AT91C_EMAC_TGO (0x1 << 3) // (EMAC) Transmit Go -#define AT91C_EMAC_BEX (0x1 << 4) // (EMAC) Buffers exhausted mid frame -#define AT91C_EMAC_COMP (0x1 << 5) // (EMAC) -#define AT91C_EMAC_UND (0x1 << 6) // (EMAC) -// -------- EMAC_RSR : (EMAC Offset: 0x20) Receive Status Register -------- -#define AT91C_EMAC_BNA (0x1 << 0) // (EMAC) -#define AT91C_EMAC_REC (0x1 << 1) // (EMAC) -#define AT91C_EMAC_OVR (0x1 << 2) // (EMAC) -// -------- EMAC_ISR : (EMAC Offset: 0x24) Interrupt Status Register -------- -#define AT91C_EMAC_MFD (0x1 << 0) // (EMAC) -#define AT91C_EMAC_RCOMP (0x1 << 1) // (EMAC) -#define AT91C_EMAC_RXUBR (0x1 << 2) // (EMAC) -#define AT91C_EMAC_TXUBR (0x1 << 3) // (EMAC) -#define AT91C_EMAC_TUNDR (0x1 << 4) // (EMAC) -#define AT91C_EMAC_RLEX (0x1 << 5) // (EMAC) -#define AT91C_EMAC_TXERR (0x1 << 6) // (EMAC) -#define AT91C_EMAC_TCOMP (0x1 << 7) // (EMAC) -#define AT91C_EMAC_LINK (0x1 << 9) // (EMAC) -#define AT91C_EMAC_ROVR (0x1 << 10) // (EMAC) -#define AT91C_EMAC_HRESP (0x1 << 11) // (EMAC) -#define AT91C_EMAC_PFRE (0x1 << 12) // (EMAC) -#define AT91C_EMAC_PTZ (0x1 << 13) // (EMAC) -// -------- EMAC_IER : (EMAC Offset: 0x28) Interrupt Enable Register -------- -// -------- EMAC_IDR : (EMAC Offset: 0x2c) Interrupt Disable Register -------- -// -------- EMAC_IMR : (EMAC Offset: 0x30) Interrupt Mask Register -------- -// -------- EMAC_MAN : (EMAC Offset: 0x34) PHY Maintenance Register -------- -#define AT91C_EMAC_DATA (0xFFFF << 0) // (EMAC) -#define AT91C_EMAC_CODE (0x3 << 16) // (EMAC) -#define AT91C_EMAC_REGA (0x1F << 18) // (EMAC) -#define AT91C_EMAC_PHYA (0x1F << 23) // (EMAC) -#define AT91C_EMAC_RW (0x3 << 28) // (EMAC) -#define AT91C_EMAC_SOF (0x3 << 30) // (EMAC) -// -------- EMAC_USRIO : (EMAC Offset: 0xc0) USER Input Output Register -------- -#define AT91C_EMAC_RMII (0x1 << 0) // (EMAC) Reduce MII -#define AT91C_EMAC_CLKEN (0x1 << 1) // (EMAC) Clock Enable -// -------- EMAC_WOL : (EMAC Offset: 0xc4) Wake On LAN Register -------- -#define AT91C_EMAC_IP (0xFFFF << 0) // (EMAC) ARP request IP address -#define AT91C_EMAC_MAG (0x1 << 16) // (EMAC) Magic packet event enable -#define AT91C_EMAC_ARP (0x1 << 17) // (EMAC) ARP request event enable -#define AT91C_EMAC_SA1 (0x1 << 18) // (EMAC) Specific address register 1 event enable -// -------- EMAC_REV : (EMAC Offset: 0xfc) Revision Register -------- -#define AT91C_EMAC_REVREF (0xFFFF << 0) // (EMAC) -#define AT91C_EMAC_PARTREF (0xFFFF << 16) // (EMAC) - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Analog to Digital Convertor -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_ADC { - AT91_REG ADC_CR; // ADC Control Register - AT91_REG ADC_MR; // ADC Mode Register - AT91_REG Reserved0[2]; // - AT91_REG ADC_CHER; // ADC Channel Enable Register - AT91_REG ADC_CHDR; // ADC Channel Disable Register - AT91_REG ADC_CHSR; // ADC Channel Status Register - AT91_REG ADC_SR; // ADC Status Register - AT91_REG ADC_LCDR; // ADC Last Converted Data Register - AT91_REG ADC_IER; // ADC Interrupt Enable Register - AT91_REG ADC_IDR; // ADC Interrupt Disable Register - AT91_REG ADC_IMR; // ADC Interrupt Mask Register - AT91_REG ADC_CDR0; // ADC Channel Data Register 0 - AT91_REG ADC_CDR1; // ADC Channel Data Register 1 - AT91_REG ADC_CDR2; // ADC Channel Data Register 2 - AT91_REG ADC_CDR3; // ADC Channel Data Register 3 - AT91_REG ADC_CDR4; // ADC Channel Data Register 4 - AT91_REG ADC_CDR5; // ADC Channel Data Register 5 - AT91_REG ADC_CDR6; // ADC Channel Data Register 6 - AT91_REG ADC_CDR7; // ADC Channel Data Register 7 - AT91_REG Reserved1[44]; // - AT91_REG ADC_RPR; // Receive Pointer Register - AT91_REG ADC_RCR; // Receive Counter Register - AT91_REG ADC_TPR; // Transmit Pointer Register - AT91_REG ADC_TCR; // Transmit Counter Register - AT91_REG ADC_RNPR; // Receive Next Pointer Register - AT91_REG ADC_RNCR; // Receive Next Counter Register - AT91_REG ADC_TNPR; // Transmit Next Pointer Register - AT91_REG ADC_TNCR; // Transmit Next Counter Register - AT91_REG ADC_PTCR; // PDC Transfer Control Register - AT91_REG ADC_PTSR; // PDC Transfer Status Register -} AT91S_ADC, *AT91PS_ADC; -#else -#define ADC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (ADC_CR) ADC Control Register -#define ADC_MR (AT91_CAST(AT91_REG *) 0x00000004) // (ADC_MR) ADC Mode Register -#define ADC_CHER (AT91_CAST(AT91_REG *) 0x00000010) // (ADC_CHER) ADC Channel Enable Register -#define ADC_CHDR (AT91_CAST(AT91_REG *) 0x00000014) // (ADC_CHDR) ADC Channel Disable Register -#define ADC_CHSR (AT91_CAST(AT91_REG *) 0x00000018) // (ADC_CHSR) ADC Channel Status Register -#define ADC_SR (AT91_CAST(AT91_REG *) 0x0000001C) // (ADC_SR) ADC Status Register -#define ADC_LCDR (AT91_CAST(AT91_REG *) 0x00000020) // (ADC_LCDR) ADC Last Converted Data Register -#define ADC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (ADC_IER) ADC Interrupt Enable Register -#define ADC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (ADC_IDR) ADC Interrupt Disable Register -#define ADC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (ADC_IMR) ADC Interrupt Mask Register -#define ADC_CDR0 (AT91_CAST(AT91_REG *) 0x00000030) // (ADC_CDR0) ADC Channel Data Register 0 -#define ADC_CDR1 (AT91_CAST(AT91_REG *) 0x00000034) // (ADC_CDR1) ADC Channel Data Register 1 -#define ADC_CDR2 (AT91_CAST(AT91_REG *) 0x00000038) // (ADC_CDR2) ADC Channel Data Register 2 -#define ADC_CDR3 (AT91_CAST(AT91_REG *) 0x0000003C) // (ADC_CDR3) ADC Channel Data Register 3 -#define ADC_CDR4 (AT91_CAST(AT91_REG *) 0x00000040) // (ADC_CDR4) ADC Channel Data Register 4 -#define ADC_CDR5 (AT91_CAST(AT91_REG *) 0x00000044) // (ADC_CDR5) ADC Channel Data Register 5 -#define ADC_CDR6 (AT91_CAST(AT91_REG *) 0x00000048) // (ADC_CDR6) ADC Channel Data Register 6 -#define ADC_CDR7 (AT91_CAST(AT91_REG *) 0x0000004C) // (ADC_CDR7) ADC Channel Data Register 7 - -#endif -// -------- ADC_CR : (ADC Offset: 0x0) ADC Control Register -------- -#define AT91C_ADC_SWRST (0x1 << 0) // (ADC) Software Reset -#define AT91C_ADC_START (0x1 << 1) // (ADC) Start Conversion -// -------- ADC_MR : (ADC Offset: 0x4) ADC Mode Register -------- -#define AT91C_ADC_TRGEN (0x1 << 0) // (ADC) Trigger Enable -#define AT91C_ADC_TRGEN_DIS (0x0) // (ADC) Hradware triggers are disabled. Starting a conversion is only possible by software -#define AT91C_ADC_TRGEN_EN (0x1) // (ADC) Hardware trigger selected by TRGSEL field is enabled. -#define AT91C_ADC_TRGSEL (0x7 << 1) // (ADC) Trigger Selection -#define AT91C_ADC_TRGSEL_TIOA0 (0x0 << 1) // (ADC) Selected TRGSEL = TIAO0 -#define AT91C_ADC_TRGSEL_TIOA1 (0x1 << 1) // (ADC) Selected TRGSEL = TIAO1 -#define AT91C_ADC_TRGSEL_TIOA2 (0x2 << 1) // (ADC) Selected TRGSEL = TIAO2 -#define AT91C_ADC_TRGSEL_TIOA3 (0x3 << 1) // (ADC) Selected TRGSEL = TIAO3 -#define AT91C_ADC_TRGSEL_TIOA4 (0x4 << 1) // (ADC) Selected TRGSEL = TIAO4 -#define AT91C_ADC_TRGSEL_TIOA5 (0x5 << 1) // (ADC) Selected TRGSEL = TIAO5 -#define AT91C_ADC_TRGSEL_EXT (0x6 << 1) // (ADC) Selected TRGSEL = External Trigger -#define AT91C_ADC_LOWRES (0x1 << 4) // (ADC) Resolution. -#define AT91C_ADC_LOWRES_10_BIT (0x0 << 4) // (ADC) 10-bit resolution -#define AT91C_ADC_LOWRES_8_BIT (0x1 << 4) // (ADC) 8-bit resolution -#define AT91C_ADC_SLEEP (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_SLEEP_NORMAL_MODE (0x0 << 5) // (ADC) Normal Mode -#define AT91C_ADC_SLEEP_MODE (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_PRESCAL (0x3F << 8) // (ADC) Prescaler rate selection -#define AT91C_ADC_STARTUP (0x1F << 16) // (ADC) Startup Time -#define AT91C_ADC_SHTIM (0xF << 24) // (ADC) Sample & Hold Time -// -------- ADC_CHER : (ADC Offset: 0x10) ADC Channel Enable Register -------- -#define AT91C_ADC_CH0 (0x1 << 0) // (ADC) Channel 0 -#define AT91C_ADC_CH1 (0x1 << 1) // (ADC) Channel 1 -#define AT91C_ADC_CH2 (0x1 << 2) // (ADC) Channel 2 -#define AT91C_ADC_CH3 (0x1 << 3) // (ADC) Channel 3 -#define AT91C_ADC_CH4 (0x1 << 4) // (ADC) Channel 4 -#define AT91C_ADC_CH5 (0x1 << 5) // (ADC) Channel 5 -#define AT91C_ADC_CH6 (0x1 << 6) // (ADC) Channel 6 -#define AT91C_ADC_CH7 (0x1 << 7) // (ADC) Channel 7 -// -------- ADC_CHDR : (ADC Offset: 0x14) ADC Channel Disable Register -------- -// -------- ADC_CHSR : (ADC Offset: 0x18) ADC Channel Status Register -------- -// -------- ADC_SR : (ADC Offset: 0x1c) ADC Status Register -------- -#define AT91C_ADC_EOC0 (0x1 << 0) // (ADC) End of Conversion -#define AT91C_ADC_EOC1 (0x1 << 1) // (ADC) End of Conversion -#define AT91C_ADC_EOC2 (0x1 << 2) // (ADC) End of Conversion -#define AT91C_ADC_EOC3 (0x1 << 3) // (ADC) End of Conversion -#define AT91C_ADC_EOC4 (0x1 << 4) // (ADC) End of Conversion -#define AT91C_ADC_EOC5 (0x1 << 5) // (ADC) End of Conversion -#define AT91C_ADC_EOC6 (0x1 << 6) // (ADC) End of Conversion -#define AT91C_ADC_EOC7 (0x1 << 7) // (ADC) End of Conversion -#define AT91C_ADC_OVRE0 (0x1 << 8) // (ADC) Overrun Error -#define AT91C_ADC_OVRE1 (0x1 << 9) // (ADC) Overrun Error -#define AT91C_ADC_OVRE2 (0x1 << 10) // (ADC) Overrun Error -#define AT91C_ADC_OVRE3 (0x1 << 11) // (ADC) Overrun Error -#define AT91C_ADC_OVRE4 (0x1 << 12) // (ADC) Overrun Error -#define AT91C_ADC_OVRE5 (0x1 << 13) // (ADC) Overrun Error -#define AT91C_ADC_OVRE6 (0x1 << 14) // (ADC) Overrun Error -#define AT91C_ADC_OVRE7 (0x1 << 15) // (ADC) Overrun Error -#define AT91C_ADC_DRDY (0x1 << 16) // (ADC) Data Ready -#define AT91C_ADC_GOVRE (0x1 << 17) // (ADC) General Overrun -#define AT91C_ADC_ENDRX (0x1 << 18) // (ADC) End of Receiver Transfer -#define AT91C_ADC_RXBUFF (0x1 << 19) // (ADC) RXBUFF Interrupt -// -------- ADC_LCDR : (ADC Offset: 0x20) ADC Last Converted Data Register -------- -#define AT91C_ADC_LDATA (0x3FF << 0) // (ADC) Last Data Converted -// -------- ADC_IER : (ADC Offset: 0x24) ADC Interrupt Enable Register -------- -// -------- ADC_IDR : (ADC Offset: 0x28) ADC Interrupt Disable Register -------- -// -------- ADC_IMR : (ADC Offset: 0x2c) ADC Interrupt Mask Register -------- -// -------- ADC_CDR0 : (ADC Offset: 0x30) ADC Channel Data Register 0 -------- -#define AT91C_ADC_DATA (0x3FF << 0) // (ADC) Converted Data -// -------- ADC_CDR1 : (ADC Offset: 0x34) ADC Channel Data Register 1 -------- -// -------- ADC_CDR2 : (ADC Offset: 0x38) ADC Channel Data Register 2 -------- -// -------- ADC_CDR3 : (ADC Offset: 0x3c) ADC Channel Data Register 3 -------- -// -------- ADC_CDR4 : (ADC Offset: 0x40) ADC Channel Data Register 4 -------- -// -------- ADC_CDR5 : (ADC Offset: 0x44) ADC Channel Data Register 5 -------- -// -------- ADC_CDR6 : (ADC Offset: 0x48) ADC Channel Data Register 6 -------- -// -------- ADC_CDR7 : (ADC Offset: 0x4c) ADC Channel Data Register 7 -------- - -// ***************************************************************************** -// REGISTER ADDRESS DEFINITION FOR AT91SAM7X128 -// ***************************************************************************** -// ========== Register definition for SYS peripheral ========== -// ========== Register definition for AIC peripheral ========== -#define AT91C_AIC_IVR (AT91_CAST(AT91_REG *) 0xFFFFF100) // (AIC) IRQ Vector Register -#define AT91C_AIC_SMR (AT91_CAST(AT91_REG *) 0xFFFFF000) // (AIC) Source Mode Register -#define AT91C_AIC_FVR (AT91_CAST(AT91_REG *) 0xFFFFF104) // (AIC) FIQ Vector Register -#define AT91C_AIC_DCR (AT91_CAST(AT91_REG *) 0xFFFFF138) // (AIC) Debug Control Register (Protect) -#define AT91C_AIC_EOICR (AT91_CAST(AT91_REG *) 0xFFFFF130) // (AIC) End of Interrupt Command Register -#define AT91C_AIC_SVR (AT91_CAST(AT91_REG *) 0xFFFFF080) // (AIC) Source Vector Register -#define AT91C_AIC_FFSR (AT91_CAST(AT91_REG *) 0xFFFFF148) // (AIC) Fast Forcing Status Register -#define AT91C_AIC_ICCR (AT91_CAST(AT91_REG *) 0xFFFFF128) // (AIC) Interrupt Clear Command Register -#define AT91C_AIC_ISR (AT91_CAST(AT91_REG *) 0xFFFFF108) // (AIC) Interrupt Status Register -#define AT91C_AIC_IMR (AT91_CAST(AT91_REG *) 0xFFFFF110) // (AIC) Interrupt Mask Register -#define AT91C_AIC_IPR (AT91_CAST(AT91_REG *) 0xFFFFF10C) // (AIC) Interrupt Pending Register -#define AT91C_AIC_FFER (AT91_CAST(AT91_REG *) 0xFFFFF140) // (AIC) Fast Forcing Enable Register -#define AT91C_AIC_IECR (AT91_CAST(AT91_REG *) 0xFFFFF120) // (AIC) Interrupt Enable Command Register -#define AT91C_AIC_ISCR (AT91_CAST(AT91_REG *) 0xFFFFF12C) // (AIC) Interrupt Set Command Register -#define AT91C_AIC_FFDR (AT91_CAST(AT91_REG *) 0xFFFFF144) // (AIC) Fast Forcing Disable Register -#define AT91C_AIC_CISR (AT91_CAST(AT91_REG *) 0xFFFFF114) // (AIC) Core Interrupt Status Register -#define AT91C_AIC_IDCR (AT91_CAST(AT91_REG *) 0xFFFFF124) // (AIC) Interrupt Disable Command Register -#define AT91C_AIC_SPU (AT91_CAST(AT91_REG *) 0xFFFFF134) // (AIC) Spurious Vector Register -// ========== Register definition for PDC_DBGU peripheral ========== -#define AT91C_DBGU_TCR (AT91_CAST(AT91_REG *) 0xFFFFF30C) // (PDC_DBGU) Transmit Counter Register -#define AT91C_DBGU_RNPR (AT91_CAST(AT91_REG *) 0xFFFFF310) // (PDC_DBGU) Receive Next Pointer Register -#define AT91C_DBGU_TNPR (AT91_CAST(AT91_REG *) 0xFFFFF318) // (PDC_DBGU) Transmit Next Pointer Register -#define AT91C_DBGU_TPR (AT91_CAST(AT91_REG *) 0xFFFFF308) // (PDC_DBGU) Transmit Pointer Register -#define AT91C_DBGU_RPR (AT91_CAST(AT91_REG *) 0xFFFFF300) // (PDC_DBGU) Receive Pointer Register -#define AT91C_DBGU_RCR (AT91_CAST(AT91_REG *) 0xFFFFF304) // (PDC_DBGU) Receive Counter Register -#define AT91C_DBGU_RNCR (AT91_CAST(AT91_REG *) 0xFFFFF314) // (PDC_DBGU) Receive Next Counter Register -#define AT91C_DBGU_PTCR (AT91_CAST(AT91_REG *) 0xFFFFF320) // (PDC_DBGU) PDC Transfer Control Register -#define AT91C_DBGU_PTSR (AT91_CAST(AT91_REG *) 0xFFFFF324) // (PDC_DBGU) PDC Transfer Status Register -#define AT91C_DBGU_TNCR (AT91_CAST(AT91_REG *) 0xFFFFF31C) // (PDC_DBGU) Transmit Next Counter Register -// ========== Register definition for DBGU peripheral ========== -#define AT91C_DBGU_EXID (AT91_CAST(AT91_REG *) 0xFFFFF244) // (DBGU) Chip ID Extension Register -#define AT91C_DBGU_BRGR (AT91_CAST(AT91_REG *) 0xFFFFF220) // (DBGU) Baud Rate Generator Register -#define AT91C_DBGU_IDR (AT91_CAST(AT91_REG *) 0xFFFFF20C) // (DBGU) Interrupt Disable Register -#define AT91C_DBGU_CSR (AT91_CAST(AT91_REG *) 0xFFFFF214) // (DBGU) Channel Status Register -#define AT91C_DBGU_CIDR (AT91_CAST(AT91_REG *) 0xFFFFF240) // (DBGU) Chip ID Register -#define AT91C_DBGU_MR (AT91_CAST(AT91_REG *) 0xFFFFF204) // (DBGU) Mode Register -#define AT91C_DBGU_IMR (AT91_CAST(AT91_REG *) 0xFFFFF210) // (DBGU) Interrupt Mask Register -#define AT91C_DBGU_CR (AT91_CAST(AT91_REG *) 0xFFFFF200) // (DBGU) Control Register -#define AT91C_DBGU_FNTR (AT91_CAST(AT91_REG *) 0xFFFFF248) // (DBGU) Force NTRST Register -#define AT91C_DBGU_THR (AT91_CAST(AT91_REG *) 0xFFFFF21C) // (DBGU) Transmitter Holding Register -#define AT91C_DBGU_RHR (AT91_CAST(AT91_REG *) 0xFFFFF218) // (DBGU) Receiver Holding Register -#define AT91C_DBGU_IER (AT91_CAST(AT91_REG *) 0xFFFFF208) // (DBGU) Interrupt Enable Register -// ========== Register definition for PIOA peripheral ========== -#define AT91C_PIOA_ODR (AT91_CAST(AT91_REG *) 0xFFFFF414) // (PIOA) Output Disable Registerr -#define AT91C_PIOA_SODR (AT91_CAST(AT91_REG *) 0xFFFFF430) // (PIOA) Set Output Data Register -#define AT91C_PIOA_ISR (AT91_CAST(AT91_REG *) 0xFFFFF44C) // (PIOA) Interrupt Status Register -#define AT91C_PIOA_ABSR (AT91_CAST(AT91_REG *) 0xFFFFF478) // (PIOA) AB Select Status Register -#define AT91C_PIOA_IER (AT91_CAST(AT91_REG *) 0xFFFFF440) // (PIOA) Interrupt Enable Register -#define AT91C_PIOA_PPUDR (AT91_CAST(AT91_REG *) 0xFFFFF460) // (PIOA) Pull-up Disable Register -#define AT91C_PIOA_IMR (AT91_CAST(AT91_REG *) 0xFFFFF448) // (PIOA) Interrupt Mask Register -#define AT91C_PIOA_PER (AT91_CAST(AT91_REG *) 0xFFFFF400) // (PIOA) PIO Enable Register -#define AT91C_PIOA_IFDR (AT91_CAST(AT91_REG *) 0xFFFFF424) // (PIOA) Input Filter Disable Register -#define AT91C_PIOA_OWDR (AT91_CAST(AT91_REG *) 0xFFFFF4A4) // (PIOA) Output Write Disable Register -#define AT91C_PIOA_MDSR (AT91_CAST(AT91_REG *) 0xFFFFF458) // (PIOA) Multi-driver Status Register -#define AT91C_PIOA_IDR (AT91_CAST(AT91_REG *) 0xFFFFF444) // (PIOA) Interrupt Disable Register -#define AT91C_PIOA_ODSR (AT91_CAST(AT91_REG *) 0xFFFFF438) // (PIOA) Output Data Status Register -#define AT91C_PIOA_PPUSR (AT91_CAST(AT91_REG *) 0xFFFFF468) // (PIOA) Pull-up Status Register -#define AT91C_PIOA_OWSR (AT91_CAST(AT91_REG *) 0xFFFFF4A8) // (PIOA) Output Write Status Register -#define AT91C_PIOA_BSR (AT91_CAST(AT91_REG *) 0xFFFFF474) // (PIOA) Select B Register -#define AT91C_PIOA_OWER (AT91_CAST(AT91_REG *) 0xFFFFF4A0) // (PIOA) Output Write Enable Register -#define AT91C_PIOA_IFER (AT91_CAST(AT91_REG *) 0xFFFFF420) // (PIOA) Input Filter Enable Register -#define AT91C_PIOA_PDSR (AT91_CAST(AT91_REG *) 0xFFFFF43C) // (PIOA) Pin Data Status Register -#define AT91C_PIOA_PPUER (AT91_CAST(AT91_REG *) 0xFFFFF464) // (PIOA) Pull-up Enable Register -#define AT91C_PIOA_OSR (AT91_CAST(AT91_REG *) 0xFFFFF418) // (PIOA) Output Status Register -#define AT91C_PIOA_ASR (AT91_CAST(AT91_REG *) 0xFFFFF470) // (PIOA) Select A Register -#define AT91C_PIOA_MDDR (AT91_CAST(AT91_REG *) 0xFFFFF454) // (PIOA) Multi-driver Disable Register -#define AT91C_PIOA_CODR (AT91_CAST(AT91_REG *) 0xFFFFF434) // (PIOA) Clear Output Data Register -#define AT91C_PIOA_MDER (AT91_CAST(AT91_REG *) 0xFFFFF450) // (PIOA) Multi-driver Enable Register -#define AT91C_PIOA_PDR (AT91_CAST(AT91_REG *) 0xFFFFF404) // (PIOA) PIO Disable Register -#define AT91C_PIOA_IFSR (AT91_CAST(AT91_REG *) 0xFFFFF428) // (PIOA) Input Filter Status Register -#define AT91C_PIOA_OER (AT91_CAST(AT91_REG *) 0xFFFFF410) // (PIOA) Output Enable Register -#define AT91C_PIOA_PSR (AT91_CAST(AT91_REG *) 0xFFFFF408) // (PIOA) PIO Status Register -// ========== Register definition for PIOB peripheral ========== -#define AT91C_PIOB_OWDR (AT91_CAST(AT91_REG *) 0xFFFFF6A4) // (PIOB) Output Write Disable Register -#define AT91C_PIOB_MDER (AT91_CAST(AT91_REG *) 0xFFFFF650) // (PIOB) Multi-driver Enable Register -#define AT91C_PIOB_PPUSR (AT91_CAST(AT91_REG *) 0xFFFFF668) // (PIOB) Pull-up Status Register -#define AT91C_PIOB_IMR (AT91_CAST(AT91_REG *) 0xFFFFF648) // (PIOB) Interrupt Mask Register -#define AT91C_PIOB_ASR (AT91_CAST(AT91_REG *) 0xFFFFF670) // (PIOB) Select A Register -#define AT91C_PIOB_PPUDR (AT91_CAST(AT91_REG *) 0xFFFFF660) // (PIOB) Pull-up Disable Register -#define AT91C_PIOB_PSR (AT91_CAST(AT91_REG *) 0xFFFFF608) // (PIOB) PIO Status Register -#define AT91C_PIOB_IER (AT91_CAST(AT91_REG *) 0xFFFFF640) // (PIOB) Interrupt Enable Register -#define AT91C_PIOB_CODR (AT91_CAST(AT91_REG *) 0xFFFFF634) // (PIOB) Clear Output Data Register -#define AT91C_PIOB_OWER (AT91_CAST(AT91_REG *) 0xFFFFF6A0) // (PIOB) Output Write Enable Register -#define AT91C_PIOB_ABSR (AT91_CAST(AT91_REG *) 0xFFFFF678) // (PIOB) AB Select Status Register -#define AT91C_PIOB_IFDR (AT91_CAST(AT91_REG *) 0xFFFFF624) // (PIOB) Input Filter Disable Register -#define AT91C_PIOB_PDSR (AT91_CAST(AT91_REG *) 0xFFFFF63C) // (PIOB) Pin Data Status Register -#define AT91C_PIOB_IDR (AT91_CAST(AT91_REG *) 0xFFFFF644) // (PIOB) Interrupt Disable Register -#define AT91C_PIOB_OWSR (AT91_CAST(AT91_REG *) 0xFFFFF6A8) // (PIOB) Output Write Status Register -#define AT91C_PIOB_PDR (AT91_CAST(AT91_REG *) 0xFFFFF604) // (PIOB) PIO Disable Register -#define AT91C_PIOB_ODR (AT91_CAST(AT91_REG *) 0xFFFFF614) // (PIOB) Output Disable Registerr -#define AT91C_PIOB_IFSR (AT91_CAST(AT91_REG *) 0xFFFFF628) // (PIOB) Input Filter Status Register -#define AT91C_PIOB_PPUER (AT91_CAST(AT91_REG *) 0xFFFFF664) // (PIOB) Pull-up Enable Register -#define AT91C_PIOB_SODR (AT91_CAST(AT91_REG *) 0xFFFFF630) // (PIOB) Set Output Data Register -#define AT91C_PIOB_ISR (AT91_CAST(AT91_REG *) 0xFFFFF64C) // (PIOB) Interrupt Status Register -#define AT91C_PIOB_ODSR (AT91_CAST(AT91_REG *) 0xFFFFF638) // (PIOB) Output Data Status Register -#define AT91C_PIOB_OSR (AT91_CAST(AT91_REG *) 0xFFFFF618) // (PIOB) Output Status Register -#define AT91C_PIOB_MDSR (AT91_CAST(AT91_REG *) 0xFFFFF658) // (PIOB) Multi-driver Status Register -#define AT91C_PIOB_IFER (AT91_CAST(AT91_REG *) 0xFFFFF620) // (PIOB) Input Filter Enable Register -#define AT91C_PIOB_BSR (AT91_CAST(AT91_REG *) 0xFFFFF674) // (PIOB) Select B Register -#define AT91C_PIOB_MDDR (AT91_CAST(AT91_REG *) 0xFFFFF654) // (PIOB) Multi-driver Disable Register -#define AT91C_PIOB_OER (AT91_CAST(AT91_REG *) 0xFFFFF610) // (PIOB) Output Enable Register -#define AT91C_PIOB_PER (AT91_CAST(AT91_REG *) 0xFFFFF600) // (PIOB) PIO Enable Register -// ========== Register definition for CKGR peripheral ========== -#define AT91C_CKGR_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (CKGR) Main Oscillator Register -#define AT91C_CKGR_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (CKGR) PLL Register -#define AT91C_CKGR_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (CKGR) Main Clock Frequency Register -// ========== Register definition for PMC peripheral ========== -#define AT91C_PMC_IDR (AT91_CAST(AT91_REG *) 0xFFFFFC64) // (PMC) Interrupt Disable Register -#define AT91C_PMC_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (PMC) Main Oscillator Register -#define AT91C_PMC_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (PMC) PLL Register -#define AT91C_PMC_PCER (AT91_CAST(AT91_REG *) 0xFFFFFC10) // (PMC) Peripheral Clock Enable Register -#define AT91C_PMC_PCKR (AT91_CAST(AT91_REG *) 0xFFFFFC40) // (PMC) Programmable Clock Register -#define AT91C_PMC_MCKR (AT91_CAST(AT91_REG *) 0xFFFFFC30) // (PMC) Master Clock Register -#define AT91C_PMC_SCDR (AT91_CAST(AT91_REG *) 0xFFFFFC04) // (PMC) System Clock Disable Register -#define AT91C_PMC_PCDR (AT91_CAST(AT91_REG *) 0xFFFFFC14) // (PMC) Peripheral Clock Disable Register -#define AT91C_PMC_SCSR (AT91_CAST(AT91_REG *) 0xFFFFFC08) // (PMC) System Clock Status Register -#define AT91C_PMC_PCSR (AT91_CAST(AT91_REG *) 0xFFFFFC18) // (PMC) Peripheral Clock Status Register -#define AT91C_PMC_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (PMC) Main Clock Frequency Register -#define AT91C_PMC_SCER (AT91_CAST(AT91_REG *) 0xFFFFFC00) // (PMC) System Clock Enable Register -#define AT91C_PMC_IMR (AT91_CAST(AT91_REG *) 0xFFFFFC6C) // (PMC) Interrupt Mask Register -#define AT91C_PMC_IER (AT91_CAST(AT91_REG *) 0xFFFFFC60) // (PMC) Interrupt Enable Register -#define AT91C_PMC_SR (AT91_CAST(AT91_REG *) 0xFFFFFC68) // (PMC) Status Register -// ========== Register definition for RSTC peripheral ========== -#define AT91C_RSTC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFD00) // (RSTC) Reset Control Register -#define AT91C_RSTC_RMR (AT91_CAST(AT91_REG *) 0xFFFFFD08) // (RSTC) Reset Mode Register -#define AT91C_RSTC_RSR (AT91_CAST(AT91_REG *) 0xFFFFFD04) // (RSTC) Reset Status Register -// ========== Register definition for RTTC peripheral ========== -#define AT91C_RTTC_RTSR (AT91_CAST(AT91_REG *) 0xFFFFFD2C) // (RTTC) Real-time Status Register -#define AT91C_RTTC_RTMR (AT91_CAST(AT91_REG *) 0xFFFFFD20) // (RTTC) Real-time Mode Register -#define AT91C_RTTC_RTVR (AT91_CAST(AT91_REG *) 0xFFFFFD28) // (RTTC) Real-time Value Register -#define AT91C_RTTC_RTAR (AT91_CAST(AT91_REG *) 0xFFFFFD24) // (RTTC) Real-time Alarm Register -// ========== Register definition for PITC peripheral ========== -#define AT91C_PITC_PIVR (AT91_CAST(AT91_REG *) 0xFFFFFD38) // (PITC) Period Interval Value Register -#define AT91C_PITC_PISR (AT91_CAST(AT91_REG *) 0xFFFFFD34) // (PITC) Period Interval Status Register -#define AT91C_PITC_PIIR (AT91_CAST(AT91_REG *) 0xFFFFFD3C) // (PITC) Period Interval Image Register -#define AT91C_PITC_PIMR (AT91_CAST(AT91_REG *) 0xFFFFFD30) // (PITC) Period Interval Mode Register -// ========== Register definition for WDTC peripheral ========== -#define AT91C_WDTC_WDCR (AT91_CAST(AT91_REG *) 0xFFFFFD40) // (WDTC) Watchdog Control Register -#define AT91C_WDTC_WDSR (AT91_CAST(AT91_REG *) 0xFFFFFD48) // (WDTC) Watchdog Status Register -#define AT91C_WDTC_WDMR (AT91_CAST(AT91_REG *) 0xFFFFFD44) // (WDTC) Watchdog Mode Register -// ========== Register definition for VREG peripheral ========== -#define AT91C_VREG_MR (AT91_CAST(AT91_REG *) 0xFFFFFD60) // (VREG) Voltage Regulator Mode Register -// ========== Register definition for MC peripheral ========== -#define AT91C_MC_ASR (AT91_CAST(AT91_REG *) 0xFFFFFF04) // (MC) MC Abort Status Register -#define AT91C_MC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFF00) // (MC) MC Remap Control Register -#define AT91C_MC_FCR (AT91_CAST(AT91_REG *) 0xFFFFFF64) // (MC) MC Flash Command Register -#define AT91C_MC_AASR (AT91_CAST(AT91_REG *) 0xFFFFFF08) // (MC) MC Abort Address Status Register -#define AT91C_MC_FSR (AT91_CAST(AT91_REG *) 0xFFFFFF68) // (MC) MC Flash Status Register -#define AT91C_MC_FMR (AT91_CAST(AT91_REG *) 0xFFFFFF60) // (MC) MC Flash Mode Register -// ========== Register definition for PDC_SPI1 peripheral ========== -#define AT91C_SPI1_PTCR (AT91_CAST(AT91_REG *) 0xFFFE4120) // (PDC_SPI1) PDC Transfer Control Register -#define AT91C_SPI1_RPR (AT91_CAST(AT91_REG *) 0xFFFE4100) // (PDC_SPI1) Receive Pointer Register -#define AT91C_SPI1_TNCR (AT91_CAST(AT91_REG *) 0xFFFE411C) // (PDC_SPI1) Transmit Next Counter Register -#define AT91C_SPI1_TPR (AT91_CAST(AT91_REG *) 0xFFFE4108) // (PDC_SPI1) Transmit Pointer Register -#define AT91C_SPI1_TNPR (AT91_CAST(AT91_REG *) 0xFFFE4118) // (PDC_SPI1) Transmit Next Pointer Register -#define AT91C_SPI1_TCR (AT91_CAST(AT91_REG *) 0xFFFE410C) // (PDC_SPI1) Transmit Counter Register -#define AT91C_SPI1_RCR (AT91_CAST(AT91_REG *) 0xFFFE4104) // (PDC_SPI1) Receive Counter Register -#define AT91C_SPI1_RNPR (AT91_CAST(AT91_REG *) 0xFFFE4110) // (PDC_SPI1) Receive Next Pointer Register -#define AT91C_SPI1_RNCR (AT91_CAST(AT91_REG *) 0xFFFE4114) // (PDC_SPI1) Receive Next Counter Register -#define AT91C_SPI1_PTSR (AT91_CAST(AT91_REG *) 0xFFFE4124) // (PDC_SPI1) PDC Transfer Status Register -// ========== Register definition for SPI1 peripheral ========== -#define AT91C_SPI1_IMR (AT91_CAST(AT91_REG *) 0xFFFE401C) // (SPI1) Interrupt Mask Register -#define AT91C_SPI1_IER (AT91_CAST(AT91_REG *) 0xFFFE4014) // (SPI1) Interrupt Enable Register -#define AT91C_SPI1_MR (AT91_CAST(AT91_REG *) 0xFFFE4004) // (SPI1) Mode Register -#define AT91C_SPI1_RDR (AT91_CAST(AT91_REG *) 0xFFFE4008) // (SPI1) Receive Data Register -#define AT91C_SPI1_IDR (AT91_CAST(AT91_REG *) 0xFFFE4018) // (SPI1) Interrupt Disable Register -#define AT91C_SPI1_SR (AT91_CAST(AT91_REG *) 0xFFFE4010) // (SPI1) Status Register -#define AT91C_SPI1_TDR (AT91_CAST(AT91_REG *) 0xFFFE400C) // (SPI1) Transmit Data Register -#define AT91C_SPI1_CR (AT91_CAST(AT91_REG *) 0xFFFE4000) // (SPI1) Control Register -#define AT91C_SPI1_CSR (AT91_CAST(AT91_REG *) 0xFFFE4030) // (SPI1) Chip Select Register -// ========== Register definition for PDC_SPI0 peripheral ========== -#define AT91C_SPI0_PTCR (AT91_CAST(AT91_REG *) 0xFFFE0120) // (PDC_SPI0) PDC Transfer Control Register -#define AT91C_SPI0_TPR (AT91_CAST(AT91_REG *) 0xFFFE0108) // (PDC_SPI0) Transmit Pointer Register -#define AT91C_SPI0_TCR (AT91_CAST(AT91_REG *) 0xFFFE010C) // (PDC_SPI0) Transmit Counter Register -#define AT91C_SPI0_RCR (AT91_CAST(AT91_REG *) 0xFFFE0104) // (PDC_SPI0) Receive Counter Register -#define AT91C_SPI0_PTSR (AT91_CAST(AT91_REG *) 0xFFFE0124) // (PDC_SPI0) PDC Transfer Status Register -#define AT91C_SPI0_RNPR (AT91_CAST(AT91_REG *) 0xFFFE0110) // (PDC_SPI0) Receive Next Pointer Register -#define AT91C_SPI0_RPR (AT91_CAST(AT91_REG *) 0xFFFE0100) // (PDC_SPI0) Receive Pointer Register -#define AT91C_SPI0_TNCR (AT91_CAST(AT91_REG *) 0xFFFE011C) // (PDC_SPI0) Transmit Next Counter Register -#define AT91C_SPI0_RNCR (AT91_CAST(AT91_REG *) 0xFFFE0114) // (PDC_SPI0) Receive Next Counter Register -#define AT91C_SPI0_TNPR (AT91_CAST(AT91_REG *) 0xFFFE0118) // (PDC_SPI0) Transmit Next Pointer Register -// ========== Register definition for SPI0 peripheral ========== -#define AT91C_SPI0_IER (AT91_CAST(AT91_REG *) 0xFFFE0014) // (SPI0) Interrupt Enable Register -#define AT91C_SPI0_SR (AT91_CAST(AT91_REG *) 0xFFFE0010) // (SPI0) Status Register -#define AT91C_SPI0_IDR (AT91_CAST(AT91_REG *) 0xFFFE0018) // (SPI0) Interrupt Disable Register -#define AT91C_SPI0_CR (AT91_CAST(AT91_REG *) 0xFFFE0000) // (SPI0) Control Register -#define AT91C_SPI0_MR (AT91_CAST(AT91_REG *) 0xFFFE0004) // (SPI0) Mode Register -#define AT91C_SPI0_IMR (AT91_CAST(AT91_REG *) 0xFFFE001C) // (SPI0) Interrupt Mask Register -#define AT91C_SPI0_TDR (AT91_CAST(AT91_REG *) 0xFFFE000C) // (SPI0) Transmit Data Register -#define AT91C_SPI0_RDR (AT91_CAST(AT91_REG *) 0xFFFE0008) // (SPI0) Receive Data Register -#define AT91C_SPI0_CSR (AT91_CAST(AT91_REG *) 0xFFFE0030) // (SPI0) Chip Select Register -// ========== Register definition for PDC_US1 peripheral ========== -#define AT91C_US1_RNCR (AT91_CAST(AT91_REG *) 0xFFFC4114) // (PDC_US1) Receive Next Counter Register -#define AT91C_US1_PTCR (AT91_CAST(AT91_REG *) 0xFFFC4120) // (PDC_US1) PDC Transfer Control Register -#define AT91C_US1_TCR (AT91_CAST(AT91_REG *) 0xFFFC410C) // (PDC_US1) Transmit Counter Register -#define AT91C_US1_PTSR (AT91_CAST(AT91_REG *) 0xFFFC4124) // (PDC_US1) PDC Transfer Status Register -#define AT91C_US1_TNPR (AT91_CAST(AT91_REG *) 0xFFFC4118) // (PDC_US1) Transmit Next Pointer Register -#define AT91C_US1_RCR (AT91_CAST(AT91_REG *) 0xFFFC4104) // (PDC_US1) Receive Counter Register -#define AT91C_US1_RNPR (AT91_CAST(AT91_REG *) 0xFFFC4110) // (PDC_US1) Receive Next Pointer Register -#define AT91C_US1_RPR (AT91_CAST(AT91_REG *) 0xFFFC4100) // (PDC_US1) Receive Pointer Register -#define AT91C_US1_TNCR (AT91_CAST(AT91_REG *) 0xFFFC411C) // (PDC_US1) Transmit Next Counter Register -#define AT91C_US1_TPR (AT91_CAST(AT91_REG *) 0xFFFC4108) // (PDC_US1) Transmit Pointer Register -// ========== Register definition for US1 peripheral ========== -#define AT91C_US1_IF (AT91_CAST(AT91_REG *) 0xFFFC404C) // (US1) IRDA_FILTER Register -#define AT91C_US1_NER (AT91_CAST(AT91_REG *) 0xFFFC4044) // (US1) Nb Errors Register -#define AT91C_US1_RTOR (AT91_CAST(AT91_REG *) 0xFFFC4024) // (US1) Receiver Time-out Register -#define AT91C_US1_CSR (AT91_CAST(AT91_REG *) 0xFFFC4014) // (US1) Channel Status Register -#define AT91C_US1_IDR (AT91_CAST(AT91_REG *) 0xFFFC400C) // (US1) Interrupt Disable Register -#define AT91C_US1_IER (AT91_CAST(AT91_REG *) 0xFFFC4008) // (US1) Interrupt Enable Register -#define AT91C_US1_THR (AT91_CAST(AT91_REG *) 0xFFFC401C) // (US1) Transmitter Holding Register -#define AT91C_US1_TTGR (AT91_CAST(AT91_REG *) 0xFFFC4028) // (US1) Transmitter Time-guard Register -#define AT91C_US1_RHR (AT91_CAST(AT91_REG *) 0xFFFC4018) // (US1) Receiver Holding Register -#define AT91C_US1_BRGR (AT91_CAST(AT91_REG *) 0xFFFC4020) // (US1) Baud Rate Generator Register -#define AT91C_US1_IMR (AT91_CAST(AT91_REG *) 0xFFFC4010) // (US1) Interrupt Mask Register -#define AT91C_US1_FIDI (AT91_CAST(AT91_REG *) 0xFFFC4040) // (US1) FI_DI_Ratio Register -#define AT91C_US1_CR (AT91_CAST(AT91_REG *) 0xFFFC4000) // (US1) Control Register -#define AT91C_US1_MR (AT91_CAST(AT91_REG *) 0xFFFC4004) // (US1) Mode Register -// ========== Register definition for PDC_US0 peripheral ========== -#define AT91C_US0_TNPR (AT91_CAST(AT91_REG *) 0xFFFC0118) // (PDC_US0) Transmit Next Pointer Register -#define AT91C_US0_RNPR (AT91_CAST(AT91_REG *) 0xFFFC0110) // (PDC_US0) Receive Next Pointer Register -#define AT91C_US0_TCR (AT91_CAST(AT91_REG *) 0xFFFC010C) // (PDC_US0) Transmit Counter Register -#define AT91C_US0_PTCR (AT91_CAST(AT91_REG *) 0xFFFC0120) // (PDC_US0) PDC Transfer Control Register -#define AT91C_US0_PTSR (AT91_CAST(AT91_REG *) 0xFFFC0124) // (PDC_US0) PDC Transfer Status Register -#define AT91C_US0_TNCR (AT91_CAST(AT91_REG *) 0xFFFC011C) // (PDC_US0) Transmit Next Counter Register -#define AT91C_US0_TPR (AT91_CAST(AT91_REG *) 0xFFFC0108) // (PDC_US0) Transmit Pointer Register -#define AT91C_US0_RCR (AT91_CAST(AT91_REG *) 0xFFFC0104) // (PDC_US0) Receive Counter Register -#define AT91C_US0_RPR (AT91_CAST(AT91_REG *) 0xFFFC0100) // (PDC_US0) Receive Pointer Register -#define AT91C_US0_RNCR (AT91_CAST(AT91_REG *) 0xFFFC0114) // (PDC_US0) Receive Next Counter Register -// ========== Register definition for US0 peripheral ========== -#define AT91C_US0_BRGR (AT91_CAST(AT91_REG *) 0xFFFC0020) // (US0) Baud Rate Generator Register -#define AT91C_US0_NER (AT91_CAST(AT91_REG *) 0xFFFC0044) // (US0) Nb Errors Register -#define AT91C_US0_CR (AT91_CAST(AT91_REG *) 0xFFFC0000) // (US0) Control Register -#define AT91C_US0_IMR (AT91_CAST(AT91_REG *) 0xFFFC0010) // (US0) Interrupt Mask Register -#define AT91C_US0_FIDI (AT91_CAST(AT91_REG *) 0xFFFC0040) // (US0) FI_DI_Ratio Register -#define AT91C_US0_TTGR (AT91_CAST(AT91_REG *) 0xFFFC0028) // (US0) Transmitter Time-guard Register -#define AT91C_US0_MR (AT91_CAST(AT91_REG *) 0xFFFC0004) // (US0) Mode Register -#define AT91C_US0_RTOR (AT91_CAST(AT91_REG *) 0xFFFC0024) // (US0) Receiver Time-out Register -#define AT91C_US0_CSR (AT91_CAST(AT91_REG *) 0xFFFC0014) // (US0) Channel Status Register -#define AT91C_US0_RHR (AT91_CAST(AT91_REG *) 0xFFFC0018) // (US0) Receiver Holding Register -#define AT91C_US0_IDR (AT91_CAST(AT91_REG *) 0xFFFC000C) // (US0) Interrupt Disable Register -#define AT91C_US0_THR (AT91_CAST(AT91_REG *) 0xFFFC001C) // (US0) Transmitter Holding Register -#define AT91C_US0_IF (AT91_CAST(AT91_REG *) 0xFFFC004C) // (US0) IRDA_FILTER Register -#define AT91C_US0_IER (AT91_CAST(AT91_REG *) 0xFFFC0008) // (US0) Interrupt Enable Register -// ========== Register definition for PDC_SSC peripheral ========== -#define AT91C_SSC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD411C) // (PDC_SSC) Transmit Next Counter Register -#define AT91C_SSC_RPR (AT91_CAST(AT91_REG *) 0xFFFD4100) // (PDC_SSC) Receive Pointer Register -#define AT91C_SSC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD4114) // (PDC_SSC) Receive Next Counter Register -#define AT91C_SSC_TPR (AT91_CAST(AT91_REG *) 0xFFFD4108) // (PDC_SSC) Transmit Pointer Register -#define AT91C_SSC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD4120) // (PDC_SSC) PDC Transfer Control Register -#define AT91C_SSC_TCR (AT91_CAST(AT91_REG *) 0xFFFD410C) // (PDC_SSC) Transmit Counter Register -#define AT91C_SSC_RCR (AT91_CAST(AT91_REG *) 0xFFFD4104) // (PDC_SSC) Receive Counter Register -#define AT91C_SSC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD4110) // (PDC_SSC) Receive Next Pointer Register -#define AT91C_SSC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD4118) // (PDC_SSC) Transmit Next Pointer Register -#define AT91C_SSC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD4124) // (PDC_SSC) PDC Transfer Status Register -// ========== Register definition for SSC peripheral ========== -#define AT91C_SSC_RHR (AT91_CAST(AT91_REG *) 0xFFFD4020) // (SSC) Receive Holding Register -#define AT91C_SSC_RSHR (AT91_CAST(AT91_REG *) 0xFFFD4030) // (SSC) Receive Sync Holding Register -#define AT91C_SSC_TFMR (AT91_CAST(AT91_REG *) 0xFFFD401C) // (SSC) Transmit Frame Mode Register -#define AT91C_SSC_IDR (AT91_CAST(AT91_REG *) 0xFFFD4048) // (SSC) Interrupt Disable Register -#define AT91C_SSC_THR (AT91_CAST(AT91_REG *) 0xFFFD4024) // (SSC) Transmit Holding Register -#define AT91C_SSC_RCMR (AT91_CAST(AT91_REG *) 0xFFFD4010) // (SSC) Receive Clock ModeRegister -#define AT91C_SSC_IER (AT91_CAST(AT91_REG *) 0xFFFD4044) // (SSC) Interrupt Enable Register -#define AT91C_SSC_TSHR (AT91_CAST(AT91_REG *) 0xFFFD4034) // (SSC) Transmit Sync Holding Register -#define AT91C_SSC_SR (AT91_CAST(AT91_REG *) 0xFFFD4040) // (SSC) Status Register -#define AT91C_SSC_CMR (AT91_CAST(AT91_REG *) 0xFFFD4004) // (SSC) Clock Mode Register -#define AT91C_SSC_TCMR (AT91_CAST(AT91_REG *) 0xFFFD4018) // (SSC) Transmit Clock Mode Register -#define AT91C_SSC_CR (AT91_CAST(AT91_REG *) 0xFFFD4000) // (SSC) Control Register -#define AT91C_SSC_IMR (AT91_CAST(AT91_REG *) 0xFFFD404C) // (SSC) Interrupt Mask Register -#define AT91C_SSC_RFMR (AT91_CAST(AT91_REG *) 0xFFFD4014) // (SSC) Receive Frame Mode Register -// ========== Register definition for TWI peripheral ========== -#define AT91C_TWI_IER (AT91_CAST(AT91_REG *) 0xFFFB8024) // (TWI) Interrupt Enable Register -#define AT91C_TWI_CR (AT91_CAST(AT91_REG *) 0xFFFB8000) // (TWI) Control Register -#define AT91C_TWI_SR (AT91_CAST(AT91_REG *) 0xFFFB8020) // (TWI) Status Register -#define AT91C_TWI_IMR (AT91_CAST(AT91_REG *) 0xFFFB802C) // (TWI) Interrupt Mask Register -#define AT91C_TWI_THR (AT91_CAST(AT91_REG *) 0xFFFB8034) // (TWI) Transmit Holding Register -#define AT91C_TWI_IDR (AT91_CAST(AT91_REG *) 0xFFFB8028) // (TWI) Interrupt Disable Register -#define AT91C_TWI_IADR (AT91_CAST(AT91_REG *) 0xFFFB800C) // (TWI) Internal Address Register -#define AT91C_TWI_MMR (AT91_CAST(AT91_REG *) 0xFFFB8004) // (TWI) Master Mode Register -#define AT91C_TWI_CWGR (AT91_CAST(AT91_REG *) 0xFFFB8010) // (TWI) Clock Waveform Generator Register -#define AT91C_TWI_RHR (AT91_CAST(AT91_REG *) 0xFFFB8030) // (TWI) Receive Holding Register -// ========== Register definition for PWMC_CH3 peripheral ========== -#define AT91C_PWMC_CH3_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC270) // (PWMC_CH3) Channel Update Register -#define AT91C_PWMC_CH3_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC274) // (PWMC_CH3) Reserved -#define AT91C_PWMC_CH3_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC268) // (PWMC_CH3) Channel Period Register -#define AT91C_PWMC_CH3_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC264) // (PWMC_CH3) Channel Duty Cycle Register -#define AT91C_PWMC_CH3_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC26C) // (PWMC_CH3) Channel Counter Register -#define AT91C_PWMC_CH3_CMR (AT91_CAST(AT91_REG *) 0xFFFCC260) // (PWMC_CH3) Channel Mode Register -// ========== Register definition for PWMC_CH2 peripheral ========== -#define AT91C_PWMC_CH2_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC254) // (PWMC_CH2) Reserved -#define AT91C_PWMC_CH2_CMR (AT91_CAST(AT91_REG *) 0xFFFCC240) // (PWMC_CH2) Channel Mode Register -#define AT91C_PWMC_CH2_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC24C) // (PWMC_CH2) Channel Counter Register -#define AT91C_PWMC_CH2_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC248) // (PWMC_CH2) Channel Period Register -#define AT91C_PWMC_CH2_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC250) // (PWMC_CH2) Channel Update Register -#define AT91C_PWMC_CH2_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC244) // (PWMC_CH2) Channel Duty Cycle Register -// ========== Register definition for PWMC_CH1 peripheral ========== -#define AT91C_PWMC_CH1_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC234) // (PWMC_CH1) Reserved -#define AT91C_PWMC_CH1_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC230) // (PWMC_CH1) Channel Update Register -#define AT91C_PWMC_CH1_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC228) // (PWMC_CH1) Channel Period Register -#define AT91C_PWMC_CH1_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC22C) // (PWMC_CH1) Channel Counter Register -#define AT91C_PWMC_CH1_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC224) // (PWMC_CH1) Channel Duty Cycle Register -#define AT91C_PWMC_CH1_CMR (AT91_CAST(AT91_REG *) 0xFFFCC220) // (PWMC_CH1) Channel Mode Register -// ========== Register definition for PWMC_CH0 peripheral ========== -#define AT91C_PWMC_CH0_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC214) // (PWMC_CH0) Reserved -#define AT91C_PWMC_CH0_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC208) // (PWMC_CH0) Channel Period Register -#define AT91C_PWMC_CH0_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC204) // (PWMC_CH0) Channel Duty Cycle Register -#define AT91C_PWMC_CH0_CMR (AT91_CAST(AT91_REG *) 0xFFFCC200) // (PWMC_CH0) Channel Mode Register -#define AT91C_PWMC_CH0_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC210) // (PWMC_CH0) Channel Update Register -#define AT91C_PWMC_CH0_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC20C) // (PWMC_CH0) Channel Counter Register -// ========== Register definition for PWMC peripheral ========== -#define AT91C_PWMC_IDR (AT91_CAST(AT91_REG *) 0xFFFCC014) // (PWMC) PWMC Interrupt Disable Register -#define AT91C_PWMC_DIS (AT91_CAST(AT91_REG *) 0xFFFCC008) // (PWMC) PWMC Disable Register -#define AT91C_PWMC_IER (AT91_CAST(AT91_REG *) 0xFFFCC010) // (PWMC) PWMC Interrupt Enable Register -#define AT91C_PWMC_VR (AT91_CAST(AT91_REG *) 0xFFFCC0FC) // (PWMC) PWMC Version Register -#define AT91C_PWMC_ISR (AT91_CAST(AT91_REG *) 0xFFFCC01C) // (PWMC) PWMC Interrupt Status Register -#define AT91C_PWMC_SR (AT91_CAST(AT91_REG *) 0xFFFCC00C) // (PWMC) PWMC Status Register -#define AT91C_PWMC_IMR (AT91_CAST(AT91_REG *) 0xFFFCC018) // (PWMC) PWMC Interrupt Mask Register -#define AT91C_PWMC_MR (AT91_CAST(AT91_REG *) 0xFFFCC000) // (PWMC) PWMC Mode Register -#define AT91C_PWMC_ENA (AT91_CAST(AT91_REG *) 0xFFFCC004) // (PWMC) PWMC Enable Register -// ========== Register definition for UDP peripheral ========== -#define AT91C_UDP_IMR (AT91_CAST(AT91_REG *) 0xFFFB0018) // (UDP) Interrupt Mask Register -#define AT91C_UDP_FADDR (AT91_CAST(AT91_REG *) 0xFFFB0008) // (UDP) Function Address Register -#define AT91C_UDP_NUM (AT91_CAST(AT91_REG *) 0xFFFB0000) // (UDP) Frame Number Register -#define AT91C_UDP_FDR (AT91_CAST(AT91_REG *) 0xFFFB0050) // (UDP) Endpoint FIFO Data Register -#define AT91C_UDP_ISR (AT91_CAST(AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register -#define AT91C_UDP_CSR (AT91_CAST(AT91_REG *) 0xFFFB0030) // (UDP) Endpoint Control and Status Register -#define AT91C_UDP_IDR (AT91_CAST(AT91_REG *) 0xFFFB0014) // (UDP) Interrupt Disable Register -#define AT91C_UDP_ICR (AT91_CAST(AT91_REG *) 0xFFFB0020) // (UDP) Interrupt Clear Register -#define AT91C_UDP_RSTEP (AT91_CAST(AT91_REG *) 0xFFFB0028) // (UDP) Reset Endpoint Register -#define AT91C_UDP_TXVC (AT91_CAST(AT91_REG *) 0xFFFB0074) // (UDP) Transceiver Control Register -#define AT91C_UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0xFFFB0004) // (UDP) Global State Register -#define AT91C_UDP_IER (AT91_CAST(AT91_REG *) 0xFFFB0010) // (UDP) Interrupt Enable Register -// ========== Register definition for TC0 peripheral ========== -#define AT91C_TC0_SR (AT91_CAST(AT91_REG *) 0xFFFA0020) // (TC0) Status Register -#define AT91C_TC0_RC (AT91_CAST(AT91_REG *) 0xFFFA001C) // (TC0) Register C -#define AT91C_TC0_RB (AT91_CAST(AT91_REG *) 0xFFFA0018) // (TC0) Register B -#define AT91C_TC0_CCR (AT91_CAST(AT91_REG *) 0xFFFA0000) // (TC0) Channel Control Register -#define AT91C_TC0_CMR (AT91_CAST(AT91_REG *) 0xFFFA0004) // (TC0) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC0_IER (AT91_CAST(AT91_REG *) 0xFFFA0024) // (TC0) Interrupt Enable Register -#define AT91C_TC0_RA (AT91_CAST(AT91_REG *) 0xFFFA0014) // (TC0) Register A -#define AT91C_TC0_IDR (AT91_CAST(AT91_REG *) 0xFFFA0028) // (TC0) Interrupt Disable Register -#define AT91C_TC0_CV (AT91_CAST(AT91_REG *) 0xFFFA0010) // (TC0) Counter Value -#define AT91C_TC0_IMR (AT91_CAST(AT91_REG *) 0xFFFA002C) // (TC0) Interrupt Mask Register -// ========== Register definition for TC1 peripheral ========== -#define AT91C_TC1_RB (AT91_CAST(AT91_REG *) 0xFFFA0058) // (TC1) Register B -#define AT91C_TC1_CCR (AT91_CAST(AT91_REG *) 0xFFFA0040) // (TC1) Channel Control Register -#define AT91C_TC1_IER (AT91_CAST(AT91_REG *) 0xFFFA0064) // (TC1) Interrupt Enable Register -#define AT91C_TC1_IDR (AT91_CAST(AT91_REG *) 0xFFFA0068) // (TC1) Interrupt Disable Register -#define AT91C_TC1_SR (AT91_CAST(AT91_REG *) 0xFFFA0060) // (TC1) Status Register -#define AT91C_TC1_CMR (AT91_CAST(AT91_REG *) 0xFFFA0044) // (TC1) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC1_RA (AT91_CAST(AT91_REG *) 0xFFFA0054) // (TC1) Register A -#define AT91C_TC1_RC (AT91_CAST(AT91_REG *) 0xFFFA005C) // (TC1) Register C -#define AT91C_TC1_IMR (AT91_CAST(AT91_REG *) 0xFFFA006C) // (TC1) Interrupt Mask Register -#define AT91C_TC1_CV (AT91_CAST(AT91_REG *) 0xFFFA0050) // (TC1) Counter Value -// ========== Register definition for TC2 peripheral ========== -#define AT91C_TC2_CMR (AT91_CAST(AT91_REG *) 0xFFFA0084) // (TC2) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC2_CCR (AT91_CAST(AT91_REG *) 0xFFFA0080) // (TC2) Channel Control Register -#define AT91C_TC2_CV (AT91_CAST(AT91_REG *) 0xFFFA0090) // (TC2) Counter Value -#define AT91C_TC2_RA (AT91_CAST(AT91_REG *) 0xFFFA0094) // (TC2) Register A -#define AT91C_TC2_RB (AT91_CAST(AT91_REG *) 0xFFFA0098) // (TC2) Register B -#define AT91C_TC2_IDR (AT91_CAST(AT91_REG *) 0xFFFA00A8) // (TC2) Interrupt Disable Register -#define AT91C_TC2_IMR (AT91_CAST(AT91_REG *) 0xFFFA00AC) // (TC2) Interrupt Mask Register -#define AT91C_TC2_RC (AT91_CAST(AT91_REG *) 0xFFFA009C) // (TC2) Register C -#define AT91C_TC2_IER (AT91_CAST(AT91_REG *) 0xFFFA00A4) // (TC2) Interrupt Enable Register -#define AT91C_TC2_SR (AT91_CAST(AT91_REG *) 0xFFFA00A0) // (TC2) Status Register -// ========== Register definition for TCB peripheral ========== -#define AT91C_TCB_BMR (AT91_CAST(AT91_REG *) 0xFFFA00C4) // (TCB) TC Block Mode Register -#define AT91C_TCB_BCR (AT91_CAST(AT91_REG *) 0xFFFA00C0) // (TCB) TC Block Control Register -// ========== Register definition for CAN_MB0 peripheral ========== -#define AT91C_CAN_MB0_MDL (AT91_CAST(AT91_REG *) 0xFFFD0214) // (CAN_MB0) MailBox Data Low Register -#define AT91C_CAN_MB0_MAM (AT91_CAST(AT91_REG *) 0xFFFD0204) // (CAN_MB0) MailBox Acceptance Mask Register -#define AT91C_CAN_MB0_MCR (AT91_CAST(AT91_REG *) 0xFFFD021C) // (CAN_MB0) MailBox Control Register -#define AT91C_CAN_MB0_MID (AT91_CAST(AT91_REG *) 0xFFFD0208) // (CAN_MB0) MailBox ID Register -#define AT91C_CAN_MB0_MSR (AT91_CAST(AT91_REG *) 0xFFFD0210) // (CAN_MB0) MailBox Status Register -#define AT91C_CAN_MB0_MFID (AT91_CAST(AT91_REG *) 0xFFFD020C) // (CAN_MB0) MailBox Family ID Register -#define AT91C_CAN_MB0_MDH (AT91_CAST(AT91_REG *) 0xFFFD0218) // (CAN_MB0) MailBox Data High Register -#define AT91C_CAN_MB0_MMR (AT91_CAST(AT91_REG *) 0xFFFD0200) // (CAN_MB0) MailBox Mode Register -// ========== Register definition for CAN_MB1 peripheral ========== -#define AT91C_CAN_MB1_MDL (AT91_CAST(AT91_REG *) 0xFFFD0234) // (CAN_MB1) MailBox Data Low Register -#define AT91C_CAN_MB1_MID (AT91_CAST(AT91_REG *) 0xFFFD0228) // (CAN_MB1) MailBox ID Register -#define AT91C_CAN_MB1_MMR (AT91_CAST(AT91_REG *) 0xFFFD0220) // (CAN_MB1) MailBox Mode Register -#define AT91C_CAN_MB1_MSR (AT91_CAST(AT91_REG *) 0xFFFD0230) // (CAN_MB1) MailBox Status Register -#define AT91C_CAN_MB1_MAM (AT91_CAST(AT91_REG *) 0xFFFD0224) // (CAN_MB1) MailBox Acceptance Mask Register -#define AT91C_CAN_MB1_MDH (AT91_CAST(AT91_REG *) 0xFFFD0238) // (CAN_MB1) MailBox Data High Register -#define AT91C_CAN_MB1_MCR (AT91_CAST(AT91_REG *) 0xFFFD023C) // (CAN_MB1) MailBox Control Register -#define AT91C_CAN_MB1_MFID (AT91_CAST(AT91_REG *) 0xFFFD022C) // (CAN_MB1) MailBox Family ID Register -// ========== Register definition for CAN_MB2 peripheral ========== -#define AT91C_CAN_MB2_MCR (AT91_CAST(AT91_REG *) 0xFFFD025C) // (CAN_MB2) MailBox Control Register -#define AT91C_CAN_MB2_MDH (AT91_CAST(AT91_REG *) 0xFFFD0258) // (CAN_MB2) MailBox Data High Register -#define AT91C_CAN_MB2_MID (AT91_CAST(AT91_REG *) 0xFFFD0248) // (CAN_MB2) MailBox ID Register -#define AT91C_CAN_MB2_MDL (AT91_CAST(AT91_REG *) 0xFFFD0254) // (CAN_MB2) MailBox Data Low Register -#define AT91C_CAN_MB2_MMR (AT91_CAST(AT91_REG *) 0xFFFD0240) // (CAN_MB2) MailBox Mode Register -#define AT91C_CAN_MB2_MAM (AT91_CAST(AT91_REG *) 0xFFFD0244) // (CAN_MB2) MailBox Acceptance Mask Register -#define AT91C_CAN_MB2_MFID (AT91_CAST(AT91_REG *) 0xFFFD024C) // (CAN_MB2) MailBox Family ID Register -#define AT91C_CAN_MB2_MSR (AT91_CAST(AT91_REG *) 0xFFFD0250) // (CAN_MB2) MailBox Status Register -// ========== Register definition for CAN_MB3 peripheral ========== -#define AT91C_CAN_MB3_MFID (AT91_CAST(AT91_REG *) 0xFFFD026C) // (CAN_MB3) MailBox Family ID Register -#define AT91C_CAN_MB3_MAM (AT91_CAST(AT91_REG *) 0xFFFD0264) // (CAN_MB3) MailBox Acceptance Mask Register -#define AT91C_CAN_MB3_MID (AT91_CAST(AT91_REG *) 0xFFFD0268) // (CAN_MB3) MailBox ID Register -#define AT91C_CAN_MB3_MCR (AT91_CAST(AT91_REG *) 0xFFFD027C) // (CAN_MB3) MailBox Control Register -#define AT91C_CAN_MB3_MMR (AT91_CAST(AT91_REG *) 0xFFFD0260) // (CAN_MB3) MailBox Mode Register -#define AT91C_CAN_MB3_MSR (AT91_CAST(AT91_REG *) 0xFFFD0270) // (CAN_MB3) MailBox Status Register -#define AT91C_CAN_MB3_MDL (AT91_CAST(AT91_REG *) 0xFFFD0274) // (CAN_MB3) MailBox Data Low Register -#define AT91C_CAN_MB3_MDH (AT91_CAST(AT91_REG *) 0xFFFD0278) // (CAN_MB3) MailBox Data High Register -// ========== Register definition for CAN_MB4 peripheral ========== -#define AT91C_CAN_MB4_MID (AT91_CAST(AT91_REG *) 0xFFFD0288) // (CAN_MB4) MailBox ID Register -#define AT91C_CAN_MB4_MMR (AT91_CAST(AT91_REG *) 0xFFFD0280) // (CAN_MB4) MailBox Mode Register -#define AT91C_CAN_MB4_MDH (AT91_CAST(AT91_REG *) 0xFFFD0298) // (CAN_MB4) MailBox Data High Register -#define AT91C_CAN_MB4_MFID (AT91_CAST(AT91_REG *) 0xFFFD028C) // (CAN_MB4) MailBox Family ID Register -#define AT91C_CAN_MB4_MSR (AT91_CAST(AT91_REG *) 0xFFFD0290) // (CAN_MB4) MailBox Status Register -#define AT91C_CAN_MB4_MCR (AT91_CAST(AT91_REG *) 0xFFFD029C) // (CAN_MB4) MailBox Control Register -#define AT91C_CAN_MB4_MDL (AT91_CAST(AT91_REG *) 0xFFFD0294) // (CAN_MB4) MailBox Data Low Register -#define AT91C_CAN_MB4_MAM (AT91_CAST(AT91_REG *) 0xFFFD0284) // (CAN_MB4) MailBox Acceptance Mask Register -// ========== Register definition for CAN_MB5 peripheral ========== -#define AT91C_CAN_MB5_MSR (AT91_CAST(AT91_REG *) 0xFFFD02B0) // (CAN_MB5) MailBox Status Register -#define AT91C_CAN_MB5_MCR (AT91_CAST(AT91_REG *) 0xFFFD02BC) // (CAN_MB5) MailBox Control Register -#define AT91C_CAN_MB5_MFID (AT91_CAST(AT91_REG *) 0xFFFD02AC) // (CAN_MB5) MailBox Family ID Register -#define AT91C_CAN_MB5_MDH (AT91_CAST(AT91_REG *) 0xFFFD02B8) // (CAN_MB5) MailBox Data High Register -#define AT91C_CAN_MB5_MID (AT91_CAST(AT91_REG *) 0xFFFD02A8) // (CAN_MB5) MailBox ID Register -#define AT91C_CAN_MB5_MMR (AT91_CAST(AT91_REG *) 0xFFFD02A0) // (CAN_MB5) MailBox Mode Register -#define AT91C_CAN_MB5_MDL (AT91_CAST(AT91_REG *) 0xFFFD02B4) // (CAN_MB5) MailBox Data Low Register -#define AT91C_CAN_MB5_MAM (AT91_CAST(AT91_REG *) 0xFFFD02A4) // (CAN_MB5) MailBox Acceptance Mask Register -// ========== Register definition for CAN_MB6 peripheral ========== -#define AT91C_CAN_MB6_MFID (AT91_CAST(AT91_REG *) 0xFFFD02CC) // (CAN_MB6) MailBox Family ID Register -#define AT91C_CAN_MB6_MID (AT91_CAST(AT91_REG *) 0xFFFD02C8) // (CAN_MB6) MailBox ID Register -#define AT91C_CAN_MB6_MAM (AT91_CAST(AT91_REG *) 0xFFFD02C4) // (CAN_MB6) MailBox Acceptance Mask Register -#define AT91C_CAN_MB6_MSR (AT91_CAST(AT91_REG *) 0xFFFD02D0) // (CAN_MB6) MailBox Status Register -#define AT91C_CAN_MB6_MDL (AT91_CAST(AT91_REG *) 0xFFFD02D4) // (CAN_MB6) MailBox Data Low Register -#define AT91C_CAN_MB6_MCR (AT91_CAST(AT91_REG *) 0xFFFD02DC) // (CAN_MB6) MailBox Control Register -#define AT91C_CAN_MB6_MDH (AT91_CAST(AT91_REG *) 0xFFFD02D8) // (CAN_MB6) MailBox Data High Register -#define AT91C_CAN_MB6_MMR (AT91_CAST(AT91_REG *) 0xFFFD02C0) // (CAN_MB6) MailBox Mode Register -// ========== Register definition for CAN_MB7 peripheral ========== -#define AT91C_CAN_MB7_MCR (AT91_CAST(AT91_REG *) 0xFFFD02FC) // (CAN_MB7) MailBox Control Register -#define AT91C_CAN_MB7_MDH (AT91_CAST(AT91_REG *) 0xFFFD02F8) // (CAN_MB7) MailBox Data High Register -#define AT91C_CAN_MB7_MFID (AT91_CAST(AT91_REG *) 0xFFFD02EC) // (CAN_MB7) MailBox Family ID Register -#define AT91C_CAN_MB7_MDL (AT91_CAST(AT91_REG *) 0xFFFD02F4) // (CAN_MB7) MailBox Data Low Register -#define AT91C_CAN_MB7_MID (AT91_CAST(AT91_REG *) 0xFFFD02E8) // (CAN_MB7) MailBox ID Register -#define AT91C_CAN_MB7_MMR (AT91_CAST(AT91_REG *) 0xFFFD02E0) // (CAN_MB7) MailBox Mode Register -#define AT91C_CAN_MB7_MAM (AT91_CAST(AT91_REG *) 0xFFFD02E4) // (CAN_MB7) MailBox Acceptance Mask Register -#define AT91C_CAN_MB7_MSR (AT91_CAST(AT91_REG *) 0xFFFD02F0) // (CAN_MB7) MailBox Status Register -// ========== Register definition for CAN peripheral ========== -#define AT91C_CAN_TCR (AT91_CAST(AT91_REG *) 0xFFFD0024) // (CAN) Transfer Command Register -#define AT91C_CAN_IMR (AT91_CAST(AT91_REG *) 0xFFFD000C) // (CAN) Interrupt Mask Register -#define AT91C_CAN_IER (AT91_CAST(AT91_REG *) 0xFFFD0004) // (CAN) Interrupt Enable Register -#define AT91C_CAN_ECR (AT91_CAST(AT91_REG *) 0xFFFD0020) // (CAN) Error Counter Register -#define AT91C_CAN_TIMESTP (AT91_CAST(AT91_REG *) 0xFFFD001C) // (CAN) Time Stamp Register -#define AT91C_CAN_MR (AT91_CAST(AT91_REG *) 0xFFFD0000) // (CAN) Mode Register -#define AT91C_CAN_IDR (AT91_CAST(AT91_REG *) 0xFFFD0008) // (CAN) Interrupt Disable Register -#define AT91C_CAN_ACR (AT91_CAST(AT91_REG *) 0xFFFD0028) // (CAN) Abort Command Register -#define AT91C_CAN_TIM (AT91_CAST(AT91_REG *) 0xFFFD0018) // (CAN) Timer Register -#define AT91C_CAN_SR (AT91_CAST(AT91_REG *) 0xFFFD0010) // (CAN) Status Register -#define AT91C_CAN_BR (AT91_CAST(AT91_REG *) 0xFFFD0014) // (CAN) Baudrate Register -#define AT91C_CAN_VR (AT91_CAST(AT91_REG *) 0xFFFD00FC) // (CAN) Version Register -// ========== Register definition for EMAC peripheral ========== -#define AT91C_EMAC_ISR (AT91_CAST(AT91_REG *) 0xFFFDC024) // (EMAC) Interrupt Status Register -#define AT91C_EMAC_SA4H (AT91_CAST(AT91_REG *) 0xFFFDC0B4) // (EMAC) Specific Address 4 Top, Last 2 bytes -#define AT91C_EMAC_SA1L (AT91_CAST(AT91_REG *) 0xFFFDC098) // (EMAC) Specific Address 1 Bottom, First 4 bytes -#define AT91C_EMAC_ELE (AT91_CAST(AT91_REG *) 0xFFFDC078) // (EMAC) Excessive Length Errors Register -#define AT91C_EMAC_LCOL (AT91_CAST(AT91_REG *) 0xFFFDC05C) // (EMAC) Late Collision Register -#define AT91C_EMAC_RLE (AT91_CAST(AT91_REG *) 0xFFFDC088) // (EMAC) Receive Length Field Mismatch Register -#define AT91C_EMAC_WOL (AT91_CAST(AT91_REG *) 0xFFFDC0C4) // (EMAC) Wake On LAN Register -#define AT91C_EMAC_DTF (AT91_CAST(AT91_REG *) 0xFFFDC058) // (EMAC) Deferred Transmission Frame Register -#define AT91C_EMAC_TUND (AT91_CAST(AT91_REG *) 0xFFFDC064) // (EMAC) Transmit Underrun Error Register -#define AT91C_EMAC_NCR (AT91_CAST(AT91_REG *) 0xFFFDC000) // (EMAC) Network Control Register -#define AT91C_EMAC_SA4L (AT91_CAST(AT91_REG *) 0xFFFDC0B0) // (EMAC) Specific Address 4 Bottom, First 4 bytes -#define AT91C_EMAC_RSR (AT91_CAST(AT91_REG *) 0xFFFDC020) // (EMAC) Receive Status Register -#define AT91C_EMAC_SA3L (AT91_CAST(AT91_REG *) 0xFFFDC0A8) // (EMAC) Specific Address 3 Bottom, First 4 bytes -#define AT91C_EMAC_TSR (AT91_CAST(AT91_REG *) 0xFFFDC014) // (EMAC) Transmit Status Register -#define AT91C_EMAC_IDR (AT91_CAST(AT91_REG *) 0xFFFDC02C) // (EMAC) Interrupt Disable Register -#define AT91C_EMAC_RSE (AT91_CAST(AT91_REG *) 0xFFFDC074) // (EMAC) Receive Symbol Errors Register -#define AT91C_EMAC_ECOL (AT91_CAST(AT91_REG *) 0xFFFDC060) // (EMAC) Excessive Collision Register -#define AT91C_EMAC_TID (AT91_CAST(AT91_REG *) 0xFFFDC0B8) // (EMAC) Type ID Checking Register -#define AT91C_EMAC_HRB (AT91_CAST(AT91_REG *) 0xFFFDC090) // (EMAC) Hash Address Bottom[31:0] -#define AT91C_EMAC_TBQP (AT91_CAST(AT91_REG *) 0xFFFDC01C) // (EMAC) Transmit Buffer Queue Pointer -#define AT91C_EMAC_USRIO (AT91_CAST(AT91_REG *) 0xFFFDC0C0) // (EMAC) USER Input/Output Register -#define AT91C_EMAC_PTR (AT91_CAST(AT91_REG *) 0xFFFDC038) // (EMAC) Pause Time Register -#define AT91C_EMAC_SA2H (AT91_CAST(AT91_REG *) 0xFFFDC0A4) // (EMAC) Specific Address 2 Top, Last 2 bytes -#define AT91C_EMAC_ROV (AT91_CAST(AT91_REG *) 0xFFFDC070) // (EMAC) Receive Overrun Errors Register -#define AT91C_EMAC_ALE (AT91_CAST(AT91_REG *) 0xFFFDC054) // (EMAC) Alignment Error Register -#define AT91C_EMAC_RJA (AT91_CAST(AT91_REG *) 0xFFFDC07C) // (EMAC) Receive Jabbers Register -#define AT91C_EMAC_RBQP (AT91_CAST(AT91_REG *) 0xFFFDC018) // (EMAC) Receive Buffer Queue Pointer -#define AT91C_EMAC_TPF (AT91_CAST(AT91_REG *) 0xFFFDC08C) // (EMAC) Transmitted Pause Frames Register -#define AT91C_EMAC_NCFGR (AT91_CAST(AT91_REG *) 0xFFFDC004) // (EMAC) Network Configuration Register -#define AT91C_EMAC_HRT (AT91_CAST(AT91_REG *) 0xFFFDC094) // (EMAC) Hash Address Top[63:32] -#define AT91C_EMAC_USF (AT91_CAST(AT91_REG *) 0xFFFDC080) // (EMAC) Undersize Frames Register -#define AT91C_EMAC_FCSE (AT91_CAST(AT91_REG *) 0xFFFDC050) // (EMAC) Frame Check Sequence Error Register -#define AT91C_EMAC_TPQ (AT91_CAST(AT91_REG *) 0xFFFDC0BC) // (EMAC) Transmit Pause Quantum Register -#define AT91C_EMAC_MAN (AT91_CAST(AT91_REG *) 0xFFFDC034) // (EMAC) PHY Maintenance Register -#define AT91C_EMAC_FTO (AT91_CAST(AT91_REG *) 0xFFFDC040) // (EMAC) Frames Transmitted OK Register -#define AT91C_EMAC_REV (AT91_CAST(AT91_REG *) 0xFFFDC0FC) // (EMAC) Revision Register -#define AT91C_EMAC_IMR (AT91_CAST(AT91_REG *) 0xFFFDC030) // (EMAC) Interrupt Mask Register -#define AT91C_EMAC_SCF (AT91_CAST(AT91_REG *) 0xFFFDC044) // (EMAC) Single Collision Frame Register -#define AT91C_EMAC_PFR (AT91_CAST(AT91_REG *) 0xFFFDC03C) // (EMAC) Pause Frames received Register -#define AT91C_EMAC_MCF (AT91_CAST(AT91_REG *) 0xFFFDC048) // (EMAC) Multiple Collision Frame Register -#define AT91C_EMAC_NSR (AT91_CAST(AT91_REG *) 0xFFFDC008) // (EMAC) Network Status Register -#define AT91C_EMAC_SA2L (AT91_CAST(AT91_REG *) 0xFFFDC0A0) // (EMAC) Specific Address 2 Bottom, First 4 bytes -#define AT91C_EMAC_FRO (AT91_CAST(AT91_REG *) 0xFFFDC04C) // (EMAC) Frames Received OK Register -#define AT91C_EMAC_IER (AT91_CAST(AT91_REG *) 0xFFFDC028) // (EMAC) Interrupt Enable Register -#define AT91C_EMAC_SA1H (AT91_CAST(AT91_REG *) 0xFFFDC09C) // (EMAC) Specific Address 1 Top, Last 2 bytes -#define AT91C_EMAC_CSE (AT91_CAST(AT91_REG *) 0xFFFDC068) // (EMAC) Carrier Sense Error Register -#define AT91C_EMAC_SA3H (AT91_CAST(AT91_REG *) 0xFFFDC0AC) // (EMAC) Specific Address 3 Top, Last 2 bytes -#define AT91C_EMAC_RRE (AT91_CAST(AT91_REG *) 0xFFFDC06C) // (EMAC) Receive Ressource Error Register -#define AT91C_EMAC_STE (AT91_CAST(AT91_REG *) 0xFFFDC084) // (EMAC) SQE Test Error Register -// ========== Register definition for PDC_ADC peripheral ========== -#define AT91C_ADC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD8124) // (PDC_ADC) PDC Transfer Status Register -#define AT91C_ADC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD8120) // (PDC_ADC) PDC Transfer Control Register -#define AT91C_ADC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD8118) // (PDC_ADC) Transmit Next Pointer Register -#define AT91C_ADC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD811C) // (PDC_ADC) Transmit Next Counter Register -#define AT91C_ADC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD8110) // (PDC_ADC) Receive Next Pointer Register -#define AT91C_ADC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD8114) // (PDC_ADC) Receive Next Counter Register -#define AT91C_ADC_RPR (AT91_CAST(AT91_REG *) 0xFFFD8100) // (PDC_ADC) Receive Pointer Register -#define AT91C_ADC_TCR (AT91_CAST(AT91_REG *) 0xFFFD810C) // (PDC_ADC) Transmit Counter Register -#define AT91C_ADC_TPR (AT91_CAST(AT91_REG *) 0xFFFD8108) // (PDC_ADC) Transmit Pointer Register -#define AT91C_ADC_RCR (AT91_CAST(AT91_REG *) 0xFFFD8104) // (PDC_ADC) Receive Counter Register -// ========== Register definition for ADC peripheral ========== -#define AT91C_ADC_CDR2 (AT91_CAST(AT91_REG *) 0xFFFD8038) // (ADC) ADC Channel Data Register 2 -#define AT91C_ADC_CDR3 (AT91_CAST(AT91_REG *) 0xFFFD803C) // (ADC) ADC Channel Data Register 3 -#define AT91C_ADC_CDR0 (AT91_CAST(AT91_REG *) 0xFFFD8030) // (ADC) ADC Channel Data Register 0 -#define AT91C_ADC_CDR5 (AT91_CAST(AT91_REG *) 0xFFFD8044) // (ADC) ADC Channel Data Register 5 -#define AT91C_ADC_CHDR (AT91_CAST(AT91_REG *) 0xFFFD8014) // (ADC) ADC Channel Disable Register -#define AT91C_ADC_SR (AT91_CAST(AT91_REG *) 0xFFFD801C) // (ADC) ADC Status Register -#define AT91C_ADC_CDR4 (AT91_CAST(AT91_REG *) 0xFFFD8040) // (ADC) ADC Channel Data Register 4 -#define AT91C_ADC_CDR1 (AT91_CAST(AT91_REG *) 0xFFFD8034) // (ADC) ADC Channel Data Register 1 -#define AT91C_ADC_LCDR (AT91_CAST(AT91_REG *) 0xFFFD8020) // (ADC) ADC Last Converted Data Register -#define AT91C_ADC_IDR (AT91_CAST(AT91_REG *) 0xFFFD8028) // (ADC) ADC Interrupt Disable Register -#define AT91C_ADC_CR (AT91_CAST(AT91_REG *) 0xFFFD8000) // (ADC) ADC Control Register -#define AT91C_ADC_CDR7 (AT91_CAST(AT91_REG *) 0xFFFD804C) // (ADC) ADC Channel Data Register 7 -#define AT91C_ADC_CDR6 (AT91_CAST(AT91_REG *) 0xFFFD8048) // (ADC) ADC Channel Data Register 6 -#define AT91C_ADC_IER (AT91_CAST(AT91_REG *) 0xFFFD8024) // (ADC) ADC Interrupt Enable Register -#define AT91C_ADC_CHER (AT91_CAST(AT91_REG *) 0xFFFD8010) // (ADC) ADC Channel Enable Register -#define AT91C_ADC_CHSR (AT91_CAST(AT91_REG *) 0xFFFD8018) // (ADC) ADC Channel Status Register -#define AT91C_ADC_MR (AT91_CAST(AT91_REG *) 0xFFFD8004) // (ADC) ADC Mode Register -#define AT91C_ADC_IMR (AT91_CAST(AT91_REG *) 0xFFFD802C) // (ADC) ADC Interrupt Mask Register - -// ***************************************************************************** -// PIO DEFINITIONS FOR AT91SAM7X128 -// ***************************************************************************** -#define AT91C_PIO_PA0 (1 << 0) // Pin Controlled by PA0 -#define AT91C_PA0_RXD0 (AT91C_PIO_PA0) // USART 0 Receive Data -#define AT91C_PIO_PA1 (1 << 1) // Pin Controlled by PA1 -#define AT91C_PA1_TXD0 (AT91C_PIO_PA1) // USART 0 Transmit Data -#define AT91C_PIO_PA10 (1 << 10) // Pin Controlled by PA10 -#define AT91C_PA10_TWD (AT91C_PIO_PA10) // TWI Two-wire Serial Data -#define AT91C_PIO_PA11 (1 << 11) // Pin Controlled by PA11 -#define AT91C_PA11_TWCK (AT91C_PIO_PA11) // TWI Two-wire Serial Clock -#define AT91C_PIO_PA12 (1 << 12) // Pin Controlled by PA12 -#define AT91C_PA12_SPI0_NPCS0 (AT91C_PIO_PA12) // SPI 0 Peripheral Chip Select 0 -#define AT91C_PIO_PA13 (1 << 13) // Pin Controlled by PA13 -#define AT91C_PA13_SPI0_NPCS1 (AT91C_PIO_PA13) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PA13_PCK1 (AT91C_PIO_PA13) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA14 (1 << 14) // Pin Controlled by PA14 -#define AT91C_PA14_SPI0_NPCS2 (AT91C_PIO_PA14) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PA14_IRQ1 (AT91C_PIO_PA14) // External Interrupt 1 -#define AT91C_PIO_PA15 (1 << 15) // Pin Controlled by PA15 -#define AT91C_PA15_SPI0_NPCS3 (AT91C_PIO_PA15) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PA15_TCLK2 (AT91C_PIO_PA15) // Timer Counter 2 external clock input -#define AT91C_PIO_PA16 (1 << 16) // Pin Controlled by PA16 -#define AT91C_PA16_SPI0_MISO (AT91C_PIO_PA16) // SPI 0 Master In Slave -#define AT91C_PIO_PA17 (1 << 17) // Pin Controlled by PA17 -#define AT91C_PA17_SPI0_MOSI (AT91C_PIO_PA17) // SPI 0 Master Out Slave -#define AT91C_PIO_PA18 (1 << 18) // Pin Controlled by PA18 -#define AT91C_PA18_SPI0_SPCK (AT91C_PIO_PA18) // SPI 0 Serial Clock -#define AT91C_PIO_PA19 (1 << 19) // Pin Controlled by PA19 -#define AT91C_PA19_CANRX (AT91C_PIO_PA19) // CAN Receive -#define AT91C_PIO_PA2 (1 << 2) // Pin Controlled by PA2 -#define AT91C_PA2_SCK0 (AT91C_PIO_PA2) // USART 0 Serial Clock -#define AT91C_PA2_SPI1_NPCS1 (AT91C_PIO_PA2) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PA20 (1 << 20) // Pin Controlled by PA20 -#define AT91C_PA20_CANTX (AT91C_PIO_PA20) // CAN Transmit -#define AT91C_PIO_PA21 (1 << 21) // Pin Controlled by PA21 -#define AT91C_PA21_TF (AT91C_PIO_PA21) // SSC Transmit Frame Sync -#define AT91C_PA21_SPI1_NPCS0 (AT91C_PIO_PA21) // SPI 1 Peripheral Chip Select 0 -#define AT91C_PIO_PA22 (1 << 22) // Pin Controlled by PA22 -#define AT91C_PA22_TK (AT91C_PIO_PA22) // SSC Transmit Clock -#define AT91C_PA22_SPI1_SPCK (AT91C_PIO_PA22) // SPI 1 Serial Clock -#define AT91C_PIO_PA23 (1 << 23) // Pin Controlled by PA23 -#define AT91C_PA23_TD (AT91C_PIO_PA23) // SSC Transmit data -#define AT91C_PA23_SPI1_MOSI (AT91C_PIO_PA23) // SPI 1 Master Out Slave -#define AT91C_PIO_PA24 (1 << 24) // Pin Controlled by PA24 -#define AT91C_PA24_RD (AT91C_PIO_PA24) // SSC Receive Data -#define AT91C_PA24_SPI1_MISO (AT91C_PIO_PA24) // SPI 1 Master In Slave -#define AT91C_PIO_PA25 (1 << 25) // Pin Controlled by PA25 -#define AT91C_PA25_RK (AT91C_PIO_PA25) // SSC Receive Clock -#define AT91C_PA25_SPI1_NPCS1 (AT91C_PIO_PA25) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PA26 (1 << 26) // Pin Controlled by PA26 -#define AT91C_PA26_RF (AT91C_PIO_PA26) // SSC Receive Frame Sync -#define AT91C_PA26_SPI1_NPCS2 (AT91C_PIO_PA26) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PA27 (1 << 27) // Pin Controlled by PA27 -#define AT91C_PA27_DRXD (AT91C_PIO_PA27) // DBGU Debug Receive Data -#define AT91C_PA27_PCK3 (AT91C_PIO_PA27) // PMC Programmable Clock Output 3 -#define AT91C_PIO_PA28 (1 << 28) // Pin Controlled by PA28 -#define AT91C_PA28_DTXD (AT91C_PIO_PA28) // DBGU Debug Transmit Data -#define AT91C_PIO_PA29 (1 << 29) // Pin Controlled by PA29 -#define AT91C_PA29_FIQ (AT91C_PIO_PA29) // AIC Fast Interrupt Input -#define AT91C_PA29_SPI1_NPCS3 (AT91C_PIO_PA29) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PA3 (1 << 3) // Pin Controlled by PA3 -#define AT91C_PA3_RTS0 (AT91C_PIO_PA3) // USART 0 Ready To Send -#define AT91C_PA3_SPI1_NPCS2 (AT91C_PIO_PA3) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PA30 (1 << 30) // Pin Controlled by PA30 -#define AT91C_PA30_IRQ0 (AT91C_PIO_PA30) // External Interrupt 0 -#define AT91C_PA30_PCK2 (AT91C_PIO_PA30) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA4 (1 << 4) // Pin Controlled by PA4 -#define AT91C_PA4_CTS0 (AT91C_PIO_PA4) // USART 0 Clear To Send -#define AT91C_PA4_SPI1_NPCS3 (AT91C_PIO_PA4) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PA5 (1 << 5) // Pin Controlled by PA5 -#define AT91C_PA5_RXD1 (AT91C_PIO_PA5) // USART 1 Receive Data -#define AT91C_PIO_PA6 (1 << 6) // Pin Controlled by PA6 -#define AT91C_PA6_TXD1 (AT91C_PIO_PA6) // USART 1 Transmit Data -#define AT91C_PIO_PA7 (1 << 7) // Pin Controlled by PA7 -#define AT91C_PA7_SCK1 (AT91C_PIO_PA7) // USART 1 Serial Clock -#define AT91C_PA7_SPI0_NPCS1 (AT91C_PIO_PA7) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PIO_PA8 (1 << 8) // Pin Controlled by PA8 -#define AT91C_PA8_RTS1 (AT91C_PIO_PA8) // USART 1 Ready To Send -#define AT91C_PA8_SPI0_NPCS2 (AT91C_PIO_PA8) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PIO_PA9 (1 << 9) // Pin Controlled by PA9 -#define AT91C_PA9_CTS1 (AT91C_PIO_PA9) // USART 1 Clear To Send -#define AT91C_PA9_SPI0_NPCS3 (AT91C_PIO_PA9) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PIO_PB0 (1 << 0) // Pin Controlled by PB0 -#define AT91C_PB0_ETXCK_EREFCK (AT91C_PIO_PB0) // Ethernet MAC Transmit Clock/Reference Clock -#define AT91C_PB0_PCK0 (AT91C_PIO_PB0) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PB1 (1 << 1) // Pin Controlled by PB1 -#define AT91C_PB1_ETXEN (AT91C_PIO_PB1) // Ethernet MAC Transmit Enable -#define AT91C_PIO_PB10 (1 << 10) // Pin Controlled by PB10 -#define AT91C_PB10_ETX2 (AT91C_PIO_PB10) // Ethernet MAC Transmit Data 2 -#define AT91C_PB10_SPI1_NPCS1 (AT91C_PIO_PB10) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PB11 (1 << 11) // Pin Controlled by PB11 -#define AT91C_PB11_ETX3 (AT91C_PIO_PB11) // Ethernet MAC Transmit Data 3 -#define AT91C_PB11_SPI1_NPCS2 (AT91C_PIO_PB11) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PB12 (1 << 12) // Pin Controlled by PB12 -#define AT91C_PB12_ETXER (AT91C_PIO_PB12) // Ethernet MAC Transmikt Coding Error -#define AT91C_PB12_TCLK0 (AT91C_PIO_PB12) // Timer Counter 0 external clock input -#define AT91C_PIO_PB13 (1 << 13) // Pin Controlled by PB13 -#define AT91C_PB13_ERX2 (AT91C_PIO_PB13) // Ethernet MAC Receive Data 2 -#define AT91C_PB13_SPI0_NPCS1 (AT91C_PIO_PB13) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PIO_PB14 (1 << 14) // Pin Controlled by PB14 -#define AT91C_PB14_ERX3 (AT91C_PIO_PB14) // Ethernet MAC Receive Data 3 -#define AT91C_PB14_SPI0_NPCS2 (AT91C_PIO_PB14) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PIO_PB15 (1 << 15) // Pin Controlled by PB15 -#define AT91C_PB15_ERXDV_ECRSDV (AT91C_PIO_PB15) // Ethernet MAC Receive Data Valid -#define AT91C_PIO_PB16 (1 << 16) // Pin Controlled by PB16 -#define AT91C_PB16_ECOL (AT91C_PIO_PB16) // Ethernet MAC Collision Detected -#define AT91C_PB16_SPI1_NPCS3 (AT91C_PIO_PB16) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PB17 (1 << 17) // Pin Controlled by PB17 -#define AT91C_PB17_ERXCK (AT91C_PIO_PB17) // Ethernet MAC Receive Clock -#define AT91C_PB17_SPI0_NPCS3 (AT91C_PIO_PB17) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PIO_PB18 (1 << 18) // Pin Controlled by PB18 -#define AT91C_PB18_EF100 (AT91C_PIO_PB18) // Ethernet MAC Force 100 Mbits/sec -#define AT91C_PB18_ADTRG (AT91C_PIO_PB18) // ADC External Trigger -#define AT91C_PIO_PB19 (1 << 19) // Pin Controlled by PB19 -#define AT91C_PB19_PWM0 (AT91C_PIO_PB19) // PWM Channel 0 -#define AT91C_PB19_TCLK1 (AT91C_PIO_PB19) // Timer Counter 1 external clock input -#define AT91C_PIO_PB2 (1 << 2) // Pin Controlled by PB2 -#define AT91C_PB2_ETX0 (AT91C_PIO_PB2) // Ethernet MAC Transmit Data 0 -#define AT91C_PIO_PB20 (1 << 20) // Pin Controlled by PB20 -#define AT91C_PB20_PWM1 (AT91C_PIO_PB20) // PWM Channel 1 -#define AT91C_PB20_PCK0 (AT91C_PIO_PB20) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PB21 (1 << 21) // Pin Controlled by PB21 -#define AT91C_PB21_PWM2 (AT91C_PIO_PB21) // PWM Channel 2 -#define AT91C_PB21_PCK1 (AT91C_PIO_PB21) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PB22 (1 << 22) // Pin Controlled by PB22 -#define AT91C_PB22_PWM3 (AT91C_PIO_PB22) // PWM Channel 3 -#define AT91C_PB22_PCK2 (AT91C_PIO_PB22) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PB23 (1 << 23) // Pin Controlled by PB23 -#define AT91C_PB23_TIOA0 (AT91C_PIO_PB23) // Timer Counter 0 Multipurpose Timer I/O Pin A -#define AT91C_PB23_DCD1 (AT91C_PIO_PB23) // USART 1 Data Carrier Detect -#define AT91C_PIO_PB24 (1 << 24) // Pin Controlled by PB24 -#define AT91C_PB24_TIOB0 (AT91C_PIO_PB24) // Timer Counter 0 Multipurpose Timer I/O Pin B -#define AT91C_PB24_DSR1 (AT91C_PIO_PB24) // USART 1 Data Set ready -#define AT91C_PIO_PB25 (1 << 25) // Pin Controlled by PB25 -#define AT91C_PB25_TIOA1 (AT91C_PIO_PB25) // Timer Counter 1 Multipurpose Timer I/O Pin A -#define AT91C_PB25_DTR1 (AT91C_PIO_PB25) // USART 1 Data Terminal ready -#define AT91C_PIO_PB26 (1 << 26) // Pin Controlled by PB26 -#define AT91C_PB26_TIOB1 (AT91C_PIO_PB26) // Timer Counter 1 Multipurpose Timer I/O Pin B -#define AT91C_PB26_RI1 (AT91C_PIO_PB26) // USART 1 Ring Indicator -#define AT91C_PIO_PB27 (1 << 27) // Pin Controlled by PB27 -#define AT91C_PB27_TIOA2 (AT91C_PIO_PB27) // Timer Counter 2 Multipurpose Timer I/O Pin A -#define AT91C_PB27_PWM0 (AT91C_PIO_PB27) // PWM Channel 0 -#define AT91C_PIO_PB28 (1 << 28) // Pin Controlled by PB28 -#define AT91C_PB28_TIOB2 (AT91C_PIO_PB28) // Timer Counter 2 Multipurpose Timer I/O Pin B -#define AT91C_PB28_PWM1 (AT91C_PIO_PB28) // PWM Channel 1 -#define AT91C_PIO_PB29 (1 << 29) // Pin Controlled by PB29 -#define AT91C_PB29_PCK1 (AT91C_PIO_PB29) // PMC Programmable Clock Output 1 -#define AT91C_PB29_PWM2 (AT91C_PIO_PB29) // PWM Channel 2 -#define AT91C_PIO_PB3 (1 << 3) // Pin Controlled by PB3 -#define AT91C_PB3_ETX1 (AT91C_PIO_PB3) // Ethernet MAC Transmit Data 1 -#define AT91C_PIO_PB30 (1 << 30) // Pin Controlled by PB30 -#define AT91C_PB30_PCK2 (AT91C_PIO_PB30) // PMC Programmable Clock Output 2 -#define AT91C_PB30_PWM3 (AT91C_PIO_PB30) // PWM Channel 3 -#define AT91C_PIO_PB4 (1 << 4) // Pin Controlled by PB4 -#define AT91C_PB4_ECRS (AT91C_PIO_PB4) // Ethernet MAC Carrier Sense/Carrier Sense and Data Valid -#define AT91C_PIO_PB5 (1 << 5) // Pin Controlled by PB5 -#define AT91C_PB5_ERX0 (AT91C_PIO_PB5) // Ethernet MAC Receive Data 0 -#define AT91C_PIO_PB6 (1 << 6) // Pin Controlled by PB6 -#define AT91C_PB6_ERX1 (AT91C_PIO_PB6) // Ethernet MAC Receive Data 1 -#define AT91C_PIO_PB7 (1 << 7) // Pin Controlled by PB7 -#define AT91C_PB7_ERXER (AT91C_PIO_PB7) // Ethernet MAC Receive Error -#define AT91C_PIO_PB8 (1 << 8) // Pin Controlled by PB8 -#define AT91C_PB8_EMDC (AT91C_PIO_PB8) // Ethernet MAC Management Data Clock -#define AT91C_PIO_PB9 (1 << 9) // Pin Controlled by PB9 -#define AT91C_PB9_EMDIO (AT91C_PIO_PB9) // Ethernet MAC Management Data Input/Output - -// ***************************************************************************** -// PERIPHERAL ID DEFINITIONS FOR AT91SAM7X128 -// ***************************************************************************** -#define AT91C_ID_FIQ ( 0) // Advanced Interrupt Controller (FIQ) -#define AT91C_ID_SYS ( 1) // System Peripheral -#define AT91C_ID_PIOA ( 2) // Parallel IO Controller A -#define AT91C_ID_PIOB ( 3) // Parallel IO Controller B -#define AT91C_ID_SPI0 ( 4) // Serial Peripheral Interface 0 -#define AT91C_ID_SPI1 ( 5) // Serial Peripheral Interface 1 -#define AT91C_ID_US0 ( 6) // USART 0 -#define AT91C_ID_US1 ( 7) // USART 1 -#define AT91C_ID_SSC ( 8) // Serial Synchronous Controller -#define AT91C_ID_TWI ( 9) // Two-Wire Interface -#define AT91C_ID_PWMC (10) // PWM Controller -#define AT91C_ID_UDP (11) // USB Device Port -#define AT91C_ID_TC0 (12) // Timer Counter 0 -#define AT91C_ID_TC1 (13) // Timer Counter 1 -#define AT91C_ID_TC2 (14) // Timer Counter 2 -#define AT91C_ID_CAN (15) // Control Area Network Controller -#define AT91C_ID_EMAC (16) // Ethernet MAC -#define AT91C_ID_ADC (17) // Analog-to-Digital Converter -#define AT91C_ID_18_Reserved (18) // Reserved -#define AT91C_ID_19_Reserved (19) // Reserved -#define AT91C_ID_20_Reserved (20) // Reserved -#define AT91C_ID_21_Reserved (21) // Reserved -#define AT91C_ID_22_Reserved (22) // Reserved -#define AT91C_ID_23_Reserved (23) // Reserved -#define AT91C_ID_24_Reserved (24) // Reserved -#define AT91C_ID_25_Reserved (25) // Reserved -#define AT91C_ID_26_Reserved (26) // Reserved -#define AT91C_ID_27_Reserved (27) // Reserved -#define AT91C_ID_28_Reserved (28) // Reserved -#define AT91C_ID_29_Reserved (29) // Reserved -#define AT91C_ID_IRQ0 (30) // Advanced Interrupt Controller (IRQ0) -#define AT91C_ID_IRQ1 (31) // Advanced Interrupt Controller (IRQ1) -#define AT91C_ALL_INT (0xC003FFFF) // ALL VALID INTERRUPTS - -// ***************************************************************************** -// BASE ADDRESS DEFINITIONS FOR AT91SAM7X128 -// ***************************************************************************** -#define AT91C_BASE_SYS (AT91_CAST(AT91PS_SYS) 0xFFFFF000) // (SYS) Base Address -#define AT91C_BASE_AIC (AT91_CAST(AT91PS_AIC) 0xFFFFF000) // (AIC) Base Address -#define AT91C_BASE_PDC_DBGU (AT91_CAST(AT91PS_PDC) 0xFFFFF300) // (PDC_DBGU) Base Address -#define AT91C_BASE_DBGU (AT91_CAST(AT91PS_DBGU) 0xFFFFF200) // (DBGU) Base Address -#define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address -#define AT91C_BASE_PIOB (AT91_CAST(AT91PS_PIO) 0xFFFFF600) // (PIOB) Base Address -#define AT91C_BASE_CKGR (AT91_CAST(AT91PS_CKGR) 0xFFFFFC20) // (CKGR) Base Address -#define AT91C_BASE_PMC (AT91_CAST(AT91PS_PMC) 0xFFFFFC00) // (PMC) Base Address -#define AT91C_BASE_RSTC (AT91_CAST(AT91PS_RSTC) 0xFFFFFD00) // (RSTC) Base Address -#define AT91C_BASE_RTTC (AT91_CAST(AT91PS_RTTC) 0xFFFFFD20) // (RTTC) Base Address -#define AT91C_BASE_PITC (AT91_CAST(AT91PS_PITC) 0xFFFFFD30) // (PITC) Base Address -#define AT91C_BASE_WDTC (AT91_CAST(AT91PS_WDTC) 0xFFFFFD40) // (WDTC) Base Address -#define AT91C_BASE_VREG (AT91_CAST(AT91PS_VREG) 0xFFFFFD60) // (VREG) Base Address -#define AT91C_BASE_MC (AT91_CAST(AT91PS_MC) 0xFFFFFF00) // (MC) Base Address -#define AT91C_BASE_PDC_SPI1 (AT91_CAST(AT91PS_PDC) 0xFFFE4100) // (PDC_SPI1) Base Address -#define AT91C_BASE_SPI1 (AT91_CAST(AT91PS_SPI) 0xFFFE4000) // (SPI1) Base Address -#define AT91C_BASE_PDC_SPI0 (AT91_CAST(AT91PS_PDC) 0xFFFE0100) // (PDC_SPI0) Base Address -#define AT91C_BASE_SPI0 (AT91_CAST(AT91PS_SPI) 0xFFFE0000) // (SPI0) Base Address -#define AT91C_BASE_PDC_US1 (AT91_CAST(AT91PS_PDC) 0xFFFC4100) // (PDC_US1) Base Address -#define AT91C_BASE_US1 (AT91_CAST(AT91PS_USART) 0xFFFC4000) // (US1) Base Address -#define AT91C_BASE_PDC_US0 (AT91_CAST(AT91PS_PDC) 0xFFFC0100) // (PDC_US0) Base Address -#define AT91C_BASE_US0 (AT91_CAST(AT91PS_USART) 0xFFFC0000) // (US0) Base Address -#define AT91C_BASE_PDC_SSC (AT91_CAST(AT91PS_PDC) 0xFFFD4100) // (PDC_SSC) Base Address -#define AT91C_BASE_SSC (AT91_CAST(AT91PS_SSC) 0xFFFD4000) // (SSC) Base Address -#define AT91C_BASE_TWI (AT91_CAST(AT91PS_TWI) 0xFFFB8000) // (TWI) Base Address -#define AT91C_BASE_PWMC_CH3 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC260) // (PWMC_CH3) Base Address -#define AT91C_BASE_PWMC_CH2 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC240) // (PWMC_CH2) Base Address -#define AT91C_BASE_PWMC_CH1 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC220) // (PWMC_CH1) Base Address -#define AT91C_BASE_PWMC_CH0 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC200) // (PWMC_CH0) Base Address -#define AT91C_BASE_PWMC (AT91_CAST(AT91PS_PWMC) 0xFFFCC000) // (PWMC) Base Address -#define AT91C_BASE_UDP (AT91_CAST(AT91PS_UDP) 0xFFFB0000) // (UDP) Base Address -#define AT91C_BASE_TC0 (AT91_CAST(AT91PS_TC) 0xFFFA0000) // (TC0) Base Address -#define AT91C_BASE_TC1 (AT91_CAST(AT91PS_TC) 0xFFFA0040) // (TC1) Base Address -#define AT91C_BASE_TC2 (AT91_CAST(AT91PS_TC) 0xFFFA0080) // (TC2) Base Address -#define AT91C_BASE_TCB (AT91_CAST(AT91PS_TCB) 0xFFFA0000) // (TCB) Base Address -#define AT91C_BASE_CAN_MB0 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0200) // (CAN_MB0) Base Address -#define AT91C_BASE_CAN_MB1 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0220) // (CAN_MB1) Base Address -#define AT91C_BASE_CAN_MB2 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0240) // (CAN_MB2) Base Address -#define AT91C_BASE_CAN_MB3 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0260) // (CAN_MB3) Base Address -#define AT91C_BASE_CAN_MB4 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0280) // (CAN_MB4) Base Address -#define AT91C_BASE_CAN_MB5 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD02A0) // (CAN_MB5) Base Address -#define AT91C_BASE_CAN_MB6 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD02C0) // (CAN_MB6) Base Address -#define AT91C_BASE_CAN_MB7 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD02E0) // (CAN_MB7) Base Address -#define AT91C_BASE_CAN (AT91_CAST(AT91PS_CAN) 0xFFFD0000) // (CAN) Base Address -#define AT91C_BASE_EMAC (AT91_CAST(AT91PS_EMAC) 0xFFFDC000) // (EMAC) Base Address -#define AT91C_BASE_PDC_ADC (AT91_CAST(AT91PS_PDC) 0xFFFD8100) // (PDC_ADC) Base Address -#define AT91C_BASE_ADC (AT91_CAST(AT91PS_ADC) 0xFFFD8000) // (ADC) Base Address - -// ***************************************************************************** -// MEMORY MAPPING DEFINITIONS FOR AT91SAM7X128 -// ***************************************************************************** -// ISRAM -#define AT91C_ISRAM (0x00200000) // Internal SRAM base address -#define AT91C_ISRAM_SIZE (0x00008000) // Internal SRAM size in byte (32 Kbytes) -// IFLASH -#define AT91C_IFLASH (0x00100000) // Internal FLASH base address -#define AT91C_IFLASH_SIZE (0x00020000) // Internal FLASH size in byte (128 Kbytes) -#define AT91C_IFLASH_PAGE_SIZE (256) // Internal FLASH Page Size: 256 bytes -#define AT91C_IFLASH_LOCK_REGION_SIZE (16384) // Internal FLASH Lock Region Size: 16 Kbytes -#define AT91C_IFLASH_NB_OF_PAGES (512) // Internal FLASH Number of Pages: 512 bytes -#define AT91C_IFLASH_NB_OF_LOCK_BITS (8) // Internal FLASH Number of Lock Bits: 8 bytes - -#endif diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X256.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X256.h deleted file mode 100644 index 4366bad..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X256.h +++ /dev/null @@ -1,2918 +0,0 @@ -// ---------------------------------------------------------------------------- -// ATMEL Microcontroller Software Support - ROUSSET - -// ---------------------------------------------------------------------------- -// Copyright (c) 2006, Atmel Corporation -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, -// this list of conditions and the disclaimer below. -// -// - Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the disclaimer below in the documentation and/or -// other materials provided with the distribution. -// -// Atmel's name may not be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR -// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE -// DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// ---------------------------------------------------------------------------- -// File Name : AT91SAM7X256.h -// Object : AT91SAM7X256 definitions -// Generated : AT91 SW Application Group 06/19/2007 (15:41:06) -// -// CVS Reference : /AT91SAM7X256.pl/1.16/Wed Aug 30 14:16:22 2006// -// CVS Reference : /SYS_SAM7X.pl/1.3/Wed Feb 2 15:48:15 2005// -// CVS Reference : /MC_SAM7X.pl/1.2/Fri May 20 14:22:29 2005// -// CVS Reference : /PMC_SAM7X.pl/1.4/Tue Feb 8 14:00:19 2005// -// CVS Reference : /RSTC_SAM7X.pl/1.2/Wed Jul 13 15:25:17 2005// -// CVS Reference : /UDP_6ept.pl/1.1/Wed Aug 30 14:20:52 2006// -// CVS Reference : /PWM_SAM7X.pl/1.1/Tue May 10 12:38:54 2005// -// CVS Reference : /AIC_6075B.pl/1.3/Fri May 20 14:21:42 2005// -// CVS Reference : /PIO_6057A.pl/1.2/Thu Feb 3 10:29:42 2005// -// CVS Reference : /RTTC_6081A.pl/1.2/Thu Nov 4 13:57:22 2004// -// CVS Reference : /PITC_6079A.pl/1.2/Thu Nov 4 13:56:22 2004// -// CVS Reference : /WDTC_6080A.pl/1.3/Thu Nov 4 13:58:52 2004// -// CVS Reference : /VREG_6085B.pl/1.1/Tue Feb 1 16:40:38 2005// -// CVS Reference : /PDC_6074C.pl/1.2/Thu Feb 3 09:02:11 2005// -// CVS Reference : /DBGU_6059D.pl/1.1/Mon Jan 31 13:54:41 2005// -// CVS Reference : /SPI_6088D.pl/1.3/Fri May 20 14:23:02 2005// -// CVS Reference : /US_6089C.pl/1.1/Mon Jan 31 13:56:02 2005// -// CVS Reference : /SSC_6078B.pl/1.1/Wed Jul 13 15:25:46 2005// -// CVS Reference : /TWI_6061A.pl/1.2/Wed Oct 25 15:03:34 2006// -// CVS Reference : /TC_6082A.pl/1.7/Wed Mar 9 16:31:51 2005// -// CVS Reference : /CAN_6019B.pl/1.1/Mon Jan 31 13:54:30 2005// -// CVS Reference : /EMACB_6119A.pl/1.6/Wed Jul 13 15:25:00 2005// -// CVS Reference : /ADC_6051C.pl/1.1/Mon Jan 31 13:12:40 2005// -// ---------------------------------------------------------------------------- - -#ifndef AT91SAM7X256_H -#define AT91SAM7X256_H - -#ifndef __ASSEMBLY__ -typedef volatile unsigned int AT91_REG;// Hardware register definition -#define AT91_CAST(a) (a) -#else -#define AT91_CAST(a) -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR System Peripherals -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SYS { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register - AT91_REG Reserved2[45]; // - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved3[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved4[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register - AT91_REG Reserved5[54]; // - AT91_REG PIOA_PER; // PIO Enable Register - AT91_REG PIOA_PDR; // PIO Disable Register - AT91_REG PIOA_PSR; // PIO Status Register - AT91_REG Reserved6[1]; // - AT91_REG PIOA_OER; // Output Enable Register - AT91_REG PIOA_ODR; // Output Disable Registerr - AT91_REG PIOA_OSR; // Output Status Register - AT91_REG Reserved7[1]; // - AT91_REG PIOA_IFER; // Input Filter Enable Register - AT91_REG PIOA_IFDR; // Input Filter Disable Register - AT91_REG PIOA_IFSR; // Input Filter Status Register - AT91_REG Reserved8[1]; // - AT91_REG PIOA_SODR; // Set Output Data Register - AT91_REG PIOA_CODR; // Clear Output Data Register - AT91_REG PIOA_ODSR; // Output Data Status Register - AT91_REG PIOA_PDSR; // Pin Data Status Register - AT91_REG PIOA_IER; // Interrupt Enable Register - AT91_REG PIOA_IDR; // Interrupt Disable Register - AT91_REG PIOA_IMR; // Interrupt Mask Register - AT91_REG PIOA_ISR; // Interrupt Status Register - AT91_REG PIOA_MDER; // Multi-driver Enable Register - AT91_REG PIOA_MDDR; // Multi-driver Disable Register - AT91_REG PIOA_MDSR; // Multi-driver Status Register - AT91_REG Reserved9[1]; // - AT91_REG PIOA_PPUDR; // Pull-up Disable Register - AT91_REG PIOA_PPUER; // Pull-up Enable Register - AT91_REG PIOA_PPUSR; // Pull-up Status Register - AT91_REG Reserved10[1]; // - AT91_REG PIOA_ASR; // Select A Register - AT91_REG PIOA_BSR; // Select B Register - AT91_REG PIOA_ABSR; // AB Select Status Register - AT91_REG Reserved11[9]; // - AT91_REG PIOA_OWER; // Output Write Enable Register - AT91_REG PIOA_OWDR; // Output Write Disable Register - AT91_REG PIOA_OWSR; // Output Write Status Register - AT91_REG Reserved12[85]; // - AT91_REG PIOB_PER; // PIO Enable Register - AT91_REG PIOB_PDR; // PIO Disable Register - AT91_REG PIOB_PSR; // PIO Status Register - AT91_REG Reserved13[1]; // - AT91_REG PIOB_OER; // Output Enable Register - AT91_REG PIOB_ODR; // Output Disable Registerr - AT91_REG PIOB_OSR; // Output Status Register - AT91_REG Reserved14[1]; // - AT91_REG PIOB_IFER; // Input Filter Enable Register - AT91_REG PIOB_IFDR; // Input Filter Disable Register - AT91_REG PIOB_IFSR; // Input Filter Status Register - AT91_REG Reserved15[1]; // - AT91_REG PIOB_SODR; // Set Output Data Register - AT91_REG PIOB_CODR; // Clear Output Data Register - AT91_REG PIOB_ODSR; // Output Data Status Register - AT91_REG PIOB_PDSR; // Pin Data Status Register - AT91_REG PIOB_IER; // Interrupt Enable Register - AT91_REG PIOB_IDR; // Interrupt Disable Register - AT91_REG PIOB_IMR; // Interrupt Mask Register - AT91_REG PIOB_ISR; // Interrupt Status Register - AT91_REG PIOB_MDER; // Multi-driver Enable Register - AT91_REG PIOB_MDDR; // Multi-driver Disable Register - AT91_REG PIOB_MDSR; // Multi-driver Status Register - AT91_REG Reserved16[1]; // - AT91_REG PIOB_PPUDR; // Pull-up Disable Register - AT91_REG PIOB_PPUER; // Pull-up Enable Register - AT91_REG PIOB_PPUSR; // Pull-up Status Register - AT91_REG Reserved17[1]; // - AT91_REG PIOB_ASR; // Select A Register - AT91_REG PIOB_BSR; // Select B Register - AT91_REG PIOB_ABSR; // AB Select Status Register - AT91_REG Reserved18[9]; // - AT91_REG PIOB_OWER; // Output Write Enable Register - AT91_REG PIOB_OWDR; // Output Write Disable Register - AT91_REG PIOB_OWSR; // Output Write Status Register - AT91_REG Reserved19[341]; // - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved20[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved21[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved22[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved23[3]; // - AT91_REG PMC_PCKR[4]; // Programmable Clock Register - AT91_REG Reserved24[4]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register - AT91_REG Reserved25[36]; // - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register - AT91_REG Reserved26[5]; // - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register - AT91_REG Reserved27[5]; // - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_SYS, *AT91PS_SYS; -#else - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Advanced Interrupt Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_AIC { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register -} AT91S_AIC, *AT91PS_AIC; -#else -#define AIC_SMR (AT91_CAST(AT91_REG *) 0x00000000) // (AIC_SMR) Source Mode Register -#define AIC_SVR (AT91_CAST(AT91_REG *) 0x00000080) // (AIC_SVR) Source Vector Register -#define AIC_IVR (AT91_CAST(AT91_REG *) 0x00000100) // (AIC_IVR) IRQ Vector Register -#define AIC_FVR (AT91_CAST(AT91_REG *) 0x00000104) // (AIC_FVR) FIQ Vector Register -#define AIC_ISR (AT91_CAST(AT91_REG *) 0x00000108) // (AIC_ISR) Interrupt Status Register -#define AIC_IPR (AT91_CAST(AT91_REG *) 0x0000010C) // (AIC_IPR) Interrupt Pending Register -#define AIC_IMR (AT91_CAST(AT91_REG *) 0x00000110) // (AIC_IMR) Interrupt Mask Register -#define AIC_CISR (AT91_CAST(AT91_REG *) 0x00000114) // (AIC_CISR) Core Interrupt Status Register -#define AIC_IECR (AT91_CAST(AT91_REG *) 0x00000120) // (AIC_IECR) Interrupt Enable Command Register -#define AIC_IDCR (AT91_CAST(AT91_REG *) 0x00000124) // (AIC_IDCR) Interrupt Disable Command Register -#define AIC_ICCR (AT91_CAST(AT91_REG *) 0x00000128) // (AIC_ICCR) Interrupt Clear Command Register -#define AIC_ISCR (AT91_CAST(AT91_REG *) 0x0000012C) // (AIC_ISCR) Interrupt Set Command Register -#define AIC_EOICR (AT91_CAST(AT91_REG *) 0x00000130) // (AIC_EOICR) End of Interrupt Command Register -#define AIC_SPU (AT91_CAST(AT91_REG *) 0x00000134) // (AIC_SPU) Spurious Vector Register -#define AIC_DCR (AT91_CAST(AT91_REG *) 0x00000138) // (AIC_DCR) Debug Control Register (Protect) -#define AIC_FFER (AT91_CAST(AT91_REG *) 0x00000140) // (AIC_FFER) Fast Forcing Enable Register -#define AIC_FFDR (AT91_CAST(AT91_REG *) 0x00000144) // (AIC_FFDR) Fast Forcing Disable Register -#define AIC_FFSR (AT91_CAST(AT91_REG *) 0x00000148) // (AIC_FFSR) Fast Forcing Status Register - -#endif -// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- -#define AT91C_AIC_PRIOR (0x7 << 0) // (AIC) Priority Level -#define AT91C_AIC_PRIOR_LOWEST (0x0) // (AIC) Lowest priority level -#define AT91C_AIC_PRIOR_HIGHEST (0x7) // (AIC) Highest priority level -#define AT91C_AIC_SRCTYPE (0x3 << 5) // (AIC) Interrupt Source Type -#define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL (0x0 << 5) // (AIC) Internal Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL (0x0 << 5) // (AIC) External Sources Code Label Low-level Sensitive -#define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE (0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered -#define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE (0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered -#define AT91C_AIC_SRCTYPE_HIGH_LEVEL (0x2 << 5) // (AIC) Internal Or External Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_POSITIVE_EDGE (0x3 << 5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered -// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- -#define AT91C_AIC_NFIQ (0x1 << 0) // (AIC) NFIQ Status -#define AT91C_AIC_NIRQ (0x1 << 1) // (AIC) NIRQ Status -// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- -#define AT91C_AIC_DCR_PROT (0x1 << 0) // (AIC) Protection Mode -#define AT91C_AIC_DCR_GMSK (0x1 << 1) // (AIC) General Mask - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Peripheral DMA Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PDC { - AT91_REG PDC_RPR; // Receive Pointer Register - AT91_REG PDC_RCR; // Receive Counter Register - AT91_REG PDC_TPR; // Transmit Pointer Register - AT91_REG PDC_TCR; // Transmit Counter Register - AT91_REG PDC_RNPR; // Receive Next Pointer Register - AT91_REG PDC_RNCR; // Receive Next Counter Register - AT91_REG PDC_TNPR; // Transmit Next Pointer Register - AT91_REG PDC_TNCR; // Transmit Next Counter Register - AT91_REG PDC_PTCR; // PDC Transfer Control Register - AT91_REG PDC_PTSR; // PDC Transfer Status Register -} AT91S_PDC, *AT91PS_PDC; -#else -#define PDC_RPR (AT91_CAST(AT91_REG *) 0x00000000) // (PDC_RPR) Receive Pointer Register -#define PDC_RCR (AT91_CAST(AT91_REG *) 0x00000004) // (PDC_RCR) Receive Counter Register -#define PDC_TPR (AT91_CAST(AT91_REG *) 0x00000008) // (PDC_TPR) Transmit Pointer Register -#define PDC_TCR (AT91_CAST(AT91_REG *) 0x0000000C) // (PDC_TCR) Transmit Counter Register -#define PDC_RNPR (AT91_CAST(AT91_REG *) 0x00000010) // (PDC_RNPR) Receive Next Pointer Register -#define PDC_RNCR (AT91_CAST(AT91_REG *) 0x00000014) // (PDC_RNCR) Receive Next Counter Register -#define PDC_TNPR (AT91_CAST(AT91_REG *) 0x00000018) // (PDC_TNPR) Transmit Next Pointer Register -#define PDC_TNCR (AT91_CAST(AT91_REG *) 0x0000001C) // (PDC_TNCR) Transmit Next Counter Register -#define PDC_PTCR (AT91_CAST(AT91_REG *) 0x00000020) // (PDC_PTCR) PDC Transfer Control Register -#define PDC_PTSR (AT91_CAST(AT91_REG *) 0x00000024) // (PDC_PTSR) PDC Transfer Status Register - -#endif -// -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- -#define AT91C_PDC_RXTEN (0x1 << 0) // (PDC) Receiver Transfer Enable -#define AT91C_PDC_RXTDIS (0x1 << 1) // (PDC) Receiver Transfer Disable -#define AT91C_PDC_TXTEN (0x1 << 8) // (PDC) Transmitter Transfer Enable -#define AT91C_PDC_TXTDIS (0x1 << 9) // (PDC) Transmitter Transfer Disable -// -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Debug Unit -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_DBGU { - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved0[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved1[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register -} AT91S_DBGU, *AT91PS_DBGU; -#else -#define DBGU_CR (AT91_CAST(AT91_REG *) 0x00000000) // (DBGU_CR) Control Register -#define DBGU_MR (AT91_CAST(AT91_REG *) 0x00000004) // (DBGU_MR) Mode Register -#define DBGU_IER (AT91_CAST(AT91_REG *) 0x00000008) // (DBGU_IER) Interrupt Enable Register -#define DBGU_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (DBGU_IDR) Interrupt Disable Register -#define DBGU_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (DBGU_IMR) Interrupt Mask Register -#define DBGU_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (DBGU_CSR) Channel Status Register -#define DBGU_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (DBGU_RHR) Receiver Holding Register -#define DBGU_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (DBGU_THR) Transmitter Holding Register -#define DBGU_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (DBGU_BRGR) Baud Rate Generator Register -#define DBGU_CIDR (AT91_CAST(AT91_REG *) 0x00000040) // (DBGU_CIDR) Chip ID Register -#define DBGU_EXID (AT91_CAST(AT91_REG *) 0x00000044) // (DBGU_EXID) Chip ID Extension Register -#define DBGU_FNTR (AT91_CAST(AT91_REG *) 0x00000048) // (DBGU_FNTR) Force NTRST Register - -#endif -// -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_RSTRX (0x1 << 2) // (DBGU) Reset Receiver -#define AT91C_US_RSTTX (0x1 << 3) // (DBGU) Reset Transmitter -#define AT91C_US_RXEN (0x1 << 4) // (DBGU) Receiver Enable -#define AT91C_US_RXDIS (0x1 << 5) // (DBGU) Receiver Disable -#define AT91C_US_TXEN (0x1 << 6) // (DBGU) Transmitter Enable -#define AT91C_US_TXDIS (0x1 << 7) // (DBGU) Transmitter Disable -#define AT91C_US_RSTSTA (0x1 << 8) // (DBGU) Reset Status Bits -// -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_PAR (0x7 << 9) // (DBGU) Parity type -#define AT91C_US_PAR_EVEN (0x0 << 9) // (DBGU) Even Parity -#define AT91C_US_PAR_ODD (0x1 << 9) // (DBGU) Odd Parity -#define AT91C_US_PAR_SPACE (0x2 << 9) // (DBGU) Parity forced to 0 (Space) -#define AT91C_US_PAR_MARK (0x3 << 9) // (DBGU) Parity forced to 1 (Mark) -#define AT91C_US_PAR_NONE (0x4 << 9) // (DBGU) No Parity -#define AT91C_US_PAR_MULTI_DROP (0x6 << 9) // (DBGU) Multi-drop mode -#define AT91C_US_CHMODE (0x3 << 14) // (DBGU) Channel Mode -#define AT91C_US_CHMODE_NORMAL (0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART. -#define AT91C_US_CHMODE_AUTO (0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin. -#define AT91C_US_CHMODE_LOCAL (0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal. -#define AT91C_US_CHMODE_REMOTE (0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin. -// -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXRDY (0x1 << 0) // (DBGU) RXRDY Interrupt -#define AT91C_US_TXRDY (0x1 << 1) // (DBGU) TXRDY Interrupt -#define AT91C_US_ENDRX (0x1 << 3) // (DBGU) End of Receive Transfer Interrupt -#define AT91C_US_ENDTX (0x1 << 4) // (DBGU) End of Transmit Interrupt -#define AT91C_US_OVRE (0x1 << 5) // (DBGU) Overrun Interrupt -#define AT91C_US_FRAME (0x1 << 6) // (DBGU) Framing Error Interrupt -#define AT91C_US_PARE (0x1 << 7) // (DBGU) Parity Error Interrupt -#define AT91C_US_TXEMPTY (0x1 << 9) // (DBGU) TXEMPTY Interrupt -#define AT91C_US_TXBUFE (0x1 << 11) // (DBGU) TXBUFE Interrupt -#define AT91C_US_RXBUFF (0x1 << 12) // (DBGU) RXBUFF Interrupt -#define AT91C_US_COMM_TX (0x1 << 30) // (DBGU) COMM_TX Interrupt -#define AT91C_US_COMM_RX (0x1 << 31) // (DBGU) COMM_RX Interrupt -// -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register -------- -// -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register -------- -#define AT91C_US_FORCE_NTRST (0x1 << 0) // (DBGU) Force NTRST in JTAG - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Parallel Input Output Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PIO { - AT91_REG PIO_PER; // PIO Enable Register - AT91_REG PIO_PDR; // PIO Disable Register - AT91_REG PIO_PSR; // PIO Status Register - AT91_REG Reserved0[1]; // - AT91_REG PIO_OER; // Output Enable Register - AT91_REG PIO_ODR; // Output Disable Registerr - AT91_REG PIO_OSR; // Output Status Register - AT91_REG Reserved1[1]; // - AT91_REG PIO_IFER; // Input Filter Enable Register - AT91_REG PIO_IFDR; // Input Filter Disable Register - AT91_REG PIO_IFSR; // Input Filter Status Register - AT91_REG Reserved2[1]; // - AT91_REG PIO_SODR; // Set Output Data Register - AT91_REG PIO_CODR; // Clear Output Data Register - AT91_REG PIO_ODSR; // Output Data Status Register - AT91_REG PIO_PDSR; // Pin Data Status Register - AT91_REG PIO_IER; // Interrupt Enable Register - AT91_REG PIO_IDR; // Interrupt Disable Register - AT91_REG PIO_IMR; // Interrupt Mask Register - AT91_REG PIO_ISR; // Interrupt Status Register - AT91_REG PIO_MDER; // Multi-driver Enable Register - AT91_REG PIO_MDDR; // Multi-driver Disable Register - AT91_REG PIO_MDSR; // Multi-driver Status Register - AT91_REG Reserved3[1]; // - AT91_REG PIO_PPUDR; // Pull-up Disable Register - AT91_REG PIO_PPUER; // Pull-up Enable Register - AT91_REG PIO_PPUSR; // Pull-up Status Register - AT91_REG Reserved4[1]; // - AT91_REG PIO_ASR; // Select A Register - AT91_REG PIO_BSR; // Select B Register - AT91_REG PIO_ABSR; // AB Select Status Register - AT91_REG Reserved5[9]; // - AT91_REG PIO_OWER; // Output Write Enable Register - AT91_REG PIO_OWDR; // Output Write Disable Register - AT91_REG PIO_OWSR; // Output Write Status Register -} AT91S_PIO, *AT91PS_PIO; -#else -#define PIO_PER (AT91_CAST(AT91_REG *) 0x00000000) // (PIO_PER) PIO Enable Register -#define PIO_PDR (AT91_CAST(AT91_REG *) 0x00000004) // (PIO_PDR) PIO Disable Register -#define PIO_PSR (AT91_CAST(AT91_REG *) 0x00000008) // (PIO_PSR) PIO Status Register -#define PIO_OER (AT91_CAST(AT91_REG *) 0x00000010) // (PIO_OER) Output Enable Register -#define PIO_ODR (AT91_CAST(AT91_REG *) 0x00000014) // (PIO_ODR) Output Disable Registerr -#define PIO_OSR (AT91_CAST(AT91_REG *) 0x00000018) // (PIO_OSR) Output Status Register -#define PIO_IFER (AT91_CAST(AT91_REG *) 0x00000020) // (PIO_IFER) Input Filter Enable Register -#define PIO_IFDR (AT91_CAST(AT91_REG *) 0x00000024) // (PIO_IFDR) Input Filter Disable Register -#define PIO_IFSR (AT91_CAST(AT91_REG *) 0x00000028) // (PIO_IFSR) Input Filter Status Register -#define PIO_SODR (AT91_CAST(AT91_REG *) 0x00000030) // (PIO_SODR) Set Output Data Register -#define PIO_CODR (AT91_CAST(AT91_REG *) 0x00000034) // (PIO_CODR) Clear Output Data Register -#define PIO_ODSR (AT91_CAST(AT91_REG *) 0x00000038) // (PIO_ODSR) Output Data Status Register -#define PIO_PDSR (AT91_CAST(AT91_REG *) 0x0000003C) // (PIO_PDSR) Pin Data Status Register -#define PIO_IER (AT91_CAST(AT91_REG *) 0x00000040) // (PIO_IER) Interrupt Enable Register -#define PIO_IDR (AT91_CAST(AT91_REG *) 0x00000044) // (PIO_IDR) Interrupt Disable Register -#define PIO_IMR (AT91_CAST(AT91_REG *) 0x00000048) // (PIO_IMR) Interrupt Mask Register -#define PIO_ISR (AT91_CAST(AT91_REG *) 0x0000004C) // (PIO_ISR) Interrupt Status Register -#define PIO_MDER (AT91_CAST(AT91_REG *) 0x00000050) // (PIO_MDER) Multi-driver Enable Register -#define PIO_MDDR (AT91_CAST(AT91_REG *) 0x00000054) // (PIO_MDDR) Multi-driver Disable Register -#define PIO_MDSR (AT91_CAST(AT91_REG *) 0x00000058) // (PIO_MDSR) Multi-driver Status Register -#define PIO_PPUDR (AT91_CAST(AT91_REG *) 0x00000060) // (PIO_PPUDR) Pull-up Disable Register -#define PIO_PPUER (AT91_CAST(AT91_REG *) 0x00000064) // (PIO_PPUER) Pull-up Enable Register -#define PIO_PPUSR (AT91_CAST(AT91_REG *) 0x00000068) // (PIO_PPUSR) Pull-up Status Register -#define PIO_ASR (AT91_CAST(AT91_REG *) 0x00000070) // (PIO_ASR) Select A Register -#define PIO_BSR (AT91_CAST(AT91_REG *) 0x00000074) // (PIO_BSR) Select B Register -#define PIO_ABSR (AT91_CAST(AT91_REG *) 0x00000078) // (PIO_ABSR) AB Select Status Register -#define PIO_OWER (AT91_CAST(AT91_REG *) 0x000000A0) // (PIO_OWER) Output Write Enable Register -#define PIO_OWDR (AT91_CAST(AT91_REG *) 0x000000A4) // (PIO_OWDR) Output Write Disable Register -#define PIO_OWSR (AT91_CAST(AT91_REG *) 0x000000A8) // (PIO_OWSR) Output Write Status Register - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Clock Generator Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CKGR { - AT91_REG CKGR_MOR; // Main Oscillator Register - AT91_REG CKGR_MCFR; // Main Clock Frequency Register - AT91_REG Reserved0[1]; // - AT91_REG CKGR_PLLR; // PLL Register -} AT91S_CKGR, *AT91PS_CKGR; -#else -#define CKGR_MOR (AT91_CAST(AT91_REG *) 0x00000000) // (CKGR_MOR) Main Oscillator Register -#define CKGR_MCFR (AT91_CAST(AT91_REG *) 0x00000004) // (CKGR_MCFR) Main Clock Frequency Register -#define CKGR_PLLR (AT91_CAST(AT91_REG *) 0x0000000C) // (CKGR_PLLR) PLL Register - -#endif -// -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- -#define AT91C_CKGR_MOSCEN (0x1 << 0) // (CKGR) Main Oscillator Enable -#define AT91C_CKGR_OSCBYPASS (0x1 << 1) // (CKGR) Main Oscillator Bypass -#define AT91C_CKGR_OSCOUNT (0xFF << 8) // (CKGR) Main Oscillator Start-up Time -// -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- -#define AT91C_CKGR_MAINF (0xFFFF << 0) // (CKGR) Main Clock Frequency -#define AT91C_CKGR_MAINRDY (0x1 << 16) // (CKGR) Main Clock Ready -// -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register -------- -#define AT91C_CKGR_DIV (0xFF << 0) // (CKGR) Divider Selected -#define AT91C_CKGR_DIV_0 (0x0) // (CKGR) Divider output is 0 -#define AT91C_CKGR_DIV_BYPASS (0x1) // (CKGR) Divider is bypassed -#define AT91C_CKGR_PLLCOUNT (0x3F << 8) // (CKGR) PLL Counter -#define AT91C_CKGR_OUT (0x3 << 14) // (CKGR) PLL Output Frequency Range -#define AT91C_CKGR_OUT_0 (0x0 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_1 (0x1 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_2 (0x2 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_3 (0x3 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_MUL (0x7FF << 16) // (CKGR) PLL Multiplier -#define AT91C_CKGR_USBDIV (0x3 << 28) // (CKGR) Divider for USB Clocks -#define AT91C_CKGR_USBDIV_0 (0x0 << 28) // (CKGR) Divider output is PLL clock output -#define AT91C_CKGR_USBDIV_1 (0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2 -#define AT91C_CKGR_USBDIV_2 (0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Power Management Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PMC { - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved0[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved1[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved2[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved3[3]; // - AT91_REG PMC_PCKR[4]; // Programmable Clock Register - AT91_REG Reserved4[4]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register -} AT91S_PMC, *AT91PS_PMC; -#else -#define PMC_SCER (AT91_CAST(AT91_REG *) 0x00000000) // (PMC_SCER) System Clock Enable Register -#define PMC_SCDR (AT91_CAST(AT91_REG *) 0x00000004) // (PMC_SCDR) System Clock Disable Register -#define PMC_SCSR (AT91_CAST(AT91_REG *) 0x00000008) // (PMC_SCSR) System Clock Status Register -#define PMC_PCER (AT91_CAST(AT91_REG *) 0x00000010) // (PMC_PCER) Peripheral Clock Enable Register -#define PMC_PCDR (AT91_CAST(AT91_REG *) 0x00000014) // (PMC_PCDR) Peripheral Clock Disable Register -#define PMC_PCSR (AT91_CAST(AT91_REG *) 0x00000018) // (PMC_PCSR) Peripheral Clock Status Register -#define PMC_MCKR (AT91_CAST(AT91_REG *) 0x00000030) // (PMC_MCKR) Master Clock Register -#define PMC_PCKR (AT91_CAST(AT91_REG *) 0x00000040) // (PMC_PCKR) Programmable Clock Register -#define PMC_IER (AT91_CAST(AT91_REG *) 0x00000060) // (PMC_IER) Interrupt Enable Register -#define PMC_IDR (AT91_CAST(AT91_REG *) 0x00000064) // (PMC_IDR) Interrupt Disable Register -#define PMC_SR (AT91_CAST(AT91_REG *) 0x00000068) // (PMC_SR) Status Register -#define PMC_IMR (AT91_CAST(AT91_REG *) 0x0000006C) // (PMC_IMR) Interrupt Mask Register - -#endif -// -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register -------- -#define AT91C_PMC_PCK (0x1 << 0) // (PMC) Processor Clock -#define AT91C_PMC_UDP (0x1 << 7) // (PMC) USB Device Port Clock -#define AT91C_PMC_PCK0 (0x1 << 8) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK1 (0x1 << 9) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK2 (0x1 << 10) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK3 (0x1 << 11) // (PMC) Programmable Clock Output -// -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register -------- -// -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------- -// -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register -------- -// -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register -------- -// -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register -------- -// -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register -------- -#define AT91C_PMC_CSS (0x3 << 0) // (PMC) Programmable Clock Selection -#define AT91C_PMC_CSS_SLOW_CLK (0x0) // (PMC) Slow Clock is selected -#define AT91C_PMC_CSS_MAIN_CLK (0x1) // (PMC) Main Clock is selected -#define AT91C_PMC_CSS_PLL_CLK (0x3) // (PMC) Clock from PLL is selected -#define AT91C_PMC_PRES (0x7 << 2) // (PMC) Programmable Clock Prescaler -#define AT91C_PMC_PRES_CLK (0x0 << 2) // (PMC) Selected clock -#define AT91C_PMC_PRES_CLK_2 (0x1 << 2) // (PMC) Selected clock divided by 2 -#define AT91C_PMC_PRES_CLK_4 (0x2 << 2) // (PMC) Selected clock divided by 4 -#define AT91C_PMC_PRES_CLK_8 (0x3 << 2) // (PMC) Selected clock divided by 8 -#define AT91C_PMC_PRES_CLK_16 (0x4 << 2) // (PMC) Selected clock divided by 16 -#define AT91C_PMC_PRES_CLK_32 (0x5 << 2) // (PMC) Selected clock divided by 32 -#define AT91C_PMC_PRES_CLK_64 (0x6 << 2) // (PMC) Selected clock divided by 64 -// -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register -------- -// -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------- -#define AT91C_PMC_MOSCS (0x1 << 0) // (PMC) MOSC Status/Enable/Disable/Mask -#define AT91C_PMC_LOCK (0x1 << 2) // (PMC) PLL Status/Enable/Disable/Mask -#define AT91C_PMC_MCKRDY (0x1 << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK0RDY (0x1 << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK1RDY (0x1 << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK2RDY (0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK3RDY (0x1 << 11) // (PMC) PCK3_RDY Status/Enable/Disable/Mask -// -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register -------- -// -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register -------- -// -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Reset Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RSTC { - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register -} AT91S_RSTC, *AT91PS_RSTC; -#else -#define RSTC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (RSTC_RCR) Reset Control Register -#define RSTC_RSR (AT91_CAST(AT91_REG *) 0x00000004) // (RSTC_RSR) Reset Status Register -#define RSTC_RMR (AT91_CAST(AT91_REG *) 0x00000008) // (RSTC_RMR) Reset Mode Register - -#endif -// -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register -------- -#define AT91C_RSTC_PROCRST (0x1 << 0) // (RSTC) Processor Reset -#define AT91C_RSTC_PERRST (0x1 << 2) // (RSTC) Peripheral Reset -#define AT91C_RSTC_EXTRST (0x1 << 3) // (RSTC) External Reset -#define AT91C_RSTC_KEY (0xFF << 24) // (RSTC) Password -// -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register -------- -#define AT91C_RSTC_URSTS (0x1 << 0) // (RSTC) User Reset Status -#define AT91C_RSTC_BODSTS (0x1 << 1) // (RSTC) Brownout Detection Status -#define AT91C_RSTC_RSTTYP (0x7 << 8) // (RSTC) Reset Type -#define AT91C_RSTC_RSTTYP_POWERUP (0x0 << 8) // (RSTC) Power-up Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WAKEUP (0x1 << 8) // (RSTC) WakeUp Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WATCHDOG (0x2 << 8) // (RSTC) Watchdog Reset. Watchdog overflow occured. -#define AT91C_RSTC_RSTTYP_SOFTWARE (0x3 << 8) // (RSTC) Software Reset. Processor reset required by the software. -#define AT91C_RSTC_RSTTYP_USER (0x4 << 8) // (RSTC) User Reset. NRST pin detected low. -#define AT91C_RSTC_RSTTYP_BROWNOUT (0x5 << 8) // (RSTC) Brownout Reset occured. -#define AT91C_RSTC_NRSTL (0x1 << 16) // (RSTC) NRST pin level -#define AT91C_RSTC_SRCMP (0x1 << 17) // (RSTC) Software Reset Command in Progress. -// -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register -------- -#define AT91C_RSTC_URSTEN (0x1 << 0) // (RSTC) User Reset Enable -#define AT91C_RSTC_URSTIEN (0x1 << 4) // (RSTC) User Reset Interrupt Enable -#define AT91C_RSTC_ERSTL (0xF << 8) // (RSTC) User Reset Length -#define AT91C_RSTC_BODIEN (0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Real Time Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RTTC { - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register -} AT91S_RTTC, *AT91PS_RTTC; -#else -#define RTTC_RTMR (AT91_CAST(AT91_REG *) 0x00000000) // (RTTC_RTMR) Real-time Mode Register -#define RTTC_RTAR (AT91_CAST(AT91_REG *) 0x00000004) // (RTTC_RTAR) Real-time Alarm Register -#define RTTC_RTVR (AT91_CAST(AT91_REG *) 0x00000008) // (RTTC_RTVR) Real-time Value Register -#define RTTC_RTSR (AT91_CAST(AT91_REG *) 0x0000000C) // (RTTC_RTSR) Real-time Status Register - -#endif -// -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register -------- -#define AT91C_RTTC_RTPRES (0xFFFF << 0) // (RTTC) Real-time Timer Prescaler Value -#define AT91C_RTTC_ALMIEN (0x1 << 16) // (RTTC) Alarm Interrupt Enable -#define AT91C_RTTC_RTTINCIEN (0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable -#define AT91C_RTTC_RTTRST (0x1 << 18) // (RTTC) Real Time Timer Restart -// -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register -------- -#define AT91C_RTTC_ALMV (0x0 << 0) // (RTTC) Alarm Value -// -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register -------- -#define AT91C_RTTC_CRTV (0x0 << 0) // (RTTC) Current Real-time Value -// -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register -------- -#define AT91C_RTTC_ALMS (0x1 << 0) // (RTTC) Real-time Alarm Status -#define AT91C_RTTC_RTTINC (0x1 << 1) // (RTTC) Real-time Timer Increment - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Periodic Interval Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PITC { - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register -} AT91S_PITC, *AT91PS_PITC; -#else -#define PITC_PIMR (AT91_CAST(AT91_REG *) 0x00000000) // (PITC_PIMR) Period Interval Mode Register -#define PITC_PISR (AT91_CAST(AT91_REG *) 0x00000004) // (PITC_PISR) Period Interval Status Register -#define PITC_PIVR (AT91_CAST(AT91_REG *) 0x00000008) // (PITC_PIVR) Period Interval Value Register -#define PITC_PIIR (AT91_CAST(AT91_REG *) 0x0000000C) // (PITC_PIIR) Period Interval Image Register - -#endif -// -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register -------- -#define AT91C_PITC_PIV (0xFFFFF << 0) // (PITC) Periodic Interval Value -#define AT91C_PITC_PITEN (0x1 << 24) // (PITC) Periodic Interval Timer Enabled -#define AT91C_PITC_PITIEN (0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable -// -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register -------- -#define AT91C_PITC_PITS (0x1 << 0) // (PITC) Periodic Interval Timer Status -// -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register -------- -#define AT91C_PITC_CPIV (0xFFFFF << 0) // (PITC) Current Periodic Interval Value -#define AT91C_PITC_PICNT (0xFFF << 20) // (PITC) Periodic Interval Counter -// -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Watchdog Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_WDTC { - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register -} AT91S_WDTC, *AT91PS_WDTC; -#else -#define WDTC_WDCR (AT91_CAST(AT91_REG *) 0x00000000) // (WDTC_WDCR) Watchdog Control Register -#define WDTC_WDMR (AT91_CAST(AT91_REG *) 0x00000004) // (WDTC_WDMR) Watchdog Mode Register -#define WDTC_WDSR (AT91_CAST(AT91_REG *) 0x00000008) // (WDTC_WDSR) Watchdog Status Register - -#endif -// -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register -------- -#define AT91C_WDTC_WDRSTT (0x1 << 0) // (WDTC) Watchdog Restart -#define AT91C_WDTC_KEY (0xFF << 24) // (WDTC) Watchdog KEY Password -// -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register -------- -#define AT91C_WDTC_WDV (0xFFF << 0) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDFIEN (0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable -#define AT91C_WDTC_WDRSTEN (0x1 << 13) // (WDTC) Watchdog Reset Enable -#define AT91C_WDTC_WDRPROC (0x1 << 14) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDDIS (0x1 << 15) // (WDTC) Watchdog Disable -#define AT91C_WDTC_WDD (0xFFF << 16) // (WDTC) Watchdog Delta Value -#define AT91C_WDTC_WDDBGHLT (0x1 << 28) // (WDTC) Watchdog Debug Halt -#define AT91C_WDTC_WDIDLEHLT (0x1 << 29) // (WDTC) Watchdog Idle Halt -// -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register -------- -#define AT91C_WDTC_WDUNF (0x1 << 0) // (WDTC) Watchdog Underflow -#define AT91C_WDTC_WDERR (0x1 << 1) // (WDTC) Watchdog Error - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Voltage Regulator Mode Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_VREG { - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_VREG, *AT91PS_VREG; -#else -#define VREG_MR (AT91_CAST(AT91_REG *) 0x00000000) // (VREG_MR) Voltage Regulator Mode Register - -#endif -// -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register -------- -#define AT91C_VREG_PSTDBY (0x1 << 0) // (VREG) Voltage Regulator Power Standby Mode - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Memory Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_MC { - AT91_REG MC_RCR; // MC Remap Control Register - AT91_REG MC_ASR; // MC Abort Status Register - AT91_REG MC_AASR; // MC Abort Address Status Register - AT91_REG Reserved0[21]; // - AT91_REG MC_FMR; // MC Flash Mode Register - AT91_REG MC_FCR; // MC Flash Command Register - AT91_REG MC_FSR; // MC Flash Status Register -} AT91S_MC, *AT91PS_MC; -#else -#define MC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (MC_RCR) MC Remap Control Register -#define MC_ASR (AT91_CAST(AT91_REG *) 0x00000004) // (MC_ASR) MC Abort Status Register -#define MC_AASR (AT91_CAST(AT91_REG *) 0x00000008) // (MC_AASR) MC Abort Address Status Register -#define MC_FMR (AT91_CAST(AT91_REG *) 0x00000060) // (MC_FMR) MC Flash Mode Register -#define MC_FCR (AT91_CAST(AT91_REG *) 0x00000064) // (MC_FCR) MC Flash Command Register -#define MC_FSR (AT91_CAST(AT91_REG *) 0x00000068) // (MC_FSR) MC Flash Status Register - -#endif -// -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register -------- -#define AT91C_MC_RCB (0x1 << 0) // (MC) Remap Command Bit -// -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register -------- -#define AT91C_MC_UNDADD (0x1 << 0) // (MC) Undefined Addess Abort Status -#define AT91C_MC_MISADD (0x1 << 1) // (MC) Misaligned Addess Abort Status -#define AT91C_MC_ABTSZ (0x3 << 8) // (MC) Abort Size Status -#define AT91C_MC_ABTSZ_BYTE (0x0 << 8) // (MC) Byte -#define AT91C_MC_ABTSZ_HWORD (0x1 << 8) // (MC) Half-word -#define AT91C_MC_ABTSZ_WORD (0x2 << 8) // (MC) Word -#define AT91C_MC_ABTTYP (0x3 << 10) // (MC) Abort Type Status -#define AT91C_MC_ABTTYP_DATAR (0x0 << 10) // (MC) Data Read -#define AT91C_MC_ABTTYP_DATAW (0x1 << 10) // (MC) Data Write -#define AT91C_MC_ABTTYP_FETCH (0x2 << 10) // (MC) Code Fetch -#define AT91C_MC_MST0 (0x1 << 16) // (MC) Master 0 Abort Source -#define AT91C_MC_MST1 (0x1 << 17) // (MC) Master 1 Abort Source -#define AT91C_MC_SVMST0 (0x1 << 24) // (MC) Saved Master 0 Abort Source -#define AT91C_MC_SVMST1 (0x1 << 25) // (MC) Saved Master 1 Abort Source -// -------- MC_FMR : (MC Offset: 0x60) MC Flash Mode Register -------- -#define AT91C_MC_FRDY (0x1 << 0) // (MC) Flash Ready -#define AT91C_MC_LOCKE (0x1 << 2) // (MC) Lock Error -#define AT91C_MC_PROGE (0x1 << 3) // (MC) Programming Error -#define AT91C_MC_NEBP (0x1 << 7) // (MC) No Erase Before Programming -#define AT91C_MC_FWS (0x3 << 8) // (MC) Flash Wait State -#define AT91C_MC_FWS_0FWS (0x0 << 8) // (MC) 1 cycle for Read, 2 for Write operations -#define AT91C_MC_FWS_1FWS (0x1 << 8) // (MC) 2 cycles for Read, 3 for Write operations -#define AT91C_MC_FWS_2FWS (0x2 << 8) // (MC) 3 cycles for Read, 4 for Write operations -#define AT91C_MC_FWS_3FWS (0x3 << 8) // (MC) 4 cycles for Read, 4 for Write operations -#define AT91C_MC_FMCN (0xFF << 16) // (MC) Flash Microsecond Cycle Number -// -------- MC_FCR : (MC Offset: 0x64) MC Flash Command Register -------- -#define AT91C_MC_FCMD (0xF << 0) // (MC) Flash Command -#define AT91C_MC_FCMD_START_PROG (0x1) // (MC) Starts the programming of th epage specified by PAGEN. -#define AT91C_MC_FCMD_LOCK (0x2) // (MC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_PROG_AND_LOCK (0x3) // (MC) The lock sequence automatically happens after the programming sequence is completed. -#define AT91C_MC_FCMD_UNLOCK (0x4) // (MC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_ERASE_ALL (0x8) // (MC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled. -#define AT91C_MC_FCMD_SET_GP_NVM (0xB) // (MC) Set General Purpose NVM bits. -#define AT91C_MC_FCMD_CLR_GP_NVM (0xD) // (MC) Clear General Purpose NVM bits. -#define AT91C_MC_FCMD_SET_SECURITY (0xF) // (MC) Set Security Bit. -#define AT91C_MC_PAGEN (0x3FF << 8) // (MC) Page Number -#define AT91C_MC_KEY (0xFF << 24) // (MC) Writing Protect Key -// -------- MC_FSR : (MC Offset: 0x68) MC Flash Command Register -------- -#define AT91C_MC_SECURITY (0x1 << 4) // (MC) Security Bit Status -#define AT91C_MC_GPNVM0 (0x1 << 8) // (MC) Sector 0 Lock Status -#define AT91C_MC_GPNVM1 (0x1 << 9) // (MC) Sector 1 Lock Status -#define AT91C_MC_GPNVM2 (0x1 << 10) // (MC) Sector 2 Lock Status -#define AT91C_MC_GPNVM3 (0x1 << 11) // (MC) Sector 3 Lock Status -#define AT91C_MC_GPNVM4 (0x1 << 12) // (MC) Sector 4 Lock Status -#define AT91C_MC_GPNVM5 (0x1 << 13) // (MC) Sector 5 Lock Status -#define AT91C_MC_GPNVM6 (0x1 << 14) // (MC) Sector 6 Lock Status -#define AT91C_MC_GPNVM7 (0x1 << 15) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS0 (0x1 << 16) // (MC) Sector 0 Lock Status -#define AT91C_MC_LOCKS1 (0x1 << 17) // (MC) Sector 1 Lock Status -#define AT91C_MC_LOCKS2 (0x1 << 18) // (MC) Sector 2 Lock Status -#define AT91C_MC_LOCKS3 (0x1 << 19) // (MC) Sector 3 Lock Status -#define AT91C_MC_LOCKS4 (0x1 << 20) // (MC) Sector 4 Lock Status -#define AT91C_MC_LOCKS5 (0x1 << 21) // (MC) Sector 5 Lock Status -#define AT91C_MC_LOCKS6 (0x1 << 22) // (MC) Sector 6 Lock Status -#define AT91C_MC_LOCKS7 (0x1 << 23) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS8 (0x1 << 24) // (MC) Sector 8 Lock Status -#define AT91C_MC_LOCKS9 (0x1 << 25) // (MC) Sector 9 Lock Status -#define AT91C_MC_LOCKS10 (0x1 << 26) // (MC) Sector 10 Lock Status -#define AT91C_MC_LOCKS11 (0x1 << 27) // (MC) Sector 11 Lock Status -#define AT91C_MC_LOCKS12 (0x1 << 28) // (MC) Sector 12 Lock Status -#define AT91C_MC_LOCKS13 (0x1 << 29) // (MC) Sector 13 Lock Status -#define AT91C_MC_LOCKS14 (0x1 << 30) // (MC) Sector 14 Lock Status -#define AT91C_MC_LOCKS15 (0x1 << 31) // (MC) Sector 15 Lock Status - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Serial Parallel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SPI { - AT91_REG SPI_CR; // Control Register - AT91_REG SPI_MR; // Mode Register - AT91_REG SPI_RDR; // Receive Data Register - AT91_REG SPI_TDR; // Transmit Data Register - AT91_REG SPI_SR; // Status Register - AT91_REG SPI_IER; // Interrupt Enable Register - AT91_REG SPI_IDR; // Interrupt Disable Register - AT91_REG SPI_IMR; // Interrupt Mask Register - AT91_REG Reserved0[4]; // - AT91_REG SPI_CSR[4]; // Chip Select Register - AT91_REG Reserved1[48]; // - AT91_REG SPI_RPR; // Receive Pointer Register - AT91_REG SPI_RCR; // Receive Counter Register - AT91_REG SPI_TPR; // Transmit Pointer Register - AT91_REG SPI_TCR; // Transmit Counter Register - AT91_REG SPI_RNPR; // Receive Next Pointer Register - AT91_REG SPI_RNCR; // Receive Next Counter Register - AT91_REG SPI_TNPR; // Transmit Next Pointer Register - AT91_REG SPI_TNCR; // Transmit Next Counter Register - AT91_REG SPI_PTCR; // PDC Transfer Control Register - AT91_REG SPI_PTSR; // PDC Transfer Status Register -} AT91S_SPI, *AT91PS_SPI; -#else -#define SPI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SPI_CR) Control Register -#define SPI_MR (AT91_CAST(AT91_REG *) 0x00000004) // (SPI_MR) Mode Register -#define SPI_RDR (AT91_CAST(AT91_REG *) 0x00000008) // (SPI_RDR) Receive Data Register -#define SPI_TDR (AT91_CAST(AT91_REG *) 0x0000000C) // (SPI_TDR) Transmit Data Register -#define SPI_SR (AT91_CAST(AT91_REG *) 0x00000010) // (SPI_SR) Status Register -#define SPI_IER (AT91_CAST(AT91_REG *) 0x00000014) // (SPI_IER) Interrupt Enable Register -#define SPI_IDR (AT91_CAST(AT91_REG *) 0x00000018) // (SPI_IDR) Interrupt Disable Register -#define SPI_IMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SPI_IMR) Interrupt Mask Register -#define SPI_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (SPI_CSR) Chip Select Register - -#endif -// -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- -#define AT91C_SPI_SPIEN (0x1 << 0) // (SPI) SPI Enable -#define AT91C_SPI_SPIDIS (0x1 << 1) // (SPI) SPI Disable -#define AT91C_SPI_SWRST (0x1 << 7) // (SPI) SPI Software reset -#define AT91C_SPI_LASTXFER (0x1 << 24) // (SPI) SPI Last Transfer -// -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- -#define AT91C_SPI_MSTR (0x1 << 0) // (SPI) Master/Slave Mode -#define AT91C_SPI_PS (0x1 << 1) // (SPI) Peripheral Select -#define AT91C_SPI_PS_FIXED (0x0 << 1) // (SPI) Fixed Peripheral Select -#define AT91C_SPI_PS_VARIABLE (0x1 << 1) // (SPI) Variable Peripheral Select -#define AT91C_SPI_PCSDEC (0x1 << 2) // (SPI) Chip Select Decode -#define AT91C_SPI_FDIV (0x1 << 3) // (SPI) Clock Selection -#define AT91C_SPI_MODFDIS (0x1 << 4) // (SPI) Mode Fault Detection -#define AT91C_SPI_LLB (0x1 << 7) // (SPI) Clock Selection -#define AT91C_SPI_PCS (0xF << 16) // (SPI) Peripheral Chip Select -#define AT91C_SPI_DLYBCS (0xFF << 24) // (SPI) Delay Between Chip Selects -// -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- -#define AT91C_SPI_RD (0xFFFF << 0) // (SPI) Receive Data -#define AT91C_SPI_RPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- -#define AT91C_SPI_TD (0xFFFF << 0) // (SPI) Transmit Data -#define AT91C_SPI_TPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- -#define AT91C_SPI_RDRF (0x1 << 0) // (SPI) Receive Data Register Full -#define AT91C_SPI_TDRE (0x1 << 1) // (SPI) Transmit Data Register Empty -#define AT91C_SPI_MODF (0x1 << 2) // (SPI) Mode Fault Error -#define AT91C_SPI_OVRES (0x1 << 3) // (SPI) Overrun Error Status -#define AT91C_SPI_ENDRX (0x1 << 4) // (SPI) End of Receiver Transfer -#define AT91C_SPI_ENDTX (0x1 << 5) // (SPI) End of Receiver Transfer -#define AT91C_SPI_RXBUFF (0x1 << 6) // (SPI) RXBUFF Interrupt -#define AT91C_SPI_TXBUFE (0x1 << 7) // (SPI) TXBUFE Interrupt -#define AT91C_SPI_NSSR (0x1 << 8) // (SPI) NSSR Interrupt -#define AT91C_SPI_TXEMPTY (0x1 << 9) // (SPI) TXEMPTY Interrupt -#define AT91C_SPI_SPIENS (0x1 << 16) // (SPI) Enable Status -// -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- -// -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- -// -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- -// -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- -#define AT91C_SPI_CPOL (0x1 << 0) // (SPI) Clock Polarity -#define AT91C_SPI_NCPHA (0x1 << 1) // (SPI) Clock Phase -#define AT91C_SPI_CSAAT (0x1 << 3) // (SPI) Chip Select Active After Transfer -#define AT91C_SPI_BITS (0xF << 4) // (SPI) Bits Per Transfer -#define AT91C_SPI_BITS_8 (0x0 << 4) // (SPI) 8 Bits Per transfer -#define AT91C_SPI_BITS_9 (0x1 << 4) // (SPI) 9 Bits Per transfer -#define AT91C_SPI_BITS_10 (0x2 << 4) // (SPI) 10 Bits Per transfer -#define AT91C_SPI_BITS_11 (0x3 << 4) // (SPI) 11 Bits Per transfer -#define AT91C_SPI_BITS_12 (0x4 << 4) // (SPI) 12 Bits Per transfer -#define AT91C_SPI_BITS_13 (0x5 << 4) // (SPI) 13 Bits Per transfer -#define AT91C_SPI_BITS_14 (0x6 << 4) // (SPI) 14 Bits Per transfer -#define AT91C_SPI_BITS_15 (0x7 << 4) // (SPI) 15 Bits Per transfer -#define AT91C_SPI_BITS_16 (0x8 << 4) // (SPI) 16 Bits Per transfer -#define AT91C_SPI_SCBR (0xFF << 8) // (SPI) Serial Clock Baud Rate -#define AT91C_SPI_DLYBS (0xFF << 16) // (SPI) Delay Before SPCK -#define AT91C_SPI_DLYBCT (0xFF << 24) // (SPI) Delay Between Consecutive Transfers - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Usart -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_USART { - AT91_REG US_CR; // Control Register - AT91_REG US_MR; // Mode Register - AT91_REG US_IER; // Interrupt Enable Register - AT91_REG US_IDR; // Interrupt Disable Register - AT91_REG US_IMR; // Interrupt Mask Register - AT91_REG US_CSR; // Channel Status Register - AT91_REG US_RHR; // Receiver Holding Register - AT91_REG US_THR; // Transmitter Holding Register - AT91_REG US_BRGR; // Baud Rate Generator Register - AT91_REG US_RTOR; // Receiver Time-out Register - AT91_REG US_TTGR; // Transmitter Time-guard Register - AT91_REG Reserved0[5]; // - AT91_REG US_FIDI; // FI_DI_Ratio Register - AT91_REG US_NER; // Nb Errors Register - AT91_REG Reserved1[1]; // - AT91_REG US_IF; // IRDA_FILTER Register - AT91_REG Reserved2[44]; // - AT91_REG US_RPR; // Receive Pointer Register - AT91_REG US_RCR; // Receive Counter Register - AT91_REG US_TPR; // Transmit Pointer Register - AT91_REG US_TCR; // Transmit Counter Register - AT91_REG US_RNPR; // Receive Next Pointer Register - AT91_REG US_RNCR; // Receive Next Counter Register - AT91_REG US_TNPR; // Transmit Next Pointer Register - AT91_REG US_TNCR; // Transmit Next Counter Register - AT91_REG US_PTCR; // PDC Transfer Control Register - AT91_REG US_PTSR; // PDC Transfer Status Register -} AT91S_USART, *AT91PS_USART; -#else -#define US_CR (AT91_CAST(AT91_REG *) 0x00000000) // (US_CR) Control Register -#define US_MR (AT91_CAST(AT91_REG *) 0x00000004) // (US_MR) Mode Register -#define US_IER (AT91_CAST(AT91_REG *) 0x00000008) // (US_IER) Interrupt Enable Register -#define US_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (US_IDR) Interrupt Disable Register -#define US_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (US_IMR) Interrupt Mask Register -#define US_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (US_CSR) Channel Status Register -#define US_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (US_RHR) Receiver Holding Register -#define US_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (US_THR) Transmitter Holding Register -#define US_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (US_BRGR) Baud Rate Generator Register -#define US_RTOR (AT91_CAST(AT91_REG *) 0x00000024) // (US_RTOR) Receiver Time-out Register -#define US_TTGR (AT91_CAST(AT91_REG *) 0x00000028) // (US_TTGR) Transmitter Time-guard Register -#define US_FIDI (AT91_CAST(AT91_REG *) 0x00000040) // (US_FIDI) FI_DI_Ratio Register -#define US_NER (AT91_CAST(AT91_REG *) 0x00000044) // (US_NER) Nb Errors Register -#define US_IF (AT91_CAST(AT91_REG *) 0x0000004C) // (US_IF) IRDA_FILTER Register - -#endif -// -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_STTBRK (0x1 << 9) // (USART) Start Break -#define AT91C_US_STPBRK (0x1 << 10) // (USART) Stop Break -#define AT91C_US_STTTO (0x1 << 11) // (USART) Start Time-out -#define AT91C_US_SENDA (0x1 << 12) // (USART) Send Address -#define AT91C_US_RSTIT (0x1 << 13) // (USART) Reset Iterations -#define AT91C_US_RSTNACK (0x1 << 14) // (USART) Reset Non Acknowledge -#define AT91C_US_RETTO (0x1 << 15) // (USART) Rearm Time-out -#define AT91C_US_DTREN (0x1 << 16) // (USART) Data Terminal ready Enable -#define AT91C_US_DTRDIS (0x1 << 17) // (USART) Data Terminal ready Disable -#define AT91C_US_RTSEN (0x1 << 18) // (USART) Request to Send enable -#define AT91C_US_RTSDIS (0x1 << 19) // (USART) Request to Send Disable -// -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_USMODE (0xF << 0) // (USART) Usart mode -#define AT91C_US_USMODE_NORMAL (0x0) // (USART) Normal -#define AT91C_US_USMODE_RS485 (0x1) // (USART) RS485 -#define AT91C_US_USMODE_HWHSH (0x2) // (USART) Hardware Handshaking -#define AT91C_US_USMODE_MODEM (0x3) // (USART) Modem -#define AT91C_US_USMODE_ISO7816_0 (0x4) // (USART) ISO7816 protocol: T = 0 -#define AT91C_US_USMODE_ISO7816_1 (0x6) // (USART) ISO7816 protocol: T = 1 -#define AT91C_US_USMODE_IRDA (0x8) // (USART) IrDA -#define AT91C_US_USMODE_SWHSH (0xC) // (USART) Software Handshaking -#define AT91C_US_CLKS (0x3 << 4) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CLKS_CLOCK (0x0 << 4) // (USART) Clock -#define AT91C_US_CLKS_FDIV1 (0x1 << 4) // (USART) fdiv1 -#define AT91C_US_CLKS_SLOW (0x2 << 4) // (USART) slow_clock (ARM) -#define AT91C_US_CLKS_EXT (0x3 << 4) // (USART) External (SCK) -#define AT91C_US_CHRL (0x3 << 6) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CHRL_5_BITS (0x0 << 6) // (USART) Character Length: 5 bits -#define AT91C_US_CHRL_6_BITS (0x1 << 6) // (USART) Character Length: 6 bits -#define AT91C_US_CHRL_7_BITS (0x2 << 6) // (USART) Character Length: 7 bits -#define AT91C_US_CHRL_8_BITS (0x3 << 6) // (USART) Character Length: 8 bits -#define AT91C_US_SYNC (0x1 << 8) // (USART) Synchronous Mode Select -#define AT91C_US_NBSTOP (0x3 << 12) // (USART) Number of Stop bits -#define AT91C_US_NBSTOP_1_BIT (0x0 << 12) // (USART) 1 stop bit -#define AT91C_US_NBSTOP_15_BIT (0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits -#define AT91C_US_NBSTOP_2_BIT (0x2 << 12) // (USART) 2 stop bits -#define AT91C_US_MSBF (0x1 << 16) // (USART) Bit Order -#define AT91C_US_MODE9 (0x1 << 17) // (USART) 9-bit Character length -#define AT91C_US_CKLO (0x1 << 18) // (USART) Clock Output Select -#define AT91C_US_OVER (0x1 << 19) // (USART) Over Sampling Mode -#define AT91C_US_INACK (0x1 << 20) // (USART) Inhibit Non Acknowledge -#define AT91C_US_DSNACK (0x1 << 21) // (USART) Disable Successive NACK -#define AT91C_US_MAX_ITER (0x1 << 24) // (USART) Number of Repetitions -#define AT91C_US_FILTER (0x1 << 28) // (USART) Receive Line Filter -// -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXBRK (0x1 << 2) // (USART) Break Received/End of Break -#define AT91C_US_TIMEOUT (0x1 << 8) // (USART) Receiver Time-out -#define AT91C_US_ITERATION (0x1 << 10) // (USART) Max number of Repetitions Reached -#define AT91C_US_NACK (0x1 << 13) // (USART) Non Acknowledge -#define AT91C_US_RIIC (0x1 << 16) // (USART) Ring INdicator Input Change Flag -#define AT91C_US_DSRIC (0x1 << 17) // (USART) Data Set Ready Input Change Flag -#define AT91C_US_DCDIC (0x1 << 18) // (USART) Data Carrier Flag -#define AT91C_US_CTSIC (0x1 << 19) // (USART) Clear To Send Input Change Flag -// -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register -------- -#define AT91C_US_RI (0x1 << 20) // (USART) Image of RI Input -#define AT91C_US_DSR (0x1 << 21) // (USART) Image of DSR Input -#define AT91C_US_DCD (0x1 << 22) // (USART) Image of DCD Input -#define AT91C_US_CTS (0x1 << 23) // (USART) Image of CTS Input - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SSC { - AT91_REG SSC_CR; // Control Register - AT91_REG SSC_CMR; // Clock Mode Register - AT91_REG Reserved0[2]; // - AT91_REG SSC_RCMR; // Receive Clock ModeRegister - AT91_REG SSC_RFMR; // Receive Frame Mode Register - AT91_REG SSC_TCMR; // Transmit Clock Mode Register - AT91_REG SSC_TFMR; // Transmit Frame Mode Register - AT91_REG SSC_RHR; // Receive Holding Register - AT91_REG SSC_THR; // Transmit Holding Register - AT91_REG Reserved1[2]; // - AT91_REG SSC_RSHR; // Receive Sync Holding Register - AT91_REG SSC_TSHR; // Transmit Sync Holding Register - AT91_REG Reserved2[2]; // - AT91_REG SSC_SR; // Status Register - AT91_REG SSC_IER; // Interrupt Enable Register - AT91_REG SSC_IDR; // Interrupt Disable Register - AT91_REG SSC_IMR; // Interrupt Mask Register - AT91_REG Reserved3[44]; // - AT91_REG SSC_RPR; // Receive Pointer Register - AT91_REG SSC_RCR; // Receive Counter Register - AT91_REG SSC_TPR; // Transmit Pointer Register - AT91_REG SSC_TCR; // Transmit Counter Register - AT91_REG SSC_RNPR; // Receive Next Pointer Register - AT91_REG SSC_RNCR; // Receive Next Counter Register - AT91_REG SSC_TNPR; // Transmit Next Pointer Register - AT91_REG SSC_TNCR; // Transmit Next Counter Register - AT91_REG SSC_PTCR; // PDC Transfer Control Register - AT91_REG SSC_PTSR; // PDC Transfer Status Register -} AT91S_SSC, *AT91PS_SSC; -#else -#define SSC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SSC_CR) Control Register -#define SSC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (SSC_CMR) Clock Mode Register -#define SSC_RCMR (AT91_CAST(AT91_REG *) 0x00000010) // (SSC_RCMR) Receive Clock ModeRegister -#define SSC_RFMR (AT91_CAST(AT91_REG *) 0x00000014) // (SSC_RFMR) Receive Frame Mode Register -#define SSC_TCMR (AT91_CAST(AT91_REG *) 0x00000018) // (SSC_TCMR) Transmit Clock Mode Register -#define SSC_TFMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SSC_TFMR) Transmit Frame Mode Register -#define SSC_RHR (AT91_CAST(AT91_REG *) 0x00000020) // (SSC_RHR) Receive Holding Register -#define SSC_THR (AT91_CAST(AT91_REG *) 0x00000024) // (SSC_THR) Transmit Holding Register -#define SSC_RSHR (AT91_CAST(AT91_REG *) 0x00000030) // (SSC_RSHR) Receive Sync Holding Register -#define SSC_TSHR (AT91_CAST(AT91_REG *) 0x00000034) // (SSC_TSHR) Transmit Sync Holding Register -#define SSC_SR (AT91_CAST(AT91_REG *) 0x00000040) // (SSC_SR) Status Register -#define SSC_IER (AT91_CAST(AT91_REG *) 0x00000044) // (SSC_IER) Interrupt Enable Register -#define SSC_IDR (AT91_CAST(AT91_REG *) 0x00000048) // (SSC_IDR) Interrupt Disable Register -#define SSC_IMR (AT91_CAST(AT91_REG *) 0x0000004C) // (SSC_IMR) Interrupt Mask Register - -#endif -// -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register -------- -#define AT91C_SSC_RXEN (0x1 << 0) // (SSC) Receive Enable -#define AT91C_SSC_RXDIS (0x1 << 1) // (SSC) Receive Disable -#define AT91C_SSC_TXEN (0x1 << 8) // (SSC) Transmit Enable -#define AT91C_SSC_TXDIS (0x1 << 9) // (SSC) Transmit Disable -#define AT91C_SSC_SWRST (0x1 << 15) // (SSC) Software Reset -// -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register -------- -#define AT91C_SSC_CKS (0x3 << 0) // (SSC) Receive/Transmit Clock Selection -#define AT91C_SSC_CKS_DIV (0x0) // (SSC) Divided Clock -#define AT91C_SSC_CKS_TK (0x1) // (SSC) TK Clock signal -#define AT91C_SSC_CKS_RK (0x2) // (SSC) RK pin -#define AT91C_SSC_CKO (0x7 << 2) // (SSC) Receive/Transmit Clock Output Mode Selection -#define AT91C_SSC_CKO_NONE (0x0 << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only -#define AT91C_SSC_CKO_CONTINOUS (0x1 << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output -#define AT91C_SSC_CKO_DATA_TX (0x2 << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output -#define AT91C_SSC_CKI (0x1 << 5) // (SSC) Receive/Transmit Clock Inversion -#define AT91C_SSC_CKG (0x3 << 6) // (SSC) Receive/Transmit Clock Gating Selection -#define AT91C_SSC_CKG_NONE (0x0 << 6) // (SSC) Receive/Transmit Clock Gating: None, continuous clock -#define AT91C_SSC_CKG_LOW (0x1 << 6) // (SSC) Receive/Transmit Clock enabled only if RF Low -#define AT91C_SSC_CKG_HIGH (0x2 << 6) // (SSC) Receive/Transmit Clock enabled only if RF High -#define AT91C_SSC_START (0xF << 8) // (SSC) Receive/Transmit Start Selection -#define AT91C_SSC_START_CONTINOUS (0x0 << 8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. -#define AT91C_SSC_START_TX (0x1 << 8) // (SSC) Transmit/Receive start -#define AT91C_SSC_START_LOW_RF (0x2 << 8) // (SSC) Detection of a low level on RF input -#define AT91C_SSC_START_HIGH_RF (0x3 << 8) // (SSC) Detection of a high level on RF input -#define AT91C_SSC_START_FALL_RF (0x4 << 8) // (SSC) Detection of a falling edge on RF input -#define AT91C_SSC_START_RISE_RF (0x5 << 8) // (SSC) Detection of a rising edge on RF input -#define AT91C_SSC_START_LEVEL_RF (0x6 << 8) // (SSC) Detection of any level change on RF input -#define AT91C_SSC_START_EDGE_RF (0x7 << 8) // (SSC) Detection of any edge on RF input -#define AT91C_SSC_START_0 (0x8 << 8) // (SSC) Compare 0 -#define AT91C_SSC_STOP (0x1 << 12) // (SSC) Receive Stop Selection -#define AT91C_SSC_STTDLY (0xFF << 16) // (SSC) Receive/Transmit Start Delay -#define AT91C_SSC_PERIOD (0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection -// -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register -------- -#define AT91C_SSC_DATLEN (0x1F << 0) // (SSC) Data Length -#define AT91C_SSC_LOOP (0x1 << 5) // (SSC) Loop Mode -#define AT91C_SSC_MSBF (0x1 << 7) // (SSC) Most Significant Bit First -#define AT91C_SSC_DATNB (0xF << 8) // (SSC) Data Number per Frame -#define AT91C_SSC_FSLEN (0xF << 16) // (SSC) Receive/Transmit Frame Sync length -#define AT91C_SSC_FSOS (0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection -#define AT91C_SSC_FSOS_NONE (0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only -#define AT91C_SSC_FSOS_NEGATIVE (0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse -#define AT91C_SSC_FSOS_POSITIVE (0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse -#define AT91C_SSC_FSOS_LOW (0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer -#define AT91C_SSC_FSOS_HIGH (0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer -#define AT91C_SSC_FSOS_TOGGLE (0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer -#define AT91C_SSC_FSEDGE (0x1 << 24) // (SSC) Frame Sync Edge Detection -// -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register -------- -// -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register -------- -#define AT91C_SSC_DATDEF (0x1 << 5) // (SSC) Data Default Value -#define AT91C_SSC_FSDEN (0x1 << 23) // (SSC) Frame Sync Data Enable -// -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register -------- -#define AT91C_SSC_TXRDY (0x1 << 0) // (SSC) Transmit Ready -#define AT91C_SSC_TXEMPTY (0x1 << 1) // (SSC) Transmit Empty -#define AT91C_SSC_ENDTX (0x1 << 2) // (SSC) End Of Transmission -#define AT91C_SSC_TXBUFE (0x1 << 3) // (SSC) Transmit Buffer Empty -#define AT91C_SSC_RXRDY (0x1 << 4) // (SSC) Receive Ready -#define AT91C_SSC_OVRUN (0x1 << 5) // (SSC) Receive Overrun -#define AT91C_SSC_ENDRX (0x1 << 6) // (SSC) End of Reception -#define AT91C_SSC_RXBUFF (0x1 << 7) // (SSC) Receive Buffer Full -#define AT91C_SSC_CP0 (0x1 << 8) // (SSC) Compare 0 -#define AT91C_SSC_CP1 (0x1 << 9) // (SSC) Compare 1 -#define AT91C_SSC_TXSYN (0x1 << 10) // (SSC) Transmit Sync -#define AT91C_SSC_RXSYN (0x1 << 11) // (SSC) Receive Sync -#define AT91C_SSC_TXENA (0x1 << 16) // (SSC) Transmit Enable -#define AT91C_SSC_RXENA (0x1 << 17) // (SSC) Receive Enable -// -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register -------- -// -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register -------- -// -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Two-wire Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TWI { - AT91_REG TWI_CR; // Control Register - AT91_REG TWI_MMR; // Master Mode Register - AT91_REG Reserved0[1]; // - AT91_REG TWI_IADR; // Internal Address Register - AT91_REG TWI_CWGR; // Clock Waveform Generator Register - AT91_REG Reserved1[3]; // - AT91_REG TWI_SR; // Status Register - AT91_REG TWI_IER; // Interrupt Enable Register - AT91_REG TWI_IDR; // Interrupt Disable Register - AT91_REG TWI_IMR; // Interrupt Mask Register - AT91_REG TWI_RHR; // Receive Holding Register - AT91_REG TWI_THR; // Transmit Holding Register - AT91_REG Reserved2[50]; // - AT91_REG TWI_RPR; // Receive Pointer Register - AT91_REG TWI_RCR; // Receive Counter Register - AT91_REG TWI_TPR; // Transmit Pointer Register - AT91_REG TWI_TCR; // Transmit Counter Register - AT91_REG TWI_RNPR; // Receive Next Pointer Register - AT91_REG TWI_RNCR; // Receive Next Counter Register - AT91_REG TWI_TNPR; // Transmit Next Pointer Register - AT91_REG TWI_TNCR; // Transmit Next Counter Register - AT91_REG TWI_PTCR; // PDC Transfer Control Register - AT91_REG TWI_PTSR; // PDC Transfer Status Register -} AT91S_TWI, *AT91PS_TWI; -#else -#define TWI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (TWI_CR) Control Register -#define TWI_MMR (AT91_CAST(AT91_REG *) 0x00000004) // (TWI_MMR) Master Mode Register -#define TWI_IADR (AT91_CAST(AT91_REG *) 0x0000000C) // (TWI_IADR) Internal Address Register -#define TWI_CWGR (AT91_CAST(AT91_REG *) 0x00000010) // (TWI_CWGR) Clock Waveform Generator Register -#define TWI_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TWI_SR) Status Register -#define TWI_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TWI_IER) Interrupt Enable Register -#define TWI_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TWI_IDR) Interrupt Disable Register -#define TWI_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TWI_IMR) Interrupt Mask Register -#define TWI_RHR (AT91_CAST(AT91_REG *) 0x00000030) // (TWI_RHR) Receive Holding Register -#define TWI_THR (AT91_CAST(AT91_REG *) 0x00000034) // (TWI_THR) Transmit Holding Register - -#endif -// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- -#define AT91C_TWI_START (0x1 << 0) // (TWI) Send a START Condition -#define AT91C_TWI_STOP (0x1 << 1) // (TWI) Send a STOP Condition -#define AT91C_TWI_MSEN (0x1 << 2) // (TWI) TWI Master Transfer Enabled -#define AT91C_TWI_MSDIS (0x1 << 3) // (TWI) TWI Master Transfer Disabled -#define AT91C_TWI_SWRST (0x1 << 7) // (TWI) Software Reset -// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- -#define AT91C_TWI_IADRSZ (0x3 << 8) // (TWI) Internal Device Address Size -#define AT91C_TWI_IADRSZ_NO (0x0 << 8) // (TWI) No internal device address -#define AT91C_TWI_IADRSZ_1_BYTE (0x1 << 8) // (TWI) One-byte internal device address -#define AT91C_TWI_IADRSZ_2_BYTE (0x2 << 8) // (TWI) Two-byte internal device address -#define AT91C_TWI_IADRSZ_3_BYTE (0x3 << 8) // (TWI) Three-byte internal device address -#define AT91C_TWI_MREAD (0x1 << 12) // (TWI) Master Read Direction -#define AT91C_TWI_DADR (0x7F << 16) // (TWI) Device Address -// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- -#define AT91C_TWI_CLDIV (0xFF << 0) // (TWI) Clock Low Divider -#define AT91C_TWI_CHDIV (0xFF << 8) // (TWI) Clock High Divider -#define AT91C_TWI_CKDIV (0x7 << 16) // (TWI) Clock Divider -// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- -#define AT91C_TWI_TXCOMP (0x1 << 0) // (TWI) Transmission Completed -#define AT91C_TWI_RXRDY (0x1 << 1) // (TWI) Receive holding register ReaDY -#define AT91C_TWI_TXRDY (0x1 << 2) // (TWI) Transmit holding register ReaDY -#define AT91C_TWI_OVRE (0x1 << 6) // (TWI) Overrun Error -#define AT91C_TWI_UNRE (0x1 << 7) // (TWI) Underrun Error -#define AT91C_TWI_NACK (0x1 << 8) // (TWI) Not Acknowledged -#define AT91C_TWI_ENDRX (0x1 << 12) // (TWI) -#define AT91C_TWI_ENDTX (0x1 << 13) // (TWI) -#define AT91C_TWI_RXBUFF (0x1 << 14) // (TWI) -#define AT91C_TWI_TXBUFE (0x1 << 15) // (TWI) -// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- -// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- -// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR PWMC Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC_CH { - AT91_REG PWMC_CMR; // Channel Mode Register - AT91_REG PWMC_CDTYR; // Channel Duty Cycle Register - AT91_REG PWMC_CPRDR; // Channel Period Register - AT91_REG PWMC_CCNTR; // Channel Counter Register - AT91_REG PWMC_CUPDR; // Channel Update Register - AT91_REG PWMC_Reserved[3]; // Reserved -} AT91S_PWMC_CH, *AT91PS_PWMC_CH; -#else -#define PWMC_CMR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_CMR) Channel Mode Register -#define PWMC_CDTYR (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_CDTYR) Channel Duty Cycle Register -#define PWMC_CPRDR (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_CPRDR) Channel Period Register -#define PWMC_CCNTR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_CCNTR) Channel Counter Register -#define PWMC_CUPDR (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_CUPDR) Channel Update Register -#define Reserved (AT91_CAST(AT91_REG *) 0x00000014) // (Reserved) Reserved - -#endif -// -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register -------- -#define AT91C_PWMC_CPRE (0xF << 0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx -#define AT91C_PWMC_CPRE_MCK (0x0) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKA (0xB) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKB (0xC) // (PWMC_CH) -#define AT91C_PWMC_CALG (0x1 << 8) // (PWMC_CH) Channel Alignment -#define AT91C_PWMC_CPOL (0x1 << 9) // (PWMC_CH) Channel Polarity -#define AT91C_PWMC_CPD (0x1 << 10) // (PWMC_CH) Channel Update Period -// -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register -------- -#define AT91C_PWMC_CDTY (0x0 << 0) // (PWMC_CH) Channel Duty Cycle -// -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register -------- -#define AT91C_PWMC_CPRD (0x0 << 0) // (PWMC_CH) Channel Period -// -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register -------- -#define AT91C_PWMC_CCNT (0x0 << 0) // (PWMC_CH) Channel Counter -// -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register -------- -#define AT91C_PWMC_CUPD (0x0 << 0) // (PWMC_CH) Channel Update - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC { - AT91_REG PWMC_MR; // PWMC Mode Register - AT91_REG PWMC_ENA; // PWMC Enable Register - AT91_REG PWMC_DIS; // PWMC Disable Register - AT91_REG PWMC_SR; // PWMC Status Register - AT91_REG PWMC_IER; // PWMC Interrupt Enable Register - AT91_REG PWMC_IDR; // PWMC Interrupt Disable Register - AT91_REG PWMC_IMR; // PWMC Interrupt Mask Register - AT91_REG PWMC_ISR; // PWMC Interrupt Status Register - AT91_REG Reserved0[55]; // - AT91_REG PWMC_VR; // PWMC Version Register - AT91_REG Reserved1[64]; // - AT91S_PWMC_CH PWMC_CH[4]; // PWMC Channel -} AT91S_PWMC, *AT91PS_PWMC; -#else -#define PWMC_MR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_MR) PWMC Mode Register -#define PWMC_ENA (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_ENA) PWMC Enable Register -#define PWMC_DIS (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_DIS) PWMC Disable Register -#define PWMC_SR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_SR) PWMC Status Register -#define PWMC_IER (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_IER) PWMC Interrupt Enable Register -#define PWMC_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (PWMC_IDR) PWMC Interrupt Disable Register -#define PWMC_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (PWMC_IMR) PWMC Interrupt Mask Register -#define PWMC_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (PWMC_ISR) PWMC Interrupt Status Register -#define PWMC_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (PWMC_VR) PWMC Version Register - -#endif -// -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register -------- -#define AT91C_PWMC_DIVA (0xFF << 0) // (PWMC) CLKA divide factor. -#define AT91C_PWMC_PREA (0xF << 8) // (PWMC) Divider Input Clock Prescaler A -#define AT91C_PWMC_PREA_MCK (0x0 << 8) // (PWMC) -#define AT91C_PWMC_DIVB (0xFF << 16) // (PWMC) CLKB divide factor. -#define AT91C_PWMC_PREB (0xF << 24) // (PWMC) Divider Input Clock Prescaler B -#define AT91C_PWMC_PREB_MCK (0x0 << 24) // (PWMC) -// -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register -------- -#define AT91C_PWMC_CHID0 (0x1 << 0) // (PWMC) Channel ID 0 -#define AT91C_PWMC_CHID1 (0x1 << 1) // (PWMC) Channel ID 1 -#define AT91C_PWMC_CHID2 (0x1 << 2) // (PWMC) Channel ID 2 -#define AT91C_PWMC_CHID3 (0x1 << 3) // (PWMC) Channel ID 3 -// -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register -------- -// -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register -------- -// -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register -------- -// -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register -------- -// -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register -------- -// -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR USB Device Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_UDP { - AT91_REG UDP_NUM; // Frame Number Register - AT91_REG UDP_GLBSTATE; // Global State Register - AT91_REG UDP_FADDR; // Function Address Register - AT91_REG Reserved0[1]; // - AT91_REG UDP_IER; // Interrupt Enable Register - AT91_REG UDP_IDR; // Interrupt Disable Register - AT91_REG UDP_IMR; // Interrupt Mask Register - AT91_REG UDP_ISR; // Interrupt Status Register - AT91_REG UDP_ICR; // Interrupt Clear Register - AT91_REG Reserved1[1]; // - AT91_REG UDP_RSTEP; // Reset Endpoint Register - AT91_REG Reserved2[1]; // - AT91_REG UDP_CSR[6]; // Endpoint Control and Status Register - AT91_REG Reserved3[2]; // - AT91_REG UDP_FDR[6]; // Endpoint FIFO Data Register - AT91_REG Reserved4[3]; // - AT91_REG UDP_TXVC; // Transceiver Control Register -} AT91S_UDP, *AT91PS_UDP; -#else -#define UDP_FRM_NUM (AT91_CAST(AT91_REG *) 0x00000000) // (UDP_FRM_NUM) Frame Number Register -#define UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0x00000004) // (UDP_GLBSTATE) Global State Register -#define UDP_FADDR (AT91_CAST(AT91_REG *) 0x00000008) // (UDP_FADDR) Function Address Register -#define UDP_IER (AT91_CAST(AT91_REG *) 0x00000010) // (UDP_IER) Interrupt Enable Register -#define UDP_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (UDP_IDR) Interrupt Disable Register -#define UDP_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (UDP_IMR) Interrupt Mask Register -#define UDP_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (UDP_ISR) Interrupt Status Register -#define UDP_ICR (AT91_CAST(AT91_REG *) 0x00000020) // (UDP_ICR) Interrupt Clear Register -#define UDP_RSTEP (AT91_CAST(AT91_REG *) 0x00000028) // (UDP_RSTEP) Reset Endpoint Register -#define UDP_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (UDP_CSR) Endpoint Control and Status Register -#define UDP_FDR (AT91_CAST(AT91_REG *) 0x00000050) // (UDP_FDR) Endpoint FIFO Data Register -#define UDP_TXVC (AT91_CAST(AT91_REG *) 0x00000074) // (UDP_TXVC) Transceiver Control Register - -#endif -// -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register -------- -#define AT91C_UDP_FRM_NUM (0x7FF << 0) // (UDP) Frame Number as Defined in the Packet Field Formats -#define AT91C_UDP_FRM_ERR (0x1 << 16) // (UDP) Frame Error -#define AT91C_UDP_FRM_OK (0x1 << 17) // (UDP) Frame OK -// -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register -------- -#define AT91C_UDP_FADDEN (0x1 << 0) // (UDP) Function Address Enable -#define AT91C_UDP_CONFG (0x1 << 1) // (UDP) Configured -#define AT91C_UDP_ESR (0x1 << 2) // (UDP) Enable Send Resume -#define AT91C_UDP_RSMINPR (0x1 << 3) // (UDP) A Resume Has Been Sent to the Host -#define AT91C_UDP_RMWUPE (0x1 << 4) // (UDP) Remote Wake Up Enable -// -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register -------- -#define AT91C_UDP_FADD (0xFF << 0) // (UDP) Function Address Value -#define AT91C_UDP_FEN (0x1 << 8) // (UDP) Function Enable -// -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register -------- -#define AT91C_UDP_EPINT0 (0x1 << 0) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT1 (0x1 << 1) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT2 (0x1 << 2) // (UDP) Endpoint 2 Interrupt -#define AT91C_UDP_EPINT3 (0x1 << 3) // (UDP) Endpoint 3 Interrupt -#define AT91C_UDP_EPINT4 (0x1 << 4) // (UDP) Endpoint 4 Interrupt -#define AT91C_UDP_EPINT5 (0x1 << 5) // (UDP) Endpoint 5 Interrupt -#define AT91C_UDP_RXSUSP (0x1 << 8) // (UDP) USB Suspend Interrupt -#define AT91C_UDP_RXRSM (0x1 << 9) // (UDP) USB Resume Interrupt -#define AT91C_UDP_EXTRSM (0x1 << 10) // (UDP) USB External Resume Interrupt -#define AT91C_UDP_SOFINT (0x1 << 11) // (UDP) USB Start Of frame Interrupt -#define AT91C_UDP_WAKEUP (0x1 << 13) // (UDP) USB Resume Interrupt -// -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register -------- -// -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register -------- -// -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register -------- -#define AT91C_UDP_ENDBUSRES (0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt -// -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register -------- -// -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register -------- -#define AT91C_UDP_EP0 (0x1 << 0) // (UDP) Reset Endpoint 0 -#define AT91C_UDP_EP1 (0x1 << 1) // (UDP) Reset Endpoint 1 -#define AT91C_UDP_EP2 (0x1 << 2) // (UDP) Reset Endpoint 2 -#define AT91C_UDP_EP3 (0x1 << 3) // (UDP) Reset Endpoint 3 -#define AT91C_UDP_EP4 (0x1 << 4) // (UDP) Reset Endpoint 4 -#define AT91C_UDP_EP5 (0x1 << 5) // (UDP) Reset Endpoint 5 -// -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register -------- -#define AT91C_UDP_TXCOMP (0x1 << 0) // (UDP) Generates an IN packet with data previously written in the DPR -#define AT91C_UDP_RX_DATA_BK0 (0x1 << 1) // (UDP) Receive Data Bank 0 -#define AT91C_UDP_RXSETUP (0x1 << 2) // (UDP) Sends STALL to the Host (Control endpoints) -#define AT91C_UDP_ISOERROR (0x1 << 3) // (UDP) Isochronous error (Isochronous endpoints) -#define AT91C_UDP_STALLSENT (0x1 << 3) // (UDP) Stall sent (Control, bulk, interrupt endpoints) -#define AT91C_UDP_TXPKTRDY (0x1 << 4) // (UDP) Transmit Packet Ready -#define AT91C_UDP_FORCESTALL (0x1 << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints). -#define AT91C_UDP_RX_DATA_BK1 (0x1 << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes). -#define AT91C_UDP_DIR (0x1 << 7) // (UDP) Transfer Direction -#define AT91C_UDP_EPTYPE (0x7 << 8) // (UDP) Endpoint type -#define AT91C_UDP_EPTYPE_CTRL (0x0 << 8) // (UDP) Control -#define AT91C_UDP_EPTYPE_ISO_OUT (0x1 << 8) // (UDP) Isochronous OUT -#define AT91C_UDP_EPTYPE_BULK_OUT (0x2 << 8) // (UDP) Bulk OUT -#define AT91C_UDP_EPTYPE_INT_OUT (0x3 << 8) // (UDP) Interrupt OUT -#define AT91C_UDP_EPTYPE_ISO_IN (0x5 << 8) // (UDP) Isochronous IN -#define AT91C_UDP_EPTYPE_BULK_IN (0x6 << 8) // (UDP) Bulk IN -#define AT91C_UDP_EPTYPE_INT_IN (0x7 << 8) // (UDP) Interrupt IN -#define AT91C_UDP_DTGLE (0x1 << 11) // (UDP) Data Toggle -#define AT91C_UDP_EPEDS (0x1 << 15) // (UDP) Endpoint Enable Disable -#define AT91C_UDP_RXBYTECNT (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO -// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register -------- -#define AT91C_UDP_TXVDIS (0x1 << 8) // (UDP) - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TC { - AT91_REG TC_CCR; // Channel Control Register - AT91_REG TC_CMR; // Channel Mode Register (Capture Mode / Waveform Mode) - AT91_REG Reserved0[2]; // - AT91_REG TC_CV; // Counter Value - AT91_REG TC_RA; // Register A - AT91_REG TC_RB; // Register B - AT91_REG TC_RC; // Register C - AT91_REG TC_SR; // Status Register - AT91_REG TC_IER; // Interrupt Enable Register - AT91_REG TC_IDR; // Interrupt Disable Register - AT91_REG TC_IMR; // Interrupt Mask Register -} AT91S_TC, *AT91PS_TC; -#else -#define TC_CCR (AT91_CAST(AT91_REG *) 0x00000000) // (TC_CCR) Channel Control Register -#define TC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (TC_CMR) Channel Mode Register (Capture Mode / Waveform Mode) -#define TC_CV (AT91_CAST(AT91_REG *) 0x00000010) // (TC_CV) Counter Value -#define TC_RA (AT91_CAST(AT91_REG *) 0x00000014) // (TC_RA) Register A -#define TC_RB (AT91_CAST(AT91_REG *) 0x00000018) // (TC_RB) Register B -#define TC_RC (AT91_CAST(AT91_REG *) 0x0000001C) // (TC_RC) Register C -#define TC_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TC_SR) Status Register -#define TC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TC_IER) Interrupt Enable Register -#define TC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TC_IDR) Interrupt Disable Register -#define TC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TC_IMR) Interrupt Mask Register - -#endif -// -------- TC_CCR : (TC Offset: 0x0) TC Channel Control Register -------- -#define AT91C_TC_CLKEN (0x1 << 0) // (TC) Counter Clock Enable Command -#define AT91C_TC_CLKDIS (0x1 << 1) // (TC) Counter Clock Disable Command -#define AT91C_TC_SWTRG (0x1 << 2) // (TC) Software Trigger Command -// -------- TC_CMR : (TC Offset: 0x4) TC Channel Mode Register: Capture Mode / Waveform Mode -------- -#define AT91C_TC_CLKS (0x7 << 0) // (TC) Clock Selection -#define AT91C_TC_CLKS_TIMER_DIV1_CLOCK (0x0) // (TC) Clock selected: TIMER_DIV1_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV2_CLOCK (0x1) // (TC) Clock selected: TIMER_DIV2_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV3_CLOCK (0x2) // (TC) Clock selected: TIMER_DIV3_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV4_CLOCK (0x3) // (TC) Clock selected: TIMER_DIV4_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV5_CLOCK (0x4) // (TC) Clock selected: TIMER_DIV5_CLOCK -#define AT91C_TC_CLKS_XC0 (0x5) // (TC) Clock selected: XC0 -#define AT91C_TC_CLKS_XC1 (0x6) // (TC) Clock selected: XC1 -#define AT91C_TC_CLKS_XC2 (0x7) // (TC) Clock selected: XC2 -#define AT91C_TC_CLKI (0x1 << 3) // (TC) Clock Invert -#define AT91C_TC_BURST (0x3 << 4) // (TC) Burst Signal Selection -#define AT91C_TC_BURST_NONE (0x0 << 4) // (TC) The clock is not gated by an external signal -#define AT91C_TC_BURST_XC0 (0x1 << 4) // (TC) XC0 is ANDed with the selected clock -#define AT91C_TC_BURST_XC1 (0x2 << 4) // (TC) XC1 is ANDed with the selected clock -#define AT91C_TC_BURST_XC2 (0x3 << 4) // (TC) XC2 is ANDed with the selected clock -#define AT91C_TC_CPCSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RC Compare -#define AT91C_TC_LDBSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RB Loading -#define AT91C_TC_CPCDIS (0x1 << 7) // (TC) Counter Clock Disable with RC Compare -#define AT91C_TC_LDBDIS (0x1 << 7) // (TC) Counter Clock Disabled with RB Loading -#define AT91C_TC_ETRGEDG (0x3 << 8) // (TC) External Trigger Edge Selection -#define AT91C_TC_ETRGEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_ETRGEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_ETRGEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_ETRGEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVTEDG (0x3 << 8) // (TC) External Event Edge Selection -#define AT91C_TC_EEVTEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_EEVTEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_EEVTEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_EEVTEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVT (0x3 << 10) // (TC) External Event Selection -#define AT91C_TC_EEVT_TIOB (0x0 << 10) // (TC) Signal selected as external event: TIOB TIOB direction: input -#define AT91C_TC_EEVT_XC0 (0x1 << 10) // (TC) Signal selected as external event: XC0 TIOB direction: output -#define AT91C_TC_EEVT_XC1 (0x2 << 10) // (TC) Signal selected as external event: XC1 TIOB direction: output -#define AT91C_TC_EEVT_XC2 (0x3 << 10) // (TC) Signal selected as external event: XC2 TIOB direction: output -#define AT91C_TC_ABETRG (0x1 << 10) // (TC) TIOA or TIOB External Trigger Selection -#define AT91C_TC_ENETRG (0x1 << 12) // (TC) External Event Trigger enable -#define AT91C_TC_WAVESEL (0x3 << 13) // (TC) Waveform Selection -#define AT91C_TC_WAVESEL_UP (0x0 << 13) // (TC) UP mode without atomatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN (0x1 << 13) // (TC) UPDOWN mode without automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UP_AUTO (0x2 << 13) // (TC) UP mode with automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN_AUTO (0x3 << 13) // (TC) UPDOWN mode with automatic trigger on RC Compare -#define AT91C_TC_CPCTRG (0x1 << 14) // (TC) RC Compare Trigger Enable -#define AT91C_TC_WAVE (0x1 << 15) // (TC) -#define AT91C_TC_ACPA (0x3 << 16) // (TC) RA Compare Effect on TIOA -#define AT91C_TC_ACPA_NONE (0x0 << 16) // (TC) Effect: none -#define AT91C_TC_ACPA_SET (0x1 << 16) // (TC) Effect: set -#define AT91C_TC_ACPA_CLEAR (0x2 << 16) // (TC) Effect: clear -#define AT91C_TC_ACPA_TOGGLE (0x3 << 16) // (TC) Effect: toggle -#define AT91C_TC_LDRA (0x3 << 16) // (TC) RA Loading Selection -#define AT91C_TC_LDRA_NONE (0x0 << 16) // (TC) Edge: None -#define AT91C_TC_LDRA_RISING (0x1 << 16) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRA_FALLING (0x2 << 16) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRA_BOTH (0x3 << 16) // (TC) Edge: each edge of TIOA -#define AT91C_TC_ACPC (0x3 << 18) // (TC) RC Compare Effect on TIOA -#define AT91C_TC_ACPC_NONE (0x0 << 18) // (TC) Effect: none -#define AT91C_TC_ACPC_SET (0x1 << 18) // (TC) Effect: set -#define AT91C_TC_ACPC_CLEAR (0x2 << 18) // (TC) Effect: clear -#define AT91C_TC_ACPC_TOGGLE (0x3 << 18) // (TC) Effect: toggle -#define AT91C_TC_LDRB (0x3 << 18) // (TC) RB Loading Selection -#define AT91C_TC_LDRB_NONE (0x0 << 18) // (TC) Edge: None -#define AT91C_TC_LDRB_RISING (0x1 << 18) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRB_FALLING (0x2 << 18) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRB_BOTH (0x3 << 18) // (TC) Edge: each edge of TIOA -#define AT91C_TC_AEEVT (0x3 << 20) // (TC) External Event Effect on TIOA -#define AT91C_TC_AEEVT_NONE (0x0 << 20) // (TC) Effect: none -#define AT91C_TC_AEEVT_SET (0x1 << 20) // (TC) Effect: set -#define AT91C_TC_AEEVT_CLEAR (0x2 << 20) // (TC) Effect: clear -#define AT91C_TC_AEEVT_TOGGLE (0x3 << 20) // (TC) Effect: toggle -#define AT91C_TC_ASWTRG (0x3 << 22) // (TC) Software Trigger Effect on TIOA -#define AT91C_TC_ASWTRG_NONE (0x0 << 22) // (TC) Effect: none -#define AT91C_TC_ASWTRG_SET (0x1 << 22) // (TC) Effect: set -#define AT91C_TC_ASWTRG_CLEAR (0x2 << 22) // (TC) Effect: clear -#define AT91C_TC_ASWTRG_TOGGLE (0x3 << 22) // (TC) Effect: toggle -#define AT91C_TC_BCPB (0x3 << 24) // (TC) RB Compare Effect on TIOB -#define AT91C_TC_BCPB_NONE (0x0 << 24) // (TC) Effect: none -#define AT91C_TC_BCPB_SET (0x1 << 24) // (TC) Effect: set -#define AT91C_TC_BCPB_CLEAR (0x2 << 24) // (TC) Effect: clear -#define AT91C_TC_BCPB_TOGGLE (0x3 << 24) // (TC) Effect: toggle -#define AT91C_TC_BCPC (0x3 << 26) // (TC) RC Compare Effect on TIOB -#define AT91C_TC_BCPC_NONE (0x0 << 26) // (TC) Effect: none -#define AT91C_TC_BCPC_SET (0x1 << 26) // (TC) Effect: set -#define AT91C_TC_BCPC_CLEAR (0x2 << 26) // (TC) Effect: clear -#define AT91C_TC_BCPC_TOGGLE (0x3 << 26) // (TC) Effect: toggle -#define AT91C_TC_BEEVT (0x3 << 28) // (TC) External Event Effect on TIOB -#define AT91C_TC_BEEVT_NONE (0x0 << 28) // (TC) Effect: none -#define AT91C_TC_BEEVT_SET (0x1 << 28) // (TC) Effect: set -#define AT91C_TC_BEEVT_CLEAR (0x2 << 28) // (TC) Effect: clear -#define AT91C_TC_BEEVT_TOGGLE (0x3 << 28) // (TC) Effect: toggle -#define AT91C_TC_BSWTRG (0x3 << 30) // (TC) Software Trigger Effect on TIOB -#define AT91C_TC_BSWTRG_NONE (0x0 << 30) // (TC) Effect: none -#define AT91C_TC_BSWTRG_SET (0x1 << 30) // (TC) Effect: set -#define AT91C_TC_BSWTRG_CLEAR (0x2 << 30) // (TC) Effect: clear -#define AT91C_TC_BSWTRG_TOGGLE (0x3 << 30) // (TC) Effect: toggle -// -------- TC_SR : (TC Offset: 0x20) TC Channel Status Register -------- -#define AT91C_TC_COVFS (0x1 << 0) // (TC) Counter Overflow -#define AT91C_TC_LOVRS (0x1 << 1) // (TC) Load Overrun -#define AT91C_TC_CPAS (0x1 << 2) // (TC) RA Compare -#define AT91C_TC_CPBS (0x1 << 3) // (TC) RB Compare -#define AT91C_TC_CPCS (0x1 << 4) // (TC) RC Compare -#define AT91C_TC_LDRAS (0x1 << 5) // (TC) RA Loading -#define AT91C_TC_LDRBS (0x1 << 6) // (TC) RB Loading -#define AT91C_TC_ETRGS (0x1 << 7) // (TC) External Trigger -#define AT91C_TC_CLKSTA (0x1 << 16) // (TC) Clock Enabling -#define AT91C_TC_MTIOA (0x1 << 17) // (TC) TIOA Mirror -#define AT91C_TC_MTIOB (0x1 << 18) // (TC) TIOA Mirror -// -------- TC_IER : (TC Offset: 0x24) TC Channel Interrupt Enable Register -------- -// -------- TC_IDR : (TC Offset: 0x28) TC Channel Interrupt Disable Register -------- -// -------- TC_IMR : (TC Offset: 0x2c) TC Channel Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TCB { - AT91S_TC TCB_TC0; // TC Channel 0 - AT91_REG Reserved0[4]; // - AT91S_TC TCB_TC1; // TC Channel 1 - AT91_REG Reserved1[4]; // - AT91S_TC TCB_TC2; // TC Channel 2 - AT91_REG Reserved2[4]; // - AT91_REG TCB_BCR; // TC Block Control Register - AT91_REG TCB_BMR; // TC Block Mode Register -} AT91S_TCB, *AT91PS_TCB; -#else -#define TCB_BCR (AT91_CAST(AT91_REG *) 0x000000C0) // (TCB_BCR) TC Block Control Register -#define TCB_BMR (AT91_CAST(AT91_REG *) 0x000000C4) // (TCB_BMR) TC Block Mode Register - -#endif -// -------- TCB_BCR : (TCB Offset: 0xc0) TC Block Control Register -------- -#define AT91C_TCB_SYNC (0x1 << 0) // (TCB) Synchro Command -// -------- TCB_BMR : (TCB Offset: 0xc4) TC Block Mode Register -------- -#define AT91C_TCB_TC0XC0S (0x3 << 0) // (TCB) External Clock Signal 0 Selection -#define AT91C_TCB_TC0XC0S_TCLK0 (0x0) // (TCB) TCLK0 connected to XC0 -#define AT91C_TCB_TC0XC0S_NONE (0x1) // (TCB) None signal connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA1 (0x2) // (TCB) TIOA1 connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA2 (0x3) // (TCB) TIOA2 connected to XC0 -#define AT91C_TCB_TC1XC1S (0x3 << 2) // (TCB) External Clock Signal 1 Selection -#define AT91C_TCB_TC1XC1S_TCLK1 (0x0 << 2) // (TCB) TCLK1 connected to XC1 -#define AT91C_TCB_TC1XC1S_NONE (0x1 << 2) // (TCB) None signal connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA0 (0x2 << 2) // (TCB) TIOA0 connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA2 (0x3 << 2) // (TCB) TIOA2 connected to XC1 -#define AT91C_TCB_TC2XC2S (0x3 << 4) // (TCB) External Clock Signal 2 Selection -#define AT91C_TCB_TC2XC2S_TCLK2 (0x0 << 4) // (TCB) TCLK2 connected to XC2 -#define AT91C_TCB_TC2XC2S_NONE (0x1 << 4) // (TCB) None signal connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA0 (0x2 << 4) // (TCB) TIOA0 connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA1 (0x3 << 4) // (TCB) TIOA2 connected to XC2 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Control Area Network MailBox Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CAN_MB { - AT91_REG CAN_MB_MMR; // MailBox Mode Register - AT91_REG CAN_MB_MAM; // MailBox Acceptance Mask Register - AT91_REG CAN_MB_MID; // MailBox ID Register - AT91_REG CAN_MB_MFID; // MailBox Family ID Register - AT91_REG CAN_MB_MSR; // MailBox Status Register - AT91_REG CAN_MB_MDL; // MailBox Data Low Register - AT91_REG CAN_MB_MDH; // MailBox Data High Register - AT91_REG CAN_MB_MCR; // MailBox Control Register -} AT91S_CAN_MB, *AT91PS_CAN_MB; -#else -#define CAN_MMR (AT91_CAST(AT91_REG *) 0x00000000) // (CAN_MMR) MailBox Mode Register -#define CAN_MAM (AT91_CAST(AT91_REG *) 0x00000004) // (CAN_MAM) MailBox Acceptance Mask Register -#define CAN_MID (AT91_CAST(AT91_REG *) 0x00000008) // (CAN_MID) MailBox ID Register -#define CAN_MFID (AT91_CAST(AT91_REG *) 0x0000000C) // (CAN_MFID) MailBox Family ID Register -#define CAN_MSR (AT91_CAST(AT91_REG *) 0x00000010) // (CAN_MSR) MailBox Status Register -#define CAN_MDL (AT91_CAST(AT91_REG *) 0x00000014) // (CAN_MDL) MailBox Data Low Register -#define CAN_MDH (AT91_CAST(AT91_REG *) 0x00000018) // (CAN_MDH) MailBox Data High Register -#define CAN_MCR (AT91_CAST(AT91_REG *) 0x0000001C) // (CAN_MCR) MailBox Control Register - -#endif -// -------- CAN_MMR : (CAN_MB Offset: 0x0) CAN Message Mode Register -------- -#define AT91C_CAN_MTIMEMARK (0xFFFF << 0) // (CAN_MB) Mailbox Timemark -#define AT91C_CAN_PRIOR (0xF << 16) // (CAN_MB) Mailbox Priority -#define AT91C_CAN_MOT (0x7 << 24) // (CAN_MB) Mailbox Object Type -#define AT91C_CAN_MOT_DIS (0x0 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_RX (0x1 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_RXOVERWRITE (0x2 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_TX (0x3 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_CONSUMER (0x4 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_PRODUCER (0x5 << 24) // (CAN_MB) -// -------- CAN_MAM : (CAN_MB Offset: 0x4) CAN Message Acceptance Mask Register -------- -#define AT91C_CAN_MIDvB (0x3FFFF << 0) // (CAN_MB) Complementary bits for identifier in extended mode -#define AT91C_CAN_MIDvA (0x7FF << 18) // (CAN_MB) Identifier for standard frame mode -#define AT91C_CAN_MIDE (0x1 << 29) // (CAN_MB) Identifier Version -// -------- CAN_MID : (CAN_MB Offset: 0x8) CAN Message ID Register -------- -// -------- CAN_MFID : (CAN_MB Offset: 0xc) CAN Message Family ID Register -------- -// -------- CAN_MSR : (CAN_MB Offset: 0x10) CAN Message Status Register -------- -#define AT91C_CAN_MTIMESTAMP (0xFFFF << 0) // (CAN_MB) Timer Value -#define AT91C_CAN_MDLC (0xF << 16) // (CAN_MB) Mailbox Data Length Code -#define AT91C_CAN_MRTR (0x1 << 20) // (CAN_MB) Mailbox Remote Transmission Request -#define AT91C_CAN_MABT (0x1 << 22) // (CAN_MB) Mailbox Message Abort -#define AT91C_CAN_MRDY (0x1 << 23) // (CAN_MB) Mailbox Ready -#define AT91C_CAN_MMI (0x1 << 24) // (CAN_MB) Mailbox Message Ignored -// -------- CAN_MDL : (CAN_MB Offset: 0x14) CAN Message Data Low Register -------- -// -------- CAN_MDH : (CAN_MB Offset: 0x18) CAN Message Data High Register -------- -// -------- CAN_MCR : (CAN_MB Offset: 0x1c) CAN Message Control Register -------- -#define AT91C_CAN_MACR (0x1 << 22) // (CAN_MB) Abort Request for Mailbox -#define AT91C_CAN_MTCR (0x1 << 23) // (CAN_MB) Mailbox Transfer Command - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Control Area Network Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CAN { - AT91_REG CAN_MR; // Mode Register - AT91_REG CAN_IER; // Interrupt Enable Register - AT91_REG CAN_IDR; // Interrupt Disable Register - AT91_REG CAN_IMR; // Interrupt Mask Register - AT91_REG CAN_SR; // Status Register - AT91_REG CAN_BR; // Baudrate Register - AT91_REG CAN_TIM; // Timer Register - AT91_REG CAN_TIMESTP; // Time Stamp Register - AT91_REG CAN_ECR; // Error Counter Register - AT91_REG CAN_TCR; // Transfer Command Register - AT91_REG CAN_ACR; // Abort Command Register - AT91_REG Reserved0[52]; // - AT91_REG CAN_VR; // Version Register - AT91_REG Reserved1[64]; // - AT91S_CAN_MB CAN_MB0; // CAN Mailbox 0 - AT91S_CAN_MB CAN_MB1; // CAN Mailbox 1 - AT91S_CAN_MB CAN_MB2; // CAN Mailbox 2 - AT91S_CAN_MB CAN_MB3; // CAN Mailbox 3 - AT91S_CAN_MB CAN_MB4; // CAN Mailbox 4 - AT91S_CAN_MB CAN_MB5; // CAN Mailbox 5 - AT91S_CAN_MB CAN_MB6; // CAN Mailbox 6 - AT91S_CAN_MB CAN_MB7; // CAN Mailbox 7 - AT91S_CAN_MB CAN_MB8; // CAN Mailbox 8 - AT91S_CAN_MB CAN_MB9; // CAN Mailbox 9 - AT91S_CAN_MB CAN_MB10; // CAN Mailbox 10 - AT91S_CAN_MB CAN_MB11; // CAN Mailbox 11 - AT91S_CAN_MB CAN_MB12; // CAN Mailbox 12 - AT91S_CAN_MB CAN_MB13; // CAN Mailbox 13 - AT91S_CAN_MB CAN_MB14; // CAN Mailbox 14 - AT91S_CAN_MB CAN_MB15; // CAN Mailbox 15 -} AT91S_CAN, *AT91PS_CAN; -#else -#define CAN_MR (AT91_CAST(AT91_REG *) 0x00000000) // (CAN_MR) Mode Register -#define CAN_IER (AT91_CAST(AT91_REG *) 0x00000004) // (CAN_IER) Interrupt Enable Register -#define CAN_IDR (AT91_CAST(AT91_REG *) 0x00000008) // (CAN_IDR) Interrupt Disable Register -#define CAN_IMR (AT91_CAST(AT91_REG *) 0x0000000C) // (CAN_IMR) Interrupt Mask Register -#define CAN_SR (AT91_CAST(AT91_REG *) 0x00000010) // (CAN_SR) Status Register -#define CAN_BR (AT91_CAST(AT91_REG *) 0x00000014) // (CAN_BR) Baudrate Register -#define CAN_TIM (AT91_CAST(AT91_REG *) 0x00000018) // (CAN_TIM) Timer Register -#define CAN_TIMESTP (AT91_CAST(AT91_REG *) 0x0000001C) // (CAN_TIMESTP) Time Stamp Register -#define CAN_ECR (AT91_CAST(AT91_REG *) 0x00000020) // (CAN_ECR) Error Counter Register -#define CAN_TCR (AT91_CAST(AT91_REG *) 0x00000024) // (CAN_TCR) Transfer Command Register -#define CAN_ACR (AT91_CAST(AT91_REG *) 0x00000028) // (CAN_ACR) Abort Command Register -#define CAN_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (CAN_VR) Version Register - -#endif -// -------- CAN_MR : (CAN Offset: 0x0) CAN Mode Register -------- -#define AT91C_CAN_CANEN (0x1 << 0) // (CAN) CAN Controller Enable -#define AT91C_CAN_LPM (0x1 << 1) // (CAN) Disable/Enable Low Power Mode -#define AT91C_CAN_ABM (0x1 << 2) // (CAN) Disable/Enable Autobaud/Listen Mode -#define AT91C_CAN_OVL (0x1 << 3) // (CAN) Disable/Enable Overload Frame -#define AT91C_CAN_TEOF (0x1 << 4) // (CAN) Time Stamp messages at each end of Frame -#define AT91C_CAN_TTM (0x1 << 5) // (CAN) Disable/Enable Time Trigger Mode -#define AT91C_CAN_TIMFRZ (0x1 << 6) // (CAN) Enable Timer Freeze -#define AT91C_CAN_DRPT (0x1 << 7) // (CAN) Disable Repeat -// -------- CAN_IER : (CAN Offset: 0x4) CAN Interrupt Enable Register -------- -#define AT91C_CAN_MB0 (0x1 << 0) // (CAN) Mailbox 0 Flag -#define AT91C_CAN_MB1 (0x1 << 1) // (CAN) Mailbox 1 Flag -#define AT91C_CAN_MB2 (0x1 << 2) // (CAN) Mailbox 2 Flag -#define AT91C_CAN_MB3 (0x1 << 3) // (CAN) Mailbox 3 Flag -#define AT91C_CAN_MB4 (0x1 << 4) // (CAN) Mailbox 4 Flag -#define AT91C_CAN_MB5 (0x1 << 5) // (CAN) Mailbox 5 Flag -#define AT91C_CAN_MB6 (0x1 << 6) // (CAN) Mailbox 6 Flag -#define AT91C_CAN_MB7 (0x1 << 7) // (CAN) Mailbox 7 Flag -#define AT91C_CAN_MB8 (0x1 << 8) // (CAN) Mailbox 8 Flag -#define AT91C_CAN_MB9 (0x1 << 9) // (CAN) Mailbox 9 Flag -#define AT91C_CAN_MB10 (0x1 << 10) // (CAN) Mailbox 10 Flag -#define AT91C_CAN_MB11 (0x1 << 11) // (CAN) Mailbox 11 Flag -#define AT91C_CAN_MB12 (0x1 << 12) // (CAN) Mailbox 12 Flag -#define AT91C_CAN_MB13 (0x1 << 13) // (CAN) Mailbox 13 Flag -#define AT91C_CAN_MB14 (0x1 << 14) // (CAN) Mailbox 14 Flag -#define AT91C_CAN_MB15 (0x1 << 15) // (CAN) Mailbox 15 Flag -#define AT91C_CAN_ERRA (0x1 << 16) // (CAN) Error Active Mode Flag -#define AT91C_CAN_WARN (0x1 << 17) // (CAN) Warning Limit Flag -#define AT91C_CAN_ERRP (0x1 << 18) // (CAN) Error Passive Mode Flag -#define AT91C_CAN_BOFF (0x1 << 19) // (CAN) Bus Off Mode Flag -#define AT91C_CAN_SLEEP (0x1 << 20) // (CAN) Sleep Flag -#define AT91C_CAN_WAKEUP (0x1 << 21) // (CAN) Wakeup Flag -#define AT91C_CAN_TOVF (0x1 << 22) // (CAN) Timer Overflow Flag -#define AT91C_CAN_TSTP (0x1 << 23) // (CAN) Timestamp Flag -#define AT91C_CAN_CERR (0x1 << 24) // (CAN) CRC Error -#define AT91C_CAN_SERR (0x1 << 25) // (CAN) Stuffing Error -#define AT91C_CAN_AERR (0x1 << 26) // (CAN) Acknowledgment Error -#define AT91C_CAN_FERR (0x1 << 27) // (CAN) Form Error -#define AT91C_CAN_BERR (0x1 << 28) // (CAN) Bit Error -// -------- CAN_IDR : (CAN Offset: 0x8) CAN Interrupt Disable Register -------- -// -------- CAN_IMR : (CAN Offset: 0xc) CAN Interrupt Mask Register -------- -// -------- CAN_SR : (CAN Offset: 0x10) CAN Status Register -------- -#define AT91C_CAN_RBSY (0x1 << 29) // (CAN) Receiver Busy -#define AT91C_CAN_TBSY (0x1 << 30) // (CAN) Transmitter Busy -#define AT91C_CAN_OVLY (0x1 << 31) // (CAN) Overload Busy -// -------- CAN_BR : (CAN Offset: 0x14) CAN Baudrate Register -------- -#define AT91C_CAN_PHASE2 (0x7 << 0) // (CAN) Phase 2 segment -#define AT91C_CAN_PHASE1 (0x7 << 4) // (CAN) Phase 1 segment -#define AT91C_CAN_PROPAG (0x7 << 8) // (CAN) Programmation time segment -#define AT91C_CAN_SYNC (0x3 << 12) // (CAN) Re-synchronization jump width segment -#define AT91C_CAN_BRP (0x7F << 16) // (CAN) Baudrate Prescaler -#define AT91C_CAN_SMP (0x1 << 24) // (CAN) Sampling mode -// -------- CAN_TIM : (CAN Offset: 0x18) CAN Timer Register -------- -#define AT91C_CAN_TIMER (0xFFFF << 0) // (CAN) Timer field -// -------- CAN_TIMESTP : (CAN Offset: 0x1c) CAN Timestamp Register -------- -// -------- CAN_ECR : (CAN Offset: 0x20) CAN Error Counter Register -------- -#define AT91C_CAN_REC (0xFF << 0) // (CAN) Receive Error Counter -#define AT91C_CAN_TEC (0xFF << 16) // (CAN) Transmit Error Counter -// -------- CAN_TCR : (CAN Offset: 0x24) CAN Transfer Command Register -------- -#define AT91C_CAN_TIMRST (0x1 << 31) // (CAN) Timer Reset Field -// -------- CAN_ACR : (CAN Offset: 0x28) CAN Abort Command Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Ethernet MAC 10/100 -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_EMAC { - AT91_REG EMAC_NCR; // Network Control Register - AT91_REG EMAC_NCFGR; // Network Configuration Register - AT91_REG EMAC_NSR; // Network Status Register - AT91_REG Reserved0[2]; // - AT91_REG EMAC_TSR; // Transmit Status Register - AT91_REG EMAC_RBQP; // Receive Buffer Queue Pointer - AT91_REG EMAC_TBQP; // Transmit Buffer Queue Pointer - AT91_REG EMAC_RSR; // Receive Status Register - AT91_REG EMAC_ISR; // Interrupt Status Register - AT91_REG EMAC_IER; // Interrupt Enable Register - AT91_REG EMAC_IDR; // Interrupt Disable Register - AT91_REG EMAC_IMR; // Interrupt Mask Register - AT91_REG EMAC_MAN; // PHY Maintenance Register - AT91_REG EMAC_PTR; // Pause Time Register - AT91_REG EMAC_PFR; // Pause Frames received Register - AT91_REG EMAC_FTO; // Frames Transmitted OK Register - AT91_REG EMAC_SCF; // Single Collision Frame Register - AT91_REG EMAC_MCF; // Multiple Collision Frame Register - AT91_REG EMAC_FRO; // Frames Received OK Register - AT91_REG EMAC_FCSE; // Frame Check Sequence Error Register - AT91_REG EMAC_ALE; // Alignment Error Register - AT91_REG EMAC_DTF; // Deferred Transmission Frame Register - AT91_REG EMAC_LCOL; // Late Collision Register - AT91_REG EMAC_ECOL; // Excessive Collision Register - AT91_REG EMAC_TUND; // Transmit Underrun Error Register - AT91_REG EMAC_CSE; // Carrier Sense Error Register - AT91_REG EMAC_RRE; // Receive Ressource Error Register - AT91_REG EMAC_ROV; // Receive Overrun Errors Register - AT91_REG EMAC_RSE; // Receive Symbol Errors Register - AT91_REG EMAC_ELE; // Excessive Length Errors Register - AT91_REG EMAC_RJA; // Receive Jabbers Register - AT91_REG EMAC_USF; // Undersize Frames Register - AT91_REG EMAC_STE; // SQE Test Error Register - AT91_REG EMAC_RLE; // Receive Length Field Mismatch Register - AT91_REG EMAC_TPF; // Transmitted Pause Frames Register - AT91_REG EMAC_HRB; // Hash Address Bottom[31:0] - AT91_REG EMAC_HRT; // Hash Address Top[63:32] - AT91_REG EMAC_SA1L; // Specific Address 1 Bottom, First 4 bytes - AT91_REG EMAC_SA1H; // Specific Address 1 Top, Last 2 bytes - AT91_REG EMAC_SA2L; // Specific Address 2 Bottom, First 4 bytes - AT91_REG EMAC_SA2H; // Specific Address 2 Top, Last 2 bytes - AT91_REG EMAC_SA3L; // Specific Address 3 Bottom, First 4 bytes - AT91_REG EMAC_SA3H; // Specific Address 3 Top, Last 2 bytes - AT91_REG EMAC_SA4L; // Specific Address 4 Bottom, First 4 bytes - AT91_REG EMAC_SA4H; // Specific Address 4 Top, Last 2 bytes - AT91_REG EMAC_TID; // Type ID Checking Register - AT91_REG EMAC_TPQ; // Transmit Pause Quantum Register - AT91_REG EMAC_USRIO; // USER Input/Output Register - AT91_REG EMAC_WOL; // Wake On LAN Register - AT91_REG Reserved1[13]; // - AT91_REG EMAC_REV; // Revision Register -} AT91S_EMAC, *AT91PS_EMAC; -#else -#define EMAC_NCR (AT91_CAST(AT91_REG *) 0x00000000) // (EMAC_NCR) Network Control Register -#define EMAC_NCFGR (AT91_CAST(AT91_REG *) 0x00000004) // (EMAC_NCFGR) Network Configuration Register -#define EMAC_NSR (AT91_CAST(AT91_REG *) 0x00000008) // (EMAC_NSR) Network Status Register -#define EMAC_TSR (AT91_CAST(AT91_REG *) 0x00000014) // (EMAC_TSR) Transmit Status Register -#define EMAC_RBQP (AT91_CAST(AT91_REG *) 0x00000018) // (EMAC_RBQP) Receive Buffer Queue Pointer -#define EMAC_TBQP (AT91_CAST(AT91_REG *) 0x0000001C) // (EMAC_TBQP) Transmit Buffer Queue Pointer -#define EMAC_RSR (AT91_CAST(AT91_REG *) 0x00000020) // (EMAC_RSR) Receive Status Register -#define EMAC_ISR (AT91_CAST(AT91_REG *) 0x00000024) // (EMAC_ISR) Interrupt Status Register -#define EMAC_IER (AT91_CAST(AT91_REG *) 0x00000028) // (EMAC_IER) Interrupt Enable Register -#define EMAC_IDR (AT91_CAST(AT91_REG *) 0x0000002C) // (EMAC_IDR) Interrupt Disable Register -#define EMAC_IMR (AT91_CAST(AT91_REG *) 0x00000030) // (EMAC_IMR) Interrupt Mask Register -#define EMAC_MAN (AT91_CAST(AT91_REG *) 0x00000034) // (EMAC_MAN) PHY Maintenance Register -#define EMAC_PTR (AT91_CAST(AT91_REG *) 0x00000038) // (EMAC_PTR) Pause Time Register -#define EMAC_PFR (AT91_CAST(AT91_REG *) 0x0000003C) // (EMAC_PFR) Pause Frames received Register -#define EMAC_FTO (AT91_CAST(AT91_REG *) 0x00000040) // (EMAC_FTO) Frames Transmitted OK Register -#define EMAC_SCF (AT91_CAST(AT91_REG *) 0x00000044) // (EMAC_SCF) Single Collision Frame Register -#define EMAC_MCF (AT91_CAST(AT91_REG *) 0x00000048) // (EMAC_MCF) Multiple Collision Frame Register -#define EMAC_FRO (AT91_CAST(AT91_REG *) 0x0000004C) // (EMAC_FRO) Frames Received OK Register -#define EMAC_FCSE (AT91_CAST(AT91_REG *) 0x00000050) // (EMAC_FCSE) Frame Check Sequence Error Register -#define EMAC_ALE (AT91_CAST(AT91_REG *) 0x00000054) // (EMAC_ALE) Alignment Error Register -#define EMAC_DTF (AT91_CAST(AT91_REG *) 0x00000058) // (EMAC_DTF) Deferred Transmission Frame Register -#define EMAC_LCOL (AT91_CAST(AT91_REG *) 0x0000005C) // (EMAC_LCOL) Late Collision Register -#define EMAC_ECOL (AT91_CAST(AT91_REG *) 0x00000060) // (EMAC_ECOL) Excessive Collision Register -#define EMAC_TUND (AT91_CAST(AT91_REG *) 0x00000064) // (EMAC_TUND) Transmit Underrun Error Register -#define EMAC_CSE (AT91_CAST(AT91_REG *) 0x00000068) // (EMAC_CSE) Carrier Sense Error Register -#define EMAC_RRE (AT91_CAST(AT91_REG *) 0x0000006C) // (EMAC_RRE) Receive Ressource Error Register -#define EMAC_ROV (AT91_CAST(AT91_REG *) 0x00000070) // (EMAC_ROV) Receive Overrun Errors Register -#define EMAC_RSE (AT91_CAST(AT91_REG *) 0x00000074) // (EMAC_RSE) Receive Symbol Errors Register -#define EMAC_ELE (AT91_CAST(AT91_REG *) 0x00000078) // (EMAC_ELE) Excessive Length Errors Register -#define EMAC_RJA (AT91_CAST(AT91_REG *) 0x0000007C) // (EMAC_RJA) Receive Jabbers Register -#define EMAC_USF (AT91_CAST(AT91_REG *) 0x00000080) // (EMAC_USF) Undersize Frames Register -#define EMAC_STE (AT91_CAST(AT91_REG *) 0x00000084) // (EMAC_STE) SQE Test Error Register -#define EMAC_RLE (AT91_CAST(AT91_REG *) 0x00000088) // (EMAC_RLE) Receive Length Field Mismatch Register -#define EMAC_TPF (AT91_CAST(AT91_REG *) 0x0000008C) // (EMAC_TPF) Transmitted Pause Frames Register -#define EMAC_HRB (AT91_CAST(AT91_REG *) 0x00000090) // (EMAC_HRB) Hash Address Bottom[31:0] -#define EMAC_HRT (AT91_CAST(AT91_REG *) 0x00000094) // (EMAC_HRT) Hash Address Top[63:32] -#define EMAC_SA1L (AT91_CAST(AT91_REG *) 0x00000098) // (EMAC_SA1L) Specific Address 1 Bottom, First 4 bytes -#define EMAC_SA1H (AT91_CAST(AT91_REG *) 0x0000009C) // (EMAC_SA1H) Specific Address 1 Top, Last 2 bytes -#define EMAC_SA2L (AT91_CAST(AT91_REG *) 0x000000A0) // (EMAC_SA2L) Specific Address 2 Bottom, First 4 bytes -#define EMAC_SA2H (AT91_CAST(AT91_REG *) 0x000000A4) // (EMAC_SA2H) Specific Address 2 Top, Last 2 bytes -#define EMAC_SA3L (AT91_CAST(AT91_REG *) 0x000000A8) // (EMAC_SA3L) Specific Address 3 Bottom, First 4 bytes -#define EMAC_SA3H (AT91_CAST(AT91_REG *) 0x000000AC) // (EMAC_SA3H) Specific Address 3 Top, Last 2 bytes -#define EMAC_SA4L (AT91_CAST(AT91_REG *) 0x000000B0) // (EMAC_SA4L) Specific Address 4 Bottom, First 4 bytes -#define EMAC_SA4H (AT91_CAST(AT91_REG *) 0x000000B4) // (EMAC_SA4H) Specific Address 4 Top, Last 2 bytes -#define EMAC_TID (AT91_CAST(AT91_REG *) 0x000000B8) // (EMAC_TID) Type ID Checking Register -#define EMAC_TPQ (AT91_CAST(AT91_REG *) 0x000000BC) // (EMAC_TPQ) Transmit Pause Quantum Register -#define EMAC_USRIO (AT91_CAST(AT91_REG *) 0x000000C0) // (EMAC_USRIO) USER Input/Output Register -#define EMAC_WOL (AT91_CAST(AT91_REG *) 0x000000C4) // (EMAC_WOL) Wake On LAN Register -#define EMAC_REV (AT91_CAST(AT91_REG *) 0x000000FC) // (EMAC_REV) Revision Register - -#endif -// -------- EMAC_NCR : (EMAC Offset: 0x0) -------- -#define AT91C_EMAC_LB (0x1 << 0) // (EMAC) Loopback. Optional. When set, loopback signal is at high level. -#define AT91C_EMAC_LLB (0x1 << 1) // (EMAC) Loopback local. -#define AT91C_EMAC_RE (0x1 << 2) // (EMAC) Receive enable. -#define AT91C_EMAC_TE (0x1 << 3) // (EMAC) Transmit enable. -#define AT91C_EMAC_MPE (0x1 << 4) // (EMAC) Management port enable. -#define AT91C_EMAC_CLRSTAT (0x1 << 5) // (EMAC) Clear statistics registers. -#define AT91C_EMAC_INCSTAT (0x1 << 6) // (EMAC) Increment statistics registers. -#define AT91C_EMAC_WESTAT (0x1 << 7) // (EMAC) Write enable for statistics registers. -#define AT91C_EMAC_BP (0x1 << 8) // (EMAC) Back pressure. -#define AT91C_EMAC_TSTART (0x1 << 9) // (EMAC) Start Transmission. -#define AT91C_EMAC_THALT (0x1 << 10) // (EMAC) Transmission Halt. -#define AT91C_EMAC_TPFR (0x1 << 11) // (EMAC) Transmit pause frame -#define AT91C_EMAC_TZQ (0x1 << 12) // (EMAC) Transmit zero quantum pause frame -// -------- EMAC_NCFGR : (EMAC Offset: 0x4) Network Configuration Register -------- -#define AT91C_EMAC_SPD (0x1 << 0) // (EMAC) Speed. -#define AT91C_EMAC_FD (0x1 << 1) // (EMAC) Full duplex. -#define AT91C_EMAC_JFRAME (0x1 << 3) // (EMAC) Jumbo Frames. -#define AT91C_EMAC_CAF (0x1 << 4) // (EMAC) Copy all frames. -#define AT91C_EMAC_NBC (0x1 << 5) // (EMAC) No broadcast. -#define AT91C_EMAC_MTI (0x1 << 6) // (EMAC) Multicast hash event enable -#define AT91C_EMAC_UNI (0x1 << 7) // (EMAC) Unicast hash enable. -#define AT91C_EMAC_BIG (0x1 << 8) // (EMAC) Receive 1522 bytes. -#define AT91C_EMAC_EAE (0x1 << 9) // (EMAC) External address match enable. -#define AT91C_EMAC_CLK (0x3 << 10) // (EMAC) -#define AT91C_EMAC_CLK_HCLK_8 (0x0 << 10) // (EMAC) HCLK divided by 8 -#define AT91C_EMAC_CLK_HCLK_16 (0x1 << 10) // (EMAC) HCLK divided by 16 -#define AT91C_EMAC_CLK_HCLK_32 (0x2 << 10) // (EMAC) HCLK divided by 32 -#define AT91C_EMAC_CLK_HCLK_64 (0x3 << 10) // (EMAC) HCLK divided by 64 -#define AT91C_EMAC_RTY (0x1 << 12) // (EMAC) -#define AT91C_EMAC_PAE (0x1 << 13) // (EMAC) -#define AT91C_EMAC_RBOF (0x3 << 14) // (EMAC) -#define AT91C_EMAC_RBOF_OFFSET_0 (0x0 << 14) // (EMAC) no offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_1 (0x1 << 14) // (EMAC) one byte offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_2 (0x2 << 14) // (EMAC) two bytes offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_3 (0x3 << 14) // (EMAC) three bytes offset from start of receive buffer -#define AT91C_EMAC_RLCE (0x1 << 16) // (EMAC) Receive Length field Checking Enable -#define AT91C_EMAC_DRFCS (0x1 << 17) // (EMAC) Discard Receive FCS -#define AT91C_EMAC_EFRHD (0x1 << 18) // (EMAC) -#define AT91C_EMAC_IRXFCS (0x1 << 19) // (EMAC) Ignore RX FCS -// -------- EMAC_NSR : (EMAC Offset: 0x8) Network Status Register -------- -#define AT91C_EMAC_LINKR (0x1 << 0) // (EMAC) -#define AT91C_EMAC_MDIO (0x1 << 1) // (EMAC) -#define AT91C_EMAC_IDLE (0x1 << 2) // (EMAC) -// -------- EMAC_TSR : (EMAC Offset: 0x14) Transmit Status Register -------- -#define AT91C_EMAC_UBR (0x1 << 0) // (EMAC) -#define AT91C_EMAC_COL (0x1 << 1) // (EMAC) -#define AT91C_EMAC_RLES (0x1 << 2) // (EMAC) -#define AT91C_EMAC_TGO (0x1 << 3) // (EMAC) Transmit Go -#define AT91C_EMAC_BEX (0x1 << 4) // (EMAC) Buffers exhausted mid frame -#define AT91C_EMAC_COMP (0x1 << 5) // (EMAC) -#define AT91C_EMAC_UND (0x1 << 6) // (EMAC) -// -------- EMAC_RSR : (EMAC Offset: 0x20) Receive Status Register -------- -#define AT91C_EMAC_BNA (0x1 << 0) // (EMAC) -#define AT91C_EMAC_REC (0x1 << 1) // (EMAC) -#define AT91C_EMAC_OVR (0x1 << 2) // (EMAC) -// -------- EMAC_ISR : (EMAC Offset: 0x24) Interrupt Status Register -------- -#define AT91C_EMAC_MFD (0x1 << 0) // (EMAC) -#define AT91C_EMAC_RCOMP (0x1 << 1) // (EMAC) -#define AT91C_EMAC_RXUBR (0x1 << 2) // (EMAC) -#define AT91C_EMAC_TXUBR (0x1 << 3) // (EMAC) -#define AT91C_EMAC_TUNDR (0x1 << 4) // (EMAC) -#define AT91C_EMAC_RLEX (0x1 << 5) // (EMAC) -#define AT91C_EMAC_TXERR (0x1 << 6) // (EMAC) -#define AT91C_EMAC_TCOMP (0x1 << 7) // (EMAC) -#define AT91C_EMAC_LINK (0x1 << 9) // (EMAC) -#define AT91C_EMAC_ROVR (0x1 << 10) // (EMAC) -#define AT91C_EMAC_HRESP (0x1 << 11) // (EMAC) -#define AT91C_EMAC_PFRE (0x1 << 12) // (EMAC) -#define AT91C_EMAC_PTZ (0x1 << 13) // (EMAC) -// -------- EMAC_IER : (EMAC Offset: 0x28) Interrupt Enable Register -------- -// -------- EMAC_IDR : (EMAC Offset: 0x2c) Interrupt Disable Register -------- -// -------- EMAC_IMR : (EMAC Offset: 0x30) Interrupt Mask Register -------- -// -------- EMAC_MAN : (EMAC Offset: 0x34) PHY Maintenance Register -------- -#define AT91C_EMAC_DATA (0xFFFF << 0) // (EMAC) -#define AT91C_EMAC_CODE (0x3 << 16) // (EMAC) -#define AT91C_EMAC_REGA (0x1F << 18) // (EMAC) -#define AT91C_EMAC_PHYA (0x1F << 23) // (EMAC) -#define AT91C_EMAC_RW (0x3 << 28) // (EMAC) -#define AT91C_EMAC_SOF (0x3 << 30) // (EMAC) -// -------- EMAC_USRIO : (EMAC Offset: 0xc0) USER Input Output Register -------- -#define AT91C_EMAC_RMII (0x1 << 0) // (EMAC) Reduce MII -#define AT91C_EMAC_CLKEN (0x1 << 1) // (EMAC) Clock Enable -// -------- EMAC_WOL : (EMAC Offset: 0xc4) Wake On LAN Register -------- -#define AT91C_EMAC_IP (0xFFFF << 0) // (EMAC) ARP request IP address -#define AT91C_EMAC_MAG (0x1 << 16) // (EMAC) Magic packet event enable -#define AT91C_EMAC_ARP (0x1 << 17) // (EMAC) ARP request event enable -#define AT91C_EMAC_SA1 (0x1 << 18) // (EMAC) Specific address register 1 event enable -// -------- EMAC_REV : (EMAC Offset: 0xfc) Revision Register -------- -#define AT91C_EMAC_REVREF (0xFFFF << 0) // (EMAC) -#define AT91C_EMAC_PARTREF (0xFFFF << 16) // (EMAC) - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Analog to Digital Convertor -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_ADC { - AT91_REG ADC_CR; // ADC Control Register - AT91_REG ADC_MR; // ADC Mode Register - AT91_REG Reserved0[2]; // - AT91_REG ADC_CHER; // ADC Channel Enable Register - AT91_REG ADC_CHDR; // ADC Channel Disable Register - AT91_REG ADC_CHSR; // ADC Channel Status Register - AT91_REG ADC_SR; // ADC Status Register - AT91_REG ADC_LCDR; // ADC Last Converted Data Register - AT91_REG ADC_IER; // ADC Interrupt Enable Register - AT91_REG ADC_IDR; // ADC Interrupt Disable Register - AT91_REG ADC_IMR; // ADC Interrupt Mask Register - AT91_REG ADC_CDR0; // ADC Channel Data Register 0 - AT91_REG ADC_CDR1; // ADC Channel Data Register 1 - AT91_REG ADC_CDR2; // ADC Channel Data Register 2 - AT91_REG ADC_CDR3; // ADC Channel Data Register 3 - AT91_REG ADC_CDR4; // ADC Channel Data Register 4 - AT91_REG ADC_CDR5; // ADC Channel Data Register 5 - AT91_REG ADC_CDR6; // ADC Channel Data Register 6 - AT91_REG ADC_CDR7; // ADC Channel Data Register 7 - AT91_REG Reserved1[44]; // - AT91_REG ADC_RPR; // Receive Pointer Register - AT91_REG ADC_RCR; // Receive Counter Register - AT91_REG ADC_TPR; // Transmit Pointer Register - AT91_REG ADC_TCR; // Transmit Counter Register - AT91_REG ADC_RNPR; // Receive Next Pointer Register - AT91_REG ADC_RNCR; // Receive Next Counter Register - AT91_REG ADC_TNPR; // Transmit Next Pointer Register - AT91_REG ADC_TNCR; // Transmit Next Counter Register - AT91_REG ADC_PTCR; // PDC Transfer Control Register - AT91_REG ADC_PTSR; // PDC Transfer Status Register -} AT91S_ADC, *AT91PS_ADC; -#else -#define ADC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (ADC_CR) ADC Control Register -#define ADC_MR (AT91_CAST(AT91_REG *) 0x00000004) // (ADC_MR) ADC Mode Register -#define ADC_CHER (AT91_CAST(AT91_REG *) 0x00000010) // (ADC_CHER) ADC Channel Enable Register -#define ADC_CHDR (AT91_CAST(AT91_REG *) 0x00000014) // (ADC_CHDR) ADC Channel Disable Register -#define ADC_CHSR (AT91_CAST(AT91_REG *) 0x00000018) // (ADC_CHSR) ADC Channel Status Register -#define ADC_SR (AT91_CAST(AT91_REG *) 0x0000001C) // (ADC_SR) ADC Status Register -#define ADC_LCDR (AT91_CAST(AT91_REG *) 0x00000020) // (ADC_LCDR) ADC Last Converted Data Register -#define ADC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (ADC_IER) ADC Interrupt Enable Register -#define ADC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (ADC_IDR) ADC Interrupt Disable Register -#define ADC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (ADC_IMR) ADC Interrupt Mask Register -#define ADC_CDR0 (AT91_CAST(AT91_REG *) 0x00000030) // (ADC_CDR0) ADC Channel Data Register 0 -#define ADC_CDR1 (AT91_CAST(AT91_REG *) 0x00000034) // (ADC_CDR1) ADC Channel Data Register 1 -#define ADC_CDR2 (AT91_CAST(AT91_REG *) 0x00000038) // (ADC_CDR2) ADC Channel Data Register 2 -#define ADC_CDR3 (AT91_CAST(AT91_REG *) 0x0000003C) // (ADC_CDR3) ADC Channel Data Register 3 -#define ADC_CDR4 (AT91_CAST(AT91_REG *) 0x00000040) // (ADC_CDR4) ADC Channel Data Register 4 -#define ADC_CDR5 (AT91_CAST(AT91_REG *) 0x00000044) // (ADC_CDR5) ADC Channel Data Register 5 -#define ADC_CDR6 (AT91_CAST(AT91_REG *) 0x00000048) // (ADC_CDR6) ADC Channel Data Register 6 -#define ADC_CDR7 (AT91_CAST(AT91_REG *) 0x0000004C) // (ADC_CDR7) ADC Channel Data Register 7 - -#endif -// -------- ADC_CR : (ADC Offset: 0x0) ADC Control Register -------- -#define AT91C_ADC_SWRST (0x1 << 0) // (ADC) Software Reset -#define AT91C_ADC_START (0x1 << 1) // (ADC) Start Conversion -// -------- ADC_MR : (ADC Offset: 0x4) ADC Mode Register -------- -#define AT91C_ADC_TRGEN (0x1 << 0) // (ADC) Trigger Enable -#define AT91C_ADC_TRGEN_DIS (0x0) // (ADC) Hradware triggers are disabled. Starting a conversion is only possible by software -#define AT91C_ADC_TRGEN_EN (0x1) // (ADC) Hardware trigger selected by TRGSEL field is enabled. -#define AT91C_ADC_TRGSEL (0x7 << 1) // (ADC) Trigger Selection -#define AT91C_ADC_TRGSEL_TIOA0 (0x0 << 1) // (ADC) Selected TRGSEL = TIAO0 -#define AT91C_ADC_TRGSEL_TIOA1 (0x1 << 1) // (ADC) Selected TRGSEL = TIAO1 -#define AT91C_ADC_TRGSEL_TIOA2 (0x2 << 1) // (ADC) Selected TRGSEL = TIAO2 -#define AT91C_ADC_TRGSEL_TIOA3 (0x3 << 1) // (ADC) Selected TRGSEL = TIAO3 -#define AT91C_ADC_TRGSEL_TIOA4 (0x4 << 1) // (ADC) Selected TRGSEL = TIAO4 -#define AT91C_ADC_TRGSEL_TIOA5 (0x5 << 1) // (ADC) Selected TRGSEL = TIAO5 -#define AT91C_ADC_TRGSEL_EXT (0x6 << 1) // (ADC) Selected TRGSEL = External Trigger -#define AT91C_ADC_LOWRES (0x1 << 4) // (ADC) Resolution. -#define AT91C_ADC_LOWRES_10_BIT (0x0 << 4) // (ADC) 10-bit resolution -#define AT91C_ADC_LOWRES_8_BIT (0x1 << 4) // (ADC) 8-bit resolution -#define AT91C_ADC_SLEEP (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_SLEEP_NORMAL_MODE (0x0 << 5) // (ADC) Normal Mode -#define AT91C_ADC_SLEEP_MODE (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_PRESCAL (0x3F << 8) // (ADC) Prescaler rate selection -#define AT91C_ADC_STARTUP (0x1F << 16) // (ADC) Startup Time -#define AT91C_ADC_SHTIM (0xF << 24) // (ADC) Sample & Hold Time -// -------- ADC_CHER : (ADC Offset: 0x10) ADC Channel Enable Register -------- -#define AT91C_ADC_CH0 (0x1 << 0) // (ADC) Channel 0 -#define AT91C_ADC_CH1 (0x1 << 1) // (ADC) Channel 1 -#define AT91C_ADC_CH2 (0x1 << 2) // (ADC) Channel 2 -#define AT91C_ADC_CH3 (0x1 << 3) // (ADC) Channel 3 -#define AT91C_ADC_CH4 (0x1 << 4) // (ADC) Channel 4 -#define AT91C_ADC_CH5 (0x1 << 5) // (ADC) Channel 5 -#define AT91C_ADC_CH6 (0x1 << 6) // (ADC) Channel 6 -#define AT91C_ADC_CH7 (0x1 << 7) // (ADC) Channel 7 -// -------- ADC_CHDR : (ADC Offset: 0x14) ADC Channel Disable Register -------- -// -------- ADC_CHSR : (ADC Offset: 0x18) ADC Channel Status Register -------- -// -------- ADC_SR : (ADC Offset: 0x1c) ADC Status Register -------- -#define AT91C_ADC_EOC0 (0x1 << 0) // (ADC) End of Conversion -#define AT91C_ADC_EOC1 (0x1 << 1) // (ADC) End of Conversion -#define AT91C_ADC_EOC2 (0x1 << 2) // (ADC) End of Conversion -#define AT91C_ADC_EOC3 (0x1 << 3) // (ADC) End of Conversion -#define AT91C_ADC_EOC4 (0x1 << 4) // (ADC) End of Conversion -#define AT91C_ADC_EOC5 (0x1 << 5) // (ADC) End of Conversion -#define AT91C_ADC_EOC6 (0x1 << 6) // (ADC) End of Conversion -#define AT91C_ADC_EOC7 (0x1 << 7) // (ADC) End of Conversion -#define AT91C_ADC_OVRE0 (0x1 << 8) // (ADC) Overrun Error -#define AT91C_ADC_OVRE1 (0x1 << 9) // (ADC) Overrun Error -#define AT91C_ADC_OVRE2 (0x1 << 10) // (ADC) Overrun Error -#define AT91C_ADC_OVRE3 (0x1 << 11) // (ADC) Overrun Error -#define AT91C_ADC_OVRE4 (0x1 << 12) // (ADC) Overrun Error -#define AT91C_ADC_OVRE5 (0x1 << 13) // (ADC) Overrun Error -#define AT91C_ADC_OVRE6 (0x1 << 14) // (ADC) Overrun Error -#define AT91C_ADC_OVRE7 (0x1 << 15) // (ADC) Overrun Error -#define AT91C_ADC_DRDY (0x1 << 16) // (ADC) Data Ready -#define AT91C_ADC_GOVRE (0x1 << 17) // (ADC) General Overrun -#define AT91C_ADC_ENDRX (0x1 << 18) // (ADC) End of Receiver Transfer -#define AT91C_ADC_RXBUFF (0x1 << 19) // (ADC) RXBUFF Interrupt -// -------- ADC_LCDR : (ADC Offset: 0x20) ADC Last Converted Data Register -------- -#define AT91C_ADC_LDATA (0x3FF << 0) // (ADC) Last Data Converted -// -------- ADC_IER : (ADC Offset: 0x24) ADC Interrupt Enable Register -------- -// -------- ADC_IDR : (ADC Offset: 0x28) ADC Interrupt Disable Register -------- -// -------- ADC_IMR : (ADC Offset: 0x2c) ADC Interrupt Mask Register -------- -// -------- ADC_CDR0 : (ADC Offset: 0x30) ADC Channel Data Register 0 -------- -#define AT91C_ADC_DATA (0x3FF << 0) // (ADC) Converted Data -// -------- ADC_CDR1 : (ADC Offset: 0x34) ADC Channel Data Register 1 -------- -// -------- ADC_CDR2 : (ADC Offset: 0x38) ADC Channel Data Register 2 -------- -// -------- ADC_CDR3 : (ADC Offset: 0x3c) ADC Channel Data Register 3 -------- -// -------- ADC_CDR4 : (ADC Offset: 0x40) ADC Channel Data Register 4 -------- -// -------- ADC_CDR5 : (ADC Offset: 0x44) ADC Channel Data Register 5 -------- -// -------- ADC_CDR6 : (ADC Offset: 0x48) ADC Channel Data Register 6 -------- -// -------- ADC_CDR7 : (ADC Offset: 0x4c) ADC Channel Data Register 7 -------- - -// ***************************************************************************** -// REGISTER ADDRESS DEFINITION FOR AT91SAM7X256 -// ***************************************************************************** -// ========== Register definition for SYS peripheral ========== -// ========== Register definition for AIC peripheral ========== -#define AT91C_AIC_IVR (AT91_CAST(AT91_REG *) 0xFFFFF100) // (AIC) IRQ Vector Register -#define AT91C_AIC_SMR (AT91_CAST(AT91_REG *) 0xFFFFF000) // (AIC) Source Mode Register -#define AT91C_AIC_FVR (AT91_CAST(AT91_REG *) 0xFFFFF104) // (AIC) FIQ Vector Register -#define AT91C_AIC_DCR (AT91_CAST(AT91_REG *) 0xFFFFF138) // (AIC) Debug Control Register (Protect) -#define AT91C_AIC_EOICR (AT91_CAST(AT91_REG *) 0xFFFFF130) // (AIC) End of Interrupt Command Register -#define AT91C_AIC_SVR (AT91_CAST(AT91_REG *) 0xFFFFF080) // (AIC) Source Vector Register -#define AT91C_AIC_FFSR (AT91_CAST(AT91_REG *) 0xFFFFF148) // (AIC) Fast Forcing Status Register -#define AT91C_AIC_ICCR (AT91_CAST(AT91_REG *) 0xFFFFF128) // (AIC) Interrupt Clear Command Register -#define AT91C_AIC_ISR (AT91_CAST(AT91_REG *) 0xFFFFF108) // (AIC) Interrupt Status Register -#define AT91C_AIC_IMR (AT91_CAST(AT91_REG *) 0xFFFFF110) // (AIC) Interrupt Mask Register -#define AT91C_AIC_IPR (AT91_CAST(AT91_REG *) 0xFFFFF10C) // (AIC) Interrupt Pending Register -#define AT91C_AIC_FFER (AT91_CAST(AT91_REG *) 0xFFFFF140) // (AIC) Fast Forcing Enable Register -#define AT91C_AIC_IECR (AT91_CAST(AT91_REG *) 0xFFFFF120) // (AIC) Interrupt Enable Command Register -#define AT91C_AIC_ISCR (AT91_CAST(AT91_REG *) 0xFFFFF12C) // (AIC) Interrupt Set Command Register -#define AT91C_AIC_FFDR (AT91_CAST(AT91_REG *) 0xFFFFF144) // (AIC) Fast Forcing Disable Register -#define AT91C_AIC_CISR (AT91_CAST(AT91_REG *) 0xFFFFF114) // (AIC) Core Interrupt Status Register -#define AT91C_AIC_IDCR (AT91_CAST(AT91_REG *) 0xFFFFF124) // (AIC) Interrupt Disable Command Register -#define AT91C_AIC_SPU (AT91_CAST(AT91_REG *) 0xFFFFF134) // (AIC) Spurious Vector Register -// ========== Register definition for PDC_DBGU peripheral ========== -#define AT91C_DBGU_TCR (AT91_CAST(AT91_REG *) 0xFFFFF30C) // (PDC_DBGU) Transmit Counter Register -#define AT91C_DBGU_RNPR (AT91_CAST(AT91_REG *) 0xFFFFF310) // (PDC_DBGU) Receive Next Pointer Register -#define AT91C_DBGU_TNPR (AT91_CAST(AT91_REG *) 0xFFFFF318) // (PDC_DBGU) Transmit Next Pointer Register -#define AT91C_DBGU_TPR (AT91_CAST(AT91_REG *) 0xFFFFF308) // (PDC_DBGU) Transmit Pointer Register -#define AT91C_DBGU_RPR (AT91_CAST(AT91_REG *) 0xFFFFF300) // (PDC_DBGU) Receive Pointer Register -#define AT91C_DBGU_RCR (AT91_CAST(AT91_REG *) 0xFFFFF304) // (PDC_DBGU) Receive Counter Register -#define AT91C_DBGU_RNCR (AT91_CAST(AT91_REG *) 0xFFFFF314) // (PDC_DBGU) Receive Next Counter Register -#define AT91C_DBGU_PTCR (AT91_CAST(AT91_REG *) 0xFFFFF320) // (PDC_DBGU) PDC Transfer Control Register -#define AT91C_DBGU_PTSR (AT91_CAST(AT91_REG *) 0xFFFFF324) // (PDC_DBGU) PDC Transfer Status Register -#define AT91C_DBGU_TNCR (AT91_CAST(AT91_REG *) 0xFFFFF31C) // (PDC_DBGU) Transmit Next Counter Register -// ========== Register definition for DBGU peripheral ========== -#define AT91C_DBGU_EXID (AT91_CAST(AT91_REG *) 0xFFFFF244) // (DBGU) Chip ID Extension Register -#define AT91C_DBGU_BRGR (AT91_CAST(AT91_REG *) 0xFFFFF220) // (DBGU) Baud Rate Generator Register -#define AT91C_DBGU_IDR (AT91_CAST(AT91_REG *) 0xFFFFF20C) // (DBGU) Interrupt Disable Register -#define AT91C_DBGU_CSR (AT91_CAST(AT91_REG *) 0xFFFFF214) // (DBGU) Channel Status Register -#define AT91C_DBGU_CIDR (AT91_CAST(AT91_REG *) 0xFFFFF240) // (DBGU) Chip ID Register -#define AT91C_DBGU_MR (AT91_CAST(AT91_REG *) 0xFFFFF204) // (DBGU) Mode Register -#define AT91C_DBGU_IMR (AT91_CAST(AT91_REG *) 0xFFFFF210) // (DBGU) Interrupt Mask Register -#define AT91C_DBGU_CR (AT91_CAST(AT91_REG *) 0xFFFFF200) // (DBGU) Control Register -#define AT91C_DBGU_FNTR (AT91_CAST(AT91_REG *) 0xFFFFF248) // (DBGU) Force NTRST Register -#define AT91C_DBGU_THR (AT91_CAST(AT91_REG *) 0xFFFFF21C) // (DBGU) Transmitter Holding Register -#define AT91C_DBGU_RHR (AT91_CAST(AT91_REG *) 0xFFFFF218) // (DBGU) Receiver Holding Register -#define AT91C_DBGU_IER (AT91_CAST(AT91_REG *) 0xFFFFF208) // (DBGU) Interrupt Enable Register -// ========== Register definition for PIOA peripheral ========== -#define AT91C_PIOA_ODR (AT91_CAST(AT91_REG *) 0xFFFFF414) // (PIOA) Output Disable Registerr -#define AT91C_PIOA_SODR (AT91_CAST(AT91_REG *) 0xFFFFF430) // (PIOA) Set Output Data Register -#define AT91C_PIOA_ISR (AT91_CAST(AT91_REG *) 0xFFFFF44C) // (PIOA) Interrupt Status Register -#define AT91C_PIOA_ABSR (AT91_CAST(AT91_REG *) 0xFFFFF478) // (PIOA) AB Select Status Register -#define AT91C_PIOA_IER (AT91_CAST(AT91_REG *) 0xFFFFF440) // (PIOA) Interrupt Enable Register -#define AT91C_PIOA_PPUDR (AT91_CAST(AT91_REG *) 0xFFFFF460) // (PIOA) Pull-up Disable Register -#define AT91C_PIOA_IMR (AT91_CAST(AT91_REG *) 0xFFFFF448) // (PIOA) Interrupt Mask Register -#define AT91C_PIOA_PER (AT91_CAST(AT91_REG *) 0xFFFFF400) // (PIOA) PIO Enable Register -#define AT91C_PIOA_IFDR (AT91_CAST(AT91_REG *) 0xFFFFF424) // (PIOA) Input Filter Disable Register -#define AT91C_PIOA_OWDR (AT91_CAST(AT91_REG *) 0xFFFFF4A4) // (PIOA) Output Write Disable Register -#define AT91C_PIOA_MDSR (AT91_CAST(AT91_REG *) 0xFFFFF458) // (PIOA) Multi-driver Status Register -#define AT91C_PIOA_IDR (AT91_CAST(AT91_REG *) 0xFFFFF444) // (PIOA) Interrupt Disable Register -#define AT91C_PIOA_ODSR (AT91_CAST(AT91_REG *) 0xFFFFF438) // (PIOA) Output Data Status Register -#define AT91C_PIOA_PPUSR (AT91_CAST(AT91_REG *) 0xFFFFF468) // (PIOA) Pull-up Status Register -#define AT91C_PIOA_OWSR (AT91_CAST(AT91_REG *) 0xFFFFF4A8) // (PIOA) Output Write Status Register -#define AT91C_PIOA_BSR (AT91_CAST(AT91_REG *) 0xFFFFF474) // (PIOA) Select B Register -#define AT91C_PIOA_OWER (AT91_CAST(AT91_REG *) 0xFFFFF4A0) // (PIOA) Output Write Enable Register -#define AT91C_PIOA_IFER (AT91_CAST(AT91_REG *) 0xFFFFF420) // (PIOA) Input Filter Enable Register -#define AT91C_PIOA_PDSR (AT91_CAST(AT91_REG *) 0xFFFFF43C) // (PIOA) Pin Data Status Register -#define AT91C_PIOA_PPUER (AT91_CAST(AT91_REG *) 0xFFFFF464) // (PIOA) Pull-up Enable Register -#define AT91C_PIOA_OSR (AT91_CAST(AT91_REG *) 0xFFFFF418) // (PIOA) Output Status Register -#define AT91C_PIOA_ASR (AT91_CAST(AT91_REG *) 0xFFFFF470) // (PIOA) Select A Register -#define AT91C_PIOA_MDDR (AT91_CAST(AT91_REG *) 0xFFFFF454) // (PIOA) Multi-driver Disable Register -#define AT91C_PIOA_CODR (AT91_CAST(AT91_REG *) 0xFFFFF434) // (PIOA) Clear Output Data Register -#define AT91C_PIOA_MDER (AT91_CAST(AT91_REG *) 0xFFFFF450) // (PIOA) Multi-driver Enable Register -#define AT91C_PIOA_PDR (AT91_CAST(AT91_REG *) 0xFFFFF404) // (PIOA) PIO Disable Register -#define AT91C_PIOA_IFSR (AT91_CAST(AT91_REG *) 0xFFFFF428) // (PIOA) Input Filter Status Register -#define AT91C_PIOA_OER (AT91_CAST(AT91_REG *) 0xFFFFF410) // (PIOA) Output Enable Register -#define AT91C_PIOA_PSR (AT91_CAST(AT91_REG *) 0xFFFFF408) // (PIOA) PIO Status Register -// ========== Register definition for PIOB peripheral ========== -#define AT91C_PIOB_OWDR (AT91_CAST(AT91_REG *) 0xFFFFF6A4) // (PIOB) Output Write Disable Register -#define AT91C_PIOB_MDER (AT91_CAST(AT91_REG *) 0xFFFFF650) // (PIOB) Multi-driver Enable Register -#define AT91C_PIOB_PPUSR (AT91_CAST(AT91_REG *) 0xFFFFF668) // (PIOB) Pull-up Status Register -#define AT91C_PIOB_IMR (AT91_CAST(AT91_REG *) 0xFFFFF648) // (PIOB) Interrupt Mask Register -#define AT91C_PIOB_ASR (AT91_CAST(AT91_REG *) 0xFFFFF670) // (PIOB) Select A Register -#define AT91C_PIOB_PPUDR (AT91_CAST(AT91_REG *) 0xFFFFF660) // (PIOB) Pull-up Disable Register -#define AT91C_PIOB_PSR (AT91_CAST(AT91_REG *) 0xFFFFF608) // (PIOB) PIO Status Register -#define AT91C_PIOB_IER (AT91_CAST(AT91_REG *) 0xFFFFF640) // (PIOB) Interrupt Enable Register -#define AT91C_PIOB_CODR (AT91_CAST(AT91_REG *) 0xFFFFF634) // (PIOB) Clear Output Data Register -#define AT91C_PIOB_OWER (AT91_CAST(AT91_REG *) 0xFFFFF6A0) // (PIOB) Output Write Enable Register -#define AT91C_PIOB_ABSR (AT91_CAST(AT91_REG *) 0xFFFFF678) // (PIOB) AB Select Status Register -#define AT91C_PIOB_IFDR (AT91_CAST(AT91_REG *) 0xFFFFF624) // (PIOB) Input Filter Disable Register -#define AT91C_PIOB_PDSR (AT91_CAST(AT91_REG *) 0xFFFFF63C) // (PIOB) Pin Data Status Register -#define AT91C_PIOB_IDR (AT91_CAST(AT91_REG *) 0xFFFFF644) // (PIOB) Interrupt Disable Register -#define AT91C_PIOB_OWSR (AT91_CAST(AT91_REG *) 0xFFFFF6A8) // (PIOB) Output Write Status Register -#define AT91C_PIOB_PDR (AT91_CAST(AT91_REG *) 0xFFFFF604) // (PIOB) PIO Disable Register -#define AT91C_PIOB_ODR (AT91_CAST(AT91_REG *) 0xFFFFF614) // (PIOB) Output Disable Registerr -#define AT91C_PIOB_IFSR (AT91_CAST(AT91_REG *) 0xFFFFF628) // (PIOB) Input Filter Status Register -#define AT91C_PIOB_PPUER (AT91_CAST(AT91_REG *) 0xFFFFF664) // (PIOB) Pull-up Enable Register -#define AT91C_PIOB_SODR (AT91_CAST(AT91_REG *) 0xFFFFF630) // (PIOB) Set Output Data Register -#define AT91C_PIOB_ISR (AT91_CAST(AT91_REG *) 0xFFFFF64C) // (PIOB) Interrupt Status Register -#define AT91C_PIOB_ODSR (AT91_CAST(AT91_REG *) 0xFFFFF638) // (PIOB) Output Data Status Register -#define AT91C_PIOB_OSR (AT91_CAST(AT91_REG *) 0xFFFFF618) // (PIOB) Output Status Register -#define AT91C_PIOB_MDSR (AT91_CAST(AT91_REG *) 0xFFFFF658) // (PIOB) Multi-driver Status Register -#define AT91C_PIOB_IFER (AT91_CAST(AT91_REG *) 0xFFFFF620) // (PIOB) Input Filter Enable Register -#define AT91C_PIOB_BSR (AT91_CAST(AT91_REG *) 0xFFFFF674) // (PIOB) Select B Register -#define AT91C_PIOB_MDDR (AT91_CAST(AT91_REG *) 0xFFFFF654) // (PIOB) Multi-driver Disable Register -#define AT91C_PIOB_OER (AT91_CAST(AT91_REG *) 0xFFFFF610) // (PIOB) Output Enable Register -#define AT91C_PIOB_PER (AT91_CAST(AT91_REG *) 0xFFFFF600) // (PIOB) PIO Enable Register -// ========== Register definition for CKGR peripheral ========== -#define AT91C_CKGR_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (CKGR) Main Oscillator Register -#define AT91C_CKGR_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (CKGR) PLL Register -#define AT91C_CKGR_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (CKGR) Main Clock Frequency Register -// ========== Register definition for PMC peripheral ========== -#define AT91C_PMC_IDR (AT91_CAST(AT91_REG *) 0xFFFFFC64) // (PMC) Interrupt Disable Register -#define AT91C_PMC_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (PMC) Main Oscillator Register -#define AT91C_PMC_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (PMC) PLL Register -#define AT91C_PMC_PCER (AT91_CAST(AT91_REG *) 0xFFFFFC10) // (PMC) Peripheral Clock Enable Register -#define AT91C_PMC_PCKR (AT91_CAST(AT91_REG *) 0xFFFFFC40) // (PMC) Programmable Clock Register -#define AT91C_PMC_MCKR (AT91_CAST(AT91_REG *) 0xFFFFFC30) // (PMC) Master Clock Register -#define AT91C_PMC_SCDR (AT91_CAST(AT91_REG *) 0xFFFFFC04) // (PMC) System Clock Disable Register -#define AT91C_PMC_PCDR (AT91_CAST(AT91_REG *) 0xFFFFFC14) // (PMC) Peripheral Clock Disable Register -#define AT91C_PMC_SCSR (AT91_CAST(AT91_REG *) 0xFFFFFC08) // (PMC) System Clock Status Register -#define AT91C_PMC_PCSR (AT91_CAST(AT91_REG *) 0xFFFFFC18) // (PMC) Peripheral Clock Status Register -#define AT91C_PMC_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (PMC) Main Clock Frequency Register -#define AT91C_PMC_SCER (AT91_CAST(AT91_REG *) 0xFFFFFC00) // (PMC) System Clock Enable Register -#define AT91C_PMC_IMR (AT91_CAST(AT91_REG *) 0xFFFFFC6C) // (PMC) Interrupt Mask Register -#define AT91C_PMC_IER (AT91_CAST(AT91_REG *) 0xFFFFFC60) // (PMC) Interrupt Enable Register -#define AT91C_PMC_SR (AT91_CAST(AT91_REG *) 0xFFFFFC68) // (PMC) Status Register -// ========== Register definition for RSTC peripheral ========== -#define AT91C_RSTC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFD00) // (RSTC) Reset Control Register -#define AT91C_RSTC_RMR (AT91_CAST(AT91_REG *) 0xFFFFFD08) // (RSTC) Reset Mode Register -#define AT91C_RSTC_RSR (AT91_CAST(AT91_REG *) 0xFFFFFD04) // (RSTC) Reset Status Register -// ========== Register definition for RTTC peripheral ========== -#define AT91C_RTTC_RTSR (AT91_CAST(AT91_REG *) 0xFFFFFD2C) // (RTTC) Real-time Status Register -#define AT91C_RTTC_RTMR (AT91_CAST(AT91_REG *) 0xFFFFFD20) // (RTTC) Real-time Mode Register -#define AT91C_RTTC_RTVR (AT91_CAST(AT91_REG *) 0xFFFFFD28) // (RTTC) Real-time Value Register -#define AT91C_RTTC_RTAR (AT91_CAST(AT91_REG *) 0xFFFFFD24) // (RTTC) Real-time Alarm Register -// ========== Register definition for PITC peripheral ========== -#define AT91C_PITC_PIVR (AT91_CAST(AT91_REG *) 0xFFFFFD38) // (PITC) Period Interval Value Register -#define AT91C_PITC_PISR (AT91_CAST(AT91_REG *) 0xFFFFFD34) // (PITC) Period Interval Status Register -#define AT91C_PITC_PIIR (AT91_CAST(AT91_REG *) 0xFFFFFD3C) // (PITC) Period Interval Image Register -#define AT91C_PITC_PIMR (AT91_CAST(AT91_REG *) 0xFFFFFD30) // (PITC) Period Interval Mode Register -// ========== Register definition for WDTC peripheral ========== -#define AT91C_WDTC_WDCR (AT91_CAST(AT91_REG *) 0xFFFFFD40) // (WDTC) Watchdog Control Register -#define AT91C_WDTC_WDSR (AT91_CAST(AT91_REG *) 0xFFFFFD48) // (WDTC) Watchdog Status Register -#define AT91C_WDTC_WDMR (AT91_CAST(AT91_REG *) 0xFFFFFD44) // (WDTC) Watchdog Mode Register -// ========== Register definition for VREG peripheral ========== -#define AT91C_VREG_MR (AT91_CAST(AT91_REG *) 0xFFFFFD60) // (VREG) Voltage Regulator Mode Register -// ========== Register definition for MC peripheral ========== -#define AT91C_MC_ASR (AT91_CAST(AT91_REG *) 0xFFFFFF04) // (MC) MC Abort Status Register -#define AT91C_MC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFF00) // (MC) MC Remap Control Register -#define AT91C_MC_FCR (AT91_CAST(AT91_REG *) 0xFFFFFF64) // (MC) MC Flash Command Register -#define AT91C_MC_AASR (AT91_CAST(AT91_REG *) 0xFFFFFF08) // (MC) MC Abort Address Status Register -#define AT91C_MC_FSR (AT91_CAST(AT91_REG *) 0xFFFFFF68) // (MC) MC Flash Status Register -#define AT91C_MC_FMR (AT91_CAST(AT91_REG *) 0xFFFFFF60) // (MC) MC Flash Mode Register -// ========== Register definition for PDC_SPI1 peripheral ========== -#define AT91C_SPI1_PTCR (AT91_CAST(AT91_REG *) 0xFFFE4120) // (PDC_SPI1) PDC Transfer Control Register -#define AT91C_SPI1_RPR (AT91_CAST(AT91_REG *) 0xFFFE4100) // (PDC_SPI1) Receive Pointer Register -#define AT91C_SPI1_TNCR (AT91_CAST(AT91_REG *) 0xFFFE411C) // (PDC_SPI1) Transmit Next Counter Register -#define AT91C_SPI1_TPR (AT91_CAST(AT91_REG *) 0xFFFE4108) // (PDC_SPI1) Transmit Pointer Register -#define AT91C_SPI1_TNPR (AT91_CAST(AT91_REG *) 0xFFFE4118) // (PDC_SPI1) Transmit Next Pointer Register -#define AT91C_SPI1_TCR (AT91_CAST(AT91_REG *) 0xFFFE410C) // (PDC_SPI1) Transmit Counter Register -#define AT91C_SPI1_RCR (AT91_CAST(AT91_REG *) 0xFFFE4104) // (PDC_SPI1) Receive Counter Register -#define AT91C_SPI1_RNPR (AT91_CAST(AT91_REG *) 0xFFFE4110) // (PDC_SPI1) Receive Next Pointer Register -#define AT91C_SPI1_RNCR (AT91_CAST(AT91_REG *) 0xFFFE4114) // (PDC_SPI1) Receive Next Counter Register -#define AT91C_SPI1_PTSR (AT91_CAST(AT91_REG *) 0xFFFE4124) // (PDC_SPI1) PDC Transfer Status Register -// ========== Register definition for SPI1 peripheral ========== -#define AT91C_SPI1_IMR (AT91_CAST(AT91_REG *) 0xFFFE401C) // (SPI1) Interrupt Mask Register -#define AT91C_SPI1_IER (AT91_CAST(AT91_REG *) 0xFFFE4014) // (SPI1) Interrupt Enable Register -#define AT91C_SPI1_MR (AT91_CAST(AT91_REG *) 0xFFFE4004) // (SPI1) Mode Register -#define AT91C_SPI1_RDR (AT91_CAST(AT91_REG *) 0xFFFE4008) // (SPI1) Receive Data Register -#define AT91C_SPI1_IDR (AT91_CAST(AT91_REG *) 0xFFFE4018) // (SPI1) Interrupt Disable Register -#define AT91C_SPI1_SR (AT91_CAST(AT91_REG *) 0xFFFE4010) // (SPI1) Status Register -#define AT91C_SPI1_TDR (AT91_CAST(AT91_REG *) 0xFFFE400C) // (SPI1) Transmit Data Register -#define AT91C_SPI1_CR (AT91_CAST(AT91_REG *) 0xFFFE4000) // (SPI1) Control Register -#define AT91C_SPI1_CSR (AT91_CAST(AT91_REG *) 0xFFFE4030) // (SPI1) Chip Select Register -// ========== Register definition for PDC_SPI0 peripheral ========== -#define AT91C_SPI0_PTCR (AT91_CAST(AT91_REG *) 0xFFFE0120) // (PDC_SPI0) PDC Transfer Control Register -#define AT91C_SPI0_TPR (AT91_CAST(AT91_REG *) 0xFFFE0108) // (PDC_SPI0) Transmit Pointer Register -#define AT91C_SPI0_TCR (AT91_CAST(AT91_REG *) 0xFFFE010C) // (PDC_SPI0) Transmit Counter Register -#define AT91C_SPI0_RCR (AT91_CAST(AT91_REG *) 0xFFFE0104) // (PDC_SPI0) Receive Counter Register -#define AT91C_SPI0_PTSR (AT91_CAST(AT91_REG *) 0xFFFE0124) // (PDC_SPI0) PDC Transfer Status Register -#define AT91C_SPI0_RNPR (AT91_CAST(AT91_REG *) 0xFFFE0110) // (PDC_SPI0) Receive Next Pointer Register -#define AT91C_SPI0_RPR (AT91_CAST(AT91_REG *) 0xFFFE0100) // (PDC_SPI0) Receive Pointer Register -#define AT91C_SPI0_TNCR (AT91_CAST(AT91_REG *) 0xFFFE011C) // (PDC_SPI0) Transmit Next Counter Register -#define AT91C_SPI0_RNCR (AT91_CAST(AT91_REG *) 0xFFFE0114) // (PDC_SPI0) Receive Next Counter Register -#define AT91C_SPI0_TNPR (AT91_CAST(AT91_REG *) 0xFFFE0118) // (PDC_SPI0) Transmit Next Pointer Register -// ========== Register definition for SPI0 peripheral ========== -#define AT91C_SPI0_IER (AT91_CAST(AT91_REG *) 0xFFFE0014) // (SPI0) Interrupt Enable Register -#define AT91C_SPI0_SR (AT91_CAST(AT91_REG *) 0xFFFE0010) // (SPI0) Status Register -#define AT91C_SPI0_IDR (AT91_CAST(AT91_REG *) 0xFFFE0018) // (SPI0) Interrupt Disable Register -#define AT91C_SPI0_CR (AT91_CAST(AT91_REG *) 0xFFFE0000) // (SPI0) Control Register -#define AT91C_SPI0_MR (AT91_CAST(AT91_REG *) 0xFFFE0004) // (SPI0) Mode Register -#define AT91C_SPI0_IMR (AT91_CAST(AT91_REG *) 0xFFFE001C) // (SPI0) Interrupt Mask Register -#define AT91C_SPI0_TDR (AT91_CAST(AT91_REG *) 0xFFFE000C) // (SPI0) Transmit Data Register -#define AT91C_SPI0_RDR (AT91_CAST(AT91_REG *) 0xFFFE0008) // (SPI0) Receive Data Register -#define AT91C_SPI0_CSR (AT91_CAST(AT91_REG *) 0xFFFE0030) // (SPI0) Chip Select Register -// ========== Register definition for PDC_US1 peripheral ========== -#define AT91C_US1_RNCR (AT91_CAST(AT91_REG *) 0xFFFC4114) // (PDC_US1) Receive Next Counter Register -#define AT91C_US1_PTCR (AT91_CAST(AT91_REG *) 0xFFFC4120) // (PDC_US1) PDC Transfer Control Register -#define AT91C_US1_TCR (AT91_CAST(AT91_REG *) 0xFFFC410C) // (PDC_US1) Transmit Counter Register -#define AT91C_US1_PTSR (AT91_CAST(AT91_REG *) 0xFFFC4124) // (PDC_US1) PDC Transfer Status Register -#define AT91C_US1_TNPR (AT91_CAST(AT91_REG *) 0xFFFC4118) // (PDC_US1) Transmit Next Pointer Register -#define AT91C_US1_RCR (AT91_CAST(AT91_REG *) 0xFFFC4104) // (PDC_US1) Receive Counter Register -#define AT91C_US1_RNPR (AT91_CAST(AT91_REG *) 0xFFFC4110) // (PDC_US1) Receive Next Pointer Register -#define AT91C_US1_RPR (AT91_CAST(AT91_REG *) 0xFFFC4100) // (PDC_US1) Receive Pointer Register -#define AT91C_US1_TNCR (AT91_CAST(AT91_REG *) 0xFFFC411C) // (PDC_US1) Transmit Next Counter Register -#define AT91C_US1_TPR (AT91_CAST(AT91_REG *) 0xFFFC4108) // (PDC_US1) Transmit Pointer Register -// ========== Register definition for US1 peripheral ========== -#define AT91C_US1_IF (AT91_CAST(AT91_REG *) 0xFFFC404C) // (US1) IRDA_FILTER Register -#define AT91C_US1_NER (AT91_CAST(AT91_REG *) 0xFFFC4044) // (US1) Nb Errors Register -#define AT91C_US1_RTOR (AT91_CAST(AT91_REG *) 0xFFFC4024) // (US1) Receiver Time-out Register -#define AT91C_US1_CSR (AT91_CAST(AT91_REG *) 0xFFFC4014) // (US1) Channel Status Register -#define AT91C_US1_IDR (AT91_CAST(AT91_REG *) 0xFFFC400C) // (US1) Interrupt Disable Register -#define AT91C_US1_IER (AT91_CAST(AT91_REG *) 0xFFFC4008) // (US1) Interrupt Enable Register -#define AT91C_US1_THR (AT91_CAST(AT91_REG *) 0xFFFC401C) // (US1) Transmitter Holding Register -#define AT91C_US1_TTGR (AT91_CAST(AT91_REG *) 0xFFFC4028) // (US1) Transmitter Time-guard Register -#define AT91C_US1_RHR (AT91_CAST(AT91_REG *) 0xFFFC4018) // (US1) Receiver Holding Register -#define AT91C_US1_BRGR (AT91_CAST(AT91_REG *) 0xFFFC4020) // (US1) Baud Rate Generator Register -#define AT91C_US1_IMR (AT91_CAST(AT91_REG *) 0xFFFC4010) // (US1) Interrupt Mask Register -#define AT91C_US1_FIDI (AT91_CAST(AT91_REG *) 0xFFFC4040) // (US1) FI_DI_Ratio Register -#define AT91C_US1_CR (AT91_CAST(AT91_REG *) 0xFFFC4000) // (US1) Control Register -#define AT91C_US1_MR (AT91_CAST(AT91_REG *) 0xFFFC4004) // (US1) Mode Register -// ========== Register definition for PDC_US0 peripheral ========== -#define AT91C_US0_TNPR (AT91_CAST(AT91_REG *) 0xFFFC0118) // (PDC_US0) Transmit Next Pointer Register -#define AT91C_US0_RNPR (AT91_CAST(AT91_REG *) 0xFFFC0110) // (PDC_US0) Receive Next Pointer Register -#define AT91C_US0_TCR (AT91_CAST(AT91_REG *) 0xFFFC010C) // (PDC_US0) Transmit Counter Register -#define AT91C_US0_PTCR (AT91_CAST(AT91_REG *) 0xFFFC0120) // (PDC_US0) PDC Transfer Control Register -#define AT91C_US0_PTSR (AT91_CAST(AT91_REG *) 0xFFFC0124) // (PDC_US0) PDC Transfer Status Register -#define AT91C_US0_TNCR (AT91_CAST(AT91_REG *) 0xFFFC011C) // (PDC_US0) Transmit Next Counter Register -#define AT91C_US0_TPR (AT91_CAST(AT91_REG *) 0xFFFC0108) // (PDC_US0) Transmit Pointer Register -#define AT91C_US0_RCR (AT91_CAST(AT91_REG *) 0xFFFC0104) // (PDC_US0) Receive Counter Register -#define AT91C_US0_RPR (AT91_CAST(AT91_REG *) 0xFFFC0100) // (PDC_US0) Receive Pointer Register -#define AT91C_US0_RNCR (AT91_CAST(AT91_REG *) 0xFFFC0114) // (PDC_US0) Receive Next Counter Register -// ========== Register definition for US0 peripheral ========== -#define AT91C_US0_BRGR (AT91_CAST(AT91_REG *) 0xFFFC0020) // (US0) Baud Rate Generator Register -#define AT91C_US0_NER (AT91_CAST(AT91_REG *) 0xFFFC0044) // (US0) Nb Errors Register -#define AT91C_US0_CR (AT91_CAST(AT91_REG *) 0xFFFC0000) // (US0) Control Register -#define AT91C_US0_IMR (AT91_CAST(AT91_REG *) 0xFFFC0010) // (US0) Interrupt Mask Register -#define AT91C_US0_FIDI (AT91_CAST(AT91_REG *) 0xFFFC0040) // (US0) FI_DI_Ratio Register -#define AT91C_US0_TTGR (AT91_CAST(AT91_REG *) 0xFFFC0028) // (US0) Transmitter Time-guard Register -#define AT91C_US0_MR (AT91_CAST(AT91_REG *) 0xFFFC0004) // (US0) Mode Register -#define AT91C_US0_RTOR (AT91_CAST(AT91_REG *) 0xFFFC0024) // (US0) Receiver Time-out Register -#define AT91C_US0_CSR (AT91_CAST(AT91_REG *) 0xFFFC0014) // (US0) Channel Status Register -#define AT91C_US0_RHR (AT91_CAST(AT91_REG *) 0xFFFC0018) // (US0) Receiver Holding Register -#define AT91C_US0_IDR (AT91_CAST(AT91_REG *) 0xFFFC000C) // (US0) Interrupt Disable Register -#define AT91C_US0_THR (AT91_CAST(AT91_REG *) 0xFFFC001C) // (US0) Transmitter Holding Register -#define AT91C_US0_IF (AT91_CAST(AT91_REG *) 0xFFFC004C) // (US0) IRDA_FILTER Register -#define AT91C_US0_IER (AT91_CAST(AT91_REG *) 0xFFFC0008) // (US0) Interrupt Enable Register -// ========== Register definition for PDC_SSC peripheral ========== -#define AT91C_SSC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD411C) // (PDC_SSC) Transmit Next Counter Register -#define AT91C_SSC_RPR (AT91_CAST(AT91_REG *) 0xFFFD4100) // (PDC_SSC) Receive Pointer Register -#define AT91C_SSC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD4114) // (PDC_SSC) Receive Next Counter Register -#define AT91C_SSC_TPR (AT91_CAST(AT91_REG *) 0xFFFD4108) // (PDC_SSC) Transmit Pointer Register -#define AT91C_SSC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD4120) // (PDC_SSC) PDC Transfer Control Register -#define AT91C_SSC_TCR (AT91_CAST(AT91_REG *) 0xFFFD410C) // (PDC_SSC) Transmit Counter Register -#define AT91C_SSC_RCR (AT91_CAST(AT91_REG *) 0xFFFD4104) // (PDC_SSC) Receive Counter Register -#define AT91C_SSC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD4110) // (PDC_SSC) Receive Next Pointer Register -#define AT91C_SSC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD4118) // (PDC_SSC) Transmit Next Pointer Register -#define AT91C_SSC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD4124) // (PDC_SSC) PDC Transfer Status Register -// ========== Register definition for SSC peripheral ========== -#define AT91C_SSC_RHR (AT91_CAST(AT91_REG *) 0xFFFD4020) // (SSC) Receive Holding Register -#define AT91C_SSC_RSHR (AT91_CAST(AT91_REG *) 0xFFFD4030) // (SSC) Receive Sync Holding Register -#define AT91C_SSC_TFMR (AT91_CAST(AT91_REG *) 0xFFFD401C) // (SSC) Transmit Frame Mode Register -#define AT91C_SSC_IDR (AT91_CAST(AT91_REG *) 0xFFFD4048) // (SSC) Interrupt Disable Register -#define AT91C_SSC_THR (AT91_CAST(AT91_REG *) 0xFFFD4024) // (SSC) Transmit Holding Register -#define AT91C_SSC_RCMR (AT91_CAST(AT91_REG *) 0xFFFD4010) // (SSC) Receive Clock ModeRegister -#define AT91C_SSC_IER (AT91_CAST(AT91_REG *) 0xFFFD4044) // (SSC) Interrupt Enable Register -#define AT91C_SSC_TSHR (AT91_CAST(AT91_REG *) 0xFFFD4034) // (SSC) Transmit Sync Holding Register -#define AT91C_SSC_SR (AT91_CAST(AT91_REG *) 0xFFFD4040) // (SSC) Status Register -#define AT91C_SSC_CMR (AT91_CAST(AT91_REG *) 0xFFFD4004) // (SSC) Clock Mode Register -#define AT91C_SSC_TCMR (AT91_CAST(AT91_REG *) 0xFFFD4018) // (SSC) Transmit Clock Mode Register -#define AT91C_SSC_CR (AT91_CAST(AT91_REG *) 0xFFFD4000) // (SSC) Control Register -#define AT91C_SSC_IMR (AT91_CAST(AT91_REG *) 0xFFFD404C) // (SSC) Interrupt Mask Register -#define AT91C_SSC_RFMR (AT91_CAST(AT91_REG *) 0xFFFD4014) // (SSC) Receive Frame Mode Register -// ========== Register definition for TWI peripheral ========== -#define AT91C_TWI_IER (AT91_CAST(AT91_REG *) 0xFFFB8024) // (TWI) Interrupt Enable Register -#define AT91C_TWI_CR (AT91_CAST(AT91_REG *) 0xFFFB8000) // (TWI) Control Register -#define AT91C_TWI_SR (AT91_CAST(AT91_REG *) 0xFFFB8020) // (TWI) Status Register -#define AT91C_TWI_IMR (AT91_CAST(AT91_REG *) 0xFFFB802C) // (TWI) Interrupt Mask Register -#define AT91C_TWI_THR (AT91_CAST(AT91_REG *) 0xFFFB8034) // (TWI) Transmit Holding Register -#define AT91C_TWI_IDR (AT91_CAST(AT91_REG *) 0xFFFB8028) // (TWI) Interrupt Disable Register -#define AT91C_TWI_IADR (AT91_CAST(AT91_REG *) 0xFFFB800C) // (TWI) Internal Address Register -#define AT91C_TWI_MMR (AT91_CAST(AT91_REG *) 0xFFFB8004) // (TWI) Master Mode Register -#define AT91C_TWI_CWGR (AT91_CAST(AT91_REG *) 0xFFFB8010) // (TWI) Clock Waveform Generator Register -#define AT91C_TWI_RHR (AT91_CAST(AT91_REG *) 0xFFFB8030) // (TWI) Receive Holding Register -// ========== Register definition for PWMC_CH3 peripheral ========== -#define AT91C_PWMC_CH3_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC270) // (PWMC_CH3) Channel Update Register -#define AT91C_PWMC_CH3_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC274) // (PWMC_CH3) Reserved -#define AT91C_PWMC_CH3_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC268) // (PWMC_CH3) Channel Period Register -#define AT91C_PWMC_CH3_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC264) // (PWMC_CH3) Channel Duty Cycle Register -#define AT91C_PWMC_CH3_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC26C) // (PWMC_CH3) Channel Counter Register -#define AT91C_PWMC_CH3_CMR (AT91_CAST(AT91_REG *) 0xFFFCC260) // (PWMC_CH3) Channel Mode Register -// ========== Register definition for PWMC_CH2 peripheral ========== -#define AT91C_PWMC_CH2_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC254) // (PWMC_CH2) Reserved -#define AT91C_PWMC_CH2_CMR (AT91_CAST(AT91_REG *) 0xFFFCC240) // (PWMC_CH2) Channel Mode Register -#define AT91C_PWMC_CH2_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC24C) // (PWMC_CH2) Channel Counter Register -#define AT91C_PWMC_CH2_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC248) // (PWMC_CH2) Channel Period Register -#define AT91C_PWMC_CH2_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC250) // (PWMC_CH2) Channel Update Register -#define AT91C_PWMC_CH2_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC244) // (PWMC_CH2) Channel Duty Cycle Register -// ========== Register definition for PWMC_CH1 peripheral ========== -#define AT91C_PWMC_CH1_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC234) // (PWMC_CH1) Reserved -#define AT91C_PWMC_CH1_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC230) // (PWMC_CH1) Channel Update Register -#define AT91C_PWMC_CH1_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC228) // (PWMC_CH1) Channel Period Register -#define AT91C_PWMC_CH1_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC22C) // (PWMC_CH1) Channel Counter Register -#define AT91C_PWMC_CH1_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC224) // (PWMC_CH1) Channel Duty Cycle Register -#define AT91C_PWMC_CH1_CMR (AT91_CAST(AT91_REG *) 0xFFFCC220) // (PWMC_CH1) Channel Mode Register -// ========== Register definition for PWMC_CH0 peripheral ========== -#define AT91C_PWMC_CH0_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC214) // (PWMC_CH0) Reserved -#define AT91C_PWMC_CH0_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC208) // (PWMC_CH0) Channel Period Register -#define AT91C_PWMC_CH0_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC204) // (PWMC_CH0) Channel Duty Cycle Register -#define AT91C_PWMC_CH0_CMR (AT91_CAST(AT91_REG *) 0xFFFCC200) // (PWMC_CH0) Channel Mode Register -#define AT91C_PWMC_CH0_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC210) // (PWMC_CH0) Channel Update Register -#define AT91C_PWMC_CH0_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC20C) // (PWMC_CH0) Channel Counter Register -// ========== Register definition for PWMC peripheral ========== -#define AT91C_PWMC_IDR (AT91_CAST(AT91_REG *) 0xFFFCC014) // (PWMC) PWMC Interrupt Disable Register -#define AT91C_PWMC_DIS (AT91_CAST(AT91_REG *) 0xFFFCC008) // (PWMC) PWMC Disable Register -#define AT91C_PWMC_IER (AT91_CAST(AT91_REG *) 0xFFFCC010) // (PWMC) PWMC Interrupt Enable Register -#define AT91C_PWMC_VR (AT91_CAST(AT91_REG *) 0xFFFCC0FC) // (PWMC) PWMC Version Register -#define AT91C_PWMC_ISR (AT91_CAST(AT91_REG *) 0xFFFCC01C) // (PWMC) PWMC Interrupt Status Register -#define AT91C_PWMC_SR (AT91_CAST(AT91_REG *) 0xFFFCC00C) // (PWMC) PWMC Status Register -#define AT91C_PWMC_IMR (AT91_CAST(AT91_REG *) 0xFFFCC018) // (PWMC) PWMC Interrupt Mask Register -#define AT91C_PWMC_MR (AT91_CAST(AT91_REG *) 0xFFFCC000) // (PWMC) PWMC Mode Register -#define AT91C_PWMC_ENA (AT91_CAST(AT91_REG *) 0xFFFCC004) // (PWMC) PWMC Enable Register -// ========== Register definition for UDP peripheral ========== -#define AT91C_UDP_IMR (AT91_CAST(AT91_REG *) 0xFFFB0018) // (UDP) Interrupt Mask Register -#define AT91C_UDP_FADDR (AT91_CAST(AT91_REG *) 0xFFFB0008) // (UDP) Function Address Register -#define AT91C_UDP_NUM (AT91_CAST(AT91_REG *) 0xFFFB0000) // (UDP) Frame Number Register -#define AT91C_UDP_FDR (AT91_CAST(AT91_REG *) 0xFFFB0050) // (UDP) Endpoint FIFO Data Register -#define AT91C_UDP_ISR (AT91_CAST(AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register -#define AT91C_UDP_CSR (AT91_CAST(AT91_REG *) 0xFFFB0030) // (UDP) Endpoint Control and Status Register -#define AT91C_UDP_IDR (AT91_CAST(AT91_REG *) 0xFFFB0014) // (UDP) Interrupt Disable Register -#define AT91C_UDP_ICR (AT91_CAST(AT91_REG *) 0xFFFB0020) // (UDP) Interrupt Clear Register -#define AT91C_UDP_RSTEP (AT91_CAST(AT91_REG *) 0xFFFB0028) // (UDP) Reset Endpoint Register -#define AT91C_UDP_TXVC (AT91_CAST(AT91_REG *) 0xFFFB0074) // (UDP) Transceiver Control Register -#define AT91C_UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0xFFFB0004) // (UDP) Global State Register -#define AT91C_UDP_IER (AT91_CAST(AT91_REG *) 0xFFFB0010) // (UDP) Interrupt Enable Register -// ========== Register definition for TC0 peripheral ========== -#define AT91C_TC0_SR (AT91_CAST(AT91_REG *) 0xFFFA0020) // (TC0) Status Register -#define AT91C_TC0_RC (AT91_CAST(AT91_REG *) 0xFFFA001C) // (TC0) Register C -#define AT91C_TC0_RB (AT91_CAST(AT91_REG *) 0xFFFA0018) // (TC0) Register B -#define AT91C_TC0_CCR (AT91_CAST(AT91_REG *) 0xFFFA0000) // (TC0) Channel Control Register -#define AT91C_TC0_CMR (AT91_CAST(AT91_REG *) 0xFFFA0004) // (TC0) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC0_IER (AT91_CAST(AT91_REG *) 0xFFFA0024) // (TC0) Interrupt Enable Register -#define AT91C_TC0_RA (AT91_CAST(AT91_REG *) 0xFFFA0014) // (TC0) Register A -#define AT91C_TC0_IDR (AT91_CAST(AT91_REG *) 0xFFFA0028) // (TC0) Interrupt Disable Register -#define AT91C_TC0_CV (AT91_CAST(AT91_REG *) 0xFFFA0010) // (TC0) Counter Value -#define AT91C_TC0_IMR (AT91_CAST(AT91_REG *) 0xFFFA002C) // (TC0) Interrupt Mask Register -// ========== Register definition for TC1 peripheral ========== -#define AT91C_TC1_RB (AT91_CAST(AT91_REG *) 0xFFFA0058) // (TC1) Register B -#define AT91C_TC1_CCR (AT91_CAST(AT91_REG *) 0xFFFA0040) // (TC1) Channel Control Register -#define AT91C_TC1_IER (AT91_CAST(AT91_REG *) 0xFFFA0064) // (TC1) Interrupt Enable Register -#define AT91C_TC1_IDR (AT91_CAST(AT91_REG *) 0xFFFA0068) // (TC1) Interrupt Disable Register -#define AT91C_TC1_SR (AT91_CAST(AT91_REG *) 0xFFFA0060) // (TC1) Status Register -#define AT91C_TC1_CMR (AT91_CAST(AT91_REG *) 0xFFFA0044) // (TC1) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC1_RA (AT91_CAST(AT91_REG *) 0xFFFA0054) // (TC1) Register A -#define AT91C_TC1_RC (AT91_CAST(AT91_REG *) 0xFFFA005C) // (TC1) Register C -#define AT91C_TC1_IMR (AT91_CAST(AT91_REG *) 0xFFFA006C) // (TC1) Interrupt Mask Register -#define AT91C_TC1_CV (AT91_CAST(AT91_REG *) 0xFFFA0050) // (TC1) Counter Value -// ========== Register definition for TC2 peripheral ========== -#define AT91C_TC2_CMR (AT91_CAST(AT91_REG *) 0xFFFA0084) // (TC2) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC2_CCR (AT91_CAST(AT91_REG *) 0xFFFA0080) // (TC2) Channel Control Register -#define AT91C_TC2_CV (AT91_CAST(AT91_REG *) 0xFFFA0090) // (TC2) Counter Value -#define AT91C_TC2_RA (AT91_CAST(AT91_REG *) 0xFFFA0094) // (TC2) Register A -#define AT91C_TC2_RB (AT91_CAST(AT91_REG *) 0xFFFA0098) // (TC2) Register B -#define AT91C_TC2_IDR (AT91_CAST(AT91_REG *) 0xFFFA00A8) // (TC2) Interrupt Disable Register -#define AT91C_TC2_IMR (AT91_CAST(AT91_REG *) 0xFFFA00AC) // (TC2) Interrupt Mask Register -#define AT91C_TC2_RC (AT91_CAST(AT91_REG *) 0xFFFA009C) // (TC2) Register C -#define AT91C_TC2_IER (AT91_CAST(AT91_REG *) 0xFFFA00A4) // (TC2) Interrupt Enable Register -#define AT91C_TC2_SR (AT91_CAST(AT91_REG *) 0xFFFA00A0) // (TC2) Status Register -// ========== Register definition for TCB peripheral ========== -#define AT91C_TCB_BMR (AT91_CAST(AT91_REG *) 0xFFFA00C4) // (TCB) TC Block Mode Register -#define AT91C_TCB_BCR (AT91_CAST(AT91_REG *) 0xFFFA00C0) // (TCB) TC Block Control Register -// ========== Register definition for CAN_MB0 peripheral ========== -#define AT91C_CAN_MB0_MDL (AT91_CAST(AT91_REG *) 0xFFFD0214) // (CAN_MB0) MailBox Data Low Register -#define AT91C_CAN_MB0_MAM (AT91_CAST(AT91_REG *) 0xFFFD0204) // (CAN_MB0) MailBox Acceptance Mask Register -#define AT91C_CAN_MB0_MCR (AT91_CAST(AT91_REG *) 0xFFFD021C) // (CAN_MB0) MailBox Control Register -#define AT91C_CAN_MB0_MID (AT91_CAST(AT91_REG *) 0xFFFD0208) // (CAN_MB0) MailBox ID Register -#define AT91C_CAN_MB0_MSR (AT91_CAST(AT91_REG *) 0xFFFD0210) // (CAN_MB0) MailBox Status Register -#define AT91C_CAN_MB0_MFID (AT91_CAST(AT91_REG *) 0xFFFD020C) // (CAN_MB0) MailBox Family ID Register -#define AT91C_CAN_MB0_MDH (AT91_CAST(AT91_REG *) 0xFFFD0218) // (CAN_MB0) MailBox Data High Register -#define AT91C_CAN_MB0_MMR (AT91_CAST(AT91_REG *) 0xFFFD0200) // (CAN_MB0) MailBox Mode Register -// ========== Register definition for CAN_MB1 peripheral ========== -#define AT91C_CAN_MB1_MDL (AT91_CAST(AT91_REG *) 0xFFFD0234) // (CAN_MB1) MailBox Data Low Register -#define AT91C_CAN_MB1_MID (AT91_CAST(AT91_REG *) 0xFFFD0228) // (CAN_MB1) MailBox ID Register -#define AT91C_CAN_MB1_MMR (AT91_CAST(AT91_REG *) 0xFFFD0220) // (CAN_MB1) MailBox Mode Register -#define AT91C_CAN_MB1_MSR (AT91_CAST(AT91_REG *) 0xFFFD0230) // (CAN_MB1) MailBox Status Register -#define AT91C_CAN_MB1_MAM (AT91_CAST(AT91_REG *) 0xFFFD0224) // (CAN_MB1) MailBox Acceptance Mask Register -#define AT91C_CAN_MB1_MDH (AT91_CAST(AT91_REG *) 0xFFFD0238) // (CAN_MB1) MailBox Data High Register -#define AT91C_CAN_MB1_MCR (AT91_CAST(AT91_REG *) 0xFFFD023C) // (CAN_MB1) MailBox Control Register -#define AT91C_CAN_MB1_MFID (AT91_CAST(AT91_REG *) 0xFFFD022C) // (CAN_MB1) MailBox Family ID Register -// ========== Register definition for CAN_MB2 peripheral ========== -#define AT91C_CAN_MB2_MCR (AT91_CAST(AT91_REG *) 0xFFFD025C) // (CAN_MB2) MailBox Control Register -#define AT91C_CAN_MB2_MDH (AT91_CAST(AT91_REG *) 0xFFFD0258) // (CAN_MB2) MailBox Data High Register -#define AT91C_CAN_MB2_MID (AT91_CAST(AT91_REG *) 0xFFFD0248) // (CAN_MB2) MailBox ID Register -#define AT91C_CAN_MB2_MDL (AT91_CAST(AT91_REG *) 0xFFFD0254) // (CAN_MB2) MailBox Data Low Register -#define AT91C_CAN_MB2_MMR (AT91_CAST(AT91_REG *) 0xFFFD0240) // (CAN_MB2) MailBox Mode Register -#define AT91C_CAN_MB2_MAM (AT91_CAST(AT91_REG *) 0xFFFD0244) // (CAN_MB2) MailBox Acceptance Mask Register -#define AT91C_CAN_MB2_MFID (AT91_CAST(AT91_REG *) 0xFFFD024C) // (CAN_MB2) MailBox Family ID Register -#define AT91C_CAN_MB2_MSR (AT91_CAST(AT91_REG *) 0xFFFD0250) // (CAN_MB2) MailBox Status Register -// ========== Register definition for CAN_MB3 peripheral ========== -#define AT91C_CAN_MB3_MFID (AT91_CAST(AT91_REG *) 0xFFFD026C) // (CAN_MB3) MailBox Family ID Register -#define AT91C_CAN_MB3_MAM (AT91_CAST(AT91_REG *) 0xFFFD0264) // (CAN_MB3) MailBox Acceptance Mask Register -#define AT91C_CAN_MB3_MID (AT91_CAST(AT91_REG *) 0xFFFD0268) // (CAN_MB3) MailBox ID Register -#define AT91C_CAN_MB3_MCR (AT91_CAST(AT91_REG *) 0xFFFD027C) // (CAN_MB3) MailBox Control Register -#define AT91C_CAN_MB3_MMR (AT91_CAST(AT91_REG *) 0xFFFD0260) // (CAN_MB3) MailBox Mode Register -#define AT91C_CAN_MB3_MSR (AT91_CAST(AT91_REG *) 0xFFFD0270) // (CAN_MB3) MailBox Status Register -#define AT91C_CAN_MB3_MDL (AT91_CAST(AT91_REG *) 0xFFFD0274) // (CAN_MB3) MailBox Data Low Register -#define AT91C_CAN_MB3_MDH (AT91_CAST(AT91_REG *) 0xFFFD0278) // (CAN_MB3) MailBox Data High Register -// ========== Register definition for CAN_MB4 peripheral ========== -#define AT91C_CAN_MB4_MID (AT91_CAST(AT91_REG *) 0xFFFD0288) // (CAN_MB4) MailBox ID Register -#define AT91C_CAN_MB4_MMR (AT91_CAST(AT91_REG *) 0xFFFD0280) // (CAN_MB4) MailBox Mode Register -#define AT91C_CAN_MB4_MDH (AT91_CAST(AT91_REG *) 0xFFFD0298) // (CAN_MB4) MailBox Data High Register -#define AT91C_CAN_MB4_MFID (AT91_CAST(AT91_REG *) 0xFFFD028C) // (CAN_MB4) MailBox Family ID Register -#define AT91C_CAN_MB4_MSR (AT91_CAST(AT91_REG *) 0xFFFD0290) // (CAN_MB4) MailBox Status Register -#define AT91C_CAN_MB4_MCR (AT91_CAST(AT91_REG *) 0xFFFD029C) // (CAN_MB4) MailBox Control Register -#define AT91C_CAN_MB4_MDL (AT91_CAST(AT91_REG *) 0xFFFD0294) // (CAN_MB4) MailBox Data Low Register -#define AT91C_CAN_MB4_MAM (AT91_CAST(AT91_REG *) 0xFFFD0284) // (CAN_MB4) MailBox Acceptance Mask Register -// ========== Register definition for CAN_MB5 peripheral ========== -#define AT91C_CAN_MB5_MSR (AT91_CAST(AT91_REG *) 0xFFFD02B0) // (CAN_MB5) MailBox Status Register -#define AT91C_CAN_MB5_MCR (AT91_CAST(AT91_REG *) 0xFFFD02BC) // (CAN_MB5) MailBox Control Register -#define AT91C_CAN_MB5_MFID (AT91_CAST(AT91_REG *) 0xFFFD02AC) // (CAN_MB5) MailBox Family ID Register -#define AT91C_CAN_MB5_MDH (AT91_CAST(AT91_REG *) 0xFFFD02B8) // (CAN_MB5) MailBox Data High Register -#define AT91C_CAN_MB5_MID (AT91_CAST(AT91_REG *) 0xFFFD02A8) // (CAN_MB5) MailBox ID Register -#define AT91C_CAN_MB5_MMR (AT91_CAST(AT91_REG *) 0xFFFD02A0) // (CAN_MB5) MailBox Mode Register -#define AT91C_CAN_MB5_MDL (AT91_CAST(AT91_REG *) 0xFFFD02B4) // (CAN_MB5) MailBox Data Low Register -#define AT91C_CAN_MB5_MAM (AT91_CAST(AT91_REG *) 0xFFFD02A4) // (CAN_MB5) MailBox Acceptance Mask Register -// ========== Register definition for CAN_MB6 peripheral ========== -#define AT91C_CAN_MB6_MFID (AT91_CAST(AT91_REG *) 0xFFFD02CC) // (CAN_MB6) MailBox Family ID Register -#define AT91C_CAN_MB6_MID (AT91_CAST(AT91_REG *) 0xFFFD02C8) // (CAN_MB6) MailBox ID Register -#define AT91C_CAN_MB6_MAM (AT91_CAST(AT91_REG *) 0xFFFD02C4) // (CAN_MB6) MailBox Acceptance Mask Register -#define AT91C_CAN_MB6_MSR (AT91_CAST(AT91_REG *) 0xFFFD02D0) // (CAN_MB6) MailBox Status Register -#define AT91C_CAN_MB6_MDL (AT91_CAST(AT91_REG *) 0xFFFD02D4) // (CAN_MB6) MailBox Data Low Register -#define AT91C_CAN_MB6_MCR (AT91_CAST(AT91_REG *) 0xFFFD02DC) // (CAN_MB6) MailBox Control Register -#define AT91C_CAN_MB6_MDH (AT91_CAST(AT91_REG *) 0xFFFD02D8) // (CAN_MB6) MailBox Data High Register -#define AT91C_CAN_MB6_MMR (AT91_CAST(AT91_REG *) 0xFFFD02C0) // (CAN_MB6) MailBox Mode Register -// ========== Register definition for CAN_MB7 peripheral ========== -#define AT91C_CAN_MB7_MCR (AT91_CAST(AT91_REG *) 0xFFFD02FC) // (CAN_MB7) MailBox Control Register -#define AT91C_CAN_MB7_MDH (AT91_CAST(AT91_REG *) 0xFFFD02F8) // (CAN_MB7) MailBox Data High Register -#define AT91C_CAN_MB7_MFID (AT91_CAST(AT91_REG *) 0xFFFD02EC) // (CAN_MB7) MailBox Family ID Register -#define AT91C_CAN_MB7_MDL (AT91_CAST(AT91_REG *) 0xFFFD02F4) // (CAN_MB7) MailBox Data Low Register -#define AT91C_CAN_MB7_MID (AT91_CAST(AT91_REG *) 0xFFFD02E8) // (CAN_MB7) MailBox ID Register -#define AT91C_CAN_MB7_MMR (AT91_CAST(AT91_REG *) 0xFFFD02E0) // (CAN_MB7) MailBox Mode Register -#define AT91C_CAN_MB7_MAM (AT91_CAST(AT91_REG *) 0xFFFD02E4) // (CAN_MB7) MailBox Acceptance Mask Register -#define AT91C_CAN_MB7_MSR (AT91_CAST(AT91_REG *) 0xFFFD02F0) // (CAN_MB7) MailBox Status Register -// ========== Register definition for CAN peripheral ========== -#define AT91C_CAN_TCR (AT91_CAST(AT91_REG *) 0xFFFD0024) // (CAN) Transfer Command Register -#define AT91C_CAN_IMR (AT91_CAST(AT91_REG *) 0xFFFD000C) // (CAN) Interrupt Mask Register -#define AT91C_CAN_IER (AT91_CAST(AT91_REG *) 0xFFFD0004) // (CAN) Interrupt Enable Register -#define AT91C_CAN_ECR (AT91_CAST(AT91_REG *) 0xFFFD0020) // (CAN) Error Counter Register -#define AT91C_CAN_TIMESTP (AT91_CAST(AT91_REG *) 0xFFFD001C) // (CAN) Time Stamp Register -#define AT91C_CAN_MR (AT91_CAST(AT91_REG *) 0xFFFD0000) // (CAN) Mode Register -#define AT91C_CAN_IDR (AT91_CAST(AT91_REG *) 0xFFFD0008) // (CAN) Interrupt Disable Register -#define AT91C_CAN_ACR (AT91_CAST(AT91_REG *) 0xFFFD0028) // (CAN) Abort Command Register -#define AT91C_CAN_TIM (AT91_CAST(AT91_REG *) 0xFFFD0018) // (CAN) Timer Register -#define AT91C_CAN_SR (AT91_CAST(AT91_REG *) 0xFFFD0010) // (CAN) Status Register -#define AT91C_CAN_BR (AT91_CAST(AT91_REG *) 0xFFFD0014) // (CAN) Baudrate Register -#define AT91C_CAN_VR (AT91_CAST(AT91_REG *) 0xFFFD00FC) // (CAN) Version Register -// ========== Register definition for EMAC peripheral ========== -#define AT91C_EMAC_ISR (AT91_CAST(AT91_REG *) 0xFFFDC024) // (EMAC) Interrupt Status Register -#define AT91C_EMAC_SA4H (AT91_CAST(AT91_REG *) 0xFFFDC0B4) // (EMAC) Specific Address 4 Top, Last 2 bytes -#define AT91C_EMAC_SA1L (AT91_CAST(AT91_REG *) 0xFFFDC098) // (EMAC) Specific Address 1 Bottom, First 4 bytes -#define AT91C_EMAC_ELE (AT91_CAST(AT91_REG *) 0xFFFDC078) // (EMAC) Excessive Length Errors Register -#define AT91C_EMAC_LCOL (AT91_CAST(AT91_REG *) 0xFFFDC05C) // (EMAC) Late Collision Register -#define AT91C_EMAC_RLE (AT91_CAST(AT91_REG *) 0xFFFDC088) // (EMAC) Receive Length Field Mismatch Register -#define AT91C_EMAC_WOL (AT91_CAST(AT91_REG *) 0xFFFDC0C4) // (EMAC) Wake On LAN Register -#define AT91C_EMAC_DTF (AT91_CAST(AT91_REG *) 0xFFFDC058) // (EMAC) Deferred Transmission Frame Register -#define AT91C_EMAC_TUND (AT91_CAST(AT91_REG *) 0xFFFDC064) // (EMAC) Transmit Underrun Error Register -#define AT91C_EMAC_NCR (AT91_CAST(AT91_REG *) 0xFFFDC000) // (EMAC) Network Control Register -#define AT91C_EMAC_SA4L (AT91_CAST(AT91_REG *) 0xFFFDC0B0) // (EMAC) Specific Address 4 Bottom, First 4 bytes -#define AT91C_EMAC_RSR (AT91_CAST(AT91_REG *) 0xFFFDC020) // (EMAC) Receive Status Register -#define AT91C_EMAC_SA3L (AT91_CAST(AT91_REG *) 0xFFFDC0A8) // (EMAC) Specific Address 3 Bottom, First 4 bytes -#define AT91C_EMAC_TSR (AT91_CAST(AT91_REG *) 0xFFFDC014) // (EMAC) Transmit Status Register -#define AT91C_EMAC_IDR (AT91_CAST(AT91_REG *) 0xFFFDC02C) // (EMAC) Interrupt Disable Register -#define AT91C_EMAC_RSE (AT91_CAST(AT91_REG *) 0xFFFDC074) // (EMAC) Receive Symbol Errors Register -#define AT91C_EMAC_ECOL (AT91_CAST(AT91_REG *) 0xFFFDC060) // (EMAC) Excessive Collision Register -#define AT91C_EMAC_TID (AT91_CAST(AT91_REG *) 0xFFFDC0B8) // (EMAC) Type ID Checking Register -#define AT91C_EMAC_HRB (AT91_CAST(AT91_REG *) 0xFFFDC090) // (EMAC) Hash Address Bottom[31:0] -#define AT91C_EMAC_TBQP (AT91_CAST(AT91_REG *) 0xFFFDC01C) // (EMAC) Transmit Buffer Queue Pointer -#define AT91C_EMAC_USRIO (AT91_CAST(AT91_REG *) 0xFFFDC0C0) // (EMAC) USER Input/Output Register -#define AT91C_EMAC_PTR (AT91_CAST(AT91_REG *) 0xFFFDC038) // (EMAC) Pause Time Register -#define AT91C_EMAC_SA2H (AT91_CAST(AT91_REG *) 0xFFFDC0A4) // (EMAC) Specific Address 2 Top, Last 2 bytes -#define AT91C_EMAC_ROV (AT91_CAST(AT91_REG *) 0xFFFDC070) // (EMAC) Receive Overrun Errors Register -#define AT91C_EMAC_ALE (AT91_CAST(AT91_REG *) 0xFFFDC054) // (EMAC) Alignment Error Register -#define AT91C_EMAC_RJA (AT91_CAST(AT91_REG *) 0xFFFDC07C) // (EMAC) Receive Jabbers Register -#define AT91C_EMAC_RBQP (AT91_CAST(AT91_REG *) 0xFFFDC018) // (EMAC) Receive Buffer Queue Pointer -#define AT91C_EMAC_TPF (AT91_CAST(AT91_REG *) 0xFFFDC08C) // (EMAC) Transmitted Pause Frames Register -#define AT91C_EMAC_NCFGR (AT91_CAST(AT91_REG *) 0xFFFDC004) // (EMAC) Network Configuration Register -#define AT91C_EMAC_HRT (AT91_CAST(AT91_REG *) 0xFFFDC094) // (EMAC) Hash Address Top[63:32] -#define AT91C_EMAC_USF (AT91_CAST(AT91_REG *) 0xFFFDC080) // (EMAC) Undersize Frames Register -#define AT91C_EMAC_FCSE (AT91_CAST(AT91_REG *) 0xFFFDC050) // (EMAC) Frame Check Sequence Error Register -#define AT91C_EMAC_TPQ (AT91_CAST(AT91_REG *) 0xFFFDC0BC) // (EMAC) Transmit Pause Quantum Register -#define AT91C_EMAC_MAN (AT91_CAST(AT91_REG *) 0xFFFDC034) // (EMAC) PHY Maintenance Register -#define AT91C_EMAC_FTO (AT91_CAST(AT91_REG *) 0xFFFDC040) // (EMAC) Frames Transmitted OK Register -#define AT91C_EMAC_REV (AT91_CAST(AT91_REG *) 0xFFFDC0FC) // (EMAC) Revision Register -#define AT91C_EMAC_IMR (AT91_CAST(AT91_REG *) 0xFFFDC030) // (EMAC) Interrupt Mask Register -#define AT91C_EMAC_SCF (AT91_CAST(AT91_REG *) 0xFFFDC044) // (EMAC) Single Collision Frame Register -#define AT91C_EMAC_PFR (AT91_CAST(AT91_REG *) 0xFFFDC03C) // (EMAC) Pause Frames received Register -#define AT91C_EMAC_MCF (AT91_CAST(AT91_REG *) 0xFFFDC048) // (EMAC) Multiple Collision Frame Register -#define AT91C_EMAC_NSR (AT91_CAST(AT91_REG *) 0xFFFDC008) // (EMAC) Network Status Register -#define AT91C_EMAC_SA2L (AT91_CAST(AT91_REG *) 0xFFFDC0A0) // (EMAC) Specific Address 2 Bottom, First 4 bytes -#define AT91C_EMAC_FRO (AT91_CAST(AT91_REG *) 0xFFFDC04C) // (EMAC) Frames Received OK Register -#define AT91C_EMAC_IER (AT91_CAST(AT91_REG *) 0xFFFDC028) // (EMAC) Interrupt Enable Register -#define AT91C_EMAC_SA1H (AT91_CAST(AT91_REG *) 0xFFFDC09C) // (EMAC) Specific Address 1 Top, Last 2 bytes -#define AT91C_EMAC_CSE (AT91_CAST(AT91_REG *) 0xFFFDC068) // (EMAC) Carrier Sense Error Register -#define AT91C_EMAC_SA3H (AT91_CAST(AT91_REG *) 0xFFFDC0AC) // (EMAC) Specific Address 3 Top, Last 2 bytes -#define AT91C_EMAC_RRE (AT91_CAST(AT91_REG *) 0xFFFDC06C) // (EMAC) Receive Ressource Error Register -#define AT91C_EMAC_STE (AT91_CAST(AT91_REG *) 0xFFFDC084) // (EMAC) SQE Test Error Register -// ========== Register definition for PDC_ADC peripheral ========== -#define AT91C_ADC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD8124) // (PDC_ADC) PDC Transfer Status Register -#define AT91C_ADC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD8120) // (PDC_ADC) PDC Transfer Control Register -#define AT91C_ADC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD8118) // (PDC_ADC) Transmit Next Pointer Register -#define AT91C_ADC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD811C) // (PDC_ADC) Transmit Next Counter Register -#define AT91C_ADC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD8110) // (PDC_ADC) Receive Next Pointer Register -#define AT91C_ADC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD8114) // (PDC_ADC) Receive Next Counter Register -#define AT91C_ADC_RPR (AT91_CAST(AT91_REG *) 0xFFFD8100) // (PDC_ADC) Receive Pointer Register -#define AT91C_ADC_TCR (AT91_CAST(AT91_REG *) 0xFFFD810C) // (PDC_ADC) Transmit Counter Register -#define AT91C_ADC_TPR (AT91_CAST(AT91_REG *) 0xFFFD8108) // (PDC_ADC) Transmit Pointer Register -#define AT91C_ADC_RCR (AT91_CAST(AT91_REG *) 0xFFFD8104) // (PDC_ADC) Receive Counter Register -// ========== Register definition for ADC peripheral ========== -#define AT91C_ADC_CDR2 (AT91_CAST(AT91_REG *) 0xFFFD8038) // (ADC) ADC Channel Data Register 2 -#define AT91C_ADC_CDR3 (AT91_CAST(AT91_REG *) 0xFFFD803C) // (ADC) ADC Channel Data Register 3 -#define AT91C_ADC_CDR0 (AT91_CAST(AT91_REG *) 0xFFFD8030) // (ADC) ADC Channel Data Register 0 -#define AT91C_ADC_CDR5 (AT91_CAST(AT91_REG *) 0xFFFD8044) // (ADC) ADC Channel Data Register 5 -#define AT91C_ADC_CHDR (AT91_CAST(AT91_REG *) 0xFFFD8014) // (ADC) ADC Channel Disable Register -#define AT91C_ADC_SR (AT91_CAST(AT91_REG *) 0xFFFD801C) // (ADC) ADC Status Register -#define AT91C_ADC_CDR4 (AT91_CAST(AT91_REG *) 0xFFFD8040) // (ADC) ADC Channel Data Register 4 -#define AT91C_ADC_CDR1 (AT91_CAST(AT91_REG *) 0xFFFD8034) // (ADC) ADC Channel Data Register 1 -#define AT91C_ADC_LCDR (AT91_CAST(AT91_REG *) 0xFFFD8020) // (ADC) ADC Last Converted Data Register -#define AT91C_ADC_IDR (AT91_CAST(AT91_REG *) 0xFFFD8028) // (ADC) ADC Interrupt Disable Register -#define AT91C_ADC_CR (AT91_CAST(AT91_REG *) 0xFFFD8000) // (ADC) ADC Control Register -#define AT91C_ADC_CDR7 (AT91_CAST(AT91_REG *) 0xFFFD804C) // (ADC) ADC Channel Data Register 7 -#define AT91C_ADC_CDR6 (AT91_CAST(AT91_REG *) 0xFFFD8048) // (ADC) ADC Channel Data Register 6 -#define AT91C_ADC_IER (AT91_CAST(AT91_REG *) 0xFFFD8024) // (ADC) ADC Interrupt Enable Register -#define AT91C_ADC_CHER (AT91_CAST(AT91_REG *) 0xFFFD8010) // (ADC) ADC Channel Enable Register -#define AT91C_ADC_CHSR (AT91_CAST(AT91_REG *) 0xFFFD8018) // (ADC) ADC Channel Status Register -#define AT91C_ADC_MR (AT91_CAST(AT91_REG *) 0xFFFD8004) // (ADC) ADC Mode Register -#define AT91C_ADC_IMR (AT91_CAST(AT91_REG *) 0xFFFD802C) // (ADC) ADC Interrupt Mask Register - -// ***************************************************************************** -// PIO DEFINITIONS FOR AT91SAM7X256 -// ***************************************************************************** -#define AT91C_PIO_PA0 (1 << 0) // Pin Controlled by PA0 -#define AT91C_PA0_RXD0 (AT91C_PIO_PA0) // USART 0 Receive Data -#define AT91C_PIO_PA1 (1 << 1) // Pin Controlled by PA1 -#define AT91C_PA1_TXD0 (AT91C_PIO_PA1) // USART 0 Transmit Data -#define AT91C_PIO_PA10 (1 << 10) // Pin Controlled by PA10 -#define AT91C_PA10_TWD (AT91C_PIO_PA10) // TWI Two-wire Serial Data -#define AT91C_PIO_PA11 (1 << 11) // Pin Controlled by PA11 -#define AT91C_PA11_TWCK (AT91C_PIO_PA11) // TWI Two-wire Serial Clock -#define AT91C_PIO_PA12 (1 << 12) // Pin Controlled by PA12 -#define AT91C_PA12_SPI0_NPCS0 (AT91C_PIO_PA12) // SPI 0 Peripheral Chip Select 0 -#define AT91C_PIO_PA13 (1 << 13) // Pin Controlled by PA13 -#define AT91C_PA13_SPI0_NPCS1 (AT91C_PIO_PA13) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PA13_PCK1 (AT91C_PIO_PA13) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA14 (1 << 14) // Pin Controlled by PA14 -#define AT91C_PA14_SPI0_NPCS2 (AT91C_PIO_PA14) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PA14_IRQ1 (AT91C_PIO_PA14) // External Interrupt 1 -#define AT91C_PIO_PA15 (1 << 15) // Pin Controlled by PA15 -#define AT91C_PA15_SPI0_NPCS3 (AT91C_PIO_PA15) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PA15_TCLK2 (AT91C_PIO_PA15) // Timer Counter 2 external clock input -#define AT91C_PIO_PA16 (1 << 16) // Pin Controlled by PA16 -#define AT91C_PA16_SPI0_MISO (AT91C_PIO_PA16) // SPI 0 Master In Slave -#define AT91C_PIO_PA17 (1 << 17) // Pin Controlled by PA17 -#define AT91C_PA17_SPI0_MOSI (AT91C_PIO_PA17) // SPI 0 Master Out Slave -#define AT91C_PIO_PA18 (1 << 18) // Pin Controlled by PA18 -#define AT91C_PA18_SPI0_SPCK (AT91C_PIO_PA18) // SPI 0 Serial Clock -#define AT91C_PIO_PA19 (1 << 19) // Pin Controlled by PA19 -#define AT91C_PA19_CANRX (AT91C_PIO_PA19) // CAN Receive -#define AT91C_PIO_PA2 (1 << 2) // Pin Controlled by PA2 -#define AT91C_PA2_SCK0 (AT91C_PIO_PA2) // USART 0 Serial Clock -#define AT91C_PA2_SPI1_NPCS1 (AT91C_PIO_PA2) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PA20 (1 << 20) // Pin Controlled by PA20 -#define AT91C_PA20_CANTX (AT91C_PIO_PA20) // CAN Transmit -#define AT91C_PIO_PA21 (1 << 21) // Pin Controlled by PA21 -#define AT91C_PA21_TF (AT91C_PIO_PA21) // SSC Transmit Frame Sync -#define AT91C_PA21_SPI1_NPCS0 (AT91C_PIO_PA21) // SPI 1 Peripheral Chip Select 0 -#define AT91C_PIO_PA22 (1 << 22) // Pin Controlled by PA22 -#define AT91C_PA22_TK (AT91C_PIO_PA22) // SSC Transmit Clock -#define AT91C_PA22_SPI1_SPCK (AT91C_PIO_PA22) // SPI 1 Serial Clock -#define AT91C_PIO_PA23 (1 << 23) // Pin Controlled by PA23 -#define AT91C_PA23_TD (AT91C_PIO_PA23) // SSC Transmit data -#define AT91C_PA23_SPI1_MOSI (AT91C_PIO_PA23) // SPI 1 Master Out Slave -#define AT91C_PIO_PA24 (1 << 24) // Pin Controlled by PA24 -#define AT91C_PA24_RD (AT91C_PIO_PA24) // SSC Receive Data -#define AT91C_PA24_SPI1_MISO (AT91C_PIO_PA24) // SPI 1 Master In Slave -#define AT91C_PIO_PA25 (1 << 25) // Pin Controlled by PA25 -#define AT91C_PA25_RK (AT91C_PIO_PA25) // SSC Receive Clock -#define AT91C_PA25_SPI1_NPCS1 (AT91C_PIO_PA25) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PA26 (1 << 26) // Pin Controlled by PA26 -#define AT91C_PA26_RF (AT91C_PIO_PA26) // SSC Receive Frame Sync -#define AT91C_PA26_SPI1_NPCS2 (AT91C_PIO_PA26) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PA27 (1 << 27) // Pin Controlled by PA27 -#define AT91C_PA27_DRXD (AT91C_PIO_PA27) // DBGU Debug Receive Data -#define AT91C_PA27_PCK3 (AT91C_PIO_PA27) // PMC Programmable Clock Output 3 -#define AT91C_PIO_PA28 (1 << 28) // Pin Controlled by PA28 -#define AT91C_PA28_DTXD (AT91C_PIO_PA28) // DBGU Debug Transmit Data -#define AT91C_PIO_PA29 (1 << 29) // Pin Controlled by PA29 -#define AT91C_PA29_FIQ (AT91C_PIO_PA29) // AIC Fast Interrupt Input -#define AT91C_PA29_SPI1_NPCS3 (AT91C_PIO_PA29) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PA3 (1 << 3) // Pin Controlled by PA3 -#define AT91C_PA3_RTS0 (AT91C_PIO_PA3) // USART 0 Ready To Send -#define AT91C_PA3_SPI1_NPCS2 (AT91C_PIO_PA3) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PA30 (1 << 30) // Pin Controlled by PA30 -#define AT91C_PA30_IRQ0 (AT91C_PIO_PA30) // External Interrupt 0 -#define AT91C_PA30_PCK2 (AT91C_PIO_PA30) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA4 (1 << 4) // Pin Controlled by PA4 -#define AT91C_PA4_CTS0 (AT91C_PIO_PA4) // USART 0 Clear To Send -#define AT91C_PA4_SPI1_NPCS3 (AT91C_PIO_PA4) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PA5 (1 << 5) // Pin Controlled by PA5 -#define AT91C_PA5_RXD1 (AT91C_PIO_PA5) // USART 1 Receive Data -#define AT91C_PIO_PA6 (1 << 6) // Pin Controlled by PA6 -#define AT91C_PA6_TXD1 (AT91C_PIO_PA6) // USART 1 Transmit Data -#define AT91C_PIO_PA7 (1 << 7) // Pin Controlled by PA7 -#define AT91C_PA7_SCK1 (AT91C_PIO_PA7) // USART 1 Serial Clock -#define AT91C_PA7_SPI0_NPCS1 (AT91C_PIO_PA7) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PIO_PA8 (1 << 8) // Pin Controlled by PA8 -#define AT91C_PA8_RTS1 (AT91C_PIO_PA8) // USART 1 Ready To Send -#define AT91C_PA8_SPI0_NPCS2 (AT91C_PIO_PA8) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PIO_PA9 (1 << 9) // Pin Controlled by PA9 -#define AT91C_PA9_CTS1 (AT91C_PIO_PA9) // USART 1 Clear To Send -#define AT91C_PA9_SPI0_NPCS3 (AT91C_PIO_PA9) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PIO_PB0 (1 << 0) // Pin Controlled by PB0 -#define AT91C_PB0_ETXCK_EREFCK (AT91C_PIO_PB0) // Ethernet MAC Transmit Clock/Reference Clock -#define AT91C_PB0_PCK0 (AT91C_PIO_PB0) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PB1 (1 << 1) // Pin Controlled by PB1 -#define AT91C_PB1_ETXEN (AT91C_PIO_PB1) // Ethernet MAC Transmit Enable -#define AT91C_PIO_PB10 (1 << 10) // Pin Controlled by PB10 -#define AT91C_PB10_ETX2 (AT91C_PIO_PB10) // Ethernet MAC Transmit Data 2 -#define AT91C_PB10_SPI1_NPCS1 (AT91C_PIO_PB10) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PB11 (1 << 11) // Pin Controlled by PB11 -#define AT91C_PB11_ETX3 (AT91C_PIO_PB11) // Ethernet MAC Transmit Data 3 -#define AT91C_PB11_SPI1_NPCS2 (AT91C_PIO_PB11) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PB12 (1 << 12) // Pin Controlled by PB12 -#define AT91C_PB12_ETXER (AT91C_PIO_PB12) // Ethernet MAC Transmikt Coding Error -#define AT91C_PB12_TCLK0 (AT91C_PIO_PB12) // Timer Counter 0 external clock input -#define AT91C_PIO_PB13 (1 << 13) // Pin Controlled by PB13 -#define AT91C_PB13_ERX2 (AT91C_PIO_PB13) // Ethernet MAC Receive Data 2 -#define AT91C_PB13_SPI0_NPCS1 (AT91C_PIO_PB13) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PIO_PB14 (1 << 14) // Pin Controlled by PB14 -#define AT91C_PB14_ERX3 (AT91C_PIO_PB14) // Ethernet MAC Receive Data 3 -#define AT91C_PB14_SPI0_NPCS2 (AT91C_PIO_PB14) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PIO_PB15 (1 << 15) // Pin Controlled by PB15 -#define AT91C_PB15_ERXDV_ECRSDV (AT91C_PIO_PB15) // Ethernet MAC Receive Data Valid -#define AT91C_PIO_PB16 (1 << 16) // Pin Controlled by PB16 -#define AT91C_PB16_ECOL (AT91C_PIO_PB16) // Ethernet MAC Collision Detected -#define AT91C_PB16_SPI1_NPCS3 (AT91C_PIO_PB16) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PB17 (1 << 17) // Pin Controlled by PB17 -#define AT91C_PB17_ERXCK (AT91C_PIO_PB17) // Ethernet MAC Receive Clock -#define AT91C_PB17_SPI0_NPCS3 (AT91C_PIO_PB17) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PIO_PB18 (1 << 18) // Pin Controlled by PB18 -#define AT91C_PB18_EF100 (AT91C_PIO_PB18) // Ethernet MAC Force 100 Mbits/sec -#define AT91C_PB18_ADTRG (AT91C_PIO_PB18) // ADC External Trigger -#define AT91C_PIO_PB19 (1 << 19) // Pin Controlled by PB19 -#define AT91C_PB19_PWM0 (AT91C_PIO_PB19) // PWM Channel 0 -#define AT91C_PB19_TCLK1 (AT91C_PIO_PB19) // Timer Counter 1 external clock input -#define AT91C_PIO_PB2 (1 << 2) // Pin Controlled by PB2 -#define AT91C_PB2_ETX0 (AT91C_PIO_PB2) // Ethernet MAC Transmit Data 0 -#define AT91C_PIO_PB20 (1 << 20) // Pin Controlled by PB20 -#define AT91C_PB20_PWM1 (AT91C_PIO_PB20) // PWM Channel 1 -#define AT91C_PB20_PCK0 (AT91C_PIO_PB20) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PB21 (1 << 21) // Pin Controlled by PB21 -#define AT91C_PB21_PWM2 (AT91C_PIO_PB21) // PWM Channel 2 -#define AT91C_PB21_PCK1 (AT91C_PIO_PB21) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PB22 (1 << 22) // Pin Controlled by PB22 -#define AT91C_PB22_PWM3 (AT91C_PIO_PB22) // PWM Channel 3 -#define AT91C_PB22_PCK2 (AT91C_PIO_PB22) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PB23 (1 << 23) // Pin Controlled by PB23 -#define AT91C_PB23_TIOA0 (AT91C_PIO_PB23) // Timer Counter 0 Multipurpose Timer I/O Pin A -#define AT91C_PB23_DCD1 (AT91C_PIO_PB23) // USART 1 Data Carrier Detect -#define AT91C_PIO_PB24 (1 << 24) // Pin Controlled by PB24 -#define AT91C_PB24_TIOB0 (AT91C_PIO_PB24) // Timer Counter 0 Multipurpose Timer I/O Pin B -#define AT91C_PB24_DSR1 (AT91C_PIO_PB24) // USART 1 Data Set ready -#define AT91C_PIO_PB25 (1 << 25) // Pin Controlled by PB25 -#define AT91C_PB25_TIOA1 (AT91C_PIO_PB25) // Timer Counter 1 Multipurpose Timer I/O Pin A -#define AT91C_PB25_DTR1 (AT91C_PIO_PB25) // USART 1 Data Terminal ready -#define AT91C_PIO_PB26 (1 << 26) // Pin Controlled by PB26 -#define AT91C_PB26_TIOB1 (AT91C_PIO_PB26) // Timer Counter 1 Multipurpose Timer I/O Pin B -#define AT91C_PB26_RI1 (AT91C_PIO_PB26) // USART 1 Ring Indicator -#define AT91C_PIO_PB27 (1 << 27) // Pin Controlled by PB27 -#define AT91C_PB27_TIOA2 (AT91C_PIO_PB27) // Timer Counter 2 Multipurpose Timer I/O Pin A -#define AT91C_PB27_PWM0 (AT91C_PIO_PB27) // PWM Channel 0 -#define AT91C_PIO_PB28 (1 << 28) // Pin Controlled by PB28 -#define AT91C_PB28_TIOB2 (AT91C_PIO_PB28) // Timer Counter 2 Multipurpose Timer I/O Pin B -#define AT91C_PB28_PWM1 (AT91C_PIO_PB28) // PWM Channel 1 -#define AT91C_PIO_PB29 (1 << 29) // Pin Controlled by PB29 -#define AT91C_PB29_PCK1 (AT91C_PIO_PB29) // PMC Programmable Clock Output 1 -#define AT91C_PB29_PWM2 (AT91C_PIO_PB29) // PWM Channel 2 -#define AT91C_PIO_PB3 (1 << 3) // Pin Controlled by PB3 -#define AT91C_PB3_ETX1 (AT91C_PIO_PB3) // Ethernet MAC Transmit Data 1 -#define AT91C_PIO_PB30 (1 << 30) // Pin Controlled by PB30 -#define AT91C_PB30_PCK2 (AT91C_PIO_PB30) // PMC Programmable Clock Output 2 -#define AT91C_PB30_PWM3 (AT91C_PIO_PB30) // PWM Channel 3 -#define AT91C_PIO_PB4 (1 << 4) // Pin Controlled by PB4 -#define AT91C_PB4_ECRS (AT91C_PIO_PB4) // Ethernet MAC Carrier Sense/Carrier Sense and Data Valid -#define AT91C_PIO_PB5 (1 << 5) // Pin Controlled by PB5 -#define AT91C_PB5_ERX0 (AT91C_PIO_PB5) // Ethernet MAC Receive Data 0 -#define AT91C_PIO_PB6 (1 << 6) // Pin Controlled by PB6 -#define AT91C_PB6_ERX1 (AT91C_PIO_PB6) // Ethernet MAC Receive Data 1 -#define AT91C_PIO_PB7 (1 << 7) // Pin Controlled by PB7 -#define AT91C_PB7_ERXER (AT91C_PIO_PB7) // Ethernet MAC Receive Error -#define AT91C_PIO_PB8 (1 << 8) // Pin Controlled by PB8 -#define AT91C_PB8_EMDC (AT91C_PIO_PB8) // Ethernet MAC Management Data Clock -#define AT91C_PIO_PB9 (1 << 9) // Pin Controlled by PB9 -#define AT91C_PB9_EMDIO (AT91C_PIO_PB9) // Ethernet MAC Management Data Input/Output - -// ***************************************************************************** -// PERIPHERAL ID DEFINITIONS FOR AT91SAM7X256 -// ***************************************************************************** -#define AT91C_ID_FIQ ( 0) // Advanced Interrupt Controller (FIQ) -#define AT91C_ID_SYS ( 1) // System Peripheral -#define AT91C_ID_PIOA ( 2) // Parallel IO Controller A -#define AT91C_ID_PIOB ( 3) // Parallel IO Controller B -#define AT91C_ID_SPI0 ( 4) // Serial Peripheral Interface 0 -#define AT91C_ID_SPI1 ( 5) // Serial Peripheral Interface 1 -#define AT91C_ID_US0 ( 6) // USART 0 -#define AT91C_ID_US1 ( 7) // USART 1 -#define AT91C_ID_SSC ( 8) // Serial Synchronous Controller -#define AT91C_ID_TWI ( 9) // Two-Wire Interface -#define AT91C_ID_PWMC (10) // PWM Controller -#define AT91C_ID_UDP (11) // USB Device Port -#define AT91C_ID_TC0 (12) // Timer Counter 0 -#define AT91C_ID_TC1 (13) // Timer Counter 1 -#define AT91C_ID_TC2 (14) // Timer Counter 2 -#define AT91C_ID_CAN (15) // Control Area Network Controller -#define AT91C_ID_EMAC (16) // Ethernet MAC -#define AT91C_ID_ADC (17) // Analog-to-Digital Converter -#define AT91C_ID_18_Reserved (18) // Reserved -#define AT91C_ID_19_Reserved (19) // Reserved -#define AT91C_ID_20_Reserved (20) // Reserved -#define AT91C_ID_21_Reserved (21) // Reserved -#define AT91C_ID_22_Reserved (22) // Reserved -#define AT91C_ID_23_Reserved (23) // Reserved -#define AT91C_ID_24_Reserved (24) // Reserved -#define AT91C_ID_25_Reserved (25) // Reserved -#define AT91C_ID_26_Reserved (26) // Reserved -#define AT91C_ID_27_Reserved (27) // Reserved -#define AT91C_ID_28_Reserved (28) // Reserved -#define AT91C_ID_29_Reserved (29) // Reserved -#define AT91C_ID_IRQ0 (30) // Advanced Interrupt Controller (IRQ0) -#define AT91C_ID_IRQ1 (31) // Advanced Interrupt Controller (IRQ1) -#define AT91C_ALL_INT (0xC003FFFF) // ALL VALID INTERRUPTS - -// ***************************************************************************** -// BASE ADDRESS DEFINITIONS FOR AT91SAM7X256 -// ***************************************************************************** -#define AT91C_BASE_SYS (AT91_CAST(AT91PS_SYS) 0xFFFFF000) // (SYS) Base Address -#define AT91C_BASE_AIC (AT91_CAST(AT91PS_AIC) 0xFFFFF000) // (AIC) Base Address -#define AT91C_BASE_PDC_DBGU (AT91_CAST(AT91PS_PDC) 0xFFFFF300) // (PDC_DBGU) Base Address -#define AT91C_BASE_DBGU (AT91_CAST(AT91PS_DBGU) 0xFFFFF200) // (DBGU) Base Address -#define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address -#define AT91C_BASE_PIOB (AT91_CAST(AT91PS_PIO) 0xFFFFF600) // (PIOB) Base Address -#define AT91C_BASE_CKGR (AT91_CAST(AT91PS_CKGR) 0xFFFFFC20) // (CKGR) Base Address -#define AT91C_BASE_PMC (AT91_CAST(AT91PS_PMC) 0xFFFFFC00) // (PMC) Base Address -#define AT91C_BASE_RSTC (AT91_CAST(AT91PS_RSTC) 0xFFFFFD00) // (RSTC) Base Address -#define AT91C_BASE_RTTC (AT91_CAST(AT91PS_RTTC) 0xFFFFFD20) // (RTTC) Base Address -#define AT91C_BASE_PITC (AT91_CAST(AT91PS_PITC) 0xFFFFFD30) // (PITC) Base Address -#define AT91C_BASE_WDTC (AT91_CAST(AT91PS_WDTC) 0xFFFFFD40) // (WDTC) Base Address -#define AT91C_BASE_VREG (AT91_CAST(AT91PS_VREG) 0xFFFFFD60) // (VREG) Base Address -#define AT91C_BASE_MC (AT91_CAST(AT91PS_MC) 0xFFFFFF00) // (MC) Base Address -#define AT91C_BASE_PDC_SPI1 (AT91_CAST(AT91PS_PDC) 0xFFFE4100) // (PDC_SPI1) Base Address -#define AT91C_BASE_SPI1 (AT91_CAST(AT91PS_SPI) 0xFFFE4000) // (SPI1) Base Address -#define AT91C_BASE_PDC_SPI0 (AT91_CAST(AT91PS_PDC) 0xFFFE0100) // (PDC_SPI0) Base Address -#define AT91C_BASE_SPI0 (AT91_CAST(AT91PS_SPI) 0xFFFE0000) // (SPI0) Base Address -#define AT91C_BASE_PDC_US1 (AT91_CAST(AT91PS_PDC) 0xFFFC4100) // (PDC_US1) Base Address -#define AT91C_BASE_US1 (AT91_CAST(AT91PS_USART) 0xFFFC4000) // (US1) Base Address -#define AT91C_BASE_PDC_US0 (AT91_CAST(AT91PS_PDC) 0xFFFC0100) // (PDC_US0) Base Address -#define AT91C_BASE_US0 (AT91_CAST(AT91PS_USART) 0xFFFC0000) // (US0) Base Address -#define AT91C_BASE_PDC_SSC (AT91_CAST(AT91PS_PDC) 0xFFFD4100) // (PDC_SSC) Base Address -#define AT91C_BASE_SSC (AT91_CAST(AT91PS_SSC) 0xFFFD4000) // (SSC) Base Address -#define AT91C_BASE_TWI (AT91_CAST(AT91PS_TWI) 0xFFFB8000) // (TWI) Base Address -#define AT91C_BASE_PWMC_CH3 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC260) // (PWMC_CH3) Base Address -#define AT91C_BASE_PWMC_CH2 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC240) // (PWMC_CH2) Base Address -#define AT91C_BASE_PWMC_CH1 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC220) // (PWMC_CH1) Base Address -#define AT91C_BASE_PWMC_CH0 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC200) // (PWMC_CH0) Base Address -#define AT91C_BASE_PWMC (AT91_CAST(AT91PS_PWMC) 0xFFFCC000) // (PWMC) Base Address -#define AT91C_BASE_UDP (AT91_CAST(AT91PS_UDP) 0xFFFB0000) // (UDP) Base Address -#define AT91C_BASE_TC0 (AT91_CAST(AT91PS_TC) 0xFFFA0000) // (TC0) Base Address -#define AT91C_BASE_TC1 (AT91_CAST(AT91PS_TC) 0xFFFA0040) // (TC1) Base Address -#define AT91C_BASE_TC2 (AT91_CAST(AT91PS_TC) 0xFFFA0080) // (TC2) Base Address -#define AT91C_BASE_TCB (AT91_CAST(AT91PS_TCB) 0xFFFA0000) // (TCB) Base Address -#define AT91C_BASE_CAN_MB0 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0200) // (CAN_MB0) Base Address -#define AT91C_BASE_CAN_MB1 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0220) // (CAN_MB1) Base Address -#define AT91C_BASE_CAN_MB2 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0240) // (CAN_MB2) Base Address -#define AT91C_BASE_CAN_MB3 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0260) // (CAN_MB3) Base Address -#define AT91C_BASE_CAN_MB4 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0280) // (CAN_MB4) Base Address -#define AT91C_BASE_CAN_MB5 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD02A0) // (CAN_MB5) Base Address -#define AT91C_BASE_CAN_MB6 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD02C0) // (CAN_MB6) Base Address -#define AT91C_BASE_CAN_MB7 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD02E0) // (CAN_MB7) Base Address -#define AT91C_BASE_CAN (AT91_CAST(AT91PS_CAN) 0xFFFD0000) // (CAN) Base Address -#define AT91C_BASE_EMAC (AT91_CAST(AT91PS_EMAC) 0xFFFDC000) // (EMAC) Base Address -#define AT91C_BASE_PDC_ADC (AT91_CAST(AT91PS_PDC) 0xFFFD8100) // (PDC_ADC) Base Address -#define AT91C_BASE_ADC (AT91_CAST(AT91PS_ADC) 0xFFFD8000) // (ADC) Base Address - -// ***************************************************************************** -// MEMORY MAPPING DEFINITIONS FOR AT91SAM7X256 -// ***************************************************************************** -// ISRAM -#define AT91C_ISRAM (0x00200000) // Internal SRAM base address -#define AT91C_ISRAM_SIZE (0x00010000) // Internal SRAM size in byte (64 Kbytes) -// IFLASH -#define AT91C_IFLASH (0x00100000) // Internal FLASH base address -#define AT91C_IFLASH_SIZE (0x00040000) // Internal FLASH size in byte (256 Kbytes) -#define AT91C_IFLASH_PAGE_SIZE (256) // Internal FLASH Page Size: 256 bytes -#define AT91C_IFLASH_LOCK_REGION_SIZE (16384) // Internal FLASH Lock Region Size: 16 Kbytes -#define AT91C_IFLASH_NB_OF_PAGES (1024) // Internal FLASH Number of Pages: 1024 bytes -#define AT91C_IFLASH_NB_OF_LOCK_BITS (16) // Internal FLASH Number of Lock Bits: 16 bytes - -#endif diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X512.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X512.h deleted file mode 100644 index ea0fcb6..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/AT91SAM7X512.h +++ /dev/null @@ -1,2984 +0,0 @@ -// ---------------------------------------------------------------------------- -// ATMEL Microcontroller Software Support - ROUSSET - -// ---------------------------------------------------------------------------- -// Copyright (c) 2006, Atmel Corporation -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, -// this list of conditions and the disclaimer below. -// -// Atmel's name may not be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR -// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE -// DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// ---------------------------------------------------------------------------- -// File Name : AT91SAM7X512.h -// Object : AT91SAM7X512 definitions -// Generated : AT91 SW Application Group 07/07/2008 (16:15:41) -// -// CVS Reference : /AT91SAM7X512.pl/1.7/Wed Aug 30 14:09:17 2006// -// CVS Reference : /SYS_SAM7X.pl/1.3/Wed Feb 2 15:48:15 2005// -// CVS Reference : /MC_SAM7SE.pl/1.10/Thu Feb 16 16:35:28 2006// -// CVS Reference : /PMC_SAM7X.pl/1.4/Tue Feb 8 14:00:19 2005// -// CVS Reference : /RSTC_SAM7X.pl/1.2/Wed Jul 13 15:25:17 2005// -// CVS Reference : /UDP_6ept.pl/1.1/Wed Aug 30 10:56:49 2006// -// CVS Reference : /PWM_SAM7X.pl/1.1/Tue May 10 12:38:54 2005// -// CVS Reference : /AIC_6075B.pl/1.3/Fri May 20 14:21:42 2005// -// CVS Reference : /PIO_6057A.pl/1.2/Thu Feb 3 10:29:42 2005// -// CVS Reference : /RTTC_6081A.pl/1.2/Thu Nov 4 13:57:22 2004// -// CVS Reference : /PITC_6079A.pl/1.2/Thu Nov 4 13:56:22 2004// -// CVS Reference : /WDTC_6080A.pl/1.3/Thu Nov 4 13:58:52 2004// -// CVS Reference : /VREG_6085B.pl/1.1/Tue Feb 1 16:40:38 2005// -// CVS Reference : /PDC_6074C.pl/1.2/Thu Feb 3 09:02:11 2005// -// CVS Reference : /DBGU_6059D.pl/1.1/Mon Jan 31 13:54:41 2005// -// CVS Reference : /SPI_6088D.pl/1.3/Fri May 20 14:23:02 2005// -// CVS Reference : /US_6089C.pl/1.1/Mon Jan 31 13:56:02 2005// -// CVS Reference : /SSC_6078B.pl/1.2/Wed Apr 16 08:28:18 2008// -// CVS Reference : /TWI_6061A.pl/1.2/Fri Oct 27 11:40:48 2006// -// CVS Reference : /TC_6082A.pl/1.7/Wed Mar 9 16:31:51 2005// -// CVS Reference : /CAN_6019B.pl/1.1/Mon Jan 31 13:54:30 2005// -// CVS Reference : /EMACB_6119A.pl/1.6/Wed Jul 13 15:25:00 2005// -// CVS Reference : /ADC_6051C.pl/1.1/Mon Jan 31 13:12:40 2005// -// ---------------------------------------------------------------------------- - -#ifndef AT91SAM7X512_H -#define AT91SAM7X512_H - -#ifndef __ASSEMBLY__ -typedef volatile unsigned int AT91_REG;// Hardware register definition -#define AT91_CAST(a) (a) -#else -#define AT91_CAST(a) -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR System Peripherals -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SYS { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register - AT91_REG Reserved2[45]; // - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved3[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved4[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register - AT91_REG Reserved5[54]; // - AT91_REG PIOA_PER; // PIO Enable Register - AT91_REG PIOA_PDR; // PIO Disable Register - AT91_REG PIOA_PSR; // PIO Status Register - AT91_REG Reserved6[1]; // - AT91_REG PIOA_OER; // Output Enable Register - AT91_REG PIOA_ODR; // Output Disable Registerr - AT91_REG PIOA_OSR; // Output Status Register - AT91_REG Reserved7[1]; // - AT91_REG PIOA_IFER; // Input Filter Enable Register - AT91_REG PIOA_IFDR; // Input Filter Disable Register - AT91_REG PIOA_IFSR; // Input Filter Status Register - AT91_REG Reserved8[1]; // - AT91_REG PIOA_SODR; // Set Output Data Register - AT91_REG PIOA_CODR; // Clear Output Data Register - AT91_REG PIOA_ODSR; // Output Data Status Register - AT91_REG PIOA_PDSR; // Pin Data Status Register - AT91_REG PIOA_IER; // Interrupt Enable Register - AT91_REG PIOA_IDR; // Interrupt Disable Register - AT91_REG PIOA_IMR; // Interrupt Mask Register - AT91_REG PIOA_ISR; // Interrupt Status Register - AT91_REG PIOA_MDER; // Multi-driver Enable Register - AT91_REG PIOA_MDDR; // Multi-driver Disable Register - AT91_REG PIOA_MDSR; // Multi-driver Status Register - AT91_REG Reserved9[1]; // - AT91_REG PIOA_PPUDR; // Pull-up Disable Register - AT91_REG PIOA_PPUER; // Pull-up Enable Register - AT91_REG PIOA_PPUSR; // Pull-up Status Register - AT91_REG Reserved10[1]; // - AT91_REG PIOA_ASR; // Select A Register - AT91_REG PIOA_BSR; // Select B Register - AT91_REG PIOA_ABSR; // AB Select Status Register - AT91_REG Reserved11[9]; // - AT91_REG PIOA_OWER; // Output Write Enable Register - AT91_REG PIOA_OWDR; // Output Write Disable Register - AT91_REG PIOA_OWSR; // Output Write Status Register - AT91_REG Reserved12[85]; // - AT91_REG PIOB_PER; // PIO Enable Register - AT91_REG PIOB_PDR; // PIO Disable Register - AT91_REG PIOB_PSR; // PIO Status Register - AT91_REG Reserved13[1]; // - AT91_REG PIOB_OER; // Output Enable Register - AT91_REG PIOB_ODR; // Output Disable Registerr - AT91_REG PIOB_OSR; // Output Status Register - AT91_REG Reserved14[1]; // - AT91_REG PIOB_IFER; // Input Filter Enable Register - AT91_REG PIOB_IFDR; // Input Filter Disable Register - AT91_REG PIOB_IFSR; // Input Filter Status Register - AT91_REG Reserved15[1]; // - AT91_REG PIOB_SODR; // Set Output Data Register - AT91_REG PIOB_CODR; // Clear Output Data Register - AT91_REG PIOB_ODSR; // Output Data Status Register - AT91_REG PIOB_PDSR; // Pin Data Status Register - AT91_REG PIOB_IER; // Interrupt Enable Register - AT91_REG PIOB_IDR; // Interrupt Disable Register - AT91_REG PIOB_IMR; // Interrupt Mask Register - AT91_REG PIOB_ISR; // Interrupt Status Register - AT91_REG PIOB_MDER; // Multi-driver Enable Register - AT91_REG PIOB_MDDR; // Multi-driver Disable Register - AT91_REG PIOB_MDSR; // Multi-driver Status Register - AT91_REG Reserved16[1]; // - AT91_REG PIOB_PPUDR; // Pull-up Disable Register - AT91_REG PIOB_PPUER; // Pull-up Enable Register - AT91_REG PIOB_PPUSR; // Pull-up Status Register - AT91_REG Reserved17[1]; // - AT91_REG PIOB_ASR; // Select A Register - AT91_REG PIOB_BSR; // Select B Register - AT91_REG PIOB_ABSR; // AB Select Status Register - AT91_REG Reserved18[9]; // - AT91_REG PIOB_OWER; // Output Write Enable Register - AT91_REG PIOB_OWDR; // Output Write Disable Register - AT91_REG PIOB_OWSR; // Output Write Status Register - AT91_REG Reserved19[341]; // - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved20[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved21[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved22[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved23[3]; // - AT91_REG PMC_PCKR[4]; // Programmable Clock Register - AT91_REG Reserved24[4]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register - AT91_REG Reserved25[36]; // - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register - AT91_REG Reserved26[5]; // - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register - AT91_REG Reserved27[5]; // - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_SYS, *AT91PS_SYS; -#else - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Advanced Interrupt Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_AIC { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register -} AT91S_AIC, *AT91PS_AIC; -#else -#define AIC_SMR (AT91_CAST(AT91_REG *) 0x00000000) // (AIC_SMR) Source Mode Register -#define AIC_SVR (AT91_CAST(AT91_REG *) 0x00000080) // (AIC_SVR) Source Vector Register -#define AIC_IVR (AT91_CAST(AT91_REG *) 0x00000100) // (AIC_IVR) IRQ Vector Register -#define AIC_FVR (AT91_CAST(AT91_REG *) 0x00000104) // (AIC_FVR) FIQ Vector Register -#define AIC_ISR (AT91_CAST(AT91_REG *) 0x00000108) // (AIC_ISR) Interrupt Status Register -#define AIC_IPR (AT91_CAST(AT91_REG *) 0x0000010C) // (AIC_IPR) Interrupt Pending Register -#define AIC_IMR (AT91_CAST(AT91_REG *) 0x00000110) // (AIC_IMR) Interrupt Mask Register -#define AIC_CISR (AT91_CAST(AT91_REG *) 0x00000114) // (AIC_CISR) Core Interrupt Status Register -#define AIC_IECR (AT91_CAST(AT91_REG *) 0x00000120) // (AIC_IECR) Interrupt Enable Command Register -#define AIC_IDCR (AT91_CAST(AT91_REG *) 0x00000124) // (AIC_IDCR) Interrupt Disable Command Register -#define AIC_ICCR (AT91_CAST(AT91_REG *) 0x00000128) // (AIC_ICCR) Interrupt Clear Command Register -#define AIC_ISCR (AT91_CAST(AT91_REG *) 0x0000012C) // (AIC_ISCR) Interrupt Set Command Register -#define AIC_EOICR (AT91_CAST(AT91_REG *) 0x00000130) // (AIC_EOICR) End of Interrupt Command Register -#define AIC_SPU (AT91_CAST(AT91_REG *) 0x00000134) // (AIC_SPU) Spurious Vector Register -#define AIC_DCR (AT91_CAST(AT91_REG *) 0x00000138) // (AIC_DCR) Debug Control Register (Protect) -#define AIC_FFER (AT91_CAST(AT91_REG *) 0x00000140) // (AIC_FFER) Fast Forcing Enable Register -#define AIC_FFDR (AT91_CAST(AT91_REG *) 0x00000144) // (AIC_FFDR) Fast Forcing Disable Register -#define AIC_FFSR (AT91_CAST(AT91_REG *) 0x00000148) // (AIC_FFSR) Fast Forcing Status Register - -#endif -// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- -#define AT91C_AIC_PRIOR (0x7 << 0) // (AIC) Priority Level -#define AT91C_AIC_PRIOR_LOWEST (0x0) // (AIC) Lowest priority level -#define AT91C_AIC_PRIOR_HIGHEST (0x7) // (AIC) Highest priority level -#define AT91C_AIC_SRCTYPE (0x3 << 5) // (AIC) Interrupt Source Type -#define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL (0x0 << 5) // (AIC) Internal Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL (0x0 << 5) // (AIC) External Sources Code Label Low-level Sensitive -#define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE (0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered -#define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE (0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered -#define AT91C_AIC_SRCTYPE_HIGH_LEVEL (0x2 << 5) // (AIC) Internal Or External Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_POSITIVE_EDGE (0x3 << 5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered -// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- -#define AT91C_AIC_NFIQ (0x1 << 0) // (AIC) NFIQ Status -#define AT91C_AIC_NIRQ (0x1 << 1) // (AIC) NIRQ Status -// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- -#define AT91C_AIC_DCR_PROT (0x1 << 0) // (AIC) Protection Mode -#define AT91C_AIC_DCR_GMSK (0x1 << 1) // (AIC) General Mask - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Peripheral DMA Controller -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PDC { - AT91_REG PDC_RPR; // Receive Pointer Register - AT91_REG PDC_RCR; // Receive Counter Register - AT91_REG PDC_TPR; // Transmit Pointer Register - AT91_REG PDC_TCR; // Transmit Counter Register - AT91_REG PDC_RNPR; // Receive Next Pointer Register - AT91_REG PDC_RNCR; // Receive Next Counter Register - AT91_REG PDC_TNPR; // Transmit Next Pointer Register - AT91_REG PDC_TNCR; // Transmit Next Counter Register - AT91_REG PDC_PTCR; // PDC Transfer Control Register - AT91_REG PDC_PTSR; // PDC Transfer Status Register -} AT91S_PDC, *AT91PS_PDC; -#else -#define PDC_RPR (AT91_CAST(AT91_REG *) 0x00000000) // (PDC_RPR) Receive Pointer Register -#define PDC_RCR (AT91_CAST(AT91_REG *) 0x00000004) // (PDC_RCR) Receive Counter Register -#define PDC_TPR (AT91_CAST(AT91_REG *) 0x00000008) // (PDC_TPR) Transmit Pointer Register -#define PDC_TCR (AT91_CAST(AT91_REG *) 0x0000000C) // (PDC_TCR) Transmit Counter Register -#define PDC_RNPR (AT91_CAST(AT91_REG *) 0x00000010) // (PDC_RNPR) Receive Next Pointer Register -#define PDC_RNCR (AT91_CAST(AT91_REG *) 0x00000014) // (PDC_RNCR) Receive Next Counter Register -#define PDC_TNPR (AT91_CAST(AT91_REG *) 0x00000018) // (PDC_TNPR) Transmit Next Pointer Register -#define PDC_TNCR (AT91_CAST(AT91_REG *) 0x0000001C) // (PDC_TNCR) Transmit Next Counter Register -#define PDC_PTCR (AT91_CAST(AT91_REG *) 0x00000020) // (PDC_PTCR) PDC Transfer Control Register -#define PDC_PTSR (AT91_CAST(AT91_REG *) 0x00000024) // (PDC_PTSR) PDC Transfer Status Register - -#endif -// -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- -#define AT91C_PDC_RXTEN (0x1 << 0) // (PDC) Receiver Transfer Enable -#define AT91C_PDC_RXTDIS (0x1 << 1) // (PDC) Receiver Transfer Disable -#define AT91C_PDC_TXTEN (0x1 << 8) // (PDC) Transmitter Transfer Enable -#define AT91C_PDC_TXTDIS (0x1 << 9) // (PDC) Transmitter Transfer Disable -// -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Debug Unit -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_DBGU { - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved0[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved1[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register -} AT91S_DBGU, *AT91PS_DBGU; -#else -#define DBGU_CR (AT91_CAST(AT91_REG *) 0x00000000) // (DBGU_CR) Control Register -#define DBGU_MR (AT91_CAST(AT91_REG *) 0x00000004) // (DBGU_MR) Mode Register -#define DBGU_IER (AT91_CAST(AT91_REG *) 0x00000008) // (DBGU_IER) Interrupt Enable Register -#define DBGU_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (DBGU_IDR) Interrupt Disable Register -#define DBGU_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (DBGU_IMR) Interrupt Mask Register -#define DBGU_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (DBGU_CSR) Channel Status Register -#define DBGU_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (DBGU_RHR) Receiver Holding Register -#define DBGU_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (DBGU_THR) Transmitter Holding Register -#define DBGU_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (DBGU_BRGR) Baud Rate Generator Register -#define DBGU_CIDR (AT91_CAST(AT91_REG *) 0x00000040) // (DBGU_CIDR) Chip ID Register -#define DBGU_EXID (AT91_CAST(AT91_REG *) 0x00000044) // (DBGU_EXID) Chip ID Extension Register -#define DBGU_FNTR (AT91_CAST(AT91_REG *) 0x00000048) // (DBGU_FNTR) Force NTRST Register - -#endif -// -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_RSTRX (0x1 << 2) // (DBGU) Reset Receiver -#define AT91C_US_RSTTX (0x1 << 3) // (DBGU) Reset Transmitter -#define AT91C_US_RXEN (0x1 << 4) // (DBGU) Receiver Enable -#define AT91C_US_RXDIS (0x1 << 5) // (DBGU) Receiver Disable -#define AT91C_US_TXEN (0x1 << 6) // (DBGU) Transmitter Enable -#define AT91C_US_TXDIS (0x1 << 7) // (DBGU) Transmitter Disable -#define AT91C_US_RSTSTA (0x1 << 8) // (DBGU) Reset Status Bits -// -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_PAR (0x7 << 9) // (DBGU) Parity type -#define AT91C_US_PAR_EVEN (0x0 << 9) // (DBGU) Even Parity -#define AT91C_US_PAR_ODD (0x1 << 9) // (DBGU) Odd Parity -#define AT91C_US_PAR_SPACE (0x2 << 9) // (DBGU) Parity forced to 0 (Space) -#define AT91C_US_PAR_MARK (0x3 << 9) // (DBGU) Parity forced to 1 (Mark) -#define AT91C_US_PAR_NONE (0x4 << 9) // (DBGU) No Parity -#define AT91C_US_PAR_MULTI_DROP (0x6 << 9) // (DBGU) Multi-drop mode -#define AT91C_US_CHMODE (0x3 << 14) // (DBGU) Channel Mode -#define AT91C_US_CHMODE_NORMAL (0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART. -#define AT91C_US_CHMODE_AUTO (0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin. -#define AT91C_US_CHMODE_LOCAL (0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal. -#define AT91C_US_CHMODE_REMOTE (0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin. -// -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXRDY (0x1 << 0) // (DBGU) RXRDY Interrupt -#define AT91C_US_TXRDY (0x1 << 1) // (DBGU) TXRDY Interrupt -#define AT91C_US_ENDRX (0x1 << 3) // (DBGU) End of Receive Transfer Interrupt -#define AT91C_US_ENDTX (0x1 << 4) // (DBGU) End of Transmit Interrupt -#define AT91C_US_OVRE (0x1 << 5) // (DBGU) Overrun Interrupt -#define AT91C_US_FRAME (0x1 << 6) // (DBGU) Framing Error Interrupt -#define AT91C_US_PARE (0x1 << 7) // (DBGU) Parity Error Interrupt -#define AT91C_US_TXEMPTY (0x1 << 9) // (DBGU) TXEMPTY Interrupt -#define AT91C_US_TXBUFE (0x1 << 11) // (DBGU) TXBUFE Interrupt -#define AT91C_US_RXBUFF (0x1 << 12) // (DBGU) RXBUFF Interrupt -#define AT91C_US_COMM_TX (0x1 << 30) // (DBGU) COMM_TX Interrupt -#define AT91C_US_COMM_RX (0x1 << 31) // (DBGU) COMM_RX Interrupt -// -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register -------- -// -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register -------- -#define AT91C_US_FORCE_NTRST (0x1 << 0) // (DBGU) Force NTRST in JTAG - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Parallel Input Output Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PIO { - AT91_REG PIO_PER; // PIO Enable Register - AT91_REG PIO_PDR; // PIO Disable Register - AT91_REG PIO_PSR; // PIO Status Register - AT91_REG Reserved0[1]; // - AT91_REG PIO_OER; // Output Enable Register - AT91_REG PIO_ODR; // Output Disable Registerr - AT91_REG PIO_OSR; // Output Status Register - AT91_REG Reserved1[1]; // - AT91_REG PIO_IFER; // Input Filter Enable Register - AT91_REG PIO_IFDR; // Input Filter Disable Register - AT91_REG PIO_IFSR; // Input Filter Status Register - AT91_REG Reserved2[1]; // - AT91_REG PIO_SODR; // Set Output Data Register - AT91_REG PIO_CODR; // Clear Output Data Register - AT91_REG PIO_ODSR; // Output Data Status Register - AT91_REG PIO_PDSR; // Pin Data Status Register - AT91_REG PIO_IER; // Interrupt Enable Register - AT91_REG PIO_IDR; // Interrupt Disable Register - AT91_REG PIO_IMR; // Interrupt Mask Register - AT91_REG PIO_ISR; // Interrupt Status Register - AT91_REG PIO_MDER; // Multi-driver Enable Register - AT91_REG PIO_MDDR; // Multi-driver Disable Register - AT91_REG PIO_MDSR; // Multi-driver Status Register - AT91_REG Reserved3[1]; // - AT91_REG PIO_PPUDR; // Pull-up Disable Register - AT91_REG PIO_PPUER; // Pull-up Enable Register - AT91_REG PIO_PPUSR; // Pull-up Status Register - AT91_REG Reserved4[1]; // - AT91_REG PIO_ASR; // Select A Register - AT91_REG PIO_BSR; // Select B Register - AT91_REG PIO_ABSR; // AB Select Status Register - AT91_REG Reserved5[9]; // - AT91_REG PIO_OWER; // Output Write Enable Register - AT91_REG PIO_OWDR; // Output Write Disable Register - AT91_REG PIO_OWSR; // Output Write Status Register -} AT91S_PIO, *AT91PS_PIO; -#else -#define PIO_PER (AT91_CAST(AT91_REG *) 0x00000000) // (PIO_PER) PIO Enable Register -#define PIO_PDR (AT91_CAST(AT91_REG *) 0x00000004) // (PIO_PDR) PIO Disable Register -#define PIO_PSR (AT91_CAST(AT91_REG *) 0x00000008) // (PIO_PSR) PIO Status Register -#define PIO_OER (AT91_CAST(AT91_REG *) 0x00000010) // (PIO_OER) Output Enable Register -#define PIO_ODR (AT91_CAST(AT91_REG *) 0x00000014) // (PIO_ODR) Output Disable Registerr -#define PIO_OSR (AT91_CAST(AT91_REG *) 0x00000018) // (PIO_OSR) Output Status Register -#define PIO_IFER (AT91_CAST(AT91_REG *) 0x00000020) // (PIO_IFER) Input Filter Enable Register -#define PIO_IFDR (AT91_CAST(AT91_REG *) 0x00000024) // (PIO_IFDR) Input Filter Disable Register -#define PIO_IFSR (AT91_CAST(AT91_REG *) 0x00000028) // (PIO_IFSR) Input Filter Status Register -#define PIO_SODR (AT91_CAST(AT91_REG *) 0x00000030) // (PIO_SODR) Set Output Data Register -#define PIO_CODR (AT91_CAST(AT91_REG *) 0x00000034) // (PIO_CODR) Clear Output Data Register -#define PIO_ODSR (AT91_CAST(AT91_REG *) 0x00000038) // (PIO_ODSR) Output Data Status Register -#define PIO_PDSR (AT91_CAST(AT91_REG *) 0x0000003C) // (PIO_PDSR) Pin Data Status Register -#define PIO_IER (AT91_CAST(AT91_REG *) 0x00000040) // (PIO_IER) Interrupt Enable Register -#define PIO_IDR (AT91_CAST(AT91_REG *) 0x00000044) // (PIO_IDR) Interrupt Disable Register -#define PIO_IMR (AT91_CAST(AT91_REG *) 0x00000048) // (PIO_IMR) Interrupt Mask Register -#define PIO_ISR (AT91_CAST(AT91_REG *) 0x0000004C) // (PIO_ISR) Interrupt Status Register -#define PIO_MDER (AT91_CAST(AT91_REG *) 0x00000050) // (PIO_MDER) Multi-driver Enable Register -#define PIO_MDDR (AT91_CAST(AT91_REG *) 0x00000054) // (PIO_MDDR) Multi-driver Disable Register -#define PIO_MDSR (AT91_CAST(AT91_REG *) 0x00000058) // (PIO_MDSR) Multi-driver Status Register -#define PIO_PPUDR (AT91_CAST(AT91_REG *) 0x00000060) // (PIO_PPUDR) Pull-up Disable Register -#define PIO_PPUER (AT91_CAST(AT91_REG *) 0x00000064) // (PIO_PPUER) Pull-up Enable Register -#define PIO_PPUSR (AT91_CAST(AT91_REG *) 0x00000068) // (PIO_PPUSR) Pull-up Status Register -#define PIO_ASR (AT91_CAST(AT91_REG *) 0x00000070) // (PIO_ASR) Select A Register -#define PIO_BSR (AT91_CAST(AT91_REG *) 0x00000074) // (PIO_BSR) Select B Register -#define PIO_ABSR (AT91_CAST(AT91_REG *) 0x00000078) // (PIO_ABSR) AB Select Status Register -#define PIO_OWER (AT91_CAST(AT91_REG *) 0x000000A0) // (PIO_OWER) Output Write Enable Register -#define PIO_OWDR (AT91_CAST(AT91_REG *) 0x000000A4) // (PIO_OWDR) Output Write Disable Register -#define PIO_OWSR (AT91_CAST(AT91_REG *) 0x000000A8) // (PIO_OWSR) Output Write Status Register - -#endif - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Clock Generator Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CKGR { - AT91_REG CKGR_MOR; // Main Oscillator Register - AT91_REG CKGR_MCFR; // Main Clock Frequency Register - AT91_REG Reserved0[1]; // - AT91_REG CKGR_PLLR; // PLL Register -} AT91S_CKGR, *AT91PS_CKGR; -#else -#define CKGR_MOR (AT91_CAST(AT91_REG *) 0x00000000) // (CKGR_MOR) Main Oscillator Register -#define CKGR_MCFR (AT91_CAST(AT91_REG *) 0x00000004) // (CKGR_MCFR) Main Clock Frequency Register -#define CKGR_PLLR (AT91_CAST(AT91_REG *) 0x0000000C) // (CKGR_PLLR) PLL Register - -#endif -// -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- -#define AT91C_CKGR_MOSCEN (0x1 << 0) // (CKGR) Main Oscillator Enable -#define AT91C_CKGR_OSCBYPASS (0x1 << 1) // (CKGR) Main Oscillator Bypass -#define AT91C_CKGR_OSCOUNT (0xFF << 8) // (CKGR) Main Oscillator Start-up Time -// -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- -#define AT91C_CKGR_MAINF (0xFFFF << 0) // (CKGR) Main Clock Frequency -#define AT91C_CKGR_MAINRDY (0x1 << 16) // (CKGR) Main Clock Ready -// -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register -------- -#define AT91C_CKGR_DIV (0xFF << 0) // (CKGR) Divider Selected -#define AT91C_CKGR_DIV_0 (0x0) // (CKGR) Divider output is 0 -#define AT91C_CKGR_DIV_BYPASS (0x1) // (CKGR) Divider is bypassed -#define AT91C_CKGR_PLLCOUNT (0x3F << 8) // (CKGR) PLL Counter -#define AT91C_CKGR_OUT (0x3 << 14) // (CKGR) PLL Output Frequency Range -#define AT91C_CKGR_OUT_0 (0x0 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_1 (0x1 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_2 (0x2 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_3 (0x3 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_MUL (0x7FF << 16) // (CKGR) PLL Multiplier -#define AT91C_CKGR_USBDIV (0x3 << 28) // (CKGR) Divider for USB Clocks -#define AT91C_CKGR_USBDIV_0 (0x0 << 28) // (CKGR) Divider output is PLL clock output -#define AT91C_CKGR_USBDIV_1 (0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2 -#define AT91C_CKGR_USBDIV_2 (0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Power Management Controler -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PMC { - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved0[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved1[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved2[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved3[3]; // - AT91_REG PMC_PCKR[4]; // Programmable Clock Register - AT91_REG Reserved4[4]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register -} AT91S_PMC, *AT91PS_PMC; -#else -#define PMC_SCER (AT91_CAST(AT91_REG *) 0x00000000) // (PMC_SCER) System Clock Enable Register -#define PMC_SCDR (AT91_CAST(AT91_REG *) 0x00000004) // (PMC_SCDR) System Clock Disable Register -#define PMC_SCSR (AT91_CAST(AT91_REG *) 0x00000008) // (PMC_SCSR) System Clock Status Register -#define PMC_PCER (AT91_CAST(AT91_REG *) 0x00000010) // (PMC_PCER) Peripheral Clock Enable Register -#define PMC_PCDR (AT91_CAST(AT91_REG *) 0x00000014) // (PMC_PCDR) Peripheral Clock Disable Register -#define PMC_PCSR (AT91_CAST(AT91_REG *) 0x00000018) // (PMC_PCSR) Peripheral Clock Status Register -#define PMC_MCKR (AT91_CAST(AT91_REG *) 0x00000030) // (PMC_MCKR) Master Clock Register -#define PMC_PCKR (AT91_CAST(AT91_REG *) 0x00000040) // (PMC_PCKR) Programmable Clock Register -#define PMC_IER (AT91_CAST(AT91_REG *) 0x00000060) // (PMC_IER) Interrupt Enable Register -#define PMC_IDR (AT91_CAST(AT91_REG *) 0x00000064) // (PMC_IDR) Interrupt Disable Register -#define PMC_SR (AT91_CAST(AT91_REG *) 0x00000068) // (PMC_SR) Status Register -#define PMC_IMR (AT91_CAST(AT91_REG *) 0x0000006C) // (PMC_IMR) Interrupt Mask Register - -#endif -// -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register -------- -#define AT91C_PMC_PCK (0x1 << 0) // (PMC) Processor Clock -#define AT91C_PMC_UDP (0x1 << 7) // (PMC) USB Device Port Clock -#define AT91C_PMC_PCK0 (0x1 << 8) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK1 (0x1 << 9) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK2 (0x1 << 10) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK3 (0x1 << 11) // (PMC) Programmable Clock Output -// -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register -------- -// -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------- -// -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register -------- -// -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register -------- -// -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register -------- -// -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register -------- -#define AT91C_PMC_CSS (0x3 << 0) // (PMC) Programmable Clock Selection -#define AT91C_PMC_CSS_SLOW_CLK (0x0) // (PMC) Slow Clock is selected -#define AT91C_PMC_CSS_MAIN_CLK (0x1) // (PMC) Main Clock is selected -#define AT91C_PMC_CSS_PLL_CLK (0x3) // (PMC) Clock from PLL is selected -#define AT91C_PMC_PRES (0x7 << 2) // (PMC) Programmable Clock Prescaler -#define AT91C_PMC_PRES_CLK (0x0 << 2) // (PMC) Selected clock -#define AT91C_PMC_PRES_CLK_2 (0x1 << 2) // (PMC) Selected clock divided by 2 -#define AT91C_PMC_PRES_CLK_4 (0x2 << 2) // (PMC) Selected clock divided by 4 -#define AT91C_PMC_PRES_CLK_8 (0x3 << 2) // (PMC) Selected clock divided by 8 -#define AT91C_PMC_PRES_CLK_16 (0x4 << 2) // (PMC) Selected clock divided by 16 -#define AT91C_PMC_PRES_CLK_32 (0x5 << 2) // (PMC) Selected clock divided by 32 -#define AT91C_PMC_PRES_CLK_64 (0x6 << 2) // (PMC) Selected clock divided by 64 -// -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register -------- -// -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------- -#define AT91C_PMC_MOSCS (0x1 << 0) // (PMC) MOSC Status/Enable/Disable/Mask -#define AT91C_PMC_LOCK (0x1 << 2) // (PMC) PLL Status/Enable/Disable/Mask -#define AT91C_PMC_MCKRDY (0x1 << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK0RDY (0x1 << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK1RDY (0x1 << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK2RDY (0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK3RDY (0x1 << 11) // (PMC) PCK3_RDY Status/Enable/Disable/Mask -// -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register -------- -// -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register -------- -// -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Reset Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RSTC { - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register -} AT91S_RSTC, *AT91PS_RSTC; -#else -#define RSTC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (RSTC_RCR) Reset Control Register -#define RSTC_RSR (AT91_CAST(AT91_REG *) 0x00000004) // (RSTC_RSR) Reset Status Register -#define RSTC_RMR (AT91_CAST(AT91_REG *) 0x00000008) // (RSTC_RMR) Reset Mode Register - -#endif -// -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register -------- -#define AT91C_RSTC_PROCRST (0x1 << 0) // (RSTC) Processor Reset -#define AT91C_RSTC_PERRST (0x1 << 2) // (RSTC) Peripheral Reset -#define AT91C_RSTC_EXTRST (0x1 << 3) // (RSTC) External Reset -#define AT91C_RSTC_KEY (0xFF << 24) // (RSTC) Password -// -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register -------- -#define AT91C_RSTC_URSTS (0x1 << 0) // (RSTC) User Reset Status -#define AT91C_RSTC_BODSTS (0x1 << 1) // (RSTC) Brownout Detection Status -#define AT91C_RSTC_RSTTYP (0x7 << 8) // (RSTC) Reset Type -#define AT91C_RSTC_RSTTYP_POWERUP (0x0 << 8) // (RSTC) Power-up Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WAKEUP (0x1 << 8) // (RSTC) WakeUp Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WATCHDOG (0x2 << 8) // (RSTC) Watchdog Reset. Watchdog overflow occured. -#define AT91C_RSTC_RSTTYP_SOFTWARE (0x3 << 8) // (RSTC) Software Reset. Processor reset required by the software. -#define AT91C_RSTC_RSTTYP_USER (0x4 << 8) // (RSTC) User Reset. NRST pin detected low. -#define AT91C_RSTC_RSTTYP_BROWNOUT (0x5 << 8) // (RSTC) Brownout Reset occured. -#define AT91C_RSTC_NRSTL (0x1 << 16) // (RSTC) NRST pin level -#define AT91C_RSTC_SRCMP (0x1 << 17) // (RSTC) Software Reset Command in Progress. -// -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register -------- -#define AT91C_RSTC_URSTEN (0x1 << 0) // (RSTC) User Reset Enable -#define AT91C_RSTC_URSTIEN (0x1 << 4) // (RSTC) User Reset Interrupt Enable -#define AT91C_RSTC_ERSTL (0xF << 8) // (RSTC) User Reset Length -#define AT91C_RSTC_BODIEN (0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Real Time Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_RTTC { - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register -} AT91S_RTTC, *AT91PS_RTTC; -#else -#define RTTC_RTMR (AT91_CAST(AT91_REG *) 0x00000000) // (RTTC_RTMR) Real-time Mode Register -#define RTTC_RTAR (AT91_CAST(AT91_REG *) 0x00000004) // (RTTC_RTAR) Real-time Alarm Register -#define RTTC_RTVR (AT91_CAST(AT91_REG *) 0x00000008) // (RTTC_RTVR) Real-time Value Register -#define RTTC_RTSR (AT91_CAST(AT91_REG *) 0x0000000C) // (RTTC_RTSR) Real-time Status Register - -#endif -// -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register -------- -#define AT91C_RTTC_RTPRES (0xFFFF << 0) // (RTTC) Real-time Timer Prescaler Value -#define AT91C_RTTC_ALMIEN (0x1 << 16) // (RTTC) Alarm Interrupt Enable -#define AT91C_RTTC_RTTINCIEN (0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable -#define AT91C_RTTC_RTTRST (0x1 << 18) // (RTTC) Real Time Timer Restart -// -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register -------- -#define AT91C_RTTC_ALMV (0x0 << 0) // (RTTC) Alarm Value -// -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register -------- -#define AT91C_RTTC_CRTV (0x0 << 0) // (RTTC) Current Real-time Value -// -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register -------- -#define AT91C_RTTC_ALMS (0x1 << 0) // (RTTC) Real-time Alarm Status -#define AT91C_RTTC_RTTINC (0x1 << 1) // (RTTC) Real-time Timer Increment - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Periodic Interval Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PITC { - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register -} AT91S_PITC, *AT91PS_PITC; -#else -#define PITC_PIMR (AT91_CAST(AT91_REG *) 0x00000000) // (PITC_PIMR) Period Interval Mode Register -#define PITC_PISR (AT91_CAST(AT91_REG *) 0x00000004) // (PITC_PISR) Period Interval Status Register -#define PITC_PIVR (AT91_CAST(AT91_REG *) 0x00000008) // (PITC_PIVR) Period Interval Value Register -#define PITC_PIIR (AT91_CAST(AT91_REG *) 0x0000000C) // (PITC_PIIR) Period Interval Image Register - -#endif -// -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register -------- -#define AT91C_PITC_PIV (0xFFFFF << 0) // (PITC) Periodic Interval Value -#define AT91C_PITC_PITEN (0x1 << 24) // (PITC) Periodic Interval Timer Enabled -#define AT91C_PITC_PITIEN (0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable -// -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register -------- -#define AT91C_PITC_PITS (0x1 << 0) // (PITC) Periodic Interval Timer Status -// -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register -------- -#define AT91C_PITC_CPIV (0xFFFFF << 0) // (PITC) Current Periodic Interval Value -#define AT91C_PITC_PICNT (0xFFF << 20) // (PITC) Periodic Interval Counter -// -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Watchdog Timer Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_WDTC { - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register -} AT91S_WDTC, *AT91PS_WDTC; -#else -#define WDTC_WDCR (AT91_CAST(AT91_REG *) 0x00000000) // (WDTC_WDCR) Watchdog Control Register -#define WDTC_WDMR (AT91_CAST(AT91_REG *) 0x00000004) // (WDTC_WDMR) Watchdog Mode Register -#define WDTC_WDSR (AT91_CAST(AT91_REG *) 0x00000008) // (WDTC_WDSR) Watchdog Status Register - -#endif -// -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register -------- -#define AT91C_WDTC_WDRSTT (0x1 << 0) // (WDTC) Watchdog Restart -#define AT91C_WDTC_KEY (0xFF << 24) // (WDTC) Watchdog KEY Password -// -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register -------- -#define AT91C_WDTC_WDV (0xFFF << 0) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDFIEN (0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable -#define AT91C_WDTC_WDRSTEN (0x1 << 13) // (WDTC) Watchdog Reset Enable -#define AT91C_WDTC_WDRPROC (0x1 << 14) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDDIS (0x1 << 15) // (WDTC) Watchdog Disable -#define AT91C_WDTC_WDD (0xFFF << 16) // (WDTC) Watchdog Delta Value -#define AT91C_WDTC_WDDBGHLT (0x1 << 28) // (WDTC) Watchdog Debug Halt -#define AT91C_WDTC_WDIDLEHLT (0x1 << 29) // (WDTC) Watchdog Idle Halt -// -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register -------- -#define AT91C_WDTC_WDUNF (0x1 << 0) // (WDTC) Watchdog Underflow -#define AT91C_WDTC_WDERR (0x1 << 1) // (WDTC) Watchdog Error - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Voltage Regulator Mode Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_VREG { - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_VREG, *AT91PS_VREG; -#else -#define VREG_MR (AT91_CAST(AT91_REG *) 0x00000000) // (VREG_MR) Voltage Regulator Mode Register - -#endif -// -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register -------- -#define AT91C_VREG_PSTDBY (0x1 << 0) // (VREG) Voltage Regulator Power Standby Mode - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Embedded Flash Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_EFC { - AT91_REG EFC_FMR; // MC Flash Mode Register - AT91_REG EFC_FCR; // MC Flash Command Register - AT91_REG EFC_FSR; // MC Flash Status Register - AT91_REG EFC_VR; // MC Flash Version Register -} AT91S_EFC, *AT91PS_EFC; -#else -#define MC_FMR (AT91_CAST(AT91_REG *) 0x00000000) // (MC_FMR) MC Flash Mode Register -#define MC_FCR (AT91_CAST(AT91_REG *) 0x00000004) // (MC_FCR) MC Flash Command Register -#define MC_FSR (AT91_CAST(AT91_REG *) 0x00000008) // (MC_FSR) MC Flash Status Register -#define MC_VR (AT91_CAST(AT91_REG *) 0x0000000C) // (MC_VR) MC Flash Version Register - -#endif -// -------- MC_FMR : (EFC Offset: 0x0) MC Flash Mode Register -------- -#define AT91C_MC_FRDY (0x1 << 0) // (EFC) Flash Ready -#define AT91C_MC_LOCKE (0x1 << 2) // (EFC) Lock Error -#define AT91C_MC_PROGE (0x1 << 3) // (EFC) Programming Error -#define AT91C_MC_NEBP (0x1 << 7) // (EFC) No Erase Before Programming -#define AT91C_MC_FWS (0x3 << 8) // (EFC) Flash Wait State -#define AT91C_MC_FWS_0FWS (0x0 << 8) // (EFC) 1 cycle for Read, 2 for Write operations -#define AT91C_MC_FWS_1FWS (0x1 << 8) // (EFC) 2 cycles for Read, 3 for Write operations -#define AT91C_MC_FWS_2FWS (0x2 << 8) // (EFC) 3 cycles for Read, 4 for Write operations -#define AT91C_MC_FWS_3FWS (0x3 << 8) // (EFC) 4 cycles for Read, 4 for Write operations -#define AT91C_MC_FMCN (0xFF << 16) // (EFC) Flash Microsecond Cycle Number -// -------- MC_FCR : (EFC Offset: 0x4) MC Flash Command Register -------- -#define AT91C_MC_FCMD (0xF << 0) // (EFC) Flash Command -#define AT91C_MC_FCMD_START_PROG (0x1) // (EFC) Starts the programming of th epage specified by PAGEN. -#define AT91C_MC_FCMD_LOCK (0x2) // (EFC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_PROG_AND_LOCK (0x3) // (EFC) The lock sequence automatically happens after the programming sequence is completed. -#define AT91C_MC_FCMD_UNLOCK (0x4) // (EFC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_ERASE_ALL (0x8) // (EFC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled. -#define AT91C_MC_FCMD_SET_GP_NVM (0xB) // (EFC) Set General Purpose NVM bits. -#define AT91C_MC_FCMD_CLR_GP_NVM (0xD) // (EFC) Clear General Purpose NVM bits. -#define AT91C_MC_FCMD_SET_SECURITY (0xF) // (EFC) Set Security Bit. -#define AT91C_MC_PAGEN (0x3FF << 8) // (EFC) Page Number -#define AT91C_MC_KEY (0xFF << 24) // (EFC) Writing Protect Key -// -------- MC_FSR : (EFC Offset: 0x8) MC Flash Command Register -------- -#define AT91C_MC_SECURITY (0x1 << 4) // (EFC) Security Bit Status -#define AT91C_MC_GPNVM0 (0x1 << 8) // (EFC) Sector 0 Lock Status -#define AT91C_MC_GPNVM1 (0x1 << 9) // (EFC) Sector 1 Lock Status -#define AT91C_MC_GPNVM2 (0x1 << 10) // (EFC) Sector 2 Lock Status -#define AT91C_MC_GPNVM3 (0x1 << 11) // (EFC) Sector 3 Lock Status -#define AT91C_MC_GPNVM4 (0x1 << 12) // (EFC) Sector 4 Lock Status -#define AT91C_MC_GPNVM5 (0x1 << 13) // (EFC) Sector 5 Lock Status -#define AT91C_MC_GPNVM6 (0x1 << 14) // (EFC) Sector 6 Lock Status -#define AT91C_MC_GPNVM7 (0x1 << 15) // (EFC) Sector 7 Lock Status -#define AT91C_MC_LOCKS0 (0x1 << 16) // (EFC) Sector 0 Lock Status -#define AT91C_MC_LOCKS1 (0x1 << 17) // (EFC) Sector 1 Lock Status -#define AT91C_MC_LOCKS2 (0x1 << 18) // (EFC) Sector 2 Lock Status -#define AT91C_MC_LOCKS3 (0x1 << 19) // (EFC) Sector 3 Lock Status -#define AT91C_MC_LOCKS4 (0x1 << 20) // (EFC) Sector 4 Lock Status -#define AT91C_MC_LOCKS5 (0x1 << 21) // (EFC) Sector 5 Lock Status -#define AT91C_MC_LOCKS6 (0x1 << 22) // (EFC) Sector 6 Lock Status -#define AT91C_MC_LOCKS7 (0x1 << 23) // (EFC) Sector 7 Lock Status -#define AT91C_MC_LOCKS8 (0x1 << 24) // (EFC) Sector 8 Lock Status -#define AT91C_MC_LOCKS9 (0x1 << 25) // (EFC) Sector 9 Lock Status -#define AT91C_MC_LOCKS10 (0x1 << 26) // (EFC) Sector 10 Lock Status -#define AT91C_MC_LOCKS11 (0x1 << 27) // (EFC) Sector 11 Lock Status -#define AT91C_MC_LOCKS12 (0x1 << 28) // (EFC) Sector 12 Lock Status -#define AT91C_MC_LOCKS13 (0x1 << 29) // (EFC) Sector 13 Lock Status -#define AT91C_MC_LOCKS14 (0x1 << 30) // (EFC) Sector 14 Lock Status -#define AT91C_MC_LOCKS15 (0x1 << 31) // (EFC) Sector 15 Lock Status -// -------- EFC_VR : (EFC Offset: 0xc) EFC version register -------- -#define AT91C_EFC_VERSION (0xFFF << 0) // (EFC) EFC version number -#define AT91C_EFC_MFN (0x7 << 16) // (EFC) EFC MFN - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Memory Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_MC { - AT91_REG MC_RCR; // MC Remap Control Register - AT91_REG MC_ASR; // MC Abort Status Register - AT91_REG MC_AASR; // MC Abort Address Status Register - AT91_REG Reserved0[1]; // - AT91_REG MC_PUIA[16]; // MC Protection Unit Area - AT91_REG MC_PUP; // MC Protection Unit Peripherals - AT91_REG MC_PUER; // MC Protection Unit Enable Register - AT91_REG Reserved1[2]; // - AT91_REG MC0_FMR; // MC Flash Mode Register - AT91_REG MC0_FCR; // MC Flash Command Register - AT91_REG MC0_FSR; // MC Flash Status Register - AT91_REG MC0_VR; // MC Flash Version Register - AT91_REG MC1_FMR; // MC Flash Mode Register - AT91_REG MC1_FCR; // MC Flash Command Register - AT91_REG MC1_FSR; // MC Flash Status Register - AT91_REG MC1_VR; // MC Flash Version Register -} AT91S_MC, *AT91PS_MC; -#else -#define MC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (MC_RCR) MC Remap Control Register -#define MC_ASR (AT91_CAST(AT91_REG *) 0x00000004) // (MC_ASR) MC Abort Status Register -#define MC_AASR (AT91_CAST(AT91_REG *) 0x00000008) // (MC_AASR) MC Abort Address Status Register -#define MC_PUIA (AT91_CAST(AT91_REG *) 0x00000010) // (MC_PUIA) MC Protection Unit Area -#define MC_PUP (AT91_CAST(AT91_REG *) 0x00000050) // (MC_PUP) MC Protection Unit Peripherals -#define MC_PUER (AT91_CAST(AT91_REG *) 0x00000054) // (MC_PUER) MC Protection Unit Enable Register - -#endif -// -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register -------- -#define AT91C_MC_RCB (0x1 << 0) // (MC) Remap Command Bit -// -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register -------- -#define AT91C_MC_UNDADD (0x1 << 0) // (MC) Undefined Addess Abort Status -#define AT91C_MC_MISADD (0x1 << 1) // (MC) Misaligned Addess Abort Status -#define AT91C_MC_MPU (0x1 << 2) // (MC) Memory protection Unit Abort Status -#define AT91C_MC_ABTSZ (0x3 << 8) // (MC) Abort Size Status -#define AT91C_MC_ABTSZ_BYTE (0x0 << 8) // (MC) Byte -#define AT91C_MC_ABTSZ_HWORD (0x1 << 8) // (MC) Half-word -#define AT91C_MC_ABTSZ_WORD (0x2 << 8) // (MC) Word -#define AT91C_MC_ABTTYP (0x3 << 10) // (MC) Abort Type Status -#define AT91C_MC_ABTTYP_DATAR (0x0 << 10) // (MC) Data Read -#define AT91C_MC_ABTTYP_DATAW (0x1 << 10) // (MC) Data Write -#define AT91C_MC_ABTTYP_FETCH (0x2 << 10) // (MC) Code Fetch -#define AT91C_MC_MST0 (0x1 << 16) // (MC) Master 0 Abort Source -#define AT91C_MC_MST1 (0x1 << 17) // (MC) Master 1 Abort Source -#define AT91C_MC_SVMST0 (0x1 << 24) // (MC) Saved Master 0 Abort Source -#define AT91C_MC_SVMST1 (0x1 << 25) // (MC) Saved Master 1 Abort Source -// -------- MC_PUIA : (MC Offset: 0x10) MC Protection Unit Area -------- -#define AT91C_MC_PROT (0x3 << 0) // (MC) Protection -#define AT91C_MC_PROT_PNAUNA (0x0) // (MC) Privilege: No Access, User: No Access -#define AT91C_MC_PROT_PRWUNA (0x1) // (MC) Privilege: Read/Write, User: No Access -#define AT91C_MC_PROT_PRWURO (0x2) // (MC) Privilege: Read/Write, User: Read Only -#define AT91C_MC_PROT_PRWURW (0x3) // (MC) Privilege: Read/Write, User: Read/Write -#define AT91C_MC_SIZE (0xF << 4) // (MC) Internal Area Size -#define AT91C_MC_SIZE_1KB (0x0 << 4) // (MC) Area size 1KByte -#define AT91C_MC_SIZE_2KB (0x1 << 4) // (MC) Area size 2KByte -#define AT91C_MC_SIZE_4KB (0x2 << 4) // (MC) Area size 4KByte -#define AT91C_MC_SIZE_8KB (0x3 << 4) // (MC) Area size 8KByte -#define AT91C_MC_SIZE_16KB (0x4 << 4) // (MC) Area size 16KByte -#define AT91C_MC_SIZE_32KB (0x5 << 4) // (MC) Area size 32KByte -#define AT91C_MC_SIZE_64KB (0x6 << 4) // (MC) Area size 64KByte -#define AT91C_MC_SIZE_128KB (0x7 << 4) // (MC) Area size 128KByte -#define AT91C_MC_SIZE_256KB (0x8 << 4) // (MC) Area size 256KByte -#define AT91C_MC_SIZE_512KB (0x9 << 4) // (MC) Area size 512KByte -#define AT91C_MC_SIZE_1MB (0xA << 4) // (MC) Area size 1MByte -#define AT91C_MC_SIZE_2MB (0xB << 4) // (MC) Area size 2MByte -#define AT91C_MC_SIZE_4MB (0xC << 4) // (MC) Area size 4MByte -#define AT91C_MC_SIZE_8MB (0xD << 4) // (MC) Area size 8MByte -#define AT91C_MC_SIZE_16MB (0xE << 4) // (MC) Area size 16MByte -#define AT91C_MC_SIZE_64MB (0xF << 4) // (MC) Area size 64MByte -#define AT91C_MC_BA (0x3FFFF << 10) // (MC) Internal Area Base Address -// -------- MC_PUP : (MC Offset: 0x50) MC Protection Unit Peripheral -------- -// -------- MC_PUER : (MC Offset: 0x54) MC Protection Unit Area -------- -#define AT91C_MC_PUEB (0x1 << 0) // (MC) Protection Unit enable Bit - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Serial Parallel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SPI { - AT91_REG SPI_CR; // Control Register - AT91_REG SPI_MR; // Mode Register - AT91_REG SPI_RDR; // Receive Data Register - AT91_REG SPI_TDR; // Transmit Data Register - AT91_REG SPI_SR; // Status Register - AT91_REG SPI_IER; // Interrupt Enable Register - AT91_REG SPI_IDR; // Interrupt Disable Register - AT91_REG SPI_IMR; // Interrupt Mask Register - AT91_REG Reserved0[4]; // - AT91_REG SPI_CSR[4]; // Chip Select Register - AT91_REG Reserved1[48]; // - AT91_REG SPI_RPR; // Receive Pointer Register - AT91_REG SPI_RCR; // Receive Counter Register - AT91_REG SPI_TPR; // Transmit Pointer Register - AT91_REG SPI_TCR; // Transmit Counter Register - AT91_REG SPI_RNPR; // Receive Next Pointer Register - AT91_REG SPI_RNCR; // Receive Next Counter Register - AT91_REG SPI_TNPR; // Transmit Next Pointer Register - AT91_REG SPI_TNCR; // Transmit Next Counter Register - AT91_REG SPI_PTCR; // PDC Transfer Control Register - AT91_REG SPI_PTSR; // PDC Transfer Status Register -} AT91S_SPI, *AT91PS_SPI; -#else -#define SPI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SPI_CR) Control Register -#define SPI_MR (AT91_CAST(AT91_REG *) 0x00000004) // (SPI_MR) Mode Register -#define SPI_RDR (AT91_CAST(AT91_REG *) 0x00000008) // (SPI_RDR) Receive Data Register -#define SPI_TDR (AT91_CAST(AT91_REG *) 0x0000000C) // (SPI_TDR) Transmit Data Register -#define SPI_SR (AT91_CAST(AT91_REG *) 0x00000010) // (SPI_SR) Status Register -#define SPI_IER (AT91_CAST(AT91_REG *) 0x00000014) // (SPI_IER) Interrupt Enable Register -#define SPI_IDR (AT91_CAST(AT91_REG *) 0x00000018) // (SPI_IDR) Interrupt Disable Register -#define SPI_IMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SPI_IMR) Interrupt Mask Register -#define SPI_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (SPI_CSR) Chip Select Register - -#endif -// -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- -#define AT91C_SPI_SPIEN (0x1 << 0) // (SPI) SPI Enable -#define AT91C_SPI_SPIDIS (0x1 << 1) // (SPI) SPI Disable -#define AT91C_SPI_SWRST (0x1 << 7) // (SPI) SPI Software reset -#define AT91C_SPI_LASTXFER (0x1 << 24) // (SPI) SPI Last Transfer -// -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- -#define AT91C_SPI_MSTR (0x1 << 0) // (SPI) Master/Slave Mode -#define AT91C_SPI_PS (0x1 << 1) // (SPI) Peripheral Select -#define AT91C_SPI_PS_FIXED (0x0 << 1) // (SPI) Fixed Peripheral Select -#define AT91C_SPI_PS_VARIABLE (0x1 << 1) // (SPI) Variable Peripheral Select -#define AT91C_SPI_PCSDEC (0x1 << 2) // (SPI) Chip Select Decode -#define AT91C_SPI_FDIV (0x1 << 3) // (SPI) Clock Selection -#define AT91C_SPI_MODFDIS (0x1 << 4) // (SPI) Mode Fault Detection -#define AT91C_SPI_LLB (0x1 << 7) // (SPI) Clock Selection -#define AT91C_SPI_PCS (0xF << 16) // (SPI) Peripheral Chip Select -#define AT91C_SPI_DLYBCS (0xFF << 24) // (SPI) Delay Between Chip Selects -// -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- -#define AT91C_SPI_RD (0xFFFF << 0) // (SPI) Receive Data -#define AT91C_SPI_RPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- -#define AT91C_SPI_TD (0xFFFF << 0) // (SPI) Transmit Data -#define AT91C_SPI_TPCS (0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- -#define AT91C_SPI_RDRF (0x1 << 0) // (SPI) Receive Data Register Full -#define AT91C_SPI_TDRE (0x1 << 1) // (SPI) Transmit Data Register Empty -#define AT91C_SPI_MODF (0x1 << 2) // (SPI) Mode Fault Error -#define AT91C_SPI_OVRES (0x1 << 3) // (SPI) Overrun Error Status -#define AT91C_SPI_ENDRX (0x1 << 4) // (SPI) End of Receiver Transfer -#define AT91C_SPI_ENDTX (0x1 << 5) // (SPI) End of Receiver Transfer -#define AT91C_SPI_RXBUFF (0x1 << 6) // (SPI) RXBUFF Interrupt -#define AT91C_SPI_TXBUFE (0x1 << 7) // (SPI) TXBUFE Interrupt -#define AT91C_SPI_NSSR (0x1 << 8) // (SPI) NSSR Interrupt -#define AT91C_SPI_TXEMPTY (0x1 << 9) // (SPI) TXEMPTY Interrupt -#define AT91C_SPI_SPIENS (0x1 << 16) // (SPI) Enable Status -// -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- -// -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- -// -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- -// -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- -#define AT91C_SPI_CPOL (0x1 << 0) // (SPI) Clock Polarity -#define AT91C_SPI_NCPHA (0x1 << 1) // (SPI) Clock Phase -#define AT91C_SPI_CSAAT (0x1 << 3) // (SPI) Chip Select Active After Transfer -#define AT91C_SPI_BITS (0xF << 4) // (SPI) Bits Per Transfer -#define AT91C_SPI_BITS_8 (0x0 << 4) // (SPI) 8 Bits Per transfer -#define AT91C_SPI_BITS_9 (0x1 << 4) // (SPI) 9 Bits Per transfer -#define AT91C_SPI_BITS_10 (0x2 << 4) // (SPI) 10 Bits Per transfer -#define AT91C_SPI_BITS_11 (0x3 << 4) // (SPI) 11 Bits Per transfer -#define AT91C_SPI_BITS_12 (0x4 << 4) // (SPI) 12 Bits Per transfer -#define AT91C_SPI_BITS_13 (0x5 << 4) // (SPI) 13 Bits Per transfer -#define AT91C_SPI_BITS_14 (0x6 << 4) // (SPI) 14 Bits Per transfer -#define AT91C_SPI_BITS_15 (0x7 << 4) // (SPI) 15 Bits Per transfer -#define AT91C_SPI_BITS_16 (0x8 << 4) // (SPI) 16 Bits Per transfer -#define AT91C_SPI_SCBR (0xFF << 8) // (SPI) Serial Clock Baud Rate -#define AT91C_SPI_DLYBS (0xFF << 16) // (SPI) Delay Before SPCK -#define AT91C_SPI_DLYBCT (0xFF << 24) // (SPI) Delay Between Consecutive Transfers - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Usart -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_USART { - AT91_REG US_CR; // Control Register - AT91_REG US_MR; // Mode Register - AT91_REG US_IER; // Interrupt Enable Register - AT91_REG US_IDR; // Interrupt Disable Register - AT91_REG US_IMR; // Interrupt Mask Register - AT91_REG US_CSR; // Channel Status Register - AT91_REG US_RHR; // Receiver Holding Register - AT91_REG US_THR; // Transmitter Holding Register - AT91_REG US_BRGR; // Baud Rate Generator Register - AT91_REG US_RTOR; // Receiver Time-out Register - AT91_REG US_TTGR; // Transmitter Time-guard Register - AT91_REG Reserved0[5]; // - AT91_REG US_FIDI; // FI_DI_Ratio Register - AT91_REG US_NER; // Nb Errors Register - AT91_REG Reserved1[1]; // - AT91_REG US_IF; // IRDA_FILTER Register - AT91_REG Reserved2[44]; // - AT91_REG US_RPR; // Receive Pointer Register - AT91_REG US_RCR; // Receive Counter Register - AT91_REG US_TPR; // Transmit Pointer Register - AT91_REG US_TCR; // Transmit Counter Register - AT91_REG US_RNPR; // Receive Next Pointer Register - AT91_REG US_RNCR; // Receive Next Counter Register - AT91_REG US_TNPR; // Transmit Next Pointer Register - AT91_REG US_TNCR; // Transmit Next Counter Register - AT91_REG US_PTCR; // PDC Transfer Control Register - AT91_REG US_PTSR; // PDC Transfer Status Register -} AT91S_USART, *AT91PS_USART; -#else -#define US_CR (AT91_CAST(AT91_REG *) 0x00000000) // (US_CR) Control Register -#define US_MR (AT91_CAST(AT91_REG *) 0x00000004) // (US_MR) Mode Register -#define US_IER (AT91_CAST(AT91_REG *) 0x00000008) // (US_IER) Interrupt Enable Register -#define US_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (US_IDR) Interrupt Disable Register -#define US_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (US_IMR) Interrupt Mask Register -#define US_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (US_CSR) Channel Status Register -#define US_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (US_RHR) Receiver Holding Register -#define US_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (US_THR) Transmitter Holding Register -#define US_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (US_BRGR) Baud Rate Generator Register -#define US_RTOR (AT91_CAST(AT91_REG *) 0x00000024) // (US_RTOR) Receiver Time-out Register -#define US_TTGR (AT91_CAST(AT91_REG *) 0x00000028) // (US_TTGR) Transmitter Time-guard Register -#define US_FIDI (AT91_CAST(AT91_REG *) 0x00000040) // (US_FIDI) FI_DI_Ratio Register -#define US_NER (AT91_CAST(AT91_REG *) 0x00000044) // (US_NER) Nb Errors Register -#define US_IF (AT91_CAST(AT91_REG *) 0x0000004C) // (US_IF) IRDA_FILTER Register - -#endif -// -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_STTBRK (0x1 << 9) // (USART) Start Break -#define AT91C_US_STPBRK (0x1 << 10) // (USART) Stop Break -#define AT91C_US_STTTO (0x1 << 11) // (USART) Start Time-out -#define AT91C_US_SENDA (0x1 << 12) // (USART) Send Address -#define AT91C_US_RSTIT (0x1 << 13) // (USART) Reset Iterations -#define AT91C_US_RSTNACK (0x1 << 14) // (USART) Reset Non Acknowledge -#define AT91C_US_RETTO (0x1 << 15) // (USART) Rearm Time-out -#define AT91C_US_DTREN (0x1 << 16) // (USART) Data Terminal ready Enable -#define AT91C_US_DTRDIS (0x1 << 17) // (USART) Data Terminal ready Disable -#define AT91C_US_RTSEN (0x1 << 18) // (USART) Request to Send enable -#define AT91C_US_RTSDIS (0x1 << 19) // (USART) Request to Send Disable -// -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_USMODE (0xF << 0) // (USART) Usart mode -#define AT91C_US_USMODE_NORMAL (0x0) // (USART) Normal -#define AT91C_US_USMODE_RS485 (0x1) // (USART) RS485 -#define AT91C_US_USMODE_HWHSH (0x2) // (USART) Hardware Handshaking -#define AT91C_US_USMODE_MODEM (0x3) // (USART) Modem -#define AT91C_US_USMODE_ISO7816_0 (0x4) // (USART) ISO7816 protocol: T = 0 -#define AT91C_US_USMODE_ISO7816_1 (0x6) // (USART) ISO7816 protocol: T = 1 -#define AT91C_US_USMODE_IRDA (0x8) // (USART) IrDA -#define AT91C_US_USMODE_SWHSH (0xC) // (USART) Software Handshaking -#define AT91C_US_CLKS (0x3 << 4) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CLKS_CLOCK (0x0 << 4) // (USART) Clock -#define AT91C_US_CLKS_FDIV1 (0x1 << 4) // (USART) fdiv1 -#define AT91C_US_CLKS_SLOW (0x2 << 4) // (USART) slow_clock (ARM) -#define AT91C_US_CLKS_EXT (0x3 << 4) // (USART) External (SCK) -#define AT91C_US_CHRL (0x3 << 6) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CHRL_5_BITS (0x0 << 6) // (USART) Character Length: 5 bits -#define AT91C_US_CHRL_6_BITS (0x1 << 6) // (USART) Character Length: 6 bits -#define AT91C_US_CHRL_7_BITS (0x2 << 6) // (USART) Character Length: 7 bits -#define AT91C_US_CHRL_8_BITS (0x3 << 6) // (USART) Character Length: 8 bits -#define AT91C_US_SYNC (0x1 << 8) // (USART) Synchronous Mode Select -#define AT91C_US_NBSTOP (0x3 << 12) // (USART) Number of Stop bits -#define AT91C_US_NBSTOP_1_BIT (0x0 << 12) // (USART) 1 stop bit -#define AT91C_US_NBSTOP_15_BIT (0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits -#define AT91C_US_NBSTOP_2_BIT (0x2 << 12) // (USART) 2 stop bits -#define AT91C_US_MSBF (0x1 << 16) // (USART) Bit Order -#define AT91C_US_MODE9 (0x1 << 17) // (USART) 9-bit Character length -#define AT91C_US_CKLO (0x1 << 18) // (USART) Clock Output Select -#define AT91C_US_OVER (0x1 << 19) // (USART) Over Sampling Mode -#define AT91C_US_INACK (0x1 << 20) // (USART) Inhibit Non Acknowledge -#define AT91C_US_DSNACK (0x1 << 21) // (USART) Disable Successive NACK -#define AT91C_US_MAX_ITER (0x1 << 24) // (USART) Number of Repetitions -#define AT91C_US_FILTER (0x1 << 28) // (USART) Receive Line Filter -// -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXBRK (0x1 << 2) // (USART) Break Received/End of Break -#define AT91C_US_TIMEOUT (0x1 << 8) // (USART) Receiver Time-out -#define AT91C_US_ITERATION (0x1 << 10) // (USART) Max number of Repetitions Reached -#define AT91C_US_NACK (0x1 << 13) // (USART) Non Acknowledge -#define AT91C_US_RIIC (0x1 << 16) // (USART) Ring INdicator Input Change Flag -#define AT91C_US_DSRIC (0x1 << 17) // (USART) Data Set Ready Input Change Flag -#define AT91C_US_DCDIC (0x1 << 18) // (USART) Data Carrier Flag -#define AT91C_US_CTSIC (0x1 << 19) // (USART) Clear To Send Input Change Flag -// -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register -------- -#define AT91C_US_RI (0x1 << 20) // (USART) Image of RI Input -#define AT91C_US_DSR (0x1 << 21) // (USART) Image of DSR Input -#define AT91C_US_DCD (0x1 << 22) // (USART) Image of DCD Input -#define AT91C_US_CTS (0x1 << 23) // (USART) Image of CTS Input - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_SSC { - AT91_REG SSC_CR; // Control Register - AT91_REG SSC_CMR; // Clock Mode Register - AT91_REG Reserved0[2]; // - AT91_REG SSC_RCMR; // Receive Clock ModeRegister - AT91_REG SSC_RFMR; // Receive Frame Mode Register - AT91_REG SSC_TCMR; // Transmit Clock Mode Register - AT91_REG SSC_TFMR; // Transmit Frame Mode Register - AT91_REG SSC_RHR; // Receive Holding Register - AT91_REG SSC_THR; // Transmit Holding Register - AT91_REG Reserved1[2]; // - AT91_REG SSC_RSHR; // Receive Sync Holding Register - AT91_REG SSC_TSHR; // Transmit Sync Holding Register - AT91_REG Reserved2[2]; // - AT91_REG SSC_SR; // Status Register - AT91_REG SSC_IER; // Interrupt Enable Register - AT91_REG SSC_IDR; // Interrupt Disable Register - AT91_REG SSC_IMR; // Interrupt Mask Register - AT91_REG Reserved3[44]; // - AT91_REG SSC_RPR; // Receive Pointer Register - AT91_REG SSC_RCR; // Receive Counter Register - AT91_REG SSC_TPR; // Transmit Pointer Register - AT91_REG SSC_TCR; // Transmit Counter Register - AT91_REG SSC_RNPR; // Receive Next Pointer Register - AT91_REG SSC_RNCR; // Receive Next Counter Register - AT91_REG SSC_TNPR; // Transmit Next Pointer Register - AT91_REG SSC_TNCR; // Transmit Next Counter Register - AT91_REG SSC_PTCR; // PDC Transfer Control Register - AT91_REG SSC_PTSR; // PDC Transfer Status Register -} AT91S_SSC, *AT91PS_SSC; -#else -#define SSC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SSC_CR) Control Register -#define SSC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (SSC_CMR) Clock Mode Register -#define SSC_RCMR (AT91_CAST(AT91_REG *) 0x00000010) // (SSC_RCMR) Receive Clock ModeRegister -#define SSC_RFMR (AT91_CAST(AT91_REG *) 0x00000014) // (SSC_RFMR) Receive Frame Mode Register -#define SSC_TCMR (AT91_CAST(AT91_REG *) 0x00000018) // (SSC_TCMR) Transmit Clock Mode Register -#define SSC_TFMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SSC_TFMR) Transmit Frame Mode Register -#define SSC_RHR (AT91_CAST(AT91_REG *) 0x00000020) // (SSC_RHR) Receive Holding Register -#define SSC_THR (AT91_CAST(AT91_REG *) 0x00000024) // (SSC_THR) Transmit Holding Register -#define SSC_RSHR (AT91_CAST(AT91_REG *) 0x00000030) // (SSC_RSHR) Receive Sync Holding Register -#define SSC_TSHR (AT91_CAST(AT91_REG *) 0x00000034) // (SSC_TSHR) Transmit Sync Holding Register -#define SSC_SR (AT91_CAST(AT91_REG *) 0x00000040) // (SSC_SR) Status Register -#define SSC_IER (AT91_CAST(AT91_REG *) 0x00000044) // (SSC_IER) Interrupt Enable Register -#define SSC_IDR (AT91_CAST(AT91_REG *) 0x00000048) // (SSC_IDR) Interrupt Disable Register -#define SSC_IMR (AT91_CAST(AT91_REG *) 0x0000004C) // (SSC_IMR) Interrupt Mask Register - -#endif -// -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register -------- -#define AT91C_SSC_RXEN (0x1 << 0) // (SSC) Receive Enable -#define AT91C_SSC_RXDIS (0x1 << 1) // (SSC) Receive Disable -#define AT91C_SSC_TXEN (0x1 << 8) // (SSC) Transmit Enable -#define AT91C_SSC_TXDIS (0x1 << 9) // (SSC) Transmit Disable -#define AT91C_SSC_SWRST (0x1 << 15) // (SSC) Software Reset -// -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register -------- -#define AT91C_SSC_CKS (0x3 << 0) // (SSC) Receive/Transmit Clock Selection -#define AT91C_SSC_CKS_DIV (0x0) // (SSC) Divided Clock -#define AT91C_SSC_CKS_TK (0x1) // (SSC) TK Clock signal -#define AT91C_SSC_CKS_RK (0x2) // (SSC) RK pin -#define AT91C_SSC_CKO (0x7 << 2) // (SSC) Receive/Transmit Clock Output Mode Selection -#define AT91C_SSC_CKO_NONE (0x0 << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only -#define AT91C_SSC_CKO_CONTINOUS (0x1 << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output -#define AT91C_SSC_CKO_DATA_TX (0x2 << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output -#define AT91C_SSC_CKI (0x1 << 5) // (SSC) Receive/Transmit Clock Inversion -#define AT91C_SSC_CKG (0x3 << 6) // (SSC) Receive/Transmit Clock Gating Selection -#define AT91C_SSC_CKG_NONE (0x0 << 6) // (SSC) Receive/Transmit Clock Gating: None, continuous clock -#define AT91C_SSC_CKG_LOW (0x1 << 6) // (SSC) Receive/Transmit Clock enabled only if RF Low -#define AT91C_SSC_CKG_HIGH (0x2 << 6) // (SSC) Receive/Transmit Clock enabled only if RF High -#define AT91C_SSC_START (0xF << 8) // (SSC) Receive/Transmit Start Selection -#define AT91C_SSC_START_CONTINOUS (0x0 << 8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. -#define AT91C_SSC_START_TX (0x1 << 8) // (SSC) Transmit/Receive start -#define AT91C_SSC_START_LOW_RF (0x2 << 8) // (SSC) Detection of a low level on RF input -#define AT91C_SSC_START_HIGH_RF (0x3 << 8) // (SSC) Detection of a high level on RF input -#define AT91C_SSC_START_FALL_RF (0x4 << 8) // (SSC) Detection of a falling edge on RF input -#define AT91C_SSC_START_RISE_RF (0x5 << 8) // (SSC) Detection of a rising edge on RF input -#define AT91C_SSC_START_LEVEL_RF (0x6 << 8) // (SSC) Detection of any level change on RF input -#define AT91C_SSC_START_EDGE_RF (0x7 << 8) // (SSC) Detection of any edge on RF input -#define AT91C_SSC_START_0 (0x8 << 8) // (SSC) Compare 0 -#define AT91C_SSC_STOP (0x1 << 12) // (SSC) Receive Stop Selection -#define AT91C_SSC_STTDLY (0xFF << 16) // (SSC) Receive/Transmit Start Delay -#define AT91C_SSC_PERIOD (0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection -// -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register -------- -#define AT91C_SSC_DATLEN (0x1F << 0) // (SSC) Data Length -#define AT91C_SSC_LOOP (0x1 << 5) // (SSC) Loop Mode -#define AT91C_SSC_MSBF (0x1 << 7) // (SSC) Most Significant Bit First -#define AT91C_SSC_DATNB (0xF << 8) // (SSC) Data Number per Frame -#define AT91C_SSC_FSLEN (0xF << 16) // (SSC) Receive/Transmit Frame Sync length -#define AT91C_SSC_FSOS (0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection -#define AT91C_SSC_FSOS_NONE (0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only -#define AT91C_SSC_FSOS_NEGATIVE (0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse -#define AT91C_SSC_FSOS_POSITIVE (0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse -#define AT91C_SSC_FSOS_LOW (0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer -#define AT91C_SSC_FSOS_HIGH (0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer -#define AT91C_SSC_FSOS_TOGGLE (0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer -#define AT91C_SSC_FSEDGE (0x1 << 24) // (SSC) Frame Sync Edge Detection -// -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register -------- -// -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register -------- -#define AT91C_SSC_DATDEF (0x1 << 5) // (SSC) Data Default Value -#define AT91C_SSC_FSDEN (0x1 << 23) // (SSC) Frame Sync Data Enable -// -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register -------- -#define AT91C_SSC_TXRDY (0x1 << 0) // (SSC) Transmit Ready -#define AT91C_SSC_TXEMPTY (0x1 << 1) // (SSC) Transmit Empty -#define AT91C_SSC_ENDTX (0x1 << 2) // (SSC) End Of Transmission -#define AT91C_SSC_TXBUFE (0x1 << 3) // (SSC) Transmit Buffer Empty -#define AT91C_SSC_RXRDY (0x1 << 4) // (SSC) Receive Ready -#define AT91C_SSC_OVRUN (0x1 << 5) // (SSC) Receive Overrun -#define AT91C_SSC_ENDRX (0x1 << 6) // (SSC) End of Reception -#define AT91C_SSC_RXBUFF (0x1 << 7) // (SSC) Receive Buffer Full -#define AT91C_SSC_CP0 (0x1 << 8) // (SSC) Compare 0 -#define AT91C_SSC_CP1 (0x1 << 9) // (SSC) Compare 1 -#define AT91C_SSC_TXSYN (0x1 << 10) // (SSC) Transmit Sync -#define AT91C_SSC_RXSYN (0x1 << 11) // (SSC) Receive Sync -#define AT91C_SSC_TXENA (0x1 << 16) // (SSC) Transmit Enable -#define AT91C_SSC_RXENA (0x1 << 17) // (SSC) Receive Enable -// -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register -------- -// -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register -------- -// -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Two-wire Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TWI { - AT91_REG TWI_CR; // Control Register - AT91_REG TWI_MMR; // Master Mode Register - AT91_REG Reserved0[1]; // - AT91_REG TWI_IADR; // Internal Address Register - AT91_REG TWI_CWGR; // Clock Waveform Generator Register - AT91_REG Reserved1[3]; // - AT91_REG TWI_SR; // Status Register - AT91_REG TWI_IER; // Interrupt Enable Register - AT91_REG TWI_IDR; // Interrupt Disable Register - AT91_REG TWI_IMR; // Interrupt Mask Register - AT91_REG TWI_RHR; // Receive Holding Register - AT91_REG TWI_THR; // Transmit Holding Register - AT91_REG Reserved2[50]; // - AT91_REG TWI_RPR; // Receive Pointer Register - AT91_REG TWI_RCR; // Receive Counter Register - AT91_REG TWI_TPR; // Transmit Pointer Register - AT91_REG TWI_TCR; // Transmit Counter Register - AT91_REG TWI_RNPR; // Receive Next Pointer Register - AT91_REG TWI_RNCR; // Receive Next Counter Register - AT91_REG TWI_TNPR; // Transmit Next Pointer Register - AT91_REG TWI_TNCR; // Transmit Next Counter Register - AT91_REG TWI_PTCR; // PDC Transfer Control Register - AT91_REG TWI_PTSR; // PDC Transfer Status Register -} AT91S_TWI, *AT91PS_TWI; -#else -#define TWI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (TWI_CR) Control Register -#define TWI_MMR (AT91_CAST(AT91_REG *) 0x00000004) // (TWI_MMR) Master Mode Register -#define TWI_IADR (AT91_CAST(AT91_REG *) 0x0000000C) // (TWI_IADR) Internal Address Register -#define TWI_CWGR (AT91_CAST(AT91_REG *) 0x00000010) // (TWI_CWGR) Clock Waveform Generator Register -#define TWI_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TWI_SR) Status Register -#define TWI_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TWI_IER) Interrupt Enable Register -#define TWI_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TWI_IDR) Interrupt Disable Register -#define TWI_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TWI_IMR) Interrupt Mask Register -#define TWI_RHR (AT91_CAST(AT91_REG *) 0x00000030) // (TWI_RHR) Receive Holding Register -#define TWI_THR (AT91_CAST(AT91_REG *) 0x00000034) // (TWI_THR) Transmit Holding Register - -#endif -// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- -#define AT91C_TWI_START (0x1 << 0) // (TWI) Send a START Condition -#define AT91C_TWI_STOP (0x1 << 1) // (TWI) Send a STOP Condition -#define AT91C_TWI_MSEN (0x1 << 2) // (TWI) TWI Master Transfer Enabled -#define AT91C_TWI_MSDIS (0x1 << 3) // (TWI) TWI Master Transfer Disabled -#define AT91C_TWI_SWRST (0x1 << 7) // (TWI) Software Reset -// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- -#define AT91C_TWI_IADRSZ (0x3 << 8) // (TWI) Internal Device Address Size -#define AT91C_TWI_IADRSZ_NO (0x0 << 8) // (TWI) No internal device address -#define AT91C_TWI_IADRSZ_1_BYTE (0x1 << 8) // (TWI) One-byte internal device address -#define AT91C_TWI_IADRSZ_2_BYTE (0x2 << 8) // (TWI) Two-byte internal device address -#define AT91C_TWI_IADRSZ_3_BYTE (0x3 << 8) // (TWI) Three-byte internal device address -#define AT91C_TWI_MREAD (0x1 << 12) // (TWI) Master Read Direction -#define AT91C_TWI_DADR (0x7F << 16) // (TWI) Device Address -// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- -#define AT91C_TWI_CLDIV (0xFF << 0) // (TWI) Clock Low Divider -#define AT91C_TWI_CHDIV (0xFF << 8) // (TWI) Clock High Divider -#define AT91C_TWI_CKDIV (0x7 << 16) // (TWI) Clock Divider -// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- -#define AT91C_TWI_TXCOMP (0x1 << 0) // (TWI) Transmission Completed -#define AT91C_TWI_RXRDY (0x1 << 1) // (TWI) Receive holding register ReaDY -#define AT91C_TWI_TXRDY (0x1 << 2) // (TWI) Transmit holding register ReaDY -#define AT91C_TWI_OVRE (0x1 << 6) // (TWI) Overrun Error -#define AT91C_TWI_UNRE (0x1 << 7) // (TWI) Underrun Error -#define AT91C_TWI_NACK (0x1 << 8) // (TWI) Not Acknowledged -#define AT91C_TWI_ENDRX (0x1 << 12) // (TWI) -#define AT91C_TWI_ENDTX (0x1 << 13) // (TWI) -#define AT91C_TWI_RXBUFF (0x1 << 14) // (TWI) -#define AT91C_TWI_TXBUFE (0x1 << 15) // (TWI) -// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- -// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- -// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR PWMC Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC_CH { - AT91_REG PWMC_CMR; // Channel Mode Register - AT91_REG PWMC_CDTYR; // Channel Duty Cycle Register - AT91_REG PWMC_CPRDR; // Channel Period Register - AT91_REG PWMC_CCNTR; // Channel Counter Register - AT91_REG PWMC_CUPDR; // Channel Update Register - AT91_REG PWMC_Reserved[3]; // Reserved -} AT91S_PWMC_CH, *AT91PS_PWMC_CH; -#else -#define PWMC_CMR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_CMR) Channel Mode Register -#define PWMC_CDTYR (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_CDTYR) Channel Duty Cycle Register -#define PWMC_CPRDR (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_CPRDR) Channel Period Register -#define PWMC_CCNTR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_CCNTR) Channel Counter Register -#define PWMC_CUPDR (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_CUPDR) Channel Update Register -#define Reserved (AT91_CAST(AT91_REG *) 0x00000014) // (Reserved) Reserved - -#endif -// -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register -------- -#define AT91C_PWMC_CPRE (0xF << 0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx -#define AT91C_PWMC_CPRE_MCK (0x0) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKA (0xB) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKB (0xC) // (PWMC_CH) -#define AT91C_PWMC_CALG (0x1 << 8) // (PWMC_CH) Channel Alignment -#define AT91C_PWMC_CPOL (0x1 << 9) // (PWMC_CH) Channel Polarity -#define AT91C_PWMC_CPD (0x1 << 10) // (PWMC_CH) Channel Update Period -// -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register -------- -#define AT91C_PWMC_CDTY (0x0 << 0) // (PWMC_CH) Channel Duty Cycle -// -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register -------- -#define AT91C_PWMC_CPRD (0x0 << 0) // (PWMC_CH) Channel Period -// -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register -------- -#define AT91C_PWMC_CCNT (0x0 << 0) // (PWMC_CH) Channel Counter -// -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register -------- -#define AT91C_PWMC_CUPD (0x0 << 0) // (PWMC_CH) Channel Update - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_PWMC { - AT91_REG PWMC_MR; // PWMC Mode Register - AT91_REG PWMC_ENA; // PWMC Enable Register - AT91_REG PWMC_DIS; // PWMC Disable Register - AT91_REG PWMC_SR; // PWMC Status Register - AT91_REG PWMC_IER; // PWMC Interrupt Enable Register - AT91_REG PWMC_IDR; // PWMC Interrupt Disable Register - AT91_REG PWMC_IMR; // PWMC Interrupt Mask Register - AT91_REG PWMC_ISR; // PWMC Interrupt Status Register - AT91_REG Reserved0[55]; // - AT91_REG PWMC_VR; // PWMC Version Register - AT91_REG Reserved1[64]; // - AT91S_PWMC_CH PWMC_CH[4]; // PWMC Channel -} AT91S_PWMC, *AT91PS_PWMC; -#else -#define PWMC_MR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_MR) PWMC Mode Register -#define PWMC_ENA (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_ENA) PWMC Enable Register -#define PWMC_DIS (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_DIS) PWMC Disable Register -#define PWMC_SR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_SR) PWMC Status Register -#define PWMC_IER (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_IER) PWMC Interrupt Enable Register -#define PWMC_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (PWMC_IDR) PWMC Interrupt Disable Register -#define PWMC_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (PWMC_IMR) PWMC Interrupt Mask Register -#define PWMC_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (PWMC_ISR) PWMC Interrupt Status Register -#define PWMC_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (PWMC_VR) PWMC Version Register - -#endif -// -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register -------- -#define AT91C_PWMC_DIVA (0xFF << 0) // (PWMC) CLKA divide factor. -#define AT91C_PWMC_PREA (0xF << 8) // (PWMC) Divider Input Clock Prescaler A -#define AT91C_PWMC_PREA_MCK (0x0 << 8) // (PWMC) -#define AT91C_PWMC_DIVB (0xFF << 16) // (PWMC) CLKB divide factor. -#define AT91C_PWMC_PREB (0xF << 24) // (PWMC) Divider Input Clock Prescaler B -#define AT91C_PWMC_PREB_MCK (0x0 << 24) // (PWMC) -// -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register -------- -#define AT91C_PWMC_CHID0 (0x1 << 0) // (PWMC) Channel ID 0 -#define AT91C_PWMC_CHID1 (0x1 << 1) // (PWMC) Channel ID 1 -#define AT91C_PWMC_CHID2 (0x1 << 2) // (PWMC) Channel ID 2 -#define AT91C_PWMC_CHID3 (0x1 << 3) // (PWMC) Channel ID 3 -// -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register -------- -// -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register -------- -// -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register -------- -// -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register -------- -// -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register -------- -// -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR USB Device Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_UDP { - AT91_REG UDP_NUM; // Frame Number Register - AT91_REG UDP_GLBSTATE; // Global State Register - AT91_REG UDP_FADDR; // Function Address Register - AT91_REG Reserved0[1]; // - AT91_REG UDP_IER; // Interrupt Enable Register - AT91_REG UDP_IDR; // Interrupt Disable Register - AT91_REG UDP_IMR; // Interrupt Mask Register - AT91_REG UDP_ISR; // Interrupt Status Register - AT91_REG UDP_ICR; // Interrupt Clear Register - AT91_REG Reserved1[1]; // - AT91_REG UDP_RSTEP; // Reset Endpoint Register - AT91_REG Reserved2[1]; // - AT91_REG UDP_CSR[6]; // Endpoint Control and Status Register - AT91_REG Reserved3[2]; // - AT91_REG UDP_FDR[6]; // Endpoint FIFO Data Register - AT91_REG Reserved4[3]; // - AT91_REG UDP_TXVC; // Transceiver Control Register -} AT91S_UDP, *AT91PS_UDP; -#else -#define UDP_FRM_NUM (AT91_CAST(AT91_REG *) 0x00000000) // (UDP_FRM_NUM) Frame Number Register -#define UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0x00000004) // (UDP_GLBSTATE) Global State Register -#define UDP_FADDR (AT91_CAST(AT91_REG *) 0x00000008) // (UDP_FADDR) Function Address Register -#define UDP_IER (AT91_CAST(AT91_REG *) 0x00000010) // (UDP_IER) Interrupt Enable Register -#define UDP_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (UDP_IDR) Interrupt Disable Register -#define UDP_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (UDP_IMR) Interrupt Mask Register -#define UDP_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (UDP_ISR) Interrupt Status Register -#define UDP_ICR (AT91_CAST(AT91_REG *) 0x00000020) // (UDP_ICR) Interrupt Clear Register -#define UDP_RSTEP (AT91_CAST(AT91_REG *) 0x00000028) // (UDP_RSTEP) Reset Endpoint Register -#define UDP_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (UDP_CSR) Endpoint Control and Status Register -#define UDP_FDR (AT91_CAST(AT91_REG *) 0x00000050) // (UDP_FDR) Endpoint FIFO Data Register -#define UDP_TXVC (AT91_CAST(AT91_REG *) 0x00000074) // (UDP_TXVC) Transceiver Control Register - -#endif -// -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register -------- -#define AT91C_UDP_FRM_NUM (0x7FF << 0) // (UDP) Frame Number as Defined in the Packet Field Formats -#define AT91C_UDP_FRM_ERR (0x1 << 16) // (UDP) Frame Error -#define AT91C_UDP_FRM_OK (0x1 << 17) // (UDP) Frame OK -// -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register -------- -#define AT91C_UDP_FADDEN (0x1 << 0) // (UDP) Function Address Enable -#define AT91C_UDP_CONFG (0x1 << 1) // (UDP) Configured -#define AT91C_UDP_ESR (0x1 << 2) // (UDP) Enable Send Resume -#define AT91C_UDP_RSMINPR (0x1 << 3) // (UDP) A Resume Has Been Sent to the Host -#define AT91C_UDP_RMWUPE (0x1 << 4) // (UDP) Remote Wake Up Enable -// -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register -------- -#define AT91C_UDP_FADD (0xFF << 0) // (UDP) Function Address Value -#define AT91C_UDP_FEN (0x1 << 8) // (UDP) Function Enable -// -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register -------- -#define AT91C_UDP_EPINT0 (0x1 << 0) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT1 (0x1 << 1) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT2 (0x1 << 2) // (UDP) Endpoint 2 Interrupt -#define AT91C_UDP_EPINT3 (0x1 << 3) // (UDP) Endpoint 3 Interrupt -#define AT91C_UDP_EPINT4 (0x1 << 4) // (UDP) Endpoint 4 Interrupt -#define AT91C_UDP_EPINT5 (0x1 << 5) // (UDP) Endpoint 5 Interrupt -#define AT91C_UDP_RXSUSP (0x1 << 8) // (UDP) USB Suspend Interrupt -#define AT91C_UDP_RXRSM (0x1 << 9) // (UDP) USB Resume Interrupt -#define AT91C_UDP_EXTRSM (0x1 << 10) // (UDP) USB External Resume Interrupt -#define AT91C_UDP_SOFINT (0x1 << 11) // (UDP) USB Start Of frame Interrupt -#define AT91C_UDP_WAKEUP (0x1 << 13) // (UDP) USB Resume Interrupt -// -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register -------- -// -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register -------- -// -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register -------- -#define AT91C_UDP_ENDBUSRES (0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt -// -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register -------- -// -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register -------- -#define AT91C_UDP_EP0 (0x1 << 0) // (UDP) Reset Endpoint 0 -#define AT91C_UDP_EP1 (0x1 << 1) // (UDP) Reset Endpoint 1 -#define AT91C_UDP_EP2 (0x1 << 2) // (UDP) Reset Endpoint 2 -#define AT91C_UDP_EP3 (0x1 << 3) // (UDP) Reset Endpoint 3 -#define AT91C_UDP_EP4 (0x1 << 4) // (UDP) Reset Endpoint 4 -#define AT91C_UDP_EP5 (0x1 << 5) // (UDP) Reset Endpoint 5 -// -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register -------- -#define AT91C_UDP_TXCOMP (0x1 << 0) // (UDP) Generates an IN packet with data previously written in the DPR -#define AT91C_UDP_RX_DATA_BK0 (0x1 << 1) // (UDP) Receive Data Bank 0 -#define AT91C_UDP_RXSETUP (0x1 << 2) // (UDP) Sends STALL to the Host (Control endpoints) -#define AT91C_UDP_ISOERROR (0x1 << 3) // (UDP) Isochronous error (Isochronous endpoints) -#define AT91C_UDP_STALLSENT (0x1 << 3) // (UDP) Stall sent (Control, bulk, interrupt endpoints) -#define AT91C_UDP_TXPKTRDY (0x1 << 4) // (UDP) Transmit Packet Ready -#define AT91C_UDP_FORCESTALL (0x1 << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints). -#define AT91C_UDP_RX_DATA_BK1 (0x1 << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes). -#define AT91C_UDP_DIR (0x1 << 7) // (UDP) Transfer Direction -#define AT91C_UDP_EPTYPE (0x7 << 8) // (UDP) Endpoint type -#define AT91C_UDP_EPTYPE_CTRL (0x0 << 8) // (UDP) Control -#define AT91C_UDP_EPTYPE_ISO_OUT (0x1 << 8) // (UDP) Isochronous OUT -#define AT91C_UDP_EPTYPE_BULK_OUT (0x2 << 8) // (UDP) Bulk OUT -#define AT91C_UDP_EPTYPE_INT_OUT (0x3 << 8) // (UDP) Interrupt OUT -#define AT91C_UDP_EPTYPE_ISO_IN (0x5 << 8) // (UDP) Isochronous IN -#define AT91C_UDP_EPTYPE_BULK_IN (0x6 << 8) // (UDP) Bulk IN -#define AT91C_UDP_EPTYPE_INT_IN (0x7 << 8) // (UDP) Interrupt IN -#define AT91C_UDP_DTGLE (0x1 << 11) // (UDP) Data Toggle -#define AT91C_UDP_EPEDS (0x1 << 15) // (UDP) Endpoint Enable Disable -#define AT91C_UDP_RXBYTECNT (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO -// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register -------- -#define AT91C_UDP_TXVDIS (0x1 << 8) // (UDP) - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Channel Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TC { - AT91_REG TC_CCR; // Channel Control Register - AT91_REG TC_CMR; // Channel Mode Register (Capture Mode / Waveform Mode) - AT91_REG Reserved0[2]; // - AT91_REG TC_CV; // Counter Value - AT91_REG TC_RA; // Register A - AT91_REG TC_RB; // Register B - AT91_REG TC_RC; // Register C - AT91_REG TC_SR; // Status Register - AT91_REG TC_IER; // Interrupt Enable Register - AT91_REG TC_IDR; // Interrupt Disable Register - AT91_REG TC_IMR; // Interrupt Mask Register -} AT91S_TC, *AT91PS_TC; -#else -#define TC_CCR (AT91_CAST(AT91_REG *) 0x00000000) // (TC_CCR) Channel Control Register -#define TC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (TC_CMR) Channel Mode Register (Capture Mode / Waveform Mode) -#define TC_CV (AT91_CAST(AT91_REG *) 0x00000010) // (TC_CV) Counter Value -#define TC_RA (AT91_CAST(AT91_REG *) 0x00000014) // (TC_RA) Register A -#define TC_RB (AT91_CAST(AT91_REG *) 0x00000018) // (TC_RB) Register B -#define TC_RC (AT91_CAST(AT91_REG *) 0x0000001C) // (TC_RC) Register C -#define TC_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TC_SR) Status Register -#define TC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TC_IER) Interrupt Enable Register -#define TC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TC_IDR) Interrupt Disable Register -#define TC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TC_IMR) Interrupt Mask Register - -#endif -// -------- TC_CCR : (TC Offset: 0x0) TC Channel Control Register -------- -#define AT91C_TC_CLKEN (0x1 << 0) // (TC) Counter Clock Enable Command -#define AT91C_TC_CLKDIS (0x1 << 1) // (TC) Counter Clock Disable Command -#define AT91C_TC_SWTRG (0x1 << 2) // (TC) Software Trigger Command -// -------- TC_CMR : (TC Offset: 0x4) TC Channel Mode Register: Capture Mode / Waveform Mode -------- -#define AT91C_TC_CLKS (0x7 << 0) // (TC) Clock Selection -#define AT91C_TC_CLKS_TIMER_DIV1_CLOCK (0x0) // (TC) Clock selected: TIMER_DIV1_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV2_CLOCK (0x1) // (TC) Clock selected: TIMER_DIV2_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV3_CLOCK (0x2) // (TC) Clock selected: TIMER_DIV3_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV4_CLOCK (0x3) // (TC) Clock selected: TIMER_DIV4_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV5_CLOCK (0x4) // (TC) Clock selected: TIMER_DIV5_CLOCK -#define AT91C_TC_CLKS_XC0 (0x5) // (TC) Clock selected: XC0 -#define AT91C_TC_CLKS_XC1 (0x6) // (TC) Clock selected: XC1 -#define AT91C_TC_CLKS_XC2 (0x7) // (TC) Clock selected: XC2 -#define AT91C_TC_CLKI (0x1 << 3) // (TC) Clock Invert -#define AT91C_TC_BURST (0x3 << 4) // (TC) Burst Signal Selection -#define AT91C_TC_BURST_NONE (0x0 << 4) // (TC) The clock is not gated by an external signal -#define AT91C_TC_BURST_XC0 (0x1 << 4) // (TC) XC0 is ANDed with the selected clock -#define AT91C_TC_BURST_XC1 (0x2 << 4) // (TC) XC1 is ANDed with the selected clock -#define AT91C_TC_BURST_XC2 (0x3 << 4) // (TC) XC2 is ANDed with the selected clock -#define AT91C_TC_CPCSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RC Compare -#define AT91C_TC_LDBSTOP (0x1 << 6) // (TC) Counter Clock Stopped with RB Loading -#define AT91C_TC_CPCDIS (0x1 << 7) // (TC) Counter Clock Disable with RC Compare -#define AT91C_TC_LDBDIS (0x1 << 7) // (TC) Counter Clock Disabled with RB Loading -#define AT91C_TC_ETRGEDG (0x3 << 8) // (TC) External Trigger Edge Selection -#define AT91C_TC_ETRGEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_ETRGEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_ETRGEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_ETRGEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVTEDG (0x3 << 8) // (TC) External Event Edge Selection -#define AT91C_TC_EEVTEDG_NONE (0x0 << 8) // (TC) Edge: None -#define AT91C_TC_EEVTEDG_RISING (0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_EEVTEDG_FALLING (0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_EEVTEDG_BOTH (0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVT (0x3 << 10) // (TC) External Event Selection -#define AT91C_TC_EEVT_TIOB (0x0 << 10) // (TC) Signal selected as external event: TIOB TIOB direction: input -#define AT91C_TC_EEVT_XC0 (0x1 << 10) // (TC) Signal selected as external event: XC0 TIOB direction: output -#define AT91C_TC_EEVT_XC1 (0x2 << 10) // (TC) Signal selected as external event: XC1 TIOB direction: output -#define AT91C_TC_EEVT_XC2 (0x3 << 10) // (TC) Signal selected as external event: XC2 TIOB direction: output -#define AT91C_TC_ABETRG (0x1 << 10) // (TC) TIOA or TIOB External Trigger Selection -#define AT91C_TC_ENETRG (0x1 << 12) // (TC) External Event Trigger enable -#define AT91C_TC_WAVESEL (0x3 << 13) // (TC) Waveform Selection -#define AT91C_TC_WAVESEL_UP (0x0 << 13) // (TC) UP mode without atomatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN (0x1 << 13) // (TC) UPDOWN mode without automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UP_AUTO (0x2 << 13) // (TC) UP mode with automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN_AUTO (0x3 << 13) // (TC) UPDOWN mode with automatic trigger on RC Compare -#define AT91C_TC_CPCTRG (0x1 << 14) // (TC) RC Compare Trigger Enable -#define AT91C_TC_WAVE (0x1 << 15) // (TC) -#define AT91C_TC_ACPA (0x3 << 16) // (TC) RA Compare Effect on TIOA -#define AT91C_TC_ACPA_NONE (0x0 << 16) // (TC) Effect: none -#define AT91C_TC_ACPA_SET (0x1 << 16) // (TC) Effect: set -#define AT91C_TC_ACPA_CLEAR (0x2 << 16) // (TC) Effect: clear -#define AT91C_TC_ACPA_TOGGLE (0x3 << 16) // (TC) Effect: toggle -#define AT91C_TC_LDRA (0x3 << 16) // (TC) RA Loading Selection -#define AT91C_TC_LDRA_NONE (0x0 << 16) // (TC) Edge: None -#define AT91C_TC_LDRA_RISING (0x1 << 16) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRA_FALLING (0x2 << 16) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRA_BOTH (0x3 << 16) // (TC) Edge: each edge of TIOA -#define AT91C_TC_ACPC (0x3 << 18) // (TC) RC Compare Effect on TIOA -#define AT91C_TC_ACPC_NONE (0x0 << 18) // (TC) Effect: none -#define AT91C_TC_ACPC_SET (0x1 << 18) // (TC) Effect: set -#define AT91C_TC_ACPC_CLEAR (0x2 << 18) // (TC) Effect: clear -#define AT91C_TC_ACPC_TOGGLE (0x3 << 18) // (TC) Effect: toggle -#define AT91C_TC_LDRB (0x3 << 18) // (TC) RB Loading Selection -#define AT91C_TC_LDRB_NONE (0x0 << 18) // (TC) Edge: None -#define AT91C_TC_LDRB_RISING (0x1 << 18) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRB_FALLING (0x2 << 18) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRB_BOTH (0x3 << 18) // (TC) Edge: each edge of TIOA -#define AT91C_TC_AEEVT (0x3 << 20) // (TC) External Event Effect on TIOA -#define AT91C_TC_AEEVT_NONE (0x0 << 20) // (TC) Effect: none -#define AT91C_TC_AEEVT_SET (0x1 << 20) // (TC) Effect: set -#define AT91C_TC_AEEVT_CLEAR (0x2 << 20) // (TC) Effect: clear -#define AT91C_TC_AEEVT_TOGGLE (0x3 << 20) // (TC) Effect: toggle -#define AT91C_TC_ASWTRG (0x3 << 22) // (TC) Software Trigger Effect on TIOA -#define AT91C_TC_ASWTRG_NONE (0x0 << 22) // (TC) Effect: none -#define AT91C_TC_ASWTRG_SET (0x1 << 22) // (TC) Effect: set -#define AT91C_TC_ASWTRG_CLEAR (0x2 << 22) // (TC) Effect: clear -#define AT91C_TC_ASWTRG_TOGGLE (0x3 << 22) // (TC) Effect: toggle -#define AT91C_TC_BCPB (0x3 << 24) // (TC) RB Compare Effect on TIOB -#define AT91C_TC_BCPB_NONE (0x0 << 24) // (TC) Effect: none -#define AT91C_TC_BCPB_SET (0x1 << 24) // (TC) Effect: set -#define AT91C_TC_BCPB_CLEAR (0x2 << 24) // (TC) Effect: clear -#define AT91C_TC_BCPB_TOGGLE (0x3 << 24) // (TC) Effect: toggle -#define AT91C_TC_BCPC (0x3 << 26) // (TC) RC Compare Effect on TIOB -#define AT91C_TC_BCPC_NONE (0x0 << 26) // (TC) Effect: none -#define AT91C_TC_BCPC_SET (0x1 << 26) // (TC) Effect: set -#define AT91C_TC_BCPC_CLEAR (0x2 << 26) // (TC) Effect: clear -#define AT91C_TC_BCPC_TOGGLE (0x3 << 26) // (TC) Effect: toggle -#define AT91C_TC_BEEVT (0x3 << 28) // (TC) External Event Effect on TIOB -#define AT91C_TC_BEEVT_NONE (0x0 << 28) // (TC) Effect: none -#define AT91C_TC_BEEVT_SET (0x1 << 28) // (TC) Effect: set -#define AT91C_TC_BEEVT_CLEAR (0x2 << 28) // (TC) Effect: clear -#define AT91C_TC_BEEVT_TOGGLE (0x3 << 28) // (TC) Effect: toggle -#define AT91C_TC_BSWTRG (0x3 << 30) // (TC) Software Trigger Effect on TIOB -#define AT91C_TC_BSWTRG_NONE (0x0 << 30) // (TC) Effect: none -#define AT91C_TC_BSWTRG_SET (0x1 << 30) // (TC) Effect: set -#define AT91C_TC_BSWTRG_CLEAR (0x2 << 30) // (TC) Effect: clear -#define AT91C_TC_BSWTRG_TOGGLE (0x3 << 30) // (TC) Effect: toggle -// -------- TC_SR : (TC Offset: 0x20) TC Channel Status Register -------- -#define AT91C_TC_COVFS (0x1 << 0) // (TC) Counter Overflow -#define AT91C_TC_LOVRS (0x1 << 1) // (TC) Load Overrun -#define AT91C_TC_CPAS (0x1 << 2) // (TC) RA Compare -#define AT91C_TC_CPBS (0x1 << 3) // (TC) RB Compare -#define AT91C_TC_CPCS (0x1 << 4) // (TC) RC Compare -#define AT91C_TC_LDRAS (0x1 << 5) // (TC) RA Loading -#define AT91C_TC_LDRBS (0x1 << 6) // (TC) RB Loading -#define AT91C_TC_ETRGS (0x1 << 7) // (TC) External Trigger -#define AT91C_TC_CLKSTA (0x1 << 16) // (TC) Clock Enabling -#define AT91C_TC_MTIOA (0x1 << 17) // (TC) TIOA Mirror -#define AT91C_TC_MTIOB (0x1 << 18) // (TC) TIOA Mirror -// -------- TC_IER : (TC Offset: 0x24) TC Channel Interrupt Enable Register -------- -// -------- TC_IDR : (TC Offset: 0x28) TC Channel Interrupt Disable Register -------- -// -------- TC_IMR : (TC Offset: 0x2c) TC Channel Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_TCB { - AT91S_TC TCB_TC0; // TC Channel 0 - AT91_REG Reserved0[4]; // - AT91S_TC TCB_TC1; // TC Channel 1 - AT91_REG Reserved1[4]; // - AT91S_TC TCB_TC2; // TC Channel 2 - AT91_REG Reserved2[4]; // - AT91_REG TCB_BCR; // TC Block Control Register - AT91_REG TCB_BMR; // TC Block Mode Register -} AT91S_TCB, *AT91PS_TCB; -#else -#define TCB_BCR (AT91_CAST(AT91_REG *) 0x000000C0) // (TCB_BCR) TC Block Control Register -#define TCB_BMR (AT91_CAST(AT91_REG *) 0x000000C4) // (TCB_BMR) TC Block Mode Register - -#endif -// -------- TCB_BCR : (TCB Offset: 0xc0) TC Block Control Register -------- -#define AT91C_TCB_SYNC (0x1 << 0) // (TCB) Synchro Command -// -------- TCB_BMR : (TCB Offset: 0xc4) TC Block Mode Register -------- -#define AT91C_TCB_TC0XC0S (0x3 << 0) // (TCB) External Clock Signal 0 Selection -#define AT91C_TCB_TC0XC0S_TCLK0 (0x0) // (TCB) TCLK0 connected to XC0 -#define AT91C_TCB_TC0XC0S_NONE (0x1) // (TCB) None signal connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA1 (0x2) // (TCB) TIOA1 connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA2 (0x3) // (TCB) TIOA2 connected to XC0 -#define AT91C_TCB_TC1XC1S (0x3 << 2) // (TCB) External Clock Signal 1 Selection -#define AT91C_TCB_TC1XC1S_TCLK1 (0x0 << 2) // (TCB) TCLK1 connected to XC1 -#define AT91C_TCB_TC1XC1S_NONE (0x1 << 2) // (TCB) None signal connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA0 (0x2 << 2) // (TCB) TIOA0 connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA2 (0x3 << 2) // (TCB) TIOA2 connected to XC1 -#define AT91C_TCB_TC2XC2S (0x3 << 4) // (TCB) External Clock Signal 2 Selection -#define AT91C_TCB_TC2XC2S_TCLK2 (0x0 << 4) // (TCB) TCLK2 connected to XC2 -#define AT91C_TCB_TC2XC2S_NONE (0x1 << 4) // (TCB) None signal connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA0 (0x2 << 4) // (TCB) TIOA0 connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA1 (0x3 << 4) // (TCB) TIOA2 connected to XC2 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Control Area Network MailBox Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CAN_MB { - AT91_REG CAN_MB_MMR; // MailBox Mode Register - AT91_REG CAN_MB_MAM; // MailBox Acceptance Mask Register - AT91_REG CAN_MB_MID; // MailBox ID Register - AT91_REG CAN_MB_MFID; // MailBox Family ID Register - AT91_REG CAN_MB_MSR; // MailBox Status Register - AT91_REG CAN_MB_MDL; // MailBox Data Low Register - AT91_REG CAN_MB_MDH; // MailBox Data High Register - AT91_REG CAN_MB_MCR; // MailBox Control Register -} AT91S_CAN_MB, *AT91PS_CAN_MB; -#else -#define CAN_MMR (AT91_CAST(AT91_REG *) 0x00000000) // (CAN_MMR) MailBox Mode Register -#define CAN_MAM (AT91_CAST(AT91_REG *) 0x00000004) // (CAN_MAM) MailBox Acceptance Mask Register -#define CAN_MID (AT91_CAST(AT91_REG *) 0x00000008) // (CAN_MID) MailBox ID Register -#define CAN_MFID (AT91_CAST(AT91_REG *) 0x0000000C) // (CAN_MFID) MailBox Family ID Register -#define CAN_MSR (AT91_CAST(AT91_REG *) 0x00000010) // (CAN_MSR) MailBox Status Register -#define CAN_MDL (AT91_CAST(AT91_REG *) 0x00000014) // (CAN_MDL) MailBox Data Low Register -#define CAN_MDH (AT91_CAST(AT91_REG *) 0x00000018) // (CAN_MDH) MailBox Data High Register -#define CAN_MCR (AT91_CAST(AT91_REG *) 0x0000001C) // (CAN_MCR) MailBox Control Register - -#endif -// -------- CAN_MMR : (CAN_MB Offset: 0x0) CAN Message Mode Register -------- -#define AT91C_CAN_MTIMEMARK (0xFFFF << 0) // (CAN_MB) Mailbox Timemark -#define AT91C_CAN_PRIOR (0xF << 16) // (CAN_MB) Mailbox Priority -#define AT91C_CAN_MOT (0x7 << 24) // (CAN_MB) Mailbox Object Type -#define AT91C_CAN_MOT_DIS (0x0 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_RX (0x1 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_RXOVERWRITE (0x2 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_TX (0x3 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_CONSUMER (0x4 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_PRODUCER (0x5 << 24) // (CAN_MB) -// -------- CAN_MAM : (CAN_MB Offset: 0x4) CAN Message Acceptance Mask Register -------- -#define AT91C_CAN_MIDvB (0x3FFFF << 0) // (CAN_MB) Complementary bits for identifier in extended mode -#define AT91C_CAN_MIDvA (0x7FF << 18) // (CAN_MB) Identifier for standard frame mode -#define AT91C_CAN_MIDE (0x1 << 29) // (CAN_MB) Identifier Version -// -------- CAN_MID : (CAN_MB Offset: 0x8) CAN Message ID Register -------- -// -------- CAN_MFID : (CAN_MB Offset: 0xc) CAN Message Family ID Register -------- -// -------- CAN_MSR : (CAN_MB Offset: 0x10) CAN Message Status Register -------- -#define AT91C_CAN_MTIMESTAMP (0xFFFF << 0) // (CAN_MB) Timer Value -#define AT91C_CAN_MDLC (0xF << 16) // (CAN_MB) Mailbox Data Length Code -#define AT91C_CAN_MRTR (0x1 << 20) // (CAN_MB) Mailbox Remote Transmission Request -#define AT91C_CAN_MABT (0x1 << 22) // (CAN_MB) Mailbox Message Abort -#define AT91C_CAN_MRDY (0x1 << 23) // (CAN_MB) Mailbox Ready -#define AT91C_CAN_MMI (0x1 << 24) // (CAN_MB) Mailbox Message Ignored -// -------- CAN_MDL : (CAN_MB Offset: 0x14) CAN Message Data Low Register -------- -// -------- CAN_MDH : (CAN_MB Offset: 0x18) CAN Message Data High Register -------- -// -------- CAN_MCR : (CAN_MB Offset: 0x1c) CAN Message Control Register -------- -#define AT91C_CAN_MACR (0x1 << 22) // (CAN_MB) Abort Request for Mailbox -#define AT91C_CAN_MTCR (0x1 << 23) // (CAN_MB) Mailbox Transfer Command - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Control Area Network Interface -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_CAN { - AT91_REG CAN_MR; // Mode Register - AT91_REG CAN_IER; // Interrupt Enable Register - AT91_REG CAN_IDR; // Interrupt Disable Register - AT91_REG CAN_IMR; // Interrupt Mask Register - AT91_REG CAN_SR; // Status Register - AT91_REG CAN_BR; // Baudrate Register - AT91_REG CAN_TIM; // Timer Register - AT91_REG CAN_TIMESTP; // Time Stamp Register - AT91_REG CAN_ECR; // Error Counter Register - AT91_REG CAN_TCR; // Transfer Command Register - AT91_REG CAN_ACR; // Abort Command Register - AT91_REG Reserved0[52]; // - AT91_REG CAN_VR; // Version Register - AT91_REG Reserved1[64]; // - AT91S_CAN_MB CAN_MB0; // CAN Mailbox 0 - AT91S_CAN_MB CAN_MB1; // CAN Mailbox 1 - AT91S_CAN_MB CAN_MB2; // CAN Mailbox 2 - AT91S_CAN_MB CAN_MB3; // CAN Mailbox 3 - AT91S_CAN_MB CAN_MB4; // CAN Mailbox 4 - AT91S_CAN_MB CAN_MB5; // CAN Mailbox 5 - AT91S_CAN_MB CAN_MB6; // CAN Mailbox 6 - AT91S_CAN_MB CAN_MB7; // CAN Mailbox 7 - AT91S_CAN_MB CAN_MB8; // CAN Mailbox 8 - AT91S_CAN_MB CAN_MB9; // CAN Mailbox 9 - AT91S_CAN_MB CAN_MB10; // CAN Mailbox 10 - AT91S_CAN_MB CAN_MB11; // CAN Mailbox 11 - AT91S_CAN_MB CAN_MB12; // CAN Mailbox 12 - AT91S_CAN_MB CAN_MB13; // CAN Mailbox 13 - AT91S_CAN_MB CAN_MB14; // CAN Mailbox 14 - AT91S_CAN_MB CAN_MB15; // CAN Mailbox 15 -} AT91S_CAN, *AT91PS_CAN; -#else -#define CAN_MR (AT91_CAST(AT91_REG *) 0x00000000) // (CAN_MR) Mode Register -#define CAN_IER (AT91_CAST(AT91_REG *) 0x00000004) // (CAN_IER) Interrupt Enable Register -#define CAN_IDR (AT91_CAST(AT91_REG *) 0x00000008) // (CAN_IDR) Interrupt Disable Register -#define CAN_IMR (AT91_CAST(AT91_REG *) 0x0000000C) // (CAN_IMR) Interrupt Mask Register -#define CAN_SR (AT91_CAST(AT91_REG *) 0x00000010) // (CAN_SR) Status Register -#define CAN_BR (AT91_CAST(AT91_REG *) 0x00000014) // (CAN_BR) Baudrate Register -#define CAN_TIM (AT91_CAST(AT91_REG *) 0x00000018) // (CAN_TIM) Timer Register -#define CAN_TIMESTP (AT91_CAST(AT91_REG *) 0x0000001C) // (CAN_TIMESTP) Time Stamp Register -#define CAN_ECR (AT91_CAST(AT91_REG *) 0x00000020) // (CAN_ECR) Error Counter Register -#define CAN_TCR (AT91_CAST(AT91_REG *) 0x00000024) // (CAN_TCR) Transfer Command Register -#define CAN_ACR (AT91_CAST(AT91_REG *) 0x00000028) // (CAN_ACR) Abort Command Register -#define CAN_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (CAN_VR) Version Register - -#endif -// -------- CAN_MR : (CAN Offset: 0x0) CAN Mode Register -------- -#define AT91C_CAN_CANEN (0x1 << 0) // (CAN) CAN Controller Enable -#define AT91C_CAN_LPM (0x1 << 1) // (CAN) Disable/Enable Low Power Mode -#define AT91C_CAN_ABM (0x1 << 2) // (CAN) Disable/Enable Autobaud/Listen Mode -#define AT91C_CAN_OVL (0x1 << 3) // (CAN) Disable/Enable Overload Frame -#define AT91C_CAN_TEOF (0x1 << 4) // (CAN) Time Stamp messages at each end of Frame -#define AT91C_CAN_TTM (0x1 << 5) // (CAN) Disable/Enable Time Trigger Mode -#define AT91C_CAN_TIMFRZ (0x1 << 6) // (CAN) Enable Timer Freeze -#define AT91C_CAN_DRPT (0x1 << 7) // (CAN) Disable Repeat -// -------- CAN_IER : (CAN Offset: 0x4) CAN Interrupt Enable Register -------- -#define AT91C_CAN_MB0 (0x1 << 0) // (CAN) Mailbox 0 Flag -#define AT91C_CAN_MB1 (0x1 << 1) // (CAN) Mailbox 1 Flag -#define AT91C_CAN_MB2 (0x1 << 2) // (CAN) Mailbox 2 Flag -#define AT91C_CAN_MB3 (0x1 << 3) // (CAN) Mailbox 3 Flag -#define AT91C_CAN_MB4 (0x1 << 4) // (CAN) Mailbox 4 Flag -#define AT91C_CAN_MB5 (0x1 << 5) // (CAN) Mailbox 5 Flag -#define AT91C_CAN_MB6 (0x1 << 6) // (CAN) Mailbox 6 Flag -#define AT91C_CAN_MB7 (0x1 << 7) // (CAN) Mailbox 7 Flag -#define AT91C_CAN_MB8 (0x1 << 8) // (CAN) Mailbox 8 Flag -#define AT91C_CAN_MB9 (0x1 << 9) // (CAN) Mailbox 9 Flag -#define AT91C_CAN_MB10 (0x1 << 10) // (CAN) Mailbox 10 Flag -#define AT91C_CAN_MB11 (0x1 << 11) // (CAN) Mailbox 11 Flag -#define AT91C_CAN_MB12 (0x1 << 12) // (CAN) Mailbox 12 Flag -#define AT91C_CAN_MB13 (0x1 << 13) // (CAN) Mailbox 13 Flag -#define AT91C_CAN_MB14 (0x1 << 14) // (CAN) Mailbox 14 Flag -#define AT91C_CAN_MB15 (0x1 << 15) // (CAN) Mailbox 15 Flag -#define AT91C_CAN_ERRA (0x1 << 16) // (CAN) Error Active Mode Flag -#define AT91C_CAN_WARN (0x1 << 17) // (CAN) Warning Limit Flag -#define AT91C_CAN_ERRP (0x1 << 18) // (CAN) Error Passive Mode Flag -#define AT91C_CAN_BOFF (0x1 << 19) // (CAN) Bus Off Mode Flag -#define AT91C_CAN_SLEEP (0x1 << 20) // (CAN) Sleep Flag -#define AT91C_CAN_WAKEUP (0x1 << 21) // (CAN) Wakeup Flag -#define AT91C_CAN_TOVF (0x1 << 22) // (CAN) Timer Overflow Flag -#define AT91C_CAN_TSTP (0x1 << 23) // (CAN) Timestamp Flag -#define AT91C_CAN_CERR (0x1 << 24) // (CAN) CRC Error -#define AT91C_CAN_SERR (0x1 << 25) // (CAN) Stuffing Error -#define AT91C_CAN_AERR (0x1 << 26) // (CAN) Acknowledgment Error -#define AT91C_CAN_FERR (0x1 << 27) // (CAN) Form Error -#define AT91C_CAN_BERR (0x1 << 28) // (CAN) Bit Error -// -------- CAN_IDR : (CAN Offset: 0x8) CAN Interrupt Disable Register -------- -// -------- CAN_IMR : (CAN Offset: 0xc) CAN Interrupt Mask Register -------- -// -------- CAN_SR : (CAN Offset: 0x10) CAN Status Register -------- -#define AT91C_CAN_RBSY (0x1 << 29) // (CAN) Receiver Busy -#define AT91C_CAN_TBSY (0x1 << 30) // (CAN) Transmitter Busy -#define AT91C_CAN_OVLY (0x1 << 31) // (CAN) Overload Busy -// -------- CAN_BR : (CAN Offset: 0x14) CAN Baudrate Register -------- -#define AT91C_CAN_PHASE2 (0x7 << 0) // (CAN) Phase 2 segment -#define AT91C_CAN_PHASE1 (0x7 << 4) // (CAN) Phase 1 segment -#define AT91C_CAN_PROPAG (0x7 << 8) // (CAN) Programmation time segment -#define AT91C_CAN_SYNC (0x3 << 12) // (CAN) Re-synchronization jump width segment -#define AT91C_CAN_BRP (0x7F << 16) // (CAN) Baudrate Prescaler -#define AT91C_CAN_SMP (0x1 << 24) // (CAN) Sampling mode -// -------- CAN_TIM : (CAN Offset: 0x18) CAN Timer Register -------- -#define AT91C_CAN_TIMER (0xFFFF << 0) // (CAN) Timer field -// -------- CAN_TIMESTP : (CAN Offset: 0x1c) CAN Timestamp Register -------- -// -------- CAN_ECR : (CAN Offset: 0x20) CAN Error Counter Register -------- -#define AT91C_CAN_REC (0xFF << 0) // (CAN) Receive Error Counter -#define AT91C_CAN_TEC (0xFF << 16) // (CAN) Transmit Error Counter -// -------- CAN_TCR : (CAN Offset: 0x24) CAN Transfer Command Register -------- -#define AT91C_CAN_TIMRST (0x1 << 31) // (CAN) Timer Reset Field -// -------- CAN_ACR : (CAN Offset: 0x28) CAN Abort Command Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Ethernet MAC 10/100 -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_EMAC { - AT91_REG EMAC_NCR; // Network Control Register - AT91_REG EMAC_NCFGR; // Network Configuration Register - AT91_REG EMAC_NSR; // Network Status Register - AT91_REG Reserved0[2]; // - AT91_REG EMAC_TSR; // Transmit Status Register - AT91_REG EMAC_RBQP; // Receive Buffer Queue Pointer - AT91_REG EMAC_TBQP; // Transmit Buffer Queue Pointer - AT91_REG EMAC_RSR; // Receive Status Register - AT91_REG EMAC_ISR; // Interrupt Status Register - AT91_REG EMAC_IER; // Interrupt Enable Register - AT91_REG EMAC_IDR; // Interrupt Disable Register - AT91_REG EMAC_IMR; // Interrupt Mask Register - AT91_REG EMAC_MAN; // PHY Maintenance Register - AT91_REG EMAC_PTR; // Pause Time Register - AT91_REG EMAC_PFR; // Pause Frames received Register - AT91_REG EMAC_FTO; // Frames Transmitted OK Register - AT91_REG EMAC_SCF; // Single Collision Frame Register - AT91_REG EMAC_MCF; // Multiple Collision Frame Register - AT91_REG EMAC_FRO; // Frames Received OK Register - AT91_REG EMAC_FCSE; // Frame Check Sequence Error Register - AT91_REG EMAC_ALE; // Alignment Error Register - AT91_REG EMAC_DTF; // Deferred Transmission Frame Register - AT91_REG EMAC_LCOL; // Late Collision Register - AT91_REG EMAC_ECOL; // Excessive Collision Register - AT91_REG EMAC_TUND; // Transmit Underrun Error Register - AT91_REG EMAC_CSE; // Carrier Sense Error Register - AT91_REG EMAC_RRE; // Receive Ressource Error Register - AT91_REG EMAC_ROV; // Receive Overrun Errors Register - AT91_REG EMAC_RSE; // Receive Symbol Errors Register - AT91_REG EMAC_ELE; // Excessive Length Errors Register - AT91_REG EMAC_RJA; // Receive Jabbers Register - AT91_REG EMAC_USF; // Undersize Frames Register - AT91_REG EMAC_STE; // SQE Test Error Register - AT91_REG EMAC_RLE; // Receive Length Field Mismatch Register - AT91_REG EMAC_TPF; // Transmitted Pause Frames Register - AT91_REG EMAC_HRB; // Hash Address Bottom[31:0] - AT91_REG EMAC_HRT; // Hash Address Top[63:32] - AT91_REG EMAC_SA1L; // Specific Address 1 Bottom, First 4 bytes - AT91_REG EMAC_SA1H; // Specific Address 1 Top, Last 2 bytes - AT91_REG EMAC_SA2L; // Specific Address 2 Bottom, First 4 bytes - AT91_REG EMAC_SA2H; // Specific Address 2 Top, Last 2 bytes - AT91_REG EMAC_SA3L; // Specific Address 3 Bottom, First 4 bytes - AT91_REG EMAC_SA3H; // Specific Address 3 Top, Last 2 bytes - AT91_REG EMAC_SA4L; // Specific Address 4 Bottom, First 4 bytes - AT91_REG EMAC_SA4H; // Specific Address 4 Top, Last 2 bytes - AT91_REG EMAC_TID; // Type ID Checking Register - AT91_REG EMAC_TPQ; // Transmit Pause Quantum Register - AT91_REG EMAC_USRIO; // USER Input/Output Register - AT91_REG EMAC_WOL; // Wake On LAN Register - AT91_REG Reserved1[13]; // - AT91_REG EMAC_REV; // Revision Register -} AT91S_EMAC, *AT91PS_EMAC; -#else -#define EMAC_NCR (AT91_CAST(AT91_REG *) 0x00000000) // (EMAC_NCR) Network Control Register -#define EMAC_NCFGR (AT91_CAST(AT91_REG *) 0x00000004) // (EMAC_NCFGR) Network Configuration Register -#define EMAC_NSR (AT91_CAST(AT91_REG *) 0x00000008) // (EMAC_NSR) Network Status Register -#define EMAC_TSR (AT91_CAST(AT91_REG *) 0x00000014) // (EMAC_TSR) Transmit Status Register -#define EMAC_RBQP (AT91_CAST(AT91_REG *) 0x00000018) // (EMAC_RBQP) Receive Buffer Queue Pointer -#define EMAC_TBQP (AT91_CAST(AT91_REG *) 0x0000001C) // (EMAC_TBQP) Transmit Buffer Queue Pointer -#define EMAC_RSR (AT91_CAST(AT91_REG *) 0x00000020) // (EMAC_RSR) Receive Status Register -#define EMAC_ISR (AT91_CAST(AT91_REG *) 0x00000024) // (EMAC_ISR) Interrupt Status Register -#define EMAC_IER (AT91_CAST(AT91_REG *) 0x00000028) // (EMAC_IER) Interrupt Enable Register -#define EMAC_IDR (AT91_CAST(AT91_REG *) 0x0000002C) // (EMAC_IDR) Interrupt Disable Register -#define EMAC_IMR (AT91_CAST(AT91_REG *) 0x00000030) // (EMAC_IMR) Interrupt Mask Register -#define EMAC_MAN (AT91_CAST(AT91_REG *) 0x00000034) // (EMAC_MAN) PHY Maintenance Register -#define EMAC_PTR (AT91_CAST(AT91_REG *) 0x00000038) // (EMAC_PTR) Pause Time Register -#define EMAC_PFR (AT91_CAST(AT91_REG *) 0x0000003C) // (EMAC_PFR) Pause Frames received Register -#define EMAC_FTO (AT91_CAST(AT91_REG *) 0x00000040) // (EMAC_FTO) Frames Transmitted OK Register -#define EMAC_SCF (AT91_CAST(AT91_REG *) 0x00000044) // (EMAC_SCF) Single Collision Frame Register -#define EMAC_MCF (AT91_CAST(AT91_REG *) 0x00000048) // (EMAC_MCF) Multiple Collision Frame Register -#define EMAC_FRO (AT91_CAST(AT91_REG *) 0x0000004C) // (EMAC_FRO) Frames Received OK Register -#define EMAC_FCSE (AT91_CAST(AT91_REG *) 0x00000050) // (EMAC_FCSE) Frame Check Sequence Error Register -#define EMAC_ALE (AT91_CAST(AT91_REG *) 0x00000054) // (EMAC_ALE) Alignment Error Register -#define EMAC_DTF (AT91_CAST(AT91_REG *) 0x00000058) // (EMAC_DTF) Deferred Transmission Frame Register -#define EMAC_LCOL (AT91_CAST(AT91_REG *) 0x0000005C) // (EMAC_LCOL) Late Collision Register -#define EMAC_ECOL (AT91_CAST(AT91_REG *) 0x00000060) // (EMAC_ECOL) Excessive Collision Register -#define EMAC_TUND (AT91_CAST(AT91_REG *) 0x00000064) // (EMAC_TUND) Transmit Underrun Error Register -#define EMAC_CSE (AT91_CAST(AT91_REG *) 0x00000068) // (EMAC_CSE) Carrier Sense Error Register -#define EMAC_RRE (AT91_CAST(AT91_REG *) 0x0000006C) // (EMAC_RRE) Receive Ressource Error Register -#define EMAC_ROV (AT91_CAST(AT91_REG *) 0x00000070) // (EMAC_ROV) Receive Overrun Errors Register -#define EMAC_RSE (AT91_CAST(AT91_REG *) 0x00000074) // (EMAC_RSE) Receive Symbol Errors Register -#define EMAC_ELE (AT91_CAST(AT91_REG *) 0x00000078) // (EMAC_ELE) Excessive Length Errors Register -#define EMAC_RJA (AT91_CAST(AT91_REG *) 0x0000007C) // (EMAC_RJA) Receive Jabbers Register -#define EMAC_USF (AT91_CAST(AT91_REG *) 0x00000080) // (EMAC_USF) Undersize Frames Register -#define EMAC_STE (AT91_CAST(AT91_REG *) 0x00000084) // (EMAC_STE) SQE Test Error Register -#define EMAC_RLE (AT91_CAST(AT91_REG *) 0x00000088) // (EMAC_RLE) Receive Length Field Mismatch Register -#define EMAC_TPF (AT91_CAST(AT91_REG *) 0x0000008C) // (EMAC_TPF) Transmitted Pause Frames Register -#define EMAC_HRB (AT91_CAST(AT91_REG *) 0x00000090) // (EMAC_HRB) Hash Address Bottom[31:0] -#define EMAC_HRT (AT91_CAST(AT91_REG *) 0x00000094) // (EMAC_HRT) Hash Address Top[63:32] -#define EMAC_SA1L (AT91_CAST(AT91_REG *) 0x00000098) // (EMAC_SA1L) Specific Address 1 Bottom, First 4 bytes -#define EMAC_SA1H (AT91_CAST(AT91_REG *) 0x0000009C) // (EMAC_SA1H) Specific Address 1 Top, Last 2 bytes -#define EMAC_SA2L (AT91_CAST(AT91_REG *) 0x000000A0) // (EMAC_SA2L) Specific Address 2 Bottom, First 4 bytes -#define EMAC_SA2H (AT91_CAST(AT91_REG *) 0x000000A4) // (EMAC_SA2H) Specific Address 2 Top, Last 2 bytes -#define EMAC_SA3L (AT91_CAST(AT91_REG *) 0x000000A8) // (EMAC_SA3L) Specific Address 3 Bottom, First 4 bytes -#define EMAC_SA3H (AT91_CAST(AT91_REG *) 0x000000AC) // (EMAC_SA3H) Specific Address 3 Top, Last 2 bytes -#define EMAC_SA4L (AT91_CAST(AT91_REG *) 0x000000B0) // (EMAC_SA4L) Specific Address 4 Bottom, First 4 bytes -#define EMAC_SA4H (AT91_CAST(AT91_REG *) 0x000000B4) // (EMAC_SA4H) Specific Address 4 Top, Last 2 bytes -#define EMAC_TID (AT91_CAST(AT91_REG *) 0x000000B8) // (EMAC_TID) Type ID Checking Register -#define EMAC_TPQ (AT91_CAST(AT91_REG *) 0x000000BC) // (EMAC_TPQ) Transmit Pause Quantum Register -#define EMAC_USRIO (AT91_CAST(AT91_REG *) 0x000000C0) // (EMAC_USRIO) USER Input/Output Register -#define EMAC_WOL (AT91_CAST(AT91_REG *) 0x000000C4) // (EMAC_WOL) Wake On LAN Register -#define EMAC_REV (AT91_CAST(AT91_REG *) 0x000000FC) // (EMAC_REV) Revision Register - -#endif -// -------- EMAC_NCR : (EMAC Offset: 0x0) -------- -#define AT91C_EMAC_LB (0x1 << 0) // (EMAC) Loopback. Optional. When set, loopback signal is at high level. -#define AT91C_EMAC_LLB (0x1 << 1) // (EMAC) Loopback local. -#define AT91C_EMAC_RE (0x1 << 2) // (EMAC) Receive enable. -#define AT91C_EMAC_TE (0x1 << 3) // (EMAC) Transmit enable. -#define AT91C_EMAC_MPE (0x1 << 4) // (EMAC) Management port enable. -#define AT91C_EMAC_CLRSTAT (0x1 << 5) // (EMAC) Clear statistics registers. -#define AT91C_EMAC_INCSTAT (0x1 << 6) // (EMAC) Increment statistics registers. -#define AT91C_EMAC_WESTAT (0x1 << 7) // (EMAC) Write enable for statistics registers. -#define AT91C_EMAC_BP (0x1 << 8) // (EMAC) Back pressure. -#define AT91C_EMAC_TSTART (0x1 << 9) // (EMAC) Start Transmission. -#define AT91C_EMAC_THALT (0x1 << 10) // (EMAC) Transmission Halt. -#define AT91C_EMAC_TPFR (0x1 << 11) // (EMAC) Transmit pause frame -#define AT91C_EMAC_TZQ (0x1 << 12) // (EMAC) Transmit zero quantum pause frame -// -------- EMAC_NCFGR : (EMAC Offset: 0x4) Network Configuration Register -------- -#define AT91C_EMAC_SPD (0x1 << 0) // (EMAC) Speed. -#define AT91C_EMAC_FD (0x1 << 1) // (EMAC) Full duplex. -#define AT91C_EMAC_JFRAME (0x1 << 3) // (EMAC) Jumbo Frames. -#define AT91C_EMAC_CAF (0x1 << 4) // (EMAC) Copy all frames. -#define AT91C_EMAC_NBC (0x1 << 5) // (EMAC) No broadcast. -#define AT91C_EMAC_MTI (0x1 << 6) // (EMAC) Multicast hash event enable -#define AT91C_EMAC_UNI (0x1 << 7) // (EMAC) Unicast hash enable. -#define AT91C_EMAC_BIG (0x1 << 8) // (EMAC) Receive 1522 bytes. -#define AT91C_EMAC_EAE (0x1 << 9) // (EMAC) External address match enable. -#define AT91C_EMAC_CLK (0x3 << 10) // (EMAC) -#define AT91C_EMAC_CLK_HCLK_8 (0x0 << 10) // (EMAC) HCLK divided by 8 -#define AT91C_EMAC_CLK_HCLK_16 (0x1 << 10) // (EMAC) HCLK divided by 16 -#define AT91C_EMAC_CLK_HCLK_32 (0x2 << 10) // (EMAC) HCLK divided by 32 -#define AT91C_EMAC_CLK_HCLK_64 (0x3 << 10) // (EMAC) HCLK divided by 64 -#define AT91C_EMAC_RTY (0x1 << 12) // (EMAC) -#define AT91C_EMAC_PAE (0x1 << 13) // (EMAC) -#define AT91C_EMAC_RBOF (0x3 << 14) // (EMAC) -#define AT91C_EMAC_RBOF_OFFSET_0 (0x0 << 14) // (EMAC) no offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_1 (0x1 << 14) // (EMAC) one byte offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_2 (0x2 << 14) // (EMAC) two bytes offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_3 (0x3 << 14) // (EMAC) three bytes offset from start of receive buffer -#define AT91C_EMAC_RLCE (0x1 << 16) // (EMAC) Receive Length field Checking Enable -#define AT91C_EMAC_DRFCS (0x1 << 17) // (EMAC) Discard Receive FCS -#define AT91C_EMAC_EFRHD (0x1 << 18) // (EMAC) -#define AT91C_EMAC_IRXFCS (0x1 << 19) // (EMAC) Ignore RX FCS -// -------- EMAC_NSR : (EMAC Offset: 0x8) Network Status Register -------- -#define AT91C_EMAC_LINKR (0x1 << 0) // (EMAC) -#define AT91C_EMAC_MDIO (0x1 << 1) // (EMAC) -#define AT91C_EMAC_IDLE (0x1 << 2) // (EMAC) -// -------- EMAC_TSR : (EMAC Offset: 0x14) Transmit Status Register -------- -#define AT91C_EMAC_UBR (0x1 << 0) // (EMAC) -#define AT91C_EMAC_COL (0x1 << 1) // (EMAC) -#define AT91C_EMAC_RLES (0x1 << 2) // (EMAC) -#define AT91C_EMAC_TGO (0x1 << 3) // (EMAC) Transmit Go -#define AT91C_EMAC_BEX (0x1 << 4) // (EMAC) Buffers exhausted mid frame -#define AT91C_EMAC_COMP (0x1 << 5) // (EMAC) -#define AT91C_EMAC_UND (0x1 << 6) // (EMAC) -// -------- EMAC_RSR : (EMAC Offset: 0x20) Receive Status Register -------- -#define AT91C_EMAC_BNA (0x1 << 0) // (EMAC) -#define AT91C_EMAC_REC (0x1 << 1) // (EMAC) -#define AT91C_EMAC_OVR (0x1 << 2) // (EMAC) -// -------- EMAC_ISR : (EMAC Offset: 0x24) Interrupt Status Register -------- -#define AT91C_EMAC_MFD (0x1 << 0) // (EMAC) -#define AT91C_EMAC_RCOMP (0x1 << 1) // (EMAC) -#define AT91C_EMAC_RXUBR (0x1 << 2) // (EMAC) -#define AT91C_EMAC_TXUBR (0x1 << 3) // (EMAC) -#define AT91C_EMAC_TUNDR (0x1 << 4) // (EMAC) -#define AT91C_EMAC_RLEX (0x1 << 5) // (EMAC) -#define AT91C_EMAC_TXERR (0x1 << 6) // (EMAC) -#define AT91C_EMAC_TCOMP (0x1 << 7) // (EMAC) -#define AT91C_EMAC_LINK (0x1 << 9) // (EMAC) -#define AT91C_EMAC_ROVR (0x1 << 10) // (EMAC) -#define AT91C_EMAC_HRESP (0x1 << 11) // (EMAC) -#define AT91C_EMAC_PFRE (0x1 << 12) // (EMAC) -#define AT91C_EMAC_PTZ (0x1 << 13) // (EMAC) -// -------- EMAC_IER : (EMAC Offset: 0x28) Interrupt Enable Register -------- -// -------- EMAC_IDR : (EMAC Offset: 0x2c) Interrupt Disable Register -------- -// -------- EMAC_IMR : (EMAC Offset: 0x30) Interrupt Mask Register -------- -// -------- EMAC_MAN : (EMAC Offset: 0x34) PHY Maintenance Register -------- -#define AT91C_EMAC_DATA (0xFFFF << 0) // (EMAC) -#define AT91C_EMAC_CODE (0x3 << 16) // (EMAC) -#define AT91C_EMAC_REGA (0x1F << 18) // (EMAC) -#define AT91C_EMAC_PHYA (0x1F << 23) // (EMAC) -#define AT91C_EMAC_RW (0x3 << 28) // (EMAC) -#define AT91C_EMAC_SOF (0x3 << 30) // (EMAC) -// -------- EMAC_USRIO : (EMAC Offset: 0xc0) USER Input Output Register -------- -#define AT91C_EMAC_RMII (0x1 << 0) // (EMAC) Reduce MII -#define AT91C_EMAC_CLKEN (0x1 << 1) // (EMAC) Clock Enable -// -------- EMAC_WOL : (EMAC Offset: 0xc4) Wake On LAN Register -------- -#define AT91C_EMAC_IP (0xFFFF << 0) // (EMAC) ARP request IP address -#define AT91C_EMAC_MAG (0x1 << 16) // (EMAC) Magic packet event enable -#define AT91C_EMAC_ARP (0x1 << 17) // (EMAC) ARP request event enable -#define AT91C_EMAC_SA1 (0x1 << 18) // (EMAC) Specific address register 1 event enable -// -------- EMAC_REV : (EMAC Offset: 0xfc) Revision Register -------- -#define AT91C_EMAC_REVREF (0xFFFF << 0) // (EMAC) -#define AT91C_EMAC_PARTREF (0xFFFF << 16) // (EMAC) - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Analog to Digital Convertor -// ***************************************************************************** -#ifndef __ASSEMBLY__ -typedef struct _AT91S_ADC { - AT91_REG ADC_CR; // ADC Control Register - AT91_REG ADC_MR; // ADC Mode Register - AT91_REG Reserved0[2]; // - AT91_REG ADC_CHER; // ADC Channel Enable Register - AT91_REG ADC_CHDR; // ADC Channel Disable Register - AT91_REG ADC_CHSR; // ADC Channel Status Register - AT91_REG ADC_SR; // ADC Status Register - AT91_REG ADC_LCDR; // ADC Last Converted Data Register - AT91_REG ADC_IER; // ADC Interrupt Enable Register - AT91_REG ADC_IDR; // ADC Interrupt Disable Register - AT91_REG ADC_IMR; // ADC Interrupt Mask Register - AT91_REG ADC_CDR0; // ADC Channel Data Register 0 - AT91_REG ADC_CDR1; // ADC Channel Data Register 1 - AT91_REG ADC_CDR2; // ADC Channel Data Register 2 - AT91_REG ADC_CDR3; // ADC Channel Data Register 3 - AT91_REG ADC_CDR4; // ADC Channel Data Register 4 - AT91_REG ADC_CDR5; // ADC Channel Data Register 5 - AT91_REG ADC_CDR6; // ADC Channel Data Register 6 - AT91_REG ADC_CDR7; // ADC Channel Data Register 7 - AT91_REG Reserved1[44]; // - AT91_REG ADC_RPR; // Receive Pointer Register - AT91_REG ADC_RCR; // Receive Counter Register - AT91_REG ADC_TPR; // Transmit Pointer Register - AT91_REG ADC_TCR; // Transmit Counter Register - AT91_REG ADC_RNPR; // Receive Next Pointer Register - AT91_REG ADC_RNCR; // Receive Next Counter Register - AT91_REG ADC_TNPR; // Transmit Next Pointer Register - AT91_REG ADC_TNCR; // Transmit Next Counter Register - AT91_REG ADC_PTCR; // PDC Transfer Control Register - AT91_REG ADC_PTSR; // PDC Transfer Status Register -} AT91S_ADC, *AT91PS_ADC; -#else -#define ADC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (ADC_CR) ADC Control Register -#define ADC_MR (AT91_CAST(AT91_REG *) 0x00000004) // (ADC_MR) ADC Mode Register -#define ADC_CHER (AT91_CAST(AT91_REG *) 0x00000010) // (ADC_CHER) ADC Channel Enable Register -#define ADC_CHDR (AT91_CAST(AT91_REG *) 0x00000014) // (ADC_CHDR) ADC Channel Disable Register -#define ADC_CHSR (AT91_CAST(AT91_REG *) 0x00000018) // (ADC_CHSR) ADC Channel Status Register -#define ADC_SR (AT91_CAST(AT91_REG *) 0x0000001C) // (ADC_SR) ADC Status Register -#define ADC_LCDR (AT91_CAST(AT91_REG *) 0x00000020) // (ADC_LCDR) ADC Last Converted Data Register -#define ADC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (ADC_IER) ADC Interrupt Enable Register -#define ADC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (ADC_IDR) ADC Interrupt Disable Register -#define ADC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (ADC_IMR) ADC Interrupt Mask Register -#define ADC_CDR0 (AT91_CAST(AT91_REG *) 0x00000030) // (ADC_CDR0) ADC Channel Data Register 0 -#define ADC_CDR1 (AT91_CAST(AT91_REG *) 0x00000034) // (ADC_CDR1) ADC Channel Data Register 1 -#define ADC_CDR2 (AT91_CAST(AT91_REG *) 0x00000038) // (ADC_CDR2) ADC Channel Data Register 2 -#define ADC_CDR3 (AT91_CAST(AT91_REG *) 0x0000003C) // (ADC_CDR3) ADC Channel Data Register 3 -#define ADC_CDR4 (AT91_CAST(AT91_REG *) 0x00000040) // (ADC_CDR4) ADC Channel Data Register 4 -#define ADC_CDR5 (AT91_CAST(AT91_REG *) 0x00000044) // (ADC_CDR5) ADC Channel Data Register 5 -#define ADC_CDR6 (AT91_CAST(AT91_REG *) 0x00000048) // (ADC_CDR6) ADC Channel Data Register 6 -#define ADC_CDR7 (AT91_CAST(AT91_REG *) 0x0000004C) // (ADC_CDR7) ADC Channel Data Register 7 - -#endif -// -------- ADC_CR : (ADC Offset: 0x0) ADC Control Register -------- -#define AT91C_ADC_SWRST (0x1 << 0) // (ADC) Software Reset -#define AT91C_ADC_START (0x1 << 1) // (ADC) Start Conversion -// -------- ADC_MR : (ADC Offset: 0x4) ADC Mode Register -------- -#define AT91C_ADC_TRGEN (0x1 << 0) // (ADC) Trigger Enable -#define AT91C_ADC_TRGEN_DIS (0x0) // (ADC) Hradware triggers are disabled. Starting a conversion is only possible by software -#define AT91C_ADC_TRGEN_EN (0x1) // (ADC) Hardware trigger selected by TRGSEL field is enabled. -#define AT91C_ADC_TRGSEL (0x7 << 1) // (ADC) Trigger Selection -#define AT91C_ADC_TRGSEL_TIOA0 (0x0 << 1) // (ADC) Selected TRGSEL = TIAO0 -#define AT91C_ADC_TRGSEL_TIOA1 (0x1 << 1) // (ADC) Selected TRGSEL = TIAO1 -#define AT91C_ADC_TRGSEL_TIOA2 (0x2 << 1) // (ADC) Selected TRGSEL = TIAO2 -#define AT91C_ADC_TRGSEL_TIOA3 (0x3 << 1) // (ADC) Selected TRGSEL = TIAO3 -#define AT91C_ADC_TRGSEL_TIOA4 (0x4 << 1) // (ADC) Selected TRGSEL = TIAO4 -#define AT91C_ADC_TRGSEL_TIOA5 (0x5 << 1) // (ADC) Selected TRGSEL = TIAO5 -#define AT91C_ADC_TRGSEL_EXT (0x6 << 1) // (ADC) Selected TRGSEL = External Trigger -#define AT91C_ADC_LOWRES (0x1 << 4) // (ADC) Resolution. -#define AT91C_ADC_LOWRES_10_BIT (0x0 << 4) // (ADC) 10-bit resolution -#define AT91C_ADC_LOWRES_8_BIT (0x1 << 4) // (ADC) 8-bit resolution -#define AT91C_ADC_SLEEP (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_SLEEP_NORMAL_MODE (0x0 << 5) // (ADC) Normal Mode -#define AT91C_ADC_SLEEP_MODE (0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_PRESCAL (0x3F << 8) // (ADC) Prescaler rate selection -#define AT91C_ADC_STARTUP (0x1F << 16) // (ADC) Startup Time -#define AT91C_ADC_SHTIM (0xF << 24) // (ADC) Sample & Hold Time -// -------- ADC_CHER : (ADC Offset: 0x10) ADC Channel Enable Register -------- -#define AT91C_ADC_CH0 (0x1 << 0) // (ADC) Channel 0 -#define AT91C_ADC_CH1 (0x1 << 1) // (ADC) Channel 1 -#define AT91C_ADC_CH2 (0x1 << 2) // (ADC) Channel 2 -#define AT91C_ADC_CH3 (0x1 << 3) // (ADC) Channel 3 -#define AT91C_ADC_CH4 (0x1 << 4) // (ADC) Channel 4 -#define AT91C_ADC_CH5 (0x1 << 5) // (ADC) Channel 5 -#define AT91C_ADC_CH6 (0x1 << 6) // (ADC) Channel 6 -#define AT91C_ADC_CH7 (0x1 << 7) // (ADC) Channel 7 -// -------- ADC_CHDR : (ADC Offset: 0x14) ADC Channel Disable Register -------- -// -------- ADC_CHSR : (ADC Offset: 0x18) ADC Channel Status Register -------- -// -------- ADC_SR : (ADC Offset: 0x1c) ADC Status Register -------- -#define AT91C_ADC_EOC0 (0x1 << 0) // (ADC) End of Conversion -#define AT91C_ADC_EOC1 (0x1 << 1) // (ADC) End of Conversion -#define AT91C_ADC_EOC2 (0x1 << 2) // (ADC) End of Conversion -#define AT91C_ADC_EOC3 (0x1 << 3) // (ADC) End of Conversion -#define AT91C_ADC_EOC4 (0x1 << 4) // (ADC) End of Conversion -#define AT91C_ADC_EOC5 (0x1 << 5) // (ADC) End of Conversion -#define AT91C_ADC_EOC6 (0x1 << 6) // (ADC) End of Conversion -#define AT91C_ADC_EOC7 (0x1 << 7) // (ADC) End of Conversion -#define AT91C_ADC_OVRE0 (0x1 << 8) // (ADC) Overrun Error -#define AT91C_ADC_OVRE1 (0x1 << 9) // (ADC) Overrun Error -#define AT91C_ADC_OVRE2 (0x1 << 10) // (ADC) Overrun Error -#define AT91C_ADC_OVRE3 (0x1 << 11) // (ADC) Overrun Error -#define AT91C_ADC_OVRE4 (0x1 << 12) // (ADC) Overrun Error -#define AT91C_ADC_OVRE5 (0x1 << 13) // (ADC) Overrun Error -#define AT91C_ADC_OVRE6 (0x1 << 14) // (ADC) Overrun Error -#define AT91C_ADC_OVRE7 (0x1 << 15) // (ADC) Overrun Error -#define AT91C_ADC_DRDY (0x1 << 16) // (ADC) Data Ready -#define AT91C_ADC_GOVRE (0x1 << 17) // (ADC) General Overrun -#define AT91C_ADC_ENDRX (0x1 << 18) // (ADC) End of Receiver Transfer -#define AT91C_ADC_RXBUFF (0x1 << 19) // (ADC) RXBUFF Interrupt -// -------- ADC_LCDR : (ADC Offset: 0x20) ADC Last Converted Data Register -------- -#define AT91C_ADC_LDATA (0x3FF << 0) // (ADC) Last Data Converted -// -------- ADC_IER : (ADC Offset: 0x24) ADC Interrupt Enable Register -------- -// -------- ADC_IDR : (ADC Offset: 0x28) ADC Interrupt Disable Register -------- -// -------- ADC_IMR : (ADC Offset: 0x2c) ADC Interrupt Mask Register -------- -// -------- ADC_CDR0 : (ADC Offset: 0x30) ADC Channel Data Register 0 -------- -#define AT91C_ADC_DATA (0x3FF << 0) // (ADC) Converted Data -// -------- ADC_CDR1 : (ADC Offset: 0x34) ADC Channel Data Register 1 -------- -// -------- ADC_CDR2 : (ADC Offset: 0x38) ADC Channel Data Register 2 -------- -// -------- ADC_CDR3 : (ADC Offset: 0x3c) ADC Channel Data Register 3 -------- -// -------- ADC_CDR4 : (ADC Offset: 0x40) ADC Channel Data Register 4 -------- -// -------- ADC_CDR5 : (ADC Offset: 0x44) ADC Channel Data Register 5 -------- -// -------- ADC_CDR6 : (ADC Offset: 0x48) ADC Channel Data Register 6 -------- -// -------- ADC_CDR7 : (ADC Offset: 0x4c) ADC Channel Data Register 7 -------- - -// ***************************************************************************** -// REGISTER ADDRESS DEFINITION FOR AT91SAM7X512 -// ***************************************************************************** -// ========== Register definition for SYS peripheral ========== -// ========== Register definition for AIC peripheral ========== -#define AT91C_AIC_IVR (AT91_CAST(AT91_REG *) 0xFFFFF100) // (AIC) IRQ Vector Register -#define AT91C_AIC_SMR (AT91_CAST(AT91_REG *) 0xFFFFF000) // (AIC) Source Mode Register -#define AT91C_AIC_FVR (AT91_CAST(AT91_REG *) 0xFFFFF104) // (AIC) FIQ Vector Register -#define AT91C_AIC_DCR (AT91_CAST(AT91_REG *) 0xFFFFF138) // (AIC) Debug Control Register (Protect) -#define AT91C_AIC_EOICR (AT91_CAST(AT91_REG *) 0xFFFFF130) // (AIC) End of Interrupt Command Register -#define AT91C_AIC_SVR (AT91_CAST(AT91_REG *) 0xFFFFF080) // (AIC) Source Vector Register -#define AT91C_AIC_FFSR (AT91_CAST(AT91_REG *) 0xFFFFF148) // (AIC) Fast Forcing Status Register -#define AT91C_AIC_ICCR (AT91_CAST(AT91_REG *) 0xFFFFF128) // (AIC) Interrupt Clear Command Register -#define AT91C_AIC_ISR (AT91_CAST(AT91_REG *) 0xFFFFF108) // (AIC) Interrupt Status Register -#define AT91C_AIC_IMR (AT91_CAST(AT91_REG *) 0xFFFFF110) // (AIC) Interrupt Mask Register -#define AT91C_AIC_IPR (AT91_CAST(AT91_REG *) 0xFFFFF10C) // (AIC) Interrupt Pending Register -#define AT91C_AIC_FFER (AT91_CAST(AT91_REG *) 0xFFFFF140) // (AIC) Fast Forcing Enable Register -#define AT91C_AIC_IECR (AT91_CAST(AT91_REG *) 0xFFFFF120) // (AIC) Interrupt Enable Command Register -#define AT91C_AIC_ISCR (AT91_CAST(AT91_REG *) 0xFFFFF12C) // (AIC) Interrupt Set Command Register -#define AT91C_AIC_FFDR (AT91_CAST(AT91_REG *) 0xFFFFF144) // (AIC) Fast Forcing Disable Register -#define AT91C_AIC_CISR (AT91_CAST(AT91_REG *) 0xFFFFF114) // (AIC) Core Interrupt Status Register -#define AT91C_AIC_IDCR (AT91_CAST(AT91_REG *) 0xFFFFF124) // (AIC) Interrupt Disable Command Register -#define AT91C_AIC_SPU (AT91_CAST(AT91_REG *) 0xFFFFF134) // (AIC) Spurious Vector Register -// ========== Register definition for PDC_DBGU peripheral ========== -#define AT91C_DBGU_TCR (AT91_CAST(AT91_REG *) 0xFFFFF30C) // (PDC_DBGU) Transmit Counter Register -#define AT91C_DBGU_RNPR (AT91_CAST(AT91_REG *) 0xFFFFF310) // (PDC_DBGU) Receive Next Pointer Register -#define AT91C_DBGU_TNPR (AT91_CAST(AT91_REG *) 0xFFFFF318) // (PDC_DBGU) Transmit Next Pointer Register -#define AT91C_DBGU_TPR (AT91_CAST(AT91_REG *) 0xFFFFF308) // (PDC_DBGU) Transmit Pointer Register -#define AT91C_DBGU_RPR (AT91_CAST(AT91_REG *) 0xFFFFF300) // (PDC_DBGU) Receive Pointer Register -#define AT91C_DBGU_RCR (AT91_CAST(AT91_REG *) 0xFFFFF304) // (PDC_DBGU) Receive Counter Register -#define AT91C_DBGU_RNCR (AT91_CAST(AT91_REG *) 0xFFFFF314) // (PDC_DBGU) Receive Next Counter Register -#define AT91C_DBGU_PTCR (AT91_CAST(AT91_REG *) 0xFFFFF320) // (PDC_DBGU) PDC Transfer Control Register -#define AT91C_DBGU_PTSR (AT91_CAST(AT91_REG *) 0xFFFFF324) // (PDC_DBGU) PDC Transfer Status Register -#define AT91C_DBGU_TNCR (AT91_CAST(AT91_REG *) 0xFFFFF31C) // (PDC_DBGU) Transmit Next Counter Register -// ========== Register definition for DBGU peripheral ========== -#define AT91C_DBGU_EXID (AT91_CAST(AT91_REG *) 0xFFFFF244) // (DBGU) Chip ID Extension Register -#define AT91C_DBGU_BRGR (AT91_CAST(AT91_REG *) 0xFFFFF220) // (DBGU) Baud Rate Generator Register -#define AT91C_DBGU_IDR (AT91_CAST(AT91_REG *) 0xFFFFF20C) // (DBGU) Interrupt Disable Register -#define AT91C_DBGU_CSR (AT91_CAST(AT91_REG *) 0xFFFFF214) // (DBGU) Channel Status Register -#define AT91C_DBGU_CIDR (AT91_CAST(AT91_REG *) 0xFFFFF240) // (DBGU) Chip ID Register -#define AT91C_DBGU_MR (AT91_CAST(AT91_REG *) 0xFFFFF204) // (DBGU) Mode Register -#define AT91C_DBGU_IMR (AT91_CAST(AT91_REG *) 0xFFFFF210) // (DBGU) Interrupt Mask Register -#define AT91C_DBGU_CR (AT91_CAST(AT91_REG *) 0xFFFFF200) // (DBGU) Control Register -#define AT91C_DBGU_FNTR (AT91_CAST(AT91_REG *) 0xFFFFF248) // (DBGU) Force NTRST Register -#define AT91C_DBGU_THR (AT91_CAST(AT91_REG *) 0xFFFFF21C) // (DBGU) Transmitter Holding Register -#define AT91C_DBGU_RHR (AT91_CAST(AT91_REG *) 0xFFFFF218) // (DBGU) Receiver Holding Register -#define AT91C_DBGU_IER (AT91_CAST(AT91_REG *) 0xFFFFF208) // (DBGU) Interrupt Enable Register -// ========== Register definition for PIOA peripheral ========== -#define AT91C_PIOA_ODR (AT91_CAST(AT91_REG *) 0xFFFFF414) // (PIOA) Output Disable Registerr -#define AT91C_PIOA_SODR (AT91_CAST(AT91_REG *) 0xFFFFF430) // (PIOA) Set Output Data Register -#define AT91C_PIOA_ISR (AT91_CAST(AT91_REG *) 0xFFFFF44C) // (PIOA) Interrupt Status Register -#define AT91C_PIOA_ABSR (AT91_CAST(AT91_REG *) 0xFFFFF478) // (PIOA) AB Select Status Register -#define AT91C_PIOA_IER (AT91_CAST(AT91_REG *) 0xFFFFF440) // (PIOA) Interrupt Enable Register -#define AT91C_PIOA_PPUDR (AT91_CAST(AT91_REG *) 0xFFFFF460) // (PIOA) Pull-up Disable Register -#define AT91C_PIOA_IMR (AT91_CAST(AT91_REG *) 0xFFFFF448) // (PIOA) Interrupt Mask Register -#define AT91C_PIOA_PER (AT91_CAST(AT91_REG *) 0xFFFFF400) // (PIOA) PIO Enable Register -#define AT91C_PIOA_IFDR (AT91_CAST(AT91_REG *) 0xFFFFF424) // (PIOA) Input Filter Disable Register -#define AT91C_PIOA_OWDR (AT91_CAST(AT91_REG *) 0xFFFFF4A4) // (PIOA) Output Write Disable Register -#define AT91C_PIOA_MDSR (AT91_CAST(AT91_REG *) 0xFFFFF458) // (PIOA) Multi-driver Status Register -#define AT91C_PIOA_IDR (AT91_CAST(AT91_REG *) 0xFFFFF444) // (PIOA) Interrupt Disable Register -#define AT91C_PIOA_ODSR (AT91_CAST(AT91_REG *) 0xFFFFF438) // (PIOA) Output Data Status Register -#define AT91C_PIOA_PPUSR (AT91_CAST(AT91_REG *) 0xFFFFF468) // (PIOA) Pull-up Status Register -#define AT91C_PIOA_OWSR (AT91_CAST(AT91_REG *) 0xFFFFF4A8) // (PIOA) Output Write Status Register -#define AT91C_PIOA_BSR (AT91_CAST(AT91_REG *) 0xFFFFF474) // (PIOA) Select B Register -#define AT91C_PIOA_OWER (AT91_CAST(AT91_REG *) 0xFFFFF4A0) // (PIOA) Output Write Enable Register -#define AT91C_PIOA_IFER (AT91_CAST(AT91_REG *) 0xFFFFF420) // (PIOA) Input Filter Enable Register -#define AT91C_PIOA_PDSR (AT91_CAST(AT91_REG *) 0xFFFFF43C) // (PIOA) Pin Data Status Register -#define AT91C_PIOA_PPUER (AT91_CAST(AT91_REG *) 0xFFFFF464) // (PIOA) Pull-up Enable Register -#define AT91C_PIOA_OSR (AT91_CAST(AT91_REG *) 0xFFFFF418) // (PIOA) Output Status Register -#define AT91C_PIOA_ASR (AT91_CAST(AT91_REG *) 0xFFFFF470) // (PIOA) Select A Register -#define AT91C_PIOA_MDDR (AT91_CAST(AT91_REG *) 0xFFFFF454) // (PIOA) Multi-driver Disable Register -#define AT91C_PIOA_CODR (AT91_CAST(AT91_REG *) 0xFFFFF434) // (PIOA) Clear Output Data Register -#define AT91C_PIOA_MDER (AT91_CAST(AT91_REG *) 0xFFFFF450) // (PIOA) Multi-driver Enable Register -#define AT91C_PIOA_PDR (AT91_CAST(AT91_REG *) 0xFFFFF404) // (PIOA) PIO Disable Register -#define AT91C_PIOA_IFSR (AT91_CAST(AT91_REG *) 0xFFFFF428) // (PIOA) Input Filter Status Register -#define AT91C_PIOA_OER (AT91_CAST(AT91_REG *) 0xFFFFF410) // (PIOA) Output Enable Register -#define AT91C_PIOA_PSR (AT91_CAST(AT91_REG *) 0xFFFFF408) // (PIOA) PIO Status Register -// ========== Register definition for PIOB peripheral ========== -#define AT91C_PIOB_OWDR (AT91_CAST(AT91_REG *) 0xFFFFF6A4) // (PIOB) Output Write Disable Register -#define AT91C_PIOB_MDER (AT91_CAST(AT91_REG *) 0xFFFFF650) // (PIOB) Multi-driver Enable Register -#define AT91C_PIOB_PPUSR (AT91_CAST(AT91_REG *) 0xFFFFF668) // (PIOB) Pull-up Status Register -#define AT91C_PIOB_IMR (AT91_CAST(AT91_REG *) 0xFFFFF648) // (PIOB) Interrupt Mask Register -#define AT91C_PIOB_ASR (AT91_CAST(AT91_REG *) 0xFFFFF670) // (PIOB) Select A Register -#define AT91C_PIOB_PPUDR (AT91_CAST(AT91_REG *) 0xFFFFF660) // (PIOB) Pull-up Disable Register -#define AT91C_PIOB_PSR (AT91_CAST(AT91_REG *) 0xFFFFF608) // (PIOB) PIO Status Register -#define AT91C_PIOB_IER (AT91_CAST(AT91_REG *) 0xFFFFF640) // (PIOB) Interrupt Enable Register -#define AT91C_PIOB_CODR (AT91_CAST(AT91_REG *) 0xFFFFF634) // (PIOB) Clear Output Data Register -#define AT91C_PIOB_OWER (AT91_CAST(AT91_REG *) 0xFFFFF6A0) // (PIOB) Output Write Enable Register -#define AT91C_PIOB_ABSR (AT91_CAST(AT91_REG *) 0xFFFFF678) // (PIOB) AB Select Status Register -#define AT91C_PIOB_IFDR (AT91_CAST(AT91_REG *) 0xFFFFF624) // (PIOB) Input Filter Disable Register -#define AT91C_PIOB_PDSR (AT91_CAST(AT91_REG *) 0xFFFFF63C) // (PIOB) Pin Data Status Register -#define AT91C_PIOB_IDR (AT91_CAST(AT91_REG *) 0xFFFFF644) // (PIOB) Interrupt Disable Register -#define AT91C_PIOB_OWSR (AT91_CAST(AT91_REG *) 0xFFFFF6A8) // (PIOB) Output Write Status Register -#define AT91C_PIOB_PDR (AT91_CAST(AT91_REG *) 0xFFFFF604) // (PIOB) PIO Disable Register -#define AT91C_PIOB_ODR (AT91_CAST(AT91_REG *) 0xFFFFF614) // (PIOB) Output Disable Registerr -#define AT91C_PIOB_IFSR (AT91_CAST(AT91_REG *) 0xFFFFF628) // (PIOB) Input Filter Status Register -#define AT91C_PIOB_PPUER (AT91_CAST(AT91_REG *) 0xFFFFF664) // (PIOB) Pull-up Enable Register -#define AT91C_PIOB_SODR (AT91_CAST(AT91_REG *) 0xFFFFF630) // (PIOB) Set Output Data Register -#define AT91C_PIOB_ISR (AT91_CAST(AT91_REG *) 0xFFFFF64C) // (PIOB) Interrupt Status Register -#define AT91C_PIOB_ODSR (AT91_CAST(AT91_REG *) 0xFFFFF638) // (PIOB) Output Data Status Register -#define AT91C_PIOB_OSR (AT91_CAST(AT91_REG *) 0xFFFFF618) // (PIOB) Output Status Register -#define AT91C_PIOB_MDSR (AT91_CAST(AT91_REG *) 0xFFFFF658) // (PIOB) Multi-driver Status Register -#define AT91C_PIOB_IFER (AT91_CAST(AT91_REG *) 0xFFFFF620) // (PIOB) Input Filter Enable Register -#define AT91C_PIOB_BSR (AT91_CAST(AT91_REG *) 0xFFFFF674) // (PIOB) Select B Register -#define AT91C_PIOB_MDDR (AT91_CAST(AT91_REG *) 0xFFFFF654) // (PIOB) Multi-driver Disable Register -#define AT91C_PIOB_OER (AT91_CAST(AT91_REG *) 0xFFFFF610) // (PIOB) Output Enable Register -#define AT91C_PIOB_PER (AT91_CAST(AT91_REG *) 0xFFFFF600) // (PIOB) PIO Enable Register -// ========== Register definition for CKGR peripheral ========== -#define AT91C_CKGR_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (CKGR) Main Oscillator Register -#define AT91C_CKGR_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (CKGR) PLL Register -#define AT91C_CKGR_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (CKGR) Main Clock Frequency Register -// ========== Register definition for PMC peripheral ========== -#define AT91C_PMC_IDR (AT91_CAST(AT91_REG *) 0xFFFFFC64) // (PMC) Interrupt Disable Register -#define AT91C_PMC_MOR (AT91_CAST(AT91_REG *) 0xFFFFFC20) // (PMC) Main Oscillator Register -#define AT91C_PMC_PLLR (AT91_CAST(AT91_REG *) 0xFFFFFC2C) // (PMC) PLL Register -#define AT91C_PMC_PCER (AT91_CAST(AT91_REG *) 0xFFFFFC10) // (PMC) Peripheral Clock Enable Register -#define AT91C_PMC_PCKR (AT91_CAST(AT91_REG *) 0xFFFFFC40) // (PMC) Programmable Clock Register -#define AT91C_PMC_MCKR (AT91_CAST(AT91_REG *) 0xFFFFFC30) // (PMC) Master Clock Register -#define AT91C_PMC_SCDR (AT91_CAST(AT91_REG *) 0xFFFFFC04) // (PMC) System Clock Disable Register -#define AT91C_PMC_PCDR (AT91_CAST(AT91_REG *) 0xFFFFFC14) // (PMC) Peripheral Clock Disable Register -#define AT91C_PMC_SCSR (AT91_CAST(AT91_REG *) 0xFFFFFC08) // (PMC) System Clock Status Register -#define AT91C_PMC_PCSR (AT91_CAST(AT91_REG *) 0xFFFFFC18) // (PMC) Peripheral Clock Status Register -#define AT91C_PMC_MCFR (AT91_CAST(AT91_REG *) 0xFFFFFC24) // (PMC) Main Clock Frequency Register -#define AT91C_PMC_SCER (AT91_CAST(AT91_REG *) 0xFFFFFC00) // (PMC) System Clock Enable Register -#define AT91C_PMC_IMR (AT91_CAST(AT91_REG *) 0xFFFFFC6C) // (PMC) Interrupt Mask Register -#define AT91C_PMC_IER (AT91_CAST(AT91_REG *) 0xFFFFFC60) // (PMC) Interrupt Enable Register -#define AT91C_PMC_SR (AT91_CAST(AT91_REG *) 0xFFFFFC68) // (PMC) Status Register -// ========== Register definition for RSTC peripheral ========== -#define AT91C_RSTC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFD00) // (RSTC) Reset Control Register -#define AT91C_RSTC_RMR (AT91_CAST(AT91_REG *) 0xFFFFFD08) // (RSTC) Reset Mode Register -#define AT91C_RSTC_RSR (AT91_CAST(AT91_REG *) 0xFFFFFD04) // (RSTC) Reset Status Register -// ========== Register definition for RTTC peripheral ========== -#define AT91C_RTTC_RTSR (AT91_CAST(AT91_REG *) 0xFFFFFD2C) // (RTTC) Real-time Status Register -#define AT91C_RTTC_RTMR (AT91_CAST(AT91_REG *) 0xFFFFFD20) // (RTTC) Real-time Mode Register -#define AT91C_RTTC_RTVR (AT91_CAST(AT91_REG *) 0xFFFFFD28) // (RTTC) Real-time Value Register -#define AT91C_RTTC_RTAR (AT91_CAST(AT91_REG *) 0xFFFFFD24) // (RTTC) Real-time Alarm Register -// ========== Register definition for PITC peripheral ========== -#define AT91C_PITC_PIVR (AT91_CAST(AT91_REG *) 0xFFFFFD38) // (PITC) Period Interval Value Register -#define AT91C_PITC_PISR (AT91_CAST(AT91_REG *) 0xFFFFFD34) // (PITC) Period Interval Status Register -#define AT91C_PITC_PIIR (AT91_CAST(AT91_REG *) 0xFFFFFD3C) // (PITC) Period Interval Image Register -#define AT91C_PITC_PIMR (AT91_CAST(AT91_REG *) 0xFFFFFD30) // (PITC) Period Interval Mode Register -// ========== Register definition for WDTC peripheral ========== -#define AT91C_WDTC_WDCR (AT91_CAST(AT91_REG *) 0xFFFFFD40) // (WDTC) Watchdog Control Register -#define AT91C_WDTC_WDSR (AT91_CAST(AT91_REG *) 0xFFFFFD48) // (WDTC) Watchdog Status Register -#define AT91C_WDTC_WDMR (AT91_CAST(AT91_REG *) 0xFFFFFD44) // (WDTC) Watchdog Mode Register -// ========== Register definition for VREG peripheral ========== -#define AT91C_VREG_MR (AT91_CAST(AT91_REG *) 0xFFFFFD60) // (VREG) Voltage Regulator Mode Register -// ========== Register definition for EFC0 peripheral ========== -#define AT91C_EFC0_FCR (AT91_CAST(AT91_REG *) 0xFFFFFF64) // (EFC0) MC Flash Command Register -#define AT91C_EFC0_FSR (AT91_CAST(AT91_REG *) 0xFFFFFF68) // (EFC0) MC Flash Status Register -#define AT91C_EFC0_VR (AT91_CAST(AT91_REG *) 0xFFFFFF6C) // (EFC0) MC Flash Version Register -#define AT91C_EFC0_FMR (AT91_CAST(AT91_REG *) 0xFFFFFF60) // (EFC0) MC Flash Mode Register -// ========== Register definition for EFC1 peripheral ========== -#define AT91C_EFC1_VR (AT91_CAST(AT91_REG *) 0xFFFFFF7C) // (EFC1) MC Flash Version Register -#define AT91C_EFC1_FCR (AT91_CAST(AT91_REG *) 0xFFFFFF74) // (EFC1) MC Flash Command Register -#define AT91C_EFC1_FSR (AT91_CAST(AT91_REG *) 0xFFFFFF78) // (EFC1) MC Flash Status Register -#define AT91C_EFC1_FMR (AT91_CAST(AT91_REG *) 0xFFFFFF70) // (EFC1) MC Flash Mode Register -// ========== Register definition for MC peripheral ========== -#define AT91C_MC_ASR (AT91_CAST(AT91_REG *) 0xFFFFFF04) // (MC) MC Abort Status Register -#define AT91C_MC_RCR (AT91_CAST(AT91_REG *) 0xFFFFFF00) // (MC) MC Remap Control Register -#define AT91C_MC_PUP (AT91_CAST(AT91_REG *) 0xFFFFFF50) // (MC) MC Protection Unit Peripherals -#define AT91C_MC_PUIA (AT91_CAST(AT91_REG *) 0xFFFFFF10) // (MC) MC Protection Unit Area -#define AT91C_MC_AASR (AT91_CAST(AT91_REG *) 0xFFFFFF08) // (MC) MC Abort Address Status Register -#define AT91C_MC_PUER (AT91_CAST(AT91_REG *) 0xFFFFFF54) // (MC) MC Protection Unit Enable Register -// ========== Register definition for PDC_SPI1 peripheral ========== -#define AT91C_SPI1_PTCR (AT91_CAST(AT91_REG *) 0xFFFE4120) // (PDC_SPI1) PDC Transfer Control Register -#define AT91C_SPI1_RPR (AT91_CAST(AT91_REG *) 0xFFFE4100) // (PDC_SPI1) Receive Pointer Register -#define AT91C_SPI1_TNCR (AT91_CAST(AT91_REG *) 0xFFFE411C) // (PDC_SPI1) Transmit Next Counter Register -#define AT91C_SPI1_TPR (AT91_CAST(AT91_REG *) 0xFFFE4108) // (PDC_SPI1) Transmit Pointer Register -#define AT91C_SPI1_TNPR (AT91_CAST(AT91_REG *) 0xFFFE4118) // (PDC_SPI1) Transmit Next Pointer Register -#define AT91C_SPI1_TCR (AT91_CAST(AT91_REG *) 0xFFFE410C) // (PDC_SPI1) Transmit Counter Register -#define AT91C_SPI1_RCR (AT91_CAST(AT91_REG *) 0xFFFE4104) // (PDC_SPI1) Receive Counter Register -#define AT91C_SPI1_RNPR (AT91_CAST(AT91_REG *) 0xFFFE4110) // (PDC_SPI1) Receive Next Pointer Register -#define AT91C_SPI1_RNCR (AT91_CAST(AT91_REG *) 0xFFFE4114) // (PDC_SPI1) Receive Next Counter Register -#define AT91C_SPI1_PTSR (AT91_CAST(AT91_REG *) 0xFFFE4124) // (PDC_SPI1) PDC Transfer Status Register -// ========== Register definition for SPI1 peripheral ========== -#define AT91C_SPI1_IMR (AT91_CAST(AT91_REG *) 0xFFFE401C) // (SPI1) Interrupt Mask Register -#define AT91C_SPI1_IER (AT91_CAST(AT91_REG *) 0xFFFE4014) // (SPI1) Interrupt Enable Register -#define AT91C_SPI1_MR (AT91_CAST(AT91_REG *) 0xFFFE4004) // (SPI1) Mode Register -#define AT91C_SPI1_RDR (AT91_CAST(AT91_REG *) 0xFFFE4008) // (SPI1) Receive Data Register -#define AT91C_SPI1_IDR (AT91_CAST(AT91_REG *) 0xFFFE4018) // (SPI1) Interrupt Disable Register -#define AT91C_SPI1_SR (AT91_CAST(AT91_REG *) 0xFFFE4010) // (SPI1) Status Register -#define AT91C_SPI1_TDR (AT91_CAST(AT91_REG *) 0xFFFE400C) // (SPI1) Transmit Data Register -#define AT91C_SPI1_CR (AT91_CAST(AT91_REG *) 0xFFFE4000) // (SPI1) Control Register -#define AT91C_SPI1_CSR (AT91_CAST(AT91_REG *) 0xFFFE4030) // (SPI1) Chip Select Register -// ========== Register definition for PDC_SPI0 peripheral ========== -#define AT91C_SPI0_PTCR (AT91_CAST(AT91_REG *) 0xFFFE0120) // (PDC_SPI0) PDC Transfer Control Register -#define AT91C_SPI0_TPR (AT91_CAST(AT91_REG *) 0xFFFE0108) // (PDC_SPI0) Transmit Pointer Register -#define AT91C_SPI0_TCR (AT91_CAST(AT91_REG *) 0xFFFE010C) // (PDC_SPI0) Transmit Counter Register -#define AT91C_SPI0_RCR (AT91_CAST(AT91_REG *) 0xFFFE0104) // (PDC_SPI0) Receive Counter Register -#define AT91C_SPI0_PTSR (AT91_CAST(AT91_REG *) 0xFFFE0124) // (PDC_SPI0) PDC Transfer Status Register -#define AT91C_SPI0_RNPR (AT91_CAST(AT91_REG *) 0xFFFE0110) // (PDC_SPI0) Receive Next Pointer Register -#define AT91C_SPI0_RPR (AT91_CAST(AT91_REG *) 0xFFFE0100) // (PDC_SPI0) Receive Pointer Register -#define AT91C_SPI0_TNCR (AT91_CAST(AT91_REG *) 0xFFFE011C) // (PDC_SPI0) Transmit Next Counter Register -#define AT91C_SPI0_RNCR (AT91_CAST(AT91_REG *) 0xFFFE0114) // (PDC_SPI0) Receive Next Counter Register -#define AT91C_SPI0_TNPR (AT91_CAST(AT91_REG *) 0xFFFE0118) // (PDC_SPI0) Transmit Next Pointer Register -// ========== Register definition for SPI0 peripheral ========== -#define AT91C_SPI0_IER (AT91_CAST(AT91_REG *) 0xFFFE0014) // (SPI0) Interrupt Enable Register -#define AT91C_SPI0_SR (AT91_CAST(AT91_REG *) 0xFFFE0010) // (SPI0) Status Register -#define AT91C_SPI0_IDR (AT91_CAST(AT91_REG *) 0xFFFE0018) // (SPI0) Interrupt Disable Register -#define AT91C_SPI0_CR (AT91_CAST(AT91_REG *) 0xFFFE0000) // (SPI0) Control Register -#define AT91C_SPI0_MR (AT91_CAST(AT91_REG *) 0xFFFE0004) // (SPI0) Mode Register -#define AT91C_SPI0_IMR (AT91_CAST(AT91_REG *) 0xFFFE001C) // (SPI0) Interrupt Mask Register -#define AT91C_SPI0_TDR (AT91_CAST(AT91_REG *) 0xFFFE000C) // (SPI0) Transmit Data Register -#define AT91C_SPI0_RDR (AT91_CAST(AT91_REG *) 0xFFFE0008) // (SPI0) Receive Data Register -#define AT91C_SPI0_CSR (AT91_CAST(AT91_REG *) 0xFFFE0030) // (SPI0) Chip Select Register -// ========== Register definition for PDC_US1 peripheral ========== -#define AT91C_US1_RNCR (AT91_CAST(AT91_REG *) 0xFFFC4114) // (PDC_US1) Receive Next Counter Register -#define AT91C_US1_PTCR (AT91_CAST(AT91_REG *) 0xFFFC4120) // (PDC_US1) PDC Transfer Control Register -#define AT91C_US1_TCR (AT91_CAST(AT91_REG *) 0xFFFC410C) // (PDC_US1) Transmit Counter Register -#define AT91C_US1_PTSR (AT91_CAST(AT91_REG *) 0xFFFC4124) // (PDC_US1) PDC Transfer Status Register -#define AT91C_US1_TNPR (AT91_CAST(AT91_REG *) 0xFFFC4118) // (PDC_US1) Transmit Next Pointer Register -#define AT91C_US1_RCR (AT91_CAST(AT91_REG *) 0xFFFC4104) // (PDC_US1) Receive Counter Register -#define AT91C_US1_RNPR (AT91_CAST(AT91_REG *) 0xFFFC4110) // (PDC_US1) Receive Next Pointer Register -#define AT91C_US1_RPR (AT91_CAST(AT91_REG *) 0xFFFC4100) // (PDC_US1) Receive Pointer Register -#define AT91C_US1_TNCR (AT91_CAST(AT91_REG *) 0xFFFC411C) // (PDC_US1) Transmit Next Counter Register -#define AT91C_US1_TPR (AT91_CAST(AT91_REG *) 0xFFFC4108) // (PDC_US1) Transmit Pointer Register -// ========== Register definition for US1 peripheral ========== -#define AT91C_US1_IF (AT91_CAST(AT91_REG *) 0xFFFC404C) // (US1) IRDA_FILTER Register -#define AT91C_US1_NER (AT91_CAST(AT91_REG *) 0xFFFC4044) // (US1) Nb Errors Register -#define AT91C_US1_RTOR (AT91_CAST(AT91_REG *) 0xFFFC4024) // (US1) Receiver Time-out Register -#define AT91C_US1_CSR (AT91_CAST(AT91_REG *) 0xFFFC4014) // (US1) Channel Status Register -#define AT91C_US1_IDR (AT91_CAST(AT91_REG *) 0xFFFC400C) // (US1) Interrupt Disable Register -#define AT91C_US1_IER (AT91_CAST(AT91_REG *) 0xFFFC4008) // (US1) Interrupt Enable Register -#define AT91C_US1_THR (AT91_CAST(AT91_REG *) 0xFFFC401C) // (US1) Transmitter Holding Register -#define AT91C_US1_TTGR (AT91_CAST(AT91_REG *) 0xFFFC4028) // (US1) Transmitter Time-guard Register -#define AT91C_US1_RHR (AT91_CAST(AT91_REG *) 0xFFFC4018) // (US1) Receiver Holding Register -#define AT91C_US1_BRGR (AT91_CAST(AT91_REG *) 0xFFFC4020) // (US1) Baud Rate Generator Register -#define AT91C_US1_IMR (AT91_CAST(AT91_REG *) 0xFFFC4010) // (US1) Interrupt Mask Register -#define AT91C_US1_FIDI (AT91_CAST(AT91_REG *) 0xFFFC4040) // (US1) FI_DI_Ratio Register -#define AT91C_US1_CR (AT91_CAST(AT91_REG *) 0xFFFC4000) // (US1) Control Register -#define AT91C_US1_MR (AT91_CAST(AT91_REG *) 0xFFFC4004) // (US1) Mode Register -// ========== Register definition for PDC_US0 peripheral ========== -#define AT91C_US0_TNPR (AT91_CAST(AT91_REG *) 0xFFFC0118) // (PDC_US0) Transmit Next Pointer Register -#define AT91C_US0_RNPR (AT91_CAST(AT91_REG *) 0xFFFC0110) // (PDC_US0) Receive Next Pointer Register -#define AT91C_US0_TCR (AT91_CAST(AT91_REG *) 0xFFFC010C) // (PDC_US0) Transmit Counter Register -#define AT91C_US0_PTCR (AT91_CAST(AT91_REG *) 0xFFFC0120) // (PDC_US0) PDC Transfer Control Register -#define AT91C_US0_PTSR (AT91_CAST(AT91_REG *) 0xFFFC0124) // (PDC_US0) PDC Transfer Status Register -#define AT91C_US0_TNCR (AT91_CAST(AT91_REG *) 0xFFFC011C) // (PDC_US0) Transmit Next Counter Register -#define AT91C_US0_TPR (AT91_CAST(AT91_REG *) 0xFFFC0108) // (PDC_US0) Transmit Pointer Register -#define AT91C_US0_RCR (AT91_CAST(AT91_REG *) 0xFFFC0104) // (PDC_US0) Receive Counter Register -#define AT91C_US0_RPR (AT91_CAST(AT91_REG *) 0xFFFC0100) // (PDC_US0) Receive Pointer Register -#define AT91C_US0_RNCR (AT91_CAST(AT91_REG *) 0xFFFC0114) // (PDC_US0) Receive Next Counter Register -// ========== Register definition for US0 peripheral ========== -#define AT91C_US0_BRGR (AT91_CAST(AT91_REG *) 0xFFFC0020) // (US0) Baud Rate Generator Register -#define AT91C_US0_NER (AT91_CAST(AT91_REG *) 0xFFFC0044) // (US0) Nb Errors Register -#define AT91C_US0_CR (AT91_CAST(AT91_REG *) 0xFFFC0000) // (US0) Control Register -#define AT91C_US0_IMR (AT91_CAST(AT91_REG *) 0xFFFC0010) // (US0) Interrupt Mask Register -#define AT91C_US0_FIDI (AT91_CAST(AT91_REG *) 0xFFFC0040) // (US0) FI_DI_Ratio Register -#define AT91C_US0_TTGR (AT91_CAST(AT91_REG *) 0xFFFC0028) // (US0) Transmitter Time-guard Register -#define AT91C_US0_MR (AT91_CAST(AT91_REG *) 0xFFFC0004) // (US0) Mode Register -#define AT91C_US0_RTOR (AT91_CAST(AT91_REG *) 0xFFFC0024) // (US0) Receiver Time-out Register -#define AT91C_US0_CSR (AT91_CAST(AT91_REG *) 0xFFFC0014) // (US0) Channel Status Register -#define AT91C_US0_RHR (AT91_CAST(AT91_REG *) 0xFFFC0018) // (US0) Receiver Holding Register -#define AT91C_US0_IDR (AT91_CAST(AT91_REG *) 0xFFFC000C) // (US0) Interrupt Disable Register -#define AT91C_US0_THR (AT91_CAST(AT91_REG *) 0xFFFC001C) // (US0) Transmitter Holding Register -#define AT91C_US0_IF (AT91_CAST(AT91_REG *) 0xFFFC004C) // (US0) IRDA_FILTER Register -#define AT91C_US0_IER (AT91_CAST(AT91_REG *) 0xFFFC0008) // (US0) Interrupt Enable Register -// ========== Register definition for PDC_SSC peripheral ========== -#define AT91C_SSC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD411C) // (PDC_SSC) Transmit Next Counter Register -#define AT91C_SSC_RPR (AT91_CAST(AT91_REG *) 0xFFFD4100) // (PDC_SSC) Receive Pointer Register -#define AT91C_SSC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD4114) // (PDC_SSC) Receive Next Counter Register -#define AT91C_SSC_TPR (AT91_CAST(AT91_REG *) 0xFFFD4108) // (PDC_SSC) Transmit Pointer Register -#define AT91C_SSC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD4120) // (PDC_SSC) PDC Transfer Control Register -#define AT91C_SSC_TCR (AT91_CAST(AT91_REG *) 0xFFFD410C) // (PDC_SSC) Transmit Counter Register -#define AT91C_SSC_RCR (AT91_CAST(AT91_REG *) 0xFFFD4104) // (PDC_SSC) Receive Counter Register -#define AT91C_SSC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD4110) // (PDC_SSC) Receive Next Pointer Register -#define AT91C_SSC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD4118) // (PDC_SSC) Transmit Next Pointer Register -#define AT91C_SSC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD4124) // (PDC_SSC) PDC Transfer Status Register -// ========== Register definition for SSC peripheral ========== -#define AT91C_SSC_RHR (AT91_CAST(AT91_REG *) 0xFFFD4020) // (SSC) Receive Holding Register -#define AT91C_SSC_RSHR (AT91_CAST(AT91_REG *) 0xFFFD4030) // (SSC) Receive Sync Holding Register -#define AT91C_SSC_TFMR (AT91_CAST(AT91_REG *) 0xFFFD401C) // (SSC) Transmit Frame Mode Register -#define AT91C_SSC_IDR (AT91_CAST(AT91_REG *) 0xFFFD4048) // (SSC) Interrupt Disable Register -#define AT91C_SSC_THR (AT91_CAST(AT91_REG *) 0xFFFD4024) // (SSC) Transmit Holding Register -#define AT91C_SSC_RCMR (AT91_CAST(AT91_REG *) 0xFFFD4010) // (SSC) Receive Clock ModeRegister -#define AT91C_SSC_IER (AT91_CAST(AT91_REG *) 0xFFFD4044) // (SSC) Interrupt Enable Register -#define AT91C_SSC_TSHR (AT91_CAST(AT91_REG *) 0xFFFD4034) // (SSC) Transmit Sync Holding Register -#define AT91C_SSC_SR (AT91_CAST(AT91_REG *) 0xFFFD4040) // (SSC) Status Register -#define AT91C_SSC_CMR (AT91_CAST(AT91_REG *) 0xFFFD4004) // (SSC) Clock Mode Register -#define AT91C_SSC_TCMR (AT91_CAST(AT91_REG *) 0xFFFD4018) // (SSC) Transmit Clock Mode Register -#define AT91C_SSC_CR (AT91_CAST(AT91_REG *) 0xFFFD4000) // (SSC) Control Register -#define AT91C_SSC_IMR (AT91_CAST(AT91_REG *) 0xFFFD404C) // (SSC) Interrupt Mask Register -#define AT91C_SSC_RFMR (AT91_CAST(AT91_REG *) 0xFFFD4014) // (SSC) Receive Frame Mode Register -// ========== Register definition for TWI peripheral ========== -#define AT91C_TWI_IER (AT91_CAST(AT91_REG *) 0xFFFB8024) // (TWI) Interrupt Enable Register -#define AT91C_TWI_CR (AT91_CAST(AT91_REG *) 0xFFFB8000) // (TWI) Control Register -#define AT91C_TWI_SR (AT91_CAST(AT91_REG *) 0xFFFB8020) // (TWI) Status Register -#define AT91C_TWI_IMR (AT91_CAST(AT91_REG *) 0xFFFB802C) // (TWI) Interrupt Mask Register -#define AT91C_TWI_THR (AT91_CAST(AT91_REG *) 0xFFFB8034) // (TWI) Transmit Holding Register -#define AT91C_TWI_IDR (AT91_CAST(AT91_REG *) 0xFFFB8028) // (TWI) Interrupt Disable Register -#define AT91C_TWI_IADR (AT91_CAST(AT91_REG *) 0xFFFB800C) // (TWI) Internal Address Register -#define AT91C_TWI_MMR (AT91_CAST(AT91_REG *) 0xFFFB8004) // (TWI) Master Mode Register -#define AT91C_TWI_CWGR (AT91_CAST(AT91_REG *) 0xFFFB8010) // (TWI) Clock Waveform Generator Register -#define AT91C_TWI_RHR (AT91_CAST(AT91_REG *) 0xFFFB8030) // (TWI) Receive Holding Register -// ========== Register definition for PWMC_CH3 peripheral ========== -#define AT91C_PWMC_CH3_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC270) // (PWMC_CH3) Channel Update Register -#define AT91C_PWMC_CH3_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC274) // (PWMC_CH3) Reserved -#define AT91C_PWMC_CH3_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC268) // (PWMC_CH3) Channel Period Register -#define AT91C_PWMC_CH3_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC264) // (PWMC_CH3) Channel Duty Cycle Register -#define AT91C_PWMC_CH3_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC26C) // (PWMC_CH3) Channel Counter Register -#define AT91C_PWMC_CH3_CMR (AT91_CAST(AT91_REG *) 0xFFFCC260) // (PWMC_CH3) Channel Mode Register -// ========== Register definition for PWMC_CH2 peripheral ========== -#define AT91C_PWMC_CH2_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC254) // (PWMC_CH2) Reserved -#define AT91C_PWMC_CH2_CMR (AT91_CAST(AT91_REG *) 0xFFFCC240) // (PWMC_CH2) Channel Mode Register -#define AT91C_PWMC_CH2_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC24C) // (PWMC_CH2) Channel Counter Register -#define AT91C_PWMC_CH2_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC248) // (PWMC_CH2) Channel Period Register -#define AT91C_PWMC_CH2_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC250) // (PWMC_CH2) Channel Update Register -#define AT91C_PWMC_CH2_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC244) // (PWMC_CH2) Channel Duty Cycle Register -// ========== Register definition for PWMC_CH1 peripheral ========== -#define AT91C_PWMC_CH1_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC234) // (PWMC_CH1) Reserved -#define AT91C_PWMC_CH1_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC230) // (PWMC_CH1) Channel Update Register -#define AT91C_PWMC_CH1_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC228) // (PWMC_CH1) Channel Period Register -#define AT91C_PWMC_CH1_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC22C) // (PWMC_CH1) Channel Counter Register -#define AT91C_PWMC_CH1_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC224) // (PWMC_CH1) Channel Duty Cycle Register -#define AT91C_PWMC_CH1_CMR (AT91_CAST(AT91_REG *) 0xFFFCC220) // (PWMC_CH1) Channel Mode Register -// ========== Register definition for PWMC_CH0 peripheral ========== -#define AT91C_PWMC_CH0_Reserved (AT91_CAST(AT91_REG *) 0xFFFCC214) // (PWMC_CH0) Reserved -#define AT91C_PWMC_CH0_CPRDR (AT91_CAST(AT91_REG *) 0xFFFCC208) // (PWMC_CH0) Channel Period Register -#define AT91C_PWMC_CH0_CDTYR (AT91_CAST(AT91_REG *) 0xFFFCC204) // (PWMC_CH0) Channel Duty Cycle Register -#define AT91C_PWMC_CH0_CMR (AT91_CAST(AT91_REG *) 0xFFFCC200) // (PWMC_CH0) Channel Mode Register -#define AT91C_PWMC_CH0_CUPDR (AT91_CAST(AT91_REG *) 0xFFFCC210) // (PWMC_CH0) Channel Update Register -#define AT91C_PWMC_CH0_CCNTR (AT91_CAST(AT91_REG *) 0xFFFCC20C) // (PWMC_CH0) Channel Counter Register -// ========== Register definition for PWMC peripheral ========== -#define AT91C_PWMC_IDR (AT91_CAST(AT91_REG *) 0xFFFCC014) // (PWMC) PWMC Interrupt Disable Register -#define AT91C_PWMC_DIS (AT91_CAST(AT91_REG *) 0xFFFCC008) // (PWMC) PWMC Disable Register -#define AT91C_PWMC_IER (AT91_CAST(AT91_REG *) 0xFFFCC010) // (PWMC) PWMC Interrupt Enable Register -#define AT91C_PWMC_VR (AT91_CAST(AT91_REG *) 0xFFFCC0FC) // (PWMC) PWMC Version Register -#define AT91C_PWMC_ISR (AT91_CAST(AT91_REG *) 0xFFFCC01C) // (PWMC) PWMC Interrupt Status Register -#define AT91C_PWMC_SR (AT91_CAST(AT91_REG *) 0xFFFCC00C) // (PWMC) PWMC Status Register -#define AT91C_PWMC_IMR (AT91_CAST(AT91_REG *) 0xFFFCC018) // (PWMC) PWMC Interrupt Mask Register -#define AT91C_PWMC_MR (AT91_CAST(AT91_REG *) 0xFFFCC000) // (PWMC) PWMC Mode Register -#define AT91C_PWMC_ENA (AT91_CAST(AT91_REG *) 0xFFFCC004) // (PWMC) PWMC Enable Register -// ========== Register definition for UDP peripheral ========== -#define AT91C_UDP_IMR (AT91_CAST(AT91_REG *) 0xFFFB0018) // (UDP) Interrupt Mask Register -#define AT91C_UDP_FADDR (AT91_CAST(AT91_REG *) 0xFFFB0008) // (UDP) Function Address Register -#define AT91C_UDP_NUM (AT91_CAST(AT91_REG *) 0xFFFB0000) // (UDP) Frame Number Register -#define AT91C_UDP_FDR (AT91_CAST(AT91_REG *) 0xFFFB0050) // (UDP) Endpoint FIFO Data Register -#define AT91C_UDP_ISR (AT91_CAST(AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register -#define AT91C_UDP_CSR (AT91_CAST(AT91_REG *) 0xFFFB0030) // (UDP) Endpoint Control and Status Register -#define AT91C_UDP_IDR (AT91_CAST(AT91_REG *) 0xFFFB0014) // (UDP) Interrupt Disable Register -#define AT91C_UDP_ICR (AT91_CAST(AT91_REG *) 0xFFFB0020) // (UDP) Interrupt Clear Register -#define AT91C_UDP_RSTEP (AT91_CAST(AT91_REG *) 0xFFFB0028) // (UDP) Reset Endpoint Register -#define AT91C_UDP_TXVC (AT91_CAST(AT91_REG *) 0xFFFB0074) // (UDP) Transceiver Control Register -#define AT91C_UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0xFFFB0004) // (UDP) Global State Register -#define AT91C_UDP_IER (AT91_CAST(AT91_REG *) 0xFFFB0010) // (UDP) Interrupt Enable Register -// ========== Register definition for TC0 peripheral ========== -#define AT91C_TC0_SR (AT91_CAST(AT91_REG *) 0xFFFA0020) // (TC0) Status Register -#define AT91C_TC0_RC (AT91_CAST(AT91_REG *) 0xFFFA001C) // (TC0) Register C -#define AT91C_TC0_RB (AT91_CAST(AT91_REG *) 0xFFFA0018) // (TC0) Register B -#define AT91C_TC0_CCR (AT91_CAST(AT91_REG *) 0xFFFA0000) // (TC0) Channel Control Register -#define AT91C_TC0_CMR (AT91_CAST(AT91_REG *) 0xFFFA0004) // (TC0) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC0_IER (AT91_CAST(AT91_REG *) 0xFFFA0024) // (TC0) Interrupt Enable Register -#define AT91C_TC0_RA (AT91_CAST(AT91_REG *) 0xFFFA0014) // (TC0) Register A -#define AT91C_TC0_IDR (AT91_CAST(AT91_REG *) 0xFFFA0028) // (TC0) Interrupt Disable Register -#define AT91C_TC0_CV (AT91_CAST(AT91_REG *) 0xFFFA0010) // (TC0) Counter Value -#define AT91C_TC0_IMR (AT91_CAST(AT91_REG *) 0xFFFA002C) // (TC0) Interrupt Mask Register -// ========== Register definition for TC1 peripheral ========== -#define AT91C_TC1_RB (AT91_CAST(AT91_REG *) 0xFFFA0058) // (TC1) Register B -#define AT91C_TC1_CCR (AT91_CAST(AT91_REG *) 0xFFFA0040) // (TC1) Channel Control Register -#define AT91C_TC1_IER (AT91_CAST(AT91_REG *) 0xFFFA0064) // (TC1) Interrupt Enable Register -#define AT91C_TC1_IDR (AT91_CAST(AT91_REG *) 0xFFFA0068) // (TC1) Interrupt Disable Register -#define AT91C_TC1_SR (AT91_CAST(AT91_REG *) 0xFFFA0060) // (TC1) Status Register -#define AT91C_TC1_CMR (AT91_CAST(AT91_REG *) 0xFFFA0044) // (TC1) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC1_RA (AT91_CAST(AT91_REG *) 0xFFFA0054) // (TC1) Register A -#define AT91C_TC1_RC (AT91_CAST(AT91_REG *) 0xFFFA005C) // (TC1) Register C -#define AT91C_TC1_IMR (AT91_CAST(AT91_REG *) 0xFFFA006C) // (TC1) Interrupt Mask Register -#define AT91C_TC1_CV (AT91_CAST(AT91_REG *) 0xFFFA0050) // (TC1) Counter Value -// ========== Register definition for TC2 peripheral ========== -#define AT91C_TC2_CMR (AT91_CAST(AT91_REG *) 0xFFFA0084) // (TC2) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC2_CCR (AT91_CAST(AT91_REG *) 0xFFFA0080) // (TC2) Channel Control Register -#define AT91C_TC2_CV (AT91_CAST(AT91_REG *) 0xFFFA0090) // (TC2) Counter Value -#define AT91C_TC2_RA (AT91_CAST(AT91_REG *) 0xFFFA0094) // (TC2) Register A -#define AT91C_TC2_RB (AT91_CAST(AT91_REG *) 0xFFFA0098) // (TC2) Register B -#define AT91C_TC2_IDR (AT91_CAST(AT91_REG *) 0xFFFA00A8) // (TC2) Interrupt Disable Register -#define AT91C_TC2_IMR (AT91_CAST(AT91_REG *) 0xFFFA00AC) // (TC2) Interrupt Mask Register -#define AT91C_TC2_RC (AT91_CAST(AT91_REG *) 0xFFFA009C) // (TC2) Register C -#define AT91C_TC2_IER (AT91_CAST(AT91_REG *) 0xFFFA00A4) // (TC2) Interrupt Enable Register -#define AT91C_TC2_SR (AT91_CAST(AT91_REG *) 0xFFFA00A0) // (TC2) Status Register -// ========== Register definition for TCB peripheral ========== -#define AT91C_TCB_BMR (AT91_CAST(AT91_REG *) 0xFFFA00C4) // (TCB) TC Block Mode Register -#define AT91C_TCB_BCR (AT91_CAST(AT91_REG *) 0xFFFA00C0) // (TCB) TC Block Control Register -// ========== Register definition for CAN_MB0 peripheral ========== -#define AT91C_CAN_MB0_MDL (AT91_CAST(AT91_REG *) 0xFFFD0214) // (CAN_MB0) MailBox Data Low Register -#define AT91C_CAN_MB0_MAM (AT91_CAST(AT91_REG *) 0xFFFD0204) // (CAN_MB0) MailBox Acceptance Mask Register -#define AT91C_CAN_MB0_MCR (AT91_CAST(AT91_REG *) 0xFFFD021C) // (CAN_MB0) MailBox Control Register -#define AT91C_CAN_MB0_MID (AT91_CAST(AT91_REG *) 0xFFFD0208) // (CAN_MB0) MailBox ID Register -#define AT91C_CAN_MB0_MSR (AT91_CAST(AT91_REG *) 0xFFFD0210) // (CAN_MB0) MailBox Status Register -#define AT91C_CAN_MB0_MFID (AT91_CAST(AT91_REG *) 0xFFFD020C) // (CAN_MB0) MailBox Family ID Register -#define AT91C_CAN_MB0_MDH (AT91_CAST(AT91_REG *) 0xFFFD0218) // (CAN_MB0) MailBox Data High Register -#define AT91C_CAN_MB0_MMR (AT91_CAST(AT91_REG *) 0xFFFD0200) // (CAN_MB0) MailBox Mode Register -// ========== Register definition for CAN_MB1 peripheral ========== -#define AT91C_CAN_MB1_MDL (AT91_CAST(AT91_REG *) 0xFFFD0234) // (CAN_MB1) MailBox Data Low Register -#define AT91C_CAN_MB1_MID (AT91_CAST(AT91_REG *) 0xFFFD0228) // (CAN_MB1) MailBox ID Register -#define AT91C_CAN_MB1_MMR (AT91_CAST(AT91_REG *) 0xFFFD0220) // (CAN_MB1) MailBox Mode Register -#define AT91C_CAN_MB1_MSR (AT91_CAST(AT91_REG *) 0xFFFD0230) // (CAN_MB1) MailBox Status Register -#define AT91C_CAN_MB1_MAM (AT91_CAST(AT91_REG *) 0xFFFD0224) // (CAN_MB1) MailBox Acceptance Mask Register -#define AT91C_CAN_MB1_MDH (AT91_CAST(AT91_REG *) 0xFFFD0238) // (CAN_MB1) MailBox Data High Register -#define AT91C_CAN_MB1_MCR (AT91_CAST(AT91_REG *) 0xFFFD023C) // (CAN_MB1) MailBox Control Register -#define AT91C_CAN_MB1_MFID (AT91_CAST(AT91_REG *) 0xFFFD022C) // (CAN_MB1) MailBox Family ID Register -// ========== Register definition for CAN_MB2 peripheral ========== -#define AT91C_CAN_MB2_MCR (AT91_CAST(AT91_REG *) 0xFFFD025C) // (CAN_MB2) MailBox Control Register -#define AT91C_CAN_MB2_MDH (AT91_CAST(AT91_REG *) 0xFFFD0258) // (CAN_MB2) MailBox Data High Register -#define AT91C_CAN_MB2_MID (AT91_CAST(AT91_REG *) 0xFFFD0248) // (CAN_MB2) MailBox ID Register -#define AT91C_CAN_MB2_MDL (AT91_CAST(AT91_REG *) 0xFFFD0254) // (CAN_MB2) MailBox Data Low Register -#define AT91C_CAN_MB2_MMR (AT91_CAST(AT91_REG *) 0xFFFD0240) // (CAN_MB2) MailBox Mode Register -#define AT91C_CAN_MB2_MAM (AT91_CAST(AT91_REG *) 0xFFFD0244) // (CAN_MB2) MailBox Acceptance Mask Register -#define AT91C_CAN_MB2_MFID (AT91_CAST(AT91_REG *) 0xFFFD024C) // (CAN_MB2) MailBox Family ID Register -#define AT91C_CAN_MB2_MSR (AT91_CAST(AT91_REG *) 0xFFFD0250) // (CAN_MB2) MailBox Status Register -// ========== Register definition for CAN_MB3 peripheral ========== -#define AT91C_CAN_MB3_MFID (AT91_CAST(AT91_REG *) 0xFFFD026C) // (CAN_MB3) MailBox Family ID Register -#define AT91C_CAN_MB3_MAM (AT91_CAST(AT91_REG *) 0xFFFD0264) // (CAN_MB3) MailBox Acceptance Mask Register -#define AT91C_CAN_MB3_MID (AT91_CAST(AT91_REG *) 0xFFFD0268) // (CAN_MB3) MailBox ID Register -#define AT91C_CAN_MB3_MCR (AT91_CAST(AT91_REG *) 0xFFFD027C) // (CAN_MB3) MailBox Control Register -#define AT91C_CAN_MB3_MMR (AT91_CAST(AT91_REG *) 0xFFFD0260) // (CAN_MB3) MailBox Mode Register -#define AT91C_CAN_MB3_MSR (AT91_CAST(AT91_REG *) 0xFFFD0270) // (CAN_MB3) MailBox Status Register -#define AT91C_CAN_MB3_MDL (AT91_CAST(AT91_REG *) 0xFFFD0274) // (CAN_MB3) MailBox Data Low Register -#define AT91C_CAN_MB3_MDH (AT91_CAST(AT91_REG *) 0xFFFD0278) // (CAN_MB3) MailBox Data High Register -// ========== Register definition for CAN_MB4 peripheral ========== -#define AT91C_CAN_MB4_MID (AT91_CAST(AT91_REG *) 0xFFFD0288) // (CAN_MB4) MailBox ID Register -#define AT91C_CAN_MB4_MMR (AT91_CAST(AT91_REG *) 0xFFFD0280) // (CAN_MB4) MailBox Mode Register -#define AT91C_CAN_MB4_MDH (AT91_CAST(AT91_REG *) 0xFFFD0298) // (CAN_MB4) MailBox Data High Register -#define AT91C_CAN_MB4_MFID (AT91_CAST(AT91_REG *) 0xFFFD028C) // (CAN_MB4) MailBox Family ID Register -#define AT91C_CAN_MB4_MSR (AT91_CAST(AT91_REG *) 0xFFFD0290) // (CAN_MB4) MailBox Status Register -#define AT91C_CAN_MB4_MCR (AT91_CAST(AT91_REG *) 0xFFFD029C) // (CAN_MB4) MailBox Control Register -#define AT91C_CAN_MB4_MDL (AT91_CAST(AT91_REG *) 0xFFFD0294) // (CAN_MB4) MailBox Data Low Register -#define AT91C_CAN_MB4_MAM (AT91_CAST(AT91_REG *) 0xFFFD0284) // (CAN_MB4) MailBox Acceptance Mask Register -// ========== Register definition for CAN_MB5 peripheral ========== -#define AT91C_CAN_MB5_MSR (AT91_CAST(AT91_REG *) 0xFFFD02B0) // (CAN_MB5) MailBox Status Register -#define AT91C_CAN_MB5_MCR (AT91_CAST(AT91_REG *) 0xFFFD02BC) // (CAN_MB5) MailBox Control Register -#define AT91C_CAN_MB5_MFID (AT91_CAST(AT91_REG *) 0xFFFD02AC) // (CAN_MB5) MailBox Family ID Register -#define AT91C_CAN_MB5_MDH (AT91_CAST(AT91_REG *) 0xFFFD02B8) // (CAN_MB5) MailBox Data High Register -#define AT91C_CAN_MB5_MID (AT91_CAST(AT91_REG *) 0xFFFD02A8) // (CAN_MB5) MailBox ID Register -#define AT91C_CAN_MB5_MMR (AT91_CAST(AT91_REG *) 0xFFFD02A0) // (CAN_MB5) MailBox Mode Register -#define AT91C_CAN_MB5_MDL (AT91_CAST(AT91_REG *) 0xFFFD02B4) // (CAN_MB5) MailBox Data Low Register -#define AT91C_CAN_MB5_MAM (AT91_CAST(AT91_REG *) 0xFFFD02A4) // (CAN_MB5) MailBox Acceptance Mask Register -// ========== Register definition for CAN_MB6 peripheral ========== -#define AT91C_CAN_MB6_MFID (AT91_CAST(AT91_REG *) 0xFFFD02CC) // (CAN_MB6) MailBox Family ID Register -#define AT91C_CAN_MB6_MID (AT91_CAST(AT91_REG *) 0xFFFD02C8) // (CAN_MB6) MailBox ID Register -#define AT91C_CAN_MB6_MAM (AT91_CAST(AT91_REG *) 0xFFFD02C4) // (CAN_MB6) MailBox Acceptance Mask Register -#define AT91C_CAN_MB6_MSR (AT91_CAST(AT91_REG *) 0xFFFD02D0) // (CAN_MB6) MailBox Status Register -#define AT91C_CAN_MB6_MDL (AT91_CAST(AT91_REG *) 0xFFFD02D4) // (CAN_MB6) MailBox Data Low Register -#define AT91C_CAN_MB6_MCR (AT91_CAST(AT91_REG *) 0xFFFD02DC) // (CAN_MB6) MailBox Control Register -#define AT91C_CAN_MB6_MDH (AT91_CAST(AT91_REG *) 0xFFFD02D8) // (CAN_MB6) MailBox Data High Register -#define AT91C_CAN_MB6_MMR (AT91_CAST(AT91_REG *) 0xFFFD02C0) // (CAN_MB6) MailBox Mode Register -// ========== Register definition for CAN_MB7 peripheral ========== -#define AT91C_CAN_MB7_MCR (AT91_CAST(AT91_REG *) 0xFFFD02FC) // (CAN_MB7) MailBox Control Register -#define AT91C_CAN_MB7_MDH (AT91_CAST(AT91_REG *) 0xFFFD02F8) // (CAN_MB7) MailBox Data High Register -#define AT91C_CAN_MB7_MFID (AT91_CAST(AT91_REG *) 0xFFFD02EC) // (CAN_MB7) MailBox Family ID Register -#define AT91C_CAN_MB7_MDL (AT91_CAST(AT91_REG *) 0xFFFD02F4) // (CAN_MB7) MailBox Data Low Register -#define AT91C_CAN_MB7_MID (AT91_CAST(AT91_REG *) 0xFFFD02E8) // (CAN_MB7) MailBox ID Register -#define AT91C_CAN_MB7_MMR (AT91_CAST(AT91_REG *) 0xFFFD02E0) // (CAN_MB7) MailBox Mode Register -#define AT91C_CAN_MB7_MAM (AT91_CAST(AT91_REG *) 0xFFFD02E4) // (CAN_MB7) MailBox Acceptance Mask Register -#define AT91C_CAN_MB7_MSR (AT91_CAST(AT91_REG *) 0xFFFD02F0) // (CAN_MB7) MailBox Status Register -// ========== Register definition for CAN peripheral ========== -#define AT91C_CAN_TCR (AT91_CAST(AT91_REG *) 0xFFFD0024) // (CAN) Transfer Command Register -#define AT91C_CAN_IMR (AT91_CAST(AT91_REG *) 0xFFFD000C) // (CAN) Interrupt Mask Register -#define AT91C_CAN_IER (AT91_CAST(AT91_REG *) 0xFFFD0004) // (CAN) Interrupt Enable Register -#define AT91C_CAN_ECR (AT91_CAST(AT91_REG *) 0xFFFD0020) // (CAN) Error Counter Register -#define AT91C_CAN_TIMESTP (AT91_CAST(AT91_REG *) 0xFFFD001C) // (CAN) Time Stamp Register -#define AT91C_CAN_MR (AT91_CAST(AT91_REG *) 0xFFFD0000) // (CAN) Mode Register -#define AT91C_CAN_IDR (AT91_CAST(AT91_REG *) 0xFFFD0008) // (CAN) Interrupt Disable Register -#define AT91C_CAN_ACR (AT91_CAST(AT91_REG *) 0xFFFD0028) // (CAN) Abort Command Register -#define AT91C_CAN_TIM (AT91_CAST(AT91_REG *) 0xFFFD0018) // (CAN) Timer Register -#define AT91C_CAN_SR (AT91_CAST(AT91_REG *) 0xFFFD0010) // (CAN) Status Register -#define AT91C_CAN_BR (AT91_CAST(AT91_REG *) 0xFFFD0014) // (CAN) Baudrate Register -#define AT91C_CAN_VR (AT91_CAST(AT91_REG *) 0xFFFD00FC) // (CAN) Version Register -// ========== Register definition for EMAC peripheral ========== -#define AT91C_EMAC_ISR (AT91_CAST(AT91_REG *) 0xFFFDC024) // (EMAC) Interrupt Status Register -#define AT91C_EMAC_SA4H (AT91_CAST(AT91_REG *) 0xFFFDC0B4) // (EMAC) Specific Address 4 Top, Last 2 bytes -#define AT91C_EMAC_SA1L (AT91_CAST(AT91_REG *) 0xFFFDC098) // (EMAC) Specific Address 1 Bottom, First 4 bytes -#define AT91C_EMAC_ELE (AT91_CAST(AT91_REG *) 0xFFFDC078) // (EMAC) Excessive Length Errors Register -#define AT91C_EMAC_LCOL (AT91_CAST(AT91_REG *) 0xFFFDC05C) // (EMAC) Late Collision Register -#define AT91C_EMAC_RLE (AT91_CAST(AT91_REG *) 0xFFFDC088) // (EMAC) Receive Length Field Mismatch Register -#define AT91C_EMAC_WOL (AT91_CAST(AT91_REG *) 0xFFFDC0C4) // (EMAC) Wake On LAN Register -#define AT91C_EMAC_DTF (AT91_CAST(AT91_REG *) 0xFFFDC058) // (EMAC) Deferred Transmission Frame Register -#define AT91C_EMAC_TUND (AT91_CAST(AT91_REG *) 0xFFFDC064) // (EMAC) Transmit Underrun Error Register -#define AT91C_EMAC_NCR (AT91_CAST(AT91_REG *) 0xFFFDC000) // (EMAC) Network Control Register -#define AT91C_EMAC_SA4L (AT91_CAST(AT91_REG *) 0xFFFDC0B0) // (EMAC) Specific Address 4 Bottom, First 4 bytes -#define AT91C_EMAC_RSR (AT91_CAST(AT91_REG *) 0xFFFDC020) // (EMAC) Receive Status Register -#define AT91C_EMAC_SA3L (AT91_CAST(AT91_REG *) 0xFFFDC0A8) // (EMAC) Specific Address 3 Bottom, First 4 bytes -#define AT91C_EMAC_TSR (AT91_CAST(AT91_REG *) 0xFFFDC014) // (EMAC) Transmit Status Register -#define AT91C_EMAC_IDR (AT91_CAST(AT91_REG *) 0xFFFDC02C) // (EMAC) Interrupt Disable Register -#define AT91C_EMAC_RSE (AT91_CAST(AT91_REG *) 0xFFFDC074) // (EMAC) Receive Symbol Errors Register -#define AT91C_EMAC_ECOL (AT91_CAST(AT91_REG *) 0xFFFDC060) // (EMAC) Excessive Collision Register -#define AT91C_EMAC_TID (AT91_CAST(AT91_REG *) 0xFFFDC0B8) // (EMAC) Type ID Checking Register -#define AT91C_EMAC_HRB (AT91_CAST(AT91_REG *) 0xFFFDC090) // (EMAC) Hash Address Bottom[31:0] -#define AT91C_EMAC_TBQP (AT91_CAST(AT91_REG *) 0xFFFDC01C) // (EMAC) Transmit Buffer Queue Pointer -#define AT91C_EMAC_USRIO (AT91_CAST(AT91_REG *) 0xFFFDC0C0) // (EMAC) USER Input/Output Register -#define AT91C_EMAC_PTR (AT91_CAST(AT91_REG *) 0xFFFDC038) // (EMAC) Pause Time Register -#define AT91C_EMAC_SA2H (AT91_CAST(AT91_REG *) 0xFFFDC0A4) // (EMAC) Specific Address 2 Top, Last 2 bytes -#define AT91C_EMAC_ROV (AT91_CAST(AT91_REG *) 0xFFFDC070) // (EMAC) Receive Overrun Errors Register -#define AT91C_EMAC_ALE (AT91_CAST(AT91_REG *) 0xFFFDC054) // (EMAC) Alignment Error Register -#define AT91C_EMAC_RJA (AT91_CAST(AT91_REG *) 0xFFFDC07C) // (EMAC) Receive Jabbers Register -#define AT91C_EMAC_RBQP (AT91_CAST(AT91_REG *) 0xFFFDC018) // (EMAC) Receive Buffer Queue Pointer -#define AT91C_EMAC_TPF (AT91_CAST(AT91_REG *) 0xFFFDC08C) // (EMAC) Transmitted Pause Frames Register -#define AT91C_EMAC_NCFGR (AT91_CAST(AT91_REG *) 0xFFFDC004) // (EMAC) Network Configuration Register -#define AT91C_EMAC_HRT (AT91_CAST(AT91_REG *) 0xFFFDC094) // (EMAC) Hash Address Top[63:32] -#define AT91C_EMAC_USF (AT91_CAST(AT91_REG *) 0xFFFDC080) // (EMAC) Undersize Frames Register -#define AT91C_EMAC_FCSE (AT91_CAST(AT91_REG *) 0xFFFDC050) // (EMAC) Frame Check Sequence Error Register -#define AT91C_EMAC_TPQ (AT91_CAST(AT91_REG *) 0xFFFDC0BC) // (EMAC) Transmit Pause Quantum Register -#define AT91C_EMAC_MAN (AT91_CAST(AT91_REG *) 0xFFFDC034) // (EMAC) PHY Maintenance Register -#define AT91C_EMAC_FTO (AT91_CAST(AT91_REG *) 0xFFFDC040) // (EMAC) Frames Transmitted OK Register -#define AT91C_EMAC_REV (AT91_CAST(AT91_REG *) 0xFFFDC0FC) // (EMAC) Revision Register -#define AT91C_EMAC_IMR (AT91_CAST(AT91_REG *) 0xFFFDC030) // (EMAC) Interrupt Mask Register -#define AT91C_EMAC_SCF (AT91_CAST(AT91_REG *) 0xFFFDC044) // (EMAC) Single Collision Frame Register -#define AT91C_EMAC_PFR (AT91_CAST(AT91_REG *) 0xFFFDC03C) // (EMAC) Pause Frames received Register -#define AT91C_EMAC_MCF (AT91_CAST(AT91_REG *) 0xFFFDC048) // (EMAC) Multiple Collision Frame Register -#define AT91C_EMAC_NSR (AT91_CAST(AT91_REG *) 0xFFFDC008) // (EMAC) Network Status Register -#define AT91C_EMAC_SA2L (AT91_CAST(AT91_REG *) 0xFFFDC0A0) // (EMAC) Specific Address 2 Bottom, First 4 bytes -#define AT91C_EMAC_FRO (AT91_CAST(AT91_REG *) 0xFFFDC04C) // (EMAC) Frames Received OK Register -#define AT91C_EMAC_IER (AT91_CAST(AT91_REG *) 0xFFFDC028) // (EMAC) Interrupt Enable Register -#define AT91C_EMAC_SA1H (AT91_CAST(AT91_REG *) 0xFFFDC09C) // (EMAC) Specific Address 1 Top, Last 2 bytes -#define AT91C_EMAC_CSE (AT91_CAST(AT91_REG *) 0xFFFDC068) // (EMAC) Carrier Sense Error Register -#define AT91C_EMAC_SA3H (AT91_CAST(AT91_REG *) 0xFFFDC0AC) // (EMAC) Specific Address 3 Top, Last 2 bytes -#define AT91C_EMAC_RRE (AT91_CAST(AT91_REG *) 0xFFFDC06C) // (EMAC) Receive Ressource Error Register -#define AT91C_EMAC_STE (AT91_CAST(AT91_REG *) 0xFFFDC084) // (EMAC) SQE Test Error Register -// ========== Register definition for PDC_ADC peripheral ========== -#define AT91C_ADC_PTSR (AT91_CAST(AT91_REG *) 0xFFFD8124) // (PDC_ADC) PDC Transfer Status Register -#define AT91C_ADC_PTCR (AT91_CAST(AT91_REG *) 0xFFFD8120) // (PDC_ADC) PDC Transfer Control Register -#define AT91C_ADC_TNPR (AT91_CAST(AT91_REG *) 0xFFFD8118) // (PDC_ADC) Transmit Next Pointer Register -#define AT91C_ADC_TNCR (AT91_CAST(AT91_REG *) 0xFFFD811C) // (PDC_ADC) Transmit Next Counter Register -#define AT91C_ADC_RNPR (AT91_CAST(AT91_REG *) 0xFFFD8110) // (PDC_ADC) Receive Next Pointer Register -#define AT91C_ADC_RNCR (AT91_CAST(AT91_REG *) 0xFFFD8114) // (PDC_ADC) Receive Next Counter Register -#define AT91C_ADC_RPR (AT91_CAST(AT91_REG *) 0xFFFD8100) // (PDC_ADC) Receive Pointer Register -#define AT91C_ADC_TCR (AT91_CAST(AT91_REG *) 0xFFFD810C) // (PDC_ADC) Transmit Counter Register -#define AT91C_ADC_TPR (AT91_CAST(AT91_REG *) 0xFFFD8108) // (PDC_ADC) Transmit Pointer Register -#define AT91C_ADC_RCR (AT91_CAST(AT91_REG *) 0xFFFD8104) // (PDC_ADC) Receive Counter Register -// ========== Register definition for ADC peripheral ========== -#define AT91C_ADC_CDR2 (AT91_CAST(AT91_REG *) 0xFFFD8038) // (ADC) ADC Channel Data Register 2 -#define AT91C_ADC_CDR3 (AT91_CAST(AT91_REG *) 0xFFFD803C) // (ADC) ADC Channel Data Register 3 -#define AT91C_ADC_CDR0 (AT91_CAST(AT91_REG *) 0xFFFD8030) // (ADC) ADC Channel Data Register 0 -#define AT91C_ADC_CDR5 (AT91_CAST(AT91_REG *) 0xFFFD8044) // (ADC) ADC Channel Data Register 5 -#define AT91C_ADC_CHDR (AT91_CAST(AT91_REG *) 0xFFFD8014) // (ADC) ADC Channel Disable Register -#define AT91C_ADC_SR (AT91_CAST(AT91_REG *) 0xFFFD801C) // (ADC) ADC Status Register -#define AT91C_ADC_CDR4 (AT91_CAST(AT91_REG *) 0xFFFD8040) // (ADC) ADC Channel Data Register 4 -#define AT91C_ADC_CDR1 (AT91_CAST(AT91_REG *) 0xFFFD8034) // (ADC) ADC Channel Data Register 1 -#define AT91C_ADC_LCDR (AT91_CAST(AT91_REG *) 0xFFFD8020) // (ADC) ADC Last Converted Data Register -#define AT91C_ADC_IDR (AT91_CAST(AT91_REG *) 0xFFFD8028) // (ADC) ADC Interrupt Disable Register -#define AT91C_ADC_CR (AT91_CAST(AT91_REG *) 0xFFFD8000) // (ADC) ADC Control Register -#define AT91C_ADC_CDR7 (AT91_CAST(AT91_REG *) 0xFFFD804C) // (ADC) ADC Channel Data Register 7 -#define AT91C_ADC_CDR6 (AT91_CAST(AT91_REG *) 0xFFFD8048) // (ADC) ADC Channel Data Register 6 -#define AT91C_ADC_IER (AT91_CAST(AT91_REG *) 0xFFFD8024) // (ADC) ADC Interrupt Enable Register -#define AT91C_ADC_CHER (AT91_CAST(AT91_REG *) 0xFFFD8010) // (ADC) ADC Channel Enable Register -#define AT91C_ADC_CHSR (AT91_CAST(AT91_REG *) 0xFFFD8018) // (ADC) ADC Channel Status Register -#define AT91C_ADC_MR (AT91_CAST(AT91_REG *) 0xFFFD8004) // (ADC) ADC Mode Register -#define AT91C_ADC_IMR (AT91_CAST(AT91_REG *) 0xFFFD802C) // (ADC) ADC Interrupt Mask Register - -// ***************************************************************************** -// PIO DEFINITIONS FOR AT91SAM7X512 -// ***************************************************************************** -#define AT91C_PIO_PA0 (1 << 0) // Pin Controlled by PA0 -#define AT91C_PA0_RXD0 (AT91C_PIO_PA0) // USART 0 Receive Data -#define AT91C_PIO_PA1 (1 << 1) // Pin Controlled by PA1 -#define AT91C_PA1_TXD0 (AT91C_PIO_PA1) // USART 0 Transmit Data -#define AT91C_PIO_PA10 (1 << 10) // Pin Controlled by PA10 -#define AT91C_PA10_TWD (AT91C_PIO_PA10) // TWI Two-wire Serial Data -#define AT91C_PIO_PA11 (1 << 11) // Pin Controlled by PA11 -#define AT91C_PA11_TWCK (AT91C_PIO_PA11) // TWI Two-wire Serial Clock -#define AT91C_PIO_PA12 (1 << 12) // Pin Controlled by PA12 -#define AT91C_PA12_SPI0_NPCS0 (AT91C_PIO_PA12) // SPI 0 Peripheral Chip Select 0 -#define AT91C_PIO_PA13 (1 << 13) // Pin Controlled by PA13 -#define AT91C_PA13_SPI0_NPCS1 (AT91C_PIO_PA13) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PA13_PCK1 (AT91C_PIO_PA13) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA14 (1 << 14) // Pin Controlled by PA14 -#define AT91C_PA14_SPI0_NPCS2 (AT91C_PIO_PA14) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PA14_IRQ1 (AT91C_PIO_PA14) // External Interrupt 1 -#define AT91C_PIO_PA15 (1 << 15) // Pin Controlled by PA15 -#define AT91C_PA15_SPI0_NPCS3 (AT91C_PIO_PA15) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PA15_TCLK2 (AT91C_PIO_PA15) // Timer Counter 2 external clock input -#define AT91C_PIO_PA16 (1 << 16) // Pin Controlled by PA16 -#define AT91C_PA16_SPI0_MISO (AT91C_PIO_PA16) // SPI 0 Master In Slave -#define AT91C_PIO_PA17 (1 << 17) // Pin Controlled by PA17 -#define AT91C_PA17_SPI0_MOSI (AT91C_PIO_PA17) // SPI 0 Master Out Slave -#define AT91C_PIO_PA18 (1 << 18) // Pin Controlled by PA18 -#define AT91C_PA18_SPI0_SPCK (AT91C_PIO_PA18) // SPI 0 Serial Clock -#define AT91C_PIO_PA19 (1 << 19) // Pin Controlled by PA19 -#define AT91C_PA19_CANRX (AT91C_PIO_PA19) // CAN Receive -#define AT91C_PIO_PA2 (1 << 2) // Pin Controlled by PA2 -#define AT91C_PA2_SCK0 (AT91C_PIO_PA2) // USART 0 Serial Clock -#define AT91C_PA2_SPI1_NPCS1 (AT91C_PIO_PA2) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PA20 (1 << 20) // Pin Controlled by PA20 -#define AT91C_PA20_CANTX (AT91C_PIO_PA20) // CAN Transmit -#define AT91C_PIO_PA21 (1 << 21) // Pin Controlled by PA21 -#define AT91C_PA21_TF (AT91C_PIO_PA21) // SSC Transmit Frame Sync -#define AT91C_PA21_SPI1_NPCS0 (AT91C_PIO_PA21) // SPI 1 Peripheral Chip Select 0 -#define AT91C_PIO_PA22 (1 << 22) // Pin Controlled by PA22 -#define AT91C_PA22_TK (AT91C_PIO_PA22) // SSC Transmit Clock -#define AT91C_PA22_SPI1_SPCK (AT91C_PIO_PA22) // SPI 1 Serial Clock -#define AT91C_PIO_PA23 (1 << 23) // Pin Controlled by PA23 -#define AT91C_PA23_TD (AT91C_PIO_PA23) // SSC Transmit data -#define AT91C_PA23_SPI1_MOSI (AT91C_PIO_PA23) // SPI 1 Master Out Slave -#define AT91C_PIO_PA24 (1 << 24) // Pin Controlled by PA24 -#define AT91C_PA24_RD (AT91C_PIO_PA24) // SSC Receive Data -#define AT91C_PA24_SPI1_MISO (AT91C_PIO_PA24) // SPI 1 Master In Slave -#define AT91C_PIO_PA25 (1 << 25) // Pin Controlled by PA25 -#define AT91C_PA25_RK (AT91C_PIO_PA25) // SSC Receive Clock -#define AT91C_PA25_SPI1_NPCS1 (AT91C_PIO_PA25) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PA26 (1 << 26) // Pin Controlled by PA26 -#define AT91C_PA26_RF (AT91C_PIO_PA26) // SSC Receive Frame Sync -#define AT91C_PA26_SPI1_NPCS2 (AT91C_PIO_PA26) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PA27 (1 << 27) // Pin Controlled by PA27 -#define AT91C_PA27_DRXD (AT91C_PIO_PA27) // DBGU Debug Receive Data -#define AT91C_PA27_PCK3 (AT91C_PIO_PA27) // PMC Programmable Clock Output 3 -#define AT91C_PIO_PA28 (1 << 28) // Pin Controlled by PA28 -#define AT91C_PA28_DTXD (AT91C_PIO_PA28) // DBGU Debug Transmit Data -#define AT91C_PIO_PA29 (1 << 29) // Pin Controlled by PA29 -#define AT91C_PA29_FIQ (AT91C_PIO_PA29) // AIC Fast Interrupt Input -#define AT91C_PA29_SPI1_NPCS3 (AT91C_PIO_PA29) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PA3 (1 << 3) // Pin Controlled by PA3 -#define AT91C_PA3_RTS0 (AT91C_PIO_PA3) // USART 0 Ready To Send -#define AT91C_PA3_SPI1_NPCS2 (AT91C_PIO_PA3) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PA30 (1 << 30) // Pin Controlled by PA30 -#define AT91C_PA30_IRQ0 (AT91C_PIO_PA30) // External Interrupt 0 -#define AT91C_PA30_PCK2 (AT91C_PIO_PA30) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA4 (1 << 4) // Pin Controlled by PA4 -#define AT91C_PA4_CTS0 (AT91C_PIO_PA4) // USART 0 Clear To Send -#define AT91C_PA4_SPI1_NPCS3 (AT91C_PIO_PA4) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PA5 (1 << 5) // Pin Controlled by PA5 -#define AT91C_PA5_RXD1 (AT91C_PIO_PA5) // USART 1 Receive Data -#define AT91C_PIO_PA6 (1 << 6) // Pin Controlled by PA6 -#define AT91C_PA6_TXD1 (AT91C_PIO_PA6) // USART 1 Transmit Data -#define AT91C_PIO_PA7 (1 << 7) // Pin Controlled by PA7 -#define AT91C_PA7_SCK1 (AT91C_PIO_PA7) // USART 1 Serial Clock -#define AT91C_PA7_SPI0_NPCS1 (AT91C_PIO_PA7) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PIO_PA8 (1 << 8) // Pin Controlled by PA8 -#define AT91C_PA8_RTS1 (AT91C_PIO_PA8) // USART 1 Ready To Send -#define AT91C_PA8_SPI0_NPCS2 (AT91C_PIO_PA8) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PIO_PA9 (1 << 9) // Pin Controlled by PA9 -#define AT91C_PA9_CTS1 (AT91C_PIO_PA9) // USART 1 Clear To Send -#define AT91C_PA9_SPI0_NPCS3 (AT91C_PIO_PA9) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PIO_PB0 (1 << 0) // Pin Controlled by PB0 -#define AT91C_PB0_ETXCK_EREFCK (AT91C_PIO_PB0) // Ethernet MAC Transmit Clock/Reference Clock -#define AT91C_PB0_PCK0 (AT91C_PIO_PB0) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PB1 (1 << 1) // Pin Controlled by PB1 -#define AT91C_PB1_ETXEN (AT91C_PIO_PB1) // Ethernet MAC Transmit Enable -#define AT91C_PIO_PB10 (1 << 10) // Pin Controlled by PB10 -#define AT91C_PB10_ETX2 (AT91C_PIO_PB10) // Ethernet MAC Transmit Data 2 -#define AT91C_PB10_SPI1_NPCS1 (AT91C_PIO_PB10) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PB11 (1 << 11) // Pin Controlled by PB11 -#define AT91C_PB11_ETX3 (AT91C_PIO_PB11) // Ethernet MAC Transmit Data 3 -#define AT91C_PB11_SPI1_NPCS2 (AT91C_PIO_PB11) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PB12 (1 << 12) // Pin Controlled by PB12 -#define AT91C_PB12_ETXER (AT91C_PIO_PB12) // Ethernet MAC Transmikt Coding Error -#define AT91C_PB12_TCLK0 (AT91C_PIO_PB12) // Timer Counter 0 external clock input -#define AT91C_PIO_PB13 (1 << 13) // Pin Controlled by PB13 -#define AT91C_PB13_ERX2 (AT91C_PIO_PB13) // Ethernet MAC Receive Data 2 -#define AT91C_PB13_SPI0_NPCS1 (AT91C_PIO_PB13) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PIO_PB14 (1 << 14) // Pin Controlled by PB14 -#define AT91C_PB14_ERX3 (AT91C_PIO_PB14) // Ethernet MAC Receive Data 3 -#define AT91C_PB14_SPI0_NPCS2 (AT91C_PIO_PB14) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PIO_PB15 (1 << 15) // Pin Controlled by PB15 -#define AT91C_PB15_ERXDV_ECRSDV (AT91C_PIO_PB15) // Ethernet MAC Receive Data Valid -#define AT91C_PIO_PB16 (1 << 16) // Pin Controlled by PB16 -#define AT91C_PB16_ECOL (AT91C_PIO_PB16) // Ethernet MAC Collision Detected -#define AT91C_PB16_SPI1_NPCS3 (AT91C_PIO_PB16) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PB17 (1 << 17) // Pin Controlled by PB17 -#define AT91C_PB17_ERXCK (AT91C_PIO_PB17) // Ethernet MAC Receive Clock -#define AT91C_PB17_SPI0_NPCS3 (AT91C_PIO_PB17) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PIO_PB18 (1 << 18) // Pin Controlled by PB18 -#define AT91C_PB18_EF100 (AT91C_PIO_PB18) // Ethernet MAC Force 100 Mbits/sec -#define AT91C_PB18_ADTRG (AT91C_PIO_PB18) // ADC External Trigger -#define AT91C_PIO_PB19 (1 << 19) // Pin Controlled by PB19 -#define AT91C_PB19_PWM0 (AT91C_PIO_PB19) // PWM Channel 0 -#define AT91C_PB19_TCLK1 (AT91C_PIO_PB19) // Timer Counter 1 external clock input -#define AT91C_PIO_PB2 (1 << 2) // Pin Controlled by PB2 -#define AT91C_PB2_ETX0 (AT91C_PIO_PB2) // Ethernet MAC Transmit Data 0 -#define AT91C_PIO_PB20 (1 << 20) // Pin Controlled by PB20 -#define AT91C_PB20_PWM1 (AT91C_PIO_PB20) // PWM Channel 1 -#define AT91C_PB20_PCK0 (AT91C_PIO_PB20) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PB21 (1 << 21) // Pin Controlled by PB21 -#define AT91C_PB21_PWM2 (AT91C_PIO_PB21) // PWM Channel 2 -#define AT91C_PB21_PCK1 (AT91C_PIO_PB21) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PB22 (1 << 22) // Pin Controlled by PB22 -#define AT91C_PB22_PWM3 (AT91C_PIO_PB22) // PWM Channel 3 -#define AT91C_PB22_PCK2 (AT91C_PIO_PB22) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PB23 (1 << 23) // Pin Controlled by PB23 -#define AT91C_PB23_TIOA0 (AT91C_PIO_PB23) // Timer Counter 0 Multipurpose Timer I/O Pin A -#define AT91C_PB23_DCD1 (AT91C_PIO_PB23) // USART 1 Data Carrier Detect -#define AT91C_PIO_PB24 (1 << 24) // Pin Controlled by PB24 -#define AT91C_PB24_TIOB0 (AT91C_PIO_PB24) // Timer Counter 0 Multipurpose Timer I/O Pin B -#define AT91C_PB24_DSR1 (AT91C_PIO_PB24) // USART 1 Data Set ready -#define AT91C_PIO_PB25 (1 << 25) // Pin Controlled by PB25 -#define AT91C_PB25_TIOA1 (AT91C_PIO_PB25) // Timer Counter 1 Multipurpose Timer I/O Pin A -#define AT91C_PB25_DTR1 (AT91C_PIO_PB25) // USART 1 Data Terminal ready -#define AT91C_PIO_PB26 (1 << 26) // Pin Controlled by PB26 -#define AT91C_PB26_TIOB1 (AT91C_PIO_PB26) // Timer Counter 1 Multipurpose Timer I/O Pin B -#define AT91C_PB26_RI1 (AT91C_PIO_PB26) // USART 1 Ring Indicator -#define AT91C_PIO_PB27 (1 << 27) // Pin Controlled by PB27 -#define AT91C_PB27_TIOA2 (AT91C_PIO_PB27) // Timer Counter 2 Multipurpose Timer I/O Pin A -#define AT91C_PB27_PWM0 (AT91C_PIO_PB27) // PWM Channel 0 -#define AT91C_PIO_PB28 (1 << 28) // Pin Controlled by PB28 -#define AT91C_PB28_TIOB2 (AT91C_PIO_PB28) // Timer Counter 2 Multipurpose Timer I/O Pin B -#define AT91C_PB28_PWM1 (AT91C_PIO_PB28) // PWM Channel 1 -#define AT91C_PIO_PB29 (1 << 29) // Pin Controlled by PB29 -#define AT91C_PB29_PCK1 (AT91C_PIO_PB29) // PMC Programmable Clock Output 1 -#define AT91C_PB29_PWM2 (AT91C_PIO_PB29) // PWM Channel 2 -#define AT91C_PIO_PB3 (1 << 3) // Pin Controlled by PB3 -#define AT91C_PB3_ETX1 (AT91C_PIO_PB3) // Ethernet MAC Transmit Data 1 -#define AT91C_PIO_PB30 (1 << 30) // Pin Controlled by PB30 -#define AT91C_PB30_PCK2 (AT91C_PIO_PB30) // PMC Programmable Clock Output 2 -#define AT91C_PB30_PWM3 (AT91C_PIO_PB30) // PWM Channel 3 -#define AT91C_PIO_PB4 (1 << 4) // Pin Controlled by PB4 -#define AT91C_PB4_ECRS (AT91C_PIO_PB4) // Ethernet MAC Carrier Sense/Carrier Sense and Data Valid -#define AT91C_PIO_PB5 (1 << 5) // Pin Controlled by PB5 -#define AT91C_PB5_ERX0 (AT91C_PIO_PB5) // Ethernet MAC Receive Data 0 -#define AT91C_PIO_PB6 (1 << 6) // Pin Controlled by PB6 -#define AT91C_PB6_ERX1 (AT91C_PIO_PB6) // Ethernet MAC Receive Data 1 -#define AT91C_PIO_PB7 (1 << 7) // Pin Controlled by PB7 -#define AT91C_PB7_ERXER (AT91C_PIO_PB7) // Ethernet MAC Receive Error -#define AT91C_PIO_PB8 (1 << 8) // Pin Controlled by PB8 -#define AT91C_PB8_EMDC (AT91C_PIO_PB8) // Ethernet MAC Management Data Clock -#define AT91C_PIO_PB9 (1 << 9) // Pin Controlled by PB9 -#define AT91C_PB9_EMDIO (AT91C_PIO_PB9) // Ethernet MAC Management Data Input/Output - -// ***************************************************************************** -// PERIPHERAL ID DEFINITIONS FOR AT91SAM7X512 -// ***************************************************************************** -#define AT91C_ID_FIQ ( 0) // Advanced Interrupt Controller (FIQ) -#define AT91C_ID_SYS ( 1) // System Peripheral -#define AT91C_ID_PIOA ( 2) // Parallel IO Controller A -#define AT91C_ID_PIOB ( 3) // Parallel IO Controller B -#define AT91C_ID_SPI0 ( 4) // Serial Peripheral Interface 0 -#define AT91C_ID_SPI1 ( 5) // Serial Peripheral Interface 1 -#define AT91C_ID_US0 ( 6) // USART 0 -#define AT91C_ID_US1 ( 7) // USART 1 -#define AT91C_ID_SSC ( 8) // Serial Synchronous Controller -#define AT91C_ID_TWI ( 9) // Two-Wire Interface -#define AT91C_ID_PWMC (10) // PWM Controller -#define AT91C_ID_UDP (11) // USB Device Port -#define AT91C_ID_TC0 (12) // Timer Counter 0 -#define AT91C_ID_TC1 (13) // Timer Counter 1 -#define AT91C_ID_TC2 (14) // Timer Counter 2 -#define AT91C_ID_CAN (15) // Control Area Network Controller -#define AT91C_ID_EMAC (16) // Ethernet MAC -#define AT91C_ID_ADC (17) // Analog-to-Digital Converter -#define AT91C_ID_18_Reserved (18) // Reserved -#define AT91C_ID_19_Reserved (19) // Reserved -#define AT91C_ID_20_Reserved (20) // Reserved -#define AT91C_ID_21_Reserved (21) // Reserved -#define AT91C_ID_22_Reserved (22) // Reserved -#define AT91C_ID_23_Reserved (23) // Reserved -#define AT91C_ID_24_Reserved (24) // Reserved -#define AT91C_ID_25_Reserved (25) // Reserved -#define AT91C_ID_26_Reserved (26) // Reserved -#define AT91C_ID_27_Reserved (27) // Reserved -#define AT91C_ID_28_Reserved (28) // Reserved -#define AT91C_ID_29_Reserved (29) // Reserved -#define AT91C_ID_IRQ0 (30) // Advanced Interrupt Controller (IRQ0) -#define AT91C_ID_IRQ1 (31) // Advanced Interrupt Controller (IRQ1) -#define AT91C_ALL_INT (0xC003FFFF) // ALL VALID INTERRUPTS - -// ***************************************************************************** -// BASE ADDRESS DEFINITIONS FOR AT91SAM7X512 -// ***************************************************************************** -#define AT91C_BASE_SYS (AT91_CAST(AT91PS_SYS) 0xFFFFF000) // (SYS) Base Address -#define AT91C_BASE_AIC (AT91_CAST(AT91PS_AIC) 0xFFFFF000) // (AIC) Base Address -#define AT91C_BASE_PDC_DBGU (AT91_CAST(AT91PS_PDC) 0xFFFFF300) // (PDC_DBGU) Base Address -#define AT91C_BASE_DBGU (AT91_CAST(AT91PS_DBGU) 0xFFFFF200) // (DBGU) Base Address -#define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address -#define AT91C_BASE_PIOB (AT91_CAST(AT91PS_PIO) 0xFFFFF600) // (PIOB) Base Address -#define AT91C_BASE_CKGR (AT91_CAST(AT91PS_CKGR) 0xFFFFFC20) // (CKGR) Base Address -#define AT91C_BASE_PMC (AT91_CAST(AT91PS_PMC) 0xFFFFFC00) // (PMC) Base Address -#define AT91C_BASE_RSTC (AT91_CAST(AT91PS_RSTC) 0xFFFFFD00) // (RSTC) Base Address -#define AT91C_BASE_RTTC (AT91_CAST(AT91PS_RTTC) 0xFFFFFD20) // (RTTC) Base Address -#define AT91C_BASE_PITC (AT91_CAST(AT91PS_PITC) 0xFFFFFD30) // (PITC) Base Address -#define AT91C_BASE_WDTC (AT91_CAST(AT91PS_WDTC) 0xFFFFFD40) // (WDTC) Base Address -#define AT91C_BASE_VREG (AT91_CAST(AT91PS_VREG) 0xFFFFFD60) // (VREG) Base Address -#define AT91C_BASE_EFC0 (AT91_CAST(AT91PS_EFC) 0xFFFFFF60) // (EFC0) Base Address -#define AT91C_BASE_EFC1 (AT91_CAST(AT91PS_EFC) 0xFFFFFF70) // (EFC1) Base Address -#define AT91C_BASE_MC (AT91_CAST(AT91PS_MC) 0xFFFFFF00) // (MC) Base Address -#define AT91C_BASE_PDC_SPI1 (AT91_CAST(AT91PS_PDC) 0xFFFE4100) // (PDC_SPI1) Base Address -#define AT91C_BASE_SPI1 (AT91_CAST(AT91PS_SPI) 0xFFFE4000) // (SPI1) Base Address -#define AT91C_BASE_PDC_SPI0 (AT91_CAST(AT91PS_PDC) 0xFFFE0100) // (PDC_SPI0) Base Address -#define AT91C_BASE_SPI0 (AT91_CAST(AT91PS_SPI) 0xFFFE0000) // (SPI0) Base Address -#define AT91C_BASE_PDC_US1 (AT91_CAST(AT91PS_PDC) 0xFFFC4100) // (PDC_US1) Base Address -#define AT91C_BASE_US1 (AT91_CAST(AT91PS_USART) 0xFFFC4000) // (US1) Base Address -#define AT91C_BASE_PDC_US0 (AT91_CAST(AT91PS_PDC) 0xFFFC0100) // (PDC_US0) Base Address -#define AT91C_BASE_US0 (AT91_CAST(AT91PS_USART) 0xFFFC0000) // (US0) Base Address -#define AT91C_BASE_PDC_SSC (AT91_CAST(AT91PS_PDC) 0xFFFD4100) // (PDC_SSC) Base Address -#define AT91C_BASE_SSC (AT91_CAST(AT91PS_SSC) 0xFFFD4000) // (SSC) Base Address -#define AT91C_BASE_TWI (AT91_CAST(AT91PS_TWI) 0xFFFB8000) // (TWI) Base Address -#define AT91C_BASE_PWMC_CH3 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC260) // (PWMC_CH3) Base Address -#define AT91C_BASE_PWMC_CH2 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC240) // (PWMC_CH2) Base Address -#define AT91C_BASE_PWMC_CH1 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC220) // (PWMC_CH1) Base Address -#define AT91C_BASE_PWMC_CH0 (AT91_CAST(AT91PS_PWMC_CH) 0xFFFCC200) // (PWMC_CH0) Base Address -#define AT91C_BASE_PWMC (AT91_CAST(AT91PS_PWMC) 0xFFFCC000) // (PWMC) Base Address -#define AT91C_BASE_UDP (AT91_CAST(AT91PS_UDP) 0xFFFB0000) // (UDP) Base Address -#define AT91C_BASE_TC0 (AT91_CAST(AT91PS_TC) 0xFFFA0000) // (TC0) Base Address -#define AT91C_BASE_TC1 (AT91_CAST(AT91PS_TC) 0xFFFA0040) // (TC1) Base Address -#define AT91C_BASE_TC2 (AT91_CAST(AT91PS_TC) 0xFFFA0080) // (TC2) Base Address -#define AT91C_BASE_TCB (AT91_CAST(AT91PS_TCB) 0xFFFA0000) // (TCB) Base Address -#define AT91C_BASE_CAN_MB0 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0200) // (CAN_MB0) Base Address -#define AT91C_BASE_CAN_MB1 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0220) // (CAN_MB1) Base Address -#define AT91C_BASE_CAN_MB2 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0240) // (CAN_MB2) Base Address -#define AT91C_BASE_CAN_MB3 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0260) // (CAN_MB3) Base Address -#define AT91C_BASE_CAN_MB4 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD0280) // (CAN_MB4) Base Address -#define AT91C_BASE_CAN_MB5 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD02A0) // (CAN_MB5) Base Address -#define AT91C_BASE_CAN_MB6 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD02C0) // (CAN_MB6) Base Address -#define AT91C_BASE_CAN_MB7 (AT91_CAST(AT91PS_CAN_MB) 0xFFFD02E0) // (CAN_MB7) Base Address -#define AT91C_BASE_CAN (AT91_CAST(AT91PS_CAN) 0xFFFD0000) // (CAN) Base Address -#define AT91C_BASE_EMAC (AT91_CAST(AT91PS_EMAC) 0xFFFDC000) // (EMAC) Base Address -#define AT91C_BASE_PDC_ADC (AT91_CAST(AT91PS_PDC) 0xFFFD8100) // (PDC_ADC) Base Address -#define AT91C_BASE_ADC (AT91_CAST(AT91PS_ADC) 0xFFFD8000) // (ADC) Base Address - -// ***************************************************************************** -// MEMORY MAPPING DEFINITIONS FOR AT91SAM7X512 -// ***************************************************************************** -// ISRAM -#define AT91C_ISRAM (0x00200000) // Internal SRAM base address -#define AT91C_ISRAM_SIZE (0x00020000) // Internal SRAM size in byte (128 Kbytes) -// IFLASH -#define AT91C_IFLASH (0x00100000) // Internal FLASH base address -#define AT91C_IFLASH_SIZE (0x00080000) // Internal FLASH size in byte (512 Kbytes) -#define AT91C_IFLASH_PAGE_SIZE (256) // Internal FLASH Page Size: 256 bytes -#define AT91C_IFLASH_LOCK_REGION_SIZE (16384) // Internal FLASH Lock Region Size: 16 Kbytes -#define AT91C_IFLASH_NB_OF_PAGES (2048) // Internal FLASH Number of Pages: 2048 bytes -#define AT91C_IFLASH_NB_OF_LOCK_BITS (32) // Internal FLASH Number of Lock Bits: 32 bytes - -#endif diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/aic.c b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/aic.c deleted file mode 100644 index f71ee09..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/aic.c +++ /dev/null @@ -1,84 +0,0 @@ -/* ---------------------------------------------------------------------------- - * ATMEL Microcontroller Software Support - ROUSSET - - * ---------------------------------------------------------------------------- - * Copyright (c) 2006, Atmel Corporation - - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the disclaiimer below. - * - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the disclaimer below in the documentation and/or - * other materials provided with the distribution. - * - * Atmel's name may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE - * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * ---------------------------------------------------------------------------- - */ - -//------------------------------------------------------------------------------ -// Headers -//------------------------------------------------------------------------------ - -#include "aic.h" -#include - -//------------------------------------------------------------------------------ -// Exported functions -//------------------------------------------------------------------------------ - -//------------------------------------------------------------------------------ -/// Configures the interrupt associated with the given source, using the -/// specified mode and interrupt handler. -/// \param source Interrupt source to configure. -/// \param mode Triggering mode of the interrupt. -/// \param handler Interrupt handler function. -//------------------------------------------------------------------------------ -void AIC_ConfigureIT(unsigned int source, - unsigned int mode, - void (*handler)( void )) -{ - // Disable the interrupt first - AT91C_BASE_AIC->AIC_IDCR = 1 << source; - - // Configure mode and handler - AT91C_BASE_AIC->AIC_SMR[source] = mode; - AT91C_BASE_AIC->AIC_SVR[source] = (unsigned int) handler; - - // Clear interrupt - AT91C_BASE_AIC->AIC_ICCR = 1 << source; -} - -//------------------------------------------------------------------------------ -/// Enables interrupts coming from the given (unique) source. -/// \param source Interrupt source to enable. -//------------------------------------------------------------------------------ -void AIC_EnableIT(unsigned int source) -{ - AT91C_BASE_AIC->AIC_IECR = 1 << source; -} - -//------------------------------------------------------------------------------ -/// Disables interrupts coming from the given (unique) source. -/// \param source Interrupt source to enable. -//------------------------------------------------------------------------------ -void AIC_DisableIT(unsigned int source) -{ - AT91C_BASE_AIC->AIC_IDCR = 1 << source; -} - diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/aic.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/aic.h deleted file mode 100644 index ab7fd6d..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91lib/aic.h +++ /dev/null @@ -1,78 +0,0 @@ -/* ---------------------------------------------------------------------------- - * ATMEL Microcontroller Software Support - ROUSSET - - * ---------------------------------------------------------------------------- - * Copyright (c) 2006, Atmel Corporation - - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the disclaiimer below. - * - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the disclaimer below in the documentation and/or - * other materials provided with the distribution. - * - * Atmel's name may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE - * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * ---------------------------------------------------------------------------- - */ - -//------------------------------------------------------------------------------ -/// \dir -/// !Purpose -/// -/// Methods and definitions for configuring interrupts using the Advanced -/// Interrupt Controller (AIC). -/// -/// !Usage -/// -# Configure an interrupt source using AIC_ConfigureIT -/// -# Enable or disable interrupt generation of a particular source with -/// AIC_EnableIT and AIC_DisableIT. -//------------------------------------------------------------------------------ - -#ifndef AIC_H -#define AIC_H - -//------------------------------------------------------------------------------ -// Headers -//------------------------------------------------------------------------------ - -#include - -//------------------------------------------------------------------------------ -// Definitions -//------------------------------------------------------------------------------ - -#ifndef AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL - /// Redefinition of missing constant. - #define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE -#endif - -//------------------------------------------------------------------------------ -// Global functions -//------------------------------------------------------------------------------ - -extern void AIC_ConfigureIT(unsigned int source, - unsigned int mode, - void (*handler)( void )); - -extern void AIC_EnableIT(unsigned int source); - -extern void AIC_DisableIT(unsigned int source); - -#endif //#ifndef AIC_H - diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7.h deleted file mode 100644 index 66c1e20..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _AT91SAM7_H_ -#define _AT91SAM7_H_ - -/* - * Supported platforms. - */ -#define SAM7S64 0 -#define SAM7S128 1 -#define SAM7S256 2 -#define SAM7S512 3 -#define SAM7X128 4 -#define SAM7X256 5 -#define SAM7X512 6 - -#ifndef SAM7_PLATFORM -#error "SAM7 platform not defined" -#endif - -#if SAM7_PLATFORM == SAM7S64 -#include "at91lib/AT91SAM7S64.h" -#elif SAM7_PLATFORM == SAM7S128 -#include "at91lib/AT91SAM7S128.h" -#elif SAM7_PLATFORM == SAM7S256 -#include "at91lib/AT91SAM7S256.h" -#elif SAM7_PLATFORM == SAM7S512 -#include "at91lib/AT91SAM7S512.h" -#elif SAM7_PLATFORM == SAM7X128 -#include "at91lib/AT91SAM7X128.h" -#elif SAM7_PLATFORM == SAM7X256 -#include "at91lib/AT91SAM7X256.h" -#elif SAM7_PLATFORM == SAM7X512 -#include "at91lib/AT91SAM7X512.h" -#else -#error "SAM7 platform not supported" -#endif - -#endif /* _AT91SAM7_H_ */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7_mii.c b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7_mii.c deleted file mode 100644 index 95cc0e9..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7_mii.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AT91SAM7/at91sam7_mii.c - * @brief AT91SAM7 low level MII driver code. - * @addtogroup AT91SAM7_MII - * @{ - */ - -#include "ch.h" -#include "hal.h" -#include "at91sam7_mii.h" - -#if CH_HAL_USE_MAC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level MII driver initialization. - */ -void miiInit(void) { - -} - -/** - * @brief Resets a PHY device. - * - * @param[in] macp pointer to the @p MACDriver object - */ -void miiReset(MACDriver *macp) { - - (void)macp; - - /* - * Disables the pullups on all the pins that are latched on reset by the PHY. - */ - AT91C_BASE_PIOB->PIO_PPUDR = PHY_LATCHED_PINS; - -#ifdef PIOB_PHY_PD_MASK - /* - * PHY power control. - */ - AT91C_BASE_PIOB->PIO_OER = PIOB_PHY_PD_MASK; // Becomes an output. - AT91C_BASE_PIOB->PIO_PPUDR = PIOB_PHY_PD_MASK; // Default pullup disabled. -#if (PHY_HARDWARE == PHY_DAVICOM_9161) - AT91C_BASE_PIOB->PIO_CODR = PIOB_PHY_PD_MASK; // Output to low level. -#else - AT91C_BASE_PIOB->PIO_SODR = PIOB_PHY_PD_MASK; // Output to high level. -#endif -#endif // PIOB_PHY_PD_MASK - - /* - * PHY reset by pulsing the NRST pin. - */ - AT91C_BASE_RSTC->RSTC_RMR = 0xA5000100; - AT91C_BASE_RSTC->RSTC_RCR = 0xA5000000 | AT91C_RSTC_EXTRST; - while (!(AT91C_BASE_RSTC->RSTC_RSR & AT91C_RSTC_NRSTL)) - ; -} - -/** - * @brief Reads a PHY register through the MII interface. - * - * @param[in] macp pointer to the @p MACDriver object - * @param addr the register address - * @return The register value. - */ -phyreg_t miiGet(MACDriver *macp, phyaddr_t addr) { - - (void)macp; - AT91C_BASE_EMAC->EMAC_MAN = (0b01 << 30) | /* SOF */ - (0b10 << 28) | /* RW */ - (PHY_ADDRESS << 23) | /* PHYA */ - (addr << 18) | /* REGA */ - (0b10 << 16); /* CODE */ - while (!( AT91C_BASE_EMAC->EMAC_NSR & AT91C_EMAC_IDLE)) - ; - return (phyreg_t)(AT91C_BASE_EMAC->EMAC_MAN & 0xFFFF); -} - -/** - * @brief Writes a PHY register through the MII interface. - * - * @param[in] macp pointer to the @p MACDriver object - * @param addr the register address - * @param value the new register value - */ -void miiPut(MACDriver *macp, phyaddr_t addr, phyreg_t value) { - - (void)macp; - AT91C_BASE_EMAC->EMAC_MAN = (0b01 << 30) | /* SOF */ - (0b01 << 28) | /* RW */ - (PHY_ADDRESS << 23) | /* PHYA */ - (addr << 18) | /* REGA */ - (0b10 << 16) | /* CODE */ - value; - while (!( AT91C_BASE_EMAC->EMAC_NSR & AT91C_EMAC_IDLE)) - ; -} - -#endif /* CH_HAL_USE_MAC */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7_mii.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7_mii.h deleted file mode 100644 index d329bb2..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/at91sam7_mii.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AT91SAM7/at91sam7_mii.h - * @brief AT91SAM7 low level MII driver header. - * @addtogroup AT91SAM7_MII - * @{ - */ - -#ifndef _AT91SAM7_MII_H_ -#define _AT91SAM7_MII_H_ - -#if CH_HAL_USE_MAC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -#define PHY_MICREL_KS8721 0 -#define PHY_DAVICOM_9161 1 - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief PHY manufacturer and model. - */ -#if !defined(PHY_HARDWARE) || defined(__DOXYGEN__) -#define PHY_HARDWARE PHY_MICREL_KS8721 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/** - * @brief Pins latched by the PHY at reset. - */ -#if PHY_HARDWARE == PHY_MICREL_KS8721 -#define PHY_ADDRESS 1 -#define PHY_ID MII_KS8721_ID -#define PHY_LATCHED_PINS (AT91C_PB4_ECRS | AT91C_PB5_ERX0 | \ - AT91C_PB6_ERX1 | AT91C_PB7_ERXER | \ - AT91C_PB13_ERX2 | AT91C_PB14_ERX3 | \ - AT91C_PB15_ERXDV_ECRSDV | AT91C_PB16_ECOL | \ - AT91C_PIO_PB26) - -#elif PHY_HARDWARE == PHY_DAVICOM_9161 -#define PHY_ADDRESS 0 -#define PHY_ID MII_DM9161_ID -#define PHY_LATCHED_PINS (AT91C_PB0_ETXCK_EREFCK | AT91C_PB4_ECRS | \ - AT91C_PB5_ERX0 | AT91C_PB6_ERX1 | \ - AT91C_PB7_ERXER | AT91C_PB13_ERX2 | \ - AT91C_PB14_ERX3 | AT91C_PB15_ERXDV_ECRSDV | \ - AT91C_PB16_ECOL | AT91C_PB17_ERXCK) -#endif /* PHY_HARDWARE */ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Type of a PHY register value. - */ -typedef uint16_t phyreg_t; - -/** - * @brief Type of a PHY register address. - */ -typedef uint8_t phyaddr_t; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void miiInit(void); - void miiReset(MACDriver *macp); - phyreg_t miiGet(MACDriver *macp, phyaddr_t addr); - void miiPut(MACDriver *macp, phyaddr_t addr, phyreg_t value); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_MAC */ - -#endif /* _AT91SAM7_MII_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/hal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/hal_lld.c deleted file mode 100644 index a7473c8..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/hal_lld.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AT91SAM7/hal_lld.c - * @brief AT91SAM7 HAL subsystem low level driver source. - * @addtogroup AT91SAM7_HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - */ -const PALConfig pal_default_config = -{ - {VAL_PIOA_ODSR, VAL_PIOA_OSR, VAL_PIOA_PUSR}, -#if (SAM7_PLATFORM == SAM7X128) || (SAM7_PLATFORM == SAM7X256) || \ - (SAM7_PLATFORM == SAM7X512) - {VAL_PIOB_ODSR, VAL_PIOB_OSR, VAL_PIOB_PUSR} -#endif -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -static CH_IRQ_HANDLER(spurious_handler) { - - CH_IRQ_PROLOGUE(); - - AT91SAM7_SPURIOUS_HANDLER_HOOK(); - - AT91C_BASE_AIC->AIC_EOICR = 0; - - CH_IRQ_EPILOGUE(); -} - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - unsigned i; - - /* FIQ Handler weak symbol defined in vectors.s.*/ - void FiqHandler(void); - - /* Default AIC setup, the device drivers will modify it as needed.*/ - AT91C_BASE_AIC->AIC_ICCR = 0xFFFFFFFF; - AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF; - AT91C_BASE_AIC->AIC_SVR[0] = (AT91_REG)FiqHandler; - for (i = 1; i < 31; i++) { - AT91C_BASE_AIC->AIC_SVR[i] = (AT91_REG)NULL; - AT91C_BASE_AIC->AIC_EOICR = (AT91_REG)i; - } - AT91C_BASE_AIC->AIC_SPU = (AT91_REG)spurious_handler; - -} - -/** - * @brief AT91SAM7 clocks and PLL initialization. - * @note All the involved constants come from the file @p board.h. - */ -void at91sam7_clock_init(void) { - - /* wait for reset */ - while((AT91C_BASE_RSTC->RSTC_RSR & (AT91C_RSTC_SRCMP | AT91C_RSTC_NRSTL)) != AT91C_RSTC_NRSTL) - ; - /* enable reset */ - AT91C_BASE_RSTC->RSTC_RMR = ((0xA5 << 24) | AT91C_RSTC_URSTEN); - - /* Flash Memory: 1 wait state, about 50 cycles in a microsecond.*/ -#if SAM7_PLATFORM == SAM7X512 - AT91C_BASE_MC->MC0_FMR = (AT91C_MC_FMCN & (50 << 16)) | AT91C_MC_FWS_1FWS; - AT91C_BASE_MC->MC1_FMR = (AT91C_MC_FMCN & (50 << 16)) | AT91C_MC_FWS_1FWS; -#else - AT91C_BASE_MC->MC_FMR = (AT91C_MC_FMCN & (50 << 16)) | AT91C_MC_FWS_1FWS; -#endif - - /* Enables the main oscillator and waits 56 slow cycles as startup time.*/ - AT91C_BASE_PMC->PMC_MOR = (AT91C_CKGR_OSCOUNT & (7 << 8)) | AT91C_CKGR_MOSCEN; - while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS)) - ; - - /* PLL setup: DIV = 14, MUL = 72, PLLCOUNT = 10 - PLLfreq = 96109714 Hz (rounded).*/ - AT91C_BASE_PMC->PMC_PLLR = (AT91C_CKGR_DIV & 14) | - (AT91C_CKGR_PLLCOUNT & (10 << 8)) | - (AT91SAM7_USBDIV) | - (AT91C_CKGR_MUL & (72 << 16)); - while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK)) - ; - - /* Master clock = PLLfreq / 2 = 48054858 Hz (rounded).*/ - AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2; - while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY)) - ; - - AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK; - while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY)) - ; -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/hal_lld.h deleted file mode 100644 index bee0f72..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/hal_lld.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AT91SAM7/hal_lld.h - * @brief AT91SAM7 HAL subsystem low level driver header. - * @addtogroup AT91SAM7_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -#include "at91sam7.h" -#include "at91lib/aic.h" - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "AT91SAM7x" - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Default action for the spurious handler, nothing. - */ -#if !defined(AT91SAM7_SPURIOUS_HANDLER_HOOK) || defined(__DOXYGEN__) -#define AT91SAM7_SPURIOUS_HANDLER_HOOK() -#endif - -/** - * @brief Default divider for the USB clock - half the PLL clock. - */ -#if !defined(AT91SAM7_USBDIV) || defined(__DOXYGEN__) -#define AT91SAM7_USBDIV AT91C_CKGR_USBDIV_1 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); - void at91sam7_clock_init(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/mac_lld.c b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/mac_lld.c deleted file mode 100644 index 45ecf0b..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/mac_lld.c +++ /dev/null @@ -1,514 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AT91SAM7/mac_lld.c - * @brief AT91SAM7 low level MAC driver code. - * @addtogroup AT91SAM7_MAC - * @{ - */ - -#include - -#include "ch.h" -#include "hal.h" -#include "mii.h" -#include "at91sam7_mii.h" - -#if CH_HAL_USE_MAC || defined(__DOXYGEN__) - -#define EMAC_PIN_MASK (AT91C_PB0_ETXCK_EREFCK | AT91C_PB1_ETXEN | \ - AT91C_PB2_ETX0 | AT91C_PB3_ETX1 | \ - AT91C_PB4_ECRS | AT91C_PB5_ERX0 | \ - AT91C_PB6_ERX1 | AT91C_PB7_ERXER | \ - AT91C_PB8_EMDC | AT91C_PB9_EMDIO | \ - AT91C_PB10_ETX2 | AT91C_PB11_ETX3 | \ - AT91C_PB12_ETXER | AT91C_PB13_ERX2 | \ - AT91C_PB14_ERX3 | AT91C_PB15_ERXDV_ECRSDV | \ - AT91C_PB16_ECOL | AT91C_PB17_ERXCK) - -#define RSR_BITS (AT91C_EMAC_BNA | AT91C_EMAC_REC | AT91C_EMAC_OVR) - -#define TSR_BITS (AT91C_EMAC_UBR | AT91C_EMAC_COL | AT91C_EMAC_RLES | \ - AT91C_EMAC_BEX | AT91C_EMAC_COMP | AT91C_EMAC_UND) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** - * @brief Ethernet driver 1. - */ -MACDriver ETH1; - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -#ifndef __DOXYGEN__ -static bool_t link_up; - -static uint8_t default_mac[] = {0xAA, 0x55, 0x13, 0x37, 0x01, 0x10}; - -static EMACDescriptor *rxptr; -static EMACDescriptor *txptr; -static EMACDescriptor rd[EMAC_RECEIVE_DESCRIPTORS] - __attribute__((aligned(8))); -static EMACDescriptor td[EMAC_TRANSMIT_DESCRIPTORS] - __attribute__((aligned(8))); -static uint8_t rb[EMAC_RECEIVE_DESCRIPTORS * EMAC_RECEIVE_BUFFERS_SIZE] - __attribute__((aligned(8))); -static uint8_t tb[EMAC_TRANSMIT_DESCRIPTORS * EMAC_TRANSMIT_BUFFERS_SIZE] - __attribute__((aligned(8))); -#endif - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/** - * @brief IRQ handler. - */ -/** @cond never*/ -__attribute__((noinline)) -/** @endcond*/ -static void serve_interrupt(void) { - uint32_t isr, rsr, tsr; - - /* Fix for the EMAC errata */ - isr = AT91C_BASE_EMAC->EMAC_ISR; - rsr = AT91C_BASE_EMAC->EMAC_RSR; - tsr = AT91C_BASE_EMAC->EMAC_TSR; - - if ((isr & AT91C_EMAC_RCOMP) || (rsr & RSR_BITS)) { - if (rsr & AT91C_EMAC_REC) { - chSysLockFromIsr(); - chSemResetI(Ð1.md_rdsem, 0); -#if CH_USE_EVENTS - chEvtBroadcastI(Ð1.md_rdevent); -#endif - chSysUnlockFromIsr(); - } - AT91C_BASE_EMAC->EMAC_RSR = RSR_BITS; - } - - if ((isr & AT91C_EMAC_TCOMP) || (tsr & TSR_BITS)) { - if (tsr & AT91C_EMAC_COMP) { - chSysLockFromIsr(); - chSemResetI(Ð1.md_tdsem, 0); - chSysUnlockFromIsr(); - } - AT91C_BASE_EMAC->EMAC_TSR = TSR_BITS; - } - AT91C_BASE_AIC->AIC_EOICR = 0; -} - -/** - * @brief Cleans an incomplete frame. - * @param from the start position of the incomplete frame - */ -static void cleanup(EMACDescriptor *from) { - - while (from != rxptr) { - from->w1 &= ~W1_R_OWNERSHIP; - if (++from >= &rd[EMAC_RECEIVE_DESCRIPTORS]) - from = rd; - } -} - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/** - * @brief EMAC IRQ veneer handler. - */ -CH_IRQ_HANDLER(irq_handler) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(); - - CH_IRQ_EPILOGUE(); -} - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level MAC initialization. - */ -void mac_lld_init(void) { - unsigned i; - - miiInit(); - macObjectInit(Ð1); - - /* - * Buffers initialization. - */ - for (i = 0; i < EMAC_RECEIVE_DESCRIPTORS; i++) { - rd[i].w1 = (uint32_t)&rb[i * EMAC_RECEIVE_BUFFERS_SIZE]; - rd[i].w2 = 0; - } - rd[EMAC_RECEIVE_DESCRIPTORS - 1].w1 |= W1_R_WRAP; - rxptr = rd; - for (i = 0; i < EMAC_TRANSMIT_DESCRIPTORS; i++) { - td[i].w1 = (uint32_t)&tb[i * EMAC_TRANSMIT_BUFFERS_SIZE]; - td[i].w2 = EMAC_TRANSMIT_BUFFERS_SIZE | W2_T_LAST_BUFFER | W2_T_USED; - } - td[EMAC_TRANSMIT_DESCRIPTORS - 1].w2 |= W2_T_WRAP; - txptr = td; - - /* - * Associated PHY initialization. - */ - miiReset(Ð1); - - /* - * EMAC pins setup and clock enable. Note, PB18 is not included because it is - * used as #PD control and not as EF100. - */ - AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_EMAC; - AT91C_BASE_PIOB->PIO_ASR = EMAC_PIN_MASK; - AT91C_BASE_PIOB->PIO_PDR = EMAC_PIN_MASK; - AT91C_BASE_PIOB->PIO_PPUDR = EMAC_PIN_MASK; - - /* - * EMAC Initial setup. - */ - AT91C_BASE_EMAC->EMAC_NCR = 0; /* Stopped but MCE active.*/ - AT91C_BASE_EMAC->EMAC_NCFGR = 2 << 10; /* MDC-CLK = MCK / 32 */ - AT91C_BASE_EMAC->EMAC_USRIO = AT91C_EMAC_CLKEN;/* Enable EMAC in MII mode.*/ - AT91C_BASE_EMAC->EMAC_RBQP = (AT91_REG)rd; /* RX descriptors list.*/ - AT91C_BASE_EMAC->EMAC_TBQP = (AT91_REG)td; /* TX descriptors list.*/ - AT91C_BASE_EMAC->EMAC_RSR = AT91C_EMAC_OVR | - AT91C_EMAC_REC | - AT91C_EMAC_BNA; /* Clears RSR.*/ - AT91C_BASE_EMAC->EMAC_NCFGR |= AT91C_EMAC_DRFCS;/* Initial NCFGR settings.*/ - AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_TE | - AT91C_EMAC_RE | - AT91C_EMAC_CLRSTAT;/* Initial NCR settings.*/ - mac_lld_set_address(Ð1, default_mac); - - /* - * PHY device identification. - */ - AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_MPE; - if ((miiGet(Ð1, MII_PHYSID1) != (PHY_ID >> 16)) || - ((miiGet(Ð1, MII_PHYSID2) & 0xFFF0) != (PHY_ID & 0xFFF0))) - chSysHalt(); - AT91C_BASE_EMAC->EMAC_NCR &= ~AT91C_EMAC_MPE; - - /* - * Interrupt configuration. - */ - AT91C_BASE_EMAC->EMAC_IER = AT91C_EMAC_RCOMP | AT91C_EMAC_TCOMP; - AIC_ConfigureIT(AT91C_ID_EMAC, - AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | EMAC_INTERRUPT_PRIORITY, - irq_handler); - AIC_EnableIT(AT91C_ID_EMAC); -} - -/** - * @brief Low level MAC address setup. - * - * @param[in] macp pointer to the @p MACDriver object - * @param[in] p pointer to a six bytes buffer containing the MAC address. If - * this parameter is set to @p NULL then a system default MAC is - * used. The MAC address must be aligned with the most significant - * byte first. - */ -void mac_lld_set_address(MACDriver *macp, const uint8_t *p) { - - (void)macp; - AT91C_BASE_EMAC->EMAC_SA1L = (AT91_REG)((p[3] << 24) | (p[2] << 16) | - (p[1] << 8) | p[0]); - AT91C_BASE_EMAC->EMAC_SA1H = (AT91_REG)((p[5] << 8) | p[4]); -} - -/** - * @brief Returns a transmission descriptor. - * @details One of the available transmission descriptors is locked and - * returned. - * - * @param[in] macp pointer to the @p MACDriver object - * @param[out] tdp pointer to a @p MACTransmitDescriptor structure - * @return The operation status. - * @retval RDY_OK the descriptor was obtained. - * @retval RDY_TIMEOUT descriptor not available. - */ -msg_t max_lld_get_transmit_descriptor(MACDriver *macp, - MACTransmitDescriptor *tdp) { - EMACDescriptor *edp; - - (void)macp; - - if (!link_up) - return RDY_TIMEOUT; - - chSysLock(); - edp = txptr; - if (!(edp->w2 & W2_T_USED) || (edp->w2 & W2_T_LOCKED)) { - chSysUnlock(); - return RDY_TIMEOUT; - } - /* - * Set the buffer size and configuration, the buffer is also marked - * as locked. - */ - if (++txptr >= &td[EMAC_TRANSMIT_DESCRIPTORS]) { - edp->w2 = W2_T_LOCKED | W2_T_USED | W2_T_LAST_BUFFER | W2_T_WRAP; - txptr = td; - } - else - edp->w2 = W2_T_LOCKED | W2_T_USED | W2_T_LAST_BUFFER; - chSysUnlock(); - tdp->td_offset = 0; - tdp->td_size = EMAC_TRANSMIT_BUFFERS_SIZE; - tdp->td_physdesc = edp; - return RDY_OK; -} - -/** - * @brief Writes to a transmit descriptor's stream. - * - * @param[in] tdp pointer to a @p MACTransmitDescriptor structure - * @param[in] buf pointer to the buffer cointaining the data to be written - * @param[in] size number of bytes to be written - * @return The number of bytes written into the descriptor's stream, this - * value can be less than the amount specified in the parameter - * @p size if the maximum frame size is reached. - */ -size_t mac_lld_write_transmit_descriptor(MACTransmitDescriptor *tdp, - uint8_t *buf, - size_t size) { - - if (size > tdp->td_size - tdp->td_offset) - size = tdp->td_size - tdp->td_offset; - if (size > 0) { - memcpy((uint8_t *)(tdp->td_physdesc->w1 & W1_T_ADDRESS_MASK) + - tdp->td_offset, - buf, size); - tdp->td_offset += size; - } - return size; -} - -/** - * @brief Releases a transmit descriptor and starts the transmission of the - * enqueued data as a single frame. - * - * @param[in] tdp the pointer to the @p MACTransmitDescriptor structure - */ -void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp) { - - chSysLock(); - tdp->td_physdesc->w2 = (tdp->td_physdesc->w2 & - ~(W2_T_LOCKED | W2_T_USED | W2_T_LENGTH_MASK)) | - tdp->td_offset; - AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_TSTART; - chSysUnlock(); -} - -/** - * @brief Returns a receive descriptor. - * - * @param[in] macp pointer to the @p MACDriver object - * @param[out] rdp pointer to a @p MACReceiveDescriptor structure - * @return The operation status. - * @retval RDY_OK the descriptor was obtained. - * @retval RDY_TIMEOUT descriptor not available. - */ -msg_t max_lld_get_receive_descriptor(MACDriver *macp, - MACReceiveDescriptor *rdp) { - unsigned n; - EMACDescriptor *edp; - - (void)macp; - n = EMAC_RECEIVE_DESCRIPTORS; - - /* - * Skips unused buffers, if any. - */ -skip: - while ((n > 0) && !(rxptr->w1 & W1_R_OWNERSHIP)) { - if (++rxptr >= &rd[EMAC_RECEIVE_DESCRIPTORS]) - rxptr = rd; - n--; - } - - /* - * Skips fragments, if any, cleaning them up. - */ - while ((n > 0) && (rxptr->w1 & W1_R_OWNERSHIP) && - !(rxptr->w2 & W2_R_FRAME_START)) { - rxptr->w1 &= ~W1_R_OWNERSHIP; - if (++rxptr >= &rd[EMAC_RECEIVE_DESCRIPTORS]) - rxptr = rd; - n--; - } - - /* - * Now compute the total frame size skipping eventual incomplete frames - * or holes... - */ -restart: - edp = rxptr; - while (n > 0) { - if (!(rxptr->w1 & W1_R_OWNERSHIP)) { - /* Empty buffer for some reason... cleaning up the incomplete frame.*/ - cleanup(edp); - goto skip; - } - /* - * End Of Frame found. - */ - if (rxptr->w2 & W2_R_FRAME_END) { - rdp->rd_offset = 0; - rdp->rd_size = rxptr->w2 & W2_T_LENGTH_MASK; - rdp->rd_physdesc = edp; - return RDY_OK; - } - - if ((edp != rxptr) && (rxptr->w2 & W2_R_FRAME_START)) { - /* Found another start... cleaning up the incomplete frame.*/ - cleanup(edp); - goto restart; /* Another start buffer for some reason... */ - } - - if (++rxptr >= &rd[EMAC_RECEIVE_DESCRIPTORS]) - rxptr = rd; - n--; - } - return RDY_TIMEOUT; -} - -/** - * @brief Reads from a receive descriptor's stream. - * - * @param[in] rdp pointer to a @p MACReceiveDescriptor structure - * @param[in] buf pointer to the buffer that will receive the read data - * @param[in] size number of bytes to be read - * @return The number of bytes read from the descriptor's stream, this - * value can be less than the amount specified in the parameter - * @p size if there are no more bytes to read. - */ -size_t mac_lld_read_receive_descriptor(MACReceiveDescriptor *rdp, - uint8_t *buf, - size_t size) { - if (size > rdp->rd_size - rdp->rd_offset) - size = rdp->rd_size - rdp->rd_offset; - if (size > 0) { - uint8_t *src = (uint8_t *)(rdp->rd_physdesc->w1 & W1_R_ADDRESS_MASK) + - rdp->rd_offset; - uint8_t *limit = &rb[EMAC_RECEIVE_DESCRIPTORS * EMAC_RECEIVE_BUFFERS_SIZE]; - if (src >= limit) - src -= EMAC_RECEIVE_DESCRIPTORS * EMAC_RECEIVE_BUFFERS_SIZE; - if (src + size > limit ) { - memcpy(buf, src, (size_t)(limit - src)); - memcpy(buf + (size_t)(limit - src), rb, size - (size_t)(limit - src)); - } - else - memcpy(buf, src, size); - rdp->rd_offset += size; - } - return size; -} - -/** - * @brief Releases a receive descriptor. - * @details The descriptor and its buffer are made available for more incoming - * frames. - * - * @param[in] rdp the pointer to the @p MACReceiveDescriptor structure - */ -void mac_lld_release_receive_descriptor(MACReceiveDescriptor *rdp) { - bool_t done; - EMACDescriptor *edp = rdp->rd_physdesc; - - unsigned n = EMAC_RECEIVE_DESCRIPTORS; - do { - done = ((edp->w2 & W2_R_FRAME_END) != 0); - chDbgAssert(edp->w1 & W1_R_OWNERSHIP, - "mac_lld_release_receive_descriptor(), #1", - "found not owned descriptor"); - edp->w1 &= ~(W1_R_OWNERSHIP | W2_R_FRAME_START | W2_R_FRAME_END); - if (++edp >= &rd[EMAC_RECEIVE_DESCRIPTORS]) - edp = rd; - n--; - } - while ((n > 0) && !done); - /* - * Make rxptr point to the descriptor where the next frame will most - * likely appear. - */ - rxptr = edp; -} - -/** - * @brief Updates and returns the link status. - * - * @param[in] macp pointer to the @p MACDriver object - * @return The link status. - * @retval TRUE if the link is active. - * @retval FALSE if the link is down. - */ -bool_t mac_lld_poll_link_status(MACDriver *macp) { - uint32_t ncfgr, bmsr, bmcr, lpa; - - AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_MPE; - (void)miiGet(macp, MII_BMSR); - bmsr = miiGet(macp, MII_BMSR); - if (!(bmsr & BMSR_LSTATUS)) { - AT91C_BASE_EMAC->EMAC_NCR &= ~AT91C_EMAC_MPE; - return link_up = FALSE; - } - - ncfgr = AT91C_BASE_EMAC->EMAC_NCFGR & ~(AT91C_EMAC_SPD | AT91C_EMAC_FD); - bmcr = miiGet(macp, MII_BMCR); - if (bmcr & BMCR_ANENABLE) { - lpa = miiGet(macp, MII_LPA); - if (lpa & (LPA_100HALF | LPA_100FULL | LPA_100BASE4)) - ncfgr |= AT91C_EMAC_SPD; - if (lpa & (LPA_10FULL | LPA_100FULL)) - ncfgr |= AT91C_EMAC_FD; - } - else { - if (bmcr & BMCR_SPEED100) - ncfgr |= AT91C_EMAC_SPD; - if (bmcr & BMCR_FULLDPLX) - ncfgr |= AT91C_EMAC_FD; - } - AT91C_BASE_EMAC->EMAC_NCFGR = ncfgr; - AT91C_BASE_EMAC->EMAC_NCR &= ~AT91C_EMAC_MPE; - return link_up = TRUE; -} - -#endif /* CH_HAL_USE_MAC */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/mac_lld.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/mac_lld.h deleted file mode 100644 index 741c066..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/mac_lld.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AT91SAM7/mac_lld.h - * @brief AT91SAM7 low level MAC driver header. - * @addtogroup AT91SAM7_MAC - * @{ - */ - -#ifndef _MAC_LLD_H_ -#define _MAC_LLD_H_ - -#if CH_HAL_USE_MAC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -#define EMAC_RECEIVE_BUFFERS_SIZE 128 /* Do not modify */ -#define EMAC_TRANSMIT_BUFFERS_SIZE MAC_BUFFERS_SIZE -#define EMAC_RECEIVE_DESCRIPTORS \ - (((((MAC_BUFFERS_SIZE - 1) | (EMAC_RECEIVE_BUFFERS_SIZE - 1)) + 1) \ - / EMAC_RECEIVE_BUFFERS_SIZE) * MAC_RECEIVE_BUFFERS) -#define EMAC_TRANSMIT_DESCRIPTORS MAC_TRANSMIT_BUFFERS - -#define W1_R_OWNERSHIP 0x00000001 -#define W1_R_WRAP 0x00000002 -#define W1_R_ADDRESS_MASK 0xFFFFFFFC - -#define W2_R_LENGTH_MASK 0x00000FFF -#define W2_R_FRAME_START 0x00004000 -#define W2_R_FRAME_END 0x00008000 -#define W2_R_CFI 0x00010000 -#define W2_R_VLAN_PRIO_MASK 0x000E0000 -#define W2_R_PRIO_TAG_DETECTED 0x00100000 -#define W2_R_VLAN_TAG_DETECTED 0x00200000 -#define W2_R_TYPE_ID_MATCH 0x00400000 -#define W2_R_ADDR4_MATCH 0x00800000 -#define W2_R_ADDR3_MATCH 0x01000000 -#define W2_R_ADDR2_MATCH 0x02000000 -#define W2_R_ADDR1_MATCH 0x04000000 -#define W2_R_RFU1 0x08000000 -#define W2_R_ADDR_EXT_MATCH 0x10000000 -#define W2_R_UNICAST_MATCH 0x20000000 -#define W2_R_MULTICAST_MATCH 0x40000000 -#define W2_R_BROADCAST_DETECTED 0x80000000 - -#define W1_T_ADDRESS_MASK 0xFFFFFFFF - -#define W2_T_LENGTH_MASK 0x000007FF -#define W2_T_LOCKED 0x00000800 /* Not an EMAC flag, used by the driver */ -#define W2_T_RFU1 0x00003000 -#define W2_T_LAST_BUFFER 0x00008000 -#define W2_T_NO_CRC 0x00010000 -#define W2_T_RFU2 0x07FE0000 -#define W2_T_BUFFERS_EXHAUSTED 0x08000000 -#define W2_T_TRANSMIT_UNDERRUN 0x10000000 -#define W2_T_RETRY_LIMIT_EXC 0x20000000 -#define W2_T_WRAP 0x40000000 -#define W2_T_USED 0x80000000 - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Number of available transmit buffers. - */ -#if !defined(MAC_TRANSMIT_BUFFERS) || defined(__DOXYGEN__) -#define MAC_TRANSMIT_BUFFERS 2 -#endif - -/** - * @brief Number of available receive buffers. - */ -#if !defined(MAC_RECEIVE_BUFFERS) || defined(__DOXYGEN__) -#define MAC_RECEIVE_BUFFERS 2 -#endif - -/** - * @brief Maximum supported frame size. - */ -#if !defined(MAC_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define MAC_BUFFERS_SIZE 1518 -#endif - -/** - * @brief Interrupt priority level for the EMAC device. - */ -#if !defined(EMAC_INTERRUPT_PRIORITY) || defined(__DOXYGEN__) -#define EMAC_INTERRUPT_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 3) -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Structure representing a buffer physical descriptor. - * @note It represents both descriptor types. - */ -typedef struct { - uint32_t w1; - uint32_t w2; -} EMACDescriptor; - -/** - * @brief Structure representing a MAC driver. - */ -typedef struct { - Semaphore md_tdsem; /**< Transmit semaphore. */ - Semaphore md_rdsem; /**< Receive semaphore. */ -#if CH_USE_EVENTS - EventSource md_rdevent; /**< Receive event source. */ -#endif - /* End of the mandatory fields.*/ -} MACDriver; - -/** - * @brief Structure representing a transmit descriptor. - */ -typedef struct { - size_t td_offset; /**< Current write offset. */ - size_t td_size; /**< Available space size. */ - /* End of the mandatory fields.*/ - EMACDescriptor *td_physdesc; /**< Pointer to the physical - descriptor. */ -} MACTransmitDescriptor; - -/** - * @brief Structure representing a receive descriptor. - */ -typedef struct { - size_t rd_offset; /**< Current read offset. */ - size_t rd_size; /**< Available data size. */ - /* End of the mandatory fields.*/ - EMACDescriptor *rd_physdesc; /**< Pointer to the first descriptor - of the buffers chain. */ -} MACReceiveDescriptor; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if !defined(__DOXYGEN__) -extern MACDriver ETH1; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void mac_lld_init(void); - void mac_lld_set_address(MACDriver *macp, const uint8_t *p); - msg_t max_lld_get_transmit_descriptor(MACDriver *macp, - MACTransmitDescriptor *tdp); - size_t mac_lld_write_transmit_descriptor(MACTransmitDescriptor *tdp, - uint8_t *buf, - size_t size); - void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp); - msg_t max_lld_get_receive_descriptor(MACDriver *macp, - MACReceiveDescriptor *rdp); - size_t mac_lld_read_receive_descriptor(MACReceiveDescriptor *rdp, - uint8_t *buf, - size_t size); - void mac_lld_release_receive_descriptor(MACReceiveDescriptor *rdp); - bool_t mac_lld_poll_link_status(MACDriver *macp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_MAC */ - -#endif /* _MAC_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/pal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/pal_lld.c deleted file mode 100644 index 92ab5b8..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/pal_lld.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AT91SAM7/pal_lld.c - * @brief AT91SAM7 PIO low level driver code. - * @addtogroup AT91SAM7_PAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief AT91SAM7 I/O ports configuration. - * @details PIO registers initialization. - * - * @param[in] config the AT91SAM7 ports configuration - */ -void _pal_lld_init(const PALConfig *config) { - - uint32_t ports = (1 << AT91C_ID_PIOA); -#if (SAM7_PLATFORM == SAM7X128) || (SAM7_PLATFORM == SAM7X256) || \ - (SAM7_PLATFORM == SAM7X512) - ports |= (1 << AT91C_ID_PIOB); -#endif - AT91C_BASE_PMC->PMC_PCER = ports; - - /* - * PIOA setup. - */ - AT91C_BASE_PIOA->PIO_PPUER = config->P0Data.pusr; /* Pull-up as spec.*/ - AT91C_BASE_PIOA->PIO_PPUDR = ~config->P0Data.pusr; - AT91C_BASE_PIOA->PIO_PER = 0xFFFFFFFF; /* PIO enabled.*/ - AT91C_BASE_PIOA->PIO_ODSR = config->P0Data.odsr; /* Data as specified.*/ - AT91C_BASE_PIOA->PIO_OER = config->P0Data.osr; /* Dir. as specified.*/ - AT91C_BASE_PIOA->PIO_ODR = ~config->P0Data.osr; - AT91C_BASE_PIOA->PIO_IFDR = 0xFFFFFFFF; /* Filter disabled.*/ - AT91C_BASE_PIOA->PIO_IDR = 0xFFFFFFFF; /* Int. disabled.*/ - AT91C_BASE_PIOA->PIO_MDDR = 0xFFFFFFFF; /* Push Pull drive.*/ - AT91C_BASE_PIOA->PIO_ASR = 0xFFFFFFFF; /* Peripheral A.*/ - AT91C_BASE_PIOA->PIO_OWER = 0xFFFFFFFF; /* Write enabled.*/ - - /* - * PIOB setup. - */ -#if (SAM7_PLATFORM == SAM7X128) || (SAM7_PLATFORM == SAM7X256) || \ - (SAM7_PLATFORM == SAM7X512) - AT91C_BASE_PIOB->PIO_PPUER = config->P1Data.pusr; /* Pull-up as spec.*/ - AT91C_BASE_PIOB->PIO_PPUDR = ~config->P1Data.pusr; - AT91C_BASE_PIOB->PIO_PER = 0xFFFFFFFF; /* PIO enabled.*/ - AT91C_BASE_PIOB->PIO_ODSR = config->P1Data.odsr; /* Data as specified.*/ - AT91C_BASE_PIOB->PIO_OER = config->P1Data.osr; /* Dir. as specified.*/ - AT91C_BASE_PIOB->PIO_ODR = ~config->P1Data.osr; - AT91C_BASE_PIOB->PIO_IFDR = 0xFFFFFFFF; /* Filter disabled.*/ - AT91C_BASE_PIOB->PIO_IDR = 0xFFFFFFFF; /* Int. disabled.*/ - AT91C_BASE_PIOB->PIO_MDDR = 0xFFFFFFFF; /* Push Pull drive.*/ - AT91C_BASE_PIOB->PIO_ASR = 0xFFFFFFFF; /* Peripheral A.*/ - AT91C_BASE_PIOB->PIO_OWER = 0xFFFFFFFF; /* Write enabled.*/ -#endif -} - -/** - * @brief Pads mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - * - * @note This function is not meant to be invoked directly by the application - * code. - * @note @p PAL_MODE_RESET is implemented as input with pull-up. - * @note @p PAL_MODE_UNCONNECTED is implemented as push pull output with high - * state. - * @note @p PAL_MODE_OUTPUT_OPENDRAIN also enables the pull-up resistor. - */ -void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode) { - - switch (mode & PAL_MODE_MASK) { - case PAL_MODE_RESET: - case PAL_MODE_INPUT_PULLUP: - port->PIO_PPUER = mask; - port->PIO_ODR = mask; - break; - case PAL_MODE_INPUT: - case PAL_MODE_INPUT_ANALOG: - port->PIO_PPUDR = mask; - port->PIO_ODR = mask; - break; - case PAL_MODE_UNCONNECTED: - port->PIO_SODR = mask; - /* Falls in */ - case PAL_MODE_OUTPUT_PUSHPULL: - port->PIO_PPUDR = mask; - port->PIO_OER = mask; - port->PIO_MDDR = mask; - break; - case PAL_MODE_OUTPUT_OPENDRAIN: - port->PIO_PPUER = mask; - port->PIO_OER = mask; - port->PIO_MDER = mask; - } -} - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/pal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/pal_lld.h deleted file mode 100644 index 63b389e..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/pal_lld.h +++ /dev/null @@ -1,262 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AT91SAM7/pal_lld.h - * @brief AT91SAM7 PIO low level driver header. - * @addtogroup AT91SAM7_PAL - * @{ - */ - -#ifndef _PAL_LLD_H_ -#define _PAL_LLD_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Unsupported modes and specific modes */ -/*===========================================================================*/ - -#undef PAL_MODE_INPUT_PULLDOWN - -/*===========================================================================*/ -/* I/O Ports Types and constants. */ -/*===========================================================================*/ - -/** - * @brief PIO port setup info. - */ -typedef struct { - /** Initial value for ODSR register (data).*/ - uint32_t odsr; - /** Initial value for OSR register (direction).*/ - uint32_t osr; - /** Initial value for PUSR register (Pull-ups).*/ - uint32_t pusr; -} at91sam7_pio_setup_t; - -/** - * @brief AT91SAM7 PIO static initializer. - * @details An instance of this structure must be passed to @p palInit() at - * system startup time in order to initialize the digital I/O - * subsystem. This represents only the initial setup, specific pads - * or whole ports can be reprogrammed at later time. - */ -typedef struct { - /** @brief Port 0 setup data.*/ - at91sam7_pio_setup_t P0Data; -#if (SAM7_PLATFORM == SAM7X128) || (SAM7_PLATFORM == SAM7X256) || \ - (SAM7_PLATFORM == SAM7X512) || defined(__DOXYGEN__) - /** @brief Port 1 setup data.*/ - at91sam7_pio_setup_t P1Data; -#endif -} PALConfig; - -/** - * @brief Width, in bits, of an I/O port. - */ -#define PAL_IOPORTS_WIDTH 32 - -/** - * @brief Digital I/O port sized unsigned type. - */ -typedef uint32_t ioportmask_t; - -/** - * @brief Port Identifier. - * @details This type can be a scalar or some kind of pointer, do not make - * any assumption about it, use the provided macros when populating - * variables of this type. - */ -typedef AT91PS_PIO ioportid_t; - -/*===========================================================================*/ -/* I/O Ports Identifiers. */ -/*===========================================================================*/ - -/** - * @brief PIO port A identifier. - */ -#define IOPORT1 AT91C_BASE_PIOA - -/** - * @brief PIO port B identifier. - */ -#if (SAM7_PLATFORM == SAM7X128) || (SAM7_PLATFORM == SAM7X256) || \ - (SAM7_PLATFORM == SAM7X512) || defined(__DOXYGEN__) -#define IOPORT2 AT91C_BASE_PIOB -#endif - -/*===========================================================================*/ -/* Implementation, some of the following macros could be implemented as */ -/* functions, if so please put them in a file named pal_lld.c. */ -/*===========================================================================*/ - -/** - * @brief Low level PAL subsystem initialization. - */ -#define pal_lld_init(config) _pal_lld_init(config) - -/** - * @brief Reads the physical I/O port states. - * @details This function is implemented by reading the PIO_PDSR register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @return The port bits. - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_readport(port) ((port)->PIO_PDSR) - -/** - * @brief Reads the output latch. - * @details This function is implemented by reading the PIO_ODSR register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @return The latched logical states. - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_readlatch(port) ((port)->PIO_ODSR) - -/** - * @brief Writes a bits mask on a I/O port. - * @details This function is implemented by writing the PIO_ODSR register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @param[in] bits the bits to be written on the specified port - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_writeport(port, bits) { \ - (port)->PIO_ODSR = (bits); \ -} - -/** - * @brief Sets a bits mask on a I/O port. - * @details This function is implemented by writing the PIO_SODR register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @param[in] bits the bits to be ORed on the specified port - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_setport(port, bits) { \ - (port)->PIO_SODR = (bits); \ -} - - -/** - * @brief Clears a bits mask on a I/O port. - * @details This function is implemented by writing the PIO_CODR register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @param[in] bits the bits to be cleared on the specified port - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_clearport(port, bits) { \ - (port)->PIO_CODR = (bits); \ -} - -/** - * @brief Writes a group of bits. - * @details This function is implemented by writing the PIO_OWER, PIO_ODSR and - * PIO_OWDR registers, the implementation is not atomic because the - * multiple accesses. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] offset the group bit offset within the port - * @param[in] bits the bits to be written. Values exceeding the group width - * are masked. - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_writegroup(port, mask, offset, bits) { \ - (port)->PIO_OWER = (mask) << (offset); \ - (port)->PIO_ODSR = (bits) << (offset); \ - (port)->PIO_OWDR = (mask) << (offset); \ -} - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - * - * @note This function is not meant to be invoked directly by the application - * code. - * @note @p PAL_MODE_UNCONNECTED is implemented as push pull output with high - * state. - */ -#define pal_lld_setgroupmode(port, mask, mode) \ - _pal_lld_setgroupmode(port, mask, mode) - -/** - * @brief Writes a logical state on an output pad. - * - * @param[in] port the port identifier - * @param[in] pad the pad number within the port - * @param[out] bit the logical value, the value must be @p 0 or @p 1 - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_writepad(port, pad, bit) pal_lld_writegroup(port, 1, pad, bit) - -extern const PALConfig pal_default_config; - -#ifdef __cplusplus -extern "C" { -#endif - void _pal_lld_init(const PALConfig *config); - void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PAL */ - -#endif /* _PAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/platform.dox b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/platform.dox deleted file mode 100644 index 485e132..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/platform.dox +++ /dev/null @@ -1,100 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup AT91SAM7 AT91SAM7 Support - * @brief AT91SAM7 specific support. - * @details The AT91SAM7 support includes: - * - Buffered, interrupt driven, serial driver. - * - EMAC driver with MII support. - * - A demo supporting the kernel test suite. - * - A Web server demo using the uIP TCP/IP stack. - * - A Web server demo using the lwIP TCP/IP stack. - * . - * @ingroup ARM7 - */ - -/** - * @defgroup AT91SAM7_HAL AT91SAM7 HAL Support - * @brief HAL support. - * - * @ingroup AT91SAM7 - */ - -/** - * @defgroup AT91SAM7_PAL AT91SAM7 I/O Ports Support - * @brief I/O Ports peripherals support. - * @details This module supports the AT91SAM7 PIO controller. The controller - * supports the following features (see @ref PAL): - * - 32 bits wide ports. - * - Atomic set/reset functions. - * - Output latched regardless of the pad setting. - * - Direct read of input pads regardless of the pad setting. - * . - *

      Supported Setup Modes

      - * - @p PAL_MODE_RESET. - * - @p PAL_MODE_UNCONNECTED. - * - @p PAL_MODE_INPUT. - * - @p PAL_MODE_INPUT_ANALOG (same as @p PAL_MODE_INPUT). - * - @p PAL_MODE_INPUT_PULLUP. - * - @p PAL_MODE_OUTPUT_PUSHPULL. - * - @p PAL_MODE_OUTPUT_OPENDRAIN. - * . - * Any attempt to setup an invalid mode is ignored. - * - *

      Suboptimal Behavior

      - * Some PIO features are less than optimal: - * - Pad/port toggling operations are not atomic. - * - Pad/group mode setup is not atomic. - * . - * @ingroup AT91SAM7 - */ - -/** - * @defgroup AT91SAM7_SERIAL AT91SAM7 USART Support - * @brief USART peripherals support. - * @details The serial driver supports the AT91SAM7 USART peripherals. - * - * @ingroup AT91SAM7 - */ - -/** - * @defgroup AT91SAM7_MAC AT91SAM7 EMAC Support - * @brief EMAC peripheral support. - * @details the @ref MAC supports the AT91SAM7 EMAC peripheral. - * - * @ingroup AT91SAM7 - */ - -/** - * @defgroup AT91SAM7_MII AT91SAM7 MII Support - * @brief EMAC+PHY peripheral support. - * @details This driver supports the AT91SAM7 EMAC peripheral communicating - * with an external PHY transceiver. The driver currently supports - * the Micrel KS8721 PHY and the Davicom DV9161 modules. - * - * @ingroup AT91SAM7 - */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/platform.mk b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/platform.mk deleted file mode 100644 index d72b4a1..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/platform.mk +++ /dev/null @@ -1,10 +0,0 @@ -# List of all the AT91SAM7 platform files. -PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/AT91SAM7/hal_lld.c \ - ${CHIBIOS}/os/hal/platforms/AT91SAM7/pal_lld.c \ - ${CHIBIOS}/os/hal/platforms/AT91SAM7/serial_lld.c \ - ${CHIBIOS}/os/hal/platforms/AT91SAM7/mac_lld.c \ - ${CHIBIOS}/os/hal/platforms/AT91SAM7/at91sam7_mii.c \ - ${CHIBIOS}/os/hal/platforms/AT91SAM7/at91lib/aic.c - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/platforms/AT91SAM7 diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/serial_lld.c deleted file mode 100644 index 6c2d4b9..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/serial_lld.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AT91SAM7/serial_lld.c - * @brief AT91SAM7 low level serial driver code. - * - * @addtogroup AT91SAM7_SERIAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -#if SAM7_PLATFORM == SAM7S256 - -#define SAM7_USART0_RX AT91C_PA5_RXD0 -#define SAM7_USART0_TX AT91C_PA6_TXD0 -#define SAM7_USART1_RX AT91C_PA21_RXD1 -#define SAM7_USART1_TX AT91C_PA22_TXD1 -#define SAM7_DBGU_RX AT91C_PA9_DRXD -#define SAM7_DBGU_TX AT91C_PA10_DTXD - -#elif SAM7_PLATFORM == SAM7X256 - -#define SAM7_USART0_RX AT91C_PA0_RXD0 -#define SAM7_USART0_TX AT91C_PA1_TXD0 -#define SAM7_USART1_RX AT91C_PA5_RXD1 -#define SAM7_USART1_TX AT91C_PA6_TXD1 -#define SAM7_DBGU_RX AT91C_PA27_DRXD -#define SAM7_DBGU_TX AT91C_PA28_DTXD - -#else -#error "serial lines not defined for this SAM7 version" -#endif - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -#if USE_SAM7_USART0 || defined(__DOXYGEN__) -/** @brief USART0 serial driver identifier.*/ -SerialDriver SD1; -#endif - -#if USE_SAM7_USART1 || defined(__DOXYGEN__) -/** @brief USART1 serial driver identifier.*/ -SerialDriver SD2; -#endif - -#if USE_SAM7_DBGU_UART || defined(__DOXYGEN__) -/** @brief DBGU_UART serial driver identifier.*/ -SerialDriver SD3; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** @brief Driver default configuration.*/ -static const SerialConfig default_config = { - SERIAL_DEFAULT_BITRATE, - AT91C_US_USMODE_NORMAL | AT91C_US_CLKS_CLOCK | - AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE | AT91C_US_NBSTOP_1_BIT -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/** - * @brief USART initialization. - * - * @param[in] sdp communication channel associated to the USART - * @param[in] config the architecture-dependent serial driver configuration - */ -static void usart_init(SerialDriver *sdp, const SerialConfig *config) { - AT91PS_USART u = sdp->usart; - - /* Disables IRQ sources and stop operations.*/ - u->US_IDR = 0xFFFFFFFF; - u->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RSTSTA; - - /* New parameters setup.*/ - if (config->sc_mr & AT91C_US_OVER) - u->US_BRGR = MCK / (config->sc_speed * 8); - else - u->US_BRGR = MCK / (config->sc_speed * 16); - u->US_MR = config->sc_mr; - u->US_RTOR = 0; - u->US_TTGR = 0; - - /* Enables operations and IRQ sources.*/ - u->US_CR = AT91C_US_RXEN | AT91C_US_TXEN | AT91C_US_DTREN | AT91C_US_RTSEN; - u->US_IER = AT91C_US_RXRDY | AT91C_US_OVRE | AT91C_US_FRAME | AT91C_US_PARE | - AT91C_US_RXBRK; -} - -/** - * @brief USART de-initialization. - * - * @param[in] u pointer to an USART I/O block - */ -static void usart_deinit(AT91PS_USART u) { - - /* Disables IRQ sources and stop operations.*/ - u->US_IDR = 0xFFFFFFFF; - u->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RSTSTA; - u->US_MR = 0; - u->US_RTOR = 0; - u->US_TTGR = 0; -} - -/** - * @brief Error handling routine. - * - * @param[in] err USART CSR register value - * @param[in] sdp communication channel associated to the USART - */ -static void set_error(SerialDriver *sdp, AT91_REG csr) { - sdflags_t sts = 0; - - if (csr & AT91C_US_OVRE) - sts |= SD_OVERRUN_ERROR; - if (csr & AT91C_US_PARE) - sts |= SD_PARITY_ERROR; - if (csr & AT91C_US_FRAME) - sts |= SD_FRAMING_ERROR; - if (csr & AT91C_US_RXBRK) - sts |= SD_BREAK_DETECTED; - chSysLockFromIsr(); - sdAddFlagsI(sdp, sts); - chSysUnlockFromIsr(); -} - -#if defined(__GNUC__) -__attribute__((noinline)) -#endif -#if !USE_SAM7_DBGU_UART -static -#endif -/** - * @brief Common IRQ handler. - * - * @param[in] sdp communication channel associated to the USART - */ -void sd_lld_serve_interrupt(SerialDriver *sdp) { - uint32_t csr; - AT91PS_USART u = sdp->usart; - - csr = u->US_CSR; - if (csr & AT91C_US_RXRDY) { - chSysLockFromIsr(); - sdIncomingDataI(sdp, u->US_RHR); - chSysUnlockFromIsr(); - } - if ((u->US_IMR & AT91C_US_TXRDY) && (csr & AT91C_US_TXRDY)) { - msg_t b; - - chSysLockFromIsr(); - b = chOQGetI(&sdp->oqueue); - if (b < Q_OK) { - chEvtBroadcastI(&sdp->oevent); - u->US_IDR = AT91C_US_TXRDY; - } - else - u->US_THR = b; - chSysUnlockFromIsr(); - } - csr &= (AT91C_US_OVRE | AT91C_US_FRAME | AT91C_US_PARE | AT91C_US_RXBRK); - if (csr != 0) { - set_error(sdp, csr); - u->US_CR = AT91C_US_RSTSTA; - } - AT91C_BASE_AIC->AIC_EOICR = 0; -} - -#if USE_SAM7_USART0 || defined(__DOXYGEN__) -static void notify1(void) { - - AT91C_BASE_US0->US_IER = AT91C_US_TXRDY; -} -#endif - -#if USE_SAM7_USART1 || defined(__DOXYGEN__) -static void notify2(void) { - - AT91C_BASE_US1->US_IER = AT91C_US_TXRDY; -} -#endif - -#if USE_SAM7_DBGU_UART || defined(__DOXYGEN__) -static void notify3(void) { - - AT91C_BASE_DBGU->DBGU_IER = AT91C_US_TXRDY; -} -#endif - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -#if USE_SAM7_USART0 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(USART0IrqHandler) { - - CH_IRQ_PROLOGUE(); - sd_lld_serve_interrupt(&SD1); - AT91C_BASE_AIC->AIC_EOICR = 0; - CH_IRQ_EPILOGUE(); -} -#endif - -#if USE_SAM7_USART1 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(USART1IrqHandler) { - - CH_IRQ_PROLOGUE(); - sd_lld_serve_interrupt(&SD2); - AT91C_BASE_AIC->AIC_EOICR = 0; - CH_IRQ_EPILOGUE(); -} -#endif - -// note - DBGU_UART IRQ is the SysIrq in board.c -// since it's not vectored separately by the AIC - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_SAM7_USART0 - sdObjectInit(&SD1, NULL, notify1); - SD1.usart = AT91C_BASE_US0; - AT91C_BASE_PIOA->PIO_PDR = SAM7_USART0_RX | SAM7_USART0_TX; - AT91C_BASE_PIOA->PIO_ASR = SAM7_USART0_RX | SAM7_USART0_TX; - AT91C_BASE_PIOA->PIO_PPUDR = SAM7_USART0_RX | SAM7_USART0_TX; - AIC_ConfigureIT(AT91C_ID_US0, - AT91C_AIC_SRCTYPE_HIGH_LEVEL | SAM7_USART0_PRIORITY, - USART0IrqHandler); -#endif - -#if USE_SAM7_USART1 - sdObjectInit(&SD2, NULL, notify2); - SD2.usart = AT91C_BASE_US1; - AT91C_BASE_PIOA->PIO_PDR = SAM7_USART1_RX | SAM7_USART1_TX; - AT91C_BASE_PIOA->PIO_ASR = SAM7_USART1_RX | SAM7_USART1_TX; - AT91C_BASE_PIOA->PIO_PPUDR = SAM7_USART1_RX | SAM7_USART1_TX; - AIC_ConfigureIT(AT91C_ID_US1, - AT91C_AIC_SRCTYPE_HIGH_LEVEL | SAM7_USART1_PRIORITY, - USART1IrqHandler); -#endif - -#if USE_SAM7_DBGU_UART - sdObjectInit(&SD3, NULL, notify3); - // this is a little cheap, but OK for now since there's enough overlap - // between dbgu and usart register maps. it means we can reuse all the - // same usart interrupt handling and config that already exists - SD3.usart = (AT91PS_USART)AT91C_BASE_DBGU; - AT91C_BASE_PIOA->PIO_PDR = SAM7_DBGU_RX | SAM7_DBGU_TX; - AT91C_BASE_PIOA->PIO_ASR = SAM7_DBGU_RX | SAM7_DBGU_TX; - AT91C_BASE_PIOA->PIO_PPUDR = SAM7_DBGU_RX | SAM7_DBGU_TX; -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - - if (sdp->state == SD_STOP) { -#if USE_SAM7_USART0 - if (&SD1 == sdp) { - /* Starts the clock and clears possible sources of immediate interrupts.*/ - AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_US0); - /* Enables associated interrupt vector.*/ - AIC_EnableIT(AT91C_ID_US0); - } -#endif -#if USE_SAM7_USART1 - if (&SD2 == sdp) { - /* Starts the clock and clears possible sources of immediate interrupts.*/ - AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_US1); - /* Enables associated interrupt vector.*/ - AIC_EnableIT(AT91C_ID_US1); - } -#endif - // note - no explicit start for SD3 (DBGU_UART) since it's not included in the AIC or PMC - } - usart_init(sdp, config); -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the USART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - - if (sdp->state == SD_READY) { - usart_deinit(sdp->usart); -#if USE_SAM7_USART0 - if (&SD1 == sdp) { - AT91C_BASE_PMC->PMC_PCDR = (1 << AT91C_ID_US0); - AIC_DisableIT(AT91C_ID_US0); - return; - } -#endif -#if USE_SAM7_USART1 - if (&SD2 == sdp) { - AT91C_BASE_PMC->PMC_PCDR = (1 << AT91C_ID_US1); - AIC_DisableIT(AT91C_ID_US1); - return; - } -#endif -#if USE_SAM7_DBGU_UART - if (&SD3 == sdp) { - AT91C_BASE_DBGU->DBGU_IDR = 0xFFFFFFFF; - return; - } -#endif - } -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/serial_lld.h deleted file mode 100644 index 190b3f6..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AT91SAM7/serial_lld.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AT91SAM7/serial_lld.h - * @brief AT91SAM7 low level serial driver header. - * - * @addtogroup AT91SAM7_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief UART0 driver enable switch. - * @details If set to @p TRUE the support for USART1 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_SAM7_USART0) || defined(__DOXYGEN__) -#define USE_SAM7_USART0 TRUE -#endif - -/** - * @brief UART1 driver enable switch. - * @details If set to @p TRUE the support for USART2 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_SAM7_USART1) || defined(__DOXYGEN__) -#define USE_SAM7_USART1 TRUE -#endif - -/** - * @brief DBGU UART driver enable switch. - * @details If set to @p TRUE the support for the DBGU UART is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_SAM7_DBGU_UART) || defined(__DOXYGEN__) -#define USE_SAM7_DBGU_UART TRUE -#endif - -/** - * @brief UART1 interrupt priority level setting. - */ -#if !defined(SAM7_USART0_PRIORITY) || defined(__DOXYGEN__) -#define SAM7_USART0_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) -#endif - -/** - * @brief UART2 interrupt priority level setting. - */ -#if !defined(SAM7_USART1_PRIORITY) || defined(__DOXYGEN__) -#define SAM7_USART1_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) -#endif - -/** - * @brief DBGU_UART interrupt priority level setting. - */ -#if !defined(SAM7_DBGU_UART_PRIORITY) || defined(__DOXYGEN__) -#define SAM7_DBGU_UART_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 2) -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint32_t sdflags_t; - -/** - * @brief AT91SAM7 Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - */ -typedef struct { - /** - * @brief Bit rate. - * @details This is written to the US_BRGR register of the appropriate AT91S_USART - */ - uint32_t sc_speed; - /** - * @brief Initialization value for the MR register. - * @details This is written to the US_MR register of the appropriate AT91S_USART - */ - uint32_t sc_mr; -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ \ - /* Pointer to the USART registers block.*/ \ - AT91PS_USART usart; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_SAM7_USART0 && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif -#if USE_SAM7_USART1 && !defined(__DOXYGEN__) -extern SerialDriver SD2; -#endif -#if USE_SAM7_DBGU_UART -extern SerialDriver SD3; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); -#if USE_SAM7_DBGU_UART - void sd_lld_serve_interrupt(SerialDriver *sdp); -#endif -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AVR/hal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/AVR/hal_lld.c deleted file mode 100644 index fb753af..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AVR/hal_lld.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AVR/hal_lld.c - * @brief AVR HAL subsystem low level driver code. - * @addtogroup AVR_HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AVR/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/AVR/hal_lld.h deleted file mode 100644 index 8da810e..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AVR/hal_lld.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AVR/hal_lld.h - * @brief AVR HAL subsystem low level driver header. - * @addtogroup AVR_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "ATmega128" - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AVR/platform.dox b/ChibiOS_2.0.8/os/hal/platforms/AVR/platform.dox deleted file mode 100644 index 46c9c2a..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AVR/platform.dox +++ /dev/null @@ -1,48 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup AVR_DRIVERS AVR Drivers - * @brief Device drivers included in the AVR support. - * - * @ingroup AVR - */ - -/** - * @defgroup AVR_HAL AVR HAL Support - * @brief HAL support. - * - * @ingroup AVR_DRIVERS - */ - -/** - * @defgroup AVR_SERIAL AVR USART Support - * @brief USART support. - * @details The serial driver supports both the AVR USARTs in asynchronous - * mode. - * - * @ingroup AVR_DRIVERS - */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AVR/platform.mk b/ChibiOS_2.0.8/os/hal/platforms/AVR/platform.mk deleted file mode 100644 index f9d8120..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AVR/platform.mk +++ /dev/null @@ -1,6 +0,0 @@ -# List of all the AVR platform files. -PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/AVR/hal_lld.c \ - ${CHIBIOS}/os/hal/platforms/AVR/serial_lld.c - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/platforms/AVR diff --git a/ChibiOS_2.0.8/os/hal/platforms/AVR/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/AVR/serial_lld.c deleted file mode 100644 index 40d27aa..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AVR/serial_lld.c +++ /dev/null @@ -1,289 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AVR/serial_lld.c - * @brief AVR low level serial driver code. - * - * @addtogroup AVR_SERIAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** - * @brief USART0 serial driver identifier. - * @note The name does not follow the convention used in the other ports - * (COMn) because a name conflict with the AVR headers. - */ -#if USE_AVR_USART0 || defined(__DOXYGEN__) -SerialDriver SD1; -#endif - -/** - * @brief USART1 serial driver identifier. - * @note The name does not follow the convention used in the other ports - * (COMn) because a name conflict with the AVR headers. - */ -#if USE_AVR_USART1 || defined(__DOXYGEN__) -SerialDriver SD2; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** - * @brief Driver default configuration. - */ -static const SerialConfig default_config = { - UBRR(SERIAL_DEFAULT_BITRATE), - (1 << UCSZ1) | (1 << UCSZ0) -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -static void set_error(uint8_t sra, SerialDriver *sdp) { - sdflags_t sts = 0; - - if (sra & (1 << DOR)) - sts |= SD_OVERRUN_ERROR; - if (sra & (1 << UPE)) - sts |= SD_PARITY_ERROR; - if (sra & (1 << FE)) - sts |= SD_FRAMING_ERROR; - chSysLockFromIsr(); - sdAddFlagsI(sdp, sts); - chSysUnlockFromIsr(); -} - -#if USE_AVR_USART0 || defined(__DOXYGEN__) -static void notify1(void) { - - UCSR0B |= (1 << UDRIE); -} - -/** - * @brief USART0 initialization. - * - * @param[in] config the architecture-dependent serial driver configuration - */ -static void usart0_init(const SerialConfig *config) { - - UBRR0L = config->sc_brr; - UBRR0H = config->sc_brr >> 8; - UCSR0A = 0; - UCSR0B = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); - UCSR0C = config->sc_csrc; -} - -/** - * @brief USART0 de-initialization. - */ -static void usart0_deinit(void) { - - UCSR0A = 0; - UCSR0B = 0; - UCSR0C = 0; -} -#endif - -#if USE_AVR_USART1 || defined(__DOXYGEN__) -static void notify2(void) { - - UCSR1B |= (1 << UDRIE); -} - -/** - * @brief USART1 initialization. - * - * @param[in] config the architecture-dependent serial driver configuration - */ -static void usart1_init(const SerialConfig *config) { - - UBRR1L = config->sc_brr; - UBRR1H = config->sc_brr >> 8; - UCSR1A = 0; - UCSR1B = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); - UCSR1C = config->sc_csrc; -} - -/** - * @brief USART1 de-initialization. - */ -static void usart1_deinit(void) { - - UCSR1A = 0; - UCSR1B = 0; - UCSR1C = 0; -} -#endif - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -#if USE_AVR_USART0 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(USART0_RX_vect) { - uint8_t sra; - - CH_IRQ_PROLOGUE(); - - sra = UCSR0A; - if (sra & ((1 << DOR) | (1 << UPE) | (1 << FE))) - set_error(sra, &SD1); - chSysLockFromIsr(); - sdIncomingDataI(&SD1, UDR0); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} - -CH_IRQ_HANDLER(USART0_UDRE_vect) { - msg_t b; - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - b = sdRequestDataI(&SER1); - chSysUnlockFromIsr(); - if (b < Q_OK) - UCSR0B &= ~(1 << UDRIE); - else - UDR0 = b; - - CH_IRQ_EPILOGUE(); -} -#endif /* USE_AVR_USART0 */ - -#if USE_AVR_USART1 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(USART1_RX_vect) { - uint8_t sra; - - CH_IRQ_PROLOGUE(); - - sra = UCSR1A; - if (sra & ((1 << DOR) | (1 << UPE) | (1 << FE))) - set_error(sra, &SD2); - chSysLockFromIsr(); - sdIncomingDataI(&SD2, UDR1); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} - -CH_IRQ_HANDLER(USART1_UDRE_vect) { - msg_t b; - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - b = sdRequestDataI(&SD2); - chSysUnlockFromIsr(); - if (b < Q_OK) - UCSR1B &= ~(1 << UDRIE); - else - UDR1 = b; - - CH_IRQ_EPILOGUE(); -} -#endif /* USE_AVR_USART1 */ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_AVR_USART0 - sdObjectInit(&SD1, NULL, notify1); -#endif -#if USE_AVR_USART1 - sdObjectInit(&SD2, NULL, notify2); -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - -#if USE_AVR_USART0 - if (&SD1 == sdp) { - usart0_init(config); - return; - } -#endif -#if USE_AVR_USART1 - if (&SD2 == sdp) { - usart1_init(config); - return; - } -#endif -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the USART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - -#if USE_AVR_USART0 - if (&SD1 == sdp) - usart0_deinit(); -#endif -#if USE_AVR_USART1 - if (&SD2 == sdp) - usart1_deinit(); -#endif -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/AVR/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/AVR/serial_lld.h deleted file mode 100644 index 2f74324..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/AVR/serial_lld.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AVR/serial_lld.h - * @brief AVR low level serial driver header. - * - * @addtogroup AVR_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief USART0 driver enable switch. - * @details If set to @p TRUE the support for USART0 is included. - * @note The default is @p FALSE. - */ -#if !defined(USE_AVR_USART0) || defined(__DOXYGEN__) -#define USE_AVR_USART0 TRUE -#endif - -/** - * @brief USART1 driver enable switch. - * @details If set to @p TRUE the support for USART1 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_AVR_USART1) || defined(__DOXYGEN__) -#define USE_AVR_USART1 TRUE -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint8_t sdflags_t; - -/** - * @brief AVR Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - */ -typedef struct { - /** - * @brief Initialization value for the BRR register. - */ - uint16_t sc_brr; - /** - * @brief Initialization value for the CSRC register. - */ - uint8_t sc_csrc; -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Macro for baud rate computation. - * @note Make sure the final baud rate is within tolerance. - */ -#define UBRR(b) ((F_CPU / (b << 4)) - 1) - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_AVR_USART0 && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif -#if USE_AVR_USART1 && !defined(__DOXYGEN__) -extern SerialDriver SD2; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/LPC11xx.h b/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/LPC11xx.h deleted file mode 100644 index 6a6061a..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/LPC11xx.h +++ /dev/null @@ -1,499 +0,0 @@ -/**************************************************************************//** - * @file LPC11xx.h - * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File for - * NXP LPC11xx Device Series - * @version V1.00 - * @date 17. November 2009 - * - * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - - -#ifndef __LPC11xx_H__ -#define __LPC11xx_H__ - -#ifdef __cplusplus - extern "C" { -#endif - -/** @addtogroup LPC11xx_Definitions LPC11xx Definitions - This file defines all structures and symbols for LPC11xx: - - Registers and bitfields - - peripheral base address - - peripheral ID - - PIO definitions - @{ -*/ - - -/******************************************************************************/ -/* Processor and Core Peripherals */ -/******************************************************************************/ -/** @addtogroup LPC11xx_CMSIS LPC11xx CMSIS Definitions - Configuration of the Cortex-M0 Processor and Core Peripherals - @{ -*/ - -/* - * ========================================================================== - * ---------- Interrupt Number Definition ----------------------------------- - * ========================================================================== - */ - -typedef enum IRQn -{ -/****** Cortex-M0 Processor Exceptions Numbers ***************************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ - HardFault_IRQn = -13, /*!< 3 Cortex-M0 Hard Fault Interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M0 SV Call Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M0 Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M0 System Tick Interrupt */ - -/****** LPC13xx Specific Interrupt Numbers *******************************************************/ - WAKEUP0_IRQn = 0, /*!< All I/O pins can be used as wakeup source. */ - WAKEUP1_IRQn = 1, /*!< There are 13 pins in total for LPC11xx */ - WAKEUP2_IRQn = 2, - WAKEUP3_IRQn = 3, - WAKEUP4_IRQn = 4, - WAKEUP5_IRQn = 5, - WAKEUP6_IRQn = 6, - WAKEUP7_IRQn = 7, - WAKEUP8_IRQn = 8, - WAKEUP9_IRQn = 9, - WAKEUP10_IRQn = 10, - WAKEUP11_IRQn = 11, - WAKEUP12_IRQn = 12, - SSP1_IRQn = 14, /*!< SSP1 Interrupt */ - I2C_IRQn = 15, /*!< I2C Interrupt */ - TIMER_16_0_IRQn = 16, /*!< 16-bit Timer0 Interrupt */ - TIMER_16_1_IRQn = 17, /*!< 16-bit Timer1 Interrupt */ - TIMER_32_0_IRQn = 18, /*!< 32-bit Timer0 Interrupt */ - TIMER_32_1_IRQn = 19, /*!< 32-bit Timer1 Interrupt */ - SSP0_IRQn = 20, /*!< SSP0 Interrupt */ - UART_IRQn = 21, /*!< UART Interrupt */ - ADC_IRQn = 24, /*!< A/D Converter Interrupt */ - WDT_IRQn = 25, /*!< Watchdog timer Interrupt */ - BOD_IRQn = 26, /*!< Brown Out Detect(BOD) Interrupt */ - EINT3_IRQn = 28, /*!< External Interrupt 3 Interrupt */ - EINT2_IRQn = 29, /*!< External Interrupt 2 Interrupt */ - EINT1_IRQn = 30, /*!< External Interrupt 1 Interrupt */ - EINT0_IRQn = 31, /*!< External Interrupt 0 Interrupt */ -} IRQn_Type; - - -/* - * ========================================================================== - * ----------- Processor and Core Peripheral Section ------------------------ - * ========================================================================== - */ - -/* Configuration of the Cortex-M3 Processor and Core Peripherals */ -#define __MPU_PRESENT 0 /*!< MPU present or not */ -#define __NVIC_PRIO_BITS 3 /*!< Number of Bits used for Priority Levels */ -#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ - -/*@}*/ /* end of group LPC11xx_CMSIS */ - - -#include "core_cm0.h" /* Cortex-M0 processor and core peripherals */ -#include "system_LPC11xx.h" /* System Header */ - - -/******************************************************************************/ -/* Device Specific Peripheral Registers structures */ -/******************************************************************************/ - -#if defined ( __CC_ARM ) -#pragma anon_unions -#endif - -/*------------- System Control (SYSCON) --------------------------------------*/ -/** @addtogroup LPC11xx_SYSCON LPC11xx System Control Block - @{ -*/ -typedef struct -{ - __IO uint32_t SYSMEMREMAP; /*!< Offset: 0x000 System memory remap (R/W) */ - __IO uint32_t PRESETCTRL; /*!< Offset: 0x004 Peripheral reset control (R/W) */ - __IO uint32_t SYSPLLCTRL; /*!< Offset: 0x008 System PLL control (R/W) */ - __IO uint32_t SYSPLLSTAT; /*!< Offset: 0x00C System PLL status (R/ ) */ - uint32_t RESERVED0[4]; - - __IO uint32_t SYSOSCCTRL; /*!< Offset: 0x020 System oscillator control (R/W) */ - __IO uint32_t WDTOSCCTRL; /*!< Offset: 0x024 Watchdog oscillator control (R/W) */ - __IO uint32_t IRCCTRL; /*!< Offset: 0x028 IRC control (R/W) */ - uint32_t RESERVED1[1]; - __IO uint32_t SYSRESSTAT; /*!< Offset: 0x030 System reset status Register (R/ ) */ - uint32_t RESERVED2[3]; - __IO uint32_t SYSPLLCLKSEL; /*!< Offset: 0x040 System PLL clock source select (R/W) */ - __IO uint32_t SYSPLLCLKUEN; /*!< Offset: 0x044 System PLL clock source update enable (R/W) */ - uint32_t RESERVED3[10]; - - __IO uint32_t MAINCLKSEL; /*!< Offset: 0x070 Main clock source select (R/W) */ - __IO uint32_t MAINCLKUEN; /*!< Offset: 0x074 Main clock source update enable (R/W) */ - __IO uint32_t SYSAHBCLKDIV; /*!< Offset: 0x078 System AHB clock divider (R/W) */ - uint32_t RESERVED4[1]; - - __IO uint32_t SYSAHBCLKCTRL; /*!< Offset: 0x080 System AHB clock control (R/W) */ - uint32_t RESERVED5[4]; - __IO uint32_t SSP0CLKDIV; /*!< Offset: 0x094 SSP0 clock divider (R/W) */ - __IO uint32_t UARTCLKDIV; /*!< Offset: 0x098 UART clock divider (R/W) */ - __IO uint32_t SSP1CLKDIV; /*!< Offset: 0x09C SSP1 clock divider (R/W) */ - uint32_t RESERVED6[4]; - - __IO uint32_t SYSTICKCLKDIV; /*!< Offset: 0x0B0 SYSTICK clock divider (R/W) */ - uint32_t RESERVED7[7]; - - __IO uint32_t WDTCLKSEL; /*!< Offset: 0x0D0 WDT clock source select (R/W) */ - __IO uint32_t WDTCLKUEN; /*!< Offset: 0x0D4 WDT clock source update enable (R/W) */ - __IO uint32_t WDTCLKDIV; /*!< Offset: 0x0D8 WDT clock divider (R/W) */ - uint32_t RESERVED8[1]; - __IO uint32_t CLKOUTCLKSEL; /*!< Offset: 0x0E0 CLKOUT clock source select (R/W) */ - __IO uint32_t CLKOUTUEN; /*!< Offset: 0x0E4 CLKOUT clock source update enable (R/W) */ - __IO uint32_t CLKOUTDIV; /*!< Offset: 0x0E8 CLKOUT clock divider (R/W) */ - uint32_t RESERVED9[5]; - - __IO uint32_t PIOPORCAP0; /*!< Offset: 0x100 POR captured PIO status 0 (R/ ) */ - __IO uint32_t PIOPORCAP1; /*!< Offset: 0x104 POR captured PIO status 1 (R/ ) */ - uint32_t RESERVED10[18]; - - __IO uint32_t BODCTRL; /*!< Offset: 0x150 BOD control (R/W) */ - uint32_t RESERVED11[1]; - __IO uint32_t SYSTCKCAL; /*!< Offset: 0x158 System tick counter calibration (R/W) */ - uint32_t RESERVED12[41]; - - __IO uint32_t STARTAPRP0; /*!< Offset: 0x200 Start logic edge control Register 0 (R/W) */ - __IO uint32_t STARTERP0; /*!< Offset: 0x204 Start logic signal enable Register 0 (R/W) */ - __IO uint32_t STARTRSRP0CLR; /*!< Offset: 0x208 Start logic reset Register 0 ( /W) */ - __IO uint32_t STARTSRP0; /*!< Offset: 0x20C Start logic status Register 0 (R/W) */ - uint32_t RESERVED14[8]; - - __IO uint32_t PDSLEEPCFG; /*!< Offset: 0x230 Power-down states in Deep-sleep mode (R/W) */ - __IO uint32_t PDAWAKECFG; /*!< Offset: 0x234 Power-down states after wake-up (R/W) */ - __IO uint32_t PDRUNCFG; /*!< Offset: 0x238 Power-down configuration Register (R/W) */ - uint32_t RESERVED15[110]; - __I uint32_t DEVICE_ID; /*!< Offset: 0x3F4 Device ID (R/ ) */ -} LPC_SYSCON_TypeDef; -/*@}*/ /* end of group LPC11xx_SYSCON */ - - -/*------------- Pin Connect Block (IOCON) --------------------------------*/ -/** @addtogroup LPC11xx_IOCON LPC11xx I/O Configuration Block - @{ -*/ -typedef struct -{ - __IO uint32_t PIO2_6; /*!< Offset: 0x000 I/O configuration for pin PIO2_6 (R/W) */ - uint32_t RESERVED0[1]; - __IO uint32_t PIO2_0; /*!< Offset: 0x008 I/O configuration for pin PIO2_0/DTR/SSEL1 (R/W) */ - __IO uint32_t RESET_PIO0_0; /*!< Offset: 0x00C I/O configuration for pin RESET/PIO0_0 (R/W) */ - __IO uint32_t PIO0_1; /*!< Offset: 0x010 I/O configuration for pin PIO0_1/CLKOUT/CT32B0_MAT2 (R/W) */ - __IO uint32_t PIO1_8; /*!< Offset: 0x014 I/O configuration for pin PIO1_8/CT16B1_CAP0 (R/W) */ - uint32_t RESERVED1[1]; - __IO uint32_t PIO0_2; /*!< Offset: 0x01C I/O configuration for pin PIO0_2/SSEL0/CT16B0_CAP0 (R/W) */ - - __IO uint32_t PIO2_7; /*!< Offset: 0x020 I/O configuration for pin PIO2_7 (R/W) */ - __IO uint32_t PIO2_8; /*!< Offset: 0x024 I/O configuration for pin PIO2_8 (R/W) */ - __IO uint32_t PIO2_1; /*!< Offset: 0x028 I/O configuration for pin PIO2_1/nDSR/SCK1 (R/W) */ - __IO uint32_t PIO0_3; /*!< Offset: 0x02C I/O configuration for pin PIO0_3 (R/W) */ - __IO uint32_t PIO0_4; /*!< Offset: 0x030 I/O configuration for pin PIO0_4/SCL (R/W) */ - __IO uint32_t PIO0_5; /*!< Offset: 0x034 I/O configuration for pin PIO0_5/SDA (R/W) */ - __IO uint32_t PIO1_9; /*!< Offset: 0x038 I/O configuration for pin PIO1_9/CT16B1_MAT0 (R/W) */ - __IO uint32_t PIO3_4; /*!< Offset: 0x03C I/O configuration for pin PIO3_4 (R/W) */ - - __IO uint32_t PIO2_4; /*!< Offset: 0x040 I/O configuration for pin PIO2_4 (R/W) */ - __IO uint32_t PIO2_5; /*!< Offset: 0x044 I/O configuration for pin PIO2_5 (R/W) */ - __IO uint32_t PIO3_5; /*!< Offset: 0x048 I/O configuration for pin PIO3_5 (R/W) */ - __IO uint32_t PIO0_6; /*!< Offset: 0x04C I/O configuration for pin PIO0_6/SCK0 (R/W) */ - __IO uint32_t PIO0_7; /*!< Offset: 0x050 I/O configuration for pin PIO0_7/nCTS (R/W) */ - __IO uint32_t PIO2_9; /*!< Offset: 0x054 I/O configuration for pin PIO2_9 (R/W) */ - __IO uint32_t PIO2_10; /*!< Offset: 0x058 I/O configuration for pin PIO2_10 (R/W) */ - __IO uint32_t PIO2_2; /*!< Offset: 0x05C I/O configuration for pin PIO2_2/DCD/MISO1 (R/W) */ - - __IO uint32_t PIO0_8; /*!< Offset: 0x060 I/O configuration for pin PIO0_8/MISO0/CT16B0_MAT0 (R/W) */ - __IO uint32_t PIO0_9; /*!< Offset: 0x064 I/O configuration for pin PIO0_9/MOSI0/CT16B0_MAT1 (R/W) */ - __IO uint32_t JTAG_TCK_PIO0_10; /*!< Offset: 0x068 I/O configuration for pin SWCLK/PIO0_10/SCK0/CT16B0_MAT2 (R/W) */ - __IO uint32_t PIO1_10; /*!< Offset: 0x06C I/O configuration for pin PIO1_10/AD6/CT16B1_MAT1 (R/W) */ - __IO uint32_t PIO2_11; /*!< Offset: 0x070 I/O configuration for pin PIO2_11/SCK0 (R/W) */ - __IO uint32_t JTAG_TDI_PIO0_11; /*!< Offset: 0x074 I/O configuration for pin TDI/PIO0_11/AD0/CT32B0_MAT3 (R/W) */ - __IO uint32_t JTAG_TMS_PIO1_0; /*!< Offset: 0x078 I/O configuration for pin TMS/PIO1_0/AD1/CT32B1_CAP0 (R/W) */ - __IO uint32_t JTAG_TDO_PIO1_1; /*!< Offset: 0x07C I/O configuration for pin TDO/PIO1_1/AD2/CT32B1_MAT0 (R/W) */ - - __IO uint32_t JTAG_nTRST_PIO1_2; /*!< Offset: 0x080 I/O configuration for pin nTRST/PIO1_2/AD3/CT32B1_MAT1 (R/W) */ - __IO uint32_t PIO3_0; /*!< Offset: 0x084 I/O configuration for pin PIO3_0/nDTR (R/W) */ - __IO uint32_t PIO3_1; /*!< Offset: 0x088 I/O configuration for pin PIO3_1/nDSR (R/W) */ - __IO uint32_t PIO2_3; /*!< Offset: 0x08C I/O configuration for pin PIO2_3/RI/MOSI1 (R/W) */ - __IO uint32_t ARM_SWDIO_PIO1_3; /*!< Offset: 0x090 I/O configuration for pin SWDIO/PIO1_3/AD4/CT32B1_MAT2 (R/W) */ - __IO uint32_t PIO1_4; /*!< Offset: 0x094 I/O configuration for pin PIO1_4/AD5/CT32B1_MAT3 (R/W) */ - __IO uint32_t PIO1_11; /*!< Offset: 0x098 I/O configuration for pin PIO1_11/AD7 (R/W) */ - __IO uint32_t PIO3_2; /*!< Offset: 0x09C I/O configuration for pin PIO3_2/nDCD (R/W) */ - - __IO uint32_t PIO1_5; /*!< Offset: 0x0A0 I/O configuration for pin PIO1_5/nRTS/CT32B0_CAP0 (R/W) */ - __IO uint32_t PIO1_6; /*!< Offset: 0x0A4 I/O configuration for pin PIO1_6/RXD/CT32B0_MAT0 (R/W) */ - __IO uint32_t PIO1_7; /*!< Offset: 0x0A8 I/O configuration for pin PIO1_7/TXD/CT32B0_MAT1 (R/W) */ - __IO uint32_t PIO3_3; /*!< Offset: 0x0AC I/O configuration for pin PIO3_3/nRI (R/W) */ - __IO uint32_t SCK_LOC; /*!< Offset: 0x0B0 SCK pin location select Register (R/W) */ - __IO uint32_t DSR_LOC; /*!< Offset: 0x0B4 DSR pin location select Register (R/W) */ - __IO uint32_t DCD_LOC; /*!< Offset: 0x0B8 DCD pin location select Register (R/W) */ - __IO uint32_t RI_LOC; /*!< Offset: 0x0BC RI pin location Register (R/W) */ -} LPC_IOCON_TypeDef; -/*@}*/ /* end of group LPC11xx_IOCON */ - - -/*------------- Power Management Unit (PMU) --------------------------*/ -/** @addtogroup LPC11xx_PMU LPC11xx Power Management Unit - @{ -*/ -typedef struct -{ - __IO uint32_t PCON; /*!< Offset: 0x000 Power control Register (R/W) */ - __IO uint32_t GPREG0; /*!< Offset: 0x004 General purpose Register 0 (R/W) */ - __IO uint32_t GPREG1; /*!< Offset: 0x008 General purpose Register 1 (R/W) */ - __IO uint32_t GPREG2; /*!< Offset: 0x00C General purpose Register 2 (R/W) */ - __IO uint32_t GPREG3; /*!< Offset: 0x010 General purpose Register 3 (R/W) */ - __IO uint32_t GPREG4; /*!< Offset: 0x014 General purpose Register 4 (R/W) */ -} LPC_PMU_TypeDef; -/*@}*/ /* end of group LPC11xx_PMU */ - - -/*------------- General Purpose Input/Output (GPIO) --------------------------*/ -/** @addtogroup LPC11xx_GPIO LPC11xx General Purpose Input/Output - @{ -*/ -typedef struct -{ - union { - __IO uint32_t MASKED_ACCESS[4096]; /*!< Offset: 0x0000 to 0x3FFC Port data Register for pins PIOn_0 to PIOn_11 (R/W) */ - struct { - uint32_t RESERVED0[4095]; - __IO uint32_t DATA; /*!< Offset: 0x3FFC Port data Register (R/W) */ - }; - }; - uint32_t RESERVED1[4096]; - __IO uint32_t DIR; /*!< Offset: 0x8000 Data direction Register (R/W) */ - __IO uint32_t IS; /*!< Offset: 0x8004 Interrupt sense Register (R/W) */ - __IO uint32_t IBE; /*!< Offset: 0x8008 Interrupt both edges Register (R/W) */ - __IO uint32_t IEV; /*!< Offset: 0x800C Interrupt event Register (R/W) */ - __IO uint32_t IE; /*!< Offset: 0x8010 Interrupt mask Register (R/W) */ - __IO uint32_t RIS; /*!< Offset: 0x8014 Raw interrupt status Register (R/ ) */ - __IO uint32_t MIS; /*!< Offset: 0x8018 Masked interrupt status Register (R/ ) */ - __IO uint32_t IC; /*!< Offset: 0x801C Interrupt clear Register (R/W) */ -} LPC_GPIO_TypeDef; -/*@}*/ /* end of group LPC11xx_GPIO */ - - -/*------------- Timer (TMR) --------------------------------------------------*/ -/** @addtogroup LPC11xx_TMR LPC11xx 16/32-bit Counter/Timer - @{ -*/ -typedef struct -{ - __IO uint32_t IR; /*!< Offset: 0x000 Interrupt Register (R/W) */ - __IO uint32_t TCR; /*!< Offset: 0x004 Timer Control Register (R/W) */ - __IO uint32_t TC; /*!< Offset: 0x008 Timer Counter Register (R/W) */ - __IO uint32_t PR; /*!< Offset: 0x00C Prescale Register (R/W) */ - __IO uint32_t PC; /*!< Offset: 0x010 Prescale Counter Register (R/W) */ - __IO uint32_t MCR; /*!< Offset: 0x014 Match Control Register (R/W) */ - __IO uint32_t MR0; /*!< Offset: 0x018 Match Register 0 (R/W) */ - __IO uint32_t MR1; /*!< Offset: 0x01C Match Register 1 (R/W) */ - __IO uint32_t MR2; /*!< Offset: 0x020 Match Register 2 (R/W) */ - __IO uint32_t MR3; /*!< Offset: 0x024 Match Register 3 (R/W) */ - __IO uint32_t CCR; /*!< Offset: 0x028 Capture Control Register (R/W) */ - __I uint32_t CR0; /*!< Offset: 0x02C Capture Register 0 (R/ ) */ - uint32_t RESERVED1[3]; - __IO uint32_t EMR; /*!< Offset: 0x03C External Match Register (R/W) */ - uint32_t RESERVED2[12]; - __IO uint32_t CTCR; /*!< Offset: 0x070 Count Control Register (R/W) */ - __IO uint32_t PWMC; /*!< Offset: 0x074 PWM Control Register (R/W) */ -} LPC_TMR_TypeDef; -/*@}*/ /* end of group LPC11xx_TMR */ - - -/*------------- Universal Asynchronous Receiver Transmitter (UART) -----------*/ -/** @addtogroup LPC11xx_UART LPC11xx Universal Asynchronous Receiver/Transmitter - @{ -*/ -typedef struct -{ - union { - __I uint32_t RBR; /*!< Offset: 0x000 Receiver Buffer Register (R/ ) */ - __O uint32_t THR; /*!< Offset: 0x000 Transmit Holding Register ( /W) */ - __IO uint32_t DLL; /*!< Offset: 0x000 Divisor Latch LSB (R/W) */ - }; - union { - __IO uint32_t DLM; /*!< Offset: 0x004 Divisor Latch MSB (R/W) */ - __IO uint32_t IER; /*!< Offset: 0x000 Interrupt Enable Register (R/W) */ - }; - union { - __I uint32_t IIR; /*!< Offset: 0x008 Interrupt ID Register (R/ ) */ - __O uint32_t FCR; /*!< Offset: 0x008 FIFO Control Register ( /W) */ - }; - __IO uint32_t LCR; /*!< Offset: 0x00C Line Control Register (R/W) */ - __IO uint32_t MCR; /*!< Offset: 0x010 Modem control Register (R/W) */ - __I uint32_t LSR; /*!< Offset: 0x014 Line Status Register (R/ ) */ - __I uint32_t MSR; /*!< Offset: 0x018 Modem status Register (R/ ) */ - __IO uint32_t SCR; /*!< Offset: 0x01C Scratch Pad Register (R/W) */ - __IO uint32_t ACR; /*!< Offset: 0x020 Auto-baud Control Register (R/W) */ - uint32_t RESERVED0; - __IO uint32_t FDR; /*!< Offset: 0x028 Fractional Divider Register (R/W) */ - uint32_t RESERVED1; - __IO uint32_t TER; /*!< Offset: 0x030 Transmit Enable Register (R/W) */ - uint32_t RESERVED2[6]; - __IO uint32_t RS485CTRL; /*!< Offset: 0x04C RS-485/EIA-485 Control Register (R/W) */ - __IO uint32_t ADRMATCH; /*!< Offset: 0x050 RS-485/EIA-485 address match Register (R/W) */ - __IO uint32_t RS485DLY; /*!< Offset: 0x054 RS-485/EIA-485 direction control delay Register (R/W) */ - __I uint32_t FIFOLVL; /*!< Offset: 0x058 FIFO Level Register (R/ ) */ -} LPC_UART_TypeDef; -/*@}*/ /* end of group LPC11xx_UART */ - - -/*------------- Synchronous Serial Communication (SSP) -----------------------*/ -/** @addtogroup LPC11xx_SSP LPC11xx Synchronous Serial Port - @{ -*/ -typedef struct -{ - __IO uint32_t CR0; /*!< Offset: 0x000 Control Register 0 (R/W) */ - __IO uint32_t CR1; /*!< Offset: 0x004 Control Register 1 (R/W) */ - __IO uint32_t DR; /*!< Offset: 0x008 Data Register (R/W) */ - __I uint32_t SR; /*!< Offset: 0x00C Status Registe (R/ ) */ - __IO uint32_t CPSR; /*!< Offset: 0x010 Clock Prescale Register (R/W) */ - __IO uint32_t IMSC; /*!< Offset: 0x014 Interrupt Mask Set and Clear Register (R/W) */ - __IO uint32_t RIS; /*!< Offset: 0x018 Raw Interrupt Status Register (R/W) */ - __IO uint32_t MIS; /*!< Offset: 0x01C Masked Interrupt Status Register (R/W) */ - __IO uint32_t ICR; /*!< Offset: 0x020 SSPICR Interrupt Clear Register (R/W) */ -} LPC_SSP_TypeDef; -/*@}*/ /* end of group LPC11xx_SSP */ - - -/*------------- Inter-Integrated Circuit (I2C) -------------------------------*/ -/** @addtogroup LPC11xx_I2C LPC11xx I2C-Bus Interface - @{ -*/ -typedef struct -{ - __IO uint32_t CONSET; /*!< Offset: 0x000 I2C Control Set Register (R/W) */ - __I uint32_t STAT; /*!< Offset: 0x004 I2C Status Register (R/ ) */ - __IO uint32_t DAT; /*!< Offset: 0x008 I2C Data Register (R/W) */ - __IO uint32_t ADR0; /*!< Offset: 0x00C I2C Slave Address Register 0 (R/W) */ - __IO uint32_t SCLH; /*!< Offset: 0x010 SCH Duty Cycle Register High Half Word (R/W) */ - __IO uint32_t SCLL; /*!< Offset: 0x014 SCL Duty Cycle Register Low Half Word (R/W) */ - __O uint32_t CONCLR; /*!< Offset: 0x018 I2C Control Clear Register ( /W) */ - __IO uint32_t MMCTRL; /*!< Offset: 0x01C Monitor mode control register (R/W) */ - __IO uint32_t ADR1; /*!< Offset: 0x020 I2C Slave Address Register 1 (R/W) */ - __IO uint32_t ADR2; /*!< Offset: 0x024 I2C Slave Address Register 2 (R/W) */ - __IO uint32_t ADR3; /*!< Offset: 0x028 I2C Slave Address Register 3 (R/W) */ - __I uint32_t DATA_BUFFER; /*!< Offset: 0x02C Data buffer register ( /W) */ - __IO uint32_t MASK0; /*!< Offset: 0x030 I2C Slave address mask register 0 (R/W) */ - __IO uint32_t MASK1; /*!< Offset: 0x034 I2C Slave address mask register 1 (R/W) */ - __IO uint32_t MASK2; /*!< Offset: 0x038 I2C Slave address mask register 2 (R/W) */ - __IO uint32_t MASK3; /*!< Offset: 0x03C I2C Slave address mask register 3 (R/W) */ -} LPC_I2C_TypeDef; -/*@}*/ /* end of group LPC11xx_I2C */ - - -/*------------- Watchdog Timer (WDT) -----------------------------------------*/ -/** @addtogroup LPC11xx_WDT LPC11xx WatchDog Timer - @{ -*/ -typedef struct -{ - __IO uint32_t MOD; /*!< Offset: 0x000 Watchdog mode register (R/W) */ - __IO uint32_t TC; /*!< Offset: 0x004 Watchdog timer constant register (R/W) */ - __O uint32_t FEED; /*!< Offset: 0x008 Watchdog feed sequence register ( /W) */ - __I uint32_t TV; /*!< Offset: 0x00C Watchdog timer value register (R/ ) */ -} LPC_WDT_TypeDef; -/*@}*/ /* end of group LPC11xx_WDT */ - - -/*------------- Analog-to-Digital Converter (ADC) ----------------------------*/ -/** @addtogroup LPC11xx_ADC LPC11xx Analog-to-Digital Converter - @{ -*/ -typedef struct -{ - __IO uint32_t CR; /*!< Offset: 0x000 A/D Control Register (R/W) */ - __IO uint32_t GDR; /*!< Offset: 0x004 A/D Global Data Register (R/W) */ - uint32_t RESERVED0; - __IO uint32_t INTEN; /*!< Offset: 0x00C A/D Interrupt Enable Register (R/W) */ - __IO uint32_t DR[8]; /*!< Offset: 0x010-0x02C A/D Channel 0..7 Data Register (R/W) */ - __I uint32_t STAT; /*!< Offset: 0x030 A/D Status Register (R/ ) */ -} LPC_ADC_TypeDef; -/*@}*/ /* end of group LPC11xx_ADC */ - - -#if defined ( __CC_ARM ) -#pragma no_anon_unions -#endif - -/******************************************************************************/ -/* Peripheral memory map */ -/******************************************************************************/ -/* Base addresses */ -#define LPC_FLASH_BASE (0x00000000UL) -#define LPC_RAM_BASE (0x10000000UL) -#define LPC_APB0_BASE (0x40000000UL) -#define LPC_AHB_BASE (0x50000000UL) - -/* APB0 peripherals */ -#define LPC_I2C_BASE (LPC_APB0_BASE + 0x00000) -#define LPC_WDT_BASE (LPC_APB0_BASE + 0x04000) -#define LPC_UART_BASE (LPC_APB0_BASE + 0x08000) -#define LPC_CT16B0_BASE (LPC_APB0_BASE + 0x0C000) -#define LPC_CT16B1_BASE (LPC_APB0_BASE + 0x10000) -#define LPC_CT32B0_BASE (LPC_APB0_BASE + 0x14000) -#define LPC_CT32B1_BASE (LPC_APB0_BASE + 0x18000) -#define LPC_ADC_BASE (LPC_APB0_BASE + 0x1C000) -#define LPC_PMU_BASE (LPC_APB0_BASE + 0x38000) -#define LPC_SSP0_BASE (LPC_APB0_BASE + 0x40000) -#define LPC_IOCON_BASE (LPC_APB0_BASE + 0x44000) -#define LPC_SYSCON_BASE (LPC_APB0_BASE + 0x48000) -#define LPC_SSP1_BASE (LPC_APB0_BASE + 0x58000) - -/* AHB peripherals */ -#define LPC_GPIO_BASE (LPC_AHB_BASE + 0x00000) -#define LPC_GPIO0_BASE (LPC_AHB_BASE + 0x00000) -#define LPC_GPIO1_BASE (LPC_AHB_BASE + 0x10000) -#define LPC_GPIO2_BASE (LPC_AHB_BASE + 0x20000) -#define LPC_GPIO3_BASE (LPC_AHB_BASE + 0x30000) - -/******************************************************************************/ -/* Peripheral declaration */ -/******************************************************************************/ -#define LPC_I2C ((LPC_I2C_TypeDef *) LPC_I2C_BASE ) -#define LPC_WDT ((LPC_WDT_TypeDef *) LPC_WDT_BASE ) -#define LPC_UART ((LPC_UART_TypeDef *) LPC_UART_BASE ) -#define LPC_TMR16B0 ((LPC_TMR_TypeDef *) LPC_CT16B0_BASE) -#define LPC_TMR16B1 ((LPC_TMR_TypeDef *) LPC_CT16B1_BASE) -#define LPC_TMR32B0 ((LPC_TMR_TypeDef *) LPC_CT32B0_BASE) -#define LPC_TMR32B1 ((LPC_TMR_TypeDef *) LPC_CT32B1_BASE) -#define LPC_ADC ((LPC_ADC_TypeDef *) LPC_ADC_BASE ) -#define LPC_PMU ((LPC_PMU_TypeDef *) LPC_PMU_BASE ) -#define LPC_SSP0 ((LPC_SSP_TypeDef *) LPC_SSP0_BASE ) -#define LPC_SSP1 ((LPC_SSP_TypeDef *) LPC_SSP1_BASE ) -#define LPC_IOCON ((LPC_IOCON_TypeDef *) LPC_IOCON_BASE ) -#define LPC_SYSCON ((LPC_SYSCON_TypeDef *) LPC_SYSCON_BASE) -#define LPC_GPIO0 ((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE ) -#define LPC_GPIO1 ((LPC_GPIO_TypeDef *) LPC_GPIO1_BASE ) -#define LPC_GPIO2 ((LPC_GPIO_TypeDef *) LPC_GPIO2_BASE ) -#define LPC_GPIO3 ((LPC_GPIO_TypeDef *) LPC_GPIO3_BASE ) - -#ifdef __cplusplus -} -#endif - -#endif /* __LPC11xx_H__ */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/hal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/hal_lld.c deleted file mode 100644 index 0c47b99..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/hal_lld.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC11xx/hal_lld.c - * @brief LPC11xx HAL subsystem low level driver source. - * - * @addtogroup LPC11xx_HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/** - * @brief Register missing in NXP header file. - */ -#define FLASHCFG (*((volatile uint32_t *)0x4003C010)) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - */ -const PALConfig pal_default_config = { - {VAL_GPIO0DATA, VAL_GPIO0DIR}, - {VAL_GPIO1DATA, VAL_GPIO1DIR}, - {VAL_GPIO2DATA, VAL_GPIO2DIR}, - {VAL_GPIO3DATA, VAL_GPIO3DIR}, -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - - /* SysTick initialization using the system clock.*/ - NVICSetSystemHandlerPriority(HANDLER_SYSTICK, CORTEX_PRIORITY_SYSTICK); - SysTick->LOAD = LPC11xx_SYSCLK / CH_FREQUENCY - 1; - SysTick->VAL = 0; - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_ENABLE_Msk | - SysTick_CTRL_TICKINT_Msk; -} - -/** - * @brief LPC11xx clocks and PLL initialization. - * @note All the involved constants come from the file @p board.h. - */ -void lpc111x_clock_init(void) { - unsigned i; - - /* Flash wait states setting, the code takes care to not touch TBD bits.*/ - FLASHCFG = (FLASHCFG & ~3) | LPC11xx_FLASHCFG_FLASHTIM; - - /* System oscillator initialization if required.*/ -#if LPC11xx_MAINCLK_SOURCE == SYSMAINCLKSEL_PLLOUT -#if LPC11xx_PLLCLK_SOURCE == SYSPLLCLKSEL_SYSOSC - LPC_SYSCON->SYSOSCCTRL = LPC11xx_SYSOSCCTRL; - LPC_SYSCON->PDRUNCFG &= ~(1 << 5); /* System oscillator ON. */ - for (i = 0; i < 200; i++) - __NOP(); /* Stabilization delay. */ -#endif /* LPC11xx_PLLCLK_SOURCE == SYSPLLCLKSEL_SYSOSC */ - - /* PLL initialization if required.*/ - LPC_SYSCON->SYSPLLCLKSEL = LPC11xx_PLLCLK_SOURCE; - LPC_SYSCON->SYSPLLCLKUEN = 1; /* Really required? */ - LPC_SYSCON->SYSPLLCLKUEN = 0; - LPC_SYSCON->SYSPLLCLKUEN = 1; - LPC_SYSCON->SYSPLLCTRL = LPC11xx_SYSPLLCTRL_MSEL | LPC11xx_SYSPLLCTRL_PSEL; - LPC_SYSCON->PDRUNCFG &= ~(1 << 7); /* System PLL ON. */ - while ((LPC_SYSCON->SYSPLLSTAT & 1) == 0) /* Wait PLL lock. */ - ; -#endif /* LPC11xx_MAINCLK_SOURCE == SYSMAINCLKSEL_PLLOUT */ - - /* Main clock source selection.*/ - LPC_SYSCON->MAINCLKSEL = LPC11xx_MAINCLK_SOURCE; - LPC_SYSCON->MAINCLKUEN = 1; /* Really required? */ - LPC_SYSCON->MAINCLKUEN = 0; - LPC_SYSCON->MAINCLKUEN = 1; - while ((LPC_SYSCON->MAINCLKUEN & 1) == 0) /* Wait switch completion. */ - ; - - /* ABH divider initialization, peripheral clocks are initially disabled, - the various device drivers will handle their own setup except GPIO and - IOCON that are left enabled.*/ - LPC_SYSCON->SYSAHBCLKDIV = LPC11xx_SYSABHCLK_DIV; - LPC_SYSCON->SYSAHBCLKCTRL = 0x0001005F; - - /* Peripheral clock dividers initialization.*/ - LPC_SYSCON->UARTCLKDIV = LPC11xx_UART_PCLK_DIV; - - /* Memory remapping, vectors always in ROM.*/ - LPC_SYSCON->SYSMEMREMAP = 2; -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/hal_lld.h deleted file mode 100644 index 94f8648..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/hal_lld.h +++ /dev/null @@ -1,237 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC11xx/hal_lld.h - * @brief HAL subsystem low level driver header template. - * - * @addtogroup LPC11xx_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -#include "LPC11xx.h" -#include "nvic.h" - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "LPC11xx" - -#define IRCOSCCLK 12000000 /**< High speed internal clock. */ -#define WDGOSCCLK 1600000 /**< Watchdog internal clock. */ - -#define SYSPLLCLKSEL_IRCOSC 0 /**< Internal RC oscillator - clock source. */ -#define SYSPLLCLKSEL_SYSOSC 1 /**< System oscillator clock - source. */ - -#define SYSMAINCLKSEL_IRCOSC 0 /**< Clock source is IRC. */ -#define SYSMAINCLKSEL_PLLIN 1 /**< Clock source is PLLIN. */ -#define SYSMAINCLKSEL_WDGOSC 2 /**< Clock source is WDGOSC. */ -#define SYSMAINCLKSEL_PLLOUT 3 /**< Clock source is PLLOUT. */ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief System PLL clock source. - */ -#if !defined(LPC11xx_PLLCLK_SOURCE) || defined(__DOXYGEN__) -#define LPC11xx_PLLCLK_SOURCE SYSPLLCLKSEL_SYSOSC -#endif - -/** - * @brief System PLL multiplier. - * @note The value must be in the 1..32 range and the final frequency - * must not exceed the CCO ratings. - */ -#if !defined(LPC11xx_SYSPLL_MUL) || defined(__DOXYGEN__) -#define LPC11xx_SYSPLL_MUL 4 -#endif - -/** - * @brief System PLL divider. - * @note The value must be chosen between (2, 4, 8, 16). - */ -#if !defined(LPC11xx_SYSPLL_DIV) || defined(__DOXYGEN__) -#define LPC11xx_SYSPLL_DIV 4 -#endif - -/** - * @brief System main clock source. - */ -#if !defined(LPC11xx_MAINCLK_SOURCE) || defined(__DOXYGEN__) -#define LPC11xx_MAINCLK_SOURCE SYSMAINCLKSEL_PLLOUT -#endif - -/** - * @brief AHB clock divider. - * @note The value must be chosen between (1...255). - */ -#if !defined(LPC11xx_SYSCLK_DIV) || defined(__DOXYGEN__) -#define LPC11xx_SYSABHCLK_DIV 1 -#endif - -/** - * @brief UART clock divider. - * @note The value must be chosen between (1...255). - */ -#if !defined(LPC11xx_UART_PCLK_DIV) || defined(__DOXYGEN__) -#define LPC11xx_UART_PCLK_DIV 1 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/** - * @brief Calculated SYSOSCCTRL setting. - */ -#if (SYSOSCCLK < 18000000) || defined(__DOXYGEN__) -#define LPC11xx_SYSOSCCTRL 0 -#else -#define LPC11xx_SYSOSCCTRL 1 -#endif - -/** - * @brief PLL input clock frequency. - */ -#if (LPC11xx_PLLCLK_SOURCE == SYSPLLCLKSEL_SYSOSC) || defined(__DOXYGEN__) -#define LPC11xx_SYSPLLCLKIN SYSOSCCLK -#elif LPC11xx_PLLCLK_SOURCE == SYSPLLCLKSEL_IRCOCS -#define LPC11xx_SYSPLLCLKIN IRCOSCCLK -#else -#error "invalid LPC11xx_PLLCLK_SOURCE clock source specified" -#endif - -/** - * @brief MSEL mask in SYSPLLCTRL register. - */ -#if (LPC11xx_SYSPLL_MUL >= 1) && (LPC11xx_SYSPLL_MUL <= 32) || \ - defined(__DOXYGEN__) -#define LPC11xx_SYSPLLCTRL_MSEL (LPC11xx_SYSPLL_MUL - 1) -#else -#error "LPC11xx_SYSPLL_MUL out of range (1...32)" -#endif - -/** - * @brief PSEL mask in SYSPLLCTRL register. - */ -#if (LPC11xx_SYSPLL_DIV == 2) || defined(__DOXYGEN__) -#define LPC11xx_SYSPLLCTRL_PSEL (0 << 5) -#elif LPC11xx_SYSPLL_DIV == 4 -#define LPC11xx_SYSPLLCTRL_PSEL (1 << 5) -#elif LPC11xx_SYSPLL_DIV == 8 -#define LPC11xx_SYSPLLCTRL_PSEL (2 << 5) -#elif LPC11xx_SYSPLL_DIV == 16 -#define LPC11xx_SYSPLLCTRL_PSEL (3 << 5) -#else -#error "invalid LPC11xx_SYSPLL_DIV value (2,4,8,16)" -#endif - -/** - * @brief CCP frequency. - */ -#define LPC11xx_SYSPLLCCO (LPC11xx_SYSPLLCLKIN * LPC11xx_SYSPLL_MUL * \ - LPC11xx_SYSPLL_DIV) - -#if (LPC11xx_SYSPLLCCO < 156000000) || (LPC11xx_SYSPLLCCO > 320000000) -#error "CCO frequency out of the acceptable range (156...320)" -#endif - -/** - * @brief PLL output clock frequency. - */ -#define LPC11xx_SYSPLLCLKOUT (LPC11xx_SYSPLLCCO / LPC11xx_SYSPLL_DIV) - -#if (LPC11xx_MAINCLK_SOURCE == SYSMAINCLKSEL_IRCOCS) || defined(__DOXYGEN__) -#define LPC11xx_MAINCLK IRCOSCCLK -#elif LPC11xx_MAINCLK_SOURCE == SYSMAINCLKSEL_PLLIN -#define LPC11xx_MAINCLK LPC11xx_SYSPLLCLKIN -#elif LPC11xx_MAINCLK_SOURCE == SYSMAINCLKSEL_WDGOSC -#define LPC11xx_MAINCLK WDGOSCCLK -#elif LPC11xx_MAINCLK_SOURCE == SYSMAINCLKSEL_PLLOUT -#define LPC11xx_MAINCLK LPC11xx_SYSPLLCLKOUT -#else -#error "invalid LPC11xx_MAINCLK_SOURCE clock source specified" -#endif - -/** - * @brief AHB clock. - */ -#define LPC11xx_SYSCLK (LPC11xx_MAINCLK / LPC11xx_SYSABHCLK_DIV) -#if LPC11xx_SYSCLK > 50000000 -#error "AHB clock frequency out of the acceptable range (50MHz max)" -#endif - -/** - * @brief Flash wait states. - */ -#if (LPC11xx_SYSCLK <= 20000000) || defined(__DOXYGEN__) -#define LPC11xx_FLASHCFG_FLASHTIM 0 -#elif LPC11xx_SYSCLK <= 40000000 -#define LPC11xx_FLASHCFG_FLASHTIM 1 -#else -#define LPC11xx_FLASHCFG_FLASHTIM 2 -#endif - -/** - * @brief UART clock. - */ -#define LPC11xx_UART_PCLK (LPC11xx_MAINCLK / LPC11xx_UART_PCLK_DIV) - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); - void lpc111x_clock_init(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/pal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/pal_lld.c deleted file mode 100644 index d6766e4..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/pal_lld.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC11xx/pal_lld.c - * @brief LPC11xx GPIO low level driver code. - * - * @addtogroup LPC11xx_PAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ -/** - * @brief LPC11xx I/O ports configuration. - * @details GPIO unit registers initialization. - * - * @param[in] config the LPC11xx ports configuration - */ -void _pal_lld_init(const PALConfig *config) { - - LPC_GPIO0->DIR = config->P0.dir; - LPC_GPIO1->DIR = config->P1.dir; - LPC_GPIO2->DIR = config->P2.dir; - LPC_GPIO3->DIR = config->P3.dir; - LPC_GPIO0->DATA = config->P0.data; - LPC_GPIO1->DATA = config->P1.data; - LPC_GPIO2->DATA = config->P2.data; - LPC_GPIO3->DATA = config->P3.data; -} - -/** - * @brief Pads mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - * - * @note This function is not meant to be invoked directly by the application - * code. - * @note @p PAL_MODE_UNCONNECTED is implemented as push pull output with high - * state. - * @note This function does not alter the @p PINSELx registers. Alternate - * functions setup must be handled by device-specific code. - */ -void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode) { - - switch (mode & PAL_MODE_MASK) { - case PAL_MODE_RESET: - case PAL_MODE_INPUT: - port->DIR &= ~mask; - break; - case PAL_MODE_UNCONNECTED: - palSetPort(port, PAL_WHOLE_PORT); - case PAL_MODE_OUTPUT_PUSHPULL: - port->DIR |= mask; - break; - } -} - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/pal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/pal_lld.h deleted file mode 100644 index 6aecdda..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/pal_lld.h +++ /dev/null @@ -1,316 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC11xx/pal_lld.h - * @brief LPC11xx GPIO low level driver header. - * - * @addtogroup LPC11xx_PAL - * @{ - */ - -#ifndef _PAL_LLD_H_ -#define _PAL_LLD_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Unsupported modes and specific modes */ -/*===========================================================================*/ - -#undef PAL_MODE_INPUT_PULLUP -#undef PAL_MODE_INPUT_PULLDOWN -#undef PAL_MODE_INPUT_ANALOG -#undef PAL_MODE_OUTPUT_OPENDRAIN - -/*===========================================================================*/ -/* I/O Ports Types and constants. */ -/*===========================================================================*/ - -/** - * @brief GPIO port setup info. - */ -typedef struct { - /** Initial value for FIO_PIN register.*/ - uint32_t data; - /** Initial value for FIO_DIR register.*/ - uint32_t dir; -} lpc111x_gpio_setup_t; - -/** - * @brief GPIO static initializer. - * @details An instance of this structure must be passed to @p palInit() at - * system startup time in order to initialized the digital I/O - * subsystem. This represents only the initial setup, specific pads - * or whole ports can be reprogrammed at later time. - * @note The @p IOCON block is not configured, initially all pins have - * enabled pullups and are programmed as GPIO. It is responsibility - * of the various drivers to reprogram the pins in the proper mode. - * Pins that are not handled by any driver may be programmed in - * @p board.c. - */ -typedef struct { - /** @brief GPIO 0 setup data.*/ - lpc111x_gpio_setup_t P0; - /** @brief GPIO 1 setup data.*/ - lpc111x_gpio_setup_t P1; - /** @brief GPIO 2 setup data.*/ - lpc111x_gpio_setup_t P2; - /** @brief GPIO 3 setup data.*/ - lpc111x_gpio_setup_t P3; -} PALConfig; - -/** - * @brief Width, in bits, of an I/O port. - */ -#define PAL_IOPORTS_WIDTH 32 - -/** - * @brief Whole port mask. - * @brief This macro specifies all the valid bits into a port. - */ -#define PAL_WHOLE_PORT ((ioportmask_t)0xFFF) - -/** - * @brief Digital I/O port sized unsigned type. - */ -typedef uint32_t ioportmask_t; - -/** - * @brief Port Identifier. - */ -typedef LPC_GPIO_TypeDef *ioportid_t; - -/*===========================================================================*/ -/* I/O Ports Identifiers. */ -/*===========================================================================*/ - -/** - * @brief GPIO0 port identifier. - */ -#define IOPORT1 LPC_GPIO0 -#define GPIO0 LPC_GPIO0 - -/** - * @brief GPIO1 port identifier. - */ -#define IOPORT2 LPC_GPIO1 -#define GPIO1 LPC_GPIO1 - -/** - * @brief GPIO2 port identifier. - */ -#define IOPORT3 LPC_GPIO2 -#define GPIO2 LPC_GPIO2 - -/** - * @brief GPIO3 port identifier. - */ -#define IOPORT4 LPC_GPIO3 -#define GPIO3 LPC_GPIO3 - -/*===========================================================================*/ -/* Implementation, some of the following macros could be implemented as */ -/* functions, if so please put them in pal_lld.c. */ -/*===========================================================================*/ - -/** - * @brief Low level PAL subsystem initialization. - * - * @param[in] config architecture-dependent ports configuration - */ -#define pal_lld_init(config) _pal_lld_init(config) - -/** - * @brief Reads the physical I/O port states. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The port bits. - */ -#define pal_lld_readport(port) ((port)->DATA) - -/** - * @brief Reads the output latch. - * @details The purpose of this function is to read back the latched output - * value. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The latched logical states. - */ -#define pal_lld_readlatch(port) ((port)->DATA) - -/** - * @brief Writes a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @param[in] bits bits to be written on the specified port - */ -#define pal_lld_writeport(port, bits) ((port)->DATA = (bits)) - -/** - * @brief Sets a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] bits bits to be ORed on the specified port - */ -#define pal_lld_setport(port, bits) ((port)->MASKED_ACCESS[bits] = 0xFFFFFFFF) - -/** - * @brief Clears a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] bits bits to be cleared on the specified port - */ -#define pal_lld_clearport(port, bits) ((port)->MASKED_ACCESS[bits] = 0) - -/** - * @brief Reads a group of bits. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] offset group bit offset within the port - * @return The group logical states. - */ -#define pal_lld_readgroup(port, mask, offset) \ - ((port)->MASKED_ACCESS[(mask) << (offset)]) - -/** - * @brief Writes a group of bits. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] offset group bit offset within the port - * @param[in] bits bits to be written. Values exceeding the group width - * are masked. - */ -#define pal_lld_writegroup(port, mask, offset, bits) \ - ((port)->MASKED_ACCESS[(mask) << (offset)] = (bits)) - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Programming an unknown or unsupported mode is silently ignored. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] mode group mode - */ -#define pal_lld_setgroupmode(port, mask, mode) \ - _pal_lld_setgroupmode(port, mask, mode) - -/** - * @brief Writes a logical state on an output pad. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - * @param[out] bit logical value, the value must be @p PAL_LOW or - * @p PAL_HIGH - */ -#define pal_lld_writepad(port, pad, bit) \ - ((port)->MASKED_ACCESS[(mask) << (pad)] = (bit) << (pad)) - -/** - * @brief Sets a pad logical state to @p PAL_HIGH. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - */ -#define pal_lld_setpad(port, pad) \ - ((port)->MASKED_ACCESS[1 << (pad)] = 1 << (pad)) - -/** - * @brief Clears a pad logical state to @p PAL_LOW. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - */ -#define pal_lld_clearpad(port, pad) \ - ((port)->MASKED_ACCESS[1 << (pad)] = 0) - -#if !defined(__DOXYGEN__) -extern const PALConfig pal_default_config; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void _pal_lld_init(const PALConfig *config); - void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PAL */ - -#endif /* _PAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/platform.dox b/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/platform.dox deleted file mode 100644 index ad9cf0f..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/platform.dox +++ /dev/null @@ -1,82 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup LPC11xx LPC11xx Support - * @brief LPC11xx specific support. - * @details The LPC11xx support includes: - * - I/O ports driver. - * - Buffered, interrupt driven, serial driver. - * - A demo supporting the kernel test suite. - * . - * @ingroup ARMCMx - */ - -/** - * @defgroup LPC11xx_HAL LPC11xx HAL Support - * @brief HAL support. - * - * @ingroup LPC11xx - */ - -/** - * @defgroup LPC11xx_PAL LPC11xx I/O Ports Support - * @brief I/O Ports peripherals support. - * @details This module supports the LPC11xx GPIO controller. The controller - * supports the following features (see @ref PAL): - * - 12 bits wide ports. - * - Atomic set/reset functions. - * - Atomic set+reset function (atomic bus operations). - * - Output latched regardless of the pad setting. - * - Direct read of input pads regardless of the pad setting. - * . - *

      Supported Setup Modes

      - * - @p PAL_MODE_RESET. - * - @p PAL_MODE_UNCONNECTED. - * - @p PAL_MODE_INPUT. - * - @p PAL_MODE_OUTPUT_PUSHPULL. - * . - * Any attempt to setup an invalid mode is ignored. - * - *

      Suboptimal Behavior

      - * Some GPIO features are less than optimal: - * - Pad/port toggling operations are not atomic. - * - Pull-up and Pull-down resistors cannot be programmed through the PAL - * driver and must be programmed separately. - * - Reading of the output latch for pads programmed as input is not possible, - * the input pin value is returned instead. - * . - * @ingroup LPC11xx - */ - -/** - * @defgroup LPC11xx_SERIAL LPC11xx UART Support - * @brief UART peripherals support. - * @details The serial driver supports the LPC11xx UART taking advantage of - * its deep hardware buffers. - * - * @ingroup LPC11xx - */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/platform.mk b/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/platform.mk deleted file mode 100644 index 82875a6..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/platform.mk +++ /dev/null @@ -1,7 +0,0 @@ -# List of all the LPC11xx platform files. -PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/LPC11xx/hal_lld.c \ - ${CHIBIOS}/os/hal/platforms/LPC11xx/pal_lld.c \ - ${CHIBIOS}/os/hal/platforms/LPC11xx/serial_lld.c - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/platforms/LPC11xx diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/serial_lld.c deleted file mode 100644 index 55a5295..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/serial_lld.c +++ /dev/null @@ -1,297 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC11xx/serial_lld.c - * @brief LPC11xx low level serial driver code. - * - * @addtogroup LPC11xx_SERIAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -#if USE_LPC11xx_UART0 || defined(__DOXYGEN__) -/** @brief UART0 serial driver identifier.*/ -SerialDriver SD1; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** @brief Driver default configuration.*/ -static const SerialConfig default_config = { - SERIAL_DEFAULT_BITRATE, - LCR_WL8 | LCR_STOP1 | LCR_NOPARITY, - FCR_TRIGGER0 -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/** - * @brief UART initialization. - * - * @param[in] sdp communication channel associated to the UART - * @param[in] config the architecture-dependent serial driver configuration - */ -static void uart_init(SerialDriver *sdp, const SerialConfig *config) { - LPC_UART_TypeDef *u = sdp->uart; - - uint32_t div = LPC11xx_UART_PCLK / (config->sc_speed << 4); - u->LCR = config->sc_lcr | LCR_DLAB; - u->DLL = div; - u->DLM = div >> 8; - u->LCR = config->sc_lcr; - u->FCR = FCR_ENABLE | FCR_RXRESET | FCR_TXRESET | config->sc_fcr; - u->ACR = 0; - u->FDR = 0x10; - u->TER = TER_ENABLE; - u->IER = IER_RBR | IER_STATUS; -} - -/** - * @brief UART de-initialization. - * - * @param[in] u pointer to an UART I/O block - */ -static void uart_deinit(LPC_UART_TypeDef *u) { - - u->LCR = LCR_DLAB; - u->DLL = 1; - u->DLM = 0; - u->LCR = 0; - u->FDR = 0x10; - u->IER = 0; - u->FCR = FCR_RXRESET | FCR_TXRESET; - u->ACR = 0; - u->TER = TER_ENABLE; -} - -/** - * @brief Error handling routine. - * - * @param[in] sdp communication channel associated to the UART - * @param[in] err UART LSR register value - */ -static void set_error(SerialDriver *sdp, IOREG32 err) { - sdflags_t sts = 0; - - if (err & LSR_OVERRUN) - sts |= SD_OVERRUN_ERROR; - if (err & LSR_PARITY) - sts |= SD_PARITY_ERROR; - if (err & LSR_FRAMING) - sts |= SD_FRAMING_ERROR; - if (err & LSR_BREAK) - sts |= SD_BREAK_DETECTED; - chSysLockFromIsr(); - sdAddFlagsI(sdp, sts); - chSysUnlockFromIsr(); -} - -/** - * @brief Common IRQ handler. - * @note Tries hard to clear all the pending interrupt sources, we don't - * want to go through the whole ISR and have another interrupt soon - * after. - * - * @param[in] u pointer to an UART I/O block - * @param[in] sdp communication channel associated to the UART - */ -static void serve_interrupt(SerialDriver *sdp) { - LPC_UART_TypeDef *u = sdp->uart; - - while (TRUE) { - switch (u->IIR & IIR_SRC_MASK) { - case IIR_SRC_NONE: - return; - case IIR_SRC_ERROR: - set_error(sdp, u->LSR); - break; - case IIR_SRC_TIMEOUT: - case IIR_SRC_RX: - chSysLockFromIsr(); - if (chIQIsEmpty(&sdp->iqueue)) - chEvtBroadcastI(&sdp->ievent); - chSysUnlockFromIsr(); - while (u->LSR & LSR_RBR_FULL) { - chSysLockFromIsr(); - if (chIQPutI(&sdp->iqueue, u->RBR) < Q_OK) - sdAddFlagsI(sdp, SD_OVERRUN_ERROR); - chSysUnlockFromIsr(); - } - break; - case IIR_SRC_TX: - { - int i = LPC11xx_UART_FIFO_PRELOAD; - do { - msg_t b; - - chSysLockFromIsr(); - b = chOQGetI(&sdp->oqueue); - chSysUnlockFromIsr(); - if (b < Q_OK) { - u->IER &= ~IER_THRE; - chSysLockFromIsr(); - chEvtBroadcastI(&sdp->oevent); - chSysUnlockFromIsr(); - break; - } - u->THR = b; - } while (--i); - } - break; - default: - (void) u->THR; - (void) u->RBR; - } - } -} - -/** - * @brief Attempts a TX FIFO preload. - */ -static void preload(SerialDriver *sdp) { - LPC_UART_TypeDef *u = sdp->uart; - - if (u->LSR & LSR_THRE) { - int i = LPC11xx_UART_FIFO_PRELOAD; - do { - msg_t b = chOQGetI(&sdp->oqueue); - if (b < Q_OK) { - chEvtBroadcastI(&sdp->oevent); - return; - } - u->THR = b; - } while (--i); - } - u->IER |= IER_THRE; -} - -/** - * @brief Driver SD1 output notification. - */ -#if USE_LPC11xx_UART0 || defined(__DOXYGEN__) -static void notify1(void) { - - preload(&SD1); -} -#endif - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/** - * @brief UART0 IRQ handler. - */ -#if USE_LPC11xx_UART0 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(Vector94) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD1); - - CH_IRQ_EPILOGUE(); -} -#endif - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_LPC11xx_UART0 - sdObjectInit(&SD1, NULL, notify1); - SD1.uart = LPC_UART; - LPC_IOCON->PIO1_6 = 0xC1; /* RDX without resistors. */ - LPC_IOCON->PIO1_7 = 0xC1; /* TDX without resistors. */ -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - - if (sdp->state == SD_STOP) { -#if USE_LPC11xx_UART0 - if (&SD1 == sdp) { - LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 12); - NVICEnableVector(UART_IRQn, - CORTEX_PRIORITY_MASK(LPC11xx_UART0_PRIORITY)); - } -#endif - } - uart_init(sdp, config); -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the UART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - - if (sdp->state == SD_READY) { - uart_deinit(sdp->uart); -#if USE_LPC11xx_UART0 - if (&SD1 == sdp) { - LPC_SYSCON->SYSAHBCLKCTRL &= ~(1 << 12); - NVICDisableVector(UART_IRQn); - return; - } -#endif - } -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/serial_lld.h deleted file mode 100644 index 7805118..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/serial_lld.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC11xx/serial_lld.h - * @brief LPC11xx low level serial driver header. - * - * @addtogroup LPC11xx_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -#define IIR_SRC_MASK 0x0F -#define IIR_SRC_NONE 0x01 -#define IIR_SRC_MODEM 0x00 -#define IIR_SRC_TX 0x02 -#define IIR_SRC_RX 0x04 -#define IIR_SRC_ERROR 0x06 -#define IIR_SRC_TIMEOUT 0x0C - -#define IER_RBR 1 -#define IER_THRE 2 -#define IER_STATUS 4 - -#define LCR_WL5 0 -#define LCR_WL6 1 -#define LCR_WL7 2 -#define LCR_WL8 3 -#define LCR_STOP1 0 -#define LCR_STOP2 4 -#define LCR_NOPARITY 0 -#define LCR_PARITYODD 0x08 -#define LCR_PARITYEVEN 0x18 -#define LCR_PARITYONE 0x28 -#define LCR_PARITYZERO 0x38 -#define LCR_BREAK_ON 0x40 -#define LCR_DLAB 0x80 - -#define FCR_ENABLE 1 -#define FCR_RXRESET 2 -#define FCR_TXRESET 4 -#define FCR_TRIGGER0 0 -#define FCR_TRIGGER1 0x40 -#define FCR_TRIGGER2 0x80 -#define FCR_TRIGGER3 0xC0 - -#define LSR_RBR_FULL 1 -#define LSR_OVERRUN 2 -#define LSR_PARITY 4 -#define LSR_FRAMING 8 -#define LSR_BREAK 0x10 -#define LSR_THRE 0x20 -#define LSR_TEMT 0x40 -#define LSR_RXFE 0x80 - -#define TER_ENABLE 0x80 - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief UART0 driver enable switch. - * @details If set to @p TRUE the support for UART0 is included. - * @note The default is @p TRUE . - */ -#if !defined(USE_LPC11xx_UART0) || defined(__DOXYGEN__) -#define USE_LPC11xx_UART0 TRUE -#endif - -/** - * @brief FIFO preload parameter. - * @details Configuration parameter, this values defines how many bytes are - * preloaded in the HW transmit FIFO for each interrupt, the maximum - * value is 16 the minimum is 1. - * @note An high value reduces the number of interrupts generated but can - * also increase the worst case interrupt response time because the - * preload loops. - */ -#if !defined(LPC11xx_UART_FIFO_PRELOAD) || defined(__DOXYGEN__) -#define LPC11xx_UART_FIFO_PRELOAD 16 -#endif - -/** - * @brief UART0 interrupt priority level setting. - */ -#if !defined(LPC11xx_UART0_PRIORITY) || defined(__DOXYGEN__) -#define LPC11xx_UART0_PRIORITY 3 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if (LPC11xx_UART_FIFO_PRELOAD < 1) || (LPC11xx_UART_FIFO_PRELOAD > 16) -#error "invalid LPC11xx_UART_FIFO_PRELOAD setting" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint32_t sdflags_t; - -/** - * @brief LPC11xx Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - */ -typedef struct { - /** - * @brief Bit rate. - */ - uint32_t sc_speed; - /** - * @brief Initialization value for the LCR register. - */ - uint32_t sc_lcr; - /** - * @brief Initialization value for the FCR register. - */ - uint32_t sc_fcr; -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ \ - /* Pointer to the USART registers block.*/ \ - LPC_UART_TypeDef *uart; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_LPC11xx_UART0 && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/system_LPC11xx.h b/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/system_LPC11xx.h deleted file mode 100644 index 4186707..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC11xx/system_LPC11xx.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************//** - * @file system_LPC11xx.h - * @brief CMSIS Cortex-M0 Device Peripheral Access Layer Header File - * for the NXP LPC11xx Device Series - * @version V1.00 - * @date 17. November 2009 - * - * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - - -#ifndef __SYSTEM_LPC11xx_H -#define __SYSTEM_LPC11xx_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ - - -/** - * Initialize the system - * - * @param none - * @return none - * - * @brief Setup the microcontroller system. - * Initialize the System and update the SystemCoreClock variable. - */ -extern void SystemInit (void); - -/** - * Update SystemCoreClock variable - * - * @param none - * @return none - * - * @brief Updates the SystemCoreClock with current core Clock - * retrieved from cpu registers. - */ -extern void SystemCoreClockUpdate (void); - -#ifdef __cplusplus -} -#endif - -#endif /* __SYSTEM_LPC11x_H */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/LPC13xx.h b/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/LPC13xx.h deleted file mode 100644 index 81a9b5f..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/LPC13xx.h +++ /dev/null @@ -1,493 +0,0 @@ -/**************************************************************************//** - * @file LPC13xx.h - * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File for - * NXP LPC13xx Device Series - * @version V1.01 - * @date 19. October 2009 - * - * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - - -#ifndef __LPC13xx_H__ -#define __LPC13xx_H__ - -/* - * ========================================================================== - * ---------- Interrupt Number Definition ----------------------------------- - * ========================================================================== - */ - -typedef enum IRQn -{ -/****** Cortex-M3 Processor Exceptions Numbers ***************************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */ - BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */ - UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */ - -/****** LPC13xx Specific Interrupt Numbers *******************************************************/ - WAKEUP0_IRQn = 0, /*!< All I/O pins can be used as wakeup source. */ - WAKEUP1_IRQn = 1, /*!< There are 40 pins in total for LPC17xx */ - WAKEUP2_IRQn = 2, - WAKEUP3_IRQn = 3, - WAKEUP4_IRQn = 4, - WAKEUP5_IRQn = 5, - WAKEUP6_IRQn = 6, - WAKEUP7_IRQn = 7, - WAKEUP8_IRQn = 8, - WAKEUP9_IRQn = 9, - WAKEUP10_IRQn = 10, - WAKEUP11_IRQn = 11, - WAKEUP12_IRQn = 12, - WAKEUP13_IRQn = 13, - WAKEUP14_IRQn = 14, - WAKEUP15_IRQn = 15, - WAKEUP16_IRQn = 16, - WAKEUP17_IRQn = 17, - WAKEUP18_IRQn = 18, - WAKEUP19_IRQn = 19, - WAKEUP20_IRQn = 20, - WAKEUP21_IRQn = 21, - WAKEUP22_IRQn = 22, - WAKEUP23_IRQn = 23, - WAKEUP24_IRQn = 24, - WAKEUP25_IRQn = 25, - WAKEUP26_IRQn = 26, - WAKEUP27_IRQn = 27, - WAKEUP28_IRQn = 28, - WAKEUP29_IRQn = 29, - WAKEUP30_IRQn = 30, - WAKEUP31_IRQn = 31, - WAKEUP32_IRQn = 32, - WAKEUP33_IRQn = 33, - WAKEUP34_IRQn = 34, - WAKEUP35_IRQn = 35, - WAKEUP36_IRQn = 36, - WAKEUP37_IRQn = 37, - WAKEUP38_IRQn = 38, - WAKEUP39_IRQn = 39, - I2C_IRQn = 40, /*!< I2C Interrupt */ - TIMER_16_0_IRQn = 41, /*!< 16-bit Timer0 Interrupt */ - TIMER_16_1_IRQn = 42, /*!< 16-bit Timer1 Interrupt */ - TIMER_32_0_IRQn = 43, /*!< 32-bit Timer0 Interrupt */ - TIMER_32_1_IRQn = 44, /*!< 32-bit Timer1 Interrupt */ - SSP_IRQn = 45, /*!< SSP Interrupt */ - UART_IRQn = 46, /*!< UART Interrupt */ - USB_IRQn = 47, /*!< USB Regular Interrupt */ - USB_FIQn = 48, /*!< USB Fast Interrupt */ - ADC_IRQn = 49, /*!< A/D Converter Interrupt */ - WDT_IRQn = 50, /*!< Watchdog timer Interrupt */ - BOD_IRQn = 51, /*!< Brown Out Detect(BOD) Interrupt */ - EINT3_IRQn = 53, /*!< External Interrupt 3 Interrupt */ - EINT2_IRQn = 54, /*!< External Interrupt 2 Interrupt */ - EINT1_IRQn = 55, /*!< External Interrupt 1 Interrupt */ - EINT0_IRQn = 56, /*!< External Interrupt 0 Interrupt */ -} IRQn_Type; - - -/* - * ========================================================================== - * ----------- Processor and Core Peripheral Section ------------------------ - * ========================================================================== - */ - -/* Configuration of the Cortex-M3 Processor and Core Peripherals */ -#define __MPU_PRESENT 1 /*!< MPU present or not */ -#define __NVIC_PRIO_BITS 3 /*!< Number of Bits used for Priority Levels */ -#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ - - -#include "core_cm3.h" /* Cortex-M3 processor and core peripherals */ -#include "system_LPC13xx.h" /* System Header */ - - -/******************************************************************************/ -/* Device Specific Peripheral registers structures */ -/******************************************************************************/ - -#if defined ( __CC_ARM ) -#pragma anon_unions -#endif - -/*------------- System Control (SYSCON) --------------------------------------*/ -typedef struct -{ - __IO uint32_t SYSMEMREMAP; /* Sys mem. Remap, Offset 0x0 */ - __IO uint32_t PRESETCTRL; - __IO uint32_t SYSPLLCTRL; /* Sys PLL control */ - __IO uint32_t SYSPLLSTAT; - __IO uint32_t USBPLLCTRL; /* USB PLL control, offset 0x10 */ - __IO uint32_t USBPLLSTAT; - uint32_t RESERVED0[2]; - - __IO uint32_t SYSOSCCTRL; /* Offset 0x20 */ - __IO uint32_t WDTOSCCTRL; - __IO uint32_t IRCCTRL; - uint32_t RESERVED1[1]; - __IO uint32_t SYSRESSTAT; /* Offset 0x30 */ - uint32_t RESERVED2[3]; - __IO uint32_t SYSPLLCLKSEL; /* Offset 0x40 */ - __IO uint32_t SYSPLLCLKUEN; - __IO uint32_t USBPLLCLKSEL; - __IO uint32_t USBPLLCLKUEN; - uint32_t RESERVED3[8]; - - __IO uint32_t MAINCLKSEL; /* Offset 0x70 */ - __IO uint32_t MAINCLKUEN; - __IO uint32_t SYSAHBCLKDIV; - uint32_t RESERVED4[1]; - - __IO uint32_t SYSAHBCLKCTRL; /* Offset 0x80 */ - uint32_t RESERVED5[4]; - __IO uint32_t SSPCLKDIV; - __IO uint32_t UARTCLKDIV; - uint32_t RESERVED6[4]; - __IO uint32_t TRACECLKDIV; - - __IO uint32_t SYSTICKCLKDIV; /* Offset 0xB0 */ - uint32_t RESERVED7[3]; - - __IO uint32_t USBCLKSEL; /* Offset 0xC0 */ - __IO uint32_t USBCLKUEN; - __IO uint32_t USBCLKDIV; - uint32_t RESERVED8[1]; - __IO uint32_t WDTCLKSEL; /* Offset 0xD0 */ - __IO uint32_t WDTCLKUEN; - __IO uint32_t WDTCLKDIV; - uint32_t RESERVED9[1]; - __IO uint32_t CLKOUTCLKSEL; /* Offset 0xE0 */ - __IO uint32_t CLKOUTUEN; - __IO uint32_t CLKOUTDIV; - uint32_t RESERVED10[5]; - - __IO uint32_t PIOPORCAP0; /* Offset 0x100 */ - __IO uint32_t PIOPORCAP1; - uint32_t RESERVED11[18]; - - __IO uint32_t BODCTRL; /* Offset 0x150 */ - uint32_t RESERVED12[1]; - __IO uint32_t SYSTCKCAL; - uint32_t RESERVED13[41]; - - __IO uint32_t STARTAPRP0; /* Offset 0x200 */ - __IO uint32_t STARTERP0; - __IO uint32_t STARTRSRP0CLR; - __IO uint32_t STARTSRP0; - __IO uint32_t STARTAPRP1; - __IO uint32_t STARTERP1; - __IO uint32_t STARTRSRP1CLR; - __IO uint32_t STARTSRP1; - uint32_t RESERVED14[4]; - - __IO uint32_t PDSLEEPCFG; /* Offset 0x230 */ - __IO uint32_t PDAWAKECFG; - __IO uint32_t PDRUNCFG; - uint32_t RESERVED15[110]; - __I uint32_t DEVICE_ID; -} LPC_SYSCON_TypeDef; - - -/*------------- Pin Connect Block (IOCON) --------------------------------*/ -typedef struct -{ - __IO uint32_t PIO2_6; - uint32_t RESERVED0[1]; - __IO uint32_t PIO2_0; - __IO uint32_t RESET_PIO0_0; - __IO uint32_t PIO0_1; - __IO uint32_t PIO1_8; - uint32_t RESERVED1[1]; - __IO uint32_t PIO0_2; - - __IO uint32_t PIO2_7; - __IO uint32_t PIO2_8; - __IO uint32_t PIO2_1; - __IO uint32_t PIO0_3; - __IO uint32_t PIO0_4; - __IO uint32_t PIO0_5; - __IO uint32_t PIO1_9; - __IO uint32_t PIO3_4; - - __IO uint32_t PIO2_4; - __IO uint32_t PIO2_5; - __IO uint32_t PIO3_5; - __IO uint32_t PIO0_6; - __IO uint32_t PIO0_7; - __IO uint32_t PIO2_9; - __IO uint32_t PIO2_10; - __IO uint32_t PIO2_2; - - __IO uint32_t PIO0_8; - __IO uint32_t PIO0_9; - __IO uint32_t JTAG_TCK_PIO0_10; - __IO uint32_t PIO1_10; - __IO uint32_t PIO2_11; - __IO uint32_t JTAG_TDI_PIO0_11; - __IO uint32_t JTAG_TMS_PIO1_0; - __IO uint32_t JTAG_TDO_PIO1_1; - - __IO uint32_t JTAG_nTRST_PIO1_2; - __IO uint32_t PIO3_0; - __IO uint32_t PIO3_1; - __IO uint32_t PIO2_3; - __IO uint32_t ARM_SWDIO_PIO1_3; - __IO uint32_t PIO1_4; - __IO uint32_t PIO1_11; - __IO uint32_t PIO3_2; - - __IO uint32_t PIO1_5; - __IO uint32_t PIO1_6; - __IO uint32_t PIO1_7; - __IO uint32_t PIO3_3; - __IO uint32_t SCKLOC; /* For HB1 only, new feature */ -} LPC_IOCON_TypeDef; - - -/*------------- Power Management Unit (PMU) --------------------------*/ -typedef struct -{ - __IO uint32_t PCON; - __IO uint32_t GPREG0; - __IO uint32_t GPREG1; - __IO uint32_t GPREG2; - __IO uint32_t GPREG3; - __IO uint32_t GPREG4; -} LPC_PMU_TypeDef; - - -/*------------- General Purpose Input/Output (GPIO) --------------------------*/ -typedef struct -{ - union { - __IO uint32_t MASKED_ACCESS[4096]; - struct { - uint32_t RESERVED0[4095]; - __IO uint32_t DATA; - }; - }; - uint32_t RESERVED1[4096]; - __IO uint32_t DIR; - __IO uint32_t IS; - __IO uint32_t IBE; - __IO uint32_t IEV; - __IO uint32_t IE; - __IO uint32_t RIS; - __IO uint32_t MIS; - __IO uint32_t IC; -} LPC_GPIO_TypeDef; - - -/*------------- Timer (TMR) --------------------------------------------------*/ -typedef struct -{ - __IO uint32_t IR; - __IO uint32_t TCR; - __IO uint32_t TC; - __IO uint32_t PR; - __IO uint32_t PC; - __IO uint32_t MCR; - __IO uint32_t MR0; - __IO uint32_t MR1; - __IO uint32_t MR2; - __IO uint32_t MR3; - __IO uint32_t CCR; - __I uint32_t CR0; - uint32_t RESERVED1[3]; - __IO uint32_t EMR; - uint32_t RESERVED2[12]; - __IO uint32_t CTCR; - __IO uint32_t PWMC; -} LPC_TMR_TypeDef; - -/*------------- Universal Asynchronous Receiver Transmitter (UART) -----------*/ -typedef struct -{ - union { - __I uint32_t RBR; - __O uint32_t THR; - __IO uint32_t DLL; - }; - union { - __IO uint32_t DLM; - __IO uint32_t IER; - }; - union { - __I uint32_t IIR; - __O uint32_t FCR; - }; - __IO uint32_t LCR; - __IO uint32_t MCR; - __I uint32_t LSR; - __I uint32_t MSR; - __IO uint32_t SCR; - __IO uint32_t ACR; - __IO uint32_t ICR; - __IO uint32_t FDR; - uint32_t RESERVED0; - __IO uint32_t TER; - uint32_t RESERVED1[6]; - __IO uint32_t RS485CTRL; - __IO uint32_t ADRMATCH; - __IO uint32_t RS485DLY; - __I uint32_t FIFOLVL; -} LPC_UART_TypeDef; - -/*------------- Synchronous Serial Communication (SSP) -----------------------*/ -typedef struct -{ - __IO uint32_t CR0; - __IO uint32_t CR1; - __IO uint32_t DR; - __I uint32_t SR; - __IO uint32_t CPSR; - __IO uint32_t IMSC; - __IO uint32_t RIS; - __IO uint32_t MIS; - __IO uint32_t ICR; -} LPC_SSP_TypeDef; - -/*------------- Inter-Integrated Circuit (I2C) -------------------------------*/ -typedef struct -{ - __IO uint32_t CONSET; - __I uint32_t STAT; - __IO uint32_t DAT; - __IO uint32_t ADR0; - __IO uint32_t SCLH; - __IO uint32_t SCLL; - __O uint32_t CONCLR; - __IO uint32_t MMCTRL; - __IO uint32_t ADR1; - __IO uint32_t ADR2; - __IO uint32_t ADR3; - __I uint32_t DATA_BUFFER; - __IO uint32_t MASK0; - __IO uint32_t MASK1; - __IO uint32_t MASK2; - __IO uint32_t MASK3; -} LPC_I2C_TypeDef; - -/*------------- Watchdog Timer (WDT) -----------------------------------------*/ -typedef struct -{ - __IO uint32_t MOD; - __IO uint32_t TC; - __O uint32_t FEED; - __I uint32_t TV; -} LPC_WDT_TypeDef; - -/*------------- Analog-to-Digital Converter (ADC) ----------------------------*/ -typedef struct -{ - __IO uint32_t CR; - __IO uint32_t GDR; - uint32_t RESERVED0; - __IO uint32_t INTEN; - __I uint32_t DR0; - __I uint32_t DR1; - __I uint32_t DR2; - __I uint32_t DR3; - __I uint32_t DR4; - __I uint32_t DR5; - __I uint32_t DR6; - __I uint32_t DR7; - __I uint32_t STAT; -} LPC_ADC_TypeDef; - - -/*------------- Universal Serial Bus (USB) -----------------------------------*/ -typedef struct -{ - __I uint32_t DevIntSt; /* USB Device Interrupt Registers */ - __IO uint32_t DevIntEn; - __O uint32_t DevIntClr; - __O uint32_t DevIntSet; - - __O uint32_t CmdCode; /* USB Device SIE Command Registers */ - __I uint32_t CmdData; - - __I uint32_t RxData; /* USB Device Transfer Registers */ - __O uint32_t TxData; - __I uint32_t RxPLen; - __O uint32_t TxPLen; - __IO uint32_t Ctrl; - __O uint32_t DevFIQSel; -} LPC_USB_TypeDef; - -#if defined ( __CC_ARM ) -#pragma no_anon_unions -#endif - - -/******************************************************************************/ -/* Peripheral memory map */ -/******************************************************************************/ -/* Base addresses */ -#define LPC_FLASH_BASE (0x00000000UL) -#define LPC_RAM_BASE (0x10000000UL) -#define LPC_APB0_BASE (0x40000000UL) -#define LPC_AHB_BASE (0x50000000UL) - -/* APB0 peripherals */ -#define LPC_I2C_BASE (LPC_APB0_BASE + 0x00000) -#define LPC_WDT_BASE (LPC_APB0_BASE + 0x04000) -#define LPC_UART_BASE (LPC_APB0_BASE + 0x08000) -#define LPC_CT16B0_BASE (LPC_APB0_BASE + 0x0C000) -#define LPC_CT16B1_BASE (LPC_APB0_BASE + 0x10000) -#define LPC_CT32B0_BASE (LPC_APB0_BASE + 0x14000) -#define LPC_CT32B1_BASE (LPC_APB0_BASE + 0x18000) -#define LPC_ADC_BASE (LPC_APB0_BASE + 0x1C000) -#define LPC_USB_BASE (LPC_APB0_BASE + 0x20000) -#define LPC_PMU_BASE (LPC_APB0_BASE + 0x38000) -#define LPC_SSP_BASE (LPC_APB0_BASE + 0x40000) -#define LPC_IOCON_BASE (LPC_APB0_BASE + 0x44000) -#define LPC_SYSCON_BASE (LPC_APB0_BASE + 0x48000) - -/* AHB peripherals */ -#define LPC_GPIO_BASE (LPC_AHB_BASE + 0x00000) -#define LPC_GPIO0_BASE (LPC_AHB_BASE + 0x00000) -#define LPC_GPIO1_BASE (LPC_AHB_BASE + 0x10000) -#define LPC_GPIO2_BASE (LPC_AHB_BASE + 0x20000) -#define LPC_GPIO3_BASE (LPC_AHB_BASE + 0x30000) - -/******************************************************************************/ -/* Peripheral declaration */ -/******************************************************************************/ -#define LPC_I2C ((LPC_I2C_TypeDef *) LPC_I2C_BASE ) -#define LPC_WDT ((LPC_WDT_TypeDef *) LPC_WDT_BASE ) -#define LPC_UART ((LPC_UART_TypeDef *) LPC_UART_BASE ) -#define LPC_TMR16B0 ((LPC_TMR_TypeDef *) LPC_CT16B0_BASE) -#define LPC_TMR16B1 ((LPC_TMR_TypeDef *) LPC_CT16B1_BASE) -#define LPC_TMR32B0 ((LPC_TMR_TypeDef *) LPC_CT32B0_BASE) -#define LPC_TMR32B1 ((LPC_TMR_TypeDef *) LPC_CT32B1_BASE) -#define LPC_ADC ((LPC_ADC_TypeDef *) LPC_ADC_BASE ) -#define LPC_PMU ((LPC_PMU_TypeDef *) LPC_PMU_BASE ) -#define LPC_SSP ((LPC_SSP_TypeDef *) LPC_SSP_BASE ) -#define LPC_IOCON ((LPC_IOCON_TypeDef *) LPC_IOCON_BASE ) -#define LPC_SYSCON ((LPC_SYSCON_TypeDef *) LPC_SYSCON_BASE) -#define LPC_USB ((LPC_USB_TypeDef *) LPC_USB_BASE ) -#define LPC_GPIO0 ((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE ) -#define LPC_GPIO1 ((LPC_GPIO_TypeDef *) LPC_GPIO1_BASE ) -#define LPC_GPIO2 ((LPC_GPIO_TypeDef *) LPC_GPIO2_BASE ) -#define LPC_GPIO3 ((LPC_GPIO_TypeDef *) LPC_GPIO3_BASE ) - -#endif // __LPC13xx_H__ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/hal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/hal_lld.c deleted file mode 100644 index de8cba9..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/hal_lld.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC13xx/hal_lld.c - * @brief LPC13xx HAL subsystem low level driver source. - * - * @addtogroup LPC13xx_HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/** - * @brief Register missing in NXP header file. - */ -#define FLASHCFG (*((volatile uint32_t *)0x4003C010)) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - */ -const PALConfig pal_default_config = { - {VAL_GPIO0DATA, VAL_GPIO0DIR}, - {VAL_GPIO1DATA, VAL_GPIO1DIR}, - {VAL_GPIO2DATA, VAL_GPIO2DIR}, - {VAL_GPIO3DATA, VAL_GPIO3DIR}, -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - - /* SysTick initialization using the system clock.*/ - NVICSetSystemHandlerPriority(HANDLER_SYSTICK, CORTEX_PRIORITY_SYSTICK); - SysTick->LOAD = LPC13xx_SYSCLK / CH_FREQUENCY - 1; - SysTick->VAL = 0; - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_ENABLE_Msk | - SysTick_CTRL_TICKINT_Msk; -} - -/** - * @brief LPC13xx clocks and PLL initialization. - * @note All the involved constants come from the file @p board.h. - */ -void LPC13xx_clock_init(void) { - unsigned i; - - /* Flash wait states setting, the code takes care to not touch TBD bits.*/ - FLASHCFG = (FLASHCFG & ~3) | LPC13xx_FLASHCFG_FLASHTIM; - - /* System oscillator initialization if required.*/ -#if LPC13xx_MAINCLK_SOURCE == SYSMAINCLKSEL_PLLOUT -#if LPC13xx_PLLCLK_SOURCE == SYSPLLCLKSEL_SYSOSC - LPC_SYSCON->SYSOSCCTRL = LPC13xx_SYSOSCCTRL; - LPC_SYSCON->PDRUNCFG &= ~(1 << 5); /* System oscillator ON. */ - for (i = 0; i < 200; i++) - __NOP(); /* Stabilization delay. */ -#endif /* LPC13xx_PLLCLK_SOURCE == SYSPLLCLKSEL_SYSOSC */ - - /* PLL initialization if required.*/ - LPC_SYSCON->SYSPLLCLKSEL = LPC13xx_PLLCLK_SOURCE; - LPC_SYSCON->SYSPLLCLKUEN = 1; /* Really required? */ - LPC_SYSCON->SYSPLLCLKUEN = 0; - LPC_SYSCON->SYSPLLCLKUEN = 1; - LPC_SYSCON->SYSPLLCTRL = LPC13xx_SYSPLLCTRL_MSEL | LPC13xx_SYSPLLCTRL_PSEL; - LPC_SYSCON->PDRUNCFG &= ~(1 << 7); /* System PLL ON. */ - while ((LPC_SYSCON->SYSPLLSTAT & 1) == 0) /* Wait PLL lock. */ - ; -#endif /* LPC13xx_MAINCLK_SOURCE == SYSMAINCLKSEL_PLLOUT */ - - /* Main clock source selection.*/ - LPC_SYSCON->MAINCLKSEL = LPC13xx_MAINCLK_SOURCE; - LPC_SYSCON->MAINCLKUEN = 1; /* Really required? */ - LPC_SYSCON->MAINCLKUEN = 0; - LPC_SYSCON->MAINCLKUEN = 1; - while ((LPC_SYSCON->MAINCLKUEN & 1) == 0) /* Wait switch completion. */ - ; - - /* ABH divider initialization, peripheral clocks are initially disabled, - the various device drivers will handle their own setup except GPIO and - IOCON that are left enabled.*/ - LPC_SYSCON->SYSAHBCLKDIV = LPC13xx_SYSABHCLK_DIV; - LPC_SYSCON->SYSAHBCLKCTRL = 0x0001005F; - - /* Peripheral clock dividers initialization.*/ - LPC_SYSCON->UARTCLKDIV = LPC13xx_UART_PCLK_DIV; - - /* Memory remapping, vectors always in ROM.*/ - LPC_SYSCON->SYSMEMREMAP = 2; -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/hal_lld.h deleted file mode 100644 index 8af3ce3..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/hal_lld.h +++ /dev/null @@ -1,237 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC13xx/hal_lld.h - * @brief HAL subsystem low level driver header template. - * - * @addtogroup LPC13xx_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -#include "LPC13xx.h" -#include "nvic.h" - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "LPC13xx" - -#define IRCOSCCLK 12000000 /**< High speed internal clock. */ -#define WDGOSCCLK 1600000 /**< Watchdog internal clock. */ - -#define SYSPLLCLKSEL_IRCOSC 0 /**< Internal RC oscillator - clock source. */ -#define SYSPLLCLKSEL_SYSOSC 1 /**< System oscillator clock - source. */ - -#define SYSMAINCLKSEL_IRCOSC 0 /**< Clock source is IRC. */ -#define SYSMAINCLKSEL_PLLIN 1 /**< Clock source is PLLIN. */ -#define SYSMAINCLKSEL_WDGOSC 2 /**< Clock source is WDGOSC. */ -#define SYSMAINCLKSEL_PLLOUT 3 /**< Clock source is PLLOUT. */ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief System PLL clock source. - */ -#if !defined(LPC13xx_PLLCLK_SOURCE) || defined(__DOXYGEN__) -#define LPC13xx_PLLCLK_SOURCE SYSPLLCLKSEL_SYSOSC -#endif - -/** - * @brief System PLL multiplier. - * @note The value must be in the 1..32 range and the final frequency - * must not exceed the CCO ratings. - */ -#if !defined(LPC13xx_SYSPLL_MUL) || defined(__DOXYGEN__) -#define LPC13xx_SYSPLL_MUL 6 -#endif - -/** - * @brief System PLL divider. - * @note The value must be chosen between (2, 4, 8, 16). - */ -#if !defined(LPC13xx_SYSPLL_DIV) || defined(__DOXYGEN__) -#define LPC13xx_SYSPLL_DIV 4 -#endif - -/** - * @brief System main clock source. - */ -#if !defined(LPC13xx_MAINCLK_SOURCE) || defined(__DOXYGEN__) -#define LPC13xx_MAINCLK_SOURCE SYSMAINCLKSEL_PLLOUT -#endif - -/** - * @brief AHB clock divider. - * @note The value must be chosen between (1...255). - */ -#if !defined(LPC13xx_SYSCLK_DIV) || defined(__DOXYGEN__) -#define LPC13xx_SYSABHCLK_DIV 1 -#endif - -/** - * @brief UART clock divider. - * @note The value must be chosen between (1...255). - */ -#if !defined(LPC13xx_UART_PCLK_DIV) || defined(__DOXYGEN__) -#define LPC13xx_UART_PCLK_DIV 1 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/** - * @brief Calculated SYSOSCCTRL setting. - */ -#if (SYSOSCCLK < 18000000) || defined(__DOXYGEN__) -#define LPC13xx_SYSOSCCTRL 0 -#else -#define LPC13xx_SYSOSCCTRL 1 -#endif - -/** - * @brief PLL input clock frequency. - */ -#if (LPC13xx_PLLCLK_SOURCE == SYSPLLCLKSEL_SYSOSC) || defined(__DOXYGEN__) -#define LPC13xx_SYSPLLCLKIN SYSOSCCLK -#elif LPC13xx_PLLCLK_SOURCE == SYSPLLCLKSEL_IRCOCS -#define LPC13xx_SYSPLLCLKIN IRCOSCCLK -#else -#error "invalid LPC13xx_PLLCLK_SOURCE clock source specified" -#endif - -/** - * @brief MSEL mask in SYSPLLCTRL register. - */ -#if (LPC13xx_SYSPLL_MUL >= 1) && (LPC13xx_SYSPLL_MUL <= 32) || \ - defined(__DOXYGEN__) -#define LPC13xx_SYSPLLCTRL_MSEL (LPC13xx_SYSPLL_MUL - 1) -#else -#error "LPC13xx_SYSPLL_MUL out of range (1...32)" -#endif - -/** - * @brief PSEL mask in SYSPLLCTRL register. - */ -#if (LPC13xx_SYSPLL_DIV == 2) || defined(__DOXYGEN__) -#define LPC13xx_SYSPLLCTRL_PSEL (0 << 5) -#elif LPC13xx_SYSPLL_DIV == 4 -#define LPC13xx_SYSPLLCTRL_PSEL (1 << 5) -#elif LPC13xx_SYSPLL_DIV == 8 -#define LPC13xx_SYSPLLCTRL_PSEL (2 << 5) -#elif LPC13xx_SYSPLL_DIV == 16 -#define LPC13xx_SYSPLLCTRL_PSEL (3 << 5) -#else -#error "invalid LPC13xx_SYSPLL_DIV value (2,4,8,16)" -#endif - -/** - * @brief CCP frequency. - */ -#define LPC13xx_SYSPLLCCO (LPC13xx_SYSPLLCLKIN * LPC13xx_SYSPLL_MUL * \ - LPC13xx_SYSPLL_DIV) - -#if (LPC13xx_SYSPLLCCO < 156000000) || (LPC13xx_SYSPLLCCO > 320000000) -#error "CCO frequency out of the acceptable range (156...320)" -#endif - -/** - * @brief PLL output clock frequency. - */ -#define LPC13xx_SYSPLLCLKOUT (LPC13xx_SYSPLLCCO / LPC13xx_SYSPLL_DIV) - -#if (LPC13xx_MAINCLK_SOURCE == SYSMAINCLKSEL_IRCOCS) || defined(__DOXYGEN__) -#define LPC13xx_MAINCLK IRCOSCCLK -#elif LPC13xx_MAINCLK_SOURCE == SYSMAINCLKSEL_PLLIN -#define LPC13xx_MAINCLK LPC13xx_SYSPLLCLKIN -#elif LPC13xx_MAINCLK_SOURCE == SYSMAINCLKSEL_WDGOSC -#define LPC13xx_MAINCLK WDGOSCCLK -#elif LPC13xx_MAINCLK_SOURCE == SYSMAINCLKSEL_PLLOUT -#define LPC13xx_MAINCLK LPC13xx_SYSPLLCLKOUT -#else -#error "invalid LPC13xx_MAINCLK_SOURCE clock source specified" -#endif - -/** - * @brief AHB clock. - */ -#define LPC13xx_SYSCLK (LPC13xx_MAINCLK / LPC13xx_SYSABHCLK_DIV) -#if LPC13xx_SYSCLK > 72000000 -#error "AHB clock frequency out of the acceptable range (72MHz max)" -#endif - -/** - * @brief Flash wait states. - */ -#if (LPC13xx_SYSCLK <= 20000000) || defined(__DOXYGEN__) -#define LPC13xx_FLASHCFG_FLASHTIM 0 -#elif LPC13xx_SYSCLK <= 40000000 -#define LPC13xx_FLASHCFG_FLASHTIM 1 -#else -#define LPC13xx_FLASHCFG_FLASHTIM 2 -#endif - -/** - * @brief UART clock. - */ -#define LPC13xx_UART_PCLK (LPC13xx_MAINCLK / LPC13xx_UART_PCLK_DIV) - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); - void LPC13xx_clock_init(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/pal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/pal_lld.c deleted file mode 100644 index 8644e35..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/pal_lld.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC13xx/pal_lld.c - * @brief LPC13xx GPIO low level driver code. - * - * @addtogroup LPC13xx_PAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ -/** - * @brief LPC13xx I/O ports configuration. - * @details GPIO unit registers initialization. - * - * @param[in] config the LPC13xx ports configuration - */ -void _pal_lld_init(const PALConfig *config) { - - LPC_GPIO0->DIR = config->P0.dir; - LPC_GPIO1->DIR = config->P1.dir; - LPC_GPIO2->DIR = config->P2.dir; - LPC_GPIO3->DIR = config->P3.dir; - LPC_GPIO0->DATA = config->P0.data; - LPC_GPIO1->DATA = config->P1.data; - LPC_GPIO2->DATA = config->P2.data; - LPC_GPIO3->DATA = config->P3.data; -} - -/** - * @brief Pads mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - * - * @note This function is not meant to be invoked directly by the application - * code. - * @note @p PAL_MODE_UNCONNECTED is implemented as push pull output with high - * state. - * @note This function does not alter the @p PINSELx registers. Alternate - * functions setup must be handled by device-specific code. - */ -void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode) { - - switch (mode & PAL_MODE_MASK) { - case PAL_MODE_RESET: - case PAL_MODE_INPUT: - port->DIR &= ~mask; - break; - case PAL_MODE_UNCONNECTED: - palSetPort(port, PAL_WHOLE_PORT); - case PAL_MODE_OUTPUT_PUSHPULL: - port->DIR |= mask; - break; - } -} - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/pal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/pal_lld.h deleted file mode 100644 index 6034377..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/pal_lld.h +++ /dev/null @@ -1,316 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC13xx/pal_lld.h - * @brief LPC13xx GPIO low level driver header. - * - * @addtogroup LPC13xx_PAL - * @{ - */ - -#ifndef _PAL_LLD_H_ -#define _PAL_LLD_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Unsupported modes and specific modes */ -/*===========================================================================*/ - -#undef PAL_MODE_INPUT_PULLUP -#undef PAL_MODE_INPUT_PULLDOWN -#undef PAL_MODE_INPUT_ANALOG -#undef PAL_MODE_OUTPUT_OPENDRAIN - -/*===========================================================================*/ -/* I/O Ports Types and constants. */ -/*===========================================================================*/ - -/** - * @brief GPIO port setup info. - */ -typedef struct { - /** Initial value for FIO_PIN register.*/ - uint32_t data; - /** Initial value for FIO_DIR register.*/ - uint32_t dir; -} LPC13xx_gpio_setup_t; - -/** - * @brief GPIO static initializer. - * @details An instance of this structure must be passed to @p palInit() at - * system startup time in order to initialized the digital I/O - * subsystem. This represents only the initial setup, specific pads - * or whole ports can be reprogrammed at later time. - * @note The @p IOCON block is not configured, initially all pins have - * enabled pullups and are programmed as GPIO. It is responsibility - * of the various drivers to reprogram the pins in the proper mode. - * Pins that are not handled by any driver may be programmed in - * @p board.c. - */ -typedef struct { - /** @brief GPIO 0 setup data.*/ - LPC13xx_gpio_setup_t P0; - /** @brief GPIO 1 setup data.*/ - LPC13xx_gpio_setup_t P1; - /** @brief GPIO 2 setup data.*/ - LPC13xx_gpio_setup_t P2; - /** @brief GPIO 3 setup data.*/ - LPC13xx_gpio_setup_t P3; -} PALConfig; - -/** - * @brief Width, in bits, of an I/O port. - */ -#define PAL_IOPORTS_WIDTH 32 - -/** - * @brief Whole port mask. - * @brief This macro specifies all the valid bits into a port. - */ -#define PAL_WHOLE_PORT ((ioportmask_t)0xFFF) - -/** - * @brief Digital I/O port sized unsigned type. - */ -typedef uint32_t ioportmask_t; - -/** - * @brief Port Identifier. - */ -typedef LPC_GPIO_TypeDef *ioportid_t; - -/*===========================================================================*/ -/* I/O Ports Identifiers. */ -/*===========================================================================*/ - -/** - * @brief GPIO0 port identifier. - */ -#define IOPORT1 LPC_GPIO0 -#define GPIO0 LPC_GPIO0 - -/** - * @brief GPIO1 port identifier. - */ -#define IOPORT2 LPC_GPIO1 -#define GPIO1 LPC_GPIO1 - -/** - * @brief GPIO2 port identifier. - */ -#define IOPORT3 LPC_GPIO2 -#define GPIO2 LPC_GPIO2 - -/** - * @brief GPIO3 port identifier. - */ -#define IOPORT4 LPC_GPIO3 -#define GPIO3 LPC_GPIO3 - -/*===========================================================================*/ -/* Implementation, some of the following macros could be implemented as */ -/* functions, if so please put them in pal_lld.c. */ -/*===========================================================================*/ - -/** - * @brief Low level PAL subsystem initialization. - * - * @param[in] config architecture-dependent ports configuration - */ -#define pal_lld_init(config) _pal_lld_init(config) - -/** - * @brief Reads the physical I/O port states. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The port bits. - */ -#define pal_lld_readport(port) ((port)->DATA) - -/** - * @brief Reads the output latch. - * @details The purpose of this function is to read back the latched output - * value. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The latched logical states. - */ -#define pal_lld_readlatch(port) ((port)->DATA) - -/** - * @brief Writes a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @param[in] bits bits to be written on the specified port - */ -#define pal_lld_writeport(port, bits) ((port)->DATA = (bits)) - -/** - * @brief Sets a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] bits bits to be ORed on the specified port - */ -#define pal_lld_setport(port, bits) ((port)->MASKED_ACCESS[bits] = 0xFFFFFFFF) - -/** - * @brief Clears a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] bits bits to be cleared on the specified port - */ -#define pal_lld_clearport(port, bits) ((port)->MASKED_ACCESS[bits] = 0) - -/** - * @brief Reads a group of bits. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] offset group bit offset within the port - * @return The group logical states. - */ -#define pal_lld_readgroup(port, mask, offset) \ - ((port)->MASKED_ACCESS[(mask) << (offset)]) - -/** - * @brief Writes a group of bits. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] offset group bit offset within the port - * @param[in] bits bits to be written. Values exceeding the group width - * are masked. - */ -#define pal_lld_writegroup(port, mask, offset, bits) \ - ((port)->MASKED_ACCESS[(mask) << (offset)] = (bits)) - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Programming an unknown or unsupported mode is silently ignored. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] mode group mode - */ -#define pal_lld_setgroupmode(port, mask, mode) \ - _pal_lld_setgroupmode(port, mask, mode) - -/** - * @brief Writes a logical state on an output pad. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - * @param[out] bit logical value, the value must be @p PAL_LOW or - * @p PAL_HIGH - */ -#define pal_lld_writepad(port, pad, bit) \ - ((port)->MASKED_ACCESS[(mask) << (pad)] = (bit) << (pad)) - -/** - * @brief Sets a pad logical state to @p PAL_HIGH. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - */ -#define pal_lld_setpad(port, pad) \ - ((port)->MASKED_ACCESS[1 << (pad)] = 1 << (pad)) - -/** - * @brief Clears a pad logical state to @p PAL_LOW. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - */ -#define pal_lld_clearpad(port, pad) \ - ((port)->MASKED_ACCESS[1 << (pad)] = 0) - -#if !defined(__DOXYGEN__) -extern const PALConfig pal_default_config; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void _pal_lld_init(const PALConfig *config); - void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PAL */ - -#endif /* _PAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/platform.dox b/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/platform.dox deleted file mode 100644 index 1cebb33..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/platform.dox +++ /dev/null @@ -1,82 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup LPC13xx LPC13xx Support - * @brief LPC13xx specific support. - * @details The LPC13xx support includes: - * - I/O ports driver. - * - Buffered, interrupt driven, serial driver. - * - A demo supporting the kernel test suite. - * . - * @ingroup ARMCMx - */ - -/** - * @defgroup LPC13xx_HAL LPC13xx HAL Support - * @brief HAL support. - * - * @ingroup LPC13xx - */ - -/** - * @defgroup LPC13xx_PAL LPC13xx I/O Ports Support - * @brief I/O Ports peripherals support. - * @details This module supports the LPC13xx GPIO controller. The controller - * supports the following features (see @ref PAL): - * - 12 bits wide ports. - * - Atomic set/reset functions. - * - Atomic set+reset function (atomic bus operations). - * - Output latched regardless of the pad setting. - * - Direct read of input pads regardless of the pad setting. - * . - *

      Supported Setup Modes

      - * - @p PAL_MODE_RESET. - * - @p PAL_MODE_UNCONNECTED. - * - @p PAL_MODE_INPUT. - * - @p PAL_MODE_OUTPUT_PUSHPULL. - * . - * Any attempt to setup an invalid mode is ignored. - * - *

      Suboptimal Behavior

      - * Some GPIO features are less than optimal: - * - Pad/port toggling operations are not atomic. - * - Pull-up and Pull-down resistors cannot be programmed through the PAL - * driver and must be programmed separately. - * - Reading of the output latch for pads programmed as input is not possible, - * the input pin value is returned instead. - * . - * @ingroup LPC13xx - */ - -/** - * @defgroup LPC13xx_SERIAL LPC13xx UART Support - * @brief UART peripherals support. - * @details The serial driver supports the LPC13xx UART taking advantage of - * its deep hardware buffers. - * - * @ingroup LPC13xx - */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/platform.mk b/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/platform.mk deleted file mode 100644 index 9966feb..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/platform.mk +++ /dev/null @@ -1,7 +0,0 @@ -# List of all the LPC13xx platform files. -PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/LPC13xx/hal_lld.c \ - ${CHIBIOS}/os/hal/platforms/LPC13xx/pal_lld.c \ - ${CHIBIOS}/os/hal/platforms/LPC13xx/serial_lld.c - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/platforms/LPC13xx diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/serial_lld.c deleted file mode 100644 index 19c7c63..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/serial_lld.c +++ /dev/null @@ -1,297 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC13xx/serial_lld.c - * @brief LPC13xx low level serial driver code. - * - * @addtogroup LPC13xx_SERIAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -#if USE_LPC13xx_UART0 || defined(__DOXYGEN__) -/** @brief UART0 serial driver identifier.*/ -SerialDriver SD1; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** @brief Driver default configuration.*/ -static const SerialConfig default_config = { - SERIAL_DEFAULT_BITRATE, - LCR_WL8 | LCR_STOP1 | LCR_NOPARITY, - FCR_TRIGGER0 -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/** - * @brief UART initialization. - * - * @param[in] sdp communication channel associated to the UART - * @param[in] config the architecture-dependent serial driver configuration - */ -static void uart_init(SerialDriver *sdp, const SerialConfig *config) { - LPC_UART_TypeDef *u = sdp->uart; - - uint32_t div = LPC13xx_UART_PCLK / (config->sc_speed << 4); - u->LCR = config->sc_lcr | LCR_DLAB; - u->DLL = div; - u->DLM = div >> 8; - u->LCR = config->sc_lcr; - u->FCR = FCR_ENABLE | FCR_RXRESET | FCR_TXRESET | config->sc_fcr; - u->ACR = 0; - u->FDR = 0x10; - u->TER = TER_ENABLE; - u->IER = IER_RBR | IER_STATUS; -} - -/** - * @brief UART de-initialization. - * - * @param[in] u pointer to an UART I/O block - */ -static void uart_deinit(LPC_UART_TypeDef *u) { - - u->LCR = LCR_DLAB; - u->DLL = 1; - u->DLM = 0; - u->LCR = 0; - u->FDR = 0x10; - u->IER = 0; - u->FCR = FCR_RXRESET | FCR_TXRESET; - u->ACR = 0; - u->TER = TER_ENABLE; -} - -/** - * @brief Error handling routine. - * - * @param[in] sdp communication channel associated to the UART - * @param[in] err UART LSR register value - */ -static void set_error(SerialDriver *sdp, IOREG32 err) { - sdflags_t sts = 0; - - if (err & LSR_OVERRUN) - sts |= SD_OVERRUN_ERROR; - if (err & LSR_PARITY) - sts |= SD_PARITY_ERROR; - if (err & LSR_FRAMING) - sts |= SD_FRAMING_ERROR; - if (err & LSR_BREAK) - sts |= SD_BREAK_DETECTED; - chSysLockFromIsr(); - sdAddFlagsI(sdp, sts); - chSysUnlockFromIsr(); -} - -/** - * @brief Common IRQ handler. - * @note Tries hard to clear all the pending interrupt sources, we don't - * want to go through the whole ISR and have another interrupt soon - * after. - * - * @param[in] u pointer to an UART I/O block - * @param[in] sdp communication channel associated to the UART - */ -static void serve_interrupt(SerialDriver *sdp) { - LPC_UART_TypeDef *u = sdp->uart; - - while (TRUE) { - switch (u->IIR & IIR_SRC_MASK) { - case IIR_SRC_NONE: - return; - case IIR_SRC_ERROR: - set_error(sdp, u->LSR); - break; - case IIR_SRC_TIMEOUT: - case IIR_SRC_RX: - chSysLockFromIsr(); - if (chIQIsEmpty(&sdp->iqueue)) - chEvtBroadcastI(&sdp->ievent); - chSysUnlockFromIsr(); - while (u->LSR & LSR_RBR_FULL) { - chSysLockFromIsr(); - if (chIQPutI(&sdp->iqueue, u->RBR) < Q_OK) - sdAddFlagsI(sdp, SD_OVERRUN_ERROR); - chSysUnlockFromIsr(); - } - break; - case IIR_SRC_TX: - { - int i = LPC13xx_UART_FIFO_PRELOAD; - do { - msg_t b; - - chSysLockFromIsr(); - b = chOQGetI(&sdp->oqueue); - chSysUnlockFromIsr(); - if (b < Q_OK) { - u->IER &= ~IER_THRE; - chSysLockFromIsr(); - chEvtBroadcastI(&sdp->oevent); - chSysUnlockFromIsr(); - break; - } - u->THR = b; - } while (--i); - } - break; - default: - (void) u->THR; - (void) u->RBR; - } - } -} - -/** - * @brief Attempts a TX FIFO preload. - */ -static void preload(SerialDriver *sdp) { - LPC_UART_TypeDef *u = sdp->uart; - - if (u->LSR & LSR_THRE) { - int i = LPC13xx_UART_FIFO_PRELOAD; - do { - msg_t b = chOQGetI(&sdp->oqueue); - if (b < Q_OK) { - chEvtBroadcastI(&sdp->oevent); - return; - } - u->THR = b; - } while (--i); - } - u->IER |= IER_THRE; -} - -/** - * @brief Driver SD1 output notification. - */ -#if USE_LPC13xx_UART0 || defined(__DOXYGEN__) -static void notify1(void) { - - preload(&SD1); -} -#endif - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/** - * @brief UART0 IRQ handler. - */ -#if USE_LPC13xx_UART0 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(VectorF8) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD1); - - CH_IRQ_EPILOGUE(); -} -#endif - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_LPC13xx_UART0 - sdObjectInit(&SD1, NULL, notify1); - SD1.uart = LPC_UART; - LPC_IOCON->PIO1_6 = 0xC1; /* RDX without resistors. */ - LPC_IOCON->PIO1_7 = 0xC1; /* TDX without resistors. */ -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - - if (sdp->state == SD_STOP) { -#if USE_LPC13xx_UART0 - if (&SD1 == sdp) { - LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 12); - NVICEnableVector(UART_IRQn, - CORTEX_PRIORITY_MASK(LPC13xx_UART0_PRIORITY)); - } -#endif - } - uart_init(sdp, config); -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the UART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - - if (sdp->state == SD_READY) { - uart_deinit(sdp->uart); -#if USE_LPC13xx_UART0 - if (&SD1 == sdp) { - LPC_SYSCON->SYSAHBCLKCTRL &= ~(1 << 12); - NVICDisableVector(UART_IRQn); - return; - } -#endif - } -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/serial_lld.h deleted file mode 100644 index 34d00c3..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/serial_lld.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC13xx/serial_lld.h - * @brief LPC13xx low level serial driver header. - * - * @addtogroup LPC13xx_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -#define IIR_SRC_MASK 0x0F -#define IIR_SRC_NONE 0x01 -#define IIR_SRC_MODEM 0x00 -#define IIR_SRC_TX 0x02 -#define IIR_SRC_RX 0x04 -#define IIR_SRC_ERROR 0x06 -#define IIR_SRC_TIMEOUT 0x0C - -#define IER_RBR 1 -#define IER_THRE 2 -#define IER_STATUS 4 - -#define LCR_WL5 0 -#define LCR_WL6 1 -#define LCR_WL7 2 -#define LCR_WL8 3 -#define LCR_STOP1 0 -#define LCR_STOP2 4 -#define LCR_NOPARITY 0 -#define LCR_PARITYODD 0x08 -#define LCR_PARITYEVEN 0x18 -#define LCR_PARITYONE 0x28 -#define LCR_PARITYZERO 0x38 -#define LCR_BREAK_ON 0x40 -#define LCR_DLAB 0x80 - -#define FCR_ENABLE 1 -#define FCR_RXRESET 2 -#define FCR_TXRESET 4 -#define FCR_TRIGGER0 0 -#define FCR_TRIGGER1 0x40 -#define FCR_TRIGGER2 0x80 -#define FCR_TRIGGER3 0xC0 - -#define LSR_RBR_FULL 1 -#define LSR_OVERRUN 2 -#define LSR_PARITY 4 -#define LSR_FRAMING 8 -#define LSR_BREAK 0x10 -#define LSR_THRE 0x20 -#define LSR_TEMT 0x40 -#define LSR_RXFE 0x80 - -#define TER_ENABLE 0x80 - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief UART0 driver enable switch. - * @details If set to @p TRUE the support for UART0 is included. - * @note The default is @p TRUE . - */ -#if !defined(USE_LPC13xx_UART0) || defined(__DOXYGEN__) -#define USE_LPC13xx_UART0 TRUE -#endif - -/** - * @brief FIFO preload parameter. - * @details Configuration parameter, this values defines how many bytes are - * preloaded in the HW transmit FIFO for each interrupt, the maximum - * value is 16 the minimum is 1. - * @note An high value reduces the number of interrupts generated but can - * also increase the worst case interrupt response time because the - * preload loops. - */ -#if !defined(LPC13xx_UART_FIFO_PRELOAD) || defined(__DOXYGEN__) -#define LPC13xx_UART_FIFO_PRELOAD 16 -#endif - -/** - * @brief UART0 interrupt priority level setting. - */ -#if !defined(LPC13xx_UART0_PRIORITY) || defined(__DOXYGEN__) -#define LPC13xx_UART0_PRIORITY 3 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if (LPC13xx_UART_FIFO_PRELOAD < 1) || (LPC13xx_UART_FIFO_PRELOAD > 16) -#error "invalid LPC13xx_UART_FIFO_PRELOAD setting" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint32_t sdflags_t; - -/** - * @brief LPC13xx Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - */ -typedef struct { - /** - * @brief Bit rate. - */ - uint32_t sc_speed; - /** - * @brief Initialization value for the LCR register. - */ - uint32_t sc_lcr; - /** - * @brief Initialization value for the FCR register. - */ - uint32_t sc_fcr; -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ \ - /* Pointer to the USART registers block.*/ \ - LPC_UART_TypeDef *uart; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_LPC13xx_UART0 && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/system_LPC13xx.h b/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/system_LPC13xx.h deleted file mode 100644 index 1cb04fa..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC13xx/system_LPC13xx.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************//** - * @file system_LPC13xx.h - * @brief CMSIS Cortex-M3 Device Peripheral Access Layer Header File - * for the NXP LPC13xx Device Series - * @version V1.01 - * @date 19. October 2009 - * - * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - - -#ifndef __SYSTEM_LPC13xx_H -#define __SYSTEM_LPC13xx_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ - - -/** - * Initialize the system - * - * @param none - * @return none - * - * @brief Setup the microcontroller system. - * Initialize the System and update the SystemCoreClock variable. - */ -extern void SystemInit (void); - -/** - * Update SystemCoreClock variable - * - * @param none - * @return none - * - * @brief Updates the SystemCoreClock with current core Clock - * retrieved from cpu registers. - */ -extern void SystemCoreClockUpdate (void); - -#ifdef __cplusplus -} -#endif - -#endif /* __SYSTEM_LPC13x_H */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/hal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/hal_lld.c deleted file mode 100644 index 6d995f3..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/hal_lld.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC214x/hal_lld.c - * @brief LPC214x HAL subsystem low level driver source. - * @addtogroup LPC214x_HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - */ -const PALConfig pal_default_config = -{ - VAL_PINSEL0, - VAL_PINSEL1, - VAL_PINSEL2, - {VAL_FIO0PIN, VAL_FIO0DIR}, - {VAL_FIO1PIN, VAL_FIO1DIR} -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/* - * Non-vectored IRQs handler, the default action can be overridden by - * redefining the @p LPC214x_NON_VECTORED_IRQ_HOOK() hook macro. - */ -static CH_IRQ_HANDLER(irq_handler) { - - CH_IRQ_PROLOGUE(); - - LPC214x_NON_VECTORED_IRQ_HOOK(); - - VICVectAddr = 0; - CH_IRQ_EPILOGUE(); -} - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - - vic_init(); - VICDefVectAddr = (IOREG32)irq_handler; - -} - -/** - * @brief LPC214x clocks and PLL initialization. - * @note All the involved constants come from the file @p board.h. - */ -void lpc214x_clock_init(void) { - - /* - * All peripherals clock disabled by default in order to save power. - */ - PCONP = PCRTC | PCTIM0; - - /* - * MAM setup. - */ - MAMTIM = 0x3; /* 3 cycles for flash accesses. */ - MAMCR = 0x2; /* MAM fully enabled. */ - - /* - * PLL setup for Fosc=12MHz and CCLK=48MHz. - * P=2 M=3. - */ - PLL *pll = PLL0Base; - pll->PLL_CFG = 0x23; /* P and M values. */ - pll->PLL_CON = 0x1; /* Enables the PLL 0. */ - pll->PLL_FEED = 0xAA; - pll->PLL_FEED = 0x55; - while (!(pll->PLL_STAT & 0x400)) - ; /* Wait for PLL lock. */ - - pll->PLL_CON = 0x3; /* Connects the PLL. */ - pll->PLL_FEED = 0xAA; - pll->PLL_FEED = 0x55; - - /* - * VPB setup. - * PCLK = CCLK / 4. - */ - VPBDIV = VPD_D4; -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/hal_lld.h deleted file mode 100644 index 10cd40f..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/hal_lld.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC214x/hal_lld.h - * @brief LPC214x HAL subsystem low level driver header. - * @addtogroup LPC214x_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -#include "lpc214x.h" -#include "vic.h" - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "LPC214x" - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Default action for the non vectored IRQ handler, nothing. - */ -#if !defined(LPC214x_NON_VECTORED_IRQ_HOOK) || defined(__DOXYGEN__) -#define LPC214x_NON_VECTORED_IRQ_HOOK() -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); - void lpc214x_clock_init(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/lpc214x.h b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/lpc214x.h deleted file mode 100644 index 82c2b0c..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/lpc214x.h +++ /dev/null @@ -1,532 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file lpc214x.h - * @brief LPC214x register definitions. - */ - -#ifndef _LPC214X_H_ -#define _LPC214X_H_ - -typedef volatile uint8_t IOREG8; -typedef volatile uint16_t IOREG16; -typedef volatile uint32_t IOREG32; - -/* - * System. - */ -#define MEMMAP (*((IOREG32 *)0xE01FC040)) -#define PCON (*((IOREG32 *)0xE01FC0C0)) -#define PCONP (*((IOREG32 *)0xE01FC0C4)) -#define VPBDIV (*((IOREG32 *)0xE01FC100)) -#define EXTINT (*((IOREG32 *)0xE01FC140)) -#define INTWAKE (*((IOREG32 *)0xE01FC144)) -#define EXTMODE (*((IOREG32 *)0xE01FC148)) -#define EXTPOLAR (*((IOREG32 *)0xE01FC14C)) -#define RSID (*((IOREG32 *)0xE01FC180)) -#define CSPR (*((IOREG32 *)0xE01FC184)) -#define SCS (*((IOREG32 *)0xE01FC1A0)) - -#define VPD_D4 0 -#define VPD_D1 1 -#define VPD_D2 2 -#define VPD_RESERVED 3 - -#define PCTIM0 (1 << 1) -#define PCTIM1 (1 << 2) -#define PCUART0 (1 << 3) -#define PCUART1 (1 << 4) -#define PCPWM0 (1 << 5) -#define PCI2C0 (1 << 7) -#define PCSPI0 (1 << 8) -#define PCRTC (1 << 9) -#define PCSPI1 (1 << 10) -#define PCAD0 (1 << 12) -#define PCI2C1 (1 << 19) -#define PCAD1 (1 << 20) -#define PCUSB (1 << 31) -#define PCALL (PCTIM0 | PCTIM1 | PCUART0 | PCUART1 | \ - PCPWM0 | PCI2C0 | PCSPI0 | PCRTC | PCSPI1 | \ - PCAD0 | PCI2C1 | PCAD1 | PCUSB) - -#define EINT0 1 -#define EINT1 2 -#define EINT2 4 -#define EINT3 8 - -#define EXTWAKE0 1 -#define EXTWAKE1 2 -#define EXTWAKE2 4 -#define EXTWAKE3 8 -#define USBWAKE 0x20 -#define BODWAKE 0x4000 -#define RTCWAKE 0x8000 - -#define EXTMODE0 1 -#define EXTMODE1 2 -#define EXTMODE2 4 -#define EXTMODE3 8 - -#define EXTPOLAR0 1 -#define EXTPOLAR1 2 -#define EXTPOLAR2 4 -#define EXTPOLAR3 8 - -typedef struct { - IOREG32 PLL_CON; - IOREG32 PLL_CFG; - IOREG32 PLL_STAT; - IOREG32 PLL_FEED; -} PLL; - -#define PLL0Base ((PLL *)0xE01FC080) -#define PLL1Base ((PLL *)0xE01FC0A0) -#define PLL0CON (PLL0Base->PLL_CON) -#define PLL0CFG (PLL0Base->PLL_CFG) -#define PLL0STAT (PLL0Base->PLL_STAT) -#define PLL0FEED (PLL0Base->PLL_FEED) -#define PLL1CON (PLL1Base->PLL_CON) -#define PLL1CFG (PLL1Base->PLL_CFG) -#define PLL1STAT (PLL1Base->PLL_STAT) -#define PLL1FEED (PLL1Base->PLL_FEED) - -/* - * Pins. - */ -typedef struct { - IOREG32 PS_SEL0; - IOREG32 PS_SEL1; - IOREG32 _dummy[3]; - IOREG32 PS_SEL2; -} PS; - -#define PSBase ((PS *)0xE002C000) -#define PINSEL0 (PSBase->PS_SEL0) -#define PINSEL1 (PSBase->PS_SEL1) -#define PINSEL2 (PSBase->PS_SEL2) - -/* - * VIC - */ -#define SOURCE_WDT 0 -#define SOURCE_ARMCore0 2 -#define SOURCE_ARMCore1 3 -#define SOURCE_Timer0 4 -#define SOURCE_Timer1 5 -#define SOURCE_UART0 6 -#define SOURCE_UART1 7 -#define SOURCE_PWM0 8 -#define SOURCE_I2C0 9 -#define SOURCE_SPI0 10 -#define SOURCE_SPI1 11 -#define SOURCE_PLL 12 -#define SOURCE_RTC 13 -#define SOURCE_EINT0 14 -#define SOURCE_EINT1 15 -#define SOURCE_EINT2 16 -#define SOURCE_EINT3 17 -#define SOURCE_ADC0 18 -#define SOURCE_I2C1 19 -#define SOURCE_BOD 20 -#define SOURCE_ADC1 21 -#define SOURCE_USB 22 - -#define INTMASK(n) (1 << (n)) -#define ALLINTMASK (INTMASK(SOURCE_WDT) | INTMASK(SOURCE_ARMCore0) | \ - INTMASK(SOURCE_ARMCore1) | INTMASK(SOURCE_Timer0) | \ - INTMASK(SOURCE_Timer1) | INTMASK(SOURCE_UART0) | \ - INTMASK(SOURCE_UART1) | INTMASK(SOURCE_PWM0) | \ - INTMASK(SOURCE_I2C0) | INTMASK(SOURCE_SPI0) | \ - INTMASK(SOURCE_SPI1) | INTMASK(SOURCE_PLL) | \ - INTMASK(SOURCE_RTC) | INTMASK(SOURCE_EINT0) | \ - INTMASK(SOURCE_EINT1) | INTMASK(SOURCE_EINT2) | \ - INTMASK(SOURCE_EINT3) | INTMASK(SOURCE_ADC0) | \ - INTMASK(SOURCE_I2C1) | INTMASK(SOURCE_BOD) | \ - INTMASK(SOURCE_ADC1) | INTMASK(SOURCE_USB)) - -typedef struct { - IOREG32 VIC_IRQStatus; - IOREG32 VIC_FIQStatus; - IOREG32 VIC_RawIntr; - IOREG32 VIC_IntSelect; - IOREG32 VIC_IntEnable; - IOREG32 VIC_IntEnClear; - IOREG32 VIC_SoftInt; - IOREG32 VIC_SoftIntClear; - IOREG32 VIC_Protection; - IOREG32 unused1[3]; - IOREG32 VIC_VectAddr; - IOREG32 VIC_DefVectAddr; - IOREG32 unused2[50]; - IOREG32 VIC_VectAddrs[16]; - IOREG32 unused3[48]; - IOREG32 VIC_VectCntls[16]; -} VIC; - -#define VICBase ((VIC *)0xFFFFF000) -#define VICVectorsBase ((IOREG32 *)0xFFFFF100) -#define VICControlsBase ((IOREG32 *)0xFFFFF200) - -#define VICIRQStatus (VICBase->VIC_IRQStatus) -#define VICFIQStatus (VICBase->VIC_FIQStatus) -#define VICRawIntr (VICBase->VIC_RawIntr) -#define VICIntSelect (VICBase->VIC_IntSelect) -#define VICIntEnable (VICBase->VIC_IntEnable) -#define VICIntEnClear (VICBase->VIC_IntEnClear) -#define VICSoftInt (VICBase->VIC_SoftInt) -#define VICSoftIntClear (VICBase->VIC_SoftIntClear) -#define VICProtection (VICBase->VIC_Protection) -#define VICVectAddr (VICBase->VIC_VectAddr) -#define VICDefVectAddr (VICBase->VIC_DefVectAddr) - -#define VICVectAddrs(n) (VICBase->VIC_VectAddrs[n]) -#define VICVectCntls(n) (VICBase->VIC_VectCntls[n]) - -/* - * MAM. - */ -typedef struct { - IOREG32 MAM_Control; - IOREG32 MAM_Timing; -} MAM; - -#define MAMBase ((MAM *)0xE01FC000) -#define MAMCR (MAMBase->MAM_Control) -#define MAMTIM (MAMBase->MAM_Timing) - -/* - * GPIO - FIO. - */ -typedef struct { - IOREG32 IO_PIN; - IOREG32 IO_SET; - IOREG32 IO_DIR; - IOREG32 IO_CLR; -} GPIO; - -#define GPIO0Base ((GPIO *)0xE0028000) -#define IO0PIN (GPIO0Base->IO_PIN) -#define IO0SET (GPIO0Base->IO_SET) -#define IO0DIR (GPIO0Base->IO_DIR) -#define IO0CLR (GPIO0Base->IO_CLR) - -#define GPIO1Base ((GPIO *)0xE0028010) -#define IO1PIN (GPIO1Base->IO_PIN) -#define IO1SET (GPIO1Base->IO_SET) -#define IO1DIR (GPIO1Base->IO_DIR) -#define IO1CLR (GPIO1Base->IO_CLR) - -typedef struct { - IOREG32 FIO_DIR; - IOREG32 unused1; - IOREG32 unused2; - IOREG32 unused3; - IOREG32 FIO_MASK; - IOREG32 FIO_PIN; - IOREG32 FIO_SET; - IOREG32 FIO_CLR; -} FIO; - -#define FIO0Base ((FIO *)0x3FFFC000) -#define FIO0DIR (FIO0Base->FIO_DIR) -#define FIO0MASK (FIO0Base->FIO_MASK) -#define FIO0PIN (FIO0Base->FIO_PIN) -#define FIO0SET (FIO0Base->FIO_SET) -#define FIO0CLR (FIO0Base->FIO_CLR) - -#define FIO1Base ((FIO *)0x3FFFC020) -#define FIO1DIR (FIO1Base->FIO_DIR) -#define FIO1MASK (FIO1Base->FIO_MASK) -#define FIO1PIN (FIO1Base->FIO_PIN) -#define FIO1SET (FIO1Base->FIO_SET) -#define FIO1CLR (FIO1Base->FIO_CLR) - -/* - * UART. - */ -typedef struct { - union { - IOREG32 UART_RBR; - IOREG32 UART_THR; - IOREG32 UART_DLL; - }; - union { - IOREG32 UART_IER; - IOREG32 UART_DLM; - }; - union { - IOREG32 UART_IIR; - IOREG32 UART_FCR; - }; - IOREG32 UART_LCR; - IOREG32 UART_MCR; // UART1 only - IOREG32 UART_LSR; - IOREG32 unused18; - IOREG32 UART_SCR; - IOREG32 UART_ACR; - IOREG32 unused24; - IOREG32 UART_FDR; - IOREG32 unused2C; - IOREG32 UART_TER; -} UART; - -#define U0Base ((UART *)0xE000C000) -#define U0RBR (U0Base->UART_RBR) -#define U0THR (U0Base->UART_THR) -#define U0DLL (U0Base->UART_DLL) -#define U0IER (U0Base->UART_IER) -#define U0DLM (U0Base->UART_DLM) -#define U0IIR (U0Base->UART_IIR) -#define U0FCR (U0Base->UART_FCR) -#define U0LCR (U0Base->UART_LCR) -#define U0LSR (U0Base->UART_LSR) -#define U0SCR (U0Base->UART_SCR) -#define U0ACR (U0Base->UART_ACR) -#define U0FDR (U0Base->UART_FDR) -#define U0TER (U0Base->UART_TER) - -#define U1Base ((UART *)0xE0010000) -#define U1RBR (U1Base->UART_RBR) -#define U1THR (U1Base->UART_THR) -#define U1DLL (U1Base->UART_DLL) -#define U1IER (U1Base->UART_IER) -#define U1DLM (U1Base->UART_DLM) -#define U1IIR (U1Base->UART_IIR) -#define U1FCR (U1Base->UART_FCR) -#define U1MCR (U1Base->UART_MCR) -#define U1LCR (U1Base->UART_LCR) -#define U1LSR (U1Base->UART_LSR) -#define U1SCR (U1Base->UART_SCR) -#define U1ACR (U1Base->UART_ACR) -#define U1FDR (U1Base->UART_FDR) -#define U1TER (U1Base->UART_TER) - -#define IIR_SRC_MASK 0x0F -#define IIR_SRC_NONE 0x01 -#define IIR_SRC_TX 0x02 -#define IIR_SRC_RX 0x04 -#define IIR_SRC_ERROR 0x06 -#define IIR_SRC_TIMEOUT 0x0C - -#define IER_RBR 1 -#define IER_THRE 2 -#define IER_STATUS 4 - -#define IIR_INT_PENDING 1 - -#define LCR_WL5 0 -#define LCR_WL6 1 -#define LCR_WL7 2 -#define LCR_WL8 3 -#define LCR_STOP1 0 -#define LCR_STOP2 4 -#define LCR_NOPARITY 0 -#define LCR_PARITYODD 0x08 -#define LCR_PARITYEVEN 0x18 -#define LCR_PARITYONE 0x28 -#define LCR_PARITYZERO 0x38 -#define LCR_BREAK_ON 0x40 -#define LCR_DLAB 0x80 - -#define FCR_ENABLE 1 -#define FCR_RXRESET 2 -#define FCR_TXRESET 4 -#define FCR_TRIGGER0 0 -#define FCR_TRIGGER1 0x40 -#define FCR_TRIGGER2 0x80 -#define FCR_TRIGGER3 0xC0 - -#define LSR_RBR_FULL 1 -#define LSR_OVERRUN 2 -#define LSR_PARITY 4 -#define LSR_FRAMING 8 -#define LSR_BREAK 0x10 -#define LSR_THRE 0x20 -#define LSR_TEMT 0x40 -#define LSR_RXFE 0x80 - -#define TER_ENABLE 0x80 - -/* - * SSP. - */ -typedef struct { - IOREG32 SSP_CR0; - IOREG32 SSP_CR1; - IOREG32 SSP_DR; - IOREG32 SSP_SR; - IOREG32 SSP_CPSR; - IOREG32 SSP_IMSC; - IOREG32 SSP_RIS; - IOREG32 SSP_MIS; - IOREG32 SSP_ICR; -} SSP; - -#define SSPBase ((SSP *)0xE0068000) -#define SSPCR0 (SSPBase->SSP_CR0) -#define SSPCR1 (SSPBase->SSP_CR1) -#define SSPDR (SSPBase->SSP_DR) -#define SSPSR (SSPBase->SSP_SR) -#define SSPCPSR (SSPBase->SSP_CPSR) -#define SSPIMSC (SSPBase->SSP_IMSC) -#define SSPRIS (SSPBase->SSP_RIS) -#define SSPMIS (SSPBase->SSP_MIS) -#define SSPICR (SSPBase->SSP_ICR) - -#define CR0_DSS4BIT 3 -#define CR0_DSS5BIT 4 -#define CR0_DSS6BIT 5 -#define CR0_DSS7BIT 6 -#define CR0_DSS8BIT 7 -#define CR0_DSS9BIT 8 -#define CR0_DSS10BIT 9 -#define CR0_DSS11BIT 0xA -#define CR0_DSS12BIT 0xB -#define CR0_DSS13BIT 0xC -#define CR0_DSS14BIT 0xD -#define CR0_DSS15BIT 0xE -#define CR0_DSS16BIT 0xF -#define CR0_FRFSPI 0 -#define CR0_FRFSSI 0x10 -#define CR0_FRFMW 0x20 -#define CR0_CPOL 0x40 -#define CR0_CPHA 0x80 -#define CR0_CLOCKRATE(n) ((n) << 8) - -#define CR1_LBM 1 -#define CR1_SSE 2 -#define CR1_MS 4 -#define CR1_SOD 8 - -#define SR_TFE 1 -#define SR_TNF 2 -#define SR_RNE 4 -#define SR_RFF 8 -#define SR_BSY 0x10 - -#define IMSC_ROR 1 -#define IMSC_RT 2 -#define IMSC_RX 4 -#define IMSC_TX 8 - -#define RIS_ROR 1 -#define RIS_RT 2 -#define RIS_RX 4 -#define RIS_TX 8 - -#define MIS_ROR 1 -#define MIS_RT 2 -#define MIS_RX 4 -#define MIS_TX 8 - -#define ICR_ROR 1 -#define ICR_RT 2 - -/* - * Timers/Counters. - */ -typedef struct { - IOREG32 TC_IR; - IOREG32 TC_TCR; - IOREG32 TC_TC; - IOREG32 TC_PR; - IOREG32 TC_PC; - IOREG32 TC_MCR; - IOREG32 TC_MR0; - IOREG32 TC_MR1; - IOREG32 TC_MR2; - IOREG32 TC_MR3; - IOREG32 TC_CCR; - IOREG32 TC_CR0; - IOREG32 TC_CR1; - IOREG32 TC_CR2; - IOREG32 TC_CR3; - IOREG32 TC_EMR; - IOREG32 TC_CTCR; -} TC; - -#define T0Base ((TC *)0xE0004000) -#define T0IR (T0Base->TC_IR) -#define T0TCR (T0Base->TC_TCR) -#define T0TC (T0Base->TC_TC) -#define T0PR (T0Base->TC_PR) -#define T0PC (T0Base->TC_PC) -#define T0MCR (T0Base->TC_MCR) -#define T0MR0 (T0Base->TC_MR0) -#define T0MR1 (T0Base->TC_MR1) -#define T0MR2 (T0Base->TC_MR2) -#define T0MR3 (T0Base->TC_MR3) -#define T0CCR (T0Base->TC_CCR) -#define T0CR0 (T0Base->TC_CR0) -#define T0CR1 (T0Base->TC_CR1) -#define T0CR2 (T0Base->TC_CR2) -#define T0CR3 (T0Base->TC_CR3) -#define T0EMR (T0Base->TC_EMR) -#define T0CTCR (T0Base->TC_CTCR) - -#define T1Base ((TC *)0xE0008000) -#define T1IR (T1Base->TC_IR) -#define T1TCR (T1Base->TC_TCR) -#define T1TC (T1Base->TC_TC) -#define T1PR (T1Base->TC_PR) -#define T1PC (T1Base->TC_PC) -#define T1MCR (T1Base->TC_MCR) -#define T1MR0 (T1Base->TC_MR0) -#define T1MR1 (T1Base->TC_MR1) -#define T1MR2 (T1Base->TC_MR2) -#define T1MR3 (T1Base->TC_MR3) -#define T1CCR (T1Base->TC_CCR) -#define T1CR0 (T1Base->TC_CR0) -#define T1CR1 (T1Base->TC_CR1) -#define T1CR2 (T1Base->TC_CR2) -#define T1CR3 (T1Base->TC_CR3) -#define T1EMR (T1Base->TC_EMR) -#define T1CTCR (T1Base->TC_CTCR) - -/* - * Watchdog. - */ -typedef struct { - IOREG32 WD_MOD; - IOREG32 WD_TC; - IOREG32 WD_FEED; - IOREG32 WD_TV; -} WD; - -#define WDBase ((WD *)0xE0000000) -#define WDMOD (WDBase->WD_MOD) -#define WDTC (WDBase->WD_TC) -#define WDFEED (WDBase->WD_FEED) -#define WDTV (WDBase->WD_TV) - -/* - * DAC. - */ -#define DACR (*((IOREG32 *)0xE006C000)) - -#endif /* _LPC214X_H_ */ - diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/pal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/pal_lld.c deleted file mode 100644 index afff9e7..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/pal_lld.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC214x/pal_lld.c - * @brief LPC214x FIO low level driver code. - * @addtogroup LPC214x_PAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief LPC214x I/O ports configuration. - * @details FIO units and PINSEL registers initialization. - * - * @param[in] config the LPC214x ports configuration - */ -void _pal_lld_init(const PALConfig *config) { - - /* Enables the access through the fast registers.*/ - SCS = 3; - - /* I/O pads initial assignment, device drivers may change this setup at a - * later time.*/ - PINSEL0 = config->pinsel0; - PINSEL1 = config->pinsel1; - PINSEL2 = config->pinsel2; - - /* I/O pads direction initial setting.*/ - FIO0Base->FIO_MASK = 0; - FIO0Base->FIO_PIN = config->P0Data.pin; - FIO0Base->FIO_DIR = config->P0Data.dir; - FIO1Base->FIO_MASK = 0; - FIO1Base->FIO_PIN = config->P1Data.pin; - FIO1Base->FIO_DIR = config->P1Data.dir; -} - -/** - * @brief Pads mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - * - * @note This function is not meant to be invoked directly by the application - * code. - * @note @p PAL_MODE_UNCONNECTED is implemented as push pull output with high - * state. - * @note This function does not alter the @p PINSELx registers. Alternate - * functions setup must be handled by device-specific code. - */ -void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode) { - - switch (mode) { - case PAL_MODE_RESET: - case PAL_MODE_INPUT: - port->FIO_DIR &= ~mask; - break; - case PAL_MODE_UNCONNECTED: - port->FIO_PIN |= mask; - case PAL_MODE_OUTPUT_PUSHPULL: - port->FIO_DIR |= mask; - break; - } -} - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/pal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/pal_lld.h deleted file mode 100644 index 8521534..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/pal_lld.h +++ /dev/null @@ -1,264 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC214x/pal_lld.h - * @brief LPC214x FIO low level driver header. - * @addtogroup LPC214x_PAL - * @{ - */ - -#ifndef _PAL_LLD_H_ -#define _PAL_LLD_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Unsupported modes and specific modes */ -/*===========================================================================*/ - -#undef PAL_MODE_INPUT_PULLUP -#undef PAL_MODE_INPUT_PULLDOWN -#undef PAL_MODE_OUTPUT_OPENDRAIN - -/*===========================================================================*/ -/* I/O Ports Types and constants. */ -/*===========================================================================*/ - -/** - * @brief FIO port setup info. - */ -typedef struct { - /** Initial value for FIO_PIN register.*/ - uint32_t pin; - /** Initial value for FIO_DIR register.*/ - uint32_t dir; -} lpc214x_fio_setup_t; - -/** - * @brief LPC214x FIO static initializer. - * @details An instance of this structure must be passed to @p palInit() at - * system startup time in order to initialize the digital I/O - * subsystem. This represents only the initial setup, specific pads - * or whole ports can be reprogrammed at later time. - */ -typedef struct { - /** @brief PINSEL0 initial value.*/ - uint32_t pinsel0; - /** @brief PINSEL1 initial value.*/ - uint32_t pinsel1; - /** @brief PINSEL2 initial value.*/ - uint32_t pinsel2; - /** @brief Port 0 setup data.*/ - lpc214x_fio_setup_t P0Data; - /** @brief Port 1 setup data.*/ - lpc214x_fio_setup_t P1Data; -} PALConfig; - -/** - * @brief Width, in bits, of an I/O port. - */ -#define PAL_IOPORTS_WIDTH 32 - -/** - * @brief Digital I/O port sized unsigned type. - */ -typedef uint32_t ioportmask_t; - -/** - * @brief Port Identifier. - */ -typedef FIO * ioportid_t; - -/*===========================================================================*/ -/* I/O Ports Identifiers. */ -/*===========================================================================*/ - -/** - * @brief FIO port 0 identifier. - */ -#define IOPORT1 FIO0Base - -/** - * @brief FIO port 1 identifier. - */ -#define IOPORT2 FIO1Base - -/*===========================================================================*/ -/* Implementation, some of the following macros could be implemented as */ -/* functions, please put them in a file named ioports_lld.c if so. */ -/*===========================================================================*/ - -/** - * @brief FIO subsystem initialization. - * @details Enables the access through the fast registers. - */ -#define pal_lld_init(config) _pal_lld_init(config) - -/** - * @brief Reads an I/O port. - * @details This function is implemented by reading the FIO PIN register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @return the port bits - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_readport(port) ((port)->FIO_PIN) - -/** - * @brief Reads the output latch. - * @details This function is implemented by reading the FIO SET register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @return The latched logical states. - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_readlatch(port) ((port)->FIO_SET) - -/** - * @brief Writes a bits mask on a I/O port. - * @details This function is implemented by writing the FIO PIN register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @param[in] bits the bits to be written on the specified port - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_writeport(port, bits) ((port)->FIO_PIN = (bits)) - -/** - * @brief Sets a bits mask on a I/O port. - * @details This function is implemented by writing the FIO SET register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @param[in] bits the bits to be ORed on the specified port - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_setport(port, bits) ((port)->FIO_SET = (bits)) - -/** - * @brief Clears a bits mask on a I/O port. - * @details This function is implemented by writing the FIO CLR register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @param[in] bits the bits to be cleared on the specified port - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_clearport(port, bits) ((port)->FIO_CLR = (bits)) - -/** - * @brief Writes a value on an I/O bus. - * @details This function is implemented by writing the FIO PIN and MASK - * registers, the implementation is not atomic because the multiple - * accesses. - * - * @param[in] port the port identifier - * @param[in] mask the group mask, a logical AND is performed on the output - * data - * @param[in] offset the group bit offset within the port - * @param[in] bits the bits to be written. Values exceeding the group width - * are masked. - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_writegroup(port, mask, offset, bits) { \ - (port)->FIO_MASK = ~((mask) << (offset)); \ - (port)->FIO_PIN = (bits) << (offset); \ - (port)->FIO_MASK = 0; \ -} - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - * - * @note This function is not meant to be invoked directly by the application - * code. - * @note @p PAL_MODE_UNCONNECTED is implemented as push pull output with high - * state. - * @note This function does not alter the @p PINSELx registers. Alternate - * functions setup must be handled by device-specific code. - */ -#define pal_lld_setgroupmode(port, mask, mode) \ - _pal_lld_setgroupmode(port, mask, mode) - -/** - * @brief Writes a logical state on an output pad. - * - * @param[in] port the port identifier - * @param[in] pad the pad number within the port - * @param[out] bit the logical value, the value must be @p 0 or @p 1 - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_writepad(port, pad, bit) pal_lld_writegroup(port, 1, pad, bit) - -/** - * @brief FIO port setup. - * @details This function programs the pins direction within a port. - */ -#define pal_lld_lpc214x_set_direction(port, dir) { \ - (port)->FIO_DIR = (dir); \ -} - -extern const PALConfig pal_default_config; - -#ifdef __cplusplus -extern "C" { -#endif - void _pal_lld_init(const PALConfig *config); - void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PAL */ - -#endif /* _PAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/platform.dox b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/platform.dox deleted file mode 100644 index 92d81a1..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/platform.dox +++ /dev/null @@ -1,97 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup LPC214x LPC214x Support - * @brief LPC214x specific support. - * @details The LPC214x support includes: - * - VIC support code. - * - I/O ports driver. - * - Buffered, interrupt driven, serial driver. - * - SPI driver. - * - A demo supporting the kernel test suite. - * - A C++ demo supporting the kernel test suite. - * - A demo integrating ChibiOS/RT with FatFS. - * . - * @ingroup ARM7 - */ - -/** - * @defgroup LPC214x_VIC VIC Support - * @brief VIC peripheral support. - * - * @ingroup LPC214x - */ - -/** - * @defgroup LPC214x_HAL LPC214x HAL Support - * @brief HAL support. - * - * @ingroup LPC214x - */ - -/** - * @defgroup LPC214x_PAL LPC214x I/O Ports Support - * @brief I/O Ports peripherals support. - * @details This module supports the LPC214x FIO controller. The controller - * supports the following features (see @ref PAL): - * - 32 bits wide ports. - * - Atomic set/reset functions. - * - Output latched regardless of the pad setting. - * - Direct read of input pads regardless of the pad setting. - * . - *

      Supported Setup Modes

      - * - @p PAL_MODE_RESET. - * - @p PAL_MODE_UNCONNECTED. - * - @p PAL_MODE_INPUT. - * - @p PAL_MODE_INPUT_ANALOG (same as @p PAL_MODE_INPUT). - * - @p PAL_MODE_OUTPUT_PUSHPULL. - * . - * Any attempt to setup an invalid mode is ignored. - * - *

      Suboptimal Behavior

      - * - Pad/port toggling operations are not atomic. - * - Pad/group mode setup is not atomic. - * . - * @ingroup LPC214x - */ - -/** - * @defgroup LPC214x_SERIAL LPC214x UART Support - * @brief UART peripherals support. - * @details The serial driver supports the LPC214x UART peripherals. - * - * @ingroup LPC214x - */ - -/** - * @defgroup LPC214x_SPI LPC214x SPI Support - * @brief SSP peripheral support. - * @details The SPI driver supports the LPC214x SSP, the driver works in - * polling mode. - * - * @ingroup LPC214x - */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/platform.mk b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/platform.mk deleted file mode 100644 index cec96cc..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/platform.mk +++ /dev/null @@ -1,9 +0,0 @@ -# List of all the LPC214x platform files. -PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/LPC214x/hal_lld.c \ - ${CHIBIOS}/os/hal/platforms/LPC214x/pal_lld.c \ - ${CHIBIOS}/os/hal/platforms/LPC214x/serial_lld.c \ - ${CHIBIOS}/os/hal/platforms/LPC214x/spi_lld.c \ - ${CHIBIOS}/os/hal/platforms/LPC214x/vic.c - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/platforms/LPC214x diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/serial_lld.c deleted file mode 100644 index 73004c4..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/serial_lld.c +++ /dev/null @@ -1,345 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC214x/serial_lld.c - * @brief LPC214x low level serial driver code. - * - * @addtogroup LPC214x_SERIAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -#if USE_LPC214x_UART0 || defined(__DOXYGEN__) -/** @brief UART0 serial driver identifier.*/ -SerialDriver SD1; -#endif - -#if USE_LPC214x_UART1 || defined(__DOXYGEN__) -/** @brief UART1 serial driver identifier.*/ -SerialDriver SD2; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** @brief Driver default configuration.*/ -static const SerialConfig default_config = { - SERIAL_DEFAULT_BITRATE, - LCR_WL8 | LCR_STOP1 | LCR_NOPARITY, - FCR_TRIGGER0 -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/** - * @brief UART initialization. - * - * @param[in] sdp communication channel associated to the UART - * @param[in] config the architecture-dependent serial driver configuration - */ -static void uart_init(SerialDriver *sdp, const SerialConfig *config) { - UART *u = sdp->uart; - - uint32_t div = PCLK / (config->sc_speed << 4); - u->UART_LCR = config->sc_lcr | LCR_DLAB; - u->UART_DLL = div; - u->UART_DLM = div >> 8; - u->UART_LCR = config->sc_lcr; - u->UART_FCR = FCR_ENABLE | FCR_RXRESET | FCR_TXRESET | config->sc_fcr; - u->UART_ACR = 0; - u->UART_FDR = 0x10; - u->UART_TER = TER_ENABLE; - u->UART_IER = IER_RBR | IER_STATUS; -} - -/** - * @brief UART de-initialization. - * - * @param[in] u pointer to an UART I/O block - */ -static void uart_deinit(UART *u) { - - u->UART_LCR = LCR_DLAB; - u->UART_DLL = 1; - u->UART_DLM = 0; - u->UART_LCR = 0; - u->UART_FDR = 0x10; - u->UART_IER = 0; - u->UART_FCR = FCR_RXRESET | FCR_TXRESET; - u->UART_ACR = 0; - u->UART_TER = TER_ENABLE; -} - -/** - * @brief Error handling routine. - * - * @param[in] sdp communication channel associated to the UART - * @param[in] err UART LSR register value - */ -static void set_error(SerialDriver *sdp, IOREG32 err) { - sdflags_t sts = 0; - - if (err & LSR_OVERRUN) - sts |= SD_OVERRUN_ERROR; - if (err & LSR_PARITY) - sts |= SD_PARITY_ERROR; - if (err & LSR_FRAMING) - sts |= SD_FRAMING_ERROR; - if (err & LSR_BREAK) - sts |= SD_BREAK_DETECTED; - chSysLockFromIsr(); - sdAddFlagsI(sdp, sts); - chSysUnlockFromIsr(); -} - -#if defined(__GNUC__) -__attribute__((noinline)) -#endif -/** - * @brief Common IRQ handler. - * @note Tries hard to clear all the pending interrupt sources, we dont want - * to go through the whole ISR and have another interrupt soon after. - * - * @param[in] sdp communication channel associated to the UART - */ -static void serve_interrupt(SerialDriver *sdp) { - UART *u = sdp->uart; - - while (TRUE) { - switch (u->UART_IIR & IIR_SRC_MASK) { - case IIR_SRC_NONE: - return; - case IIR_SRC_ERROR: - set_error(sdp, u->UART_LSR); - break; - case IIR_SRC_TIMEOUT: - case IIR_SRC_RX: - chSysLockFromIsr(); - if (chIQIsEmpty(&sdp->iqueue)) - chEvtBroadcastI(&sdp->ievent); - chSysUnlockFromIsr(); - while (u->UART_LSR & LSR_RBR_FULL) { - chSysLockFromIsr(); - if (chIQPutI(&sdp->iqueue, u->UART_RBR) < Q_OK) - sdAddFlagsI(sdp, SD_OVERRUN_ERROR); - chSysUnlockFromIsr(); - } - break; - case IIR_SRC_TX: - { - int i = LPC214x_UART_FIFO_PRELOAD; - do { - msg_t b; - - chSysLockFromIsr(); - b = chOQGetI(&sdp->oqueue); - chSysUnlockFromIsr(); - if (b < Q_OK) { - u->UART_IER &= ~IER_THRE; - chSysLockFromIsr(); - chEvtBroadcastI(&sdp->oevent); - chSysUnlockFromIsr(); - break; - } - u->UART_THR = b; - } while (--i); - } - break; - default: - (void) u->UART_THR; - (void) u->UART_RBR; - } - } -} - -/** - * @brief Attempts a TX FIFO preload. - */ -static void preload(SerialDriver *sdp) { - UART *u = sdp->uart; - - if (u->UART_LSR & LSR_THRE) { - int i = LPC214x_UART_FIFO_PRELOAD; - do { - msg_t b = chOQGetI(&sdp->oqueue); - if (b < Q_OK) { - chEvtBroadcastI(&sdp->oevent); - return; - } - u->UART_THR = b; - } while (--i); - } - u->UART_IER |= IER_THRE; -} - -/** - * @brief Driver SD1 output notification. - */ -#if USE_LPC214x_UART0 || defined(__DOXYGEN__) -static void notify1(void) { - - preload(&SD1); -} -#endif - -/** - * @brief Driver SD2 output notification. - */ -#if USE_LPC214x_UART1 || defined(__DOXYGEN__) -static void notify2(void) { - - preload(&SD2); -} -#endif - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/** - * @brief UART0 IRQ handler. - */ -#if USE_LPC214x_UART0 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(UART0IrqHandler) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD1); - VICVectAddr = 0; - - CH_IRQ_EPILOGUE(); -} -#endif - -/** - * @brief UART1 IRQ handler. - */ -#if USE_LPC214x_UART1 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(UART1IrqHandler) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD2); - VICVectAddr = 0; - - CH_IRQ_EPILOGUE(); -} -#endif - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_LPC214x_UART0 - sdObjectInit(&SD1, NULL, notify1); - SD1.uart = U0Base; - SetVICVector(UART0IrqHandler, LPC214x_UART0_PRIORITY, SOURCE_UART0); -#endif -#if USE_LPC214x_UART1 - sdObjectInit(&SD2, NULL, notify2); - SD2.uart = U1Base; - SetVICVector(UART1IrqHandler, LPC214x_UART1_PRIORITY, SOURCE_UART1); -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - - if (sdp->state == SD_STOP) { -#if USE_LPC214x_UART0 - if (&SD1 == sdp) { - PCONP = (PCONP & PCALL) | PCUART0; - VICIntEnable = INTMASK(SOURCE_UART0); - } -#endif -#if USE_LPC214x_UART1 - if (&SD2 == sdp) { - PCONP = (PCONP & PCALL) | PCUART1; - VICIntEnable = INTMASK(SOURCE_UART1); - } -#endif - } - uart_init(sdp, config); -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the UART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - - if (sdp->state == SD_READY) { - uart_deinit(sdp->uart); -#if USE_LPC214x_UART0 - if (&SD1 == sdp) { - PCONP = (PCONP & PCALL) & ~PCUART0; - VICIntEnClear = INTMASK(SOURCE_UART0); - return; - } -#endif -#if USE_LPC214x_UART1 - if (&SD2 == sdp) { - PCONP = (PCONP & PCALL) & ~PCUART1; - VICIntEnClear = INTMASK(SOURCE_UART1); - return; - } -#endif - } -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/serial_lld.h deleted file mode 100644 index 5918fe5..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/serial_lld.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC214x/serial_lld.h - * @brief LPC214x low level serial driver header. - * - * @addtogroup LPC214x_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief UART0 driver enable switch. - * @details If set to @p TRUE the support for UART0 is included. - * @note The default is @p TRUE . - */ -#if !defined(USE_LPC214x_UART0) || defined(__DOXYGEN__) -#define USE_LPC214x_UART0 TRUE -#endif - -/** - * @brief UART1 driver enable switch. - * @details If set to @p TRUE the support for UART1 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_LPC214x_UART1) || defined(__DOXYGEN__) -#define USE_LPC214x_UART1 TRUE -#endif - -/** - * @brief FIFO preload parameter. - * @details Configuration parameter, this values defines how many bytes are - * preloaded in the HW transmit FIFO for each interrupt, the maximum - * value is 16 the minimum is 1. - * @note An high value reduces the number of interrupts generated but can - * also increase the worst case interrupt response time because the - * preload loops. - */ -#if !defined(LPC214x_UART_FIFO_PRELOAD) || defined(__DOXYGEN__) -#define LPC214x_UART_FIFO_PRELOAD 16 -#endif - -/** - * @brief UART0 interrupt priority level setting. - */ -#if !defined(LPC214x_UART0_PRIORITY) || defined(__DOXYGEN__) -#define LPC214x_UART0_PRIORITY 1 -#endif - -/** - * @brief UART1 interrupt priority level setting. - */ -#if !defined(LPC214x_UART1_PRIORITY) || defined(__DOXYGEN__) -#define LPC214x_UART1_PRIORITY 2 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if (LPC214x_UART_FIFO_PRELOAD < 1) || (LPC214x_UART_FIFO_PRELOAD > 16) -#error "invalid LPC214x_UART_FIFO_PRELOAD setting" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint32_t sdflags_t; - -/** - * @brief LPC214x Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - */ -typedef struct { - /** - * @brief Bit rate. - */ - uint32_t sc_speed; - /** - * @brief Initialization value for the LCR register. - */ - uint32_t sc_lcr; - /** - * @brief Initialization value for the FCR register. - */ - uint32_t sc_fcr; -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ \ - /* Pointer to the USART registers block.*/ \ - UART *uart; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_LPC214x_UART0 && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif -#if USE_LPC214x_UART1 && !defined(__DOXYGEN__) -extern SerialDriver SD2; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/spi_lld.c b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/spi_lld.c deleted file mode 100644 index 464a82c..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/spi_lld.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC214x/spi_lld.c - * @brief LPC214x low level SPI driver code. - * @addtogroup LPC214x_SPI - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SPI || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -#if USE_LPC214x_SPI1 || defined(__DOXYGEN__) -/** @brief SPI1 driver identifier.*/ -SPIDriver SPID1; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/** - * @brief Synchronous SSP transfer. - * - * @param[in] n number of bytes to be exchanged - * - * @param[in] txbuf the pointer to the transmit buffer or @p NULL - * @param[out] rxbuf the pointer to the receive buffer or @p NULL - */ -void rw8(size_t n, const uint8_t *txbuf, uint8_t *rxbuf) { - size_t ntx = n; - - while (n > 0) { - uint32_t sr = SSPBase->SSP_SR; - if (sr & SR_RNE) { - uint8_t w = SSPBase->SSP_DR; - if (rxbuf != NULL) - *rxbuf++ = w; - n--; - continue; /* Priority over transmission. */ - } - if ((ntx > 0) && (sr & SR_TNF)) { - if (txbuf != NULL) - SSPBase->SSP_DR = *txbuf++; - else - SSPBase->SSP_DR = 0xFFFFFFFF; - ntx--; - } - } -} - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level SPI driver initialization. - */ -void spi_lld_init(void) { - -#if USE_LPC214x_SPI1 - spiObjectInit(&SPID1); -#endif -} - -/** - * @brief Configures and activates the SPI peripheral. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_start(SPIDriver *spip) { - - if (spip->spd_state == SPI_STOP) { - /* Clock activation.*/ - PCONP = (PCONP & PCALL) | PCSPI1; - } - /* Configuration.*/ - SSPBase->SSP_CR1 = 0; - /* Emptying the receive FIFO, it happens to not be empty while debugging.*/ - while (SSPBase->SSP_SR & SR_RNE) - (void) SSPBase->SSP_DR; - SSPBase->SSP_CR0 = spip->spd_config->spc_cr0; - SSPBase->SSP_CPSR = spip->spd_config->spc_cpsr; - SSPBase->SSP_CR1 = spip->spd_config->spc_cr1 | CR1_SSE; -} - -/** - * @brief Deactivates the SPI peripheral. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_stop(SPIDriver *spip) { - - if (spip->spd_state != SPI_STOP) { - SSPBase->SSP_CR1 = 0; - SSPBase->SSP_CR0 = 0; - SSPBase->SSP_CPSR = 0; - PCONP &= ~PCSPI1; - } -} - -/** - * @brief Asserts the slave select signal and prepares for transfers. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_select(SPIDriver *spip) { - - palClearPad(spip->spd_config->spc_ssport, spip->spd_config->spc_sspad); -} - -/** - * @brief Deasserts the slave select signal. - * @details The previously selected peripheral is unselected. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_unselect(SPIDriver *spip) { - - palSetPad(spip->spd_config->spc_ssport, spip->spd_config->spc_sspad); -} - -/** - * @brief Ignores data on the SPI bus. - * @details This function transmits a series of idle words on the SPI bus and - * ignores the received data. This function can be invoked even - * when a slave select signal has not been yet asserted. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to be ignored - */ -void spi_lld_ignore(SPIDriver *spip, size_t n) { - - (void)spip; - rw8(n, NULL, NULL); -} - -/** - * @brief Exchanges data on the SPI bus. - * @details This function performs a simultaneous transmit/receive operation. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to be exchanged - * @param[in] txbuf the pointer to the transmit buffer - * @param[out] rxbuf the pointer to the receive buffer - * - * @note The buffers are organized as uint8_t arrays for data sizes below or - * equal to 8 bits else it is organized as uint16_t arrays. - */ -void spi_lld_exchange(SPIDriver *spip, size_t n, - const void *txbuf, void *rxbuf) { - - (void)spip; - rw8(n, txbuf, rxbuf); -} - -/** - * @brief Sends data ever the SPI bus. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to send - * @param[in] txbuf the pointer to the transmit buffer - * - * @note The buffers are organized as uint8_t arrays for data sizes below or - * equal to 8 bits else it is organized as uint16_t arrays. - */ -void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { - - (void)spip; - rw8(n, txbuf, NULL); -} - -/** - * @brief Receives data from the SPI bus. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to receive - * @param[out] rxbuf the pointer to the receive buffer - * - * @note The buffers are organized as uint8_t arrays for data sizes below or - * equal to 8 bits else it is organized as uint16_t arrays. - */ -void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { - - (void)spip; - rw8(n, NULL, rxbuf); -} - -#endif /* CH_HAL_USE_SPI */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/spi_lld.h b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/spi_lld.h deleted file mode 100644 index 6e5af75..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/spi_lld.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC214x/spi_lld.h - * @brief LPC214x low level SPI driver header. - * @addtogroup LPC214x_SPI - * @{ - */ - -#ifndef _SPI_LLD_H_ -#define _SPI_LLD_H_ - -#if CH_HAL_USE_SPI || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief SPI1 (SSP) driver enable switch. - * @details If set to @p TRUE the support for SPI0 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_LPC214x_SPI1) || defined(__DOXYGEN__) -#define USE_LPC214x_SPI1 TRUE -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver configuration structure. - */ -typedef struct { - /** - * @brief The chip select line port. - */ - ioportid_t spc_ssport; - /** - * @brief The chip select line pad number. - */ - uint16_t spc_sspad; - /** - * @brief SSP CR0 initialization data. - */ - uint16_t spc_cr0; - /** - * @brief SSP CR1 initialization data. - */ - uint16_t spc_cr1; - /** - * @brief SSP CPSR initialization data. - */ - uint32_t spc_cpsr; -} SPIConfig; - -/** - * @brief Structure representing a SPI driver. - */ -typedef struct { - /** - * @brief Driver state. - */ - spistate_t spd_state; -#if SPI_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__) -#if CH_USE_MUTEXES || defined(__DOXYGEN__) - /** - * @brief Mutex protecting the bus. - */ - Mutex spd_mutex; -#elif CH_USE_SEMAPHORES - Semaphore spd_semaphore; -#endif -#endif /* SPI_USE_MUTUAL_EXCLUSION */ - /** - * @brief Current configuration data. - */ - const SPIConfig *spd_config; - /* End of the mandatory fields.*/ -} SPIDriver; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_LPC214x_SPI1 && !defined(__DOXYGEN__) -extern SPIDriver SPID1; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void spi_lld_init(void); - void spi_lld_start(SPIDriver *spip); - void spi_lld_stop(SPIDriver *spip); - void spi_lld_select(SPIDriver *spip); - void spi_lld_unselect(SPIDriver *spip); - void spi_lld_ignore(SPIDriver *spip, size_t n); - void spi_lld_exchange(SPIDriver *spip, size_t n, - const void *txbuf, void *rxbuf); - void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf); - void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SPI */ - -#endif /* _SPI_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/vic.c b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/vic.c deleted file mode 100644 index 44a9175..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/vic.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC214x/vic.c - * @brief LPC214x VIC peripheral support code. - * - * @addtogroup LPC214x_VIC - * @{ - */ - -#include "ch.h" - -/** - * @brief VIC Initialization. - * @note Better reset everything in the VIC, it is a HUGE source of trouble. - */ -void vic_init(void) { - int i; - - VIC *vic = VICBase; - vic->VIC_IntSelect = 0; /* All sources assigned to IRQ. */ - vic->VIC_SoftIntClear = ALLINTMASK; /* No interrupts enforced */ - vic->VIC_IntEnClear = ALLINTMASK; /* All sources disabled. */ - for (i = 0; i < 16; i++) { - vic->VIC_VectCntls[i] = 0; - vic->VIC_VectAddrs[i] = 0; - vic->VIC_VectAddr = 0; - } -} - -/** - * @brief Initializes a VIC vector. - * @details Set a vector for an interrupt source and enables it. - * - * @param[in] handler the pointer to the IRQ service routine - * @param[in] vector the vector number - * @param[in] source the IRQ source to be associated to the vector - */ -void SetVICVector(void *handler, int vector, int source) { - - VIC *vicp = VICBase; - vicp->VIC_VectAddrs[vector] = (IOREG32)handler; - vicp->VIC_VectCntls[vector] = (IOREG32)(source | 0x20); -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/vic.h b/ChibiOS_2.0.8/os/hal/platforms/LPC214x/vic.h deleted file mode 100644 index 5a771c7..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/LPC214x/vic.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file LPC214x/vic.h - * @brief LPC214x VIC peripheral support header. - * - * @addtogroup LPC214x_VIC - * @{ - */ - -#ifndef _VIC_H_ -#define _VIC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - void vic_init(void); - void SetVICVector(void *handler, int vector, int source); -#ifdef __cplusplus -} -#endif - -#endif /* _VIC_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/MSP430/hal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/MSP430/hal_lld.c deleted file mode 100644 index 88d64a6..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/MSP430/hal_lld.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file MSP430/hal_lld.c - * @brief MSP430 HAL subsystem low level driver source. - * @addtogroup MSP430_HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - */ -const PALConfig pal_default_config = -{ -#if defined(__MSP430_HAS_PORT1__) || defined(__MSP430_HAS_PORT1_R__) - {VAL_P1OUT, VAL_P1DIR}, -#endif -#if defined(__MSP430_HAS_PORT2__) || defined(__MSP430_HAS_PORT2_R__) - {VAL_P2OUT, VAL_P2DIR}, -#endif -#if defined(__MSP430_HAS_PORT3__) || defined(__MSP430_HAS_PORT3_R__) - {VAL_P3OUT, VAL_P3DIR}, -#endif -#if defined(__MSP430_HAS_PORT4__) || defined(__MSP430_HAS_PORT4_R__) - {VAL_P4OUT, VAL_P4DIR}, -#endif -#if defined(__MSP430_HAS_PORT5__) || defined(__MSP430_HAS_PORT5_R__) - {VAL_P5OUT, VAL_P5DIR}, -#endif -#if defined(__MSP430_HAS_PORT6__) || defined(__MSP430_HAS_PORT6_R__) - {VAL_P6OUT, VAL_P6DIR}, -#endif -}; - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - - /* - * Clock sources setup. - */ - DCOCTL = VAL_DCOCTL; - BCSCTL1 = VAL_BCSCTL1; -#if MSP430_USE_CLOCK == MSP430_CLOCK_SOURCE_XT2CLK - do { - int i; - IFG1 &= ~OFIFG; - for (i = 255; i > 0; i--) - asm("nop"); - } while (IFG1 & OFIFG); -#endif - BCSCTL2 = VAL_BCSCTL2; -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/MSP430/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/MSP430/hal_lld.h deleted file mode 100644 index 2c46bd1..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/MSP430/hal_lld.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file MSP430/hal_lld.h - * @brief MSP430 HAL subsystem low level driver header. - * @addtogroup MSP430_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -#include "msp430x16x.h" - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "MSP430x16x" - -#define MSP430_CLOCK_SOURCE_XT2CLK 0 /** @brief XT2CLK clock selector. */ -#define MSP430_CLOCK_SOURCE_DCOCLK 1 /** @brief DCOCLK clock selector. */ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Clock source. - * @details The clock source can be selected from: - * - @p MSP430_CLOCK_SOURCE_XT2CLK. - * - @p MSP430_CLOCK_SOURCE_DCOCLK. - * . - */ -#if !defined(MSP430_USE_CLOCK) || defined(__DOXYGEN__) -#define MSP430_USE_CLOCK MSP430_CLOCK_SOURCE_XT2CLK -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/* - * Calculating the derived clock constants. - */ -#define ACLK LFXT1CLK -#if MSP430_USE_CLOCK == MSP430_CLOCK_SOURCE_XT2CLK -#define MCLK XT2CLK -#define SMCLK (XT2CLK / 8) -#elif MSP430_USE_CLOCK == MSP430_CLOCK_SOURCE_DCOCLK -#define MCLK DCOCLK -#define SMCLK DCOCLK -#else -#error "unknown clock source specified" -#endif - -/* - * Calculating the initialization values. - */ -#define VAL_DCOCTL (DCO0 | DCO1) -#if MSP430_USE_CLOCK == MSP430_CLOCK_SOURCE_XT2CLK -#define VAL_BCSCTL1 (RSEL2) -#define VAL_BCSCTL2 (SELM_2 | DIVM_0 | DIVS_3 | SELS) -#endif -#if MSP430_USE_CLOCK == MSP430_CLOCK_SOURCE_DCOCLK -#define VAL_BCSCTL1 (XT2OFF | RSEL2) -#define VAL_BCSCTL2 (SELM_0 | DIVM_0 | DIVS_0) -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/MSP430/pal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/MSP430/pal_lld.c deleted file mode 100644 index cdf1932..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/MSP430/pal_lld.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file MSP430/pal_lld.c - * @brief MSP430 Digital I/O low level driver code. - * @addtogroup MSP430_PAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief MSP430 I/O ports configuration. - * - * @param[in] config the MSP430 ports configuration - * - * @note The @p PxIFG, @p PxIE and @p PxSEL registers are cleared. @p PxOUT - * and @p PxDIR are configured as specified. - */ -void _pal_lld_init(const PALConfig *config) { - -#if defined(__MSP430_HAS_PORT1__) || defined(__MSP430_HAS_PORT1_R__) - IOPORT1->iop_full.ie.reg_p = 0; - IOPORT1->iop_full.ifg.reg_p = 0; - IOPORT1->iop_full.sel.reg_p = 0; - IOPORT1->iop_common.out = config->P1Data.out; - IOPORT1->iop_common.dir = config->P1Data.dir; -#endif - -#if defined(__MSP430_HAS_PORT2__) || defined(__MSP430_HAS_PORT2_R__) - IOPORT2->iop_full.ie.reg_p = 0; - IOPORT2->iop_full.ifg.reg_p = 0; - IOPORT2->iop_full.sel.reg_p = 0; - IOPORT2->iop_common.out = config->P2Data.out; - IOPORT2->iop_common.dir = config->P2Data.dir; -#endif - -#if defined(__MSP430_HAS_PORT3__) || defined(__MSP430_HAS_PORT3_R__) - IOPORT3->iop_simple.sel.reg_p = 0; - IOPORT3->iop_common.out = config->P3Data.out; - IOPORT3->iop_common.dir = config->P3Data.dir; -#endif - -#if defined(__MSP430_HAS_PORT4__) || defined(__MSP430_HAS_PORT4_R__) - IOPORT4->iop_simple.sel.reg_p = 0; - IOPORT4->iop_common.out = config->P4Data.out; - IOPORT4->iop_common.dir = config->P4Data.dir; -#endif - -#if defined(__MSP430_HAS_PORT5__) || defined(__MSP430_HAS_PORT5_R__) - IOPORT5->iop_simple.sel.reg_p = 0; - IOPORT5->iop_common.out = config->P5Data.out; - IOPORT5->iop_common.dir = config->P5Data.dir; -#endif - -#if defined(__MSP430_HAS_PORT6__) || defined(__MSP430_HAS_PORT6_R__) - IOPORT6->iop_simple.sel.reg_p = 0; - IOPORT6->iop_common.out = config->P6Data.out; - IOPORT6->iop_common.dir = config->P6Data.dir; -#endif -} - -/** - * @brief Pads mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - * - * @note This function is not meant to be invoked directly by the application - * code. - * @note @p PAL_MODE_UNCONNECTED is implemented as output as recommended by - * the MSP430x1xx Family User's Guide. Unconnected pads are set to - * high logic state by default. - * @note This function does not alter the @p PxSEL registers. Alternate - * functions setup must be handled by device-specific code. - */ -void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode) { - - switch (mode) { - case PAL_MODE_RESET: - case PAL_MODE_INPUT: - port->iop_common.dir.reg_p &= ~mask; - break; - case PAL_MODE_UNCONNECTED: - port->iop_common.out.reg_p |= mask; - case PAL_MODE_OUTPUT_PUSHPULL: - port->iop_common.dir.reg_p |= mask; - break; - } -} - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/MSP430/pal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/MSP430/pal_lld.h deleted file mode 100644 index 1fa2d19..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/MSP430/pal_lld.h +++ /dev/null @@ -1,304 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file MSP430/pal_lld.h - * @brief MSP430 Digital I/O low level driver header. - * @addtogroup MSP430_PAL - * @{ - */ - -#ifndef _PAL_LLD_H_ -#define _PAL_LLD_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Unsupported modes and specific modes */ -/*===========================================================================*/ - -#undef PAL_MODE_INPUT_PULLUP -#undef PAL_MODE_INPUT_PULLDOWN -#undef PAL_MODE_INPUT_ANALOG -#undef PAL_MODE_OUTPUT_OPENDRAIN - -/*===========================================================================*/ -/* I/O Ports Types and constants. */ -/*===========================================================================*/ - -/** - * @brief Simplified MSP430 I/O port representation. - * @details This structure represents the common part of all the MSP430 I/O - * ports. - */ -struct port_common_t { - ioregister_t in; - ioregister_t out; - ioregister_t dir; -}; - -/** - * @brief Generic MSP430 I/O port. - */ -union __ioport { - struct port_common_t iop_common; - struct port_simple_t iop_simple; - struct port_full_t iop_full; -}; - -/** - * @brief Setup registers common to all the MSP430 ports. - */ -typedef struct { - ioregister_t out; - ioregister_t dir; -} msp430_dio_setup_t; - -/** - * @brief MSP430 I/O ports static initializer. - * @details An instance of this structure must be passed to @p palInit() at - * system startup time in order to initialize the digital I/O - * subsystem. This represents only the initial setup, specific pads - * or whole ports can be reprogrammed at later time. - */ -typedef struct { -#if defined(__MSP430_HAS_PORT1__) || \ - defined(__MSP430_HAS_PORT1_R__) || \ - defined(__DOXYGEN__) - /** @brief Port 1 setup data.*/ - msp430_dio_setup_t P1Data; -#endif -#if defined(__MSP430_HAS_PORT2__) || \ - defined(__MSP430_HAS_PORT2_R__) || \ - defined(__DOXYGEN__) - /** @brief Port 2 setup data.*/ - msp430_dio_setup_t P2Data; -#endif -#if defined(__MSP430_HAS_PORT3__) || \ - defined(__MSP430_HAS_PORT3_R__) || \ - defined(__DOXYGEN__) - /** @brief Port 3 setup data.*/ - msp430_dio_setup_t P3Data; -#endif -#if defined(__MSP430_HAS_PORT4__) || \ - defined(__MSP430_HAS_PORT4_R__) || \ - defined(__DOXYGEN__) - /** @brief Port 4 setup data.*/ - msp430_dio_setup_t P4Data; -#endif -#if defined(__MSP430_HAS_PORT5__) || \ - defined(__MSP430_HAS_PORT5_R__) || \ - defined(__DOXYGEN__) - /** @brief Port 5 setup data.*/ - msp430_dio_setup_t P5Data; -#endif -#if defined(__MSP430_HAS_PORT6__) || \ - defined(__MSP430_HAS_PORT6_R__) || \ - defined(__DOXYGEN__) - /** @brief Port 6 setup data.*/ - msp430_dio_setup_t P6Data; -#endif -} PALConfig; - -/** - * @brief Width, in bits, of an I/O port. - */ -#define PAL_IOPORTS_WIDTH 8 - -/** - * @brief Whole port mask. - * @brief This macro specifies all the valid bits into a port. - */ -#define PAL_WHOLE_PORT ((ioportmask_t)0xFF) - -/** - * @brief Digital I/O port sized unsigned type. - */ -typedef uint8_t ioportmask_t; - -/** - * @brief Port Identifier. - * @details This type can be a scalar or some kind of pointer, do not make - * any assumption about it, use the provided macros when populating - * variables of this type. - */ -typedef union __ioport * ioportid_t; - -/*===========================================================================*/ -/* I/O Ports Identifiers. */ -/*===========================================================================*/ - -/** - * @brief I/O port A identifier. - * @details This port identifier is mapped on the MSP430 port 1 (P1). - */ -#if defined(__MSP430_HAS_PORT1__) || \ - defined(__MSP430_HAS_PORT1_R__) || \ - defined(__DOXYGEN__) -#define IOPORT1 ((ioportid_t)0x0020) -#endif - -/** - * @brief I/O port B identifier. - * @details This port identifier is mapped on the MSP430 port 2 (P2). - */ -#if defined(__MSP430_HAS_PORT2__) || \ - defined(__MSP430_HAS_PORT2_R__) || \ - defined(__DOXYGEN__) -#define IOPORT2 ((ioportid_t)0x0028) -#endif - -/** - * @brief I/O port C identifier. - * @details This port identifier is mapped on the MSP430 port 3 (P3). - */ -#if defined(__MSP430_HAS_PORT3__) || \ - defined(__MSP430_HAS_PORT3_R__) || \ - defined(__DOXYGEN__) -#define IOPORT3 ((ioportid_t)0x0018) -#endif - -/** - * @brief I/O port D identifier. - * @details This port identifier is mapped on the MSP430 port 4 (P4). - */ -#if defined(__MSP430_HAS_PORT4__) || \ - defined(__MSP430_HAS_PORT4_R__) || \ - defined(__DOXYGEN__) -#define IOPORT4 ((ioportid_t)0x001c) -#endif - -/** - * @brief I/O port E identifier. - * @details This port identifier is mapped on the MSP430 port 5 (P5). - */ -#if defined(__MSP430_HAS_PORT5__) || \ - defined(__MSP430_HAS_PORT5_R__) || \ - defined(__DOXYGEN__) -#define IOPORT5 ((ioportid_t)0x0030) -#endif - -/** - * @brief I/O port F identifier. - * @details This port identifier is mapped on the MSP430 port 6 (P6). - */ -#if defined(__MSP430_HAS_PORT6__) || \ - defined(__MSP430_HAS_PORT6_R__) || \ - defined(__DOXYGEN__) -#define IOPORT6 ((ioportid_t)0x0034) -#endif - -/*===========================================================================*/ -/* Implementation, some of the following macros could be implemented as */ -/* functions, if so please put them in a file named pal_lld.c. */ -/*===========================================================================*/ - -/** - * @brief Low level PAL subsystem initialization. - * @details In MSP430 programs all the ports as input. - * - * @param[in] config the MSP430 ports configuration - */ -#define pal_lld_init(config) _pal_lld_init(config) - -/** - * @brief Reads the physical I/O port states. - * @details This function is implemented by reading the PxIN register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @return The port bits. - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_readport(port) ((port)->iop_common.in.reg_p) - -/** - * @brief Reads the output latch. - * @details This function is implemented by reading the PxOUT register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @return The latched logical states. - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_readlatch(port) ((port)->iop_common.out.reg_p) - -/** - * @brief Writes a bits mask on a I/O port. - * @details This function is implemented by writing the PxOUT register, the - * implementation has no side effects. - * - * @param[in] port the port identifier - * @param[in] bits the bits to be written on the specified port - * - * @note This function is not meant to be invoked directly by the application - * code. - */ -#define pal_lld_writeport(port, bits) { \ - (port)->iop_common.out.reg_p = (bits); \ -} - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - * - * @note This function is not meant to be invoked directly by the application - * code. - * @note @p PAL_MODE_UNCONNECTED is implemented as output as recommended by - * the MSP430x1xx Family User's Guide. - * @note This function does not alter the @p PxSEL registers. Alternate - * functions setup must be handled by device-specific code. - */ -#define pal_lld_setgroupmode(port, mask, mode) \ - _pal_lld_setgroupmode(port, mask, mode) - -extern const PALConfig pal_default_config; - -#ifdef __cplusplus -extern "C" { -#endif - void _pal_lld_init(const PALConfig *config); - void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode); -#ifdef __cplusplus -} -#endif - -#endif /* _PAL_LLD_H_ */ - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/MSP430/platform.dox b/ChibiOS_2.0.8/os/hal/platforms/MSP430/platform.dox deleted file mode 100644 index 2eec40e..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/MSP430/platform.dox +++ /dev/null @@ -1,74 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup MSP430_DRIVERS MSP430 Drivers - * @brief Device drivers included in the MSP430 support. - * - * @ingroup MSP430 - */ - -/** - * @defgroup MSP430_HAL MSP430 HAL Support - * @brief HAL support. - * - * @ingroup MSP430_DRIVERS - */ - -/** - * @defgroup MSP430_PAL MSP430 I/O Ports Support - * @brief I/O Ports peripherals support. - * @details This module supports the MSP430 Digital I/O controller. The - * controller supports the following features (see @ref PAL): - * - 8 bits wide ports. - * - Atomic set/reset/toggle functions because special MSP430 instruction set. - * - Output latched regardless of the pad setting. - * - Direct read of input pads regardless of the pad setting. - * . - *

      Supported Setup Modes

      - * - @p PAL_MODE_RESET. - * - @p PAL_MODE_UNCONNECTED. - * - @p PAL_MODE_INPUT. - * - @p PAL_MODE_OUTPUT_PUSHPULL. - * . - * Any attempt to setup an invalid mode is ignored. - * - *

      Suboptimal Behavior

      - * Some MSP430 I/O ports features are less than optimal: - * - Bus/group writing is not atomic. - * - Pad/group mode setup is not atomic. - * . - * @ingroup MSP430_DRIVERS - */ - -/** - * @defgroup MSP430_SERIAL MSP430 USART Support - * @brief USART support. - * @details The serial driver supports both the MSP430 USARTs in asynchronous - * mode. - * - * @ingroup MSP430_DRIVERS - */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/MSP430/platform.mk b/ChibiOS_2.0.8/os/hal/platforms/MSP430/platform.mk deleted file mode 100644 index a31b534..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/MSP430/platform.mk +++ /dev/null @@ -1,7 +0,0 @@ -# List of all the MSP430 platform files. -PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/MSP430/hal_lld.c \ - ${CHIBIOS}/os/hal/platforms/MSP430/pal_lld.c \ - ${CHIBIOS}/os/hal/platforms/MSP430/serial_lld.c - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/platforms/MSP430 diff --git a/ChibiOS_2.0.8/os/hal/platforms/MSP430/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/MSP430/serial_lld.c deleted file mode 100644 index 09b7826..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/MSP430/serial_lld.c +++ /dev/null @@ -1,316 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file MSP430/serial_lld.c - * @brief MSP430 low level serial driver code. - * - * @addtogroup MSP430_SERIAL - * @{ - */ - -#include - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -#if USE_MSP430_USART0 || defined(__DOXYGEN__) -/** @brief USART0 serial driver identifier.*/ -SerialDriver SD1; -#endif -#if USE_MSP430_USART1 || defined(__DOXYGEN__) -/** @brief USART1 serial driver identifier.*/ -SerialDriver SD2; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** @brief Driver default configuration.*/ -static const SerialConfig default_config = { - UBR(SERIAL_DEFAULT_BITRATE), - 0, - CHAR -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -static void set_error(SerialDriver *sdp, uint8_t urctl) { - sdflags_t sts = 0; - - if (urctl & OE) - sts |= SD_OVERRUN_ERROR; - if (urctl & PE) - sts |= SD_PARITY_ERROR; - if (urctl & FE) - sts |= SD_FRAMING_ERROR; - if (urctl & BRK) - sts |= SD_BREAK_DETECTED; - chSysLockFromIsr(); - sdAddFlagsI(sdp, sts); - chSysUnlockFromIsr(); -} - -#if USE_MSP430_USART0 || defined(__DOXYGEN__) -static void notify1(void) { - - if (!(U0IE & UTXIE0)) { - msg_t b = sdRequestDataI(&SD1); - if (b != Q_EMPTY) { - U0IE |= UTXIE0; - U0TXBUF = (uint8_t)b; - } - } -} - -/** - * @brief USART0 initialization. - * - * @param[in] config the architecture-dependent serial driver configuration - */ -static void usart0_init(const SerialConfig *config) { - - U0CTL = SWRST; /* Resets the USART. */ - /* USART init */ - U0TCTL = SSEL0 | SSEL1; /* SMCLK as clock source. */ - U0MCTL = config->sc_mod; /* Modulator. */ - U0BR1 = (uint8_t)(config->sc_div >> 8); /* Divider high. */ - U0BR0 = (uint8_t)(config->sc_div >> 0); /* Divider low. */ - /* Clear USART status.*/ - (void)U0RXBUF; - U0RCTL = 0; - /* USART enable.*/ - U0ME |= UTXE0 + URXE0; /* Enables the USART. */ - U0CTL = config->sc_ctl & ~SWRST; /* Various settings. */ - U0IE |= URXIE0; /* Enables RX interrupt. */ -} - -/** - * @brief USART0 de-initialization. - */ -static void usart0_deinit(void) { - - U0IE &= ~URXIE0; - U0CTL = SWRST; -} -#endif /* USE_MSP430_USART0 */ - -#if USE_MSP430_USART1 || defined(__DOXYGEN__) -static void notify2(void) { - - if (!(U1IE & UTXIE1)) { - msg_t b = sdRequestDataI(&SD2); - if (b != Q_EMPTY) { - U1IE |= UTXIE1; - U1TXBUF = (uint8_t)b; - } - } -} - -/** - * @brief USART1 initialization. - * - * @param[in] config the architecture-dependent serial driver configuration - */ -static void usart1_init(const SerialConfig *config) { - - U1CTL = SWRST; /* Resets the USART. */ - /* USART init.*/ - U1TCTL = SSEL0 | SSEL1; /* SMCLK as clock source. */ - U1MCTL = config->sc_mod; /* Modulator. */ - U1BR1 = (uint8_t)(config->sc_div >> 8); /* Divider high. */ - U1BR0 = (uint8_t)(config->sc_div >> 0); /* Divider low. */ - /* Clear USART status.*/ - (void)U0RXBUF; - U1RCTL = 0; - /* USART enable.*/ - U1ME |= UTXE0 + URXE0; /* Enables the USART. */ - U1CTL = config->sc_ctl & ~SWRST; /* Various settings. */ - U1IE |= URXIE0; /* Enables RX interrupt. */ -} - -/** - * @brief USART1 de-initialization. - */ -static void usart1_deinit(void) { - - U1IE &= ~URXIE0; - U1CTL = SWRST; -} -#endif /* USE_MSP430_USART1 */ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -#if USE_MSP430_USART0 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(USART0TX_VECTOR) { - msg_t b; - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - b = sdRequestDataI(&SD1); - chSysUnlockFromIsr(); - if (b < Q_OK) - U0IE &= ~UTXIE0; - else - U0TXBUF = b; - - CH_IRQ_EPILOGUE(); -} - -CH_IRQ_HANDLER(USART0RX_VECTOR) { - uint8_t urctl; - - CH_IRQ_PROLOGUE(); - - if ((urctl = U0RCTL) & RXERR) - set_error(&SD1, urctl); - chSysLockFromIsr(); - sdIncomingDataI(&SD1, U0RXBUF); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} -#endif /* USE_MSP430_USART0 */ - -#if USE_MSP430_USART1 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(USART1TX_VECTOR) { - msg_t b; - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - b = sdRequestDataI(&SD2); - chSysUnlockFromIsr(); - if (b < Q_OK) - U1IE &= ~UTXIE1; - else - U1TXBUF = b; - - CH_IRQ_EPILOGUE(); -} - -CH_IRQ_HANDLER(USART1RX_VECTOR) { - uint8_t urctl; - - CH_IRQ_PROLOGUE(); - - if ((urctl = U1RCTL) & RXERR) - set_error(&SD2, urctl); - chSysLockFromIsr(); - sdIncomingDataI(&SD2, U1RXBUF); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} -#endif /* USE_MSP430_USART1 */ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_MSP430_USART0 - sdObjectInit(&SD1, NULL, notify1); - /* I/O pins for USART0.*/ - P3SEL |= BV(4) + BV(5); -#endif - -#if USE_MSP430_USART1 - sdObjectInit(&SD2, NULL, notify2); - /* I/O pins for USART1.*/ - P3SEL |= BV(6) + BV(7); -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - -#if USE_MSP430_USART0 - if (&SD1 == sdp) { - usart0_init(config); - return; - } -#endif -#if USE_MSP430_USART1 - if (&SD2 == sdp) { - usart1_init(config); - return; - } -#endif -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the USART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - -#if USE_MSP430_USART0 - if (&SD1 == sdp) { - usart0_deinit(); - return; - } -#endif -#if USE_MSP430_USART1 - if (&SD2 == sdp) { - usart1_deinit(); - return; - } -#endif -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/MSP430/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/MSP430/serial_lld.h deleted file mode 100644 index 13927a4..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/MSP430/serial_lld.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file MSP430/serial_lld.h - * @brief MSP430 low level serial driver header. - * - * @addtogroup MSP430_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief USART0 driver enable switch. - * @details If set to @p TRUE the support for USART0 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_MSP430_USART0) || defined(__DOXYGEN__) -#define USE_MSP430_USART0 TRUE -#endif - -/** - * @brief USART1 driver enable switch. - * @details If set to @p TRUE the support for USART1 is included. - * @note The default is @p FALSE. - */ -#if !defined(USE_MSP430_USART1) || defined(__DOXYGEN__) -#define USE_MSP430_USART1 TRUE -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint8_t sdflags_t; - -/** - * @brief MSP430 Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - */ -typedef struct { - /** - * @brief Initialization value for the UBRx registers. - */ - uint16_t sc_div; - /** - * @brief Initialization value for the MOD register. - */ - uint8_t sc_mod; - /** - * @brief Initialization value for the CTL register. - */ - uint8_t sc_ctl; -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Macro for baud rate computation. - * @note Make sure the final baud rate is within tolerance. - */ -#define UBR(b) (SMCLK / (b)) - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_MSP430_USART0 && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif -#if USE_MSP430_USART1 && !defined(__DOXYGEN__) -extern SerialDriver SD2; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Posix/console.c b/ChibiOS_2.0.8/os/hal/platforms/Posix/console.c deleted file mode 100644 index 2ae2da4..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Posix/console.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file console.c - * @brief Simulator console driver code. - * @{ - */ - -#include - -#include "ch.h" -#include "console.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** - * @brief Console driver 1. - */ -BaseChannel CD1; - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - - -static size_t writes(void *ip, const uint8_t *bp, size_t n) { - size_t ret; - - (void)ip; - ret = fwrite(bp, 1, n, stdout); - fflush(stdout); - return ret; -} - -static size_t reads(void *ip, uint8_t *bp, size_t n) { - - (void)ip; - return fread(bp, 1, n, stdin); -} - -static bool_t putwouldblock(void *ip) { - - (void)ip; - return FALSE; -} - -static bool_t getwouldblock(void *ip) { - - (void)ip; - return TRUE; -} - -static msg_t putt(void *ip, uint8_t b, systime_t time) { - - (void)ip; - (void)time; - fputc(b, stdout); - fflush(stdout); - return RDY_OK; -} - -static msg_t gett(void *ip, systime_t time) { - - (void)ip; - (void)time; - return fgetc(stdin); -} - -static size_t writet(void *ip, const uint8_t *bp, size_t n, systime_t time) { - size_t ret; - - (void)ip; - (void)time; - ret = fwrite(bp, 1, n, stdout); - fflush(stdout); - return ret; -} - -static size_t readt(void *ip, uint8_t *bp, size_t n, systime_t time) { - - (void)ip; - (void)time; - return fread(bp, 1, n, stdin); -} - -static const struct BaseChannelVMT vmt = { - writes, reads, putwouldblock, getwouldblock, putt, gett, writet, readt -}; - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -void conInit(void) { - - CD1.vmt = &vmt; -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Posix/console.h b/ChibiOS_2.0.8/os/hal/platforms/Posix/console.h deleted file mode 100644 index 62e4a51..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Posix/console.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file console.h - * @brief Simulator console driver header. - * @{ - */ - -#ifndef _CONSOLE_H_ -#define _CONSOLE_H_ - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -extern BaseChannel CD1; - -#ifdef __cplusplus -extern "C" { -#endif - void conInit(void); -#ifdef __cplusplus -} -#endif - -#endif /* _CONSOLE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Posix/hal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/Posix/hal_lld.c deleted file mode 100644 index 05a252e..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Posix/hal_lld.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Posix/hal_lld.c - * @brief Posix HAL subsystem low level driver code. - * - * @addtogroup POSIX_HAL - * @{ - */ - -#include -#include -#include - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -static struct timeval nextcnt; -static struct timeval tick = {0, 1000000 / CH_FREQUENCY}; - -/** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - */ -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) -const PALConfig pal_default_config = { - {0, 0, 0}, - {0, 0, 0} -}; -#endif - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - -#if defined(__APPLE__) - puts("ChibiOS/RT simulator (OS X)\n"); -#else - puts("ChibiOS/RT simulator (Linux)\n"); -#endif - gettimeofday(&nextcnt, NULL); - timeradd(&nextcnt, &tick, &nextcnt); -} - -/** - * @brief Interrupt simulation. - */ -void ChkIntSources(void) { - struct timeval tv; - -#if CH_HAL_USE_SERIAL - if (sd_lld_interrupt_pending()) { - if (chSchIsRescRequiredExI()) - chSchDoRescheduleI(); - return; - } -#endif - - gettimeofday(&tv, NULL); - if (timercmp(&tv, &nextcnt, >=)) { - timeradd(&nextcnt, &tick, &nextcnt); - chSysTimerHandlerI(); - if (chSchIsRescRequiredExI()) - chSchDoRescheduleI(); - } -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Posix/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/Posix/hal_lld.h deleted file mode 100644 index 4aaab05..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Posix/hal_lld.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Posix/hal_lld.h - * @brief Posix simulator HAL subsystem low level driver header. - * - * @addtogroup POSIX_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -#include -#include -#include - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "Linux" - -#define SOCKET int -#define INVALID_SOCKET -1 - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); - void ChkIntSources(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Posix/pal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/Posix/pal_lld.c deleted file mode 100644 index 82a0b2e..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Posix/pal_lld.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Posix/pal_lld.c - * @brief Posix low level simulated PAL driver code. - * - * @addtogroup POSIX_PAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** - * @brief VIO1 simulated port. - */ -sim_vio_port_t vio_port_1; - -/** - * @brief VIO2 simulated port. - */ -sim_vio_port_t vio_port_2; - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Pads mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - * - * @note This function is not meant to be invoked directly by the application - * code. - * @note @p PAL_MODE_UNCONNECTED is implemented as push pull output with high - * state. - * @note This function does not alter the @p PINSELx registers. Alternate - * functions setup must be handled by device-specific code. - */ -void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode) { - - switch (mode) { - case PAL_MODE_RESET: - case PAL_MODE_INPUT: - port->dir &= ~mask; - break; - case PAL_MODE_UNCONNECTED: - port->latch |= mask; - case PAL_MODE_OUTPUT_PUSHPULL: - port->dir |= mask; - break; - } -} - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Posix/pal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/Posix/pal_lld.h deleted file mode 100644 index 9cac72e..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Posix/pal_lld.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Posix/pal_lld.h - * @brief Posix low level simulated PAL driver header. - * - * @addtogroup POSIX_PAL - * @{ - */ - -#ifndef _PAL_LLD_H_ -#define _PAL_LLD_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Unsupported modes and specific modes */ -/*===========================================================================*/ - -#undef PAL_MODE_INPUT_PULLUP -#undef PAL_MODE_INPUT_PULLDOWN -#undef PAL_MODE_OUTPUT_OPENDRAIN -#undef PAL_MODE_INPUT_ANALOG - -/*===========================================================================*/ -/* I/O Ports Types and constants. */ -/*===========================================================================*/ - -/** - * @brief VIO port structure. - */ -typedef struct { - /** - * @brief VIO_LATCH register. - * @details This register represents the output latch of the VIO port. - */ - uint32_t latch; - /** - * @brief VIO_PIN register. - * @details This register represents the logical level at the VIO port - * pin level. - */ - uint32_t pin; - /** - * @brief VIO_DIR register. - * @details Direction of the VIO port bits, 0=input, 1=output. - */ - uint32_t dir; -} sim_vio_port_t; - -/** - * @brief Virtual I/O ports static initializer. - * @details An instance of this structure must be passed to @p palInit() at - * system startup time in order to initialized the digital I/O - * subsystem. This represents only the initial setup, specific pads - * or whole ports can be reprogrammed at later time. - */ -typedef struct { - /** - * @brief Virtual port 1 setup data. - */ - sim_vio_port_t VP1Data; - /** - * @brief Virtual port 2 setup data. - */ - sim_vio_port_t VP2Data; -} PALConfig; - -/** - * @brief Width, in bits, of an I/O port. - */ -#define PAL_IOPORTS_WIDTH 32 - -/** - * @brief Whole port mask. - * @brief This macro specifies all the valid bits into a port. - */ -#define PAL_WHOLE_PORT ((ioportmask_t)0xFFFFFFFF) - -/** - * @brief Digital I/O port sized unsigned type. - */ -typedef uint32_t ioportmask_t; - -/** - * @brief Port Identifier. - */ -typedef sim_vio_port_t *ioportid_t; - -/*===========================================================================*/ -/* I/O Ports Identifiers. */ -/*===========================================================================*/ - -/** - * @brief VIO port 1 identifier. - */ -#define IOPORT1 (&vio_port_1) - -/** - * @brief VIO port 2 identifier. - */ -#define IOPORT2 (&vio_port_2) - -/*===========================================================================*/ -/* Implementation, some of the following macros could be implemented as */ -/* functions, if so please put them in pal_lld.c. */ -/*===========================================================================*/ - -/** - * @brief Low level PAL subsystem initialization. - * - * @param[in] config architecture-dependent ports configuration - */ -#define pal_lld_init(config) { \ - vio_port_1 = (config)->VP1Data; \ - vio_port_2 = (config)->VP2Data; \ -} - -/** - * @brief Reads the physical I/O port states. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The port bits. - */ -#define pal_lld_readport(port) ((port)->pin) - -/** - * @brief Reads the output latch. - * @details The purpose of this function is to read back the latched output - * value. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The latched logical states. - */ -#define pal_lld_readlatch(port) ((port)->latch) - -/** - * @brief Writes a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @param[in] bits bits to be written on the specified port - */ -#define pal_lld_writeport(port, bits) ((port)->latch = (bits)) - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Programming an unknown or unsupported mode is silently ignored. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] mode group mode - */ -#define pal_lld_setgroupmode(port, mask, mode) \ - _pal_lld_setgroupmode(port, mask, mode) - -#if !defined(__DOXYGEN__) -extern sim_vio_port_t vio_port_1; -extern sim_vio_port_t vio_port_2; -extern const PALConfig pal_default_config; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PAL */ - -#endif /* _PAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Posix/platform.mk b/ChibiOS_2.0.8/os/hal/platforms/Posix/platform.mk deleted file mode 100644 index ea0c2e4..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Posix/platform.mk +++ /dev/null @@ -1,7 +0,0 @@ -# List of all the Posix platform files. -PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/Posix/hal_lld.c \ - ${CHIBIOS}/os/hal/platforms/Posix/pal_lld.c \ - ${CHIBIOS}/os/hal/platforms/Posix/serial_lld.c - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/platforms/Posix diff --git a/ChibiOS_2.0.8/os/hal/platforms/Posix/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/Posix/serial_lld.c deleted file mode 100644 index d953e49..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Posix/serial_lld.c +++ /dev/null @@ -1,273 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Posix/serial_lld.c - * @brief Posix low level simulated serial driver code. - * - * @addtogroup POSIX_SERIAL - * @{ - */ - -#include -#include -#include -#include -#include -#include - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** @brief Serial driver 1 identifier.*/ -#if USE_SIM_SERIAL1 || defined(__DOXYGEN__) -SerialDriver SD1; -#endif -/** @brief Serial driver 2 identifier.*/ -#if USE_SIM_SERIAL2 || defined(__DOXYGEN__) -SerialDriver SD2; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** @brief Driver default configuration.*/ -static const SerialConfig default_config = { -}; - -static u_long nb = 1; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -static void init(SerialDriver *sdp, uint16_t port) { - struct sockaddr_in sad; - struct protoent *prtp; - - if ((prtp = getprotobyname("tcp")) == NULL) { - printf("%s: Error mapping protocol name to protocol number\n", sdp->com_name); - goto abort; - } - - sdp->com_listen = socket(PF_INET, SOCK_STREAM, prtp->p_proto); - if (sdp->com_listen == INVALID_SOCKET) { - printf("%s: Error creating simulator socket\n", sdp->com_name); - goto abort; - } - - if (ioctl(sdp->com_listen, FIONBIO, &nb) != 0) { - printf("%s: Unable to setup non blocking mode on socket\n", sdp->com_name); - goto abort; - } - - memset(&sad, 0, sizeof(sad)); - sad.sin_family = AF_INET; - sad.sin_addr.s_addr = INADDR_ANY; - sad.sin_port = htons(port); - if (bind(sdp->com_listen, (struct sockaddr *)&sad, sizeof(sad))) { - printf("%s: Error binding socket\n", sdp->com_name); - goto abort; - } - - if (listen(sdp->com_listen, 1) != 0) { - printf("%s: Error listening socket\n", sdp->com_name); - goto abort; - } - printf("Full Duplex Channel %s listening on port %d\n", sdp->com_name, port); - return; - -abort: - if (sdp->com_listen != INVALID_SOCKET) - close(sdp->com_listen); - exit(1); -} - -static bool_t connint(SerialDriver *sdp) { - - if (sdp->com_data == INVALID_SOCKET) { - struct sockaddr addr; - socklen_t addrlen = sizeof(addr); - - if ((sdp->com_data = accept(sdp->com_listen, &addr, &addrlen)) == INVALID_SOCKET) - return FALSE; - - if (ioctl(sdp->com_data, FIONBIO, &nb) != 0) { - printf("%s: Unable to setup non blocking mode on data socket\n", sdp->com_name); - goto abort; - } - sdAddFlagsI(sdp, SD_CONNECTED); - return TRUE; - } - return FALSE; -abort: - if (sdp->com_listen != INVALID_SOCKET) - close(sdp->com_listen); - if (sdp->com_data != INVALID_SOCKET) - close(sdp->com_data); - exit(1); -} - -static bool_t inint(SerialDriver *sdp) { - - if (sdp->com_data != INVALID_SOCKET) { - int i; - uint8_t data[32]; - - /* - * Input. - */ - int n = recv(sdp->com_data, data, sizeof(data), 0); - switch (n) { - case 0: - close(sdp->com_data); - sdp->com_data = INVALID_SOCKET; - sdAddFlagsI(sdp, SD_DISCONNECTED); - return FALSE; - case INVALID_SOCKET: - if (errno == EWOULDBLOCK) - return FALSE; - close(sdp->com_data); - sdp->com_data = INVALID_SOCKET; - return FALSE; - } - for (i = 0; i < n; i++) - sdIncomingDataI(sdp, data[i]); - return TRUE; - } - return FALSE; -} - -static bool_t outint(SerialDriver *sdp) { - - if (sdp->com_data != INVALID_SOCKET) { - int n; - uint8_t data[1]; - - /* - * Input. - */ - n = sdRequestDataI(sdp); - if (n < 0) - return FALSE; - data[0] = (uint8_t)n; - n = send(sdp->com_data, data, sizeof(data), 0); - switch (n) { - case 0: - close(sdp->com_data); - sdp->com_data = INVALID_SOCKET; - sdAddFlagsI(sdp, SD_DISCONNECTED); - return FALSE; - case INVALID_SOCKET: - if (errno == EWOULDBLOCK) - return FALSE; - close(sdp->com_data); - sdp->com_data = INVALID_SOCKET; - return FALSE; - } - return TRUE; - } - return FALSE; -} - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_SIM_SERIAL1 - sdObjectInit(&SD1, NULL, NULL); - SD1.com_listen = INVALID_SOCKET; - SD1.com_data = INVALID_SOCKET; - SD1.com_name = "SD1"; -#endif - -#if USE_SIM_SERIAL2 - sdObjectInit(&SD2, NULL, NULL); - SD2.com_listen = INVALID_SOCKET; - SD2.com_data = INVALID_SOCKET; - SD2.com_name = "SD2"; -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - -#if USE_SIM_SERIAL1 - if (sdp == &SD1) - init(&SD1, SIM_SD1_PORT); -#endif - -#if USE_SIM_SERIAL2 - if (sdp == &SD2) - init(&SD2, SIM_SD2_PORT); -#endif -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the USART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - - (void)sdp; -} - -bool_t sd_lld_interrupt_pending(void) { - - return connint(&SD1) || connint(&SD2) || - inint(&SD1) || inint(&SD2) || - outint(&SD1) || outint(&SD2); -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Posix/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/Posix/serial_lld.h deleted file mode 100644 index bbf6a5e..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Posix/serial_lld.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Posix/serial_lld.h - * @brief Posix low level simulated serial driver header. - * - * @addtogroup POSIX_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Serial buffers size. - * @details Configuration parameter, you can change the depth of the queue - * buffers depending on the requirements of your application. - */ -#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_BUFFERS_SIZE 1024 -#endif - -/** - * @brief SD1 driver enable switch. - * @details If set to @p TRUE the support for SD1 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_SIM_SERIAL1) || defined(__DOXYGEN__) -#define USE_SIM_SERIAL1 TRUE -#endif - -/** - * @brief SD2 driver enable switch. - * @details If set to @p TRUE the support for SD2 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_SIM_SERIAL2) || defined(__DOXYGEN__) -#define USE_SIM_SERIAL2 TRUE -#endif - -/** - * @brief Listen port for SD1. - */ -#if !defined(SD1_PORT) || defined(__DOXYGEN__) -#define SIM_SD1_PORT 29001 -#endif - -/** - * @brief Listen port for SD2. - */ -#if !defined(SD2_PORT) || defined(__DOXYGEN__) -#define SIM_SD2_PORT 29002 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint32_t sdflags_t; - -/** - * @brief Generic Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - * @note This structure content is architecture dependent, each driver - * implementation defines its own version and the custom static - * initializers. - */ -typedef struct { -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ \ - /* Listen socket for simulated serial port.*/ \ - SOCKET com_listen; \ - /* Data socket for simulated serial port.*/ \ - SOCKET com_data; \ - /* Port readable name.*/ \ - const char *com_name; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_SIM_SERIAL1 && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif -#if USE_SIM_SERIAL2 && !defined(__DOXYGEN__) -extern SerialDriver SD2; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); - bool_t sd_lld_interrupt_pending(void); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/hal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/SPC56x/hal_lld.c deleted file mode 100644 index b718210..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/hal_lld.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file SPC56x/hal_lld.c - * @brief SPC563 HAL subsystem low level driver source. - * - * @addtogroup SPC563_HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - extern void _vectors(void); - uint32_t n; - - /* Enables the branch prediction, clears and enables the BTB into the - BUCSR special register (1013).*/ - asm volatile ("li %%r3, 0x0201 \t\n" - "mtspr 1013, %%r3": : : "r3"); - - /* FLASH wait states and prefetching setup.*/ - CFLASH0.BIUCR.R = SPC563_FLASH_BIUCR | SPC563_FLASH_WS; - CFLASH0.BIUCR2.R = 0; - CFLASH0.PFCR3.R = 0; - - /* Optimal crossbar settings. The DMA priority is placed above the CPU - priority in order to not starve I/O activities while the CPU is - excuting tight loops (FLASH and SRAM slave ports only). - The SRAM is parked on the load/store port, for some unknown reason it - is defaulted on the instructions port and this kills performance.*/ - XBAR.SGPCR3.B.PARK = 4; /* RAM slave on load/store port.*/ - XBAR.MPR0.R = 0x00030201; /* Flash slave port priorities: - eDMA (1): 0 (highest) - Core Instructions (0): 1 - Undocumented (2): 2 - Core Data (4): 3 */ - XBAR.MPR3.R = 0x00030201; /* SRAM slave port priorities: - eDMA (1): 0 (highest) - Core Instructions (0): 1 - Undocumented (2): 2 - Core Data (4): 3 */ - - /* Downcounter timer initialized for system tick use, TB enabled for debug - and measurements.*/ - n = SPC563_SYSCLK / CH_FREQUENCY; - asm volatile ("li %%r3, 0 \t\n" - "mtspr 284, %%r3 \t\n" /* Clear TBL register. */ - "mtspr 285, %%r3 \t\n" /* Clear TBU register. */ - "mtspr 22, %[n] \t\n" /* Init. DEC register. */ - "mtspr 54, %[n] \t\n" /* Init. DECAR register.*/ - "li %%r3, 0x4000 \t\n" /* TBEN bit. */ - "mtspr 1008, %%r3 \t\n" /* HID0 register. */ - "lis %%r3, 0x0440 \t\n" /* DIE ARE bits. */ - "mtspr 340, %%r3" /* TCR register. */ - : : [n] "r" (n) : "r3"); - - /* INTC initialization, software vector mode, 4 bytes vectors, starting - at priority 0.*/ - INTC.MCR.R = 0; - INTC.CPR.R = 0; - INTC.IACKR.R = (uint32_t)_vectors; -} - -/** - * @brief SPC563 clocks and PLL initialization. - * @note All the involved constants come from the file @p board.h and - * @p hal_lld.h - */ -void spc563_clock_init(void) { - - /* PLL activation.*/ - FMPLL.ESYNCR1.B.EMODE = 1; - FMPLL.ESYNCR1.B.CLKCFG &= 1; /* Bypass mode, PLL off.*/ - FMPLL.ESYNCR1.B.CLKCFG |= 2; /* PLL on. */ - FMPLL.ESYNCR1.B.EPREDIV = SPC563_CLK_PREDIV; - FMPLL.ESYNCR1.B.EMFD = SPC563_CLK_MFD; - FMPLL.ESYNCR2.B.ERFD = SPC563_CLK_RFD; - while (!FMPLL.SYNSR.B.LOCK) - ; - FMPLL.ESYNCR1.B.CLKCFG |= 4; /* Clock from the PLL. */ -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/SPC56x/hal_lld.h deleted file mode 100644 index f0857cc..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/hal_lld.h +++ /dev/null @@ -1,231 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file SPC56x/hal_lld.h - * @brief SPC563 HAL subsystem low level driver header. - * - * @addtogroup SPC563_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -#include "mpc563m.h" - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "SPC563M64" - -#define RFD_DIV2 0 /**< Divide VCO frequency by 2. */ -#define RFD_DIV4 1 /**< Divide VCO frequency by 4. */ -#define RFD_DIV8 2 /**< Divide VCO frequency by 8. */ -#define RFD_DIV16 3 /**< Divide VCO frequency by 16.*/ - -/* The following settings are related to the FLASH controller, performance - and stability depends on them, be careful.*/ -#define BIUCR_BANK1_TOO 0x01000000 /**< Use settings for bank1 too.*/ -#define BIUCR_MASTER7_PREFETCH 0x00800000 /**< Enable master 7 prefetch. */ -#define BIUCR_MASTER6_PREFETCH 0x00400000 /**< Enable master 6 prefetch. */ -#define BIUCR_MASTER5_PREFETCH 0x00200000 /**< Enable master 5 prefetch. */ -#define BIUCR_MASTER4_PREFETCH 0x00100000 /**< Enable master 4 prefetch. */ -#define BIUCR_MASTER3_PREFETCH 0x00080000 /**< Enable master 3 prefetch. */ -#define BIUCR_MASTER2_PREFETCH 0x00040000 /**< Enable master 2 prefetch. */ -#define BIUCR_MASTER1_PREFETCH 0x00020000 /**< Enable master 1 prefetch. */ -#define BIUCR_MASTER0_PREFETCH 0x00010000 /**< Enable master 0 prefetch. */ -#define BIUCR_APC_MASK 0x0000E000 /**< APC field mask. */ -#define BIUCR_APC_0 (0 << 13) /**< No additional hold cycles. */ -#define BIUCR_APC_1 (1 << 13) /**< 1 additional hold cycle. */ -#define BIUCR_APC_2 (2 << 13) /**< 2 additional hold cycles. */ -#define BIUCR_APC_3 (3 << 13) /**< 3 additional hold cycles. */ -#define BIUCR_APC_4 (4 << 13) /**< 4 additional hold cycles. */ -#define BIUCR_APC_5 (5 << 13) /**< 5 additional hold cycles. */ -#define BIUCR_APC_6 (6 << 13) /**< 6 additional hold cycles. */ -#define BIUCR_WWSC_MASK 0x00001800 /**< WWSC field mask. */ -#define BIUCR_WWSC_0 (0 << 11) /**< No write wait states. */ -#define BIUCR_WWSC_1 (1 << 11) /**< 1 write wait state. */ -#define BIUCR_WWSC_2 (2 << 11) /**< 2 write wait states. */ -#define BIUCR_WWSC_3 (3 << 11) /**< 3 write wait states. */ -#define BIUCR_RWSC_MASK 0x00001800 /**< RWSC field mask. */ -#define BIUCR_RWSC_0 (0 << 8) /**< No read wait states. */ -#define BIUCR_RWSC_1 (1 << 8) /**< 1 read wait state. */ -#define BIUCR_RWSC_2 (2 << 8) /**< 2 read wait states. */ -#define BIUCR_RWSC_3 (3 << 8) /**< 3 read wait states. */ -#define BIUCR_RWSC_4 (4 << 8) /**< 4 read wait states. */ -#define BIUCR_RWSC_5 (5 << 8) /**< 5 read wait states. */ -#define BIUCR_RWSC_6 (6 << 8) /**< 6 read wait states. */ -#define BIUCR_RWSC_7 (7 << 8) /**< 7 read wait states. */ -#define BIUCR_DPFEN 0x00000040 /**< Data prefetch enable. */ -#define BIUCR_IPFEN 0x00000010 /**< Instr. prefetch enable. */ -#define BIUCR_PFLIM_MASK 0x00000060 /**< PFLIM field mask. */ -#define BIUCR_PFLIM_NO (0 << 1) /**< No prefetching. */ -#define BIUCR_PFLIM_ON_MISS (1 << 1) /**< Prefetch on miss. */ -#define BIUCR_PFLIM_ON_HITMISS (2 << 1) /**< Prefetch on hit and miss. */ -#define BIUCR_BFEN 0x00000001 /**< Flash buffering enable. */ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Clock bypass. - * @note If set to @p TRUE then the PLL is not started and initialized, the - * external clock is used as-is and the other clock-related settings - * are ignored. - */ -#if !defined(SPC563_CLK_BYPASS) || defined(__DOXYGEN__) -#define SPC563_CLK_BYPASS FALSE -#endif - -/** - * @brief Disables the overclock checks. - */ -#if !defined(SPC563_ALLOW_OVERCLOCK) || defined(__DOXYGEN__) -#define SPC563_ALLOW_OVERCLOCK FALSE -#endif - -/** - * @brief External clock pre-divider. - * @note Must be in range 0...14. - * @note The effective divider factor is this value plus one. - */ -#if !defined(SPC563_CLK_PREDIV) || defined(__DOXYGEN__) -#define SPC563_CLK_PREDIV 0 -#endif - -/** - * @brief Multiplication factor divider. - * @note Must be in range 32...96. - */ -#if !defined(SPC563_CLK_MFD) || defined(__DOXYGEN__) -#define SPC563_CLK_MFD 40 -#endif - -/** - * @brief Reduced frequency divider. - */ -#if !defined(SPC563_CLK_RFD) || defined(__DOXYGEN__) -#define SPC563_CLK_RFD RFD_DIV4 -#endif - -/** - * @brief Flash buffer and prefetching settings. - * @note Please refer to the SPC563M64 reference manual about the meaning - * of the following bits, if in doubt DO NOT MODIFY IT. - * @note Do not specify the APC, WWSC, RWSC bits in this value because - * those are calculated from the system clock and ORed with this - * value. - */ -#if !defined(SPC563_FLASH_BIUCR) || defined(__DOXYGEN__) -#define SPC563_FLASH_BIUCR (BIUCR_BANK1_TOO | \ - BIUCR_MASTER4_PREFETCH | \ - BIUCR_MASTER0_PREFETCH | \ - BIUCR_DPFEN | \ - BIUCR_IPFEN | \ - BIUCR_PFLIM_ON_MISS | \ - BIUCR_BFEN) -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if (SPC563_CLK_PREDIV < 0) || (SPC563_CLK_PREDIV > 14) -#error "invalid SPC563_CLK_PREDIV value specified" -#endif - -#if (SPC563_CLK_MFD < 32) || (SPC563_CLK_MFD > 96) -#error "invalid SPC563_CLK_MFD value specified" -#endif - -#if (SPC563_CLK_RFD != RFD_DIV2) && (SPC563_CLK_RFD != RFD_DIV4) && \ - (SPC563_CLK_RFD != RFD_DIV8) && (SPC563_CLK_RFD != RFD_DIV16) -#error "invalid SPC563_CLK_RFD value specified" -#endif - -/** - * @brief PLL output clock. - */ -#define SPC563_PLLCLK ((EXTCLK / (SPC563_CLK_PREDIV + 1)) * SPC563_CLK_MFD) - -#if (SPC563_PLLCLK < 256000000) || (SPC563_PLLCLK > 512000000) -#error "VCO frequency out of the acceptable range (256...512)" -#endif - -/** - * @brief PLL output clock. - */ -#if !SPC563_CLK_BYPASS || defined(__DOXYGEN__) -#define SPC563_SYSCLK (SPC563_PLLCLK / (1 << (SPC563_CLK_RFD + 1))) -#else -#define SPC563_SYSCLK EXTCLK -#endif - -#if (SPC563_SYSCLK > 80000000) && !SPC563_ALLOW_OVERCLOCK -#error "System clock above maximum rated frequency (80MHz)" -#endif - -/** - * @brief Flash wait states are a function of the system clock. - */ -#if (SPC563_SYSCLK <= 30000000) || defined(__DOXYGEN__) -#define SPC563_FLASH_WS (BIUCR_APC_0 | BIUCR_RWSC_0 | BIUCR_WWSC_1) -#elif SPC563_SYSCLK <= 60000000 -#define SPC563_FLASH_WS (BIUCR_APC_1 | BIUCR_RWSC_1 | BIUCR_WWSC_1) -#else -#define SPC563_FLASH_WS (BIUCR_APC_2 | BIUCR_RWSC_2 | BIUCR_WWSC_1) -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); - void spc563_clock_init(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/mpc563m.h b/ChibiOS_2.0.8/os/hal/platforms/SPC56x/mpc563m.h deleted file mode 100644 index e319138..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/mpc563m.h +++ /dev/null @@ -1,4123 +0,0 @@ -/**************************************************************************/ - -/* FILE NAME: mpc563xm.h COPYRIGHT (c) Freescale 2008,2009 */ -/* VERSION: 2.0 All Rights Reserved */ -/* */ -/* DESCRIPTION: */ -/* This file contain all of the register and bit field definitions for */ -/* MPC563xM. This version supports revision 1.0 and later. */ -/*========================================================================*/ -/* UPDATE HISTORY */ -/* REV AUTHOR DATE DESCRIPTION OF CHANGE */ -/* --- ----------- --------- --------------------- */ -/* 1.0 G. Emerson 31/OCT/07 Initial version. */ -/* 1.1 G. Emerson 20/DEC/07 Added SYSDIV HLT HLTACK */ -/* Added ESYNCR1 ESYNCR2 SYNFMMR */ -/* 1.2 G. Emerson 31/JAN/08 Change eMIOS channels so there are 24. */ -/* 8 channels in the middle of the range */ -/* do not exist */ -/* 1.3 G. Emerson 30/JUL/08 FLEXCAN - Supports FIFO and Buffer. */ -/* RXIMR added */ -/* FMPLL - Added FMPLL.SYNFMMR.B.BSY */ -/* SIU - Added SIU.ISEL0-3 */ -/* EMIOS - Added EMIOS.CH[x].ALTCADR.R */ -/* MCM - Replaced ECSM with MCM */ -/* removing SWT registers as defined at */ -/* seperate memory location. PFLASH */ -/* registers pre-fixed with P*. Added PCT,*/ -/* PLREV, PLAMC, PLASC, IOPMC, MRSR, MWCR.*/ -/* PBRIDGE - Removed as no PBRIDGE */ -/* registers. */ -/* INTC - Updated number of PSR from */ -/* 358 to 360. */ -/* mpc5500_spr.h - Added RI to MSR and NMI*/ -/* to MSCR. */ -/* 1.4 G. Emerson 30/SEP/08 Add SIU.MIDR2 */ -/* Changes to SIU.MIDR as per RM. */ -/* 1.5 May 2009 Changes to match documentation, removed*/ -/* Not released */ -/* 1.6 K. Odenthal 03/June/09 Update for 1.5M version of the MPC563xM*/ -/* & R. Dees */ -/* INTC - All Processor 0 regs matched to previous */ -/* version */ -/* INTC - BCR renamed to MCR to match previous */ -/* version */ -/* INTC - VTES_PRC1 and HVEN_PRC1 added to MCR */ -/* INTC - CPR_PRC1, IACKR_PRC1 and EOIR_PRC1 */ -/* registers added */ -/* INTC - 512 PSR registers instead of 364 */ -/* ECSM - (Internal - mcm -> ecsm in the source files*/ -/* for generating the header file */ -/* ECSM - All bits and regs got an additional "p" in */ -/* the name in the user manual for "Platform" */ -/* -> deleted to match */ -/* ECSM - SWTCR, SWTSR and SWTIR don't exist in */ -/* MPC563xM -> deleted */ -/* ECSM - PROTECTION in the URM is one bitfield, */ -/* in mop5534 this are four: PROT1-4 -> */ -/* changed to match */ -/* EMCM - removed undocumented registers */ -/* ECSM - RAM ECC Syndrome is new in MPC563xM -> added */ -/* XBAR - removed AMPR and ASGPCR registers */ -/* XBAR - removed HPE bits for nonexistant masters */ -/* EBI - added: D16_31, AD_MUX and SETA bits */ -/* EBI - Added reserved register at address 0x4. */ -/* EBI - Corrected number of chip selects in for both*/ -/* the EBI_CS and the CAL_EBI_CS */ -/* SIU - corrected number of GPDO registers and */ -/* allowed for maximum PCR registers. */ -/* SWT - add KEY bit to CR, correct WND (from WNO) */ -/* SWT - add SK register */ -/* PMC - moved bits from CFGR to Status Register (SR)*/ -/* PMC - Added SR */ -/* DECFIL - Added new bits DSEL, IBIE, OBIE, EDME, */ -/* TORE, & TRFE to MCR. Added IBIC, OBIC, */ -/* DIVRC, IBIF, OBIF, DIVR to MSR. */ -/* changed OUTTEG to OUTTAG in OB */ -/* Change COEF to TAG in TAG register */ -/* EQADC - removed REDLCCR - not supported */ -/* FLASH - Aligned register and bit names with legacy*/ -/* 1.7 K. Odenthal 10/November/09 */ -/* SIU - changed PCR[n].PA from 3 bit to 4 bit */ -/* eTPU - changed WDTR_A.WDM from 1 bit to 2 bits */ -/* DECFIL - changed COEF.R and TAP.R from 16 bit to */ -/* 32 bit */ -/* 2.0 K. Odenthal 12/February/2010 */ -/* TSENS - Temperature Sensor Module added to */ -/* header file */ -/* ANSI C Compliance - Register structures have a */ -/* Bitfield Tag ('B') tag only if there is */ -/* at least one Bitfiels defined. Empty */ -/* tags like 'vuint32_t:32;' are not */ -/* allowed. */ -/* DECFIL - removed MXCR register. This register is */ -/* not supported on this part */ -/* SIU - SWT_SEL bit added in SIU DIRER register */ -/* EDMA - removed HRSL, HRSH and GPOR registers. */ -/* Those registers are not supported in */ -/* that part. */ -/* ESCI - removed LDBG and DSF bits from LCR */ -/* registers. Those bits are not supported */ -/* in that part. */ -/* Those registers are not supported in */ -/* that part. */ -/**************************************************************************/ -/*>>>>NOTE! this file is auto-generated please do not edit it!<<<<*/ - -#ifndef _MPC563M_H_ -#define _MPC563M_H_ - -#include "typedefs.h" - -#ifdef __cplusplus -extern "C" { - -#endif /* - */ - -#ifdef __MWERKS__ -#pragma push -#pragma ANSI_strict off -#endif /* - */ - -/****************************************************************************/ -/* MODULE : FMPLL */ -/****************************************************************************/ - struct FMPLL_tag { - union { - vuint32_t R; - struct { - vuint32_t:1; - vuint32_t PREDIV:3; - vuint32_t MFD:5; - vuint32_t:1; - vuint32_t RFD:3; - vuint32_t LOCEN:1; - vuint32_t LOLRE:1; - vuint32_t LOCRE:1; - vuint32_t:1; /* Reserved in MPC563xM - - Deleted for legacy header version [mpc5534.h]: - - */ - vuint32_t LOLIRQ:1; - vuint32_t LOCIRQ:1; - vuint32_t:13; /* Reserved in MPC563xM - - Deleted for legacy header version [mpc5534.h]: - - - - - - */ - } B; - } SYNCR; - union { - vuint32_t R; - struct { - vuint32_t:22; - vuint32_t LOLF:1; - vuint32_t LOC:1; - vuint32_t MODE:1; - vuint32_t PLLSEL:1; - vuint32_t PLLREF:1; - vuint32_t LOCKS:1; - vuint32_t LOCK:1; - vuint32_t LOCF:1; - vuint32_t:2; /* Reserved in MPC563xM - - Deleted for legacy header version [mpc5534.h]: - - - - */ - } B; - } SYNSR; - union { - vuint32_t R; - struct { - vuint32_t EMODE:1; - vuint32_t CLKCFG:3; - vuint32_t:8; - vuint32_t EPREDIV:4; - vuint32_t:9; - vuint32_t EMFD:7; - } B; - } ESYNCR1; /* Enhanced Synthesizer Control Register 1 (ESYNCR1) (new in MPC563xM) Offset 0x0008 */ - union { - vuint32_t R; - struct { - vuint32_t:8; - vuint32_t LOCEN:1; - vuint32_t LOLRE:1; - vuint32_t LOCRE:1; - vuint32_t LOLIRQ:1; - vuint32_t LOCIRQ:1; - vuint32_t:17; - vuint32_t ERFD:2; - } B; - } ESYNCR2; /* Enhanced Synthesizer Control Register 2 (ESYNCR2) (new in MPC563xM) Offset 0x000C */ - int32_t FMPLL_reserved0[2]; - union { - vuint32_t R; - struct { - vuint32_t BSY:1; - vuint32_t MODEN:1; - vuint32_t MODSEL:1; - vuint32_t MODPERIOD:13; - vuint32_t:1; - vuint32_t INCSTEP:15; - } B; - } SYNFMMR; /* Synthesizer FM Modulation Register (SYNFMMR) (new in MPC563xM) Offset 0x0018 */ - }; -/****************************************************************************/ -/* MODULE : EBI */ -/****************************************************************************/ - struct CS_tag { - union { - vuint32_t R; - struct { - vuint32_t BA:17; /* */ - vuint32_t:3; /* */ - vuint32_t PS:1; /* */ - vuint32_t:3; /* */ - vuint32_t AD_MUX:1; /* new in MPC563xM */ - vuint32_t BL:1; /* */ - vuint32_t WEBS:1; /* */ - vuint32_t TBDIP:1; /* */ - vuint32_t:1; /* */ - vuint32_t SETA:1; /* new in MPC563xM */ - vuint32_t BI:1; /* */ - vuint32_t V:1; /* */ - } B; - } BR; /* EBI_BR */ - union { - vuint32_t R; - struct { - vuint32_t AM:17; /* */ - vuint32_t:7; /* */ - vuint32_t SCY:4; /* */ - vuint32_t:1; /* */ - vuint32_t BSCY:2; /* */ - vuint32_t:1; /* */ - } B; - } OR; /* EBI_OR */ - }; - struct CAL_CS_tag { - union { - vuint32_t R; - struct { - vuint32_t BA:17; /* */ - vuint32_t:3; /* */ - vuint32_t PS:1; /* */ - vuint32_t:3; /* */ - vuint32_t AD_MUX:1; /* new in MPC563xM */ - vuint32_t BL:1; /* */ - vuint32_t WEBS:1; /* */ - vuint32_t TBDIP:1; /* */ - vuint32_t:1; /* */ - vuint32_t SETA:1; /* new in MPC563xM */ - vuint32_t BI:1; /* */ - vuint32_t V:1; /* */ - } B; - } BR; /* EBI_CAL_BR */ - - union { - vuint32_t R; - struct { - vuint32_t AM:17; /* */ - vuint32_t:7; /* */ - vuint32_t SCY:4; /* */ - vuint32_t:1; /* */ - vuint32_t BSCY:2; /* */ - vuint32_t:1; /* */ - } B; - } OR; /* EBI_CAL_OR */ - - }; - - struct EBI_tag { - union { - vuint32_t R; - struct { - vuint32_t:5; /* */ - vuint32_t SIZEEN:1; /* SIZEN */ - vuint32_t SIZE:2; /* */ - vuint32_t:8; /* */ - vuint32_t ACGE:1; /* */ - vuint32_t EXTM:1; /* */ - vuint32_t EARB:1; /* */ - vuint32_t EARP:2; /* */ - vuint32_t:4; /* */ - vuint32_t MDIS:1; /* */ - vuint32_t:3; /* */ - vuint32_t D16_31:1; /* new in MPC563xM */ - vuint32_t AD_MUX:1; /* new in MPC563xM */ - vuint32_t DBM:1; /* */ - } B; - } MCR; /* EBI Module Configuration Register (MCR) EBI_MCR @baseaddress + 0x00 */ - - uint32_t EBI_reserved1[1]; - - union { - vuint32_t R; - struct { - vuint32_t:30; /* */ - vuint32_t TEAF:1; /* */ - vuint32_t BMTF:1; /* */ - } B; - } TESR; /* EBI Transfer Error Status Register (TESR) EBI_TESR @baseaddress + 0x08 */ - - union { - vuint32_t R; - struct { - vuint32_t:16; /* */ - vuint32_t BMT:8; /* */ - vuint32_t BME:1; /* */ - vuint32_t:7; /* */ - } B; - } BMCR; /* EBI_BMCR @baseaddress + 0x0C */ - - struct CS_tag CS[4]; - - uint32_t EBI_reserved2[4]; - - /* Calibration registers */ - struct CAL_CS_tag CAL_CS[4]; - - }; /* end of EBI_tag */ -/****************************************************************************/ -/* MODULE : FLASH */ -/****************************************************************************/ -/* 3 flash modules implemented. */ -/* HBL and HBS not used in Bank 0 / Array 0 */ -/* LML, SLL, LMS, PFCR1, PFAPR, PFCR2, and PFCR3 not used in */ -/* Bank 1 / Array 1 or Bank 1 / Array 3 */ -/****************************************************************************/ - struct FLASH_tag { - union { /* Module Configuration Register (MCR)@baseaddress + 0x00 */ - vuint32_t R; - struct { - vuint32_t EDC:1; /* ECC Data Correction (Read/Clear) */ - vuint32_t:4; /* Reserved */ - vuint32_t SIZE:3; /* Array Size (Read Only) */ - vuint32_t:1; /* Reserved */ - vuint32_t LAS:3; /* Low Address Space (Read Only) */ - vuint32_t:3; /* Reserved */ - vuint32_t MAS:1; /* Mid Address Space (Read Only) */ - vuint32_t EER:1; /* ECC Event Error (Read/Clear) *//* BBEPE and EPE */ - vuint32_t RWE:1; /* Read While Write Event Error (Read/Clear) */ - vuint32_t:2; /* Reserved */ - vuint32_t PEAS:1; /* Program/Erase Access Space (Read Only) */ - vuint32_t DONE:1; /* Status (Read Only) */ - vuint32_t PEG:1; /* Program/Erase Good (Read Only) */ - vuint32_t:4; /* Reserved *//* RSD PEG STOP RSVD */ - vuint32_t PGM:1; /* Program (Read/Write) */ - vuint32_t PSUS:1; /* Program Suspend (Read/Write) */ - vuint32_t ERS:1; /* Erase (Read/Write) */ - vuint32_t ESUS:1; /* Erase Suspend (Read/Write) */ - vuint32_t EHV:1; /* Enable High Voltage (Read/Write) */ - } B; - } MCR; - - union { /* Low/Mid-Address Space Block Locking Register (LML)@baseaddress + 0x04 */ - vuint32_t R; - struct { - vuint32_t LME:1; /* Low/Mid address space block enable (Read Only) */ - vuint32_t:10; /* Reserved */ - vuint32_t SLOCK:1; /*SLK *//* Shadow address space block lock (Read/Write) */ - vuint32_t:2; /* Reserved */ - vuint32_t MLOCK:2; /*MLK *//* Mid address space block lock (Read/Write) */ - vuint32_t:8; /* Reserved */ - vuint32_t LLOCK:8; /*LLK *//* Low address space block lock (Read/Write) */ - } B; - } LMLR; /*LML */ - - union { /* High-Address Space Block Locking Register (HBL) - @baseaddress + 0x08 */ - vuint32_t R; - struct { - vuint32_t HBE:1; /* High address space Block Enable (Read Only) */ - vuint32_t:27; /* Reserved */ - vuint32_t HBLOCK:4; /* High address space block lock (Read/Write) */ - } B; - } HLR; /*HBL */ - - union { /* Secondary Low/Mid-Address Space Block Locking Register (SLL)@baseaddress + 0x0C */ - vuint32_t R; - struct { - vuint32_t SLE:1; /* Secondary low/mid address space block enable (Read Only) */ - vuint32_t:10; /* Reserved */ - vuint32_t SSLOCK:1; /*SSLK *//* Secondary shadow address space block lock (Read/Write) */ - vuint32_t:2; /* Reserved */ - vuint32_t SMLOCK:2; /*SMK *//* Secondary mid address space block lock (Read/Write) */ - vuint32_t:8; /* Reserved */ - vuint32_t SLLOCK:8; /*SLK *//* Secondary low address space block lock (Read/Write) */ - } B; - } SLMLR; /*SLL */ - - union { /* Low/Mid-Address Space Block Select Register (LMS)@baseaddress + 0x10 */ - vuint32_t R; - struct { - vuint32_t:14; /* Reserved */ - vuint32_t MSEL:2; /*MSL *//* Mid address space block select (Read/Write) */ - vuint32_t:8; /* Reserved */ - vuint32_t LSEL:8; /*LSL *//* Low address space block select (Read/Write) */ - } B; - } LMSR; /*LMS */ - - union { /* High-Address Space Block Select Register (HBS) - not used@baseaddress + 0x14 */ - vuint32_t R; - struct { - vuint32_t:28; /* Reserved */ - vuint32_t HBSEL:4; /*HSL *//* High address space block select (Read/Write) */ - } B; - } HSR; /*HBS */ - - union { /* Address Register (ADR)@baseaddress + 0x18 */ - vuint32_t R; - struct { - vuint32_t SAD:1; /* Shadow address (Read Only) */ - vuint32_t:10; /* Reserved */ - vuint32_t ADDR:18; /*AD *//* Address 20-3 (Read Only) */ - vuint32_t:3; /* Reserved */ - } B; - } AR; /*ADR */ - - union { /* @baseaddress + 0x1C */ - vuint32_t R; - struct { - vuint32_t:7; /* Reserved */ - vuint32_t GCE:1; /* Global Configuration Enable (Read/Write) */ - vuint32_t:4; /* Reserved */ - vuint32_t M3PFE:1; /* Master 3 Prefetch Enable (Read/Write) */ - vuint32_t M2PFE:1; /* Master 2 Prefetch Enable (Read/Write) */ - vuint32_t M1PFE:1; /* Master 1 Prefetch Enable (Read/Write) */ - vuint32_t M0PFE:1; /* Master 0 Prefetch Enable (Read/Write) */ - vuint32_t APC:3; /* Address Pipelining Control (Read/Write) */ - vuint32_t WWSC:2; /* Write Wait State Control (Read/Write) */ - vuint32_t RWSC:3; /* Read Wait State Control (Read/Write) */ - vuint32_t:1; /* Reserved */ - vuint32_t DPFEN:1; /*DPFE *//* Data Prefetch Enable (Read/Write) */ - vuint32_t:1; /* Reserved */ - vuint32_t IPFEN:1; /*IPFE *//* Instruction Prefetch Enable (Read/Write) */ - vuint32_t:1; /* Reserved */ - vuint32_t PFLIM:2; /* Prefetch Limit (Read/Write) */ - vuint32_t BFEN:1; /*BFE *//* Buffer Enable (Read/Write) */ - } B; - } BIUCR; /*PFCR1 */ - - union { /* @baseaddress + 0x20 */ - vuint32_t R; - struct { - vuint32_t:24; /* Reserved */ - vuint32_t M3AP:2; /* Master 3 Access Protection (Read/Write) */ - vuint32_t M2AP:2; /* Master 2 Access Protection (Read/Write) */ - vuint32_t M1AP:2; /* Master 1 Access Protection (Read/Write) */ - vuint32_t M0AP:2; /* Master 0 Access Protection (Read/Write) */ - } B; - } BIUAPR; /*PFAPR */ - - union { /* @baseaddress + 0x24 */ - vuint32_t R; - struct { - vuint32_t LBCFG:2; /* Line Buffer Configuration (Read/Write) */ - vuint32_t:30; /* Reserved */ - } B; - } BIUCR2; - - union { /* @baseaddress + 0x28 */ - vuint32_t R; - struct { - vuint32_t:25; /* Reserved */ - vuint32_t B1_DPFE:1; /* Bank1 Data Prefetch Enable (Read/Write) */ - vuint32_t:1; /* Reserved */ - vuint32_t B1_IPFE:1; /* Bank1 Instruction Prefetch Enable (Read/Write) */ - vuint32_t:1; /* Reserved */ - vuint32_t B1_PFLIM:2; /* Bank1 Prefetch Limit (Read/Write) */ - vuint32_t B1_BFE:1; /* Bank1 Buffer Enable (Read/Write) */ - } B; - } PFCR3; - - int32_t FLASH_reserverd_89[4]; - - union { /* User Test 0 (UT0) register@baseaddress + 0x3c */ - vuint32_t R; - struct { - vuint32_t UTE:1; /* User test enable (Read/Clear) */ - vuint32_t SBCE:1; /* Single bit correction enable (Read/Clear) */ - vuint32_t:6; /* Reserved */ - vuint32_t DSI:8; /* Data syndrome input (Read/Write) */ - vuint32_t:9; /* Reserved */ - vuint32_t:1; /* Reserved (Read/Write) */ - vuint32_t MRE:1; /* Margin Read Enable (Read/Write) */ - vuint32_t MRV:1; /* Margin Read Value (Read/Write) */ - vuint32_t EIE:1; /* ECC data Input Enable (Read/Write) */ - vuint32_t AIS:1; /* Array Integrity Sequence (Read/Write) */ - vuint32_t AIE:1; /* Array Integrity Enable (Read/Write) */ - vuint32_t AID:1; /* Array Integrity Done (Read Only) */ - } B; - } UT0; - - union { /* User Test 1 (UT1) register@baseaddress + 0x40 */ - vuint32_t R; - struct { - vuint32_t DAI:32; /* Data Array Input (Read/Write) */ - } B; - } UT1; - - union { /* User Test 2 (UT2) register@baseaddress + 0x44 */ - vuint32_t R; - struct { - vuint32_t DAI:32; /* Data Array Input (Read/Write) */ - } B; - } UT2; - - union { /* User Multiple Input Signature Register 0-5 (UMISR[5])@baseaddress + 0x48 */ - vuint32_t R; - struct { - vuint32_t MS:32; /* Multiple input Signature (Read/Write) */ - } B; - } UMISR[5]; - - }; /* end of FLASH_tag */ -/****************************************************************************/ -/* MODULE : SIU */ -/****************************************************************************/ - struct SIU_tag { - union { - vuint32_t R; - struct { - vuint32_t S_F:1; /* Identifies the Manufacturer S/F */ - vuint32_t FLASH_SIZE_1:4; /* Define major Flash memory size (see Table 15-4 for details) Flash Size 1 */ - vuint32_t FLASH_SIZE_2:4; /* Define Flash memory size, small granularity (see Table 15-5 for details) Flash Size 1 */ - vuint32_t TEMP_RANGE:2; /* Define maximum operating range Temp Range */ - vuint32_t:1; /* Reserved for future enhancements */ - vuint32_t MAX_FREQ:2; /* Define maximum device speed Max Freq */ - vuint32_t:1; /* Reserved for future enhancements */ - vuint32_t SUPPLY:1; /* Defines if the part is 5V or 3V Supply */ - vuint32_t PART_NUMBER:8; /* Contain the ASCII representation of the character that indicates the product Part Number */ - vuint32_t TBD:1; /* 1-bit field defined by SoC to describe optional feature, e.g., additional SPI */ - vuint32_t:2; /* Reserved for future enhancements */ - vuint32_t EE:1; /* Indicates if Data Flash is present */ - vuint32_t:3; /* Reserved for future enhancements */ - vuint32_t FR:1; /* Indicates if Data FlexRay is present */ - } B; - } MIDR2; /* MCU ID Register 2 SIU_MIDR2 @baseaddress + 0x4 */ - - union { - vuint32_t R; - struct { - vuint32_t PARTNUM:16; /* Device part number: 0x5633 */ - vuint32_t CSP:1; /* CSP configuration (new in MPC563xM) */ - vuint32_t PKG:5; /* Indicate the package the die is mounted in. (new in MPC563xM) */ - vuint32_t:2; /* Reserved */ - vuint32_t MASKNUM:8; /* MCU major mask number; updated for each complete resynthesis. MCU minor mask number; updated for each mask revision */ - } B; - } MIDR; /* MCU ID Register (MIDR) SIU_MIDR @baseaddress + 0x8 */ - - union { - vuint32_t R; - } TST; /* SIU Test Register (SIU_TST) SIU_TST @baseaddress + 0xC */ - - union { - vuint32_t R; - struct { - vuint32_t PORS:1; /* Power-On Reset Status */ - vuint32_t ERS:1; /* External Reset Status */ - vuint32_t LLRS:1; /* Loss of Lock Reset Status */ - vuint32_t LCRS:1; /* Loss of Clock Reset Status */ - vuint32_t WDRS:1; /* Watchdog Timer/Debug Reset Status */ - vuint32_t CRS:1; /* Checkstop Reset Status */ - vuint32_t SWTRS:1; /* Software Watchdog Timer Reset Status (new in MPC563xM) */ - vuint32_t:7; /* */ - vuint32_t SSRS:1; /* Software System Reset Status */ - vuint32_t SERF:1; /* Software External Reset Flag */ - vuint32_t WKPCFG:1; /* Weak Pull Configuration Pin Status */ - vuint32_t:11; /* */ - vuint32_t ABR:1; /* Auto Baud Rate (new in MPC563xM) */ - vuint32_t BOOTCFG:2; /* Reset Configuration Pin Status */ - vuint32_t RGF:1; /* RESET Glitch Flag */ - } B; - } RSR; /* Reset Status Register (SIU_RSR) SIU_RSR @baseaddress + 0x10 */ - - union { - vuint32_t R; - struct { - vuint32_t SSR:1; /* Software System Reset */ - vuint32_t SER:1; /* Software External Reset */ - vuint32_t:14; /* */ - vuint32_t CRE:1; /* Checkstop Reset Enable */ - vuint32_t:15; /* */ - } B; - } SRCR; /* System Reset Control Register (SRCR) SIU_SRCR @baseaddress + 0x14 */ - - union { - vuint32_t R; - struct { - vuint32_t NMI:1; /* Non-Maskable Interrupt Flag (new in MPC563xM) */ - vuint32_t:7; /* */ - vuint32_t SWT:1; /* Software Watch Dog Timer Interrupt Flag, from platform (new in MPC563xM) */ - vuint32_t:7; /* */ - vuint32_t EIF15:1; /* External Interrupt Request Flag x */ - vuint32_t EIF14:1; /* External Interrupt Request Flag x */ - vuint32_t EIF13:1; /* External Interrupt Request Flag x */ - vuint32_t EIF12:1; /* External Interrupt Request Flag x */ - vuint32_t EIF11:1; /* External Interrupt Request Flag x */ - vuint32_t EIF10:1; /* External Interrupt Request Flag x */ - vuint32_t EIF9:1; /* External Interrupt Request Flag x */ - vuint32_t EIF8:1; /* External Interrupt Request Flag x */ - vuint32_t:3; /* (reserved in MPC563xM) */ - vuint32_t EIF4:1; /* External Interrupt Request Flag x */ - vuint32_t EIF3:1; /* External Interrupt Request Flag x */ - vuint32_t:2; /* (reserved in MPC563xM) */ - vuint32_t EIF0:1; /* External Interrupt Request Flag x */ - } B; - } EISR; /* SIU External Interrupt Status Register (EISR) SIU_EISR @baseaddress + 0x18 */ - - union { - vuint32_t R; - struct { - vuint32_t NMI_SEL:1; /* NMI Interrupt Platform Input Selection (new in MPC563xM) */ - vuint32_t:7; /* */ - vuint32_t SWT_SEL:1; - vuint32_t:7; - vuint32_t EIRE15:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE14:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE13:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE12:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE11:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE10:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE9:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE8:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE7:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE6:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE5:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE4:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE3:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE2:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE1:1; /* External DMA/Interrupt Request Enable x */ - vuint32_t EIRE0:1; /* External DMA/Interrupt Request Enable x */ - } B; - } DIRER; /* DMA/Interrupt Request Enable Register (DIRER) SIU_DIRER @baseaddress + 0x1C */ - - union { - vuint32_t R; - struct { - vuint32_t:28; /* */ - vuint32_t DIRS3:1; /* DMA/Interrupt Request Select x */ - vuint32_t:2; /* reserved in MPC563xM */ - vuint32_t DIRS0:1; /* DMA/Interrupt Request Select x */ - } B; - } DIRSR; /* DMA/Interrupt Request Select Register (DIRSR) SIU_DIRSR @baseaddress + 0x20 */ - - union { - vuint32_t R; - struct { - vuint32_t:16; /* */ - vuint32_t OVF15:1; /* Overrun Flag x */ - vuint32_t OVF14:1; /* Overrun Flag x */ - vuint32_t OVF13:1; /* Overrun Flag x */ - vuint32_t OVF12:1; /* Overrun Flag x */ - vuint32_t OVF11:1; /* Overrun Flag x */ - vuint32_t OVF10:1; /* Overrun Flag x */ - vuint32_t OVF9:1; /* Overrun Flag x */ - vuint32_t OVF8:1; /* Overrun Flag x */ - vuint32_t:3; /* reserved in MPC563xM */ - vuint32_t OVF4:1; /* Overrun Flag x */ - vuint32_t OVF3:1; /* Overrun Flag x */ - vuint32_t:2; /* reserved in MPC563xM */ - vuint32_t OVF0:1; /* Overrun Flag x */ - } B; - } OSR; /* Overrun Status Register (OSR) SIU_OSR @baseaddress + 0x24 */ - - union { - vuint32_t R; - struct { - vuint32_t:16; /* */ - vuint32_t ORE15:1; /* Overrun Request Enable x */ - vuint32_t ORE14:1; /* Overrun Request Enable x */ - vuint32_t ORE13:1; /* Overrun Request Enable x */ - vuint32_t ORE12:1; /* Overrun Request Enable x */ - vuint32_t ORE11:1; /* Overrun Request Enable x */ - vuint32_t ORE10:1; /* Overrun Request Enable x */ - vuint32_t ORE9:1; /* Overrun Request Enable x */ - vuint32_t ORE8:1; /* Overrun Request Enable x */ - vuint32_t:3; /* reserved in MPC563xM */ - vuint32_t ORE4:1; /* Overrun Request Enable x */ - vuint32_t ORE3:1; /* Overrun Request Enable x */ - vuint32_t:2; /* reserved in MPC563xM */ - vuint32_t ORE0:1; /* Overrun Request Enable x */ - } B; - } ORER; /* Overrun Request Enable Register (ORER) SIU_ORER @baseaddress + 0x28 */ - - union { - vuint32_t R; - struct { - vuint32_t NMIRE:1; /* NMI Rising-Edge Event Enable x (new in MPC563xM) */ - vuint32_t:15; /* reserved in MPC563xM */ - vuint32_t IREE15:1; /* IRQ Rising-Edge Event Enable x */ - vuint32_t IREE14:1; /* IRQ Rising-Edge Event Enable x */ - vuint32_t IREE13:1; /* IRQ Rising-Edge Event Enable x */ - vuint32_t IREE12:1; /* IRQ Rising-Edge Event Enable x */ - vuint32_t IREE11:1; /* IRQ Rising-Edge Event Enable x */ - vuint32_t IREE10:1; /* IRQ Rising-Edge Event Enable x */ - vuint32_t IREE9:1; /* IRQ Rising-Edge Event Enable x */ - vuint32_t IREE8:1; /* IRQ Rising-Edge Event Enable x */ - vuint32_t:3; /* reserved in MPC563xM */ - vuint32_t IREE4:1; /* IRQ Rising-Edge Event Enable x */ - vuint32_t IREE3:1; /* IRQ Rising-Edge Event Enable x */ - vuint32_t:2; /* reserved in MPC563xM */ - vuint32_t IREE0:1; /* IRQ Rising-Edge Event Enable x */ - } B; - } IREER; /* External IRQ Rising-Edge Event Enable Register (IREER) SIU_IREER @baseaddress + 0x2C */ - - union { - vuint32_t R; - struct { - vuint32_t NMIFE:1; /* NMI Falling-Edge Event Enable x (new in MPC563xM) */ - vuint32_t Reserverd:15; /* */ - vuint32_t IFEE15:1; /* IRQ Falling-Edge Event Enable x */ - vuint32_t IFEE14:1; /* IRQ Falling-Edge Event Enable x */ - vuint32_t IFEE13:1; /* IRQ Falling-Edge Event Enable x */ - vuint32_t IFEE12:1; /* IRQ Falling-Edge Event Enable x */ - vuint32_t IFEE11:1; /* IRQ Falling-Edge Event Enable x */ - vuint32_t IFEE10:1; /* IRQ Falling-Edge Event Enable x */ - vuint32_t IFEE9:1; /* IRQ Falling-Edge Event Enable x */ - vuint32_t IFEE8:1; /* IRQ Falling-Edge Event Enable x */ - vuint32_t:3; /* reserved in MPC563xM */ - vuint32_t IFEE4:1; /* IRQ Falling-Edge Event Enable x */ - vuint32_t IFEE3:1; /* IRQ Falling-Edge Event Enable x */ - vuint32_t:2; /* reserved in MPC563xM */ - vuint32_t IFEE0:1; /* IRQ Falling-Edge Event Enable x */ - } B; - } IFEER; /* External IRQ Falling-Edge Event Enable Regi (IFEER) SIU_IFEER @baseaddress + 0x30 */ - - union { - vuint32_t R; - struct { - vuint32_t:28; /* */ - vuint32_t DFL:4; /* Digital Filter Length */ - } B; - } IDFR; /* External IRQ Digital Filter Register (IDFR) SIU_IDFR @baseaddress + 0x40 */ - - int32_t SIU_reserverd_153[3]; - - union { - vuint16_t R; - struct { - vuint16_t:2; /* */ - vuint16_t PA:4; /* */ - vuint16_t OBE:1; /* */ - vuint16_t IBE:1; /* */ - vuint16_t DSC:2; /* */ - vuint16_t ODE:1; /* */ - vuint16_t HYS:1; /* */ - vuint16_t SRC:2; /* */ - vuint16_t WPE:1; /* */ - vuint16_t WPS:1; /* */ - } B; - } PCR[512]; /* Pad Configuration Register (PCR) SIU_PCR @baseaddress + 0x600 */ - - int32_t SIU_reserverd_164[112]; - - union { - vuint8_t R; - struct { - vuint8_t:7; /* */ - vuint8_t PDO:1; /* */ - } B; - } GPDO[512]; /* GPIO Pin Data Output Register (GPDO) SIU_GDPO @baseaddress + 0x800 */ - - union { - vuint8_t R; - struct { - vuint8_t:7; /* */ - vuint8_t PDI:1; /* */ - } B; - } GPDI[256]; /* GPIO Pin Data Input Register (GDPI) SIU_GDPI @baseaddress + 0x900 */ - - union { - vuint32_t R; - struct { - vuint32_t TSEL5:2; /* eQADC Trigger 5 Input */ - vuint32_t TSEL4:2; /* eQADC Trigger 4 Input */ - vuint32_t TSEL3:2; /* eQADC Trigger 3 Input */ - vuint32_t TSEL2:2; /* eQADC Trigger 4 Input */ - vuint32_t TSEL1:2; /* eQADC Trigger 1 Input */ - vuint32_t TSEL0:2; /* eQADC Trigger 0 Input */ - vuint32_t:20; /* */ - } B; - } ETISR; /* eQADC Trigger Input Select Register (ETISR) SIU_ETISR @baseaddress + 0x904 */ - - union { - vuint32_t R; - struct { - vuint32_t ESEL15:2; /* External IRQ Input Select x */ - vuint32_t ESEL14:2; /* External IRQ Input Select x */ - vuint32_t ESEL13:2; /* External IRQ Input Select x */ - vuint32_t ESEL12:2; /* External IRQ Input Select x */ - vuint32_t ESEL11:2; /* External IRQ Input Select x */ - vuint32_t ESEL10:2; /* External IRQ Input Select x */ - vuint32_t ESEL9:2; /* External IRQ Input Select x */ - vuint32_t ESEL8:2; /* External IRQ Input Select x */ - vuint32_t ESEL7:2; /* External IRQ Input Select x */ - vuint32_t ESEL6:2; /* External IRQ Input Select x */ - vuint32_t ESEL5:2; /* External IRQ Input Select x */ - vuint32_t ESEL4:2; /* External IRQ Input Select x */ - vuint32_t ESEL3:2; /* External IRQ Input Select x */ - vuint32_t ESEL2:2; /* External IRQ Input Select x */ - vuint32_t ESEL1:2; /* External IRQ Input Select x */ - vuint32_t ESEL0:2; /* External IRQ Input Select x */ - } B; - } EIISR; /* External IRQ Input Select Register (EIISR) SIU_EIISR @baseaddress + 0x908 */ - - union { - vuint32_t R; - struct { - vuint32_t:8; /* reserved in MPC563xM */ - vuint32_t SINSELB:2; /* DSPI_B Data Input Select SIN-SELB */ - vuint32_t SSSELB:2; /* DSPI_B Slave Select Input Select SS-SELB */ - vuint32_t SCKSELB:2; /* DSPI_B Clock Input Select SCK-SELB */ - vuint32_t TRIGSELB:2; /* DSPI_B Trigger Input Select TRIG-SELB */ - vuint32_t SINSELC:2; /* DSPI_C Data Input Select SIN-SELC */ - vuint32_t SSSELC:2; /* DSPI_C Slave Select Input Select SSSELC */ - vuint32_t SCKSELC:2; /* DSPI_C Clock Input Select SCK-SELC */ - vuint32_t TRIGSELC:2; /* DSPI_C Trigger Input Select TRIG-SELC */ - vuint32_t:8; /* reserved in MPC563xM */ - } B; - } DISR; /* DSPI Input Select Register (DISR) SIU_DISR @baseaddress + 0x90c */ - - union { - vuint32_t R; - struct { - vuint32_t:2; /* */ - vuint32_t ETSEL5:5; /* eQADC queue X Enhanced Trigger Selection eTSEL5 */ - vuint32_t ETSEL4:5; /* eQADC queue X Enhanced Trigger Selection eTSEL4 */ - vuint32_t ETSEL3:5; /* eQADC queue X Enhanced Trigger Selection eTSEL3 */ - vuint32_t ETSEL2:5; /* eQADC queue X Enhanced Trigger Selection eTSEL2 */ - vuint32_t ETSEL1:5; /* eQADC queue X Enhanced Trigger Selection eTSEL1 */ - vuint32_t ETSEL0:5; /* eQADC queue X Enhanced Trigger Selection eTSEL0 */ - } B; - } ISEL3; /* MUX Select Register 3 (ISEL3) (new in MPC563xM) SIU_ISEL3 @baseaddress + 0x920 */ - - int32_t SIU_reserverd_214[4]; - - union { - vuint32_t R; - struct { - vuint32_t:11; /* */ - vuint32_t ESEL5:1; /* eSEL5 */ - vuint32_t:3; /* */ - vuint32_t ESEL4:1; /* eSEL4 */ - vuint32_t:3; /* */ - vuint32_t ESEL3:1; /* eSEL3 */ - vuint32_t:3; /* */ - vuint32_t ESEL2:1; /* eSEL2 */ - vuint32_t:3; /* */ - vuint32_t ESEL1:1; /* eSEL1 */ - vuint32_t:3; /* */ - vuint32_t ESEL0:1; /* eSEL0 */ - } B; - } ISEL8; /* MUX Select Register 8 (ISEL8) (new in MPC563xM) SIU_ISEL8 @baseaddress + 0x924 */ - - union { - vuint32_t R; - struct { - vuint32_t:27; /* */ - vuint32_t ETSEL0A:5; /* eTSEL0A */ - } B; - } ISEL9; /* MUX Select Register 9(ISEL9) SIU_ISEL9 @baseaddress + 0x980 */ - - int32_t SIU_reserverd_230[22]; - - union { - vuint32_t R; - struct { - vuint32_t:14; /* */ - vuint32_t MATCH:1; /* Compare Register Match */ - vuint32_t DISNEX:1; /* Disable Nexus */ - vuint32_t:14; /* */ - vuint32_t CRSE:1; /* Calibration Reflection Suppression Enable (new in MPC563xM) */ - vuint32_t:1; /* */ - } B; - } CCR; /* Chip Configuration Register (CCR) SIU_CCR @baseaddress + 0x984 */ - - union { - vuint32_t R; - struct { - vuint32_t:28; /* The ENGDIV bit is reserved in MPC563xM */ - vuint32_t EBTS:1; /* External Bus Tap Select */ - vuint32_t:1; /* */ - vuint32_t EBDF:2; /* External Bus Division Factor */ - } B; - } ECCR; /* External Clock Control Register (ECCR) SIU_ECCR @baseaddress + 0x988 */ - - union { - vuint32_t R; - } CARH; /* Compare A High Register (CARH) SIU_CMPAH @baseaddress + 0x98C */ - - union { - vuint32_t R; - } CARL; /* Compare A Low Register (CARL) SIU_CMPAL @baseaddress + 0x990 */ - - union { - vuint32_t R; - } CBRH; /* Compare B High Register (CBRH) SIU_CMPBH @baseaddress + 0x994 */ - - union { - vuint32_t R; - } CBRL; /* Compare B Low Register (CBRL) SIU_CMPBL @baseaddress + 0x9A0 */ - - int32_t SIU_reserverd_250[2]; - - union { - vuint32_t R; - struct { - vuint32_t:27; /* Reserved */ - vuint32_t BYPASS:1; /* Bypass bit BY-PASS */ - vuint32_t SYSCLKDIV:2; /* System Clock Divide SYS-CLKDIV */ - vuint32_t:2; /* Reserved */ - } B; - } SYSDIV; /* System Clock Register (SYSDIV) (new in MPC563xM) SIU_SYSDIV @baseaddress + 0x9A4 */ - - union { - vuint32_t R; - struct { - vuint32_t CPUSTP:1; /* CPU stop request. When asserted, a stop request is sent to the following modules: */ - vuint32_t:2; /* Reserved */ - vuint32_t SWTSTP:1; /* SWT stop request. When asserted, a stop request is sent to the Software Watchdog */ - vuint32_t:1; /* Reserved */ - vuint32_t TPUSTP:1; /* eTPU stop request. When asserted, a stop request is sent to the eTPU module. */ - vuint32_t NPCSTP:1; /* Nexus stop request. When asserted, a stop request is sent to the Nexus Controller. */ - vuint32_t EBISTP:1; /* EBI stop request. When asserted, a stop request is sent to the external bus */ - vuint32_t ADCSTP:1; /* eQADC stop request. When asserted, a stop request is sent to the eQADC module. */ - vuint32_t:1; /* Reserved */ - vuint32_t MIOSSTP:1; /* Stop mode request */ - vuint32_t DFILSTP:1; /* Decimation filter stop request. When asserted, a stop request is sent to the */ - vuint32_t:1; /* Reserved */ - vuint32_t PITSTP:1; /* PIT stop request. When asserted, a stop request is sent to the periodical internal */ - vuint32_t:3; /* Reserved */ - vuint32_t CNCSTP:1; /* FlexCAN C stop request. When asserted, a stop request is sent to the FlexCAN C */ - vuint32_t:1; /* Reserved */ - vuint32_t CNASTP:1; /* FlexCAN A stop request. When asserted, a stop request is sent to the FlexCAN A */ - vuint32_t:1; /* Reserved */ - vuint32_t SPICSTP:1; /* DSPI C stop request. When asserted, a stop request is sent to the DSPI C. */ - vuint32_t SPIBSTP:1; /* DSPI B stop request. When asserted, a stop request is sent to the DSPI B. */ - vuint32_t:7; /* Reserved */ - vuint32_t SCIBSTP:1; /* eSCI B stop request. When asserted, a stop request is sent to the eSCI B module. */ - vuint32_t SCIASTP:1; /* eSCI A stop request. When asserted, a stop request is sent to the eSCIA module. */ - } B; - } HLT; /* Halt Register (HLT) (new in MPC563xM) SIU_HLT @baseaddress + 0x9A8 */ - - union { - vuint32_t R; - struct { - vuint32_t CPUACK:1; /* CPU stop acknowledge. When asserted, indicates that a stop acknowledge was */ - vuint32_t:2; /* Reserved */ - vuint32_t SWTACK:1; /* SWT stop acknowledge. When asserted, indicates that a stop acknowledge was */ - vuint32_t:1; /* Reserved */ - vuint32_t TPUACK:1; /* eTPU stop acknowledge. When asserted, indicates that a stop acknowledge was */ - vuint32_t NPCACK:1; /* Nexus stop acknowledge. When asserted, indicates that a stop acknowledge was */ - vuint32_t EBIACK:1; /* EBI stop acknowledge. When asserted, indicates that a stop acknowledge was */ - vuint32_t ADCACK:1; /* eQADC stop acknowledge. When asserted, indicates that a stop acknowledge was */ - vuint32_t:1; /* Reserved */ - vuint32_t MIOSACK:1; /* eMIOS stop acknowledge. When asserted, indicates that a stop acknowledge was */ - vuint32_t DFILACK:1; /* Decimation filter stop acknowledge. When asserted, indicates that a stop */ - vuint32_t:1; /* Reserved */ - vuint32_t PITACK:1; /* PIT stop acknowledge. When asserted, indicates that a stop acknowledge was */ - vuint32_t:3; /* Reserved */ - vuint32_t CNCACK:1; /* FlexCAN C stop acknowledge. When asserted, indicates that a stop acknowledge */ - vuint32_t:1; /* Reserved */ - vuint32_t CNAACK:1; /* FlexCAN A stop acknowledge. When asserted, indicates that a stop acknowledge */ - vuint32_t:1; /* Reserved */ - vuint32_t SPICACK:1; /* DSPI C stop acknowledge. When asserted, indicates that a stop acknowledge was */ - vuint32_t SPIBACK:1; /* DSPI B stop acknowledge. When asserted, indicates that a stop acknowledge was */ - vuint32_t:7; /* Reserved */ - vuint32_t SCIBACK:1; /* eSCI B stop acknowledge */ - vuint32_t SCIAACK:1; /* eSCI A stop acknowledge. */ - } B; - } HLTACK; /* Halt Acknowledge Register (HLTACK) (new in MPC563xM) SIU_HLTACK @baseaddress + 0x9ac */ - - int32_t SIU_reserved3[21]; - - }; /* end of SIU_tag */ -/****************************************************************************/ -/* MODULE : EMIOS */ -/****************************************************************************/ - struct EMIOS_tag { - union { - vuint32_t R; - struct { - vuint32_t DOZEEN:1; /* new in MPC563xM */ - vuint32_t MDIS:1; - vuint32_t FRZ:1; - vuint32_t GTBE:1; - vuint32_t ETB:1; - vuint32_t GPREN:1; - vuint32_t:6; - vuint32_t SRV:4; - vuint32_t GPRE:8; - vuint32_t:8; - } B; - } MCR; /* Module Configuration Register EMIOSMCR */ - - union { - vuint32_t R; - struct { - vuint32_t:8; - vuint32_t F23:1; - vuint32_t F22:1; - vuint32_t F21:1; - vuint32_t F20:1; - vuint32_t F19:1; - vuint32_t F18:1; - vuint32_t F17:1; - vuint32_t F16:1; - vuint32_t F15:1; - vuint32_t F14:1; - vuint32_t F13:1; - vuint32_t F12:1; - vuint32_t F11:1; - vuint32_t F10:1; - vuint32_t F9:1; - vuint32_t F8:1; - vuint32_t F7:1; - vuint32_t F6:1; - vuint32_t F5:1; - vuint32_t F4:1; - vuint32_t F3:1; - vuint32_t F2:1; - vuint32_t F1:1; - vuint32_t F0:1; - } B; - } GFR; /* Global FLAG Register EMIOSGFLAG */ - - union { - vuint32_t R; - struct { - vuint32_t:8; - vuint32_t OU23:1; - vuint32_t OU22:1; - vuint32_t OU21:1; - vuint32_t OU20:1; - vuint32_t OU19:1; - vuint32_t OU18:1; - vuint32_t OU17:1; - vuint32_t OU16:1; - vuint32_t OU15:1; - vuint32_t OU14:1; - vuint32_t OU13:1; - vuint32_t OU12:1; - vuint32_t OU11:1; - vuint32_t OU10:1; - vuint32_t OU9:1; - vuint32_t OU8:1; - vuint32_t OU7:1; - vuint32_t OU6:1; - vuint32_t OU5:1; - vuint32_t OU4:1; - vuint32_t OU3:1; - vuint32_t OU2:1; - vuint32_t OU1:1; - vuint32_t OU0:1; - } B; - } OUDR; /* Output Update Disable Register EMIOSOUDIS */ - - union { - vuint32_t R; - struct { - vuint32_t:8; /* */ - vuint32_t CHDIS23:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS22:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS21:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS20:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS19:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS18:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS17:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS16:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS15:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS14:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS13:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS12:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS11:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS10:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS9:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS8:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS7:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS6:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS5:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS4:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS3:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS2:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS1:1; /* Enable Channel [n] bit */ - vuint32_t CHDIS0:1; /* Enable Channel [n] bit */ - } B; - } UCDIS; /* Disable Channel (EMIOSUCDIS) EMIOSUCDIS (new in MPC563xM) @baseaddress + 0x0C */ - - int32_t EMIOS_reserverd_30[4]; - - struct { - union { - vuint32_t R; /* Channel A Data Register */ - } CADR; /* EMIOSA */ - - union { - vuint32_t R; /* Channel B Data Register */ - } CBDR; /* EMIOSB */ - - union { - vuint32_t R; /* Channel Counter Register */ - } CCNTR; /* EMIOSCNT */ - - union { - vuint32_t R; - struct { - vuint32_t FREN:1; - vuint32_t ODIS:1; - vuint32_t ODISSL:2; - vuint32_t UCPRE:2; - vuint32_t UCPREN:1; - vuint32_t DMA:1; - vuint32_t:1; - vuint32_t IF:4; - vuint32_t FCK:1; - vuint32_t FEN:1; - vuint32_t:3; - vuint32_t FORCMA:1; - vuint32_t FORCMB:1; - vuint32_t:1; - vuint32_t BSL:2; - vuint32_t EDSEL:1; - vuint32_t EDPOL:1; - vuint32_t MODE:7; - } B; - } CCR; /* Channel Control Register EMIOSC */ - - union { - vuint32_t R; - struct { - vuint32_t OVR:1; - vuint32_t:15; - vuint32_t OVFL:1; - vuint32_t:12; - vuint32_t UCIN:1; - vuint32_t UCOUT:1; - vuint32_t FLAG:1; - } B; - } CSR; /* Channel Status Register EMIOSS */ - - union { - vuint32_t R; /* Alternate Channel A Data Register */ - } ALTA; /* new in MPC563xM EMIOSALTA */ - - uint32_t emios_channel_reserved[2]; - - } CH[24]; - - }; /* end of EMIOS_tag */ -/****************************************************************************/ -/* MODULE : ETPU */ -/****************************************************************************/ - struct ETPU_tag { /* offset 0x0000 */ - union { /* eTPU module configuration register@baseaddress + 0x00 */ - vuint32_t R; - struct { - vuint32_t GEC:1; /* Global Exception Clear */ - vuint32_t SDMERR:1; /* */ - vuint32_t WDTOA:1; /* */ - vuint32_t WDTOB:1; /* */ - vuint32_t MGE1:1; /* MGEA */ - vuint32_t MGE2:1; /* MGEB */ - vuint32_t ILF1:1; /* Invalid instruction flag eTPU A. ILFFA */ - vuint32_t ILF2:1; /* Invalid instruction flag eTPU B. ILFFB */ - vuint32_t SCMERR:1; /* . */ - vuint32_t:2; /* */ - vuint32_t SCMSIZE:5; /* Shared Code Memory size */ - vuint32_t:4; /* */ - vuint32_t SCMMISC:1; /* SCM MISC Flag */ - vuint32_t SCMMISF:1; /* SCM MISC Flag */ - vuint32_t SCMMISEN:1; /* SCM MISC Enable */ - vuint32_t:2; /* */ - vuint32_t VIS:1; /* SCM Visability */ - vuint32_t:5; /* */ - vuint32_t GTBE:1; /* Global Time Base Enable */ - } B; - } MCR; /* ETPU_MCR */ - - /* offset 0x0004 */ - union { /* eTPU coherent dual-parameter controller register@baseaddress + 0x04 */ - vuint32_t R; - struct { - vuint32_t STS:1; /* Start Status bit */ - vuint32_t CTBASE:5; /* Channel Transfer Base */ - vuint32_t PBASE:10; /* Parameter Buffer Base Address PBBASE */ - vuint32_t PWIDTH:1; /* Parameter Width */ - vuint32_t PARAM0:7; /* Channel Parameter 0 PARM0 */ - vuint32_t WR:1; /* */ - vuint32_t PARAM1:7; /* Channel Parameter 1 PARM1 */ - } B; - } CDCR; /*ETPU_CDCR */ - - vuint32_t ETPU_reserved_0; - - /* offset 0x000C */ - union { /* eTPU MISC Compare Register@baseaddress + 0x0c */ - vuint32_t R; - struct { - vuint32_t ETPUMISCCMP:32; /* Expected multiple input signature calculator compare register value. EMISCCMP */ - } B; - } MISCCMPR /*ETPU_MISCCMPR */ ; - - /* offset 0x0010 */ - union { /* eTPU SCM Off-Range Data Register@baseaddress + 0x10 */ - vuint32_t R; - struct { - vuint32_t ETPUSCMOFFDATA:32; /* SCM Off-range read data value. */ - } B; - } SCMOFFDATAR; /*ETPU_SCMOFFDATAR */ - - /* offset 0x0014 */ - union { /* eTPU Engine Configuration Register (ETPUA_ECR)@baseaddress + 0x14 */ - vuint32_t R; - struct { - vuint32_t FEND:1; /* Force END */ - vuint32_t MDIS:1; /* Low power Stop */ - vuint32_t:1; /* */ - vuint32_t STF:1; /* Stop Flag */ - vuint32_t:4; /* */ - vuint32_t HLTF:1; /* Halt Mode Flag */ - vuint32_t:3; /* */ - vuint32_t FCSS:1; - vuint32_t FPSCK:3; /* Filter Prescaler Clock Control */ - vuint32_t CDFC:2; /* */ - vuint32_t:1; /* */ - vuint32_t ERBA:5; /* */ - vuint32_t SPPDIS:1; /* */ - vuint32_t:2; /* */ - vuint32_t ETB:5; /* Entry Table Base */ - } B; - } ECR_A; /*ETPU_ECR */ - - vuint32_t ETPU_reserved_1[2]; - - /* offset 0x0020 */ - union { /* eTPU Time Base Configuration Register (ETPU_TBCR)@baseaddress + 0x20 */ - vuint32_t R; - struct { - vuint32_t TCR2CTL:3; /* TCR2 Clock/Gate Control */ - vuint32_t TCRCF:2; /* TCRCLK Signal Filter Control */ - vuint32_t AM:2; /* Angle Mode */ - vuint32_t:3; /* */ - vuint32_t TCR2P:6; /* TCR2 Prescaler Control */ - vuint32_t TCR1CTL:2; /* TCR1 Clock/Gate Control */ - vuint32_t TCR1CS:1; /* */ - vuint32_t:5; /* */ - vuint32_t TCR1P:8; /* TCR1 Prescaler Control */ - } B; - } TBCR_A; /*ETPU_TBCR */ - - /* offset 0x0024 */ - union { /* eTPU Time Base 1 (TCR1) Visibility Register (ETPU_TB1R)@baseaddress + 0x24 */ - vuint32_t R; - struct { - vuint32_t:8; /* */ - vuint32_t TCR1:24; /* TCR1 value. Used on matches and captures. For more information, see the eTPU reference manual. */ - } B; - } TB1R_A; /*ETPU_TB1R */ - - /* offset 0x0028 */ - union { /* eTPU Time Base 2 (TCR2) Visibility Register (ETPU_TB2R)@baseaddress + 0x28 */ - vuint32_t R; - struct { - vuint32_t:8; /* */ - vuint32_t TCR2:24; /* TCR2 value. Used on matches and captures. For information on TCR2, see the eTPU reference manual. */ - } B; - } TB2R_A; /*ETPU_TB2R */ - - /* offset 0x002C */ - union { /* STAC Bus Configuration Register (ETPU_STACCR)@baseaddress + 0x2c */ - vuint32_t R; - struct { - vuint32_t REN1:1; /* Resource Enable TCR1 */ - vuint32_t RSC1:1; /* Resource Control TCR1 */ - vuint32_t:2; /* */ - vuint32_t SERVER_ID1:4; /* */ - vuint32_t:4; /* */ - vuint32_t SRV1:4; /* Resource Server Slot */ - vuint32_t REN2:1; /* Resource Enable TCR2 */ - vuint32_t RSC2:1; /* Resource Control TCR2 */ - vuint32_t:2; /* */ - vuint32_t SERVER_ID2:4; /* */ - vuint32_t:4; /* */ - vuint32_t SRV2:4; /* Resource Server Slot */ - } B; - } REDCR_A; /*ETPU_REDCR */ - - vuint32_t ETPU_reserved_2[12]; - - /* offset 0x0060 */ - union { /* ETPU1 WDTR Register */ - vuint32_t R; - struct { - vuint32_t WDM:2; - vuint32_t:14; - vuint32_t WDCNT:16; - } B; - } WDTR_A; - - vuint32_t ETPU1_reserved_3; - - /* offset 0x0068 */ - union { /* ETPU1 IDLE Register */ - vuint32_t R; - struct { - vuint32_t IDLE_CNT:31; - vuint32_t ICLR:1; - } B; - } IDLE_A; - - vuint32_t ETPU_reserved_4[101]; - - /* offset 0x0200 */ - union { /* eTPU Channel Interrupt Status Register (ETPU_CISR)@baseaddress + 0x200 */ - vuint32_t R; - struct { - vuint32_t CIS31:1; /* Channel 31 Interrut Status */ - vuint32_t CIS30:1; /* Channel 30 Interrut Status */ - vuint32_t CIS29:1; /* Channel 29 Interrut Status */ - vuint32_t CIS28:1; /* Channel 28 Interrut Status */ - vuint32_t CIS27:1; /* Channel 27 Interrut Status */ - vuint32_t CIS26:1; /* Channel 26 Interrut Status */ - vuint32_t CIS25:1; /* Channel 25 Interrut Status */ - vuint32_t CIS24:1; /* Channel 24 Interrut Status */ - vuint32_t CIS23:1; /* Channel 23 Interrut Status */ - vuint32_t CIS22:1; /* Channel 22 Interrut Status */ - vuint32_t CIS21:1; /* Channel 21 Interrut Status */ - vuint32_t CIS20:1; /* Channel 20 Interrut Status */ - vuint32_t CIS19:1; /* Channel 19 Interrut Status */ - vuint32_t CIS18:1; /* Channel 18 Interrut Status */ - vuint32_t CIS17:1; /* Channel 17 Interrut Status */ - vuint32_t CIS16:1; /* Channel 16 Interrut Status */ - vuint32_t CIS15:1; /* Channel 15 Interrut Status */ - vuint32_t CIS14:1; /* Channel 14 Interrut Status */ - vuint32_t CIS13:1; /* Channel 13 Interrut Status */ - vuint32_t CIS12:1; /* Channel 12 Interrut Status */ - vuint32_t CIS11:1; /* Channel 11 Interrut Status */ - vuint32_t CIS10:1; /* Channel 10 Interrut Status */ - vuint32_t CIS9:1; /* Channel 9 Interrut Status */ - vuint32_t CIS8:1; /* Channel 8 Interrut Status */ - vuint32_t CIS7:1; /* Channel 7 Interrut Status */ - vuint32_t CIS6:1; /* Channel 6 Interrut Status */ - vuint32_t CIS5:1; /* Channel 5 Interrut Status */ - vuint32_t CIS4:1; /* Channel 4 Interrut Status */ - vuint32_t CIS3:1; /* Channel 3 Interrut Status */ - vuint32_t CIS2:1; /* Channel 2 Interrut Status */ - vuint32_t CIS1:1; /* Channel 1 Interrut Status */ - vuint32_t CIS0:1; /* Channel 0 Interrut Status */ - } B; - } CISR_A; /* ETPU_CISR */ - - int32_t ETPU_reserved_5[3]; - - /* offset 0x0210 */ - union { /* @baseaddress + 0x210 */ - vuint32_t R; - struct { - vuint32_t DTRS31:1; /* Channel 31 Data Transfer Request Status */ - vuint32_t DTRS30:1; /* Channel 30 Data Transfer Request Status */ - vuint32_t DTRS29:1; /* Channel 29 Data Transfer Request Status */ - vuint32_t DTRS28:1; /* Channel 28 Data Transfer Request Status */ - vuint32_t DTRS27:1; /* Channel 27 Data Transfer Request Status */ - vuint32_t DTRS26:1; /* Channel 26 Data Transfer Request Status */ - vuint32_t DTRS25:1; /* Channel 25 Data Transfer Request Status */ - vuint32_t DTRS24:1; /* Channel 24 Data Transfer Request Status */ - vuint32_t DTRS23:1; /* Channel 23 Data Transfer Request Status */ - vuint32_t DTRS22:1; /* Channel 22 Data Transfer Request Status */ - vuint32_t DTRS21:1; /* Channel 21 Data Transfer Request Status */ - vuint32_t DTRS20:1; /* Channel 20 Data Transfer Request Status */ - vuint32_t DTRS19:1; /* Channel 19 Data Transfer Request Status */ - vuint32_t DTRS18:1; /* Channel 18 Data Transfer Request Status */ - vuint32_t DTRS17:1; /* Channel 17 Data Transfer Request Status */ - vuint32_t DTRS16:1; /* Channel 16 Data Transfer Request Status */ - vuint32_t DTRS15:1; /* Channel 15 Data Transfer Request Status */ - vuint32_t DTRS14:1; /* Channel 14 Data Transfer Request Status */ - vuint32_t DTRS13:1; /* Channel 13 Data Transfer Request Status */ - vuint32_t DTRS12:1; /* Channel 12 Data Transfer Request Status */ - vuint32_t DTRS11:1; /* Channel 11 Data Transfer Request Status */ - vuint32_t DTRS10:1; /* Channel 10 Data Transfer Request Status */ - vuint32_t DTRS9:1; /* Channel 9 Data Transfer Request Status */ - vuint32_t DTRS8:1; /* Channel 8 Data Transfer Request Status */ - vuint32_t DTRS7:1; /* Channel 7 Data Transfer Request Status */ - vuint32_t DTRS6:1; /* Channel 6 Data Transfer Request Status */ - vuint32_t DTRS5:1; /* Channel 5 Data Transfer Request Status */ - vuint32_t DTRS4:1; /* Channel 4 Data Transfer Request Status */ - vuint32_t DTRS3:1; /* Channel 3 Data Transfer Request Status */ - vuint32_t DTRS2:1; /* Channel 2 Data Transfer Request Status */ - vuint32_t DTRS1:1; /* Channel 1 Data Transfer Request Status */ - vuint32_t DTRS0:1; /* Channel 0 Data Transfer Request Status */ - } B; - } CDTRSR_A; /* ETPU_CDTRSR */ - - int32_t ETPU_reserved_6[3]; - - /* offset 0x0220 */ - union { /* eTPU Channel Interrupt Overflow Status Register (ETPU_CIOSR)@baseaddress + 0x220 */ - vuint32_t R; - struct { - vuint32_t CIOS31:1; /* Channel 31 Interruput Overflow Status */ - vuint32_t CIOS30:1; /* Channel 30 Interruput Overflow Status */ - vuint32_t CIOS29:1; /* Channel 29 Interruput Overflow Status */ - vuint32_t CIOS28:1; /* Channel 28 Interruput Overflow Status */ - vuint32_t CIOS27:1; /* Channel 27 Interruput Overflow Status */ - vuint32_t CIOS26:1; /* Channel 26 Interruput Overflow Status */ - vuint32_t CIOS25:1; /* Channel 25 Interruput Overflow Status */ - vuint32_t CIOS24:1; /* Channel 24 Interruput Overflow Status */ - vuint32_t CIOS23:1; /* Channel 23 Interruput Overflow Status */ - vuint32_t CIOS22:1; /* Channel 22 Interruput Overflow Status */ - vuint32_t CIOS21:1; /* Channel 21 Interruput Overflow Status */ - vuint32_t CIOS20:1; /* Channel 20 Interruput Overflow Status */ - vuint32_t CIOS19:1; /* Channel 19 Interruput Overflow Status */ - vuint32_t CIOS18:1; /* Channel 18 Interruput Overflow Status */ - vuint32_t CIOS17:1; /* Channel 17 Interruput Overflow Status */ - vuint32_t CIOS16:1; /* Channel 16 Interruput Overflow Status */ - vuint32_t CIOS15:1; /* Channel 15 Interruput Overflow Status */ - vuint32_t CIOS14:1; /* Channel 14 Interruput Overflow Status */ - vuint32_t CIOS13:1; /* Channel 13 Interruput Overflow Status */ - vuint32_t CIOS12:1; /* Channel 12 Interruput Overflow Status */ - vuint32_t CIOS11:1; /* Channel 11 Interruput Overflow Status */ - vuint32_t CIOS10:1; /* Channel 10 Interruput Overflow Status */ - vuint32_t CIOS9:1; /* Channel 9 Interruput Overflow Status */ - vuint32_t CIOS8:1; /* Channel 8 Interruput Overflow Status */ - vuint32_t CIOS7:1; /* Channel 7 Interruput Overflow Status */ - vuint32_t CIOS6:1; /* Channel 6 Interruput Overflow Status */ - vuint32_t CIOS5:1; /* Channel 5 Interruput Overflow Status */ - vuint32_t CIOS4:1; /* Channel 4 Interruput Overflow Status */ - vuint32_t CIOS3:1; /* Channel 3 Interruput Overflow Status */ - vuint32_t CIOS2:1; /* Channel 2 Interruput Overflow Status */ - vuint32_t CIOS1:1; /* Channel 1 Interruput Overflow Status */ - vuint32_t CIOS0:1; /* Channel 0 Interruput Overflow Status */ - } B; - } CIOSR_A; /* ETPU_CIOSR */ - - int32_t ETPU_reserved_7[3]; - - /* offset 0x0230 */ - union { /* eTPU Channel Data Transfer Request Overflow Status Register@baseaddress + 0x230 */ - vuint32_t R; - struct { - vuint32_t DTROS31:1; /* Channel 31 Data Transfer Overflow Status */ - vuint32_t DTROS30:1; /* Channel 30 Data Transfer Overflow Status */ - vuint32_t DTROS29:1; /* Channel 29 Data Transfer Overflow Status */ - vuint32_t DTROS28:1; /* Channel 28 Data Transfer Overflow Status */ - vuint32_t DTROS27:1; /* Channel 27 Data Transfer Overflow Status */ - vuint32_t DTROS26:1; /* Channel 26 Data Transfer Overflow Status */ - vuint32_t DTROS25:1; /* Channel 25 Data Transfer Overflow Status */ - vuint32_t DTROS24:1; /* Channel 24 Data Transfer Overflow Status */ - vuint32_t DTROS23:1; /* Channel 23 Data Transfer Overflow Status */ - vuint32_t DTROS22:1; /* Channel 22 Data Transfer Overflow Status */ - vuint32_t DTROS21:1; /* Channel 21 Data Transfer Overflow Status */ - vuint32_t DTROS20:1; /* Channel 20 Data Transfer Overflow Status */ - vuint32_t DTROS19:1; /* Channel 19 Data Transfer Overflow Status */ - vuint32_t DTROS18:1; /* Channel 18 Data Transfer Overflow Status */ - vuint32_t DTROS17:1; /* Channel 17 Data Transfer Overflow Status */ - vuint32_t DTROS16:1; /* Channel 16 Data Transfer Overflow Status */ - vuint32_t DTROS15:1; /* Channel 15 Data Transfer Overflow Status */ - vuint32_t DTROS14:1; /* Channel 14 Data Transfer Overflow Status */ - vuint32_t DTROS13:1; /* Channel 13 Data Transfer Overflow Status */ - vuint32_t DTROS12:1; /* Channel 12 Data Transfer Overflow Status */ - vuint32_t DTROS11:1; /* Channel 11 Data Transfer Overflow Status */ - vuint32_t DTROS10:1; /* Channel 10 Data Transfer Overflow Status */ - vuint32_t DTROS9:1; /* Channel 9 Data Transfer Overflow Status */ - vuint32_t DTROS8:1; /* Channel 8 Data Transfer Overflow Status */ - vuint32_t DTROS7:1; /* Channel 7 Data Transfer Overflow Status */ - vuint32_t DTROS6:1; /* Channel 6 Data Transfer Overflow Status */ - vuint32_t DTROS5:1; /* Channel 5 Data Transfer Overflow Status */ - vuint32_t DTROS4:1; /* Channel 4 Data Transfer Overflow Status */ - vuint32_t DTROS3:1; /* Channel 3 Data Transfer Overflow Status */ - vuint32_t DTROS2:1; /* Channel 2 Data Transfer Overflow Status */ - vuint32_t DTROS1:1; /* Channel 1 Data Transfer Overflow Status */ - vuint32_t DTROS0:1; /* Channel 0 Data Transfer Overflow Status */ - } B; - } CDTROSR_A; /* ETPU_CDTROSR */ - - int32_t ETPU_reserved_8[3]; - - /* offset 0x0240 */ - union { /* eTPU Channel Interrupt Enable Register (ETPU_CIER)@baseaddress + 0x240 */ - vuint32_t R; - struct { - vuint32_t CIE31:1; /* Channel 31 Interruput Enable */ - vuint32_t CIE30:1; /* Channel 30 Interruput Enable */ - vuint32_t CIE29:1; /* Channel 29 Interruput Enable */ - vuint32_t CIE28:1; /* Channel 28 Interruput Enable */ - vuint32_t CIE27:1; /* Channel 27 Interruput Enable */ - vuint32_t CIE26:1; /* Channel 26 Interruput Enable */ - vuint32_t CIE25:1; /* Channel 25 Interruput Enable */ - vuint32_t CIE24:1; /* Channel 24 Interruput Enable */ - vuint32_t CIE23:1; /* Channel 23 Interruput Enable */ - vuint32_t CIE22:1; /* Channel 22 Interruput Enable */ - vuint32_t CIE21:1; /* Channel 21 Interruput Enable */ - vuint32_t CIE20:1; /* Channel 20 Interruput Enable */ - vuint32_t CIE19:1; /* Channel 19 Interruput Enable */ - vuint32_t CIE18:1; /* Channel 18 Interruput Enable */ - vuint32_t CIE17:1; /* Channel 17 Interruput Enable */ - vuint32_t CIE16:1; /* Channel 16 Interruput Enable */ - vuint32_t CIE15:1; /* Channel 15 Interruput Enable */ - vuint32_t CIE14:1; /* Channel 14 Interruput Enable */ - vuint32_t CIE13:1; /* Channel 13 Interruput Enable */ - vuint32_t CIE12:1; /* Channel 12 Interruput Enable */ - vuint32_t CIE11:1; /* Channel 11 Interruput Enable */ - vuint32_t CIE10:1; /* Channel 10 Interruput Enable */ - vuint32_t CIE9:1; /* Channel 9 Interruput Enable */ - vuint32_t CIE8:1; /* Channel 8 Interruput Enable */ - vuint32_t CIE7:1; /* Channel 7 Interruput Enable */ - vuint32_t CIE6:1; /* Channel 6 Interruput Enable */ - vuint32_t CIE5:1; /* Channel 5 Interruput Enable */ - vuint32_t CIE4:1; /* Channel 4 Interruput Enable */ - vuint32_t CIE3:1; /* Channel 3 Interruput Enable */ - vuint32_t CIE2:1; /* Channel 2 Interruput Enable */ - vuint32_t CIE1:1; /* Channel 1 Interruput Enable */ - vuint32_t CIE0:1; /* Channel 0 Interruput Enable */ - } B; - } CIER_A; /* ETPU_CIER */ - - int32_t ETPU_reserved_9[3]; - - /* offset 0x0250 */ - union { /* eTPU Channel Data Transfer Request Enable Register (ETPU_CDTRER)@baseaddress + 0x250 */ - vuint32_t R; - struct { - vuint32_t DTRE31:1; /* Channel 31 Data Transfer Request Enable */ - vuint32_t DTRE30:1; /* Channel 30 Data Transfer Request Enable */ - vuint32_t DTRE29:1; /* Channel 29 Data Transfer Request Enable */ - vuint32_t DTRE28:1; /* Channel 28 Data Transfer Request Enable */ - vuint32_t DTRE27:1; /* Channel 27 Data Transfer Request Enable */ - vuint32_t DTRE26:1; /* Channel 26 Data Transfer Request Enable */ - vuint32_t DTRE25:1; /* Channel 25 Data Transfer Request Enable */ - vuint32_t DTRE24:1; /* Channel 24 Data Transfer Request Enable */ - vuint32_t DTRE23:1; /* Channel 23 Data Transfer Request Enable */ - vuint32_t DTRE22:1; /* Channel 22 Data Transfer Request Enable */ - vuint32_t DTRE21:1; /* Channel 21 Data Transfer Request Enable */ - vuint32_t DTRE20:1; /* Channel 20 Data Transfer Request Enable */ - vuint32_t DTRE19:1; /* Channel 19 Data Transfer Request Enable */ - vuint32_t DTRE18:1; /* Channel 18 Data Transfer Request Enable */ - vuint32_t DTRE17:1; /* Channel 17 Data Transfer Request Enable */ - vuint32_t DTRE16:1; /* Channel 16 Data Transfer Request Enable */ - vuint32_t DTRE15:1; /* Channel 15 Data Transfer Request Enable */ - vuint32_t DTRE14:1; /* Channel 14 Data Transfer Request Enable */ - vuint32_t DTRE13:1; /* Channel 13 Data Transfer Request Enable */ - vuint32_t DTRE12:1; /* Channel 12 Data Transfer Request Enable */ - vuint32_t DTRE11:1; /* Channel 11 Data Transfer Request Enable */ - vuint32_t DTRE10:1; /* Channel 10 Data Transfer Request Enable */ - vuint32_t DTRE9:1; /* Channel 9 Data Transfer Request Enable */ - vuint32_t DTRE8:1; /* Channel 8 Data Transfer Request Enable */ - vuint32_t DTRE7:1; /* Channel 7 Data Transfer Request Enable */ - vuint32_t DTRE6:1; /* Channel 6 Data Transfer Request Enable */ - vuint32_t DTRE5:1; /* Channel 5 Data Transfer Request Enable */ - vuint32_t DTRE4:1; /* Channel 4 Data Transfer Request Enable */ - vuint32_t DTRE3:1; /* Channel 3 Data Transfer Request Enable */ - vuint32_t DTRE2:1; /* Channel 2 Data Transfer Request Enable */ - vuint32_t DTRE1:1; /* Channel 1 Data Transfer Request Enable */ - vuint32_t DTRE0:1; /* Channel 0 Data Transfer Request Enable */ - } B; - } CDTRER_A; /* ETPU_CDTRER */ - - int32_t ETPU_reserved_10[3]; - - /* offset 0x0260 */ - union { /* ETPUWDSR - eTPU Watchdog Status Register */ - vuint32_t R; - struct { - vuint32_t WDS31:1; /* Channel 31 Data Transfer Request Enable */ - vuint32_t WDS30:1; /* Channel 30 Data Transfer Request Enable */ - vuint32_t WDS29:1; /* Channel 29 Data Transfer Request Enable */ - vuint32_t WDS28:1; /* Channel 28 Data Transfer Request Enable */ - vuint32_t WDS27:1; /* Channel 27 Data Transfer Request Enable */ - vuint32_t WDS26:1; /* Channel 26 Data Transfer Request Enable */ - vuint32_t WDS25:1; /* Channel 25 Data Transfer Request Enable */ - vuint32_t WDS24:1; /* Channel 24 Data Transfer Request Enable */ - vuint32_t WDS23:1; /* Channel 23 Data Transfer Request Enable */ - vuint32_t WDS22:1; /* Channel 22 Data Transfer Request Enable */ - vuint32_t WDS21:1; /* Channel 21 Data Transfer Request Enable */ - vuint32_t WDS20:1; /* Channel 20 Data Transfer Request Enable */ - vuint32_t WDS19:1; /* Channel 19 Data Transfer Request Enable */ - vuint32_t WDS18:1; /* Channel 18 Data Transfer Request Enable */ - vuint32_t WDS17:1; /* Channel 17 Data Transfer Request Enable */ - vuint32_t WDS16:1; /* Channel 16 Data Transfer Request Enable */ - vuint32_t WDS15:1; /* Channel 15 Data Transfer Request Enable */ - vuint32_t WDS14:1; /* Channel 14 Data Transfer Request Enable */ - vuint32_t WDS13:1; /* Channel 13 Data Transfer Request Enable */ - vuint32_t WDS12:1; /* Channel 12 Data Transfer Request Enable */ - vuint32_t WDS11:1; /* Channel 11 Data Transfer Request Enable */ - vuint32_t WDS10:1; /* Channel 10 Data Transfer Request Enable */ - vuint32_t WDS9:1; /* Channel 9 Data Transfer Request Enable */ - vuint32_t WDS8:1; /* Channel 8 Data Transfer Request Enable */ - vuint32_t WDS7:1; /* Channel 7 Data Transfer Request Enable */ - vuint32_t WDS6:1; /* Channel 6 Data Transfer Request Enable */ - vuint32_t WDS5:1; /* Channel 5 Data Transfer Request Enable */ - vuint32_t WDS4:1; /* Channel 4 Data Transfer Request Enable */ - vuint32_t WDS3:1; /* Channel 3 Data Transfer Request Enable */ - vuint32_t WDS2:1; /* Channel 2 Data Transfer Request Enable */ - vuint32_t WDS1:1; /* Channel 1 Data Transfer Request Enable */ - vuint32_t WDS0:1; /* Channel 0 Data Transfer Request Enable */ - } B; - } WDSR_A; - - int32_t ETPU_reserved_11[7]; - - /* offset 0x0280 */ - union { /* ETPUCPSSR - eTPU Channel Pending Service Status Register */ - vuint32_t R; - struct { - vuint32_t SR31:1; /* Channel 31 Data Transfer Request Enable */ - vuint32_t SR30:1; /* Channel 30 Data Transfer Request Enable */ - vuint32_t SR29:1; /* Channel 29 Data Transfer Request Enable */ - vuint32_t SR28:1; /* Channel 28 Data Transfer Request Enable */ - vuint32_t SR27:1; /* Channel 27 Data Transfer Request Enable */ - vuint32_t SR26:1; /* Channel 26 Data Transfer Request Enable */ - vuint32_t SR25:1; /* Channel 25 Data Transfer Request Enable */ - vuint32_t SR24:1; /* Channel 24 Data Transfer Request Enable */ - vuint32_t SR23:1; /* Channel 23 Data Transfer Request Enable */ - vuint32_t SR22:1; /* Channel 22 Data Transfer Request Enable */ - vuint32_t SR21:1; /* Channel 21 Data Transfer Request Enable */ - vuint32_t SR20:1; /* Channel 20 Data Transfer Request Enable */ - vuint32_t SR19:1; /* Channel 19 Data Transfer Request Enable */ - vuint32_t SR18:1; /* Channel 18 Data Transfer Request Enable */ - vuint32_t SR17:1; /* Channel 17 Data Transfer Request Enable */ - vuint32_t SR16:1; /* Channel 16 Data Transfer Request Enable */ - vuint32_t SR15:1; /* Channel 15 Data Transfer Request Enable */ - vuint32_t SR14:1; /* Channel 14 Data Transfer Request Enable */ - vuint32_t SR13:1; /* Channel 13 Data Transfer Request Enable */ - vuint32_t SR12:1; /* Channel 12 Data Transfer Request Enable */ - vuint32_t SR11:1; /* Channel 11 Data Transfer Request Enable */ - vuint32_t SR10:1; /* Channel 10 Data Transfer Request Enable */ - vuint32_t SR9:1; /* Channel 9 Data Transfer Request Enable */ - vuint32_t SR8:1; /* Channel 8 Data Transfer Request Enable */ - vuint32_t SR7:1; /* Channel 7 Data Transfer Request Enable */ - vuint32_t SR6:1; /* Channel 6 Data Transfer Request Enable */ - vuint32_t SR5:1; /* Channel 5 Data Transfer Request Enable */ - vuint32_t SR4:1; /* Channel 4 Data Transfer Request Enable */ - vuint32_t SR3:1; /* Channel 3 Data Transfer Request Enable */ - vuint32_t SR2:1; /* Channel 2 Data Transfer Request Enable */ - vuint32_t SR1:1; /* Channel 1 Data Transfer Request Enable */ - vuint32_t SR0:1; /* Channel 0 Data Transfer Request Enable */ - } B; - } CPSSR_A; /* ETPU_CPSSR */ - - int32_t ETPU_reserved_12[3]; - - /* offset 0x0290 */ - union { /* ETPUCSSR - eTPU Channel Service Status Register */ - vuint32_t R; - struct { - vuint32_t SS31:1; /* Channel 31 Data Transfer Request Enable */ - vuint32_t SS30:1; /* Channel 30 Data Transfer Request Enable */ - vuint32_t SS29:1; /* Channel 29 Data Transfer Request Enable */ - vuint32_t SS28:1; /* Channel 28 Data Transfer Request Enable */ - vuint32_t SS27:1; /* Channel 27 Data Transfer Request Enable */ - vuint32_t SS26:1; /* Channel 26 Data Transfer Request Enable */ - vuint32_t SS25:1; /* Channel 25 Data Transfer Request Enable */ - vuint32_t SS24:1; /* Channel 24 Data Transfer Request Enable */ - vuint32_t SS23:1; /* Channel 23 Data Transfer Request Enable */ - vuint32_t SS22:1; /* Channel 22 Data Transfer Request Enable */ - vuint32_t SS21:1; /* Channel 21 Data Transfer Request Enable */ - vuint32_t SS20:1; /* Channel 20 Data Transfer Request Enable */ - vuint32_t SS19:1; /* Channel 19 Data Transfer Request Enable */ - vuint32_t SS18:1; /* Channel 18 Data Transfer Request Enable */ - vuint32_t SS17:1; /* Channel 17 Data Transfer Request Enable */ - vuint32_t SS16:1; /* Channel 16 Data Transfer Request Enable */ - vuint32_t SS15:1; /* Channel 15 Data Transfer Request Enable */ - vuint32_t SS14:1; /* Channel 14 Data Transfer Request Enable */ - vuint32_t SS13:1; /* Channel 13 Data Transfer Request Enable */ - vuint32_t SS12:1; /* Channel 12 Data Transfer Request Enable */ - vuint32_t SS11:1; /* Channel 11 Data Transfer Request Enable */ - vuint32_t SS10:1; /* Channel 10 Data Transfer Request Enable */ - vuint32_t SS9:1; /* Channel 9 Data Transfer Request Enable */ - vuint32_t SS8:1; /* Channel 8 Data Transfer Request Enable */ - vuint32_t SS7:1; /* Channel 7 Data Transfer Request Enable */ - vuint32_t SS6:1; /* Channel 6 Data Transfer Request Enable */ - vuint32_t SS5:1; /* Channel 5 Data Transfer Request Enable */ - vuint32_t SS4:1; /* Channel 4 Data Transfer Request Enable */ - vuint32_t SS3:1; /* Channel 3 Data Transfer Request Enable */ - vuint32_t SS2:1; /* Channel 2 Data Transfer Request Enable */ - vuint32_t SS1:1; /* Channel 1 Data Transfer Request Enable */ - vuint32_t SS0:1; /* Channel 0 Data Transfer Request Enable */ - } B; - } CSSR_A; /* ETPU_CSSR */ - - int32_t ETPU_reserved_13[3]; - int32_t ETPU_reserved_14[88]; - -/***************************** Channels ********************************/ -/* Note not all devices implement all channels or even 2 engines */ -/* Each eTPU engine can implement 64 channels, however most devcies */ -/* only implemnet 32 channels. The eTPU block can implement 1 or 2 */ -/* engines per instantiation */ -/***********************************************************************/ - - struct { - union { /* eTPU Channel n Configuration Register (ETPU_CnCR)@baseaddress + 0x400 */ - vuint32_t R; - struct { - vuint32_t CIE:1; /* Channel Interruput Enable */ - vuint32_t DTRE:1; /* Data Transfer Request Enable */ - vuint32_t CPR:2; /* Channel Priority */ - vuint32_t:2; /* */ - vuint32_t ETPD:1; /* This bit selects which channel signal, input or output, is used in the entry point selection */ - vuint32_t ETCS:1; /* Entry Table Condition Select */ - vuint32_t:3; /* */ - vuint32_t CFS:5; /* Channel Function Select */ - vuint32_t ODIS:1; /* Output disable */ - vuint32_t OPOL:1; /* output polarity */ - vuint32_t:3; /* */ - vuint32_t CPBA:11; /* Channel Parameter Base Address */ - } B; - } CR; /* ETPU_CnCR */ - - union { /* eTPU Channel n Status Control Register (ETPU_CnSCR)@baseaddress + 0x404 */ - vuint32_t R; - struct { - vuint32_t CIS:1; /* Channel Interruput Status */ - vuint32_t CIOS:1; /* Channel Interruput Overflow Status */ - vuint32_t:6; /* */ - vuint32_t DTRS:1; /* Data Transfer Status */ - vuint32_t DTROS:1; /* Data Transfer Overflow Status */ - vuint32_t:6; /* */ - vuint32_t IPS:1; /* Input Pin State */ - vuint32_t OPS:1; /* Output Pin State */ - vuint32_t OBE:1; /* Output Pin State */ - vuint32_t:11; /* */ - vuint32_t FM1:1; /* Function mode */ - vuint32_t FM0:1; /* Function mode */ - } B; - } SCR; /* ETPU_CnSCR */ - - union { /* eTPU channel host service request register (ETPU_CnHSRR)@baseaddress + 0x408 */ - vuint32_t R; - struct { - vuint32_t:29; /* Host Service Request */ - vuint32_t HSR:3; /* */ - } B; - } HSRR; /* ETPU_CnHSRR */ - int32_t ETPU_reserved_18; - - } CHAN[127]; - /**** Note: Not all channels implemented on all devices. Up 64 can be implemented on */ - }; /* end of ETPU_tag */ -/****************************************************************************/ -/* MODULE : XBAR */ -/****************************************************************************/ - struct XBAR_tag { - union { - vuint32_t R; - struct { - vuint32_t:4; /* Master 7 Priority - Not implemented */ - vuint32_t:4; /* Master 6 Priority - Not implemented */ - vuint32_t:4; /* Master 5 Priority - Not implemented */ - vuint32_t:1; /* */ - vuint32_t MSTR4:3; /* Master 4 Priority - Core load/store & Nexus port */ - vuint32_t:4; /* Master 3 Priority - Not implemented */ - vuint32_t:1; /* */ - vuint32_t MSTR2:3; /* Master 2 Priority - Unused implemented master port */ - vuint32_t:1; /* */ - vuint32_t MSTR1:3; /* Master 1 Priority - eDMA */ - vuint32_t:1; /* */ - vuint32_t MSTR0:3; /* Master 0 Priority - e200z335 core Instruction */ - } B; - } MPR0; /* Master Priority Register for Slave port 0 @baseaddress + 0x00 - Flash */ - - int32_t XBAR_reserverd_35[3]; - - union { - vuint32_t R; - struct { - vuint32_t RO:1; /* Read Only */ - vuint32_t HLP:1; /* Halt Low Priority (new in MPC563xM) */ - vuint32_t:6; /* Slave General Purpose Control Register Reserved */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t HPE4:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t HPE2:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t HPE1:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t HPE0:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t:6; /* */ - vuint32_t ARB:2; /* Arbitration Mode */ - vuint32_t:2; /* */ - vuint32_t PCTL:2; /* Parking Control */ - vuint32_t:1; /* */ - vuint32_t PARK:3; /* PARK */ - } B; - } SGPCR0; /* Slave General Purpose Control Register 0 @baseaddress + 0x10 */ - - int32_t XBAR_reserverd_71[59]; - - union { - vuint32_t R; - struct { - vuint32_t:4; /* Master 7 Priority - Not implemented */ - vuint32_t:4; /* Master 6 Priority - Not implemented */ - vuint32_t:4; /* Master 5 Priority - Not implemented */ - vuint32_t:1; /* */ - vuint32_t MSTR4:3; /* Master 4 Priority - Core load/store & Nexus port */ - vuint32_t:4; /* Master 3 Priority - Not implemented */ - vuint32_t:1; /* */ - vuint32_t MSTR2:3; /* Master 2 Priority - Unused implemented master port */ - vuint32_t:1; /* */ - vuint32_t MSTR1:3; /* Master 1 Priority - eDMA */ - vuint32_t:1; /* */ - vuint32_t MSTR0:3; /* Master 0 Priority - e200z335 core Instruction */ - } B; - } MPR1; /* Master Priority Register for Slave port 1 @baseaddress + 0x100 */ - - int32_t XBAR_reserverd_105[3]; - - union { - vuint32_t R; - struct { - vuint32_t RO:1; /* Read Only */ - vuint32_t HLP:1; /* Halt Low Priority (new in MPC563xM) */ - vuint32_t:6; /* Slave General Purpose Control Register Reserved */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t HPE4:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t HPE2:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t HPE1:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t HPE0:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t:6; /* */ - vuint32_t ARB:2; /* Arbitration Mode */ - vuint32_t:2; /* */ - vuint32_t PCTL:2; /* Parking Control */ - vuint32_t:1; /* */ - vuint32_t PARK:3; /* PARK */ - } B; - } SGPCR1; /* Slave General Purpose Control Register 1 @baseaddress + 0x110 */ - - int32_t XBAR_reserverd_141[59]; - -/* Slave General Purpose Control Register 2 @baseaddress + 0x210 - not implemented */ - - int32_t XBAR_reserverd_211[64]; - - union { - vuint32_t R; - struct { - vuint32_t:4; /* Master 7 Priority - Not implemented */ - vuint32_t:4; /* Master 6 Priority - Not implemented */ - vuint32_t:4; /* Master 5 Priority - Not implemented */ - vuint32_t:1; /* */ - vuint32_t MSTR4:3; /* Master 4 Priority - Core load/store & Nexus port */ - vuint32_t:4; /* Master 3 Priority - Not implemented */ - vuint32_t:1; /* */ - vuint32_t MSTR2:3; /* Master 2 Priority - Unused implemented master port */ - vuint32_t:1; /* */ - vuint32_t MSTR1:3; /* Master 1 Priority - eDMA */ - vuint32_t:1; /* */ - vuint32_t MSTR0:3; /* Master 0 Priority - e200z335 core Instruction */ - } B; - } MPR3; /* Master Priority Register for Slave port 3 @baseaddress + 0x300 */ - - int32_t XBAR_reserverd_245[3]; - - union { - vuint32_t R; - struct { - vuint32_t RO:1; /* Read Only */ - vuint32_t HLP:1; /* Halt Low Priority (new in MPC563xM) */ - vuint32_t:6; /* Slave General Purpose Control Register Reserved */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t HPE4:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t HPE2:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t HPE1:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t HPE0:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t:6; /* */ - vuint32_t ARB:2; /* Arbitration Mode */ - vuint32_t:2; /* */ - vuint32_t PCTL:2; /* Parking Control */ - vuint32_t:1; /* */ - vuint32_t PARK:3; /* PARK */ - } B; - } SGPCR3; /* Slave General Purpose Control Register 3 @baseaddress + 0x310 */ - - int32_t XBAR_reserverd_281[59]; - - /* Slave General Purpose Control Register 4 @baseaddress + 0x410 - not implemented */ - - int32_t XBAR_reserverd_351[64]; - - /* Slave XBAR Port 5 Not implemented @baseaddress + 0x510 */ - - int32_t XBAR_reserverd_421[64]; - - /* Slave Port 6 not implemented @baseaddress + 0x610 */ - - int32_t XBAR_reserverd_491[64]; - - union { - vuint32_t R; - struct { - vuint32_t:4; /* Master 7 Priority - Not implemented */ - vuint32_t:4; /* Master 6 Priority - Not implemented */ - vuint32_t:4; /* Master 5 Priority - Not implemented */ - vuint32_t:1; /* */ - vuint32_t MSTR4:3; /* Master 4 Priority - Core load/store & Nexus port */ - vuint32_t:4; /* Master 3 Priority - Not implemented */ - vuint32_t:1; /* */ - vuint32_t MSTR2:3; /* Master 2 Priority - Unused implemented master port */ - vuint32_t:1; /* */ - vuint32_t MSTR1:3; /* Master 1 Priority - eDMA */ - vuint32_t:1; /* */ - vuint32_t MSTR0:3; /* Master 0 Priority - e200z335 core Instruction */ - } B; - } MPR7; /* Master Priority Register for Slave port 7 @baseaddress + 0x700 */ - - int32_t XBAR_reserverd_525[3]; - - union { - vuint32_t R; - struct { - vuint32_t RO:1; /* Read Only */ - vuint32_t HLP:1; /* Halt Low Priority (new in MPC563xM) */ - vuint32_t:6; /* Slave General Purpose Control Register Reserved */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t HPE4:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t:1; /* High Priority Enable (new in MPC563xM - not implemented) */ - vuint32_t HPE2:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t HPE1:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t HPE0:1; /* High Priority Enable (new in MPC563xM) */ - vuint32_t:6; /* */ - vuint32_t ARB:2; /* Arbitration Mode */ - vuint32_t:2; /* */ - vuint32_t PCTL:2; /* Parking Control */ - vuint32_t:1; /* */ - vuint32_t PARK:3; /* PARK */ - } B; - } SGPCR7; /* Slave General Purpose Control Register 7 @baseaddress + 0x710 */ - - int32_t XBAR_reserverd_561[59]; - - union { - vuint32_t R; - struct { - vuint32_t:29; /* */ - vuint32_t AULB:3; /* Arbitrate on Undefined Length Bursts */ - } B; - } MGPCR0; /* Master General Purpose Control Register 0 @baseaddress + 0x800 */ - - int32_t XBAR_reserverd_564[63]; - - union { - vuint32_t R; - struct { - vuint32_t:29; /* */ - vuint32_t AULB:3; /* Arbitrate on Undefined Length Bursts */ - } B; - } MGPCR1; /* Master General Purpose Control Register 1 @baseaddress + 0x900 */ - - int32_t XBAR_reserverd_567[63]; - - union { - vuint32_t R; - struct { - vuint32_t:29; /* */ - vuint32_t AULB:3; /* Arbitrate on Undefined Length Bursts */ - } B; - } MGPCR2; /* Master General Purpose Control Register 2 @baseaddress + 0xA00 */ - - int32_t XBAR_reserverd_570[63]; - - /* Master General Purpose Control Register 3 not implemented @baseaddress + 0xB00 */ - - int32_t XBAR_reserverd_573[64]; - - union { - vuint32_t R; - struct { - vuint32_t:29; /* */ - vuint32_t AULB:3; /* Arbitrate on Undefined Length Bursts */ - } B; - } MGPCR4; /* Master General Purpose Control Register 4 @baseaddress + 0xC00 */ - - int32_t XBAR_reserverd_576[64]; - - /* Master General Purpose Control Register 5 not implemented @baseaddress + 0xD00 */ - - int32_t XBAR_reserverd_579[64]; - - /* Master General Purpose Control Register 6 not implemented @baseaddress + 0xE00 */ - - int32_t XBAR_reserverd_582[64]; - - /* Master General Purpose Control Register 7 not implemented @baseaddress + 0xF00 */ - - }; /* end of XBAR_tag */ -/****************************************************************************/ -/* MODULE : ECSM */ -/****************************************************************************/ - struct ECSM_tag { - /* SWTCR, SWTSR and SWTIR don't exist in MPC563xM */ - uint32_t ecsm_reserved1[16]; - - uint8_t ecsm_reserved3[3]; /* base + 0x40 */ - - union { - vuint8_t R; - struct { - vuint8_t:6; - vuint8_t ERNCR:1; /* EPRNCR */ - vuint8_t EFNCR:1; /* EPFNCR */ - } B; - } ECR; /* ECC Configuration Register */ - - uint8_t ecsm_reserved4[3]; /* base + 0x44 */ - - union { - vuint8_t R; - struct { - vuint8_t:6; - vuint8_t RNCE:1; /* PRNCE */ - vuint8_t FNCE:1; /* PFNCE */ - } B; - } ESR; /* ECC Status Register */ - - /* EEGR don't exist in MPC563xM */ - uint32_t ecsm_reserved4a[2]; - - union { - vuint32_t R; - struct { - vuint32_t FEAR:32; /* PFEAR */ - } B; - } FEAR; /* Flash ECC Address Register PFEAR - 0x50 */ - - uint16_t ecsm_reserved4b; - - union { - vuint8_t R; - struct { - vuint8_t:4; - vuint8_t FEMR:4; /* PFEMR */ - } B; - } FEMR; /* Flash ECC Master Register PFEMR */ - - union { - vuint8_t R; - struct { - vuint8_t WRITE:1; - vuint8_t SIZE:3; - vuint8_t PROT0:1; /* PROTECTION */ - vuint8_t PROT1:1; /* PROTECTION */ - vuint8_t PROT2:1; /* PROTECTION */ - vuint8_t PROT3:1; /* PROTECTION */ - } B; - } FEAT; /* Flash ECC Attributes Register PFEAT */ - - union { - vuint32_t R; - struct { - vuint32_t FEDH:32; /* PFEDR */ - } B; - } FEDRH; /* Flash ECC Data High Register PFEDRH */ - - union { - vuint32_t R; - struct { - vuint32_t FEDL:32; /* PFEDR */ - } B; - } FEDRL; /* Flash ECC Data Low Register PFEDRL */ - - union { - vuint32_t R; - struct { - vuint32_t REAR:32; /* PREAR */ - } B; - } REAR; /* RAM ECC Address PREAR */ - - uint8_t ecsm_reserved5; - - union { - vuint8_t R; - struct { - vuint8_t PRESR:8; - } B; - } PRESR; /* RAM ECC Syndrome (new in MPC563xM) */ - - union { - vuint8_t R; - struct { - vuint8_t:4; - vuint8_t REMR:4; /* PREMR */ - } B; - } REMR; /* RAM ECC Master PREMR */ - - union { - vuint8_t R; - struct { - vuint8_t WRITE:1; - vuint8_t SIZE:3; - vuint8_t PROT0:1; /* PROTECTION */ - vuint8_t PROT1:1; /* PROTECTION */ - vuint8_t PROT2:1; /* PROTECTION */ - vuint8_t PROT3:1; /* PROTECTION */ - } B; - } REAT; /* RAM ECC Attributes Register PREAT */ - - union { - vuint32_t R; - struct { - vuint32_t REDH:32; /* PREDR */ - } B; - } REDRH; /* RAM ECC Data High Register PREDRH */ - - union { - vuint32_t R; - struct { - vuint32_t REDL:32; /* PREDR */ - } B; - } REDRL; /* RAMECC Data Low Register PREDRL */ - - }; -/****************************************************************************/ -/* MODULE : EDMA */ -/****************************************************************************/ - struct EDMA_tag { - union { - vuint32_t R; - struct { - vuint32_t:14; /* Reserved */ - vuint32_t CX:1; /* Cancel Transfer (new in MPC563xM) */ - vuint32_t ECX:1; /* Error Cancel Transfer (new in MPC563xM) */ - vuint32_t GRP3PRI:2; /* Channel Group 3 Priority (new in MPC563xM) */ - vuint32_t GRP2PRI:2; /* Channel Group 2 Priority (new in MPC563xM) */ - vuint32_t GRP1PRI:2; /* Channel Group 1 Priority */ - vuint32_t GRP0PRI:2; /* Channel Group 0 Priority */ - vuint32_t EMLM:1; /* Enable Minor Loop Mapping (new in MPC563xM) */ - vuint32_t CLM:1; /* Continuous Link Mode (new in MPC563xM) */ - vuint32_t HALT:1; /* Halt DMA Operations (new in MPC563xM) */ - vuint32_t HOE:1; /* Halt On Error (new in MPC563xM) */ - vuint32_t ERGA:1; /* Enable Round Robin Group Arbitration */ - vuint32_t ERCA:1; /* Enable Round Robin Channel Arbitration */ - vuint32_t EDBG:1; /* Enable Debug */ - vuint32_t EBW:1; /* Enable Buffered Writes */ - } B; - } CR; /* DMA Control Register DMACR @baseaddress + 0x0 */ - - union { - vuint32_t R; - struct { - vuint32_t VLD:1; /* Logical OR of all DMAERRH */ - - vuint32_t:14; /* Reserved */ - vuint32_t ECX:1; /* (new in MPC563xM) */ - vuint32_t GPE:1; /* Group Priority Error */ - vuint32_t CPE:1; /* Channel Priority Error */ - vuint32_t ERRCHN:6; /* ERRCHN[5:0] Error Channel Number or The channel number of the last recorded error */ - vuint32_t SAE:1; /* Source Address Error 0 */ - vuint32_t SOE:1; /* Source Offset Error */ - vuint32_t DAE:1; /* Destination Address Error */ - vuint32_t DOE:1; /* Destination Offset Error */ - vuint32_t NCE:1; /* Nbytes/Citer Configuration Error */ - vuint32_t SGE:1; /* Scatter/Gather Configuration Error */ - vuint32_t SBE:1; /* Source Bus Error */ - vuint32_t DBE:1; /* Destination Bus Error */ - - } B; - } ESR; /* DMAES Error Status Register */ - - uint32_t edma_reserved_erqrh; - - union { - vuint32_t R; - struct { - vuint32_t ERQ31:1; - vuint32_t ERQ30:1; - vuint32_t ERQ29:1; - vuint32_t ERQ28:1; - vuint32_t ERQ27:1; - vuint32_t ERQ26:1; - vuint32_t ERQ25:1; - vuint32_t ERQ24:1; - vuint32_t ERQ23:1; - vuint32_t ERQ22:1; - vuint32_t ERQ21:1; - vuint32_t ERQ20:1; - vuint32_t ERQ19:1; - vuint32_t ERQ18:1; - vuint32_t ERQ17:1; - vuint32_t ERQ16:1; - vuint32_t ERQ15:1; - vuint32_t ERQ14:1; - vuint32_t ERQ13:1; - vuint32_t ERQ12:1; - vuint32_t ERQ11:1; - vuint32_t ERQ10:1; - vuint32_t ERQ09:1; - vuint32_t ERQ08:1; - vuint32_t ERQ07:1; - vuint32_t ERQ06:1; - vuint32_t ERQ05:1; - vuint32_t ERQ04:1; - vuint32_t ERQ03:1; - vuint32_t ERQ02:1; - vuint32_t ERQ01:1; - vuint32_t ERQ00:1; - } B; - } ERQRL; /* DMAERQL ,DMA Enable Request Register Low */ - - uint32_t edma_reserved_eeirh; - - union { - vuint32_t R; - struct { - vuint32_t EEI31:1; - vuint32_t EEI30:1; - vuint32_t EEI29:1; - vuint32_t EEI28:1; - vuint32_t EEI27:1; - vuint32_t EEI26:1; - vuint32_t EEI25:1; - vuint32_t EEI24:1; - vuint32_t EEI23:1; - vuint32_t EEI22:1; - vuint32_t EEI21:1; - vuint32_t EEI20:1; - vuint32_t EEI19:1; - vuint32_t EEI18:1; - vuint32_t EEI17:1; - vuint32_t EEI16:1; - vuint32_t EEI15:1; - vuint32_t EEI14:1; - vuint32_t EEI13:1; - vuint32_t EEI12:1; - vuint32_t EEI11:1; - vuint32_t EEI10:1; - vuint32_t EEI09:1; - vuint32_t EEI08:1; - vuint32_t EEI07:1; - vuint32_t EEI06:1; - vuint32_t EEI05:1; - vuint32_t EEI04:1; - vuint32_t EEI03:1; - vuint32_t EEI02:1; - vuint32_t EEI01:1; - vuint32_t EEI00:1; - } B; - } EEIRL; /* DMAEEIL , DMA Enable Error Interrupt Register Low */ - - union { - vuint8_t R; - vuint8_t B; /* NOP:1 SERQ:7 */ - } SERQR; /* DMASERQ , DMA Set Enable Request Register */ - - union { - vuint8_t R; - vuint8_t B; /* NOP:1 CERQ:7 */ - } CERQR; /* DMACERQ , DMA Clear Enable Request Register */ - - union { - vuint8_t R; - vuint8_t B; /* NOP:1 SEEI:7 */ - } SEEIR; /* DMASEEI , DMA Set Enable Error Interrupt Register */ - - union { - vuint8_t R; - vuint8_t B; /* NOP:1 CEEI:7 */ - } CEEIR; /* DMACEEI , DMA Clear Enable Error Interrupt Register */ - - union { - vuint8_t R; - vuint8_t B; /* NOP:1 CINT:7 */ - } CIRQR; /* DMACINT , DMA Clear Interrupt Request Register */ - - union { - vuint8_t R; - vuint8_t B; /* NOP:1 CERR:7 */ - } CER; /* DMACERR , DMA Clear error Register */ - - union { - vuint8_t R; - vuint8_t B; /* NOP:1 SSRT:7 */ - } SSBR; /* DMASSRT , Set Start Bit Register */ - - union { - vuint8_t R; - vuint8_t B; /* NOP:1 CDNE:7 */ - } CDSBR; /* DMACDNE , Clear Done Status Bit Register */ - - uint32_t edma_reserved_irqrh; - - union { - vuint32_t R; - struct { - vuint32_t INT31:1; - vuint32_t INT30:1; - vuint32_t INT29:1; - vuint32_t INT28:1; - vuint32_t INT27:1; - vuint32_t INT26:1; - vuint32_t INT25:1; - vuint32_t INT24:1; - vuint32_t INT23:1; - vuint32_t INT22:1; - vuint32_t INT21:1; - vuint32_t INT20:1; - vuint32_t INT19:1; - vuint32_t INT18:1; - vuint32_t INT17:1; - vuint32_t INT16:1; - vuint32_t INT15:1; - vuint32_t INT14:1; - vuint32_t INT13:1; - vuint32_t INT12:1; - vuint32_t INT11:1; - vuint32_t INT10:1; - vuint32_t INT09:1; - vuint32_t INT08:1; - vuint32_t INT07:1; - vuint32_t INT06:1; - vuint32_t INT05:1; - vuint32_t INT04:1; - vuint32_t INT03:1; - vuint32_t INT02:1; - vuint32_t INT01:1; - vuint32_t INT00:1; - } B; - } IRQRL; /* DMAINTL , DMA Interrupt Request Low */ - - uint32_t edma_reserved_erh; - - union { - vuint32_t R; - struct { - vuint32_t ERR31:1; - vuint32_t ERR30:1; - vuint32_t ERR29:1; - vuint32_t ERR28:1; - vuint32_t ERR27:1; - vuint32_t ERR26:1; - vuint32_t ERR25:1; - vuint32_t ERR24:1; - vuint32_t ERR23:1; - vuint32_t ERR22:1; - vuint32_t ERR21:1; - vuint32_t ERR20:1; - vuint32_t ERR19:1; - vuint32_t ERR18:1; - vuint32_t ERR17:1; - vuint32_t ERR16:1; - vuint32_t ERR15:1; - vuint32_t ERR14:1; - vuint32_t ERR13:1; - vuint32_t ERR12:1; - vuint32_t ERR11:1; - vuint32_t ERR10:1; - vuint32_t ERR09:1; - vuint32_t ERR08:1; - vuint32_t ERR07:1; - vuint32_t ERR06:1; - vuint32_t ERR05:1; - vuint32_t ERR04:1; - vuint32_t ERR03:1; - vuint32_t ERR02:1; - vuint32_t ERR01:1; - vuint32_t ERR00:1; - } B; - } ERL; /* DMAERRL , DMA Error Low */ - - int32_t edma_reserverd_hrsh[1]; - - int32_t edma_reserverd_hrsl[1]; - - int32_t edma_reserverd_gpor[1]; - - int32_t EDMA_reserverd_223[49]; - - union { - vuint8_t R; - struct { - vuint8_t ECP:1; - vuint8_t DPA:1; - vuint8_t GRPPRI:2; - vuint8_t CHPRI:4; - } B; - } CPR[64]; /* DCHPRI [32] , Channel n Priority */ - - uint32_t edma_reserved2[944]; - -/****************************************************************************/ -/* DMA2 Transfer Control Descriptor */ -/****************************************************************************/ - - struct tcd_t { /*for "standard" format TCDs (when EDMA.TCD[x].CITER.E_LINK==BITER.E_LINK=0 && EDMA.EMLM=0 ) */ - vuint32_t SADDR; /* source address */ - - vuint16_t SMOD:5; /* source address modulo */ - vuint16_t SSIZE:3; /* source transfer size */ - vuint16_t DMOD:5; /* destination address modulo */ - vuint16_t DSIZE:3; /* destination transfer size */ - vint16_t SOFF; /* signed source address offset */ - vuint32_t NBYTES; /* inner (“minor”) byte count */ - vint32_t SLAST; /* last destination address adjustment, or - - scatter/gather address (if e_sg = 1) */ - vuint32_t DADDR; /* destination address */ - vuint16_t CITERE_LINK:1; - vuint16_t CITER:15; - vint16_t DOFF; /* signed destination address offset */ - vint32_t DLAST_SGA; - vuint16_t BITERE_LINK:1; /* beginning ("major") iteration count */ - vuint16_t BITER:15; - vuint16_t BWC:2; /* bandwidth control */ - vuint16_t MAJORLINKCH:6; /* enable channel-to-channel link */ - vuint16_t DONE:1; /* channel done */ - vuint16_t ACTIVE:1; /* channel active */ - vuint16_t MAJORE_LINK:1; /* enable channel-to-channel link */ - vuint16_t E_SG:1; /* enable scatter/gather descriptor */ - vuint16_t D_REQ:1; /* disable ipd_req when done */ - vuint16_t INT_HALF:1; /* interrupt on citer = (biter >> 1) */ - vuint16_t INT_MAJ:1; /* interrupt on major loop completion */ - vuint16_t START:1; /* explicit channel start */ - } TCD[64]; /* TCD [32] , transfer_control_descriptor */ - }; - - struct EDMA_TCD_alt1_tag { /*for alternate format TCDs (when EDMA.TCD[x].CITER.E_LINK==BITER.E_LINK=1 ) */ - - struct tcd_alt1_t { - vuint32_t SADDR; /* source address */ - - vuint16_t SMOD:5; /* source address modulo */ - vuint16_t SSIZE:3; /* source transfer size */ - vuint16_t DMOD:5; /* destination address modulo */ - vuint16_t DSIZE:3; /* destination transfer size */ - vint16_t SOFF; /* signed source address offset */ - vuint32_t NBYTES; /* inner (“minor”) byte count */ - vint32_t SLAST; /* last destination address adjustment, or - - scatter/gather address (if e_sg = 1) */ - vuint32_t DADDR; /* destination address */ - vuint16_t CITERE_LINK:1; - vuint16_t CITERLINKCH:6; - vuint16_t CITER:9; - vint16_t DOFF; /* signed destination address offset */ - vint32_t DLAST_SGA; - vuint16_t BITERE_LINK:1; /* beginning (“major”) iteration count */ - vuint16_t BITERLINKCH:6; - vuint16_t BITER:9; - vuint16_t BWC:2; /* bandwidth control */ - vuint16_t MAJORLINKCH:6; /* enable channel-to-channel link */ - vuint16_t DONE:1; /* channel done */ - vuint16_t ACTIVE:1; /* channel active */ - vuint16_t MAJORE_LINK:1; /* enable channel-to-channel link */ - vuint16_t E_SG:1; /* enable scatter/gather descriptor */ - vuint16_t D_REQ:1; /* disable ipd_req when done */ - vuint16_t INT_HALF:1; /* interrupt on citer = (biter >> 1) */ - vuint16_t INT_MAJ:1; /* interrupt on major loop completion */ - vuint16_t START:1; /* explicit channel start */ - } TCD[64]; /* TCD [32] , transfer_control_descriptor */ - }; - -/****************************************************************************/ -/* MODULE : INTC */ -/****************************************************************************/ - struct INTC_tag { - union { - vuint32_t R; - struct { - vuint32_t:18; /* Reserved */ - vuint32_t VTES_PRC1:1; /* Vector Table Entry Size for PRC1 (new in MPC563xM) */ - vuint32_t:4; /* Reserved */ - vuint32_t HVEN_PRC1:1; /* Hardware Vector Enable for PRC1 (new in MPC563xM) */ - vuint32_t:2; /* Reserved */ - vuint32_t VTES:1; /* Vector Table Entry Size for PRC0 VTES_PRC0 */ - vuint32_t:4; /* Reserved */ - vuint32_t HVEN:1; /* Hardware Vector Enable for PRC0 HVEN_PRC0 */ - } B; - } MCR; /* INTC Module Configuration Register (MCR) INTC_BCR @baseaddress + 0x00 */ - int32_t INTC_reserverd_10[1]; - - union { - vuint32_t R; - struct { - vuint32_t:28; /* Reserved */ - vuint32_t PRI:4; /* Priority */ - } B; - } CPR; /* INTC Current Priority Register for Processor 0 (CPR) INTC_CPR_PRC0 @baseaddress + 0x08 */ - - int32_t INTC_reserved_1; /* CPR_PRC1 - INTC Current Priority Register for Processor 1 (CPR_PRC1) INTC_CPR_PRC1 @baseaddress + 0x0c */ - - union { - vuint32_t R; - struct { - vuint32_t VTBA:21; /* Vector Table Base Address VTBA_PRC0 */ - vuint32_t INTVEC:9; /* Interrupt Vector INTVEC_PRC0 */ - vuint32_t:2; /* Reserved */ - } B; - } IACKR; /* INTC Interrupt Acknowledge Register for Processor 0 (IACKR) INTC_IACKR_PRC0 @baseaddress + 0x10 */ - - int32_t INTC_reserverd_2; /* IACKR_PRC1 - INTC Interrupt Acknowledge Register for Processor 1 (IACKR_PRC1) INTC_IACKR_PRC1 @baseaddress + 0x14 */ - - union { - vuint32_t R; - } EOIR; /* INTC End of Interrupt Register for Processor 0 (EOIR) INTC_EOIR_PRC0 @baseaddress + 0x18 */ - - int32_t INTC_reserverd_3; /* EOIR_PRC1 - INTC End of Interrupt Register for Processor 1 (EOIR_PRC1) INTC_EOIR_PRC1 @baseaddress + 0x1C */ - - union { - vuint8_t R; - struct { - vuint8_t:6; /* Reserved */ - vuint8_t SET:1; /* Set Flag bits */ - vuint8_t CLR:1; /* Clear Flag bits */ - } B; - } SSCIR[8]; /* INTC Software Set/Clear Interrupt Registers (SSCIR) INTC_SSCIRn @baseaddress + 0x20 */ - - int32_t INTC_reserverd_32[6]; - - union { - vuint8_t R; - struct { - vuint8_t PRC_SEL:2; /* Processor Select (new in MPC563xM) */ - vuint8_t:2; /* Reserved */ - vuint8_t PRI:4; /* Priority Select */ - } B; - } PSR[512]; /* INTC Priority Select Registers (PSR) INTC_PSR @baseaddress + 0x40 */ - - }; /* end of INTC_tag */ -/****************************************************************************/ -/* MODULE : EQADC */ -/****************************************************************************/ - struct EQADC_tag { - union { - vuint32_t R; - struct { - vuint32_t:24; - vuint32_t ICEA0:1; - vuint32_t ICEA1:1; - vuint32_t:1; - vuint32_t ESSIE:2; - vuint32_t:1; - vuint32_t DBG:2; - } B; - } MCR; /* Module Configuration Register EQADC_MCR */ - - int32_t EQADC_reserved00; - - union { - vuint32_t R; - struct { - vuint32_t:6; - vuint32_t NMF:26; - } B; - } NMSFR; /* Null Message Send Format Register EQADC_NMSFR */ - - union { - vuint32_t R; - struct { - vuint32_t:28; - vuint32_t DFL:4; - } B; - } ETDFR; /* External Trigger Digital Filter Register EQADC_ETDFR */ - - union { - vuint32_t R; - struct { - vuint32_t CFPUSH:32; /* CF_PUSH */ - } B; - } CFPR[6]; /* CFIFO Push Registers EQADC_CFPR */ - - uint32_t eqadc_reserved1; - - uint32_t eqadc_reserved2; - - union { - vuint32_t R; - struct { - vuint32_t:16; - vuint32_t RFPOP:16; /* RF_POP */ - } B; - } RFPR[6]; /* Result FIFO Pop Registers EQADC_RFPR */ - - uint32_t eqadc_reserved3; - - uint32_t eqadc_reserved4; - - union { - vuint16_t R; - struct { - vuint16_t:3; - vuint16_t CFEE0:1; - vuint16_t STRME0:1; - vuint16_t SSE:1; - vuint16_t CFINV:1; - vuint16_t:1; - vuint16_t MODE:4; - vuint16_t AMODE0:4; /* CFIFO0 only */ - } B; - } CFCR[6]; /* CFIFO Control Registers EQADC_CFCR */ - - uint32_t eqadc_reserved5; - - union { - vuint16_t R; - struct { - vuint16_t NCIE:1; - vuint16_t TORIE:1; - vuint16_t PIE:1; - vuint16_t EOQIE:1; - vuint16_t CFUIE:1; - vuint16_t:1; - vuint16_t CFFE:1; - vuint16_t CFFS:1; - vuint16_t:4; - vuint16_t RFOIE:1; - vuint16_t:1; - vuint16_t RFDE:1; - vuint16_t RFDS:1; - } B; - } IDCR[6]; /* Interrupt and DMA Control Registers EQADC_IDCR */ - - uint32_t eqadc_reserved6; - - union { - vuint32_t R; - struct { - vuint32_t NCF:1; - vuint32_t TORF:1; - vuint32_t PF:1; - vuint32_t EOQF:1; - vuint32_t CFUF:1; - vuint32_t SSS:1; - vuint32_t CFFF:1; - vuint32_t:5; - vuint32_t RFOF:1; - vuint32_t:1; - vuint32_t RFDF:1; - vuint32_t:1; - vuint32_t CFCTR:4; - vuint32_t TNXTPTR:4; - vuint32_t RFCTR:4; - vuint32_t POPNXTPTR:4; - } B; - } FISR[6]; /* FIFO and Interrupt Status Registers EQADC_FISR */ - - uint32_t eqadc_reserved7; - - uint32_t eqadc_reserved8; - - union { - vuint16_t R; - struct { - vuint16_t:5; - vuint16_t TCCF:11; /* TC_CF */ - } B; - } CFTCR[6]; /* CFIFO Transfer Counter Registers EQADC_CFTCR */ - - uint32_t eqadc_reserved9; - - union { - vuint32_t R; - struct { - vuint32_t CFS0:2; /* CFS0_TCB0 */ - vuint32_t CFS1:2; /* CFS1_TCB0 */ - vuint32_t CFS2:2; /* CFS2_TCB0 */ - vuint32_t CFS3:2; /* CFS3_TCB0 */ - vuint32_t CFS4:2; /* CFS4_TCB0 */ - vuint32_t CFS5:2; /* CFS5_TCB0 */ - vuint32_t:5; - vuint32_t LCFTCB0:4; - vuint32_t TC_LCFTCB0:11; - } B; - } CFSSR0; /* CFIFO Status Register 0 EQADC_CFSSR0 */ - - union { - vuint32_t R; - struct { - vuint32_t CFS0:2; /* CFS0_TCB1 */ - vuint32_t CFS1:2; /* CFS1_TCB1 */ - vuint32_t CFS2:2; /* CFS2_TCB1 */ - vuint32_t CFS3:2; /* CFS3_TCB1 */ - vuint32_t CFS4:2; /* CFS4_TCB1 */ - vuint32_t CFS5:2; /* CFS5_TCB1 */ - vuint32_t:5; - vuint32_t LCFTCB1:4; - vuint32_t TC_LCFTCB1:11; - } B; - } CFSSR1; /* CFIFO Status Register 1 EQADC_CFSSR1 */ - - union { - vuint32_t R; - struct { - vuint32_t CFS0:2; /* CFS0_TSSI */ - vuint32_t CFS1:2; /* CFS1_TSSI */ - vuint32_t CFS2:2; /* CFS2_TSSI */ - vuint32_t CFS3:2; /* CFS3_TSSI */ - vuint32_t CFS4:2; /* CFS4_TSSI */ - vuint32_t CFS5:2; /* CFS5_TSSI */ - vuint32_t:4; - vuint32_t ECBNI:1; - vuint32_t LCFTSSI:4; - vuint32_t TC_LCFTSSI:11; - } B; - } CFSSR2; /* CFIFO Status Register 2 EQADC_CFSSR2 */ - - union { - vuint32_t R; - struct { - vuint32_t CFS0:2; - vuint32_t CFS1:2; - vuint32_t CFS2:2; - vuint32_t CFS3:2; - vuint32_t CFS4:2; - vuint32_t CFS5:2; - vuint32_t:20; - } B; - } CFSR; /* EQADC_CFSR */ - - uint32_t eqadc_reserved11; - - union { - vuint32_t R; - struct { - vuint32_t:21; - vuint32_t MDT:3; - vuint32_t:4; - vuint32_t BR:4; - } B; - } SSICR; /* SSI Control Register EQADC_SSICR */ - - union { - vuint32_t R; - struct { - vuint32_t RDV:1; - vuint32_t:5; - vuint32_t RDATA:26; - } B; - } SSIRDR; /* SSI Recieve Data Register EQADC_SSIRDR @ baseaddress + 0xB8 */ - - uint32_t eqadc_reserved11b[5]; - - uint32_t eqadc_reserved15; /* EQADC Red Line Client Configuration Register @ baseaddress + 0xD0 */ - /* REDLCCR is not implemented in the MPC563xM */ - - uint32_t eqadc_reserved12[11]; - - struct { - union { - vuint32_t R; - - /*B.CFIFOx_DATAw */ - - } R[4]; /*EQADC_CFxRw */ - - union { - vuint32_t R; - /*B.CFIFOx_EDATAw */ - } EDATA[4]; /*EQADC_CFxERw (new in MPC563xM) */ - - uint32_t eqadc_reserved13[8]; - - } CF[6]; - - uint32_t eqadc_reserved14[32]; - - struct { - union { - vuint32_t R; - /*RFIFOx_DATAw */ - } R[4]; /*EQADC_RFxRw */ - - uint32_t eqadc_reserved15[12]; - - } RF[6]; - - }; - /****************************************************************************/ -/* MODULE : DSPI */ -/****************************************************************************/ - struct DSPI_tag { - union { - vuint32_t R; - struct { - vuint32_t MSTR:1; - vuint32_t CONT_SCKE:1; - vuint32_t DCONF:2; - vuint32_t FRZ:1; - vuint32_t MTFE:1; - vuint32_t PCSSE:1; - vuint32_t ROOE:1; - vuint32_t PCSIS7:1; /* new in MPC563xM */ - vuint32_t PCSIS6:1; /* new in MPC563xM */ - vuint32_t PCSIS5:1; - vuint32_t PCSIS4:1; - vuint32_t PCSIS3:1; - vuint32_t PCSIS2:1; - vuint32_t PCSIS1:1; - vuint32_t PCSIS0:1; - vuint32_t DOZE:1; - vuint32_t MDIS:1; - vuint32_t DIS_TXF:1; - vuint32_t DIS_RXF:1; - vuint32_t CLR_TXF:1; - vuint32_t CLR_RXF:1; - vuint32_t SMPL_PT:2; - vuint32_t:7; - vuint32_t HALT:1; - } B; - } MCR; /* Module Configuration Register DSPI_MCR @baseaddress + 0x00 */ - - uint32_t dspi_reserved1; - - union { - vuint32_t R; - struct { - vuint32_t TCNT:16; /* SPI_TCNT */ - vuint32_t:16; - } B; - } TCR; /* DSPI Transfer Count Register DSPI_TCR @baseaddress + 0x08 */ - - union { - vuint32_t R; - struct { - vuint32_t DBR:1; - vuint32_t FMSZ:4; - vuint32_t CPOL:1; - vuint32_t CPHA:1; - vuint32_t LSBFE:1; - vuint32_t PCSSCK:2; - vuint32_t PASC:2; - vuint32_t PDT:2; - vuint32_t PBR:2; - vuint32_t CSSCK:4; - vuint32_t ASC:4; - vuint32_t DT:4; - vuint32_t BR:4; - } B; - } CTAR[8]; /* Clock and Transfer Attributes Registers DSPI_CTARx @baseaddress + 0x0C - 0x28 */ - - union { - vuint32_t R; - struct { - vuint32_t TCF:1; - vuint32_t TXRXS:1; - vuint32_t:1; - vuint32_t EOQF:1; - vuint32_t TFUF:1; - vuint32_t:1; - vuint32_t TFFF:1; - vuint32_t:5; - vuint32_t RFOF:1; - vuint32_t:1; - vuint32_t RFDF:1; - vuint32_t:1; - vuint32_t TXCTR:4; - vuint32_t TXNXTPTR:4; - vuint32_t RXCTR:4; - vuint32_t POPNXTPTR:4; - } B; - } SR; /* Status Register DSPI_SR @baseaddress + 0x2C */ - - union { - vuint32_t R; - struct { - vuint32_t TCFRE:1; /*TCF_RE */ - vuint32_t:2; - vuint32_t EOQFRE:1; /*EQQF_RE */ - vuint32_t TFUFRE:1; /*TFUF_RE */ - vuint32_t:1; - vuint32_t TFFFRE:1; /*TFFF_RE */ - vuint32_t TFFFDIRS:1; /*TFFF_DIRS */ - vuint32_t:4; - vuint32_t RFOFRE:1; /*RFOF_RE */ - vuint32_t:1; - vuint32_t RFDFRE:1; /*RFDF_RE */ - vuint32_t RFDFDIRS:1; /*RFDF_DIRS */ - vuint32_t:16; - } B; - } RSER; /* DMA/Interrupt Request Select and Enable Register DSPI_RSER @baseaddress + 0x30 */ - - union { - vuint32_t R; - struct { - vuint32_t CONT:1; - vuint32_t CTAS:3; - vuint32_t EOQ:1; - vuint32_t CTCNT:1; - vuint32_t:2; - vuint32_t PCS7:1; /* new in MPC563xM */ - vuint32_t PCS6:1; /* new in MPC563xM */ - vuint32_t PCS5:1; - vuint32_t PCS4:1; - vuint32_t PCS3:1; - vuint32_t PCS2:1; - vuint32_t PCS1:1; - vuint32_t PCS0:1; - vuint32_t TXDATA:16; - } B; - } PUSHR; /* PUSH TX FIFO Register DSPI_PUSHR @baseaddress + 0x34 */ - - union { - vuint32_t R; - struct { - vuint32_t:16; - vuint32_t RXDATA:16; - } B; - } POPR; /* POP RX FIFO Register DSPI_POPR @baseaddress + 0x38 */ - - union { - vuint32_t R; - struct { - vuint32_t TXCMD:16; - vuint32_t TXDATA:16; - } B; - } TXFR[4]; /* Transmit FIFO Registers DSPI_TXFRx @baseaddress + 0x3c - 0x78 */ - - vuint32_t DSPI_reserved_txf[12]; - - union { - vuint32_t R; - struct { - vuint32_t:16; - vuint32_t RXDATA:16; - } B; - } RXFR[4]; /* Transmit FIFO Registers DSPI_RXFRx @baseaddress + 0x7c - 0xB8 */ - - vuint32_t DSPI_reserved_rxf[12]; - - union { - vuint32_t R; - struct { - vuint32_t MTOE:1; - vuint32_t:1; - vuint32_t MTOCNT:6; - vuint32_t:3; - vuint32_t TSBC:1; - vuint32_t TXSS:1; - vuint32_t TPOL:1; - vuint32_t TRRE:1; - vuint32_t CID:1; - vuint32_t DCONT:1; - vuint32_t DSICTAS:3; - vuint32_t:4; - vuint32_t DPCS7:1; - vuint32_t DPCS6:1; - vuint32_t DPCS5:1; - vuint32_t DPCS4:1; - vuint32_t DPCS3:1; - vuint32_t DPCS2:1; - vuint32_t DPCS1:1; - vuint32_t DPCS0:1; - } B; - } DSICR; /* DSI Configuration Register DSPI_DSICR @baseaddress + 0xBC */ - - union { - vuint32_t R; - struct { - vuint32_t SER_DATA:32; /* 32bit instead of 16 in MPC563xM */ - } B; - } SDR; /* DSI Serialization Data Register DSPI_SDR @baseaddress + 0xC0 */ - - union { - vuint32_t R; - struct { - vuint32_t ASER_DATA:32; /* 32bit instead of 16 in MPC563xM */ - } B; - } ASDR; /* DSI Alternate Serialization Data Register DSPI_ASDR @baseaddress + 0xC4 */ - - union { - vuint32_t R; - struct { - vuint32_t COMP_DATA:32; /* 32bit instead of 16 in MPC563xM */ - } B; - } COMPR; /* DSI Transmit Comparison Register DSPI_COMPR @baseaddress + 0xC8 */ - - union { - vuint32_t R; - struct { - vuint32_t DESER_DATA:32; /* 32bit instead of 16 in MPC563xM */ - } B; - } DDR; /* DSI deserialization Data Register DSPI_DDR @baseaddress + 0xCC */ - - union { - vuint32_t R; - struct { - vuint32_t:3; - vuint32_t TSBCNT:5; - vuint32_t:16; - vuint32_t DPCS1_7:1; - vuint32_t DPCS1_6:1; - vuint32_t DPCS1_5:1; - vuint32_t DPCS1_4:1; - vuint32_t DPCS1_3:1; - vuint32_t DPCS1_2:1; - vuint32_t DPCS1_1:1; - vuint32_t DPCS1_0:1; - } B; - } DSICR1; /* DSI Configuration Register 1 DSPI_DSICR1 @baseaddress + 0xD0 */ - - }; -/****************************************************************************/ -/* MODULE : eSCI */ -/****************************************************************************/ - struct ESCI_tag { - union { - vuint32_t R; - struct { - vuint32_t:3; - vuint32_t SBR:13; - vuint32_t LOOPS:1; - vuint32_t:1; /* Reserved in MPC563xM */ - vuint32_t RSRC:1; - vuint32_t M:1; - vuint32_t WAKE:1; - vuint32_t ILT:1; - vuint32_t PE:1; - vuint32_t PT:1; - vuint32_t TIE:1; - vuint32_t TCIE:1; - vuint32_t RIE:1; - vuint32_t ILIE:1; - vuint32_t TE:1; - vuint32_t RE:1; - vuint32_t RWU:1; - vuint32_t SBK:1; - } B; - } CR1; /* Control Register 1 SCIBDH, SCIBDL, SCICR1, SCICR2 @baseaddress + 0x00 */ - - union { - vuint16_t R; - struct { - vuint16_t MDIS:1; - vuint16_t FBR:1; - vuint16_t BSTP:1; - vuint16_t IEBERR:1; /* BERIE */ - vuint16_t RXDMA:1; - vuint16_t TXDMA:1; - vuint16_t BRK13:1; /* BRCL */ - vuint16_t TXDIR:1; - vuint16_t BESM13:1; /* BESM */ - vuint16_t SBSTP:1; /* BESTP */ - vuint16_t RXPOL:1; - vuint16_t PMSK:1; - vuint16_t ORIE:1; - vuint16_t NFIE:1; - vuint16_t FEIE:1; - vuint16_t PFIE:1; - } B; - } CR2; /* Control Register 2 SCICR3, SCICR4 @baseaddress + 0x04 */ - - union { - vuint16_t R; - struct { - vuint16_t R8:1; /* RN */ - vuint16_t T8:1; /* TN */ - vuint16_t ERR:1; - vuint16_t:1; - vuint16_t R:4; - vuint8_t D; - } B; - } DR; /* Data Register SCIDRH, SCIDRL @baseaddress + 0x06 */ - - union { - vuint32_t R; - struct { - vuint32_t TDRE:1; - vuint32_t TC:1; - vuint32_t RDRF:1; - vuint32_t IDLE:1; - vuint32_t OR:1; - vuint32_t NF:1; - vuint32_t FE:1; - vuint32_t PF:1; - vuint32_t:3; - vuint32_t BERR:1; - vuint32_t:2; - vuint32_t TACT:1; - vuint32_t RAF:1; /* RACT */ - vuint32_t RXRDY:1; - vuint32_t TXRDY:1; - vuint32_t LWAKE:1; - vuint32_t STO:1; - vuint32_t PBERR:1; - vuint32_t CERR:1; - vuint32_t CKERR:1; - vuint32_t FRC:1; - vuint32_t:6; - vuint32_t UREQ:1; - vuint32_t OVFL:1; - } B; - } SR; /* Status Register SCISR1, SCIRSR2, LINSTAT1, LINSTAT2 @baseaddress + 0x08 */ - - union { - vuint32_t R; - struct { - vuint32_t LRES:1; - vuint32_t WU:1; - vuint32_t WUD0:1; - vuint32_t WUD1:1; - vuint32_t:2; /* reserved: LDBG and DSF not longer supported */ - vuint32_t PRTY:1; - vuint32_t LIN:1; - vuint32_t RXIE:1; - vuint32_t TXIE:1; - vuint32_t WUIE:1; - vuint32_t STIE:1; - vuint32_t PBIE:1; - vuint32_t CIE:1; - vuint32_t CKIE:1; - vuint32_t FCIE:1; - vuint32_t:6; - vuint32_t UQIE:1; - vuint32_t OFIE:1; - vuint32_t:8; - } B; - } LCR; /* LIN Control Register LINCTRL1, LINCTRL2, LINCTRL3 @baseaddress + 0x0C */ - - union { - vuint32_t R; - } LTR; /* LIN Transmit Register LINTX @baseaddress + 0x10 */ - - union { - vuint32_t R; - } LRR; /* LIN Recieve Register LINRX @baseaddress + 0x14 */ - - union { - vuint32_t R; - struct { - vuint32_t P:16; - vuint32_t:3; - vuint32_t SYNM:1; - vuint32_t EROE:1; - vuint32_t ERFE:1; - vuint32_t ERPE:1; - vuint32_t M2:1; - vuint32_t:8; - } B; - } LPR; /* LIN CRC Polynom Register LINCRCP1, LINCRCP2, SCICR5 @baseaddress + 0x18 */ - - }; -/****************************************************************************/ -/* MODULE : eSCI */ -/****************************************************************************/ - struct ESCI_12_13_bit_tag { - union { - vuint16_t R; - struct { - vuint16_t R8:1; - vuint16_t T8:1; - vuint16_t ERR:1; - vuint16_t:1; - vuint16_t D:12; - } B; - } DR; /* Data Register */ - }; -/****************************************************************************/ -/* MODULE : FlexCAN */ -/****************************************************************************/ - struct FLEXCAN_BUF_t { - union { - vuint32_t R; - struct { - vuint32_t:4; - vuint32_t CODE:4; - vuint32_t:1; - vuint32_t SRR:1; - vuint32_t IDE:1; - vuint32_t RTR:1; - vuint32_t LENGTH:4; - vuint32_t TIMESTAMP:16; - } B; - } CS; - - union { - vuint32_t R; - struct { - vuint32_t PRIO:3; - vuint32_t STD_ID:11; - vuint32_t EXT_ID:18; - } B; - } ID; - - union { - /*vuint8_t B[8]; *//* Data buffer in Bytes (8 bits) *//* Not used in MPC563xM */ - /*vuint16_t H[4]; *//* Data buffer in Half-words (16 bits) *//* Not used in MPC563xM */ - vuint32_t W[2]; /* Data buffer in words (32 bits) */ - /*vuint32_t R[2]; *//* Data buffer in words (32 bits) *//* Not used in MPC563xM */ - } DATA; - - }; /* end of FLEXCAN_BUF_t */ - - struct FLEXCAN_RXFIFO_t { - union { - vuint32_t R; - struct { - vuint32_t:9; - vuint32_t SRR:1; - vuint32_t IDE:1; - vuint32_t RTR:1; - vuint32_t LENGTH:4; - vuint32_t TIMESTAMP:16; - } B; - } CS; - - union { - vuint32_t R; - struct { - vuint32_t:3; - vuint32_t STD_ID:11; - vuint32_t EXT_ID:18; - } B; - } ID; - - union { - /*vuint8_t B[8]; *//* Data buffer in Bytes (8 bits) *//* Not used in MPC563xM */ - /*vuint16_t H[4]; *//* Data buffer in Half-words (16 bits) *//* Not used in MPC563xM */ - vuint32_t W[2]; /* Data buffer in words (32 bits) */ - /*vuint32_t R[2]; *//* Data buffer in words (32 bits) *//* Not used in MPC563xM */ - } DATA; - - uint32_t FLEXCAN_RXFIFO_reserved[20]; /* {0x00E0-0x0090}/0x4 = 0x14 */ - - union { - vuint32_t R; - } IDTABLE[8]; - - }; /* end of FLEXCAN_RXFIFO_t */ - - struct FLEXCAN2_tag { - union { - vuint32_t R; - struct { - vuint32_t MDIS:1; - vuint32_t FRZ:1; - vuint32_t FEN:1; /* new in MPC563xM */ - vuint32_t HALT:1; - vuint32_t NOTRDY:1; /* NOT_RDY */ - vuint32_t WAK_MSK:1; /* new in MPC563xM */ - vuint32_t SOFTRST:1; /* SOFT_RST */ - vuint32_t FRZACK:1; /* FRZ_ACK */ - vuint32_t SUPV:1; /* new in MPC563xM */ - vuint32_t SLF_WAK:1; /* new in MPC563xM */ - - vuint32_t WRNEN:1; /* WRN_EN */ - - vuint32_t MDISACK:1; /* LPM_ACK */ - vuint32_t WAK_SRC:1; /* new in MPC563xM */ - vuint32_t DOZE:1; /* new in MPC563xM */ - - vuint32_t SRXDIS:1; /* SRX_DIS */ - vuint32_t MBFEN:1; /* BCC */ - vuint32_t:2; - - vuint32_t LPRIO_EN:1; /* new in MPC563xM */ - vuint32_t AEN:1; /* new in MPC563xM */ - vuint32_t:2; - vuint32_t IDAM:2; /* new in MPC563xM */ - vuint32_t:2; - - vuint32_t MAXMB:6; - } B; - } MCR; /* Module Configuration Register */ - - union { - vuint32_t R; - struct { - vuint32_t PRESDIV:8; - vuint32_t RJW:2; - vuint32_t PSEG1:3; - vuint32_t PSEG2:3; - vuint32_t BOFFMSK:1; /* BOFF_MSK */ - vuint32_t ERRMSK:1; /* ERR_MSK */ - vuint32_t CLKSRC:1; /* CLK_SRC */ - vuint32_t LPB:1; - vuint32_t TWRNMSK:1; /* TWRN_MSK */ - vuint32_t RWRNMSK:1; /* RWRN_MSK */ - vuint32_t:2; - vuint32_t SMP:1; - vuint32_t BOFFREC:1; /* BOFF_REC */ - vuint32_t TSYN:1; - vuint32_t LBUF:1; - vuint32_t LOM:1; - vuint32_t PROPSEG:3; - } B; /* Control Register */ - } CR; /* CTRL */ - - union { - vuint32_t R; - } TIMER; /* Free Running Timer */ - - int32_t FLEXCAN_reserved00; - - union { - vuint32_t R; - struct { - vuint32_t:3; - vuint32_t MI:29; - } B; - } RXGMASK; /* RX Global Mask */ - - union { - vuint32_t R; - struct { - vuint32_t:3; - vuint32_t MI:29; - } B; - } RX14MASK; /* RX 14 Mask */ - - union { - vuint32_t R; - struct { - vuint32_t:3; - vuint32_t MI:29; - } B; - } RX15MASK; /* RX 15 Mask */ - - union { - vuint32_t R; - struct { - vuint32_t:16; - vuint32_t RXECNT:8; - vuint32_t TXECNT:8; - } B; - } ECR; /* Error Counter Register */ - - union { - vuint32_t R; - struct { - vuint32_t:14; - vuint32_t TWRNINT:1; /* TWRN_INT */ - vuint32_t RWRNINT:1; /* RWRN_INT */ - vuint32_t BIT1ERR:1; /* BIT1_ERR */ - vuint32_t BIT0ERR:1; /* BIT0_ERR */ - vuint32_t ACKERR:1; /* ACK_ERR */ - vuint32_t CRCERR:1; /* CRC_ERR */ - vuint32_t FRMERR:1; /* FRM_ERR */ - vuint32_t STFERR:1; /* STF_ERR */ - vuint32_t TXWRN:1; /* TX_WRN */ - vuint32_t RXWRN:1; /* RX_WRN */ - vuint32_t IDLE:1; - vuint32_t TXRX:1; - vuint32_t FLTCONF:2; /* FLT_CONF */ - vuint32_t:1; - vuint32_t BOFFINT:1; /* BOFF_INT */ - vuint32_t ERRINT:1; /* ERR_INT */ - vuint32_t WAK_INT:1; /* new in MPC563xM */ - } B; - } ESR; /* Error and Status Register */ - - union { - vuint32_t R; - struct { - vuint32_t BUF63M:1; - vuint32_t BUF62M:1; - vuint32_t BUF61M:1; - vuint32_t BUF60M:1; - vuint32_t BUF59M:1; - vuint32_t BUF58M:1; - vuint32_t BUF57M:1; - vuint32_t BUF56M:1; - vuint32_t BUF55M:1; - vuint32_t BUF54M:1; - vuint32_t BUF53M:1; - vuint32_t BUF52M:1; - vuint32_t BUF51M:1; - vuint32_t BUF50M:1; - vuint32_t BUF49M:1; - vuint32_t BUF48M:1; - vuint32_t BUF47M:1; - vuint32_t BUF46M:1; - vuint32_t BUF45M:1; - vuint32_t BUF44M:1; - vuint32_t BUF43M:1; - vuint32_t BUF42M:1; - vuint32_t BUF41M:1; - vuint32_t BUF40M:1; - vuint32_t BUF39M:1; - vuint32_t BUF38M:1; - vuint32_t BUF37M:1; - vuint32_t BUF36M:1; - vuint32_t BUF35M:1; - vuint32_t BUF34M:1; - vuint32_t BUF33M:1; - vuint32_t BUF32M:1; - } B; /* Interruput Masks Register */ - } IMRH; /* IMASK2 */ - - union { - vuint32_t R; - struct { - vuint32_t BUF31M:1; - vuint32_t BUF30M:1; - vuint32_t BUF29M:1; - vuint32_t BUF28M:1; - vuint32_t BUF27M:1; - vuint32_t BUF26M:1; - vuint32_t BUF25M:1; - vuint32_t BUF24M:1; - vuint32_t BUF23M:1; - vuint32_t BUF22M:1; - vuint32_t BUF21M:1; - vuint32_t BUF20M:1; - vuint32_t BUF19M:1; - vuint32_t BUF18M:1; - vuint32_t BUF17M:1; - vuint32_t BUF16M:1; - vuint32_t BUF15M:1; - vuint32_t BUF14M:1; - vuint32_t BUF13M:1; - vuint32_t BUF12M:1; - vuint32_t BUF11M:1; - vuint32_t BUF10M:1; - vuint32_t BUF09M:1; - vuint32_t BUF08M:1; - vuint32_t BUF07M:1; - vuint32_t BUF06M:1; - vuint32_t BUF05M:1; - vuint32_t BUF04M:1; - vuint32_t BUF03M:1; - vuint32_t BUF02M:1; - vuint32_t BUF01M:1; - vuint32_t BUF00M:1; - } B; /* Interruput Masks Register */ - } IMRL; /* IMASK1 */ - - union { - vuint32_t R; - struct { - vuint32_t BUF63I:1; - vuint32_t BUF62I:1; - vuint32_t BUF61I:1; - vuint32_t BUF60I:1; - vuint32_t BUF59I:1; - vuint32_t BUF58I:1; - vuint32_t BUF57I:1; - vuint32_t BUF56I:1; - vuint32_t BUF55I:1; - vuint32_t BUF54I:1; - vuint32_t BUF53I:1; - vuint32_t BUF52I:1; - vuint32_t BUF51I:1; - vuint32_t BUF50I:1; - vuint32_t BUF49I:1; - vuint32_t BUF48I:1; - vuint32_t BUF47I:1; - vuint32_t BUF46I:1; - vuint32_t BUF45I:1; - vuint32_t BUF44I:1; - vuint32_t BUF43I:1; - vuint32_t BUF42I:1; - vuint32_t BUF41I:1; - vuint32_t BUF40I:1; - vuint32_t BUF39I:1; - vuint32_t BUF38I:1; - vuint32_t BUF37I:1; - vuint32_t BUF36I:1; - vuint32_t BUF35I:1; - vuint32_t BUF34I:1; - vuint32_t BUF33I:1; - vuint32_t BUF32I:1; - } B; /* Interruput Flag Register */ - } IFRH; /* IFLAG2 */ - - union { - vuint32_t R; - struct { - vuint32_t BUF31I:1; - vuint32_t BUF30I:1; - vuint32_t BUF29I:1; - vuint32_t BUF28I:1; - vuint32_t BUF27I:1; - vuint32_t BUF26I:1; - vuint32_t BUF25I:1; - vuint32_t BUF24I:1; - vuint32_t BUF23I:1; - vuint32_t BUF22I:1; - vuint32_t BUF21I:1; - vuint32_t BUF20I:1; - vuint32_t BUF19I:1; - vuint32_t BUF18I:1; - vuint32_t BUF17I:1; - vuint32_t BUF16I:1; - vuint32_t BUF15I:1; - vuint32_t BUF14I:1; - vuint32_t BUF13I:1; - vuint32_t BUF12I:1; - vuint32_t BUF11I:1; - vuint32_t BUF10I:1; - vuint32_t BUF09I:1; - vuint32_t BUF08I:1; - vuint32_t BUF07I:1; - vuint32_t BUF06I:1; - vuint32_t BUF05I:1; - vuint32_t BUF04I:1; - vuint32_t BUF03I:1; - vuint32_t BUF02I:1; - vuint32_t BUF01I:1; - vuint32_t BUF00I:1; - } B; /* Interruput Flag Register */ - } IFRL; /* IFLAG1 */ - - uint32_t flexcan2_reserved2[19]; - -/****************************************************************************/ -/* Use either Standard Buffer Structure OR RX FIFO and Buffer Structure */ -/****************************************************************************/ - /* Standard Buffer Structure */ - struct FLEXCAN_BUF_t BUF[64]; - - /* RX FIFO and Buffer Structure *//* New options in MPC563xM */ - /*struct FLEXCAN_RXFIFO_t RXFIFO; */ - /*struct FLEXCAN_BUF_t BUF[56]; */ -/****************************************************************************/ - - uint32_t FLEXCAN_reserved3[256]; /* {0x0880-0x0480}/0x4 = 0x100 *//* (New in MPC563xM) Address Base + 0x0034 */ - - union { - vuint32_t R; - struct { - vuint32_t MI:32; - } B; /* RX Individual Mask Registers */ - } RXIMR[64]; /* (New in MPC563xM) Address Base + 0x0880 */ - - }; /* end of FLEXCAN_tag */ -/****************************************************************************/ -/* MODULE : Decimation Filter (DECFIL) */ -/****************************************************************************/ - struct DECFIL_tag { - union { - vuint32_t R; - struct { - vuint32_t MDIS:1; - vuint32_t FREN:1; - vuint32_t:1; - vuint32_t FRZ:1; - vuint32_t SRES:1; - vuint32_t:2; /* CASCD not supported in MPC563xM */ - vuint32_t IDEN:1; - vuint32_t ODEN:1; - vuint32_t ERREN:1; - vuint32_t:1; - vuint32_t FTYPE:2; - vuint32_t:1; - vuint32_t SCAL:2; - vuint32_t:1; - vuint32_t SAT:1; - vuint32_t ISEL:1; - vuint32_t:1; /* MIXM does not appear to be implemented on the MPC563xM */ - vuint32_t DEC_RATE:4; - vuint32_t:1; /* SDIE not supported in MPC563xM */ - vuint32_t DSEL:1; - vuint32_t IBIE:1; - vuint32_t OBIE:1; - vuint32_t EDME:1; - vuint32_t TORE:1; - vuint32_t TMODE:2; /* the LSB of TMODE is always 0 on the MPC563xM */ - } B; - } MCR; /* Configuration Register DECFILTER_MCR @baseaddress + 0x00 */ - - union { - vuint32_t R; - struct { - vuint32_t BSY:1; - vuint32_t:1; - vuint32_t DEC_COUNTER:4; - vuint32_t IDFC:1; - vuint32_t ODFC:1; - vuint32_t SDFC:1; /* SDFC not supported in MPC563xM */ - vuint32_t IBIC:1; - vuint32_t OBIC:1; - vuint32_t SVRC:1; /* SVRC not supported in MPC563xM */ - vuint32_t DIVRC:1; - vuint32_t OVFC:1; - vuint32_t OVRC:1; - vuint32_t IVRC:1; - vuint32_t:6; - vuint32_t IDF:1; - vuint32_t ODF:1; - vuint32_t SDF:1; /* SDF not supported in MPC563xM */ - vuint32_t IBIF:1; - vuint32_t OBIF:1; - vuint32_t SVR:1; /* SVR not supported in MPC563xM */ - vuint32_t DIVR:1; - vuint32_t OVF:1; - vuint32_t OVR:1; - vuint32_t IVR:1; - } B; - } MSR; /* Status Register DECFILTER_MSR @baseaddress + 0x04 */ - - /* Module Extended Config.Register - not siupported on the MPC563xM DECFILTER_MXCR @baseaddress + 0x08 */ - - uint32_t decfil_reserved1[2]; - - union { - vuint32_t R; - struct { - vuint32_t:4; - vuint32_t INTAG:4; - vuint32_t:6; - vuint32_t PREFILL:1; - vuint32_t FLUSH:1; - vuint32_t INPBUF:16; - } B; - } IB; /* Interface Input Buffer DECFILTER_IB @baseaddress + 0x10 */ - - union { - vuint32_t R; - struct { - vuint32_t:12; - vuint32_t OUTTAG:4; - vuint32_t OUTBUF:16; - } B; - } OB; /* Interface Output Buffer DECFILTER_OB @baseaddress + 0x14 */ - - uint32_t decfil_reserved2[2]; - - union { - vuint32_t R; - struct { - vuint32_t:8; - vuint32_t COEF:24; - } B; - } COEF[9]; /* Filter Coefficient Registers DECFILTER_COEFx @baseaddress + 0x20 - 0x40 */ - - uint32_t decfil_reserved3[13]; - - union { - vuint32_t R; - struct { - vuint32_t:8; - vuint32_t TAP:24; - } B; - } TAP[8]; /* Filter TAP Registers DECFILTER_TAPx @baseaddress + 0x78 - 0x94 */ - - uint32_t decfil_reserved4[14]; - - /* 0x0D0 */ - union { - vuint16_t R; - struct { - vuint32_t:16; - vuint32_t SAMP_DATA:16; - } B; - } EDID; /* Filter EDID Registers DECFILTER_EDID @baseaddress + 0xD0 */ - - uint32_t decfil_reserved5[3]; - - /* 0x0E0 */ - uint32_t decfil_reserved6; - /* Filter FINTVAL Registers - Not supported on MPC563xM DECFILTER_FINTVAL @baseaddress + 0xE0 */ - - /* 0x0E4 */ - uint32_t decfil_reserved7; - /* Filter FINTCNT Registers - Not supported on MPC563xM DECFILTER_FINTCNT @baseaddress + 0xE4 */ - - /* 0x0E8 */ - uint32_t decfil_reserved8; - /* Filter CINTVAL Registers - Not supported on MPC563xM DECFILTER_CINTVAL @baseaddress + 0xE8 */ - - /* 0x0EC */ - uint32_t decfil_reserved9; - /* Filter CINTCNT Registers - Not supported on MPC563xM DECFILTER_CINTCNT @baseaddress + 0xEC */ - - }; -/****************************************************************************/ -/* MODULE : Periodic Interval Timer (PIT) */ -/****************************************************************************/ - struct PIT_tag { - - union { - vuint32_t R; - struct { - vuint32_t:29; - vuint32_t MDIS_RTI:1; - vuint32_t MDIS:1; - vuint32_t FRZ:1; - } B; - } PITMCR; /* PIT Module Control Register */ - - uint32_t pit_reserved1[59]; - - struct { - union { - vuint32_t R; /* TSVn */ - } LDVAL; /* Timer Load Value Register */ - - union { - vuint32_t R; /* TVLn */ - } CVAL; /* Current Timer Value Register */ - - union { - vuint32_t R; - struct { - vuint32_t:30; - vuint32_t TIE:1; - vuint32_t TEN:1; - } B; - } TCTRL; /* Timer Control Register */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t TIF:1; - } B; - } TFLG; /* Timer Flag Register */ - } RTI; /* RTI Channel */ - - struct { - union { - vuint32_t R; - } LDVAL; /* Timer Load Value Register */ - - union { - vuint32_t R; - } CVAL; /* Current Timer Value Register */ - - union { - vuint32_t R; - struct { - vuint32_t:30; - vuint32_t TIE:1; - vuint32_t TEN:1; - } B; - } TCTRL; /* Timer Control Register */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t TIF:1; - } B; - } TFLG; /* Timer Flag Register */ - } TIMER[4]; /* Timer Channels */ - - }; -/****************************************************************************/ -/* MODULE : System Timer Module (STM) */ -/****************************************************************************/ - struct STM_tag { - union { - vuint32_t R; - struct { - vuint32_t:16; - vuint32_t CPS:8; - vuint32_t:6; - vuint32_t FRZ:1; - vuint32_t TEN:1; - } B; - } CR; /* STM Control Register STM_CR (new in MPC563xM) Offset 0x0000 */ - - union { - vuint32_t R; - } CNT; /* STM Count Register STM_CNT (new in MPC563xM) Offset Offset 0x0004 */ - - uint32_t stm_reserved1[2]; /* Reserved (new in MPC563xM) Offset Offset 0x0008 */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t CEN:1; - } B; - } CCR0; /* STM Channel Control Register STM_CCR0 (new in MPC563xM) Offset 0x0010 */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t CIF:1; - } B; - } CIR0; /* STM Channel Interrupt Register STM_CIR0 (new in MPC563xM) Offset 0x0014 */ - - union { - vuint32_t R; - } CMP0; /* STM Channel Compare Register STM_CMP0 (new in MPC563xM) Offset Offset 0x0018 */ - - uint32_t stm_reserved2; /* Reserved (new in MPC563xM) Offset Offset 0x001C */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t CEN:1; - } B; - } CCR1; /* STM Channel Control Register STM_CCR1 (new in MPC563xM) Offset 0x0020 */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t CIF:1; - } B; - } CIR1; /* STM Channel Interrupt Register STM_CIR1 (new in MPC563xM) Offset 0x0024 */ - - union { - vuint32_t R; - } CMP1; /* STM Channel Compare Register STM_CMP1 (new in MPC563xM) Offset Offset 0x0028 */ - - uint32_t stm_reserved3; /* Reserved (new in MPC563xM) Offset Offset 0x002C */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t CEN:1; - } B; - } CCR2; /* STM Channel Control Register STM_CCR2 (new in MPC563xM) Offset 0x0030 */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t CIF:1; - } B; - } CIR2; /* STM Channel Interrupt Register STM_CIR2 (new in MPC563xM) Offset 0x0034 */ - - union { - vuint32_t R; - } CMP2; /* STM Channel Compare Register STM_CMP2 (new in MPC563xM) Offset Offset 0x0038 */ - - uint32_t stm_reserved4; /* Reserved (new in MPC563xM) Offset Offset 0x003C */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t CEN:1; - } B; - } CCR3; /* STM Channel Control Register STM_CCR3 (new in MPC563xM) Offset 0x0040 */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t CIF:1; - } B; - } CIR3; /* STM Channel Interrupt Register STM_CIR3 (new in MPC563xM) Offset 0x0044 */ - - union { - vuint32_t R; - } CMP3; /* STM Channel Compare Register STM_CMP3 (new in MPC563xM) Offset Offset 0x0048 */ - - uint32_t stm_reserved5; /* Reserved (new in MPC563xM) Offset Offset 0x004C */ - }; - -/****************************************************************************/ -/* MODULE : SWT */ -/****************************************************************************/ - - struct SWT_tag { - union { - vuint32_t R; - struct { - vuint32_t MAP0:1; - vuint32_t MAP1:1; - vuint32_t MAP2:1; - vuint32_t MAP3:1; - vuint32_t MAP4:1; - vuint32_t MAP5:1; - vuint32_t MAP6:1; - vuint32_t MAP7:1; - vuint32_t:14; - vuint32_t KEY:1; - vuint32_t RIA:1; - vuint32_t WND:1; - vuint32_t ITR:1; - vuint32_t HLK:1; - vuint32_t SLK:1; - vuint32_t CSL:1; - vuint32_t STP:1; - vuint32_t FRZ:1; - vuint32_t WEN:1; - } B; - } MCR; /*SWT_CR *//* Module Configuration Register */ - - union { - vuint32_t R; - struct { - vuint32_t:31; - vuint32_t TIF:1; - } B; - } IR; /* Interrupt register SWT_IR */ - - union { - vuint32_t R; - struct { - vuint32_t WTO:32; - } B; - } TO; /* Timeout register SWT_TO */ - - union { - vuint32_t R; - struct { - vuint32_t WST:32; - - } B; - } WN; /* Window register SWT_WN */ - - union { - vuint32_t R; - struct { - vuint32_t:16; - vuint32_t WSC:16; - } B; - } SR; /* Service register SWT_SR */ - - union { - vuint32_t R; - struct { - vuint32_t CNT:32; - } B; - } CO; /* Counter output register SWT_CO */ - - union { - vuint32_t R; - struct { - vuint32_t:16; - vuint32_t SK:16; - } B; - } SK; /* Service key register SWT_SK */ - }; -/****************************************************************************/ -/* MODULE : Power Management Controller (PMC) */ -/****************************************************************************/ - struct PMC_tag { - union { - vuint32_t R; - struct { - vuint32_t LVRER:1; /* LVIRR */ - vuint32_t LVREH:1; /* LVIHR */ - vuint32_t LVRE50:1; /* LVI5R */ - vuint32_t LVRE33:1; /* LVI3R */ - vuint32_t LVREC:1; /* LVI1R */ - vuint32_t:3; - vuint32_t LVIER:1; /* LVIRE */ - vuint32_t LVIEH:1; /* LVIHE */ - vuint32_t LVIE50:1; /* LVI5E */ - vuint32_t LVIE33:1; /* LVI3E */ - vuint32_t LVIC:1; /* LVI1E */ - vuint32_t:2; - vuint32_t TLK:1; - vuint32_t:16; - } B; - } MCR; /* Module Configuration register CFGR */ - - union { - vuint32_t R; - struct { - vuint32_t:12; - vuint32_t LVDREGTRIM:4; /* LVI50TRIM */ - vuint32_t VDD33TRIM:4; /* BV33TRIM */ - vuint32_t LVD33TRIM:4; /* LVI33TRIM */ - vuint32_t VDDCTRIM:4; /* V12TRIM */ - vuint32_t LVDCTRIM:4; /* LVI33TRIM */ - } B; - } TRIMR; /* Trimming register */ - - union { - vuint32_t R; - struct { - vuint32_t:5; - vuint32_t LVFVSTBY:1; - vuint32_t BGRDY:1; /* BGS1 */ - vuint32_t BGTS:1; /* BGS2 */ - vuint32_t:5; - vuint32_t LVFCSTBY:1; - vuint32_t:1; - vuint32_t V33DIS:1; /* 3.3V Regulator Disable V33S */ - vuint32_t LVFCR:1; /* Clear LVFR LVIRC */ - vuint32_t LVFCH:1; /* Clear LVFH LVIHC */ - vuint32_t LVFC50:1; /* Clear LVF5 LVI5 */ - vuint32_t LVFC33:1; /* Clear LVF3 LVI3 */ - vuint32_t LVFCC:1; /* Clear LVFC LVI1 */ - vuint32_t:3; - vuint32_t LVFR:1; /* Low Voltage Flag Reset Supply LVIRF */ - vuint32_t LVFH:1; /* Low Voltage Flag VDDEH Supply LVIHF */ - vuint32_t LVF50:1; /* Low Voltage Flag 5V Supply LVI5F */ - vuint32_t LVF33:1; /* Low Voltage Flag 3.3V Supply LVI3F */ - vuint32_t LVFC:1; /* Low Voltage Flag Core (1.2V) LVI1F */ - vuint32_t:3; - - } B; - } SR; /* status register */ - }; -/****************************************************************************/ -/* MODULE : TSENS (Temperature Sensor) */ -/****************************************************************************/ - - struct TSENS_tag { - - union { - vuint32_t R; - struct { - vuint32_t TSCV2:16; - vuint32_t TSCV1:16; - } B; - } TCCR0; /* Temperature Sensor Calibration B @baseaddress + 0x00 */ - - union { - vuint32_t R; - struct { - vuint32_t:16; - vuint32_t TSCV3:16; - } B; - } TCCR1; /* Temperature Sensor Calibration A @baseaddress + 0x04 */ - - uint32_t TSENS_reserved0008[16382]; /* 0x0008-0xFFFF */ - - }; - -/* Define memories */ -/* Comments need to be moved for different memory sizes */ - -#define SRAM_START 0x40000000 - /*#define SRAM_SIZE 0xC000 48K SRAM */ - /*#define SRAM_SIZE 0x10000 64K SRAM */ -#define SRAM_SIZE 0x17800 /* 94K SRAM */ - /*#define SRAM_END 0x4000BFFF 48K SRAM */ - /*#define SRAM_END 0x4000FFFF 64K SRAM */ -#define SRAM_END 0x400177FF /* 94K SRAM */ - -#define FLASH_START 0x0 - /*#define FLASH_SIZE 0x100000 1M Flash */ -#define FLASH_SIZE 0x180000 /* 1.5M Flash */ - /*#define FLASH_END 0xFFFFF 1M Flash */ -#define FLASH_END 0x17FFFF /* 1.5M Flash */ - -/* Shadow Flash start and end address */ -#define FLASH_SHADOW_START 0x00FFC000 -#define FLASH_SHADOW_SIZE 0x4000 -#define FLASH_SHADOW_END 0x00FFFFFF - -/* Define instances of modules */ -#define FMPLL (*( volatile struct FMPLL_tag *) 0xC3F80000) -#define EBI (*( volatile struct EBI_tag *) 0xC3F84000) -#define CFLASH0 (*( volatile struct FLASH_tag *) 0xC3F88000) -#define CFLASH1 (*( volatile struct FLASH_tag *) 0xC3FB0000) -#define CFLASH2 (*( volatile struct FLASH_tag *) 0xC3FB4000) -#define SIU (*( volatile struct SIU_tag *) 0xC3F90000) - -#define EMIOS (*( volatile struct EMIOS_tag *) 0xC3FA0000) -#define PMC (*( volatile struct PMC_tag *) 0xC3FBC000) -#define ETPU (*( volatile struct ETPU_tag *) 0xC3FC0000) -#define ETPU_DATA_RAM (*( uint32_t *) 0xC3FC8000) -#define ETPU_DATA_RAM_EXT (*( uint32_t *) 0xC3FCC000) -#define ETPU_DATA_RAM_END 0xC3FC8BFC -#define CODE_RAM (*( uint32_t *) 0xC3FD0000) -#define ETPU_CODE_RAM (*( uint32_t *) 0xC3FD0000) -#define PIT (*( volatile struct PIT_tag *) 0xC3FF0000) - -#define XBAR (*( volatile struct XBAR_tag *) 0xFFF04000) -#define SWT (*( volatile struct SWT_tag *) 0xFFF38000) -#define STM (*( volatile struct STM_tag *) 0xFFF3C000) -#define ECSM (*( volatile struct ECSM_tag *) 0xFFF40000) -#define EDMA (*( volatile struct EDMA_tag *) 0xFFF44000) -#define INTC (*( volatile struct INTC_tag *) 0xFFF48000) - -#define EQADC (*( volatile struct EQADC_tag *) 0xFFF80000) -#define DECFIL (*( volatile struct DECFIL_tag *) 0xFFF88000) - -#define DSPI_B (*( volatile struct DSPI_tag *) 0xFFF94000) -#define DSPI_C (*( volatile struct DSPI_tag *) 0xFFF98000) - -#define ESCI_A (*( volatile struct ESCI_tag *) 0xFFFB0000) -#define ESCI_A_12_13 (*( volatile struct ESCI_12_13_bit_tag *) 0xFFFB0006) -#define ESCI_B (*( volatile struct ESCI_tag *) 0xFFFB4000) -#define ESCI_B_12_13 (*( volatile struct ESCI_12_13_bit_tag *) 0xFFFB4006) - -#define CAN_A (*( volatile struct FLEXCAN2_tag *) 0xFFFC0000) -#define CAN_C (*( volatile struct FLEXCAN2_tag *) 0xFFFC8000) - -#define TSENS (*( volatile struct TSENS_tag *) 0xFFFEC000) - -#ifdef __MWERKS__ -#pragma pop -#endif /* - */ - -#ifdef __cplusplus -} -#endif /* - */ - -#endif /* ifdef _MPC563M_H */ -/********************************************************************* - * - * Copyright: - * Freescale Semiconductor, INC. All Rights Reserved. - * You are hereby granted a copyright license to use, modify, and - * distribute the SOFTWARE so long as this entire notice is - * retained without alteration in any modified and/or redistributed - * versions, and that such modified versions are clearly identified - * as such. No licenses are granted by implication, estoppel or - * otherwise under any patents or trademarks of Freescale - * Semiconductor, Inc. This software is provided on an "AS IS" - * basis and without warranty. - * - * To the maximum extent permitted by applicable law, Freescale - * Semiconductor DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, - * INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A - * PARTICULAR PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH - * REGARD TO THE SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) - * AND ANY ACCOMPANYING WRITTEN MATERIALS. - * - * To the maximum extent permitted by applicable law, IN NO EVENT - * SHALL Freescale Semiconductor BE LIABLE FOR ANY DAMAGES WHATSOEVER - * (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, - * BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER - * PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE. - * - * Freescale Semiconductor assumes no responsibility for the - * maintenance and support of this software - * - ********************************************************************/ - diff --git a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/platform.dox b/ChibiOS_2.0.8/os/hal/platforms/SPC56x/platform.dox deleted file mode 100644 index baab477..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/platform.dox +++ /dev/null @@ -1,48 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup SPC563_DRIVERS SPC563 Drivers - * @brief Device drivers included in the SPC563 support. - * - * @ingroup PPC - */ - -/** - * @defgroup SPC563_HAL SPC563 HAL Support - * @brief HAL support. - * - * @ingroup SPC563_DRIVERS - */ - -/** - * @defgroup SPC563_SERIAL SPC563 ESCI Support - * @brief ESCI support. - * @details The serial driver supports both the SPC563 ESCIs in asynchronous - * mode. - * - * @ingroup SPC563_DRIVERS - */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/platform.mk b/ChibiOS_2.0.8/os/hal/platforms/SPC56x/platform.mk deleted file mode 100644 index e7bf2d4..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/platform.mk +++ /dev/null @@ -1,6 +0,0 @@ -# List of all the SPC56x platform files. -PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/SPC56x/hal_lld.c \ - ${CHIBIOS}/os/hal/platforms/SPC56x/serial_lld.c - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/platforms/SPC56x diff --git a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/SPC56x/serial_lld.c deleted file mode 100644 index c98821e..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/serial_lld.c +++ /dev/null @@ -1,302 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file SPC56x/serial_lld.c - * @brief SPC563 low level serial driver code. - * - * @addtogroup SPC563_SERIAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** - * @brief eSCI-A serial driver identifier. - */ -#if USE_SPC563_ESCIA || defined(__DOXYGEN__) -SerialDriver SD1; -#endif - -/** - * @brief eSCI-B serial driver identifier. - */ -#if USE_SPC563_ESCIB || defined(__DOXYGEN__) -SerialDriver SD2; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** - * @brief Driver default configuration. - */ -static const SerialConfig default_config = { - SERIAL_DEFAULT_BITRATE, - SD_MODE_NORMAL | SD_MODE_PARITY_NONE -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/** - * @brief eSCI initialization. - * @details This function must be invoked with interrupts disabled. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration - */ -static void esci_init(SerialDriver *sdp, const SerialConfig *config) { - volatile struct ESCI_tag *escip = sdp->escip; - uint8_t mode = config->sc_mode; - - escip->CR2.R = 0; /* MDIS off. */ - escip->CR1.R = 0; - escip->LCR.R = 0; - escip->CR1.B.SBR = SPC563_SYSCLK / (16 * config->sc_speed); - if (mode & SD_MODE_LOOPBACK) - escip->CR1.B.LOOPS = 1; - switch (mode & SD_MODE_PARITY) { - case SD_MODE_PARITY_ODD: - escip->CR1.B.PT = 1; - case SD_MODE_PARITY_EVEN: - escip->CR1.B.PE = 1; - escip->CR1.B.M = 1; /* Makes it 8 bits data + 1 bit parity. */ - default: - ; - } - escip->LPR.R = 0; - escip->CR1.R |= 0x0000002C; /* RIE, TE, RE to 1. */ - escip->CR2.R |= 0x000F; /* ORIE, NFIE, FEIE, PFIE to 1. */ -} - -/** - * @brief eSCI de-initialization. - * @details This function must be invoked with interrupts disabled. - * - * @param[in] escip pointer to an eSCI I/O block - */ -static void esci_deinit(volatile struct ESCI_tag *escip) { - - escip->LPR.R = 0; - escip->SR.R = 0xFFFFFFFF; - escip->CR1.R = 0; - escip->CR2.R = 0x8000; /* MDIS on. */ -} - -/** - * @brief Error handling routine. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] sr eSCI SR register value - */ -static void set_error(SerialDriver *sdp, uint32_t sr) { - sdflags_t sts = 0; - - if (sr & 0x08000000) - sts |= SD_OVERRUN_ERROR; - if (sr & 0x04000000) - sts |= SD_NOISE_ERROR; - if (sr & 0x02000000) - sts |= SD_FRAMING_ERROR; - if (sr & 0x01000000) - sts |= SD_PARITY_ERROR; -/* if (sr & 0x00000000) - sts |= SD_BREAK_DETECTED;*/ - chSysLockFromIsr(); - sdAddFlagsI(sdp, sts); - chSysUnlockFromIsr(); -} - -/** - * @brief Common IRQ handler. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -static void serve_interrupt(SerialDriver *sdp) { - volatile struct ESCI_tag *escip = sdp->escip; - - uint32_t sr = escip->SR.R; - escip->SR.R = 0x3FFFFFFF; /* Does not clear TDRE | TC.*/ - if (sr & 0x0F000000) /* OR | NF | FE | PF. */ - set_error(sdp, sr); - if (sr & 0x20000000) { /* RDRF. */ - chSysLockFromIsr(); - sdIncomingDataI(sdp, escip->DR.B.D); - chSysUnlockFromIsr(); - } - if (escip->CR1.B.TIE && (sr & 0x80000000)) { /* TDRE. */ - msg_t b; - chSysLockFromIsr(); - b = chOQGetI(&sdp->oqueue); - if (b < Q_OK) { - chEvtBroadcastI(&sdp->oevent); - escip->CR1.B.TIE = 0; - } - else { - ESCI_A.SR.B.TDRE = 1; - escip->DR.R = (uint16_t)b; - } - chSysUnlockFromIsr(); - } -} - -#if USE_SPC563_ESCIA || defined(__DOXYGEN__) -static void notify1(void) { - - if (ESCI_A.SR.B.TDRE) { - msg_t b = sdRequestDataI(&SD1); - if (b != Q_EMPTY) { - ESCI_A.SR.B.TDRE = 1; - ESCI_A.CR1.B.TIE = 1; - ESCI_A.DR.R = (uint16_t)b; - } - } -/* if (!ESCI_A.CR1.B.TIE) { - msg_t b = sdRequestDataI(&SD1); - if (b != Q_EMPTY) { - ESCI_A.CR1.B.TIE = 1; - ESCI_A.DR.R = (uint16_t)b; - } - }*/ -} -#endif - -#if USE_SPC563_ESCIB || defined(__DOXYGEN__) -static void notify2(void) { - - if (ESCI_B.SR.B.TDRE) { - msg_t b = sdRequestDataI(&SD2); - if (b != Q_EMPTY) { - ESCI_B.SR.B.TDRE = 1; - ESCI_B.CR1.B.TIE = 1; - ESCI_B.DR.R = (uint16_t)b; - } - } -/* if (!ESCI_B.CR1.B.TIE) { - msg_t b = sdRequestDataI(&SD2); - if (b != Q_EMPTY) { - ESCI_B.CR1.B.TIE = 1; - ESCI_B.DR.R = (uint16_t)b; - } - }*/ -} -#endif - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -#if USE_SPC563_ESCIA || defined(__DOXYGEN__) -/** - * @brief eSCI-A interrupt handler. - */ -CH_IRQ_HANDLER(vector146) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD1); - - CH_IRQ_EPILOGUE(); -} -#endif - -#if USE_SPC563_ESCIB || defined(__DOXYGEN__) -/** - * @brief eSCI-B interrupt handler. - */ -CH_IRQ_HANDLER(vector149) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD2); - - CH_IRQ_EPILOGUE(); -} -#endif - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_SPC563_ESCIA - sdObjectInit(&SD1, NULL, notify1); - SD1.escip = &ESCI_A; - ESCI_A.CR2.R = 0x8000; /* MDIS ON. */ - INTC.PSR[146].R = SPC563_ESCIA_PRIORITY; -#endif - -#if USE_SPC563_ESCIB - sdObjectInit(&SD2, NULL, notify2); - SD2.escip = &ESCI_B; - ESCI_B.CR2.R = 0x8000; /* MDIS ON. */ - INTC.PSR[149].R = SPC563_ESCIB_PRIORITY; -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - esci_init(sdp, config); -} - -/** - * @brief Low level serial driver stop. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - - if (sdp->state == SD_READY) - esci_deinit(sdp->escip); -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/SPC56x/serial_lld.h deleted file mode 100644 index 80dbd52..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/serial_lld.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file SPC56x/serial_lld.h - * @brief SPC563 low level serial driver header. - * - * @addtogroup SPC563_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -#define SD_MODE_PARITY 0x03 /**< @brief Parity field mask. */ -#define SD_MODE_PARITY_NONE 0x00 /**< @brief No parity. */ -#define SD_MODE_PARITY_EVEN 0x01 /**< @brief Even parity. */ -#define SD_MODE_PARITY_ODD 0x02 /**< @brief Odd parity. */ - -#define SD_MODE_NORMAL 0x00 /**< @brief Normal operations. */ -#define SD_MODE_LOOPBACK 0x80 /**< @brief Internal loopback. */ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief eSCI-A driver enable switch. - * @details If set to @p TRUE the support for eSCI-A is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_SPC563_ESCIA) || defined(__DOXYGEN__) -#define USE_SPC563_ESCIA TRUE -#endif - -/** - * @brief eSCI-B driver enable switch. - * @details If set to @p TRUE the support for eSCI-B is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_SPC563_ESCIB) || defined(__DOXYGEN__) -#define USE_SPC563_ESCIB TRUE -#endif - -/** - * @brief eSCI-A interrupt priority level setting. - */ -#if !defined(SPC563_ESCIA_PRIORITY) || defined(__DOXYGEN__) -#define SPC563_ESCIA_PRIORITY 8 -#endif - -/** - * @brief eSCI-B interrupt priority level setting. - */ -#if !defined(SPC563_ESCIB_PRIORITY) || defined(__DOXYGEN__) -#define SPC563_ESCIB_PRIORITY 8 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint8_t sdflags_t; - -/** - * @brief Generic Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - * @note This structure content is architecture dependent, each driver - * implementation defines its own version and the custom static - * initializers. - */ -typedef struct { - /** - * @brief Bit rate. - */ - uint32_t sc_speed; - /** - * @brief Mode flags. - */ - uint8_t sc_mode; -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ \ - /* Pointer to the volatile eSCI registers block.*/ \ - volatile struct ESCI_tag *escip; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_SPC563_ESCIA && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif -#if USE_SPC563_ESCIB && !defined(__DOXYGEN__) -extern SerialDriver SD2; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/typedefs.h b/ChibiOS_2.0.8/os/hal/platforms/SPC56x/typedefs.h deleted file mode 100644 index 122d9c7..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/SPC56x/typedefs.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file SPC56x/typedefs.h - * @brief Dummy typedefs file. - */ - -#ifndef _TYPEDEFS_H_ -#define _TYPEDEFS_H_ - -#include "chtypes.h" - -#endif /* _TYPEDEFS_H_ */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/adc_lld.c b/ChibiOS_2.0.8/os/hal/platforms/STM32/adc_lld.c deleted file mode 100644 index 7a1825e..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/adc_lld.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/adc_lld.c - * @brief STM32 ADC subsystem low level driver source. - * @addtogroup STM32_ADC - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_ADC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** @brief ADC1 driver identifier.*/ -#if USE_STM32_ADC1 || defined(__DOXYGEN__) -ADCDriver ADCD1; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -#if USE_STM32_ADC1 || defined(__DOXYGEN__) -/** - * @brief ADC1 DMA interrupt handler (channel 1). - */ -CH_IRQ_HANDLER(Vector6C) { - uint32_t isr; - - CH_IRQ_PROLOGUE(); - - isr = DMA1->ISR; - DMA1->IFCR |= DMA_IFCR_CGIF1 | DMA_IFCR_CTCIF1 | - DMA_IFCR_CHTIF1 | DMA_IFCR_CTEIF1; - if ((isr & DMA_ISR_HTIF1) != 0) { - /* Half transfer processing.*/ - if (ADCD1.ad_callback != NULL) { - /* Invokes the callback passing the 1st half of the buffer.*/ - ADCD1.ad_callback(ADCD1.ad_samples, ADCD1.ad_depth / 2); - } - } - if ((isr & DMA_ISR_TCIF1) != 0) { - /* Transfer complete processing.*/ - if (!ADCD1.ad_grpp->acg_circular) { - /* End conversion.*/ - adc_lld_stop_conversion(&ADCD1); - ADCD1.ad_grpp = NULL; - ADCD1.ad_state = ADC_COMPLETE; - chSysLockFromIsr(); - chSemResetI(&ADCD1.ad_sem, 0); - chSysUnlockFromIsr(); - } - /* Callback handling.*/ - if (ADCD1.ad_callback != NULL) { - if (ADCD1.ad_depth > 1) { - /* Invokes the callback passing the 2nd half of the buffer.*/ - size_t half = ADCD1.ad_depth / 2; - ADCD1.ad_callback(ADCD1.ad_samples + half, half); - } - else { - /* Invokes the callback passing the whole buffer.*/ - ADCD1.ad_callback(ADCD1.ad_samples, ADCD1.ad_depth); - } - } - } - if ((isr & DMA_ISR_TEIF1) != 0) { - /* DMA error processing.*/ - STM32_ADC1_DMA_ERROR_HOOK(); - } - - CH_IRQ_EPILOGUE(); -} -#endif - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level ADC driver initialization. - */ -void adc_lld_init(void) { - -#if USE_STM32_ADC1 - /* ADC reset, ensures reset state in order to avoid trouble with JTAGs.*/ - RCC->APB2RSTR = RCC_APB2RSTR_ADC1RST; - RCC->APB2RSTR = 0; - - /* Driver initialization.*/ - adcObjectInit(&ADCD1); - ADCD1.ad_adc = ADC1; - ADCD1.ad_dma = DMA1_Channel1; - ADCD1.ad_dmaprio = STM32_ADC1_DMA_PRIORITY << 12; - - /* Temporary activation.*/ - RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; - ADC1->CR1 = 0; - ADC1->CR2 = ADC_CR2_ADON; - - /* Reset calibration just to be safe.*/ - ADC1->CR2 = ADC_CR2_ADON | ADC_CR2_RSTCAL; - while ((ADC1->CR2 & ADC_CR2_RSTCAL) != 0) - ; - - /* Calibration.*/ - ADC1->CR2 = ADC_CR2_ADON | ADC_CR2_CAL; - while ((ADC1->CR2 & ADC_CR2_CAL) != 0) - ; - - /* Return the ADC in low power mode.*/ - ADC1->CR2 = 0; - RCC->APB2ENR &= ~RCC_APB2ENR_ADC1EN; -#endif -} - -/** - * @brief Configures and activates the ADC peripheral. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adc_lld_start(ADCDriver *adcp) { - - /* If in stopped state then enables the ADC and DMA clocks.*/ - if (adcp->ad_state == ADC_STOP) { -#if USE_STM32_ADC1 - if (&ADCD1 == adcp) { - dmaEnable(DMA1_ID); /* NOTE: Must be enabled before the IRQs.*/ - NVICEnableVector(DMA1_Channel1_IRQn, - CORTEX_PRIORITY_MASK(STM32_ADC1_IRQ_PRIORITY)); - DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR; - RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; - } -#endif - - /* ADC setup, the calibration procedure has already been performed - during initialization.*/ - adcp->ad_adc->CR1 = ADC_CR1_SCAN; - adcp->ad_adc->CR2 = 0; - } -} - -/** - * @brief Deactivates the ADC peripheral. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adc_lld_stop(ADCDriver *adcp) { - - /* If in ready state then disables the ADC clock.*/ - if (adcp->ad_state == ADC_READY) { -#if USE_STM32_ADC1 - if (&ADCD1 == adcp) { - ADC1->CR1 = 0; - ADC1->CR2 = 0; - NVICDisableVector(DMA1_Channel1_IRQn); - dmaDisable(DMA1_ID); - RCC->APB2ENR &= ~RCC_APB2ENR_ADC1EN; - } -#endif - } -} - -/** - * @brief Starts an ADC conversion. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adc_lld_start_conversion(ADCDriver *adcp) { - uint32_t ccr, n; - const ADCConversionGroup *grpp = adcp->ad_grpp; - - /* DMA setup.*/ - adcp->ad_dma->CMAR = (uint32_t)adcp->ad_samples; - ccr = adcp->ad_dmaprio | DMA_CCR1_EN | DMA_CCR1_MSIZE_0 | DMA_CCR1_PSIZE_0 | - DMA_CCR1_MINC | DMA_CCR1_TCIE | DMA_CCR1_TEIE; - if (grpp->acg_circular) - ccr |= DMA_CCR1_CIRC; - if (adcp->ad_depth > 1) { - /* If the buffer depth is greater than one then the half transfer interrupt - interrupt is enabled in order to allows streaming processing.*/ - ccr |= DMA_CCR1_HTIE; - n = (uint32_t)grpp->acg_num_channels * (uint32_t)adcp->ad_depth; - } - else - n = (uint32_t)grpp->acg_num_channels; - adcp->ad_dma->CNDTR = n; - adcp->ad_dma->CCR = ccr; - - /* ADC setup.*/ - adcp->ad_adc->SMPR1 = grpp->acg_smpr1; - adcp->ad_adc->SMPR2 = grpp->acg_smpr2; - adcp->ad_adc->SQR1 = grpp->acg_sqr1; - adcp->ad_adc->SQR2 = grpp->acg_sqr2; - adcp->ad_adc->SQR3 = grpp->acg_sqr3; - adcp->ad_adc->CR1 = grpp->acg_cr1 | ADC_CR1_SCAN; - adcp->ad_adc->CR2 = grpp->acg_cr2 | ADC_CR2_DMA | ADC_CR2_ADON; - - /* ADC start.*/ - adcp->ad_adc->CR2 |= ADC_CR2_SWSTART | ADC_CR2_EXTTRIG; -} - -/** - * @brief Stops an ongoing conversion. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adc_lld_stop_conversion(ADCDriver *adcp) { - - adcp->ad_dma->CCR = 0; - adcp->ad_adc->CR2 = 0; -} - -#endif /* CH_HAL_USE_ADC */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/adc_lld.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/adc_lld.h deleted file mode 100644 index d369b4a..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/adc_lld.h +++ /dev/null @@ -1,325 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/adc_lld.h - * @brief STM32 ADC subsystem low level driver header. - * @addtogroup STM32_ADC - * @{ - */ - -#ifndef _ADC_LLD_H_ -#define _ADC_LLD_H_ - -#if CH_HAL_USE_ADC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -#define ADC_CR2_EXTSEL_SRC(n) ((n) << 17) /**< @brief Trigger source. */ -#define ADC_CR2_EXTSEL_SWSTART (7 << 17) /**< @brief Software trigger. */ - -#define ADC_CHANNEL_IN0 0 /**< @brief External analog input 0. */ -#define ADC_CHANNEL_IN1 1 /**< @brief External analog input 1. */ -#define ADC_CHANNEL_IN2 2 /**< @brief External analog input 2. */ -#define ADC_CHANNEL_IN3 3 /**< @brief External analog input 3. */ -#define ADC_CHANNEL_IN4 4 /**< @brief External analog input 4. */ -#define ADC_CHANNEL_IN5 5 /**< @brief External analog input 5. */ -#define ADC_CHANNEL_IN6 6 /**< @brief External analog input 6. */ -#define ADC_CHANNEL_IN7 7 /**< @brief External analog input 7. */ -#define ADC_CHANNEL_IN8 8 /**< @brief External analog input 8. */ -#define ADC_CHANNEL_IN9 9 /**< @brief External analog input 9. */ -#define ADC_CHANNEL_IN10 10 /**< @brief External analog input 10. */ -#define ADC_CHANNEL_IN11 11 /**< @brief External analog input 11. */ -#define ADC_CHANNEL_IN12 12 /**< @brief External analog input 12. */ -#define ADC_CHANNEL_IN13 13 /**< @brief External analog input 13. */ -#define ADC_CHANNEL_IN14 14 /**< @brief External analog input 14. */ -#define ADC_CHANNEL_IN15 15 /**< @brief External analog input 15. */ -#define ADC_CHANNEL_SENSOR 16 /**< @brief Internal temperature sensor.*/ -#define ADC_CHANNEL_VREFINT 17 /**< @brief Internal reference. */ - -/** - * @name Sampling rates - * @{ - */ -#define ADC_SAMPLE_1P5 0 /**< @brief 1.5 cycles sampling time. */ -#define ADC_SAMPLE_7P5 1 /**< @brief 7.5 cycles sampling time. */ -#define ADC_SAMPLE_13P5 2 /**< @brief 13.5 cycles sampling time. */ -#define ADC_SAMPLE_28P5 3 /**< @brief 28.5 cycles sampling time. */ -#define ADC_SAMPLE_41P5 4 /**< @brief 41.5 cycles sampling time. */ -#define ADC_SAMPLE_55P5 5 /**< @brief 55.5 cycles sampling time. */ -#define ADC_SAMPLE_71P5 6 /**< @brief 71.5 cycles sampling time. */ -#define ADC_SAMPLE_239P5 7 /**< @brief 239.5 cycles sampling time. */ -/** @} */ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief ADC1 driver enable switch. - * @details If set to @p TRUE the support for ADC1 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM32_ADC1) || defined(__DOXYGEN__) -#define USE_STM32_ADC1 TRUE -#endif - -/** - * @brief ADC1 DMA priority (0..3|lowest..highest). - */ -#if !defined(STM32_ADC1_DMA_PRIORITY) || defined(__DOXYGEN__) -#define STM32_ADC1_DMA_PRIORITY 3 -#endif - -/** - * @brief ADC1 interrupt priority level setting. - */ -#if !defined(STM32_ADC1_IRQ_PRIORITY) || defined(__DOXYGEN__) -#define STM32_ADC1_IRQ_PRIORITY 5 -#endif - -/** - * @brief ADC1 DMA error hook. - * @note The default action for DMA errors is a system halt because DMA error - * can only happen because programming errors. - */ -#if !defined(STM32_ADC1_DMA_ERROR_HOOK) || defined(__DOXYGEN__) -#define STM32_ADC1_DMA_ERROR_HOOK() chSysHalt() -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief ADC sample data type. - */ -typedef uint16_t adcsample_t; - -/** - * @brief Channels number in a conversion group. - */ -typedef uint16_t adc_channels_num_t; - -/** - * @brief ADC notification callback type. - * @param[in] buffer pointer to the most recent samples data - * @param[in] n number of buffer rows available starting from @p buffer - */ -typedef void (*adccallback_t)(adcsample_t *buffer, size_t n); - -/** - * @brief Conversion group configuration structure. - * @details This implementation-dependent structure describes a conversion - * operation. - */ -typedef struct { - /** - * @brief Enables the circular buffer mode for the group. - */ - bool_t acg_circular; - /** - * @brief Number of the analog channels belonging to the conversion group. - */ - adc_channels_num_t acg_num_channels; - /* End of the mandatory fields.*/ - /** - * @brief ADC CR1 register initialization data. - * @note All the required bits must be defined into this field except - * @p ADC_CR1_SCAN that is enforced inside the driver. - */ - uint32_t acg_cr1; - /** - * @brief ADC CR2 register initialization data. - * @note All the required bits must be defined into this field except - * @p ADC_CR2_DMA and @p ADC_CR2_ADON that are enforced inside the - * driver. - */ - uint32_t acg_cr2; - /** - * @brief ADC SMPR1 register initialization data. - */ - uint32_t acg_smpr1; - /** - * @brief ADC SMPR2 register initialization data. - */ - uint32_t acg_smpr2; - /** - * @brief ADC SQR1 register initialization data. - */ - uint32_t acg_sqr1; - /** - * @brief ADC SQR2 register initialization data. - */ - uint32_t acg_sqr2; - /** - * @brief ADC SQR3 register initialization data. - */ - uint32_t acg_sqr3; -} ADCConversionGroup; - -/** - * @brief Driver configuration structure. - * @note It could be empty on some architectures. - */ -typedef struct { - /* * <---------- - * @brief ADC prescaler setting. - * @note This field can assume one of the following values: - * @p RCC_CFGR_ADCPRE_DIV2, @p RCC_CFGR_ADCPRE_DIV4, - * @p RCC_CFGR_ADCPRE_DIV6, @p RCC_CFGR_ADCPRE_DIV8. - */ -/* uint32_t ac_prescaler;*/ -} ADCConfig; - -/** - * @brief Structure representing an ADC driver. - */ -typedef struct { - /** - * @brief Driver state. - */ - adcstate_t ad_state; - /** - * @brief Current configuration data. - */ - const ADCConfig *ad_config; - /** - * @brief Synchronization semaphore. - */ - Semaphore ad_sem; - /** - * @brief Current callback function or @p NULL. - */ - adccallback_t ad_callback; - /** - * @brief Current samples buffer pointer or @p NULL. - */ - adcsample_t *ad_samples; - /** - * @brief Current samples buffer depth or @p 0. - */ - size_t ad_depth; - /** - * @brief Current conversion group pointer or @p NULL. - */ - const ADCConversionGroup *ad_grpp; - /* End of the mandatory fields.*/ - /** - * @brief Pointer to the ADCx registers block. - */ - ADC_TypeDef *ad_adc; - /** - * @brief Pointer to the DMA channel registers block. - */ - DMA_Channel_TypeDef *ad_dma; - /** - * @brief DMA priority bit mask. - */ - uint32_t ad_dmaprio; -} ADCDriver; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Number of channels in a conversion sequence. - */ -#define ADC_SQR1_NUM_CH(n) (((n) - 1) << 20) - -#define ADC_SQR3_SQ1_N(n) ((n) << 0) /**< @brief 1st channel in seq. */ -#define ADC_SQR3_SQ2_N(n) ((n) << 5) /**< @brief 2nd channel in seq. */ -#define ADC_SQR3_SQ3_N(n) ((n) << 10) /**< @brief 3rd channel in seq. */ -#define ADC_SQR3_SQ4_N(n) ((n) << 15) /**< @brief 4th channel in seq. */ -#define ADC_SQR3_SQ5_N(n) ((n) << 20) /**< @brief 5th channel in seq. */ -#define ADC_SQR3_SQ6_N(n) ((n) << 25) /**< @brief 6th channel in seq. */ - -#define ADC_SQR2_SQ7_N(n) ((n) << 0) /**< @brief 7th channel in seq. */ -#define ADC_SQR2_SQ8_N(n) ((n) << 5) /**< @brief 8th channel in seq. */ -#define ADC_SQR2_SQ9_N(n) ((n) << 10) /**< @brief 9th channel in seq. */ -#define ADC_SQR2_SQ10_N(n) ((n) << 15) /**< @brief 10th channel in seq.*/ -#define ADC_SQR2_SQ11_N(n) ((n) << 20) /**< @brief 11th channel in seq.*/ -#define ADC_SQR2_SQ12_N(n) ((n) << 25) /**< @brief 12th channel in seq.*/ - -#define ADC_SQR1_SQ13_N(n) ((n) << 0) /**< @brief 13th channel in seq.*/ -#define ADC_SQR1_SQ14_N(n) ((n) << 5) /**< @brief 14th channel in seq.*/ -#define ADC_SQR1_SQ15_N(n) ((n) << 10) /**< @brief 15th channel in seq.*/ -#define ADC_SQR1_SQ16_N(n) ((n) << 15) /**< @brief 16th channel in seq.*/ - -#define ADC_SMPR2_SMP_AN0(n) ((n) << 0) /**< @brief AN0 sampling time. */ -#define ADC_SMPR2_SMP_AN1(n) ((n) << 3) /**< @brief AN1 sampling time. */ -#define ADC_SMPR2_SMP_AN2(n) ((n) << 6) /**< @brief AN2 sampling time. */ -#define ADC_SMPR2_SMP_AN3(n) ((n) << 9) /**< @brief AN3 sampling time. */ -#define ADC_SMPR2_SMP_AN4(n) ((n) << 12) /**< @brief AN4 sampling time. */ -#define ADC_SMPR2_SMP_AN5(n) ((n) << 15) /**< @brief AN5 sampling time. */ -#define ADC_SMPR2_SMP_AN6(n) ((n) << 18) /**< @brief AN6 sampling time. */ -#define ADC_SMPR2_SMP_AN7(n) ((n) << 21) /**< @brief AN7 sampling time. */ -#define ADC_SMPR2_SMP_AN8(n) ((n) << 24) /**< @brief AN8 sampling time. */ -#define ADC_SMPR2_SMP_AN9(n) ((n) << 27) /**< @brief AN9 sampling time. */ - -#define ADC_SMPR1_SMP_AN10(n) ((n) << 0) /**< @brief AN10 sampling time. */ -#define ADC_SMPR1_SMP_AN11(n) ((n) << 3) /**< @brief AN11 sampling time. */ -#define ADC_SMPR1_SMP_AN12(n) ((n) << 6) /**< @brief AN12 sampling time. */ -#define ADC_SMPR1_SMP_AN13(n) ((n) << 9) /**< @brief AN13 sampling time. */ -#define ADC_SMPR1_SMP_AN14(n) ((n) << 12) /**< @brief AN14 sampling time. */ -#define ADC_SMPR1_SMP_AN15(n) ((n) << 15) /**< @brief AN15 sampling time. */ -#define ADC_SMPR1_SMP_SENSOR(n) ((n) << 18) /**< @brief Temperature Sensor - sampling time. */ -#define ADC_SMPR1_SMP_VREF(n) ((n) << 21) /**< @brief Voltage Reference - sampling time. */ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_STM32_ADC1 && !defined(__DOXYGEN__) -extern ADCDriver ADCD1; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void adc_lld_init(void); - void adc_lld_start(ADCDriver *adcp); - void adc_lld_stop(ADCDriver *adcp); - void adc_lld_start_conversion(ADCDriver *adcp); - void adc_lld_stop_conversion(ADCDriver *adcp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_ADC */ - -#endif /* _ADC_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/can_lld.c b/ChibiOS_2.0.8/os/hal/platforms/STM32/can_lld.c deleted file mode 100644 index 2f6fdcf..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/can_lld.c +++ /dev/null @@ -1,391 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/can_lld.c - * @brief STM32 CAN subsystem low level driver source. - * @addtogroup STM32_CAN - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_CAN || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** @brief ADC1 driver identifier.*/ -#if USE_STM32_CAN1 || defined(__DOXYGEN__) -CANDriver CAND1; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/* - * CAN1 TX interrupt handler. - */ -CH_IRQ_HANDLER(Vector8C) { - - CH_IRQ_PROLOGUE(); - - /* No more events until a message is transmitted.*/ - CAN1->TSR = CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2; - chSysLockFromIsr(); - while (chSemGetCounterI(&CAND1.cd_txsem) < 0) - chSemSignalI(&CAND1.cd_txsem); - chEvtBroadcastI(&CAND1.cd_txempty_event); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} - -/* - * CAN1 RX0 interrupt handler. - */ -CH_IRQ_HANDLER(Vector90) { - uint32_t rf0r; - - CH_IRQ_PROLOGUE(); - - rf0r = CAN1->RF0R; - if ((rf0r & CAN_RF0R_FMP0) > 0) { - /* No more receive events until the queue 0 has been emptied.*/ - CAN1->IER &= ~CAN_IER_FMPIE0; - chSysLockFromIsr(); - while (chSemGetCounterI(&CAND1.cd_rxsem) < 0) - chSemSignalI(&CAND1.cd_rxsem); - chEvtBroadcastI(&CAND1.cd_rxfull_event); - chSysUnlockFromIsr(); - } - if ((rf0r & CAN_RF0R_FOVR0) > 0) { - /* Overflow events handling.*/ - CAN1->RF0R = CAN_RF0R_FOVR0; - canAddFlagsI(&CAND1, CAN_OVERFLOW_ERROR); - chSysLockFromIsr(); - chEvtBroadcastI(&CAND1.cd_error_event); - chSysUnlockFromIsr(); - } - - CH_IRQ_EPILOGUE(); -} - -/* - * CAN1 RX1 interrupt handler. - */ -CH_IRQ_HANDLER(Vector94) { - - CH_IRQ_PROLOGUE(); - - chSysHalt(); /* Not supported (yet).*/ - - CH_IRQ_EPILOGUE(); -} - -/* - * CAN1 SCE interrupt handler. - */ -CH_IRQ_HANDLER(Vector98) { - uint32_t msr; - - CH_IRQ_PROLOGUE(); - - msr = CAN1->MSR; - CAN1->MSR = CAN_MSR_ERRI | CAN_MSR_WKUI | CAN_MSR_SLAKI; - /* Wakeup event.*/ - if (msr & CAN_MSR_WKUI) { - chSysLockFromIsr(); - chEvtBroadcastI(&CAND1.cd_wakeup_event); - chSysUnlockFromIsr(); - } - /* Error event.*/ - if (msr & CAN_MSR_ERRI) { - canstatus_t flags; - uint32_t esr = CAN1->ESR; - - CAN1->ESR &= ~CAN_ESR_LEC; - flags = (canstatus_t)(esr & 7); - if ((esr & CAN_ESR_LEC) > 0) - flags |= CAN_FRAMING_ERROR; - chSysLockFromIsr(); - canAddFlagsI(&CAND1, flags); - chEvtBroadcastI(&CAND1.cd_error_event); - chSysUnlockFromIsr(); - } - - CH_IRQ_EPILOGUE(); -} - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level CAN driver initialization. - */ -void can_lld_init(void) { - -#if USE_STM32_CAN1 - /* CAN reset, ensures reset state in order to avoid trouble with JTAGs.*/ - RCC->APB1RSTR = RCC_APB1RSTR_CAN1RST; - RCC->APB1RSTR = 0; - - /* Driver initialization.*/ - canObjectInit(&CAND1); - CAND1.cd_can = CAN1; -#endif -} - -/** - * @brief Configures and activates the CAN peripheral. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void can_lld_start(CANDriver *canp) { - - /* Clock activation.*/ -#if USE_STM32_CAN1 - if (&CAND1 == canp) { - NVICEnableVector(USB_HP_CAN1_TX_IRQn, - CORTEX_PRIORITY_MASK(STM32_CAN1_IRQ_PRIORITY)); - NVICEnableVector(USB_LP_CAN1_RX0_IRQn, - CORTEX_PRIORITY_MASK(STM32_CAN1_IRQ_PRIORITY)); - NVICEnableVector(CAN1_RX1_IRQn, - CORTEX_PRIORITY_MASK(STM32_CAN1_IRQ_PRIORITY)); - NVICEnableVector(CAN1_SCE_IRQn, - CORTEX_PRIORITY_MASK(STM32_CAN1_IRQ_PRIORITY)); - RCC->APB1ENR |= RCC_APB1ENR_CAN1EN; - } -#endif - - /* Entering initialization mode. */ - canp->cd_state = CAN_STARTING; - canp->cd_can->MCR = CAN_MCR_INRQ; - while ((canp->cd_can->MSR & CAN_MSR_INAK) == 0) - chThdSleepS(1); - /* BTR initialization.*/ - canp->cd_can->BTR = canp->cd_config->cc_btr; - /* MCR initialization.*/ - canp->cd_can->MCR = canp->cd_config->cc_mcr; - /* Filters initialization.*/ - canp->cd_can->FMR |= CAN_FMR_FINIT; - if (canp->cd_config->cc_num > 0) { - uint32_t i, fmask; - CAN_FilterRegister_TypeDef *cfp; - - canp->cd_can->FA1R = 0; - canp->cd_can->FM1R = 0; - canp->cd_can->FS1R = 0; - canp->cd_can->FFA1R = 0; - cfp = canp->cd_can->sFilterRegister; - fmask = 1; - for (i = 0; i < CAN_MAX_FILTERS; i++) { - if (i < canp->cd_config->cc_num) { - if (canp->cd_config->cc_filters[i].cf_mode) - canp->cd_can->FM1R |= fmask; - if (canp->cd_config->cc_filters[i].cf_scale) - canp->cd_can->FS1R |= fmask; - if (canp->cd_config->cc_filters[i].cf_assignment) - canp->cd_can->FFA1R |= fmask; - cfp->FR1 = canp->cd_config->cc_filters[i].cf_register1; - cfp->FR2 = canp->cd_config->cc_filters[i].cf_register2; - canp->cd_can->FA1R |= fmask; - } - else { - cfp->FR1 = 0; - cfp->FR2 = 0; - } - cfp++; - fmask <<= 1; - /* Gives a chance for preemption since this is a rather long loop.*/ - chSysUnlock(); - chThdYield(); - chSysLock(); - } - } - else { - /* Setup a default filter.*/ - canp->cd_can->sFilterRegister[0].FR1 = 0; - canp->cd_can->sFilterRegister[0].FR2 = 0; - canp->cd_can->FM1R = 0; - canp->cd_can->FFA1R = 0; - canp->cd_can->FS1R = 1; - canp->cd_can->FA1R = 1; - } - canp->cd_can->FMR &= ~CAN_FMR_FINIT; - /* Interrupt sources initialization.*/ - canp->cd_can->IER = CAN_IER_TMEIE | CAN_IER_FMPIE0 | CAN_IER_FMPIE1 | - CAN_IER_WKUIE | CAN_IER_ERRIE | CAN_IER_LECIE | - CAN_IER_BOFIE | CAN_IER_EPVIE | CAN_IER_EWGIE | - CAN_IER_FOVIE0 | CAN_IER_FOVIE1; -} - -/** - * @brief Deactivates the CAN peripheral. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void can_lld_stop(CANDriver *canp) { - - /* If in ready state then disables the CAN peripheral.*/ - if (canp->cd_state == CAN_READY) { -#if USE_STM32_CAN1 - if (&CAND1 == canp) { - CAN1->MCR = 0x00010002; /* Register reset value. */ - CAN1->IER = 0x00000000; /* All sources disabled. */ - NVICDisableVector(USB_HP_CAN1_TX_IRQn); - NVICDisableVector(USB_LP_CAN1_RX0_IRQn); - NVICDisableVector(CAN1_RX1_IRQn); - NVICDisableVector(CAN1_SCE_IRQn); - RCC->APB1ENR &= ~RCC_APB1ENR_CAN1EN; - } -#endif - } -} - -/** - * @brief Determines whether a frame can be transmitted. - * - * @param[in] canp pointer to the @p CANDriver object - * - * @return The queue space availability. - * @retval FALSE no space in the transmit queue. - * @retval TRUE transmit slot available. - */ -bool_t can_lld_can_transmit(CANDriver *canp) { - - return (canp->cd_can->TSR & CAN_TSR_TME) != 0; -} - -/** - * @brief Inserts a frame into the transmit queue. - * - * @param[in] canp pointer to the @p CANDriver object - * @param[in] ctfp pointer to the CAN frame to be transmitted - */ -void can_lld_transmit(CANDriver *canp, const CANTxFrame *ctfp) { - uint32_t tir; - CAN_TxMailBox_TypeDef *tmbp; - - /* Pointer to a free transmission mailbox.*/ - tmbp = &canp->cd_can->sTxMailBox[(canp->cd_can->TSR & CAN_TSR_CODE) >> 24]; - - /* Preparing the message.*/ - if (ctfp->cf_IDE) - tir = ((uint32_t)ctfp->cf_EID << 3) | ((uint32_t)ctfp->cf_RTR << 1) | - CAN_TI0R_IDE; - else - tir = ((uint32_t)ctfp->cf_SID << 21) | ((uint32_t)ctfp->cf_RTR << 1); - tmbp->TDTR = ctfp->cf_DLC; - tmbp->TDLR = ctfp->cf_data32[0]; - tmbp->TDHR = ctfp->cf_data32[1]; - tmbp->TIR = tir | CAN_TI0R_TXRQ; -} - -/** - * @brief Determines whether a frame has been received. - * - * @param[in] canp pointer to the @p CANDriver object - * - * @return The queue space availability. - * @retval FALSE no space in the transmit queue. - * @retval TRUE transmit slot available. - */ -bool_t can_lld_can_receive(CANDriver *canp) { - - return (canp->cd_can->RF0R & CAN_RF0R_FMP0) > 0; -} - -/** - * @brief Receives a frame from the input queue. - * - * @param[in] canp pointer to the @p CANDriver object - * @param[out] crfp pointer to the buffer where the CAN frame is copied - */ -void can_lld_receive(CANDriver *canp, CANRxFrame *crfp) { - uint32_t r; - - /* Fetches the message.*/ - r = canp->cd_can->sFIFOMailBox[0].RIR; - crfp->cf_RTR = (r & CAN_RI0R_RTR) >> 1; - crfp->cf_IDE = (r & CAN_RI0R_IDE) >> 2; - if (crfp->cf_IDE) - crfp->cf_EID = r >> 3; - else - crfp->cf_SID = r >> 21; - r = canp->cd_can->sFIFOMailBox[0].RDTR; - crfp->cf_DLC = r & CAN_RDT0R_DLC; - crfp->cf_FMI = (uint8_t)(r >> 8); - crfp->cf_TIME = (uint16_t)(r >> 16); - crfp->cf_data32[0] = canp->cd_can->sFIFOMailBox[0].RDLR; - crfp->cf_data32[1] = canp->cd_can->sFIFOMailBox[0].RDHR; - - /* Releases the mailbox.*/ - canp->cd_can->RF0R = CAN_RF0R_RFOM0; - - /* If the queue is empty re-enables the interrupt in order to generate - events again.*/ - if ((canp->cd_can->RF0R & CAN_RF0R_FMP0) == 0) - canp->cd_can->IER |= CAN_IER_FMPIE0; -} - -#if CAN_USE_SLEEP_MODE || defined(__DOXYGEN__) -/** - * @brief Enters the sleep mode. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void can_lld_sleep(CANDriver *canp) { - - canp->cd_can->MCR |= CAN_MCR_SLEEP; -} - -/** - * @brief Enforces leaving the sleep mode. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void can_lld_wakeup(CANDriver *canp) { - - canp->cd_can->MCR &= ~CAN_MCR_SLEEP; -} -#endif /* CAN_USE_SLEEP_MODE */ - -#endif /* CH_HAL_USE_CAN */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/can_lld.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/can_lld.h deleted file mode 100644 index fcbc292..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/can_lld.h +++ /dev/null @@ -1,327 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/can_lld.h - * @brief STM32 CAN subsystem low level driver header. - * @addtogroup STM32_CAN - * @{ - */ - -#ifndef _CAN_LLD_H_ -#define _CAN_LLD_H_ - -#if CH_HAL_USE_CAN || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/* - * The following macros from the ST header file are replaced with better - * equivalents. - */ -#undef CAN_BTR_BRP -#undef CAN_BTR_TS1 -#undef CAN_BTR_TS2 -#undef CAN_BTR_SJW - -/** - * @brief This switch defines whether the driver implementation supports - * a low power switch mode with automatic an wakeup feature. - */ -#define CAN_SUPPORTS_SLEEP TRUE - -/** - * @brief Minimum number of CAN filters. - */ -#if defined(STM32F10X_CL) || defined(__DOXYGEN__) -#define CAN_MAX_FILTERS 28 -#else -#define CAN_MAX_FILTERS 14 -#endif - -#define CAN_BTR_BRP(n) (n) /**< @brief BRP field macro.*/ -#define CAN_BTR_TS1(n) ((n) << 16) /**< @brief TS1 field macro.*/ -#define CAN_BTR_TS2(n) ((n) << 20) /**< @brief TS2 field macro.*/ -#define CAN_BTR_SJW(n) ((n) << 24) /**< @brief SJW field macro.*/ - -#define CAN_IDE_STD 0 /**< @brief Standard id. */ -#define CAN_IDE_EXT 1 /**< @brief Extended id. */ - -#define CAN_RTR_DATA 0 /**< @brief Data frame. */ -#define CAN_RTR_REMOTE 1 /**< @brief Remote frame. */ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief CAN1 driver enable switch. - * @details If set to @p TRUE the support for ADC1 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM32_CAN1) || defined(__DOXYGEN__) -#define USE_STM32_CAN1 TRUE -#endif - -/** - * @brief CAN1 interrupt priority level setting. - */ -#if !defined(STM32_CAN1_IRQ_PRIORITY) || defined(__DOXYGEN__) -#define STM32_CAN1_IRQ_PRIORITY 11 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if CAN_USE_SLEEP_MODE && !CAN_SUPPORTS_SLEEP -#error "CAN sleep mode not supported in this architecture" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief CAN status flags. - */ -typedef uint32_t canstatus_t; - -/** - * @brief CAN transmission frame. - * @note Accessing the frame data as word16 or word32 is not portable because - * machine data endianness, it can be still useful for a quick filling. - */ -typedef struct { - struct { - uint8_t cf_DLC:4; /**< @brief Data length. */ - uint8_t cf_RTR:1; /**< @brief Frame type. */ - uint8_t cf_IDE:1; /**< @brief Identifier type. */ - }; - union { - struct { - uint32_t cf_SID:11; /**< @brief Standard identifier.*/ - }; - struct { - uint32_t cf_EID:29; /**< @brief Extended identifier.*/ - }; - }; - union { - uint8_t cf_data8[8]; /**< @brief Frame data. */ - uint16_t cf_data16[4]; /**< @brief Frame data. */ - uint32_t cf_data32[2]; /**< @brief Frame data. */ - }; -} CANTxFrame; - -/** - * @brief CAN received frame. - * @note Accessing the frame data as word16 or word32 is not portable because - * machine data endianness, it can be still useful for a quick filling. - */ -typedef struct { - struct { - uint8_t cf_FMI; /**< @brief Filter id. */ - uint16_t cf_TIME; /**< @brief Time stamp. */ - }; - struct { - uint8_t cf_DLC:4; /**< @brief Data length. */ - uint8_t cf_RTR:1; /**< @brief Frame type. */ - uint8_t cf_IDE:1; /**< @brief Identifier type. */ - }; - union { - struct { - uint32_t cf_SID:11; /**< @brief Standard identifier.*/ - }; - struct { - uint32_t cf_EID:29; /**< @brief Extended identifier.*/ - }; - }; - union { - uint8_t cf_data8[8]; /**< @brief Frame data. */ - uint16_t cf_data16[4]; /**< @brief Frame data. */ - uint32_t cf_data32[2]; /**< @brief Frame data. */ - }; -} CANRxFrame; - -/** - * @brief CAN filter. - * @note Refer to the STM32 reference manual for info about filters. - */ -typedef struct { - /** - * @brief Filter mode. - * @note This bit represent the CAN_FM1R register bit associated to this - * filter (0=mask mode, 1=list mode). - */ - uint32_t cf_mode:1; - /** - * @brief Filter sclae. - * @note This bit represent the CAN_FS1R register bit associated to this - * filter (0=16 bits mode, 1=32 bits mode). - */ - uint32_t cf_scale:1; - /** - * @brief Filter mode. - * @note This bit represent the CAN_FFA1R register bit associated to this - * filter, must be set to zero in this version of the driver. - */ - uint32_t cf_assignment:1; - /** - * @brief Filter register 1 (identifier). - */ - uint32_t cf_register1; - /** - * @brief Filter register 2 (mask/identifier depending on cf_mode=0/1). - */ - uint32_t cf_register2; -} CANFilter; - -/** - * @brief Driver configuration structure. - */ -typedef struct { - /** - * @brief CAN MCR register initialization data. - * @note Some bits in this register are enforced by the driver regardless - * their status in this field. - */ - uint32_t cc_mcr; - /** - * @brief CAN BTR register initialization data. - * @note Some bits in this register are enforced by the driver regardless - * their status in this field. - */ - uint32_t cc_btr; - /** - * @brief Number of elements into the filters array. - * @note By setting this field to zero a default filter is enabled that - * allows all frames, this should be adequate for simple applications. - */ - uint32_t cc_num; - /** - * @brief Pointer to an array of @p CANFilter structures. - * @note This field can be set to @p NULL if the field @p cc_num is set to - * zero. - */ - const CANFilter *cc_filters; -} CANConfig; - -/** - * @brief Structure representing an CAN driver. - */ -typedef struct { - /** - * @brief Driver state. - */ - canstate_t cd_state; - /** - * @brief Current configuration data. - */ - const CANConfig *cd_config; - /** - * @brief Transmission queue semaphore. - */ - Semaphore cd_txsem; - /** - * @brief Receive queue semaphore. - */ - Semaphore cd_rxsem; - /** - * @brief One or more frames become available. - * @note After broadcasting this event it will not be broadcasted again - * until the received frames queue has been completely emptied. It - * is not broadcasted for each received frame. It is - * responsibility of the application to empty the queue by repeatedly - * invoking @p chReceive() when listening to this event. This behavior - * minimizes the interrupt served by the system because CAN traffic. - */ - EventSource cd_rxfull_event; - /** - * @brief One or more transmission slots become available. - */ - EventSource cd_txempty_event; - /** - * @brief A CAN bus error happened. - */ - EventSource cd_error_event; - /** - * @brief Error flags set when an error event is broadcasted. - */ - canstatus_t cd_status; -#if CAN_USE_SLEEP_MODE || defined (__DOXYGEN__) - /** - * @brief Entering sleep state event. - */ - EventSource cd_sleep_event; - /** - * @brief Exiting sleep state event. - */ - EventSource cd_wakeup_event; -#endif /* CAN_USE_SLEEP_MODE */ - /* End of the mandatory fields.*/ - /** - * @brief Pointer to the CAN registers. - */ - CAN_TypeDef *cd_can; -} CANDriver; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_STM32_CAN1 && !defined(__DOXYGEN__) -extern CANDriver CAND1; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void can_lld_init(void); - void can_lld_start(CANDriver *canp); - void can_lld_stop(CANDriver *canp); - bool_t can_lld_can_transmit(CANDriver *canp); - void can_lld_transmit(CANDriver *canp, const CANTxFrame *crfp); - bool_t can_lld_can_receive(CANDriver *canp); - void can_lld_receive(CANDriver *canp, CANRxFrame *ctfp); -#if CAN_USE_SLEEP_MODE - void can_lld_sleep(CANDriver *canp); - void can_lld_wakeup(CANDriver *canp); -#endif /* CAN_USE_SLEEP_MODE */ -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_CAN */ - -#endif /* _CAN_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld.c deleted file mode 100644 index fb98fb0..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/hal_lld.c - * @brief STM32 HAL subsystem low level driver source. - * - * @addtogroup STM32_HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#define AIRCR_VECTKEY 0x05FA0000 - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - */ -const PALConfig pal_default_config = -{ - {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH}, - {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH}, - {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH}, - {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH}, -#if !defined(STM32F10X_LD) && !defined(CPU_WITH_NO_GPIOE) - {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH}, -#endif -#if defined(STM32F10X_HD) - {VAL_GPIOFODR, VAL_GPIOFCRL, VAL_GPIOFCRH}, - {VAL_GPIOGODR, VAL_GPIOGCRL, VAL_GPIOGCRH}, -#endif -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - - /* SysTick initialization using the system clock.*/ - SysTick->LOAD = STM32_HCLK / CH_FREQUENCY - 1; - SysTick->VAL = 0; - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_ENABLE_Msk | - SysTick_CTRL_TICKINT_Msk; - -#if CH_HAL_USE_ADC || CH_HAL_USE_SPI - dmaInit(); -#endif -} - -/** - * @brief STM32 clocks and PLL initialization. - * @note All the involved constants come from the file @p board.h. - */ -#if defined(STM32F10X_LD) || defined(STM32F10X_MD) || \ - defined(STM32F10X_HD) || defined(__DOXYGEN__) -/* - * Clocks initialization for the LD, MD and HD sub-families. - */ -void stm32_clock_init(void) { - - /* HSI setup, it enforces the reset situation in order to handle possible - problems with JTAG probes and re-initializations.*/ - RCC->CR |= RCC_CR_HSION; /* Make sure HSI is ON. */ - while (!(RCC->CR & RCC_CR_HSIRDY)) - ; /* Wait until HSI is stable. */ - RCC->CR &= RCC_CR_HSITRIM | RCC_CR_HSION; /* CR Reset value. */ - RCC->CFGR = 0; /* CFGR reset value. */ - while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI) - ; /* Wait until HSI is the source.*/ - - /* HSE setup, it is only performed if the HSE clock is selected as source - of the system clock (directly or through the PLL).*/ -#if (STM32_SW == STM32_SW_HSE) || \ - ((STM32_SW == STM32_SW_PLL) && (STM32_PLLSRC == STM32_PLLSRC_HSE)) - RCC->CR |= RCC_CR_HSEON; - while (!(RCC->CR & RCC_CR_HSERDY)) - ; /* Waits until HSE is stable. */ -#endif - - /* PLL setup, it is only performed if the PLL is the selected source of - the system clock else it is left disabled.*/ -#if STM32_SW == STM32_SW_PLL - RCC->CFGR |= STM32_PLLMUL | STM32_PLLXTPRE | STM32_PLLSRC; - RCC->CR |= RCC_CR_PLLON; - while (!(RCC->CR & RCC_CR_PLLRDY)) - ; /* Waits until PLL is stable. */ -#endif - - /* Clock settings.*/ - RCC->CFGR = STM32_MCO | STM32_PLLMUL | STM32_PLLXTPRE | STM32_PLLSRC | - STM32_ADCPRE | STM32_PPRE2 | STM32_PPRE1 | STM32_HPRE; - - /* Flash setup and final clock selection. */ - FLASH->ACR = STM32_FLASHBITS; /* Flash wait states depending on clock. */ - - /* Switching on the configured clock source if it is different from HSI.*/ -#if (STM32_SW != STM32_SW_HSI) - RCC->CFGR |= STM32_SW; /* Switches on the selected clock source. */ - while ((RCC->CFGR & RCC_CFGR_SWS) != (STM32_SW << 2)) - ; -#endif -} -#elif defined(STM32F10X_CL) -/* - * Clocks initialization for the CL sub-family. - */ -void stm32_clock_init(void) { - - /* HSI setup, it enforces the reset situation in order to handle possible - problems with JTAG probes and re-initializations.*/ - RCC->CR |= RCC_CR_HSION; /* Make sure HSI is ON. */ - while (!(RCC->CR & RCC_CR_HSIRDY)) - ; /* Wait until HSI is stable. */ - RCC->CR &= RCC_CR_HSITRIM | RCC_CR_HSION; /* CR Reset value. */ - RCC->CFGR = 0; /* CFGR reset value. */ - while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI) - ; /* Wait until HSI is the source.*/ - RCC->CFGR2 = 0; - - /* HSE setup, it is only performed if the HSE clock is selected as source - of the system clock (directly or through the PLLs).*/ -#if (STM32_SW == STM32_SW_HSE) || \ - ((STM32_SW == STM32_SW_PLL) && (STM32_PLLSRC == STM32_PLLSRC_PREDIV1)) - RCC->CR |= RCC_CR_HSEON; - while (!(RCC->CR & RCC_CR_HSERDY)) - ; /* Waits until HSE is stable. */ -#endif - - /* PLL2 setup, it is only performed if the PLL2 clock is selected as source - for the PLL clock else it is left disabled.*/ -#if STM32_SW == STM32_SW_PLL -#if STM32_PREDIV1SRC == STM32_PREDIV1SRC_PLL2 - RCC->CFGR2 |= STM32_PREDIV2 | STM32_PLL2MUL; - RCC->CR |= RCC_CR_PLL2ON; - while (!(RCC->CR & RCC_CR_PLL2RDY)) - ; /* Waits until PLL is stable. */ -#endif - - /* PLL setup, it is only performed if the PLL is the selected source of - the system clock else it is left disabled.*/ - RCC->CFGR2 |= STM32_PREDIV1 | STM32_PREDIV1SRC; - RCC->CFGR |= STM32_PLLMUL | STM32_PLLSRC; - RCC->CR |= RCC_CR_PLLON; - while (!(RCC->CR & RCC_CR_PLLRDY)) - ; /* Waits until PLL2 is stable. */ -#endif - - /* Clock settings.*/ - RCC->CFGR = STM32_MCO | STM32_PLLMUL | STM32_PLLSRC | - STM32_ADCPRE | STM32_PPRE2 | STM32_PPRE1 | STM32_HPRE; - - /* Flash setup and final clock selection. */ - FLASH->ACR = STM32_FLASHBITS; /* Flash wait states depending on clock. */ - - /* Switching on the configured clock source if it is different from HSI.*/ -#if (STM32_SW != STM32_SW_HSI) - RCC->CFGR |= STM32_SW; /* Switches on the selected clock source. */ - while ((RCC->CFGR & RCC_CFGR_SWS) != (STM32_SW << 2)) - ; -#endif -} -#else -void stm32_clock_init(void) {} -#endif - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld.h deleted file mode 100644 index 79cf018..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/hal_lld.h - * @brief STM32 HAL subsystem low level driver header. - * - * @addtogroup STM32_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -/* Tricks required to make the TRUE/FALSE declaration inside the library - compatible.*/ -#undef FALSE -#undef TRUE -#include "stm32f10x.h" -#define FALSE 0 -#define TRUE (!FALSE) - -#include "nvic.h" -#include "stm32_dma.h" - -/** - * @brief Platform name. - */ -#if defined(STM32F10X_MD) || defined(__DOXYGEN__) -#define PLATFORM_NAME "STM32 MD" -#include "hal_lld_f103.h" -#elif defined(STM32F10X_LD) -#define PLATFORM_NAME "STM32 LD" -#include "hal_lld_f103.h" -#elif defined(STM32F10X_HD) -#define PLATFORM_NAME "STM32 HD" -#include "hal_lld_f103.h" -#elif defined(STM32F10X_CL) -#define PLATFORM_NAME "STM32 CL" -#include "hal_lld_f105_f107.h" -#else -#error "STM32 platform unknown or not specified" -#endif - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); - void stm32_clock_init(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld_f103.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld_f103.h deleted file mode 100644 index 90b6d6c..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld_f103.h +++ /dev/null @@ -1,445 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/hal_lld_f103.h - * @brief STM32F103 HAL subsystem low level driver header. - * - * @addtogroup STM32F103_HAL - * @{ - */ - -#ifndef _HAL_LLD_F103_H_ -#define _HAL_LLD_F103_H_ - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -#define STM32_HSICLK 8000000 /**< High speed internal clock. */ -#define STM32_LSICLK 40000 /**< Low speed internal clock. */ - -/* RCC_CFGR register bits definitions.*/ -#define STM32_SW_HSI (0 << 0) /**< SYSCLK source is HSI. */ -#define STM32_SW_HSE (1 << 0) /**< SYSCLK source is HSE. */ -#define STM32_SW_PLL (2 << 0) /**< SYSCLK source is PLL. */ - -#define STM32_HPRE_DIV1 (0 << 4) /**< SYSCLK divided by 1. */ -#define STM32_HPRE_DIV2 (8 << 4) /**< SYSCLK divided by 2. */ -#define STM32_HPRE_DIV4 (9 << 4) /**< SYSCLK divided by 4. */ -#define STM32_HPRE_DIV8 (10 << 4) /**< SYSCLK divided by 8. */ -#define STM32_HPRE_DIV16 (11 << 4) /**< SYSCLK divided by 16. */ -#define STM32_HPRE_DIV64 (12 << 4) /**< SYSCLK divided by 64. */ -#define STM32_HPRE_DIV128 (13 << 4) /**< SYSCLK divided by 128. */ -#define STM32_HPRE_DIV256 (14 << 4) /**< SYSCLK divided by 256. */ -#define STM32_HPRE_DIV512 (15 << 4) /**< SYSCLK divided by 512. */ - -#define STM32_PPRE1_DIV1 (0 << 8) /**< HCLK divided by 1. */ -#define STM32_PPRE1_DIV2 (4 << 8) /**< HCLK divided by 2. */ -#define STM32_PPRE1_DIV4 (5 << 8) /**< HCLK divided by 4. */ -#define STM32_PPRE1_DIV8 (6 << 8) /**< HCLK divided by 8. */ -#define STM32_PPRE1_DIV16 (7 << 8) /**< HCLK divided by 16. */ - -#define STM32_PPRE2_DIV1 (0 << 11) /**< HCLK divided by 1. */ -#define STM32_PPRE2_DIV2 (4 << 11) /**< HCLK divided by 2. */ -#define STM32_PPRE2_DIV4 (5 << 11) /**< HCLK divided by 4. */ -#define STM32_PPRE2_DIV8 (6 << 11) /**< HCLK divided by 8. */ -#define STM32_PPRE2_DIV16 (7 << 11) /**< HCLK divided by 16. */ - -#define STM32_ADCPRE_DIV2 (0 << 14) /**< HCLK divided by 2. */ -#define STM32_ADCPRE_DIV4 (1 << 14) /**< HCLK divided by 4. */ -#define STM32_ADCPRE_DIV6 (2 << 14) /**< HCLK divided by 6. */ -#define STM32_ADCPRE_DIV8 (3 << 14) /**< HCLK divided by 8. */ - -#define STM32_PLLSRC_HSI (0 << 16) /**< PLL clock source is HSI. */ -#define STM32_PLLSRC_HSE (1 << 16) /**< PLL clock source is HSE. */ - -#define STM32_PLLXTPRE_DIV1 (0 << 17) /**< HSE divided by 1. */ -#define STM32_PLLXTPRE_DIV2 (1 << 17) /**< HSE divided by 2. */ - -#define STM32_MCO_NOCLOCK (0 << 24) /**< No clock on MCO pin. */ -#define STM32_MCO_SYSCLK (4 << 24) /**< SYSCLK on MCO pin. */ -#define STM32_MCO_HSI (5 << 24) /**< HSI clock on MCO pin. */ -#define STM32_MCO_HSE (6 << 24) /**< HSE clock on MCO pin. */ -#define STM32_MCO_PLLDIV2 (7 << 24) /**< PLL/2 clock on MCO pin. */ - -/*===========================================================================*/ -/* Platform specific friendly IRQ names. */ -/*===========================================================================*/ - -#define WWDG_IRQHandler Vector40 /**< Window Watchdog. */ -#define PVD_IRQHandler Vector44 /**< PVD through EXTI Line - detect. */ -#define TAMPER_IRQHandler Vector48 /**< Tamper. */ -#define RTC_IRQHandler Vector4C /**< RTC. */ -#define FLASH_IRQHandler Vector50 /**< Flash. */ -#define RCC_IRQHandler Vector54 /**< RCC. */ -#define EXTI0_IRQHandler Vector58 /**< EXTI Line 0. */ -#define EXTI1_IRQHandler Vector5C /**< EXTI Line 1. */ -#define EXTI2_IRQHandler Vector60 /**< EXTI Line 2. */ -#define EXTI3_IRQHandler Vector64 /**< EXTI Line 3. */ -#define EXTI4_IRQHandler Vector68 /**< EXTI Line 4. */ -#define DMA1_Ch1_IRQHandler Vector6C /**< DMA1 Channel 1. */ -#define DMA1_Ch2_IRQHandler Vector70 /**< DMA1 Channel 2. */ -#define DMA1_Ch3_IRQHandler Vector74 /**< DMA1 Channel 3. */ -#define DMA1_Ch4_IRQHandler Vector78 /**< DMA1 Channel 4. */ -#define DMA1_Ch5_IRQHandler Vector7C /**< DMA1 Channel 5. */ -#define DMA1_Ch6_IRQHandler Vector80 /**< DMA1 Channel 6. */ -#define DMA1_Ch7_IRQHandler Vector84 /**< DMA1 Channel 7. */ -#define ADC1_2_IRQHandler Vector88 /**< ADC1_2. */ -#define CAN1_TX_IRQHandler Vector8C /**< CAN1 TX. */ -#define USB_HP_IRQHandler Vector8C /**< USB High Priority, CAN1 TX.*/ -#define CAN1_RX0_IRQHandler Vector90 /**< CAN1 RX0. */ -#define USB_LP_IRQHandler Vector90 /**< USB Low Priority, CAN1 RX0.*/ -#define CAN1_RX1_IRQHandler Vector94 /**< CAN1 RX1. */ -#define CAN1_SCE_IRQHandler Vector98 /**< CAN1 SCE. */ -#define EXTI9_5_IRQHandler Vector9C /**< EXTI Line 9..5. */ -#define TIM1_BRK_IRQHandler VectorA0 /**< TIM1 Break. */ -#define TIM1_UP_IRQHandler VectorA4 /**< TIM1 Update. */ -#define TIM1_TRG_COM_IRQHandler VectorA8 /**< TIM1 Trigger and - Commutation. */ -#define TIM1_CC_IRQHandler VectorAC /**< TIM1 Capture Compare. */ -#define TIM2_IRQHandler VectorB0 /**< TIM2. */ -#define TIM3_IRQHandler VectorB4 /**< TIM3. */ -#if defined(STM32F10X_MD) || defined(STM32F10X_HD) || defined(__DOXYGEN__) -#define TIM4_IRQHandler VectorB8 /**< TIM4. */ -#endif -#define I2C1_EV_IRQHandler VectorBC /**< I2C1 Event. */ -#define I2C1_ER_IRQHandler VectorC0 /**< I2C1 Error. */ -#if defined(STM32F10X_MD) || defined(STM32F10X_HD) || defined(__DOXYGEN__) -#define I2C2_EV_IRQHandler VectorC4 /**< I2C2 Event. */ -#define I2C2_ER_IRQHandler VectorC8 /**< I2C2 Error. */ -#endif -#define SPI1_IRQHandler VectorCC /**< SPI1. */ -#if defined(STM32F10X_MD) || defined(STM32F10X_HD) || defined(__DOXYGEN__) -#define SPI2_IRQHandler VectorD0 /**< SPI2. */ -#endif -#define USART1_IRQHandler VectorD4 /**< USART1. */ -#define USART2_IRQHandler VectorD8 /**< USART2. */ -#if defined(STM32F10X_MD) || defined(STM32F10X_HD) || defined(__DOXYGEN__) -#define USART3_IRQHandler VectorDC /**< USART3. */ -#endif -#define EXTI15_10_IRQHandler VectorE0 /**< EXTI Line 15..10. */ -#define RTCAlarm_IRQHandler VectorE4 /**< RTC Alarm through EXTI. */ -#define USBWakeUp_IRQHandler VectorE8 /**< USB Wakeup from suspend. */ -#if defined(STM32F10X_HD) || defined(__DOXYGEN__) -#define TIM8_BRK_IRQHandler VectorEC /**< TIM8 Break. */ -#define TIM8_UP_IRQHandler VectorF0 /**< TIM8 Update. */ -#define TIM8_TRG_COM_IRQHandler VectorF4 /**< TIM8 Trigger and - Commutation. */ -#define TIM8_CC_IRQHandler VectorF8 /**< TIM8 Capture Compare. */ -#define ADC3_IRQHandler VectorFC /**< ADC3. */ -#define FSMC_IRQHandler Vector100 /**< FSMC. */ -#define SDIO_IRQHandler Vector104 /**< SDIO. */ -#define TIM5_IRQHandler Vector108 /**< TIM5. */ -#define SPI3_IRQHandler Vector10C /**< SPI3. */ -#define UART4_IRQHandler Vector110 /**< UART4. */ -#define UART5_IRQHandler Vector114 /**< UART5. */ -#define TIM6_IRQHandler Vector118 /**< TIM6. */ -#define TIM7_IRQHandler Vector11C /**< TIM7. */ -#define DMA2_Ch1_IRQHandler Vector120 /**< DMA2 Channel1. */ -#define DMA2_Ch2_IRQHandler Vector124 /**< DMA2 Channel2. */ -#define DMA2_Ch3_IRQHandler Vector128 /**< DMA2 Channel3. */ -#define DMA2_Ch4_5_IRQHandler Vector12C /**< DMA2 Channel4 & Channel5. */ -#endif - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Main clock source selection. - * @note If the selected clock source is not the PLL then the PLL is not - * initialized and started. - * @note The default value is calculated for a 72MHz system clock from - * a 8MHz crystal using the PLL. - */ -#if !defined(STM32_SW) || defined(__DOXYGEN__) -#define STM32_SW STM32_SW_PLL -#endif - -/** - * @brief Clock source for the PLL. - * @note This setting has only effect if the PLL is selected as the - * system clock source. - * @note The default value is calculated for a 72MHz system clock from - * a 8MHz crystal using the PLL. - */ -#if !defined(STM32_PLLSRC) || defined(__DOXYGEN__) -#define STM32_PLLSRC STM32_PLLSRC_HSE -#endif - -/** - * @brief Crystal PLL pre-divider. - * @note This setting has only effect if the PLL is selected as the - * system clock source. - * @note The default value is calculated for a 72MHz system clock from - * a 8MHz crystal using the PLL. - */ -#if !defined(STM32_PLLXTPRE) || defined(__DOXYGEN__) -#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 -#endif - -/** - * @brief PLL multiplier value. - * @note The allowed range is 2...16. - * @note The default value is calculated for a 72MHz system clock from - * a 8MHz crystal using the PLL. - */ -#if !defined(STM32_PLLMUL_VALUE) || defined(__DOXYGEN__) -#define STM32_PLLMUL_VALUE 9 -#endif - -/** - * @brief AHB prescaler value. - * @note The default value is calculated for a 72MHz system clock from - * a 8MHz crystal using the PLL. - */ -#if !defined(STM32_HPRE) || defined(__DOXYGEN__) -#define STM32_HPRE STM32_HPRE_DIV1 -#endif - -/** - * @brief APB1 prescaler value. - */ -#if !defined(STM32_PPRE1) || defined(__DOXYGEN__) -#define STM32_PPRE1 STM32_PPRE1_DIV2 -#endif - -/** - * @brief APB2 prescaler value. - */ -#if !defined(STM32_PPRE2) || defined(__DOXYGEN__) -#define STM32_PPRE2 STM32_PPRE2_DIV2 -#endif - -/** - * @brief ADC prescaler value. - */ -#if !defined(STM32_ADCPRE) || defined(__DOXYGEN__) -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#endif - -/** - * @brief MCO pin setting. - */ -#if !defined(STM32_MCO) || defined(__DOXYGEN__) -#define STM32_MCO STM32_MCO_NOCLOCK -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/* HSE prescaler setting check.*/ -#if (STM32_PLLXTPRE != STM32_PLLXTPRE_DIV1) && \ - (STM32_PLLXTPRE != STM32_PLLXTPRE_DIV2) -#error "invalid STM32_PLLXTPRE value specified" -#endif -/** - * @brief PLLMUL field. - */ -#if ((STM32_PLLMUL_VALUE >= 2) && (STM32_PLLMUL_VALUE <= 16)) || \ - defined(__DOXYGEN__) -#define STM32_PLLMUL ((STM32_PLLMUL_VALUE - 2) << 18) -#else -#error "invalid STM32_PLLMUL_VALUE value specified" -#endif - -/** - * @brief PLL input clock frequency. - */ -#if (STM32_PLLSRC == STM32_PLLSRC_HSE) || defined(__DOXYGEN__) -#if STM32_PLLXTPRE == STM32_PLLXTPRE_DIV1 -#define STM32_PLLCLKIN (STM32_HSECLK / 1) -#else -#define STM32_PLLCLKIN (STM32_HSECLK / 2) -#endif -#elif STM32_PLLSRC == STM32_PLLSRC_HSI -#define STM32_PLLCLKIN (STM32_HSICLK / 2) -#else -#error "invalid STM32_PLLSRC value specified" -#endif - -/* PLL input frequency range check.*/ -#if (STM32_PLLCLKIN < 3000000) || (STM32_PLLCLKIN > 12000000) -#error "STM32_PLLCLKIN outside acceptable range (3...12MHz)" -#endif - -/** - * @brief PLL output clock frequency. - */ -#define STM32_PLLCLKOUT (STM32_PLLCLKIN * STM32_PLLMUL_VALUE) - -/* PLL output frequency range check.*/ -#if (STM32_PLLCLKOUT < 16000000) || (STM32_PLLCLKOUT > 72000000) -#error "STM32_PLLCLKOUT outside acceptable range (16...72MHz)" -#endif - -/** - * @brief System clock source. - */ -#if (STM32_SW == STM32_SW_PLL) || defined(__DOXYGEN__) -#define STM32_SYSCLK STM32_PLLCLKOUT -#elif (STM32_SW == STM32_SW_HSI) -#define STM32_SYSCLK STM32_HSICLK -#elif (STM32_SW == STM32_SW_HSE) -#define STM32_SYSCLK STM32_HSECLK -#else -#error "invalid STM32_SYSCLK_SW value specified" -#endif - -/* Check on the system clock.*/ -#if STM32_SYSCLK > 72000000 -#error "STM32_SYSCLK above maximum rated frequency (72MHz)" -#endif - -/** - * @brief AHB frequency. - */ -#if (STM32_HPRE == STM32_HPRE_DIV1) || defined(__DOXYGEN__) -#define STM32_HCLK (STM32_SYSCLK / 1) -#elif STM32_HPRE == STM32_HPRE_DIV2 -#define STM32_HCLK (STM32_SYSCLK / 2) -#elif STM32_HPRE == STM32_HPRE_DIV4 -#define STM32_HCLK (STM32_SYSCLK / 4) -#elif STM32_HPRE == STM32_HPRE_DIV8 -#define STM32_HCLK (STM32_SYSCLK / 8) -#elif STM32_HPRE == STM32_HPRE_DIV16 -#define STM32_HCLK (STM32_SYSCLK / 16) -#elif STM32_HPRE == STM32_HPRE_DIV64 -#define STM32_HCLK (STM32_SYSCLK / 64) -#elif STM32_HPRE == STM32_HPRE_DIV128 -#define STM32_HCLK (STM32_SYSCLK / 128) -#elif STM32_HPRE == STM32_HPRE_DIV256 -#define STM32_HCLK (STM32_SYSCLK / 256) -#elif STM32_HPRE == STM32_HPRE_DIV512 -#define STM32_HCLK (STM32_SYSCLK / 512) -#else -#error "invalid STM32_HPRE value specified" -#endif - -/* AHB frequency check.*/ -#if STM32_HCLK > 72000000 -#error "STM32_HCLK exceeding maximum frequency (72MHz)" -#endif - -/** - * @brief APB1 frequency. - */ -#if (STM32_PPRE1 == STM32_PPRE1_DIV1) || defined(__DOXYGEN__) -#define STM32_PCLK1 (STM32_HCLK / 1) -#elif STM32_PPRE1 == STM32_PPRE1_DIV2 -#define STM32_PCLK1 (STM32_HCLK / 2) -#elif STM32_PPRE1 == STM32_PPRE1_DIV4 -#define STM32_PCLK1 (STM32_HCLK / 4) -#elif STM32_PPRE1 == STM32_PPRE1_DIV8 -#define STM32_PCLK1 (STM32_HCLK / 8) -#elif STM32_PPRE1 == STM32_PPRE1_DIV16 -#define STM32_PCLK1 (STM32_HCLK / 16) -#else -#error "invalid STM32_PPRE1 value specified" -#endif - -/* APB1 frequency check.*/ -#if STM32_PCLK2 > 36000000 -#error "STM32_PCLK1 exceeding maximum frequency (36MHz)" -#endif - -/** - * @brief APB2 frequency. - */ -#if (STM32_PPRE2 == STM32_PPRE2_DIV1) || defined(__DOXYGEN__) -#define STM32_PCLK2 (STM32_HCLK / 1) -#elif STM32_PPRE2 == STM32_PPRE2_DIV2 -#define STM32_PCLK2 (STM32_HCLK / 2) -#elif STM32_PPRE2 == STM32_PPRE2_DIV4 -#define STM32_PCLK2 (STM32_HCLK / 4) -#elif STM32_PPRE2 == STM32_PPRE2_DIV8 -#define STM32_PCLK2 (STM32_HCLK / 8) -#elif STM32_PPRE2 == STM32_PPRE2_DIV16 -#define STM32_PCLK2 (STM32_HCLK / 16) -#else -#error "invalid STM32_PPRE2 value specified" -#endif - -/* APB2 frequency check.*/ -#if STM32_PCLK2 > 72000000 -#error "STM32_PCLK2 exceeding maximum frequency (72MHz)" -#endif - -/** - * @brief ADC frequency. - */ -#if (STM32_ADCPRE == STM32_ADCPRE_DIV2) || defined(__DOXYGEN__) -#define STM32_ADCCLK (STM32_PCLK2 / 2) -#elif STM32_ADCPRE == STM32_ADCPRE_DIV4 -#define STM32_ADCCLK (STM32_PCLK2 / 4) -#elif STM32_ADCPRE == STM32_ADCPRE_DIV6 -#define STM32_ADCCLK (STM32_PCLK2 / 6) -#elif STM32_ADCPRE == STM32_ADCPRE_DIV8 -#define STM32_ADCCLK (STM32_PCLK2 / 8) -#else -#error "invalid STM32_ADCPRE value specified" -#endif - -/* ADC frequency check.*/ -#if STM32_ADCCLK > 14000000 -#error "STM32_ADCCLK exceeding maximum frequency (14MHz)" -#endif - -/** - * @brief Timers 2, 3, 4, 5, 6, 7, 12, 13, 14 clock. - */ -#if (STM32_PPRE1 == STM32_PPRE1_DIV1) || defined(__DOXYGEN__) -#define STM32_TIMCLK1 (STM32_PCLK1 * 1) -#else -#define STM32_TIMCLK1 (STM32_PCLK1 * 2) -#endif - -/** - * @brief Timers 1, 8, 9, 10 and 11 clock. - */ -#if (STM32_PPRE2 == STM32_PPRE2_DIV1) || defined(__DOXYGEN__) -#define STM32_TIMCLK2 (STM32_PCLK2 * 1) -#else -#define STM32_TIMCLK2 (STM32_PCLK2 * 2) -#endif - -/** - * @brief Flash settings. - */ -#if (STM32_HCLK <= 24000000) || defined(__DOXYGEN__) -#define STM32_FLASHBITS 0x00000010 -#elif STM32_HCLK <= 48000000 -#define STM32_FLASHBITS 0x00000011 -#else -#define STM32_FLASHBITS 0x00000012 -#endif - -#endif /* _HAL_LLD_F103_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld_f105_f107.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld_f105_f107.h deleted file mode 100644 index b0ce98c..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/hal_lld_f105_f107.h +++ /dev/null @@ -1,538 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/hal_lld_f105_f107.h - * @brief STM32F10x Connectivity Line HAL subsystem low level driver header. - * - * @addtogroup STM32F10X_CL_HAL - * @{ - */ - -#ifndef _HAL_LLD_F105_F107_H_ -#define _HAL_LLD_F105_F107_H_ - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -#define STM32_HSICLK 8000000 /**< High speed internal clock. */ -#define STM32_LSICLK 40000 /**< Low speed internal clock. */ - -/* RCC_CFGR register bits definitions.*/ -#define STM32_SW_HSI (0 << 0) /**< SYSCLK source is HSI. */ -#define STM32_SW_HSE (1 << 0) /**< SYSCLK source is HSE. */ -#define STM32_SW_PLL (2 << 0) /**< SYSCLK source is PLL. */ - -#define STM32_HPRE_DIV1 (0 << 4) /**< SYSCLK divided by 1. */ -#define STM32_HPRE_DIV2 (8 << 4) /**< SYSCLK divided by 2. */ -#define STM32_HPRE_DIV4 (9 << 4) /**< SYSCLK divided by 4. */ -#define STM32_HPRE_DIV8 (10 << 4) /**< SYSCLK divided by 8. */ -#define STM32_HPRE_DIV16 (11 << 4) /**< SYSCLK divided by 16. */ -#define STM32_HPRE_DIV64 (12 << 4) /**< SYSCLK divided by 64. */ -#define STM32_HPRE_DIV128 (13 << 4) /**< SYSCLK divided by 128. */ -#define STM32_HPRE_DIV256 (14 << 4) /**< SYSCLK divided by 256. */ -#define STM32_HPRE_DIV512 (15 << 4) /**< SYSCLK divided by 512. */ - -#define STM32_PPRE1_DIV1 (0 << 8) /**< HCLK divided by 1. */ -#define STM32_PPRE1_DIV2 (4 << 8) /**< HCLK divided by 2. */ -#define STM32_PPRE1_DIV4 (5 << 8) /**< HCLK divided by 4. */ -#define STM32_PPRE1_DIV8 (6 << 8) /**< HCLK divided by 8. */ -#define STM32_PPRE1_DIV16 (7 << 8) /**< HCLK divided by 16. */ - -#define STM32_PPRE2_DIV1 (0 << 11) /**< HCLK divided by 1. */ -#define STM32_PPRE2_DIV2 (4 << 11) /**< HCLK divided by 2. */ -#define STM32_PPRE2_DIV4 (5 << 11) /**< HCLK divided by 4. */ -#define STM32_PPRE2_DIV8 (6 << 11) /**< HCLK divided by 8. */ -#define STM32_PPRE2_DIV16 (7 << 11) /**< HCLK divided by 16. */ - -#define STM32_ADCPRE_DIV2 (0 << 14) /**< HCLK divided by 2. */ -#define STM32_ADCPRE_DIV4 (1 << 14) /**< HCLK divided by 4. */ -#define STM32_ADCPRE_DIV6 (2 << 14) /**< HCLK divided by 6. */ -#define STM32_ADCPRE_DIV8 (3 << 14) /**< HCLK divided by 8. */ - -#define STM32_PLLSRC_HSI (0 << 16) /**< PLL clock source is HSI. */ -#define STM32_PLLSRC_PREDIV1 (1 << 16) /**< PLL clock source is - PREDIV1. */ - -#define STM32_OTGFSPRE_DIV2 (1 << 22) /**< HCLK*2 divided by 2. */ -#define STM32_OTGFSPRE_DIV3 (0 << 22) /**< HCLK*2 divided by 3. */ - -#define STM32_MCO_NOCLOCK (0 << 24) /**< No clock on MCO pin. */ -#define STM32_MCO_SYSCLK (4 << 24) /**< SYSCLK on MCO pin. */ -#define STM32_MCO_HSI (5 << 24) /**< HSI clock on MCO pin. */ -#define STM32_MCO_HSE (6 << 24) /**< HSE clock on MCO pin. */ -#define STM32_MCO_PLLDIV2 (7 << 24) /**< PLL/2 clock on MCO pin. */ -#define STM32_MCO_PLL2 (8 << 24) /**< PLL2 clock on MCO pin. */ -#define STM32_MCO_PLL3DIV2 (9 << 24) /**< PLL3/2 clock on MCO pin. */ -#define STM32_MCO_XT1 (10 << 24) /**< XT1 clock on MCO pin. */ -#define STM32_MCO_PLL3 (11 << 24) /**< PLL3 clock on MCO pin. */ - -/* RCC_CFGR2 register bits definitions.*/ -#define STM32_PREDIV1SRC_HSE (0 << 16) /**< PREDIV1 source is HSE. */ -#define STM32_PREDIV1SRC_PLL2 (1 << 16) /**< PREDIV1 source is PLL2. */ - -/*===========================================================================*/ -/* Platform specific friendly IRQ names. */ -/*===========================================================================*/ - -#define WWDG_IRQHandler Vector40 /**< Window Watchdog. */ -#define PVD_IRQHandler Vector44 /**< PVD through EXTI Line - detect. */ -#define TAMPER_IRQHandler Vector48 /**< Tamper. */ -#define RTC_IRQHandler Vector4C /**< RTC. */ -#define FLASH_IRQHandler Vector50 /**< Flash. */ -#define RCC_IRQHandler Vector54 /**< RCC. */ -#define EXTI0_IRQHandler Vector58 /**< EXTI Line 0. */ -#define EXTI1_IRQHandler Vector5C /**< EXTI Line 1. */ -#define EXTI2_IRQHandler Vector60 /**< EXTI Line 2. */ -#define EXTI3_IRQHandler Vector64 /**< EXTI Line 3. */ -#define EXTI4_IRQHandler Vector68 /**< EXTI Line 4. */ -#define DMA1_Ch1_IRQHandler Vector6C /**< DMA1 Channel 1. */ -#define DMA1_Ch2_IRQHandler Vector70 /**< DMA1 Channel 2. */ -#define DMA1_Ch3_IRQHandler Vector74 /**< DMA1 Channel 3. */ -#define DMA1_Ch4_IRQHandler Vector78 /**< DMA1 Channel 4. */ -#define DMA1_Ch5_IRQHandler Vector7C /**< DMA1 Channel 5. */ -#define DMA1_Ch6_IRQHandler Vector80 /**< DMA1 Channel 6. */ -#define DMA1_Ch7_IRQHandler Vector84 /**< DMA1 Channel 7. */ -#define ADC1_2_IRQHandler Vector88 /**< ADC1 and ADC2. */ -#define CAN1_TX_IRQHandler Vector8C /**< CAN1 TX. */ -#define CAN1_RX0_IRQHandler Vector90 /**< CAN1 RX0. */ -#define CAN1_RX1_IRQHandler Vector94 /**< CAN1 RX1. */ -#define CAN1_SCE_IRQHandler Vector98 /**< CAN1 SCE. */ -#define EXTI9_5_IRQHandler Vector9C /**< EXTI Line 9..5. */ -#define TIM1_BRK_IRQHandler VectorA0 /**< TIM1 Break. */ -#define TIM1_UP_IRQHandler VectorA4 /**< TIM1 Update. */ -#define TIM1_TRG_COM_IRQHandler VectorA8 /**< TIM1 Trigger and - Commutation. */ -#define TIM1_CC_IRQHandler VectorAC /**< TIM1 Capture Compare. */ -#define TIM2_IRQHandler VectorB0 /**< TIM2. */ -#define TIM3_IRQHandler VectorB4 /**< TIM3. */ -#define TIM4_IRQHandler VectorB8 /**< TIM4. */ -#define I2C1_EV_IRQHandler VectorBC /**< I2C1 Event. */ -#define I2C1_ER_IRQHandler VectorC0 /**< I2C1 Error. */ -#define I2C2_EV_IRQHandler VectorC4 /**< I2C2 Event. */ -#define I2C2_ER_IRQHandler VectorC8 /**< I2C1 Error. */ -#define SPI1_IRQHandler VectorCC /**< SPI1. */ -#define SPI2_IRQHandler VectorD0 /**< SPI2. */ -#define USART1_IRQHandler VectorD4 /**< USART1. */ -#define USART2_IRQHandler VectorD8 /**< USART2. */ -#define USART3_IRQHandler VectorDC /**< USART3. */ -#define EXTI15_10_IRQHandler VectorE0 /**< EXTI Line 15..10. */ -#define RTCAlarm_IRQHandler VectorE4 /**< RTC alarm through EXTI - line. */ -#define OTG_FS_WKUP_IRQHandler VectorE8 /**< USB OTG FS Wakeup through - EXTI line. */ -#define TIM5_IRQHandler Vector108 /**< TIM5. */ -#define SPI3_IRQHandler Vector10C /**< SPI3. */ -#define UART4_IRQHandler Vector110 /**< UART4. */ -#define UART5_IRQHandler Vector114 /**< UART5. */ -#define TIM6_IRQHandler Vector118 /**< TIM6. */ -#define TIM7_IRQHandler Vector11C /**< TIM7. */ -#define DMA2_Ch1_IRQHandler Vector120 /**< DMA2 Channel1. */ -#define DMA2_Ch2_IRQHandler Vector124 /**< DMA2 Channel2. */ -#define DMA2_Ch3_IRQHandler Vector128 /**< DMA2 Channel3. */ -#define DMA2_Ch4_IRQHandler Vector12C /**< DMA2 Channel4. */ -#define DMA2_Ch5_IRQHandler Vector130 /**< DMA2 Channel5. */ -#define ETH_IRQHandler Vector134 /**< Ethernet. */ -#define ETH_WKUP_IRQHandler Vector138 /**< Ethernet Wakeup through - EXTI line. */ -#define CAN2_TX_IRQHandler Vector13C /**< CAN2 TX. */ -#define CAN2_RX0_IRQHandler Vector140 /**< CAN2 RX0. */ -#define CAN2_RX1_IRQHandler Vector144 /**< CAN2 RX1. */ -#define CAN2_SCE_IRQHandler Vector148 /**< CAN2 SCE. */ -#define OTG_FS_IRQHandler Vector14C /**< USB OTG FS. */ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Main clock source selection. - * @note If the selected clock source is not the PLL then the PLL is not - * initialized and started. - * @note The default value is calculated for a 72MHz system clock from - * a 25MHz crystal using both PLL and PLL2. - */ -#if !defined(STM32_SW) || defined(__DOXYGEN__) -#define STM32_SW STM32_SW_PLL -#endif - -/** - * @brief Clock source for the PLL. - * @note This setting has only effect if the PLL is selected as the - * system clock source. - * @note The default value is calculated for a 72MHz system clock from - * a 25MHz crystal using both PLL and PLL2. - */ -#if !defined(STM32_PLLSRC) || defined(__DOXYGEN__) -#define STM32_PLLSRC STM32_PLLSRC_PREDIV1 -#endif - -/** - * @brief PREDIV1 clock source. - * @note This setting has only effect if the PLL is selected as the - * system clock source. - * @note The default value is calculated for a 72MHz system clock from - * a 25MHz crystal using both PLL and PLL2. - */ -#if !defined(STM32_PREDIV1SRC) || defined(__DOXYGEN__) -#define STM32_PREDIV1SRC STM32_PREDIV1SRC_PLL2 -#endif - -/** - * @brief PREDIV1 division factor. - * @note This setting has only effect if the PLL is selected as the - * system clock source. - * @note The allowed range is 1...16. - * @note The default value is calculated for a 72MHz system clock from - * a 25MHz crystal using both PLL and PLL2. - */ -#if !defined(STM32_PREDIV1_VALUE) || defined(__DOXYGEN__) -#define STM32_PREDIV1_VALUE 5 -#endif - -/** - * @brief PLL multiplier value. - * @note The allowed range is 4...9. - * @note The default value is calculated for a 72MHz system clock from - * a 25MHz crystal using both PLL and PLL2. - */ -#if !defined(STM32_PLLMUL_VALUE) || defined(__DOXYGEN__) -#define STM32_PLLMUL_VALUE 9 -#endif - -/** - * @brief PREDIV2 division factor. - * @note This setting has only effect if the PLL2 is selected as the - * clock source for the PLL. - * @note The allowed range is 1...16. - * @note The default value is calculated for a 72MHz system clock from - * a 25MHz crystal using both PLL and PLL2. - */ -#if !defined(STM32_PREDIV2_VALUE) || defined(__DOXYGEN__) -#define STM32_PREDIV2_VALUE 5 -#endif - -/** - * @brief PLL2 multiplier value. - * @note The default value is calculated for a 72MHz system clock from - * a 25MHz crystal using both PLL and PLL2. - */ -#if !defined(STM32_PLL2MUL_VALUE) || defined(__DOXYGEN__) -#define STM32_PLL2MUL_VALUE 8 -#endif - -/** - * @brief AHB prescaler value. - * @note The default value is calculated for a 72MHz system clock from - * a 25MHz crystal using both PLL and PLL2. - */ -#if !defined(STM32_HPRE) || defined(__DOXYGEN__) -#define STM32_HPRE STM32_HPRE_DIV1 -#endif - -/** - * @brief APB1 prescaler value. - */ -#if !defined(STM32_PPRE1) || defined(__DOXYGEN__) -#define STM32_PPRE1 STM32_PPRE1_DIV2 -#endif - -/** - * @brief APB2 prescaler value. - */ -#if !defined(STM32_PPRE2) || defined(__DOXYGEN__) -#define STM32_PPRE2 STM32_PPRE2_DIV2 -#endif - -/** - * @brief ADC prescaler value. - */ -#if !defined(STM32_ADCPRE) || defined(__DOXYGEN__) -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#endif - -/** - * @brief MCO pin setting. - */ -#if !defined(STM32_MCO) || defined(__DOXYGEN__) -#define STM32_MCO STM32_MCO_NOCLOCK -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/** - * @brief PREDIV1 field. - */ -#if (STM32_PREDIV1_VALUE >= 1) && (STM32_PREDIV1_VALUE <= 16) || \ - defined(__DOXYGEN__) -#define STM32_PREDIV1 ((STM32_PREDIV1_VALUE - 1) << 0) -#else -#error "invalid STM32_PREDIV1_VALUE value specified" -#endif - -/** - * @brief PREDIV2 field. - */ -#if (STM32_PREDIV2_VALUE >= 1) && (STM32_PREDIV2_VALUE <= 16) || \ - defined(__DOXYGEN__) -#define STM32_PREDIV2 ((STM32_PREDIV2_VALUE - 1) << 4) -#else -#error "invalid STM32_PREDIV2_VALUE value specified" -#endif - -/** - * @brief PLLMUL field. - */ -#if ((STM32_PLLMUL_VALUE >= 4) && (STM32_PLLMUL_VALUE <= 9)) || \ - defined(__DOXYGEN__) -#define STM32_PLLMUL ((STM32_PLLMUL_VALUE - 2) << 18) -#else -#error "invalid STM32_PLLMUL_VALUE value specified" -#endif - -/** - * @brief PLL2MUL field. - */ -#if ((STM32_PLL2MUL_VALUE >= 8) && (STM32_PLL2MUL_VALUE <= 14)) || \ - defined(__DOXYGEN__) -#define STM32_PLL2MUL ((STM32_PLL2MUL_VALUE - 2) << 8) -#elif (STM32_PLL2MUL_VALUE == 16) -#define STM32_PLL2MUL (14 << 8) -#elif (STM32_PLL2MUL_VALUE == 20) -#define STM32_PLL2MUL (15 << 8) -#else -#error "invalid STM32_PLL2MUL_VALUE value specified" -#endif - -/* The following values are only used if PLL2 clock is selected as source - for the PLL clock */ -#if (STM32_PREDIV1SRC == STM32_PREDIV1SRC_PLL2) || defined(__DOXYGEN__) -/** - * @brief PLL2 input frequency. - */ -#define STM32_PLL2CLKIN (STM32_HSECLK / STM32_PREDIV2_VALUE) - -/* PLL2 input frequency range check.*/ -#if (STM32_PLL2CLKIN < 3000000) || (STM32_PLL2CLKIN > 5000000) -#error "STM32_PLL2CLKIN outside acceptable range (3...5MHz)" -#endif - -/** - * @brief PLL2 output clock frequency. - */ -#define STM32_PLL2CLKOUT (STM32_PLL2CLKIN * STM32_PLL2MUL_VALUE) - -/* PLL2 output frequency range check.*/ -#if (STM32_PLL2CLKOUT < 40000000) || (STM32_PLL2CLKOUT > 74000000) -#error "STM32_PLL2CLKOUT outside acceptable range (40...74MHz)" -#endif -#endif /* STM32_PREDIV1SRC == STM32_PREDIV1SRC_PLL2 */ - -/** - * @brief PREDIV1 input frequency. - */ -#if (STM32_PREDIV1SRC == STM32_PREDIV1SRC_PLL2) || defined(__DOXYGEN__) -#define STM32_PREDIV1CLK STM32_PLL2CLKOUT -#elif STM32_PREDIV1SRC == STM32_PREDIV1SRC_HSE -#define STM32_PREDIV1CLK STM32_HSECLK -#else -#error "invalid STM32_PREDIV1SRC value specified" -#endif - -/** - * @brief PLL input clock frequency. - */ -#if (STM32_PLLSRC == STM32_PLLSRC_PREDIV1) || defined(__DOXYGEN__) -#define STM32_PLLCLKIN (STM32_PREDIV1CLK / STM32_PREDIV1_VALUE) -#elif STM32_PLLSRC == STM32_PLLSRC_HSI -#define STM32_PLLCLKIN (STM32_HSICLK / 2) -#else -#error "invalid STM32_PLLSRC value specified" -#endif - -/* PLL input frequency range check.*/ -#if (STM32_PLLCLKIN < 3000000) || (STM32_PLLCLKIN > 12000000) -#error "STM32_PLLCLKIN outside acceptable range (3...12MHz)" -#endif - -/** - * @brief PLL output clock frequency. - */ -#define STM32_PLLCLKOUT (STM32_PLLCLKIN * STM32_PLLMUL_VALUE) - -/* PLL output frequency range check.*/ -#if (STM32_PLLCLKOUT < 18000000) || (STM32_PLLCLKOUT > 72000000) -#error "STM32_PLLCLKOUT outside acceptable range (18...72MHz)" -#endif - -/** - * @brief System clock source. - */ -#if (STM32_SW == STM32_SW_PLL) || defined(__DOXYGEN__) -#define STM32_SYSCLK STM32_PLLCLKOUT -#elif (STM32_SW == STM32_SW_HSI) -#define STM32_SYSCLK STM32_HSICLK -#elif (STM32_SW == STM32_SW_HSE) -#define STM32_SYSCLK STM32_HSECLK -#else -#error "invalid STM32_SYSCLK_SW value specified" -#endif - -/* Check on the system clock.*/ -#if STM32_SYSCLK > 72000000 -#error "STM32_SYSCLK above maximum rated frequency (72MHz)" -#endif - -/** - * @brief AHB frequency. - */ -#if (STM32_HPRE == STM32_HPRE_DIV1) || defined(__DOXYGEN__) -#define STM32_HCLK (STM32_SYSCLK / 1) -#elif STM32_HPRE == STM32_HPRE_DIV2 -#define STM32_HCLK (STM32_SYSCLK / 2) -#elif STM32_HPRE == STM32_HPRE_DIV4 -#define STM32_HCLK (STM32_SYSCLK / 4) -#elif STM32_HPRE == STM32_HPRE_DIV8 -#define STM32_HCLK (STM32_SYSCLK / 8) -#elif STM32_HPRE == STM32_HPRE_DIV16 -#define STM32_HCLK (STM32_SYSCLK / 16) -#elif STM32_HPRE == STM32_HPRE_DIV64 -#define STM32_HCLK (STM32_SYSCLK / 64) -#elif STM32_HPRE == STM32_HPRE_DIV128 -#define STM32_HCLK (STM32_SYSCLK / 128) -#elif STM32_HPRE == STM32_HPRE_DIV256 -#define STM32_HCLK (STM32_SYSCLK / 256) -#elif STM32_HPRE == STM32_HPRE_DIV512 -#define STM32_HCLK (STM32_SYSCLK / 512) -#else -#error "invalid STM32_HPRE value specified" -#endif - -/* AHB frequency check.*/ -#if STM32_HCLK > 72000000 -#error "STM32_HCLK exceeding maximum frequency (72MHz)" -#endif - -/** - * @brief APB1 frequency. - */ -#if (STM32_PPRE1 == STM32_PPRE1_DIV1) || defined(__DOXYGEN__) -#define STM32_PCLK1 (STM32_HCLK / 1) -#elif STM32_PPRE1 == STM32_PPRE1_DIV2 -#define STM32_PCLK1 (STM32_HCLK / 2) -#elif STM32_PPRE1 == STM32_PPRE1_DIV4 -#define STM32_PCLK1 (STM32_HCLK / 4) -#elif STM32_PPRE1 == STM32_PPRE1_DIV8 -#define STM32_PCLK1 (STM32_HCLK / 8) -#elif STM32_PPRE1 == STM32_PPRE1_DIV16 -#define STM32_PCLK1 (STM32_HCLK / 16) -#else -#error "invalid STM32_PPRE1 value specified" -#endif - -/* APB1 frequency check.*/ -#if STM32_PCLK1 > 36000000 -#error "STM32_PCLK1 exceeding maximum frequency (36MHz)" -#endif - -/** - * @brief APB2 frequency. - */ -#if (STM32_PPRE2 == STM32_PPRE2_DIV1) || defined(__DOXYGEN__) -#define STM32_PCLK2 (STM32_HCLK / 1) -#elif STM32_PPRE2 == STM32_PPRE2_DIV2 -#define STM32_PCLK2 (STM32_HCLK / 2) -#elif STM32_PPRE2 == STM32_PPRE2_DIV4 -#define STM32_PCLK2 (STM32_HCLK / 4) -#elif STM32_PPRE2 == STM32_PPRE2_DIV8 -#define STM32_PCLK2 (STM32_HCLK / 8) -#elif STM32_PPRE2 == STM32_PPRE2_DIV16 -#define STM32_PCLK2 (STM32_HCLK / 16) -#else -#error "invalid STM32_PPRE2 value specified" -#endif - -/* APB2 frequency check.*/ -#if STM32_PCLK2 > 72000000 -#error "STM32_PCLK2 exceeding maximum frequency (72MHz)" -#endif - -/** - * @brief ADC frequency. - */ -#if (STM32_ADCPRE == STM32_ADCPRE_DIV2) || defined(__DOXYGEN__) -#define STM32_ADCCLK (STM32_PCLK2 / 2) -#elif STM32_ADCPRE == STM32_ADCPRE_DIV4 -#define STM32_ADCCLK (STM32_PCLK2 / 4) -#elif STM32_ADCPRE == STM32_ADCPRE_DIV6 -#define STM32_ADCCLK (STM32_PCLK2 / 6) -#elif STM32_ADCPRE == STM32_ADCPRE_DIV8 -#define STM32_ADCCLK (STM32_PCLK2 / 8) -#else -#error "invalid STM32_ADCPRE value specified" -#endif - -/* ADC frequency check.*/ -#if STM32_ADCCLK > 14000000 -#error "STM32_ADCCLK exceeding maximum frequency (14MHz)" -#endif - -/** - * @brief Timers 2, 3, 4, 5, 6, 7 clock. - */ -#if (STM32_PPRE1 == STM32_PPRE1_DIV1) || defined(__DOXYGEN__) -#define STM32_TIMCLK1 (STM32_PCLK1 * 1) -#else -#define STM32_TIMCLK1 (STM32_PCLK1 * 2) -#endif - -/** - * @brief Timer 1 clock. - */ -#if (STM32_PPRE2 == STM32_PPRE2_DIV1) || defined(__DOXYGEN__) -#define STM32_TIMCLK2 (STM32_PCLK2 * 1) -#else -#define STM32_TIMCLK2 (STM32_PCLK2 * 2) -#endif - -/** - * @brief Flash settings. - */ -#if (STM32_HCLK <= 24000000) || defined(__DOXYGEN__) -#define STM32_FLASHBITS 0x00000010 -#elif STM32_HCLK <= 48000000 -#define STM32_FLASHBITS 0x00000011 -#else -#define STM32_FLASHBITS 0x00000012 -#endif - -#endif /* _HAL_LLD_F105_F107_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/pal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/STM32/pal_lld.c deleted file mode 100644 index 34b205d..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/pal_lld.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/pal_lld.c - * @brief STM32 GPIO low level driver code. - * - * @addtogroup STM32_PAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -#if defined(STM32F10X_LD) -#define APB2_RST_MASK (RCC_APB2RSTR_IOPARST | RCC_APB2RSTR_IOPBRST | \ - RCC_APB2RSTR_IOPCRST | RCC_APB2RSTR_IOPDRST | \ - RCC_APB2RSTR_AFIORST) -#define APB2_EN_MASK (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | \ - RCC_APB2ENR_IOPCEN | RCC_APB2ENR_IOPDEN | \ - RCC_APB2ENR_AFIOEN) -#elif defined(STM32F10X_HD) -#define APB2_RST_MASK (RCC_APB2RSTR_IOPARST | RCC_APB2RSTR_IOPBRST | \ - RCC_APB2RSTR_IOPCRST | RCC_APB2RSTR_IOPDRST | \ - RCC_APB2RSTR_IOPERST | RCC_APB2RSTR_IOPFRST | \ - RCC_APB2RSTR_IOPGRST | RCC_APB2RSTR_AFIORST); -#define APB2_EN_MASK (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | \ - RCC_APB2ENR_IOPCEN | RCC_APB2ENR_IOPDEN | \ - RCC_APB2ENR_IOPEEN | RCC_APB2ENR_IOPFEN | \ - RCC_APB2ENR_IOPGEN | RCC_APB2ENR_AFIOEN) -#else - /* Defaults on Medium Density and Connection Line devices.*/ -#define APB2_RST_MASK (RCC_APB2RSTR_IOPARST | RCC_APB2RSTR_IOPBRST | \ - RCC_APB2RSTR_IOPCRST | RCC_APB2RSTR_IOPDRST | \ - RCC_APB2RSTR_IOPERST | RCC_APB2RSTR_AFIORST); -#define APB2_EN_MASK (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | \ - RCC_APB2ENR_IOPCEN | RCC_APB2ENR_IOPDEN | \ - RCC_APB2ENR_IOPEEN | RCC_APB2ENR_AFIOEN) -#endif - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief STM32 I/O ports configuration. - * @details Ports A-D(E, F, G) clocks enabled, AFIO clock enabled. - * - * @param[in] config the STM32 ports configuration - */ -void _pal_lld_init(const PALConfig *config) { - - /* - * Enables the GPIO related clocks. - */ - RCC->APB2ENR |= APB2_EN_MASK; - - /* - * Resets the GPIO ports and AFIO. - */ - RCC->APB2RSTR = APB2_RST_MASK; - RCC->APB2RSTR = 0; - - IOPORT1->ODR = config->PAData.odr; - IOPORT1->CRH = config->PAData.crh; - IOPORT1->CRL = config->PAData.crl; - IOPORT2->ODR = config->PBData.odr; - IOPORT2->CRH = config->PBData.crh; - IOPORT2->CRL = config->PBData.crl; - IOPORT3->ODR = config->PCData.odr; - IOPORT3->CRH = config->PCData.crh; - IOPORT3->CRL = config->PCData.crl; - IOPORT4->ODR = config->PDData.odr; - IOPORT4->CRH = config->PDData.crh; - IOPORT4->CRL = config->PDData.crl; -#if !(defined(STM32F10X_LD) || defined(CPU_WITH_NO_GPIOE)) || defined(__DOXYGEN__) - IOPORT5->ODR = config->PEData.odr; - IOPORT5->CRH = config->PEData.crh; - IOPORT5->CRL = config->PEData.crl; -#endif -#if defined(STM32F10X_HD) || defined(__DOXYGEN__) - IOPORT6->ODR = config->PFData.odr; - IOPORT6->CRH = config->PFData.crh; - IOPORT6->CRL = config->PFData.crl; - IOPORT7->ODR = config->PGData.odr; - IOPORT7->CRH = config->PGData.crh; - IOPORT7->CRL = config->PGData.crl; -#endif -} - -/** - * @brief Pads mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * @note This function is not meant to be invoked directly by the - * application code. - * @note @p PAL_MODE_UNCONNECTED is implemented as push pull output at 2MHz. - * @note Writing on pads programmed as pull-up or pull-down has the side - * effect to modify the resistor setting because the output latched - * data is used for the resistor selection. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - */ -void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode) { - static const uint8_t cfgtab[] = { - 4, /* PAL_MODE_RESET, implemented as input.*/ - 2, /* PAL_MODE_UNCONNECTED, implemented as push pull output 2MHz.*/ - 4, /* PAL_MODE_INPUT */ - 8, /* PAL_MODE_INPUT_PULLUP */ - 8, /* PAL_MODE_INPUT_PULLDOWN */ - 0, /* PAL_MODE_INPUT_ANALOG */ - 3, /* PAL_MODE_OUTPUT_PUSHPULL, 50MHz.*/ - 7, /* PAL_MODE_OUTPUT_OPENDRAIN, 50MHz.*/ - 8, /* Reserved.*/ - 8, /* Reserved.*/ - 8, /* Reserved.*/ - 8, /* Reserved.*/ - 8, /* Reserved.*/ - 8, /* Reserved.*/ - 8, /* Reserved.*/ - 8, /* Reserved.*/ - 0xB, /* PAL_MODE_STM32_ALTERNATE_PUSHPULL, 50MHz.*/ - 0xF, /* PAL_MODE_STM32_ALTERNATE_OPENDRAIN, 50MHz.*/ - }; - uint32_t mh, ml, crh, crl, cfg; - unsigned i; - - if (mode == PAL_MODE_INPUT_PULLUP) - port->BSRR = mask; - else if (mode == PAL_MODE_INPUT_PULLDOWN) - port->BRR = mask; - cfg = cfgtab[mode]; - mh = ml = crh = crl = 0; - for (i = 0; i < 8; i++) { - ml <<= 4; - mh <<= 4; - crl <<= 4; - crh <<= 4; - if ((mask & 0x0080) == 0) - ml |= 0xf; - else - crl |= cfg; - if ((mask & 0x8000) == 0) - mh |= 0xf; - else - crh |= cfg; - mask <<= 1; - } - port->CRH = (port->CRH & mh) | crh; - port->CRL = (port->CRL & ml) | crl; -} - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/pal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/pal_lld.h deleted file mode 100644 index 3cfec41..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/pal_lld.h +++ /dev/null @@ -1,316 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/pal_lld.h - * @brief STM32 GPIO low level driver header. - * - * @addtogroup STM32_PAL - * @{ - */ - -#ifndef _PAL_LLD_H_ -#define _PAL_LLD_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Unsupported modes and specific modes */ -/*===========================================================================*/ - -/** - * @brief STM32 specific alternate push-pull output mode. - */ -#define PAL_MODE_STM32_ALTERNATE_PUSHPULL 16 - -/** - * @brief STM32 specific alternate open-drain output mode. - */ -#define PAL_MODE_STM32_ALTERNATE_OPENDRAIN 17 - -/*===========================================================================*/ -/* I/O Ports Types and constants. */ -/*===========================================================================*/ - -/** - * @brief GPIO port setup info. - */ -typedef struct { - /** Initial value for ODR register.*/ - uint32_t odr; - /** Initial value for CRL register.*/ - uint32_t crl; - /** Initial value for CRH register.*/ - uint32_t crh; -} stm32_gpio_setup_t; - -/** - * @brief STM32 GPIO static initializer. - * @details An instance of this structure must be passed to @p palInit() at - * system startup time in order to initialize the digital I/O - * subsystem. This represents only the initial setup, specific pads - * or whole ports can be reprogrammed at later time. - */ -typedef struct { - /** @brief Port A setup data.*/ - stm32_gpio_setup_t PAData; - /** @brief Port B setup data.*/ - stm32_gpio_setup_t PBData; - /** @brief Port C setup data.*/ - stm32_gpio_setup_t PCData; - /** @brief Port D setup data.*/ - stm32_gpio_setup_t PDData; -#if !(defined(STM32F10X_LD) || defined(CPU_WITH_NO_GPIOE)) || defined(__DOXYGEN__) - /** @brief Port E setup data.*/ - stm32_gpio_setup_t PEData; -#endif -#if defined(STM32F10X_HD) || defined(__DOXYGEN__) - /** @brief Port F setup data.*/ - stm32_gpio_setup_t PFData; - /** @brief Port G setup data.*/ - stm32_gpio_setup_t PGData; -#endif -} PALConfig; - -/** - * @brief Width, in bits, of an I/O port. - */ -#define PAL_IOPORTS_WIDTH 16 - -/** - * @brief Whole port mask. - * @brief This macro specifies all the valid bits into a port. - */ -#define PAL_WHOLE_PORT ((ioportmask_t)0xFFFF) - -/** - * @brief Digital I/O port sized unsigned type. - */ -typedef uint32_t ioportmask_t; - -/** - * @brief Port Identifier. - * @details This type can be a scalar or some kind of pointer, do not make - * any assumption about it, use the provided macros when populating - * variables of this type. - */ -typedef GPIO_TypeDef * ioportid_t; - -/*===========================================================================*/ -/* I/O Ports Identifiers. */ -/* The low level driver wraps the definitions already present in the STM32 */ -/* firmware library. */ -/*===========================================================================*/ - -/** - * @brief GPIO port A identifier. - */ -#define IOPORT1 GPIOA - -/** - * @brief GPIO port B identifier. - */ -#define IOPORT2 GPIOB - -/** - * @brief GPIO port C identifier. - */ -#define IOPORT3 GPIOC - -/** - * @brief GPIO port D identifier. - */ -#define IOPORT4 GPIOD - -/** - * @brief GPIO port E identifier. - */ -#if !defined(STM32F10X_LD) || defined(__DOXYGEN__) -#define IOPORT5 GPIOE -#endif - -/** - * @brief GPIO port F identifier. - */ -#if defined(STM32F10X_HD) || defined(__DOXYGEN__) -#define IOPORT6 GPIOF - -/** - * @brief GPIO port G identifier. - */ -#define IOPORT7 GPIOG -#endif - -/*===========================================================================*/ -/* Implementation, some of the following macros could be implemented as */ -/* functions, please put them in a file named ioports_lld.c if so. */ -/*===========================================================================*/ - -/** - * @brief GPIO ports subsystem initialization. - */ -#define pal_lld_init(config) _pal_lld_init(config) - -/** - * @brief Reads an I/O port. - * @details This function is implemented by reading the GPIO IDR register, the - * implementation has no side effects. - * @note This function is not meant to be invoked directly by the application - * code. - * - * @param[in] port the port identifier - * @return The port bits. - */ -#define pal_lld_readport(port) ((port)->IDR) - -/** - * @brief Reads the output latch. - * @details This function is implemented by reading the GPIO ODR register, the - * implementation has no side effects. - * @note This function is not meant to be invoked directly by the application - * code. - * - * @param[in] port the port identifier - * @return The latched logical states. - */ -#define pal_lld_readlatch(port) ((port)->ODR) - -/** - * @brief Writes on a I/O port. - * @details This function is implemented by writing the GPIO ODR register, the - * implementation has no side effects. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Writing on pads programmed as pull-up or pull-down has the side - * effect to modify the resistor setting because the output latched - * data is used for the resistor selection. - * - * @param[in] port the port identifier - * @param[in] bits the bits to be written on the specified port - */ -#define pal_lld_writeport(port, bits) ((port)->ODR = (bits)) - -/** - * @brief Sets a bits mask on a I/O port. - * @details This function is implemented by writing the GPIO BSRR register, the - * implementation has no side effects. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Writing on pads programmed as pull-up or pull-down has the side - * effect to modify the resistor setting because the output latched - * data is used for the resistor selection. - * - * @param[in] port the port identifier - * @param[in] bits the bits to be ORed on the specified port - */ -#define pal_lld_setport(port, bits) ((port)->BSRR = (bits)) - -/** - * @brief Clears a bits mask on a I/O port. - * @details This function is implemented by writing the GPIO BRR register, the - * implementation has no side effects. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Writing on pads programmed as pull-up or pull-down has the side - * effect to modify the resistor setting because the output latched - * data is used for the resistor selection. - * - * @param[in] port the port identifier - * @param[in] bits the bits to be cleared on the specified port - */ -#define pal_lld_clearport(port, bits) ((port)->BRR = (bits)) - -/** - * @brief Writes a group of bits. - * @details This function is implemented by writing the GPIO BSRR register, the - * implementation has no side effects. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Writing on pads programmed as pull-up or pull-down has the side - * effect to modify the resistor setting because the output latched - * data is used for the resistor selection. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] offset the group bit offset within the port - * @param[in] bits the bits to be written. Values exceeding the group - * width are masked. - */ -#define pal_lld_writegroup(port, mask, offset, bits) { \ - (port)->BSRR = ((~(bits) & (mask)) << (16 + (offset))) | \ - (((bits) & (mask)) << (offset)); \ -} - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Writing on pads programmed as pull-up or pull-down has the side - * effect to modify the resistor setting because the output latched - * data is used for the resistor selection. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - */ -#define pal_lld_setgroupmode(port, mask, mode) \ - _pal_lld_setgroupmode(port, mask, mode) - -/** - * @brief Writes a logical state on an output pad. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Writing on pads programmed as pull-up or pull-down has the side - * effect to modify the resistor setting because the output latched - * data is used for the resistor selection. - * - * @param[in] port the port identifier - * @param[in] pad the pad number within the port - * @param[in] bit logical value, the value must be @p PAL_LOW or - * @p PAL_HIGH - */ -#define pal_lld_writepad(port, pad, bit) pal_lld_writegroup(port, 1, pad, bit) - -extern const PALConfig pal_default_config; - -#ifdef __cplusplus -extern "C" { -#endif - void _pal_lld_init(const PALConfig *config); - void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PAL */ - -#endif /* _PAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/platform.dox b/ChibiOS_2.0.8/os/hal/platforms/STM32/platform.dox deleted file mode 100644 index f59feb6..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/platform.dox +++ /dev/null @@ -1,150 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup STM32 STM32 Support - * @brief STM32 specific support. - * @details The STM32 support includes: - * - I/O ports driver. - * - Buffered, interrupt driven, serial driver. - * - Interrupt driver CAN driver. - * - DMA capable, high performance, ADC driver. - * - DMA capable, high performance, SPI driver. - * - PWM driver. - * - A demo supporting the kernel test suite. - * - A demo that demonstrate the FatFs use with the MMC driver. - * . - * @ingroup ARMCMx - */ - -/** - * @defgroup STM32_HAL STM32 HAL Support - * @brief HAL support. - * - * @ingroup STM32 - */ - -/** - * @defgroup STM32F103_HAL STM32F103 HAL Support - * @brief HAL support for STM32 LD, MD and HD families. - * - * @ingroup STM32_HAL - */ - -/** - * @defgroup STM32F10X_CL_HAL STM32F105/F107 HAL Support - * @brief HAL support for STM32 CL (Connectivity Line) family. - * - * @ingroup STM32_HAL - */ - -/** - * @defgroup STM32_PAL STM32 I/O Ports Support - * @brief I/O Ports peripherals support. - * @details This module supports the STM3 GPIO controller. The controller - * supports the following features (see @ref PAL): - * - 16 bits wide ports. - * - Atomic set/reset functions. - * - Atomic set+reset function (atomic bus operations). - * - Output latched regardless of the pad setting. - * - Direct read of input pads regardless of the pad setting. - * . - *

      Supported Setup Modes

      - * - @p PAL_MODE_RESET. - * - @p PAL_MODE_UNCONNECTED. - * - @p PAL_MODE_INPUT. - * - @p PAL_MODE_INPUT_PULLUP. - * - @p PAL_MODE_INPUT_PULLDOWN. - * - @p PAL_MODE_INPUT_ANALOG. - * - @p PAL_MODE_OUTPUT_PUSHPULL. - * - @p PAL_MODE_OUTPUT_OPENDRAIN. - * . - * Any attempt to setup an invalid mode is ignored. - * - *

      Suboptimal Behavior

      - * Some GPIO features are less than optimal: - * - Pad/port toggling operations are not atomic. - * - Pad/group mode setup is not atomic. - * - Writing on pads/groups/ports programmed as input with pull-up/down - * resistor can change the resistor setting because the output latch is - * used for resistor selection. - * . - * @ingroup STM32 - */ - -/** - * @defgroup STM32_SERIAL STM32 USART Support - * @brief USART peripherals support. - * @details The serial driver supports the STM32 USARTs in asynchronous - * mode. - * - * @ingroup STM32 - */ - -/** - * @defgroup STM32_DMA STM32 DMA Support - * @brief DMA support. - * @details The DMA helper driver allows to stop the DMA clock when no other - * driver requires its services. - * - * @ingroup STM32 - */ - -/** - * @defgroup STM32_ADC STM32 ADC Support - * @brief ADC peripherals support. - * @details The ADC driver supports the STM32 ADCs using DMA channels for - * improved performance. - * - * @ingroup STM32 - */ - -/** - * @defgroup STM32_CAN STM32 CAN Support - * @brief CAN peripheral support. - * @details The CAN driver supports the STM32 bxCAN unit. - * - * @ingroup STM32 - */ - - -/** - * @defgroup STM32_PWM STM32 PWM Support - * @brief TIMx peripherals as PWM generators support. - * @details The PWM driver supports the STM32 TIMx units as PWM generators. - * - * @ingroup STM32 - */ - -/** - * @defgroup STM32_SPI STM32 SPI Support - * @brief SPI peripherals support. - * @details The SPI driver supports the STM32 SPIs using DMA channels for - * improved performance. - * - * @ingroup STM32 - */ - diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/platform.mk b/ChibiOS_2.0.8/os/hal/platforms/STM32/platform.mk deleted file mode 100644 index 0caf2e6..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/platform.mk +++ /dev/null @@ -1,12 +0,0 @@ -# List of all the STM32 platform files. -PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/STM32/hal_lld.c \ - ${CHIBIOS}/os/hal/platforms/STM32/adc_lld.c \ - ${CHIBIOS}/os/hal/platforms/STM32/can_lld.c \ - ${CHIBIOS}/os/hal/platforms/STM32/pal_lld.c \ - ${CHIBIOS}/os/hal/platforms/STM32/pwm_lld.c \ - ${CHIBIOS}/os/hal/platforms/STM32/serial_lld.c \ - ${CHIBIOS}/os/hal/platforms/STM32/spi_lld.c \ - ${CHIBIOS}/os/hal/platforms/STM32/stm32_dma.c - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/platforms/STM32 diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/pwm_lld.c b/ChibiOS_2.0.8/os/hal/platforms/STM32/pwm_lld.c deleted file mode 100644 index 4c10f98..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/pwm_lld.c +++ /dev/null @@ -1,455 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/pwm_lld.c - * @brief STM32 PWM subsystem low level driver header. - * - * @addtogroup STM32_PWM - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PWM || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** - * @brief PWM1 driver identifier. - * @note The driver PWM1 allocates the complex timer TIM1 when enabled. - */ -#if defined(USE_STM32_PWM1) || defined(__DOXYGEN__) -PWMDriver PWMD1; -#endif - -/** - * @brief PWM2 driver identifier. - * @note The driver PWM2 allocates the timer TIM2 when enabled. - */ -#if defined(USE_STM32_PWM2) || defined(__DOXYGEN__) -PWMDriver PWMD2; -#endif - -/** - * @brief PWM3 driver identifier. - * @note The driver PWM3 allocates the timer TIM3 when enabled. - */ -#if defined(USE_STM32_PWM3) || defined(__DOXYGEN__) -PWMDriver PWMD3; -#endif - -/** - * @brief PWM4 driver identifier. - * @note The driver PWM4 allocates the timer TIM4 when enabled. - */ -#if defined(USE_STM32_PWM4) || defined(__DOXYGEN__) -PWMDriver PWMD4; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -#if USE_STM32_PWM2 || USE_STM32_PWM3 || USE_STM32_PWM4 || defined(__DOXYGEN__) -/** - * @brief Common TIM2...TIM4 IRQ handler. - * @note It is assumed that the various sources are only activated if the - * associated callback pointer is not equal to @p NULL in order to not - * perform an extra check in a potentially critical interrupt handler. - */ -static void serve_interrupt(PWMDriver *pwmp) { - uint16_t sr; - - sr = pwmp->pd_tim->SR & pwmp->pd_tim->DIER; - pwmp->pd_tim->SR = ~(TIM_SR_CC1IF | TIM_SR_CC2IF | TIM_SR_CC3IF | - TIM_SR_CC4IF | TIM_SR_UIF); - if ((sr & TIM_SR_CC1IF) != 0) - pwmp->pd_config->pc_channels[0].pcc_callback(pwmp); - if ((sr & TIM_SR_CC2IF) != 0) - pwmp->pd_config->pc_channels[1].pcc_callback(pwmp); - if ((sr & TIM_SR_CC3IF) != 0) - pwmp->pd_config->pc_channels[2].pcc_callback(pwmp); - if ((sr & TIM_SR_CC4IF) != 0) - pwmp->pd_config->pc_channels[3].pcc_callback(pwmp); - if ((sr & TIM_SR_UIF) != 0) - pwmp->pd_config->pc_callback(pwmp); -} -#endif /* USE_STM32_PWM2 || USE_STM32_PWM3 || USE_STM32_PWM4 */ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -#if USE_STM32_PWM1 -/** - * @brief TIM1 update interrupt handler. - * @note It is assumed that this interrupt is only activated if the callback - * pointer is not equal to @p NULL in order to not perform an extra - * check in a potentially critical interrupt handler. - */ -CH_IRQ_HANDLER(VectorA4) { - - CH_IRQ_PROLOGUE(); - - TIM1->SR = ~TIM_SR_UIF; - PWMD1.pd_config->pc_callback(&PWMD1); - - CH_IRQ_EPILOGUE(); -} - -/** - * @brief TIM1 compare interrupt handler. - * @note It is assumed that the various sources are only activated if the - * associated callback pointer is not equal to @p NULL in order to not - * perform an extra check in a potentially critical interrupt handler. - */ -CH_IRQ_HANDLER(VectorAC) { - uint16_t sr; - - CH_IRQ_PROLOGUE(); - - sr = TIM1->SR & TIM1->DIER; - TIM1->SR = ~(TIM_SR_CC1IF | TIM_SR_CC2IF | TIM_SR_CC3IF | TIM_SR_CC4IF); - if ((sr & TIM_SR_CC1IF) != 0) - PWMD1.pd_config->pc_channels[0].pcc_callback(&PWMD1); - if ((sr & TIM_SR_CC2IF) != 0) - PWMD1.pd_config->pc_channels[1].pcc_callback(&PWMD1); - if ((sr & TIM_SR_CC3IF) != 0) - PWMD1.pd_config->pc_channels[2].pcc_callback(&PWMD1); - if ((sr & TIM_SR_CC4IF) != 0) - PWMD1.pd_config->pc_channels[3].pcc_callback(&PWMD1); - - CH_IRQ_EPILOGUE(); -} -#endif /* USE_STM32_PWM1 */ - -#if USE_STM32_PWM2 -/** - * @brief TIM2 interrupt handler. - */ -CH_IRQ_HANDLER(VectorB0) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&PWMD2); - - CH_IRQ_EPILOGUE(); -} -#endif /* USE_STM32_PWM2 */ - -#if USE_STM32_PWM3 -/** - * @brief TIM3 interrupt handler. - */ -CH_IRQ_HANDLER(VectorB4) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&PWMD3); - - CH_IRQ_EPILOGUE(); -} -#endif /* USE_STM32_PWM3 */ - -#if USE_STM32_PWM4 -/** - * @brief TIM4 interrupt handler. - */ -CH_IRQ_HANDLER(VectorB8) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&PWMD4); - - CH_IRQ_EPILOGUE(); -} -#endif /* USE_STM32_PWM4 */ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level PWM driver initialization. - */ -void pwm_lld_init(void) { - -#if USE_STM32_PWM1 - /* TIM1 reset, ensures reset state in order to avoid trouble with JTAGs.*/ - RCC->APB2RSTR = RCC_APB2RSTR_TIM1RST; - RCC->APB2RSTR = 0; - - /* Driver initialization.*/ - pwmObjectInit(&PWMD1); - PWMD1.pd_enabled_channels = 0; - PWMD1.pd_tim = TIM1; -#endif - -#if USE_STM32_PWM2 - /* TIM2 reset, ensures reset state in order to avoid trouble with JTAGs.*/ - RCC->APB1RSTR = RCC_APB1RSTR_TIM2RST; - RCC->APB1RSTR = 0; - - /* Driver initialization.*/ - pwmObjectInit(&PWMD2); - PWMD2.pd_enabled_channels = 0; - PWMD2.pd_tim = TIM2; -#endif - -#if USE_STM32_PWM3 - /* TIM2 reset, ensures reset state in order to avoid trouble with JTAGs.*/ - RCC->APB1RSTR = RCC_APB1RSTR_TIM3RST; - RCC->APB1RSTR = 0; - - /* Driver initialization.*/ - pwmObjectInit(&PWMD3); - PWMD3.pd_enabled_channels = 0; - PWMD3.pd_tim = TIM3; -#endif - -#if USE_STM32_PWM4 - /* TIM2 reset, ensures reset state in order to avoid trouble with JTAGs.*/ - RCC->APB1RSTR = RCC_APB1RSTR_TIM4RST; - RCC->APB1RSTR = 0; - - /* Driver initialization.*/ - pwmObjectInit(&PWMD4); - PWMD4.pd_enabled_channels = 0; - PWMD4.pd_tim = TIM4; -#endif -} - -/** - * @brief Configures and activates the PWM peripheral. - * - * @param[in] pwmp pointer to a @p PWMDriver object - */ -void pwm_lld_start(PWMDriver *pwmp) { - uint16_t ccer; - - /* Reset channels.*/ - pwmp->pd_enabled_channels = 0; /* All channels disabled. */ - - if (pwmp->pd_state == PWM_STOP) { - /* Clock activation and timer reset.*/ -#if USE_STM32_PWM1 - if (&PWMD1 == pwmp) { - RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; - RCC->APB2RSTR = RCC_APB2RSTR_TIM1RST; - RCC->APB2RSTR = 0; - NVICEnableVector(TIM1_UP_IRQn, - CORTEX_PRIORITY_MASK(STM32_PWM1_IRQ_PRIORITY)); - NVICEnableVector(TIM1_CC_IRQn, - CORTEX_PRIORITY_MASK(STM32_PWM1_IRQ_PRIORITY)); - } -#endif -#if USE_STM32_PWM2 - if (&PWMD2 == pwmp) { - RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; - RCC->APB1RSTR = RCC_APB1RSTR_TIM2RST; - RCC->APB1RSTR = 0; - NVICEnableVector(TIM2_IRQn, - CORTEX_PRIORITY_MASK(STM32_PWM2_IRQ_PRIORITY)); - } -#endif -#if USE_STM32_PWM3 - if (&PWMD3 == pwmp) { - RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; - RCC->APB1RSTR = RCC_APB1RSTR_TIM3RST; - RCC->APB1RSTR = 0; - NVICEnableVector(TIM3_IRQn, - CORTEX_PRIORITY_MASK(STM32_PWM3_IRQ_PRIORITY)); - } -#endif -#if USE_STM32_PWM4 - if (&PWMD4 == pwmp) { - RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; - RCC->APB1RSTR = RCC_APB1RSTR_TIM4RST; - RCC->APB1RSTR = 0; - NVICEnableVector(TIM4_IRQn, - CORTEX_PRIORITY_MASK(STM32_PWM4_IRQ_PRIORITY)); - } -#endif - } - else { - /* Driver re-configuration scenario, it must be stopped first.*/ - /* Really required ?????????? */ - pwmp->pd_tim->CR1 = 0; /* Timer stopped. */ - pwmp->pd_tim->CR2 = 0; /* Timer stopped. */ - pwmp->pd_tim->SMCR = 0; /* Slave mode disabled. */ - pwmp->pd_tim->CCR1 = 0; /* Comparator 1 disabled. */ - pwmp->pd_tim->CCR2 = 0; /* Comparator 2 disabled. */ - pwmp->pd_tim->CCR3 = 0; /* Comparator 3 disabled. */ - pwmp->pd_tim->CCR4 = 0; /* Comparator 4 disabled. */ - pwmp->pd_tim->CNT = 0; - } - - /* Timer configuration.*/ - pwmp->pd_tim->CR2 = pwmp->pd_config->pc_cr2; - pwmp->pd_tim->PSC = pwmp->pd_config->pc_psc; - pwmp->pd_tim->ARR = pwmp->pd_config->pc_arr; - /* Output enables and polarities setup.*/ - ccer = 0; - switch (pwmp->pd_config->pc_channels[0].pcc_mode) { - case PWM_OUTPUT_ACTIVE_LOW: - ccer |= TIM_CCER_CC1P; - case PWM_OUTPUT_ACTIVE_HIGH: - ccer |= TIM_CCER_CC1E; - default: - ; - } - switch (pwmp->pd_config->pc_channels[1].pcc_mode) { - case PWM_OUTPUT_ACTIVE_LOW: - ccer |= TIM_CCER_CC2P; - case PWM_OUTPUT_ACTIVE_HIGH: - ccer |= TIM_CCER_CC2E; - default: - ; - } - switch (pwmp->pd_config->pc_channels[2].pcc_mode) { - case PWM_OUTPUT_ACTIVE_LOW: - ccer |= TIM_CCER_CC3P; - case PWM_OUTPUT_ACTIVE_HIGH: - ccer |= TIM_CCER_CC3E; - default: - ; - } - switch (pwmp->pd_config->pc_channels[3].pcc_mode) { - case PWM_OUTPUT_ACTIVE_LOW: - ccer |= TIM_CCER_CC4P; - case PWM_OUTPUT_ACTIVE_HIGH: - ccer |= TIM_CCER_CC4E; - default: - ; - } - pwmp->pd_tim->CCER = ccer; - pwmp->pd_tim->EGR = TIM_EGR_UG; /* Update event. */ - pwmp->pd_tim->SR = 0; /* Clear pending IRQs. */ - pwmp->pd_tim->DIER = pwmp->pd_config->pc_callback == NULL ? 0 : TIM_DIER_UIE; - pwmp->pd_tim->BDTR = TIM_BDTR_MOE; - /* Timer configured and started.*/ - pwmp->pd_tim->CR1 = TIM_CR1_ARPE | TIM_CR1_URS | TIM_CR1_CEN; -} - -/** - * @brief Deactivates the PWM peripheral. - * - * @param[in] pwmp pointer to a @p PWMDriver object - */ -void pwm_lld_stop(PWMDriver *pwmp) { - /* If in ready state then disables the PWM clock.*/ - if (pwmp->pd_state == PWM_READY) { - pwmp->pd_enabled_channels = 0; /* All channels disabled. */ - pwmp->pd_tim->CR1 = 0; - pwmp->pd_tim->CR2 = 0; - pwmp->pd_tim->CCER = 0; /* Outputs disabled. */ - pwmp->pd_tim->CCR1 = 0; /* Comparator 1 disabled. */ - pwmp->pd_tim->CCR2 = 0; /* Comparator 2 disabled. */ - pwmp->pd_tim->CCR3 = 0; /* Comparator 3 disabled. */ - pwmp->pd_tim->CCR4 = 0; /* Comparator 4 disabled. */ - pwmp->pd_tim->BDTR = 0; - pwmp->pd_tim->DIER = 0; - pwmp->pd_tim->SR = 0; - pwmp->pd_tim->EGR = TIM_EGR_UG; /* Update event. */ - -#if USE_STM32_PWM1 - if (&PWMD1 == pwmp) { - NVICDisableVector(TIM1_UP_IRQn); - NVICDisableVector(TIM1_CC_IRQn); - RCC->APB2ENR &= ~RCC_APB2ENR_TIM1EN; - } -#endif -#if USE_STM32_PWM2 - if (&PWMD2 == pwmp) { - NVICDisableVector(TIM2_IRQn); - RCC->APB1ENR &= ~RCC_APB1ENR_TIM2EN; - } -#endif -#if USE_STM32_PWM3 - if (&PWMD3 == pwmp) { - NVICDisableVector(TIM3_IRQn); - RCC->APB1ENR &= ~RCC_APB1ENR_TIM3EN; - } -#endif -#if USE_STM32_PWM4 - if (&PWMD4 == pwmp) { - NVICDisableVector(TIM4_IRQn); - RCC->APB1ENR &= ~RCC_APB1ENR_TIM4EN; - } -#endif - } -} - -/** - * @brief Enables a PWM channel. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] channel PWM channel identifier (0...PWM_CHANNELS-1) - * @param[in] width PWM pulse width as clock pulses number - */ -void pwm_lld_enable_channel(PWMDriver *pwmp, - pwmchannel_t channel, - pwmcnt_t width) { - - *(&pwmp->pd_tim->CCR1 + (channel * 2)) = width; /* New duty cycle. */ - if ((pwmp->pd_enabled_channels & (1 << channel)) == 0) { - /* The channel is not enabled yet.*/ - pwmp->pd_enabled_channels |= (1 << channel); - /* If there is a callback associated to the channel then the proper - interrupt is cleared and enabled.*/ - if (pwmp->pd_config->pc_channels[channel].pcc_callback) { - pwmp->pd_tim->SR = ~(2 << channel); - pwmp->pd_tim->DIER |= (2 << channel); - } - } -} - -/** - * @brief Disables a PWM channel. - * @details The channel is disabled and its output line returned to the - * idle state. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] channel PWM channel identifier (0...PWM_CHANNELS-1) - */ -void pwm_lld_disable_channel(PWMDriver *pwmp, pwmchannel_t channel) { - - *(&pwmp->pd_tim->CCR1 + (channel * 2)) = 0; - pwmp->pd_tim->DIER &= ~(2 << channel); - pwmp->pd_enabled_channels &= ~(1 << channel); -} - -#endif /* CH_HAL_USE_PWM */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/pwm_lld.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/pwm_lld.h deleted file mode 100644 index f0842d6..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/pwm_lld.h +++ /dev/null @@ -1,347 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -/** - * @file STM32/pwm_lld.h - * @brief STM32 PWM subsystem low level driver header. - * - * @addtogroup PWM - * @{ - */ - -#ifndef _PWM_LLD_H_ -#define _PWM_LLD_H_ - -#if CH_HAL_USE_PWM || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Number of PWM channels per PWM driver. - */ -#define PWM_CHANNELS 4 - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief PWM1 driver enable switch. - * @details If set to @p TRUE the support for PWM1 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM32_PWM1) || defined(__DOXYGEN__) -#define USE_STM32_PWM1 TRUE -#endif - -/** - * @brief PWM2 driver enable switch. - * @details If set to @p TRUE the support for PWM2 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM32_PWM2) || defined(__DOXYGEN__) -#define USE_STM32_PWM2 TRUE -#endif - -/** - * @brief PWM3 driver enable switch. - * @details If set to @p TRUE the support for PWM3 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM32_PWM3) || defined(__DOXYGEN__) -#define USE_STM32_PWM3 TRUE -#endif - -/** - * @brief PWM4 driver enable switch. - * @details If set to @p TRUE the support for PWM4 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM32_PWM4) || defined(__DOXYGEN__) -#define USE_STM32_PWM4 TRUE -#endif - -/** - * @brief PWM1 interrupt priority level setting. - */ -#if !defined(STM32_PWM1_IRQ_PRIORITY) || defined(__DOXYGEN__) -#define STM32_PWM1_IRQ_PRIORITY 7 -#endif - -/** - * @brief PWM2 interrupt priority level setting. - */ -#if !defined(STM32_PWM2_IRQ_PRIORITY) || defined(__DOXYGEN__) -#define STM32_PWM2_IRQ_PRIORITY 7 -#endif - -/** - * @brief PWM3 interrupt priority level setting. - */ -#if !defined(STM32_PWM3_IRQ_PRIORITY) || defined(__DOXYGEN__) -#define STM32_PWM3_IRQ_PRIORITY 7 -#endif - -/** - * @brief PWM4 interrupt priority level setting. - */ -#if !defined(STM32_PWM4_IRQ_PRIORITY) || defined(__DOXYGEN__) -#define STM32_PWM4_IRQ_PRIORITY 7 -#endif - -/*===========================================================================*/ -/* Configuration checks. */ -/*===========================================================================*/ - -#if USE_STM32_PWM4 && defined(STM32F10X_LD) -#error "TIM4 not present in low density STM32 devices" -#endif - -#if !USE_STM32_PWM1 && !USE_STM32_PWM2 && \ - !USE_STM32_PWM3 && !USE_STM32_PWM4 -#error "PWM driver activated but no TIM peripheral assigned" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief PWM channel type. - */ -typedef uint8_t pwmchannel_t; - -/** - * @brief PWM counter type. - */ -typedef uint16_t pwmcnt_t; - -/** - * @brief Type of a structure representing an PWM driver. - */ -typedef struct PWMDriver PWMDriver; - -/** - * @brief PWM notification callback type. - * - * @param[in] pwmp pointer to a @p PWMDriver object - */ -typedef void (*pwmcallback_t)(PWMDriver *pwmp); - -/** - * @brief PWM driver channel configuration structure. - */ -typedef struct { - /** - * @brief Channel active logic level. - */ - pwmmode_t pcc_mode; - /** - * @brief Channel callback pointer. - * @note This callback is invoked on the channel compare event. If set to - * @p NULL then the callback is disabled. - */ - pwmcallback_t pcc_callback; - /* End of the mandatory fields.*/ -} PWMChannelConfig; - -/** - * @brief PWM driver configuration structure. - */ -typedef struct { - /** - * @brief Periodic callback pointer. - * @note This callback is invoked on PWM counter reset. If set to - * @p NULL then the callback is disabled. - */ - pwmcallback_t pc_callback; - /** - * @brief Channels configurations. - */ - PWMChannelConfig pc_channels[PWM_CHANNELS]; - /* End of the mandatory fields.*/ - /** - * @brief TIM PSC (pre-scaler) register initialization data. - */ - uint16_t pc_psc; - /** - * @brief TIM ARR (auto-reload) register initialization data. - */ - uint16_t pc_arr; - /** - * @brief TIM CR2 register initialization data. - * @note The value of this field should normally be equal to zero. - */ - uint16_t pc_cr2; -} PWMConfig; - -/** - * @brief Structure representing a PWM driver. - */ -struct PWMDriver { - /** - * @brief Driver state. - */ - pwmstate_t pd_state; - /** - * @brief Current driver configuration data. - */ - const PWMConfig *pd_config; -#if defined(PWM_DRIVER_EXT_FIELDS) - PWM_DRIVER_EXT_FIELDS -#endif - /* End of the mandatory fields.*/ - /** - * @brief Bit mask of the enabled channels. - */ - uint32_t pd_enabled_channels; - /** - * @brief Pointer to the TIMx registers block. - */ - TIM_TypeDef *pd_tim; -}; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief PWM clock prescaler initialization utility. - * @note The real clock value is rounded to the lower valid value, please - * make sure that the source clock frequency is a multiple of the - * requested PWM clock frequency. - * @note The calculated value must fit into an unsigned 16 bits integer. - * - * @param[in] clksrc clock source frequency, depending on the target timer - * cell it can be one of: - * - STM32_TIMCLK1 - * - STM32_TIMCLK2 - * . - * Please refer to the STM32 HAL driver documentation - * and/or the STM32 Reference Manual for the right clock - * source. - * @param[in] pwmclk PWM clock frequency in cycles - * @return The value to be stored in the @p pc_psc field of the - * @p PWMConfig structure. - */ -#define PWM_COMPUTE_PSC(clksrc, pwmclk) \ - ((uint16_t)(((clksrc) / (pwmclk)) - 1)) - -/** - * @brief PWM cycle period initialization utility. - * @note The calculated value must fit into an unsigned 16 bits integer. - * - * @param[in] pwmclk PWM clock frequency in cycles - * @param[in] pwmperiod PWM cycle period in nanoseconds - * @return The value to be stored in the @p pc_arr field of the - * @p PWMConfig structure. - */ -#define PWM_COMPUTE_ARR(pwmclk, pwmperiod) \ - ((uint16_t)(((pwmclk) / (1000000000 / (pwmperiod))) - 1)) - -/** - * @brief Converts from fraction to pulse width. - * @note Be careful with rounding errors, this is integer math not magic. - * You can specify tenths of thousandth but make sure you have the - * proper hardware resolution by carefully choosing the clock source - * and prescaler settings, see @p PWM_COMPUTE_PSC. - * - * @param[in] numerator numerator of the fraction - * @param[in] denominator percentage as an integer between 0 and numerator - * @return The pulse width to be passed to @p pwmEnableChannel(). - * - * @api - */ -#define PWM_FRACTION_TO_WIDTH(pwmp, numerator, denominator) \ - ((uint16_t)((((uint32_t)(pwmp)->pd_config->pc_arr + 1UL) * \ - (uint32_t)(denominator)) / (uint32_t)(numerator))) - -/** - * @brief Converts from degrees to pulse width. - * @note Be careful with rounding errors, this is integer math not magic. - * You can specify hundredths of degrees but make sure you have the - * proper hardware resolution by carefully choosing the clock source - * and prescaler settings, see @p PWM_COMPUTE_PSC. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] degrees degrees as an integer between 0 and 36000 - * @return The pulse width to be passed to @p pwmEnableChannel(). - * - * @api - */ -#define PWM_DEGREES_TO_WIDTH(pwmp, degrees) \ - PWM_FRACTION_TO_WIDTH(pwmp, 36000, degrees) - -/** - * @brief Converts from percentage to pulse width. - * @note Be careful with rounding errors, this is integer math not magic. - * You can specify tenths of thousandth but make sure you have the - * proper hardware resolution by carefully choosing the clock source - * and prescaler settings, see @p PWM_COMPUTE_PSC. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] percentage percentage as an integer between 0 and 10000 - * @return The pulse width to be passed to @p pwmEnableChannel(). - * - * @api - */ -#define PWM_PERCENTAGE_TO_WIDTH(pwmp, percentage) \ - PWM_FRACTION_TO_WIDTH(pwmp, 10000, percentage) - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if defined(USE_STM32_PWM1) && !defined(__DOXYGEN__) -extern PWMDriver PWMD1; -#endif - -#if defined(USE_STM32_PWM2) && !defined(__DOXYGEN__) -extern PWMDriver PWMD2; -#endif - -#if defined(USE_STM32_PWM3) && !defined(__DOXYGEN__) -extern PWMDriver PWMD3; -#endif - -#if defined(USE_STM32_PWM4) && !defined(__DOXYGEN__) -extern PWMDriver PWMD4; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void pwm_lld_init(void); - void pwm_lld_start(PWMDriver *pwmp); - void pwm_lld_stop(PWMDriver *pwmp); - void pwm_lld_enable_channel(PWMDriver *pwmp, - pwmchannel_t channel, - pwmcnt_t width); - void pwm_lld_disable_channel(PWMDriver *pwmp, pwmchannel_t channel); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PWM */ - -#endif /* _PWM_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/STM32/serial_lld.c deleted file mode 100644 index 99aebf9..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/serial_lld.c +++ /dev/null @@ -1,433 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/serial_lld.c - * @brief STM32 low level serial driver code. - * - * @addtogroup STM32_SERIAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** @brief USART1 serial driver identifier.*/ -#if USE_STM32_USART1 || defined(__DOXYGEN__) -SerialDriver SD1; -#endif - -/** @brief USART2 serial driver identifier.*/ -#if USE_STM32_USART2 || defined(__DOXYGEN__) -SerialDriver SD2; -#endif - -/** @brief USART3 serial driver identifier.*/ -#if USE_STM32_USART3 || defined(__DOXYGEN__) -SerialDriver SD3; -#endif - -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) || defined(__DOXYGEN__) -/** @brief UART4 serial driver identifier.*/ -#if USE_STM32_UART4 || defined(__DOXYGEN__) -SerialDriver SD4; -#endif - -/** @brief UART5 serial driver identifier.*/ -#if USE_STM32_UART5 || defined(__DOXYGEN__) -SerialDriver SD5; -#endif -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** @brief Driver default configuration.*/ -static const SerialConfig default_config = -{ - SERIAL_DEFAULT_BITRATE, - 0, - USART_CR2_STOP1_BITS | USART_CR2_LINEN, - 0 -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/** - * @brief USART initialization. - * @details This function must be invoked with interrupts disabled. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration - */ -static void usart_init(SerialDriver *sdp, const SerialConfig *config) { - USART_TypeDef *u = sdp->usart; - - /* - * Baud rate setting. - */ - if (sdp->usart == USART1) - u->BRR = STM32_PCLK2 / config->sc_speed; - else - u->BRR = STM32_PCLK1 / config->sc_speed; - - /* - * Note that some bits are enforced. - */ - u->CR1 = config->sc_cr1 | USART_CR1_UE | USART_CR1_PEIE | - USART_CR1_RXNEIE | USART_CR1_TE | - USART_CR1_RE; - u->CR2 = config->sc_cr2 | USART_CR2_LBDIE; - u->CR3 = config->sc_cr3 | USART_CR3_EIE; - (void)u->SR; /* SR reset step 1.*/ - (void)u->DR; /* SR reset step 2.*/ -} - -/** - * @brief USART de-initialization. - * @details This function must be invoked with interrupts disabled. - * - * @param[in] u pointer to an USART I/O block - */ -static void usart_deinit(USART_TypeDef *u) { - - u->CR1 = 0; - u->CR2 = 0; - u->CR3 = 0; -} - -/** - * @brief Error handling routine. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] sr USART SR register value - */ -static void set_error(SerialDriver *sdp, uint16_t sr) { - sdflags_t sts = 0; - - if (sr & USART_SR_ORE) - sts |= SD_OVERRUN_ERROR; - if (sr & USART_SR_PE) - sts |= SD_PARITY_ERROR; - if (sr & USART_SR_FE) - sts |= SD_FRAMING_ERROR; - if (sr & USART_SR_NE) - sts |= SD_NOISE_ERROR; - if (sr & USART_SR_LBD) - sts |= SD_BREAK_DETECTED; - chSysLockFromIsr(); - sdAddFlagsI(sdp, sts); - chSysUnlockFromIsr(); -} - -/** - * @brief Common IRQ handler. - * - * @param[in] sdp communication channel associated to the USART - */ -static void serve_interrupt(SerialDriver *sdp) { - USART_TypeDef *u = sdp->usart; - uint16_t cr1 = u->CR1; - uint16_t sr = u->SR; /* SR reset step 1.*/ - uint16_t dr = u->DR; /* SR reset step 2.*/ - - if (sr & (USART_SR_LBD | USART_SR_ORE | USART_SR_NE | - USART_SR_FE | USART_SR_PE)) { - set_error(sdp, sr); - u->SR = 0; /* Clears the LBD bit in the SR.*/ - } - if (sr & USART_SR_RXNE) { - chSysLockFromIsr(); - sdIncomingDataI(sdp, (uint8_t)dr); - chSysUnlockFromIsr(); - } - if ((cr1 & USART_CR1_TXEIE) && (sr & USART_SR_TXE)) { - msg_t b; - chSysLockFromIsr(); - b = chOQGetI(&sdp->oqueue); - if (b < Q_OK) { - chEvtBroadcastI(&sdp->oevent); - u->CR1 = cr1 & ~USART_CR1_TXEIE; - } - else - u->DR = b; - chSysUnlockFromIsr(); - } -} - -#if USE_STM32_USART1 || defined(__DOXYGEN__) -static void notify1(void) { - - USART1->CR1 |= USART_CR1_TXEIE; -} -#endif - -#if USE_STM32_USART2 || defined(__DOXYGEN__) -static void notify2(void) { - - USART2->CR1 |= USART_CR1_TXEIE; -} -#endif - -#if USE_STM32_USART3 || defined(__DOXYGEN__) -static void notify3(void) { - - USART3->CR1 |= USART_CR1_TXEIE; -} -#endif - -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) || defined(__DOXYGEN__) -#if USE_STM32_UART4 || defined(__DOXYGEN__) -static void notify4(void) { - - UART4->CR1 |= USART_CR1_TXEIE; -} -#endif - -#if USE_STM32_UART5 || defined(__DOXYGEN__) -static void notify5(void) { - - UART5->CR1 |= USART_CR1_TXEIE; -} -#endif -#endif - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -#if USE_STM32_USART1 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(VectorD4) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD1); - - CH_IRQ_EPILOGUE(); -} -#endif - -#if USE_STM32_USART2 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(VectorD8) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD2); - - CH_IRQ_EPILOGUE(); -} -#endif - -#if USE_STM32_USART3 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(VectorDC) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD3); - - CH_IRQ_EPILOGUE(); -} -#endif - -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) || defined(__DOXYGEN__) -#if USE_STM32_UART4 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(Vector110) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD4); - - CH_IRQ_EPILOGUE(); -} -#endif - -#if USE_STM32_UART5 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(Vector114) { - - CH_IRQ_PROLOGUE(); - - serve_interrupt(&SD5); - - CH_IRQ_EPILOGUE(); -} -#endif -#endif - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_STM32_USART1 - sdObjectInit(&SD1, NULL, notify1); - SD1.usart = USART1; -#endif - -#if USE_STM32_USART2 - sdObjectInit(&SD2, NULL, notify2); - SD2.usart = USART2; -#endif - -#if USE_STM32_USART3 - sdObjectInit(&SD3, NULL, notify3); - SD3.usart = USART3; -#endif - -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#if USE_STM32_UART4 - sdObjectInit(&SD4, NULL, notify4); - SD4.usart = UART4; -#endif - -#if USE_STM32_UART5 - sdObjectInit(&SD5, NULL, notify5); - SD5.usart = UART5; -#endif -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - - if (sdp->state == SD_STOP) { -#if USE_STM32_USART1 - if (&SD1 == sdp) { - RCC->APB2ENR |= RCC_APB2ENR_USART1EN; - NVICEnableVector(USART1_IRQn, - CORTEX_PRIORITY_MASK(STM32_USART1_PRIORITY)); - } -#endif -#if USE_STM32_USART2 - if (&SD2 == sdp) { - RCC->APB1ENR |= RCC_APB1ENR_USART2EN; - NVICEnableVector(USART2_IRQn, - CORTEX_PRIORITY_MASK(STM32_USART2_PRIORITY)); - } -#endif -#if USE_STM32_USART3 - if (&SD3 == sdp) { - RCC->APB1ENR |= RCC_APB1ENR_USART3EN; - NVICEnableVector(USART3_IRQn, - CORTEX_PRIORITY_MASK(STM32_USART3_PRIORITY)); - } -#endif -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#if USE_STM32_UART4 - if (&SD4 == sdp) { - RCC->APB1ENR |= RCC_APB1ENR_UART4EN; - NVICEnableVector(UART4_IRQn, - CORTEX_PRIORITY_MASK(STM32_UART4_PRIORITY)); - } -#endif -#if USE_STM32_UART5 - if (&SD5 == sdp) { - RCC->APB1ENR |= RCC_APB1ENR_UART5EN; - NVICEnableVector(UART5_IRQn, - CORTEX_PRIORITY_MASK(STM32_UART5_PRIORITY)); - } -#endif -#endif - } - usart_init(sdp, config); -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the USART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - - if (sdp->state == SD_READY) { - usart_deinit(sdp->usart); -#if USE_STM32_USART1 - if (&SD1 == sdp) { - RCC->APB2ENR &= ~RCC_APB2ENR_USART1EN; - NVICDisableVector(USART1_IRQn); - return; - } -#endif -#if USE_STM32_USART2 - if (&SD2 == sdp) { - RCC->APB1ENR &= ~RCC_APB1ENR_USART2EN; - NVICDisableVector(USART2_IRQn); - return; - } -#endif -#if USE_STM32_USART3 - if (&SD3 == sdp) { - RCC->APB1ENR &= ~RCC_APB1ENR_USART3EN; - NVICDisableVector(USART3_IRQn); - return; - } -#endif -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#if USE_STM32_UART4 - if (&SD4 == sdp) { - RCC->APB1ENR &= ~RCC_APB1ENR_UART4EN; - NVICDisableVector(UART4_IRQn); - return; - } -#endif -#if USE_STM32_UART5 - if (&SD5 == sdp) { - RCC->APB1ENR &= ~RCC_APB1ENR_UART5EN; - NVICDisableVector(UART5_IRQn); - return; - } -#endif -#endif - } -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/serial_lld.h deleted file mode 100644 index 44bb40f..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/serial_lld.h +++ /dev/null @@ -1,244 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/serial_lld.h - * @brief STM32 low level serial driver header. - * - * @addtogroup STM32_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief USART1 driver enable switch. - * @details If set to @p TRUE the support for USART1 is included. - * @note The default is @p FALSE. - */ -#if !defined(USE_STM32_USART1) || defined(__DOXYGEN__) -#define USE_STM32_USART1 TRUE -#endif - -/** - * @brief USART2 driver enable switch. - * @details If set to @p TRUE the support for USART2 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM32_USART2) || defined(__DOXYGEN__) -#define USE_STM32_USART2 TRUE -#endif - -/** - * @brief USART3 driver enable switch. - * @details If set to @p TRUE the support for USART3 is included. - * @note The default is @p FALSE. - */ -#if !defined(USE_STM32_USART3) || defined(__DOXYGEN__) -#define USE_STM32_USART3 TRUE -#endif - - -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) || defined(__DOXYGEN__) -/** - * @brief UART4 driver enable switch. - * @details If set to @p TRUE the support for UART4 is included. - * @note The default is @p FALSE. - */ -#if !defined(USE_STM32_UART4) || defined(__DOXYGEN__) -#define USE_STM32_UART4 TRUE -#endif - -/** - * @brief UART5 driver enable switch. - * @details If set to @p TRUE the support for UART5 is included. - * @note The default is @p FALSE. - */ -#if !defined(USE_STM32_UART5) || defined(__DOXYGEN__) -#define USE_STM32_UART5 TRUE -#endif -#endif - -/** - * @brief USART1 interrupt priority level setting. - */ -#if !defined(STM32_USART1_PRIORITY) || defined(__DOXYGEN__) -#define STM32_USART1_PRIORITY 12 -#endif - -/** - * @brief USART2 interrupt priority level setting. - */ -#if !defined(STM32_USART2_PRIORITY) || defined(__DOXYGEN__) -#define STM32_USART2_PRIORITY 12) -#endif - -/** - * @brief USART3 interrupt priority level setting. - */ -#if !defined(STM32_USART3_PRIORITY) || defined(__DOXYGEN__) -#define STM32_USART3_PRIORITY 12 -#endif - -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) || defined(__DOXYGEN__) -/** - * @brief UART4 interrupt priority level setting. - */ -#if !defined(STM32_UART4_PRIORITY) || defined(__DOXYGEN__) -#define STM32_UART4_PRIORITY 12 -#endif - -/** - * @brief UART5 interrupt priority level setting. - */ -#if !defined(STM32_UART5_PRIORITY) || defined(__DOXYGEN__) -#define STM32_UART5_PRIORITY 12 -#endif -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint32_t sdflags_t; - -/** - * @brief STM32 Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - * @note This structure content is architecture dependent, each driver - * implementation defines its own version and the custom static - * initializers. - */ -typedef struct { - /** - * @brief Bit rate. - */ - uint32_t sc_speed; - /** - * @brief Initialization value for the CR1 register. - */ - uint16_t sc_cr1; - /** - * @brief Initialization value for the CR2 register. - */ - uint16_t sc_cr2; - /** - * @brief Initialization value for the CR3 register. - */ - uint16_t sc_cr3; -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ \ - /* Pointer to the USART registers block.*/ \ - USART_TypeDef *usart; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/* - * Extra USARTs definitions here (missing from the ST header file). - */ -#define USART_CR2_STOP1_BITS (0 << 12) /**< @brief CR2 1 stop bit value.*/ -#define USART_CR2_STOP0P5_BITS (1 << 12) /**< @brief CR2 0.5 stop bit value.*/ -#define USART_CR2_STOP2_BITS (2 << 12) /**< @brief CR2 2 stop bit value.*/ -#define USART_CR2_STOP1P5_BITS (3 << 12) /**< @brief CR2 1.5 stop bit value.*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_STM32_USART1 && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif -#if USE_STM32_USART2 && !defined(__DOXYGEN__) -extern SerialDriver SD2; -#endif -#if USE_STM32_USART3 && !defined(__DOXYGEN__) -extern SerialDriver SD3; -#endif -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#if USE_STM32_UART4 && !defined(__DOXYGEN__) -extern SerialDriver SD4; -#endif -#if USE_STM32_UART5 && !defined(__DOXYGEN__) -extern SerialDriver SD5; -#endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/spi_lld.c b/ChibiOS_2.0.8/os/hal/platforms/STM32/spi_lld.c deleted file mode 100644 index b6208c6..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/spi_lld.c +++ /dev/null @@ -1,377 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/spi_lld.c - * @brief STM32 SPI subsystem low level driver source. - * @addtogroup STM32_SPI - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SPI || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** @brief SPI1 driver identifier.*/ -#if USE_STM32_SPI1 || defined(__DOXYGEN__) -SPIDriver SPID1; -#endif - -/** @brief SPI2 driver identifier.*/ -#if USE_STM32_SPI2 || defined(__DOXYGEN__) -SPIDriver SPID2; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -static uint16_t dummyrx; -static uint16_t dummytx; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -static void spi_stop(SPIDriver *spip) { - - /* Stops RX and TX DMA channels.*/ - spip->spd_dmarx->CCR = 0; - spip->spd_dmatx->CCR = 0; - - /* Stops SPI operations.*/ - spip->spd_spi->CR1 &= ~SPI_CR1_SPE; - - chSysLockFromIsr(); - chSchReadyI(spip->spd_thread); - chSysUnlockFromIsr(); -} - -static void spi_start_wait(SPIDriver *spip, size_t n, - const void *txbuf, void *rxbuf) { - uint32_t ccr; - - /* Common DMA setup.*/ - ccr = spip->spd_dmaprio; - if ((spip->spd_config->spc_cr1 & SPI_CR1_DFF) != 0) - ccr |= DMA_CCR1_MSIZE_0 | DMA_CCR1_PSIZE_0; /* 16 bits transfer.*/ - - /* RX DMA setup.*/ - spip->spd_dmarx->CMAR = (uint32_t)rxbuf; - spip->spd_dmarx->CNDTR = (uint32_t)n; - spip->spd_dmarx->CCR |= ccr; - - /* TX DMA setup.*/ - spip->spd_dmatx->CMAR = (uint32_t)txbuf; - spip->spd_dmatx->CNDTR = (uint32_t)n; - spip->spd_dmatx->CCR |= ccr; - - /* SPI enable.*/ - chSysLock(); - spip->spd_spi->CR1 |= SPI_CR1_SPE; - - /* DMAs start.*/ - spip->spd_dmarx->CCR |= DMA_CCR1_EN; - spip->spd_dmatx->CCR |= DMA_CCR1_EN; - - /* Wait for completion event.*/ - spip->spd_thread = currp; - chSchGoSleepS(THD_STATE_SUSPENDED); - spip->spd_thread = NULL; - chSysUnlock(); -} - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -#if USE_STM32_SPI1 || defined(__DOXYGEN__) -/** - * @brief SPI1 RX DMA interrupt handler (channel 2). - */ -CH_IRQ_HANDLER(Vector70) { - - CH_IRQ_PROLOGUE(); - - spi_stop(&SPID1); - if ((DMA1->ISR & DMA_ISR_TEIF2) != 0) { - STM32_SPI1_DMA_ERROR_HOOK(); - } - DMA1->IFCR |= DMA_IFCR_CGIF2 | DMA_IFCR_CTCIF2 | - DMA_IFCR_CHTIF2 | DMA_IFCR_CTEIF2; - - CH_IRQ_EPILOGUE(); -} - -/** - * @brief SPI1 TX DMA interrupt handler (channel 3). - */ -CH_IRQ_HANDLER(Vector74) { - - CH_IRQ_PROLOGUE(); - - STM32_SPI1_DMA_ERROR_HOOK(); - DMA1->IFCR |= DMA_IFCR_CGIF3 | DMA_IFCR_CTCIF3 | - DMA_IFCR_CHTIF3 | DMA_IFCR_CTEIF3; - - CH_IRQ_EPILOGUE(); -} -#endif - -#if USE_STM32_SPI2 || defined(__DOXYGEN__) -/** - * @brief SPI2 RX DMA interrupt handler (channel 4). - */ -CH_IRQ_HANDLER(Vector78) { - - CH_IRQ_PROLOGUE(); - - spi_stop(&SPID2); - if ((DMA1->ISR & DMA_ISR_TEIF4) != 0) { - STM32_SPI2_DMA_ERROR_HOOK(); - } - DMA1->IFCR |= DMA_IFCR_CGIF4 | DMA_IFCR_CTCIF4 | - DMA_IFCR_CHTIF4 | DMA_IFCR_CTEIF4; - - CH_IRQ_EPILOGUE(); -} - -/** - * @brief SPI2 TX DMA interrupt handler (channel 5). - */ -CH_IRQ_HANDLER(Vector7C) { - - CH_IRQ_PROLOGUE(); - - STM32_SPI2_DMA_ERROR_HOOK(); - DMA1->IFCR |= DMA_IFCR_CGIF5 | DMA_IFCR_CTCIF5 | - DMA_IFCR_CHTIF5 | DMA_IFCR_CTEIF5; - - CH_IRQ_EPILOGUE(); -} -#endif - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level SPI driver initialization. - */ -void spi_lld_init(void) { - - dummytx = 0xFFFF; - -#if USE_STM32_SPI1 - RCC->APB2RSTR = RCC_APB2RSTR_SPI1RST; - RCC->APB2RSTR = 0; - spiObjectInit(&SPID1); - SPID1.spd_thread = NULL; - SPID1.spd_spi = SPI1; - SPID1.spd_dmarx = DMA1_Channel2; - SPID1.spd_dmatx = DMA1_Channel3; - SPID1.spd_dmaprio = STM32_SPI1_DMA_PRIORITY << 12; -#endif - -#if USE_STM32_SPI2 - RCC->APB1RSTR = RCC_APB1RSTR_SPI2RST; - RCC->APB1RSTR = 0; - spiObjectInit(&SPID2); - SPID2.spd_thread = NULL; - SPID2.spd_spi = SPI2; - SPID2.spd_dmarx = DMA1_Channel4; - SPID2.spd_dmatx = DMA1_Channel5; - SPID2.spd_dmaprio = STM32_SPI2_DMA_PRIORITY << 12; -#endif -} - -/** - * @brief Configures and activates the SPI peripheral. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_start(SPIDriver *spip) { - - /* If in stopped state then enables the SPI and DMA clocks.*/ - if (spip->spd_state == SPI_STOP) { -#if USE_STM32_SPI1 - if (&SPID1 == spip) { - dmaEnable(DMA1_ID); /* NOTE: Must be enabled before the IRQs.*/ - NVICEnableVector(DMA1_Channel2_IRQn, - CORTEX_PRIORITY_MASK(STM32_SPI1_IRQ_PRIORITY)); - NVICEnableVector(DMA1_Channel3_IRQn, - CORTEX_PRIORITY_MASK(STM32_SPI1_IRQ_PRIORITY)); - RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; - } -#endif -#if USE_STM32_SPI2 - if (&SPID2 == spip) { - dmaEnable(DMA1_ID); /* NOTE: Must be enabled before the IRQs.*/ - NVICEnableVector(DMA1_Channel4_IRQn, - CORTEX_PRIORITY_MASK(STM32_SPI2_IRQ_PRIORITY)); - NVICEnableVector(DMA1_Channel5_IRQn, - CORTEX_PRIORITY_MASK(STM32_SPI2_IRQ_PRIORITY)); - RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; - } -#endif - } - - /* SPI setup.*/ - spip->spd_spi->CR1 = spip->spd_config->spc_cr1 | SPI_CR1_MSTR; - spip->spd_spi->CR2 = SPI_CR2_SSOE | SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN; - - /* DMA setup.*/ - spip->spd_dmarx->CPAR = (uint32_t)&spip->spd_spi->DR; - spip->spd_dmatx->CPAR = (uint32_t)&spip->spd_spi->DR; -} - -/** - * @brief Deactivates the SPI peripheral. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_stop(SPIDriver *spip) { - - /* If in ready state then disables the SPI clock.*/ - if (spip->spd_state == SPI_READY) { -#if USE_STM32_SPI1 - if (&SPID1 == spip) { - NVICDisableVector(DMA1_Channel2_IRQn); - NVICDisableVector(DMA1_Channel3_IRQn); - dmaDisable(DMA1_ID); - RCC->APB2ENR &= ~RCC_APB2ENR_SPI1EN; - } -#endif -#if USE_STM32_SPI2 - if (&SPID2 == spip) { - NVICDisableVector(DMA1_Channel4_IRQn); - NVICDisableVector(DMA1_Channel5_IRQn); - dmaDisable(DMA1_ID); - RCC->APB1ENR &= ~RCC_APB1ENR_SPI2EN; - } -#endif - } -} - -/** - * @brief Asserts the slave select signal and prepares for transfers. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_select(SPIDriver *spip) { - - palClearPad(spip->spd_config->spc_ssport, spip->spd_config->spc_sspad); -} - -/** - * @brief Deasserts the slave select signal. - * @details The previously selected peripheral is unselected. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_unselect(SPIDriver *spip) { - - palSetPad(spip->spd_config->spc_ssport, spip->spd_config->spc_sspad); -} - -/** - * @brief Ignores data on the SPI bus. - * @details This function transmits a series of idle words on the SPI bus and - * ignores the received data. This function can be invoked even - * when a slave select signal has not been yet asserted. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to be ignored - */ -void spi_lld_ignore(SPIDriver *spip, size_t n) { - - spip->spd_dmarx->CCR = DMA_CCR1_TCIE | DMA_CCR1_TEIE; - spip->spd_dmatx->CCR = DMA_CCR1_DIR | DMA_CCR1_TEIE; - spi_start_wait(spip, n, &dummytx, &dummyrx); -} - -/** - * @brief Exchanges data on the SPI bus. - * @details This function performs a simultaneous transmit/receive operation. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to be exchanged - * @param[in] txbuf the pointer to the transmit buffer - * @param[out] rxbuf the pointer to the receive buffer - * - * @note The buffers are organized as uint8_t arrays for data sizes below or - * equal to 8 bits else it is organized as uint16_t arrays. - */ -void spi_lld_exchange(SPIDriver *spip, size_t n, - const void *txbuf, void *rxbuf) { - - spip->spd_dmarx->CCR = DMA_CCR1_TCIE | DMA_CCR1_MINC | DMA_CCR1_TEIE; - spip->spd_dmatx->CCR = DMA_CCR1_DIR | DMA_CCR1_MINC | DMA_CCR1_TEIE; - spi_start_wait(spip, n, txbuf, rxbuf); -} - -/** - * @brief Sends data ever the SPI bus. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to send - * @param[in] txbuf the pointer to the transmit buffer - * - * @note The buffers are organized as uint8_t arrays for data sizes below or - * equal to 8 bits else it is organized as uint16_t arrays. - */ -void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { - - spip->spd_dmarx->CCR = DMA_CCR1_TCIE | DMA_CCR1_TEIE; - spip->spd_dmatx->CCR = DMA_CCR1_DIR | DMA_CCR1_MINC | DMA_CCR1_TEIE; - spi_start_wait(spip, n, txbuf, &dummyrx); -} - -/** - * @brief Receives data from the SPI bus. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to receive - * @param[out] rxbuf the pointer to the receive buffer - * - * @note The buffers are organized as uint8_t arrays for data sizes below or - * equal to 8 bits else it is organized as uint16_t arrays. - */ -void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { - - spip->spd_dmarx->CCR = DMA_CCR1_TCIE | DMA_CCR1_MINC | DMA_CCR1_TEIE; - spip->spd_dmatx->CCR = DMA_CCR1_DIR | DMA_CCR1_TEIE; - spi_start_wait(spip, n, &dummytx, rxbuf); -} - -#endif /* CH_HAL_USE_SPI */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/spi_lld.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/spi_lld.h deleted file mode 100644 index 3c024ec..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/spi_lld.h +++ /dev/null @@ -1,226 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM32/spi_lld.h - * @brief STM32 SPI subsystem low level driver header. - * - * @addtogroup STM32_SPI - * @{ - */ - -#ifndef _SPI_LLD_H_ -#define _SPI_LLD_H_ - -#if CH_HAL_USE_SPI || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief SPI1 driver enable switch. - * @details If set to @p TRUE the support for SPI1 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM32_SPI1) || defined(__DOXYGEN__) -#define USE_STM32_SPI1 TRUE -#endif - -/** - * @brief SPI2 driver enable switch. - * @details If set to @p TRUE the support for SPI2 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM32_SPI2) || defined(__DOXYGEN__) -#define USE_STM32_SPI2 TRUE -#endif - -/** - * @brief SPI1 DMA priority (0..3|lowest..highest). - * @note The priority level is used for both the TX and RX DMA channels but - * because of the channels ordering the RX channel has always priority - * over the TX channel. - */ -#if !defined(STM32_SPI1_DMA_PRIORITY) || defined(__DOXYGEN__) -#define STM32_SPI1_DMA_PRIORITY 2 -#endif - -/** - * @brief SPI2 DMA priority (0..3|lowest..highest). - * @note The priority level is used for both the TX and RX DMA channels but - * because of the channels ordering the RX channel has always priority - * over the TX channel. - */ -#if !defined(STM32_SPI2_DMA_PRIORITY) || defined(__DOXYGEN__) -#define STM32_SPI2_DMA_PRIORITY 2 -#endif - -/** - * @brief SPI1 interrupt priority level setting. - */ -#if !defined(STM32_SPI1_IRQ_PRIORITY) || defined(__DOXYGEN__) -#define STM32_SPI1_IRQ_PRIORITY 10 -#endif - -/** - * @brief SPI2 interrupt priority level setting. - */ -#if !defined(STM32_SPI2_IRQ_PRIORITY) || defined(__DOXYGEN__) -#define STM32_SPI2_IRQ_PRIORITY 10 -#endif - -/** - * @brief SPI1 DMA error hook. - * @note The default action for DMA errors is a system halt because DMA error - * can only happen because programming errors. - */ -#if !defined(STM32_SPI1_DMA_ERROR_HOOK) || defined(__DOXYGEN__) -#define STM32_SPI1_DMA_ERROR_HOOK() chSysHalt() -#endif - -/** - * @brief SPI2 DMA error hook. - * @note The default action for DMA errors is a system halt because DMA error - * can only happen because programming errors. - */ -#if !defined(STM32_SPI2_DMA_ERROR_HOOK) || defined(__DOXYGEN__) -#define STM32_SPI2_DMA_ERROR_HOOK() chSysHalt() -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver configuration structure. - */ -typedef struct { - /** - * @brief The chip select line port. - */ - ioportid_t spc_ssport; - /** - * @brief The chip select line pad number. - */ - uint16_t spc_sspad; - /** - * @brief SPI initialization data. - */ - uint16_t spc_cr1; -} SPIConfig; - -/** - * @brief Structure representing a SPI driver. - */ -typedef struct { - /** - * @brief Driver state. - */ - spistate_t spd_state; -#if SPI_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__) -#if CH_USE_MUTEXES || defined(__DOXYGEN__) - /** - * @brief Mutex protecting the bus. - */ - Mutex spd_mutex; -#elif CH_USE_SEMAPHORES - Semaphore spd_semaphore; -#endif -#endif /* SPI_USE_MUTUAL_EXCLUSION */ - /** - * @brief Current configuration data. - */ - const SPIConfig *spd_config; - /* End of the mandatory fields.*/ - /** - * @brief Thread waiting for I/O completion. - */ - Thread *spd_thread; - /** - * @brief Pointer to the SPIx registers block. - */ - SPI_TypeDef *spd_spi; - /** - * @brief Pointer to the receive DMA channel registers block. - */ - DMA_Channel_TypeDef *spd_dmarx; - /** - * @brief Pointer to the transmit DMA channel registers block. - */ - DMA_Channel_TypeDef *spd_dmatx; - /** - * @brief DMA priority bit mask. - */ - uint32_t spd_dmaprio; -} SPIDriver; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_STM32_SPI1 && !defined(__DOXYGEN__) -extern SPIDriver SPID1; -#endif - -#if USE_STM32_SPI2 && !defined(__DOXYGEN__) -extern SPIDriver SPID2; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void spi_lld_init(void); - void spi_lld_start(SPIDriver *spip); - void spi_lld_stop(SPIDriver *spip); - void spi_lld_select(SPIDriver *spip); - void spi_lld_unselect(SPIDriver *spip); - void spi_lld_ignore(SPIDriver *spip, size_t n); - void spi_lld_exchange(SPIDriver *spip, size_t n, - const void *txbuf, void *rxbuf); - void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf); - void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SPI */ - -#endif /* _SPI_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/stm32_dma.c b/ChibiOS_2.0.8/os/hal/platforms/STM32/stm32_dma.c deleted file mode 100644 index e4e9b32..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/stm32_dma.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file stm32_dma.c - * @brief STM32 DMA helper driver code. - * @addtogroup STM32_DMA - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -static cnt_t dmacnt1; -#if defined(STM32F10X_HD) || defined (STM32F10X_CL) -static cnt_t dmacnt2; -#endif - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief STM32 DMA helper initialization. - */ -void dmaInit(void) { - - dmacnt1 = 0; -#if defined(STM32F10X_HD) || defined (STM32F10X_CL) - dmacnt2 = 0; -#endif -} - -/** - * @brief Enables the specified DMA controller clock. - * - * @param[in] dma the DMA controller id - */ -void dmaEnable(uint32_t dma) { - - switch (dma) { - case DMA1_ID: - if (dmacnt1++ == 0) { - RCC->AHBENR |= RCC_AHBENR_DMA1EN; - DMA1->IFCR = 0x0FFFFFFF; - } - break; -#if defined(STM32F10X_HD) || defined (STM32F10X_CL) - case DMA2_ID: - if (dmacnt2++ == 0) { - RCC->AHBENR |= RCC_AHBENR_DMA2EN; - DMA2->IFCR = 0x0FFFFFFF; - } - break; -#endif - } -} - -/** - * @brief Disables the specified DMA controller clock. - * - * @param[in] dma the DMA controller id - */ -void dmaDisable(uint32_t dma) { - - switch (dma) { - case DMA1_ID: - if (--dmacnt1 == 0) - RCC->AHBENR &= ~RCC_AHBENR_DMA1EN; - break; -#if defined(STM32F10X_HD) || defined (STM32F10X_CL) - case DMA2_ID: - if (--dmacnt2 == 0) - RCC->AHBENR &= ~RCC_AHBENR_DMA2EN; - break; -#endif - } -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/stm32_dma.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/stm32_dma.h deleted file mode 100644 index c34dd15..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/stm32_dma.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file stm32_dma.h - * @brief STM32 DMA helper driver header. - * - * @addtogroup STM32_DMA - * @{ - */ - -#ifndef _STM32_DMA_H_ -#define _STM32_DMA_H_ - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** @brief DMA1 identifier.*/ -#define DMA1_ID 0 - -/** @brief DMA2 identifier.*/ -#if defined(STM32F10X_HD) || defined (STM32F10X_CL) || defined(__DOXYGEN__) -#define DMA2_ID 1 -#endif - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void dmaInit(void); - void dmaEnable(uint32_t dma); - void dmaDisable(uint32_t dma); -#ifdef __cplusplus -} -#endif - -#endif /* _STM32_DMA_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM32/stm32f10x.h b/ChibiOS_2.0.8/os/hal/platforms/STM32/stm32f10x.h deleted file mode 100644 index 78375ce..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM32/stm32f10x.h +++ /dev/null @@ -1,8224 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f10x.h - * @author MCD Application Team - * @version V3.3.0 - * @date 04/16/2010 - * @brief CMSIS Cortex-M3 Device Peripheral Access Layer Header File. - * This file contains all the peripheral register's definitions, bits - * definitions and memory mapping for STM32F10x Connectivity line, High - * density, Medium density, Medium density Value line, Low density - * and Low density Value line and XL-density devices. - ****************************************************************************** - * - * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS - * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE - * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY - * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING - * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE - * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. - * - *

      © COPYRIGHT 2010 STMicroelectronics

      - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f10x - * @{ - */ - -#ifndef __STM32F10x_H -#define __STM32F10x_H - -#ifdef __cplusplus - extern "C" { -#endif - -/** @addtogroup Library_configuration_section - * @{ - */ - -/* Uncomment the line below according to the target STM32 device used in your - application - */ - -#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) - /* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */ - /* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */ - /* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */ - /* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */ - /* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */ - #define STM32F10X_XL /*!< STM32F10X_XL: STM32 XL-density devices */ - /* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */ -#endif -/* Tip: To avoid modifying this file each time you need to switch between these - devices, you can define the device in your toolchain compiler preprocessor. - - - Low density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers - where the Flash memory density ranges between 16 and 32 Kbytes. - - Low-density value line devices are STM32F100xx microcontrollers where the Flash - memory density ranges between 16 and 32 Kbytes. - - Medium density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers - where the Flash memory density ranges between 64 and 128 Kbytes. - - Medium-density value line devices are STM32F100xx microcontrollers where the - Flash memory density ranges between 64 and 128 Kbytes. - - High density devices are STM32F101xx and STM32F103xx microcontrollers where - the Flash memory density ranges between 256 and 512 Kbytes. - - XL-density devices are STM32F101xx and STM32F103xx microcontrollers where - the Flash memory density ranges between 512 and 1024 Kbytes. - - Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers. - */ - -#if !defined USE_STDPERIPH_DRIVER -/** - * @brief Comment the line below if you will not use the peripherals drivers. - In this case, these drivers will not be included and the application code will - be based on direct access to peripherals registers - */ - /*#define USE_STDPERIPH_DRIVER*/ -#endif - -/** - * @brief In the following line adjust the value of External High Speed oscillator (HSE) - used in your application - - Tip: To avoid modifying this file each time you need to use different HSE, you - can define the HSE value in your toolchain compiler preprocessor. - */ -#if !defined HSE_VALUE - #ifdef STM32F10X_CL - #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ - #else - #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ - #endif /* STM32F10X_CL */ -#endif /* HSE_VALUE */ - - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - Timeout value - */ -#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*!< Time out for HSE start up */ - -#define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ - -/** - * @brief STM32F10x Standard Peripheral Library version number - */ -#define __STM32F10X_STDPERIPH_VERSION_MAIN (0x03) /*!< [31:16] STM32F10x Standard Peripheral Library main version */ -#define __STM32F10X_STDPERIPH_VERSION_SUB1 (0x03) /*!< [15:8] STM32F10x Standard Peripheral Library sub1 version */ -#define __STM32F10X_STDPERIPH_VERSION_SUB2 (0x00) /*!< [7:0] STM32F10x Standard Peripheral Library sub2 version */ -#define __STM32F10X_STDPERIPH_VERSION ((__STM32F10X_STDPERIPH_VERSION_MAIN << 16)\ - | (__STM32F10X_STDPERIPH_VERSION_SUB1 << 8)\ - | __STM32F10X_STDPERIPH_VERSION_SUB2) - -/** - * @} - */ - -/** @addtogroup Configuration_section_for_CMSIS - * @{ - */ - -/** - * @brief Configuration of the Cortex-M3 Processor and Core Peripherals - */ -#ifdef STM32F10X_XL - #define __MPU_PRESENT 1 /*!< STM32 XL-density devices provide an MPU */ -#else - #define __MPU_PRESENT 0 /*!< Other STM32 devices does not provide an MPU */ -#endif /* STM32F10X_XL */ -#define __NVIC_PRIO_BITS 4 /*!< STM32 uses 4 Bits for the Priority Levels */ -#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ - -/** - * @brief STM32F10x Interrupt Number Definition, according to the selected device - * in @ref Library_configuration_section - */ -typedef enum IRQn -{ -/****** Cortex-M3 Processor Exceptions Numbers ***************************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */ - BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */ - UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */ - -/****** STM32 specific Interrupt Numbers *********************************************************/ - WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ - PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ - TAMPER_IRQn = 2, /*!< Tamper Interrupt */ - RTC_IRQn = 3, /*!< RTC global Interrupt */ - FLASH_IRQn = 4, /*!< FLASH global Interrupt */ - RCC_IRQn = 5, /*!< RCC global Interrupt */ - EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ - EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ - EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ - EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ - EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ - DMA1_Channel1_IRQn = 11, /*!< DMA1 Channel 1 global Interrupt */ - DMA1_Channel2_IRQn = 12, /*!< DMA1 Channel 2 global Interrupt */ - DMA1_Channel3_IRQn = 13, /*!< DMA1 Channel 3 global Interrupt */ - DMA1_Channel4_IRQn = 14, /*!< DMA1 Channel 4 global Interrupt */ - DMA1_Channel5_IRQn = 15, /*!< DMA1 Channel 5 global Interrupt */ - DMA1_Channel6_IRQn = 16, /*!< DMA1 Channel 6 global Interrupt */ - DMA1_Channel7_IRQn = 17, /*!< DMA1 Channel 7 global Interrupt */ - -#ifdef STM32F10X_LD - ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ - USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ - USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ - CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ - CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ - EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TIM1_BRK_IRQn = 24, /*!< TIM1 Break Interrupt */ - TIM1_UP_IRQn = 25, /*!< TIM1 Update Interrupt */ - TIM1_TRG_COM_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt */ - TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ - TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ - TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ - I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ - I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ - SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ - USART1_IRQn = 37, /*!< USART1 global Interrupt */ - USART2_IRQn = 38, /*!< USART2 global Interrupt */ - EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ - USBWakeUp_IRQn = 42 /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ -#endif /* STM32F10X_LD */ - -#ifdef STM32F10X_LD_VL - ADC1_IRQn = 18, /*!< ADC1 global Interrupt */ - EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TIM1_BRK_TIM15_IRQn = 24, /*!< TIM1 Break and TIM15 Interrupts */ - TIM1_UP_TIM16_IRQn = 25, /*!< TIM1 Update and TIM16 Interrupts */ - TIM1_TRG_COM_TIM17_IRQn = 26, /*!< TIM1 Trigger and Commutation and TIM17 Interrupt */ - TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ - TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ - TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ - I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ - I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ - SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ - USART1_IRQn = 37, /*!< USART1 global Interrupt */ - USART2_IRQn = 38, /*!< USART2 global Interrupt */ - EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ - CEC_IRQn = 42, /*!< HDMI-CEC Interrupt */ - TIM6_DAC_IRQn = 54, /*!< TIM6 and DAC underrun Interrupt */ - TIM7_IRQn = 55 /*!< TIM7 Interrupt */ -#endif /* STM32F10X_LD_VL */ - -#ifdef STM32F10X_MD - ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ - USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ - USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ - CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ - CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ - EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TIM1_BRK_IRQn = 24, /*!< TIM1 Break Interrupt */ - TIM1_UP_IRQn = 25, /*!< TIM1 Update Interrupt */ - TIM1_TRG_COM_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt */ - TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ - TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ - TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ - TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ - I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ - I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ - I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ - I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ - SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ - SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ - USART1_IRQn = 37, /*!< USART1 global Interrupt */ - USART2_IRQn = 38, /*!< USART2 global Interrupt */ - USART3_IRQn = 39, /*!< USART3 global Interrupt */ - EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ - USBWakeUp_IRQn = 42 /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ -#endif /* STM32F10X_MD */ - -#ifdef STM32F10X_MD_VL - ADC1_IRQn = 18, /*!< ADC1 global Interrupt */ - EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TIM1_BRK_TIM15_IRQn = 24, /*!< TIM1 Break and TIM15 Interrupts */ - TIM1_UP_TIM16_IRQn = 25, /*!< TIM1 Update and TIM16 Interrupts */ - TIM1_TRG_COM_TIM17_IRQn = 26, /*!< TIM1 Trigger and Commutation and TIM17 Interrupt */ - TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ - TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ - TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ - TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ - I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ - I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ - I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ - I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ - SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ - SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ - USART1_IRQn = 37, /*!< USART1 global Interrupt */ - USART2_IRQn = 38, /*!< USART2 global Interrupt */ - USART3_IRQn = 39, /*!< USART3 global Interrupt */ - EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ - CEC_IRQn = 42, /*!< HDMI-CEC Interrupt */ - TIM6_DAC_IRQn = 54, /*!< TIM6 and DAC underrun Interrupt */ - TIM7_IRQn = 55 /*!< TIM7 Interrupt */ -#endif /* STM32F10X_MD_VL */ - -#ifdef STM32F10X_HD - ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ - USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ - USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ - CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ - CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ - EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TIM1_BRK_IRQn = 24, /*!< TIM1 Break Interrupt */ - TIM1_UP_IRQn = 25, /*!< TIM1 Update Interrupt */ - TIM1_TRG_COM_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt */ - TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ - TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ - TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ - TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ - I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ - I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ - I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ - I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ - SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ - SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ - USART1_IRQn = 37, /*!< USART1 global Interrupt */ - USART2_IRQn = 38, /*!< USART2 global Interrupt */ - USART3_IRQn = 39, /*!< USART3 global Interrupt */ - EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ - USBWakeUp_IRQn = 42, /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ - TIM8_BRK_IRQn = 43, /*!< TIM8 Break Interrupt */ - TIM8_UP_IRQn = 44, /*!< TIM8 Update Interrupt */ - TIM8_TRG_COM_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt */ - TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */ - ADC3_IRQn = 47, /*!< ADC3 global Interrupt */ - FSMC_IRQn = 48, /*!< FSMC global Interrupt */ - SDIO_IRQn = 49, /*!< SDIO global Interrupt */ - TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ - SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ - UART4_IRQn = 52, /*!< UART4 global Interrupt */ - UART5_IRQn = 53, /*!< UART5 global Interrupt */ - TIM6_IRQn = 54, /*!< TIM6 global Interrupt */ - TIM7_IRQn = 55, /*!< TIM7 global Interrupt */ - DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */ - DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */ - DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */ - DMA2_Channel4_5_IRQn = 59 /*!< DMA2 Channel 4 and Channel 5 global Interrupt */ -#endif /* STM32F10X_HD */ - -#ifdef STM32F10X_XL - ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ - USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ - USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ - CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ - CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ - EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TIM1_BRK_TIM9_IRQn = 24, /*!< TIM1 Break Interrupt and TIM9 global Interrupt */ - TIM1_UP_TIM10_IRQn = 25, /*!< TIM1 Update Interrupt and TIM10 global Interrupt */ - TIM1_TRG_COM_TIM11_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */ - TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ - TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ - TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ - TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ - I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ - I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ - I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ - I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ - SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ - SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ - USART1_IRQn = 37, /*!< USART1 global Interrupt */ - USART2_IRQn = 38, /*!< USART2 global Interrupt */ - USART3_IRQn = 39, /*!< USART3 global Interrupt */ - EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ - USBWakeUp_IRQn = 42, /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ - TIM8_BRK_TIM12_IRQn = 43, /*!< TIM8 Break Interrupt and TIM12 global Interrupt */ - TIM8_UP_TIM13_IRQn = 44, /*!< TIM8 Update Interrupt and TIM13 global Interrupt */ - TIM8_TRG_COM_TIM14_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */ - TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */ - ADC3_IRQn = 47, /*!< ADC3 global Interrupt */ - FSMC_IRQn = 48, /*!< FSMC global Interrupt */ - SDIO_IRQn = 49, /*!< SDIO global Interrupt */ - TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ - SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ - UART4_IRQn = 52, /*!< UART4 global Interrupt */ - UART5_IRQn = 53, /*!< UART5 global Interrupt */ - TIM6_IRQn = 54, /*!< TIM6 global Interrupt */ - TIM7_IRQn = 55, /*!< TIM7 global Interrupt */ - DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */ - DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */ - DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */ - DMA2_Channel4_5_IRQn = 59 /*!< DMA2 Channel 4 and Channel 5 global Interrupt */ -#endif /* STM32F10X_XL */ - -#ifdef STM32F10X_CL - ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ - CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ - CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ - CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ - CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ - EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TIM1_BRK_IRQn = 24, /*!< TIM1 Break Interrupt */ - TIM1_UP_IRQn = 25, /*!< TIM1 Update Interrupt */ - TIM1_TRG_COM_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt */ - TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ - TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ - TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ - TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ - I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ - I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ - I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ - I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ - SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ - SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ - USART1_IRQn = 37, /*!< USART1 global Interrupt */ - USART2_IRQn = 38, /*!< USART2 global Interrupt */ - USART3_IRQn = 39, /*!< USART3 global Interrupt */ - EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ - OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS WakeUp from suspend through EXTI Line Interrupt */ - TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ - SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ - UART4_IRQn = 52, /*!< UART4 global Interrupt */ - UART5_IRQn = 53, /*!< UART5 global Interrupt */ - TIM6_IRQn = 54, /*!< TIM6 global Interrupt */ - TIM7_IRQn = 55, /*!< TIM7 global Interrupt */ - DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */ - DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */ - DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */ - DMA2_Channel4_IRQn = 59, /*!< DMA2 Channel 4 global Interrupt */ - DMA2_Channel5_IRQn = 60, /*!< DMA2 Channel 5 global Interrupt */ - ETH_IRQn = 61, /*!< Ethernet global Interrupt */ - ETH_WKUP_IRQn = 62, /*!< Ethernet Wakeup through EXTI line Interrupt */ - CAN2_TX_IRQn = 63, /*!< CAN2 TX Interrupt */ - CAN2_RX0_IRQn = 64, /*!< CAN2 RX0 Interrupt */ - CAN2_RX1_IRQn = 65, /*!< CAN2 RX1 Interrupt */ - CAN2_SCE_IRQn = 66, /*!< CAN2 SCE Interrupt */ - OTG_FS_IRQn = 67 /*!< USB OTG FS global Interrupt */ -#endif /* STM32F10X_CL */ -} IRQn_Type; - -/** - * @} - */ - -#include "core_cm3.h" -/*#include "system_stm32f10x.h"*/ -#include - -/** @addtogroup Exported_types - * @{ - */ - -/*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) */ -typedef int32_t s32; -typedef int16_t s16; -typedef int8_t s8; - -typedef const int32_t sc32; /*!< Read Only */ -typedef const int16_t sc16; /*!< Read Only */ -typedef const int8_t sc8; /*!< Read Only */ - -typedef __IO int32_t vs32; -typedef __IO int16_t vs16; -typedef __IO int8_t vs8; - -typedef __I int32_t vsc32; /*!< Read Only */ -typedef __I int16_t vsc16; /*!< Read Only */ -typedef __I int8_t vsc8; /*!< Read Only */ - -typedef uint32_t u32; -typedef uint16_t u16; -typedef uint8_t u8; - -typedef const uint32_t uc32; /*!< Read Only */ -typedef const uint16_t uc16; /*!< Read Only */ -typedef const uint8_t uc8; /*!< Read Only */ - -typedef __IO uint32_t vu32; -typedef __IO uint16_t vu16; -typedef __IO uint8_t vu8; - -typedef __I uint32_t vuc32; /*!< Read Only */ -typedef __I uint16_t vuc16; /*!< Read Only */ -typedef __I uint8_t vuc8; /*!< Read Only */ - -#ifndef __cplusplus -typedef enum {FALSE = 0, TRUE = !FALSE} bool; -#endif - -typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; - -typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; -#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) - -typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; - -/*!< STM32F10x Standard Peripheral Library old definitions (maintained for legacy purpose) */ -#define HSEStartUp_TimeOut HSE_STARTUP_TIMEOUT -#define HSE_Value HSE_VALUE -#define HSI_Value HSI_VALUE -/** - * @} - */ - -/** @addtogroup Peripheral_registers_structures - * @{ - */ - -/** - * @brief Analog to Digital Converter - */ - -typedef struct -{ - __IO uint32_t SR; - __IO uint32_t CR1; - __IO uint32_t CR2; - __IO uint32_t SMPR1; - __IO uint32_t SMPR2; - __IO uint32_t JOFR1; - __IO uint32_t JOFR2; - __IO uint32_t JOFR3; - __IO uint32_t JOFR4; - __IO uint32_t HTR; - __IO uint32_t LTR; - __IO uint32_t SQR1; - __IO uint32_t SQR2; - __IO uint32_t SQR3; - __IO uint32_t JSQR; - __IO uint32_t JDR1; - __IO uint32_t JDR2; - __IO uint32_t JDR3; - __IO uint32_t JDR4; - __IO uint32_t DR; -} ADC_TypeDef; - -/** - * @brief Backup Registers - */ - -typedef struct -{ - uint32_t RESERVED0; - __IO uint16_t DR1; - uint16_t RESERVED1; - __IO uint16_t DR2; - uint16_t RESERVED2; - __IO uint16_t DR3; - uint16_t RESERVED3; - __IO uint16_t DR4; - uint16_t RESERVED4; - __IO uint16_t DR5; - uint16_t RESERVED5; - __IO uint16_t DR6; - uint16_t RESERVED6; - __IO uint16_t DR7; - uint16_t RESERVED7; - __IO uint16_t DR8; - uint16_t RESERVED8; - __IO uint16_t DR9; - uint16_t RESERVED9; - __IO uint16_t DR10; - uint16_t RESERVED10; - __IO uint16_t RTCCR; - uint16_t RESERVED11; - __IO uint16_t CR; - uint16_t RESERVED12; - __IO uint16_t CSR; - uint16_t RESERVED13[5]; - __IO uint16_t DR11; - uint16_t RESERVED14; - __IO uint16_t DR12; - uint16_t RESERVED15; - __IO uint16_t DR13; - uint16_t RESERVED16; - __IO uint16_t DR14; - uint16_t RESERVED17; - __IO uint16_t DR15; - uint16_t RESERVED18; - __IO uint16_t DR16; - uint16_t RESERVED19; - __IO uint16_t DR17; - uint16_t RESERVED20; - __IO uint16_t DR18; - uint16_t RESERVED21; - __IO uint16_t DR19; - uint16_t RESERVED22; - __IO uint16_t DR20; - uint16_t RESERVED23; - __IO uint16_t DR21; - uint16_t RESERVED24; - __IO uint16_t DR22; - uint16_t RESERVED25; - __IO uint16_t DR23; - uint16_t RESERVED26; - __IO uint16_t DR24; - uint16_t RESERVED27; - __IO uint16_t DR25; - uint16_t RESERVED28; - __IO uint16_t DR26; - uint16_t RESERVED29; - __IO uint16_t DR27; - uint16_t RESERVED30; - __IO uint16_t DR28; - uint16_t RESERVED31; - __IO uint16_t DR29; - uint16_t RESERVED32; - __IO uint16_t DR30; - uint16_t RESERVED33; - __IO uint16_t DR31; - uint16_t RESERVED34; - __IO uint16_t DR32; - uint16_t RESERVED35; - __IO uint16_t DR33; - uint16_t RESERVED36; - __IO uint16_t DR34; - uint16_t RESERVED37; - __IO uint16_t DR35; - uint16_t RESERVED38; - __IO uint16_t DR36; - uint16_t RESERVED39; - __IO uint16_t DR37; - uint16_t RESERVED40; - __IO uint16_t DR38; - uint16_t RESERVED41; - __IO uint16_t DR39; - uint16_t RESERVED42; - __IO uint16_t DR40; - uint16_t RESERVED43; - __IO uint16_t DR41; - uint16_t RESERVED44; - __IO uint16_t DR42; - uint16_t RESERVED45; -} BKP_TypeDef; - -/** - * @brief Controller Area Network TxMailBox - */ - -typedef struct -{ - __IO uint32_t TIR; - __IO uint32_t TDTR; - __IO uint32_t TDLR; - __IO uint32_t TDHR; -} CAN_TxMailBox_TypeDef; - -/** - * @brief Controller Area Network FIFOMailBox - */ - -typedef struct -{ - __IO uint32_t RIR; - __IO uint32_t RDTR; - __IO uint32_t RDLR; - __IO uint32_t RDHR; -} CAN_FIFOMailBox_TypeDef; - -/** - * @brief Controller Area Network FilterRegister - */ - -typedef struct -{ - __IO uint32_t FR1; - __IO uint32_t FR2; -} CAN_FilterRegister_TypeDef; - -/** - * @brief Controller Area Network - */ - -typedef struct -{ - __IO uint32_t MCR; - __IO uint32_t MSR; - __IO uint32_t TSR; - __IO uint32_t RF0R; - __IO uint32_t RF1R; - __IO uint32_t IER; - __IO uint32_t ESR; - __IO uint32_t BTR; - uint32_t RESERVED0[88]; - CAN_TxMailBox_TypeDef sTxMailBox[3]; - CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; - uint32_t RESERVED1[12]; - __IO uint32_t FMR; - __IO uint32_t FM1R; - uint32_t RESERVED2; - __IO uint32_t FS1R; - uint32_t RESERVED3; - __IO uint32_t FFA1R; - uint32_t RESERVED4; - __IO uint32_t FA1R; - uint32_t RESERVED5[8]; -#ifndef STM32F10X_CL - CAN_FilterRegister_TypeDef sFilterRegister[14]; -#else - CAN_FilterRegister_TypeDef sFilterRegister[28]; -#endif /* STM32F10X_CL */ -} CAN_TypeDef; - -/** - * @brief Consumer Electronics Control (CEC) - */ -typedef struct -{ - __IO uint32_t CFGR; - __IO uint32_t OAR; - __IO uint32_t PRES; - __IO uint32_t ESR; - __IO uint32_t CSR; - __IO uint32_t TXD; - __IO uint32_t RXD; -} CEC_TypeDef; - -/** - * @brief CRC calculation unit - */ - -typedef struct -{ - __IO uint32_t DR; - __IO uint8_t IDR; - uint8_t RESERVED0; - uint16_t RESERVED1; - __IO uint32_t CR; -} CRC_TypeDef; - -/** - * @brief Digital to Analog Converter - */ - -typedef struct -{ - __IO uint32_t CR; - __IO uint32_t SWTRIGR; - __IO uint32_t DHR12R1; - __IO uint32_t DHR12L1; - __IO uint32_t DHR8R1; - __IO uint32_t DHR12R2; - __IO uint32_t DHR12L2; - __IO uint32_t DHR8R2; - __IO uint32_t DHR12RD; - __IO uint32_t DHR12LD; - __IO uint32_t DHR8RD; - __IO uint32_t DOR1; - __IO uint32_t DOR2; -#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) - __IO uint32_t SR; -#endif -} DAC_TypeDef; - -/** - * @brief Debug MCU - */ - -typedef struct -{ - __IO uint32_t IDCODE; - __IO uint32_t CR; -}DBGMCU_TypeDef; - -/** - * @brief DMA Controller - */ - -typedef struct -{ - __IO uint32_t CCR; - __IO uint32_t CNDTR; - __IO uint32_t CPAR; - __IO uint32_t CMAR; -} DMA_Channel_TypeDef; - -typedef struct -{ - __IO uint32_t ISR; - __IO uint32_t IFCR; -} DMA_TypeDef; - -/** - * @brief Ethernet MAC - */ - -typedef struct -{ - __IO uint32_t MACCR; - __IO uint32_t MACFFR; - __IO uint32_t MACHTHR; - __IO uint32_t MACHTLR; - __IO uint32_t MACMIIAR; - __IO uint32_t MACMIIDR; - __IO uint32_t MACFCR; - __IO uint32_t MACVLANTR; /* 8 */ - uint32_t RESERVED0[2]; - __IO uint32_t MACRWUFFR; /* 11 */ - __IO uint32_t MACPMTCSR; - uint32_t RESERVED1[2]; - __IO uint32_t MACSR; /* 15 */ - __IO uint32_t MACIMR; - __IO uint32_t MACA0HR; - __IO uint32_t MACA0LR; - __IO uint32_t MACA1HR; - __IO uint32_t MACA1LR; - __IO uint32_t MACA2HR; - __IO uint32_t MACA2LR; - __IO uint32_t MACA3HR; - __IO uint32_t MACA3LR; /* 24 */ - uint32_t RESERVED2[40]; - __IO uint32_t MMCCR; /* 65 */ - __IO uint32_t MMCRIR; - __IO uint32_t MMCTIR; - __IO uint32_t MMCRIMR; - __IO uint32_t MMCTIMR; /* 69 */ - uint32_t RESERVED3[14]; - __IO uint32_t MMCTGFSCCR; /* 84 */ - __IO uint32_t MMCTGFMSCCR; - uint32_t RESERVED4[5]; - __IO uint32_t MMCTGFCR; - uint32_t RESERVED5[10]; - __IO uint32_t MMCRFCECR; - __IO uint32_t MMCRFAECR; - uint32_t RESERVED6[10]; - __IO uint32_t MMCRGUFCR; - uint32_t RESERVED7[334]; - __IO uint32_t PTPTSCR; - __IO uint32_t PTPSSIR; - __IO uint32_t PTPTSHR; - __IO uint32_t PTPTSLR; - __IO uint32_t PTPTSHUR; - __IO uint32_t PTPTSLUR; - __IO uint32_t PTPTSAR; - __IO uint32_t PTPTTHR; - __IO uint32_t PTPTTLR; - uint32_t RESERVED8[567]; - __IO uint32_t DMABMR; - __IO uint32_t DMATPDR; - __IO uint32_t DMARPDR; - __IO uint32_t DMARDLAR; - __IO uint32_t DMATDLAR; - __IO uint32_t DMASR; - __IO uint32_t DMAOMR; - __IO uint32_t DMAIER; - __IO uint32_t DMAMFBOCR; - uint32_t RESERVED9[9]; - __IO uint32_t DMACHTDR; - __IO uint32_t DMACHRDR; - __IO uint32_t DMACHTBAR; - __IO uint32_t DMACHRBAR; -} ETH_TypeDef; - -/** - * @brief External Interrupt/Event Controller - */ - -typedef struct -{ - __IO uint32_t IMR; - __IO uint32_t EMR; - __IO uint32_t RTSR; - __IO uint32_t FTSR; - __IO uint32_t SWIER; - __IO uint32_t PR; -} EXTI_TypeDef; - -/** - * @brief FLASH Registers - */ - -typedef struct -{ - __IO uint32_t ACR; - __IO uint32_t KEYR; - __IO uint32_t OPTKEYR; - __IO uint32_t SR; - __IO uint32_t CR; - __IO uint32_t AR; - __IO uint32_t RESERVED; - __IO uint32_t OBR; - __IO uint32_t WRPR; -#ifdef STM32F10X_XL - uint32_t RESERVED1[8]; - __IO uint32_t KEYR2; - uint32_t RESERVED2; - __IO uint32_t SR2; - __IO uint32_t CR2; - __IO uint32_t AR2; -#endif /* STM32F10X_XL */ -} FLASH_TypeDef; - -/** - * @brief Option Bytes Registers - */ - -typedef struct -{ - __IO uint16_t RDP; - __IO uint16_t USER; - __IO uint16_t Data0; - __IO uint16_t Data1; - __IO uint16_t WRP0; - __IO uint16_t WRP1; - __IO uint16_t WRP2; - __IO uint16_t WRP3; -} OB_TypeDef; - -/** - * @brief Flexible Static Memory Controller - */ - -typedef struct -{ - __IO uint32_t BTCR[8]; -} FSMC_Bank1_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank1E - */ - -typedef struct -{ - __IO uint32_t BWTR[7]; -} FSMC_Bank1E_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank2 - */ - -typedef struct -{ - __IO uint32_t PCR2; - __IO uint32_t SR2; - __IO uint32_t PMEM2; - __IO uint32_t PATT2; - uint32_t RESERVED0; - __IO uint32_t ECCR2; -} FSMC_Bank2_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank3 - */ - -typedef struct -{ - __IO uint32_t PCR3; - __IO uint32_t SR3; - __IO uint32_t PMEM3; - __IO uint32_t PATT3; - uint32_t RESERVED0; - __IO uint32_t ECCR3; -} FSMC_Bank3_TypeDef; - -/** - * @brief Flexible Static Memory Controller Bank4 - */ - -typedef struct -{ - __IO uint32_t PCR4; - __IO uint32_t SR4; - __IO uint32_t PMEM4; - __IO uint32_t PATT4; - __IO uint32_t PIO4; -} FSMC_Bank4_TypeDef; - -/** - * @brief General Purpose I/O - */ - -typedef struct -{ - __IO uint32_t CRL; - __IO uint32_t CRH; - __IO uint32_t IDR; - __IO uint32_t ODR; - __IO uint32_t BSRR; - __IO uint32_t BRR; - __IO uint32_t LCKR; -} GPIO_TypeDef; - -/** - * @brief Alternate Function I/O - */ - -typedef struct -{ - __IO uint32_t EVCR; - __IO uint32_t MAPR; - __IO uint32_t EXTICR[4]; - uint32_t RESERVED0; - __IO uint32_t MAPR2; -} AFIO_TypeDef; -/** - * @brief Inter-integrated Circuit Interface - */ - -typedef struct -{ - __IO uint16_t CR1; - uint16_t RESERVED0; - __IO uint16_t CR2; - uint16_t RESERVED1; - __IO uint16_t OAR1; - uint16_t RESERVED2; - __IO uint16_t OAR2; - uint16_t RESERVED3; - __IO uint16_t DR; - uint16_t RESERVED4; - __IO uint16_t SR1; - uint16_t RESERVED5; - __IO uint16_t SR2; - uint16_t RESERVED6; - __IO uint16_t CCR; - uint16_t RESERVED7; - __IO uint16_t TRISE; - uint16_t RESERVED8; -} I2C_TypeDef; - -/** - * @brief Independent WATCHDOG - */ - -typedef struct -{ - __IO uint32_t KR; - __IO uint32_t PR; - __IO uint32_t RLR; - __IO uint32_t SR; -} IWDG_TypeDef; - -/** - * @brief Power Control - */ - -typedef struct -{ - __IO uint32_t CR; - __IO uint32_t CSR; -} PWR_TypeDef; - -/** - * @brief Reset and Clock Control - */ - -typedef struct -{ - __IO uint32_t CR; - __IO uint32_t CFGR; - __IO uint32_t CIR; - __IO uint32_t APB2RSTR; - __IO uint32_t APB1RSTR; - __IO uint32_t AHBENR; - __IO uint32_t APB2ENR; - __IO uint32_t APB1ENR; - __IO uint32_t BDCR; - __IO uint32_t CSR; - -#ifdef STM32F10X_CL - __IO uint32_t AHBRSTR; - __IO uint32_t CFGR2; -#endif /* STM32F10X_CL */ - -#if defined STM32F10X_LD_VL || defined STM32F10X_MD_VL - uint32_t RESERVED0; - __IO uint32_t CFGR2; -#endif /* STM32F10X_LD_VL || STM32F10X_MD_VL */ -} RCC_TypeDef; - -/** - * @brief Real-Time Clock - */ - -typedef struct -{ - __IO uint16_t CRH; - uint16_t RESERVED0; - __IO uint16_t CRL; - uint16_t RESERVED1; - __IO uint16_t PRLH; - uint16_t RESERVED2; - __IO uint16_t PRLL; - uint16_t RESERVED3; - __IO uint16_t DIVH; - uint16_t RESERVED4; - __IO uint16_t DIVL; - uint16_t RESERVED5; - __IO uint16_t CNTH; - uint16_t RESERVED6; - __IO uint16_t CNTL; - uint16_t RESERVED7; - __IO uint16_t ALRH; - uint16_t RESERVED8; - __IO uint16_t ALRL; - uint16_t RESERVED9; -} RTC_TypeDef; - -/** - * @brief SD host Interface - */ - -typedef struct -{ - __IO uint32_t POWER; - __IO uint32_t CLKCR; - __IO uint32_t ARG; - __IO uint32_t CMD; - __I uint32_t RESPCMD; - __I uint32_t RESP1; - __I uint32_t RESP2; - __I uint32_t RESP3; - __I uint32_t RESP4; - __IO uint32_t DTIMER; - __IO uint32_t DLEN; - __IO uint32_t DCTRL; - __I uint32_t DCOUNT; - __I uint32_t STA; - __IO uint32_t ICR; - __IO uint32_t MASK; - uint32_t RESERVED0[2]; - __I uint32_t FIFOCNT; - uint32_t RESERVED1[13]; - __IO uint32_t FIFO; -} SDIO_TypeDef; - -/** - * @brief Serial Peripheral Interface - */ - -typedef struct -{ - __IO uint16_t CR1; - uint16_t RESERVED0; - __IO uint16_t CR2; - uint16_t RESERVED1; - __IO uint16_t SR; - uint16_t RESERVED2; - __IO uint16_t DR; - uint16_t RESERVED3; - __IO uint16_t CRCPR; - uint16_t RESERVED4; - __IO uint16_t RXCRCR; - uint16_t RESERVED5; - __IO uint16_t TXCRCR; - uint16_t RESERVED6; - __IO uint16_t I2SCFGR; - uint16_t RESERVED7; - __IO uint16_t I2SPR; - uint16_t RESERVED8; -} SPI_TypeDef; - -/** - * @brief TIM - */ - -typedef struct -{ - __IO uint16_t CR1; - uint16_t RESERVED0; - __IO uint16_t CR2; - uint16_t RESERVED1; - __IO uint16_t SMCR; - uint16_t RESERVED2; - __IO uint16_t DIER; - uint16_t RESERVED3; - __IO uint16_t SR; - uint16_t RESERVED4; - __IO uint16_t EGR; - uint16_t RESERVED5; - __IO uint16_t CCMR1; - uint16_t RESERVED6; - __IO uint16_t CCMR2; - uint16_t RESERVED7; - __IO uint16_t CCER; - uint16_t RESERVED8; - __IO uint16_t CNT; - uint16_t RESERVED9; - __IO uint16_t PSC; - uint16_t RESERVED10; - __IO uint16_t ARR; - uint16_t RESERVED11; - __IO uint16_t RCR; - uint16_t RESERVED12; - __IO uint16_t CCR1; - uint16_t RESERVED13; - __IO uint16_t CCR2; - uint16_t RESERVED14; - __IO uint16_t CCR3; - uint16_t RESERVED15; - __IO uint16_t CCR4; - uint16_t RESERVED16; - __IO uint16_t BDTR; - uint16_t RESERVED17; - __IO uint16_t DCR; - uint16_t RESERVED18; - __IO uint16_t DMAR; - uint16_t RESERVED19; -} TIM_TypeDef; - -/** - * @brief Universal Synchronous Asynchronous Receiver Transmitter - */ - -typedef struct -{ - __IO uint16_t SR; - uint16_t RESERVED0; - __IO uint16_t DR; - uint16_t RESERVED1; - __IO uint16_t BRR; - uint16_t RESERVED2; - __IO uint16_t CR1; - uint16_t RESERVED3; - __IO uint16_t CR2; - uint16_t RESERVED4; - __IO uint16_t CR3; - uint16_t RESERVED5; - __IO uint16_t GTPR; - uint16_t RESERVED6; -} USART_TypeDef; - -/** - * @brief Window WATCHDOG - */ - -typedef struct -{ - __IO uint32_t CR; - __IO uint32_t CFR; - __IO uint32_t SR; -} WWDG_TypeDef; - -/** - * @} - */ - -/** @addtogroup Peripheral_memory_map - * @{ - */ - -#define PERIPH_BB_BASE ((uint32_t)0x42000000) /*!< Peripheral base address in the alias region */ -#define SRAM_BB_BASE ((uint32_t)0x22000000) /*!< SRAM base address in the alias region */ - -#define SRAM_BASE ((uint32_t)0x20000000) /*!< SRAM base address in the bit-band region */ -#define PERIPH_BASE ((uint32_t)0x40000000) /*!< Peripheral base address in the bit-band region */ - -#define FSMC_R_BASE ((uint32_t)0xA0000000) /*!< FSMC registers base address */ - -/*!< Peripheral memory map */ -#define APB1PERIPH_BASE PERIPH_BASE -#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) -#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) - -#define TIM2_BASE (APB1PERIPH_BASE + 0x0000) -#define TIM3_BASE (APB1PERIPH_BASE + 0x0400) -#define TIM4_BASE (APB1PERIPH_BASE + 0x0800) -#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00) -#define TIM6_BASE (APB1PERIPH_BASE + 0x1000) -#define TIM7_BASE (APB1PERIPH_BASE + 0x1400) -#define TIM12_BASE (APB1PERIPH_BASE + 0x1800) -#define TIM13_BASE (APB1PERIPH_BASE + 0x1C00) -#define TIM14_BASE (APB1PERIPH_BASE + 0x2000) -#define RTC_BASE (APB1PERIPH_BASE + 0x2800) -#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00) -#define IWDG_BASE (APB1PERIPH_BASE + 0x3000) -#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) -#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00) -#define USART2_BASE (APB1PERIPH_BASE + 0x4400) -#define USART3_BASE (APB1PERIPH_BASE + 0x4800) -#define UART4_BASE (APB1PERIPH_BASE + 0x4C00) -#define UART5_BASE (APB1PERIPH_BASE + 0x5000) -#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) -#define I2C2_BASE (APB1PERIPH_BASE + 0x5800) -#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) -#define CAN2_BASE (APB1PERIPH_BASE + 0x6800) -#define BKP_BASE (APB1PERIPH_BASE + 0x6C00) -#define PWR_BASE (APB1PERIPH_BASE + 0x7000) -#define DAC_BASE (APB1PERIPH_BASE + 0x7400) -#define CEC_BASE (APB1PERIPH_BASE + 0x7800) - -#define AFIO_BASE (APB2PERIPH_BASE + 0x0000) -#define EXTI_BASE (APB2PERIPH_BASE + 0x0400) -#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) -#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) -#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) -#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) -#define GPIOE_BASE (APB2PERIPH_BASE + 0x1800) -#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) -#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000) -#define ADC1_BASE (APB2PERIPH_BASE + 0x2400) -#define ADC2_BASE (APB2PERIPH_BASE + 0x2800) -#define TIM1_BASE (APB2PERIPH_BASE + 0x2C00) -#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) -#define TIM8_BASE (APB2PERIPH_BASE + 0x3400) -#define USART1_BASE (APB2PERIPH_BASE + 0x3800) -#define ADC3_BASE (APB2PERIPH_BASE + 0x3C00) -#define TIM15_BASE (APB2PERIPH_BASE + 0x4000) -#define TIM16_BASE (APB2PERIPH_BASE + 0x4400) -#define TIM17_BASE (APB2PERIPH_BASE + 0x4800) -#define TIM9_BASE (APB2PERIPH_BASE + 0x4C00) -#define TIM10_BASE (APB2PERIPH_BASE + 0x5000) -#define TIM11_BASE (APB2PERIPH_BASE + 0x5400) - -#define SDIO_BASE (PERIPH_BASE + 0x18000) - -#define DMA1_BASE (AHBPERIPH_BASE + 0x0000) -#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x0008) -#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x001C) -#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x0030) -#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x0044) -#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x0058) -#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x006C) -#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x0080) -#define DMA2_BASE (AHBPERIPH_BASE + 0x0400) -#define DMA2_Channel1_BASE (AHBPERIPH_BASE + 0x0408) -#define DMA2_Channel2_BASE (AHBPERIPH_BASE + 0x041C) -#define DMA2_Channel3_BASE (AHBPERIPH_BASE + 0x0430) -#define DMA2_Channel4_BASE (AHBPERIPH_BASE + 0x0444) -#define DMA2_Channel5_BASE (AHBPERIPH_BASE + 0x0458) -#define RCC_BASE (AHBPERIPH_BASE + 0x1000) -#define CRC_BASE (AHBPERIPH_BASE + 0x3000) - -#define FLASH_R_BASE (AHBPERIPH_BASE + 0x2000) /*!< Flash registers base address */ -#define OB_BASE ((uint32_t)0x1FFFF800) /*!< Flash Option Bytes base address */ - -#define ETH_BASE (AHBPERIPH_BASE + 0x8000) -#define ETH_MAC_BASE (ETH_BASE) -#define ETH_MMC_BASE (ETH_BASE + 0x0100) -#define ETH_PTP_BASE (ETH_BASE + 0x0700) -#define ETH_DMA_BASE (ETH_BASE + 0x1000) - -#define FSMC_Bank1_R_BASE (FSMC_R_BASE + 0x0000) /*!< FSMC Bank1 registers base address */ -#define FSMC_Bank1E_R_BASE (FSMC_R_BASE + 0x0104) /*!< FSMC Bank1E registers base address */ -#define FSMC_Bank2_R_BASE (FSMC_R_BASE + 0x0060) /*!< FSMC Bank2 registers base address */ -#define FSMC_Bank3_R_BASE (FSMC_R_BASE + 0x0080) /*!< FSMC Bank3 registers base address */ -#define FSMC_Bank4_R_BASE (FSMC_R_BASE + 0x00A0) /*!< FSMC Bank4 registers base address */ - -#define DBGMCU_BASE ((uint32_t)0xE0042000) /*!< Debug MCU registers base address */ - -/** - * @} - */ - -/** @addtogroup Peripheral_declaration - * @{ - */ - -#define TIM2 ((TIM_TypeDef *) TIM2_BASE) -#define TIM3 ((TIM_TypeDef *) TIM3_BASE) -#define TIM4 ((TIM_TypeDef *) TIM4_BASE) -#define TIM5 ((TIM_TypeDef *) TIM5_BASE) -#define TIM6 ((TIM_TypeDef *) TIM6_BASE) -#define TIM7 ((TIM_TypeDef *) TIM7_BASE) -#define TIM12 ((TIM_TypeDef *) TIM12_BASE) -#define TIM13 ((TIM_TypeDef *) TIM13_BASE) -#define TIM14 ((TIM_TypeDef *) TIM14_BASE) -#define RTC ((RTC_TypeDef *) RTC_BASE) -#define WWDG ((WWDG_TypeDef *) WWDG_BASE) -#define IWDG ((IWDG_TypeDef *) IWDG_BASE) -#define SPI2 ((SPI_TypeDef *) SPI2_BASE) -#define SPI3 ((SPI_TypeDef *) SPI3_BASE) -#define USART2 ((USART_TypeDef *) USART2_BASE) -#define USART3 ((USART_TypeDef *) USART3_BASE) -#define UART4 ((USART_TypeDef *) UART4_BASE) -#define UART5 ((USART_TypeDef *) UART5_BASE) -#define I2C1 ((I2C_TypeDef *) I2C1_BASE) -#define I2C2 ((I2C_TypeDef *) I2C2_BASE) -#define CAN1 ((CAN_TypeDef *) CAN1_BASE) -#define CAN2 ((CAN_TypeDef *) CAN2_BASE) -#define BKP ((BKP_TypeDef *) BKP_BASE) -#define PWR ((PWR_TypeDef *) PWR_BASE) -#define DAC ((DAC_TypeDef *) DAC_BASE) -#define CEC ((CEC_TypeDef *) CEC_BASE) -#define AFIO ((AFIO_TypeDef *) AFIO_BASE) -#define EXTI ((EXTI_TypeDef *) EXTI_BASE) -#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) -#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) -#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) -#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) -#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) -#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE) -#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE) -#define ADC1 ((ADC_TypeDef *) ADC1_BASE) -#define ADC2 ((ADC_TypeDef *) ADC2_BASE) -#define TIM1 ((TIM_TypeDef *) TIM1_BASE) -#define SPI1 ((SPI_TypeDef *) SPI1_BASE) -#define TIM8 ((TIM_TypeDef *) TIM8_BASE) -#define USART1 ((USART_TypeDef *) USART1_BASE) -#define ADC3 ((ADC_TypeDef *) ADC3_BASE) -#define TIM15 ((TIM_TypeDef *) TIM15_BASE) -#define TIM16 ((TIM_TypeDef *) TIM16_BASE) -#define TIM17 ((TIM_TypeDef *) TIM17_BASE) -#define TIM9 ((TIM_TypeDef *) TIM9_BASE) -#define TIM10 ((TIM_TypeDef *) TIM10_BASE) -#define TIM11 ((TIM_TypeDef *) TIM11_BASE) -#define SDIO ((SDIO_TypeDef *) SDIO_BASE) -#define DMA1 ((DMA_TypeDef *) DMA1_BASE) -#define DMA2 ((DMA_TypeDef *) DMA2_BASE) -#define DMA1_Channel1 ((DMA_Channel_TypeDef *) DMA1_Channel1_BASE) -#define DMA1_Channel2 ((DMA_Channel_TypeDef *) DMA1_Channel2_BASE) -#define DMA1_Channel3 ((DMA_Channel_TypeDef *) DMA1_Channel3_BASE) -#define DMA1_Channel4 ((DMA_Channel_TypeDef *) DMA1_Channel4_BASE) -#define DMA1_Channel5 ((DMA_Channel_TypeDef *) DMA1_Channel5_BASE) -#define DMA1_Channel6 ((DMA_Channel_TypeDef *) DMA1_Channel6_BASE) -#define DMA1_Channel7 ((DMA_Channel_TypeDef *) DMA1_Channel7_BASE) -#define DMA2_Channel1 ((DMA_Channel_TypeDef *) DMA2_Channel1_BASE) -#define DMA2_Channel2 ((DMA_Channel_TypeDef *) DMA2_Channel2_BASE) -#define DMA2_Channel3 ((DMA_Channel_TypeDef *) DMA2_Channel3_BASE) -#define DMA2_Channel4 ((DMA_Channel_TypeDef *) DMA2_Channel4_BASE) -#define DMA2_Channel5 ((DMA_Channel_TypeDef *) DMA2_Channel5_BASE) -#define RCC ((RCC_TypeDef *) RCC_BASE) -#define CRC ((CRC_TypeDef *) CRC_BASE) -#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) -#define OB ((OB_TypeDef *) OB_BASE) -#define ETH ((ETH_TypeDef *) ETH_BASE) -#define FSMC_Bank1 ((FSMC_Bank1_TypeDef *) FSMC_Bank1_R_BASE) -#define FSMC_Bank1E ((FSMC_Bank1E_TypeDef *) FSMC_Bank1E_R_BASE) -#define FSMC_Bank2 ((FSMC_Bank2_TypeDef *) FSMC_Bank2_R_BASE) -#define FSMC_Bank3 ((FSMC_Bank3_TypeDef *) FSMC_Bank3_R_BASE) -#define FSMC_Bank4 ((FSMC_Bank4_TypeDef *) FSMC_Bank4_R_BASE) -#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) - -/** - * @} - */ - -/** @addtogroup Exported_constants - * @{ - */ - - /** @addtogroup Peripheral_Registers_Bits_Definition - * @{ - */ - -/******************************************************************************/ -/* Peripheral Registers_Bits_Definition */ -/******************************************************************************/ - -/******************************************************************************/ -/* */ -/* CRC calculation unit */ -/* */ -/******************************************************************************/ - -/******************* Bit definition for CRC_DR register *********************/ -#define CRC_DR_DR ((uint32_t)0xFFFFFFFF) /*!< Data register bits */ - - -/******************* Bit definition for CRC_IDR register ********************/ -#define CRC_IDR_IDR ((uint8_t)0xFF) /*!< General-purpose 8-bit data register bits */ - - -/******************** Bit definition for CRC_CR register ********************/ -#define CRC_CR_RESET ((uint8_t)0x01) /*!< RESET bit */ - -/******************************************************************************/ -/* */ -/* Power Control */ -/* */ -/******************************************************************************/ - -/******************** Bit definition for PWR_CR register ********************/ -#define PWR_CR_LPDS ((uint16_t)0x0001) /*!< Low-Power Deepsleep */ -#define PWR_CR_PDDS ((uint16_t)0x0002) /*!< Power Down Deepsleep */ -#define PWR_CR_CWUF ((uint16_t)0x0004) /*!< Clear Wakeup Flag */ -#define PWR_CR_CSBF ((uint16_t)0x0008) /*!< Clear Standby Flag */ -#define PWR_CR_PVDE ((uint16_t)0x0010) /*!< Power Voltage Detector Enable */ - -#define PWR_CR_PLS ((uint16_t)0x00E0) /*!< PLS[2:0] bits (PVD Level Selection) */ -#define PWR_CR_PLS_0 ((uint16_t)0x0020) /*!< Bit 0 */ -#define PWR_CR_PLS_1 ((uint16_t)0x0040) /*!< Bit 1 */ -#define PWR_CR_PLS_2 ((uint16_t)0x0080) /*!< Bit 2 */ - -/*!< PVD level configuration */ -#define PWR_CR_PLS_2V2 ((uint16_t)0x0000) /*!< PVD level 2.2V */ -#define PWR_CR_PLS_2V3 ((uint16_t)0x0020) /*!< PVD level 2.3V */ -#define PWR_CR_PLS_2V4 ((uint16_t)0x0040) /*!< PVD level 2.4V */ -#define PWR_CR_PLS_2V5 ((uint16_t)0x0060) /*!< PVD level 2.5V */ -#define PWR_CR_PLS_2V6 ((uint16_t)0x0080) /*!< PVD level 2.6V */ -#define PWR_CR_PLS_2V7 ((uint16_t)0x00A0) /*!< PVD level 2.7V */ -#define PWR_CR_PLS_2V8 ((uint16_t)0x00C0) /*!< PVD level 2.8V */ -#define PWR_CR_PLS_2V9 ((uint16_t)0x00E0) /*!< PVD level 2.9V */ - -#define PWR_CR_DBP ((uint16_t)0x0100) /*!< Disable Backup Domain write protection */ - - -/******************* Bit definition for PWR_CSR register ********************/ -#define PWR_CSR_WUF ((uint16_t)0x0001) /*!< Wakeup Flag */ -#define PWR_CSR_SBF ((uint16_t)0x0002) /*!< Standby Flag */ -#define PWR_CSR_PVDO ((uint16_t)0x0004) /*!< PVD Output */ -#define PWR_CSR_EWUP ((uint16_t)0x0100) /*!< Enable WKUP pin */ - -/******************************************************************************/ -/* */ -/* Backup registers */ -/* */ -/******************************************************************************/ - -/******************* Bit definition for BKP_DR1 register ********************/ -#define BKP_DR1_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR2 register ********************/ -#define BKP_DR2_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR3 register ********************/ -#define BKP_DR3_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR4 register ********************/ -#define BKP_DR4_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR5 register ********************/ -#define BKP_DR5_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR6 register ********************/ -#define BKP_DR6_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR7 register ********************/ -#define BKP_DR7_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR8 register ********************/ -#define BKP_DR8_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR9 register ********************/ -#define BKP_DR9_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR10 register *******************/ -#define BKP_DR10_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR11 register *******************/ -#define BKP_DR11_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR12 register *******************/ -#define BKP_DR12_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR13 register *******************/ -#define BKP_DR13_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR14 register *******************/ -#define BKP_DR14_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR15 register *******************/ -#define BKP_DR15_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR16 register *******************/ -#define BKP_DR16_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR17 register *******************/ -#define BKP_DR17_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/****************** Bit definition for BKP_DR18 register ********************/ -#define BKP_DR18_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR19 register *******************/ -#define BKP_DR19_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR20 register *******************/ -#define BKP_DR20_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR21 register *******************/ -#define BKP_DR21_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR22 register *******************/ -#define BKP_DR22_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR23 register *******************/ -#define BKP_DR23_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR24 register *******************/ -#define BKP_DR24_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR25 register *******************/ -#define BKP_DR25_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR26 register *******************/ -#define BKP_DR26_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR27 register *******************/ -#define BKP_DR27_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR28 register *******************/ -#define BKP_DR28_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR29 register *******************/ -#define BKP_DR29_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR30 register *******************/ -#define BKP_DR30_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR31 register *******************/ -#define BKP_DR31_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR32 register *******************/ -#define BKP_DR32_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR33 register *******************/ -#define BKP_DR33_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR34 register *******************/ -#define BKP_DR34_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR35 register *******************/ -#define BKP_DR35_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR36 register *******************/ -#define BKP_DR36_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR37 register *******************/ -#define BKP_DR37_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR38 register *******************/ -#define BKP_DR38_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR39 register *******************/ -#define BKP_DR39_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR40 register *******************/ -#define BKP_DR40_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR41 register *******************/ -#define BKP_DR41_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/******************* Bit definition for BKP_DR42 register *******************/ -#define BKP_DR42_D ((uint16_t)0xFFFF) /*!< Backup data */ - -/****************** Bit definition for BKP_RTCCR register *******************/ -#define BKP_RTCCR_CAL ((uint16_t)0x007F) /*!< Calibration value */ -#define BKP_RTCCR_CCO ((uint16_t)0x0080) /*!< Calibration Clock Output */ -#define BKP_RTCCR_ASOE ((uint16_t)0x0100) /*!< Alarm or Second Output Enable */ -#define BKP_RTCCR_ASOS ((uint16_t)0x0200) /*!< Alarm or Second Output Selection */ - -/******************** Bit definition for BKP_CR register ********************/ -#define BKP_CR_TPE ((uint8_t)0x01) /*!< TAMPER pin enable */ -#define BKP_CR_TPAL ((uint8_t)0x02) /*!< TAMPER pin active level */ - -/******************* Bit definition for BKP_CSR register ********************/ -#define BKP_CSR_CTE ((uint16_t)0x0001) /*!< Clear Tamper event */ -#define BKP_CSR_CTI ((uint16_t)0x0002) /*!< Clear Tamper Interrupt */ -#define BKP_CSR_TPIE ((uint16_t)0x0004) /*!< TAMPER Pin interrupt enable */ -#define BKP_CSR_TEF ((uint16_t)0x0100) /*!< Tamper Event Flag */ -#define BKP_CSR_TIF ((uint16_t)0x0200) /*!< Tamper Interrupt Flag */ - -/******************************************************************************/ -/* */ -/* Reset and Clock Control */ -/* */ -/******************************************************************************/ - -/******************** Bit definition for RCC_CR register ********************/ -#define RCC_CR_HSION ((uint32_t)0x00000001) /*!< Internal High Speed clock enable */ -#define RCC_CR_HSIRDY ((uint32_t)0x00000002) /*!< Internal High Speed clock ready flag */ -#define RCC_CR_HSITRIM ((uint32_t)0x000000F8) /*!< Internal High Speed clock trimming */ -#define RCC_CR_HSICAL ((uint32_t)0x0000FF00) /*!< Internal High Speed clock Calibration */ -#define RCC_CR_HSEON ((uint32_t)0x00010000) /*!< External High Speed clock enable */ -#define RCC_CR_HSERDY ((uint32_t)0x00020000) /*!< External High Speed clock ready flag */ -#define RCC_CR_HSEBYP ((uint32_t)0x00040000) /*!< External High Speed clock Bypass */ -#define RCC_CR_CSSON ((uint32_t)0x00080000) /*!< Clock Security System enable */ -#define RCC_CR_PLLON ((uint32_t)0x01000000) /*!< PLL enable */ -#define RCC_CR_PLLRDY ((uint32_t)0x02000000) /*!< PLL clock ready flag */ - -#ifdef STM32F10X_CL - #define RCC_CR_PLL2ON ((uint32_t)0x04000000) /*!< PLL2 enable */ - #define RCC_CR_PLL2RDY ((uint32_t)0x08000000) /*!< PLL2 clock ready flag */ - #define RCC_CR_PLL3ON ((uint32_t)0x10000000) /*!< PLL3 enable */ - #define RCC_CR_PLL3RDY ((uint32_t)0x20000000) /*!< PLL3 clock ready flag */ -#endif /* STM32F10X_CL */ - -/******************* Bit definition for RCC_CFGR register *******************/ -/*!< SW configuration */ -#define RCC_CFGR_SW ((uint32_t)0x00000003) /*!< SW[1:0] bits (System clock Switch) */ -#define RCC_CFGR_SW_0 ((uint32_t)0x00000001) /*!< Bit 0 */ -#define RCC_CFGR_SW_1 ((uint32_t)0x00000002) /*!< Bit 1 */ - -#define RCC_CFGR_SW_HSI ((uint32_t)0x00000000) /*!< HSI selected as system clock */ -#define RCC_CFGR_SW_HSE ((uint32_t)0x00000001) /*!< HSE selected as system clock */ -#define RCC_CFGR_SW_PLL ((uint32_t)0x00000002) /*!< PLL selected as system clock */ - -/*!< SWS configuration */ -#define RCC_CFGR_SWS ((uint32_t)0x0000000C) /*!< SWS[1:0] bits (System Clock Switch Status) */ -#define RCC_CFGR_SWS_0 ((uint32_t)0x00000004) /*!< Bit 0 */ -#define RCC_CFGR_SWS_1 ((uint32_t)0x00000008) /*!< Bit 1 */ - -#define RCC_CFGR_SWS_HSI ((uint32_t)0x00000000) /*!< HSI oscillator used as system clock */ -#define RCC_CFGR_SWS_HSE ((uint32_t)0x00000004) /*!< HSE oscillator used as system clock */ -#define RCC_CFGR_SWS_PLL ((uint32_t)0x00000008) /*!< PLL used as system clock */ - -/*!< HPRE configuration */ -#define RCC_CFGR_HPRE ((uint32_t)0x000000F0) /*!< HPRE[3:0] bits (AHB prescaler) */ -#define RCC_CFGR_HPRE_0 ((uint32_t)0x00000010) /*!< Bit 0 */ -#define RCC_CFGR_HPRE_1 ((uint32_t)0x00000020) /*!< Bit 1 */ -#define RCC_CFGR_HPRE_2 ((uint32_t)0x00000040) /*!< Bit 2 */ -#define RCC_CFGR_HPRE_3 ((uint32_t)0x00000080) /*!< Bit 3 */ - -#define RCC_CFGR_HPRE_DIV1 ((uint32_t)0x00000000) /*!< SYSCLK not divided */ -#define RCC_CFGR_HPRE_DIV2 ((uint32_t)0x00000080) /*!< SYSCLK divided by 2 */ -#define RCC_CFGR_HPRE_DIV4 ((uint32_t)0x00000090) /*!< SYSCLK divided by 4 */ -#define RCC_CFGR_HPRE_DIV8 ((uint32_t)0x000000A0) /*!< SYSCLK divided by 8 */ -#define RCC_CFGR_HPRE_DIV16 ((uint32_t)0x000000B0) /*!< SYSCLK divided by 16 */ -#define RCC_CFGR_HPRE_DIV64 ((uint32_t)0x000000C0) /*!< SYSCLK divided by 64 */ -#define RCC_CFGR_HPRE_DIV128 ((uint32_t)0x000000D0) /*!< SYSCLK divided by 128 */ -#define RCC_CFGR_HPRE_DIV256 ((uint32_t)0x000000E0) /*!< SYSCLK divided by 256 */ -#define RCC_CFGR_HPRE_DIV512 ((uint32_t)0x000000F0) /*!< SYSCLK divided by 512 */ - -/*!< PPRE1 configuration */ -#define RCC_CFGR_PPRE1 ((uint32_t)0x00000700) /*!< PRE1[2:0] bits (APB1 prescaler) */ -#define RCC_CFGR_PPRE1_0 ((uint32_t)0x00000100) /*!< Bit 0 */ -#define RCC_CFGR_PPRE1_1 ((uint32_t)0x00000200) /*!< Bit 1 */ -#define RCC_CFGR_PPRE1_2 ((uint32_t)0x00000400) /*!< Bit 2 */ - -#define RCC_CFGR_PPRE1_DIV1 ((uint32_t)0x00000000) /*!< HCLK not divided */ -#define RCC_CFGR_PPRE1_DIV2 ((uint32_t)0x00000400) /*!< HCLK divided by 2 */ -#define RCC_CFGR_PPRE1_DIV4 ((uint32_t)0x00000500) /*!< HCLK divided by 4 */ -#define RCC_CFGR_PPRE1_DIV8 ((uint32_t)0x00000600) /*!< HCLK divided by 8 */ -#define RCC_CFGR_PPRE1_DIV16 ((uint32_t)0x00000700) /*!< HCLK divided by 16 */ - -/*!< PPRE2 configuration */ -#define RCC_CFGR_PPRE2 ((uint32_t)0x00003800) /*!< PRE2[2:0] bits (APB2 prescaler) */ -#define RCC_CFGR_PPRE2_0 ((uint32_t)0x00000800) /*!< Bit 0 */ -#define RCC_CFGR_PPRE2_1 ((uint32_t)0x00001000) /*!< Bit 1 */ -#define RCC_CFGR_PPRE2_2 ((uint32_t)0x00002000) /*!< Bit 2 */ - -#define RCC_CFGR_PPRE2_DIV1 ((uint32_t)0x00000000) /*!< HCLK not divided */ -#define RCC_CFGR_PPRE2_DIV2 ((uint32_t)0x00002000) /*!< HCLK divided by 2 */ -#define RCC_CFGR_PPRE2_DIV4 ((uint32_t)0x00002800) /*!< HCLK divided by 4 */ -#define RCC_CFGR_PPRE2_DIV8 ((uint32_t)0x00003000) /*!< HCLK divided by 8 */ -#define RCC_CFGR_PPRE2_DIV16 ((uint32_t)0x00003800) /*!< HCLK divided by 16 */ - -/*!< ADCPPRE configuration */ -#define RCC_CFGR_ADCPRE ((uint32_t)0x0000C000) /*!< ADCPRE[1:0] bits (ADC prescaler) */ -#define RCC_CFGR_ADCPRE_0 ((uint32_t)0x00004000) /*!< Bit 0 */ -#define RCC_CFGR_ADCPRE_1 ((uint32_t)0x00008000) /*!< Bit 1 */ - -#define RCC_CFGR_ADCPRE_DIV2 ((uint32_t)0x00000000) /*!< PCLK2 divided by 2 */ -#define RCC_CFGR_ADCPRE_DIV4 ((uint32_t)0x00004000) /*!< PCLK2 divided by 4 */ -#define RCC_CFGR_ADCPRE_DIV6 ((uint32_t)0x00008000) /*!< PCLK2 divided by 6 */ -#define RCC_CFGR_ADCPRE_DIV8 ((uint32_t)0x0000C000) /*!< PCLK2 divided by 8 */ - -#define RCC_CFGR_PLLSRC ((uint32_t)0x00010000) /*!< PLL entry clock source */ - -#define RCC_CFGR_PLLXTPRE ((uint32_t)0x00020000) /*!< HSE divider for PLL entry */ - -/*!< PLLMUL configuration */ -#define RCC_CFGR_PLLMULL ((uint32_t)0x003C0000) /*!< PLLMUL[3:0] bits (PLL multiplication factor) */ -#define RCC_CFGR_PLLMULL_0 ((uint32_t)0x00040000) /*!< Bit 0 */ -#define RCC_CFGR_PLLMULL_1 ((uint32_t)0x00080000) /*!< Bit 1 */ -#define RCC_CFGR_PLLMULL_2 ((uint32_t)0x00100000) /*!< Bit 2 */ -#define RCC_CFGR_PLLMULL_3 ((uint32_t)0x00200000) /*!< Bit 3 */ - -#ifdef STM32F10X_CL - #define RCC_CFGR_PLLSRC_HSI_Div2 ((uint32_t)0x00000000) /*!< HSI clock divided by 2 selected as PLL entry clock source */ - #define RCC_CFGR_PLLSRC_PREDIV1 ((uint32_t)0x00010000) /*!< PREDIV1 clock selected as PLL entry clock source */ - - #define RCC_CFGR_PLLXTPRE_PREDIV1 ((uint32_t)0x00000000) /*!< PREDIV1 clock not divided for PLL entry */ - #define RCC_CFGR_PLLXTPRE_PREDIV1_Div2 ((uint32_t)0x00020000) /*!< PREDIV1 clock divided by 2 for PLL entry */ - - #define RCC_CFGR_PLLMULL4 ((uint32_t)0x00080000) /*!< PLL input clock * 4 */ - #define RCC_CFGR_PLLMULL5 ((uint32_t)0x000C0000) /*!< PLL input clock * 5 */ - #define RCC_CFGR_PLLMULL6 ((uint32_t)0x00100000) /*!< PLL input clock * 6 */ - #define RCC_CFGR_PLLMULL7 ((uint32_t)0x00140000) /*!< PLL input clock * 7 */ - #define RCC_CFGR_PLLMULL8 ((uint32_t)0x00180000) /*!< PLL input clock * 8 */ - #define RCC_CFGR_PLLMULL9 ((uint32_t)0x001C0000) /*!< PLL input clock * 9 */ - #define RCC_CFGR_PLLMULL6_5 ((uint32_t)0x00340000) /*!< PLL input clock * 6.5 */ - - #define RCC_CFGR_OTGFSPRE ((uint32_t)0x00400000) /*!< USB OTG FS prescaler */ - -/*!< MCO configuration */ - #define RCC_CFGR_MCO ((uint32_t)0x0F000000) /*!< MCO[3:0] bits (Microcontroller Clock Output) */ - #define RCC_CFGR_MCO_0 ((uint32_t)0x01000000) /*!< Bit 0 */ - #define RCC_CFGR_MCO_1 ((uint32_t)0x02000000) /*!< Bit 1 */ - #define RCC_CFGR_MCO_2 ((uint32_t)0x04000000) /*!< Bit 2 */ - #define RCC_CFGR_MCO_3 ((uint32_t)0x08000000) /*!< Bit 3 */ - - #define RCC_CFGR_MCO_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ - #define RCC_CFGR_MCO_SYSCLK ((uint32_t)0x04000000) /*!< System clock selected as MCO source */ - #define RCC_CFGR_MCO_HSI ((uint32_t)0x05000000) /*!< HSI clock selected as MCO source */ - #define RCC_CFGR_MCO_HSE ((uint32_t)0x06000000) /*!< HSE clock selected as MCO source */ - #define RCC_CFGR_MCO_PLLCLK_Div2 ((uint32_t)0x07000000) /*!< PLL clock divided by 2 selected as MCO source */ - #define RCC_CFGR_MCO_PLL2CLK ((uint32_t)0x08000000) /*!< PLL2 clock selected as MCO source*/ - #define RCC_CFGR_MCO_PLL3CLK_Div2 ((uint32_t)0x09000000) /*!< PLL3 clock divided by 2 selected as MCO source*/ - #define RCC_CFGR_MCO_Ext_HSE ((uint32_t)0x0A000000) /*!< XT1 external 3-25 MHz oscillator clock selected as MCO source */ - #define RCC_CFGR_MCO_PLL3CLK ((uint32_t)0x0B000000) /*!< PLL3 clock selected as MCO source */ -#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) - #define RCC_CFGR_PLLSRC_HSI_Div2 ((uint32_t)0x00000000) /*!< HSI clock divided by 2 selected as PLL entry clock source */ - #define RCC_CFGR_PLLSRC_PREDIV1 ((uint32_t)0x00010000) /*!< PREDIV1 clock selected as PLL entry clock source */ - - #define RCC_CFGR_PLLXTPRE_PREDIV1 ((uint32_t)0x00000000) /*!< PREDIV1 clock not divided for PLL entry */ - #define RCC_CFGR_PLLXTPRE_PREDIV1_Div2 ((uint32_t)0x00020000) /*!< PREDIV1 clock divided by 2 for PLL entry */ - - #define RCC_CFGR_PLLMULL2 ((uint32_t)0x00000000) /*!< PLL input clock*2 */ - #define RCC_CFGR_PLLMULL3 ((uint32_t)0x00040000) /*!< PLL input clock*3 */ - #define RCC_CFGR_PLLMULL4 ((uint32_t)0x00080000) /*!< PLL input clock*4 */ - #define RCC_CFGR_PLLMULL5 ((uint32_t)0x000C0000) /*!< PLL input clock*5 */ - #define RCC_CFGR_PLLMULL6 ((uint32_t)0x00100000) /*!< PLL input clock*6 */ - #define RCC_CFGR_PLLMULL7 ((uint32_t)0x00140000) /*!< PLL input clock*7 */ - #define RCC_CFGR_PLLMULL8 ((uint32_t)0x00180000) /*!< PLL input clock*8 */ - #define RCC_CFGR_PLLMULL9 ((uint32_t)0x001C0000) /*!< PLL input clock*9 */ - #define RCC_CFGR_PLLMULL10 ((uint32_t)0x00200000) /*!< PLL input clock10 */ - #define RCC_CFGR_PLLMULL11 ((uint32_t)0x00240000) /*!< PLL input clock*11 */ - #define RCC_CFGR_PLLMULL12 ((uint32_t)0x00280000) /*!< PLL input clock*12 */ - #define RCC_CFGR_PLLMULL13 ((uint32_t)0x002C0000) /*!< PLL input clock*13 */ - #define RCC_CFGR_PLLMULL14 ((uint32_t)0x00300000) /*!< PLL input clock*14 */ - #define RCC_CFGR_PLLMULL15 ((uint32_t)0x00340000) /*!< PLL input clock*15 */ - #define RCC_CFGR_PLLMULL16 ((uint32_t)0x00380000) /*!< PLL input clock*16 */ - -/*!< MCO configuration */ - #define RCC_CFGR_MCO ((uint32_t)0x07000000) /*!< MCO[2:0] bits (Microcontroller Clock Output) */ - #define RCC_CFGR_MCO_0 ((uint32_t)0x01000000) /*!< Bit 0 */ - #define RCC_CFGR_MCO_1 ((uint32_t)0x02000000) /*!< Bit 1 */ - #define RCC_CFGR_MCO_2 ((uint32_t)0x04000000) /*!< Bit 2 */ - - #define RCC_CFGR_MCO_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ - #define RCC_CFGR_MCO_SYSCLK ((uint32_t)0x04000000) /*!< System clock selected as MCO source */ - #define RCC_CFGR_MCO_HSI ((uint32_t)0x05000000) /*!< HSI clock selected as MCO source */ - #define RCC_CFGR_MCO_HSE ((uint32_t)0x06000000) /*!< HSE clock selected as MCO source */ - #define RCC_CFGR_MCO_PLL ((uint32_t)0x07000000) /*!< PLL clock divided by 2 selected as MCO source */ -#else - #define RCC_CFGR_PLLSRC_HSI_Div2 ((uint32_t)0x00000000) /*!< HSI clock divided by 2 selected as PLL entry clock source */ - #define RCC_CFGR_PLLSRC_HSE ((uint32_t)0x00010000) /*!< HSE clock selected as PLL entry clock source */ - - #define RCC_CFGR_PLLXTPRE_HSE ((uint32_t)0x00000000) /*!< HSE clock not divided for PLL entry */ - #define RCC_CFGR_PLLXTPRE_HSE_Div2 ((uint32_t)0x00020000) /*!< HSE clock divided by 2 for PLL entry */ - - #define RCC_CFGR_PLLMULL2 ((uint32_t)0x00000000) /*!< PLL input clock*2 */ - #define RCC_CFGR_PLLMULL3 ((uint32_t)0x00040000) /*!< PLL input clock*3 */ - #define RCC_CFGR_PLLMULL4 ((uint32_t)0x00080000) /*!< PLL input clock*4 */ - #define RCC_CFGR_PLLMULL5 ((uint32_t)0x000C0000) /*!< PLL input clock*5 */ - #define RCC_CFGR_PLLMULL6 ((uint32_t)0x00100000) /*!< PLL input clock*6 */ - #define RCC_CFGR_PLLMULL7 ((uint32_t)0x00140000) /*!< PLL input clock*7 */ - #define RCC_CFGR_PLLMULL8 ((uint32_t)0x00180000) /*!< PLL input clock*8 */ - #define RCC_CFGR_PLLMULL9 ((uint32_t)0x001C0000) /*!< PLL input clock*9 */ - #define RCC_CFGR_PLLMULL10 ((uint32_t)0x00200000) /*!< PLL input clock10 */ - #define RCC_CFGR_PLLMULL11 ((uint32_t)0x00240000) /*!< PLL input clock*11 */ - #define RCC_CFGR_PLLMULL12 ((uint32_t)0x00280000) /*!< PLL input clock*12 */ - #define RCC_CFGR_PLLMULL13 ((uint32_t)0x002C0000) /*!< PLL input clock*13 */ - #define RCC_CFGR_PLLMULL14 ((uint32_t)0x00300000) /*!< PLL input clock*14 */ - #define RCC_CFGR_PLLMULL15 ((uint32_t)0x00340000) /*!< PLL input clock*15 */ - #define RCC_CFGR_PLLMULL16 ((uint32_t)0x00380000) /*!< PLL input clock*16 */ - #define RCC_CFGR_USBPRE ((uint32_t)0x00400000) /*!< USB Device prescaler */ - -/*!< MCO configuration */ - #define RCC_CFGR_MCO ((uint32_t)0x07000000) /*!< MCO[2:0] bits (Microcontroller Clock Output) */ - #define RCC_CFGR_MCO_0 ((uint32_t)0x01000000) /*!< Bit 0 */ - #define RCC_CFGR_MCO_1 ((uint32_t)0x02000000) /*!< Bit 1 */ - #define RCC_CFGR_MCO_2 ((uint32_t)0x04000000) /*!< Bit 2 */ - - #define RCC_CFGR_MCO_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ - #define RCC_CFGR_MCO_SYSCLK ((uint32_t)0x04000000) /*!< System clock selected as MCO source */ - #define RCC_CFGR_MCO_HSI ((uint32_t)0x05000000) /*!< HSI clock selected as MCO source */ - #define RCC_CFGR_MCO_HSE ((uint32_t)0x06000000) /*!< HSE clock selected as MCO source */ - #define RCC_CFGR_MCO_PLL ((uint32_t)0x07000000) /*!< PLL clock divided by 2 selected as MCO source */ -#endif /* STM32F10X_CL */ - -/*!<****************** Bit definition for RCC_CIR register ********************/ -#define RCC_CIR_LSIRDYF ((uint32_t)0x00000001) /*!< LSI Ready Interrupt flag */ -#define RCC_CIR_LSERDYF ((uint32_t)0x00000002) /*!< LSE Ready Interrupt flag */ -#define RCC_CIR_HSIRDYF ((uint32_t)0x00000004) /*!< HSI Ready Interrupt flag */ -#define RCC_CIR_HSERDYF ((uint32_t)0x00000008) /*!< HSE Ready Interrupt flag */ -#define RCC_CIR_PLLRDYF ((uint32_t)0x00000010) /*!< PLL Ready Interrupt flag */ -#define RCC_CIR_CSSF ((uint32_t)0x00000080) /*!< Clock Security System Interrupt flag */ -#define RCC_CIR_LSIRDYIE ((uint32_t)0x00000100) /*!< LSI Ready Interrupt Enable */ -#define RCC_CIR_LSERDYIE ((uint32_t)0x00000200) /*!< LSE Ready Interrupt Enable */ -#define RCC_CIR_HSIRDYIE ((uint32_t)0x00000400) /*!< HSI Ready Interrupt Enable */ -#define RCC_CIR_HSERDYIE ((uint32_t)0x00000800) /*!< HSE Ready Interrupt Enable */ -#define RCC_CIR_PLLRDYIE ((uint32_t)0x00001000) /*!< PLL Ready Interrupt Enable */ -#define RCC_CIR_LSIRDYC ((uint32_t)0x00010000) /*!< LSI Ready Interrupt Clear */ -#define RCC_CIR_LSERDYC ((uint32_t)0x00020000) /*!< LSE Ready Interrupt Clear */ -#define RCC_CIR_HSIRDYC ((uint32_t)0x00040000) /*!< HSI Ready Interrupt Clear */ -#define RCC_CIR_HSERDYC ((uint32_t)0x00080000) /*!< HSE Ready Interrupt Clear */ -#define RCC_CIR_PLLRDYC ((uint32_t)0x00100000) /*!< PLL Ready Interrupt Clear */ -#define RCC_CIR_CSSC ((uint32_t)0x00800000) /*!< Clock Security System Interrupt Clear */ - -#ifdef STM32F10X_CL - #define RCC_CIR_PLL2RDYF ((uint32_t)0x00000020) /*!< PLL2 Ready Interrupt flag */ - #define RCC_CIR_PLL3RDYF ((uint32_t)0x00000040) /*!< PLL3 Ready Interrupt flag */ - #define RCC_CIR_PLL2RDYIE ((uint32_t)0x00002000) /*!< PLL2 Ready Interrupt Enable */ - #define RCC_CIR_PLL3RDYIE ((uint32_t)0x00004000) /*!< PLL3 Ready Interrupt Enable */ - #define RCC_CIR_PLL2RDYC ((uint32_t)0x00200000) /*!< PLL2 Ready Interrupt Clear */ - #define RCC_CIR_PLL3RDYC ((uint32_t)0x00400000) /*!< PLL3 Ready Interrupt Clear */ -#endif /* STM32F10X_CL */ - -/***************** Bit definition for RCC_APB2RSTR register *****************/ -#define RCC_APB2RSTR_AFIORST ((uint32_t)0x00000001) /*!< Alternate Function I/O reset */ -#define RCC_APB2RSTR_IOPARST ((uint32_t)0x00000004) /*!< I/O port A reset */ -#define RCC_APB2RSTR_IOPBRST ((uint32_t)0x00000008) /*!< I/O port B reset */ -#define RCC_APB2RSTR_IOPCRST ((uint32_t)0x00000010) /*!< I/O port C reset */ -#define RCC_APB2RSTR_IOPDRST ((uint32_t)0x00000020) /*!< I/O port D reset */ -#define RCC_APB2RSTR_ADC1RST ((uint32_t)0x00000200) /*!< ADC 1 interface reset */ - -#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) -#define RCC_APB2RSTR_ADC2RST ((uint32_t)0x00000400) /*!< ADC 2 interface reset */ -#endif - -#define RCC_APB2RSTR_TIM1RST ((uint32_t)0x00000800) /*!< TIM1 Timer reset */ -#define RCC_APB2RSTR_SPI1RST ((uint32_t)0x00001000) /*!< SPI 1 reset */ -#define RCC_APB2RSTR_USART1RST ((uint32_t)0x00004000) /*!< USART1 reset */ - -#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) -#define RCC_APB2RSTR_TIM15RST ((uint32_t)0x00010000) /*!< TIM15 Timer reset */ -#define RCC_APB2RSTR_TIM16RST ((uint32_t)0x00020000) /*!< TIM16 Timer reset */ -#define RCC_APB2RSTR_TIM17RST ((uint32_t)0x00040000) /*!< TIM17 Timer reset */ -#endif - -#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) - #define RCC_APB2RSTR_IOPERST ((uint32_t)0x00000040) /*!< I/O port E reset */ -#endif /* STM32F10X_LD && STM32F10X_LD_VL */ - -#if defined (STM32F10X_HD) || defined (STM32F10X_XL) - #define RCC_APB2RSTR_IOPFRST ((uint32_t)0x00000080) /*!< I/O port F reset */ - #define RCC_APB2RSTR_IOPGRST ((uint32_t)0x00000100) /*!< I/O port G reset */ - #define RCC_APB2RSTR_TIM8RST ((uint32_t)0x00002000) /*!< TIM8 Timer reset */ - #define RCC_APB2RSTR_ADC3RST ((uint32_t)0x00008000) /*!< ADC3 interface reset */ -#endif - -#ifdef STM32F10X_XL - #define RCC_APB2RSTR_TIM9RST ((uint32_t)0x00080000) /*!< TIM9 Timer reset */ - #define RCC_APB2RSTR_TIM10RST ((uint32_t)0x00100000) /*!< TIM10 Timer reset */ - #define RCC_APB2RSTR_TIM11RST ((uint32_t)0x00200000) /*!< TIM11 Timer reset */ -#endif /* STM32F10X_XL */ - -/***************** Bit definition for RCC_APB1RSTR register *****************/ -#define RCC_APB1RSTR_TIM2RST ((uint32_t)0x00000001) /*!< Timer 2 reset */ -#define RCC_APB1RSTR_TIM3RST ((uint32_t)0x00000002) /*!< Timer 3 reset */ -#define RCC_APB1RSTR_WWDGRST ((uint32_t)0x00000800) /*!< Window Watchdog reset */ -#define RCC_APB1RSTR_USART2RST ((uint32_t)0x00020000) /*!< USART 2 reset */ -#define RCC_APB1RSTR_I2C1RST ((uint32_t)0x00200000) /*!< I2C 1 reset */ - -#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) -#define RCC_APB1RSTR_CAN1RST ((uint32_t)0x02000000) /*!< CAN1 reset */ -#endif - -#define RCC_APB1RSTR_BKPRST ((uint32_t)0x08000000) /*!< Backup interface reset */ -#define RCC_APB1RSTR_PWRRST ((uint32_t)0x10000000) /*!< Power interface reset */ - -#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) - #define RCC_APB1RSTR_TIM4RST ((uint32_t)0x00000004) /*!< Timer 4 reset */ - #define RCC_APB1RSTR_SPI2RST ((uint32_t)0x00004000) /*!< SPI 2 reset */ - #define RCC_APB1RSTR_USART3RST ((uint32_t)0x00040000) /*!< RUSART 3 reset */ - #define RCC_APB1RSTR_I2C2RST ((uint32_t)0x00400000) /*!< I2C 2 reset */ -#endif /* STM32F10X_LD && STM32F10X_LD_VL */ - -#if defined (STM32F10X_HD) || defined (STM32F10X_MD) || defined (STM32F10X_LD) || defined (STM32F10X_XL) - #define RCC_APB1RSTR_USBRST ((uint32_t)0x00800000) /*!< USB Device reset */ -#endif - -#if defined (STM32F10X_HD) || defined (STM32F10X_CL) || defined (STM32F10X_XL) - #define RCC_APB1RSTR_TIM5RST ((uint32_t)0x00000008) /*!< Timer 5 reset */ - #define RCC_APB1RSTR_TIM6RST ((uint32_t)0x00000010) /*!< Timer 6 reset */ - #define RCC_APB1RSTR_TIM7RST ((uint32_t)0x00000020) /*!< Timer 7 reset */ - #define RCC_APB1RSTR_SPI3RST ((uint32_t)0x00008000) /*!< SPI 3 reset */ - #define RCC_APB1RSTR_UART4RST ((uint32_t)0x00080000) /*!< UART 4 reset */ - #define RCC_APB1RSTR_UART5RST ((uint32_t)0x00100000) /*!< UART 5 reset */ - #define RCC_APB1RSTR_DACRST ((uint32_t)0x20000000) /*!< DAC interface reset */ -#endif - -#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) - #define RCC_APB1RSTR_TIM6RST ((uint32_t)0x00000010) /*!< Timer 6 reset */ - #define RCC_APB1RSTR_TIM7RST ((uint32_t)0x00000020) /*!< Timer 7 reset */ - #define RCC_APB1RSTR_DACRST ((uint32_t)0x20000000) /*!< DAC interface reset */ - #define RCC_APB1RSTR_CECRST ((uint32_t)0x40000000) /*!< CEC interface reset */ -#endif - -#ifdef STM32F10X_CL - #define RCC_APB1RSTR_CAN2RST ((uint32_t)0x04000000) /*!< CAN2 reset */ -#endif /* STM32F10X_CL */ - -#ifdef STM32F10X_XL - #define RCC_APB1RSTR_TIM12RST ((uint32_t)0x00000040) /*!< TIM12 Timer reset */ - #define RCC_APB1RSTR_TIM13RST ((uint32_t)0x00000080) /*!< TIM13 Timer reset */ - #define RCC_APB1RSTR_TIM14RST ((uint32_t)0x00000100) /*!< TIM14 Timer reset */ -#endif /* STM32F10X_XL */ - -/****************** Bit definition for RCC_AHBENR register ******************/ -#define RCC_AHBENR_DMA1EN ((uint16_t)0x0001) /*!< DMA1 clock enable */ -#define RCC_AHBENR_SRAMEN ((uint16_t)0x0004) /*!< SRAM interface clock enable */ -#define RCC_AHBENR_FLITFEN ((uint16_t)0x0010) /*!< FLITF clock enable */ -#define RCC_AHBENR_CRCEN ((uint16_t)0x0040) /*!< CRC clock enable */ - -#if defined (STM32F10X_HD) || defined (STM32F10X_CL) - #define RCC_AHBENR_DMA2EN ((uint16_t)0x0002) /*!< DMA2 clock enable */ -#endif - -#if defined (STM32F10X_HD) || defined (STM32F10X_XL) - #define RCC_AHBENR_FSMCEN ((uint16_t)0x0100) /*!< FSMC clock enable */ - #define RCC_AHBENR_SDIOEN ((uint16_t)0x0400) /*!< SDIO clock enable */ -#endif - -#ifdef STM32F10X_CL - #define RCC_AHBENR_OTGFSEN ((uint32_t)0x00001000) /*!< USB OTG FS clock enable */ - #define RCC_AHBENR_ETHMACEN ((uint32_t)0x00004000) /*!< ETHERNET MAC clock enable */ - #define RCC_AHBENR_ETHMACTXEN ((uint32_t)0x00008000) /*!< ETHERNET MAC Tx clock enable */ - #define RCC_AHBENR_ETHMACRXEN ((uint32_t)0x00010000) /*!< ETHERNET MAC Rx clock enable */ -#endif /* STM32F10X_CL */ - -/****************** Bit definition for RCC_APB2ENR register *****************/ -#define RCC_APB2ENR_AFIOEN ((uint32_t)0x00000001) /*!< Alternate Function I/O clock enable */ -#define RCC_APB2ENR_IOPAEN ((uint32_t)0x00000004) /*!< I/O port A clock enable */ -#define RCC_APB2ENR_IOPBEN ((uint32_t)0x00000008) /*!< I/O port B clock enable */ -#define RCC_APB2ENR_IOPCEN ((uint32_t)0x00000010) /*!< I/O port C clock enable */ -#define RCC_APB2ENR_IOPDEN ((uint32_t)0x00000020) /*!< I/O port D clock enable */ -#define RCC_APB2ENR_ADC1EN ((uint32_t)0x00000200) /*!< ADC 1 interface clock enable */ - -#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) -#define RCC_APB2ENR_ADC2EN ((uint32_t)0x00000400) /*!< ADC 2 interface clock enable */ -#endif - -#define RCC_APB2ENR_TIM1EN ((uint32_t)0x00000800) /*!< TIM1 Timer clock enable */ -#define RCC_APB2ENR_SPI1EN ((uint32_t)0x00001000) /*!< SPI 1 clock enable */ -#define RCC_APB2ENR_USART1EN ((uint32_t)0x00004000) /*!< USART1 clock enable */ - -#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) -#define RCC_APB2ENR_TIM15EN ((uint32_t)0x00010000) /*!< TIM15 Timer clock enable */ -#define RCC_APB2ENR_TIM16EN ((uint32_t)0x00020000) /*!< TIM16 Timer clock enable */ -#define RCC_APB2ENR_TIM17EN ((uint32_t)0x00040000) /*!< TIM17 Timer clock enable */ -#endif - -#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) - #define RCC_APB2ENR_IOPEEN ((uint32_t)0x00000040) /*!< I/O port E clock enable */ -#endif /* STM32F10X_LD && STM32F10X_LD_VL */ - -#if defined (STM32F10X_HD) || defined (STM32F10X_XL) - #define RCC_APB2ENR_IOPFEN ((uint32_t)0x00000080) /*!< I/O port F clock enable */ - #define RCC_APB2ENR_IOPGEN ((uint32_t)0x00000100) /*!< I/O port G clock enable */ - #define RCC_APB2ENR_TIM8EN ((uint32_t)0x00002000) /*!< TIM8 Timer clock enable */ - #define RCC_APB2ENR_ADC3EN ((uint32_t)0x00008000) /*!< DMA1 clock enable */ -#endif - -#ifdef STM32F10X_XL - #define RCC_APB2ENR_TIM9EN ((uint32_t)0x00080000) /*!< TIM9 Timer clock enable */ - #define RCC_APB2ENR_TIM10EN ((uint32_t)0x00100000) /*!< TIM10 Timer clock enable */ - #define RCC_APB2ENR_TIM11EN ((uint32_t)0x00200000) /*!< TIM11 Timer clock enable */ -#endif - -/***************** Bit definition for RCC_APB1ENR register ******************/ -#define RCC_APB1ENR_TIM2EN ((uint32_t)0x00000001) /*!< Timer 2 clock enabled*/ -#define RCC_APB1ENR_TIM3EN ((uint32_t)0x00000002) /*!< Timer 3 clock enable */ -#define RCC_APB1ENR_WWDGEN ((uint32_t)0x00000800) /*!< Window Watchdog clock enable */ -#define RCC_APB1ENR_USART2EN ((uint32_t)0x00020000) /*!< USART 2 clock enable */ -#define RCC_APB1ENR_I2C1EN ((uint32_t)0x00200000) /*!< I2C 1 clock enable */ - -#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) -#define RCC_APB1ENR_CAN1EN ((uint32_t)0x02000000) /*!< CAN1 clock enable */ -#endif - -#define RCC_APB1ENR_BKPEN ((uint32_t)0x08000000) /*!< Backup interface clock enable */ -#define RCC_APB1ENR_PWREN ((uint32_t)0x10000000) /*!< Power interface clock enable */ - -#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) - #define RCC_APB1ENR_TIM4EN ((uint32_t)0x00000004) /*!< Timer 4 clock enable */ - #define RCC_APB1ENR_SPI2EN ((uint32_t)0x00004000) /*!< SPI 2 clock enable */ - #define RCC_APB1ENR_USART3EN ((uint32_t)0x00040000) /*!< USART 3 clock enable */ - #define RCC_APB1ENR_I2C2EN ((uint32_t)0x00400000) /*!< I2C 2 clock enable */ -#endif /* STM32F10X_LD && STM32F10X_LD_VL */ - -#if defined (STM32F10X_HD) || defined (STM32F10X_MD) || defined (STM32F10X_LD) - #define RCC_APB1ENR_USBEN ((uint32_t)0x00800000) /*!< USB Device clock enable */ -#endif - -#if defined (STM32F10X_HD) || defined (STM32F10X_CL) - #define RCC_APB1ENR_TIM5EN ((uint32_t)0x00000008) /*!< Timer 5 clock enable */ - #define RCC_APB1ENR_TIM6EN ((uint32_t)0x00000010) /*!< Timer 6 clock enable */ - #define RCC_APB1ENR_TIM7EN ((uint32_t)0x00000020) /*!< Timer 7 clock enable */ - #define RCC_APB1ENR_SPI3EN ((uint32_t)0x00008000) /*!< SPI 3 clock enable */ - #define RCC_APB1ENR_UART4EN ((uint32_t)0x00080000) /*!< UART 4 clock enable */ - #define RCC_APB1ENR_UART5EN ((uint32_t)0x00100000) /*!< UART 5 clock enable */ - #define RCC_APB1ENR_DACEN ((uint32_t)0x20000000) /*!< DAC interface clock enable */ -#endif - -#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) - #define RCC_APB1ENR_TIM6EN ((uint32_t)0x00000010) /*!< Timer 6 clock enable */ - #define RCC_APB1ENR_TIM7EN ((uint32_t)0x00000020) /*!< Timer 7 clock enable */ - #define RCC_APB1ENR_DACEN ((uint32_t)0x20000000) /*!< DAC interface clock enable */ - #define RCC_APB1ENR_CECEN ((uint32_t)0x40000000) /*!< CEC interface clock enable */ -#endif - -#ifdef STM32F10X_CL - #define RCC_APB1ENR_CAN2EN ((uint32_t)0x04000000) /*!< CAN2 clock enable */ -#endif /* STM32F10X_CL */ - -#ifdef STM32F10X_XL - #define RCC_APB1ENR_TIM12EN ((uint32_t)0x00000040) /*!< TIM12 Timer clock enable */ - #define RCC_APB1ENR_TIM13EN ((uint32_t)0x00000080) /*!< TIM13 Timer clock enable */ - #define RCC_APB1ENR_TIM14EN ((uint32_t)0x00000100) /*!< TIM14 Timer clock enable */ -#endif /* STM32F10X_XL */ - -/******************* Bit definition for RCC_BDCR register *******************/ -#define RCC_BDCR_LSEON ((uint32_t)0x00000001) /*!< External Low Speed oscillator enable */ -#define RCC_BDCR_LSERDY ((uint32_t)0x00000002) /*!< External Low Speed oscillator Ready */ -#define RCC_BDCR_LSEBYP ((uint32_t)0x00000004) /*!< External Low Speed oscillator Bypass */ - -#define RCC_BDCR_RTCSEL ((uint32_t)0x00000300) /*!< RTCSEL[1:0] bits (RTC clock source selection) */ -#define RCC_BDCR_RTCSEL_0 ((uint32_t)0x00000100) /*!< Bit 0 */ -#define RCC_BDCR_RTCSEL_1 ((uint32_t)0x00000200) /*!< Bit 1 */ - -/*!< RTC congiguration */ -#define RCC_BDCR_RTCSEL_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ -#define RCC_BDCR_RTCSEL_LSE ((uint32_t)0x00000100) /*!< LSE oscillator clock used as RTC clock */ -#define RCC_BDCR_RTCSEL_LSI ((uint32_t)0x00000200) /*!< LSI oscillator clock used as RTC clock */ -#define RCC_BDCR_RTCSEL_HSE ((uint32_t)0x00000300) /*!< HSE oscillator clock divided by 128 used as RTC clock */ - -#define RCC_BDCR_RTCEN ((uint32_t)0x00008000) /*!< RTC clock enable */ -#define RCC_BDCR_BDRST ((uint32_t)0x00010000) /*!< Backup domain software reset */ - -/******************* Bit definition for RCC_CSR register ********************/ -#define RCC_CSR_LSION ((uint32_t)0x00000001) /*!< Internal Low Speed oscillator enable */ -#define RCC_CSR_LSIRDY ((uint32_t)0x00000002) /*!< Internal Low Speed oscillator Ready */ -#define RCC_CSR_RMVF ((uint32_t)0x01000000) /*!< Remove reset flag */ -#define RCC_CSR_PINRSTF ((uint32_t)0x04000000) /*!< PIN reset flag */ -#define RCC_CSR_PORRSTF ((uint32_t)0x08000000) /*!< POR/PDR reset flag */ -#define RCC_CSR_SFTRSTF ((uint32_t)0x10000000) /*!< Software Reset flag */ -#define RCC_CSR_IWDGRSTF ((uint32_t)0x20000000) /*!< Independent Watchdog reset flag */ -#define RCC_CSR_WWDGRSTF ((uint32_t)0x40000000) /*!< Window watchdog reset flag */ -#define RCC_CSR_LPWRRSTF ((uint32_t)0x80000000) /*!< Low-Power reset flag */ - -#ifdef STM32F10X_CL -/******************* Bit definition for RCC_AHBRSTR register ****************/ - #define RCC_AHBRSTR_OTGFSRST ((uint32_t)0x00001000) /*!< USB OTG FS reset */ - #define RCC_AHBRSTR_ETHMACRST ((uint32_t)0x00004000) /*!< ETHERNET MAC reset */ - -/******************* Bit definition for RCC_CFGR2 register ******************/ -/*!< PREDIV1 configuration */ - #define RCC_CFGR2_PREDIV1 ((uint32_t)0x0000000F) /*!< PREDIV1[3:0] bits */ - #define RCC_CFGR2_PREDIV1_0 ((uint32_t)0x00000001) /*!< Bit 0 */ - #define RCC_CFGR2_PREDIV1_1 ((uint32_t)0x00000002) /*!< Bit 1 */ - #define RCC_CFGR2_PREDIV1_2 ((uint32_t)0x00000004) /*!< Bit 2 */ - #define RCC_CFGR2_PREDIV1_3 ((uint32_t)0x00000008) /*!< Bit 3 */ - - #define RCC_CFGR2_PREDIV1_DIV1 ((uint32_t)0x00000000) /*!< PREDIV1 input clock not divided */ - #define RCC_CFGR2_PREDIV1_DIV2 ((uint32_t)0x00000001) /*!< PREDIV1 input clock divided by 2 */ - #define RCC_CFGR2_PREDIV1_DIV3 ((uint32_t)0x00000002) /*!< PREDIV1 input clock divided by 3 */ - #define RCC_CFGR2_PREDIV1_DIV4 ((uint32_t)0x00000003) /*!< PREDIV1 input clock divided by 4 */ - #define RCC_CFGR2_PREDIV1_DIV5 ((uint32_t)0x00000004) /*!< PREDIV1 input clock divided by 5 */ - #define RCC_CFGR2_PREDIV1_DIV6 ((uint32_t)0x00000005) /*!< PREDIV1 input clock divided by 6 */ - #define RCC_CFGR2_PREDIV1_DIV7 ((uint32_t)0x00000006) /*!< PREDIV1 input clock divided by 7 */ - #define RCC_CFGR2_PREDIV1_DIV8 ((uint32_t)0x00000007) /*!< PREDIV1 input clock divided by 8 */ - #define RCC_CFGR2_PREDIV1_DIV9 ((uint32_t)0x00000008) /*!< PREDIV1 input clock divided by 9 */ - #define RCC_CFGR2_PREDIV1_DIV10 ((uint32_t)0x00000009) /*!< PREDIV1 input clock divided by 10 */ - #define RCC_CFGR2_PREDIV1_DIV11 ((uint32_t)0x0000000A) /*!< PREDIV1 input clock divided by 11 */ - #define RCC_CFGR2_PREDIV1_DIV12 ((uint32_t)0x0000000B) /*!< PREDIV1 input clock divided by 12 */ - #define RCC_CFGR2_PREDIV1_DIV13 ((uint32_t)0x0000000C) /*!< PREDIV1 input clock divided by 13 */ - #define RCC_CFGR2_PREDIV1_DIV14 ((uint32_t)0x0000000D) /*!< PREDIV1 input clock divided by 14 */ - #define RCC_CFGR2_PREDIV1_DIV15 ((uint32_t)0x0000000E) /*!< PREDIV1 input clock divided by 15 */ - #define RCC_CFGR2_PREDIV1_DIV16 ((uint32_t)0x0000000F) /*!< PREDIV1 input clock divided by 16 */ - -/*!< PREDIV2 configuration */ - #define RCC_CFGR2_PREDIV2 ((uint32_t)0x000000F0) /*!< PREDIV2[3:0] bits */ - #define RCC_CFGR2_PREDIV2_0 ((uint32_t)0x00000010) /*!< Bit 0 */ - #define RCC_CFGR2_PREDIV2_1 ((uint32_t)0x00000020) /*!< Bit 1 */ - #define RCC_CFGR2_PREDIV2_2 ((uint32_t)0x00000040) /*!< Bit 2 */ - #define RCC_CFGR2_PREDIV2_3 ((uint32_t)0x00000080) /*!< Bit 3 */ - - #define RCC_CFGR2_PREDIV2_DIV1 ((uint32_t)0x00000000) /*!< PREDIV2 input clock not divided */ - #define RCC_CFGR2_PREDIV2_DIV2 ((uint32_t)0x00000010) /*!< PREDIV2 input clock divided by 2 */ - #define RCC_CFGR2_PREDIV2_DIV3 ((uint32_t)0x00000020) /*!< PREDIV2 input clock divided by 3 */ - #define RCC_CFGR2_PREDIV2_DIV4 ((uint32_t)0x00000030) /*!< PREDIV2 input clock divided by 4 */ - #define RCC_CFGR2_PREDIV2_DIV5 ((uint32_t)0x00000040) /*!< PREDIV2 input clock divided by 5 */ - #define RCC_CFGR2_PREDIV2_DIV6 ((uint32_t)0x00000050) /*!< PREDIV2 input clock divided by 6 */ - #define RCC_CFGR2_PREDIV2_DIV7 ((uint32_t)0x00000060) /*!< PREDIV2 input clock divided by 7 */ - #define RCC_CFGR2_PREDIV2_DIV8 ((uint32_t)0x00000070) /*!< PREDIV2 input clock divided by 8 */ - #define RCC_CFGR2_PREDIV2_DIV9 ((uint32_t)0x00000080) /*!< PREDIV2 input clock divided by 9 */ - #define RCC_CFGR2_PREDIV2_DIV10 ((uint32_t)0x00000090) /*!< PREDIV2 input clock divided by 10 */ - #define RCC_CFGR2_PREDIV2_DIV11 ((uint32_t)0x000000A0) /*!< PREDIV2 input clock divided by 11 */ - #define RCC_CFGR2_PREDIV2_DIV12 ((uint32_t)0x000000B0) /*!< PREDIV2 input clock divided by 12 */ - #define RCC_CFGR2_PREDIV2_DIV13 ((uint32_t)0x000000C0) /*!< PREDIV2 input clock divided by 13 */ - #define RCC_CFGR2_PREDIV2_DIV14 ((uint32_t)0x000000D0) /*!< PREDIV2 input clock divided by 14 */ - #define RCC_CFGR2_PREDIV2_DIV15 ((uint32_t)0x000000E0) /*!< PREDIV2 input clock divided by 15 */ - #define RCC_CFGR2_PREDIV2_DIV16 ((uint32_t)0x000000F0) /*!< PREDIV2 input clock divided by 16 */ - -/*!< PLL2MUL configuration */ - #define RCC_CFGR2_PLL2MUL ((uint32_t)0x00000F00) /*!< PLL2MUL[3:0] bits */ - #define RCC_CFGR2_PLL2MUL_0 ((uint32_t)0x00000100) /*!< Bit 0 */ - #define RCC_CFGR2_PLL2MUL_1 ((uint32_t)0x00000200) /*!< Bit 1 */ - #define RCC_CFGR2_PLL2MUL_2 ((uint32_t)0x00000400) /*!< Bit 2 */ - #define RCC_CFGR2_PLL2MUL_3 ((uint32_t)0x00000800) /*!< Bit 3 */ - - #define RCC_CFGR2_PLL2MUL8 ((uint32_t)0x00000600) /*!< PLL2 input clock * 8 */ - #define RCC_CFGR2_PLL2MUL9 ((uint32_t)0x00000700) /*!< PLL2 input clock * 9 */ - #define RCC_CFGR2_PLL2MUL10 ((uint32_t)0x00000800) /*!< PLL2 input clock * 10 */ - #define RCC_CFGR2_PLL2MUL11 ((uint32_t)0x00000900) /*!< PLL2 input clock * 11 */ - #define RCC_CFGR2_PLL2MUL12 ((uint32_t)0x00000A00) /*!< PLL2 input clock * 12 */ - #define RCC_CFGR2_PLL2MUL13 ((uint32_t)0x00000B00) /*!< PLL2 input clock * 13 */ - #define RCC_CFGR2_PLL2MUL14 ((uint32_t)0x00000C00) /*!< PLL2 input clock * 14 */ - #define RCC_CFGR2_PLL2MUL16 ((uint32_t)0x00000E00) /*!< PLL2 input clock * 16 */ - #define RCC_CFGR2_PLL2MUL20 ((uint32_t)0x00000F00) /*!< PLL2 input clock * 20 */ - -/*!< PLL3MUL configuration */ - #define RCC_CFGR2_PLL3MUL ((uint32_t)0x0000F000) /*!< PLL3MUL[3:0] bits */ - #define RCC_CFGR2_PLL3MUL_0 ((uint32_t)0x00001000) /*!< Bit 0 */ - #define RCC_CFGR2_PLL3MUL_1 ((uint32_t)0x00002000) /*!< Bit 1 */ - #define RCC_CFGR2_PLL3MUL_2 ((uint32_t)0x00004000) /*!< Bit 2 */ - #define RCC_CFGR2_PLL3MUL_3 ((uint32_t)0x00008000) /*!< Bit 3 */ - - #define RCC_CFGR2_PLL3MUL8 ((uint32_t)0x00006000) /*!< PLL3 input clock * 8 */ - #define RCC_CFGR2_PLL3MUL9 ((uint32_t)0x00007000) /*!< PLL3 input clock * 9 */ - #define RCC_CFGR2_PLL3MUL10 ((uint32_t)0x00008000) /*!< PLL3 input clock * 10 */ - #define RCC_CFGR2_PLL3MUL11 ((uint32_t)0x00009000) /*!< PLL3 input clock * 11 */ - #define RCC_CFGR2_PLL3MUL12 ((uint32_t)0x0000A000) /*!< PLL3 input clock * 12 */ - #define RCC_CFGR2_PLL3MUL13 ((uint32_t)0x0000B000) /*!< PLL3 input clock * 13 */ - #define RCC_CFGR2_PLL3MUL14 ((uint32_t)0x0000C000) /*!< PLL3 input clock * 14 */ - #define RCC_CFGR2_PLL3MUL16 ((uint32_t)0x0000E000) /*!< PLL3 input clock * 16 */ - #define RCC_CFGR2_PLL3MUL20 ((uint32_t)0x0000F000) /*!< PLL3 input clock * 20 */ - - #define RCC_CFGR2_PREDIV1SRC ((uint32_t)0x00010000) /*!< PREDIV1 entry clock source */ - #define RCC_CFGR2_PREDIV1SRC_PLL2 ((uint32_t)0x00010000) /*!< PLL2 selected as PREDIV1 entry clock source */ - #define RCC_CFGR2_PREDIV1SRC_HSE ((uint32_t)0x00000000) /*!< HSE selected as PREDIV1 entry clock source */ - #define RCC_CFGR2_I2S2SRC ((uint32_t)0x00020000) /*!< I2S2 entry clock source */ - #define RCC_CFGR2_I2S3SRC ((uint32_t)0x00040000) /*!< I2S3 clock source */ -#endif /* STM32F10X_CL */ - -#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) -/******************* Bit definition for RCC_CFGR2 register ******************/ -/*!< PREDIV1 configuration */ - #define RCC_CFGR2_PREDIV1 ((uint32_t)0x0000000F) /*!< PREDIV1[3:0] bits */ - #define RCC_CFGR2_PREDIV1_0 ((uint32_t)0x00000001) /*!< Bit 0 */ - #define RCC_CFGR2_PREDIV1_1 ((uint32_t)0x00000002) /*!< Bit 1 */ - #define RCC_CFGR2_PREDIV1_2 ((uint32_t)0x00000004) /*!< Bit 2 */ - #define RCC_CFGR2_PREDIV1_3 ((uint32_t)0x00000008) /*!< Bit 3 */ - - #define RCC_CFGR2_PREDIV1_DIV1 ((uint32_t)0x00000000) /*!< PREDIV1 input clock not divided */ - #define RCC_CFGR2_PREDIV1_DIV2 ((uint32_t)0x00000001) /*!< PREDIV1 input clock divided by 2 */ - #define RCC_CFGR2_PREDIV1_DIV3 ((uint32_t)0x00000002) /*!< PREDIV1 input clock divided by 3 */ - #define RCC_CFGR2_PREDIV1_DIV4 ((uint32_t)0x00000003) /*!< PREDIV1 input clock divided by 4 */ - #define RCC_CFGR2_PREDIV1_DIV5 ((uint32_t)0x00000004) /*!< PREDIV1 input clock divided by 5 */ - #define RCC_CFGR2_PREDIV1_DIV6 ((uint32_t)0x00000005) /*!< PREDIV1 input clock divided by 6 */ - #define RCC_CFGR2_PREDIV1_DIV7 ((uint32_t)0x00000006) /*!< PREDIV1 input clock divided by 7 */ - #define RCC_CFGR2_PREDIV1_DIV8 ((uint32_t)0x00000007) /*!< PREDIV1 input clock divided by 8 */ - #define RCC_CFGR2_PREDIV1_DIV9 ((uint32_t)0x00000008) /*!< PREDIV1 input clock divided by 9 */ - #define RCC_CFGR2_PREDIV1_DIV10 ((uint32_t)0x00000009) /*!< PREDIV1 input clock divided by 10 */ - #define RCC_CFGR2_PREDIV1_DIV11 ((uint32_t)0x0000000A) /*!< PREDIV1 input clock divided by 11 */ - #define RCC_CFGR2_PREDIV1_DIV12 ((uint32_t)0x0000000B) /*!< PREDIV1 input clock divided by 12 */ - #define RCC_CFGR2_PREDIV1_DIV13 ((uint32_t)0x0000000C) /*!< PREDIV1 input clock divided by 13 */ - #define RCC_CFGR2_PREDIV1_DIV14 ((uint32_t)0x0000000D) /*!< PREDIV1 input clock divided by 14 */ - #define RCC_CFGR2_PREDIV1_DIV15 ((uint32_t)0x0000000E) /*!< PREDIV1 input clock divided by 15 */ - #define RCC_CFGR2_PREDIV1_DIV16 ((uint32_t)0x0000000F) /*!< PREDIV1 input clock divided by 16 */ -#endif - -/******************************************************************************/ -/* */ -/* General Purpose and Alternate Function I/O */ -/* */ -/******************************************************************************/ - -/******************* Bit definition for GPIO_CRL register *******************/ -#define GPIO_CRL_MODE ((uint32_t)0x33333333) /*!< Port x mode bits */ - -#define GPIO_CRL_MODE0 ((uint32_t)0x00000003) /*!< MODE0[1:0] bits (Port x mode bits, pin 0) */ -#define GPIO_CRL_MODE0_0 ((uint32_t)0x00000001) /*!< Bit 0 */ -#define GPIO_CRL_MODE0_1 ((uint32_t)0x00000002) /*!< Bit 1 */ - -#define GPIO_CRL_MODE1 ((uint32_t)0x00000030) /*!< MODE1[1:0] bits (Port x mode bits, pin 1) */ -#define GPIO_CRL_MODE1_0 ((uint32_t)0x00000010) /*!< Bit 0 */ -#define GPIO_CRL_MODE1_1 ((uint32_t)0x00000020) /*!< Bit 1 */ - -#define GPIO_CRL_MODE2 ((uint32_t)0x00000300) /*!< MODE2[1:0] bits (Port x mode bits, pin 2) */ -#define GPIO_CRL_MODE2_0 ((uint32_t)0x00000100) /*!< Bit 0 */ -#define GPIO_CRL_MODE2_1 ((uint32_t)0x00000200) /*!< Bit 1 */ - -#define GPIO_CRL_MODE3 ((uint32_t)0x00003000) /*!< MODE3[1:0] bits (Port x mode bits, pin 3) */ -#define GPIO_CRL_MODE3_0 ((uint32_t)0x00001000) /*!< Bit 0 */ -#define GPIO_CRL_MODE3_1 ((uint32_t)0x00002000) /*!< Bit 1 */ - -#define GPIO_CRL_MODE4 ((uint32_t)0x00030000) /*!< MODE4[1:0] bits (Port x mode bits, pin 4) */ -#define GPIO_CRL_MODE4_0 ((uint32_t)0x00010000) /*!< Bit 0 */ -#define GPIO_CRL_MODE4_1 ((uint32_t)0x00020000) /*!< Bit 1 */ - -#define GPIO_CRL_MODE5 ((uint32_t)0x00300000) /*!< MODE5[1:0] bits (Port x mode bits, pin 5) */ -#define GPIO_CRL_MODE5_0 ((uint32_t)0x00100000) /*!< Bit 0 */ -#define GPIO_CRL_MODE5_1 ((uint32_t)0x00200000) /*!< Bit 1 */ - -#define GPIO_CRL_MODE6 ((uint32_t)0x03000000) /*!< MODE6[1:0] bits (Port x mode bits, pin 6) */ -#define GPIO_CRL_MODE6_0 ((uint32_t)0x01000000) /*!< Bit 0 */ -#define GPIO_CRL_MODE6_1 ((uint32_t)0x02000000) /*!< Bit 1 */ - -#define GPIO_CRL_MODE7 ((uint32_t)0x30000000) /*!< MODE7[1:0] bits (Port x mode bits, pin 7) */ -#define GPIO_CRL_MODE7_0 ((uint32_t)0x10000000) /*!< Bit 0 */ -#define GPIO_CRL_MODE7_1 ((uint32_t)0x20000000) /*!< Bit 1 */ - -#define GPIO_CRL_CNF ((uint32_t)0xCCCCCCCC) /*!< Port x configuration bits */ - -#define GPIO_CRL_CNF0 ((uint32_t)0x0000000C) /*!< CNF0[1:0] bits (Port x configuration bits, pin 0) */ -#define GPIO_CRL_CNF0_0 ((uint32_t)0x00000004) /*!< Bit 0 */ -#define GPIO_CRL_CNF0_1 ((uint32_t)0x00000008) /*!< Bit 1 */ - -#define GPIO_CRL_CNF1 ((uint32_t)0x000000C0) /*!< CNF1[1:0] bits (Port x configuration bits, pin 1) */ -#define GPIO_CRL_CNF1_0 ((uint32_t)0x00000040) /*!< Bit 0 */ -#define GPIO_CRL_CNF1_1 ((uint32_t)0x00000080) /*!< Bit 1 */ - -#define GPIO_CRL_CNF2 ((uint32_t)0x00000C00) /*!< CNF2[1:0] bits (Port x configuration bits, pin 2) */ -#define GPIO_CRL_CNF2_0 ((uint32_t)0x00000400) /*!< Bit 0 */ -#define GPIO_CRL_CNF2_1 ((uint32_t)0x00000800) /*!< Bit 1 */ - -#define GPIO_CRL_CNF3 ((uint32_t)0x0000C000) /*!< CNF3[1:0] bits (Port x configuration bits, pin 3) */ -#define GPIO_CRL_CNF3_0 ((uint32_t)0x00004000) /*!< Bit 0 */ -#define GPIO_CRL_CNF3_1 ((uint32_t)0x00008000) /*!< Bit 1 */ - -#define GPIO_CRL_CNF4 ((uint32_t)0x000C0000) /*!< CNF4[1:0] bits (Port x configuration bits, pin 4) */ -#define GPIO_CRL_CNF4_0 ((uint32_t)0x00040000) /*!< Bit 0 */ -#define GPIO_CRL_CNF4_1 ((uint32_t)0x00080000) /*!< Bit 1 */ - -#define GPIO_CRL_CNF5 ((uint32_t)0x00C00000) /*!< CNF5[1:0] bits (Port x configuration bits, pin 5) */ -#define GPIO_CRL_CNF5_0 ((uint32_t)0x00400000) /*!< Bit 0 */ -#define GPIO_CRL_CNF5_1 ((uint32_t)0x00800000) /*!< Bit 1 */ - -#define GPIO_CRL_CNF6 ((uint32_t)0x0C000000) /*!< CNF6[1:0] bits (Port x configuration bits, pin 6) */ -#define GPIO_CRL_CNF6_0 ((uint32_t)0x04000000) /*!< Bit 0 */ -#define GPIO_CRL_CNF6_1 ((uint32_t)0x08000000) /*!< Bit 1 */ - -#define GPIO_CRL_CNF7 ((uint32_t)0xC0000000) /*!< CNF7[1:0] bits (Port x configuration bits, pin 7) */ -#define GPIO_CRL_CNF7_0 ((uint32_t)0x40000000) /*!< Bit 0 */ -#define GPIO_CRL_CNF7_1 ((uint32_t)0x80000000) /*!< Bit 1 */ - -/******************* Bit definition for GPIO_CRH register *******************/ -#define GPIO_CRH_MODE ((uint32_t)0x33333333) /*!< Port x mode bits */ - -#define GPIO_CRH_MODE8 ((uint32_t)0x00000003) /*!< MODE8[1:0] bits (Port x mode bits, pin 8) */ -#define GPIO_CRH_MODE8_0 ((uint32_t)0x00000001) /*!< Bit 0 */ -#define GPIO_CRH_MODE8_1 ((uint32_t)0x00000002) /*!< Bit 1 */ - -#define GPIO_CRH_MODE9 ((uint32_t)0x00000030) /*!< MODE9[1:0] bits (Port x mode bits, pin 9) */ -#define GPIO_CRH_MODE9_0 ((uint32_t)0x00000010) /*!< Bit 0 */ -#define GPIO_CRH_MODE9_1 ((uint32_t)0x00000020) /*!< Bit 1 */ - -#define GPIO_CRH_MODE10 ((uint32_t)0x00000300) /*!< MODE10[1:0] bits (Port x mode bits, pin 10) */ -#define GPIO_CRH_MODE10_0 ((uint32_t)0x00000100) /*!< Bit 0 */ -#define GPIO_CRH_MODE10_1 ((uint32_t)0x00000200) /*!< Bit 1 */ - -#define GPIO_CRH_MODE11 ((uint32_t)0x00003000) /*!< MODE11[1:0] bits (Port x mode bits, pin 11) */ -#define GPIO_CRH_MODE11_0 ((uint32_t)0x00001000) /*!< Bit 0 */ -#define GPIO_CRH_MODE11_1 ((uint32_t)0x00002000) /*!< Bit 1 */ - -#define GPIO_CRH_MODE12 ((uint32_t)0x00030000) /*!< MODE12[1:0] bits (Port x mode bits, pin 12) */ -#define GPIO_CRH_MODE12_0 ((uint32_t)0x00010000) /*!< Bit 0 */ -#define GPIO_CRH_MODE12_1 ((uint32_t)0x00020000) /*!< Bit 1 */ - -#define GPIO_CRH_MODE13 ((uint32_t)0x00300000) /*!< MODE13[1:0] bits (Port x mode bits, pin 13) */ -#define GPIO_CRH_MODE13_0 ((uint32_t)0x00100000) /*!< Bit 0 */ -#define GPIO_CRH_MODE13_1 ((uint32_t)0x00200000) /*!< Bit 1 */ - -#define GPIO_CRH_MODE14 ((uint32_t)0x03000000) /*!< MODE14[1:0] bits (Port x mode bits, pin 14) */ -#define GPIO_CRH_MODE14_0 ((uint32_t)0x01000000) /*!< Bit 0 */ -#define GPIO_CRH_MODE14_1 ((uint32_t)0x02000000) /*!< Bit 1 */ - -#define GPIO_CRH_MODE15 ((uint32_t)0x30000000) /*!< MODE15[1:0] bits (Port x mode bits, pin 15) */ -#define GPIO_CRH_MODE15_0 ((uint32_t)0x10000000) /*!< Bit 0 */ -#define GPIO_CRH_MODE15_1 ((uint32_t)0x20000000) /*!< Bit 1 */ - -#define GPIO_CRH_CNF ((uint32_t)0xCCCCCCCC) /*!< Port x configuration bits */ - -#define GPIO_CRH_CNF8 ((uint32_t)0x0000000C) /*!< CNF8[1:0] bits (Port x configuration bits, pin 8) */ -#define GPIO_CRH_CNF8_0 ((uint32_t)0x00000004) /*!< Bit 0 */ -#define GPIO_CRH_CNF8_1 ((uint32_t)0x00000008) /*!< Bit 1 */ - -#define GPIO_CRH_CNF9 ((uint32_t)0x000000C0) /*!< CNF9[1:0] bits (Port x configuration bits, pin 9) */ -#define GPIO_CRH_CNF9_0 ((uint32_t)0x00000040) /*!< Bit 0 */ -#define GPIO_CRH_CNF9_1 ((uint32_t)0x00000080) /*!< Bit 1 */ - -#define GPIO_CRH_CNF10 ((uint32_t)0x00000C00) /*!< CNF10[1:0] bits (Port x configuration bits, pin 10) */ -#define GPIO_CRH_CNF10_0 ((uint32_t)0x00000400) /*!< Bit 0 */ -#define GPIO_CRH_CNF10_1 ((uint32_t)0x00000800) /*!< Bit 1 */ - -#define GPIO_CRH_CNF11 ((uint32_t)0x0000C000) /*!< CNF11[1:0] bits (Port x configuration bits, pin 11) */ -#define GPIO_CRH_CNF11_0 ((uint32_t)0x00004000) /*!< Bit 0 */ -#define GPIO_CRH_CNF11_1 ((uint32_t)0x00008000) /*!< Bit 1 */ - -#define GPIO_CRH_CNF12 ((uint32_t)0x000C0000) /*!< CNF12[1:0] bits (Port x configuration bits, pin 12) */ -#define GPIO_CRH_CNF12_0 ((uint32_t)0x00040000) /*!< Bit 0 */ -#define GPIO_CRH_CNF12_1 ((uint32_t)0x00080000) /*!< Bit 1 */ - -#define GPIO_CRH_CNF13 ((uint32_t)0x00C00000) /*!< CNF13[1:0] bits (Port x configuration bits, pin 13) */ -#define GPIO_CRH_CNF13_0 ((uint32_t)0x00400000) /*!< Bit 0 */ -#define GPIO_CRH_CNF13_1 ((uint32_t)0x00800000) /*!< Bit 1 */ - -#define GPIO_CRH_CNF14 ((uint32_t)0x0C000000) /*!< CNF14[1:0] bits (Port x configuration bits, pin 14) */ -#define GPIO_CRH_CNF14_0 ((uint32_t)0x04000000) /*!< Bit 0 */ -#define GPIO_CRH_CNF14_1 ((uint32_t)0x08000000) /*!< Bit 1 */ - -#define GPIO_CRH_CNF15 ((uint32_t)0xC0000000) /*!< CNF15[1:0] bits (Port x configuration bits, pin 15) */ -#define GPIO_CRH_CNF15_0 ((uint32_t)0x40000000) /*!< Bit 0 */ -#define GPIO_CRH_CNF15_1 ((uint32_t)0x80000000) /*!< Bit 1 */ - -/*!<****************** Bit definition for GPIO_IDR register *******************/ -#define GPIO_IDR_IDR0 ((uint16_t)0x0001) /*!< Port input data, bit 0 */ -#define GPIO_IDR_IDR1 ((uint16_t)0x0002) /*!< Port input data, bit 1 */ -#define GPIO_IDR_IDR2 ((uint16_t)0x0004) /*!< Port input data, bit 2 */ -#define GPIO_IDR_IDR3 ((uint16_t)0x0008) /*!< Port input data, bit 3 */ -#define GPIO_IDR_IDR4 ((uint16_t)0x0010) /*!< Port input data, bit 4 */ -#define GPIO_IDR_IDR5 ((uint16_t)0x0020) /*!< Port input data, bit 5 */ -#define GPIO_IDR_IDR6 ((uint16_t)0x0040) /*!< Port input data, bit 6 */ -#define GPIO_IDR_IDR7 ((uint16_t)0x0080) /*!< Port input data, bit 7 */ -#define GPIO_IDR_IDR8 ((uint16_t)0x0100) /*!< Port input data, bit 8 */ -#define GPIO_IDR_IDR9 ((uint16_t)0x0200) /*!< Port input data, bit 9 */ -#define GPIO_IDR_IDR10 ((uint16_t)0x0400) /*!< Port input data, bit 10 */ -#define GPIO_IDR_IDR11 ((uint16_t)0x0800) /*!< Port input data, bit 11 */ -#define GPIO_IDR_IDR12 ((uint16_t)0x1000) /*!< Port input data, bit 12 */ -#define GPIO_IDR_IDR13 ((uint16_t)0x2000) /*!< Port input data, bit 13 */ -#define GPIO_IDR_IDR14 ((uint16_t)0x4000) /*!< Port input data, bit 14 */ -#define GPIO_IDR_IDR15 ((uint16_t)0x8000) /*!< Port input data, bit 15 */ - -/******************* Bit definition for GPIO_ODR register *******************/ -#define GPIO_ODR_ODR0 ((uint16_t)0x0001) /*!< Port output data, bit 0 */ -#define GPIO_ODR_ODR1 ((uint16_t)0x0002) /*!< Port output data, bit 1 */ -#define GPIO_ODR_ODR2 ((uint16_t)0x0004) /*!< Port output data, bit 2 */ -#define GPIO_ODR_ODR3 ((uint16_t)0x0008) /*!< Port output data, bit 3 */ -#define GPIO_ODR_ODR4 ((uint16_t)0x0010) /*!< Port output data, bit 4 */ -#define GPIO_ODR_ODR5 ((uint16_t)0x0020) /*!< Port output data, bit 5 */ -#define GPIO_ODR_ODR6 ((uint16_t)0x0040) /*!< Port output data, bit 6 */ -#define GPIO_ODR_ODR7 ((uint16_t)0x0080) /*!< Port output data, bit 7 */ -#define GPIO_ODR_ODR8 ((uint16_t)0x0100) /*!< Port output data, bit 8 */ -#define GPIO_ODR_ODR9 ((uint16_t)0x0200) /*!< Port output data, bit 9 */ -#define GPIO_ODR_ODR10 ((uint16_t)0x0400) /*!< Port output data, bit 10 */ -#define GPIO_ODR_ODR11 ((uint16_t)0x0800) /*!< Port output data, bit 11 */ -#define GPIO_ODR_ODR12 ((uint16_t)0x1000) /*!< Port output data, bit 12 */ -#define GPIO_ODR_ODR13 ((uint16_t)0x2000) /*!< Port output data, bit 13 */ -#define GPIO_ODR_ODR14 ((uint16_t)0x4000) /*!< Port output data, bit 14 */ -#define GPIO_ODR_ODR15 ((uint16_t)0x8000) /*!< Port output data, bit 15 */ - -/****************** Bit definition for GPIO_BSRR register *******************/ -#define GPIO_BSRR_BS0 ((uint32_t)0x00000001) /*!< Port x Set bit 0 */ -#define GPIO_BSRR_BS1 ((uint32_t)0x00000002) /*!< Port x Set bit 1 */ -#define GPIO_BSRR_BS2 ((uint32_t)0x00000004) /*!< Port x Set bit 2 */ -#define GPIO_BSRR_BS3 ((uint32_t)0x00000008) /*!< Port x Set bit 3 */ -#define GPIO_BSRR_BS4 ((uint32_t)0x00000010) /*!< Port x Set bit 4 */ -#define GPIO_BSRR_BS5 ((uint32_t)0x00000020) /*!< Port x Set bit 5 */ -#define GPIO_BSRR_BS6 ((uint32_t)0x00000040) /*!< Port x Set bit 6 */ -#define GPIO_BSRR_BS7 ((uint32_t)0x00000080) /*!< Port x Set bit 7 */ -#define GPIO_BSRR_BS8 ((uint32_t)0x00000100) /*!< Port x Set bit 8 */ -#define GPIO_BSRR_BS9 ((uint32_t)0x00000200) /*!< Port x Set bit 9 */ -#define GPIO_BSRR_BS10 ((uint32_t)0x00000400) /*!< Port x Set bit 10 */ -#define GPIO_BSRR_BS11 ((uint32_t)0x00000800) /*!< Port x Set bit 11 */ -#define GPIO_BSRR_BS12 ((uint32_t)0x00001000) /*!< Port x Set bit 12 */ -#define GPIO_BSRR_BS13 ((uint32_t)0x00002000) /*!< Port x Set bit 13 */ -#define GPIO_BSRR_BS14 ((uint32_t)0x00004000) /*!< Port x Set bit 14 */ -#define GPIO_BSRR_BS15 ((uint32_t)0x00008000) /*!< Port x Set bit 15 */ - -#define GPIO_BSRR_BR0 ((uint32_t)0x00010000) /*!< Port x Reset bit 0 */ -#define GPIO_BSRR_BR1 ((uint32_t)0x00020000) /*!< Port x Reset bit 1 */ -#define GPIO_BSRR_BR2 ((uint32_t)0x00040000) /*!< Port x Reset bit 2 */ -#define GPIO_BSRR_BR3 ((uint32_t)0x00080000) /*!< Port x Reset bit 3 */ -#define GPIO_BSRR_BR4 ((uint32_t)0x00100000) /*!< Port x Reset bit 4 */ -#define GPIO_BSRR_BR5 ((uint32_t)0x00200000) /*!< Port x Reset bit 5 */ -#define GPIO_BSRR_BR6 ((uint32_t)0x00400000) /*!< Port x Reset bit 6 */ -#define GPIO_BSRR_BR7 ((uint32_t)0x00800000) /*!< Port x Reset bit 7 */ -#define GPIO_BSRR_BR8 ((uint32_t)0x01000000) /*!< Port x Reset bit 8 */ -#define GPIO_BSRR_BR9 ((uint32_t)0x02000000) /*!< Port x Reset bit 9 */ -#define GPIO_BSRR_BR10 ((uint32_t)0x04000000) /*!< Port x Reset bit 10 */ -#define GPIO_BSRR_BR11 ((uint32_t)0x08000000) /*!< Port x Reset bit 11 */ -#define GPIO_BSRR_BR12 ((uint32_t)0x10000000) /*!< Port x Reset bit 12 */ -#define GPIO_BSRR_BR13 ((uint32_t)0x20000000) /*!< Port x Reset bit 13 */ -#define GPIO_BSRR_BR14 ((uint32_t)0x40000000) /*!< Port x Reset bit 14 */ -#define GPIO_BSRR_BR15 ((uint32_t)0x80000000) /*!< Port x Reset bit 15 */ - -/******************* Bit definition for GPIO_BRR register *******************/ -#define GPIO_BRR_BR0 ((uint16_t)0x0001) /*!< Port x Reset bit 0 */ -#define GPIO_BRR_BR1 ((uint16_t)0x0002) /*!< Port x Reset bit 1 */ -#define GPIO_BRR_BR2 ((uint16_t)0x0004) /*!< Port x Reset bit 2 */ -#define GPIO_BRR_BR3 ((uint16_t)0x0008) /*!< Port x Reset bit 3 */ -#define GPIO_BRR_BR4 ((uint16_t)0x0010) /*!< Port x Reset bit 4 */ -#define GPIO_BRR_BR5 ((uint16_t)0x0020) /*!< Port x Reset bit 5 */ -#define GPIO_BRR_BR6 ((uint16_t)0x0040) /*!< Port x Reset bit 6 */ -#define GPIO_BRR_BR7 ((uint16_t)0x0080) /*!< Port x Reset bit 7 */ -#define GPIO_BRR_BR8 ((uint16_t)0x0100) /*!< Port x Reset bit 8 */ -#define GPIO_BRR_BR9 ((uint16_t)0x0200) /*!< Port x Reset bit 9 */ -#define GPIO_BRR_BR10 ((uint16_t)0x0400) /*!< Port x Reset bit 10 */ -#define GPIO_BRR_BR11 ((uint16_t)0x0800) /*!< Port x Reset bit 11 */ -#define GPIO_BRR_BR12 ((uint16_t)0x1000) /*!< Port x Reset bit 12 */ -#define GPIO_BRR_BR13 ((uint16_t)0x2000) /*!< Port x Reset bit 13 */ -#define GPIO_BRR_BR14 ((uint16_t)0x4000) /*!< Port x Reset bit 14 */ -#define GPIO_BRR_BR15 ((uint16_t)0x8000) /*!< Port x Reset bit 15 */ - -/****************** Bit definition for GPIO_LCKR register *******************/ -#define GPIO_LCKR_LCK0 ((uint32_t)0x00000001) /*!< Port x Lock bit 0 */ -#define GPIO_LCKR_LCK1 ((uint32_t)0x00000002) /*!< Port x Lock bit 1 */ -#define GPIO_LCKR_LCK2 ((uint32_t)0x00000004) /*!< Port x Lock bit 2 */ -#define GPIO_LCKR_LCK3 ((uint32_t)0x00000008) /*!< Port x Lock bit 3 */ -#define GPIO_LCKR_LCK4 ((uint32_t)0x00000010) /*!< Port x Lock bit 4 */ -#define GPIO_LCKR_LCK5 ((uint32_t)0x00000020) /*!< Port x Lock bit 5 */ -#define GPIO_LCKR_LCK6 ((uint32_t)0x00000040) /*!< Port x Lock bit 6 */ -#define GPIO_LCKR_LCK7 ((uint32_t)0x00000080) /*!< Port x Lock bit 7 */ -#define GPIO_LCKR_LCK8 ((uint32_t)0x00000100) /*!< Port x Lock bit 8 */ -#define GPIO_LCKR_LCK9 ((uint32_t)0x00000200) /*!< Port x Lock bit 9 */ -#define GPIO_LCKR_LCK10 ((uint32_t)0x00000400) /*!< Port x Lock bit 10 */ -#define GPIO_LCKR_LCK11 ((uint32_t)0x00000800) /*!< Port x Lock bit 11 */ -#define GPIO_LCKR_LCK12 ((uint32_t)0x00001000) /*!< Port x Lock bit 12 */ -#define GPIO_LCKR_LCK13 ((uint32_t)0x00002000) /*!< Port x Lock bit 13 */ -#define GPIO_LCKR_LCK14 ((uint32_t)0x00004000) /*!< Port x Lock bit 14 */ -#define GPIO_LCKR_LCK15 ((uint32_t)0x00008000) /*!< Port x Lock bit 15 */ -#define GPIO_LCKR_LCKK ((uint32_t)0x00010000) /*!< Lock key */ - -/*----------------------------------------------------------------------------*/ - -/****************** Bit definition for AFIO_EVCR register *******************/ -#define AFIO_EVCR_PIN ((uint8_t)0x0F) /*!< PIN[3:0] bits (Pin selection) */ -#define AFIO_EVCR_PIN_0 ((uint8_t)0x01) /*!< Bit 0 */ -#define AFIO_EVCR_PIN_1 ((uint8_t)0x02) /*!< Bit 1 */ -#define AFIO_EVCR_PIN_2 ((uint8_t)0x04) /*!< Bit 2 */ -#define AFIO_EVCR_PIN_3 ((uint8_t)0x08) /*!< Bit 3 */ - -/*!< PIN configuration */ -#define AFIO_EVCR_PIN_PX0 ((uint8_t)0x00) /*!< Pin 0 selected */ -#define AFIO_EVCR_PIN_PX1 ((uint8_t)0x01) /*!< Pin 1 selected */ -#define AFIO_EVCR_PIN_PX2 ((uint8_t)0x02) /*!< Pin 2 selected */ -#define AFIO_EVCR_PIN_PX3 ((uint8_t)0x03) /*!< Pin 3 selected */ -#define AFIO_EVCR_PIN_PX4 ((uint8_t)0x04) /*!< Pin 4 selected */ -#define AFIO_EVCR_PIN_PX5 ((uint8_t)0x05) /*!< Pin 5 selected */ -#define AFIO_EVCR_PIN_PX6 ((uint8_t)0x06) /*!< Pin 6 selected */ -#define AFIO_EVCR_PIN_PX7 ((uint8_t)0x07) /*!< Pin 7 selected */ -#define AFIO_EVCR_PIN_PX8 ((uint8_t)0x08) /*!< Pin 8 selected */ -#define AFIO_EVCR_PIN_PX9 ((uint8_t)0x09) /*!< Pin 9 selected */ -#define AFIO_EVCR_PIN_PX10 ((uint8_t)0x0A) /*!< Pin 10 selected */ -#define AFIO_EVCR_PIN_PX11 ((uint8_t)0x0B) /*!< Pin 11 selected */ -#define AFIO_EVCR_PIN_PX12 ((uint8_t)0x0C) /*!< Pin 12 selected */ -#define AFIO_EVCR_PIN_PX13 ((uint8_t)0x0D) /*!< Pin 13 selected */ -#define AFIO_EVCR_PIN_PX14 ((uint8_t)0x0E) /*!< Pin 14 selected */ -#define AFIO_EVCR_PIN_PX15 ((uint8_t)0x0F) /*!< Pin 15 selected */ - -#define AFIO_EVCR_PORT ((uint8_t)0x70) /*!< PORT[2:0] bits (Port selection) */ -#define AFIO_EVCR_PORT_0 ((uint8_t)0x10) /*!< Bit 0 */ -#define AFIO_EVCR_PORT_1 ((uint8_t)0x20) /*!< Bit 1 */ -#define AFIO_EVCR_PORT_2 ((uint8_t)0x40) /*!< Bit 2 */ - -/*!< PORT configuration */ -#define AFIO_EVCR_PORT_PA ((uint8_t)0x00) /*!< Port A selected */ -#define AFIO_EVCR_PORT_PB ((uint8_t)0x10) /*!< Port B selected */ -#define AFIO_EVCR_PORT_PC ((uint8_t)0x20) /*!< Port C selected */ -#define AFIO_EVCR_PORT_PD ((uint8_t)0x30) /*!< Port D selected */ -#define AFIO_EVCR_PORT_PE ((uint8_t)0x40) /*!< Port E selected */ - -#define AFIO_EVCR_EVOE ((uint8_t)0x80) /*!< Event Output Enable */ - -/****************** Bit definition for AFIO_MAPR register *******************/ -#define AFIO_MAPR_SPI1_REMAP ((uint32_t)0x00000001) /*!< SPI1 remapping */ -#define AFIO_MAPR_I2C1_REMAP ((uint32_t)0x00000002) /*!< I2C1 remapping */ -#define AFIO_MAPR_USART1_REMAP ((uint32_t)0x00000004) /*!< USART1 remapping */ -#define AFIO_MAPR_USART2_REMAP ((uint32_t)0x00000008) /*!< USART2 remapping */ - -#define AFIO_MAPR_USART3_REMAP ((uint32_t)0x00000030) /*!< USART3_REMAP[1:0] bits (USART3 remapping) */ -#define AFIO_MAPR_USART3_REMAP_0 ((uint32_t)0x00000010) /*!< Bit 0 */ -#define AFIO_MAPR_USART3_REMAP_1 ((uint32_t)0x00000020) /*!< Bit 1 */ - -/* USART3_REMAP configuration */ -#define AFIO_MAPR_USART3_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) */ -#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP ((uint32_t)0x00000010) /*!< Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */ -#define AFIO_MAPR_USART3_REMAP_FULLREMAP ((uint32_t)0x00000030) /*!< Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) */ - -#define AFIO_MAPR_TIM1_REMAP ((uint32_t)0x000000C0) /*!< TIM1_REMAP[1:0] bits (TIM1 remapping) */ -#define AFIO_MAPR_TIM1_REMAP_0 ((uint32_t)0x00000040) /*!< Bit 0 */ -#define AFIO_MAPR_TIM1_REMAP_1 ((uint32_t)0x00000080) /*!< Bit 1 */ - -/*!< TIM1_REMAP configuration */ -#define AFIO_MAPR_TIM1_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15) */ -#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP ((uint32_t)0x00000040) /*!< Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) */ -#define AFIO_MAPR_TIM1_REMAP_FULLREMAP ((uint32_t)0x000000C0) /*!< Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) */ - -#define AFIO_MAPR_TIM2_REMAP ((uint32_t)0x00000300) /*!< TIM2_REMAP[1:0] bits (TIM2 remapping) */ -#define AFIO_MAPR_TIM2_REMAP_0 ((uint32_t)0x00000100) /*!< Bit 0 */ -#define AFIO_MAPR_TIM2_REMAP_1 ((uint32_t)0x00000200) /*!< Bit 1 */ - -/*!< TIM2_REMAP configuration */ -#define AFIO_MAPR_TIM2_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) */ -#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1 ((uint32_t)0x00000100) /*!< Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) */ -#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2 ((uint32_t)0x00000200) /*!< Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) */ -#define AFIO_MAPR_TIM2_REMAP_FULLREMAP ((uint32_t)0x00000300) /*!< Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) */ - -#define AFIO_MAPR_TIM3_REMAP ((uint32_t)0x00000C00) /*!< TIM3_REMAP[1:0] bits (TIM3 remapping) */ -#define AFIO_MAPR_TIM3_REMAP_0 ((uint32_t)0x00000400) /*!< Bit 0 */ -#define AFIO_MAPR_TIM3_REMAP_1 ((uint32_t)0x00000800) /*!< Bit 1 */ - -/*!< TIM3_REMAP configuration */ -#define AFIO_MAPR_TIM3_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) */ -#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP ((uint32_t)0x00000800) /*!< Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) */ -#define AFIO_MAPR_TIM3_REMAP_FULLREMAP ((uint32_t)0x00000C00) /*!< Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) */ - -#define AFIO_MAPR_TIM4_REMAP ((uint32_t)0x00001000) /*!< TIM4_REMAP bit (TIM4 remapping) */ - -#define AFIO_MAPR_CAN_REMAP ((uint32_t)0x00006000) /*!< CAN_REMAP[1:0] bits (CAN Alternate function remapping) */ -#define AFIO_MAPR_CAN_REMAP_0 ((uint32_t)0x00002000) /*!< Bit 0 */ -#define AFIO_MAPR_CAN_REMAP_1 ((uint32_t)0x00004000) /*!< Bit 1 */ - -/*!< CAN_REMAP configuration */ -#define AFIO_MAPR_CAN_REMAP_REMAP1 ((uint32_t)0x00000000) /*!< CANRX mapped to PA11, CANTX mapped to PA12 */ -#define AFIO_MAPR_CAN_REMAP_REMAP2 ((uint32_t)0x00004000) /*!< CANRX mapped to PB8, CANTX mapped to PB9 */ -#define AFIO_MAPR_CAN_REMAP_REMAP3 ((uint32_t)0x00006000) /*!< CANRX mapped to PD0, CANTX mapped to PD1 */ - -#define AFIO_MAPR_PD01_REMAP ((uint32_t)0x00008000) /*!< Port D0/Port D1 mapping on OSC_IN/OSC_OUT */ -#define AFIO_MAPR_TIM5CH4_IREMAP ((uint32_t)0x00010000) /*!< TIM5 Channel4 Internal Remap */ -#define AFIO_MAPR_ADC1_ETRGINJ_REMAP ((uint32_t)0x00020000) /*!< ADC 1 External Trigger Injected Conversion remapping */ -#define AFIO_MAPR_ADC1_ETRGREG_REMAP ((uint32_t)0x00040000) /*!< ADC 1 External Trigger Regular Conversion remapping */ -#define AFIO_MAPR_ADC2_ETRGINJ_REMAP ((uint32_t)0x00080000) /*!< ADC 2 External Trigger Injected Conversion remapping */ -#define AFIO_MAPR_ADC2_ETRGREG_REMAP ((uint32_t)0x00100000) /*!< ADC 2 External Trigger Regular Conversion remapping */ - -/*!< SWJ_CFG configuration */ -#define AFIO_MAPR_SWJ_CFG ((uint32_t)0x07000000) /*!< SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */ -#define AFIO_MAPR_SWJ_CFG_0 ((uint32_t)0x01000000) /*!< Bit 0 */ -#define AFIO_MAPR_SWJ_CFG_1 ((uint32_t)0x02000000) /*!< Bit 1 */ -#define AFIO_MAPR_SWJ_CFG_2 ((uint32_t)0x04000000) /*!< Bit 2 */ - -#define AFIO_MAPR_SWJ_CFG_RESET ((uint32_t)0x00000000) /*!< Full SWJ (JTAG-DP + SW-DP) : Reset State */ -#define AFIO_MAPR_SWJ_CFG_NOJNTRST ((uint32_t)0x01000000) /*!< Full SWJ (JTAG-DP + SW-DP) but without JNTRST */ -#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE ((uint32_t)0x02000000) /*!< JTAG-DP Disabled and SW-DP Enabled */ -#define AFIO_MAPR_SWJ_CFG_DISABLE ((uint32_t)0x04000000) /*!< JTAG-DP Disabled and SW-DP Disabled */ - -#ifdef STM32F10X_CL -/*!< ETH_REMAP configuration */ - #define AFIO_MAPR_ETH_REMAP ((uint32_t)0x00200000) /*!< SPI3_REMAP bit (Ethernet MAC I/O remapping) */ - -/*!< CAN2_REMAP configuration */ - #define AFIO_MAPR_CAN2_REMAP ((uint32_t)0x00400000) /*!< CAN2_REMAP bit (CAN2 I/O remapping) */ - -/*!< MII_RMII_SEL configuration */ - #define AFIO_MAPR_MII_RMII_SEL ((uint32_t)0x00800000) /*!< MII_RMII_SEL bit (Ethernet MII or RMII selection) */ - -/*!< SPI3_REMAP configuration */ - #define AFIO_MAPR_SPI3_REMAP ((uint32_t)0x10000000) /*!< SPI3_REMAP bit (SPI3 remapping) */ - -/*!< TIM2ITR1_IREMAP configuration */ - #define AFIO_MAPR_TIM2ITR1_IREMAP ((uint32_t)0x20000000) /*!< TIM2ITR1_IREMAP bit (TIM2 internal trigger 1 remapping) */ - -/*!< PTP_PPS_REMAP configuration */ - #define AFIO_MAPR_PTP_PPS_REMAP ((uint32_t)0x20000000) /*!< PTP_PPS_REMAP bit (Ethernet PTP PPS remapping) */ -#endif - -/***************** Bit definition for AFIO_EXTICR1 register *****************/ -#define AFIO_EXTICR1_EXTI0 ((uint16_t)0x000F) /*!< EXTI 0 configuration */ -#define AFIO_EXTICR1_EXTI1 ((uint16_t)0x00F0) /*!< EXTI 1 configuration */ -#define AFIO_EXTICR1_EXTI2 ((uint16_t)0x0F00) /*!< EXTI 2 configuration */ -#define AFIO_EXTICR1_EXTI3 ((uint16_t)0xF000) /*!< EXTI 3 configuration */ - -/*!< EXTI0 configuration */ -#define AFIO_EXTICR1_EXTI0_PA ((uint16_t)0x0000) /*!< PA[0] pin */ -#define AFIO_EXTICR1_EXTI0_PB ((uint16_t)0x0001) /*!< PB[0] pin */ -#define AFIO_EXTICR1_EXTI0_PC ((uint16_t)0x0002) /*!< PC[0] pin */ -#define AFIO_EXTICR1_EXTI0_PD ((uint16_t)0x0003) /*!< PD[0] pin */ -#define AFIO_EXTICR1_EXTI0_PE ((uint16_t)0x0004) /*!< PE[0] pin */ -#define AFIO_EXTICR1_EXTI0_PF ((uint16_t)0x0005) /*!< PF[0] pin */ -#define AFIO_EXTICR1_EXTI0_PG ((uint16_t)0x0006) /*!< PG[0] pin */ - -/*!< EXTI1 configuration */ -#define AFIO_EXTICR1_EXTI1_PA ((uint16_t)0x0000) /*!< PA[1] pin */ -#define AFIO_EXTICR1_EXTI1_PB ((uint16_t)0x0010) /*!< PB[1] pin */ -#define AFIO_EXTICR1_EXTI1_PC ((uint16_t)0x0020) /*!< PC[1] pin */ -#define AFIO_EXTICR1_EXTI1_PD ((uint16_t)0x0030) /*!< PD[1] pin */ -#define AFIO_EXTICR1_EXTI1_PE ((uint16_t)0x0040) /*!< PE[1] pin */ -#define AFIO_EXTICR1_EXTI1_PF ((uint16_t)0x0050) /*!< PF[1] pin */ -#define AFIO_EXTICR1_EXTI1_PG ((uint16_t)0x0060) /*!< PG[1] pin */ - -/*!< EXTI2 configuration */ -#define AFIO_EXTICR1_EXTI2_PA ((uint16_t)0x0000) /*!< PA[2] pin */ -#define AFIO_EXTICR1_EXTI2_PB ((uint16_t)0x0100) /*!< PB[2] pin */ -#define AFIO_EXTICR1_EXTI2_PC ((uint16_t)0x0200) /*!< PC[2] pin */ -#define AFIO_EXTICR1_EXTI2_PD ((uint16_t)0x0300) /*!< PD[2] pin */ -#define AFIO_EXTICR1_EXTI2_PE ((uint16_t)0x0400) /*!< PE[2] pin */ -#define AFIO_EXTICR1_EXTI2_PF ((uint16_t)0x0500) /*!< PF[2] pin */ -#define AFIO_EXTICR1_EXTI2_PG ((uint16_t)0x0600) /*!< PG[2] pin */ - -/*!< EXTI3 configuration */ -#define AFIO_EXTICR1_EXTI3_PA ((uint16_t)0x0000) /*!< PA[3] pin */ -#define AFIO_EXTICR1_EXTI3_PB ((uint16_t)0x1000) /*!< PB[3] pin */ -#define AFIO_EXTICR1_EXTI3_PC ((uint16_t)0x2000) /*!< PC[3] pin */ -#define AFIO_EXTICR1_EXTI3_PD ((uint16_t)0x3000) /*!< PD[3] pin */ -#define AFIO_EXTICR1_EXTI3_PE ((uint16_t)0x4000) /*!< PE[3] pin */ -#define AFIO_EXTICR1_EXTI3_PF ((uint16_t)0x5000) /*!< PF[3] pin */ -#define AFIO_EXTICR1_EXTI3_PG ((uint16_t)0x6000) /*!< PG[3] pin */ - -/***************** Bit definition for AFIO_EXTICR2 register *****************/ -#define AFIO_EXTICR2_EXTI4 ((uint16_t)0x000F) /*!< EXTI 4 configuration */ -#define AFIO_EXTICR2_EXTI5 ((uint16_t)0x00F0) /*!< EXTI 5 configuration */ -#define AFIO_EXTICR2_EXTI6 ((uint16_t)0x0F00) /*!< EXTI 6 configuration */ -#define AFIO_EXTICR2_EXTI7 ((uint16_t)0xF000) /*!< EXTI 7 configuration */ - -/*!< EXTI4 configuration */ -#define AFIO_EXTICR2_EXTI4_PA ((uint16_t)0x0000) /*!< PA[4] pin */ -#define AFIO_EXTICR2_EXTI4_PB ((uint16_t)0x0001) /*!< PB[4] pin */ -#define AFIO_EXTICR2_EXTI4_PC ((uint16_t)0x0002) /*!< PC[4] pin */ -#define AFIO_EXTICR2_EXTI4_PD ((uint16_t)0x0003) /*!< PD[4] pin */ -#define AFIO_EXTICR2_EXTI4_PE ((uint16_t)0x0004) /*!< PE[4] pin */ -#define AFIO_EXTICR2_EXTI4_PF ((uint16_t)0x0005) /*!< PF[4] pin */ -#define AFIO_EXTICR2_EXTI4_PG ((uint16_t)0x0006) /*!< PG[4] pin */ - -/* EXTI5 configuration */ -#define AFIO_EXTICR2_EXTI5_PA ((uint16_t)0x0000) /*!< PA[5] pin */ -#define AFIO_EXTICR2_EXTI5_PB ((uint16_t)0x0010) /*!< PB[5] pin */ -#define AFIO_EXTICR2_EXTI5_PC ((uint16_t)0x0020) /*!< PC[5] pin */ -#define AFIO_EXTICR2_EXTI5_PD ((uint16_t)0x0030) /*!< PD[5] pin */ -#define AFIO_EXTICR2_EXTI5_PE ((uint16_t)0x0040) /*!< PE[5] pin */ -#define AFIO_EXTICR2_EXTI5_PF ((uint16_t)0x0050) /*!< PF[5] pin */ -#define AFIO_EXTICR2_EXTI5_PG ((uint16_t)0x0060) /*!< PG[5] pin */ - -/*!< EXTI6 configuration */ -#define AFIO_EXTICR2_EXTI6_PA ((uint16_t)0x0000) /*!< PA[6] pin */ -#define AFIO_EXTICR2_EXTI6_PB ((uint16_t)0x0100) /*!< PB[6] pin */ -#define AFIO_EXTICR2_EXTI6_PC ((uint16_t)0x0200) /*!< PC[6] pin */ -#define AFIO_EXTICR2_EXTI6_PD ((uint16_t)0x0300) /*!< PD[6] pin */ -#define AFIO_EXTICR2_EXTI6_PE ((uint16_t)0x0400) /*!< PE[6] pin */ -#define AFIO_EXTICR2_EXTI6_PF ((uint16_t)0x0500) /*!< PF[6] pin */ -#define AFIO_EXTICR2_EXTI6_PG ((uint16_t)0x0600) /*!< PG[6] pin */ - -/*!< EXTI7 configuration */ -#define AFIO_EXTICR2_EXTI7_PA ((uint16_t)0x0000) /*!< PA[7] pin */ -#define AFIO_EXTICR2_EXTI7_PB ((uint16_t)0x1000) /*!< PB[7] pin */ -#define AFIO_EXTICR2_EXTI7_PC ((uint16_t)0x2000) /*!< PC[7] pin */ -#define AFIO_EXTICR2_EXTI7_PD ((uint16_t)0x3000) /*!< PD[7] pin */ -#define AFIO_EXTICR2_EXTI7_PE ((uint16_t)0x4000) /*!< PE[7] pin */ -#define AFIO_EXTICR2_EXTI7_PF ((uint16_t)0x5000) /*!< PF[7] pin */ -#define AFIO_EXTICR2_EXTI7_PG ((uint16_t)0x6000) /*!< PG[7] pin */ - -/***************** Bit definition for AFIO_EXTICR3 register *****************/ -#define AFIO_EXTICR3_EXTI8 ((uint16_t)0x000F) /*!< EXTI 8 configuration */ -#define AFIO_EXTICR3_EXTI9 ((uint16_t)0x00F0) /*!< EXTI 9 configuration */ -#define AFIO_EXTICR3_EXTI10 ((uint16_t)0x0F00) /*!< EXTI 10 configuration */ -#define AFIO_EXTICR3_EXTI11 ((uint16_t)0xF000) /*!< EXTI 11 configuration */ - -/*!< EXTI8 configuration */ -#define AFIO_EXTICR3_EXTI8_PA ((uint16_t)0x0000) /*!< PA[8] pin */ -#define AFIO_EXTICR3_EXTI8_PB ((uint16_t)0x0001) /*!< PB[8] pin */ -#define AFIO_EXTICR3_EXTI8_PC ((uint16_t)0x0002) /*!< PC[8] pin */ -#define AFIO_EXTICR3_EXTI8_PD ((uint16_t)0x0003) /*!< PD[8] pin */ -#define AFIO_EXTICR3_EXTI8_PE ((uint16_t)0x0004) /*!< PE[8] pin */ -#define AFIO_EXTICR3_EXTI8_PF ((uint16_t)0x0005) /*!< PF[8] pin */ -#define AFIO_EXTICR3_EXTI8_PG ((uint16_t)0x0006) /*!< PG[8] pin */ - -/*!< EXTI9 configuration */ -#define AFIO_EXTICR3_EXTI9_PA ((uint16_t)0x0000) /*!< PA[9] pin */ -#define AFIO_EXTICR3_EXTI9_PB ((uint16_t)0x0010) /*!< PB[9] pin */ -#define AFIO_EXTICR3_EXTI9_PC ((uint16_t)0x0020) /*!< PC[9] pin */ -#define AFIO_EXTICR3_EXTI9_PD ((uint16_t)0x0030) /*!< PD[9] pin */ -#define AFIO_EXTICR3_EXTI9_PE ((uint16_t)0x0040) /*!< PE[9] pin */ -#define AFIO_EXTICR3_EXTI9_PF ((uint16_t)0x0050) /*!< PF[9] pin */ -#define AFIO_EXTICR3_EXTI9_PG ((uint16_t)0x0060) /*!< PG[9] pin */ - -/*!< EXTI10 configuration */ -#define AFIO_EXTICR3_EXTI10_PA ((uint16_t)0x0000) /*!< PA[10] pin */ -#define AFIO_EXTICR3_EXTI10_PB ((uint16_t)0x0100) /*!< PB[10] pin */ -#define AFIO_EXTICR3_EXTI10_PC ((uint16_t)0x0200) /*!< PC[10] pin */ -#define AFIO_EXTICR3_EXTI10_PD ((uint16_t)0x0300) /*!< PD[10] pin */ -#define AFIO_EXTICR3_EXTI10_PE ((uint16_t)0x0400) /*!< PE[10] pin */ -#define AFIO_EXTICR3_EXTI10_PF ((uint16_t)0x0500) /*!< PF[10] pin */ -#define AFIO_EXTICR3_EXTI10_PG ((uint16_t)0x0600) /*!< PG[10] pin */ - -/*!< EXTI11 configuration */ -#define AFIO_EXTICR3_EXTI11_PA ((uint16_t)0x0000) /*!< PA[11] pin */ -#define AFIO_EXTICR3_EXTI11_PB ((uint16_t)0x1000) /*!< PB[11] pin */ -#define AFIO_EXTICR3_EXTI11_PC ((uint16_t)0x2000) /*!< PC[11] pin */ -#define AFIO_EXTICR3_EXTI11_PD ((uint16_t)0x3000) /*!< PD[11] pin */ -#define AFIO_EXTICR3_EXTI11_PE ((uint16_t)0x4000) /*!< PE[11] pin */ -#define AFIO_EXTICR3_EXTI11_PF ((uint16_t)0x5000) /*!< PF[11] pin */ -#define AFIO_EXTICR3_EXTI11_PG ((uint16_t)0x6000) /*!< PG[11] pin */ - -/***************** Bit definition for AFIO_EXTICR4 register *****************/ -#define AFIO_EXTICR4_EXTI12 ((uint16_t)0x000F) /*!< EXTI 12 configuration */ -#define AFIO_EXTICR4_EXTI13 ((uint16_t)0x00F0) /*!< EXTI 13 configuration */ -#define AFIO_EXTICR4_EXTI14 ((uint16_t)0x0F00) /*!< EXTI 14 configuration */ -#define AFIO_EXTICR4_EXTI15 ((uint16_t)0xF000) /*!< EXTI 15 configuration */ - -/* EXTI12 configuration */ -#define AFIO_EXTICR4_EXTI12_PA ((uint16_t)0x0000) /*!< PA[12] pin */ -#define AFIO_EXTICR4_EXTI12_PB ((uint16_t)0x0001) /*!< PB[12] pin */ -#define AFIO_EXTICR4_EXTI12_PC ((uint16_t)0x0002) /*!< PC[12] pin */ -#define AFIO_EXTICR4_EXTI12_PD ((uint16_t)0x0003) /*!< PD[12] pin */ -#define AFIO_EXTICR4_EXTI12_PE ((uint16_t)0x0004) /*!< PE[12] pin */ -#define AFIO_EXTICR4_EXTI12_PF ((uint16_t)0x0005) /*!< PF[12] pin */ -#define AFIO_EXTICR4_EXTI12_PG ((uint16_t)0x0006) /*!< PG[12] pin */ - -/* EXTI13 configuration */ -#define AFIO_EXTICR4_EXTI13_PA ((uint16_t)0x0000) /*!< PA[13] pin */ -#define AFIO_EXTICR4_EXTI13_PB ((uint16_t)0x0010) /*!< PB[13] pin */ -#define AFIO_EXTICR4_EXTI13_PC ((uint16_t)0x0020) /*!< PC[13] pin */ -#define AFIO_EXTICR4_EXTI13_PD ((uint16_t)0x0030) /*!< PD[13] pin */ -#define AFIO_EXTICR4_EXTI13_PE ((uint16_t)0x0040) /*!< PE[13] pin */ -#define AFIO_EXTICR4_EXTI13_PF ((uint16_t)0x0050) /*!< PF[13] pin */ -#define AFIO_EXTICR4_EXTI13_PG ((uint16_t)0x0060) /*!< PG[13] pin */ - -/*!< EXTI14 configuration */ -#define AFIO_EXTICR4_EXTI14_PA ((uint16_t)0x0000) /*!< PA[14] pin */ -#define AFIO_EXTICR4_EXTI14_PB ((uint16_t)0x0100) /*!< PB[14] pin */ -#define AFIO_EXTICR4_EXTI14_PC ((uint16_t)0x0200) /*!< PC[14] pin */ -#define AFIO_EXTICR4_EXTI14_PD ((uint16_t)0x0300) /*!< PD[14] pin */ -#define AFIO_EXTICR4_EXTI14_PE ((uint16_t)0x0400) /*!< PE[14] pin */ -#define AFIO_EXTICR4_EXTI14_PF ((uint16_t)0x0500) /*!< PF[14] pin */ -#define AFIO_EXTICR4_EXTI14_PG ((uint16_t)0x0600) /*!< PG[14] pin */ - -/*!< EXTI15 configuration */ -#define AFIO_EXTICR4_EXTI15_PA ((uint16_t)0x0000) /*!< PA[15] pin */ -#define AFIO_EXTICR4_EXTI15_PB ((uint16_t)0x1000) /*!< PB[15] pin */ -#define AFIO_EXTICR4_EXTI15_PC ((uint16_t)0x2000) /*!< PC[15] pin */ -#define AFIO_EXTICR4_EXTI15_PD ((uint16_t)0x3000) /*!< PD[15] pin */ -#define AFIO_EXTICR4_EXTI15_PE ((uint16_t)0x4000) /*!< PE[15] pin */ -#define AFIO_EXTICR4_EXTI15_PF ((uint16_t)0x5000) /*!< PF[15] pin */ -#define AFIO_EXTICR4_EXTI15_PG ((uint16_t)0x6000) /*!< PG[15] pin */ - -#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) -/****************** Bit definition for AFIO_MAPR2 register ******************/ -#define AFIO_MAPR2_TIM15_REMAP ((uint32_t)0x00000001) /*!< TIM15 remapping */ -#define AFIO_MAPR2_TIM16_REMAP ((uint32_t)0x00000002) /*!< TIM16 remapping */ -#define AFIO_MAPR2_TIM17_REMAP ((uint32_t)0x00000004) /*!< TIM17 remapping */ -#define AFIO_MAPR2_CEC_REMAP ((uint32_t)0x00000008) /*!< CEC remapping */ -#define AFIO_MAPR2_TIM1_DMA_REMAP ((uint32_t)0x00000010) /*!< TIM1_DMA remapping */ -#endif - -#ifdef STM32F10X_XL -/****************** Bit definition for AFIO_MAPR2 register ******************/ -#define AFIO_MAPR2_TIM9_REMAP ((uint32_t)0x00000020) /*!< TIM9 remapping */ -#define AFIO_MAPR2_TIM10_REMAP ((uint32_t)0x00000040) /*!< TIM10 remapping */ -#define AFIO_MAPR2_TIM11_REMAP ((uint32_t)0x00000080) /*!< TIM11 remapping */ -#define AFIO_MAPR2_TIM13_REMAP ((uint32_t)0x00000100) /*!< TIM13 remapping */ -#define AFIO_MAPR2_TIM14_REMAP ((uint32_t)0x00000200) /*!< TIM14 remapping */ -#define AFIO_MAPR2_FSMC_NADV_REMAP ((uint32_t)0x00000400) /*!< FSMC NADV remapping */ -#endif - -/******************************************************************************/ -/* */ -/* SystemTick */ -/* */ -/******************************************************************************/ - -/***************** Bit definition for SysTick_CTRL register *****************/ -#define SysTick_CTRL_ENABLE ((uint32_t)0x00000001) /*!< Counter enable */ -#define SysTick_CTRL_TICKINT ((uint32_t)0x00000002) /*!< Counting down to 0 pends the SysTick handler */ -#define SysTick_CTRL_CLKSOURCE ((uint32_t)0x00000004) /*!< Clock source */ -#define SysTick_CTRL_COUNTFLAG ((uint32_t)0x00010000) /*!< Count Flag */ - -/***************** Bit definition for SysTick_LOAD register *****************/ -#define SysTick_LOAD_RELOAD ((uint32_t)0x00FFFFFF) /*!< Value to load into the SysTick Current Value Register when the counter reaches 0 */ - -/***************** Bit definition for SysTick_VAL register ******************/ -#define SysTick_VAL_CURRENT ((uint32_t)0x00FFFFFF) /*!< Current value at the time the register is accessed */ - -/***************** Bit definition for SysTick_CALIB register ****************/ -#define SysTick_CALIB_TENMS ((uint32_t)0x00FFFFFF) /*!< Reload value to use for 10ms timing */ -#define SysTick_CALIB_SKEW ((uint32_t)0x40000000) /*!< Calibration value is not exactly 10 ms */ -#define SysTick_CALIB_NOREF ((uint32_t)0x80000000) /*!< The reference clock is not provided */ - -/******************************************************************************/ -/* */ -/* Nested Vectored Interrupt Controller */ -/* */ -/******************************************************************************/ - -/****************** Bit definition for NVIC_ISER register *******************/ -#define NVIC_ISER_SETENA ((uint32_t)0xFFFFFFFF) /*!< Interrupt set enable bits */ -#define NVIC_ISER_SETENA_0 ((uint32_t)0x00000001) /*!< bit 0 */ -#define NVIC_ISER_SETENA_1 ((uint32_t)0x00000002) /*!< bit 1 */ -#define NVIC_ISER_SETENA_2 ((uint32_t)0x00000004) /*!< bit 2 */ -#define NVIC_ISER_SETENA_3 ((uint32_t)0x00000008) /*!< bit 3 */ -#define NVIC_ISER_SETENA_4 ((uint32_t)0x00000010) /*!< bit 4 */ -#define NVIC_ISER_SETENA_5 ((uint32_t)0x00000020) /*!< bit 5 */ -#define NVIC_ISER_SETENA_6 ((uint32_t)0x00000040) /*!< bit 6 */ -#define NVIC_ISER_SETENA_7 ((uint32_t)0x00000080) /*!< bit 7 */ -#define NVIC_ISER_SETENA_8 ((uint32_t)0x00000100) /*!< bit 8 */ -#define NVIC_ISER_SETENA_9 ((uint32_t)0x00000200) /*!< bit 9 */ -#define NVIC_ISER_SETENA_10 ((uint32_t)0x00000400) /*!< bit 10 */ -#define NVIC_ISER_SETENA_11 ((uint32_t)0x00000800) /*!< bit 11 */ -#define NVIC_ISER_SETENA_12 ((uint32_t)0x00001000) /*!< bit 12 */ -#define NVIC_ISER_SETENA_13 ((uint32_t)0x00002000) /*!< bit 13 */ -#define NVIC_ISER_SETENA_14 ((uint32_t)0x00004000) /*!< bit 14 */ -#define NVIC_ISER_SETENA_15 ((uint32_t)0x00008000) /*!< bit 15 */ -#define NVIC_ISER_SETENA_16 ((uint32_t)0x00010000) /*!< bit 16 */ -#define NVIC_ISER_SETENA_17 ((uint32_t)0x00020000) /*!< bit 17 */ -#define NVIC_ISER_SETENA_18 ((uint32_t)0x00040000) /*!< bit 18 */ -#define NVIC_ISER_SETENA_19 ((uint32_t)0x00080000) /*!< bit 19 */ -#define NVIC_ISER_SETENA_20 ((uint32_t)0x00100000) /*!< bit 20 */ -#define NVIC_ISER_SETENA_21 ((uint32_t)0x00200000) /*!< bit 21 */ -#define NVIC_ISER_SETENA_22 ((uint32_t)0x00400000) /*!< bit 22 */ -#define NVIC_ISER_SETENA_23 ((uint32_t)0x00800000) /*!< bit 23 */ -#define NVIC_ISER_SETENA_24 ((uint32_t)0x01000000) /*!< bit 24 */ -#define NVIC_ISER_SETENA_25 ((uint32_t)0x02000000) /*!< bit 25 */ -#define NVIC_ISER_SETENA_26 ((uint32_t)0x04000000) /*!< bit 26 */ -#define NVIC_ISER_SETENA_27 ((uint32_t)0x08000000) /*!< bit 27 */ -#define NVIC_ISER_SETENA_28 ((uint32_t)0x10000000) /*!< bit 28 */ -#define NVIC_ISER_SETENA_29 ((uint32_t)0x20000000) /*!< bit 29 */ -#define NVIC_ISER_SETENA_30 ((uint32_t)0x40000000) /*!< bit 30 */ -#define NVIC_ISER_SETENA_31 ((uint32_t)0x80000000) /*!< bit 31 */ - -/****************** Bit definition for NVIC_ICER register *******************/ -#define NVIC_ICER_CLRENA ((uint32_t)0xFFFFFFFF) /*!< Interrupt clear-enable bits */ -#define NVIC_ICER_CLRENA_0 ((uint32_t)0x00000001) /*!< bit 0 */ -#define NVIC_ICER_CLRENA_1 ((uint32_t)0x00000002) /*!< bit 1 */ -#define NVIC_ICER_CLRENA_2 ((uint32_t)0x00000004) /*!< bit 2 */ -#define NVIC_ICER_CLRENA_3 ((uint32_t)0x00000008) /*!< bit 3 */ -#define NVIC_ICER_CLRENA_4 ((uint32_t)0x00000010) /*!< bit 4 */ -#define NVIC_ICER_CLRENA_5 ((uint32_t)0x00000020) /*!< bit 5 */ -#define NVIC_ICER_CLRENA_6 ((uint32_t)0x00000040) /*!< bit 6 */ -#define NVIC_ICER_CLRENA_7 ((uint32_t)0x00000080) /*!< bit 7 */ -#define NVIC_ICER_CLRENA_8 ((uint32_t)0x00000100) /*!< bit 8 */ -#define NVIC_ICER_CLRENA_9 ((uint32_t)0x00000200) /*!< bit 9 */ -#define NVIC_ICER_CLRENA_10 ((uint32_t)0x00000400) /*!< bit 10 */ -#define NVIC_ICER_CLRENA_11 ((uint32_t)0x00000800) /*!< bit 11 */ -#define NVIC_ICER_CLRENA_12 ((uint32_t)0x00001000) /*!< bit 12 */ -#define NVIC_ICER_CLRENA_13 ((uint32_t)0x00002000) /*!< bit 13 */ -#define NVIC_ICER_CLRENA_14 ((uint32_t)0x00004000) /*!< bit 14 */ -#define NVIC_ICER_CLRENA_15 ((uint32_t)0x00008000) /*!< bit 15 */ -#define NVIC_ICER_CLRENA_16 ((uint32_t)0x00010000) /*!< bit 16 */ -#define NVIC_ICER_CLRENA_17 ((uint32_t)0x00020000) /*!< bit 17 */ -#define NVIC_ICER_CLRENA_18 ((uint32_t)0x00040000) /*!< bit 18 */ -#define NVIC_ICER_CLRENA_19 ((uint32_t)0x00080000) /*!< bit 19 */ -#define NVIC_ICER_CLRENA_20 ((uint32_t)0x00100000) /*!< bit 20 */ -#define NVIC_ICER_CLRENA_21 ((uint32_t)0x00200000) /*!< bit 21 */ -#define NVIC_ICER_CLRENA_22 ((uint32_t)0x00400000) /*!< bit 22 */ -#define NVIC_ICER_CLRENA_23 ((uint32_t)0x00800000) /*!< bit 23 */ -#define NVIC_ICER_CLRENA_24 ((uint32_t)0x01000000) /*!< bit 24 */ -#define NVIC_ICER_CLRENA_25 ((uint32_t)0x02000000) /*!< bit 25 */ -#define NVIC_ICER_CLRENA_26 ((uint32_t)0x04000000) /*!< bit 26 */ -#define NVIC_ICER_CLRENA_27 ((uint32_t)0x08000000) /*!< bit 27 */ -#define NVIC_ICER_CLRENA_28 ((uint32_t)0x10000000) /*!< bit 28 */ -#define NVIC_ICER_CLRENA_29 ((uint32_t)0x20000000) /*!< bit 29 */ -#define NVIC_ICER_CLRENA_30 ((uint32_t)0x40000000) /*!< bit 30 */ -#define NVIC_ICER_CLRENA_31 ((uint32_t)0x80000000) /*!< bit 31 */ - -/****************** Bit definition for NVIC_ISPR register *******************/ -#define NVIC_ISPR_SETPEND ((uint32_t)0xFFFFFFFF) /*!< Interrupt set-pending bits */ -#define NVIC_ISPR_SETPEND_0 ((uint32_t)0x00000001) /*!< bit 0 */ -#define NVIC_ISPR_SETPEND_1 ((uint32_t)0x00000002) /*!< bit 1 */ -#define NVIC_ISPR_SETPEND_2 ((uint32_t)0x00000004) /*!< bit 2 */ -#define NVIC_ISPR_SETPEND_3 ((uint32_t)0x00000008) /*!< bit 3 */ -#define NVIC_ISPR_SETPEND_4 ((uint32_t)0x00000010) /*!< bit 4 */ -#define NVIC_ISPR_SETPEND_5 ((uint32_t)0x00000020) /*!< bit 5 */ -#define NVIC_ISPR_SETPEND_6 ((uint32_t)0x00000040) /*!< bit 6 */ -#define NVIC_ISPR_SETPEND_7 ((uint32_t)0x00000080) /*!< bit 7 */ -#define NVIC_ISPR_SETPEND_8 ((uint32_t)0x00000100) /*!< bit 8 */ -#define NVIC_ISPR_SETPEND_9 ((uint32_t)0x00000200) /*!< bit 9 */ -#define NVIC_ISPR_SETPEND_10 ((uint32_t)0x00000400) /*!< bit 10 */ -#define NVIC_ISPR_SETPEND_11 ((uint32_t)0x00000800) /*!< bit 11 */ -#define NVIC_ISPR_SETPEND_12 ((uint32_t)0x00001000) /*!< bit 12 */ -#define NVIC_ISPR_SETPEND_13 ((uint32_t)0x00002000) /*!< bit 13 */ -#define NVIC_ISPR_SETPEND_14 ((uint32_t)0x00004000) /*!< bit 14 */ -#define NVIC_ISPR_SETPEND_15 ((uint32_t)0x00008000) /*!< bit 15 */ -#define NVIC_ISPR_SETPEND_16 ((uint32_t)0x00010000) /*!< bit 16 */ -#define NVIC_ISPR_SETPEND_17 ((uint32_t)0x00020000) /*!< bit 17 */ -#define NVIC_ISPR_SETPEND_18 ((uint32_t)0x00040000) /*!< bit 18 */ -#define NVIC_ISPR_SETPEND_19 ((uint32_t)0x00080000) /*!< bit 19 */ -#define NVIC_ISPR_SETPEND_20 ((uint32_t)0x00100000) /*!< bit 20 */ -#define NVIC_ISPR_SETPEND_21 ((uint32_t)0x00200000) /*!< bit 21 */ -#define NVIC_ISPR_SETPEND_22 ((uint32_t)0x00400000) /*!< bit 22 */ -#define NVIC_ISPR_SETPEND_23 ((uint32_t)0x00800000) /*!< bit 23 */ -#define NVIC_ISPR_SETPEND_24 ((uint32_t)0x01000000) /*!< bit 24 */ -#define NVIC_ISPR_SETPEND_25 ((uint32_t)0x02000000) /*!< bit 25 */ -#define NVIC_ISPR_SETPEND_26 ((uint32_t)0x04000000) /*!< bit 26 */ -#define NVIC_ISPR_SETPEND_27 ((uint32_t)0x08000000) /*!< bit 27 */ -#define NVIC_ISPR_SETPEND_28 ((uint32_t)0x10000000) /*!< bit 28 */ -#define NVIC_ISPR_SETPEND_29 ((uint32_t)0x20000000) /*!< bit 29 */ -#define NVIC_ISPR_SETPEND_30 ((uint32_t)0x40000000) /*!< bit 30 */ -#define NVIC_ISPR_SETPEND_31 ((uint32_t)0x80000000) /*!< bit 31 */ - -/****************** Bit definition for NVIC_ICPR register *******************/ -#define NVIC_ICPR_CLRPEND ((uint32_t)0xFFFFFFFF) /*!< Interrupt clear-pending bits */ -#define NVIC_ICPR_CLRPEND_0 ((uint32_t)0x00000001) /*!< bit 0 */ -#define NVIC_ICPR_CLRPEND_1 ((uint32_t)0x00000002) /*!< bit 1 */ -#define NVIC_ICPR_CLRPEND_2 ((uint32_t)0x00000004) /*!< bit 2 */ -#define NVIC_ICPR_CLRPEND_3 ((uint32_t)0x00000008) /*!< bit 3 */ -#define NVIC_ICPR_CLRPEND_4 ((uint32_t)0x00000010) /*!< bit 4 */ -#define NVIC_ICPR_CLRPEND_5 ((uint32_t)0x00000020) /*!< bit 5 */ -#define NVIC_ICPR_CLRPEND_6 ((uint32_t)0x00000040) /*!< bit 6 */ -#define NVIC_ICPR_CLRPEND_7 ((uint32_t)0x00000080) /*!< bit 7 */ -#define NVIC_ICPR_CLRPEND_8 ((uint32_t)0x00000100) /*!< bit 8 */ -#define NVIC_ICPR_CLRPEND_9 ((uint32_t)0x00000200) /*!< bit 9 */ -#define NVIC_ICPR_CLRPEND_10 ((uint32_t)0x00000400) /*!< bit 10 */ -#define NVIC_ICPR_CLRPEND_11 ((uint32_t)0x00000800) /*!< bit 11 */ -#define NVIC_ICPR_CLRPEND_12 ((uint32_t)0x00001000) /*!< bit 12 */ -#define NVIC_ICPR_CLRPEND_13 ((uint32_t)0x00002000) /*!< bit 13 */ -#define NVIC_ICPR_CLRPEND_14 ((uint32_t)0x00004000) /*!< bit 14 */ -#define NVIC_ICPR_CLRPEND_15 ((uint32_t)0x00008000) /*!< bit 15 */ -#define NVIC_ICPR_CLRPEND_16 ((uint32_t)0x00010000) /*!< bit 16 */ -#define NVIC_ICPR_CLRPEND_17 ((uint32_t)0x00020000) /*!< bit 17 */ -#define NVIC_ICPR_CLRPEND_18 ((uint32_t)0x00040000) /*!< bit 18 */ -#define NVIC_ICPR_CLRPEND_19 ((uint32_t)0x00080000) /*!< bit 19 */ -#define NVIC_ICPR_CLRPEND_20 ((uint32_t)0x00100000) /*!< bit 20 */ -#define NVIC_ICPR_CLRPEND_21 ((uint32_t)0x00200000) /*!< bit 21 */ -#define NVIC_ICPR_CLRPEND_22 ((uint32_t)0x00400000) /*!< bit 22 */ -#define NVIC_ICPR_CLRPEND_23 ((uint32_t)0x00800000) /*!< bit 23 */ -#define NVIC_ICPR_CLRPEND_24 ((uint32_t)0x01000000) /*!< bit 24 */ -#define NVIC_ICPR_CLRPEND_25 ((uint32_t)0x02000000) /*!< bit 25 */ -#define NVIC_ICPR_CLRPEND_26 ((uint32_t)0x04000000) /*!< bit 26 */ -#define NVIC_ICPR_CLRPEND_27 ((uint32_t)0x08000000) /*!< bit 27 */ -#define NVIC_ICPR_CLRPEND_28 ((uint32_t)0x10000000) /*!< bit 28 */ -#define NVIC_ICPR_CLRPEND_29 ((uint32_t)0x20000000) /*!< bit 29 */ -#define NVIC_ICPR_CLRPEND_30 ((uint32_t)0x40000000) /*!< bit 30 */ -#define NVIC_ICPR_CLRPEND_31 ((uint32_t)0x80000000) /*!< bit 31 */ - -/****************** Bit definition for NVIC_IABR register *******************/ -#define NVIC_IABR_ACTIVE ((uint32_t)0xFFFFFFFF) /*!< Interrupt active flags */ -#define NVIC_IABR_ACTIVE_0 ((uint32_t)0x00000001) /*!< bit 0 */ -#define NVIC_IABR_ACTIVE_1 ((uint32_t)0x00000002) /*!< bit 1 */ -#define NVIC_IABR_ACTIVE_2 ((uint32_t)0x00000004) /*!< bit 2 */ -#define NVIC_IABR_ACTIVE_3 ((uint32_t)0x00000008) /*!< bit 3 */ -#define NVIC_IABR_ACTIVE_4 ((uint32_t)0x00000010) /*!< bit 4 */ -#define NVIC_IABR_ACTIVE_5 ((uint32_t)0x00000020) /*!< bit 5 */ -#define NVIC_IABR_ACTIVE_6 ((uint32_t)0x00000040) /*!< bit 6 */ -#define NVIC_IABR_ACTIVE_7 ((uint32_t)0x00000080) /*!< bit 7 */ -#define NVIC_IABR_ACTIVE_8 ((uint32_t)0x00000100) /*!< bit 8 */ -#define NVIC_IABR_ACTIVE_9 ((uint32_t)0x00000200) /*!< bit 9 */ -#define NVIC_IABR_ACTIVE_10 ((uint32_t)0x00000400) /*!< bit 10 */ -#define NVIC_IABR_ACTIVE_11 ((uint32_t)0x00000800) /*!< bit 11 */ -#define NVIC_IABR_ACTIVE_12 ((uint32_t)0x00001000) /*!< bit 12 */ -#define NVIC_IABR_ACTIVE_13 ((uint32_t)0x00002000) /*!< bit 13 */ -#define NVIC_IABR_ACTIVE_14 ((uint32_t)0x00004000) /*!< bit 14 */ -#define NVIC_IABR_ACTIVE_15 ((uint32_t)0x00008000) /*!< bit 15 */ -#define NVIC_IABR_ACTIVE_16 ((uint32_t)0x00010000) /*!< bit 16 */ -#define NVIC_IABR_ACTIVE_17 ((uint32_t)0x00020000) /*!< bit 17 */ -#define NVIC_IABR_ACTIVE_18 ((uint32_t)0x00040000) /*!< bit 18 */ -#define NVIC_IABR_ACTIVE_19 ((uint32_t)0x00080000) /*!< bit 19 */ -#define NVIC_IABR_ACTIVE_20 ((uint32_t)0x00100000) /*!< bit 20 */ -#define NVIC_IABR_ACTIVE_21 ((uint32_t)0x00200000) /*!< bit 21 */ -#define NVIC_IABR_ACTIVE_22 ((uint32_t)0x00400000) /*!< bit 22 */ -#define NVIC_IABR_ACTIVE_23 ((uint32_t)0x00800000) /*!< bit 23 */ -#define NVIC_IABR_ACTIVE_24 ((uint32_t)0x01000000) /*!< bit 24 */ -#define NVIC_IABR_ACTIVE_25 ((uint32_t)0x02000000) /*!< bit 25 */ -#define NVIC_IABR_ACTIVE_26 ((uint32_t)0x04000000) /*!< bit 26 */ -#define NVIC_IABR_ACTIVE_27 ((uint32_t)0x08000000) /*!< bit 27 */ -#define NVIC_IABR_ACTIVE_28 ((uint32_t)0x10000000) /*!< bit 28 */ -#define NVIC_IABR_ACTIVE_29 ((uint32_t)0x20000000) /*!< bit 29 */ -#define NVIC_IABR_ACTIVE_30 ((uint32_t)0x40000000) /*!< bit 30 */ -#define NVIC_IABR_ACTIVE_31 ((uint32_t)0x80000000) /*!< bit 31 */ - -/****************** Bit definition for NVIC_PRI0 register *******************/ -#define NVIC_IPR0_PRI_0 ((uint32_t)0x000000FF) /*!< Priority of interrupt 0 */ -#define NVIC_IPR0_PRI_1 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 1 */ -#define NVIC_IPR0_PRI_2 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 2 */ -#define NVIC_IPR0_PRI_3 ((uint32_t)0xFF000000) /*!< Priority of interrupt 3 */ - -/****************** Bit definition for NVIC_PRI1 register *******************/ -#define NVIC_IPR1_PRI_4 ((uint32_t)0x000000FF) /*!< Priority of interrupt 4 */ -#define NVIC_IPR1_PRI_5 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 5 */ -#define NVIC_IPR1_PRI_6 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 6 */ -#define NVIC_IPR1_PRI_7 ((uint32_t)0xFF000000) /*!< Priority of interrupt 7 */ - -/****************** Bit definition for NVIC_PRI2 register *******************/ -#define NVIC_IPR2_PRI_8 ((uint32_t)0x000000FF) /*!< Priority of interrupt 8 */ -#define NVIC_IPR2_PRI_9 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 9 */ -#define NVIC_IPR2_PRI_10 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 10 */ -#define NVIC_IPR2_PRI_11 ((uint32_t)0xFF000000) /*!< Priority of interrupt 11 */ - -/****************** Bit definition for NVIC_PRI3 register *******************/ -#define NVIC_IPR3_PRI_12 ((uint32_t)0x000000FF) /*!< Priority of interrupt 12 */ -#define NVIC_IPR3_PRI_13 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 13 */ -#define NVIC_IPR3_PRI_14 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 14 */ -#define NVIC_IPR3_PRI_15 ((uint32_t)0xFF000000) /*!< Priority of interrupt 15 */ - -/****************** Bit definition for NVIC_PRI4 register *******************/ -#define NVIC_IPR4_PRI_16 ((uint32_t)0x000000FF) /*!< Priority of interrupt 16 */ -#define NVIC_IPR4_PRI_17 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 17 */ -#define NVIC_IPR4_PRI_18 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 18 */ -#define NVIC_IPR4_PRI_19 ((uint32_t)0xFF000000) /*!< Priority of interrupt 19 */ - -/****************** Bit definition for NVIC_PRI5 register *******************/ -#define NVIC_IPR5_PRI_20 ((uint32_t)0x000000FF) /*!< Priority of interrupt 20 */ -#define NVIC_IPR5_PRI_21 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 21 */ -#define NVIC_IPR5_PRI_22 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 22 */ -#define NVIC_IPR5_PRI_23 ((uint32_t)0xFF000000) /*!< Priority of interrupt 23 */ - -/****************** Bit definition for NVIC_PRI6 register *******************/ -#define NVIC_IPR6_PRI_24 ((uint32_t)0x000000FF) /*!< Priority of interrupt 24 */ -#define NVIC_IPR6_PRI_25 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 25 */ -#define NVIC_IPR6_PRI_26 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 26 */ -#define NVIC_IPR6_PRI_27 ((uint32_t)0xFF000000) /*!< Priority of interrupt 27 */ - -/****************** Bit definition for NVIC_PRI7 register *******************/ -#define NVIC_IPR7_PRI_28 ((uint32_t)0x000000FF) /*!< Priority of interrupt 28 */ -#define NVIC_IPR7_PRI_29 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 29 */ -#define NVIC_IPR7_PRI_30 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 30 */ -#define NVIC_IPR7_PRI_31 ((uint32_t)0xFF000000) /*!< Priority of interrupt 31 */ - -/****************** Bit definition for SCB_CPUID register *******************/ -#define SCB_CPUID_REVISION ((uint32_t)0x0000000F) /*!< Implementation defined revision number */ -#define SCB_CPUID_PARTNO ((uint32_t)0x0000FFF0) /*!< Number of processor within family */ -#define SCB_CPUID_Constant ((uint32_t)0x000F0000) /*!< Reads as 0x0F */ -#define SCB_CPUID_VARIANT ((uint32_t)0x00F00000) /*!< Implementation defined variant number */ -#define SCB_CPUID_IMPLEMENTER ((uint32_t)0xFF000000) /*!< Implementer code. ARM is 0x41 */ - -/******************* Bit definition for SCB_ICSR register *******************/ -#define SCB_ICSR_VECTACTIVE ((uint32_t)0x000001FF) /*!< Active ISR number field */ -#define SCB_ICSR_RETTOBASE ((uint32_t)0x00000800) /*!< All active exceptions minus the IPSR_current_exception yields the empty set */ -#define SCB_ICSR_VECTPENDING ((uint32_t)0x003FF000) /*!< Pending ISR number field */ -#define SCB_ICSR_ISRPENDING ((uint32_t)0x00400000) /*!< Interrupt pending flag */ -#define SCB_ICSR_ISRPREEMPT ((uint32_t)0x00800000) /*!< It indicates that a pending interrupt becomes active in the next running cycle */ -#define SCB_ICSR_PENDSTCLR ((uint32_t)0x02000000) /*!< Clear pending SysTick bit */ -#define SCB_ICSR_PENDSTSET ((uint32_t)0x04000000) /*!< Set pending SysTick bit */ -#define SCB_ICSR_PENDSVCLR ((uint32_t)0x08000000) /*!< Clear pending pendSV bit */ -#define SCB_ICSR_PENDSVSET ((uint32_t)0x10000000) /*!< Set pending pendSV bit */ -#define SCB_ICSR_NMIPENDSET ((uint32_t)0x80000000) /*!< Set pending NMI bit */ - -/******************* Bit definition for SCB_VTOR register *******************/ -#define SCB_VTOR_TBLOFF ((uint32_t)0x1FFFFF80) /*!< Vector table base offset field */ -#define SCB_VTOR_TBLBASE ((uint32_t)0x20000000) /*!< Table base in code(0) or RAM(1) */ - -/*!<***************** Bit definition for SCB_AIRCR register *******************/ -#define SCB_AIRCR_VECTRESET ((uint32_t)0x00000001) /*!< System Reset bit */ -#define SCB_AIRCR_VECTCLRACTIVE ((uint32_t)0x00000002) /*!< Clear active vector bit */ -#define SCB_AIRCR_SYSRESETREQ ((uint32_t)0x00000004) /*!< Requests chip control logic to generate a reset */ - -#define SCB_AIRCR_PRIGROUP ((uint32_t)0x00000700) /*!< PRIGROUP[2:0] bits (Priority group) */ -#define SCB_AIRCR_PRIGROUP_0 ((uint32_t)0x00000100) /*!< Bit 0 */ -#define SCB_AIRCR_PRIGROUP_1 ((uint32_t)0x00000200) /*!< Bit 1 */ -#define SCB_AIRCR_PRIGROUP_2 ((uint32_t)0x00000400) /*!< Bit 2 */ - -/* prority group configuration */ -#define SCB_AIRCR_PRIGROUP0 ((uint32_t)0x00000000) /*!< Priority group=0 (7 bits of pre-emption priority, 1 bit of subpriority) */ -#define SCB_AIRCR_PRIGROUP1 ((uint32_t)0x00000100) /*!< Priority group=1 (6 bits of pre-emption priority, 2 bits of subpriority) */ -#define SCB_AIRCR_PRIGROUP2 ((uint32_t)0x00000200) /*!< Priority group=2 (5 bits of pre-emption priority, 3 bits of subpriority) */ -#define SCB_AIRCR_PRIGROUP3 ((uint32_t)0x00000300) /*!< Priority group=3 (4 bits of pre-emption priority, 4 bits of subpriority) */ -#define SCB_AIRCR_PRIGROUP4 ((uint32_t)0x00000400) /*!< Priority group=4 (3 bits of pre-emption priority, 5 bits of subpriority) */ -#define SCB_AIRCR_PRIGROUP5 ((uint32_t)0x00000500) /*!< Priority group=5 (2 bits of pre-emption priority, 6 bits of subpriority) */ -#define SCB_AIRCR_PRIGROUP6 ((uint32_t)0x00000600) /*!< Priority group=6 (1 bit of pre-emption priority, 7 bits of subpriority) */ -#define SCB_AIRCR_PRIGROUP7 ((uint32_t)0x00000700) /*!< Priority group=7 (no pre-emption priority, 8 bits of subpriority) */ - -#define SCB_AIRCR_ENDIANESS ((uint32_t)0x00008000) /*!< Data endianness bit */ -#define SCB_AIRCR_VECTKEY ((uint32_t)0xFFFF0000) /*!< Register key (VECTKEY) - Reads as 0xFA05 (VECTKEYSTAT) */ - -/******************* Bit definition for SCB_SCR register ********************/ -#define SCB_SCR_SLEEPONEXIT ((uint8_t)0x02) /*!< Sleep on exit bit */ -#define SCB_SCR_SLEEPDEEP ((uint8_t)0x04) /*!< Sleep deep bit */ -#define SCB_SCR_SEVONPEND ((uint8_t)0x10) /*!< Wake up from WFE */ - -/******************** Bit definition for SCB_CCR register *******************/ -#define SCB_CCR_NONBASETHRDENA ((uint16_t)0x0001) /*!< Thread mode can be entered from any level in Handler mode by controlled return value */ -#define SCB_CCR_USERSETMPEND ((uint16_t)0x0002) /*!< Enables user code to write the Software Trigger Interrupt register to trigger (pend) a Main exception */ -#define SCB_CCR_UNALIGN_TRP ((uint16_t)0x0008) /*!< Trap for unaligned access */ -#define SCB_CCR_DIV_0_TRP ((uint16_t)0x0010) /*!< Trap on Divide by 0 */ -#define SCB_CCR_BFHFNMIGN ((uint16_t)0x0100) /*!< Handlers running at priority -1 and -2 */ -#define SCB_CCR_STKALIGN ((uint16_t)0x0200) /*!< On exception entry, the SP used prior to the exception is adjusted to be 8-byte aligned */ - -/******************* Bit definition for SCB_SHPR register ********************/ -#define SCB_SHPR_PRI_N ((uint32_t)0x000000FF) /*!< Priority of system handler 4,8, and 12. Mem Manage, reserved and Debug Monitor */ -#define SCB_SHPR_PRI_N1 ((uint32_t)0x0000FF00) /*!< Priority of system handler 5,9, and 13. Bus Fault, reserved and reserved */ -#define SCB_SHPR_PRI_N2 ((uint32_t)0x00FF0000) /*!< Priority of system handler 6,10, and 14. Usage Fault, reserved and PendSV */ -#define SCB_SHPR_PRI_N3 ((uint32_t)0xFF000000) /*!< Priority of system handler 7,11, and 15. Reserved, SVCall and SysTick */ - -/****************** Bit definition for SCB_SHCSR register *******************/ -#define SCB_SHCSR_MEMFAULTACT ((uint32_t)0x00000001) /*!< MemManage is active */ -#define SCB_SHCSR_BUSFAULTACT ((uint32_t)0x00000002) /*!< BusFault is active */ -#define SCB_SHCSR_USGFAULTACT ((uint32_t)0x00000008) /*!< UsageFault is active */ -#define SCB_SHCSR_SVCALLACT ((uint32_t)0x00000080) /*!< SVCall is active */ -#define SCB_SHCSR_MONITORACT ((uint32_t)0x00000100) /*!< Monitor is active */ -#define SCB_SHCSR_PENDSVACT ((uint32_t)0x00000400) /*!< PendSV is active */ -#define SCB_SHCSR_SYSTICKACT ((uint32_t)0x00000800) /*!< SysTick is active */ -#define SCB_SHCSR_USGFAULTPENDED ((uint32_t)0x00001000) /*!< Usage Fault is pended */ -#define SCB_SHCSR_MEMFAULTPENDED ((uint32_t)0x00002000) /*!< MemManage is pended */ -#define SCB_SHCSR_BUSFAULTPENDED ((uint32_t)0x00004000) /*!< Bus Fault is pended */ -#define SCB_SHCSR_SVCALLPENDED ((uint32_t)0x00008000) /*!< SVCall is pended */ -#define SCB_SHCSR_MEMFAULTENA ((uint32_t)0x00010000) /*!< MemManage enable */ -#define SCB_SHCSR_BUSFAULTENA ((uint32_t)0x00020000) /*!< Bus Fault enable */ -#define SCB_SHCSR_USGFAULTENA ((uint32_t)0x00040000) /*!< UsageFault enable */ - -/******************* Bit definition for SCB_CFSR register *******************/ -/*!< MFSR */ -#define SCB_CFSR_IACCVIOL ((uint32_t)0x00000001) /*!< Instruction access violation */ -#define SCB_CFSR_DACCVIOL ((uint32_t)0x00000002) /*!< Data access violation */ -#define SCB_CFSR_MUNSTKERR ((uint32_t)0x00000008) /*!< Unstacking error */ -#define SCB_CFSR_MSTKERR ((uint32_t)0x00000010) /*!< Stacking error */ -#define SCB_CFSR_MMARVALID ((uint32_t)0x00000080) /*!< Memory Manage Address Register address valid flag */ -/*!< BFSR */ -#define SCB_CFSR_IBUSERR ((uint32_t)0x00000100) /*!< Instruction bus error flag */ -#define SCB_CFSR_PRECISERR ((uint32_t)0x00000200) /*!< Precise data bus error */ -#define SCB_CFSR_IMPRECISERR ((uint32_t)0x00000400) /*!< Imprecise data bus error */ -#define SCB_CFSR_UNSTKERR ((uint32_t)0x00000800) /*!< Unstacking error */ -#define SCB_CFSR_STKERR ((uint32_t)0x00001000) /*!< Stacking error */ -#define SCB_CFSR_BFARVALID ((uint32_t)0x00008000) /*!< Bus Fault Address Register address valid flag */ -/*!< UFSR */ -#define SCB_CFSR_UNDEFINSTR ((uint32_t)0x00010000) /*!< The processor attempt to excecute an undefined instruction */ -#define SCB_CFSR_INVSTATE ((uint32_t)0x00020000) /*!< Invalid combination of EPSR and instruction */ -#define SCB_CFSR_INVPC ((uint32_t)0x00040000) /*!< Attempt to load EXC_RETURN into pc illegally */ -#define SCB_CFSR_NOCP ((uint32_t)0x00080000) /*!< Attempt to use a coprocessor instruction */ -#define SCB_CFSR_UNALIGNED ((uint32_t)0x01000000) /*!< Fault occurs when there is an attempt to make an unaligned memory access */ -#define SCB_CFSR_DIVBYZERO ((uint32_t)0x02000000) /*!< Fault occurs when SDIV or DIV instruction is used with a divisor of 0 */ - -/******************* Bit definition for SCB_HFSR register *******************/ -#define SCB_HFSR_VECTTBL ((uint32_t)0x00000002) /*!< Fault occures because of vector table read on exception processing */ -#define SCB_HFSR_FORCED ((uint32_t)0x40000000) /*!< Hard Fault activated when a configurable Fault was received and cannot activate */ -#define SCB_HFSR_DEBUGEVT ((uint32_t)0x80000000) /*!< Fault related to debug */ - -/******************* Bit definition for SCB_DFSR register *******************/ -#define SCB_DFSR_HALTED ((uint8_t)0x01) /*!< Halt request flag */ -#define SCB_DFSR_BKPT ((uint8_t)0x02) /*!< BKPT flag */ -#define SCB_DFSR_DWTTRAP ((uint8_t)0x04) /*!< Data Watchpoint and Trace (DWT) flag */ -#define SCB_DFSR_VCATCH ((uint8_t)0x08) /*!< Vector catch flag */ -#define SCB_DFSR_EXTERNAL ((uint8_t)0x10) /*!< External debug request flag */ - -/******************* Bit definition for SCB_MMFAR register ******************/ -#define SCB_MMFAR_ADDRESS ((uint32_t)0xFFFFFFFF) /*!< Mem Manage fault address field */ - -/******************* Bit definition for SCB_BFAR register *******************/ -#define SCB_BFAR_ADDRESS ((uint32_t)0xFFFFFFFF) /*!< Bus fault address field */ - -/******************* Bit definition for SCB_afsr register *******************/ -#define SCB_AFSR_IMPDEF ((uint32_t)0xFFFFFFFF) /*!< Implementation defined */ - -/******************************************************************************/ -/* */ -/* External Interrupt/Event Controller */ -/* */ -/******************************************************************************/ - -/******************* Bit definition for EXTI_IMR register *******************/ -#define EXTI_IMR_MR0 ((uint32_t)0x00000001) /*!< Interrupt Mask on line 0 */ -#define EXTI_IMR_MR1 ((uint32_t)0x00000002) /*!< Interrupt Mask on line 1 */ -#define EXTI_IMR_MR2 ((uint32_t)0x00000004) /*!< Interrupt Mask on line 2 */ -#define EXTI_IMR_MR3 ((uint32_t)0x00000008) /*!< Interrupt Mask on line 3 */ -#define EXTI_IMR_MR4 ((uint32_t)0x00000010) /*!< Interrupt Mask on line 4 */ -#define EXTI_IMR_MR5 ((uint32_t)0x00000020) /*!< Interrupt Mask on line 5 */ -#define EXTI_IMR_MR6 ((uint32_t)0x00000040) /*!< Interrupt Mask on line 6 */ -#define EXTI_IMR_MR7 ((uint32_t)0x00000080) /*!< Interrupt Mask on line 7 */ -#define EXTI_IMR_MR8 ((uint32_t)0x00000100) /*!< Interrupt Mask on line 8 */ -#define EXTI_IMR_MR9 ((uint32_t)0x00000200) /*!< Interrupt Mask on line 9 */ -#define EXTI_IMR_MR10 ((uint32_t)0x00000400) /*!< Interrupt Mask on line 10 */ -#define EXTI_IMR_MR11 ((uint32_t)0x00000800) /*!< Interrupt Mask on line 11 */ -#define EXTI_IMR_MR12 ((uint32_t)0x00001000) /*!< Interrupt Mask on line 12 */ -#define EXTI_IMR_MR13 ((uint32_t)0x00002000) /*!< Interrupt Mask on line 13 */ -#define EXTI_IMR_MR14 ((uint32_t)0x00004000) /*!< Interrupt Mask on line 14 */ -#define EXTI_IMR_MR15 ((uint32_t)0x00008000) /*!< Interrupt Mask on line 15 */ -#define EXTI_IMR_MR16 ((uint32_t)0x00010000) /*!< Interrupt Mask on line 16 */ -#define EXTI_IMR_MR17 ((uint32_t)0x00020000) /*!< Interrupt Mask on line 17 */ -#define EXTI_IMR_MR18 ((uint32_t)0x00040000) /*!< Interrupt Mask on line 18 */ -#define EXTI_IMR_MR19 ((uint32_t)0x00080000) /*!< Interrupt Mask on line 19 */ - -/******************* Bit definition for EXTI_EMR register *******************/ -#define EXTI_EMR_MR0 ((uint32_t)0x00000001) /*!< Event Mask on line 0 */ -#define EXTI_EMR_MR1 ((uint32_t)0x00000002) /*!< Event Mask on line 1 */ -#define EXTI_EMR_MR2 ((uint32_t)0x00000004) /*!< Event Mask on line 2 */ -#define EXTI_EMR_MR3 ((uint32_t)0x00000008) /*!< Event Mask on line 3 */ -#define EXTI_EMR_MR4 ((uint32_t)0x00000010) /*!< Event Mask on line 4 */ -#define EXTI_EMR_MR5 ((uint32_t)0x00000020) /*!< Event Mask on line 5 */ -#define EXTI_EMR_MR6 ((uint32_t)0x00000040) /*!< Event Mask on line 6 */ -#define EXTI_EMR_MR7 ((uint32_t)0x00000080) /*!< Event Mask on line 7 */ -#define EXTI_EMR_MR8 ((uint32_t)0x00000100) /*!< Event Mask on line 8 */ -#define EXTI_EMR_MR9 ((uint32_t)0x00000200) /*!< Event Mask on line 9 */ -#define EXTI_EMR_MR10 ((uint32_t)0x00000400) /*!< Event Mask on line 10 */ -#define EXTI_EMR_MR11 ((uint32_t)0x00000800) /*!< Event Mask on line 11 */ -#define EXTI_EMR_MR12 ((uint32_t)0x00001000) /*!< Event Mask on line 12 */ -#define EXTI_EMR_MR13 ((uint32_t)0x00002000) /*!< Event Mask on line 13 */ -#define EXTI_EMR_MR14 ((uint32_t)0x00004000) /*!< Event Mask on line 14 */ -#define EXTI_EMR_MR15 ((uint32_t)0x00008000) /*!< Event Mask on line 15 */ -#define EXTI_EMR_MR16 ((uint32_t)0x00010000) /*!< Event Mask on line 16 */ -#define EXTI_EMR_MR17 ((uint32_t)0x00020000) /*!< Event Mask on line 17 */ -#define EXTI_EMR_MR18 ((uint32_t)0x00040000) /*!< Event Mask on line 18 */ -#define EXTI_EMR_MR19 ((uint32_t)0x00080000) /*!< Event Mask on line 19 */ - -/****************** Bit definition for EXTI_RTSR register *******************/ -#define EXTI_RTSR_TR0 ((uint32_t)0x00000001) /*!< Rising trigger event configuration bit of line 0 */ -#define EXTI_RTSR_TR1 ((uint32_t)0x00000002) /*!< Rising trigger event configuration bit of line 1 */ -#define EXTI_RTSR_TR2 ((uint32_t)0x00000004) /*!< Rising trigger event configuration bit of line 2 */ -#define EXTI_RTSR_TR3 ((uint32_t)0x00000008) /*!< Rising trigger event configuration bit of line 3 */ -#define EXTI_RTSR_TR4 ((uint32_t)0x00000010) /*!< Rising trigger event configuration bit of line 4 */ -#define EXTI_RTSR_TR5 ((uint32_t)0x00000020) /*!< Rising trigger event configuration bit of line 5 */ -#define EXTI_RTSR_TR6 ((uint32_t)0x00000040) /*!< Rising trigger event configuration bit of line 6 */ -#define EXTI_RTSR_TR7 ((uint32_t)0x00000080) /*!< Rising trigger event configuration bit of line 7 */ -#define EXTI_RTSR_TR8 ((uint32_t)0x00000100) /*!< Rising trigger event configuration bit of line 8 */ -#define EXTI_RTSR_TR9 ((uint32_t)0x00000200) /*!< Rising trigger event configuration bit of line 9 */ -#define EXTI_RTSR_TR10 ((uint32_t)0x00000400) /*!< Rising trigger event configuration bit of line 10 */ -#define EXTI_RTSR_TR11 ((uint32_t)0x00000800) /*!< Rising trigger event configuration bit of line 11 */ -#define EXTI_RTSR_TR12 ((uint32_t)0x00001000) /*!< Rising trigger event configuration bit of line 12 */ -#define EXTI_RTSR_TR13 ((uint32_t)0x00002000) /*!< Rising trigger event configuration bit of line 13 */ -#define EXTI_RTSR_TR14 ((uint32_t)0x00004000) /*!< Rising trigger event configuration bit of line 14 */ -#define EXTI_RTSR_TR15 ((uint32_t)0x00008000) /*!< Rising trigger event configuration bit of line 15 */ -#define EXTI_RTSR_TR16 ((uint32_t)0x00010000) /*!< Rising trigger event configuration bit of line 16 */ -#define EXTI_RTSR_TR17 ((uint32_t)0x00020000) /*!< Rising trigger event configuration bit of line 17 */ -#define EXTI_RTSR_TR18 ((uint32_t)0x00040000) /*!< Rising trigger event configuration bit of line 18 */ -#define EXTI_RTSR_TR19 ((uint32_t)0x00080000) /*!< Rising trigger event configuration bit of line 19 */ - -/****************** Bit definition for EXTI_FTSR register *******************/ -#define EXTI_FTSR_TR0 ((uint32_t)0x00000001) /*!< Falling trigger event configuration bit of line 0 */ -#define EXTI_FTSR_TR1 ((uint32_t)0x00000002) /*!< Falling trigger event configuration bit of line 1 */ -#define EXTI_FTSR_TR2 ((uint32_t)0x00000004) /*!< Falling trigger event configuration bit of line 2 */ -#define EXTI_FTSR_TR3 ((uint32_t)0x00000008) /*!< Falling trigger event configuration bit of line 3 */ -#define EXTI_FTSR_TR4 ((uint32_t)0x00000010) /*!< Falling trigger event configuration bit of line 4 */ -#define EXTI_FTSR_TR5 ((uint32_t)0x00000020) /*!< Falling trigger event configuration bit of line 5 */ -#define EXTI_FTSR_TR6 ((uint32_t)0x00000040) /*!< Falling trigger event configuration bit of line 6 */ -#define EXTI_FTSR_TR7 ((uint32_t)0x00000080) /*!< Falling trigger event configuration bit of line 7 */ -#define EXTI_FTSR_TR8 ((uint32_t)0x00000100) /*!< Falling trigger event configuration bit of line 8 */ -#define EXTI_FTSR_TR9 ((uint32_t)0x00000200) /*!< Falling trigger event configuration bit of line 9 */ -#define EXTI_FTSR_TR10 ((uint32_t)0x00000400) /*!< Falling trigger event configuration bit of line 10 */ -#define EXTI_FTSR_TR11 ((uint32_t)0x00000800) /*!< Falling trigger event configuration bit of line 11 */ -#define EXTI_FTSR_TR12 ((uint32_t)0x00001000) /*!< Falling trigger event configuration bit of line 12 */ -#define EXTI_FTSR_TR13 ((uint32_t)0x00002000) /*!< Falling trigger event configuration bit of line 13 */ -#define EXTI_FTSR_TR14 ((uint32_t)0x00004000) /*!< Falling trigger event configuration bit of line 14 */ -#define EXTI_FTSR_TR15 ((uint32_t)0x00008000) /*!< Falling trigger event configuration bit of line 15 */ -#define EXTI_FTSR_TR16 ((uint32_t)0x00010000) /*!< Falling trigger event configuration bit of line 16 */ -#define EXTI_FTSR_TR17 ((uint32_t)0x00020000) /*!< Falling trigger event configuration bit of line 17 */ -#define EXTI_FTSR_TR18 ((uint32_t)0x00040000) /*!< Falling trigger event configuration bit of line 18 */ -#define EXTI_FTSR_TR19 ((uint32_t)0x00080000) /*!< Falling trigger event configuration bit of line 19 */ - -/****************** Bit definition for EXTI_SWIER register ******************/ -#define EXTI_SWIER_SWIER0 ((uint32_t)0x00000001) /*!< Software Interrupt on line 0 */ -#define EXTI_SWIER_SWIER1 ((uint32_t)0x00000002) /*!< Software Interrupt on line 1 */ -#define EXTI_SWIER_SWIER2 ((uint32_t)0x00000004) /*!< Software Interrupt on line 2 */ -#define EXTI_SWIER_SWIER3 ((uint32_t)0x00000008) /*!< Software Interrupt on line 3 */ -#define EXTI_SWIER_SWIER4 ((uint32_t)0x00000010) /*!< Software Interrupt on line 4 */ -#define EXTI_SWIER_SWIER5 ((uint32_t)0x00000020) /*!< Software Interrupt on line 5 */ -#define EXTI_SWIER_SWIER6 ((uint32_t)0x00000040) /*!< Software Interrupt on line 6 */ -#define EXTI_SWIER_SWIER7 ((uint32_t)0x00000080) /*!< Software Interrupt on line 7 */ -#define EXTI_SWIER_SWIER8 ((uint32_t)0x00000100) /*!< Software Interrupt on line 8 */ -#define EXTI_SWIER_SWIER9 ((uint32_t)0x00000200) /*!< Software Interrupt on line 9 */ -#define EXTI_SWIER_SWIER10 ((uint32_t)0x00000400) /*!< Software Interrupt on line 10 */ -#define EXTI_SWIER_SWIER11 ((uint32_t)0x00000800) /*!< Software Interrupt on line 11 */ -#define EXTI_SWIER_SWIER12 ((uint32_t)0x00001000) /*!< Software Interrupt on line 12 */ -#define EXTI_SWIER_SWIER13 ((uint32_t)0x00002000) /*!< Software Interrupt on line 13 */ -#define EXTI_SWIER_SWIER14 ((uint32_t)0x00004000) /*!< Software Interrupt on line 14 */ -#define EXTI_SWIER_SWIER15 ((uint32_t)0x00008000) /*!< Software Interrupt on line 15 */ -#define EXTI_SWIER_SWIER16 ((uint32_t)0x00010000) /*!< Software Interrupt on line 16 */ -#define EXTI_SWIER_SWIER17 ((uint32_t)0x00020000) /*!< Software Interrupt on line 17 */ -#define EXTI_SWIER_SWIER18 ((uint32_t)0x00040000) /*!< Software Interrupt on line 18 */ -#define EXTI_SWIER_SWIER19 ((uint32_t)0x00080000) /*!< Software Interrupt on line 19 */ - -/******************* Bit definition for EXTI_PR register ********************/ -#define EXTI_PR_PR0 ((uint32_t)0x00000001) /*!< Pending bit for line 0 */ -#define EXTI_PR_PR1 ((uint32_t)0x00000002) /*!< Pending bit for line 1 */ -#define EXTI_PR_PR2 ((uint32_t)0x00000004) /*!< Pending bit for line 2 */ -#define EXTI_PR_PR3 ((uint32_t)0x00000008) /*!< Pending bit for line 3 */ -#define EXTI_PR_PR4 ((uint32_t)0x00000010) /*!< Pending bit for line 4 */ -#define EXTI_PR_PR5 ((uint32_t)0x00000020) /*!< Pending bit for line 5 */ -#define EXTI_PR_PR6 ((uint32_t)0x00000040) /*!< Pending bit for line 6 */ -#define EXTI_PR_PR7 ((uint32_t)0x00000080) /*!< Pending bit for line 7 */ -#define EXTI_PR_PR8 ((uint32_t)0x00000100) /*!< Pending bit for line 8 */ -#define EXTI_PR_PR9 ((uint32_t)0x00000200) /*!< Pending bit for line 9 */ -#define EXTI_PR_PR10 ((uint32_t)0x00000400) /*!< Pending bit for line 10 */ -#define EXTI_PR_PR11 ((uint32_t)0x00000800) /*!< Pending bit for line 11 */ -#define EXTI_PR_PR12 ((uint32_t)0x00001000) /*!< Pending bit for line 12 */ -#define EXTI_PR_PR13 ((uint32_t)0x00002000) /*!< Pending bit for line 13 */ -#define EXTI_PR_PR14 ((uint32_t)0x00004000) /*!< Pending bit for line 14 */ -#define EXTI_PR_PR15 ((uint32_t)0x00008000) /*!< Pending bit for line 15 */ -#define EXTI_PR_PR16 ((uint32_t)0x00010000) /*!< Pending bit for line 16 */ -#define EXTI_PR_PR17 ((uint32_t)0x00020000) /*!< Pending bit for line 17 */ -#define EXTI_PR_PR18 ((uint32_t)0x00040000) /*!< Pending bit for line 18 */ -#define EXTI_PR_PR19 ((uint32_t)0x00080000) /*!< Pending bit for line 19 */ - -/******************************************************************************/ -/* */ -/* DMA Controller */ -/* */ -/******************************************************************************/ - -/******************* Bit definition for DMA_ISR register ********************/ -#define DMA_ISR_GIF1 ((uint32_t)0x00000001) /*!< Channel 1 Global interrupt flag */ -#define DMA_ISR_TCIF1 ((uint32_t)0x00000002) /*!< Channel 1 Transfer Complete flag */ -#define DMA_ISR_HTIF1 ((uint32_t)0x00000004) /*!< Channel 1 Half Transfer flag */ -#define DMA_ISR_TEIF1 ((uint32_t)0x00000008) /*!< Channel 1 Transfer Error flag */ -#define DMA_ISR_GIF2 ((uint32_t)0x00000010) /*!< Channel 2 Global interrupt flag */ -#define DMA_ISR_TCIF2 ((uint32_t)0x00000020) /*!< Channel 2 Transfer Complete flag */ -#define DMA_ISR_HTIF2 ((uint32_t)0x00000040) /*!< Channel 2 Half Transfer flag */ -#define DMA_ISR_TEIF2 ((uint32_t)0x00000080) /*!< Channel 2 Transfer Error flag */ -#define DMA_ISR_GIF3 ((uint32_t)0x00000100) /*!< Channel 3 Global interrupt flag */ -#define DMA_ISR_TCIF3 ((uint32_t)0x00000200) /*!< Channel 3 Transfer Complete flag */ -#define DMA_ISR_HTIF3 ((uint32_t)0x00000400) /*!< Channel 3 Half Transfer flag */ -#define DMA_ISR_TEIF3 ((uint32_t)0x00000800) /*!< Channel 3 Transfer Error flag */ -#define DMA_ISR_GIF4 ((uint32_t)0x00001000) /*!< Channel 4 Global interrupt flag */ -#define DMA_ISR_TCIF4 ((uint32_t)0x00002000) /*!< Channel 4 Transfer Complete flag */ -#define DMA_ISR_HTIF4 ((uint32_t)0x00004000) /*!< Channel 4 Half Transfer flag */ -#define DMA_ISR_TEIF4 ((uint32_t)0x00008000) /*!< Channel 4 Transfer Error flag */ -#define DMA_ISR_GIF5 ((uint32_t)0x00010000) /*!< Channel 5 Global interrupt flag */ -#define DMA_ISR_TCIF5 ((uint32_t)0x00020000) /*!< Channel 5 Transfer Complete flag */ -#define DMA_ISR_HTIF5 ((uint32_t)0x00040000) /*!< Channel 5 Half Transfer flag */ -#define DMA_ISR_TEIF5 ((uint32_t)0x00080000) /*!< Channel 5 Transfer Error flag */ -#define DMA_ISR_GIF6 ((uint32_t)0x00100000) /*!< Channel 6 Global interrupt flag */ -#define DMA_ISR_TCIF6 ((uint32_t)0x00200000) /*!< Channel 6 Transfer Complete flag */ -#define DMA_ISR_HTIF6 ((uint32_t)0x00400000) /*!< Channel 6 Half Transfer flag */ -#define DMA_ISR_TEIF6 ((uint32_t)0x00800000) /*!< Channel 6 Transfer Error flag */ -#define DMA_ISR_GIF7 ((uint32_t)0x01000000) /*!< Channel 7 Global interrupt flag */ -#define DMA_ISR_TCIF7 ((uint32_t)0x02000000) /*!< Channel 7 Transfer Complete flag */ -#define DMA_ISR_HTIF7 ((uint32_t)0x04000000) /*!< Channel 7 Half Transfer flag */ -#define DMA_ISR_TEIF7 ((uint32_t)0x08000000) /*!< Channel 7 Transfer Error flag */ - -/******************* Bit definition for DMA_IFCR register *******************/ -#define DMA_IFCR_CGIF1 ((uint32_t)0x00000001) /*!< Channel 1 Global interrupt clearr */ -#define DMA_IFCR_CTCIF1 ((uint32_t)0x00000002) /*!< Channel 1 Transfer Complete clear */ -#define DMA_IFCR_CHTIF1 ((uint32_t)0x00000004) /*!< Channel 1 Half Transfer clear */ -#define DMA_IFCR_CTEIF1 ((uint32_t)0x00000008) /*!< Channel 1 Transfer Error clear */ -#define DMA_IFCR_CGIF2 ((uint32_t)0x00000010) /*!< Channel 2 Global interrupt clear */ -#define DMA_IFCR_CTCIF2 ((uint32_t)0x00000020) /*!< Channel 2 Transfer Complete clear */ -#define DMA_IFCR_CHTIF2 ((uint32_t)0x00000040) /*!< Channel 2 Half Transfer clear */ -#define DMA_IFCR_CTEIF2 ((uint32_t)0x00000080) /*!< Channel 2 Transfer Error clear */ -#define DMA_IFCR_CGIF3 ((uint32_t)0x00000100) /*!< Channel 3 Global interrupt clear */ -#define DMA_IFCR_CTCIF3 ((uint32_t)0x00000200) /*!< Channel 3 Transfer Complete clear */ -#define DMA_IFCR_CHTIF3 ((uint32_t)0x00000400) /*!< Channel 3 Half Transfer clear */ -#define DMA_IFCR_CTEIF3 ((uint32_t)0x00000800) /*!< Channel 3 Transfer Error clear */ -#define DMA_IFCR_CGIF4 ((uint32_t)0x00001000) /*!< Channel 4 Global interrupt clear */ -#define DMA_IFCR_CTCIF4 ((uint32_t)0x00002000) /*!< Channel 4 Transfer Complete clear */ -#define DMA_IFCR_CHTIF4 ((uint32_t)0x00004000) /*!< Channel 4 Half Transfer clear */ -#define DMA_IFCR_CTEIF4 ((uint32_t)0x00008000) /*!< Channel 4 Transfer Error clear */ -#define DMA_IFCR_CGIF5 ((uint32_t)0x00010000) /*!< Channel 5 Global interrupt clear */ -#define DMA_IFCR_CTCIF5 ((uint32_t)0x00020000) /*!< Channel 5 Transfer Complete clear */ -#define DMA_IFCR_CHTIF5 ((uint32_t)0x00040000) /*!< Channel 5 Half Transfer clear */ -#define DMA_IFCR_CTEIF5 ((uint32_t)0x00080000) /*!< Channel 5 Transfer Error clear */ -#define DMA_IFCR_CGIF6 ((uint32_t)0x00100000) /*!< Channel 6 Global interrupt clear */ -#define DMA_IFCR_CTCIF6 ((uint32_t)0x00200000) /*!< Channel 6 Transfer Complete clear */ -#define DMA_IFCR_CHTIF6 ((uint32_t)0x00400000) /*!< Channel 6 Half Transfer clear */ -#define DMA_IFCR_CTEIF6 ((uint32_t)0x00800000) /*!< Channel 6 Transfer Error clear */ -#define DMA_IFCR_CGIF7 ((uint32_t)0x01000000) /*!< Channel 7 Global interrupt clear */ -#define DMA_IFCR_CTCIF7 ((uint32_t)0x02000000) /*!< Channel 7 Transfer Complete clear */ -#define DMA_IFCR_CHTIF7 ((uint32_t)0x04000000) /*!< Channel 7 Half Transfer clear */ -#define DMA_IFCR_CTEIF7 ((uint32_t)0x08000000) /*!< Channel 7 Transfer Error clear */ - -/******************* Bit definition for DMA_CCR1 register *******************/ -#define DMA_CCR1_EN ((uint16_t)0x0001) /*!< Channel enable*/ -#define DMA_CCR1_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ -#define DMA_CCR1_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ -#define DMA_CCR1_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ -#define DMA_CCR1_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ -#define DMA_CCR1_CIRC ((uint16_t)0x0020) /*!< Circular mode */ -#define DMA_CCR1_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ -#define DMA_CCR1_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ - -#define DMA_CCR1_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CCR1_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ -#define DMA_CCR1_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ - -#define DMA_CCR1_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ -#define DMA_CCR1_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ -#define DMA_CCR1_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ - -#define DMA_CCR1_PL ((uint16_t)0x3000) /*!< PL[1:0] bits(Channel Priority level) */ -#define DMA_CCR1_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ -#define DMA_CCR1_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ - -#define DMA_CCR1_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ - -/******************* Bit definition for DMA_CCR2 register *******************/ -#define DMA_CCR2_EN ((uint16_t)0x0001) /*!< Channel enable */ -#define DMA_CCR2_TCIE ((uint16_t)0x0002) /*!< ransfer complete interrupt enable */ -#define DMA_CCR2_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ -#define DMA_CCR2_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ -#define DMA_CCR2_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ -#define DMA_CCR2_CIRC ((uint16_t)0x0020) /*!< Circular mode */ -#define DMA_CCR2_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ -#define DMA_CCR2_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ - -#define DMA_CCR2_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CCR2_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ -#define DMA_CCR2_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ - -#define DMA_CCR2_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ -#define DMA_CCR2_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ -#define DMA_CCR2_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ - -#define DMA_CCR2_PL ((uint16_t)0x3000) /*!< PL[1:0] bits (Channel Priority level) */ -#define DMA_CCR2_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ -#define DMA_CCR2_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ - -#define DMA_CCR2_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ - -/******************* Bit definition for DMA_CCR3 register *******************/ -#define DMA_CCR3_EN ((uint16_t)0x0001) /*!< Channel enable */ -#define DMA_CCR3_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ -#define DMA_CCR3_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ -#define DMA_CCR3_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ -#define DMA_CCR3_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ -#define DMA_CCR3_CIRC ((uint16_t)0x0020) /*!< Circular mode */ -#define DMA_CCR3_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ -#define DMA_CCR3_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ - -#define DMA_CCR3_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CCR3_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ -#define DMA_CCR3_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ - -#define DMA_CCR3_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ -#define DMA_CCR3_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ -#define DMA_CCR3_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ - -#define DMA_CCR3_PL ((uint16_t)0x3000) /*!< PL[1:0] bits (Channel Priority level) */ -#define DMA_CCR3_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ -#define DMA_CCR3_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ - -#define DMA_CCR3_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ - -/*!<****************** Bit definition for DMA_CCR4 register *******************/ -#define DMA_CCR4_EN ((uint16_t)0x0001) /*!. - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM8/hal_lld.c - * @brief STM8 HAL subsystem low level driver source. - * - * @addtogroup STM8_HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - */ -ROMCONST PALConfig pal_default_config = -{ - { - {VAL_GPIOAODR, 0, VAL_GPIOADDR, VAL_GPIOACR1, VAL_GPIOACR2}, - {VAL_GPIOBODR, 0, VAL_GPIOBDDR, VAL_GPIOBCR1, VAL_GPIOBCR2}, - {VAL_GPIOCODR, 0, VAL_GPIOCDDR, VAL_GPIOCCR1, VAL_GPIOCCR2}, - {VAL_GPIODODR, 0, VAL_GPIODDDR, VAL_GPIODCR1, VAL_GPIODCR2}, - {VAL_GPIOEODR, 0, VAL_GPIOEDDR, VAL_GPIOECR1, VAL_GPIOECR2}, - {VAL_GPIOFODR, 0, VAL_GPIOFDDR, VAL_GPIOFCR1, VAL_GPIOFCR2}, - {VAL_GPIOGODR, 0, VAL_GPIOGDDR, VAL_GPIOGCR1, VAL_GPIOGCR2}, - {VAL_GPIOHODR, 0, VAL_GPIOHDDR, VAL_GPIOHCR1, VAL_GPIOHCR2}, - {VAL_GPIOIODR, 0, VAL_GPIOIDDR, VAL_GPIOICR1, VAL_GPIOICR2} - } -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - -#if STM8_CLOCK_SOURCE != CLK_SOURCE_DEFAULT -#if STM8_CLOCK_SOURCE == CLK_SOURCE_HSI - CLK_ICKR = 1; /* HSIEN */ - while ((CLK_ICKR & 2) == 0) /* HSIRDY */ - ; -#elif STM8_CLOCK_SOURCE == CLK_SOURCE_LSI - CLK_ICKR = 8; /* LSIEN */ - while ((CLK_ICKR & 16) == 0) /* LSIRDY */ - ; -#else /* STM8_CLOCK_SOURCE == CLK_SOURCE_HSE */ - CLK_ECKR = 1; /* HSEEN */ - while ((CLK_ECKR & 2) == 0) /* HSERDY */ - ; -#endif -#if STM8_CLOCK_SOURCE != CLK_SOURCE_HSI - /* Switching clock (manual switch mode).*/ - CLK_SWCR = 0; - CLK_SWR = STM8_CLOCK_SOURCE; - while ((CLK_SWCR & 8) == 0) /* SWIF */ - ; - CLK_SWCR = 2; /* SWEN */ -#endif - /* Setting up clock dividers.*/ - CLK_CKDIVR = (STM8_HSI_DIVIDER << 3) | (STM8_CPU_DIVIDER << 0); - - /* Clocks initially all disabled.*/ - CLK_PCKENR1 = 0; - CLK_PCKENR2 = 0; - - /* Other clock related initializations.*/ - CLK_CSSR = 0; - CLK_CCOR = 0; - CLK_CANCCR = 0; -#endif /* STM8_CLOCK_SOURCE != CLK_SOURCE_DEFAULT */ -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM8/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/STM8/hal_lld.h deleted file mode 100644 index 7fb05b2..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM8/hal_lld.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM8/hal_lld.h - * @brief STM8 HAL subsystem low level driver source. - * - * @addtogroup STM8_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -#include "stm8.h" - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "STM8x" - -#define LSICLK 128000 /**< Low speed internal clock. */ -#define HSICLK 16000000 /**< High speed internal clock. */ - -#define CLK_SOURCE_DEFAULT 0 /**< No clock initialization. */ -#define CLK_SOURCE_HSI 0xE1 /**< HSI clock selector. */ -#define CLK_SOURCE_LSI 0xD2 /**< LSI clock selector. */ -#define CLK_SOURCE_HSE 0xB4 /**< HSE clock selector. */ - -#define CLK_HSI_DIV1 0 /**< HSI clock divided by 1. */ -#define CLK_HSI_DIV2 1 /**< HSI clock divided by 2. */ -#define CLK_HSI_DIV4 2 /**< HSI clock divided by 4. */ -#define CLK_HSI_DIV8 3 /**< HSI clock divided by 8. */ - -#define CLK_CPU_DIV1 0 /**< CPU clock divided by 1. */ -#define CLK_CPU_DIV2 1 /**< CPU clock divided by 2. */ -#define CLK_CPU_DIV4 2 /**< CPU clock divided by 4. */ -#define CLK_CPU_DIV8 3 /**< CPU clock divided by 8. */ -#define CLK_CPU_DIV16 4 /**< CPU clock divided by 16. */ -#define CLK_CPU_DIV32 5 /**< CPU clock divided by 32. */ -#define CLK_CPU_DIV64 6 /**< CPU clock divided by 64. */ -#define CLK_CPU_DIV128 7 /**< CPU clock divided by 128. */ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Clock source setting. - */ -#if !defined(STM8_CLOCK_SOURCE) || defined(__DOXYGEN__) -#define STM8_CLOCK_SOURCE CLK_SOURCE_DEFAULT -#endif - -/** - * @brief HSI clock divider. - */ -#if !defined(STM8_HSI_DIVIDER) || defined(__DOXYGEN__) -#define STM8_HSI_DIVIDER CLK_HSI_DIV8 -#endif - -/** - * @brief CPU clock divider. - */ -#if !defined(STM8_CPU_DIVIDER) || defined(__DOXYGEN__) -#define STM8_CPU_DIVIDER CLK_CPU_DIV1 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if (STM8_HSI_DIVIDER != CLK_HSI_DIV1) && \ - (STM8_HSI_DIVIDER != CLK_HSI_DIV2) && \ - (STM8_HSI_DIVIDER != CLK_HSI_DIV4) && \ - (STM8_HSI_DIVIDER != CLK_HSI_DIV8) -#error "specified invalid HSI divider" -#endif - -#if (STM8_CPU_DIVIDER != CLK_CPU_DIV1) && \ - (STM8_CPU_DIVIDER != CLK_CPU_DIV2) && \ - (STM8_CPU_DIVIDER != CLK_CPU_DIV4) && \ - (STM8_CPU_DIVIDER != CLK_CPU_DIV8) && \ - (STM8_CPU_DIVIDER != CLK_CPU_DIV16) && \ - (STM8_CPU_DIVIDER != CLK_CPU_DIV32) && \ - (STM8_CPU_DIVIDER != CLK_CPU_DIV64) && \ - (STM8_CPU_DIVIDER != CLK_CPU_DIV128) -#error "specified invalid CPU divider" -#endif - -#if STM8_CLOCK_SOURCE == CLK_SOURCE_DEFAULT -#define SYSCLK (HSICLK / 8) -#elif STM8_CLOCK_SOURCE == CLK_SOURCE_HSI -#define SYSCLK (HSICLK / (1 << STM8_HSI_DIVIDER)) -#elif STM8_CLOCK_SOURCE == CLK_SOURCE_LSI -#define SYSCLK LSICLK -#elif STM8_CLOCK_SOURCE == CLK_SOURCE_HSE -#define SYSCLK HSECLK -#else -#error "specified invalid clock source" -#endif - -#define CPUCLK (SYSCLK / (1 << STM8_CPU_DIVIDER)) - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM8/pal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/STM8/pal_lld.c deleted file mode 100644 index 7d24626..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM8/pal_lld.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM8/pal_lld.c - * @brief STM8 GPIO low level driver code. - * - * @addtogroup STM8_PAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Pads mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * @note This function is not meant to be invoked directly by the - * application code. - * @note @p PAL_MODE_UNCONNECTED is implemented as push pull output at 2MHz. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - */ -void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode) { - - switch (mode & PAL_MODE_MASK) { - case PAL_MODE_RESET: - case PAL_MODE_INPUT_PULLUP: - port->DDR &= ~mask; - port->CR1 |= mask; - port->CR2 &= ~mask; - break; - case PAL_MODE_INPUT: - case PAL_MODE_INPUT_ANALOG: - port->DDR &= ~mask; - port->CR1 &= ~mask; - port->CR2 &= ~mask; - break; - case PAL_MODE_UNCONNECTED: - case PAL_MODE_OUTPUT_PUSHPULL_SLOW: - port->DDR |= mask; - port->CR1 |= mask; - port->CR2 &= ~mask; - break; - case PAL_MODE_OUTPUT_PUSHPULL: - port->DDR |= mask; - port->CR1 |= mask; - port->CR2 |= mask; - break; - case PAL_MODE_OUTPUT_OPENDRAIN_SLOW: - port->DDR |= mask; - port->CR1 &= ~mask; - port->CR2 &= ~mask; - break; - case PAL_MODE_OUTPUT_OPENDRAIN: - port->DDR |= mask; - port->CR1 &= ~mask; - port->CR2 |= mask; - break; - } -} - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM8/pal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/STM8/pal_lld.h deleted file mode 100644 index 8845616..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM8/pal_lld.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM8/pal_lld.h - * @brief STM8 GPIO low level driver header. - * - * @addtogroup STM8_PAL - * @{ - */ - -#ifndef _PAL_LLD_H_ -#define _PAL_LLD_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Unsupported modes and specific modes */ -/*===========================================================================*/ - -#undef PAL_MODE_INPUT_PULLDOWN - -/** - * @brief STM8 specific alternate push-pull slow output mode. - */ -#define PAL_MODE_OUTPUT_PUSHPULL_SLOW 16 - -/** - * @brief STM8 specific alternate open-drain slow output mode. - */ -#define PAL_MODE_OUTPUT_OPENDRAIN_SLOW 17 - -/*===========================================================================*/ -/* I/O Ports Types and constants. */ -/*===========================================================================*/ - -/** - * @brief GPIO port representation. - */ -typedef struct { - volatile uint8_t ODR; - volatile uint8_t IDR; - volatile uint8_t DDR; - volatile uint8_t CR1; - volatile uint8_t CR2; -} gpio_t; - -/** - * @brief Generic I/O ports static initializer. - * @details An instance of this structure must be passed to @p palInit() at - * system startup time in order to initialized the digital I/O - * subsystem. This represents only the initial setup, specific pads - * or whole ports can be reprogrammed at later time. - */ -typedef struct { - gpio_t P[9]; -} PALConfig; - -/** - * @brief Width, in bits, of an I/O port. - */ -#define PAL_IOPORTS_WIDTH 8 - -/** - * @brief Whole port mask. - * @brief This macro specifies all the valid bits into a port. - */ -#define PAL_WHOLE_PORT ((ioportmask_t)0xFF) - -/** - * @brief Digital I/O port sized unsigned type. - */ -typedef uint8_t ioportmask_t; - -/** - * @brief Port Identifier. - */ -typedef gpio_t *ioportid_t; - -/*===========================================================================*/ -/* I/O Ports Identifiers. */ -/*===========================================================================*/ - -/** - * @brief GPIO ports as a whole. - */ -#define IOPORTS ((PALConfig *)0x5000) - -/** - * @brief GPIO port A identifier. - */ -#define IOPORT1 ((gpio_t *)0x5000) -#define GPIOA IOPORT1 - -/** - * @brief GPIO port B identifier. - */ -#define IOPORT2 ((gpio_t *)0x5005) -#define GPIOB IOPORT2 - -/** - * @brief GPIO port C identifier. - */ -#define IOPORT3 ((gpio_t *)0x500A) -#define GPIOC IOPORT3 - -/** - * @brief GPIO port D identifier. - */ -#define IOPORT4 ((gpio_t *)0x500F) -#define GPIOD IOPORT4 - -/** - * @brief GPIO port E identifier. - */ -#define IOPORT5 ((gpio_t *)0x5014) -#define GPIOE IOPORT5 - -/** - * @brief GPIO port F identifier. - */ -#define IOPORT6 ((gpio_t *)0x5019) -#define GPIOF IOPORT6 - -/** - * @brief GPIO port G identifier. - */ -#define IOPORT7 ((gpio_t *)0x501E) -#define GPIOG IOPORT7 - -/** - * @brief GPIO port H identifier. - */ -#define IOPORT8 ((gpio_t *)0x5023) -#define GPIOH IOPORT8 - -/** - * @brief GPIO port I identifier. - */ -#define IOPORT9 ((gpio_t *)0x5028) -#define GPIOI IOPORT9 - -/*===========================================================================*/ -/* Implementation, some of the following macros could be implemented as */ -/* functions, if so please put them in pal_lld.c. */ -/*===========================================================================*/ - -/** - * @brief Low level PAL subsystem initialization. - * - * @param[in] config architecture-dependent ports configuration - */ -#define pal_lld_init(config) *IOPORTS = *(config) - -/** - * @brief Reads the physical I/O port states. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The port bits. - */ -#define pal_lld_readport(port) ((port)->IDR) - -/** - * @brief Reads the output latch. - * @details The purpose of this function is to read back the latched output - * value. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The latched logical states. - */ -#define pal_lld_readlatch(port) ((port)->ODR) - -/** - * @brief Writes a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @param[in] bits bits to be written on the specified port - */ -#define pal_lld_writeport(port, bits) ((port)->ODR = (bits)) - - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Programming an unknown or unsupported mode is silently ignored. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] mode group mode - */ -#define pal_lld_setgroupmode(port, mask, mode) \ - _pal_lld_setgroupmode(port, mask, mode) - -extern ROMCONST PALConfig pal_default_config; - -#ifdef __cplusplus -extern "C" { -#endif - void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PAL */ - -#endif /* _PAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM8/platform.dox b/ChibiOS_2.0.8/os/hal/platforms/STM8/platform.dox deleted file mode 100644 index 7e53cdc..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM8/platform.dox +++ /dev/null @@ -1,75 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup STM8_DRIVERS STM8 Drivers - * @brief Device drivers included in the STM8 support. - * - * @ingroup STM8 - */ - -/** - * @defgroup STM8_HAL STM8 HAL Support - * @brief HAL support. - * - * @ingroup STM8_DRIVERS - */ - -/** - * @defgroup STM8_PAL STM8 I/O Ports Support - * @brief I/O Ports peripherals support. - * @details This module supports the STM8 GPIO controller. The controller - * supports the following features (see @ref PAL): - * - 8 bits wide ports. - * - Atomic set/reset/toggle functions because special STM8 instruction set. - * - Output latched regardless of the pad setting. - * - Direct read of input pads regardless of the pad setting. - * . - *

      Supported Setup Modes

      - * - @p PAL_MODE_RESET. - * - @p PAL_MODE_UNCONNECTED. - * - @p PAL_MODE_INPUT. - * - @p PAL_MODE_INPUT_PULLUP. - * - @p PAL_MODE_OUTPUT_PUSHPULL. - * - @p PAL_MODE_OUTPUT_OPENDRAIN. - * . - * Any attempt to setup an invalid mode is ignored. - * - *

      Suboptimal Behavior

      - * Some STM8 I/O ports features are less than optimal: - * - Bus/group writing is not atomic. - * - Pad/group mode setup is not atomic. - * . - * @ingroup STM8_DRIVERS - */ - -/** - * @defgroup STM8_SERIAL STM8 UART Support - * @brief USART support. - * @details The serial driver supports the STM8 USARTs in asynchronous mode. - * - * @ingroup STM8_DRIVERS - */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM8/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/STM8/serial_lld.c deleted file mode 100644 index 1f93723..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM8/serial_lld.c +++ /dev/null @@ -1,336 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM8/serial_lld.c - * @brief STM8 low level serial driver code. - * - * @addtogroup STM8_SERIAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/* Because someone somewhere couldn't use the same name for the same thing.*/ -#if STM8_PLATFORM == PLATFORM_STM8AF51AA -#define UART1_BRR1 USART_BRR1 -#define UART1_BRR2 USART_BRR2 -#define UART1_SR USART_SR -#define UART1_DR USART_DR -#define UART1_CR1 USART_CR1 -#define UART1_CR2 USART_CR2 -#define UART1_CR3 USART_CR3 -#define UART1_CR4 USART_CR4 -#define UART1_CR5 USART_CR5 - -#define UART3_BRR1 LINUART_BRR1 -#define UART3_BRR2 LINUART_BRR2 -#define UART3_SR LINUART_SR -#define UART3_DR LINUART_DR -#define UART3_CR1 LINUART_CR1 -#define UART3_CR2 LINUART_CR2 -#define UART3_CR3 LINUART_CR3 -#define UART3_CR4 LINUART_CR4 -#define UART3_CR5 LINUART_CR5 -#define UART3_CR6 LINUART_CR6 -#endif - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** - * @brief UART1 serial driver identifier. - */ -#if USE_STM8_UART1 || defined(__DOXYGEN__) -SerialDriver SD1; -#endif - -/** - * @brief UART3 serial driver identifier. - */ -#if USE_STM8_UART3 || defined(__DOXYGEN__) -SerialDriver SD3; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** - * @brief Driver default configuration. - */ -static ROMCONST SerialConfig default_config = { - BBR(SERIAL_DEFAULT_BITRATE), - SD_MODE_PARITY_NONE | SD_MODE_STOP_1 -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -static void set_error(SerialDriver *sdp, uint8_t sr) { - sdflags_t sts = 0; - - if (sr & 0x08) /* OR bit. */ - sts |= SD_OVERRUN_ERROR; - if (sr & 0x04) /* NF bit. */ - sts |= SD_NOISE_ERROR; - if (sr & 0x02) /* FE bit. */ - sts |= SD_FRAMING_ERROR; - if (sr & 0x01) /* PE bit. */ - sts |= SD_PARITY_ERROR; - chSysLockFromIsr(); - sdAddFlagsI(sdp, sts); - chSysUnlockFromIsr(); -} - -#if USE_STM8_UART1 || defined(__DOXYGEN__) -static void notify1(void) { - - UART1_CR2 |= 0x80; /* TIEN bit. */ -} - -/** - * @brief UART1 initialization. - * - * @param[in] config architecture-dependent serial driver configuration - */ -static void uart1_init(const SerialConfig *config) { - - UART1_BRR2 = ((uint8_t)(config->sc_brr >> 8) & (uint8_t)0xF0) | - ((uint8_t)config->sc_brr & (uint8_t)0x0F); - UART1_BRR1 = (uint8_t)(config->sc_brr >> 4); - UART1_CR1 = config->sc_mode & - SD_MODE_PARITY; /* PIEN included. */ - UART1_CR2 = 0x2C; /* RIEN | TEN | REN. */ - UART1_CR3 = config->sc_mode & SD_MODE_STOP; - UART1_CR4 = 0; - UART1_CR5 = 0; - UART1_PSCR = 1; - (void)UART1_SR; - (void)UART1_DR; -} - -/** - * @brief UART1 de-initialization. - */ -static void uart1_deinit(void) { - - UART1_CR1 = 0x20; /* UARTD (low power). */ - UART1_CR2 = 0; - UART1_CR3 = 0; - UART1_CR4 = 0; - UART1_CR5 = 0; - UART1_PSCR = 0; -} -#endif /* USE_STM8_UART1 */ - -#if USE_STM8_UART3 || defined(__DOXYGEN__) -static void notify3(void) { - - UART3_CR2 |= 0x80; /* TIEN bit. */ -} - -/** - * @brief UART3 initialization. - * - * @param[in] config architecture-dependent serial driver configuration - */ -static void uart3_init(const SerialConfig *config) { - - UART3_BRR2 = ((uint8_t)(config->sc_brr >> 8) & (uint8_t)0xF0) | - ((uint8_t)config->sc_brr & (uint8_t)0x0F); - UART3_BRR1 = (uint8_t)(config->sc_brr >> 4); - UART3_CR1 = config->sc_mode & - SD_MODE_PARITY; /* PIEN included. */ - UART3_CR2 = 0x2C; /* RIEN | TEN | REN. */ - UART3_CR3 = config->sc_mode & SD_MODE_STOP; - UART3_CR4 = 0; - UART3_CR6 = 0; - (void)UART3_SR; - (void)UART3_DR; -} - -/** - * @brief UART3 de-initialization. - */ -static void uart3_deinit(void) { - - UART3_CR1 = 0x20; /* UARTD (low power). */ - UART3_CR2 = 0; - UART3_CR3 = 0; - UART3_CR4 = 0; - UART3_CR6 = 0; -} -#endif /* USE_STM8_UART3 */ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -#if USE_STM8_UART1 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(17) { - msg_t b; - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - b = sdRequestDataI(&SD1); - chSysUnlockFromIsr(); - if (b < Q_OK) - UART1_CR2 &= ~0x80; /* TIEN. */ - else - UART1_DR = b; - - CH_IRQ_EPILOGUE(); -} - -CH_IRQ_HANDLER(18) { - uint8_t sr = UART1_SR; - - CH_IRQ_PROLOGUE(); - - if ((sr = UART1_SR) & 0x0F) /* OR | BF | FE | PE. */ - set_error(&SD1, sr); - chSysLockFromIsr(); - sdIncomingDataI(&SD1, UART1_DR); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} -#endif /* USE_STM8_UART1 */ - -#if USE_STM8_UART3 || defined(__DOXYGEN__) -CH_IRQ_HANDLER(20) { - msg_t b; - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - b = sdRequestDataI(&SD3); - chSysUnlockFromIsr(); - if (b < Q_OK) - UART3_CR2 &= ~0x80; /* TIEN. */ - else - UART3_DR = b; - - CH_IRQ_EPILOGUE(); -} - -CH_IRQ_HANDLER(21) { - uint8_t sr = UART3_SR; - - CH_IRQ_PROLOGUE(); - - if ((sr = UART3_SR) & 0x0F) /* OR | BF | FE | PE. */ - set_error(&SD3, sr); - chSysLockFromIsr(); - sdIncomingDataI(&SD3, UART3_DR); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} -#endif /* USE_STM8_UART3 */ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_STM8_UART1 - sdObjectInit(&SD1, NULL, notify1); - CLK_PCKENR1 |= 4; /* PCKEN12, clock source. */ - UART1_CR1 = 0x20; /* UARTD (low power). */ -#endif - -#if USE_STM8_UART3 - sdObjectInit(&SD3, NULL, notify3); - CLK_PCKENR1 |= 8; /* PCKEN13, clock source. */ - UART3_CR1 = 0x20; /* UARTD (low power). */ -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - -#if USE_STM8_UART1 - if (&SD1 == sdp) { - uart1_init(config); - return; - } -#endif -#if USE_STM8_UART3 - if (&SD3 == sdp) { - uart3_init(config); - return; - } -#endif -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the USART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - -#if USE_STM8_UART1 - if (&SD1 == sdp) { - uart1_deinit(); - return; - } -#endif -#if USE_STM8_UART3 - if (&SD3 == sdp) { - uart3_deinit(); - return; - } -#endif -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM8/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/STM8/serial_lld.h deleted file mode 100644 index b7baa2c..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM8/serial_lld.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM8/serial_lld.h - * @brief STM8 low level serial driver header. - * - * @addtogroup STM8_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -#define SD_MODE_PARITY 0x07 /**< @brief Parity field mask. */ -#define SD_MODE_PARITY_NONE 0x00 /**< @brief No parity. */ -#define SD_MODE_PARITY_EVEN 0x05 /**< @brief Even parity. */ -#define SD_MODE_PARITY_ODD 0x07 /**< @brief Odd parity. */ - -#define SD_MODE_STOP 0x30 /**< @brief Stop bits mask. */ -#define SD_MODE_STOP_1 0x00 /**< @brief One stop bit. */ -#define SD_MODE_STOP_2 0x20 /**< @brief Two stop bits. */ -#define SD_MODE_STOP_1P5 0x30 /**< @brief 1.5 stop bits. */ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief UART1 driver enable switch. - * @details If set to @p TRUE the support for UART1 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM8_UART1) || defined(__DOXYGEN__) -#define USE_STM8_UART1 TRUE -#endif - -/** - * @brief UART3 driver enable switch. - * @details If set to @p TRUE the support for UART3 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_STM8_UART3) || defined(__DOXYGEN__) -#define USE_STM8_UART3 TRUE -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint8_t sdflags_t; - -/** - * @brief Generic Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - * @note This structure content is architecture dependent, each driver - * implementation defines its own version and the custom static - * initializers. - */ -typedef struct { - /** - * @brief Bit rate register. - */ - uint16_t sc_brr; - /** - * @brief Mode flags. - */ - uint8_t sc_mode; -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Macro for baud rate computation. - * @note Make sure the final baud rate is within tolerance. - */ -#define BBR(b) (SYSCLK / (b)) - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_STM8_UART1 && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif -#if USE_STM8_UART3 && !defined(__DOXYGEN__) -extern SerialDriver SD3; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/STM8/stm8.h b/ChibiOS_2.0.8/os/hal/platforms/STM8/stm8.h deleted file mode 100644 index 0eebbff..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/STM8/stm8.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _STM8_H_ -#define _STM8_H_ - -/* - * Supported platforms. - */ -#define PLATFORM_STM8S208RB 1 -#define PLATFORM_STM8AF51AA 2 - -#ifndef STM8_PLATFORM -#error "STM8 platform not defined" -#endif - -#if STM8_PLATFORM == PLATFORM_STM8S208RB -#include "STM8/STM8S208RB.h" -#elif STM8_PLATFORM == PLATFORM_STM8AF51AA -#include "STM8/STM8AF51AA.h" -#else -#error "unsupported or invalid STM8 platform" -#endif - -#endif /* _STM8_H_ */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Win32/console.c b/ChibiOS_2.0.8/os/hal/platforms/Win32/console.c deleted file mode 100644 index 2ae2da4..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Win32/console.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file console.c - * @brief Simulator console driver code. - * @{ - */ - -#include - -#include "ch.h" -#include "console.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** - * @brief Console driver 1. - */ -BaseChannel CD1; - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - - -static size_t writes(void *ip, const uint8_t *bp, size_t n) { - size_t ret; - - (void)ip; - ret = fwrite(bp, 1, n, stdout); - fflush(stdout); - return ret; -} - -static size_t reads(void *ip, uint8_t *bp, size_t n) { - - (void)ip; - return fread(bp, 1, n, stdin); -} - -static bool_t putwouldblock(void *ip) { - - (void)ip; - return FALSE; -} - -static bool_t getwouldblock(void *ip) { - - (void)ip; - return TRUE; -} - -static msg_t putt(void *ip, uint8_t b, systime_t time) { - - (void)ip; - (void)time; - fputc(b, stdout); - fflush(stdout); - return RDY_OK; -} - -static msg_t gett(void *ip, systime_t time) { - - (void)ip; - (void)time; - return fgetc(stdin); -} - -static size_t writet(void *ip, const uint8_t *bp, size_t n, systime_t time) { - size_t ret; - - (void)ip; - (void)time; - ret = fwrite(bp, 1, n, stdout); - fflush(stdout); - return ret; -} - -static size_t readt(void *ip, uint8_t *bp, size_t n, systime_t time) { - - (void)ip; - (void)time; - return fread(bp, 1, n, stdin); -} - -static const struct BaseChannelVMT vmt = { - writes, reads, putwouldblock, getwouldblock, putt, gett, writet, readt -}; - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -void conInit(void) { - - CD1.vmt = &vmt; -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Win32/console.h b/ChibiOS_2.0.8/os/hal/platforms/Win32/console.h deleted file mode 100644 index 62e4a51..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Win32/console.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file console.h - * @brief Simulator console driver header. - * @{ - */ - -#ifndef _CONSOLE_H_ -#define _CONSOLE_H_ - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -extern BaseChannel CD1; - -#ifdef __cplusplus -extern "C" { -#endif - void conInit(void); -#ifdef __cplusplus -} -#endif - -#endif /* _CONSOLE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Win32/hal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/Win32/hal_lld.c deleted file mode 100644 index b4a42ba..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Win32/hal_lld.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Win32/hal_lld.c - * @brief Win32 HAL subsystem low level driver code. - * @addtogroup WIN32_HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -static LARGE_INTEGER nextcnt; -static LARGE_INTEGER slice; - -/** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - */ -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) -const PALConfig pal_default_config = { - {0, 0, 0}, - {0, 0, 0} -}; -#endif - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - WSADATA wsaData; - - /* Initialization.*/ - if (WSAStartup(2, &wsaData) != 0) { - printf("Unable to locate a winsock DLL\n"); - exit(1); - } - - printf("ChibiOS/RT simulator (Win32)\n"); - if (!QueryPerformanceFrequency(&slice)) { - printf("QueryPerformanceFrequency() error"); - exit(1); - } - slice.QuadPart /= CH_FREQUENCY; - QueryPerformanceCounter(&nextcnt); - nextcnt.QuadPart += slice.QuadPart; - - fflush(stdout); -} - -/** - * @brief Interrupt simulation. - */ -void ChkIntSources(void) { - LARGE_INTEGER n; - -#if CH_HAL_USE_SERIAL - if (sd_lld_interrupt_pending()) { - if (chSchIsRescRequiredExI()) - chSchDoRescheduleI(); - return; - } -#endif - - // Interrupt Timer simulation (10ms interval). - QueryPerformanceCounter(&n); - if (n.QuadPart > nextcnt.QuadPart) { - nextcnt.QuadPart += slice.QuadPart; - chSysTimerHandlerI(); - if (chSchIsRescRequiredExI()) - chSchDoRescheduleI(); - } -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Win32/hal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/Win32/hal_lld.h deleted file mode 100644 index 0fe2ae1..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Win32/hal_lld.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Win32/hal_lld.h - * @brief WIN32 simulator HAL subsystem low level driver header. - * - * @addtogroup WIN32_HAL - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -#include -#include - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "Win32" - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); - void ChkIntSources(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Win32/pal_lld.c b/ChibiOS_2.0.8/os/hal/platforms/Win32/pal_lld.c deleted file mode 100644 index 41c904a..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Win32/pal_lld.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Win32/pal_lld.c - * @brief Win32 low level simulated PAL driver code. - * - * @addtogroup WIN32_PAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** - * @brief VIO1 simulated port. - */ -sim_vio_port_t vio_port_1; - -/** - * @brief VIO2 simulated port. - */ -sim_vio_port_t vio_port_2; - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Pads mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * - * @param[in] port the port identifier - * @param[in] mask the group mask - * @param[in] mode the mode - * - * @note This function is not meant to be invoked directly by the application - * code. - * @note @p PAL_MODE_UNCONNECTED is implemented as push pull output with high - * state. - * @note This function does not alter the @p PINSELx registers. Alternate - * functions setup must be handled by device-specific code. - */ -void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode) { - - switch (mode) { - case PAL_MODE_RESET: - case PAL_MODE_INPUT: - port->dir &= ~mask; - break; - case PAL_MODE_UNCONNECTED: - port->latch |= mask; - case PAL_MODE_OUTPUT_PUSHPULL: - port->dir |= mask; - break; - } -} - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Win32/pal_lld.h b/ChibiOS_2.0.8/os/hal/platforms/Win32/pal_lld.h deleted file mode 100644 index d062c5a..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Win32/pal_lld.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Win32/pal_lld.h - * @brief Win32 low level simulated PAL driver header. - * - * @addtogroup WIN32_PAL - * @{ - */ - -#ifndef _PAL_LLD_H_ -#define _PAL_LLD_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Unsupported modes and specific modes */ -/*===========================================================================*/ - -#undef PAL_MODE_INPUT_PULLUP -#undef PAL_MODE_INPUT_PULLDOWN -#undef PAL_MODE_OUTPUT_OPENDRAIN -#undef PAL_MODE_INPUT_ANALOG - -/*===========================================================================*/ -/* I/O Ports Types and constants. */ -/*===========================================================================*/ - -/** - * @brief VIO port structure. - */ -typedef struct { - /** - * @brief VIO_LATCH register. - * @details This register represents the output latch of the VIO port. - */ - uint32_t latch; - /** - * @brief VIO_PIN register. - * @details This register represents the logical level at the VIO port - * pin level. - */ - uint32_t pin; - /** - * @brief VIO_DIR register. - * @details Direction of the VIO port bits, 0=input, 1=output. - */ - uint32_t dir; -} sim_vio_port_t; - -/** - * @brief Virtual I/O ports static initializer. - * @details An instance of this structure must be passed to @p palInit() at - * system startup time in order to initialized the digital I/O - * subsystem. This represents only the initial setup, specific pads - * or whole ports can be reprogrammed at later time. - */ -typedef struct { - /** - * @brief Virtual port 1 setup data. - */ - sim_vio_port_t VP1Data; - /** - * @brief Virtual port 2 setup data. - */ - sim_vio_port_t VP2Data; -} PALConfig; - -/** - * @brief Width, in bits, of an I/O port. - */ -#define PAL_IOPORTS_WIDTH 32 - -/** - * @brief Whole port mask. - * @brief This macro specifies all the valid bits into a port. - */ -#define PAL_WHOLE_PORT ((ioportmask_t)0xFFFFFFFF) - -/** - * @brief Digital I/O port sized unsigned type. - */ -typedef uint32_t ioportmask_t; - -/** - * @brief Port Identifier. - */ -typedef sim_vio_port_t *ioportid_t; - -/*===========================================================================*/ -/* I/O Ports Identifiers. */ -/*===========================================================================*/ - -/** - * @brief VIO port 1 identifier. - */ -#define IOPORT1 (&vio_port_1) - -/** - * @brief VIO port 2 identifier. - */ -#define IOPORT2 (&vio_port_2) - -/*===========================================================================*/ -/* Implementation, some of the following macros could be implemented as */ -/* functions, if so please put them in pal_lld.c. */ -/*===========================================================================*/ - -/** - * @brief Low level PAL subsystem initialization. - * - * @param[in] config architecture-dependent ports configuration - */ -#define pal_lld_init(config) { \ - vio_port_1 = (config)->VP1Data; \ - vio_port_2 = (config)->VP2Data; \ -} - -/** - * @brief Reads the physical I/O port states. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The port bits. - */ -#define pal_lld_readport(port) ((port)->pin) - -/** - * @brief Reads the output latch. - * @details The purpose of this function is to read back the latched output - * value. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The latched logical states. - */ -#define pal_lld_readlatch(port) ((port)->latch) - -/** - * @brief Writes a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @param[in] bits bits to be written on the specified port - */ -#define pal_lld_writeport(port, bits) ((port)->latch = (bits)) - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Programming an unknown or unsupported mode is silently ignored. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] mode group mode - */ -#define pal_lld_setgroupmode(port, mask, mode) \ - _pal_lld_setgroupmode(port, mask, mode) - -#if !defined(__DOXYGEN__) -extern sim_vio_port_t vio_port_1; -extern sim_vio_port_t vio_port_2; -extern const PALConfig pal_default_config; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void _pal_lld_setgroupmode(ioportid_t port, - ioportmask_t mask, - uint_fast8_t mode); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PAL */ - -#endif /* _PAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Win32/platform.mk b/ChibiOS_2.0.8/os/hal/platforms/Win32/platform.mk deleted file mode 100644 index afc9284..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Win32/platform.mk +++ /dev/null @@ -1,7 +0,0 @@ -# List of all the Win32 platform files. -PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/Win32/hal_lld.c \ - ${CHIBIOS}/os/hal/platforms/Win32/pal_lld.c \ - ${CHIBIOS}/os/hal/platforms/Win32/serial_lld.c - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/platforms/Win32 diff --git a/ChibiOS_2.0.8/os/hal/platforms/Win32/serial_lld.c b/ChibiOS_2.0.8/os/hal/platforms/Win32/serial_lld.c deleted file mode 100644 index ad391fd..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Win32/serial_lld.c +++ /dev/null @@ -1,270 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Win32/serial_lld.c - * @brief Win32 low level simulated serial driver code. - * @addtogroup WIN32_SERIAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/** @brief Serial driver 1 identifier.*/ -#if USE_WIN32_SERIAL1 || defined(__DOXYGEN__) -SerialDriver SD1; -#endif -/** @brief Serial driver 2 identifier.*/ -#if USE_WIN32_SERIAL2 || defined(__DOXYGEN__) -SerialDriver SD2; -#endif - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** @brief Driver default configuration.*/ -static const SerialConfig default_config = { -}; - -static u_long nb = 1; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -static void init(SerialDriver *sdp, uint16_t port) { - struct sockaddr_in sad; - struct protoent *prtp; - - if ((prtp = getprotobyname("tcp")) == NULL) { - printf("%s: Error mapping protocol name to protocol number\n", sdp->com_name); - goto abort; - } - - sdp->com_listen = socket(PF_INET, SOCK_STREAM, prtp->p_proto); - if (sdp->com_listen == INVALID_SOCKET) { - printf("%s: Error creating simulator socket\n", sdp->com_name); - goto abort; - } - - if (ioctlsocket(sdp->com_listen, FIONBIO, &nb) != 0) { - printf("%s: Unable to setup non blocking mode on socket\n", sdp->com_name); - goto abort; - } - - memset(&sad, 0, sizeof(sad)); - sad.sin_family = AF_INET; - sad.sin_addr.s_addr = INADDR_ANY; - sad.sin_port = htons(port); - if (bind(sdp->com_listen, (struct sockaddr *)&sad, sizeof(sad))) { - printf("%s: Error binding socket\n", sdp->com_name); - goto abort; - } - - if (listen(sdp->com_listen, 1) != 0) { - printf("%s: Error listening socket\n", sdp->com_name); - goto abort; - } - printf("Full Duplex Channel %s listening on port %d\n", sdp->com_name, port); - return; - -abort: - if (sdp->com_listen != INVALID_SOCKET) - closesocket(sdp->com_listen); - WSACleanup(); - exit(1); -} - -static bool_t connint(SerialDriver *sdp) { - - if (sdp->com_data == INVALID_SOCKET) { - struct sockaddr addr; - int addrlen = sizeof(addr); - - if ((sdp->com_data = accept(sdp->com_listen, &addr, &addrlen)) == INVALID_SOCKET) - return FALSE; - - if (ioctlsocket(sdp->com_data, FIONBIO, &nb) != 0) { - printf("%s: Unable to setup non blocking mode on data socket\n", sdp->com_name); - goto abort; - } - sdAddFlagsI(sdp, SD_CONNECTED); - return TRUE; - } - return FALSE; -abort: - if (sdp->com_listen != INVALID_SOCKET) - closesocket(sdp->com_listen); - if (sdp->com_data != INVALID_SOCKET) - closesocket(sdp->com_data); - WSACleanup(); - exit(1); -} - -static bool_t inint(SerialDriver *sdp) { - - if (sdp->com_data != INVALID_SOCKET) { - int i; - uint8_t data[32]; - - /* - * Input. - */ - int n = recv(sdp->com_data, data, sizeof(data), 0); - switch (n) { - case 0: - closesocket(sdp->com_data); - sdp->com_data = INVALID_SOCKET; - sdAddFlagsI(sdp, SD_DISCONNECTED); - return FALSE; - case SOCKET_ERROR: - if (WSAGetLastError() == WSAEWOULDBLOCK) - return FALSE; - closesocket(sdp->com_data); - sdp->com_data = INVALID_SOCKET; - return FALSE; - } - for (i = 0; i < n; i++) - sdIncomingDataI(sdp, data[i]); - return TRUE; - } - return FALSE; -} - -static bool_t outint(SerialDriver *sdp) { - - if (sdp->com_data != INVALID_SOCKET) { - int n; - uint8_t data[1]; - - /* - * Input. - */ - n = sdRequestDataI(sdp); - if (n < 0) - return FALSE; - data[0] = (uint8_t)n; - n = send(sdp->com_data, data, sizeof(data), 0); - switch (n) { - case 0: - closesocket(sdp->com_data); - sdp->com_data = INVALID_SOCKET; - sdAddFlagsI(sdp, SD_DISCONNECTED); - return FALSE; - case SOCKET_ERROR: - if (WSAGetLastError() == WSAEWOULDBLOCK) - return FALSE; - closesocket(sdp->com_data); - sdp->com_data = INVALID_SOCKET; - return FALSE; - } - return TRUE; - } - return FALSE; -} - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * Low level serial driver initialization. - */ -void sd_lld_init(void) { - -#if USE_WIN32_SERIAL1 - sdObjectInit(&SD1, NULL, NULL); - SD1.com_listen = INVALID_SOCKET; - SD1.com_data = INVALID_SOCKET; - SD1.com_name = "SD1"; -#endif - -#if USE_WIN32_SERIAL1 - sdObjectInit(&SD2, NULL, NULL); - SD2.com_listen = INVALID_SOCKET; - SD2.com_data = INVALID_SOCKET; - SD2.com_name = "SD2"; -#endif -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - -#if USE_WIN32_SERIAL1 - if (sdp == &SD1) - init(&SD1, SD1_PORT); -#endif - -#if USE_WIN32_SERIAL1 - if (sdp == &SD2) - init(&SD2, SD2_PORT); -#endif -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the USART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - - (void)sdp; -} - -bool_t sd_lld_interrupt_pending(void) { - - return connint(&SD1) || connint(&SD2) || - inint(&SD1) || inint(&SD2) || - outint(&SD1) || outint(&SD2); -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/platforms/Win32/serial_lld.h b/ChibiOS_2.0.8/os/hal/platforms/Win32/serial_lld.h deleted file mode 100644 index edd2632..0000000 --- a/ChibiOS_2.0.8/os/hal/platforms/Win32/serial_lld.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file Win32/serial_lld.h - * @brief Win32 low level simulated serial driver header. - * - * @addtogroup WIN32_SERIAL - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Serial buffers size. - * @details Configuration parameter, you can change the depth of the queue - * buffers depending on the requirements of your application. - */ -#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_BUFFERS_SIZE 1024 -#endif - -/** - * @brief SD1 driver enable switch. - * @details If set to @p TRUE the support for SD1 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_WIN32_SERIAL1) || defined(__DOXYGEN__) -#define USE_WIN32_SERIAL1 TRUE -#endif - -/** - * @brief SD2 driver enable switch. - * @details If set to @p TRUE the support for SD2 is included. - * @note The default is @p TRUE. - */ -#if !defined(USE_WIN32_SERIAL2) || defined(__DOXYGEN__) -#define USE_WIN32_SERIAL2 TRUE -#endif - -/** - * @brief Listen port for SD1. - */ -#if !defined(SD1_PORT) || defined(__DOXYGEN__) -#define SD1_PORT 29001 -#endif - -/** - * @brief Listen port for SD2. - */ -#if !defined(SD2_PORT) || defined(__DOXYGEN__) -#define SD2_PORT 29002 -#endif - -/*===========================================================================*/ -/* Unsupported event flags and custom events. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint32_t sdflags_t; - -/** - * @brief Generic Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - * @note This structure content is architecture dependent, each driver - * implementation defines its own version and the custom static - * initializers. - */ -typedef struct { -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ \ - /* Listen socket for simulated serial port.*/ \ - SOCKET com_listen; \ - /* Data socket for simulated serial port.*/ \ - SOCKET com_data; \ - /* Port readable name.*/ \ - const char *com_name; - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#if USE_WIN32_SERIAL1 && !defined(__DOXYGEN__) -extern SerialDriver SD1; -#endif -#if USE_WIN32_SERIAL2 && !defined(__DOXYGEN__) -extern SerialDriver SD2; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); - bool_t sd_lld_interrupt_pending(void); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/src/adc.c b/ChibiOS_2.0.8/os/hal/src/adc.c deleted file mode 100644 index 293173d..0000000 --- a/ChibiOS_2.0.8/os/hal/src/adc.c +++ /dev/null @@ -1,242 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file adc.c - * @brief ADC Driver code. - * - * @addtogroup ADC - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_ADC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief ADC Driver initialization. - */ -void adcInit(void) { - - adc_lld_init(); -} - -/** - * @brief Initializes the standard part of a @p ADCDriver structure. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adcObjectInit(ADCDriver *adcp) { - - adcp->ad_state = ADC_STOP; - adcp->ad_config = NULL; - adcp->ad_callback = NULL; - adcp->ad_samples = NULL; - adcp->ad_depth = 0; - adcp->ad_grpp = NULL; - chSemInit(&adcp->ad_sem, 0); -} - -/** - * @brief Configures and activates the ADC peripheral. - * - * @param[in] adcp pointer to the @p ADCDriver object - * @param[in] config pointer to the @p ADCConfig object - */ -void adcStart(ADCDriver *adcp, const ADCConfig *config) { - - chDbgCheck((adcp != NULL) && (config != NULL), "adcStart"); - - chSysLock(); - chDbgAssert((adcp->ad_state == ADC_STOP) || (adcp->ad_state == ADC_READY), - "adcStart(), #1", - "invalid state"); - adcp->ad_config = config; - adc_lld_start(adcp); - adcp->ad_state = ADC_READY; - chSysUnlock(); -} - -/** - * @brief Deactivates the ADC peripheral. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adcStop(ADCDriver *adcp) { - - chDbgCheck(adcp != NULL, "adcStop"); - - chSysLock(); - chDbgAssert((adcp->ad_state == ADC_STOP) || - (adcp->ad_state == ADC_READY) || - (adcp->ad_state == ADC_COMPLETE), - "adcStop(), #1", - "invalid state"); - adc_lld_stop(adcp); - adcp->ad_state = ADC_STOP; - chSysUnlock(); -} - -/** - * @brief Starts an ADC conversion. - * @details Starts a conversion operation, there are two kind of conversion - * modes: - * - LINEAR, in this mode the buffer is filled once and then - * the conversion stops automatically. - * - CIRCULAR, in this mode the conversion never stops and - * the buffer is filled circularly.
      - * During the conversion the callback function is invoked when - * the buffer is 50% filled and when the buffer is 100% filled, - * this way is possible to process the conversion stream in real - * time. This kind of conversion can only be stopped by explicitly - * invoking @p adcStopConversion(). - * . - * @note The buffer is organized as a matrix of M*N elements where M is the - * channels number configured into the conversion group and N is the - * buffer depth. The samples are sequentially written into the buffer - * with no gaps. - * - * @param[in] adcp pointer to the @p ADCDriver object - * @param[in] grpp pointer to a @p ADCConversionGroup object - * @param[out] samples pointer to the samples buffer - * @param[in] depth buffer depth (matrix rows number). The buffer depth - * must be one or an even number. - * @param[in] callback pointer to the conversion callback function, this - * parameter can be @p NULL if a callback is not required - * @return The operation status. - * @retval FALSE the conversion has been started. - * @retval TRUE the driver is busy, conversion not started. - */ -bool_t adcStartConversion(ADCDriver *adcp, - const ADCConversionGroup *grpp, - adcsample_t *samples, - size_t depth, - adccallback_t callback) { - - chDbgCheck((adcp != NULL) && (grpp != NULL) && (samples != NULL) && - ((depth == 1) || ((depth & 1) == 0)), - "adcStartConversion"); - - chSysLock(); - chDbgAssert((adcp->ad_state == ADC_READY) || - (adcp->ad_state == ADC_RUNNING) || - (adcp->ad_state == ADC_COMPLETE), - "adcStartConversion(), #1", - "invalid state"); - if (adcp->ad_state == ADC_RUNNING) { - chSysUnlock(); - return TRUE; - } - adcp->ad_callback = callback; - adcp->ad_samples = samples; - adcp->ad_depth = depth; - adcp->ad_grpp = grpp; - adc_lld_start_conversion(adcp); - adcp->ad_state = ADC_RUNNING; - chSysUnlock(); - return FALSE; -} - -/** - * @brief Stops an ongoing conversion. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adcStopConversion(ADCDriver *adcp) { - - chDbgCheck(adcp != NULL, "adcStopConversion"); - - chSysLock(); - chDbgAssert((adcp->ad_state == ADC_READY) || - (adcp->ad_state == ADC_RUNNING) || - (adcp->ad_state == ADC_COMPLETE), - "adcStopConversion(), #1", - "invalid state"); - if (adcp->ad_state == ADC_RUNNING) { - adc_lld_stop_conversion(adcp); - adcp->ad_grpp = NULL; - adcp->ad_state = ADC_READY; - chSemResetI(&adcp->ad_sem, 0); - chSchRescheduleS(); - } - else - adcp->ad_state = ADC_READY; - chSysUnlock(); -} - -/** - * @brief Waits for completion. - * @details If the conversion is not completed or not yet started then the - * invoking thread waits for a conversion completion event. - * - * @param[in] adcp pointer to the @p ADCDriver object - * @param[in] timeout the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation result. - * @retval RDY_OK conversion finished. - * @retval RDY_TIMEOUT conversion not finished within the specified time. - */ -msg_t adcWaitConversion(ADCDriver *adcp, systime_t timeout) { - - chSysLock(); - chDbgAssert((adcp->ad_state == ADC_READY) || - (adcp->ad_state == ADC_RUNNING) || - (adcp->ad_state == ADC_COMPLETE), - "adcWaitConversion(), #1", - "invalid state"); - if (adcp->ad_state != ADC_COMPLETE) { - if (chSemWaitTimeoutS(&adcp->ad_sem, timeout) == RDY_TIMEOUT) { - chSysUnlock(); - return RDY_TIMEOUT; - } - } - chSysUnlock(); - return RDY_OK; -} - -#endif /* CH_HAL_USE_ADC */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/src/can.c b/ChibiOS_2.0.8/os/hal/src/can.c deleted file mode 100644 index ce87120..0000000 --- a/ChibiOS_2.0.8/os/hal/src/can.c +++ /dev/null @@ -1,278 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file can.c - * @brief CAN Driver code. - * - * @addtogroup CAN - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_CAN || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief CAN Driver initialization. - */ -void canInit(void) { - - can_lld_init(); -} - -/** - * @brief Initializes the standard part of a @p CANDriver structure. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void canObjectInit(CANDriver *canp) { - - canp->cd_state = CAN_STOP; - canp->cd_config = NULL; - chSemInit(&canp->cd_txsem, 0); - chSemInit(&canp->cd_rxsem, 0); - chEvtInit(&canp->cd_rxfull_event); - chEvtInit(&canp->cd_txempty_event); - chEvtInit(&canp->cd_error_event); - canp->cd_status = 0; -#if CAN_USE_SLEEP_MODE - chEvtInit(&canp->cd_sleep_event); - chEvtInit(&canp->cd_wakeup_event); -#endif /* CAN_USE_SLEEP_MODE */ -} - -/** - * @brief Configures and activates the CAN peripheral. - * - * @param[in] canp pointer to the @p CANDriver object - * @param[in] config pointer to the @p CANConfig object - */ -void canStart(CANDriver *canp, const CANConfig *config) { - - chDbgCheck((canp != NULL) && (config != NULL), "canStart"); - - chSysLock(); - chDbgAssert((canp->cd_state == CAN_STOP) || - (canp->cd_state == CAN_STARTING) || - (canp->cd_state == CAN_READY), - "canStart(), #1", - "invalid state"); - while (canp->cd_state == CAN_STARTING) - chThdSleepS(1); - if (canp->cd_state == CAN_STOP) { - canp->cd_config = config; - can_lld_start(canp); - canp->cd_state = CAN_READY; - } - chSysUnlock(); -} - -/** - * @brief Deactivates the CAN peripheral. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void canStop(CANDriver *canp) { - - chDbgCheck(canp != NULL, "canStop"); - - chSysLock(); - chDbgAssert((canp->cd_state == CAN_STOP) || (canp->cd_state == CAN_READY), - "canStop(), #1", - "invalid state"); - can_lld_stop(canp); - chSemResetI(&canp->cd_rxsem, 0); - chSemResetI(&canp->cd_txsem, 0); - chSchRescheduleS(); - canp->cd_state = CAN_STOP; - canp->cd_status = 0; - chSysUnlock(); -} - -/** - * @brief Can frame transmission. - * @details The specified frame is queued for transmission, if the hardware - * queue is full then the invoking thread is queued. - * @note Trying to transmit while in sleep mode simply enqueues the thread. - * - * @param[in] canp pointer to the @p CANDriver object - * @param[in] ctfp pointer to the CAN frame to be transmitted - * @param[in] timeout the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation result. - * @retval RDY_OK the frame has been queued for transmission. - * @retval RDY_TIMEOUT operation not finished within the specified time. - * @retval RDY_RESET driver stopped while waiting. - */ -msg_t canTransmit(CANDriver *canp, const CANTxFrame *ctfp, systime_t timeout) { - - chDbgCheck((canp != NULL) && (ctfp != NULL), "canTransmit"); - - chSysLock(); - chDbgAssert((canp->cd_state == CAN_READY) || (canp->cd_state == CAN_SLEEP), - "canTransmit(), #1", - "invalid state"); - while ((canp->cd_state == CAN_SLEEP) || !can_lld_can_transmit(canp)) { - msg_t msg = chSemWaitTimeoutS(&canp->cd_txsem, timeout); - if (msg != RDY_OK) { - chSysUnlock(); - return msg; - } - } - can_lld_transmit(canp, ctfp); - chSysUnlock(); - return RDY_OK; -} - -/** - * @brief Can frame receive. - * @details The function waits until a frame is received. - * @note Trying to receive while in sleep mode simply enqueues the thread. - * - * @param[in] canp pointer to the @p CANDriver object - * @param[out] crfp pointer to the buffer where the CAN frame is copied - * @param[in] timeout the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout (useful in an - * event driven scenario where a thread never blocks - * for I/O). - * - @a TIME_INFINITE no timeout. - * . - * @return The operation result. - * @retval RDY_OK a frame has been received and placed in the buffer. - * @retval RDY_TIMEOUT operation not finished within the specified time or - * frame not immediately available if invoked using - * @p TIME_IMMEDIATE. - * @retval RDY_RESET driver stopped while waiting. - */ -msg_t canReceive(CANDriver *canp, CANRxFrame *crfp, systime_t timeout) { - - chDbgCheck((canp != NULL) && (crfp != NULL), "canReceive"); - - chSysLock(); - chDbgAssert((canp->cd_state == CAN_READY) || (canp->cd_state == CAN_SLEEP), - "canReceive(), #1", - "invalid state"); - while ((canp->cd_state == CAN_SLEEP) || !can_lld_can_receive(canp)) { - msg_t msg = chSemWaitTimeoutS(&canp->cd_rxsem, timeout); - if (msg != RDY_OK) { - chSysUnlock(); - return msg; - } - } - can_lld_receive(canp, crfp); - chSysUnlock(); - return RDY_OK; -} - -/** - * @brief Returns the current status mask and clears it. - * - * @param[in] canp pointer to the @p CANDriver object - * @return The status flags mask. - */ -canstatus_t canGetAndClearFlags(CANDriver *canp) { - canstatus_t status; - - chSysLock(); - status = canp->cd_status; - canp->cd_status = 0; - chSysUnlock(); - return status; -} - -#if CAN_USE_SLEEP_MODE || defined(__DOXYGEN__) -/** - * @brief Enters the sleep mode. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void canSleep(CANDriver *canp) { - - chDbgCheck(canp != NULL, "canSleep"); - - chSysLock(); - chDbgAssert((canp->cd_state == CAN_READY) || (canp->cd_state == CAN_SLEEP), - "canSleep(), #1", - "invalid state"); - if (canp->cd_state == CAN_READY) { - can_lld_sleep(canp); - canp->cd_state = CAN_SLEEP; - chEvtBroadcastI(&canp->cd_sleep_event); - chSchRescheduleS(); - } - chSysUnlock(); -} - -/** - * @brief Enforces leaving the sleep mode. - * @note The sleep mode is supposed to be usually exited automatically by - * an hardware event. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void canWakeup(CANDriver *canp) { - - chDbgCheck(canp != NULL, "canWakeup"); - - chSysLock(); - chDbgAssert((canp->cd_state == CAN_READY) || (canp->cd_state == CAN_SLEEP), - "canWakeup(), #1", - "invalid state"); - if (canp->cd_state == CAN_SLEEP) { - can_lld_wakeup(canp); - canp->cd_state = CAN_READY; - chEvtBroadcastI(&canp->cd_wakeup_event); - chSchRescheduleS(); - } - chSysUnlock(); -} -#endif /* CAN_USE_SLEEP_MODE */ - -#endif /* CH_HAL_USE_CAN */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/src/hal.c b/ChibiOS_2.0.8/os/hal/src/hal.c deleted file mode 100644 index 3dfe6f9..0000000 --- a/ChibiOS_2.0.8/os/hal/src/hal.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file hal.c - * @brief HAL subsystem code. - * - * @addtogroup HAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief HAL initialization. - */ -void halInit(void) { - - hal_lld_init(); - -#if CH_HAL_USE_PAL - palInit(&pal_default_config); -#endif -#if CH_HAL_USE_ADC - adcInit(); -#endif -#if CH_HAL_USE_CAN - canInit(); -#endif -#if CH_HAL_USE_MAC - macInit(); -#endif -#if CH_HAL_USE_PWM - pwmInit(); -#endif -#if CH_HAL_USE_SERIAL - sdInit(); -#endif -#if CH_HAL_USE_SPI - spiInit(); -#endif -#if CH_HAL_USE_MMC_SPI - mmcInit(); -#endif -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/src/mac.c b/ChibiOS_2.0.8/os/hal/src/mac.c deleted file mode 100644 index 8a87ca5..0000000 --- a/ChibiOS_2.0.8/os/hal/src/mac.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file mac.c - * @brief MAC Driver code. - * - * @addtogroup MAC - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_MAC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief MAC Driver initialization. - */ -void macInit(void) { - - mac_lld_init(); -} - -/** - * @brief Initialize the standard part of a @p MACDriver structure. - * - * @param[in] macp pointer to the @p MACDriver object - */ -void macObjectInit(MACDriver *macp) { - - chSemInit(&macp->md_tdsem, 0); - chSemInit(&macp->md_rdsem, 0); -#if CH_USE_EVENTS - chEvtInit(&macp->md_rdevent); -#endif -} - -/** - * @brief MAC address setup. - * @note This function must be invoked only with the driver in the stopped - * state. If invoked on an active interface then it is ignored. - * - * @param[in] macp pointer to the @p MACDriver object - * @param[in] p pointer to a six bytes buffer containing the MAC - * address. If this parameter is set to @p NULL then MAC - * a system default is used. - * - */ -void macSetAddress(MACDriver *macp, const uint8_t *p) { - - mac_lld_set_address(macp, p); -} - -/** - * @brief Allocates a transmission descriptor. - * @details One of the available transmission descriptors is locked and - * returned. If a descriptor is not currently available then the - * invoking thread is queued until one is freed. - * - * @param[in] macp pointer to the @p MACDriver object - * @param[out] tdp pointer to a @p MACTransmitDescriptor structure - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation status. - * @retval RDY_OK the descriptor was obtained. - * @retval RDY_TIMEOUT the operation timed out, descriptor not initialized. - */ -msg_t macWaitTransmitDescriptor(MACDriver *macp, - MACTransmitDescriptor *tdp, - systime_t time) { - msg_t msg; - - while (((msg = max_lld_get_transmit_descriptor(macp, tdp)) != RDY_OK) && - (time > 0)) { - chSysLock(); - systime_t now = chTimeNow(); - if ((msg = chSemWaitTimeoutS(&macp->md_tdsem, time)) == RDY_TIMEOUT) - break; - if (time != TIME_INFINITE) - time -= (chTimeNow() - now); - chSysUnlock(); - } - return msg; -} - -/** - * @brief Releases a transmit descriptor and starts the transmission of the - * enqueued data as a single frame. - * - * @param[in] tdp the pointer to the @p MACTransmitDescriptor structure - */ -void macReleaseTransmitDescriptor(MACTransmitDescriptor *tdp) { - - mac_lld_release_transmit_descriptor(tdp); -} - -/** - * @brief Waits for a received frame. - * @details Stops until a frame is received and buffered. If a frame is - * not immediately available then the invoking thread is queued - * until one is received. - * - * @param[in] macp pointer to the @p MACDriver object - * @param[out] rdp pointer to a @p MACReceiveDescriptor structure - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation status. - * @retval RDY_OK the descriptor was obtained. - * @retval RDY_TIMEOUT the operation timed out, descriptor not initialized. - */ -msg_t macWaitReceiveDescriptor(MACDriver *macp, - MACReceiveDescriptor *rdp, - systime_t time) { - msg_t msg; - - while (((msg = max_lld_get_receive_descriptor(macp, rdp)) != RDY_OK) && - (time > 0)) { - chSysLock(); - systime_t now = chTimeNow(); - if ((msg = chSemWaitTimeoutS(&macp->md_rdsem, time)) == RDY_TIMEOUT) - break; - if (time != TIME_INFINITE) - time -= (chTimeNow() - now); - chSysUnlock(); - } - return msg; -} - -/** - * @brief Releases a receive descriptor. - * @details The descriptor and its buffer are made available for more incoming - * frames. - * - * @param[in] rdp the pointer to the @p MACReceiveDescriptor structure - */ -void macReleaseReceiveDescriptor(MACReceiveDescriptor *rdp) { - - mac_lld_release_receive_descriptor(rdp); -} - -/** - * @brief Updates and returns the link status. - * - * @param[in] macp pointer to the @p MACDriver object - * @return The link status. - * @retval TRUE if the link is active. - * @retval FALSE if the link is down. - */ -bool_t macPollLinkStatus(MACDriver *macp) { - - return mac_lld_poll_link_status(macp); -} - -#endif /* CH_HAL_USE_MAC */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/src/mmc_spi.c b/ChibiOS_2.0.8/os/hal/src/mmc_spi.c deleted file mode 100644 index ab86998..0000000 --- a/ChibiOS_2.0.8/os/hal/src/mmc_spi.c +++ /dev/null @@ -1,597 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file mmc_spi.c - * @brief MMC over SPI driver code. - * - * @addtogroup MMC_SPI - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_MMC_SPI || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/** - * @brief Inserion monitor timer callback function. - * - * @param[in] p pointer to the @p MMCDriver object - */ -void tmrfunc(void *p) { - MMCDriver *mmcp = p; - - if (mmcp->mmc_cnt > 0) { - if (mmcp->mmc_is_inserted()) { - if (--mmcp->mmc_cnt == 0) { - mmcp->mmc_state = MMC_INSERTED; - chEvtBroadcastI(&mmcp->mmc_inserted_event); - } - } - else - mmcp->mmc_cnt = MMC_POLLING_INTERVAL; - } - else { - if (!mmcp->mmc_is_inserted()) { - mmcp->mmc_state = MMC_WAIT; - mmcp->mmc_cnt = MMC_POLLING_INTERVAL; - chEvtBroadcastI(&mmcp->mmc_removed_event); - } - } - chVTSetI(&mmcp->mmc_vt, MS2ST(MMC_POLLING_DELAY), tmrfunc, mmcp); -} - -/** - * @brief Waits an idle condition. - * - * @param[in] mmcp pointer to the @p MMCDriver object - */ -static void wait(MMCDriver *mmcp) { - int i; - uint8_t buf[4]; - - for (i = 0; i < 16; i++) { - spiReceive(mmcp->mmc_spip, 1, buf); - if (buf[0] == 0xFF) - break; - } - /* Looks like it is a long wait.*/ - while (TRUE) { - spiReceive(mmcp->mmc_spip, 1, buf); - if (buf[0] == 0xFF) - break; -#ifdef MMC_NICE_WAITING - /* Trying to be nice with the other threads.*/ - chThdSleep(1); -#endif - } -} - -/** - * @brief Sends a command header. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @param cmd[in] the command id - * @param arg[in] the command argument - */ -static void send_hdr(MMCDriver *mmcp, uint8_t cmd, uint32_t arg) { - uint8_t buf[6]; - - /* Wait for the bus to become idle if a write operation was in progress. */ - wait(mmcp); - - buf[0] = 0x40 | cmd; - buf[1] = arg >> 24; - buf[2] = arg >> 16; - buf[3] = arg >> 8; - buf[4] = arg; - buf[5] = 0x95; /* Valid for CMD0 ignored by other commands. */ - spiSend(mmcp->mmc_spip, 6, buf); -} - -/** - * @brief Receives a single byte response. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @return The response as an @p uint8_t value. - * @retval 0xFF timed out. - */ -static uint8_t recvr1(MMCDriver *mmcp) { - int i; - uint8_t r1[1]; - - for (i = 0; i < 9; i++) { - spiReceive(mmcp->mmc_spip, 1, r1); - if (r1[0] != 0xFF) - return r1[0]; - } - return 0xFF; -} - -/** - * @brief Sends a command an returns a single byte response. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @param cmd[in] the command id - * @param arg[in] the command argument - * @return The response as an @p uint8_t value. - * @retval 0xFF timed out. - */ -static uint8_t send_command(MMCDriver *mmcp, uint8_t cmd, uint32_t arg) { - uint8_t r1; - - spiSelect(mmcp->mmc_spip); - send_hdr(mmcp, cmd, arg); - r1 = recvr1(mmcp); - spiUnselect(mmcp->mmc_spip); - return r1; -} - -/** - * @brief Waits that the card reaches an idle state. - * - * @param[in] mmcp pointer to the @p MMCDriver object - */ -static void sync(MMCDriver *mmcp) { - uint8_t buf[1]; - - spiSelect(mmcp->mmc_spip); - while (TRUE) { - spiReceive(mmcp->mmc_spip, 1, buf); - if (buf[0] == 0xFF) - break; -#ifdef MMC_NICE_WAITING - chThdSleep(1); /* Trying to be nice with the other threads.*/ -#endif - } - spiUnselect(mmcp->mmc_spip); -} - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief MMC over SPI driver initialization. - */ -void mmcInit(void) { - -} - -/** - * @brief Initializes an instance. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @param[in] spip pointer to the SPI driver to be used as interface - * @param[in] lscfg low speed configuration for the SPI driver - * @param[in] hscfg high speed configuration for the SPI driver - * @param[in] is_protected function that returns the card write protection - * setting - * @param[in] is_inserted function that returns the card insertion sensor - * status - */ -void mmcObjectInit(MMCDriver *mmcp, SPIDriver *spip, - const SPIConfig *lscfg, const SPIConfig *hscfg, - mmcquery_t is_protected, mmcquery_t is_inserted) { - - mmcp->mmc_state = MMC_STOP; - mmcp->mmc_config = NULL; - mmcp->mmc_spip = spip; - mmcp->mmc_lscfg = lscfg; - mmcp->mmc_hscfg = hscfg; - mmcp->mmc_is_protected = is_protected; - mmcp->mmc_is_inserted = is_inserted; - chEvtInit(&mmcp->mmc_inserted_event); - chEvtInit(&mmcp->mmc_removed_event); -} - -/** - * @brief Configures and activates the MMC peripheral. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @param[in] config pointer to the @p MMCConfig object - */ -void mmcStart(MMCDriver *mmcp, const MMCConfig *config) { - - chDbgCheck((mmcp != NULL) && (config != NULL), "mmcStart"); - - chSysLock(); - chDbgAssert(mmcp->mmc_state == MMC_STOP, "mmcStart(), #1", "invalid state"); - mmcp->mmc_config = config; - mmcp->mmc_state = MMC_WAIT; - mmcp->mmc_cnt = MMC_POLLING_INTERVAL; - chVTSetI(&mmcp->mmc_vt, MS2ST(MMC_POLLING_DELAY), tmrfunc, mmcp); - chSysUnlock(); -} - -/** - * @brief Disables the MMC peripheral. - * - * @param[in] mmcp pointer to the @p MMCDriver object - */ -void mmcStop(MMCDriver *mmcp) { - - chDbgCheck(mmcp != NULL, "mmcStop"); - - chSysLock(); - chDbgAssert((mmcp->mmc_state != MMC_UNINIT) && - (mmcp->mmc_state != MMC_READING) && - (mmcp->mmc_state != MMC_WRITING), - "mmcStop(), #1", - "invalid state"); - if (mmcp->mmc_state != MMC_STOP) { - mmcp->mmc_state = MMC_STOP; - chVTResetI(&mmcp->mmc_vt); - } - chSysUnlock(); - spiStop(mmcp->mmc_spip); -} - -/** - * @brief Performs the initialization procedure on the inserted card. - * @details This function should be invoked when a card is inserted and - * brings the driver in the @p MMC_READY state where it is possible - * to perform read and write operations. - * @note It is possible to invoke this function from the insertion event - * handler. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @return The operation status. - * @retval FALSE the operation was successful and the driver is now - * in the @p MMC_READY state. - * @retval TRUE the operation failed. - */ -bool_t mmcConnect(MMCDriver *mmcp) { - unsigned i; - bool_t result; - - chDbgCheck(mmcp != NULL, "mmcConnect"); - - chDbgAssert((mmcp->mmc_state != MMC_UNINIT) && - (mmcp->mmc_state != MMC_STOP), - "mmcConnect(), #1", - "invalid state"); - - if (mmcp->mmc_state == MMC_INSERTED) { - /* Slow clock mode and 128 clock pulses.*/ - spiStart(mmcp->mmc_spip, mmcp->mmc_lscfg); - spiIgnore(mmcp->mmc_spip, 16); - - /* SPI mode selection.*/ - i = 0; - while (TRUE) { - if (send_command(mmcp, MMC_CMDGOIDLE, 0) == 0x01) - break; - if (++i >= MMC_CMD0_RETRY) - return TRUE; - chThdSleepMilliseconds(10); - } - - /* Initialization. */ - i = 0; - while (TRUE) { - uint8_t b = send_command(mmcp, MMC_CMDINIT, 0); - if (b == 0x00) - break; - if (b != 0x01) - return TRUE; - if (++i >= MMC_CMD1_RETRY) - return TRUE; - chThdSleepMilliseconds(10); - } - - /* Initialization complete, full speed. */ - spiStart(mmcp->mmc_spip, mmcp->mmc_hscfg); - - /* Setting block size.*/ - if (send_command(mmcp, MMC_CMDSETBLOCKLEN, MMC_SECTOR_SIZE) != 0x00) - return TRUE; - - /* Transition to MMC_READY state (if not extracted).*/ - chSysLock(); - if (mmcp->mmc_state == MMC_INSERTED) { - mmcp->mmc_state = MMC_READY; - result = FALSE; - } - else - result = TRUE; - chSysUnlock(); - return result; - } - if (mmcp->mmc_state == MMC_READY) - return FALSE; - /* Any other state is invalid.*/ - return TRUE; -} - -/** - * @brief Brings the driver in a state safe for card removal. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @return The operation status. - * @retval FALSE the operation was successful and the driver is now - * in the @p MMC_INSERTED state. - * @retval TRUE the operation failed. - */ -bool_t mmcDisconnect(MMCDriver *mmcp) { - bool_t status; - - chDbgCheck(mmcp != NULL, "mmcDisconnect"); - - chDbgAssert((mmcp->mmc_state != MMC_UNINIT) && - (mmcp->mmc_state != MMC_STOP), - "mmcDisconnect(), #1", - "invalid state"); - switch (mmcp->mmc_state) { - case MMC_READY: - /* Wait for the pending write operations to complete.*/ - sync(mmcp); - chSysLock(); - if (mmcp->mmc_state == MMC_READY) - mmcp->mmc_state = MMC_INSERTED; - chSysUnlock(); - case MMC_INSERTED: - status = FALSE; - default: - status = TRUE; - } - spiStop(mmcp->mmc_spip); - return status; -} - -/** - * @brief Starts a sequential read. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @param[in] startblk first block to read - * @return The operation status. - * @retval FALSE the operation was successful. - * @retval TRUE the operation failed. - */ -bool_t mmcStartSequentialRead(MMCDriver *mmcp, uint32_t startblk) { - - chDbgCheck(mmcp != NULL, "mmcStartSequentialRead"); - - chSysLock(); - if (mmcp->mmc_state != MMC_READY) { - chSysUnlock(); - return TRUE; - } - mmcp->mmc_state = MMC_READING; - chSysUnlock(); - - spiStart(mmcp->mmc_spip, mmcp->mmc_hscfg); - spiSelect(mmcp->mmc_spip); - send_hdr(mmcp, MMC_CMDREADMULTIPLE, startblk * MMC_SECTOR_SIZE); - if (recvr1(mmcp) != 0x00) { - spiUnselect(mmcp->mmc_spip); - chSysLock(); - if (mmcp->mmc_state == MMC_READING) - mmcp->mmc_state = MMC_READY; - chSysUnlock(); - return TRUE; - } - return FALSE; -} - -/** - * @brief Reads a block within a sequential read operation. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @param[out] buffer pointer to the read buffer - * @return The operation status. - * @retval FALSE the operation was successful. - * @retval TRUE the operation failed. - */ -bool_t mmcSequentialRead(MMCDriver *mmcp, uint8_t *buffer) { - int i; - - chDbgCheck((mmcp != NULL) && (buffer != NULL), "mmcSequentialRead"); - - chSysLock(); - if (mmcp->mmc_state != MMC_READING) { - chSysUnlock(); - return TRUE; - } - chSysUnlock(); - - for (i = 0; i < MMC_WAIT_DATA; i++) { - spiReceive(mmcp->mmc_spip, 1, buffer); - if (buffer[0] == 0xFE) { - spiReceive(mmcp->mmc_spip, MMC_SECTOR_SIZE, buffer); - /* CRC ignored. */ - spiIgnore(mmcp->mmc_spip, 2); - return FALSE; - } - } - /* Timeout.*/ - spiUnselect(mmcp->mmc_spip); - chSysLock(); - if (mmcp->mmc_state == MMC_READING) - mmcp->mmc_state = MMC_READY; - chSysUnlock(); - return TRUE; -} - -/** - * @brief Stops a sequential read gracefully. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @return The operation status. - * @retval FALSE the operation was successful. - * @retval TRUE the operation failed. - */ -bool_t mmcStopSequentialRead(MMCDriver *mmcp) { - static const uint8_t stopcmd[] = {0x40 | MMC_CMDSTOP, 0, 0, 0, 0, 1, 0xFF}; - bool_t result; - - chDbgCheck(mmcp != NULL, "mmcStopSequentialRead"); - - chSysLock(); - if (mmcp->mmc_state != MMC_READING) { - chSysUnlock(); - return TRUE; - } - chSysUnlock(); - - spiSend(mmcp->mmc_spip, sizeof(stopcmd), stopcmd); -/* result = recvr1(mmcp) != 0x00;*/ - /* Note, ignored r1 response, it can be not zero, unknown issue.*/ - recvr1(mmcp); - result = FALSE; - spiUnselect(mmcp->mmc_spip); - - chSysLock(); - if (mmcp->mmc_state == MMC_READING) - mmcp->mmc_state = MMC_READY; - chSysUnlock(); - return result; -} - -/** - * @brief Starts a sequential write. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @param[in] startblk first block to write - * @return The operation status. - * @retval FALSE the operation was successful. - * @retval TRUE the operation failed. - */ -bool_t mmcStartSequentialWrite(MMCDriver *mmcp, uint32_t startblk) { - - chDbgCheck(mmcp != NULL, "mmcStartSequentialWrite"); - - chSysLock(); - if (mmcp->mmc_state != MMC_READY) { - chSysUnlock(); - return TRUE; - } - mmcp->mmc_state = MMC_WRITING; - chSysUnlock(); - - spiStart(mmcp->mmc_spip, mmcp->mmc_hscfg); - spiSelect(mmcp->mmc_spip); - send_hdr(mmcp, MMC_CMDWRITEMULTIPLE, startblk * MMC_SECTOR_SIZE); - if (recvr1(mmcp) != 0x00) { - spiUnselect(mmcp->mmc_spip); - chSysLock(); - if (mmcp->mmc_state == MMC_WRITING) - mmcp->mmc_state = MMC_READY; - chSysUnlock(); - return TRUE; - } - return FALSE; -} - -/** - * @brief Writes a block within a sequential write operation. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @param[out] buffer pointer to the write buffer - * @return The operation status. - * @retval FALSE the operation was successful. - * @retval TRUE the operation failed. - */ -bool_t mmcSequentialWrite(MMCDriver *mmcp, const uint8_t *buffer) { - static const uint8_t start[] = {0xFF, 0xFC}; - uint8_t b[1]; - - chDbgCheck((mmcp != NULL) && (buffer != NULL), "mmcSequentialWrite"); - - chSysLock(); - if (mmcp->mmc_state != MMC_WRITING) { - chSysUnlock(); - return TRUE; - } - chSysUnlock(); - - spiSend(mmcp->mmc_spip, sizeof(start), start); /* Data prologue. */ - spiSend(mmcp->mmc_spip, MMC_SECTOR_SIZE, buffer); /* Data. */ - spiIgnore(mmcp->mmc_spip, 2); /* CRC ignored. */ - spiReceive(mmcp->mmc_spip, 1, b); - if ((b[0] & 0x1F) == 0x05) { - wait(mmcp); - return FALSE; - } - - /* Error.*/ - spiUnselect(mmcp->mmc_spip); - chSysLock(); - if (mmcp->mmc_state == MMC_WRITING) - mmcp->mmc_state = MMC_READY; - chSysUnlock(); - return TRUE; -} - -/** - * @brief Stops a sequential write gracefully. - * - * @param[in] mmcp pointer to the @p MMCDriver object - * @return The operation status. - * @retval FALSE the operation was successful. - * @retval TRUE the operation failed. - */ -bool_t mmcStopSequentialWrite(MMCDriver *mmcp) { - static const uint8_t stop[] = {0xFD, 0xFF}; - - chDbgCheck(mmcp != NULL, "mmcStopSequentialWrite"); - - chSysLock(); - if (mmcp->mmc_state != MMC_WRITING) { - chSysUnlock(); - return TRUE; - } - chSysUnlock(); - - spiSend(mmcp->mmc_spip, sizeof(stop), stop); - spiUnselect(mmcp->mmc_spip); - - chSysLock(); - if (mmcp->mmc_state == MMC_WRITING) { - mmcp->mmc_state = MMC_READY; - chSysUnlock(); - return FALSE; - } - chSysUnlock(); - return TRUE; -} - -#endif /* CH_HAL_USE_MMC_SPI */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/src/pal.c b/ChibiOS_2.0.8/os/hal/src/pal.c deleted file mode 100644 index 63af575..0000000 --- a/ChibiOS_2.0.8/os/hal/src/pal.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file pal.c - * @brief I/O Ports Abstraction Layer code. - * - * @addtogroup PAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Read from an I/O bus. - * @note The operation is not guaranteed to be atomic on all the - * architectures, for atomicity and/or portability reasons you may - * need to enclose port I/O operations between @p chSysLock() and - * @p chSysUnlock(). - * @note The function internally uses the @p palReadGroup() macro. The use - * of this function is preferred when you value code size, readability - * and error checking over speed. - * - * @param[in] bus the I/O bus, pointer to a @p IOBus structure - * @return The bus logical states. - */ -ioportmask_t palReadBus(IOBus *bus) { - - chDbgCheck((bus != NULL) && - (bus->bus_offset > PAL_IOPORTS_WIDTH), "palReadBus"); - - return palReadGroup(bus->bus_portid, bus->bus_mask, bus->bus_offset); -} - -/** - * @brief Write to an I/O bus. - * @note The operation is not guaranteed to be atomic on all the - * architectures, for atomicity and/or portability reasons you may - * need to enclose port I/O operations between @p chSysLock() and - * @p chSysUnlock(). - * @note The default implementation is non atomic and not necessarily - * optimal. Low level drivers may optimize the function by using - * specific hardware or coding. - * - * @param[in] bus the I/O bus, pointer to a @p IOBus structure - * @param[in] bits the bits to be written on the I/O bus. Values exceeding - * the bus width are masked so most significant bits are - * lost. - */ -void palWriteBus(IOBus *bus, ioportmask_t bits) { - - chDbgCheck((bus != NULL) && - (bus->bus_offset > PAL_IOPORTS_WIDTH), "palWriteBus"); - - palWriteGroup(bus->bus_portid, bus->bus_mask, bus->bus_offset, bits); -} - -/** - * @brief Programs a bus with the specified mode. - * @note The operation is not guaranteed to be atomic on all the - * architectures, for atomicity and/or portability reasons you may - * need to enclose port I/O operations between @p chSysLock() and - * @p chSysUnlock(). - * @note The default implementation is non atomic and not necessarily - * optimal. Low level drivers may optimize the function by using - * specific hardware or coding. - * - * @param[in] bus the I/O bus, pointer to a @p IOBus structure - * @param[in] mode the mode - */ -void palSetBusMode(IOBus *bus, uint_fast8_t mode) { - - chDbgCheck((bus != NULL) && - (bus->bus_offset > PAL_IOPORTS_WIDTH), "palSetBusMode"); - - palSetGroupMode(bus->bus_portid, bus->bus_mask, mode); -} - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/src/pwm.c b/ChibiOS_2.0.8/os/hal/src/pwm.c deleted file mode 100644 index 3252a7a..0000000 --- a/ChibiOS_2.0.8/os/hal/src/pwm.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file pwm.c - * @brief PWM Driver code. - * - * @addtogroup PWM - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PWM || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief PWM Driver initialization. - */ -void pwmInit(void) { - - pwm_lld_init(); -} - -/** - * @brief Initializes the standard part of a @p PWMDriver structure. - * - * @param[in] pwmp pointer to a @p PWMDriver object - */ -void pwmObjectInit(PWMDriver *pwmp) { - - pwmp->pd_state = PWM_STOP; - pwmp->pd_config = NULL; -#if defined(PWM_DRIVER_EXT_INIT_HOOK) - PWM_DRIVER_EXT_INIT_HOOK(pwmp); -#endif -} - -/** - * @brief Configures and activates the PWM peripheral. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] config pointer to a @p PWMConfig object - */ -void pwmStart(PWMDriver *pwmp, const PWMConfig *config) { - - chDbgCheck((pwmp != NULL) && (config != NULL), "pwmStart"); - - chSysLock(); - chDbgAssert((pwmp->pd_state == PWM_STOP) || (pwmp->pd_state == PWM_READY), - "pwmStart(), #1", "invalid state"); - pwmp->pd_config = config; - pwm_lld_start(pwmp); - pwmp->pd_state = PWM_READY; - chSysUnlock(); -} - -/** - * @brief Deactivates the PWM peripheral. - * - * @param[in] pwmp pointer to a @p PWMDriver object - */ -void pwmStop(PWMDriver *pwmp) { - - chDbgCheck(pwmp != NULL, "pwmStop"); - - chSysLock(); - chDbgAssert((pwmp->pd_state == PWM_STOP) || (pwmp->pd_state == PWM_READY), - "pwmStop(), #1", "invalid state"); - pwm_lld_stop(pwmp); - pwmp->pd_state = PWM_STOP; - chSysUnlock(); -} - -/** - * @brief Enables a PWM channel. - * @details Programs (or reprograms) a PWM channel. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] channel PWM channel identifier (0...PWM_CHANNELS-1) - * @param[in] width PWM pulse width as clock pulses number - */ -void pwmEnableChannel(PWMDriver *pwmp, - pwmchannel_t channel, - pwmcnt_t width) { - - chDbgCheck((pwmp != NULL) && (channel < PWM_CHANNELS), - "pwmEnableChannel"); - - chSysLock(); - chDbgAssert(pwmp->pd_state == PWM_READY, - "pwmEnableChannel(), #1", "not ready"); - pwm_lld_enable_channel(pwmp, channel, width); - chSysUnlock(); -} - -/** - * @brief Disables a PWM channel. - * @details The channel is disabled and its output line returned to the - * idle state. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] channel PWM channel identifier (0...PWM_CHANNELS-1) - */ -void pwmDisableChannel(PWMDriver *pwmp, pwmchannel_t channel) { - - chDbgCheck((pwmp != NULL) && (channel < PWM_CHANNELS), - "pwmEnableChannel"); - - chSysLock(); - chDbgAssert(pwmp->pd_state == PWM_READY, - "pwmDisableChannel(), #1", "not ready"); - pwm_lld_disable_channel(pwmp, channel); - chSysUnlock(); -} - -#endif /* CH_HAL_USE_PWM */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/src/serial.c b/ChibiOS_2.0.8/os/hal/src/serial.c deleted file mode 100644 index 1be4308..0000000 --- a/ChibiOS_2.0.8/os/hal/src/serial.c +++ /dev/null @@ -1,269 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file serial.c - * @brief Serial Driver code. - * - * @addtogroup SERIAL - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/* - * Interface implementation, the following functions just invoke the equivalent - * queue-level function or macro. - */ - -static size_t writes(void *ip, const uint8_t *bp, size_t n) { - - return chOQWriteTimeout(&((SerialDriver *)ip)->oqueue, bp, - n, TIME_INFINITE); -} - -static size_t reads(void *ip, uint8_t *bp, size_t n) { - - return chIQReadTimeout(&((SerialDriver *)ip)->iqueue, bp, - n, TIME_INFINITE); -} - -static bool_t putwouldblock(void *ip) { - - return chOQIsFull(&((SerialDriver *)ip)->oqueue); -} - -static bool_t getwouldblock(void *ip) { - - return chIQIsEmpty(&((SerialDriver *)ip)->iqueue); -} - -static msg_t putt(void *ip, uint8_t b, systime_t timeout) { - - return chOQPutTimeout(&((SerialDriver *)ip)->oqueue, b, timeout); -} - -static msg_t gett(void *ip, systime_t timeout) { - - return chIQGetTimeout(&((SerialDriver *)ip)->iqueue, timeout); -} - -static size_t writet(void *ip, const uint8_t *bp, size_t n, systime_t time) { - - return chOQWriteTimeout(&((SerialDriver *)ip)->oqueue, bp, n, time); -} - -static size_t readt(void *ip, uint8_t *bp, size_t n, systime_t time) { - - return chIQReadTimeout(&((SerialDriver *)ip)->iqueue, bp, n, time); -} - -static const struct SerialDriverVMT vmt = { - writes, reads, putwouldblock, getwouldblock, putt, gett, writet, readt -}; - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver initialization. - */ -void sdInit(void) { - - sd_lld_init(); -} - -/** - * @brief Initializes a generic full duplex driver object. - * @details The HW dependent part of the initialization has to be performed - * outside, usually in the hardware initialization code. - * - * @param[out] sdp pointer to a @p SerialDriver structure - * @param[in] inotify pointer to a callback function that is invoked when - * some data is read from the Queue. The value can be - * @p NULL. - * @param[in] onotify pointer to a callback function that is invoked when - * some data is written in the Queue. The value can be - * @p NULL. - */ -void sdObjectInit(SerialDriver *sdp, qnotify_t inotify, qnotify_t onotify) { - - sdp->vmt = &vmt; - chEvtInit(&sdp->ievent); - chEvtInit(&sdp->oevent); - chEvtInit(&sdp->sevent); - sdp->state = SD_STOP; - sdp->flags = SD_NO_ERROR; - chIQInit(&sdp->iqueue, sdp->ib, SERIAL_BUFFERS_SIZE, inotify); - chOQInit(&sdp->oqueue, sdp->ob, SERIAL_BUFFERS_SIZE, onotify); -} - -/** - * @brief Configures and starts the driver. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sdStart(SerialDriver *sdp, const SerialConfig *config) { - - chDbgCheck(sdp != NULL, "sdStart"); - - chSysLock(); - chDbgAssert((sdp->state == SD_STOP) || (sdp->state == SD_READY), - "sdStart(), #1", - "invalid state"); - sd_lld_start(sdp, config); - sdp->state = SD_READY; - chSysUnlock(); -} - -/** - * @brief Stops the driver. - * @details Any thread waiting on the driver's queues will be awakened with - * the message @p Q_RESET. - * - * @param[in] sdp pointer to a @p SerialDrive object - */ -void sdStop(SerialDriver *sdp) { - - chDbgCheck(sdp != NULL, "sdStop"); - - chSysLock(); - chDbgAssert((sdp->state == SD_STOP) || (sdp->state == SD_READY), - "sdStop(), #1", - "invalid state"); - sd_lld_stop(sdp); - sdp->state = SD_STOP; - chOQResetI(&sdp->oqueue); - chIQResetI(&sdp->iqueue); - chSchRescheduleS(); - chSysUnlock(); -} - -/** - * @brief Handles incoming data. - * @details This function must be called from the input interrupt service - * routine in order to enqueue incoming data and generate the - * related events. - * @note The incoming data event is only generated when the input queue - * becomes non-empty. - * @note In order to gain some performance it is suggested to not use - * this function directly but copy this code directly into the - * interrupt service routine. - * - * @param[in] sdp pointer to a @p SerialDriver structure - * @param[in] b the byte to be written in the driver's Input Queue - */ -void sdIncomingDataI(SerialDriver *sdp, uint8_t b) { - - chDbgCheck(sdp != NULL, "sdIncomingDataI"); - - if (chIQIsEmpty(&sdp->iqueue)) - chEvtBroadcastI(&sdp->ievent); - if (chIQPutI(&sdp->iqueue, b) < Q_OK) - sdAddFlagsI(sdp, SD_OVERRUN_ERROR); -} - -/** - * @brief Handles outgoing data. - * @details Must be called from the output interrupt service routine in order - * to get the next byte to be transmitted. - * @note In order to gain some performance it is suggested to not use - * this function directly but copy this code directly into the - * interrupt service routine. - * - * @param[in] sdp pointer to a @p SerialDriver structure - * @return The byte value read from the driver's output queue. - * @retval Q_EMPTY if the queue is empty (the lower driver usually - * disables the interrupt source when this happens). - */ -msg_t sdRequestDataI(SerialDriver *sdp) { - msg_t b; - - chDbgCheck(sdp != NULL, "sdRequestDataI"); - - b = chOQGetI(&sdp->oqueue); - if (b < Q_OK) - chEvtBroadcastI(&sdp->oevent); - return b; -} - -/** - * @brief Handles communication events/errors. - * @details Must be called from the I/O interrupt service routine in order to - * notify I/O conditions as errors, signals change etc. - * - * @param[in] sdp pointer to a @p SerialDriver structure - * @param[in] mask condition flags to be added to the mask - */ -void sdAddFlagsI(SerialDriver *sdp, sdflags_t mask) { - - chDbgCheck(sdp != NULL, "sdAddFlagsI"); - - sdp->flags |= mask; - chEvtBroadcastI(&sdp->sevent); -} - -/** - * @brief Returns and clears the errors mask associated to the driver. - * - * @param[in] sdp pointer to a @p SerialDriver structure - * @return The condition flags modified since last time this - * function was invoked. - */ -sdflags_t sdGetAndClearFlags(SerialDriver *sdp) { - sdflags_t mask; - - chDbgCheck(sdp != NULL, "sdGetAndClearFlags"); - - chSysLock(); - mask = sdp->flags; - sdp->flags = SD_NO_ERROR; - chSysUnlock(); - return mask; -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/src/spi.c b/ChibiOS_2.0.8/os/hal/src/spi.c deleted file mode 100644 index f8121c7..0000000 --- a/ChibiOS_2.0.8/os/hal/src/spi.c +++ /dev/null @@ -1,284 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file spi.c - * @brief SPI Driver code. - * - * @addtogroup SPI - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SPI || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief SPI Driver initialization. - */ -void spiInit(void) { - - spi_lld_init(); -} - -/** - * @brief Initializes the standard part of a @p SPIDriver structure. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spiObjectInit(SPIDriver *spip) { - - spip->spd_state = SPI_STOP; -#if SPI_USE_MUTUAL_EXCLUSION -#if CH_USE_MUTEXES - chMtxInit(&spip->spd_mutex); -#else - chSemInit(&spip->spd_semaphore, 1); -#endif -#endif /* SPI_USE_MUTUAL_EXCLUSION */ - spip->spd_config = NULL; -} - -/** - * @brief Configures and activates the SPI peripheral. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] config pointer to the @p SPIConfig object - */ -void spiStart(SPIDriver *spip, const SPIConfig *config) { - - chDbgCheck((spip != NULL) && (config != NULL), "spiStart"); - - chSysLock(); - chDbgAssert((spip->spd_state == SPI_STOP) || (spip->spd_state == SPI_READY), - "spiStart(), #1", - "invalid state"); - spip->spd_config = config; - spi_lld_start(spip); - spip->spd_state = SPI_READY; - chSysUnlock(); -} - -/** - * @brief Deactivates the SPI peripheral. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spiStop(SPIDriver *spip) { - - chDbgCheck(spip != NULL, "spiStop"); - - chSysLock(); - chDbgAssert((spip->spd_state == SPI_STOP) || (spip->spd_state == SPI_READY), - "spiStop(), #1", - "invalid state"); - spi_lld_stop(spip); - spip->spd_state = SPI_STOP; - chSysUnlock(); -} - -/** - * @brief Asserts the slave select signal and prepares for transfers. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spiSelect(SPIDriver *spip) { - - chDbgCheck(spip != NULL, "spiSelect"); - - chSysLock(); - chDbgAssert((spip->spd_state == SPI_READY) || - (spip->spd_state == SPI_ACTIVE), - "spiSelect(), #1", - "not idle"); - spi_lld_select(spip); - spip->spd_state = SPI_ACTIVE; - chSysUnlock(); -} - -/** - * @brief Deasserts the slave select signal. - * @details The previously selected peripheral is unselected. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spiUnselect(SPIDriver *spip) { - - chDbgCheck(spip != NULL, "spiUnselect"); - - chSysLock(); - chDbgAssert((spip->spd_state == SPI_READY) || - (spip->spd_state == SPI_ACTIVE), - "spiUnselect(), #1", - "not locked"); - spi_lld_unselect(spip); - spip->spd_state = SPI_READY; - chSysUnlock(); -} - -/** - * @brief Ignores data on the SPI bus. - * @details This function transmits a series of idle words on the SPI bus and - * ignores the received data. This function can be invoked even - * when a slave select signal has not been yet asserted. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to be ignored - */ -void spiIgnore(SPIDriver *spip, size_t n) { - - chDbgCheck((spip != NULL) && (n > 0), "spiIgnore"); - chDbgAssert((spip->spd_state == SPI_READY) || (spip->spd_state == SPI_ACTIVE), - "spiIgnore(), #1", - "not active"); - - spi_lld_ignore(spip, n); -} - -/** - * @brief Exchanges data on the SPI bus. - * @details This function performs a simultaneous transmit/receive operation. - * @note The buffers are organized as uint8_t arrays for data sizes below - * or equal to 8 bits else it is organized as uint16_t arrays. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to be exchanged - * @param[in] txbuf the pointer to the transmit buffer - * @param[out] rxbuf the pointer to the receive buffer - */ -void spiExchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf) { - - chDbgCheck((spip != NULL) && (n > 0) && (rxbuf != NULL) && (txbuf != NULL), - "spiExchange"); - chDbgAssert(spip->spd_state == SPI_ACTIVE, - "spiExchange(), #1", - "not active"); - - spi_lld_exchange(spip, n, txbuf, rxbuf); -} - -/** - * @brief Sends data over the SPI bus. - * @note The buffers are organized as uint8_t arrays for data sizes below - * or equal to 8 bits else it is organized as uint16_t arrays. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to send - * @param[in] txbuf the pointer to the transmit buffer - */ -void spiSend(SPIDriver *spip, size_t n, const void *txbuf) { - - chDbgCheck((spip != NULL) && (n > 0) && (txbuf != NULL), - "spiSend"); - chDbgAssert(spip->spd_state == SPI_ACTIVE, - "spiSend(), #1", - "not active"); - - spi_lld_send(spip, n, txbuf); -} - -/** - * @brief Receives data from the SPI bus. - * @note The buffers are organized as uint8_t arrays for data sizes below - * or equal to 8 bits else it is organized as uint16_t arrays. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to receive - * @param[out] rxbuf the pointer to the receive buffer - */ -void spiReceive(SPIDriver *spip, size_t n, void *rxbuf) { - - chDbgCheck((spip != NULL) && (n > 0) && (rxbuf != NULL), - "spiReceive"); - chDbgAssert(spip->spd_state == SPI_ACTIVE, - "spiReceive(), #1", - "not active"); - - spi_lld_receive(spip, n, rxbuf); -} - -#if SPI_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__) -/** - * @brief Gains exclusive access to the SPI bus. - * @details This function tries to gain ownership to the SPI bus, if the bus - * is already being used then the invoking thread is queued. - * @note This function is only available when the @p SPI_USE_MUTUAL_EXCLUSION - * option is set to @p TRUE. - * - * @param[in] spip pointer to the @p SPIDriver object - * - */ -void spiAcquireBus(SPIDriver *spip) { - - chDbgCheck(spip != NULL, "spiAcquireBus"); - -#if CH_USE_MUTEXES - chMtxLock(&spip->spd_mutex); -#elif CH_USE_SEMAPHORES - chSemWait(&spip->spd_semaphore); -#endif -} - -/** - * @brief Releases exclusive access to the SPI bus. - * @note This function is only available when the @p SPI_USE_MUTUAL_EXCLUSION - * option is set to @p TRUE. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spiReleaseBus(SPIDriver *spip) { - - chDbgCheck(spip != NULL, "spiReleaseBus"); - -#if CH_USE_MUTEXES - (void)spip; - chMtxUnlock(); -#elif CH_USE_SEMAPHORES - chSemSignal(&spip->spd_semaphore); -#endif -} -#endif /* SPI_USE_MUTUAL_EXCLUSION */ - -#endif /* CH_HAL_USE_SPI */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/adc_lld.c b/ChibiOS_2.0.8/os/hal/templates/adc_lld.c deleted file mode 100644 index 8d8202e..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/adc_lld.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/adc_lld.c - * @brief ADC Driver subsystem low level driver source template. - * - * @addtogroup ADC_LLD - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_ADC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level ADC driver initialization. - */ -void adc_lld_init(void) { - -} - -/** - * @brief Configures and activates the ADC peripheral. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adc_lld_start(ADCDriver *adcp) { - - if (adcp->adc_state == ADC_STOP) { - /* Clock activation.*/ - } - /* Configuration.*/ -} - -/** - * @brief Deactivates the ADC peripheral. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adc_lld_stop(ADCDriver *adcp) { - -} - -/** - * @brief Starts an ADC conversion. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adc_lld_start_conversion(ADCDriver *adcp) { - -} - -/** - * @brief Stops an ongoing conversion. - * - * @param[in] adcp pointer to the @p ADCDriver object - */ -void adc_lld_stop_conversion(ADCDriver *adcp) { - -} - -#endif /* CH_HAL_USE_ADC */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/adc_lld.h b/ChibiOS_2.0.8/os/hal/templates/adc_lld.h deleted file mode 100644 index 47c0482..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/adc_lld.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/adc_lld.h - * @brief ADC Driver subsystem low level driver header template. - * - * @addtogroup ADC_LLD - * @{ - */ - -#ifndef _ADC_LLD_H_ -#define _ADC_LLD_H_ - -#if CH_HAL_USE_ADC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if !CH_USE_SEMAPHORES -#error "the ADC driver requires CH_USE_SEMAPHORES" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief ADC sample data type. - */ -typedef uint16_t adcsample_t; - -/** - * @brief Channels number in a conversion group. - */ -typedef uint16_t adc_channels_num_t; - -/** - * @brief ADC notification callback type. - * - * @param[in] buffer pointer to the most recent samples data - * @param[in] n number of buffer rows available starting from @p buffer - */ -typedef void (*adccallback_t)(adcsample_t *buffer, size_t n); - -/** - * @brief Conversion group configuration structure. - * @details This implementation-dependent structure describes a conversion - * operation. - */ -typedef struct { - /** - * @brief Enables the circular buffer mode for the group. - */ - bool_t acg_circular; - /** - * @brief Number of the analog channels belonging to the conversion group. - */ - adc_channels_num_t acg_num_channels; - /* End of the mandatory fields.*/ -} ADCConversionGroup; - -/** - * @brief Driver configuration structure. - * @note It could be empty on some architectures. - */ -typedef struct { - -} ADCConfig; - -/** - * @brief Structure representing an ADC driver. - */ -typedef struct { - /** - * @brief Driver state. - */ - adcstate_t ad_state; - /** - * @brief Current configuration data. - */ - const ADCConfig *ad_config; - /** - * @brief Synchronization semaphore. - */ - Semaphore ad_sem; - /** - * @brief Current callback function or @p NULL. - */ - adccallback_t ad_callback; - /** - * @brief Current samples buffer pointer or @p NULL. - */ - adcsample_t *ad_samples; - /** - * @brief Current samples buffer depth or @p 0. - */ - size_t ad_depth; - /** - * @brief Current conversion group pointer or @p NULL. - */ - const ADCConversionGroup *ad_grpp; - /* End of the mandatory fields.*/ -} ADCDriver; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void adc_lld_init(void); - void adc_lld_start(ADCDriver *adcp); - void adc_lld_stop(ADCDriver *adcp); - void adc_lld_start_conversion(ADCDriver *adcp); - void adc_lld_stop_conversion(ADCDriver *adcp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_ADC */ - -#endif /* _ADC_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/can_lld.c b/ChibiOS_2.0.8/os/hal/templates/can_lld.c deleted file mode 100644 index d258d09..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/can_lld.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/can_lld.c - * @brief CAN Driver subsystem low level driver source template. - * - * @addtogroup CAN_LLD - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_CAN || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level CAN driver initialization. - */ -void can_lld_init(void) { - -} - -/** - * @brief Configures and activates the CAN peripheral. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void can_lld_start(CANDriver *canp) { - -} - -/** - * @brief Deactivates the CAN peripheral. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void can_lld_stop(CANDriver *canp) { - - /* If in ready state then disables the CAN peripheral.*/ - if (canp->cd_state == CAN_READY) { - - } -} - - -/** - * @brief Determines whether a frame can be transmitted. - * - * @param[in] canp pointer to the @p CANDriver object - * @return The queue space availability. - * @retval FALSE no space in the transmit queue. - * @retval TRUE transmit slot available. - */ -bool_t can_lld_can_transmit(CANDriver *canp) { - - return FALSE; -} - -/** - * @brief Inserts a frame into the transmit queue. - * - * @param[in] canp pointer to the @p CANDriver object - * @param[in] ctfp pointer to the CAN frame to be transmitted - */ -void can_lld_transmit(CANDriver *canp, const CANTxFrame *ctfp) { - -} - -/** - * @brief Determines whether a frame has been received. - * - * @param[in] canp pointer to the @p CANDriver object - * @return The queue space availability. - * @retval FALSE no space in the transmit queue. - * @retval TRUE transmit slot available. - */ -bool_t can_lld_can_receive(CANDriver *canp) { - - return FALSE; -} - -/** - * @brief Receives a frame from the input queue. - * - * @param[in] canp pointer to the @p CANDriver object - * @param[out] crfp pointer to the buffer where the CAN frame is copied - */ -void can_lld_receive(CANDriver *canp, CANRxFrame *crfp) { - -} - -#if CAN_USE_SLEEP_MODE || defined(__DOXYGEN__) -/** - * @brief Enters the sleep mode. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void can_lld_sleep(CANDriver *canp) { - -} - -/** - * @brief Enforces leaving the sleep mode. - * - * @param[in] canp pointer to the @p CANDriver object - */ -void can_lld_wakeup(CANDriver *canp) { - -} -#endif /* CAN_USE_SLEEP_MODE */ - -#endif /* CH_HAL_USE_CAN */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/can_lld.h b/ChibiOS_2.0.8/os/hal/templates/can_lld.h deleted file mode 100644 index be8c46b..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/can_lld.h +++ /dev/null @@ -1,237 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/can_lld.h - * @brief CAN Driver subsystem low level driver header template. - * - * @addtogroup CAN_LLD - * @{ - */ - -#ifndef _CAN_LLD_H_ -#define _CAN_LLD_H_ - -#if CH_HAL_USE_CAN || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief This switch defines whether the driver implementation supports - * a low power switch mode with automatic an wakeup feature. - */ -#define CAN_SUPPORTS_SLEEP TRUE - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Sleep mode related APIs inclusion switch. - * @note This switch is enforced to @p FALSE if the driver implementation - * does not support the sleep mode. - */ -#if CAN_SUPPORTS_SLEEP || defined(__DOXYGEN__) -#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) -#define CAN_USE_SLEEP_MODE TRUE -#endif -#else /* !CAN_SUPPORTS_SLEEP */ -#define CAN_USE_SLEEP_MODE FALSE -#endif /* !CAN_SUPPORTS_SLEEP */ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -#if CAN_USE_SLEEP_MODE && !CAN_SUPPORTS_SLEEP -#error "CAN sleep mode not supported in this architecture" -#endif - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief CAN status flags. - */ -typedef uint32_t canstatus_t; - -/** - * @brief CAN transmission frame. - * @note Accessing the frame data as word16 or word32 is not portable - * because machine data endianness, it can be still useful for a - * quick filling. - */ -typedef struct { - struct { - uint8_t cf_DLC:4; /**< @brief Data length. */ - uint8_t cf_RTR:1; /**< @brief Frame type. */ - uint8_t cf_IDE:1; /**< @brief Identifier type. */ - }; - union { - struct { - uint32_t cf_SID:11; /**< @brief Standard identifier.*/ - }; - struct { - uint32_t cf_EID:29; /**< @brief Extended identifier.*/ - }; - }; - union { - uint8_t cf_data8[8]; /**< @brief Frame data. */ - uint16_t cf_data16[4]; /**< @brief Frame data. */ - uint32_t cf_data32[2]; /**< @brief Frame data. */ - }; -} CANTxFrame; - -/** - * @brief CAN received frame. - * @note Accessing the frame data as word16 or word32 is not portable - * because machine data endianness, it can be still useful for a - * quick filling. - */ -typedef struct { - struct { - uint8_t cf_DLC:4; /**< @brief Data length. */ - uint8_t cf_RTR:1; /**< @brief Frame type. */ - uint8_t cf_IDE:1; /**< @brief Identifier type. */ - }; - union { - struct { - uint32_t cf_SID:11; /**< @brief Standard identifier.*/ - }; - struct { - uint32_t cf_EID:29; /**< @brief Extended identifier.*/ - }; - }; - union { - uint8_t cf_data8[8]; /**< @brief Frame data. */ - uint16_t cf_data16[4]; /**< @brief Frame data. */ - uint32_t cf_data32[2]; /**< @brief Frame data. */ - }; -} CANRxFrame; - -/** - * @brief CAN filter. - * @note It could not be present on some architectures. - */ -typedef struct { -} CANFilter; - -/** - * @brief Driver configuration structure. - * @note It could be empty on some architectures. - */ -typedef struct { -} CANConfig; - -/** - * @brief Structure representing an CAN driver. - */ -typedef struct { - /** - * @brief Driver state. - */ - canstate_t cd_state; - /** - * @brief Current configuration data. - */ - const CANConfig *cd_config; - /** - * @brief Transmission queue semaphore. - */ - Semaphore cd_txsem; - /** - * @brief Receive queue semaphore. - */ - Semaphore cd_rxsem; - /** - * @brief One or more frames become available. - * @note After broadcasting this event it will not be broadcasted again - * until the received frames queue has been completely emptied. It - * is not broadcasted for each received frame. It is - * responsibility of the application to empty the queue by repeatedly - * invoking @p chReceive() when listening to this event. This behavior - * minimizes the interrupt served by the system because CAN traffic. - */ - EventSource cd_rxfull_event; - /** - * @brief One or more transmission slots become available. - */ - EventSource cd_txempty_event; - /** - * @brief A CAN bus error happened. - */ - EventSource cd_error_event; - /** - * @brief Error flags set when an error event is broadcasted. - */ - canstatus_t cd_status; -#if CAN_USE_SLEEP_MODE || defined (__DOXYGEN__) - /** - * @brief Entering sleep state event. - */ - EventSource cd_sleep_event; - /** - * @brief Exiting sleep state event. - */ - EventSource cd_wakeup_event; -#endif /* CAN_USE_SLEEP_MODE */ - /* End of the mandatory fields.*/ -} CANDriver; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void can_lld_init(void); - void can_lld_start(CANDriver *canp); - void can_lld_stop(CANDriver *canp); - bool_t can_lld_can_transmit(CANDriver *canp); - void can_lld_transmit(CANDriver *canp, const CANTxFrame *crfp); - bool_t can_lld_can_receive(CANDriver *canp); - void can_lld_receive(CANDriver *canp, CANRxFrame *ctfp); -#if CAN_USE_SLEEP_MODE - void can_lld_sleep(CANDriver *canp); - void can_lld_wakeup(CANDriver *canp); -#endif /* CAN_USE_SLEEP_MODE */ -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_CAN */ - -#endif /* _CAN_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/hal_lld.c b/ChibiOS_2.0.8/os/hal/templates/hal_lld.c deleted file mode 100644 index 75daefc..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/hal_lld.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/hal_lld.c - * @brief HAL Driver subsystem low level driver source template. - * - * @addtogroup HAL_LLD - * @{ - */ - -#include "ch.h" -#include "hal.h" - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level HAL driver initialization. - */ -void hal_lld_init(void) { - -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/hal_lld.h b/ChibiOS_2.0.8/os/hal/templates/hal_lld.h deleted file mode 100644 index aca705a..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/hal_lld.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/hal_lld.h - * @brief HAL subsystem low level driver header template. - * - * @addtogroup HAL_LLD - * @{ - */ - -#ifndef _HAL_LLD_H_ -#define _HAL_LLD_H_ - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/** - * @brief Platform name. - */ -#define PLATFORM_NAME "" - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void hal_lld_init(void); -#ifdef __cplusplus -} -#endif - -#endif /* _HAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/halconf.h b/ChibiOS_2.0.8/os/hal/templates/halconf.h deleted file mode 100644 index e06975d..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/halconf.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @details HAL configuration file, this file allows to enable or disable the - * various device drivers from your application. You may also use - * this file in order to override the device drivers default settings. - * - * @addtogroup HAL_CONF - * @{ - */ - -/* - * - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -/*#include "mcuconf.h"*/ - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC TRUE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN TRUE -#endif - -/* - * Default CAN settings overrides (uncomment to override). - */ -/*#define CAN_USE_SLEEP_MODE TRUE*/ - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC TRUE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM TRUE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI TRUE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI TRUE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/mac_lld.c b/ChibiOS_2.0.8/os/hal/templates/mac_lld.c deleted file mode 100644 index db5dbfb..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/mac_lld.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/mac_lld.c - * @brief MAC Driver subsystem low level driver source template. - * - * @addtogroup MAC_LLD - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_MAC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level MAC initialization. - */ -void mac_lld_init(void) { - -} - -/** - * @brief Low level MAC address setup. - * - * @param[in] macp pointer to the @p MACDriver object - * @param[in] p pointer to a six bytes buffer containing the MAC - * address. If this parameter is set to @p NULL then - * a system default MAC is used. - */ -void mac_lld_set_address(MACDriver *macp, const uint8_t *p) { - -} - -/** - * @brief Returns a transmission descriptor. - * @details One of the available transmission descriptors is locked and - * returned. - * - * @param[in] macp pointer to the @p MACDriver object - * @param[out] tdp pointer to a @p MACTransmitDescriptor structure - * @return The operation status. - * @retval RDY_OK a descriptor was obtained. - * @retval RDY_TIMEOUT descriptor not available. - */ -msg_t max_lld_get_transmit_descriptor(MACDriver *macp, - MACTransmitDescriptor *tdp) { - - return RDY_OK; -} - -/** - * @brief Writes to a transmit descriptor's stream. - * - * @param[in] tdp pointer to a @p MACTransmitDescriptor structure - * @param[in] buf pointer to the buffer containing the data to be - * written - * @param[in] size number of bytes to be written - * @return The number of bytes written into the descriptor's - * stream, this value can be less than the amount - * specified in the parameter @p size if the maximum - * frame size is reached. - */ -size_t mac_lld_write_transmit_descriptor(MACTransmitDescriptor *tdp, - uint8_t *buf, - size_t size) { - - return 0; -} - -/** - * @brief Releases a transmit descriptor and starts the transmission of the - * enqueued data as a single frame. - * - * @param[in] tdp pointer to a @p MACTransmitDescriptor structure - */ -void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp) { - -} - -/** - * @brief Returns a receive descriptor. - * - * @param[in] macp pointer to a @p MACDriver object - * @param[out] rdp pointer to a @p MACReceiveDescriptor structure - * @return The operation status. - * @retval RDY_OK a descriptor was obtained. - * @retval RDY_TIMEOUT descriptor not available. - */ -msg_t max_lld_get_receive_descriptor(MACDriver *macp, - MACReceiveDescriptor *rdp) { - - return RDY_OK; -} - -/** - * @brief Reads from a receive descriptor's stream. - * - * @param[in] rdp pointer to a @p MACReceiveDescriptor structure - * @param[in] buf pointer to a buffer that will receive the read data - * @param[in] size number of bytes to be read - * @return The number of bytes read from the descriptor's stream, - * this value can be less than the amount specified in - * the parameter @p size if there are no more bytes to read. - */ -size_t mac_lld_read_receive_descriptor(MACReceiveDescriptor *rdp, - uint8_t *buf, - size_t size) { - - return 0; -} - -/** - * @brief Releases a receive descriptor. - * @details The descriptor and its buffer are made available for more incoming - * frames. - * - * @param[in] rdp pointer to a @p MACReceiveDescriptor structure - */ -void mac_lld_release_receive_descriptor(MACReceiveDescriptor *rdp) { - -} - -/** - * @brief Updates and returns the link status. - * - * @param[in] macp pointer to a @p MACDriver object - * @return The link status. - * @retval TRUE if the link is active. - * @retval FALSE if the link is down. - */ -bool_t mac_lld_poll_link_status(MACDriver *macp) { - - return FALSE; -} - -#endif /* CH_HAL_USE_MAC */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/mac_lld.h b/ChibiOS_2.0.8/os/hal/templates/mac_lld.h deleted file mode 100644 index f691d47..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/mac_lld.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/mac_lld.h - * @brief MAC Driver subsystem low level driver header template. - * - * @addtogroup MAC_LLD - * @{ - */ - -#ifndef _MAC_LLD_H_ -#define _MAC_LLD_H_ - -#if CH_HAL_USE_MAC || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Number of available transmit buffers. - */ -#if !defined(MAC_TRANSMIT_BUFFERS) || defined(__DOXYGEN__) -#define MAC_TRANSMIT_BUFFERS 2 -#endif - -/** - * @brief Number of available receive buffers. - */ -#if !defined(MAC_RECEIVE_BUFFERS) || defined(__DOXYGEN__) -#define MAC_RECEIVE_BUFFERS 2 -#endif - -/** - * @brief Maximum supported frame size. - */ -#if !defined(MAC_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define MAC_BUFFERS_SIZE 1518 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Structure representing a MAC driver. - */ -typedef struct { - Semaphore md_tdsem; /**< Transmit semaphore. */ - Semaphore md_rdsem; /**< Receive semaphore. */ -#if CH_USE_EVENTS - EventSource md_rdevent; /**< Receive event source. */ -#endif - /* End of the mandatory fields.*/ -} MACDriver; - -/** - * @brief Structure representing a transmit descriptor. - */ -typedef struct { - size_t td_offset; /**< Current write offset. */ - size_t td_size; /**< Available space size. */ - /* End of the mandatory fields.*/ -} MACTransmitDescriptor; - -/** - * @brief Structure representing a receive descriptor. - */ -typedef struct { - size_t rd_offset; /**< Current read offset. */ - size_t rd_size; /**< Available data size. */ - /* End of the mandatory fields.*/ -} MACReceiveDescriptor; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void mac_lld_init(void); - void mac_lld_set_address(MACDriver *macp, const uint8_t *p); - msg_t max_lld_get_transmit_descriptor(MACDriver *macp, - MACTransmitDescriptor *tdp); - size_t mac_lld_write_transmit_descriptor(MACTransmitDescriptor *tdp, - uint8_t *buf, - size_t size); - void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp); - msg_t max_lld_get_receive_descriptor(MACDriver *macp, - MACReceiveDescriptor *rdp); - size_t mac_lld_read_receive_descriptor(MACReceiveDescriptor *rdp, - uint8_t *buf, - size_t size); - void mac_lld_release_receive_descriptor(MACReceiveDescriptor *rdp); - bool_t mac_lld_poll_link_status(MACDriver *macp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_MAC */ - -#endif /* _MAC_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/meta/driver.c b/ChibiOS_2.0.8/os/hal/templates/meta/driver.c deleted file mode 100644 index 554a247..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/meta/driver.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file xxx.c - * @brief XXX Driver code. - * - * @addtogroup XXX - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_XXX || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief XXX Driver initialization. - */ -void xxxInit(void) { - - xxx_lld_init(); -} - -/** - * @brief Initializes the standard part of a @p XXXDriver structure. - * - * @param[in] xxxp pointer to the @p XXXDriver object - */ -void xxxObjectInit(XXXDriver *xxxp) { - - xxxp->xxx_state = XXX_STOP; - xxxp->xxx_config = NULL; -} - -/** - * @brief Configures and activates the XXX peripheral. - * - * @param[in] xxxp pointer to the @p XXXDriver object - * @param[in] config pointer to the @p XXXConfig object - */ -void xxxStart(XXXDriver *xxxp, const XXXConfig *config) { - - chDbgCheck((xxxp != NULL) && (config != NULL), "xxxStart"); - - chSysLock(); - chDbgAssert((xxxp->xxx_state == XXX_STOP) || (xxxp->xxx_state == XXX_READY), - "xxxStart(), #1", - "invalid state"); - xxxp->xxx_config = config; - xxx_lld_start(xxxp); - xxxp->xxx_state = XXX_READY; - chSysUnlock(); -} - -/** - * @brief Deactivates the XXX peripheral. - * - * @param[in] xxxp pointer to the @p XXXDriver object - */ -void xxxStop(XXXDriver *xxxp) { - - chDbgCheck(xxxp != NULL, "xxxStop"); - - chSysLock(); - chDbgAssert((xxxp->xxx_state == XXX_STOP) || (xxxp->xxx_state == XXX_READY), - "xxxStop(), #1", - "invalid state"); - xxx_lld_stop(xxxp); - xxxp->xxx_state = XXX_STOP; - chSysUnlock(); -} - -#endif /* CH_HAL_USE_XXX */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/meta/driver.h b/ChibiOS_2.0.8/os/hal/templates/meta/driver.h deleted file mode 100644 index 1661c15..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/meta/driver.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file xxx.h - * @brief XXX Driver macros and structures. - * - * @addtogroup XXX - * @{ - */ - -#ifndef _XXX_H_ -#define _XXX_H_ - -#if CH_HAL_USE_XXX || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver state machine possible states. - */ -typedef enum { - XXX_UNINIT = 0, /**< @brief Not initialized. */ - XXX_STOP = 1, /**< @brief Stopped. */ - XXX_READY = 2, /**< @brief Ready. */ -} xxxstate_t; - -#include "xxx_lld.h" - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void xxxInit(void); - void xxxObjectInit(XXXDriver *xxxp); - void xxxStart(XXXDriver *xxxp, const XXXConfig *config); - void xxxStop(XXXDriver *xxxp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_XXX */ - -#endif /* _XXX_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/meta/driver_lld.c b/ChibiOS_2.0.8/os/hal/templates/meta/driver_lld.c deleted file mode 100644 index 4af3d8d..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/meta/driver_lld.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/xxx_lld.c - * @brief XXX Driver subsystem low level driver source template. - * - * @addtogroup XXX_LLD - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_XXX || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level XXX driver initialization. - */ -void xxx_lld_init(void) { - -} - -/** - * @brief Configures and activates the XXX peripheral. - * - * @param[in] xxxp pointer to the @p XXXDriver object - */ -void xxx_lld_start(XXXDriver *xxxp) { - - if (xxxp->xxx_state == XXX_STOP) { - /* Clock activation.*/ - } - /* Configuration.*/ -} - -/** - * @brief Deactivates the XXX peripheral. - * - * @param[in] xxxp pointer to the @p XXXDriver object - */ -void xxx_lld_stop(XXXDriver *xxxp) { - -} - -#endif /* CH_HAL_USE_XXX */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/meta/driver_lld.h b/ChibiOS_2.0.8/os/hal/templates/meta/driver_lld.h deleted file mode 100644 index 8658ca5..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/meta/driver_lld.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/xxx_lld.h - * @brief XXX Driver subsystem low level driver header template. - * - * @addtogroup XXX_LLD - * @{ - */ - -#ifndef _XXX_LLD_H_ -#define _XXX_LLD_H_ - -#if CH_HAL_USE_XXX || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver configuration structure. - * @note It could be empty on some architectures. - */ -typedef struct { - -} XXXConfig; - -/** - * @brief Structure representing an XXX driver. - */ -typedef struct { - /** - * @brief Driver state. - */ - xxxstate_t xxx_state; - /** - * @brief Current configuration data. - */ - const XXXConfig *xxx_config; - /* End of the mandatory fields.*/ -} XXXDriver; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void xxx_lld_init(void); - void xxx_lld_start(XXXDriver *xxxp); - void xxx_lld_stop(XXXDriver *xxxp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_XXX */ - -#endif /* _XXX_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/pal_lld.c b/ChibiOS_2.0.8/os/hal/templates/pal_lld.c deleted file mode 100644 index 5ed57e5..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/pal_lld.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/pal_lld.c - * @brief PAL subsystem low level driver template. - * - * @addtogroup PAL_LLD - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -#endif /* CH_HAL_USE_PAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/pal_lld.h b/ChibiOS_2.0.8/os/hal/templates/pal_lld.h deleted file mode 100644 index 81b6ac8..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/pal_lld.h +++ /dev/null @@ -1,320 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/pal_lld.h - * @brief PAL subsystem low level driver header template. - * - * @addtogroup PAL_LLD - * @{ - */ - -#ifndef _PAL_LLD_H_ -#define _PAL_LLD_H_ - -#if CH_HAL_USE_PAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Unsupported modes and specific modes */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* I/O Ports Types and constants. */ -/*===========================================================================*/ - -/** - * @brief Generic I/O ports static initializer. - * @details An instance of this structure must be passed to @p palInit() at - * system startup time in order to initialized the digital I/O - * subsystem. This represents only the initial setup, specific pads - * or whole ports can be reprogrammed at later time. - * @note This structure content is architecture dependent. The nome should - * be changed to include the architecture name following this - * pattern:
      - * - [ARCH][CELL]Config. - * . - * As example:
      - * - MSP430DIOConfig. - * . - */ -typedef struct { - -} GenericConfig; - -/** - * @brief Width, in bits, of an I/O port. - */ -#define PAL_IOPORTS_WIDTH 32 - -/** - * @brief Whole port mask. - * @brief This macro specifies all the valid bits into a port. - */ -#define PAL_WHOLE_PORT ((ioportmask_t)0xFFFFFFFF) - -/** - * @brief Digital I/O port sized unsigned type. - */ -typedef uint32_t ioportmask_t; - -/** - * @brief Port Identifier. - * @details This type can be a scalar or some kind of pointer, do not make - * any assumption about it, use the provided macros when populating - * variables of this type. - */ -typedef uint32_t ioportid_t; - -/*===========================================================================*/ -/* I/O Ports Identifiers. */ -/*===========================================================================*/ - -/** - * @brief First I/O port identifier. - * @details Low level drivers can define multiple ports, it is suggested to - * use this naming convention. - */ -#define IOPORT1 0 - -/*===========================================================================*/ -/* Implementation, some of the following macros could be implemented as */ -/* functions, if so please put them in pal_lld.c. */ -/*===========================================================================*/ - -/** - * @brief Low level PAL subsystem initialization. - * - * @param[in] config architecture-dependent ports configuration - */ -#define pal_lld_init(config) - -/** - * @brief Reads the physical I/O port states. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The port bits. - */ -#define pal_lld_readport(port) - -/** - * @brief Reads the output latch. - * @details The purpose of this function is to read back the latched output - * value. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @return The latched logical states. - */ -#define pal_lld_readlatch(port) - -/** - * @brief Writes a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * - * @param[in] port port identifier - * @param[in] bits bits to be written on the specified port - */ -#define pal_lld_writeport(port, bits) - -/** - * @brief Sets a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] bits bits to be ORed on the specified port - */ -#define pal_lld_setport(port, bits) - -/** - * @brief Clears a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] bits bits to be cleared on the specified port - */ -#define pal_lld_clearport(port, bits) - -/** - * @brief Toggles a bits mask on a I/O port. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] bits bits to be XORed on the specified port - */ -#define pal_lld_toggleport(port, bits) - -/** - * @brief Reads a group of bits. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] offset group bit offset within the port - * @return The group logical states. - */ -#define pal_lld_readgroup(port, mask, offset) - -/** - * @brief Writes a group of bits. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] offset group bit offset within the port - * @param[in] bits bits to be written. Values exceeding the group width - * are masked. - */ -#define pal_lld_writegroup(port, mask, offset, bits) - -/** - * @brief Pads group mode setup. - * @details This function programs a pads group belonging to the same port - * with the specified mode. - * @note This function is not meant to be invoked directly by the - * application code. - * @note Programming an unknown or unsupported mode is silently ignored. - * - * @param[in] port port identifier - * @param[in] mask group mask - * @param[in] mode group mode - */ -#define pal_lld_setgroupmode(port, mask, mode) - -/** - * @brief Reads a logical state from an I/O pad. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - * @return The logical state. - * @retval PAL_LOW low logical state. - * @retval PAL_HIGH high logical state. - */ -#define pal_lld_readpad(port, pad) - -/** - * @brief Writes a logical state on an output pad. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - * @param[out] bit logical value, the value must be @p PAL_LOW or - * @p PAL_HIGH - */ -#define pal_lld_writepad(port, pad, bit) - -/** - * @brief Sets a pad logical state to @p PAL_HIGH. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - */ -#define pal_lld_setpad(port, pad) - -/** - * @brief Clears a pad logical state to @p PAL_LOW. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - */ -#define pal_lld_clearpad(port, pad) - -/** - * @brief Toggles a pad logical state. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - */ -#define pal_lld_togglepad(port, pad) - -/** - * @brief Pad mode setup. - * @details This function programs a pad with the specified mode. - * @note This function is not meant to be invoked directly by the - * application code. - * @note The @ref PAL provides a default software implementation of this - * functionality, implement this function if can optimize it by using - * special hardware functionalities or special coding. - * @note Programming an unknown or unsupported mode is silently ignored. - * - * @param[in] port port identifier - * @param[in] pad pad number within the port - * @param[in] mode pad mode - */ -#define pal_lld_setpadmode(port, pad, mode) - -#endif /* CH_HAL_USE_PAL */ - -#endif /* _PAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/pwm_lld.c b/ChibiOS_2.0.8/os/hal/templates/pwm_lld.c deleted file mode 100644 index 201ac3d..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/pwm_lld.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/pwm_lld.c - * @brief PWM Driver subsystem low level driver source template. - * - * @addtogroup PWM_LLD - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_PWM || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level PWM driver initialization. - */ -void pwm_lld_init(void) { - -} - -/** - * @brief Configures and activates the PWM peripheral. - * - * @param[in] pwmp pointer to the @p PWMDriver object - */ -void pwm_lld_start(PWMDriver *pwmp) { - - if (pwmp->pd_state == PWM_STOP) { - /* Clock activation.*/ - } - /* Configuration.*/ -} - -/** - * @brief Deactivates the PWM peripheral. - * - * @param[in] pwmp pointer to the @p PWMDriver object - */ -void pwm_lld_stop(PWMDriver *pwmp) { - -} - -/** - * @brief Determines whatever the PWM channel is already enabled. - * - * @param[in] pwmp pointer to the @p PWMDriver object - * @param[in] channel PWM channel identifier - * @return The PWM channel status. - * @retval FALSE the channel is not enabled. - * @retval TRUE the channel is enabled. - */ -bool_t pwm_lld_is_enabled(PWMDriver *pwmp, pwmchannel_t channel) { - - return FALSE; -} - -/** - * @brief Enables a PWM channel. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] channel PWM channel identifier (0...PWM_CHANNELS-1) - * @param[in] width PWM pulse width as clock pulses number - */ -void pwm_lld_enable_channel(PWMDriver *pwmp, - pwmchannel_t channel, - pwmcnt_t width) { - -} - -/** - * @brief Disables a PWM channel. - * @details The channel is disabled and its output line returned to the - * idle state. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] channel PWM channel identifier (0...PWM_CHANNELS-1) - */ -void pwm_lld_disable_channel(PWMDriver *pwmp, pwmchannel_t channel) { - -} - -#endif /* CH_HAL_USE_PWM */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/pwm_lld.h b/ChibiOS_2.0.8/os/hal/templates/pwm_lld.h deleted file mode 100644 index 8a5310c..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/pwm_lld.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/pwm_lld.h - * @brief PWM Driver subsystem low level driver header template. - * - * @addtogroup PWM_LLD - * @{ - */ - -#ifndef _PWM_LLD_H_ -#define _PWM_LLD_H_ - -#if CH_HAL_USE_PWM || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/** - * @brief Number of PWM channels per PWM driver. - */ -#if !defined(PWM_CHANNELS) || defined(__DOXYGEN__) -#define PWM_CHANNELS 1 -#endif - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief PWM channel type. - */ -typedef uint8_t pwmchannel_t; - -/** - * @brief PWM counter type. - */ -typedef uint16_t pwmcnt_t; - -/** - * @brief Type of a structure representing an PWM driver. - */ -typedef struct PWMDriver PWMDriver; - -/** - * @brief PWM notification callback type. - * - * @param[in] pwmp pointer to a @p PWMDriver object - */ -typedef void (*pwmcallback_t)(PWMDriver *pwmp); - -/** - * @brief PWM driver channel configuration structure. - * @note Some architectures may not be able to support the channel mode - * or the callback, in this case the fields are ignored. - */ -typedef struct { - /** - * @brief Channel active logic level. - */ - pwmmode_t pcc_mode; - /** - * @brief Channel callback pointer. - * @note This callback is invoked on the channel compare event. If set to - * @p NULL then the callback is disabled. - */ - pwmcallback_t pcc_callback; - /* End of the mandatory fields.*/ -} PWMChannelConfig; - -/** - * @brief Driver configuration structure. - * @note Implementations may extend this structure to contain more, - * architecture dependent, fields. - */ -typedef struct { - /** - * @brief Periodic callback pointer. - * @note This callback is invoked on PWM counter reset. If set to - * @p NULL then the callback is disabled. - */ - pwmcallback_t pc_callback; - /** - * @brief Channels configurations. - */ - PWMChannelConfig pc_channels[PWM_CHANNELS]; - /* End of the mandatory fields.*/ -} PWMConfig; - -/** - * @brief Structure representing an PWM driver. - * @note Implementations may extend this structure to contain more, - * architecture dependent, fields. - */ -struct PWMDriver { - /** - * @brief Driver state. - */ - pwmstate_t pd_state; - /** - * @brief Current configuration data. - */ - const PWMConfig *pd_config; -#if defined(PWM_DRIVER_EXT_FIELDS) - PWM_DRIVER_EXT_FIELDS -#endif - /* End of the mandatory fields.*/ -}; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/** - * @brief Converts from fraction to pulse width. - * @note Be careful with rounding errors, this is integer math not magic. - * You can specify tenths of thousandth but make sure you have the - * proper hardware resolution by carefully choosing the clock source - * and prescaler settings, see @p PWM_COMPUTE_PSC. - * - * @param[in] numerator numerator of the fraction - * @param[in] denominator percentage as an integer between 0 and numerator - * @return The pulse width to be passed to @p pwmEnableChannel(). - * - * @api - */ -#define PWM_FRACTION_TO_WIDTH(pwmp, numerator, denominator) 0 - -/** - * @brief Converts from degrees to pulse width. - * @note Be careful with rounding errors, this is integer math not magic. - * You can specify hundredths of degrees but make sure you have the - * proper hardware resolution by carefully choosing the clock source - * and prescaler settings, see @p PWM_COMPUTE_PSC. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] degrees degrees as an integer between 0 and 36000 - * @return The pulse width to be passed to @p pwmEnableChannel(). - * - * @api - */ -#define PWM_DEGREES_TO_WIDTH(pwmp, degrees) \ - PWM_FRACTION_TO_WIDTH(pwmp, 36000, degrees) - -/** - * @brief Converts from percentage to pulse width. - * @note Be careful with rounding errors, this is integer math not magic. - * You can specify tenths of thousandth but make sure you have the - * proper hardware resolution by carefully choosing the clock source - * and prescaler settings, see @p PWM_COMPUTE_PSC. - * - * @param[in] pwmp pointer to a @p PWMDriver object - * @param[in] percentage percentage as an integer between 0 and 10000 - * @return The pulse width to be passed to @p pwmEnableChannel(). - * - * @api - */ -#define PWM_PERCENTAGE_TO_WIDTH(pwmp, percentage) \ - PWM_FRACTION_TO_WIDTH(pwmp, 10000, percentage) - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void pwm_lld_init(void); - void pwm_lld_start(PWMDriver *pwmp); - void pwm_lld_stop(PWMDriver *pwmp); - bool_t pwm_lld_is_enabled(PWMDriver *pwmp, pwmchannel_t channel); - void pwm_lld_enable_channel(PWMDriver *pwmp, - pwmchannel_t channel, - pwmcnt_t width); - void pwm_lld_disable_channel(PWMDriver *pwmp, pwmchannel_t channel); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_PWM */ - -#endif /* _PWM_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/serial_lld.c b/ChibiOS_2.0.8/os/hal/templates/serial_lld.c deleted file mode 100644 index 0a2f736..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/serial_lld.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/serial_lld.c - * @brief Serial Driver subsystem low level driver source template. - * - * @addtogroup SERIAL_LLD - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/** - * @brief Driver default configuration. - */ -static const SerialConfig default_config = { -}; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level serial driver initialization. - */ -void sd_lld_init(void) { - -} - -/** - * @brief Low level serial driver configuration and (re)start. - * - * @param[in] sdp pointer to a @p SerialDriver object - * @param[in] config the architecture-dependent serial driver configuration. - * If this parameter is set to @p NULL then a default - * configuration is used. - */ -void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { - - if (config == NULL) - config = &default_config; - -} - -/** - * @brief Low level serial driver stop. - * @details De-initializes the USART, stops the associated clock, resets the - * interrupt vector. - * - * @param[in] sdp pointer to a @p SerialDriver object - */ -void sd_lld_stop(SerialDriver *sdp) { - -} - -#endif /* CH_HAL_USE_SERIAL */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/serial_lld.h b/ChibiOS_2.0.8/os/hal/templates/serial_lld.h deleted file mode 100644 index 9219970..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/serial_lld.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/serial_lld.h - * @brief Serial Driver subsystem low level driver header template. - * - * @addtogroup SERIAL_LLD - * @{ - */ - -#ifndef _SERIAL_LLD_H_ -#define _SERIAL_LLD_H_ - -#if CH_HAL_USE_SERIAL || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Serial Driver condition flags type. - */ -typedef uint8_t sdflags_t; - -/** - * @brief Generic Serial Driver configuration structure. - * @details An instance of this structure must be passed to @p sdStart() - * in order to configure and start a serial driver operations. - * @note This structure content is architecture dependent, each driver - * implementation defines its own version and the custom static - * initializers. - */ -typedef struct { - -} SerialConfig; - -/** - * @brief @p SerialDriver specific data. - */ -#define _serial_driver_data \ - _base_asynchronous_channel_data \ - /* Driver state.*/ \ - sdstate_t state; \ - /* Input queue.*/ \ - InputQueue iqueue; \ - /* Output queue.*/ \ - OutputQueue oqueue; \ - /* Status Change @p EventSource.*/ \ - EventSource sevent; \ - /* I/O driver status flags.*/ \ - sdflags_t flags; \ - /* Input circular buffer.*/ \ - uint8_t ib[SERIAL_BUFFERS_SIZE]; \ - /* Output circular buffer.*/ \ - uint8_t ob[SERIAL_BUFFERS_SIZE]; \ - /* End of the mandatory fields.*/ - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void sd_lld_init(void); - void sd_lld_start(SerialDriver *sdp, const SerialConfig *config); - void sd_lld_stop(SerialDriver *sdp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SERIAL */ - -#endif /* _SERIAL_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/spi_lld.c b/ChibiOS_2.0.8/os/hal/templates/spi_lld.c deleted file mode 100644 index 5ca0314..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/spi_lld.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/spi_lld.c - * @brief SPI Driver subsystem low level driver source template. - * - * @addtogroup SPI_LLD - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#if CH_HAL_USE_SPI || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver interrupt handlers. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Low level SPI driver initialization. - */ -void spi_lld_init(void) { - -} - -/** - * @brief Configures and activates the SPI peripheral. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_start(SPIDriver *spip) { - - if (spip->spd_state == SPI_STOP) { - /* Clock activation.*/ - } - /* Configuration.*/ -} - -/** - * @brief Deactivates the SPI peripheral. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_stop(SPIDriver *spip) { - -} - -/** - * @brief Asserts the slave select signal and prepares for transfers. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_select(SPIDriver *spip) { - -} - -/** - * @brief Deasserts the slave select signal. - * @details The previously selected peripheral is unselected. - * - * @param[in] spip pointer to the @p SPIDriver object - */ -void spi_lld_unselect(SPIDriver *spip) { - -} - -/** - * @brief Ignores data on the SPI bus. - * @details This function transmits a series of idle words on the SPI bus and - * ignores the received data. This function can be invoked even - * when a slave select signal has not been yet asserted. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to be ignored - */ -void spi_lld_ignore(SPIDriver *spip, size_t n) { - -} - -/** - * @brief Exchanges data on the SPI bus. - * @details This function performs a simultaneous transmit/receive operation. - * @note The buffers are organized as uint8_t arrays for data sizes below or - * equal to 8 bits else it is organized as uint16_t arrays. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to be exchanged - * @param[in] txbuf the pointer to the transmit buffer - * @param[out] rxbuf the pointer to the receive buffer - */ -void spi_lld_exchange(SPIDriver *spip, size_t n, - const void *txbuf, void *rxbuf) { - -} - -/** - * @brief Sends data ever the SPI bus. - * @note The buffers are organized as uint8_t arrays for data sizes below or - * equal to 8 bits else it is organized as uint16_t arrays. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to send - * @param[in] txbuf the pointer to the transmit buffer - */ -void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { - -} - -/** - * @brief Receives data from the SPI bus. - * @note The buffers are organized as uint8_t arrays for data sizes below or - * equal to 8 bits else it is organized as uint16_t arrays. - * - * @param[in] spip pointer to the @p SPIDriver object - * @param[in] n number of words to receive - * @param[out] rxbuf the pointer to the receive buffer - */ -void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { - -} - -#endif /* CH_HAL_USE_SPI */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/hal/templates/spi_lld.h b/ChibiOS_2.0.8/os/hal/templates/spi_lld.h deleted file mode 100644 index 17a7e28..0000000 --- a/ChibiOS_2.0.8/os/hal/templates/spi_lld.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/spi_lld.h - * @brief SPI Driver subsystem low level driver header template. - * - * @addtogroup SPI_LLD - * @{ - */ - -#ifndef _SPI_LLD_H_ -#define _SPI_LLD_H_ - -#if CH_HAL_USE_SPI || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Driver configuration structure. - */ -typedef struct { - -} SPIConfig; - -/** - * @brief Structure representing a SPI driver. - */ -typedef struct { - /** - * @brief Driver state. - */ - spistate_t spd_state; -#if SPI_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__) -#if CH_USE_MUTEXES || defined(__DOXYGEN__) - /** - * @brief Mutex protecting the bus. - */ - Mutex spd_mutex; -#elif CH_USE_SEMAPHORES - Semaphore spd_semaphore; -#endif -#endif /* SPI_USE_MUTUAL_EXCLUSION */ - /** - * @brief Current configuration data. - */ - const SPIConfig *spd_config; - /* End of the mandatory fields.*/ -} SPIDriver; - -/*===========================================================================*/ -/* Driver macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void spi_lld_init(void); - void spi_lld_start(SPIDriver *spip); - void spi_lld_stop(SPIDriver *spip); - void spi_lld_select(SPIDriver *spip); - void spi_lld_unselect(SPIDriver *spip); - void spi_lld_ignore(SPIDriver *spip, size_t n); - void spi_lld_exchange(SPIDriver *spip, size_t n, - const void *txbuf, void *rxbuf); - void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf); - void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf); -#ifdef __cplusplus -} -#endif - -#endif /* CH_HAL_USE_SPI */ - -#endif /* _SPI_LLD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/ch.h b/ChibiOS_2.0.8/os/kernel/include/ch.h deleted file mode 100644 index 48e0af1..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/ch.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ch.h - * @brief ChibiOS/RT main include file. - * @details This header includes all the required kernel headers so it is the - * only kernel header you usually want to include in your application. - * - * @addtogroup kernel_info - * @details Kernel related info. - * @{ - */ - -#ifndef _CH_H_ -#define _CH_H_ - -/** - * @brief ChibiOS/RT identification macro. - */ -#define _CHIBIOS_RT_ - -/** - * @brief Kernel version string. - */ -#define CH_KERNEL_VERSION "2.0.8" - -/** - * @brief Kernel version major number. - */ -#define CH_KERNEL_MAJOR 2 - -/** - * @brief Kernel version minor number. - */ -#define CH_KERNEL_MINOR 0 - -/** - * @brief Kernel version patch number. - */ -#define CH_KERNEL_PATCH 8 - -/* - * Common values. - */ -#ifndef FALSE -#define FALSE 0 -#endif -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -#include "chconf.h" -#include "chtypes.h" -#include "chlists.h" -#include "chcore.h" -#include "chsys.h" -#include "chvt.h" -#include "chschd.h" -#include "chsem.h" -#include "chmtx.h" -#include "chcond.h" -#include "chevents.h" -#include "chmsg.h" -#include "chmboxes.h" -#include "chmemcore.h" -#include "chheap.h" -#include "chmempools.h" -#include "chthreads.h" -#include "chregistry.h" -#include "chinline.h" -#include "chqueues.h" -#include "chstreams.h" -#include "chioch.h" -#include "chdebug.h" - -#endif /* _CH_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chcond.h b/ChibiOS_2.0.8/os/kernel/include/chcond.h deleted file mode 100644 index 9022e1e..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chcond.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ -/* - Concepts and parts of this file are contributed by and Copyright (C) 2008 - of Leon Woestenberg. - */ - -/** - * @file chcond.h - * @brief Condition Variables macros and structures. - * - * @addtogroup condvars - * @{ - */ - -#ifndef _CHCOND_H_ -#define _CHCOND_H_ - -#if CH_USE_CONDVARS - -/* - * Module dependencies check. - */ -#if !CH_USE_MUTEXES -#error "CH_USE_CONDVARS requires CH_USE_MUTEXES" -#endif - -/** - * @brief CondVar structure. - */ -typedef struct CondVar { - ThreadsQueue c_queue; /**< @brief CondVar threads queue.*/ -} CondVar; - -#ifdef __cplusplus -extern "C" { -#endif - void chCondInit(CondVar *cp); - void chCondSignal(CondVar *cp); - void chCondSignalI(CondVar *cp); - void chCondBroadcast(CondVar *cp); - void chCondBroadcastI(CondVar *cp); - msg_t chCondWait(CondVar *cp); - msg_t chCondWaitS(CondVar *cp); -#if CH_USE_CONDVARS_TIMEOUT - msg_t chCondWaitTimeout(CondVar *cp, systime_t time); - msg_t chCondWaitTimeoutS(CondVar *cp, systime_t time); -#endif -#ifdef __cplusplus -} -#endif - -/** - * @brief Data part of a static condition variable initializer. - * @details This macro should be used when statically initializing a condition - * variable that is part of a bigger structure. - * - * @param[in] name the name of the condition variable - */ -#define _CONDVAR_DATA(name) {_THREADSQUEUE_DATA(name.c_queue)} - -/** - * @brief Static condition variable initializer. - * @details Statically initialized condition variables require no explicit - * initialization using @p chCondInit(). - * - * @param[in] name the name of the condition variable - */ -#define CONDVAR_DECL(name) CondVar name = _CONDVAR_DATA(name) - -#endif /* CH_USE_CONDVARS */ - -#endif /* _CHCOND_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chdebug.h b/ChibiOS_2.0.8/os/kernel/include/chdebug.h deleted file mode 100644 index cfa2719..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chdebug.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chdebug.h - * @brief Debug macros and structures. - * - * @addtogroup debug - * @{ - */ - -#ifndef _CHDEBUG_H_ -#define _CHDEBUG_H_ - -/** - * @brief Trace buffer entries. - */ -#ifndef TRACE_BUFFER_SIZE -#define TRACE_BUFFER_SIZE 64 -#endif - -/** - * @brief Fill value for thread stack area in debug mode. - */ -#ifndef STACK_FILL_VALUE -#define STACK_FILL_VALUE 0x55 -#endif - -/** - * @brief Fill value for thread area in debug mode. - * @note The chosen default value is 0xFF in order to make evident which - * thread fields were not initialized when inspecting the memory with - * a debugger. A uninitialized field is not an error in itself but it - * better to know it. - */ -#ifndef THREAD_FILL_VALUE -#define THREAD_FILL_VALUE 0xFF -#endif - -#if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__) -/** - * @brief Trace buffer record. - */ -typedef struct { - void *cse_wtobjp; /**< @brief Object where going to - sleep. */ - systime_t cse_time; /**< @brief Time of the switch - event. */ - uint16_t cse_state: 4; /**< @brief Switched out thread - state. */ - uint16_t cse_tid: 12; /**< @brief Switched in thread id. */ -} CtxSwcEvent; - -/** - * @brief Trace buffer header. - */ -typedef struct { - unsigned tb_size; /**< @brief Trace buffer size - (entries). */ - CtxSwcEvent *tb_ptr; /**< @brief Pointer to the ring buffer - front. */ - /** @brief Ring buffer.*/ - CtxSwcEvent tb_buffer[TRACE_BUFFER_SIZE]; -} TraceBuffer; -#endif /* CH_DBG_ENABLE_TRACE */ - -#define __QUOTE_THIS(p) #p - -#if CH_DBG_ENABLE_CHECKS -/** - * @brief Function parameter check. - * @details If the condition check fails then the kernel panics and halts. - * @note The condition is tested only if the @p CH_DBG_ENABLE_CHECKS switch - * is specified in @p chconf.h else the macro does nothing. - * - * @param[in] c the condition to be verified to be true - * @param[in] func the undecorated function name - */ -#define chDbgCheck(c, func) { \ - if (!(c)) \ - chDbgPanic(__QUOTE_THIS(func)"(), line "__QUOTE_THIS(__LINE__)); \ -} -#else /* !CH_DBG_ENABLE_CHECKS */ -#define chDbgCheck(c, func) { \ - (void)(c), (void)__QUOTE_THIS(func)"(), line "__QUOTE_THIS(__LINE__); \ -} -#endif /* !CH_DBG_ENABLE_CHECKS */ - -#if CH_DBG_ENABLE_ASSERTS -/** - * @brief Condition assertion. - * @details If the condition check fails then the kernel panics with the - * specified message and halts. - * @note The condition is tested only if the @p CH_DBG_ENABLE_ASSERTS switch - * is specified in @p chconf.h else the macro does nothing. - * @note The convention for the message is the following:
      - * @(), #@ - * @note The remark string is not currently used except for putting a - * comment in the code about the assertion. - * - * @param[in] c the condition to be verified to be true - * @param[in] m the text message - * @param[in] r a remark string - */ -#define chDbgAssert(c, m, r) { \ - if (!(c)) \ - chDbgPanic(m); \ -} -#else /* !CH_DBG_ENABLE_ASSERTS */ -#define chDbgAssert(c, m, r) {(void)(c);} -#endif /* !CH_DBG_ENABLE_ASSERTS */ - -#if !(CH_DBG_ENABLE_ASSERTS || \ - CH_DBG_ENABLE_CHECKS || \ - CH_DBG_ENABLE_STACK_CHECK) -/* When the debug features are disabled this function is replaced by an empty - macro.*/ -#define chDbgPanic(msg) {} -#endif - -#if !CH_DBG_ENABLE_TRACE -/* When the trace feature is disabled this function is replaced by an empty - macro.*/ -#define chDbgTrace(otp) {} -#endif - -#if !defined(__DOXYGEN__) -#ifdef __cplusplus -extern "C" { -#endif -#if CH_DBG_ENABLE_TRACE - extern TraceBuffer trace_buffer; - void trace_init(void); - void chDbgTrace(Thread *otp); -#endif -#if CH_DBG_ENABLE_ASSERTS || CH_DBG_ENABLE_CHECKS || CH_DBG_ENABLE_STACK_CHECK - extern char *panic_msg; - void chDbgPanic(char *msg); -#endif -#ifdef __cplusplus -} -#endif -#endif /* !defined(__DOXYGEN__) */ - -#endif /* _CHDEBUG_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chevents.h b/ChibiOS_2.0.8/os/kernel/include/chevents.h deleted file mode 100644 index 28c1312..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chevents.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chevents.h - * @brief Events macros and structures. - * - * @addtogroup events - * @{ - */ - -#ifndef _CHEVENTS_H_ -#define _CHEVENTS_H_ - -#if CH_USE_EVENTS - -typedef struct EventListener EventListener; - -/** - * @brief Event Listener structure. - */ -struct EventListener { - EventListener *el_next; /**< @brief Next Event Listener - registered on the Event - Source. */ - Thread *el_listener; /**< @brief Thread interested in the - Event Source. */ - eventmask_t el_mask; /**< @brief Event flags mask associated - by the thread to the Event - Source. */ -}; - -/** - * @brief Event Source structure. - */ -typedef struct EventSource { - EventListener *es_next; /**< @brief First Event Listener - registered on the Event - Source. */ -} EventSource; - -/** - * @brief Data part of a static event source initializer. - * @details This macro should be used when statically initializing an event - * source that is part of a bigger structure. - * @param name the name of the event source variable - */ -#define _EVENTSOURCE_DATA(name) {(void *)(&name)} - -/** - * @brief Static event source initializer. - * @details Statically initialized event sources require no explicit - * initialization using @p chEvtInit(). - * - * @param name the name of the event source variable - */ -#define EVENTSOURCE_DECL(name) EventSource name = _EVENTSOURCE_DATA(name) - -/** All events allowed mask.*/ -#define ALL_EVENTS ((eventmask_t)-1) - -/** Returns the event mask from the event identifier.*/ -#define EVENT_MASK(eid) ((eventmask_t)(1 << (eid))) - -/** - * @brief Registers an Event Listener on an Event Source. - * @note Multiple Event Listeners can use the same event identifier, the - * listener will share the callback function. - * - * @param[in] esp pointer to the @p EventSource structure - * @param[out] elp pointer to the @p EventListener structure - * @param[in] eid numeric identifier assigned to the Event Listener. The - * identifier is used as index for the event callback - * function. - * The value must range between zero and the size, in bit, - * of the @p eventid_t type minus one. - */ -#define chEvtRegister(esp, elp, eid) chEvtRegisterMask(esp, elp, EVENT_MASK(eid)) - -/** - * @brief Initializes an Event Source. - * @note Can be used with interrupts disabled or enabled. - * - * @param[in] esp pointer to the @p EventSource structure - */ -#define chEvtInit(esp) \ - ((esp)->es_next = (EventListener *)(void *)(esp)) - -/** - * @brief Verifies if there is at least one @p EventListener registered. - * @note Can be called with interrupts disabled or enabled. - * - * @param[in] esp pointer to the @p EventSource structure - */ -#define chEvtIsListening(esp) \ - ((void *)(esp) != (void *)(esp)->es_next) - -/** - * @brief Event Handler callback function. - */ -typedef void (*evhandler_t)(eventid_t); - -#ifdef __cplusplus -extern "C" { -#endif - void chEvtRegisterMask(EventSource *esp, - EventListener *elp, - eventmask_t mask); - void chEvtUnregister(EventSource *esp, EventListener *elp); - eventmask_t chEvtClear(eventmask_t mask); - eventmask_t chEvtPend(eventmask_t mask); - void chEvtSignal(Thread *tp, eventmask_t mask); - void chEvtSignalI(Thread *tp, eventmask_t mask); - void chEvtBroadcast(EventSource *esp); - void chEvtBroadcastI(EventSource *esp); - void chEvtDispatch(const evhandler_t *handlers, eventmask_t mask); -#if CH_OPTIMIZE_SPEED || !CH_USE_EVENTS_TIMEOUT - eventmask_t chEvtWaitOne(eventmask_t mask); - eventmask_t chEvtWaitAny(eventmask_t mask); - eventmask_t chEvtWaitAll(eventmask_t mask); -#endif -#if CH_USE_EVENTS_TIMEOUT - eventmask_t chEvtWaitOneTimeout(eventmask_t mask, systime_t time); - eventmask_t chEvtWaitAnyTimeout(eventmask_t mask, systime_t time); - eventmask_t chEvtWaitAllTimeout(eventmask_t mask, systime_t time); -#endif -#ifdef __cplusplus -} -#endif - -#if !CH_OPTIMIZE_SPEED && CH_USE_EVENTS_TIMEOUT -#define chEvtWaitOne(mask) chEvtWaitOneTimeout(mask, TIME_INFINITE) -#define chEvtWaitAny(mask) chEvtWaitAnyTimeout(mask, TIME_INFINITE) -#define chEvtWaitAll(mask) chEvtWaitAllTimeout(mask, TIME_INFINITE) -#endif - -#endif /* CH_USE_EVENTS */ - -#endif /* _CHEVENTS_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chheap.h b/ChibiOS_2.0.8/os/kernel/include/chheap.h deleted file mode 100644 index 57ae4f2..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chheap.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chheap.h - * @brief Heaps macros and structures. - * - * @addtogroup heaps - * @{ - */ - -#ifndef _CHHEAP_H_ -#define _CHHEAP_H_ - -#if CH_USE_HEAP - -/* - * Module dependencies check. - */ -#if !CH_USE_MEMCORE && !CH_USE_MALLOC_HEAP -#error "CH_USE_HEAP requires CH_USE_MEMCORE or CH_USE_MALLOC_HEAP" -#endif - -#if !CH_USE_MUTEXES && !CH_USE_SEMAPHORES -#error "CH_USE_HEAP requires CH_USE_MUTEXES and/or CH_USE_SEMAPHORES" -#endif - -typedef struct memory_heap MemoryHeap; - -/** - * @brief Memory heap block header. - */ -union heap_header { - stkalign_t align; - struct { - union { - union heap_header *next; /**< @brief Next block in free list. */ - MemoryHeap *heap; /**< @brief Block owner heap. */ - } u; /**< @brief Overlapped fields. */ - size_t size; /**< @brief Size of the memory block. */ - } h; -}; - -/** - * @brief Structure describing a memory heap. - */ -struct memory_heap { - memgetfunc_t h_provider; /**< @brief Memory blocks provider for - this heap. */ - union heap_header h_free; /**< @brief Free blocks list header. */ -#if CH_USE_MUTEXES - Mutex h_mtx; /**< @brief Heap access mutex. */ -#else - Semaphore h_sem; /**< @brief Heap access semaphore. */ -#endif -}; - -#ifdef __cplusplus -extern "C" { -#endif - void heap_init(void); - void chHeapInit(MemoryHeap *heapp, void *buf, size_t size); - void *chHeapAlloc(MemoryHeap *heapp, size_t size); - void chHeapFree(void *p); - size_t chHeapStatus(MemoryHeap *heapp, size_t *sizep); -#ifdef __cplusplus -} -#endif - -#endif /* CH_USE_HEAP */ - -#endif /* _CHHEAP_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chinline.h b/ChibiOS_2.0.8/os/kernel/include/chinline.h deleted file mode 100644 index 14a9f6d..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chinline.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chinline.h - * @brief Kernel inlined functions. - * @details In this file there are a set of inlined functions if the - * @p CH_OPTIMIZE_SPEED is enabled. - */ - -#ifndef _CHINLINE_H_ -#define _CHINLINE_H_ - -/* If the performance code path has been chosen then all the following - functions are inlined into the various kernel modules.*/ -#if CH_OPTIMIZE_SPEED -static INLINE void prio_insert(Thread *tp, ThreadsQueue *tqp) { - - Thread *cp = (Thread *)tqp; - do { - cp = cp->p_next; - } while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio)); - tp->p_next = cp; - tp->p_prev = cp->p_prev; - tp->p_prev->p_next = cp->p_prev = tp; -} - -static INLINE void queue_insert(Thread *tp, ThreadsQueue *tqp) { - - tp->p_next = (Thread *)tqp; - tp->p_prev = tqp->p_prev; - tp->p_prev->p_next = tqp->p_prev = tp; -} - -static INLINE Thread *fifo_remove(ThreadsQueue *tqp) { - Thread *tp = tqp->p_next; - - (tqp->p_next = tp->p_next)->p_prev = (Thread *)tqp; - return tp; -} - -static INLINE Thread *lifo_remove(ThreadsQueue *tqp) { - Thread *tp = tqp->p_prev; - - (tqp->p_prev = tp->p_prev)->p_next = (Thread *)tqp; - return tp; -} - -static INLINE Thread *dequeue(Thread *tp) { - - tp->p_prev->p_next = tp->p_next; - tp->p_next->p_prev = tp->p_prev; - return tp; -} - -static INLINE void list_insert(Thread *tp, ThreadsList *tlp) { - - tp->p_next = tlp->p_next; - tlp->p_next = tp; -} - -static INLINE Thread *list_remove(ThreadsList *tlp) { - - Thread *tp = tlp->p_next; - tlp->p_next = tp->p_next; - return tp; -} -#endif /* CH_OPTIMIZE_SPEED */ - -#endif /* _CHINLINE_H_ */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chioch.h b/ChibiOS_2.0.8/os/kernel/include/chioch.h deleted file mode 100644 index 9bd4198..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chioch.h +++ /dev/null @@ -1,284 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chioch.h - * @brief I/O channels. - * @details This header defines abstract interfaces useful to access generic - * I/O resources in a standardized way. - * - * @addtogroup io_channels - * @details This module defines an abstract interface for I/O channels by - * extending the @p BaseSequentialStream interface. Note that no code - * is present, I/O channels are just abstract interface like - * structures, you should look at the systems as to a set of abstract - * C++ classes (even if written in C). Specific device drivers can - * use/extend the interface and implement them.
      - * This system has the advantage to make the access to channels - * independent from the implementation logic. - * @{ - */ - -#ifndef _CHIOCH_H_ -#define _CHIOCH_H_ - -/** - * @brief @p BaseChannel specific methods. - */ -#define _base_channel_methods \ - _base_sequential_stream_methods \ - /* Channel output check.*/ \ - bool_t (*putwouldblock)(void *instance); \ - /* Channel input check.*/ \ - bool_t (*getwouldblock)(void *instance); \ - /* Channel put method with timeout specification.*/ \ - msg_t (*put)(void *instance, uint8_t b, systime_t time); \ - /* Channel get method with timeout specification.*/ \ - msg_t (*get)(void *instance, systime_t time); \ - /* Channel write method with timeout specification.*/ \ - size_t (*writet)(void *instance, const uint8_t *bp, \ - size_t n, systime_t time); \ - /* Channel read method with timeout specification.*/ \ - size_t (*readt)(void *instance, uint8_t *bp, size_t n, systime_t time); - -/** - * @brief @p BaseChannel specific data. - * @note It is empty because @p BaseChannel is only an interface without - * implementation. - */ -#define _base_channel_data \ - _base_sequential_stream_data - -/** - * @brief @p BaseChannel virtual methods table. - */ -struct BaseChannelVMT { \ - _base_channel_methods \ -}; - -/** - * @extends BaseSequentialStream - * - * @brief Base channel class. - * @details This class represents a generic, byte-wide, I/O channel. This class - * introduces generic I/O primitives with timeout specification. - */ -typedef struct { - /** @brief Virtual Methods Table.*/ - const struct BaseChannelVMT *vmt; - _base_channel_data -} BaseChannel; - -/** - * @brief Channel output check. - * @details This function verifies if a subsequent put/write operation would - * block. - * - * @param[in] ip pointer to a @p BaseChannel or derived class - * @return The output queue status: - * @retval FALSE if the output queue has space and would not block a - * write operation. - * @retval TRUE if the output queue is full and would block a write - * operation. - */ -#define chIOPutWouldBlock(ip) ((ip)->vmt->putwouldblock(ip)) - -/** - * @brief Channel input check. - * @details This function verifies if a subsequent get/read operation would - * block. - * - * @param[in] ip pointer to a @p BaseChannel or derived class - * @return The input queue status: - * @retval FALSE if the input queue contains data and would not block a - * read operation. - * @retval TRUE if the input queue is empty and would block a read - * operation. - */ -#define chIOGetWouldBlock(ip) ((ip)->vmt->getwouldblock(ip)) - -/** - * @brief Channel blocking byte write. - * @details This function writes a byte value to a channel. If the channel - * is not ready to accept data then the calling thread is suspended. - * - * @param[in] ip pointer to a @p BaseChannel or derived class - * @param[in] b the byte value to be written to the channel - * @return The operation status: - * @retval Q_OK if the operation succeeded. - * @retval Q_RESET if the channel associated queue (if any) was reset. - */ -#define chIOPut(ip, b) ((ip)->vmt->put(ip, b, TIME_INFINITE)) - -/** - * @brief Channel blocking byte write with timeout. - * @details This function writes a byte value to a channel. If the channel - * is not ready to accept data then the calling thread is suspended. - * - * @param[in] ip pointer to a @p BaseChannel or derived class - * @param[in] b the byte value to be written to the channel - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation status: - * @retval Q_OK if the operation succeeded. - * @retval Q_TIMEOUT if the specified time expired. - * @retval Q_RESET if the channel associated queue (if any) was reset. - */ -#define chIOPutTimeout(ip, b, time) ((ip)->vmt->put(ip, b, time)) - -/** - * @brief Channel blocking byte read. - * @details This function reads a byte value from a channel. If the data - * is not available then the calling thread is suspended. - * - * @param[in] ip pointer to a @p BaseChannel or derived class - * @return A byte value from the queue or: - * @retval Q_RESET if the channel associated queue (if any) was reset. - */ -#define chIOGet(ip) ((ip)->vmt->get(ip, TIME_INFINITE)) - -/** - * @brief Channel blocking byte read with timeout. - * @details This function reads a byte value from a channel. If the data - * is not available then the calling thread is suspended. - * - * @param[in] ip pointer to a @p BaseChannel or derived class - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return A byte value from the queue or: - * @retval Q_TIMEOUT if the specified time expired. - * @retval Q_RESET if the channel associated queue (if any) was reset. - */ -#define chIOGetTimeout(ip, time) ((ip)->vmt->get(ip, time)) - -/** - * @brief Channel blocking write with timeout. - * @details The function writes data from a buffer to a channel. If the channel - * is not ready to accept data then the calling thread is suspended. - * - * @param[in] ip pointer to a @p BaseChannel or derived class - * @param[out] bp pointer to the data buffer - * @param[in] n the maximum amount of data to be transferred - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The number of bytes transferred. - */ -#define chIOWriteTimeout(ip, bp, n, time) \ - ((ip)->vmt->writet(ip, bp, n, time)) - -/** - * @brief Channel blocking read with timeout. - * @details The function reads data from a channel into a buffer. If the data - * is not available then the calling thread is suspended. - * - * @param[in] ip pointer to a @p BaseChannel or derived class - * @param[in] bp pointer to the data buffer - * @param[in] n the maximum amount of data to be transferred - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The number of bytes transferred. - */ -#define chIOReadTimeout(ip, bp, n, time) \ - ((ip)->vmt->readt(ip, bp, n, time)) - -#if CH_USE_EVENTS -/** - * @brief @p BaseAsynchronousChannel specific methods. - */ -#define _base_asynchronous_channel_methods \ - _base_channel_methods - -/** - * @brief @p BaseAsynchronousChannel specific data. - */ -#define _base_asynchronous_channel_data \ - _base_channel_data \ - /* Data Available EventSource.*/ \ - EventSource ievent; \ - /* Data Transmitted EventSource.*/ \ - EventSource oevent; - -/** - * @brief @p BaseAsynchronousChannel virtual methods table. - */ -struct BaseAsynchronousChannelVMT { - _base_asynchronous_channel_methods -}; - -/** - * @extends BaseChannel - * - * @brief Base asynchronous channel class. - * @details This class extends @p BaseChannel by adding event sources fields - * for asynchronous I/O for use in an event-driven environment. - */ -typedef struct { - /** @brief Virtual Methods Table.*/ - const struct BaseAsynchronousChannelVMT *vmt; - _base_asynchronous_channel_data -} BaseAsynchronousChannel; - -/** - * @brief Returns the write event source. - * @details The write event source is broadcasted when the channel is ready - * for write operations. This usually happens when the internal - * output queue becomes empty. - * - * @param[in] ip pointer to a @p BaseAsynchronousChannel or derived - * class - * @return A pointer to an @p EventSource object. - */ -#define chIOGetWriteEventSource(ip) (&((ip)->vmt->oevent)) - -/** - * @brief Returns the read event source. - * @details The read event source is broadcasted when the channel is ready - * for read operations. This usually happens when the internal - * input queue becomes non-empty. - * - * @param[in] ip pointer to a @p BaseAsynchronousChannel or derived - * class - * @return A pointer to an @p EventSource object. - */ -#define chIOGetReadEventSource(ip) (&((ip)->vmt->ievent)) - -#endif /* CH_USE_EVENTS */ - -#endif /* _CHIOCH_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chlists.h b/ChibiOS_2.0.8/os/kernel/include/chlists.h deleted file mode 100644 index 70a3451..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chlists.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chlists.h - * @brief Thread queues/lists macros and structures. - * @note All the macros present in this module, while public, are not - * an OS API and should not be directly used in the user applications - * code. - * - * @addtogroup internals - * @{ - */ - -#ifndef _CHLISTS_H_ -#define _CHLISTS_H_ - -typedef struct Thread Thread; - -/** - * @brief Threads queue initialization. - */ -#define queue_init(tqp) ((tqp)->p_next = (tqp)->p_prev = (Thread *)(tqp)); - -/** - * @brief Threads list initialization. - */ -#define list_init(tlp) ((tlp)->p_next = (Thread *)(tlp)) - -/** - * @brief Evaluates to @p TRUE if the specified threads queue or list is - * empty. - */ -#define isempty(p) ((p)->p_next == (Thread *)(p)) - -/** - * @brief Evaluates to @p TRUE if the specified threads queue or list is - * not empty. - */ -#define notempty(p) ((p)->p_next != (Thread *)(p)) - -/** - * @brief Data part of a static threads queue initializer. - * @details This macro should be used when statically initializing a threads - * queue that is part of a bigger structure. - * - * @param[in] name the name of the threads queue variable - */ -#define _THREADSQUEUE_DATA(name) {(Thread *)&name, (Thread *)&name} - -/** - * @brief Static threads queue initializer. - * @details Statically initialized threads queues require no explicit - * initialization using @p queue_init(). - * - * @param[in] name the name of the threads queue variable - */ -#define THREADSQUEUE_DECL(name) ThreadsQueue name = _THREADSQUEUE_DATA(name) - -/** - * @extends ThreadsList - * - * @brief Generic threads bidirectional linked list header and element. - */ -typedef struct { - Thread *p_next; /**< First @p Thread in the queue, or - @p ThreadQueue when empty. */ - Thread *p_prev; /**< Last @p Thread in the queue, or - @p ThreadQueue when empty. */ -} ThreadsQueue; - -/** - * @brief Generic threads single link list, it works like a stack. - */ -typedef struct { - - Thread *p_next; /**< Last pushed @p Thread on the stack - list, or pointer to itself if - empty. */ -} ThreadsList; - -#if !CH_OPTIMIZE_SPEED - -#ifdef __cplusplus -extern "C" { -#endif - void prio_insert(Thread *tp, ThreadsQueue *tqp); - void queue_insert(Thread *tp, ThreadsQueue *tqp); - Thread *fifo_remove(ThreadsQueue *tqp); - Thread *lifo_remove(ThreadsQueue *tqp); - Thread *dequeue(Thread *tp); - void list_insert(Thread *tp, ThreadsList *tlp); - Thread *list_remove(ThreadsList *tlp); -#ifdef __cplusplus -} -#endif - -#endif /* !CH_OPTIMIZE_SPEED */ - -#endif /* _CHLISTS_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chmboxes.h b/ChibiOS_2.0.8/os/kernel/include/chmboxes.h deleted file mode 100644 index d8e3d75..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chmboxes.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chmboxes.h - * @brief Mailboxes macros and structures. - * - * @addtogroup mailboxes - * @{ - */ - -#ifndef _CHMBOXES_H_ -#define _CHMBOXES_H_ - -#if CH_USE_MAILBOXES - -/* - * Module dependencies check. - */ -#if !CH_USE_SEMAPHORES -#error "CH_USE_MAILBOXES requires CH_USE_SEMAPHORES" -#endif - -typedef struct { - msg_t *mb_buffer; /**< @brief Pointer to the mailbox - buffer. */ - msg_t *mb_top; /**< @brief Pointer to the location - after the buffer. */ - msg_t *mb_wrptr; /**< @brief Write pointer. */ - msg_t *mb_rdptr; /**< @brief Read pointer. */ - Semaphore mb_fullsem; /**< @brief Full counter - @p Semaphore. */ - Semaphore mb_emptysem; /**< @brief Empty counter - @p Semaphore. */ -} Mailbox; - -#ifdef __cplusplus -extern "C" { -#endif - void chMBInit(Mailbox *mbp, msg_t *buf, cnt_t n); - void chMBReset(Mailbox *mbp); - msg_t chMBPost(Mailbox *mbp, msg_t msg, systime_t timeout); - msg_t chMBPostS(Mailbox *mbp, msg_t msg, systime_t timeout); - msg_t chMBPostAhead(Mailbox *mbp, msg_t msg, systime_t timeout); - msg_t chMBPostAheadS(Mailbox *mbp, msg_t msg, systime_t timeout); - msg_t chMBFetch(Mailbox *mbp, msg_t *msgp, systime_t timeout); - msg_t chMBFetchS(Mailbox *mbp, msg_t *msgp, systime_t timeout); -#ifdef __cplusplus -} -#endif - -/** - * @brief Returns the mailbox buffer size. - * - * @param[in] mbp the pointer to an initialized Mailbox object - */ -#define chMBSize(mbp) \ - ((mbp)->mb_top - (mbp)->mb_buffer) - -/** - * @brief Returns the free space into the mailbox. - * @note Can be invoked in any system state but if invoked out of a locked - * state then the returned value may change after reading. - * @note The returned value can be less than zero when there are waiting - * threads on the internal semaphore. - * - * @param[in] mbp the pointer to an initialized Mailbox object - * @return The number of empty message slots. - */ -#define chMBGetEmpty(mbp) chSemGetCounterI(&(mbp)->mb_emptysem) - -/** - * @brief Returns the number of messages into the mailbox. - * @note Can be invoked in any system state but if invoked out of a locked - * state then the returned value may change after reading. - * @note The returned value can be less than zero when there are waiting - * threads on the internal semaphore. - * - * @param[in] mbp the pointer to an initialized Mailbox object - * @return The number of queued messages. - */ -#define chMBGetFull(mbp) chSemGetCounterI(&(mbp)->mb_fullsem) - -/** - * @brief Returns the next message in the queue without removing it. - * @note A message must be waiting in the queue for this function to work or - * it would return garbage. The correct way to use this macro is to - * use @p chMBGetFull() and then use this macro, all within a lock - * state. - */ -#define chMBPeek(mbp) (*(mbp)->mb_rdptr) - -/** - * @brief Data part of a static mailbox initializer. - * @details This macro should be used when statically initializing a - * mailbox that is part of a bigger structure. - * - * @param[in] name the name of the mailbox variable - * @param[in] buffer pointer to the mailbox buffer area - * @param[in] size size of the mailbox buffer area - */ -#define _MAILBOX_DATA(name, buffer, size) { \ - (msg_t *)(buffer), \ - (msg_t *)(buffer) + size, \ - (msg_t *)(buffer), \ - (msg_t *)(buffer), \ - _SEMAPHORE_DATA(name.mb_fullsem, 0), \ - _SEMAPHORE_DATA(name.mb_emptysem, size), \ -} - -/** - * @brief Static mailbox initializer. - * @details Statically initialized mailboxes require no explicit - * initialization using @p chMBInit(). - * - * @param[in] name the name of the mailbox variable - * @param[in] buffer pointer to the mailbox buffer area - * @param[in] size size of the mailbox buffer area - */ -#define MAILBOX_DECL(name, buffer, size) \ - Mailbox name = _MAILBOX_DATA(name, buffer, size) - -#endif /* CH_USE_MAILBOXES */ - -#endif /* _CHMBOXES_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chmemcore.h b/ChibiOS_2.0.8/os/kernel/include/chmemcore.h deleted file mode 100644 index 7ec59c5..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chmemcore.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chmemcore.h - * @brief Core memory manager macros and structures. - * - * @addtogroup memcore - * @{ - */ - -#ifndef _CHMEMCORE_H_ -#define _CHMEMCORE_H_ - -/** - * @brief Memory get function. - * @note This type must be assignment compatible with the @p chMemAlloc() - * function. - */ -typedef void *(*memgetfunc_t)(size_t size); - -/** - * @brief Alignment mask constant. - */ -#define MEM_ALIGN_MASK (sizeof(stkalign_t) - 1) - -/** - * @brief Alignment helper macro. - */ -#define MEM_ALIGN_SIZE(p) (((size_t)(p) + MEM_ALIGN_MASK) & ~MEM_ALIGN_MASK) - -/** - * @brief Returns whatever a pointer or memory size is aligned to - * the type @p align_t. - */ -#define MEM_IS_ALIGNED(p) (((size_t)(p) & MEM_ALIGN_MASK) == 0) - -#if CH_USE_MEMCORE - -#ifdef __cplusplus -extern "C" { -#endif - void core_init(void); - void *chCoreAlloc(size_t size); - void *chCoreAllocI(size_t size); - size_t chCoreStatus(void); -#ifdef __cplusplus -} -#endif - -#endif /* CH_USE_MEMCORE */ - -#endif /* _CHMEMCORE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chmempools.h b/ChibiOS_2.0.8/os/kernel/include/chmempools.h deleted file mode 100644 index 1813f60..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chmempools.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chmempools.h - * @brief Memory Pools macros and structures. - * - * @addtogroup pools - * @{ - */ - -#ifndef _CHMEMPOOLS_H_ -#define _CHMEMPOOLS_H_ - -#if CH_USE_MEMPOOLS - -/** - * @brief Memory pool free object header. - */ -struct pool_header { - struct pool_header *ph_next; /**< @brief Pointer to the next pool - header in the list. */ -}; - -/** - * @brief Memory pool descriptor. - */ -typedef struct { - struct pool_header *mp_next; /**< @brief Pointer to the header. */ - size_t mp_object_size; /**< @brief Memory pool objects - size. */ - memgetfunc_t mp_provider; /**< @brief Memory blocks provider for - this pool. */ -} MemoryPool; - -/** - * @brief Data part of a static memory pool initializer. - * @details This macro should be used when statically initializing a - * memory pool that is part of a bigger structure. - * - * @param[in] name the name of the memory pool variable - * @param[in] size size of the memory pool contained objects - * @param[in] provider memory provider function for the memory pool - */ -#define _MEMORYPOOL_DATA(name, size, provider) \ - {NULL, MEM_ALIGN_SIZE(size), provider} - -/** - * @brief Static memory pool initializer in hungry mode. - * @details Statically initialized memory pools require no explicit - * initialization using @p chPoolInit(). - * - * @param[in] name the name of the memory pool variable - * @param[in] size size of the memory pool contained objects - * @param[in] provider memory provider function for the memory pool or @p NULL - * if the pool is not allowed to grow automatically - */ -#define MEMORYPOOL_DECL(name, size, provider) \ - MemoryPool name = _MEMORYPOOL_DATA(name, size, provider) - -#ifdef __cplusplus -extern "C" { -#endif - void chPoolInit(MemoryPool *mp, size_t size, memgetfunc_t provider); - void *chPoolAllocI(MemoryPool *mp); - void *chPoolAlloc(MemoryPool *mp); - void chPoolFreeI(MemoryPool *mp, void *objp); - void chPoolFree(MemoryPool *mp, void *objp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_USE_MEMPOOLS */ - -#endif /* _CHMEMPOOLS_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chmsg.h b/ChibiOS_2.0.8/os/kernel/include/chmsg.h deleted file mode 100644 index e4d4cdd..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chmsg.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chmsg.h - * @brief Messages macros and structures. - * - * @addtogroup messages - * @{ - */ - -#ifndef _CHMSG_H_ -#define _CHMSG_H_ - -#if CH_USE_MESSAGES - -/** - * @brief Evaluates to TRUE if the thread has pending messages. - */ -#define chMsgIsPendingI(tp) \ - ((tp)->p_msgqueue.p_next != (Thread *)&(tp)->p_msgqueue) - -/** - * @brief Returns the first message in the queue. - */ -#define chMsgGetI(tp) \ - ((tp)->p_msgqueue.p_next->p_msg) - -#ifdef __cplusplus -extern "C" { -#endif - msg_t chMsgSend(Thread *tp, msg_t msg); - msg_t chMsgWait(void); - msg_t chMsgGet(void); - void chMsgRelease(msg_t msg); -#ifdef __cplusplus -} -#endif - -#endif /* CH_USE_MESSAGES */ - -#endif /* _CHMSG_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chmtx.h b/ChibiOS_2.0.8/os/kernel/include/chmtx.h deleted file mode 100644 index 8f796ea..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chmtx.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chmtx.h - * @brief Mutexes macros and structures. - * - * @addtogroup mutexes - * @{ - */ - -#ifndef _CHMTX_H_ -#define _CHMTX_H_ - -#if CH_USE_MUTEXES - -/** - * @brief Mutex structure. - */ -typedef struct Mutex { - ThreadsQueue m_queue; /**< @brief Queue of the threads sleeping - on this Mutex. */ - Thread *m_owner; /**< @brief Owner @p Thread pointer or - @p NULL. */ - struct Mutex *m_next; /**< @brief Next @p Mutex into an - owner-list or @p NULL. */ -} Mutex; - -#ifdef __cplusplus -extern "C" { -#endif - void chMtxInit(Mutex *mp); - void chMtxLock(Mutex *mp); - void chMtxLockS(Mutex *mp); - bool_t chMtxTryLock(Mutex *mp); - bool_t chMtxTryLockS(Mutex *mp); - Mutex *chMtxUnlock(void); - Mutex *chMtxUnlockS(void); - void chMtxUnlockAll(void); -#ifdef __cplusplus -} -#endif - -/** - * @brief Data part of a static mutex initializer. - * @details This macro should be used when statically initializing a mutex - * that is part of a bigger structure. - * - * @param[in] name the name of the mutex variable - */ -#define _MUTEX_DATA(name) {_THREADSQUEUE_DATA(name.m_queue), NULL, NULL} - -/** - * @brief Static mutex initializer. - * @details Statically initialized mutexes require no explicit initialization - * using @p chMtxInit(). - * - * @param[in] name the name of the mutex variable - */ -#define MUTEX_DECL(name) Mutex name = _MUTEX_DATA(name) - -/** - * @brief Returns @p TRUE if the mutex queue contains at least a waiting - * thread. - */ -#define chMtxQueueNotEmptyS(mp) notempty(&(mp)->m_queue) - -#endif /* CH_USE_MUTEXES */ - -#endif /* _CHMTX_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chqueues.h b/ChibiOS_2.0.8/os/kernel/include/chqueues.h deleted file mode 100644 index 5056e51..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chqueues.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chqueues.h I/O - * @brief Queues macros and structures. - * - * @addtogroup io_queues - * @{ - */ - -#ifndef _CHQUEUES_H_ -#define _CHQUEUES_H_ - -#if CH_USE_QUEUES - -/* - * Module dependencies check. - */ -#if !CH_USE_SEMAPHORES -#error "CH_USE_QUEUES requires CH_USE_SEMAPHORES" -#endif - -/** @brief Queue notification callback type.*/ -typedef void (*qnotify_t)(void); - -/** @brief Returned by the queue functions if the operation is successful.*/ -#define Q_OK RDY_OK -/** @brief Returned by the queue functions if a timeout occurs.*/ -#define Q_TIMEOUT RDY_TIMEOUT -/** @brief Returned by the queue functions if the queue is reset.*/ -#define Q_RESET RDY_RESET -/** @brief Returned by the queue functions if the queue is empty.*/ -#define Q_EMPTY -3 -/** @brief Returned by the queue functions if the queue is full.*/ -#define Q_FULL -4 - -/** - * @brief Generic I/O queue structure. - * @details This structure represents a generic Input or Output asymmetrical - * queue. The queue is asymmetrical because one end is meant to be - * accessed from a thread context, and thus can be blocking, the other - * end is accessible from interrupt handlers or from within a kernel - * lock zone (see I-Locked and S-Locked states in - * @ref system_states) and is non-blocking. - */ -typedef struct { - uint8_t *q_buffer; /**< @brief Pointer to the queue buffer.*/ - uint8_t *q_top; /**< @brief Pointer to the first location - after the buffer. */ - uint8_t *q_wrptr; /**< @brief Write pointer. */ - uint8_t *q_rdptr; /**< @brief Read pointer. */ - Semaphore q_sem; /**< @brief Counter @p Semaphore. */ - qnotify_t q_notify; /**< @brief Data notification callback. */ -} GenericQueue; - -/** - * @brief Returns the queue's buffer size. - */ -#define chQSize(q) ((q)->q_top - (q)->q_buffer) - -/** - * @brief Queue space. - * @details Returns the used space if used on an Input Queue and the empty - * space if used on an Output Queue. - * @note The returned value can be less than zero when there are waiting - * threads on the internal semaphore. - */ -#define chQSpace(q) chSemGetCounterI(&(q)->q_sem) - -/** - * @extends GenericQueue - * - * @brief Input queue structure. - * @details This structure represents a generic asymmetrical input queue. - * Writing in the queue is non-blocking and can be performed from - * interrupt handlers or from within a kernel lock zone (see - * I-Locked and S-Locked states in @ref system_states). - * Reading the queue can be a blocking operation and is supposed to - * be performed by a system thread. - */ -typedef GenericQueue InputQueue; - -/** @brief Evaluates to @p TRUE if the specified Input Queue is empty.*/ -#define chIQIsEmpty(q) ((bool_t)(chQSpace(q) <= 0)) - -/** @brief Evaluates to @p TRUE if the specified Input Queue is full.*/ -#define chIQIsFull(q) ((bool_t)(chQSpace(q) >= chQSize(q))) - -/** - * @brief Input queue read. - * @details This function reads a byte value from an input queue. If the queue - * is empty then the calling thread is suspended until a byte arrives - * in the queue. - * - * @param[in] iqp pointer to an @p InputQueue structure - * @return A byte value from the queue or: - * @retval Q_RESET if the queue was reset. - */ -#define chIQGet(iqp) chIQGetTimeout(iqp, TIME_INFINITE) - -/** - * @brief Data part of a static input queue initializer. - * @details This macro should be used when statically initializing an - * input queue that is part of a bigger structure. - * - * @param[in] name the name of the input queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] inotify input notification callback pointer - */ -#define _INPUTQUEUE_DATA(name, buffer, size, inotify) { \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer) + size, \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer), \ - _SEMAPHORE_DATA(name.q_sem, 0), \ - inotify \ -} - -/** - * @brief Static input queue initializer. - * @details Statically initialized input queues require no explicit - * initialization using @p chIQInit(). - * - * @param[in] name the name of the input queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] inotify input notification callback pointer - */ -#define INPUTQUEUE_DECL(name, buffer, size, inotify) \ - InputQueue name = _INPUTQUEUE_DATA(name, buffer, size, inotify) - -/** - * @extends GenericQueue - * - * @brief Output queue structure. - * @details This structure represents a generic asymmetrical output queue. - * Reading from the queue is non-blocking and can be performed from - * interrupt handlers or from within a kernel lock zone (see - * I-Locked and S-Locked states in @ref system_states). - * Writing the queue can be a blocking operation and is supposed to - * be performed by a system thread. - */ -typedef GenericQueue OutputQueue; - -/** - * @brief Evaluates to @p TRUE if the specified Output Queue is empty. - */ -#define chOQIsEmpty(q) ((bool_t)(chQSpace(q) >= chQSize(q))) - -/** - * @brief Evaluates to @p TRUE if the specified Output Queue is full. - */ -#define chOQIsFull(q) ((bool_t)(chQSpace(q) <= 0)) - -/** - * @brief Output queue write. - * @details This function writes a byte value to an output queue. If the queue - * is full then the calling thread is suspended until there is space - * in the queue. - * - * @param[in] oqp pointer to an @p OutputQueue structure - * @param[in] b the byte value to be written in the queue - * @return The operation status: - * @retval Q_OK if the operation succeeded. - * @retval Q_RESET if the queue was reset. - */ -#define chOQPut(oqp, b) chOQPutTimeout(oqp, b, TIME_INFINITE) - -/** - * @brief Data part of a static output queue initializer. - * @details This macro should be used when statically initializing an - * output queue that is part of a bigger structure. - * - * @param[in] name the name of the output queue variable. - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] onotify output notification callback pointer - */ -#define _OUTPUTQUEUE_DATA(name, buffer, size, onotify) { \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer) + size, \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer), \ - _SEMAPHORE_DATA(name.q_sem, size), \ - onotify \ -} - -/** - * @brief Static output queue initializer. - * @details Statically initialized output queues require no explicit - * initialization using @p chOQInit(). - * - * @param[in] name the name of the output queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] onotify output notification callback pointer - */ -#define OUTPUTQUEUE_DECL(name, buffer, size, onotify) \ - InputQueue name = _OUTPUTQUEUE_DATA(name, buffer, size, onotify) - -#ifdef __cplusplus -extern "C" { -#endif - void chIQInit(InputQueue *qp, uint8_t *bp, size_t size, qnotify_t infy); - void chIQResetI(InputQueue *qp); - msg_t chIQPutI(InputQueue *qp, uint8_t b); - msg_t chIQGetTimeout(InputQueue *qp, systime_t time); - size_t chIQReadTimeout(InputQueue *qp, uint8_t *bp, - size_t n, systime_t time); - - void chOQInit(OutputQueue *queue, uint8_t *bp, size_t size, qnotify_t onfy); - void chOQResetI(OutputQueue *queue); - msg_t chOQPutTimeout(OutputQueue *queue, uint8_t b, systime_t time); - msg_t chOQGetI(OutputQueue *queue); - size_t chOQWriteTimeout(OutputQueue *queue, const uint8_t *bp, - size_t n, systime_t time); -#ifdef __cplusplus -} -#endif -#endif /* CH_USE_QUEUES */ - -#endif /* _CHQUEUES_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chregistry.h b/ChibiOS_2.0.8/os/kernel/include/chregistry.h deleted file mode 100644 index 38cf4ce..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chregistry.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chregistry.h - * @brief Threads registry macros and structures. - * - * @addtogroup registry - * @{ - */ - -#ifndef _CHREGISTRY_H_ -#define _CHREGISTRY_H_ - -#if CH_USE_REGISTRY - -/** - * @brief Removes a thread from the registry list. - * @note This macro is not meant for use in application code. - * - * @param[in] tp thread to remove from the registry - */ -#define REG_REMOVE(tp) { \ - (tp)->p_older->p_newer = (tp)->p_newer; \ - (tp)->p_newer->p_older = (tp)->p_older; \ -} - -/** - * @brief Adds a thread to the registry list. - * @note This macro is not meant for use in application code. - * - * @param[in] tp thread to add to the registry - */ -#define REG_INSERT(tp) { \ - (tp)->p_newer = (Thread *)&rlist; \ - (tp)->p_older = rlist.r_older; \ - (tp)->p_older->p_newer = rlist.r_older = (tp); \ -} - -#ifdef __cplusplus -extern "C" { -#endif - Thread *chRegFirstThread(void); - Thread *chRegNextThread(Thread *tp); -#ifdef __cplusplus -} -#endif - -#endif /* CH_USE_REGISTRY */ - -#endif /* _CHREGISTRY_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chschd.h b/ChibiOS_2.0.8/os/kernel/include/chschd.h deleted file mode 100644 index 8799520..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chschd.h +++ /dev/null @@ -1,190 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chschd.h - * @brief Scheduler macros and structures. - * - * @addtogroup scheduler - * @{ - */ - -#ifndef _CHSCHD_H_ -#define _CHSCHD_H_ - -/** @brief Default thread wakeup low level message.*/ -#define RDY_OK 0 -/** @brief Low level message sent to a thread awakened by a timeout.*/ -#define RDY_TIMEOUT -1 -/** @brief Low level message sent to a thread awakened by a reset operation.*/ -#define RDY_RESET -2 - -#define NOPRIO 0 /**< @brief Ready list header priority. */ -#define IDLEPRIO 1 /**< @brief Idle thread priority. */ -#define LOWPRIO 2 /**< @brief Lowest user priority. */ -#define NORMALPRIO 64 /**< @brief Normal user priority. */ -#define HIGHPRIO 127 /**< @brief Highest user priority. */ -#define ABSPRIO 255 /**< @brief Greatest possible priority. */ - -/** - * @brief Zero time specification for some syscalls with a timeout - * specification. - * @note Not all functions accept @p TIME_IMMEDIATE as timeout parameter, - * see the specific function documentation. - */ -#define TIME_IMMEDIATE ((systime_t)-1) - -/** - * @brief Infinite time specification for all the syscalls with a timeout - * specification. - */ -#define TIME_INFINITE ((systime_t)0) - -/** - * @brief Returns the priority of the first thread on the given ready list. - */ -#define firstprio(rlp) ((rlp)->p_next->p_prio) - -/** - * @extends ThreadsQueue - * - * @brief Ready list header. - */ -#if !defined(PORT_OPTIMIZED_READYLIST_STRUCT) || defined(__DOXYGEN__) -typedef struct { - ThreadsQueue r_queue; /**< @brief Threads queue. */ - tprio_t r_prio; /**< @brief This field must be - initialized to zero. */ - struct context r_ctx; /**< @brief Not used, present because - offsets. */ -#if CH_USE_REGISTRY - Thread *r_newer; /**< @brief Newer registry element. */ - Thread *r_older; /**< @brief Older registry element. */ -#endif - /* End of the fields shared with the Thread structure.*/ -#if CH_TIME_QUANTUM > 0 - cnt_t r_preempt; /**< @brief Round robin counter. */ -#endif -#ifndef CH_CURRP_REGISTER_CACHE - Thread *r_current; /**< @brief The currently running - thread. */ -#endif -} ReadyList; -#endif /* !defined(PORT_OPTIMIZED_READYLIST_STRUCT) */ - -#if !defined(PORT_OPTIMIZED_RLIST_EXT) && !defined(__DOXYGEN__) -extern ReadyList rlist; -#endif /* !defined(PORT_OPTIMIZED_RLIST_EXT) */ - -/** - * @brief Current thread pointer access macro. - * @note This macro is not meant to be used in the application code but - * only from within the kernel, use the @p chThdSelf() API instead. - * @note It is forbidden to use this macro in order to change the pointer - * (currp = something), use @p setcurrp() instead. - */ -#if !defined(PORT_OPTIMIZED_CURRP) || defined(__DOXYGEN__) -#if !defined(CH_CURRP_REGISTER_CACHE) || defined(__DOXYGEN__) -#define currp rlist.r_current -#else /* defined(CH_CURRP_REGISTER_CACHE) */ -register Thread *currp asm(CH_CURRP_REGISTER_CACHE); -#endif /* defined(CH_CURRP_REGISTER_CACHE) */ -#endif /* !defined(PORT_OPTIMIZED_CURRP) */ - -/** - * @brief Current thread pointer change macro. - * @note This macro is not meant to be used in the application code but - * only from within the kernel. - */ -#if !defined(PORT_OPTIMIZED_SETCURRP) || defined(__DOXYGEN__) -#define setcurrp(tp) (currp = (tp)) -#endif /* !defined(PORT_OPTIMIZED_SETCURRP) */ - -/* - * Scheduler APIs. - */ -#ifdef __cplusplus -extern "C" { -#endif - void scheduler_init(void); -#if !defined(PORT_OPTIMIZED_READYI) - Thread *chSchReadyI(Thread *tp); -#endif -#if !defined(PORT_OPTIMIZED_GOSLEEPS) - void chSchGoSleepS(tstate_t newstate); -#endif -#if !defined(PORT_OPTIMIZED_GOSLEEPTIMEOUTS) - msg_t chSchGoSleepTimeoutS(tstate_t newstate, systime_t time); -#endif -#if !defined(PORT_OPTIMIZED_WAKEUPS) - void chSchWakeupS(Thread *tp, msg_t msg); -#endif -#if !defined(PORT_OPTIMIZED_DORESCHEDULEI) - void chSchDoRescheduleI(void); -#endif -#if !defined(PORT_OPTIMIZED_RESCHEDULES) - void chSchRescheduleS(void); -#endif -#if !defined(PORT_OPTIMIZED_ISRESCHREQUIREDEXI) - bool_t chSchIsRescRequiredExI(void); -#endif -#ifdef __cplusplus -} -#endif - -/** - * @brief Determines if the current thread must reschedule. - * @details This function returns @p TRUE if there is a ready thread with - * higher priority. - */ -#if !defined(PORT_OPTIMIZED_ISRESCHREQUIREDI) || defined(__DOXYGEN__) -#define chSchIsRescRequiredI() (firstprio(&rlist.r_queue) > currp->p_prio) -#endif /* !defined(PORT_OPTIMIZED_ISRESCHREQUIREDI) */ - -/** - * @brief Determines if yielding is possible. - * @details This function returns @p TRUE if there is a ready thread with - * equal or higher priority. - */ -#if !defined(PORT_OPTIMIZED_CANYIELDS) || defined(__DOXYGEN__) -#define chSchCanYieldS() (firstprio(&rlist.r_queue) >= currp->p_prio) -#endif /* !defined(PORT_OPTIMIZED_CANYIELDS) */ - -/** - * @brief Yields the time slot. - * @details Yields the CPU control to the next thread in the ready list with - * equal or higher priority, if any. - */ -#if !defined(PORT_OPTIMIZED_DOYIELDS) || defined(__DOXYGEN__) -#define chSchDoYieldS() { \ - if (chSchCanYieldS()) \ - chSchDoRescheduleI(); \ -} -#endif /* !defined(PORT_OPTIMIZED_DOYIELDS) */ - -#endif /* _CHSCHD_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chsem.h b/ChibiOS_2.0.8/os/kernel/include/chsem.h deleted file mode 100644 index 1bc8320..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chsem.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chsem.h - * @brief Semaphores macros and structures. - * - * @addtogroup semaphores - * @{ - */ - -#ifndef _CHSEM_H_ -#define _CHSEM_H_ - -#if CH_USE_SEMAPHORES - -/** - * @brief Semaphore structure. - */ -typedef struct Semaphore { - ThreadsQueue s_queue; /**< @brief Queue of the threads sleeping - on this semaphore. */ - cnt_t s_cnt; /**< @brief The semaphore counter. */ -} Semaphore; - -#ifdef __cplusplus -extern "C" { -#endif - void chSemInit(Semaphore *sp, cnt_t n); - void chSemReset(Semaphore *sp, cnt_t n); - void chSemResetI(Semaphore *sp, cnt_t n); - msg_t chSemWait(Semaphore *sp); - msg_t chSemWaitS(Semaphore *sp); - msg_t chSemWaitTimeout(Semaphore *sp, systime_t time); - msg_t chSemWaitTimeoutS(Semaphore *sp, systime_t time); - void chSemSignal(Semaphore *sp); - void chSemSignalI(Semaphore *sp); -#if CH_USE_SEMSW - msg_t chSemSignalWait(Semaphore *sps, Semaphore *spw); -#endif -#ifdef __cplusplus -} -#endif - -/** - * @brief Data part of a static semaphore initializer. - * @details This macro should be used when statically initializing a semaphore - * that is part of a bigger structure. - * - * @param[in] name the name of the semaphore variable - * @param[in] n the counter initial value, this value must be - * non-negative - */ -#define _SEMAPHORE_DATA(name, n) {_THREADSQUEUE_DATA(name.s_queue), n} - -/** - * @brief Static semaphore initializer. - * @details Statically initialized semaphores require no explicit - * initialization using @p chSemInit(). - * - * @param[in] name the name of the semaphore variable - * @param[in] n the counter initial value, this value must be - * non-negative - */ -#define SEMAPHORE_DECL(name, n) Semaphore name = _SEMAPHORE_DATA(name, n) - -/** - * @brief Decreases the semaphore counter. - * @details This macro can be used when the counter is known to be positive. - */ -#define chSemFastWaitI(sp) ((sp)->s_cnt--) - -/** - * @brief Increases the semaphore counter. - * @details This macro can be used when the counter is known to be not negative. - */ -#define chSemFastSignalI(sp) ((sp)->s_cnt++) - -/** - * @brief Returns the semaphore counter current value. - */ -#define chSemGetCounterI(sp) ((sp)->s_cnt) - -#endif /* CH_USE_SEMAPHORES */ - -#endif /* _CHSEM_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chstreams.h b/ChibiOS_2.0.8/os/kernel/include/chstreams.h deleted file mode 100644 index a2d4c87..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chstreams.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chstreams.h - * @brief Data streams. - * @details This header defines abstract interfaces useful to access generic - * data streams in a standardized way. - * - * @addtogroup data_streams - * @details This module define an abstract interface for generic data streams. - * Note that no code is present, streams are just abstract interfaces - * like structures, you should look at the systems as to a set of - * abstract C++ classes (even if written in C). This system has the - * advantage to make the access to streams independent from the - * implementation logic.
      - * The stream interface can be used as base class for high level - * object types such as files, sockets, serial ports, pipes etc. - * @{ - */ - -#ifndef _CHSTREAMS_H_ -#define _CHSTREAMS_H_ - -/** - * @brief BaseSequentialStream specific methods. - */ -#define _base_sequential_stream_methods \ - /* Stream write buffer method.*/ \ - size_t (*write)(void *instance, const uint8_t *bp, size_t n); \ - /* Stream read buffer method.*/ \ - size_t (*read)(void *instance, uint8_t *bp, size_t n); - -/** - * @brief @p BaseSequentialStream specific data. - * @note It is empty because @p BaseSequentialStream is only an interface - * without implementation. - */ -#define _base_sequential_stream_data - -/** - * @brief @p BaseSequentialStream virtual methods table. - */ -struct BaseSequentialStreamVMT { - _base_sequential_stream_methods -}; - -/** - * @brief Base stream class. - * @details This class represents a generic blocking unbuffered sequential - * data stream. - */ -typedef struct { - /** @brief Virtual Methods Table.*/ - const struct BaseSequentialStreamVMT *vmt; - _base_sequential_stream_data -} BaseSequentialStream; - -/** - * @brief Sequential Stream write. - * @details The function writes data from a buffer to a stream. - * - * @param[in] ip pointer to a @p BaseSequentialStream or derived class - * @param[in] bp pointer to the data buffer - * @param[in] n the maximum amount of data to be transferred - * @return The number of bytes transferred. The return value can - * be less than the specified number of bytes if the - * stream reaches a physical end of file and cannot be - * extended. - */ -#define chSequentialStreamWrite(ip, bp, n) ((ip)->vmt->write(ip, bp, n)) - -/** - * @brief Sequential Stream read. - * @details The function reads data from a stream into a buffer. - * - * @param[in] ip pointer to a @p BaseSequentialStream or derived class - * @param[out] bp pointer to the data buffer - * @param[in] n the maximum amount of data to be transferred - * @return The number of bytes transferred. The return value can - * be less than the specified number of bytes if the - * stream reaches the end of the available data. - */ -#define chSequentialStreamRead(ip, bp, n) ((ip)->vmt->read(ip, bp, n)) - -#endif /* _CHSTREAMS_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chsys.h b/ChibiOS_2.0.8/os/kernel/include/chsys.h deleted file mode 100644 index 03fa0ed..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chsys.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chsys.h - * @brief System related macros and structures. - * - * @addtogroup system - * @{ - */ - -#ifndef _CHSYS_H_ -#define _CHSYS_H_ - -/** - * @brief Halts the system. - * @details This function is invoked by the operating system when an - * unrecoverable error is detected, as example because a programming - * error in the application code that triggers an assertion while - * in debug mode. - */ -#define chSysHalt() port_halt() - -/** - * @brief Performs a context switch. - * - * @param[in] ntp the thread to be switched in - * @param[in] otp the thread to be switched out - */ -#define chSysSwitchI(ntp, otp) port_switch(ntp, otp) - -/** - * @brief Raises the system interrupt priority mask to the maximum level. - * @details All the maskable interrupt sources are disabled regardless their - * hardware priority. - * @note The implementation is architecture dependent, it may just disable - * the interrupts or be exactly equivalent to @p chSysDisable(). - * @note Do not invoke this API from within a kernel lock. - */ -#define chSysDisable() port_disable() - -/** - * @brief Raises the system interrupt priority mask to system level. - * @details The interrupt sources that should not be able to preempt the kernel - * are disabled, interrupt sources with higher priority are still - * enabled. - * @note The implementation is architecture dependent, it may just disable - * the interrupts. - * @note Do not invoke this API from within a kernel lock. - * @note This API is no replacement for @p chSysLock(), the @p chSysLock() - * could do more than just disable the interrupts. - */ -#define chSysSuspend() port_suspend() - -/** - * @brief Lowers the system interrupt priority mask to user level. - * @details All the interrupt sources are enabled. - * @note The implementation is architecture dependent, it may just enable - * the interrupts. - * @note Do not invoke this API from within a kernel lock. - * @note This API is no replacement for @p chSysUnlock(), the - * @p chSysUnlock() could do more than just enable the interrupts. - */ -#define chSysEnable() port_enable() - -/** - * @brief Enters the kernel lock mode. - * @note The use of kernel lock mode is not recommended in the user code, - * it is a better idea to use the semaphores or mutexes instead. - * @see CH_USE_NESTED_LOCKS - */ -#if CH_USE_NESTED_LOCKS || defined(__DOXYGEN__) -#if CH_OPTIMIZE_SPEED || defined(__DOXYGEN__) -#define chSysLock() { \ - if (currp->p_locks++ == 0) \ - port_lock(); \ -} -#endif /* CH_OPTIMIZE_SPEED */ -#else /* !CH_USE_NESTED_LOCKS */ -#define chSysLock() port_lock() -#endif /* !CH_USE_NESTED_LOCKS */ - -/** - * @brief Leaves the kernel lock mode. - * @note The use of kernel lock mode is not recommended in the user code, - * it is a better idea to use the semaphores or mutexes instead. - * @see CH_USE_NESTED_LOCKS - */ -#if CH_USE_NESTED_LOCKS || defined(__DOXYGEN__) -#if CH_OPTIMIZE_SPEED || defined(__DOXYGEN__) -#define chSysUnlock() { \ - if (--currp->p_locks == 0) \ - port_unlock(); \ -} -#endif /* CH_OPTIMIZE_SPEED */ -#else /* !CH_USE_NESTED_LOCKS */ -#define chSysUnlock() port_unlock() -#endif /* !CH_USE_NESTED_LOCKS */ - -/** - * @brief Enters the kernel lock mode from within an interrupt handler. - * @note This API may do nothing on some architectures, it is required - * because on ports that support preemptable interrupt handlers - * it is required to raise the interrupt mask to the same level of - * the system mutual exclusion zone.
      - * It is good practice to invoke this API before invoking any I-class - * syscall from an interrupt handler. - * @note This API must be invoked exclusively from interrupt handlers. - */ -#define chSysLockFromIsr() port_lock_from_isr() - -/** - * @brief Leaves the kernel lock mode from within an interrupt handler. - * - * @note This API may do nothing on some architectures, it is required - * because on ports that support preemptable interrupt handlers - * it is required to raise the interrupt mask to the same level of - * the system mutual exclusion zone.
      - * It is good practice to invoke this API after invoking any I-class - * syscall from an interrupt handler. - * @note This API must be invoked exclusively from interrupt handlers. - */ -#define chSysUnlockFromIsr() port_unlock_from_isr() - -/** - * @brief IRQ handler enter code. - * @note Usually IRQ handlers functions are also declared naked. - * @note On some architectures this macro can be empty. - */ -#define CH_IRQ_PROLOGUE() PORT_IRQ_PROLOGUE() - -/** - * @brief IRQ handler exit code. - * @note Usually IRQ handlers function are also declared naked. - * @note This macro usually performs the final reschedule by using - * @p chSchRescRequiredI() and @p chSchDoRescheduleI(). - */ -#define CH_IRQ_EPILOGUE() PORT_IRQ_EPILOGUE() - -/** - * @brief Standard normal IRQ handler declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define CH_IRQ_HANDLER(id) PORT_IRQ_HANDLER(id) - -/** - * @brief Standard fast IRQ handler declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - * @note Not all architectures support fast interrupts. - */ -#define CH_FAST_IRQ_HANDLER(id) PORT_FAST_IRQ_HANDLER(id) - -#ifdef __cplusplus -extern "C" { -#endif - void chSysInit(void); - void chSysTimerHandlerI(void); -#if CH_USE_NESTED_LOCKS && !CH_OPTIMIZE_SPEED - void chSysLock(void); - void chSysUnlock(void); -#endif /* CH_USE_NESTED_LOCKS && !CH_OPTIMIZE_SPEED */ -#ifdef __cplusplus -} -#endif - -#endif /* _CHSYS_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chthreads.h b/ChibiOS_2.0.8/os/kernel/include/chthreads.h deleted file mode 100644 index 1ac6f48..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chthreads.h +++ /dev/null @@ -1,337 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chthreads.h - * @brief Threads macros and structures. - * - * @addtogroup threads - * @{ - */ - -#ifndef _CHTHREADS_H_ -#define _CHTHREADS_H_ - -/* - * Module dependencies check. - */ -#if CH_USE_DYNAMIC && !CH_USE_WAITEXIT -#error "CH_USE_DYNAMIC requires CH_USE_WAITEXIT" -#endif -#if CH_USE_DYNAMIC && !CH_USE_HEAP && !CH_USE_MEMPOOLS -#error "CH_USE_DYNAMIC requires CH_USE_HEAP and/or CH_USE_MEMPOOLS" -#endif - -/** - * @extends ThreadsQueue - * - * @brief Structure representing a thread. - * @note Not all the listed fields are always needed, by switching off some - * not needed ChibiOS/RT subsystems it is possible to save RAM space - * by shrinking the @p Thread structure. - */ -struct Thread { - Thread *p_next; /**< @brief Next in the list/queue. */ - /* End of the fields shared with the ThreadsList structure. */ - Thread *p_prev; /**< @brief Previous in the queue. */ - /* End of the fields shared with the ThreadsQueue structure. */ - tprio_t p_prio; /**< @brief Thread priority. */ - struct context p_ctx; /**< @brief Processor context. */ -#if CH_USE_REGISTRY - Thread *p_newer; /**< @brief Newer registry element. */ - Thread *p_older; /**< @brief Older registry element. */ -#endif - /* End of the fields shared with the ReadyList structure. */ - /** - * @brief Current thread state. - */ - tstate_t p_state; - /** - * @brief Various thread flags. - */ - tmode_t p_flags; -#if CH_USE_DYNAMIC - /** - * @brief References to this thread. - */ - trefs_t p_refs; -#endif -#if CH_USE_NESTED_LOCKS - /** - * @brief Number of nested locks. - */ - cnt_t p_locks; -#endif -#if CH_DBG_THREADS_PROFILING - /** - * @brief Thread consumed time in ticks. - * @note This field can overflow. - */ - volatile systime_t p_time; -#endif - /** - * @brief State-specific fields. - * @note All the fields declared in this union are only valid in the - * specified state or condition and are thus volatile. - */ - union { - /** - * @brief Thread wakeup code. - * @note This field contains the low level message sent to the thread - * by the waking thread or interrupt handler. The value is valid - * after exiting the @p chSchWakeupS() function. - */ - msg_t rdymsg; - /** - * @brief Thread exit code. - * @note The thread termination code is stored in this field in order - * to be retrieved by the thread performing a @p chThdWait() on - * this thread. - */ - msg_t exitcode; - /** - * @brief Pointer to a generic "wait" object. - * @note This field is used to get a generic pointer to a synchronization - * object and is valid when the thread is in one of the wait - * states. - */ - void *wtobjp; -#if CH_USE_EVENTS - /** - * @brief Enabled events mask. - * @note This field is only valied while the thread is in the - * @p THD_STATE_WTOREVT or @p THD_STATE_WTANDEVT states. - */ - eventmask_t ewmask; -#endif - } p_u; -#if CH_USE_WAITEXIT - /** - * @brief Termination waiting list. - */ - ThreadsList p_waiting; -#endif -#if CH_USE_MESSAGES - /** - * @brief Messages queue. - */ - ThreadsQueue p_msgqueue; - /** - * @brief Thread message. - */ - msg_t p_msg; -#endif -#if CH_USE_EVENTS - /** - * @brief Pending events mask. - */ - eventmask_t p_epending; -#endif -#if CH_USE_MUTEXES - /** - * @brief List of the mutexes owned by this thread. - * @note The list is terminated by a @p NULL in this field. - */ - Mutex *p_mtxlist; - /** - * @brief Thread's own, non-inherited, priority. - */ - tprio_t p_realprio; -#endif -#if CH_USE_DYNAMIC && CH_USE_MEMPOOLS - /** - * @brief Memory Pool where the thread workspace is returned. - */ - void *p_mpool; -#endif - /* Extra fields defined in chconf.h.*/ - THREAD_EXT_FIELDS -}; - -/** @brief Thread state: Ready to run, waiting on the ready list.*/ -#define THD_STATE_READY 0 -/** @brief Thread state: Currently running.*/ -#define THD_STATE_CURRENT 1 -/** @brief Thread state: Thread created in suspended state.*/ -#define THD_STATE_SUSPENDED 2 -/** @brief Thread state: Waiting on a semaphore.*/ -#define THD_STATE_WTSEM 3 -/** @brief Thread state: Waiting on a mutex.*/ -#define THD_STATE_WTMTX 4 -/** @brief Thread state: Waiting in @p chCondWait().*/ -#define THD_STATE_WTCOND 5 -/** @brief Thread state: Waiting in @p chThdSleep() or @p chThdSleepUntil().*/ -#define THD_STATE_SLEEPING 6 -/** @brief Thread state: Waiting in @p chThdWait().*/ -#define THD_STATE_WTEXIT 7 -/** @brief Thread state: Waiting in @p chEvtWaitXXX().*/ -#define THD_STATE_WTOREVT 8 -/** @brief Thread state: Waiting in @p chEvtWaitAllTimeout().*/ -#define THD_STATE_WTANDEVT 9 -/** @brief Thread state: Waiting in @p chMsgSend().*/ -#define THD_STATE_SNDMSG 10 -/** @brief Thread state: Waiting in @p chMsgWait().*/ -#define THD_STATE_WTMSG 11 -/** @brief Thread state: After termination.*/ -#define THD_STATE_FINAL 12 - -/* - * Various flags into the thread p_flags field. - */ -#define THD_MEM_MODE_MASK 3 /**< @brief Thread memory mode mask. */ -#define THD_MEM_MODE_STATIC 0 /**< @brief Thread memory mode: static. */ -#define THD_MEM_MODE_HEAP 1 /**< @brief Thread memory mode: heap. */ -#define THD_MEM_MODE_MEMPOOL 2 /**< @brief Thread memory mode: pool. */ -#define THD_TERMINATE 4 /**< @brief Termination requested. */ - -/** @brief Thread function.*/ -typedef msg_t (*tfunc_t)(void *); - -/* - * Threads APIs. - */ -#ifdef __cplusplus -extern "C" { -#endif - Thread *init_thread(Thread *tp, tprio_t prio); - Thread *chThdCreateI(void *wsp, size_t size, - tprio_t prio, tfunc_t pf, void *arg); - Thread *chThdCreateStatic(void *wsp, size_t size, - tprio_t prio, tfunc_t pf, void *arg); -#if CH_USE_DYNAMIC && CH_USE_WAITEXIT && CH_USE_HEAP - Thread *chThdCreateFromHeap(MemoryHeap *heapp, size_t size, - tprio_t prio, tfunc_t pf, void *arg); -#endif -#if CH_USE_DYNAMIC && CH_USE_WAITEXIT && CH_USE_MEMPOOLS - Thread *chThdCreateFromMemoryPool(MemoryPool *mp, tprio_t prio, - tfunc_t pf, void *arg); -#endif - tprio_t chThdSetPriority(tprio_t newprio); - Thread *chThdResume(Thread *tp); - void chThdTerminate(Thread *tp); - void chThdSleep(systime_t time); - void chThdSleepUntil(systime_t time); - void chThdYield(void); - void chThdExit(msg_t msg); -#if CH_USE_DYNAMIC - Thread *chThdAddRef(Thread *tp); - void chThdRelease(Thread *tp); -#endif -#if CH_USE_WAITEXIT - msg_t chThdWait(Thread *tp); -#endif -#ifdef __cplusplus -} -#endif - -/** - * @brief Returns a pointer to the current @p Thread. - */ -#define chThdSelf() currp - -/** - * @brief Returns the current thread priority. - */ -#define chThdGetPriority() (currp->p_prio) - -/** - * @brief Returns the pointer to the @p Thread local storage area, if any. - */ -#define chThdLS() (void *)(currp + 1) - -/** - * @brief Verifies if the specified thread is in the @p THD_STATE_FINAL state. - * - * @param[in] tp the pointer to the thread - * @retval TRUE thread terminated. - * @retval FALSE thread not terminated. - */ -#define chThdTerminated(tp) ((tp)->p_state == THD_STATE_FINAL) - -/** - * @brief Verifies if the current thread has a termination request pending. - * - * @retval TRUE termination request pended. - * @retval FALSE termination request not pended. - */ -#define chThdShouldTerminate() (currp->p_flags & THD_TERMINATE) - -/** - * @brief Resumes a thread created with @p chThdInit(). - * - * @param[in] tp the pointer to the thread - */ -#define chThdResumeI(tp) chSchReadyI(tp) - -/** - * @brief Suspends the invoking thread for the specified time. - * - * @param[in] time the delay in system ticks, the special values are - * handled as follow: - * - @a TIME_INFINITE the thread enters an infinite sleep - * state. - * - @a TIME_IMMEDIATE this value is accepted but - * interpreted as a normal time specification not as - * an immediate timeout specification. - * . - */ -#define chThdSleepS(time) chSchGoSleepTimeoutS(THD_STATE_SLEEPING, time) - -/** - * @brief Delays the invoking thread for the specified number of seconds. - * @note The specified time is rounded up to a value allowed by the real - * system clock. - * @note The maximum specified value is implementation dependent. - * - * @param[in] sec the time in seconds - */ -#define chThdSleepSeconds(sec) chThdSleep(S2ST(sec)) - -/** - * @brief Delays the invoking thread for the specified number of - * milliseconds. - * @note The specified time is rounded up to a value allowed by the real - * system clock. - * @note The maximum specified value is implementation dependent. - * - * @param[in] msec the time in milliseconds - */ -#define chThdSleepMilliseconds(msec) chThdSleep(MS2ST(msec)) - -/** - * @brief Delays the invoking thread for the specified number of - * microseconds. - * @note The specified time is rounded up to a value allowed by the real - * system clock. - * @note The maximum specified value is implementation dependent. - * - * @param[in] usec the time in microseconds - */ -#define chThdSleepMicroseconds(usec) chThdSleep(US2ST(usec)) - -#endif /* _CHTHREADS_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/include/chvt.h b/ChibiOS_2.0.8/os/kernel/include/chvt.h deleted file mode 100644 index d5ea133..0000000 --- a/ChibiOS_2.0.8/os/kernel/include/chvt.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chvt.h - * @brief Time macros and structures. - * - * @addtogroup time - * @{ - */ - -#ifndef _CHVT_H_ -#define _CHVT_H_ - -/** - * @brief Time conversion utility. - * @details Converts from seconds to system ticks number. - * @note The result is rounded upward to the next tick boundary. - */ -#define S2ST(sec) ((systime_t)((sec) * CH_FREQUENCY)) - -/** - * @brief Time conversion utility. - * @details Converts from milliseconds to system ticks number. - * @note The result is rounded upward to the next tick boundary. - */ -#define MS2ST(msec) ((systime_t)(((((msec) - 1L) * CH_FREQUENCY) / 1000L) + 1L)) - -/** - * @brief Time conversion utility. - * @details Converts from microseconds to system ticks number. - * @note The result is rounded upward to the next tick boundary. - */ -#define US2ST(usec) ((systime_t)(((((usec) - 1L) * CH_FREQUENCY) / 1000000L) + 1L)) - -/** - * @brief Virtual Timer callback function. - */ -typedef void (*vtfunc_t)(void *); - -/** - * @brief Virtual Timer structure type. - */ -typedef struct VirtualTimer VirtualTimer; - -/** - * @extends DeltaList - * - * @brief Virtual Timer descriptor structure. - */ -struct VirtualTimer { - VirtualTimer *vt_next; /**< @brief Next timer in the delta - list. */ - VirtualTimer *vt_prev; /**< @brief Previous timer in the delta - list. */ - systime_t vt_time; /**< @brief Time delta before timeout. */ - vtfunc_t vt_func; /**< @brief Timer callback function - pointer. */ - void *vt_par; /**< @brief Timer callback function - parameter. */ -}; - -/** - * @brief Virtual timers list header. - * @note The delta list is implemented as a double link bidirectional list - * in order to make the unlink time constant, the reset of a virtual - * timer is often used in the code. - */ -typedef struct { - VirtualTimer *vt_next; /**< @brief Next timer in the delta - list. */ - VirtualTimer *vt_prev; /**< @brief Last timer in the delta - list. */ - systime_t vt_time; /**< @brief Must be initialized to -1. */ - volatile systime_t vt_systime; /**< @brief System Time counter. */ -} VTList; - -extern VTList vtlist; - -/** - * @brief Virtual timers ticker. - */ -#define chVTDoTickI() { \ - vtlist.vt_systime++; \ - if (&vtlist != (VTList *)vtlist.vt_next) { \ - VirtualTimer *vtp; \ - \ - --vtlist.vt_next->vt_time; \ - while (!(vtp = vtlist.vt_next)->vt_time) { \ - vtfunc_t fn = vtp->vt_func; \ - vtp->vt_func = (vtfunc_t)NULL; \ - vtp->vt_next->vt_prev = (void *)&vtlist; \ - (&vtlist)->vt_next = vtp->vt_next; \ - fn(vtp->vt_par); \ - } \ - } \ -} - -/* - * Virtual Timers APIs. - */ -#ifdef __cplusplus -extern "C" { -#endif - void vt_init(void); - void chVTSetI(VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par); - void chVTResetI(VirtualTimer *vtp); - bool_t chTimeIsWithin(systime_t start, systime_t end); -#ifdef __cplusplus -} -#endif - -/** - * @brief Returns TRUE if the speciified timer is armed. - */ -#define chVTIsArmedI(vtp) ((vtp)->vt_func != NULL) - -/** - * @brief Current system time. - * @details Returns the number of system ticks since the @p chSysInit() - * invocation. - * @note The counter can reach its maximum and then restart from zero. - * @note This function is designed to work with the @p chThdSleepUntil(). - * - * @return The system time in ticks.r - */ -#define chTimeNow() (vtlist.vt_systime) - -#endif /* _CHVT_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/kernel.dox b/ChibiOS_2.0.8/os/kernel/kernel.dox deleted file mode 100644 index 2d351a4..0000000 --- a/ChibiOS_2.0.8/os/kernel/kernel.dox +++ /dev/null @@ -1,172 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup kernel Kernel - * @details The kernel is the portable part of ChibiOS/RT, this section - * documents the various kernel subsystems. - */ - -/** - * @defgroup kernel_info Version Numbers and Identification - * @ingroup kernel - */ - -/** - * @defgroup config Configuration - * @ingroup kernel - */ - -/** - * @defgroup types Types - * @ingroup kernel - */ - -/** - * @defgroup base Base Kernel Services - * @details Base kernel services, the base subsystems are always included in - * the OS builds. - * @ingroup kernel - */ - -/** - * @defgroup system System Management - * @ingroup base - */ - -/** - * @defgroup scheduler Scheduler - * @ingroup base - */ - -/** - * @defgroup threads Threads - * @ingroup base - */ - -/** - * @defgroup time Time and Virtual Timers - * @ingroup base - */ - -/** - * @defgroup synchronization Synchronization - * @details Synchronization services. - * @ingroup kernel - */ - -/** - * @defgroup semaphores Semaphores - * @ingroup synchronization - */ - -/** - * @defgroup mutexes Mutexes - * @ingroup synchronization - */ - -/** - * @defgroup condvars Condition Variables - * @ingroup synchronization - */ - -/** - * @defgroup events Event Flags - * @ingroup synchronization - */ - -/** - * @defgroup messages Synchronous Messages - * @ingroup synchronization - */ - -/** - * @defgroup mailboxes Mailboxes - * @ingroup synchronization - */ - -/** - * @defgroup memory Memory Management - * @details Memory Management services. - * @ingroup kernel - */ - -/** - * @defgroup memcore Core Memory Manager - * @ingroup memory - */ - -/** - * @defgroup heaps Heaps - * @ingroup memory - */ - -/** - * @defgroup pools Memory Pools - * @ingroup memory - */ - - /** - * @defgroup io_support I/O Support - * @details I/O related services. - * @ingroup kernel - */ - -/** - * @defgroup data_streams Data Streams - * @ingroup io_support - */ - -/** - * @defgroup io_channels I/O Channels - * @ingroup io_support - */ - -/** - * @defgroup io_queues I/O Queues - * @ingroup io_support - */ - -/** - * @defgroup registry Registry - * @ingroup kernel - */ - -/** - * @defgroup debug Debug - * @ingroup kernel - */ - -/** - * @defgroup core Port Templates - * @ingroup kernel - */ - -/** - * @defgroup internals Internals - * @ingroup kernel - */ - diff --git a/ChibiOS_2.0.8/os/kernel/kernel.mk b/ChibiOS_2.0.8/os/kernel/kernel.mk deleted file mode 100644 index 0cd1f94..0000000 --- a/ChibiOS_2.0.8/os/kernel/kernel.mk +++ /dev/null @@ -1,22 +0,0 @@ -# List of all the ChibiOS/RT kernel files, there is no need to remove the files -# from this list, you can disable parts of the kernel by editing chconf.h. -KERNSRC = ${CHIBIOS}/os/kernel/src/chsys.c \ - ${CHIBIOS}/os/kernel/src/chdebug.c \ - ${CHIBIOS}/os/kernel/src/chlists.c \ - ${CHIBIOS}/os/kernel/src/chvt.c \ - ${CHIBIOS}/os/kernel/src/chschd.c \ - ${CHIBIOS}/os/kernel/src/chthreads.c \ - ${CHIBIOS}/os/kernel/src/chregistry.c \ - ${CHIBIOS}/os/kernel/src/chsem.c \ - ${CHIBIOS}/os/kernel/src/chmtx.c \ - ${CHIBIOS}/os/kernel/src/chcond.c \ - ${CHIBIOS}/os/kernel/src/chevents.c \ - ${CHIBIOS}/os/kernel/src/chmsg.c \ - ${CHIBIOS}/os/kernel/src/chmboxes.c \ - ${CHIBIOS}/os/kernel/src/chqueues.c \ - ${CHIBIOS}/os/kernel/src/chmemcore.c \ - ${CHIBIOS}/os/kernel/src/chheap.c \ - ${CHIBIOS}/os/kernel/src/chmempools.c - -# Required include directories -KERNINC = ${CHIBIOS}/os/kernel/include diff --git a/ChibiOS_2.0.8/os/kernel/src/chcond.c b/ChibiOS_2.0.8/os/kernel/src/chcond.c deleted file mode 100644 index e1d32a3..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chcond.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ -/* - Concepts and parts of this file have been contributed by Leon Woestenberg. - */ - -/** - * @file chcond.c - * @brief Condition Variables code. - * - * @addtogroup condvars Condition Variables - * @details This module implements the Condition Variables mechanism. Condition - * variables are an extensions to the Mutex subsystem and cannot - * work alone. - *

      Operation mode

      - * The condition variable is a synchronization object meant to be - * used inside a zone protected by a @p Mutex. Mutexes and CondVars - * together can implement a Monitor construct.
      - * In order to use the Condition Variables APIs the @p CH_USE_CONDVARS - * option must be enabled in @p chconf.h. - * @{ - */ - -#include "ch.h" - -#if CH_USE_CONDVARS && CH_USE_MUTEXES - -/** - * @brief Initializes s @p CondVar structure. - * @note This function can be invoked from within an interrupt handler even - * if it is not an I-Class API because it does not touch any critical - * kernel data structure. - * - * @param[out] cp pointer to a @p CondVar structure - */ -void chCondInit(CondVar *cp) { - - chDbgCheck(cp != NULL, "chCondInit"); - - queue_init(&cp->c_queue); -} - -/** - * @brief Signals one thread that is waiting on the condition variable. - * - * @param[in] cp pointer to the @p CondVar structure - */ -void chCondSignal(CondVar *cp) { - - chDbgCheck(cp != NULL, "chCondSignal"); - - chSysLock(); - if (notempty(&cp->c_queue)) - chSchWakeupS(fifo_remove(&cp->c_queue), RDY_OK); - chSysUnlock(); -} - -/** - * @brief Signals one thread that is waiting on the condition variable. - * - * @param[in] cp pointer to the @p CondVar structure - */ -void chCondSignalI(CondVar *cp) { - - chDbgCheck(cp != NULL, "chCondSignalI"); - - if (notempty(&cp->c_queue)) - chSchReadyI(fifo_remove(&cp->c_queue))->p_u.rdymsg = RDY_OK; -} - -/** - * @brief Signals all threads that are waiting on the condition variable. - * - * @param[in] cp pointer to the @p CondVar structure - */ -void chCondBroadcast(CondVar *cp) { - - chSysLock(); - chCondBroadcastI(cp); - chSchRescheduleS(); - chSysUnlock(); -} - -/** - * @brief Signals all threads that are waiting on the condition variable. - * - * @param[in] cp pointer to the @p CondVar structure - */ -void chCondBroadcastI(CondVar *cp) { - - chDbgCheck(cp != NULL, "chCondBroadcastI"); - - /* Empties the condition variable queue and inserts all the Threads into the - ready list in FIFO order. The wakeup message is set to @p RDY_RESET in - order to make a chCondBroadcast() detectable from a chCondSignal().*/ - while (cp->c_queue.p_next != (void *)&cp->c_queue) - chSchReadyI(fifo_remove(&cp->c_queue))->p_u.rdymsg = RDY_RESET; -} - -/** - * @brief Waits on the condition variable releasing the mutex lock. - * @details Releases the currently owned mutex, waits on the condition - * variable, and finally acquires the mutex again. All the sequence - * is performed atomically. - * @note The invoking thread must have at least one owned mutex on - * entry. - * - * @param[in] cp pointer to the @p CondVar structure - * @return The wakep mode. - * @retval RDY_OK if the condvar was signaled using @p chCondSignal(). - * @retval RDY_RESET if the condvar was signaled using @p chCondBroadcast(). - */ -msg_t chCondWait(CondVar *cp) { - msg_t msg; - - chSysLock(); - msg = chCondWaitS(cp); - chSysUnlock(); - return msg; -} - -/** - * @brief Waits on the condition variable releasing the mutex lock. - * @details Releases the currently owned mutex, waits on the condition - * variable, and finally acquires the mutex again. All the sequence - * is performed atomically. - * @note The invoking thread must have at least one owned mutex on - * entry. - * - * @param[in] cp pointer to the @p CondVar structure - * @return The wakep mode. - * @retval RDY_OK if the condvar was signaled using @p chCondSignal(). - * @retval RDY_RESET if the condvar was signaled using @p chCondBroadcast(). - */ -msg_t chCondWaitS(CondVar *cp) { - Thread *ctp = currp; - Mutex *mp; - msg_t msg; - - chDbgCheck(cp != NULL, "chCondWaitS"); - chDbgAssert(ctp->p_mtxlist != NULL, - "chCondWaitS(), #1", - "not owning a mutex"); - - mp = chMtxUnlockS(); - ctp->p_u.wtobjp = cp; - prio_insert(ctp, &cp->c_queue); - chSchGoSleepS(THD_STATE_WTCOND); - msg = ctp->p_u.rdymsg; - chMtxLockS(mp); - return msg; -} - -#if CH_USE_CONDVARS_TIMEOUT -/** - * @brief Waits on the condition variable releasing the mutex lock. - * @details Releases the currently owned mutex, waits on the condition - * variable, and finally acquires the mutex again. All the sequence - * is performed atomically. - * @note The invoking thread must have at least one owned mutex on - * entry. - * @note Exiting the function because a timeout does not re-acquire the - * mutex, the mutex ownership is lost. - * - * @param[in] cp pointer to the @p CondVar structure - * @param[in] time the number of ticks before the operation timeouts, - * the special value @p TIME_INFINITE is allowed. - * It is not possible to specify zero @p TIME_IMMEDIATE - * as timeout specification because it would make no sense - * in this function. - * @return The wakep mode. - * @retval RDY_OK if the condvar was signaled using @p chCondSignal(). - * @retval RDY_RESET if the condvar was signaled using @p chCondBroadcast(). - * @retval RDY_TIMEOUT if the condvar was not signaled @p within the specified - * timeout. - */ -msg_t chCondWaitTimeout(CondVar *cp, systime_t time) { - msg_t msg; - - chSysLock(); - msg = chCondWaitTimeoutS(cp, time); - chSysUnlock(); - return msg; -} - -/** - * @brief Waits on the condition variable releasing the mutex lock. - * @details Releases the currently owned mutex, waits on the condition - * variable, and finally acquires the mutex again. All the sequence - * is performed atomically. - * @note The invoking thread must have at least one owned mutex on - * entry. - * @note Exiting the function because a timeout does not re-acquire the - * mutex, the mutex ownership is lost. - * - * @param[in] cp pointer to the @p CondVar structure - * @param[in] time the number of ticks before the operation timeouts, - * the special value @p TIME_INFINITE is allowed. - * It is not possible to specify zero @p TIME_IMMEDIATE - * as timeout specification because it would make no sense - * in this function. - * @return The wakep mode. - * @retval RDY_OK if the condvar was signaled using @p chCondSignal(). - * @retval RDY_RESET if the condvar was signaled using @p chCondBroadcast(). - * @retval RDY_TIMEOUT if the condvar was not signaled within the specified - * timeout. - */ -msg_t chCondWaitTimeoutS(CondVar *cp, systime_t time) { - Mutex *mp; - msg_t msg; - - chDbgCheck(cp != NULL, "chCondWaitTimeoutS"); - chDbgAssert(currp->p_mtxlist != NULL, - "chCondWaitTimeoutS(), #1", - "not owning a mutex"); - - mp = chMtxUnlockS(); - currp->p_u.wtobjp = cp; - prio_insert(currp, &cp->c_queue); - msg = chSchGoSleepTimeoutS(THD_STATE_WTCOND, time); - if (msg != RDY_TIMEOUT) - chMtxLockS(mp); - return msg; -} -#endif /* CH_USE_CONDVARS_TIMEOUT */ - -#endif /* CH_USE_CONDVARS && CH_USE_MUTEXES */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chdebug.c b/ChibiOS_2.0.8/os/kernel/src/chdebug.c deleted file mode 100644 index 2416375..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chdebug.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chdebug.c - * @brief ChibiOS/RT Debug code. - * - * @addtogroup debug - * @details Debug APIs and services: - * - Trace buffer. - * - Parameters check. - * - Kernel assertions. - * . - * @{ - */ - -#include "ch.h" - -#if CH_DBG_ENABLE_TRACE -/** - * @brief Public trace buffer. - */ -TraceBuffer trace_buffer; - -/** - * @brief Trace circular buffer subsystem initialization. - */ -void trace_init(void) { - - trace_buffer.tb_size = TRACE_BUFFER_SIZE; - trace_buffer.tb_ptr = &trace_buffer.tb_buffer[0]; -} - -/** - * @brief Inserts in the circular debug trace buffer a context switch record. - * - * @param[in] otp the thread being switched out - */ -void chDbgTrace(Thread *otp) { - - trace_buffer.tb_ptr->cse_wtobjp = otp->p_u.wtobjp; - trace_buffer.tb_ptr->cse_time = chTimeNow(); - trace_buffer.tb_ptr->cse_state = otp->p_state; - trace_buffer.tb_ptr->cse_tid = (unsigned)currp >> 6; - if (++trace_buffer.tb_ptr >= &trace_buffer.tb_buffer[TRACE_BUFFER_SIZE]) - trace_buffer.tb_ptr = &trace_buffer.tb_buffer[0]; -} -#endif /* CH_DBG_ENABLE_TRACE */ - -#if CH_DBG_ENABLE_ASSERTS || CH_DBG_ENABLE_CHECKS || CH_DBG_ENABLE_STACK_CHECK -/** - * @brief Pointer to the panic message. - * @details This pointer is meant to be accessed through the debugger, it is - * written once and then the system is halted. This variable can be - * set to @p NULL if the halt is caused by a stack overflow. - */ -char *panic_msg; - -/** - * @brief Prints a panic message on the console and then halts the system. - * - * @param[in] msg the pointer to the panic message string - */ -void chDbgPanic(char *msg) { - - panic_msg = msg; - chSysHalt(); -} -#endif /* CH_DBG_ENABLE_ASSERTS || CH_DBG_ENABLE_CHECKS || CH_DBG_ENABLE_STACK_CHECK */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chevents.c b/ChibiOS_2.0.8/os/kernel/src/chevents.c deleted file mode 100644 index ff00366..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chevents.c +++ /dev/null @@ -1,449 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chevents.c - * @brief Events code. - * - * @addtogroup events - * @details Event Flags, Event Sources and Event Listeners. - *

      Operation mode

      - * Each thread has a mask of pending event flags inside its @p Thread - * structure. - * Operations defined for event flags: - * - Wait, the invoking thread goes to sleep until a certain - * AND/OR combination of event flags becomes pending. - * - Clear, a mask of event flags is cleared from the pending - * events mask, the cleared event flags mask is returned (only the - * flags that were actually pending and then cleared). - * - Signal, an event mask is directly ORed to the mask of the - * signaled thread. - * - Broadcast, each thread registered on an Event Source is - * signaled with the event flags specified in its Event Listener. - * - Dispatch, an events mask is scanned and for each bit set - * to one an associated handler function is invoked. Bit masks are - * scanned from bit zero upward. - * . - * An Event Source is a special object that can be "broadcasted" by - * a thread or an interrupt service routine. Broadcasting an Event - * Source has the effect that all the threads registered on the - * Event Source will be signaled with an events mask.
      - * An unlimited number of Event Sources can exists in a system and - * each thread can be listening on an unlimited number of - * them.

      - * In order to use the Events APIs the @p CH_USE_EVENTS option must be - * enabled in @p chconf.h. - * @{ - */ - -#include "ch.h" - -#if CH_USE_EVENTS -/** - * @brief Registers an Event Listener on an Event Source. - * @note Multiple Event Listeners can specify the same bits to be pended. - * - * @param[in] esp pointer to the @p EventSource structure - * @param[in] elp pointer to the @p EventListener structure - * @param[in] mask the mask of event flags to be pended to the thread when - * the event source is broadcasted - */ -void chEvtRegisterMask(EventSource *esp, EventListener *elp, eventmask_t mask) { - - chDbgCheck((esp != NULL) && (elp != NULL), "chEvtRegisterMask"); - - chSysLock(); - elp->el_next = esp->es_next; - esp->es_next = elp; - elp->el_listener = currp; - elp->el_mask = mask; - chSysUnlock(); -} - -/** - * @brief Unregisters an Event Listener from its Event Source. - * @note If the event listener is not registered on the specified event - * source then the function does nothing. - * @note For optimal performance it is better to perform the unregister - * operations in inverse order of the register operations (elements - * are found on top of the list). - * - * @param[in] esp pointer to the @p EventSource structure - * @param[in] elp pointer to the @p EventListener structure - */ -void chEvtUnregister(EventSource *esp, EventListener *elp) { - EventListener *p; - - chDbgCheck((esp != NULL) && (elp != NULL), "chEvtUnregister"); - - p = (EventListener *)esp; - chSysLock(); - while (p->el_next != (EventListener *)esp) { - if (p->el_next == elp) { - p->el_next = elp->el_next; - break; - } - p = p->el_next; - } - chSysUnlock(); -} - -/** - * @brief Clears the pending events specified in the mask. - * - * @param[in] mask the events to be cleared - * @return The pending events that were cleared. - */ -eventmask_t chEvtClear(eventmask_t mask) { - eventmask_t m; - - chSysLock(); - - m = currp->p_epending & mask; - currp->p_epending &= ~mask; - - chSysUnlock(); - return m; -} - -/** - * @brief Pends a set of event flags on the current thread, this is @b much - * faster than using @p chEvtBroadcast() or @p chEvtSignal(). - * - * @param[in] mask the events to be pended - * @return The current pending events mask. - */ -eventmask_t chEvtPend(eventmask_t mask) { - - chSysLock(); - - mask = (currp->p_epending |= mask); - - chSysUnlock(); - return mask; -} - -/** - * @brief Pends a set of event flags on the specified @p Thread. - * - * @param[in] tp the thread to be signaled - * @param[in] mask the event flags set to be pended - */ -void chEvtSignal(Thread *tp, eventmask_t mask) { - - chDbgCheck(tp != NULL, "chEvtSignal"); - - chSysLock(); - chEvtSignalI(tp, mask); - chSchRescheduleS(); - chSysUnlock(); -} - -/** - * @brief Pends a set of event flags on the specified @p Thread. - * - * @param[in] tp the thread to be signaled - * @param[in] mask the event flags set to be pended - */ -void chEvtSignalI(Thread *tp, eventmask_t mask) { - - chDbgCheck(tp != NULL, "chEvtSignalI"); - - tp->p_epending |= mask; - /* Test on the AND/OR conditions wait states.*/ - if (((tp->p_state == THD_STATE_WTOREVT) && - ((tp->p_epending & tp->p_u.ewmask) != 0)) || - ((tp->p_state == THD_STATE_WTANDEVT) && - ((tp->p_epending & tp->p_u.ewmask) == tp->p_u.ewmask))) - chSchReadyI(tp)->p_u.rdymsg = RDY_OK; -} - -/** - * @brief Signals all the Event Listeners registered on the specified Event - * Source. - * - * @param[in] esp pointer to the @p EventSource structure - */ -void chEvtBroadcast(EventSource *esp) { - - chSysLock(); - chEvtBroadcastI(esp); - chSchRescheduleS(); - chSysUnlock(); -} - -/** - * @brief Signals all the Event Listeners registered on the specified Event - * Source. - * - * @param[in] esp pointer to the @p EventSource structure - */ -void chEvtBroadcastI(EventSource *esp) { - EventListener *elp; - - chDbgCheck(esp != NULL, "chEvtBroadcastI"); - - elp = esp->es_next; - while (elp != (EventListener *)esp) { - chEvtSignalI(elp->el_listener, elp->el_mask); - elp = elp->el_next; - } -} - -/** - * @brief Invokes the event handlers associated to an event flags mask. - * - * @param[in] mask mask of the events to be dispatched - * @param[in] handlers an array of @p evhandler_t. The array must have size - * equal to the number of bits in eventmask_t. - */ -void chEvtDispatch(const evhandler_t *handlers, eventmask_t mask) { - eventid_t eid; - - chDbgCheck(handlers != NULL, "chEvtDispatch"); - - eid = 0; - while (mask) { - if (mask & EVENT_MASK(eid)) { - chDbgAssert(handlers[eid] != NULL, - "chEvtDispatch(), #1", - "null handler"); - mask &= ~EVENT_MASK(eid); - handlers[eid](eid); - } - eid++; - } -} - -#if CH_OPTIMIZE_SPEED || !CH_USE_EVENTS_TIMEOUT || defined(__DOXYGEN__) -/** - * @brief Waits for exactly one of the specified events. - * @details The function waits for one event among those specified in - * @p mask to become pending then the event is cleared and returned. - * @note One and only one event is served in the function, the one with the - * lowest event id. The function is meant to be invoked into a loop in - * order to serve all the pending events.
      - * This means that Event Listeners with a lower event identifier have - * an higher priority. - * - * @param[in] mask mask of the events that the function should wait for, - * @p ALL_EVENTS enables all the events - * @return The mask of the lowest id served and cleared event. - */ -eventmask_t chEvtWaitOne(eventmask_t mask) { - Thread *ctp = currp; - eventmask_t m; - - chSysLock(); - - if ((m = (ctp->p_epending & mask)) == 0) { - ctp->p_u.ewmask = mask; - chSchGoSleepS(THD_STATE_WTOREVT); - m = ctp->p_epending & mask; - } - m &= -m; - ctp->p_epending &= ~m; - - chSysUnlock(); - return m; -} - -/** - * @brief Waits for any of the specified events. - * @details The function waits for any event among those specified in - * @p mask to become pending then the events are cleared and returned. - * - * @param[in] mask mask of the events that the function should wait for, - * @p ALL_EVENTS enables all the events - * @return The mask of the served and cleared events. - */ -eventmask_t chEvtWaitAny(eventmask_t mask) { - Thread *ctp = currp; - eventmask_t m; - - chSysLock(); - - if ((m = (ctp->p_epending & mask)) == 0) { - ctp->p_u.ewmask = mask; - chSchGoSleepS(THD_STATE_WTOREVT); - m = ctp->p_epending & mask; - } - ctp->p_epending &= ~m; - - chSysUnlock(); - return m; -} - -/** - * @brief Waits for all the specified events. - * @details The function waits for all the events specified in @p mask to - * become pending then the events are cleared and returned. - * - * @param[in] mask mask of the event ids that the function should wait for - * @return The mask of the served and cleared events. - */ -eventmask_t chEvtWaitAll(eventmask_t mask) { - Thread *ctp = currp; - - chSysLock(); - - if ((ctp->p_epending & mask) != mask) { - ctp->p_u.ewmask = mask; - chSchGoSleepS(THD_STATE_WTANDEVT); - } - ctp->p_epending &= ~mask; - - chSysUnlock(); - return mask; -} -#endif /* CH_OPTIMIZE_SPEED || !CH_USE_EVENTS_TIMEOUT */ - -#if CH_USE_EVENTS_TIMEOUT -/** - * @brief Waits for exactly one of the specified events. - * @details The function waits for one event among those specified in - * @p mask to become pending then the event is cleared and returned. - * @note One and only one event is served in the function, the one with the - * lowest event id. The function is meant to be invoked into a loop in - * order to serve all the pending events.
      - * This means that Event Listeners with a lower event identifier have - * an higher priority. - * - * @param[in] mask mask of the events that the function should wait for, - * @p ALL_EVENTS enables all the events - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The mask of the lowest id served and cleared event. - * @retval 0 if the specified timeout expired. - */ -eventmask_t chEvtWaitOneTimeout(eventmask_t mask, systime_t time) { - Thread *ctp = currp; - eventmask_t m; - - chSysLock(); - - if ((m = (ctp->p_epending & mask)) == 0) { - if (TIME_IMMEDIATE == time) { - chSysUnlock(); - return (eventmask_t)0; - } - ctp->p_u.ewmask = mask; - if (chSchGoSleepTimeoutS(THD_STATE_WTOREVT, time) < RDY_OK) { - chSysUnlock(); - return (eventmask_t)0; - } - m = ctp->p_epending & mask; - } - m &= -m; - ctp->p_epending &= ~m; - - chSysUnlock(); - return m; -} - -/** - * @brief Waits for any of the specified events. - * @details The function waits for any event among those specified in - * @p mask to become pending then the events are cleared and - * returned. - * - * @param[in] mask mask of the events that the function should wait for, - * @p ALL_EVENTS enables all the events - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The mask of the served and cleared events. - * @retval 0 if the specified timeout expired. - */ -eventmask_t chEvtWaitAnyTimeout(eventmask_t mask, systime_t time) { - Thread *ctp = currp; - eventmask_t m; - - chSysLock(); - - if ((m = (ctp->p_epending & mask)) == 0) { - if (TIME_IMMEDIATE == time) { - chSysUnlock(); - return (eventmask_t)0; - } - ctp->p_u.ewmask = mask; - if (chSchGoSleepTimeoutS(THD_STATE_WTOREVT, time) < RDY_OK) { - chSysUnlock(); - return (eventmask_t)0; - } - m = ctp->p_epending & mask; - } - ctp->p_epending &= ~m; - - chSysUnlock(); - return m; -} - -/** - * @brief Waits for all the specified events. - * @details The function waits for all the events specified in @p mask to - * become pending then the events are cleared and returned. - * - * @param[in] mask mask of the event ids that the function should wait for - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The mask of the served and cleared events. - * @retval 0 if the specified timeout expired. - */ -eventmask_t chEvtWaitAllTimeout(eventmask_t mask, systime_t time) { - Thread *ctp = currp; - - chSysLock(); - - if ((ctp->p_epending & mask) != mask) { - if (TIME_IMMEDIATE == time) { - chSysUnlock(); - return (eventmask_t)0; - } - ctp->p_u.ewmask = mask; - if (chSchGoSleepTimeoutS(THD_STATE_WTANDEVT, time) < RDY_OK) { - chSysUnlock(); - return (eventmask_t)0; - } - } - ctp->p_epending &= ~mask; - - chSysUnlock(); - return mask; -} -#endif /* CH_USE_EVENTS_TIMEOUT */ - -#endif /* CH_USE_EVENTS */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chheap.c b/ChibiOS_2.0.8/os/kernel/src/chheap.c deleted file mode 100644 index be0fc60..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chheap.c +++ /dev/null @@ -1,313 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chheap.c - * @brief Heaps code. - * - * @addtogroup heaps - * @details Heap Allocator related APIs. - *

      Operation mode

      - * The heap allocator implements a first-fit strategy and its APIs - * are functionally equivalent to the usual @p malloc() and @p free() - * library functions. The main difference is that the OS heap APIs - * are guaranteed to be thread safe.
      - * By enabling the @p CH_USE_MALLOC_HEAP option the heap manager - * will use the runtime-provided @p malloc() and @p free() as - * backend for the heap APIs instead of the system provided - * allocator.
      - * In order to use the heap APIs the @p CH_USE_HEAP option must - * be enabled in @p chconf.h. - * @{ - */ - -#include "ch.h" - -#if CH_USE_HEAP - -#if !CH_USE_MALLOC_HEAP - -/* - * Defaults on the best synchronization mechanism available. - */ -#if CH_USE_MUTEXES -#define H_LOCK(h) chMtxLock(&(h)->h_mtx) -#define H_UNLOCK(h) chMtxUnlock() -#else -#define H_LOCK(h) chSemWait(&(h)->h_sem) -#define H_UNLOCK(h) chSemSignal(&(h)->h_sem) -#endif - -/** - * @brief Default heap descriptor. - */ -static MemoryHeap default_heap; - -/** - * @brief Initializes the default heap. - * @note Internal use only. - */ -void heap_init(void) { - default_heap.h_provider = chCoreAlloc; - default_heap.h_free.h.u.next = (union heap_header *)NULL; - default_heap.h_free.h.size = 0; -#if CH_USE_MUTEXES - chMtxInit(&default_heap.h_mtx); -#else - chSemInit(&default_heap.h_sem, 1); -#endif -} - -/** - * @brief Initializes a memory heap from a static memory area. - * @note Both the heap buffer base and the heap size must be aligned to - * the @p align_t type size. - * - * @param[out] heapp pointer to the memory heap descriptor to be initialized - * @param[in] buf heap buffer base - * @param[in] size heap size - */ -void chHeapInit(MemoryHeap *heapp, void *buf, size_t size) { - union heap_header *hp; - - chDbgCheck(MEM_IS_ALIGNED(buf) && MEM_IS_ALIGNED(size), "chHeapInit"); - - heapp->h_provider = (memgetfunc_t)NULL; - heapp->h_free.h.u.next = hp = buf; - heapp->h_free.h.size = 0; - hp->h.u.next = NULL; - hp->h.size = size - sizeof(union heap_header); -#if CH_USE_MUTEXES - chMtxInit(&heapp->h_mtx); -#else - chSemInit(&heapp->h_sem, 1); -#endif -} - -/** - * @brief Allocates a block of memory from the heap by using the first-fit - * algorithm. - * @details The allocated block is guaranteed to be properly aligned for a - * pointer data type (@p align_t). - * - * @param[in] heapp pointer to a heap descriptor or @p NULL in order to - * access the default heap. - * @param[in] size the size of the block to be allocated. Note that the - * allocated block may be a bit bigger than the requested - * size for alignment and fragmentation reasons. - * @return A pointer to the allocated block. - * @retval NULL if the block cannot be allocated. - */ -void *chHeapAlloc(MemoryHeap *heapp, size_t size) { - union heap_header *qp, *hp, *fp; - - if (heapp == NULL) - heapp = &default_heap; - - size = MEM_ALIGN_SIZE(size); - qp = &heapp->h_free; - H_LOCK(heapp); - - while (qp->h.u.next != NULL) { - hp = qp->h.u.next; - if (hp->h.size >= size) { - if (hp->h.size < size + sizeof(union heap_header)) { - /* Gets the whole block even if it is slightly bigger than the - requested size because the fragment would be too small to be - useful.*/ - qp->h.u.next = hp->h.u.next; - } - else { - /* Block bigger enough, must split it.*/ - fp = (void *)((uint8_t *)(hp) + sizeof(union heap_header) + size); - fp->h.u.next = hp->h.u.next; - fp->h.size = hp->h.size - sizeof(union heap_header) - size; - qp->h.u.next = fp; - hp->h.size = size; - } - hp->h.u.heap = heapp; - - H_UNLOCK(heapp); - return (void *)(hp + 1); - } - qp = hp; - } - - H_UNLOCK(heapp); - - /* More memory is required, tries to get it from the associated provider - else fails.*/ - if (heapp->h_provider) { - hp = heapp->h_provider(size + sizeof(union heap_header)); - if (hp != NULL) { - hp->h.u.heap = heapp; - hp->h.size = size; - hp++; - return (void *)hp; - } - } - return NULL; -} - -#define LIMIT(p) (union heap_header *)((uint8_t *)(p) + \ - sizeof(union heap_header) + \ - (p)->h.size) - -/** - * @brief Frees a previously allocated memory block. - * - * @param[in] p pointer to the memory block to be freed - */ -void chHeapFree(void *p) { - union heap_header *qp, *hp; - MemoryHeap *heapp; - - chDbgCheck(p != NULL, "chHeapFree"); - - hp = (union heap_header *)p - 1; - heapp = hp->h.u.heap; - qp = &heapp->h_free; - H_LOCK(heapp); - - while (TRUE) { - chDbgAssert((hp < qp) || (hp >= LIMIT(qp)), - "chHeapFree(), #1", - "within free block"); - - if (((qp == &heapp->h_free) || (hp > qp)) && - ((qp->h.u.next == NULL) || (hp < qp->h.u.next))) { - /* Insertion after qp.*/ - hp->h.u.next = qp->h.u.next; - qp->h.u.next = hp; - /* Verifies if the newly inserted block should be merged.*/ - if (LIMIT(hp) == hp->h.u.next) { - /* Merge with the next block.*/ - hp->h.size += hp->h.u.next->h.size + sizeof(union heap_header); - hp->h.u.next = hp->h.u.next->h.u.next; - } - if ((LIMIT(qp) == hp)) { - /* Merge with the previous block.*/ - qp->h.size += hp->h.size + sizeof(union heap_header); - qp->h.u.next = hp->h.u.next; - } - break; - } - qp = qp->h.u.next; - } - - H_UNLOCK(heapp); - return; -} - -/** - * @brief Reports the heap status. - * @note This function is meant to be used in the test suite, it should - * not be really useful for the application code. - * @note This function is not implemented when the @p CH_USE_MALLOC_HEAP - * configuration option is used (it always returns zero). - * - * @param[in] heapp pointer to a heap descriptor or @p NULL in order to - * access the default heap. - * @param[in] sizep pointer to a variable that will receive the total - * fragmented free space - * @return The number of fragments in the heap. - */ -size_t chHeapStatus(MemoryHeap *heapp, size_t *sizep) { - union heap_header *qp; - size_t n, sz; - - if (heapp == NULL) - heapp = &default_heap; - - H_LOCK(heapp); - - sz = 0; - for (n = 0, qp = &heapp->h_free; qp->h.u.next; n++, qp = qp->h.u.next) - sz += qp->h.u.next->h.size; - if (sizep) - *sizep = sz; - - H_UNLOCK(heapp); - return n; -} - -#else /* CH_USE_MALLOC_HEAP */ - -#include - -#if CH_USE_MUTEXES -#define H_LOCK() chMtxLock(&hmtx) -#define H_UNLOCK() chMtxUnlock() -static Mutex hmtx; -#elif CH_USE_SEMAPHORES -#define H_LOCK() chSemWait(&hsem) -#define H_UNLOCK() chSemSignal(&hsem) -static Semaphore hsem; -#endif - -void heap_init(void) { - -#if CH_USE_MUTEXES - chMtxInit(&hmtx); -#else - chSemInit(&hsem, 1); -#endif -} - -void *chHeapAlloc(MemoryHeap *heapp, size_t size) { - void *p; - - chDbgCheck(heapp == NULL, "chHeapAlloc"); - - H_LOCK(); - p = malloc(size); - H_UNLOCK(); - return p; -} - -void chHeapFree(void *p) { - - chDbgCheck(p != NULL, "chHeapFree"); - - H_LOCK(); - free(p); - H_UNLOCK(); -} - -size_t chHeapStatus(MemoryHeap *heapp, size_t *sizep) { - - chDbgCheck(heapp == NULL, "chHeapStatus"); - - if (sizep) - *sizep = 0; - return 0; -} - -#endif /* CH_USE_MALLOC_HEAP */ - -#endif /* CH_USE_HEAP */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chlists.c b/ChibiOS_2.0.8/os/kernel/src/chlists.c deleted file mode 100644 index 5927106..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chlists.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chlists.c - * @brief Thread queues/lists code. - * - * @addtogroup internals - * @details All the functions present in this module, while public, are not - * an OS API and should not be directly used in the user applications - * code. - * @{ - */ -#include "ch.h" - -#if !CH_OPTIMIZE_SPEED || defined(__DOXYGEN__) -/** - * @brief Inserts a thread into a priority ordered queue. - * @note The insertion is done by scanning the list from the highest priority - * toward the lowest. - * @note This function is @b not an API. - * - * @param[in] tp the pointer to the thread to be inserted in the list - * @param[in] tqp the pointer to the threads list header - */ -void prio_insert(Thread *tp, ThreadsQueue *tqp) { - - /* cp iterates over the queue.*/ - Thread *cp = (Thread *)tqp; - do { - /* Iterate to next thread in queue.*/ - cp = cp->p_next; - /* Not end of queue? and cp has equal or higher priority than tp?.*/ - } while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio)); - /* Insertion on p_prev.*/ - tp->p_next = cp; - tp->p_prev = cp->p_prev; - tp->p_prev->p_next = cp->p_prev = tp; -} - -/** - * @brief Inserts a Thread into a queue. - * @note This function is @b not an API. - * - * @param[in] tp the pointer to the thread to be inserted in the list - * @param[in] tqp the pointer to the threads list header - */ -void queue_insert(Thread *tp, ThreadsQueue *tqp) { - - tp->p_next = (Thread *)tqp; - tp->p_prev = tqp->p_prev; - tp->p_prev->p_next = tqp->p_prev = tp; -} - -/** - * @brief Removes the first-out Thread from a queue and returns it. - * @note If the queue is priority ordered then this function returns the - * thread with the highest priority. - * @note This function is @b not an API. - * - * @param[in] tqp the pointer to the threads list header - * @return The removed thread pointer. - */ -Thread *fifo_remove(ThreadsQueue *tqp) { - Thread *tp = tqp->p_next; - - (tqp->p_next = tp->p_next)->p_prev = (Thread *)tqp; - return tp; -} - -/** - * @brief Removes the last-out Thread from a queue and returns it. - * @note If the queue is priority ordered then this function returns the - * thread with the lowest priority. - * @note This function is @b not an API. - * - * @param[in] tqp the pointer to the threads list header - * @return The removed thread pointer. - */ -Thread *lifo_remove(ThreadsQueue *tqp) { - Thread *tp = tqp->p_prev; - - (tqp->p_prev = tp->p_prev)->p_next = (Thread *)tqp; - return tp; -} - -/** - * @brief Removes a Thread from a queue and returns it. - * @details The thread is removed from the queue regardless of its relative - * position and regardless the used insertion method. - * @note This function is @b not an API. - * - * @param[in] tp the pointer to the thread to be removed from the queue - * @return The removed thread pointer. - */ -Thread *dequeue(Thread *tp) { - - tp->p_prev->p_next = tp->p_next; - tp->p_next->p_prev = tp->p_prev; - return tp; -} - -/** - * @brief Pushes a Thread on top of a stack list. - * @note This function is @b not an API. - * - * @param[in] tp the pointer to the thread to be inserted in the list - * @param[in] tlp the pointer to the threads list header - */ -void list_insert(Thread *tp, ThreadsList *tlp) { - - tp->p_next = tlp->p_next; - tlp->p_next = tp; -} - -/** - * @brief Pops a Thread from the top of a stack list and returns it. - * @note The list must be non-empty before calling this function. - * @note This function is @b not an API. - * - * @param[in] tlp the pointer to the threads list header - * @return The removed thread pointer. - */ -Thread *list_remove(ThreadsList *tlp) { - - Thread *tp = tlp->p_next; - tlp->p_next = tp->p_next; - return tp; -} -#endif /* CH_OPTIMIZE_SPEED */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chmboxes.c b/ChibiOS_2.0.8/os/kernel/src/chmboxes.c deleted file mode 100644 index 7b6e5ee..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chmboxes.c +++ /dev/null @@ -1,276 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chmboxes.c - * @brief Mailboxes code. - * - * @addtogroup mailboxes - * @details Asynchronous messages. - *

      Operation mode

      - * A mailbox is an asynchronous communication mechanism.
      - * Operations defined for mailboxes: - * - Post: Posts a message on the mailbox in FIFO order. - * - Post Ahead: Posts a message on the mailbox with urgent - * priority. - * - Fetch: A message is fetched from the mailbox and removed - * from the queue. - * - Reset: The mailbox is emptied and all the stored messages - * are lost. - * . - * A message is a variable of type msg_t that is guaranteed to have - * the same size of and be compatible with (data) pointers (anyway an - * explicit cast is needed). - * If larger messages need to be exchanged then a pointer to a - * structure can be posted in the mailbox but the posting side has - * no predefined way to know when the message has been processed. A - * possible approach is to allocate memory (from a memory pool as - * example) from the posting side and free it on the fetching side. - * Another approach is to set a "done" flag into the structure pointed - * by the message.
      - * In order to use the mailboxes APIs the @p CH_USE_MAILBOXES option - * must be enabled in @p chconf.h. - * @{ - */ - -#include "ch.h" - -#if CH_USE_MAILBOXES -/** - * @brief Initializes a Mailbox object. - * - * @param[out] mbp the pointer to the Mailbox structure to be initialized - * @param[in] buf the circular messages buffer - * @param[in] n the buffer size as number of @p msg_t - */ -void chMBInit(Mailbox *mbp, msg_t *buf, cnt_t n) { - - chDbgCheck((mbp != NULL) && (buf != NULL) && (n > 0), "chMBInit"); - - mbp->mb_buffer = mbp->mb_wrptr = mbp->mb_rdptr = buf; - mbp->mb_top = &buf[n]; - chSemInit(&mbp->mb_emptysem, n); - chSemInit(&mbp->mb_fullsem, 0); -} - -/** - * @brief Resets a Mailbox object. - * @details All the waiting threads are resumed with status @p RDY_RESET and - * the queued messages are lost. - * - * @param[in] mbp the pointer to an initialized Mailbox object - */ -void chMBReset(Mailbox *mbp) { - - chDbgCheck(mbp != NULL, "chMBReset"); - - chSysLock(); - mbp->mb_wrptr = mbp->mb_rdptr = mbp->mb_buffer; - chSemResetI(&mbp->mb_emptysem, mbp->mb_top - mbp->mb_buffer); - chSemResetI(&mbp->mb_fullsem, 0); - chSchRescheduleS(); - chSysUnlock(); -} - -/** - * @brief Posts a message into a mailbox. - * @details The invoking thread waits until a empty slot in the mailbox becomes - * available or the specified time runs out. - * - * @param[in] mbp the pointer to an initialized Mailbox object - * @param[in] msg the message to be posted on the mailbox - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation status. - * @retval RDY_OK if the message was correctly posted. - * @retval RDY_RESET if the mailbox was reset while waiting. - * @retval RDY_TIMEOUT if the operation timed out. - */ -msg_t chMBPost(Mailbox *mbp, msg_t msg, systime_t time) { - msg_t rdymsg; - - chSysLock(); - rdymsg = chMBPostS(mbp, msg, time); - chSysUnlock(); - return rdymsg; -} - -/** - * @brief Posts a message into a mailbox. - * @details The invoking thread waits until a empty slot in the mailbox becomes - * available or the specified time runs out. - * - * @param[in] mbp the pointer to an initialized Mailbox object - * @param[in] msg the message to be posted on the mailbox - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation status. - * @retval RDY_OK if the message was correctly posted. - * @retval RDY_RESET if the mailbox was reset while waiting. - * @retval RDY_TIMEOUT if the operation timed out. - */ -msg_t chMBPostS(Mailbox *mbp, msg_t msg, systime_t time) { - msg_t rdymsg; - - chDbgCheck(mbp != NULL, "chMBPostS"); - - rdymsg = chSemWaitTimeoutS(&mbp->mb_emptysem, time); - if (rdymsg == RDY_OK) { - *mbp->mb_wrptr++ = msg; - if (mbp->mb_wrptr >= mbp->mb_top) - mbp->mb_wrptr = mbp->mb_buffer; - chSemSignalI(&mbp->mb_fullsem); - chSchRescheduleS(); - } - return rdymsg; -} - -/** - * @brief Posts an high priority message into a mailbox. - * @details The invoking thread waits until a empty slot in the mailbox becomes - * available or the specified time runs out. - * - * @param[in] mbp the pointer to an initialized Mailbox object - * @param[in] msg the message to be posted on the mailbox - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation status. - * @retval RDY_OK if the message was correctly posted. - * @retval RDY_RESET if the mailbox was reset while waiting. - * @retval RDY_TIMEOUT if the operation timed out. - */ -msg_t chMBPostAhead(Mailbox *mbp, msg_t msg, systime_t time) { - msg_t rdymsg; - - chSysLock(); - rdymsg = chMBPostAheadS(mbp, msg, time); - chSysUnlock(); - return rdymsg; -} - -/** - * @brief Posts an high priority message into a mailbox. - * @details The invoking thread waits until a empty slot in the mailbox becomes - * available or the specified time runs out. - * - * @param[in] mbp the pointer to an initialized Mailbox object - * @param[in] msg the message to be posted on the mailbox - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation status. - * @retval RDY_OK if the message was correctly posted. - * @retval RDY_RESET if the mailbox was reset while waiting. - * @retval RDY_TIMEOUT if the operation timed out. - */ -msg_t chMBPostAheadS(Mailbox *mbp, msg_t msg, systime_t time) { - msg_t rdymsg; - - chDbgCheck(mbp != NULL, "chMBPostAheadS"); - - rdymsg = chSemWaitTimeoutS(&mbp->mb_emptysem, time); - if (rdymsg == RDY_OK) { - if (--mbp->mb_rdptr < mbp->mb_buffer) - mbp->mb_rdptr = mbp->mb_top - 1; - *mbp->mb_rdptr = msg; - chSemSignalI(&mbp->mb_fullsem); - chSchRescheduleS(); - } - return rdymsg; -} - -/** - * @brief Retrieves a message from a mailbox. - * @details The invoking thread waits until a message is posted in the mailbox - * or the specified time runs out. - * - * @param[in] mbp the pointer to an initialized Mailbox object - * @param[out] msgp pointer to a message variable for the received message - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation status. - * @retval RDY_OK if a message was correctly fetched. - * @retval RDY_RESET if the mailbox was reset while waiting. - * @retval RDY_TIMEOUT if the operation timed out. - */ -msg_t chMBFetch(Mailbox *mbp, msg_t *msgp, systime_t time) { - msg_t rdymsg; - - chSysLock(); - rdymsg = chMBFetchS(mbp, msgp, time); - chSysUnlock(); - return rdymsg; -} - -/** - * @brief Retrieves a message from a mailbox. - * @details The invoking thread waits until a message is posted in the mailbox - * or the specified time runs out. - * - * @param[in] mbp the pointer to an initialized Mailbox object - * @param[out] msgp pointer to a message variable for the received message - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation status. - * @retval RDY_OK if a message was correctly fetched. - * @retval RDY_RESET if the mailbox was reset while waiting. - * @retval RDY_TIMEOUT if the operation timed out. - */ -msg_t chMBFetchS(Mailbox *mbp, msg_t *msgp, systime_t time) { - msg_t rdymsg; - - chDbgCheck((mbp != NULL) && (msgp != NULL), "chMBFetchS"); - - rdymsg = chSemWaitTimeoutS(&mbp->mb_fullsem, time); - if (rdymsg == RDY_OK) { - *msgp = *mbp->mb_rdptr++; - if (mbp->mb_rdptr >= mbp->mb_top) - mbp->mb_rdptr = mbp->mb_buffer; - chSemSignalI(&mbp->mb_emptysem); - chSchRescheduleS(); - } - return rdymsg; -} -#endif /* CH_USE_MAILBOXES */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chmemcore.c b/ChibiOS_2.0.8/os/kernel/src/chmemcore.c deleted file mode 100644 index 6797df8..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chmemcore.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chmemcore.c - * @brief Core memory manager code. - * - * @addtogroup memcore - * @details Core Memory Manager related APIs and services. - *

      Operation mode

      - * The core memory manager is a simplified allocator that only allows - * to allocate memory blocks without the possibility to free them.
      - * This allocator is meant as a memory blocks provider for the other - * allocators such as: - * - C-Runtime allocator (through a compiler specific adapter module). - * - Heap allocator (see @ref heaps). - * - Memory pools allocator (see @ref pools). - * . - * By having a centralized memory provider the various allocators can - * coexist and share the main memory.
      - * This allocator, alone, is also useful for very simple applications - * that just require a simple way to get memory blocks.
      - * In order to use the core memory manager APIs the @p CH_USE_MEMCORE - * option must be enabled in @p chconf.h. - * @{ - */ - -#include "ch.h" - -#if CH_USE_MEMCORE - -static uint8_t *nextmem; -static uint8_t *endmem; - -/** - * @brief Low level memory manager initialization. - * @note Internal use only. - */ -void core_init(void) { -#if CH_MEMCORE_SIZE == 0 - extern uint8_t __heap_base__; - extern uint8_t __heap_end__; - nextmem = &__heap_base__; - endmem = &__heap_end__; -#else - static stkalign_t buffer[MEM_ALIGN_SIZE(CH_MEMCORE_SIZE) / - sizeof(stkalign_t)]; - nextmem = (uint8_t *)&buffer[0]; - endmem = (uint8_t *)&buffer[MEM_ALIGN_SIZE(CH_MEMCORE_SIZE) / - sizeof(stkalign_t)]; -#endif -} - -/** - * @brief Allocates a memory block. - * @details The size of the returned block is aligned to the alignment - * type @p stkalign_t so it is not possible to allocate less - * than sizeof(stkalign_t). - * - * - * @param[in] size the size of the block to be allocated - * @return A pointer to the allocated memory block. - * @retval NULL allocation failed, core memory exhausted. - */ -void *chCoreAlloc(size_t size) { - void *p; - - chSysLock(); - p = chCoreAllocI(size); - chSysUnlock(); - return p; -} - -/** - * @brief Allocates a memory block. - * @details The size of the returned block is aligned to the alignment - * type @p align_t so it is not possible to allocate less than - * sizeof(align_t). - * - * @param[in] size the size of the block to be allocated. - * @return A pointer to the allocated memory block. - * @retval NULL allocation failed, core memory exhausted. - */ -void *chCoreAllocI(size_t size) { - void *p; - - size = MEM_ALIGN_SIZE(size); - if ((size_t)(endmem - nextmem) < size) - return NULL; - p = nextmem; - nextmem += size; - return p; -} - -/** - * @brief Core memory status. - * - * @return The size, in bytes, of the free core memory. - */ -size_t chCoreStatus(void) { - - return (size_t)(endmem - nextmem); -} -#endif /* CH_USE_MEMCORE */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chmempools.c b/ChibiOS_2.0.8/os/kernel/src/chmempools.c deleted file mode 100644 index 3d9896f..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chmempools.c +++ /dev/null @@ -1,140 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chmempools.c - * @brief Memory Pools code. - * - * @addtogroup pools - * @details Memory Pools related APIs and services. - *

      Operation mode

      - * The Memory Pools APIs allow to allocate/free fixed size objects in - * constant time and reliably without memory fragmentation - * problems.
      - * In order to use the memory pools APIs the @p CH_USE_MEMPOOLS option - * must be enabled in @p chconf.h. - * @{ - */ - -#include "ch.h" - -#if CH_USE_MEMPOOLS -/** - * @brief Initializes an empty memory pool. - * @note The size is internally aligned to be a multiple of the @p align_t - * type size. - * - * @param[out] mp pointer to a @p MemoryPool structure - * @param[in] size the size of the objects contained in this memory pool, - * the minimum accepted size is the size of a pointer to - * void. - * @param[in] provider memory provider function for the memory pool or - * @p NULL if the pool is not allowed to grow - * automatically - */ -void chPoolInit(MemoryPool *mp, size_t size, memgetfunc_t provider) { - - chDbgCheck((mp != NULL) && (size >= sizeof(void *)), "chPoolInit"); - - mp->mp_next = NULL; - mp->mp_object_size = MEM_ALIGN_SIZE(size); - mp->mp_provider = provider; -} - -/** - * @brief Allocates an object from a memory pool. - * - * @param[in] mp pointer to a @p MemoryPool structure - * @return The pointer to the allocated object. - * @retval NULL if pool is empty. - */ -void *chPoolAllocI(MemoryPool *mp) { - void *objp; - - chDbgCheck(mp != NULL, "chPoolAllocI"); - - if ((objp = mp->mp_next) != NULL) - mp->mp_next = mp->mp_next->ph_next; -#if CH_USE_MEMCORE - else if (mp->mp_provider != NULL) - objp = mp->mp_provider(mp->mp_object_size); -#endif - return objp; -} - -/** - * @brief Allocates an object from a memory pool. - * - * @param[in] mp pointer to a @p MemoryPool structure - * @return The pointer to the allocated object. - * @retval NULL if pool is empty. - */ -void *chPoolAlloc(MemoryPool *mp) { - void *objp; - - chSysLock(); - objp = chPoolAllocI(mp); - chSysUnlock(); - return objp; -} - -/** - * @brief Releases (or adds) an object into (to) a memory pool. - * @note The object is assumed to be of the right size for the specified - * memory pool. - * @note The object is assumed to be memory aligned to the size of @p align_t - * type. - * - * @param[in] mp pointer to a @p MemoryPool structure - * @param[in] objp the pointer to the object to be released or added - */ -void chPoolFreeI(MemoryPool *mp, void *objp) { - struct pool_header *php = objp; - - chDbgCheck((mp != NULL) && (objp != NULL) && MEM_IS_ALIGNED(objp), - "chPoolFreeI"); - - php->ph_next = mp->mp_next; - mp->mp_next = php; -} - -/** - * @brief Releases (or adds) an object into (to) a memory pool. - * @note The object is assumed to be of the right size for the specified - * memory pool. - * - * @param[in] mp pointer to a @p MemoryPool structure - * @param[in] objp the pointer to the object to be released or added - */ -void chPoolFree(MemoryPool *mp, void *objp) { - - chSysLock(); - chPoolFreeI(mp, objp); - chSysUnlock(); -} -#endif /* CH_USE_MEMPOOLS */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chmsg.c b/ChibiOS_2.0.8/os/kernel/src/chmsg.c deleted file mode 100644 index 45f1e8d..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chmsg.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chmsg.c - * @brief Messages code. - * - * @addtogroup messages - * @details Synchronous inter-thread messages APIs and services. - *

      Operation Mode

      - * Synchronous messages are an easy to use and fast IPC mechanism, - * threads can both act as message servers and/or message clients, - * the mechanism allows data to be carried in both directions. Note - * that messages are not copied between the client and server threads - * but just a pointer passed so the exchange is very time - * efficient.
      - * Messages are usually processed in FIFO order but it is possible to - * process them in priority order by enabling the - * @p CH_USE_MESSAGES_PRIORITY option in @p chconf.h.
      - * Applications do not need to allocate buffers for synchronous - * message queues, the mechanism just requires two extra pointers in - * the @p Thread structure (the message queue header).
      - * In order to use the Messages APIs the @p CH_USE_MESSAGES option - * must be enabled in @p chconf.h. - * @{ - */ - -#include "ch.h" - -#if CH_USE_MESSAGES - -#if CH_USE_MESSAGES_PRIORITY -#define msg_insert(tp, qp) prio_insert(tp, qp) -#else -#define msg_insert(tp, qp) queue_insert(tp, qp) -#endif - -/** - * @brief Sends a message to the specified thread. - * @details The sender is stopped until the receiver executes a - * @p chMsgRelease()after receiving the message. - * - * @param[in] tp the pointer to the thread - * @param[in] msg the message - * @return The answer message from @p chMsgRelease(). - */ -msg_t chMsgSend(Thread *tp, msg_t msg) { - Thread *ctp = currp; - - chDbgCheck(tp != NULL, "chMsgSend"); - - chSysLock(); - ctp->p_msg = msg; - ctp->p_u.wtobjp = &tp->p_msgqueue; - msg_insert(ctp, &tp->p_msgqueue); - if (tp->p_state == THD_STATE_WTMSG) - chSchReadyI(tp); - chSchGoSleepS(THD_STATE_SNDMSG); - msg = ctp->p_u.rdymsg; - chSysUnlock(); - return msg; -} - -/** - * @brief Suspends the thread and waits for an incoming message. - * @note You can assume that the data contained in the message is stable - * until you invoke @p chMsgRelease() because the sending thread is - * suspended until then. - * - * @return The pointer to the message structure. Note, it is - * always the message associated to the thread on the - * top of the messages queue. - */ -msg_t chMsgWait(void) { - msg_t msg; - - chSysLock(); - if (!chMsgIsPendingI(currp)) - chSchGoSleepS(THD_STATE_WTMSG); -#if defined(CH_ARCHITECTURE_STM8) - msg = chMsgGetI((volatile Thread *)currp); /* Temporary hack.*/ -#else - msg = chMsgGetI(currp); -#endif - chSysUnlock(); - return msg; -} - -/** - * @brief Returns the next message in the queue. - * @note You can assume that the data pointed by the message is stable until - * you invoke @p chMsgRelease() because the sending thread is - * suspended until then. Always remember that the message data is not - * copied between the sender and the receiver, just a pointer is - * passed. - * - * @return The pointer to the message structure. Note, it is - * always the message associated to the thread on the - * top of the messages queue. - * @retval NULL if the queue is empty. - */ -msg_t chMsgGet(void) { - msg_t msg; - - chSysLock(); - msg = chMsgIsPendingI(currp) ? chMsgGetI(currp) : (msg_t)NULL; - chSysUnlock(); - return msg; -} - -/** - * @brief Releases the thread waiting on top of the messages queue. - * @note You can call this function only if there is a message already in - * the queue else the result will be unpredictable (a crash most likely). - * Exiting from the @p chMsgWait() ensures you have at least one - * message in the queue so it is not a big deal.
      - * The condition is only tested in debug mode in order to make this - * code as fast as possible. - * - * @param[in] msg the message returned to the message sender - */ -void chMsgRelease(msg_t msg) { - - chSysLock(); - chDbgAssert(chMsgIsPendingI(currp), - "chMsgRelease(), #1", - "no message pending"); - chSchWakeupS(fifo_remove(&currp->p_msgqueue), msg); - chSysUnlock(); -} - -#endif /* CH_USE_MESSAGES */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chmtx.c b/ChibiOS_2.0.8/os/kernel/src/chmtx.c deleted file mode 100644 index e0b63a3..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chmtx.c +++ /dev/null @@ -1,348 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chmtx.c - * @brief Mutexes code. - * - * @addtogroup mutexes - * @details Mutexes related APIs and services. - * - *

      Operation mode

      - * A mutex is a threads synchronization object that can be in two - * distinct states: - * - Not owned. - * - Owned by a thread. - * . - * Operations defined for mutexes: - * - Lock: The mutex is checked, if the mutex is not owned by - * some other thread then it is associated to the locking thread - * else the thread is queued on the mutex in a list ordered by - * priority. - * - Unlock: The mutex is released by the owner and the highest - * priority thread waiting in the queue, if any, is resumed and made - * owner of the mutex. - * . - * In order to use the Mutexes APIs the @p CH_USE_MUTEXES option must - * be enabled in @p chconf.h. - *

      Constraints

      - * In ChibiOS/RT the Unlock operations are always performed in - * lock-reverse order. The unlock API does not even have a parameter, - * the mutex to unlock is selected from an internal, per-thread, stack - * of owned mutexes. This both improves the performance and is - * required for an efficient implementation of the priority - * inheritance mechanism. - * - *

      The priority inversion problem

      - * The mutexes in ChibiOS/RT implements the full priority - * inheritance mechanism in order handle the priority inversion - * problem.
      - * When a thread is queued on a mutex, any thread, directly or - * indirectly, holding the mutex gains the same priority of the - * waiting thread (if their priority was not already equal or higher). - * The mechanism works with any number of nested mutexes and any - * number of involved threads. The algorithm complexity (worst case) - * is N with N equal to the number of nested mutexes. - * @{ - */ - -#include "ch.h" - -#if CH_USE_MUTEXES - -/** - * @brief Initializes s @p Mutex structure. - * - * @param[out] mp pointer to a @p Mutex structure - */ -void chMtxInit(Mutex *mp) { - - chDbgCheck(mp != NULL, "chMtxInit"); - - queue_init(&mp->m_queue); - mp->m_owner = NULL; -} - -/** - * @brief Locks the specified mutex. - * - * @param[in] mp pointer to the @p Mutex structure - */ -void chMtxLock(Mutex *mp) { - - chSysLock(); - - chMtxLockS(mp); - - chSysUnlock(); -} - -/** - * @brief Locks the specified mutex. - * - * @param[in] mp pointer to the @p Mutex structure - */ -void chMtxLockS(Mutex *mp) { - Thread *ctp = currp; - - chDbgCheck(mp != NULL, "chMtxLockS"); - - /* Ia the mutex already locked? */ - if (mp->m_owner != NULL) { - /* Priority inheritance protocol; explores the thread-mutex dependencies - boosting the priority of all the affected threads to equal the priority - of the running thread requesting the mutex.*/ - Thread *tp = mp->m_owner; - /* Does the running thread have higher priority than the mutex - ownning thread? */ - while (tp->p_prio < ctp->p_prio) { - /* Make priority of thread tp match the running thread's priority.*/ - tp->p_prio = ctp->p_prio; - /* The following states need priority queues reordering.*/ - switch (tp->p_state) { - case THD_STATE_WTMTX: - /* Re-enqueues the mutex owner with its new priority.*/ - prio_insert(dequeue(tp), (ThreadsQueue *)tp->p_u.wtobjp); - tp = ((Mutex *)tp->p_u.wtobjp)->m_owner; - continue; -#if CH_USE_CONDVARS | CH_USE_SEMAPHORES_PRIORITY | CH_USE_MESSAGES_PRIORITY -#if CH_USE_CONDVARS - case THD_STATE_WTCOND: -#endif -#if CH_USE_SEMAPHORES_PRIORITY - case THD_STATE_WTSEM: -#endif -#if CH_USE_MESSAGES_PRIORITY - case THD_STATE_SNDMSG: -#endif - /* Re-enqueues tp with its new priority on the queue.*/ - prio_insert(dequeue(tp), (ThreadsQueue *)tp->p_u.wtobjp); - break; -#endif - case THD_STATE_READY: - /* Re-enqueues tp with its new priority on the ready list.*/ - chSchReadyI(dequeue(tp)); - } - break; - } - /* Sleep on the mutex.*/ - prio_insert(ctp, &mp->m_queue); - ctp->p_u.wtobjp = mp; - chSchGoSleepS(THD_STATE_WTMTX); - /* It is assumed that the thread performing the unlock operation assigns - the mutex to this thread.*/ - chDbgAssert(mp->m_owner == ctp, "chMtxLockS(), #1", "not owner"); - chDbgAssert(ctp->p_mtxlist == mp, "chMtxLockS(), #2", "not owned"); - } - else { - /* It was not owned, inserted in the owned mutexes list.*/ - mp->m_owner = ctp; - mp->m_next = ctp->p_mtxlist; - ctp->p_mtxlist = mp; - } -} - -/** - * @brief Tries to lock a mutex. - * @details This function does not have any overhead related to - * the priority inheritance mechanism because it does not try to - * enter a sleep state on the mutex. - * - * @param[in] mp pointer to the @p Mutex structure - * @retval TRUE if the mutex was successfully acquired - * @retval FALSE if the lock attempt failed. - */ -bool_t chMtxTryLock(Mutex *mp) { - bool_t b; - - chSysLock(); - - b = chMtxTryLockS(mp); - - chSysUnlock(); - return b; -} - -/** - * @brief Tries to lock a mutex. - * @details This function does not have any overhead related to - * the priority inheritance mechanism because it does not try to - * enter a sleep state on the mutex. - * - * @param[in] mp pointer to the @p Mutex structure - * @retval TRUE if the mutex was successfully acquired - * @retval FALSE if the lock attempt failed. - */ -bool_t chMtxTryLockS(Mutex *mp) { - - chDbgCheck(mp != NULL, "chMtxTryLockS"); - - if (mp->m_owner != NULL) - return FALSE; - mp->m_owner = currp; - mp->m_next = currp->p_mtxlist; - currp->p_mtxlist = mp; - return TRUE; -} - -/** - * @brief Unlocks the next owned mutex in reverse lock order. - * - * @return The pointer to the unlocked mutex. - */ -Mutex *chMtxUnlock(void) { - Thread *ctp = currp; - Mutex *ump, *mp; - - chSysLock(); - chDbgAssert(ctp->p_mtxlist != NULL, - "chMtxUnlock(), #1", - "owned mutexes list empty"); - chDbgAssert(ctp->p_mtxlist->m_owner == ctp, - "chMtxUnlock(), #2", - "ownership failure"); - /* Removes the top Mutex from the Threads's owned mutexes list and matk it - as not owned.*/ - ump = ctp->p_mtxlist; - ctp->p_mtxlist = ump->m_next; - /* If a thread is waiting on the mutex then the fun part begins.*/ - if (chMtxQueueNotEmptyS(ump)) { - Thread *tp; - - /* Recalculates the optimal thread priority by scanning the owned - mutexes list.*/ - tprio_t newprio = ctp->p_realprio; - mp = ctp->p_mtxlist; - while (mp != NULL) { - /* If the highest priority thread waiting in the mutexes list has a - greater priority than the current thread base priority then the final - priority will have at least that priority.*/ - if (chMtxQueueNotEmptyS(mp) && (mp->m_queue.p_next->p_prio > newprio)) - newprio = mp->m_queue.p_next->p_prio; - mp = mp->m_next; - } - /* Assigns to the current thread the highest priority among all the - waiting threads.*/ - ctp->p_prio = newprio; - /* Awakens the highest priority thread waiting for the unlocked mutex and - assigns the mutex to it.*/ - tp = fifo_remove(&ump->m_queue); - ump->m_owner = tp; - ump->m_next = tp->p_mtxlist; - tp->p_mtxlist = ump; - chSchWakeupS(tp, RDY_OK); - } - else - ump->m_owner = NULL; - chSysUnlock(); - return ump; -} - -/** - * @brief Unlocks the next owned mutex in reverse lock order. - * @note This function does not reschedule internally. - * - * @return The pointer to the unlocked mutex. - */ -Mutex *chMtxUnlockS(void) { - Thread *ctp = currp; - Mutex *ump, *mp; - - chDbgAssert(ctp->p_mtxlist != NULL, - "chMtxUnlockS(), #1", - "owned mutexes list empty"); - chDbgAssert(ctp->p_mtxlist->m_owner == ctp, - "chMtxUnlockS(), #2", - "ownership failure"); - - /* Removes the top Mutex from the owned mutexes list and marks it as not - owned.*/ - ump = ctp->p_mtxlist; - ctp->p_mtxlist = ump->m_next; - /* If a thread is waiting on the mutex then the fun part begins.*/ - if (chMtxQueueNotEmptyS(ump)) { - Thread *tp; - - /* Recalculates the optimal thread priority by scanning the owned - mutexes list.*/ - tprio_t newprio = ctp->p_realprio; - mp = ctp->p_mtxlist; - while (mp != NULL) { - /* If the highest priority thread waiting in the mutexes list has a - greater priority than the current thread base priority then the final - priority will have at least that priority.*/ - if (chMtxQueueNotEmptyS(mp) && (mp->m_queue.p_next->p_prio > newprio)) - newprio = mp->m_queue.p_next->p_prio; - mp = mp->m_next; - } - ctp->p_prio = newprio; - /* Awakens the highest priority thread waiting for the unlocked mutex and - assigns the mutex to it.*/ - tp = fifo_remove(&ump->m_queue); - ump->m_owner = tp; - ump->m_next = tp->p_mtxlist; - tp->p_mtxlist = ump; - chSchReadyI(tp); - } - else - ump->m_owner = NULL; - return ump; -} - -/** - * @brief Unlocks all the mutexes owned by the invoking thread. - * @details This function is MUCH MORE efficient than releasing the - * mutexes one by one and not just because the call overhead, - * this function does not have any overhead related to the priority - * inheritance mechanism. - */ -void chMtxUnlockAll(void) { - Thread *ctp = currp; - - chSysLock(); - if (ctp->p_mtxlist != NULL) { - do { - Mutex *ump = ctp->p_mtxlist; - ctp->p_mtxlist = ump->m_next; - if (chMtxQueueNotEmptyS(ump)) { - Thread *tp = fifo_remove(&ump->m_queue); - ump->m_owner = tp; - ump->m_next = tp->p_mtxlist; - tp->p_mtxlist = ump; - chSchReadyI(tp); - } - else - ump->m_owner = NULL; - } while (ctp->p_mtxlist != NULL); - ctp->p_prio = ctp->p_realprio; - chSchRescheduleS(); - } - chSysUnlock(); -} - -#endif /* CH_USE_MUTEXES */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chqueues.c b/ChibiOS_2.0.8/os/kernel/src/chqueues.c deleted file mode 100644 index 8d35003..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chqueues.c +++ /dev/null @@ -1,363 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chqueues.c - * @brief I/O Queues code. - * - * @addtogroup io_queues - * @details ChibiOS/RT queues are mostly used in serial-like device drivers. - * The device drivers are usually designed to have a lower side - * (lower driver, it is usually an interrupt service routine) and an - * upper side (upper driver, accessed by the application threads).
      - * There are several kind of queues:
      - * - Input queue, unidirectional queue where the writer is the - * lower side and the reader is the upper side. - * - Output queue, unidirectional queue where the writer is the - * upper side and the reader is the lower side. - * - Full duplex queue, bidirectional queue. Full duplex queues - * are implemented by pairing an input queue and an output queue - * together. - * . - * In order to use the I/O queues the @p CH_USE_QUEUES option must - * be enabled in @p chconf.h.
      - * I/O queues are usually used as an implementation layer for the I/O - * channels interface, also see @ref io_channels. - * @{ - */ - -#include "ch.h" - -#if CH_USE_QUEUES - -/** - * @brief Initializes an input queue. - * @details A Semaphore is internally initialized and works as a counter of - * the bytes contained in the queue. - * @note The callback is invoked from within the S-Locked system state, - * see @ref system_states. - * - * @param[out] iqp pointer to an @p InputQueue structure - * @param[in] bp pointer to a memory area allocated as queue buffer - * @param[in] size size of the queue buffer - * @param[in] infy pointer to a callback function that is invoked when - * data is read from the queue. The value can be @p NULL. - */ -void chIQInit(InputQueue *iqp, uint8_t *bp, size_t size, qnotify_t infy) { - - iqp->q_buffer = iqp->q_rdptr = iqp->q_wrptr = bp; - iqp->q_top = bp + size; - iqp->q_notify = infy; - chSemInit(&iqp->q_sem, 0); -} - -/** - * @brief Resets an input queue. - * @details All the data in the input queue is erased and lost, any waiting - * thread is resumed with status @p Q_RESET. - * @note A reset operation can be used by a low level driver in order to - * obtain immediate attention from the high level layers. - * - * @param[in] iqp pointer to an @p InputQueue structure - */ -void chIQResetI(InputQueue *iqp) { - - iqp->q_rdptr = iqp->q_wrptr = iqp->q_buffer; - chSemResetI(&iqp->q_sem, 0); -} - -/** - * @brief Input queue write. - * @details A byte value is written into the low end of an input queue. - * - * @param[in] iqp pointer to an @p InputQueue structure - * @param[in] b the byte value to be written in the queue - * @return The operation status, it can be one of: - * @retval Q_OK if the operation has been completed with success. - * @retval Q_FULL if the queue is full and the operation cannot be - * completed. - */ -msg_t chIQPutI(InputQueue *iqp, uint8_t b) { - - if (chIQIsFull(iqp)) - return Q_FULL; - - *iqp->q_wrptr++ = b; - if (iqp->q_wrptr >= iqp->q_top) - iqp->q_wrptr = iqp->q_buffer; - chSemSignalI(&iqp->q_sem); - return Q_OK; -} - -/** - * @brief Input queue read with timeout. - * @details This function reads a byte value from an input queue. If the queue - * is empty then the calling thread is suspended until a byte arrives - * in the queue or a timeout occurs. - * - * @param[in] iqp pointer to an @p InputQueue structure - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return A byte value from the queue or: - * @retval Q_TIMEOUT if the specified time expired. - * @retval Q_RESET if the queue was reset. - */ -msg_t chIQGetTimeout(InputQueue *iqp, systime_t time) { - uint8_t b; - msg_t msg; - - chSysLock(); - - if (iqp->q_notify) - iqp->q_notify(); - - if ((msg = chSemWaitTimeoutS(&iqp->q_sem, time)) < RDY_OK) { - chSysUnlock(); - return msg; - } - b = *iqp->q_rdptr++; - if (iqp->q_rdptr >= iqp->q_top) - iqp->q_rdptr = iqp->q_buffer; - - chSysUnlock(); - return b; -} - -/** - * @brief Input queue read with timeout. - * @details The function reads data from an input queue into a buffer. The - * operation completes when the specified amount of data has been - * transferred or after the specified timeout or if the queue has - * been reset. - * @note The function is not atomic, if you need atomicity it is suggested - * to use a semaphore or a mutex for mutual exclusion. - * @note The queue callback is invoked before entering a sleep state and at - * the end of the transfer. - * - * @param[in] iqp pointer to an @p InputQueue structure - * @param[out] bp pointer to the data buffer - * @param[in] n the maximum amount of data to be transferred, the - * value 0 is reserved - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The number of bytes effectively transferred. - */ -size_t chIQReadTimeout(InputQueue *iqp, uint8_t *bp, - size_t n, systime_t time) { - qnotify_t nfy = iqp->q_notify; - size_t r = 0; - - chDbgCheck(n > 0, "chIQReadTimeout"); - - chSysLock(); - while (TRUE) { - if (chIQIsEmpty(iqp)) { - if (nfy) - nfy(); - if ((chSemWaitTimeoutS(&iqp->q_sem, time) != RDY_OK)) { - chSysUnlock(); - return r; - } - } - else - chSemFastWaitI(&iqp->q_sem); - *bp++ = *iqp->q_rdptr++; - if (iqp->q_rdptr >= iqp->q_top) - iqp->q_rdptr = iqp->q_buffer; - if (nfy) - nfy(); - chSysUnlock(); /* Gives a preemption chance in a controlled point.*/ - r++; - if (--n == 0) { - chSysLock(); - if (nfy) - nfy(); - chSysUnlock(); - return r; - } - chSysLock(); - } -} - -/** - * @brief Initializes an output queue. - * @details A Semaphore is internally initialized and works as a counter of - * the free bytes in the queue. - * @note The callback is invoked from within the S-Locked system state, - * see @ref system_states. - * - * @param[out] oqp pointer to an @p OutputQueue structure - * @param[in] bp pointer to a memory area allocated as queue buffer - * @param[in] size size of the queue buffer - * @param[in] onfy pointer to a callback function that is invoked when - * data is written to the queue. The value can be @p NULL. - */ -void chOQInit(OutputQueue *oqp, uint8_t *bp, size_t size, qnotify_t onfy) { - - oqp->q_buffer = oqp->q_rdptr = oqp->q_wrptr = bp; - oqp->q_top = bp + size; - oqp->q_notify = onfy; - chSemInit(&oqp->q_sem, (cnt_t)size); -} - -/** - * @brief Resets an output queue. - * @details All the data in the output queue is erased and lost, any waiting - * thread is resumed with status @p Q_RESET. - * @note A reset operation can be used by a low level driver in order to - * obtain immediate attention from the high level layers. - * - * @param[in] oqp pointer to an @p OutputQueue structure - */ -void chOQResetI(OutputQueue *oqp) { - - oqp->q_rdptr = oqp->q_wrptr = oqp->q_buffer; - chSemResetI(&oqp->q_sem, (cnt_t)(oqp->q_top - oqp->q_buffer)); -} - -/** - * @brief Output queue write with timeout. - * @details This function writes a byte value to an output queue. If the queue - * is full then the calling thread is suspended until there is space - * in the queue or a timeout occurs. - * - * @param[in] oqp pointer to an @p OutputQueue structure - * @param[in] b the byte value to be written in the queue - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The operation status: - * @retval Q_OK if the operation succeeded. - * @retval Q_TIMEOUT if the specified time expired. - * @retval Q_RESET if the queue was reset. - */ -msg_t chOQPutTimeout(OutputQueue *oqp, uint8_t b, systime_t time) { - msg_t msg; - - chSysLock(); - if ((msg = chSemWaitTimeoutS(&oqp->q_sem, time)) < RDY_OK) { - chSysUnlock(); - return msg; - } - *oqp->q_wrptr++ = b; - if (oqp->q_wrptr >= oqp->q_top) - oqp->q_wrptr = oqp->q_buffer; - - if (oqp->q_notify) - oqp->q_notify(); - - chSysUnlock(); - return Q_OK; -} - -/** - * @brief Output queue read. - * @details A byte value is read from the low end of an output queue. - * - * @param[in] oqp pointer to an @p OutputQueue structure - * @return The byte value from the queue or: - * @retval Q_EMPTY if the queue is empty. - */ -msg_t chOQGetI(OutputQueue *oqp) { - uint8_t b; - - if (chOQIsEmpty(oqp)) - return Q_EMPTY; - - b = *oqp->q_rdptr++; - if (oqp->q_rdptr >= oqp->q_top) - oqp->q_rdptr = oqp->q_buffer; - chSemSignalI(&oqp->q_sem); - return b; -} - -/** - * @brief Output queue write with timeout. - * @details The function writes data from a buffer to an output queue. The - * operation completes when the specified amount of data has been - * transferred or after the specified timeout or if the queue has - * been reset. - * @note The function is not atomic, if you need atomicity it is suggested - * to use a semaphore or a mutex for mutual exclusion. - * @note The queue callback is invoked before entering a sleep state and at - * the end of the transfer. - * - * @param[in] oqp pointer to an @p OutputQueue structure - * @param[out] bp pointer to the data buffer - * @param[in] n the maximum amount of data to be transferred, the - * value 0 is reserved - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @return The number of bytes effectively transferred. - */ -size_t chOQWriteTimeout(OutputQueue *oqp, const uint8_t *bp, - size_t n, systime_t time) { - qnotify_t nfy = oqp->q_notify; - size_t w = 0; - - chDbgCheck(n > 0, "chOQWriteTimeout"); - - chSysLock(); - while (TRUE) { - if (chOQIsFull(oqp)) { - if (nfy) - nfy(); - if ((chSemWaitTimeoutS(&oqp->q_sem, time) != RDY_OK)) { - chSysUnlock(); - return w; - } - } - else - chSemFastWaitI(&oqp->q_sem); - *oqp->q_wrptr++ = *bp++; - if (oqp->q_wrptr >= oqp->q_top) - oqp->q_wrptr = oqp->q_buffer; - chSysUnlock(); /* Gives a preemption chance in a controlled point.*/ - w++; - if (--n == 0) { - chSysLock(); - if (nfy) - nfy(); - chSysUnlock(); - return w; - } - chSysLock(); - } -} -#endif /* CH_USE_QUEUES */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chregistry.c b/ChibiOS_2.0.8/os/kernel/src/chregistry.c deleted file mode 100644 index c5d4ee1..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chregistry.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chregistry.c - * @brief Threads registry code. - * - * @addtogroup registry - * @details Threads Registry related APIs and services. - * - *

      Operation mode

      - * The Threads Registry is a double linked list that holds all the - * active threads in the system.
      - * Operations defined for the registry: - * - First, returns the first, in creation order, active thread - * in the system. - * - Next, returns the next, in creation order, active thread - * in the system. - * . - * The registry is meant to be mainly a debug feature, as example, - * using the registry a debugger can enumerate the active threads - * in any given moment or the shell can print the active threads - * and their state.
      - * Another possible use is for centralized threads memory management, - * terminating threads can pulse an event source and an event handler - * can perform a scansion of the registry in order to recover the - * memory.
      - * In order to use the threads registry the @p CH_USE_REGISTRY option - * must be enabled in @p chconf.h. - * @{ - */ -#include "ch.h" - -#if CH_USE_REGISTRY - -/** - * @brief Returns the first thread in the system. - * @details Returns the most ancient thread in the system, usually this is - * the main thread unless it terminated. - * @note A reference is added to the returned thread in order to make sure - * it status is not lost. - * @note This function cannot return @p NULL because there is always at - * least one thread in the system. - * - * @return A reference to the first thread. - */ -Thread *chRegFirstThread(void) { - Thread *tp; - - chSysLock(); - tp = rlist.r_newer; -#if CH_USE_DYNAMIC - tp->p_refs++; -#endif - chSysUnlock(); - return tp; -} - -/** - * @brief Returns the thread next to the specified one. - * @details The reference counter of the specified thread is decremented and - * the reference counter of the returned thread is incremented. - * - * @param[in] tp pointer to the thread - * @return A reference to the next thread. - * @retval NULL if there is no next thread. - */ -Thread *chRegNextThread(Thread *tp) { - Thread *ntp; - - chSysLock(); - ntp = tp->p_newer; - if (ntp == (Thread *)&rlist) - ntp = NULL; -#if CH_USE_DYNAMIC - else { - chDbgAssert(ntp->p_refs < 255, "chRegNextThread(), #1", - "too many references"); - ntp->p_refs++; - } -#endif - chSysUnlock(); -#if CH_USE_DYNAMIC - chThdRelease(tp); -#endif - return ntp; -} - -#endif /* CH_USE_REGISTRY */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chschd.c b/ChibiOS_2.0.8/os/kernel/src/chschd.c deleted file mode 100644 index c98350c..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chschd.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chschd.c - * @brief Scheduler code. - * - * @addtogroup scheduler - * @details This module provides the default portable scheduler code, - * scheduler functions can be individually captured by the port - * layer in order to provide architecture optimized equivalents. - * When a function is captured its default code is not built into - * the OS image, the optimized version is included instead. - * @{ - */ - -#include "ch.h" - -/** - * @brief Ready list header. - */ -#if !defined(PORT_OPTIMIZED_RLIST_VAR) || defined(__DOXYGEN__) -ReadyList rlist; -#endif /* !defined(PORT_OPTIMIZED_RLIST_VAR) */ - -/** - * @brief Scheduler initialization. - * @note Internally invoked by the @p chSysInit(), not an API. - */ -void scheduler_init(void) { - - queue_init(&rlist.r_queue); - rlist.r_prio = NOPRIO; -#if CH_TIME_QUANTUM > 0 - rlist.r_preempt = CH_TIME_QUANTUM; -#endif -#if CH_USE_REGISTRY - rlist.r_newer = rlist.r_older = (Thread *)&rlist; -#endif -} - -/** - * @brief Inserts a thread in the Ready List. - * @note The function does not reschedule, the @p chSchRescheduleS() should - * be called soon after. - * - * @param[in] tp the Thread to be made ready - * @return The Thread pointer. - */ -#if !defined(PORT_OPTIMIZED_READYI) || defined(__DOXYGEN__) -#if CH_OPTIMIZE_SPEED -/* NOTE: it is inlined in this module only.*/ -INLINE Thread *chSchReadyI(Thread *tp) { -#else -Thread *chSchReadyI(Thread *tp) { -#endif - Thread *cp; - - tp->p_state = THD_STATE_READY; - cp = (Thread *)&rlist.r_queue; - do { - cp = cp->p_next; - } while (cp->p_prio >= tp->p_prio); - /* Insertion on p_prev.*/ - tp->p_next = cp; - tp->p_prev = cp->p_prev; - tp->p_prev->p_next = cp->p_prev = tp; - return tp; -} -#endif /* !defined(PORT_OPTIMIZED_READYI) */ - -/** - * @brief Puts the current thread to sleep into the specified state. - * @details The thread goes into a sleeping state. The @ref thread_states are - * described into @p threads.h. - * - * @param[in] newstate the new thread state - */ -#if !defined(PORT_OPTIMIZED_GOSLEEPS) || defined(__DOXYGEN__) -void chSchGoSleepS(tstate_t newstate) { - Thread *otp; - - (otp = currp)->p_state = newstate; -#if CH_TIME_QUANTUM > 0 - rlist.r_preempt = CH_TIME_QUANTUM; -#endif - setcurrp(fifo_remove(&rlist.r_queue)); - currp->p_state = THD_STATE_CURRENT; - chDbgTrace(otp); - chSysSwitchI(currp, otp); -} -#endif /* !defined(PORT_OPTIMIZED_GOSLEEPS) */ - -#if !defined(PORT_OPTIMIZED_GOSLEEPTIMEOUTS) || defined(__DOXYGEN__) -/* - * Timeout wakeup callback. - */ -static void wakeup(void *p) { - Thread *tp = (Thread *)p; - - switch (tp->p_state) { - case THD_STATE_READY: - /* Handling the special case where the thread has been made ready by - another thread with higher priority.*/ - return; -#if CH_USE_SEMAPHORES || (CH_USE_CONDVARS && CH_USE_CONDVARS_TIMEOUT) -#if CH_USE_SEMAPHORES - case THD_STATE_WTSEM: - chSemFastSignalI((Semaphore *)tp->p_u.wtobjp); - /* Falls into, intentional. */ -#endif -#if CH_USE_CONDVARS && CH_USE_CONDVARS_TIMEOUT - case THD_STATE_WTCOND: -#endif - /* States requiring dequeuing.*/ - dequeue(tp); -#endif - } - tp->p_u.rdymsg = RDY_TIMEOUT; - chSchReadyI(tp); -} - -/** - * @brief Puts the current thread to sleep into the specified state with - * timeout specification. - * @details The thread goes into a sleeping state, if it is not awakened - * explicitly within the specified timeout then it is forcibly - * awakened with a @p RDY_TIMEOUT low level message. The @ref - * thread_states are described into @p threads.h. - * - * @param[in] newstate the new thread state - * @param[in] time the number of ticks before the operation timeouts, the - * special values are handled as follow: - * - @a TIME_INFINITE the thread enters an infinite sleep - * state, this is equivalent to invoking - * @p chSchGoSleepS() but, of course, less efficient. - * - @a TIME_IMMEDIATE this value is accepted but - * interpreted as a normal time specification not as an - * immediate timeout specification. - * . - * @return The wakeup message. - * @retval RDY_TIMEOUT if a timeout occurs. - */ -msg_t chSchGoSleepTimeoutS(tstate_t newstate, systime_t time) { - - if (TIME_INFINITE != time) { - VirtualTimer vt; - - chVTSetI(&vt, time, wakeup, currp); - chSchGoSleepS(newstate); - if (chVTIsArmedI(&vt)) - chVTResetI(&vt); - } - else - chSchGoSleepS(newstate); - return currp->p_u.rdymsg; -} -#endif /* !defined(PORT_OPTIMIZED_GOSLEEPTIMEOUTS) */ - -/** - * @brief Wakes up a thread. - * @details The thread is inserted into the ready list or immediately made - * running depending on its relative priority compared to the current - * thread. - * @note It is equivalent to a @p chSchReadyI() followed by a - * @p chSchRescheduleS() but much more efficient. - * @note The function assumes that the current thread has the highest - * priority. - * - * @param[in] ntp the Thread to be made ready - * @param[in] msg message to the awakened thread - */ -#if !defined(PORT_OPTIMIZED_WAKEUPS) || defined(__DOXYGEN__) -void chSchWakeupS(Thread *ntp, msg_t msg) { - - ntp->p_u.rdymsg = msg; - /* If the waken thread has a not-greater priority than the current - one then it is just inserted in the ready list else it made - running immediately and the invoking thread goes in the ready - list instead.*/ - if (ntp->p_prio <= currp->p_prio) - chSchReadyI(ntp); - else { - Thread *otp = chSchReadyI(currp); -#if CH_TIME_QUANTUM > 0 - rlist.r_preempt = CH_TIME_QUANTUM; -#endif - setcurrp(ntp); - ntp->p_state = THD_STATE_CURRENT; - chDbgTrace(otp); - chSysSwitchI(ntp, otp); - } -} -#endif /* !defined(PORT_OPTIMIZED_WAKEUPS) */ - -/** - * @brief Switches to the first thread on the runnable queue. - * @note It is intended to be called if @p chSchRescRequiredI() evaluates - * to @p TRUE. - */ -#if !defined(PORT_OPTIMIZED_DORESCHEDULEI) || defined(__DOXYGEN__) -void chSchDoRescheduleI(void) { - Thread *otp; - -#if CH_TIME_QUANTUM > 0 - rlist.r_preempt = CH_TIME_QUANTUM; -#endif - otp = currp; - /* Picks the first thread from the ready queue and makes it current.*/ - setcurrp(fifo_remove(&rlist.r_queue)); - currp->p_state = THD_STATE_CURRENT; - chSchReadyI(otp); - chDbgTrace(otp); - chSysSwitchI(currp, otp); -} -#endif /* !defined(PORT_OPTIMIZED_DORESCHEDULEI) */ - -/** - * @brief Performs a reschedule if a higher priority thread is runnable. - * @details If a thread with a higher priority than the current thread is in - * the ready list then make the higher priority thread running. - */ -#if !defined(PORT_OPTIMIZED_RESCHEDULES) || defined(__DOXYGEN__) -void chSchRescheduleS(void) { - - if (chSchIsRescRequiredI()) - chSchDoRescheduleI(); -} -#endif /* !defined(PORT_OPTIMIZED_RESCHEDULES) */ - -/** - * @brief Evaluates if a reschedule is required. - * @details The decision is taken by comparing the relative priorities and - * depending on the state of the round robin timeout counter. - * @note This function is meant to be used in the timer interrupt handler - * where @p chVTDoTickI() is invoked. - * - * @retval TRUE if there is a thread that should go in running state. - * @retval FALSE if a reschedule is not required. - */ -#if !defined(PORT_OPTIMIZED_ISRESCHREQUIREDEXI) || defined(__DOXYGEN__) -bool_t chSchIsRescRequiredExI(void) { - tprio_t p1 = firstprio(&rlist.r_queue); - tprio_t p2 = currp->p_prio; -#if CH_TIME_QUANTUM > 0 - /* If the running thread has not reached its time quantum, reschedule only - if the first thread on the ready queue has a higher priority. - Otherwise, if the running thread has used up its time quantum, reschedule - if the first thread on the ready queue has equal or higher priority.*/ - return rlist.r_preempt ? p1 > p2 : p1 >= p2; -#else - /* If the round robin preemption feature is not enabled then performs a - simpler comparison.*/ - return p1 > p2; -#endif -} -#endif /* !defined(PORT_OPTIMIZED_ISRESCHREQUIREDEXI) */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chsem.c b/ChibiOS_2.0.8/os/kernel/src/chsem.c deleted file mode 100644 index 4769f15..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chsem.c +++ /dev/null @@ -1,291 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chsem.c - * @brief Semaphores code. - * - * @addtogroup semaphores - * @details Semaphores related APIs and services. - * - *

      Operation mode

      - * Semaphores are a flexible synchronization primitive, ChibiOS/RT - * implements semaphores in their "counting semaphores" variant as - * defined by Edsger Dijkstra plus several enhancements like: - * - Wait operation with timeout. - * - Reset operation. - * - Atomic wait+signal operation. - * - Return message from the wait operation (OK, RESET, TIMEOUT). - * . - * The binary semaphores variant can be easily implemented using - * counting semaphores.
      - * Operations defined for semaphores: - * - Signal: The semaphore counter is increased and if the - * result is non-positive then a waiting thread is removed from - * the semaphore queue and made ready for execution. - * - Wait: The semaphore counter is decreased and if the result - * becomes negative the thread is queued in the semaphore and - * suspended. - * - Reset: The semaphore counter is reset to a non-negative - * value and all the threads in the queue are released. - * . - * Semaphores can be used as guards for mutual exclusion zones - * (note that mutexes are recommended for this kind of use) but - * also have other uses, queues guards and counters as example.
      - * Semaphores usually use a FIFO queuing strategy but it is possible - * to make them order threads by priority by enabling - * @p CH_USE_SEMAPHORES_PRIORITY in @p chconf.h.
      - * In order to use the Semaphores APIs the @p CH_USE_SEMAPHORES - * option must be enabled in @p chconf.h. - * @{ - */ - -#include "ch.h" - -#if CH_USE_SEMAPHORES - -#if CH_USE_SEMAPHORES_PRIORITY -#define sem_insert(tp, qp) prio_insert(tp, qp) -#else -#define sem_insert(tp, qp) queue_insert(tp, qp) -#endif - -/** - * @brief Initializes a semaphore with the specified counter value. - * - * @param[out] sp pointer to a @p Semaphore structure - * @param[in] n initial value of the semaphore counter. Must be - * non-negative. - */ -void chSemInit(Semaphore *sp, cnt_t n) { - - chDbgCheck((sp != NULL) && (n >= 0), "chSemInit"); - - queue_init(&sp->s_queue); - sp->s_cnt = n; -} - -/** - * @brief Performs a reset operation on the semaphore. - * @note The released threads can recognize they were waked up by a reset - * rather than a signal because the @p chSemWait() will return - * @p RDY_RESET instead of @p RDY_OK. - * - * @param[in] sp pointer to a @p Semaphore structure - * @param[in] n the new value of the semaphore counter. The value must - * be non-negative. - */ -void chSemReset(Semaphore *sp, cnt_t n) { - - chSysLock(); - chSemResetI(sp, n); - chSchRescheduleS(); - chSysUnlock(); -} - -/** - * @brief Performs a reset operation on the semaphore. - * @note The released threads can recognize they were waked up by a reset - * rather than a signal because the @p chSemWait() will return - * @p RDY_RESET instead of @p RDY_OK. - * @note This function does not reschedule. - * - * @param[in] sp pointer to a @p Semaphore structure - * @param[in] n the new value of the semaphore counter. The value must - * be non-negative. - */ -void chSemResetI(Semaphore *sp, cnt_t n) { - cnt_t cnt; - - chDbgCheck((sp != NULL) && (n >= 0), "chSemResetI"); - - cnt = sp->s_cnt; - sp->s_cnt = n; - while (++cnt <= 0) - chSchReadyI(lifo_remove(&sp->s_queue))->p_u.rdymsg = RDY_RESET; -} - -/** - * @brief Performs a wait operation on a semaphore. - * - * @param[in] sp pointer to a @p Semaphore structure - * @retval RDY_OK if the semaphore was signaled or not taken. - * @retval RDY_RESET if the semaphore was reset using @p chSemReset(). - */ -msg_t chSemWait(Semaphore *sp) { - msg_t msg; - - chSysLock(); - msg = chSemWaitS(sp); - chSysUnlock(); - return msg; -} - -/** - * @brief Performs a wait operation on a semaphore. - * - * @param[in] sp pointer to a @p Semaphore structure - * @retval RDY_OK if the semaphore was signaled or not taken. - * @retval RDY_RESET if the semaphore was reset using @p chSemReset(). - */ -msg_t chSemWaitS(Semaphore *sp) { - - chDbgCheck(sp != NULL, "chSemWaitS"); - - if (--sp->s_cnt < 0) { - currp->p_u.wtobjp = sp; - sem_insert(currp, &sp->s_queue); - chSchGoSleepS(THD_STATE_WTSEM); - return currp->p_u.rdymsg; - } - return RDY_OK; -} - -/** - * @brief Performs a wait operation on a semaphore with timeout specification. - * - * @param[in] sp pointer to a @p Semaphore structure - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @retval RDY_OK if the semaphore was signaled or not taken. - * @retval RDY_RESET if the semaphore was reset using @p chSemReset(). - * @retval RDY_TIMEOUT if the semaphore was not signaled or reset within the - * specified timeout. - */ -msg_t chSemWaitTimeout(Semaphore *sp, systime_t time) { - msg_t msg; - - chSysLock(); - msg = chSemWaitTimeoutS(sp, time); - chSysUnlock(); - return msg; -} - -/** - * @brief Performs a wait operation on a semaphore with timeout specification. - * - * @param[in] sp pointer to a @p Semaphore structure - * @param[in] time the number of ticks before the operation timeouts, - * the following special values are allowed: - * - @a TIME_IMMEDIATE immediate timeout. - * - @a TIME_INFINITE no timeout. - * . - * @retval RDY_OK if the semaphore was signaled or not taken. - * @retval RDY_RESET if the semaphore was reset using @p chSemReset(). - * @retval RDY_TIMEOUT if the semaphore was not signaled or reset within the - * specified timeout. - */ -msg_t chSemWaitTimeoutS(Semaphore *sp, systime_t time) { - - chDbgCheck(sp != NULL, "chSemWaitTimeoutS"); - - if (--sp->s_cnt < 0) { - if (TIME_IMMEDIATE == time) { - sp->s_cnt++; - return RDY_TIMEOUT; - } - currp->p_u.wtobjp = sp; - sem_insert(currp, &sp->s_queue); - return chSchGoSleepTimeoutS(THD_STATE_WTSEM, time); - } - return RDY_OK; -} - -/** - * @brief Performs a signal operation on a semaphore. - * - * @param[in] sp pointer to a @p Semaphore structure - */ -void chSemSignal(Semaphore *sp) { - - chDbgCheck(sp != NULL, "chSemSignal"); - - chSysLock(); - if (++sp->s_cnt <= 0) - chSchWakeupS(fifo_remove(&sp->s_queue), RDY_OK); - chSysUnlock(); -} - -/** - * @brief Performs a signal operation on a semaphore. - * @note This function does not reschedule. - * - * @param[in] sp pointer to a @p Semaphore structure - */ -void chSemSignalI(Semaphore *sp) { - - chDbgCheck(sp != NULL, "chSemSignalI"); - - if (++sp->s_cnt <= 0) { - /* note, it is done this way in order to allow a tail call on - chSchReadyI().*/ - Thread *tp = fifo_remove(&sp->s_queue); - tp->p_u.rdymsg = RDY_OK; - chSchReadyI(tp); - } -} - -#if CH_USE_SEMSW -/** - * @brief Performs atomic signal and wait operations on two semaphores. - * @note The function is available only if the @p CH_USE_SEMSW - * option is enabled in @p chconf.h. - * - * @param[in] sps pointer to a @p Semaphore structure to be signaled - * @param[in] spw pointer to a @p Semaphore structure to be wait on - * @retval RDY_OK if the semaphore was signaled or not taken. - * @retval RDY_RESET if the semaphore was reset using @p chSemReset(). - */ -msg_t chSemSignalWait(Semaphore *sps, Semaphore *spw) { - msg_t msg; - - chDbgCheck((sps != NULL) && (spw != NULL), "chSemSignalWait"); - - chSysLock(); - if (++sps->s_cnt <= 0) - chSchReadyI(fifo_remove(&sps->s_queue))->p_u.rdymsg = RDY_OK; - if (--spw->s_cnt < 0) { - Thread *ctp = currp; - sem_insert(ctp, &spw->s_queue); - ctp->p_u.wtobjp = spw; - chSchGoSleepS(THD_STATE_WTSEM); - msg = ctp->p_u.rdymsg; - } - else { - chSchRescheduleS(); - msg = RDY_OK; - } - chSysUnlock(); - return msg; -} -#endif /* CH_USE_SEMSW */ - -#endif /* CH_USE_SEMAPHORES */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chsys.c b/ChibiOS_2.0.8/os/kernel/src/chsys.c deleted file mode 100644 index 21fee0e..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chsys.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chsys.c - * @brief System related code. - * - * @addtogroup system - * @details System related APIs and services: - * - Initialization. - * - Locks. - * - Interrupt Handling. - * - Power Management. - * - Abnormal Termination. - * . - * @{ - */ - -#include "ch.h" - -static WORKING_AREA(idle_thread_wa, IDLE_THREAD_STACK_SIZE); - -/** - * @brief This function implements the idle thread infinite loop. - * @details The function puts the processor in the lowest power mode capable - * to serve interrupts.
      - * The priority is internally set to the minimum system value so - * that this thread is executed only if there are no other ready - * threads in the system. - * - * @param[in] p the thread parameter, unused in this scenario - */ -static void idle_thread(void *p) { - - (void)p; - while (TRUE) { - port_wait_for_interrupt(); - IDLE_LOOP_HOOK(); - } -} - -/** - * @brief ChibiOS/RT initialization. - * @details After executing this function the current instructions stream - * becomes the main thread. - * @note Interrupts should be still disabled when @p chSysInit() is invoked - * and are internally enabled. - * @note The main thread is created with priority @p NORMALPRIO. - */ -void chSysInit(void) { - static Thread mainthread; - - port_init(); - scheduler_init(); - vt_init(); -#if CH_USE_MEMCORE - core_init(); -#endif -#if CH_USE_HEAP - heap_init(); -#endif -#if CH_DBG_ENABLE_TRACE - trace_init(); -#endif - - /* Now this instructions flow becomes the main thread.*/ - setcurrp(init_thread(&mainthread, NORMALPRIO)); - currp->p_state = THD_STATE_CURRENT; - chSysEnable(); - - /* This thread has the lowest priority in the system, its role is just to - serve interrupts in its context while keeping the lowest energy saving - mode compatible with the system status.*/ - chThdCreateStatic(idle_thread_wa, sizeof(idle_thread_wa), IDLEPRIO, - (tfunc_t)idle_thread, NULL); -} - -/** - * @brief Handles time ticks for round robin preemption and timer increments. - * @details Decrements the remaining time quantum of the running thread - * and preempts it when the quantum is used up. Increments system - * time and manages the timers. - * - * @note The frequency of the timer determines the system tick granularity - * and, together with the @p CH_TIME_QUANTUM macro, the round robin - * interval. - */ -void chSysTimerHandlerI(void) { - -#if CH_TIME_QUANTUM > 0 - /* Running thread has not used up quantum yet? */ - if (rlist.r_preempt > 0) - /* Decrement remaining quantum.*/ - rlist.r_preempt--; -#endif -#if CH_DBG_THREADS_PROFILING - currp->p_time++; -#endif - chVTDoTickI(); -} - -#if CH_USE_NESTED_LOCKS && !CH_OPTIMIZE_SPEED -void chSysLock(void) { - - chDbgAssert(currp->p_locks >= 0, - "chSysLock(), #1", - "negative nesting counter"); - if (currp->p_locks++ == 0) - port_lock(); -} - -void chSysUnlock(void) { - - chDbgAssert(currp->p_locks > 0, - "chSysUnlock(), #1", - "non-positive nesting counter"); - if (--currp->p_locks == 0) - port_unlock(); -} -#endif /* CH_USE_NESTED_LOCKS && !CH_OPTIMIZE_SPEED */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chthreads.c b/ChibiOS_2.0.8/os/kernel/src/chthreads.c deleted file mode 100644 index 05caa40..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chthreads.c +++ /dev/null @@ -1,522 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chthreads.c - * @brief Threads code. - * - * @addtogroup threads - * @details Threads related APIs and services. - * - *

      Operation mode

      - * A thread is an abstraction of an independent instructions flow. - * In ChibiOS/RT a thread is represented by a "C" function owning - * a processor context, state informations and a dedicated stack - * area. In this scenario static variables are shared among all - * threads while automatic variables are local to the thread.
      - * Operations defined for threads: - * - Init, a thread is prepared and put in the suspended - * state. - * - Create, a thread is started on the specified thread - * function. This operation is available in multiple variants, - * both static and dynamic. - * - Exit, a thread terminates by returning from its top - * level function or invoking a specific API, the thread can - * return a value that can be retrieved by other threads. - * - Wait, a thread waits for the termination of another - * thread and retrieves its return value. - * - Resume, a thread created in suspended state is started. - * - Sleep, the execution of a thread is suspended for the - * specified amount of time or the specified future absolute time - * is reached. - * - SetPriority, a thread changes its own priority level. - * - Yield, a thread voluntarily renounces to its time slot. - * . - * The threads subsystem is implicitly included in kernel however - * some of its part may be excluded by disabling them in @p chconf.h, - * see the @p CH_USE_WAITEXIT and @p CH_USE_DYNAMIC configuration - * options. - * @{ - */ - -#include "ch.h" - -/** - * @brief Initializes a thread structure. - * - * @param[in] tp pointer to the thread - * @param[in] prio the priority level for the new thread - * @return The same thread pointer passed as parameter. - */ -Thread *init_thread(Thread *tp, tprio_t prio) { - - tp->p_prio = prio; - tp->p_state = THD_STATE_SUSPENDED; - tp->p_flags = THD_MEM_MODE_STATIC; -#if CH_USE_MUTEXES - tp->p_realprio = prio; - tp->p_mtxlist = NULL; -#endif -#if CH_USE_EVENTS - tp->p_epending = 0; -#endif -#if CH_USE_NESTED_LOCKS - tp->p_locks = 0; -#endif -#if CH_DBG_THREADS_PROFILING - tp->p_time = 0; -#endif -#if CH_USE_DYNAMIC - tp->p_refs = 1; -#endif -#if CH_USE_WAITEXIT - list_init(&tp->p_waiting); -#endif -#if CH_USE_MESSAGES - queue_init(&tp->p_msgqueue); -#endif -#if CH_USE_REGISTRY - REG_INSERT(tp); -#endif -#if defined(THREAD_EXT_INIT) - THREAD_EXT_INIT(tp); -#endif - return tp; -} - -#if CH_DBG_FILL_THREADS -static void memfill(uint8_t *startp, uint8_t *endp, uint8_t v) { - - while (startp < endp) - *startp++ = v; -} -#endif - -/** - * @brief Creates a new thread into a static memory area. - * @details The new thread is initialized but not inserted in the ready list, - * the initial state is @p THD_STATE_SUSPENDED. - * @note A thread can terminate by calling @p chThdExit() or by simply - * returning from its main function. - * @note Threads created using this function do not obey to the - * @p CH_DBG_FILL_THREADS debug option because it would keep - * the kernel locked for too much time. - * - * @param[out] wsp pointer to a working area dedicated to the thread stack - * @param[in] size size of the working area - * @param[in] prio the priority level for the new thread - * @param[in] pf the thread function - * @param[in] arg an argument passed to the thread function. It can be - * @p NULL. - * @return The pointer to the @p Thread structure allocated for - * the thread into the working space area. - */ -Thread *chThdCreateI(void *wsp, size_t size, - tprio_t prio, tfunc_t pf, void *arg) { - /* Thread structure is layed out in the lower part of the thread workspace */ - Thread *tp = wsp; - - chDbgCheck((wsp != NULL) && (size >= THD_WA_SIZE(0)) && - (prio <= HIGHPRIO) && (pf != NULL), - "chThdCreateI"); - SETUP_CONTEXT(wsp, size, pf, arg); - return init_thread(tp, prio); -} - -/** - * @brief Creates a new thread into a static memory area. - * @note A thread can terminate by calling @p chThdExit() or by simply - * returning from its main function. - * - * @param[out] wsp pointer to a working area dedicated to the thread stack - * @param[in] size size of the working area - * @param[in] prio the priority level for the new thread - * @param[in] pf the thread function - * @param[in] arg an argument passed to the thread function. It can be - * @p NULL. - * @return The pointer to the @p Thread structure allocated for - * the thread into the working space area. - */ -Thread *chThdCreateStatic(void *wsp, size_t size, - tprio_t prio, tfunc_t pf, void *arg) { - Thread *tp; - -#if CH_DBG_FILL_THREADS - memfill((uint8_t *)wsp, (uint8_t *)wsp + sizeof(Thread), THREAD_FILL_VALUE); - memfill((uint8_t *)wsp + sizeof(Thread), - (uint8_t *)wsp + size, STACK_FILL_VALUE); -#endif - chSysLock(); - chSchWakeupS(tp = chThdCreateI(wsp, size, prio, pf, arg), RDY_OK); - chSysUnlock(); - return tp; -} - -#if CH_USE_DYNAMIC && CH_USE_HEAP -/** - * @brief Creates a new thread allocating the memory from the heap. - * @note A thread can terminate by calling @p chThdExit() or by simply - * returning from its main function. - * @note The memory allocated for the thread is not released when the thread - * terminates but when a @p chThdWait() is performed. - * @note The function is available only if the @p CH_USE_DYNAMIC, - * @p CH_USE_HEAP and @p CH_USE_WAITEXIT options are enabled - * in @p chconf.h. - * - * @param[in] heapp heap from which allocate the memory or @p NULL for the - * default heap - * @param[in] size size of the working area to be allocated - * @param[in] prio the priority level for the new thread - * @param[in] pf the thread function - * @param[in] arg an argument passed to the thread function. It can be - * @p NULL. - * @return The pointer to the @p Thread structure allocated for - * the thread into the working space area. - * @retval NULL if the memory cannot be allocated. - */ -Thread *chThdCreateFromHeap(MemoryHeap *heapp, size_t size, - tprio_t prio, tfunc_t pf, void *arg) { - void *wsp; - Thread *tp; - - wsp = chHeapAlloc(heapp, size); - if (wsp == NULL) - return NULL; - -#if CH_DBG_FILL_THREADS - memfill((uint8_t *)wsp, (uint8_t *)wsp + sizeof(Thread), THREAD_FILL_VALUE); - memfill((uint8_t *)wsp + sizeof(Thread), - (uint8_t *)wsp + size, STACK_FILL_VALUE); -#endif - - chSysLock(); - tp = chThdCreateI(wsp, size, prio, pf, arg); - tp->p_flags = THD_MEM_MODE_HEAP; - chSchWakeupS(tp, RDY_OK); - chSysUnlock(); - return tp; -} -#endif /* CH_USE_DYNAMIC && CH_USE_HEAP */ - -#if CH_USE_DYNAMIC && CH_USE_MEMPOOLS -/** - * @brief Creates a new thread allocating the memory from the specified - * memory pool. - * @note A thread can terminate by calling @p chThdExit() or by simply - * returning from its main function. - * @note The memory allocated for the thread is not released when the thread - * terminates but when a @p chThdWait() is performed. - * @note The function is available only if the @p CH_USE_DYNAMIC, - * @p CH_USE_MEMPOOLS and @p CH_USE_WAITEXIT options are enabled - * in @p chconf.h. - * - * @param[in] mp pointer to the memory pool object - * @param[in] prio the priority level for the new thread - * @param[in] pf the thread function - * @param[in] arg an argument passed to the thread function. It can be - * @p NULL. - * @return The pointer to the @p Thread structure allocated for - * the thread into the working space area. - * @retval NULL if the memory pool is empty. - */ -Thread *chThdCreateFromMemoryPool(MemoryPool *mp, tprio_t prio, - tfunc_t pf, void *arg) { - void *wsp; - Thread *tp; - - chDbgCheck(mp != NULL, "chThdCreateFromMemoryPool"); - - wsp = chPoolAlloc(mp); - if (wsp == NULL) - return NULL; - -#if CH_DBG_FILL_THREADS - memfill((uint8_t *)wsp, (uint8_t *)wsp + sizeof(Thread), THREAD_FILL_VALUE); - memfill((uint8_t *)wsp + sizeof(Thread), - (uint8_t *)wsp + mp->mp_object_size, STACK_FILL_VALUE); -#endif - - chSysLock(); - tp = chThdCreateI(wsp, mp->mp_object_size, prio, pf, arg); - tp->p_flags = THD_MEM_MODE_MEMPOOL; - tp->p_mpool = mp; - chSchWakeupS(tp, RDY_OK); - chSysUnlock(); - return tp; -} -#endif /* CH_USE_DYNAMIC && CH_USE_MEMPOOLS */ - -/** - * @brief Changes the running thread priority level then reschedules if - * necessary. - * @note The function returns the real thread priority regardless of the - * current priority that could be higher than the real priority - * because the priority inheritance mechanism. - * - * @param[in] newprio the new priority level of the running thread - * @return The old priority level. - */ -tprio_t chThdSetPriority(tprio_t newprio) { - tprio_t oldprio; - - chDbgCheck((newprio >= LOWPRIO) && (newprio <= HIGHPRIO), - "chThdSetPriority"); - - chSysLock(); -#if CH_USE_MUTEXES - oldprio = currp->p_realprio; - if ((currp->p_prio == currp->p_realprio) || (newprio > currp->p_prio)) - currp->p_prio = newprio; - currp->p_realprio = newprio; -#else - oldprio = currp->p_prio; - currp->p_prio = newprio; -#endif - chSchRescheduleS(); - chSysUnlock(); - return oldprio; -} - -/** - * @brief Resumes a suspended thread. - * @note Use this function to resume threads created with @p chThdInit(). - * - * @param[in] tp pointer to the thread - * @return The pointer to the thread. - */ -Thread *chThdResume(Thread *tp) { - - chSysLock(); - chDbgAssert(tp->p_state == THD_STATE_SUSPENDED, - "chThdResume(), #1", - "thread not in THD_STATE_SUSPENDED state"); - chSchWakeupS(tp, RDY_OK); - chSysUnlock(); - return tp; -} - -/** - * @brief Requests a thread termination. - * @note The thread is not terminated but a termination request is added to - * its @p p_flags field. The thread can read this status by - * invoking @p chThdShouldTerminate() and then terminate cleanly. - * - * @param[in] tp pointer to the thread - */ -void chThdTerminate(Thread *tp) { - - chSysLock(); - tp->p_flags |= THD_TERMINATE; - chSysUnlock(); -} - -/** - * @brief Suspends the invoking thread for the specified time. - * - * @param[in] time the delay in system ticks, the special values are - * handled as follow: - * - @a TIME_INFINITE the thread enters an infinite sleep - * state. - * - @a TIME_IMMEDIATE this value is accepted but - * interpreted as a normal time specification not as an - * immediate timeout specification. - * . - */ -void chThdSleep(systime_t time) { - - chDbgCheck(time != TIME_INFINITE, "chThdSleep"); - - chSysLock(); - chThdSleepS(time); - chSysUnlock(); -} - -/** - * @brief Suspends the invoking thread until the system time arrives to the - * specified value. - * - * @param[in] time absolute system time - */ -void chThdSleepUntil(systime_t time) { - - chSysLock(); - if ((time -= chTimeNow()) > 0) - chThdSleepS(time); - chSysUnlock(); -} - -/** - * @brief Yields the time slot. - * @details Yields the CPU control to the next thread in the ready list with - * equal priority, if any. - */ -void chThdYield(void) { - - chSysLock(); - chSchDoYieldS(); - chSysUnlock(); -} - -/** - * @brief Terminates the current thread by specifying an exit status code. - * - * @param[in] msg thread exit code. The code can be retrieved by using - * @p chThdWait(). - */ -void chThdExit(msg_t msg) { - Thread *tp = currp; - - chSysLock(); - tp->p_u.exitcode = msg; -#if defined(THREAD_EXT_EXIT) - THREAD_EXT_EXIT(tp); -#endif -#if CH_USE_WAITEXIT - while (notempty(&tp->p_waiting)) - chSchReadyI(list_remove(&tp->p_waiting)); -#endif -#if CH_USE_REGISTRY - /* Static threads are immediately removed from the registry because - there is no memory to recover.*/ - if ((tp->p_flags & THD_MEM_MODE_MASK) == THD_MEM_MODE_STATIC) - REG_REMOVE(tp); -#endif - chSchGoSleepS(THD_STATE_FINAL); -} - -#if CH_USE_DYNAMIC || defined(__DOXYGEN__) -/** - * @brief Adds a reference to a thread object. - * - * @param[in] tp pointer to the thread - * @return The same thread pointer passed as parameter - * representing the new reference. - */ -Thread *chThdAddRef(Thread *tp) { - - chSysLock(); - chDbgAssert(tp->p_refs < 255, "chThdAddRef(), #1", "too many references"); - tp->p_refs++; - chSysUnlock(); - return tp; -} - -/** - * @brief Releases a reference to a thread object. - * @details If the references counter reaches zero and the thread - * is in the @p THD_STATE_FINAL state then the thread's memory is - * returned to the proper allocator. - * @note Static threads are not affected. - * - * @param[in] tp pointer to the thread - */ -void chThdRelease(Thread *tp) { - trefs_t refs; - - chSysLock(); - chDbgAssert(tp->p_refs > 0, "chThdRelease(), #1", "not referenced"); - refs = --tp->p_refs; - chSysUnlock(); - - /* If the references counter reaches zero and the thread is in its - terminated state then the memory can be returned to the proper - allocator. Of course static threads are not affected.*/ - if ((refs == 0) && (tp->p_state == THD_STATE_FINAL)) { - switch (tp->p_flags & THD_MEM_MODE_MASK) { -#if CH_USE_HEAP - case THD_MEM_MODE_HEAP: -#if CH_USE_REGISTRY - REG_REMOVE(tp); -#endif - chHeapFree(tp); - break; -#endif -#if CH_USE_MEMPOOLS - case THD_MEM_MODE_MEMPOOL: -#if CH_USE_REGISTRY - REG_REMOVE(tp); -#endif - chPoolFree(tp->p_mpool, tp); - break; -#endif - } - } -} -#endif /* CH_USE_DYNAMIC */ - -#if CH_USE_WAITEXIT || defined(__DOXYGEN__) -/** - * @brief Blocks the execution of the invoking thread until the specified - * thread terminates then the exit code is returned. - * @details This function waits for the specified thread to terminate then - * decrements its reference counter, if the counter reaches zero then - * the thread working area is returned to the proper allocator.
      - * The memory used by the exited thread is handled in different ways - * depending on the API that spawned the thread: - * - If the thread was spawned by @p chThdCreateStatic() or by - * @p chThdInit() then nothing happens and the thread working area - * is not released or modified in any way. This is the default, - * totally static, behavior. - * - If the thread was spawned by @p chThdCreateFromHeap() then - * the working area is returned to the system heap. - * - If the thread was spawned by @p chThdCreateFromMemoryPool() - * then the working area is returned to the owning memory pool. - * . - * Please read the @ref article_lifecycle article for more details. - * @note After invoking @p chThdWait() the thread pointer becomes invalid - * and must not be used as parameter for further system calls. - * @note The function is available only if the @p CH_USE_WAITEXIT - * option is enabled in @p chconf.h. - * @note If @p CH_USE_DYNAMIC is not specified this function just waits for - * the thread termination, no memory allocators are involved. - * - * @param[in] tp pointer to the thread - * @return The exit code from the terminated thread. - */ -msg_t chThdWait(Thread *tp) { - msg_t msg; - - chDbgCheck(tp != NULL, "chThdWait"); - - chSysLock(); - chDbgAssert(tp != currp, "chThdWait(), #1", "waiting self"); -#if CH_USE_DYNAMIC - chDbgAssert(tp->p_refs > 0, "chThdWait(), #2", "not referenced"); -#endif - if (tp->p_state != THD_STATE_FINAL) { - list_insert(currp, &tp->p_waiting); - chSchGoSleepS(THD_STATE_WTEXIT); - } - msg = tp->p_u.exitcode; - chSysUnlock(); -#if CH_USE_DYNAMIC - chThdRelease(tp); -#endif - return msg; -} -#endif /* CH_USE_WAITEXIT */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/src/chvt.c b/ChibiOS_2.0.8/os/kernel/src/chvt.c deleted file mode 100644 index 539384b..0000000 --- a/ChibiOS_2.0.8/os/kernel/src/chvt.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file chvt.c - * @brief Time and Virtual Timers related code. - * - * @addtogroup time - * @details Time and Virtual Timers related APIs and services. - * @{ - */ - -#include "ch.h" - -/** - * @brief Virtual timers delta list header. - */ -VTList vtlist; - -/** - * @brief Virtual Timers initialization. - * @note Internal use only. - */ -void vt_init(void) { - - vtlist.vt_next = vtlist.vt_prev = (void *)&vtlist; - vtlist.vt_time = (systime_t)-1; - vtlist.vt_systime = 0; -} - -/** - * @brief Enables a virtual timer. - * @note The associated function is invoked by an interrupt handler within - * the I-Locked state, see @ref system_states. - * - * @param[out] vtp the @p VirtualTimer structure pointer - * @param[in] time the number of time ticks, the value @p TIME_INFINITE - * is notallowed. The value @p TIME_IMMEDIATE is allowed - * but interpreted as a normal time specification not as - * an immediate timeout specification. - * @param[in] vtfunc the timer callback function. After invoking the - * callback the timer is disabled and the structure can - * be disposed or reused. - * @param[in] par a parameter that will be passed to the callback - * function - */ -void chVTSetI(VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par) { - VirtualTimer *p; - - chDbgCheck((vtp != NULL) && (vtfunc != NULL) && (time != TIME_INFINITE), - "chVTSetI"); - - vtp->vt_par = par; - vtp->vt_func = vtfunc; - p = vtlist.vt_next; - while (p->vt_time < time) { - time -= p->vt_time; - p = p->vt_next; - } - - vtp->vt_prev = (vtp->vt_next = p)->vt_prev; - vtp->vt_prev->vt_next = p->vt_prev = vtp; - vtp->vt_time = time; - if (p != (void *)&vtlist) - p->vt_time -= time; -} - -/** - * @brief Disables a Virtual Timer. - * @note The timer MUST be active when this function is invoked. - * - * @param[in] vtp the @p VirtualTimer structure pointer - */ -void chVTResetI(VirtualTimer *vtp) { - - chDbgCheck(vtp != NULL, "chVTResetI"); - chDbgAssert(vtp->vt_func != NULL, - "chVTResetI(), #1", - "timer not set or already triggered"); - - if (vtp->vt_next != (void *)&vtlist) - vtp->vt_next->vt_time += vtp->vt_time; - vtp->vt_prev->vt_next = vtp->vt_next; - vtp->vt_next->vt_prev = vtp->vt_prev; - vtp->vt_func = (vtfunc_t)NULL; -} - -/** - * @brief Checks if the current system time is within the specified time - * window. - * @note When start==end then the function returns always true because the - * whole time range is specified. - * - * @param[in] start the start of the time window (inclusive) - * @param[in] end the end of the time window (non inclusive) - * @retval TRUE current time within the specified time window. - * @retval FALSE current time not within the specified time window. - */ -bool_t chTimeIsWithin(systime_t start, systime_t end) { - - systime_t time = chTimeNow(); - return end > start ? (time >= start) && (time < end) : - (time >= start) || (time < end); -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/templates/chconf.h b/ChibiOS_2.0.8/os/kernel/templates/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/os/kernel/templates/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
      - * For performance and code size reasons the recommended setting - * is to leave this option disabled.
      - * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/templates/chcore.c b/ChibiOS_2.0.8/os/kernel/templates/chcore.c deleted file mode 100644 index 259bc45..0000000 --- a/ChibiOS_2.0.8/os/kernel/templates/chcore.c +++ /dev/null @@ -1,140 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chcore.c - * @brief Port related template code. - * @details This file is a template of the system driver functions provided by - * a port. Some of the following functions may be implemented as - * macros in chcore.h if the implementer decides that there is an - * advantage in doing so, as example because performance concerns. - * - * @addtogroup core - * @details Non portable code templates. - * @{ - */ - -#include "ch.h" - -/** - * @brief Port-related initialization code. - * @note This function is usually empty. - */ -void port_init(void) { -} - -/** - * @brief Kernel-lock action. - * @details Usually this function just disables interrupts but may perform more - * actions. - */ -void port_lock(void) { -} - -/** - * @brief Kernel-unlock action. - * @details Usually this function just disables interrupts but may perform more - * actions. - */ -void port_unlock(void) { -} - -/** - * @brief Kernel-lock action from an interrupt handler. - * @details This function is invoked before invoking I-class APIs from - * interrupt handlers. The implementation is architecture dependent, - * in its simplest form it is void. - */ -void port_lock_from_isr(void) { -} - -/** - * @brief Kernel-unlock action from an interrupt handler. - * @details This function is invoked after invoking I-class APIs from interrupt - * handlers. The implementation is architecture dependent, in its - * simplest form it is void. - */ -void port_unlock_from_isr(void) { -} - -/** - * @brief Disables all the interrupt sources. - * @note Of course non maskable interrupt sources are not included. - */ -void port_disable(void) { -} - -/** - * @brief Disables the interrupt sources below kernel-level priority. - * @note Interrupt sources above kernel level remains enabled. - */ -void port_suspend(void) { -} - -/** - * @brief Enables all the interrupt sources. - */ -void port_enable(void) { -} - -/** - * @brief Enters an architecture-dependent IRQ-waiting mode. - * @details The function is meant to return when an interrupt becomes pending. - * The simplest implementation is an empty function or macro but this - * would not take advantage of architecture-specific power saving - * modes. - */ -void port_wait_for_interrupt(void) { -} - -/** - * @brief Halts the system. - * @details This function is invoked by the operating system when an - * unrecoverable error is detected (as example because a programming - * error in the application code that triggers an assertion while in - * debug mode). - */ -void port_halt(void) { - - port_disable(); - while (TRUE) { - } -} - -/** - * @brief Performs a context switch between two threads. - * @details This is the most critical code in any port, this function - * is responsible for the context switch between 2 threads. - * @note The implementation of this code affects directly the context - * switch performance so optimize here as much as you can. - * - * @param[in] ntp the thread to be switched in - * @param[in] otp the thread to be switched out - */ -void port_switch(Thread *ntp, Thread *otp) { -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/templates/chcore.h b/ChibiOS_2.0.8/os/kernel/templates/chcore.h deleted file mode 100644 index 1581469..0000000 --- a/ChibiOS_2.0.8/os/kernel/templates/chcore.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chcore.h - * @brief Port related template macros and structures. - * @details This file is a template of the system driver macros provided by - * a port. - * - * @addtogroup core - * @{ - */ - -#ifndef _CHCORE_H_ -#define _CHCORE_H_ - -/** - * @brief Unique macro for the implemented architecture. - */ -#define CH_ARCHITECTURE_XXX - -/** - * @brief Name of the implemented architecture. - */ -#define CH_ARCHITECTURE_NAME "" - -/** - * @brief Name of the architecture variant (optional). - */ -#define CH_ARCHITECTURE_VARIANT_NAME "" - -/** - * @brief Base type for stack and memory alignment. - */ -typedef uint8_t stkalign_t; - -/** - * @brief Interrupt saved context. - * @details This structure represents the stack frame saved during a - * preemption-capable interrupt handler. - */ -struct extctx { -}; - -/** - * @brief System saved context. - * @details This structure represents the inner stack frame during a context - * switching. - */ -struct intctx { -}; - -/** - * @brief Platform dependent part of the @p Thread structure. - * @details This structure usually contains just the saved stack pointer - * defined as a pointer to a @p intctx structure. - */ -struct context { - struct intctx *sp; -}; - -/** - * @brief Platform dependent part of the @p chThdInit() API. - * @details This code usually setup the context switching frame represented - * by an @p intctx structure. - */ -#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \ -} - -/** - * @brief Stack size for the system idle thread. - * @details This size depends on the idle thread implementation, usually - * the idle thread should take no more space than those reserved - * by @p INT_REQUIRED_STACK. - */ -#ifndef IDLE_THREAD_STACK_SIZE -#define IDLE_THREAD_STACK_SIZE 0 -#endif - -/** - * @brief Per-thread stack overhead for interrupts servicing. - * @details This constant is used in the calculation of the correct working - * area size. - * This value can be zero on those architecture where there is a - * separate interrupt stack and the stack space between @p intctx and - * @p extctx is known to be zero. - */ -#ifndef INT_REQUIRED_STACK -#define INT_REQUIRED_STACK 0 -#endif - -/** - * @brief Enforces a correct alignment for a stack area size value. - */ -#define STACK_ALIGN(n) ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1) - -/** - * @brief Computes the thread working area global size. - */ -#define THD_WA_SIZE(n) STACK_ALIGN(sizeof(Thread) + \ - sizeof(struct intctx) + \ - sizeof(struct extctx) + \ - (n) + (INT_REQUIRED_STACK)) - -/** - * @brief Static working area allocation. - * @details This macro is used to allocate a static thread working area - * aligned as both position and size. - */ -#define WORKING_AREA(s, n) stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)] - -/** - * @brief IRQ prologue code. - * @details This macro must be inserted at the start of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_PROLOGUE() - -/** - * @brief IRQ epilogue code. - * @details This macro must be inserted at the end of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_EPILOGUE() - -/** - * @brief IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_IRQ_HANDLER(id) void id(void) - -/** - * @brief Fast IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - * @note Not all architectures support fast interrupts, in this case this - * macro must be omitted. - */ -#define PORT_FAST_IRQ_HANDLER(id) void id(void) - -#ifdef __cplusplus -extern "C" { -#endif - void port_init(void); - void port_lock(void); - void port_unlock(void); - void port_lock_from_isr(void); - void port_unlock_from_isr(void); - void port_disable(void); - void port_suspend(void); - void port_enable(void); - void port_wait_for_interrupt(void); - void port_halt(void); - void port_switch(Thread *ntp, Thread *otp); -#ifdef __cplusplus -} -#endif - -#endif /* _CHCORE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/kernel/templates/chtypes.h b/ChibiOS_2.0.8/os/kernel/templates/chtypes.h deleted file mode 100644 index d88f9be..0000000 --- a/ChibiOS_2.0.8/os/kernel/templates/chtypes.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chtypes.h - * @brief System types template. - * @details The types defined in this file may change depending on the target - * architecture. You may also try to optimize the size of the various - * types in order to privilege size or performance, be careful in - * doing so. - * - * @addtogroup types - * @details System types and macros. - * @{ - */ - -#ifndef _CHTYPES_H_ -#define _CHTYPES_H_ - -#define __need_NULL -#define __need_size_t -#include - -#if !defined(_STDINT_H) && !defined(__STDINT_H_) -#include -#endif - -/** - * @brief Boolean, recommended the fastest signed. - */ -typedef int32_t bool_t; - -/** - * @brief Thread mode flags, uint8_t is ok. - */ -typedef uint8_t tmode_t; - -/** - * @brief Thread state, uint8_t is ok. - */ -typedef uint8_t tstate_t; - -/** - * @brief Thread references counter, uint8_t is ok. - */ -typedef uint8_t trefs_t; - -/** - * @brief Priority, use the fastest unsigned type. - */ -typedef uint32_t tprio_t; - -/** - * @brief Message, use signed pointer equivalent. - */ -typedef int32_t msg_t; - -/** - * @brief Event Id, use fastest signed. - */ -typedef int32_t eventid_t; - -/** - * @brief Event Mask, recommended fastest unsigned. - */ -typedef uint32_t eventmask_t; - -/** - * @brief System Time, recommended fastest unsigned. - */ -typedef uint32_t systime_t; - -/** - * @brief Counter, recommended fastest signed. - */ -typedef int32_t cnt_t; - -/** - * @brief Inline function modifier. - */ -#define INLINE inline - -/** - * @brief ROM constant modifier. - * @note This is required because some compilers require a custom keyword, - * usually this macro is just set to "const" for the GCC compiler. - * @note This macro is not used to place constants in different address - * spaces (like AVR requires as example) because it is assumed that - * a pointer to a ROMCONST constant is compatible with a pointer - * to a normal variable. It is just like the "const" keyword but - * requires that the constant is placed in ROM if the architecture - * supports it. - */ -#define ROMCONST const - -/** - * @brief Packed structure modifier (within). - */ -#define PACK_STRUCT_STRUCT __attribute__((packed)) - -/** - * @brief Packed structure modifier (before). - */ -#define PACK_STRUCT_BEGIN - -/** - * @brief Packed structure modifier (after). - */ -#define PACK_STRUCT_END - -#endif /* _CHTYPES_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM/rules.mk b/ChibiOS_2.0.8/os/ports/GCC/ARM/rules.mk deleted file mode 100644 index 50729f0..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM/rules.mk +++ /dev/null @@ -1,146 +0,0 @@ -# ARM7 common makefile scripts and rules. - -# Output -OUTFILES = $(BUILDDIR)/$(PROJECT).elf $(BUILDDIR)/$(PROJECT).hex $(BUILDDIR)/$(PROJECT).bin $(BUILDDIR)/$(PROJECT).dmp -ifeq ($(BUILDDIR),) - BUILDDIR = . - CLEANDIR = -else - CLEANDIR = $(BUILDDIR) -endif -ENSUREBUILDDIR = $(shell test -d $(BUILDDIR) || mkdir $(BUILDDIR)) - -# Automatic compiler options -OPT = $(USE_OPT) -CPPOPT = $(USE_CPPOPT) -ifeq ($(USE_CURRP_CACHING),yes) - OPT += -ffixed-r7 -DCH_CURRP_REGISTER_CACHE='"r7"' -endif -ifeq ($(USE_LINK_GC),yes) - OPT += -ffunction-sections -fdata-sections -endif - -# Source files groups -ifeq ($(USE_THUMB),yes) - TCSRC += $(CSRC) - TCPPSRC += $(CPPSRC) -else - ACSRC += $(CSRC) - ACPPSRC += $(CPPSRC) -endif -ASRC = $(ACSRC)$(ACPPSRC) -TSRC = $(TCSRC)$(TCPPSRC) -SRC = $(ASRC)$(TSRC) - -# Object files groups -ACOBJS = $(ACSRC:.c=.o) -ACPPOBJS = $(ACPPSRC:.cpp=.o) -TCOBJS = $(TCSRC:.c=.o) -TCPPOBJS = $(TCPPSRC:.cpp=.o) -ASMOBJS = $(ASMSRC:.s=.o) -OBJS = $(ASMOBJS) $(ACOBJS) $(TCOBJS) $(ACPPOBJS) $(TCPPOBJS) - -# Paths -IINCDIR = $(patsubst %,-I%,$(INCDIR) $(DINCDIR) $(UINCDIR)) -LLIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) - -# Macros -DEFS = $(DDEFS) $(UDEFS) -ADEFS = $(DADEFS) $(UADEFS) - -# Libs -LIBS = $(DLIBS) $(ULIBS) - -# Various settings -MCFLAGS = -mcpu=$(MCU) -ODFLAGS = -x --syms -ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(<:.s=.lst) $(ADEFS) -CFLAGS = $(MCFLAGS) $(OPT) $(CWARN) -Wa,-alms=$(<:.c=.lst) $(DEFS) -CPPFLAGS = $(MCFLAGS) $(OPT) $(CPPOPT) $(CPPWARN) -Wa,-alms=$(<:.cpp=.lst) $(DEFS) -ifeq ($(USE_LINK_GC),yes) - LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(BUILDDIR)/$(PROJECT).map,--cref,--no-warn-mismatch,--gc-sections $(LLIBDIR) -else - LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(BUILDDIR)/$(PROJECT).map,--cref,--no-warn-mismatch $(LLIBDIR) -endif - -# Thumb interwork enabled only if needed because it kills performance. -ifneq ($(TSRC),) - CFLAGS += -DTHUMB_PRESENT - CPPFLAGS += -DTHUMB_PRESENT - ASFLAGS += -DTHUMB_PRESENT - ifneq ($(ASRC),) - # Mixed ARM and THUMB mode. - CFLAGS += -mthumb-interwork - CPPFLAGS += -mthumb-interwork - ASFLAGS += -mthumb-interwork - LDFLAGS += -mthumb-interwork - else - # Pure THUMB mode, THUMB C code cannot be called by ARM asm code directly. - CFLAGS += -mno-thumb-interwork -DTHUMB_NO_INTERWORKING - CPPFLAGS += -mno-thumb-interwork -DTHUMB_NO_INTERWORKING - ASFLAGS += -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb - LDFLAGS += -mno-thumb-interwork -mthumb - endif -else - # Pure ARM mode - CFLAGS += -mno-thumb-interwork - CPPFLAGS += -mno-thumb-interwork - ASFLAGS += -mno-thumb-interwork - LDFLAGS += -mno-thumb-interwork -endif - -# Generate dependency information -CFLAGS += -MD -MP -MF .dep/$(@F).d -CPPFLAGS += -MD -MP -MF .dep/$(@F).d - -# -# Makefile rules -# - -all: $(ENSUREBUILDDIR) $(OBJS) $(OUTFILES) - -$(ACPPOBJS) : %.o : %.cpp - @echo - $(CPPC) -c $(CPPFLAGS) $(AOPT) -I . $(IINCDIR) $< -o $@ - -$(TCPPOBJS) : %.o : %.cpp - @echo - $(CPPC) -c $(CPPFLAGS) $(TOPT) -I . $(IINCDIR) $< -o $@ - -$(ACOBJS) : %.o : %.c - @echo - $(CC) -c $(CFLAGS) $(AOPT) -I . $(IINCDIR) $< -o $@ - -$(TCOBJS) : %.o : %.c - @echo - $(CC) -c $(CFLAGS) $(TOPT) -I . $(IINCDIR) $< -o $@ - -$(ASMOBJS) : %.o : %.s - @echo - $(AS) -c $(ASFLAGS) -I . $(IINCDIR) $< -o $@ - -%elf: $(OBJS) - @echo - $(LD) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ - -%hex: %elf - $(HEX) $< $@ - -%bin: %elf - $(BIN) $< $@ - -%dmp: %elf - $(OD) $(ODFLAGS) $< > $@ - -clean: - -rm -f $(OBJS) - -rm -f $(ACSRC:.c=.lst) $(TCSRC:.c=.lst) $(ACPPSRC:.cpp=.lst) $(TCPPSRC:.cpp=.lst) $(ASMSRC:.s=.lst) - -rm -f $(OUTFILES) $(BUILDDIR)/$(PROJECT).map - -rm -fR .dep $(CLEANDIR) - -# -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - -# *** EOF *** diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/AT91SAM7/vectors.s b/ChibiOS_2.0.8/os/ports/GCC/ARM7/AT91SAM7/vectors.s deleted file mode 100644 index 0bfb954..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/AT91SAM7/vectors.s +++ /dev/null @@ -1,81 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -.section vectors -.code 32 -.balign 4 -/* - * System entry points. - */ -_start: - ldr pc, _reset - ldr pc, _undefined - ldr pc, _swi - ldr pc, _prefetch - ldr pc, _abort - nop - ldr pc, [pc,#-0xF20] /* AIC - AIC_IVR */ - ldr pc, [pc,#-0xF20] /* AIC - AIC_FVR */ - -_reset: - .word ResetHandler /* In crt0.s */ -_undefined: - .word UndHandler -_swi: - .word SwiHandler -_prefetch: - .word PrefetchHandler -_abort: - .word AbortHandler - .word 0 - .word 0 - .word 0 - -.text -.code 32 -.balign 4 - -/* - * Default exceptions handlers. The handlers are declared weak in order to be - * replaced by the real handling code. Everything is defaulted to an infinite - * loop. - */ -.weak UndHandler -UndHandler: - -.weak SwiHandler -SwiHandler: - -.weak PrefetchHandler -PrefetchHandler: - -.weak AbortHandler -AbortHandler: - -.weak FiqHandler -FiqHandler: - -.loop: b .loop diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/AT91SAM7/wfi.h b/ChibiOS_2.0.8/os/ports/GCC/ARM7/AT91SAM7/wfi.h deleted file mode 100644 index 4edcefc..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/AT91SAM7/wfi.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _WFI_H_ -#define _WFI_H_ - -#include "board.h" - -#ifndef port_wait_for_interrupt -#if ENABLE_WFI_IDLE != 0 -#define port_wait_for_interrupt() { \ - AT91C_BASE_SYS->PMC_SCDR = AT91C_PMC_PCK; \ -} -#else -#define port_wait_for_interrupt() -#endif -#endif - -#endif /* _WFI_H_ */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/LPC214x/vectors.s b/ChibiOS_2.0.8/os/ports/GCC/ARM7/LPC214x/vectors.s deleted file mode 100644 index b340523..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/LPC214x/vectors.s +++ /dev/null @@ -1,78 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -.section vectors -.code 32 -.balign 4 -/* - * System entry points. - */ -_start: - ldr pc, _reset - ldr pc, _undefined - ldr pc, _swi - ldr pc, _prefetch - ldr pc, _abort - nop - ldr pc, [pc,#-0xFF0] /* VIC - IRQ Vector Register */ - ldr pc, _fiq - -_reset: - .word ResetHandler /* In crt0.s */ -_undefined: - .word UndHandler -_swi: - .word SwiHandler -_prefetch: - .word PrefetchHandler -_abort: - .word AbortHandler -_fiq: - .word FiqHandler - .word 0 - .word 0 - -/* - * Default exceptions handlers. The handlers are declared weak in order to be - * replaced by the real handling code. Everything is defaulted to an infinite - * loop. - */ -.weak UndHandler -UndHandler: - -.weak SwiHandler -SwiHandler: - -.weak PrefetchHandler -PrefetchHandler: - -.weak AbortHandler -AbortHandler: - -.weak FiqHandler -FiqHandler: - -.loop: b .loop diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/LPC214x/wfi.h b/ChibiOS_2.0.8/os/ports/GCC/ARM7/LPC214x/wfi.h deleted file mode 100644 index 1693e55..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/LPC214x/wfi.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _WFI_H_ -#define _WFI_H_ - -#include "lpc214x.h" - -#ifndef port_wait_for_interrupt -#if ENABLE_WFI_IDLE != 0 -#define port_wait_for_interrupt() { \ - PCON = 1; \ -} -#else -#define port_wait_for_interrupt() -#endif -#endif - -#endif /* _WFI_H_ */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/chcore.c b/ChibiOS_2.0.8/os/ports/GCC/ARM7/chcore.c deleted file mode 100644 index 905b8cf..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/chcore.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARM7/chcore.c - * @brief ARM7 architecture port code. - * - * @addtogroup ARM7_CORE - * @{ - */ - -#include "ch.h" - -/** - * Halts the system. - */ -#if !defined(__DOXYGEN__) -__attribute__((weak)) -#endif -void port_halt(void) { - - port_disable(); - while (TRUE) { - } -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/chcore.h b/ChibiOS_2.0.8/os/ports/GCC/ARM7/chcore.h deleted file mode 100644 index 0d883ca..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/chcore.h +++ /dev/null @@ -1,398 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARM7/chcore.h - * @brief ARM7 architecture port macros and structures. - * - * @addtogroup ARM7_CORE - * @{ - */ - -#ifndef _CHCORE_H_ -#define _CHCORE_H_ - -/** - * @brief If enabled allows the idle thread to enter a low power mode. - */ -#ifndef ENABLE_WFI_IDLE -#define ENABLE_WFI_IDLE 0 -#endif -#include - -/** - * @brief Macro defining the ARM7 architecture. - */ -#define CH_ARCHITECTURE_ARM7 - -/** - * @brief Name of the implemented architecture. - */ -#define CH_ARCHITECTURE_NAME "ARM" - -/** - * @brief Name of the architecture variant (optional). - */ -#define CH_CORE_VARIANT_NAME "ARM7TDMI" - -/** - * @brief 32 bits stack and memory alignment enforcement. - */ -typedef uint32_t stkalign_t; - -/** - * @brief Generic ARM register. - */ -typedef void *regarm_t; - -#if !defined(__DOXYGEN__) -/** - * @brief Interrupt saved context. - * @details This structure represents the stack frame saved during a - * preemption-capable interrupt handler. - */ -struct extctx { - regarm_t spsr_irq; - regarm_t lr_irq; - regarm_t r0; - regarm_t r1; - regarm_t r2; - regarm_t r3; - regarm_t r12; - regarm_t lr_usr; -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief System saved context. - * @details This structure represents the inner stack frame during a context - * switching. - */ -struct intctx { - regarm_t r4; - regarm_t r5; - regarm_t r6; -#ifndef CH_CURRP_REGISTER_CACHE - regarm_t r7; -#endif - regarm_t r8; - regarm_t r9; - regarm_t r10; - regarm_t r11; - regarm_t lr; -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief Platform dependent part of the @p Thread structure. - * @details In the ARM7 port this structure just holds a pointer to the - * @p intctx structure representing the stack pointer at the time - * of the context switch. - */ -struct context { - struct intctx *r13; -}; -#endif - -/** - * @brief Platform dependent part of the @p chThdInit() API. - * @details This code usually setup the context switching frame represented - * by an @p intctx structure. - */ -#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \ - tp->p_ctx.r13 = (struct intctx *)((uint8_t *)workspace + \ - wsize - \ - sizeof(struct intctx)); \ - tp->p_ctx.r13->r4 = pf; \ - tp->p_ctx.r13->r5 = arg; \ - tp->p_ctx.r13->lr = _port_thread_start; \ -} - -/** - * @brief Stack size for the system idle thread. - * @details This size depends on the idle thread implementation, usually - * the idle thread should take no more space than those reserved - * by @p INT_REQUIRED_STACK. - * @note In this port it is set to 4 because the idle thread does have - * a stack frame when compiling without optimizations. - */ -#ifndef IDLE_THREAD_STACK_SIZE -#define IDLE_THREAD_STACK_SIZE 4 -#endif - -/** - * @brief Per-thread stack overhead for interrupts servicing. - * @details This constant is used in the calculation of the correct working - * area size. - * This value can be zero on those architecture where there is a - * separate interrupt stack and the stack space between @p intctx and - * @p extctx is known to be zero. - * @note In this port 0x10 is a safe value, it can be reduced after careful - * analysis of the generated code. - */ -#ifndef INT_REQUIRED_STACK -#define INT_REQUIRED_STACK 0x10 -#endif - -/** - * @brief Enforces a correct alignment for a stack area size value. - */ -#define STACK_ALIGN(n) ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1) - -/** - * @brief Computes the thread working area global size. - */ -#define THD_WA_SIZE(n) STACK_ALIGN(sizeof(Thread) + \ - sizeof(struct intctx) + \ - sizeof(struct extctx) + \ - (n) + (INT_REQUIRED_STACK)) - -/** - * @brief Static working area allocation. - * @details This macro is used to allocate a static thread working area - * aligned as both position and size. - */ -#define WORKING_AREA(s, n) stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]; - -/** - * @brief IRQ prologue code. - * @details This macro must be inserted at the start of all IRQ handlers - * enabled to invoke system APIs. - * @note This macro has a different implementation depending if compiled in - * ARM or THUMB mode. - * @note The THUMB implementation starts with ARM code because interrupt - * vectors are always invoked in ARM mode regardless the bit 0 - * value. The switch in THUMB mode is done in the function prologue so - * it is transparent to the user code. - */ -#ifdef THUMB -#define PORT_IRQ_PROLOGUE() { \ - asm volatile (".code 32 \n\t" \ - "stmfd sp!, {r0-r3, r12, lr} \n\t" \ - "add r0, pc, #1 \n\t" \ - "bx r0 \n\t" \ - ".code 16" : : : "memory"); \ -} -#else /* !THUMB */ -#define PORT_IRQ_PROLOGUE() { \ - asm volatile ("stmfd sp!, {r0-r3, r12, lr}" : : : "memory"); \ -} -#endif /* !THUMB */ - -/** - * @brief IRQ epilogue code. - * @details This macro must be inserted at the end of all IRQ handlers - * enabled to invoke system APIs. - * @note This macro has a different implementation depending if compiled in - * ARM or THUMB mode. - */ -#ifdef THUMB -#define PORT_IRQ_EPILOGUE() { \ - asm volatile ("ldr r0, =_port_irq_common \n\t" \ - "bx r0" : : : "memory"); \ -} -#else /* !THUMB */ -#define PORT_IRQ_EPILOGUE() { \ - asm volatile ("b _port_irq_common" : : : "memory"); \ -} -#endif /* !THUMB */ - -/** - * @brief IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_IRQ_HANDLER(id) __attribute__((naked)) void id(void) - -/** - * @brief Fast IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_FAST_IRQ_HANDLER(id) \ - __attribute__((interrupt("FIQ"))) void id(void) - -/** - * @brief Port-related initialization code. - * @note This function is empty in this port. - */ -#define port_init() - -/** - * @brief Kernel-lock action. - * @details Usually this function just disables interrupts but may perform - * more actions. - * @note In this port it disables the IRQ sources and keeps FIQ sources - * enabled. - */ -#ifdef THUMB -#define port_lock() { \ - asm volatile ("bl _port_lock_thumb" : : : "r3", "lr", "memory"); \ -} -#else /* !THUMB */ -#define port_lock() asm volatile ("msr CPSR_c, #0x9F" : : : "memory") -#endif /* !THUMB */ - -/** - * @brief Kernel-unlock action. - * @details Usually this function just disables interrupts but may perform - * more actions. - * @note In this port it enables both the IRQ and FIQ sources. - */ -#ifdef THUMB -#define port_unlock() { \ - asm volatile ("bl _port_unlock_thumb" : : : "r3", "lr", "memory"); \ -} -#else /* !THUMB */ -#define port_unlock() asm volatile ("msr CPSR_c, #0x1F" : : : "memory") -#endif /* !THUMB */ - -/** - * @brief Kernel-lock action from an interrupt handler. - * @details This function is invoked before invoking I-class APIs from - * interrupt handlers. The implementation is architecture dependent, - * in its simplest form it is void. - * @note Empty in this port. - */ -#define port_lock_from_isr() - -/** - * @brief Kernel-unlock action from an interrupt handler. - * @details This function is invoked after invoking I-class APIs from interrupt - * handlers. The implementation is architecture dependent, in its - * simplest form it is void. - * @note Empty in this port. - */ -#define port_unlock_from_isr() - -/** - * @brief Disables all the interrupt sources. - * @note Of course non maskable interrupt sources are not included. - * @note In this port it disables both the IRQ and FIQ sources. - * @note Implements a workaround for spurious interrupts taken from the NXP - * LPC214x datasheet. - */ -#ifdef THUMB -#define port_disable() { \ - asm volatile ("bl _port_disable_thumb" : : : "r3", "lr", "memory"); \ -} -#else /* !THUMB */ -#define port_disable() { \ - asm volatile ("mrs r3, CPSR \n\t" \ - "orr r3, #0x80 \n\t" \ - "msr CPSR_c, r3 \n\t" \ - "orr r3, #0x40 \n\t" \ - "msr CPSR_c, r3" : : : "r3", "memory"); \ -} -#endif /* !THUMB */ - -/** - * @brief Disables the interrupt sources below kernel-level priority. - * @note Interrupt sources above kernel level remains enabled. - * @note In this port it disables the IRQ sources and enables the - * FIQ sources. - */ -#ifdef THUMB -#define port_suspend() { \ - asm volatile ("bl _port_suspend_thumb" : : : "r3", "lr", "memory"); \ -} -#else /* !THUMB */ -#define port_suspend() asm volatile ("msr CPSR_c, #0x9F" : : : "memory") -#endif /* !THUMB */ - -/** - * @brief Enables all the interrupt sources. - * @note In this port it enables both the IRQ and FIQ sources. - */ -#ifdef THUMB -#define port_enable() { \ - asm volatile ("bl _port_enable_thumb" : : : "r3", "lr", "memory"); \ -} -#else /* !THUMB */ -#define port_enable() asm volatile ("msr CPSR_c, #0x1F" : : : "memory") -#endif /* !THUMB */ - -/** - * @brief Performs a context switch between two threads. - * @details This is the most critical code in any port, this function - * is responsible for the context switch between 2 threads. - * @note The implementation of this code affects directly the context - * switch performance so optimize here as much as you can. - * @note Implemented as inlined code for performance reasons. - * - * @param[in] ntp the thread to be switched in - * @param[in] otp the thread to be switched out - */ -#ifdef THUMB -#if CH_DBG_ENABLE_STACK_CHECK -#define port_switch(ntp, otp) { \ - register Thread *_ntp asm ("r0") = (ntp); \ - register Thread *_otp asm ("r1") = (otp); \ - register char *sp asm ("sp"); \ - if (sp - sizeof(struct intctx) - sizeof(Thread) < (char *)_otp) \ - asm volatile ("mov r0, #0 \n\t" \ - "ldr r1, =chDbgPanic \n\t" \ - "bx r1"); \ - _port_switch_thumb(_ntp, _otp); \ -} -#else /* !CH_DBG_ENABLE_STACK_CHECK */ -#define port_switch(ntp, otp) _port_switch_thumb(ntp, otp) -#endif /* !CH_DBG_ENABLE_STACK_CHECK */ -#else /* !THUMB */ -#if CH_DBG_ENABLE_STACK_CHECK -#define port_switch(ntp, otp) { \ - register Thread *_ntp asm ("r0") = (ntp); \ - register Thread *_otp asm ("r1") = (otp); \ - register char *sp asm ("sp"); \ - if (sp - sizeof(struct intctx) - sizeof(Thread) < (char *)_otp) \ - asm volatile ("mov r0, #0 \n\t" \ - "b chDbgPanic"); \ - _port_switch_arm(_ntp, _otp); \ -} -#else /* !CH_DBG_ENABLE_STACK_CHECK */ -#define port_switch(ntp, otp) _port_switch_arm(ntp, otp) -#endif /* !CH_DBG_ENABLE_STACK_CHECK */ -#endif /* !THUMB */ - -#ifdef __cplusplus -extern "C" { -#endif - void port_halt(void); -#ifdef THUMB - void _port_switch_thumb(Thread *ntp, Thread *otp); -#else /* !THUMB */ - void _port_switch_arm(Thread *ntp, Thread *otp); -#endif /* !THUMB */ - void _port_thread_start(void); -#ifdef __cplusplus -} -#endif - -#endif /* _CHCORE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/chcoreasm.s b/ChibiOS_2.0.8/os/ports/GCC/ARM7/chcoreasm.s deleted file mode 100644 index 3c63e1b..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/chcoreasm.s +++ /dev/null @@ -1,244 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARM7/chcoreasm.s - * @brief ARM7 architecture port low level code. - * - * @addtogroup ARM7_CORE - * @{ - */ - -#include "chconf.h" - -#if !defined(__DOXYGEN__) - -.set MODE_USR, 0x10 -.set MODE_FIQ, 0x11 -.set MODE_IRQ, 0x12 -.set MODE_SVC, 0x13 -.set MODE_ABT, 0x17 -.set MODE_UND, 0x1B -.set MODE_SYS, 0x1F - -.equ I_BIT, 0x80 -.equ F_BIT, 0x40 - -.text - -/* - * Interrupt enable/disable functions, only present if there is THUMB code in - * the system because those are inlined in ARM code. - */ -#ifdef THUMB_PRESENT -.balign 16 -.code 16 -.thumb_func -.global _port_disable_thumb -_port_disable_thumb: - mov r3, pc - bx r3 -.code 32 - mrs r3, CPSR - orr r3, #I_BIT - msr CPSR_c, r3 - orr r3, #F_BIT - msr CPSR_c, r3 - bx lr - -.balign 16 -.code 16 -.thumb_func -.global _port_suspend_thumb -_port_suspend_thumb: -.thumb_func -.global _port_lock_thumb -_port_lock_thumb: - mov r3, pc - bx r3 -.code 32 - msr CPSR_c, #MODE_SYS | I_BIT - bx lr - -.balign 16 -.code 16 -.thumb_func -.global _port_enable_thumb -_port_enable_thumb: -.thumb_func -.global _port_unlock_thumb -_port_unlock_thumb: - mov r3, pc - bx r3 -.code 32 - msr CPSR_c, #MODE_SYS - bx lr - -#endif - -.balign 16 -#ifdef THUMB_PRESENT -.code 16 -.thumb_func -.global _port_switch_thumb -_port_switch_thumb: - mov r2, pc - bx r2 - // Jumps into _port_switch_arm in ARM mode -#endif -.code 32 -.global _port_switch_arm -_port_switch_arm: -#ifdef CH_CURRP_REGISTER_CACHE - stmfd sp!, {r4, r5, r6, r8, r9, r10, r11, lr} - str sp, [r1, #12] - ldr sp, [r0, #12] -#ifdef THUMB_PRESENT - ldmfd sp!, {r4, r5, r6, r8, r9, r10, r11, lr} - bx lr -#else /* !THUMB_PRESENT */ - ldmfd sp!, {r4, r5, r6, r8, r9, r10, r11, pc} -#endif /* !THUMB_PRESENT */ -#else /* !CH_CURRP_REGISTER_CACHE */ - stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} - str sp, [r1, #12] - ldr sp, [r0, #12] -#ifdef THUMB_PRESENT - ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} - bx lr -#else /* !THUMB_PRESENT */ - ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} -#endif /* !THUMB_PRESENT */ -#endif /* !CH_CURRP_REGISTER_CACHE */ - -/* - * Common exit point for all IRQ routines, it performs the rescheduling if - * required. - * System stack frame structure after a context switch in the - * interrupt handler: - * - * High +------------+ - * | LR_USR | -+ - * | R12 | | - * | R3 | | - * | R2 | | External context: IRQ handler frame - * | R1 | | - * | R0 | | - * | PC | | (user code return address) - * | PSR_USR | -+ (user code status) - * | .... | <- mk_DoRescheduleI() stack frame, optimize it for space - * | LR | -+ (system code return address) - * | R11 | | - * | R10 | | - * | R9 | | - * | R8 | | Internal context: mk_SwitchI() frame - * | (R7) | | (optional, see CH_CURRP_REGISTER_CACHE) - * | R6 | | - * | R5 | | - * SP-> | R4 | -+ - * Low +------------+ - */ -.balign 16 -#ifdef THUMB_NO_INTERWORKING -.code 16 -.thumb_func -.globl _port_irq_common -_port_irq_common: - bl chSchIsRescRequiredExI - mov lr, pc - bx lr -.code 32 -#else /* !THUMB_NO_INTERWORKING */ -.code 32 -.globl _port_irq_common -_port_irq_common: - bl chSchIsRescRequiredExI -#endif /* !THUMB_NO_INTERWORKING */ - cmp r0, #0 // Simply returns if a - ldmeqfd sp!, {r0-r3, r12, lr} // reschedule is not - subeqs pc, lr, #4 // required. - - // Saves the IRQ mode registers in the system stack. - ldmfd sp!, {r0-r3, r12, lr} // IRQ stack now empty. - msr CPSR_c, #MODE_SYS | I_BIT - stmfd sp!, {r0-r3, r12, lr} // Registers on System Stack. - msr CPSR_c, #MODE_IRQ | I_BIT - mrs r0, SPSR - mov r1, lr - msr CPSR_c, #MODE_SYS | I_BIT - stmfd sp!, {r0, r1} // Push R0=SPSR, R1=LR_IRQ. - - // Context switch. -#ifdef THUMB_NO_INTERWORKING - add r0, pc, #1 - bx r0 -.code 16 - bl chSchDoRescheduleI - mov lr, pc - bx lr -.code 32 -#else /* !THUMB_NO_INTERWORKING */ - bl chSchDoRescheduleI -#endif /* !THUMB_NO_INTERWORKING */ - - // Re-establish the IRQ conditions again. - ldmfd sp!, {r0, r1} // Pop R0=SPSR, R1=LR_IRQ. - msr CPSR_c, #MODE_IRQ | I_BIT - msr SPSR_fsxc, r0 - mov lr, r1 - msr CPSR_c, #MODE_SYS | I_BIT - ldmfd sp!, {r0-r3, r12, lr} - msr CPSR_c, #MODE_IRQ | I_BIT - subs pc, lr, #4 - -/* - * Threads trampoline code. - * NOTE: The threads always start in ARM mode then switch to the thread-function mode. - */ -.balign 16 -.code 32 -.globl _port_thread_start -_port_thread_start: - msr CPSR_c, #MODE_SYS -#ifndef THUMB_NO_INTERWORKING - mov r0, r5 - mov lr, pc - bx r4 - bl chThdExit -#else /* !THUMB_NO_INTERWORKING */ - add r0, pc, #1 - bx r0 -.code 16 - mov r0, r5 - bl jmpr4 - bl chThdExit -jmpr4: - bx r4 -#endif /* !THUMB_NO_INTERWORKING */ - -#endif /* !defined(__DOXYGEN__) */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/chtypes.h b/ChibiOS_2.0.8/os/ports/GCC/ARM7/chtypes.h deleted file mode 100644 index 9f1b2a3..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/chtypes.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARM7/chtypes.h - * @brief ARM7 architecture port system types. - * - * @addtogroup ARM7_CORE - * @{ - */ - -#ifndef _CHTYPES_H_ -#define _CHTYPES_H_ - -#define __need_NULL -#define __need_size_t -#define __need_ptrdiff_t -#include - -#if !defined(_STDINT_H) && !defined(__STDINT_H_) -#include -#endif - -typedef int32_t bool_t; /**< Fast boolean type. */ -typedef uint8_t tmode_t; /**< Thread flags. */ -typedef uint8_t tstate_t; /**< Thread state. */ -typedef uint8_t trefs_t; /**< Thread references counter. */ -typedef uint32_t tprio_t; /**< Thread priority. */ -typedef int32_t msg_t; /**< Inter-thread message. */ -typedef int32_t eventid_t; /**< Event Id. */ -typedef uint32_t eventmask_t; /**< Events mask. */ -typedef uint32_t systime_t; /**< System time. */ -typedef int32_t cnt_t; /**< Resources counter. */ - -/** - * @brief Inline function modifier. - */ -#define INLINE inline - -/** - * @brief ROM constant modifier. - * @note It is set to use the "const" keyword in this port. - */ -#define ROMCONST const - -/** - * @brief Packed structure modifier (within). - * @note It uses the "packed" GCC attribute. - */ -#define PACK_STRUCT_STRUCT __attribute__((packed)) - -/** - * @brief Packed structure modifier (before). - * @note Empty in this port. - */ -#define PACK_STRUCT_BEGIN - -/** - * @brief Packed structure modifier (after). - * @note Empty in this port. - */ -#define PACK_STRUCT_END - -#endif /* _CHTYPES_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/crt0.s b/ChibiOS_2.0.8/os/ports/GCC/ARM7/crt0.s deleted file mode 100644 index 8cb0b06..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/crt0.s +++ /dev/null @@ -1,191 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARM7/crt0.s - * @brief Generic ARM7 startup file for ChibiOS/RT. - * - * @addtogroup ARM7_CORE - * @{ - */ - -#if !defined(__DOXYGEN__) - -.set MODE_USR, 0x10 -.set MODE_FIQ, 0x11 -.set MODE_IRQ, 0x12 -.set MODE_SVC, 0x13 -.set MODE_ABT, 0x17 -.set MODE_UND, 0x1B -.set MODE_SYS, 0x1F - -.equ I_BIT, 0x80 -.equ F_BIT, 0x40 - -.text -.code 32 -.balign 4 - -/* - * Reset handler. - */ -.global ResetHandler -ResetHandler: - /* - * Stack pointers initialization. - */ - ldr r0, =__ram_end__ - /* Undefined */ - msr CPSR_c, #MODE_UND | I_BIT | F_BIT - mov sp, r0 - ldr r1, =__und_stack_size__ - sub r0, r0, r1 - /* Abort */ - msr CPSR_c, #MODE_ABT | I_BIT | F_BIT - mov sp, r0 - ldr r1, =__abt_stack_size__ - sub r0, r0, r1 - /* FIQ */ - msr CPSR_c, #MODE_FIQ | I_BIT | F_BIT - mov sp, r0 - ldr r1, =__fiq_stack_size__ - sub r0, r0, r1 - /* IRQ */ - msr CPSR_c, #MODE_IRQ | I_BIT | F_BIT - mov sp, r0 - ldr r1, =__irq_stack_size__ - sub r0, r0, r1 - /* Supervisor */ - msr CPSR_c, #MODE_SVC | I_BIT | F_BIT - mov sp, r0 - ldr r1, =__svc_stack_size__ - sub r0, r0, r1 - /* System */ - msr CPSR_c, #MODE_SYS | I_BIT | F_BIT - mov sp, r0 -// ldr r1, =__sys_stack_size__ -// sub r0, r0, r1 - /* - * Early initialization. - */ -#ifndef THUMB_NO_INTERWORKING - bl hwinit0 -#else - add r0, pc, #1 - bx r0 -.code 16 - bl hwinit0 - mov r0, pc - bx r0 -.code 32 -#endif - /* - * Data initialization. - * NOTE: It assumes that the DATA size is a multiple of 4. - */ - ldr r1, =_textdata - ldr r2, =_data - ldr r3, =_edata -dataloop: - cmp r2, r3 - ldrlo r0, [r1], #4 - strlo r0, [r2], #4 - blo dataloop - /* - * BSS initialization. - * NOTE: It assumes that the BSS size is a multiple of 4. - */ - mov r0, #0 - ldr r1, =_bss_start - ldr r2, =_bss_end -bssloop: - cmp r1, r2 - strlo r0, [r1], #4 - blo bssloop - /* - * Late initialization. - */ -#ifdef THUMB_NO_INTERWORKING - add r0, pc, #1 - bx r0 -.code 16 - bl hwinit1 - mov r0, #0 - mov r1, r0 - bl main - ldr r1, =MainExitHandler - bx r1 -.code 32 -#else - bl hwinit1 - mov r0, #0 - mov r1, r0 - bl main - b MainExitHandler -#endif - -/* - * Default main function exit handler. - */ -.weak MainExitHandler -.globl MainExitHandler -MainExitHandler: - -.loop: b .loop - -/* - * Default early initialization code. It is declared weak in order to be - * replaced by the real initialization code. - * Early initialization is performed just after reset before BSS and DATA - * segments initialization. - */ -#ifdef THUMB_NO_INTERWORKING -.thumb_func -.code 16 -#endif -.weak hwinit0 -hwinit0: - bx lr -.code 32 - -/* - * Default late initialization code. It is declared weak in order to be - * replaced by the real initialization code. - * Late initialization is performed after BSS and DATA segments initialization - * and before invoking the main() function. - */ -#ifdef THUMB_NO_INTERWORKING -.thumb_func -.code 16 -#endif -.weak hwinit1 -hwinit1: - bx lr -.code 32 - -#endif - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/port.dox b/ChibiOS_2.0.8/os/ports/GCC/ARM7/port.dox deleted file mode 100644 index e92332c..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/port.dox +++ /dev/null @@ -1,225 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup ARM7 ARM7TDMI - * @details The ARM7 architecture is quite complex for a microcontroller and - * some explanations are required about the port choices. - * - * @section ARM7_NOTES The ARM7 modes - * The ARM7 port supports three modes: - * - Pure ARM mode, this is the preferred mode for code speed. The code size - * is larger however. This mode is enabled when all the modules are compiled - * in ARM mode, see the Makefiles. - * - Pure THUMB mode, this is the preferred mode for code size. In this mode - * the execution speed is slower than the ARM mode. This mode is enabled - * when all the modules are compiled in THUMB mode, see the Makefiles. - * - Interworking mode, when in the system there are ARM modules mixed with - * THUMB modules then the interworking compiler option is enabled. This is - * usually the slowest mode and the code size is not as good as in pure - * THUMB mode. - * . - * @section ARM7_STATES Mapping of the System States in the ARM7 port - * The ChibiOS/RT logical @ref system_states are mapped as follow in the ARM7 - * port: - * - Init. This state is represented by the startup code and the - * initialization code before @p chSysInit() is executed. It has not a - * special hardware state associated, usually the CPU goes through several - * hardware states during the startup phase. - * - Normal. This is the state the system has after executing - * @p chSysInit(). In this state the ARM7TDMI has both the interrupt sources - * (IRQ and FIQ) enabled and is running in ARM System Mode. - * - Suspended. In this state the IRQ sources are disabled but the FIQ - * sources are served, the core is running in ARM System Mode. - * - Disabled. Both the IRQ and FIQ sources are disabled, the core is - * running in ARM System Mode. - * - Sleep. The ARM7 code does not have any built-in low power mode but - * there are clock stop modes implemented in custom ways by the various - * silicon vendors. This state is implemented in each microcontroller support - * code in a different way, the core is running (or freezed...) in ARM - * System Mode. - * - S-Locked. IRQ sources disabled, core running in ARM System Mode. - * - I-Locked. IRQ sources disabled, core running in ARM IRQ Mode. Note - * that this state is not different from the SRI state in this port, the - * @p chSysLockI() and @p chSysUnlockI() APIs do nothing (still use them in - * order to formally change state because this may change). - * - Serving Regular Interrupt. IRQ sources disabled, core running in - * ARM IRQ Mode. See also the I-Locked state. - * - Serving Fast Interrupt. IRQ and FIQ sources disabled, core running - * in ARM FIQ Mode. - * - Serving Non-Maskable Interrupt. There are no asynchronous NMI - * sources in ARM7 architecture but synchronous SVC, ABT and UND exception - * handlers can be seen as belonging to this category. - * - Halted. Implemented as an infinite loop after disabling both IRQ - * and FIQ sources. The ARM state is whatever the processor was running when - * @p chSysHalt() was invoked. - * . - * @section ARM7_NOTES The ARM7 port notes - * The ARM7 port makes some assumptions on the application code organization: - * - The @p main() function is invoked in system mode. - * - Each thread has a private user/system stack, the system has a single - * interrupt stack where all the interrupts are processed. - * - The threads are started in system mode. - * - The threads code can run in system mode or user mode, however the - * code running in user mode cannot invoke the ChibiOS/RT APIs directly - * because privileged instructions are used inside.
      - * The kernel APIs can be eventually invoked by using a SWI entry point - * that handles the switch in system mode and the return in user mode. - * - Other modes are not preempt-able because the system code assumes the - * threads running in system mode. When running in supervisor or other - * modes make sure that the interrupts are globally disabled. - * - Interrupts nesting is not supported in the ARM7 code because their - * implementation, even if possible, is not really efficient in this - * architecture. - * - FIQ sources can preempt the kernel (by design) so it is not possible to - * invoke the kernel APIs from inside a FIQ handler. FIQ handlers are not - * affected by the kernel activity so there is not added jitter. - * . - * @section ARM7_IH ARM7 Interrupt Handlers - * ARM7 Interrupt handlers do not save function-saved registers so you need to - * make sure your code saves them or does not use them (this happens - * because in the ARM7 port all the OS interrupt handler functions are declared - * naked).
      - * Function-trashed registers (R0-R3, R12, LR, SR) are saved/restored by the - * system macros @p CH_IRQ_PROLOGUE() and @p CH_IRQ_EPILOGUE().
      - * The easiest way to ensure this is to just invoke a normal function from - * within the interrupt handler, the function code will save all the required - * registers.
      - * Example: - * @code - * CH_IRQ_HANDLER(irq_handler) { - * CH_IRQ_PROLOGUE(); - * - * serve_interrupt(); - * - * VICVectAddr = 0; // This is LPC214x-specific. - * CH_IRQ_EPILOGUE(); - * } - * @endcode - * This is not a bug but an implementation choice, this solution allows to - * have interrupt handlers compiled in thumb mode without have to use an - * interworking mode (the mode switch is hidden in the macros), this - * greatly improves code efficiency and size. You can look at the serial - * driver for real examples of interrupt handlers.
      - * It is important that the serve_interrupt() interrupt function is not - * inlined by the compiler into the ISR or the code could still modify - * the unsaved registers, this can be accomplished using GCC by adding - * the attribute "noinline" to the function: - * @code - * #if defined(__GNUC__) - * __attribute__((noinline)) - * #endif - * static void serve_interrupt(void) { - * } - * @endcode - * Note that several commercial compilers support a GNU-like functions - * attribute mechanism.
      - * Alternative ways are to use an appropriate pragma directive or disable - * inlining optimizations in the modules containing the interrupt handlers. - * - * @ingroup ports - */ - -/** - * @defgroup ARM7_CONF Configuration Options - * @brief ARM7 specific configuration options. - * @details The ARM7 port allows some architecture-specific configurations - * settings that can be overridden by redefining them in @p chconf.h. - * Usually there is no need to change the default values. - * - @p INT_REQUIRED_STACK, this value represent the amount of stack space used - * by an interrupt handler between the @p extctx and @p intctx - * structures.
      - * In practice this value is the stack space used by the chSchDoReschedule() - * stack frame.
      - * This value can be affected by a variety of external things like compiler - * version, compiler options, kernel settings (speed/size) and so on.
      - * The default for this value is @p 0x10 which should be a safe value, you - * can trim this down by defining the macro externally. This would save - * some valuable RAM space for each thread present in the system.
      - * The default value is set into ./os/ports/GCC/ARM7/chcore.h. - * - @p IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE - * thread. Usually there is no need to change this value unless inserting - * code in the IDLE thread hook macro. - * . - * @ingroup ARM7 - */ - -/** - * @defgroup ARM7_CORE Core Port Implementation - * @brief ARM7 specific port code, structures and macros. - * - * @ingroup ARM7 - * @file ARM7/chtypes.h Port types. - * @file ARM7/chcore.h Port related structures and macros. - * @file ARM7/chcore.c Port related code. - */ - -/** - * @defgroup ARM7_STARTUP Startup Support - * @brief ARM7 startup code support. - * @details ChibiOS/RT provides its own generic startup file for the ARM7 port. - * Of course it is not mandatory to use it but care should be taken about the - * startup phase details. - * - *

      Startup Process

      - * The startup process, as implemented, is the following: - * -# The stacks are initialized by assigning them the sizes defined in the - * linker script (usually named @p ch.ld). Stack areas are allocated from - * the highest RAM location downward. - * -# The ARM state is switched to System with both IRQ and FIQ sources - * disabled. - * -# An early initialization routine @p hwinit0 is invoked, if the symbol is - * not defined then an empty default routine is executed (weak symbol). - * -# DATA and BSS segments are initialized. - * -# A late initialization routine @p hwinit1 is invoked, if the symbol not - * defined then an empty default routine is executed (weak symbol).
      - * This late initialization function is also the proper place for a - * @a bootloader, if your application requires one. - * -# The @p main() function is invoked with the parameters @p argc and @p argv - * set to zero. - * -# Should the @p main() function return a branch is performed to the weak - * symbol MainExitHandler. The default code is an endless empty loop. - * . - *

      Expected linker symbols

      - * The startup code starts at the symbol @p ResetHandler and expects the - * following symbols to be defined in the linker script: - * - @p __ram_end__ RAM end location +1. - * - @p __und_stack_size__ Undefined Instruction stack size. - * - @p __abt_stack_size__ Memory Abort stack size. - * - @p __fiq_stack_size__ FIQ service stack size. - * - @p __irq_stack_size__ IRQ service stack size. - * - @p __svc_stack_size__ SVC service stack size. - * - @p __sys_stack_size__ System/User stack size. This is the stack area used - * by the @p main() function. - * - @p _textdata address of the data segment source read only data. - * - @p _data data segment start location. - * - @p _edata data segment end location +1. - * - @p _bss_start BSS start location. - * - @p _bss_end BSS end location +1. - * . - * @ingroup ARM7 - * @file ARM7/crt0.s Startup code. - */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARM7/port.mk b/ChibiOS_2.0.8/os/ports/GCC/ARM7/port.mk deleted file mode 100644 index 1bd2c30..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARM7/port.mk +++ /dev/null @@ -1,7 +0,0 @@ -# List of the ChibiOS/RT ARM7 port files. -PORTSRC = ${CHIBIOS}/os/ports/GCC/ARM7/chcore.c - -PORTASM = ${CHIBIOS}/os/ports/GCC/ARM7/crt0.s \ - ${CHIBIOS}/os/ports/GCC/ARM7/chcoreasm.s - -PORTINC = ${CHIBIOS}/os/ports/GCC/ARM7 diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/cmparams.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/cmparams.h deleted file mode 100644 index a210bac..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/cmparams.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/LPC11xx/cmparams.h - * @brief ARM Cortex-M0 LPC11xx Specific Parameters. - * - * @defgroup ARMCMx_LPC11xx LPC11xx Specific Parameters - * @ingroup ARMCMx - * @details This file contains the Cortex-M0 specific parameters for the - * LPC11xx platform. - * @{ - */ - -#ifndef _CMPARAMS_H_ -#define _CMPARAMS_H_ - -/** - * @brief Cortex core model. - */ -#define CORTEX_MODEL CORTEX_M0 - -/** - * @brief Systick unit presence. - */ -#define CORTEX_HAS_ST TRUE - -/** - * @brief Memory Protection unit presence. - */ -#define CORTEX_HAS_MPU FALSE - -/** - * @brief Number of bits in priority masks. - */ -#define CORTEX_PRIORITY_BITS 2 - -#endif /* _CMPARAMS_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/port.mk b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/port.mk deleted file mode 100644 index d360b42..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/port.mk +++ /dev/null @@ -1,11 +0,0 @@ -# List of the ChibiOS/RT Cortex-M0 LPC11xx port files. -PORTSRC = ${CHIBIOS}/os/ports/GCC/ARMCMx/chcore.c \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/chcore_v6m.c \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/nvic.c \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/cmsis/core_cm0.c - -PORTASM = ${CHIBIOS}/os/ports/GCC/ARMCMx/crt0.s - -PORTINC = ${CHIBIOS}/os/ports/GCC/ARMCMx \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/LPC11xx \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/cmsis diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/vectors.s b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/vectors.s deleted file mode 100644 index 29bc8e3..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC11xx/vectors.s +++ /dev/null @@ -1,219 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -.syntax unified -.thumb - -.section vectors -_vectors: - .word __ram_end__ - .word ResetHandler - .word NMIVector - .word HardFaultVector - .word MemManageVector - .word BusFaultVector - .word UsageFaultVector - .word Vector1C - .word Vector20 - .word Vector24 - .word Vector28 - .word SVCallVector - .word DebugMonitorVector - .word Vector34 - .word PendSVVector - .word SysTickVector - .word Vector40 - .word Vector44 - .word Vector48 - .word Vector4C - .word Vector50 - .word Vector54 - .word Vector58 - .word Vector5C - .word Vector60 - .word Vector64 - .word Vector68 - .word Vector6C - .word Vector70 - .word Vector74 - .word Vector78 - .word Vector7C - .word Vector80 - .word Vector84 - .word Vector88 - .word Vector8C - .word Vector90 - .word Vector94 - .word Vector98 - .word Vector9C - .word VectorA0 - .word VectorA4 - .word VectorA8 - .word VectorAC - .word VectorB0 - .word VectorB4 - .word VectorB8 - .word VectorBC - -.weak NMIVector -NMIVector: - -.weak HardFaultVector -HardFaultVector: - -.weak MemManageVector -MemManageVector: - -.weak BusFaultVector -BusFaultVector: - -.weak UsageFaultVector -UsageFaultVector: - -.weak Vector1C -Vector1C: - -.weak Vector20 -Vector20: - -.weak Vector24 -Vector24: - -.weak Vector28 -Vector28: - -.weak SVCallVector -SVCallVector: - -.weak DebugMonitorVector -DebugMonitorVector: - -.weak Vector34 -Vector34: - -.weak PendSVVector -PendSVVector: - -.weak SysTickVector -SysTickVector: - -.weak Vector40 -Vector40: - -.weak Vector44 -Vector44: - -.weak Vector48 -Vector48: - -.weak Vector4C -Vector4C: - -.weak Vector50 -Vector50: - -.weak Vector54 -Vector54: - -.weak Vector58 -Vector58: - -.weak Vector5C -Vector5C: - -.weak Vector60 -Vector60: - -.weak Vector64 -Vector64: - -.weak Vector68 -Vector68: - -.weak Vector6C -Vector6C: - -.weak Vector70 -Vector70: - -.weak Vector74 -Vector74: - -.weak Vector78 -Vector78: - -.weak Vector7C -Vector7C: - -.weak Vector80 -Vector80: - -.weak Vector84 -Vector84: - -.weak Vector88 -Vector88: - -.weak Vector8C -Vector8C: - -.weak Vector90 -Vector90: - -.weak Vector94 -Vector94: - -.weak Vector98 -Vector98: - -.weak Vector9C -Vector9C: - -.weak VectorA0 -VectorA0: - -.weak VectorA4 -VectorA4: - -.weak VectorA8 -VectorA8: - -.weak VectorAC -VectorAC: - -.weak VectorB0 -VectorB0: - -.weak VectorB4 -VectorB4: - -.weak VectorB8 -VectorB8: - -.weak VectorBC -VectorBC: - -here: b here diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/cmparams.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/cmparams.h deleted file mode 100644 index 80d9d3c..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/cmparams.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/LPC13xx/cmparams.h - * @brief ARM Cortex-M3 LPC13xx Specific Parameters. - * - * @defgroup ARMCMx_LPC13xx LPC13xx Specific Parameters - * @ingroup ARMCMx - * @details This file contains the Cortex-M3 specific parameters for the - * LPC13xx platform. - * @{ - */ - -#ifndef _CMPARAMS_H_ -#define _CMPARAMS_H_ - -/** - * @brief Cortex core model. - */ -#define CORTEX_MODEL CORTEX_M3 - -/** - * @brief Systick unit presence. - */ -#define CORTEX_HAS_ST TRUE - -/** - * @brief Memory Protection unit presence. - */ -#define CORTEX_HAS_MPU FALSE - -/** - * @brief Number of bits in priority masks. - */ -#define CORTEX_PRIORITY_BITS 3 - -#endif /* _CMPARAMS_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/port.mk b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/port.mk deleted file mode 100644 index 115bb30..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/port.mk +++ /dev/null @@ -1,11 +0,0 @@ -# List of the ChibiOS/RT Cortex-M0 LPC13xx port files. -PORTSRC = ${CHIBIOS}/os/ports/GCC/ARMCMx/chcore.c \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/chcore_v7m.c \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/nvic.c \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/cmsis/core_cm3.c - -PORTASM = ${CHIBIOS}/os/ports/GCC/ARMCMx/crt0.s - -PORTINC = ${CHIBIOS}/os/ports/GCC/ARMCMx \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/LPC13xx \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/cmsis diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/vectors.s b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/vectors.s deleted file mode 100644 index 397d68a..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/LPC13xx/vectors.s +++ /dev/null @@ -1,315 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -.syntax unified -.thumb - -.section vectors -_vectors: - .word __ram_end__ - .word ResetHandler - .word NMIVector - .word HardFaultVector - .word MemManageVector - .word BusFaultVector - .word UsageFaultVector - .word Vector1C - .word Vector20 - .word Vector24 - .word Vector28 - .word SVCallVector - .word DebugMonitorVector - .word Vector34 - .word PendSVVector - .word SysTickVector - .word Vector40 - .word Vector44 - .word Vector48 - .word Vector4C - .word Vector50 - .word Vector54 - .word Vector58 - .word Vector5C - .word Vector60 - .word Vector64 - .word Vector68 - .word Vector6C - .word Vector70 - .word Vector74 - .word Vector78 - .word Vector7C - .word Vector80 - .word Vector84 - .word Vector88 - .word Vector8C - .word Vector90 - .word Vector94 - .word Vector98 - .word Vector9C - .word VectorA0 - .word VectorA4 - .word VectorA8 - .word VectorAC - .word VectorB0 - .word VectorB4 - .word VectorB8 - .word VectorBC - .word VectorC0 - .word VectorC4 - .word VectorC8 - .word VectorCC - .word VectorD0 - .word VectorD4 - .word VectorD8 - .word VectorDC - .word VectorE0 - .word VectorE4 - .word VectorE8 - .word VectorEC - .word VectorF0 - .word VectorF4 - .word VectorF8 - .word VectorFC - .word Vector100 - .word Vector104 - .word Vector108 - .word Vector10C - .word Vector110 - .word Vector114 - .word Vector118 - .word Vector11C - -.weak NMIVector -NMIVector: - -.weak HardFaultVector -HardFaultVector: - -.weak MemManageVector -MemManageVector: - -.weak BusFaultVector -BusFaultVector: - -.weak UsageFaultVector -UsageFaultVector: - -.weak Vector1C -Vector1C: - -.weak Vector20 -Vector20: - -.weak Vector24 -Vector24: - -.weak Vector28 -Vector28: - -.weak SVCallVector -SVCallVector: - -.weak DebugMonitorVector -DebugMonitorVector: - -.weak Vector34 -Vector34: - -.weak PendSVVector -PendSVVector: - -.weak SysTickVector -SysTickVector: - -.weak Vector40 -Vector40: - -.weak Vector44 -Vector44: - -.weak Vector48 -Vector48: - -.weak Vector4C -Vector4C: - -.weak Vector50 -Vector50: - -.weak Vector54 -Vector54: - -.weak Vector58 -Vector58: - -.weak Vector5C -Vector5C: - -.weak Vector60 -Vector60: - -.weak Vector64 -Vector64: - -.weak Vector68 -Vector68: - -.weak Vector6C -Vector6C: - -.weak Vector70 -Vector70: - -.weak Vector74 -Vector74: - -.weak Vector78 -Vector78: - -.weak Vector7C -Vector7C: - -.weak Vector80 -Vector80: - -.weak Vector84 -Vector84: - -.weak Vector88 -Vector88: - -.weak Vector8C -Vector8C: - -.weak Vector90 -Vector90: - -.weak Vector94 -Vector94: - -.weak Vector98 -Vector98: - -.weak Vector9C -Vector9C: - -.weak VectorA0 -VectorA0: - -.weak VectorA4 -VectorA4: - -.weak VectorA8 -VectorA8: - -.weak VectorAC -VectorAC: - -.weak VectorB0 -VectorB0: - -.weak VectorB4 -VectorB4: - -.weak VectorB8 -VectorB8: - -.weak VectorBC -VectorBC: - -.weak VectorC0 -VectorC0: - -.weak VectorC4 -VectorC4: - -.weak VectorC8 -VectorC8: - -.weak VectorCC -VectorCC: - -.weak VectorD0 -VectorD0: - -.weak VectorD4 -VectorD4: - -.weak VectorD8 -VectorD8: - -.weak VectorDC -VectorDC: - -.weak VectorE0 -VectorE0: - -.weak VectorE4 -VectorE4: - -.weak VectorE8 -VectorE8: - -.weak VectorEC -VectorEC: - -.weak VectorF0 -VectorF0: - -.weak VectorF4 -VectorF4: - -.weak VectorF8 -VectorF8: - -.weak VectorFC -VectorFC: - -.weak Vector100 -Vector100: - -.weak Vector104 -Vector104: - -.weak Vector108 -Vector108: - -.weak Vector10C -Vector10C: - -.weak Vector110 -Vector110: - -.weak Vector114 -Vector114: - -.weak Vector118 -Vector118: - -.weak Vector11C -Vector11C: - -here: b here diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/cmparams.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/cmparams.h deleted file mode 100644 index e9839cb..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/cmparams.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/STM32F10x/cmparams.h - * @brief ARM Cortex-M3 STM32F10x Specific Parameters. - * - * @defgroup ARMCMx_STM32F10x STM32F10x Specific Parameters - * @ingroup ARMCMx - * @details This file contains the Cortex-M3 specific parameters for the - * STM32F10x platform. - * @{ - */ - -#ifndef _CMPARAMS_H_ -#define _CMPARAMS_H_ - -/** - * @brief Cortex core model. - */ -#define CORTEX_MODEL CORTEX_M3 - -/** - * @brief Systick unit presence. - */ -#define CORTEX_HAS_ST TRUE - -/** - * @brief Memory Protection unit presence. - */ -#define CORTEX_HAS_MPU FALSE - -/** - * @brief Number of bits in priority masks. - */ -#define CORTEX_PRIORITY_BITS 4 - -#endif /* _CMPARAMS_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/port.mk b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/port.mk deleted file mode 100644 index 4d44a76..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/port.mk +++ /dev/null @@ -1,11 +0,0 @@ -# List of the ChibiOS/RT Cortex-M3 STM32 port files. -PORTSRC = ${CHIBIOS}/os/ports/GCC/ARMCMx/chcore.c \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/chcore_v7m.c \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/nvic.c \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/cmsis/core_cm3.c - -PORTASM = ${CHIBIOS}/os/ports/GCC/ARMCMx/crt0.s - -PORTINC = ${CHIBIOS}/os/ports/GCC/ARMCMx \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/STM32F10x \ - ${CHIBIOS}/os/ports/GCC/ARMCMx/cmsis diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/vectors.s b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/vectors.s deleted file mode 100644 index f5d6128..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/STM32F10x/vectors.s +++ /dev/null @@ -1,377 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -.syntax unified -.thumb - -/* If the macro is not defined in the Makefile then a board.h file must be - provided containing the definition of the STM32 family member.*/ -#if !defined(STM32F10X_LD) && !defined(STM32F10X_MD) && \ - !defined(STM32F10X_HD) && !defined(STM32F10X_CL) -#include "board.h" -#endif - -.section vectors -_vectors: - .word __ram_end__ - .word ResetHandler - .word NMIVector - .word HardFaultVector - .word MemManageVector - .word BusFaultVector - .word UsageFaultVector - .word Vector1C - .word Vector20 - .word Vector24 - .word Vector28 - .word SVCallVector - .word DebugMonitorVector - .word Vector34 - .word PendSVVector - .word SysTickVector - .word Vector40 - .word Vector44 - .word Vector48 - .word Vector4C - .word Vector50 - .word Vector54 - .word Vector58 - .word Vector5C - .word Vector60 - .word Vector64 - .word Vector68 - .word Vector6C - .word Vector70 - .word Vector74 - .word Vector78 - .word Vector7C - .word Vector80 - .word Vector84 - .word Vector88 - .word Vector8C - .word Vector90 - .word Vector94 - .word Vector98 - .word Vector9C - .word VectorA0 - .word VectorA4 - .word VectorA8 - .word VectorAC - .word VectorB0 - .word VectorB4 - .word VectorB8 - .word VectorBC - .word VectorC0 - .word VectorC4 - .word VectorC8 - .word VectorCC - .word VectorD0 - .word VectorD4 - .word VectorD8 - .word VectorDC - .word VectorE0 - .word VectorE4 - .word VectorE8 -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) - .word VectorEC - .word VectorF0 - .word VectorF4 - .word VectorF8 - .word VectorFC - .word Vector100 - .word Vector104 - .word Vector108 - .word Vector10C - .word Vector110 - .word Vector114 - .word Vector118 - .word Vector11C - .word Vector120 - .word Vector124 - .word Vector128 - .word Vector12C -#endif -#if defined(STM32F10X_CL) - .word Vector130 - .word Vector134 - .word Vector138 - .word Vector13C - .word Vector140 - .word Vector144 - .word Vector148 - .word Vector14C -#endif - -.weak NMIVector -NMIVector: - -.weak HardFaultVector -HardFaultVector: - -.weak MemManageVector -MemManageVector: - -.weak BusFaultVector -BusFaultVector: - -.weak UsageFaultVector -UsageFaultVector: - -.weak Vector1C -Vector1C: - -.weak Vector20 -Vector20: - -.weak Vector24 -Vector24: - -.weak Vector28 -Vector28: - -.weak SVCallVector -SVCallVector: - -.weak DebugMonitorVector -DebugMonitorVector: - -.weak Vector34 -Vector34: - -.weak PendSVVector -PendSVVector: - -.weak SysTickVector -SysTickVector: - -.weak Vector40 -Vector40: - -.weak Vector44 -Vector44: - -.weak Vector48 -Vector48: - -.weak Vector4C -Vector4C: - -.weak Vector50 -Vector50: - -.weak Vector54 -Vector54: - -.weak Vector58 -Vector58: - -.weak Vector5C -Vector5C: - -.weak Vector60 -Vector60: - -.weak Vector64 -Vector64: - -.weak Vector68 -Vector68: - -.weak Vector6C -Vector6C: - -.weak Vector70 -Vector70: - -.weak Vector74 -Vector74: - -.weak Vector78 -Vector78: - -.weak Vector7C -Vector7C: - -.weak Vector80 -Vector80: - -.weak Vector84 -Vector84: - -.weak Vector88 -Vector88: - -.weak Vector8C -Vector8C: - -.weak Vector90 -Vector90: - -.weak Vector94 -Vector94: - -.weak Vector98 -Vector98: - -.weak Vector9C -Vector9C: - -.weak VectorA0 -VectorA0: - -.weak VectorA4 -VectorA4: - -.weak VectorA8 -VectorA8: - -.weak VectorAC -VectorAC: - -.weak VectorB0 -VectorB0: - -.weak VectorB4 -VectorB4: - -.weak VectorB8 -VectorB8: - -.weak VectorBC -VectorBC: - -.weak VectorC0 -VectorC0: - -.weak VectorC4 -VectorC4: - -.weak VectorC8 -VectorC8: - -.weak VectorCC -VectorCC: - -.weak VectorD0 -VectorD0: - -.weak VectorD4 -VectorD4: - -.weak VectorD8 -VectorD8: - -.weak VectorDC -VectorDC: - -.weak VectorE0 -VectorE0: - -.weak VectorE4 -VectorE4: - -.weak VectorE8 -VectorE8: - -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -.weak VectorEC -VectorEC: - -.weak VectorF0 -VectorF0: - -.weak VectorF4 -VectorF4: - -.weak VectorF8 -VectorF8: - -.weak VectorFC -VectorFC: - -.weak Vector100 -Vector100: - -.weak Vector104 -Vector104: - -.weak Vector108 -Vector108: - -.weak Vector10C -Vector10C: - -.weak Vector110 -Vector110: - -.weak Vector114 -Vector114: - -.weak Vector118 -Vector118: - -.weak Vector11C -Vector11C: - -.weak Vector120 -Vector120: - -.weak Vector124 -Vector124: - -.weak Vector128 -Vector128: - -.weak Vector12C -Vector12C: -#endif -#if defined(STM32F10X_CL) -.weak Vector130 -Vector130: - -.weak Vector134 -Vector134: - -.weak Vector138 -Vector138: - -.weak Vector13C -Vector13C: - -.weak Vector140 -Vector140: - -.weak Vector144 -Vector144: - -.weak Vector148 -Vector148: - -.weak Vector14C -Vector14C: -#endif - -here: b here diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore.c b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore.c deleted file mode 100644 index b4e1813..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/chcore.c - * @brief ARM Cortex-Mx port code. - * - * @addtogroup ARMCMx_CORE - * @{ - */ - -#include "ch.h" - -/** - * @brief Halts the system. - * @note The function is declared as a weak symbol, it is possible - * to redefine it in your application code. - */ -#if !defined(__DOXYGEN__) -__attribute__((weak)) -#endif -void port_halt(void) { - - port_disable(); - while (TRUE) { - } -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore.h deleted file mode 100644 index eb62e9d..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore.h +++ /dev/null @@ -1,287 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/chcore.h - * @brief ARM Cortex-Mx port macros and structures. - * - * @addtogroup ARMCMx_CORE - * @{ - */ - -#ifndef _CHCORE_H_ -#define _CHCORE_H_ - -#include "nvic.h" - -/*===========================================================================*/ -/* Port constants. */ -/*===========================================================================*/ - -#define CORTEX_M0 0 /**< @brief Cortex-M0 variant. */ -#define CORTEX_M1 1 /**< @brief Cortex-M1 variant. */ -#define CORTEX_M3 3 /**< @brief Cortex-M3 variant. */ -#define CORTEX_M4 4 /**< @brief Cortex-M4 variant. */ - -/* Inclusion of the Cortex-Mx implementation specific parameters.*/ -#include "cmparams.h" - -/* Cortex model check, only M0 and M3 supported right now.*/ -#if (CORTEX_MODEL == CORTEX_M0) || (CORTEX_MODEL == CORTEX_M3) -#elif (CORTEX_MODEL == CORTEX_M1) || (CORTEX_MODEL == CORTEX_M4) -#warning "untested Cortex-M model" -#else -#error "unknown or unsupported Cortex-M model" -#endif - -/*===========================================================================*/ -/* Port statically derived parameters. */ -/*===========================================================================*/ - -/** - * @brief Total priority levels. - */ -#define CORTEX_PRIORITY_LEVELS (1 << CORTEX_PRIORITY_BITS) - -/** - * @brief Minimum priority level. - * @details This minimum priority level is calculated from the number of - * priority bits supported by the specific Cortex-Mx implementation. - */ -#define CORTEX_MINIMUM_PRIORITY (CORTEX_PRIORITY_LEVELS - 1) - -/** - * @brief Maximum priority level. - * @details The maximum allowed priority level is always zero. - */ -#define CORTEX_MAXIMUM_PRIORITY 0 - -/** - * @brief Disabled value for BASEPRI register. - * @note ARMv7-M architecture only. - */ -#define CORTEX_BASEPRI_DISABLED 0 - -/*===========================================================================*/ -/* Port macros. */ -/*===========================================================================*/ - -/** - * @brief Priority level verification macro. - */ -#define CORTEX_IS_VALID_PRIORITY(n) \ - (((n) >= 0) && ((n) < CORTEX_PRIORITY_LEVELS)) - -/** - * @brief Priority level to priority mask conversion macro. - */ -#define CORTEX_PRIORITY_MASK(n) ((n) << (8 - CORTEX_PRIORITY_BITS)) - -/*===========================================================================*/ -/* Port configurable parameters. */ -/*===========================================================================*/ - -/** - * @brief Enables the use of the WFI instruction in the idle thread loop. - */ -#ifndef CORTEX_ENABLE_WFI_IDLE -#define CORTEX_ENABLE_WFI_IDLE FALSE -#endif - -/** - * @brief SYSTICK handler priority. - * @note The default SYSTICK handler priority is calculated as the priority - * level in the middle of the numeric priorities range. - */ -#ifndef CORTEX_PRIORITY_SYSTICK -#define CORTEX_PRIORITY_SYSTICK (CORTEX_PRIORITY_LEVELS >> 1) -#else -/* If it is externally redefined then better perform a validity check on it.*/ -#if !CORTEX_IS_VALID_PRIORITY(CORTEX_PRIORITY_SYSTICK) -#error "invalid priority level specified for CORTEX_PRIORITY_SYSTICK" -#endif -#endif - -/** - * @brief SVCALL handler priority. - * @note The default SVCALL handler priority is calculated as - * @p CORTEX_MAXIMUM_PRIORITY+1, in the ARMv7-M port this reserves - * the @p CORTEX_MAXIMUM_PRIORITY priority level as fast interrupts - * priority level. - * @note The SVCALL vector is only used in the ARMv7-M port, it is available - * to user in the ARMv6-M port. - */ -#ifndef CORTEX_PRIORITY_SVCALL -#define CORTEX_PRIORITY_SVCALL (CORTEX_MAXIMUM_PRIORITY + 1) -#else -/* If it is externally redefined then better perform a validity check on it.*/ -#if !CORTEX_IS_VALID_PRIORITY(CORTEX_PRIORITY_SVCALL) -#error "invalid priority level specified for CORTEX_PRIORITY_SVCALL" -#endif -#endif - -/** - * @brief PENDSV handler priority. - * @note The default PENDSV handler priority is set at the - * @p CORTEX_MINIMUM_PRIORITY priority level. - * @note The PENDSV vector is only used in the ARMv7-M legacy port, it is - * available to user in the ARMv6-M and ARMv7-M ports. - * @note In the ARMv7-M legacy port this value should be not changed from - * the minimum priority level. - */ -#ifndef CORTEX_PRIORITY_PENDSV -#define CORTEX_PRIORITY_PENDSV CORTEX_MINIMUM_PRIORITY -#else -/* If it is externally redefined then better perform a validity check on it.*/ -#if !CORTEX_IS_VALID_PRIORITY(CORTEX_PRIORITY_PENDSV) -#error "invalid priority level specified for CORTEX_PRIORITY_PENDSV" -#endif -#endif - -/** - * @brief BASEPRI level within kernel lock. - * @note This value must not mask the SVCALL priority level or the - * kernel would hard fault. - * @note ARMv7-M architecture only. - */ -#ifndef CORTEX_BASEPRI_KERNEL -#define CORTEX_BASEPRI_KERNEL CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_SVCALL+1) -#endif - -/** - * @brief Stack alignment enforcement. - * @note The default value is 64 in order to comply with EABI, reducing - * the value to 32 can save some RAM space if you don't care about - * binary compatibility with EABI compiled libraries. - * @note Allowed values are 32 or 64. - */ -#ifndef CORTEX_STACK_ALIGNMENT -#define CORTEX_STACK_ALIGNMENT 64 -#endif - -/*===========================================================================*/ -/* Port exported info. */ -/*===========================================================================*/ - -/** - * @brief Macro defining a generic ARM architecture. - */ -#define CH_ARCHITECTURE_ARM - -#if defined(__DOXYGEN__) -/** - * @brief Macro defining the specific ARM architecture. - */ -#define CH_ARCHITECTURE_ARM_vxm - -/** - * @brief Name of the implemented architecture. - */ -#define CH_ARCHITECTURE_NAME "ARMvx-M" - -/** - * @brief Name of the architecture variant (optional). - */ -#define CH_CORE_VARIANT_NAME "Cortex-Mx" -#elif CORTEX_MODEL == CORTEX_M4 -#define CH_ARCHITECTURE_ARM_v7M -#define CH_ARCHITECTURE_NAME "ARMv7-ME" -#define CH_CORE_VARIANT_NAME "Cortex-M4" -#elif CORTEX_MODEL == CORTEX_M3 -#define CH_ARCHITECTURE_ARM_v7M -#define CH_ARCHITECTURE_NAME "ARMv7-M" -#define CH_CORE_VARIANT_NAME "Cortex-M3" -#elif CORTEX_MODEL == CORTEX_M1 -#define CH_ARCHITECTURE_ARM_v6M -#define CH_ARCHITECTURE_NAME "ARMv6-M" -#define CH_CORE_VARIANT_NAME "Cortex-M1" -#elif CORTEX_MODEL == CORTEX_M0 -#define CH_ARCHITECTURE_ARM_v6M -#define CH_ARCHITECTURE_NAME "ARMv6-M" -#define CH_CORE_VARIANT_NAME "Cortex-M0" -#endif - -/*===========================================================================*/ -/* Port implementation part (common). */ -/*===========================================================================*/ - -/** - * @brief Stack and memory alignment enforcement. - */ -#if (CORTEX_STACK_ALIGNMENT == 64) || defined(__DOXYGEN__) -typedef uint64_t stkalign_t __attribute__ ((aligned (8))); -#elif CORTEX_STACK_ALIGNMENT == 32 -typedef uint32_t stkalign_t __attribute__ ((aligned (4))); -#else -#error "invalid stack alignment selected" -#endif - -/** - * @brief Generic ARM register. - */ -typedef void *regarm_t; - -#if !defined(__DOXYGEN__) -/** - * @brief Platform dependent part of the @p Thread structure. - * @details In this port the structure just holds a pointer to the @p intctx - * structure representing the stack pointer at context switch time. - */ -struct context { - struct intctx *r13; -}; -#endif - -/** - * @brief Enforces a correct alignment for a stack area size value. - */ -#define STACK_ALIGN(n) ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1) - -/** - * @brief Computes the thread working area global size. - */ -#define THD_WA_SIZE(n) STACK_ALIGN(sizeof(Thread) + \ - sizeof(struct intctx) + \ - sizeof(struct extctx) + \ - (n) + (INT_REQUIRED_STACK)) - -/** - * @brief Static working area allocation. - * @details This macro is used to allocate a static thread working area - * aligned as both position and size. - */ -#define WORKING_AREA(s, n) stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]; - -/* Includes the architecture-specific implementation part.*/ -#if defined(CH_ARCHITECTURE_ARM_v6M) -#include "chcore_v6m.h" -#elif defined(CH_ARCHITECTURE_ARM_v7M) -#include "chcore_v7m.h" -#endif - -#endif /* _CHCORE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v6m.c b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v6m.c deleted file mode 100644 index 7377511..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v6m.c +++ /dev/null @@ -1,160 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/chcore_v6m.c - * @brief ARMv6-M architecture port code. - * - * @addtogroup ARMCMx_V6M_CORE - * @{ - */ - -#include "ch.h" - -/** - * @brief PC register temporary storage. - */ -regarm_t _port_saved_pc; - -/** - * @brief IRQ nesting counter. - */ -unsigned _port_irq_nesting; - -/** - * @brief System Timer vector. - * @details This interrupt is used as system tick. - * @note The timer must be initialized in the startup code. - */ -CH_IRQ_HANDLER(SysTickVector) { - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - chSysTimerHandlerI(); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} - -/** - * @brief Post-IRQ switch code. - * @details On entry the stack and the registers are restored by the exception - * return, the PC value is stored in @p _port_saved_pc, the interrupts - * are disabled. - */ -#if !defined(__DOXYGEN__) -__attribute__((naked)) -#endif -void _port_switch_from_irq(void) { - /* Note, saves r4 to make space for the PC.*/ - asm volatile ("push {r0, r1, r2, r3, r4} \n\t" - "mrs r0, APSR \n\t" - "mov r1, r12 \n\t" - "push {r0, r1, lr} \n\t" - "ldr r0, =_port_saved_pc \n\t" - "ldr r0, [r0] \n\t" - "add r0, r0, #1 \n\t" - "str r0, [sp, #28]" : : : "memory"); - - chSchDoRescheduleI(); - - /* Note, the last registers are restored alone after re-enabling the - interrupts in order to minimize the (very remote and unlikely) - possibility that the stack is filled by continuous and saturating - interrupts that would not allow that last words to be pulled out of - the stack.*/ - asm volatile ("pop {r0, r1, r2} \n\t" - "mov r12, r1 \n\t" - "msr APSR, r0 \n\t" - "mov lr, r2 \n\t" - "cpsie i \n\t" - "pop {r0, r1, r2, r3, pc}" : : : "memory"); -} - -#define PUSH_CONTEXT(sp) { \ - asm volatile ("push {r4, r5, r6, r7, lr} \n\t" \ - "mov r4, r8 \n\t" \ - "mov r5, r9 \n\t" \ - "mov r6, r10 \n\t" \ - "mov r7, r11 \n\t" \ - "push {r4, r5, r6, r7}" : : : "memory"); \ -} - -#define POP_CONTEXT(sp) { \ - asm volatile ("pop {r4, r5, r6, r7} \n\t" \ - "mov r8, r4 \n\t" \ - "mov r9, r5 \n\t" \ - "mov r10, r6 \n\t" \ - "mov r11, r7 \n\t" \ - "pop {r4, r5, r6, r7, pc}" : : "r" (sp) : "memory"); \ -} - -/** - * @brief Performs a context switch between two threads. - * @details This is the most critical code in any port, this function - * is responsible for the context switch between 2 threads. - * @note The implementation of this code affects directly the context - * switch performance so optimize here as much as you can. - * - * @param[in] ntp the thread to be switched in - * @param[in] otp the thread to be switched out - */ -#if !defined(__DOXYGEN__) -__attribute__((naked)) -#endif -void port_switch(Thread *ntp, Thread *otp) { - register struct intctx *r13 asm ("r13"); - - /* Stack overflow check, if enabled.*/ -#if CH_DBG_ENABLE_STACK_CHECK - if ((void *)(r13 - 1) < (void *)(otp + 1)) - asm volatile ("movs r0, #0 \n\t" - "b chDbgPanic"); -#endif /* CH_DBG_ENABLE_STACK_CHECK */ - - PUSH_CONTEXT(r13); - - otp->p_ctx.r13 = r13; - r13 = ntp->p_ctx.r13; - - POP_CONTEXT(r13); -} - -/** - * @brief Start a thread by invoking its work function. - * @details If the work function returns @p chThdExit() is automatically - * invoked. - */ -void _port_thread_start(void) { - - port_unlock(); - asm volatile ("mov r0, r5 \n\t" - "blx r4 \n\t" - "bl chThdExit"); -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v6m.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v6m.h deleted file mode 100644 index a79d7ed..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v6m.h +++ /dev/null @@ -1,267 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/chcore_v6m.h - * @brief ARMv6-M architecture port macros and structures. - * - * @addtogroup ARMCMx_V6M_CORE - * @{ - */ - -#ifndef _CHCORE_V6M_H_ -#define _CHCORE_V6M_H_ - -/*===========================================================================*/ -/* Port implementation part. */ -/*===========================================================================*/ - -/** - * @brief Cortex-Mx exception context. - */ -struct cmxctx { - regarm_t r0; - regarm_t r1; - regarm_t r2; - regarm_t r3; - regarm_t r12; - regarm_t lr_thd; - regarm_t pc; - regarm_t xpsr; -}; - -#if !defined(__DOXYGEN__) -/** - * @brief Interrupt saved context. - * @details This structure represents the stack frame saved during a - * preemption-capable interrupt handler. - */ -struct extctx { - regarm_t xpsr; - regarm_t r12; - regarm_t lr; - regarm_t r0; - regarm_t r1; - regarm_t r2; - regarm_t r3; - regarm_t pc; -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief System saved context. - * @details This structure represents the inner stack frame during a context - * switching. - */ -struct intctx { - regarm_t r8; - regarm_t r9; - regarm_t r10; - regarm_t r11; - regarm_t r4; - regarm_t r5; - regarm_t r6; - regarm_t r7; - regarm_t lr; -}; -#endif - -/** - * @brief Platform dependent part of the @p chThdInit() API. - * @details This code usually setup the context switching frame represented - * by an @p intctx structure. - */ -#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \ - tp->p_ctx.r13 = (struct intctx *)((uint8_t *)workspace + \ - wsize - \ - sizeof(struct intctx)); \ - tp->p_ctx.r13->r4 = pf; \ - tp->p_ctx.r13->r5 = arg; \ - tp->p_ctx.r13->lr = _port_thread_start; \ -} - -/** - * @brief Stack size for the system idle thread. - * @details This size depends on the idle thread implementation, usually - * the idle thread should take no more space than those reserved - * by @p INT_REQUIRED_STACK. - * @note In this port it is set to 8 because the idle thread does have - * a stack frame when compiling without optimizations. You may - * reduce this value to zero when compiling with optimizations. - */ -#ifndef IDLE_THREAD_STACK_SIZE -#define IDLE_THREAD_STACK_SIZE 8 -#endif - -/** - * @brief Per-thread stack overhead for interrupts servicing. - * @details This constant is used in the calculation of the correct working - * area size. - * This value can be zero on those architecture where there is a - * separate interrupt stack and the stack space between @p intctx and - * @p extctx is known to be zero. - * @note In this port it is conservatively set to 16 because the function - * @p chSchDoRescheduleI() can have a stack frame, expecially with - * compiler optimizations disabled. - */ -#ifndef INT_REQUIRED_STACK -#define INT_REQUIRED_STACK 16 -#endif - -/** - * @brief IRQ prologue code. - * @details This macro must be inserted at the start of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_PROLOGUE() { \ - port_lock_from_isr(); \ - _port_irq_nesting++; \ - port_unlock_from_isr(); \ -} - -/** - * @brief IRQ epilogue code. - * @details This macro must be inserted at the end of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_EPILOGUE() { \ - port_lock_from_isr(); \ - if ((--_port_irq_nesting == 0) && chSchIsRescRequiredExI()) { \ - register struct cmxctx *ctxp; \ - \ - asm volatile ("mrs %0, PSP" : "=r" (ctxp) : ); \ - _port_saved_pc = ctxp->pc; \ - ctxp->pc = _port_switch_from_irq; \ - return; \ - } \ - port_unlock_from_isr(); \ -} - -/** - * @brief IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_IRQ_HANDLER(id) void id(void) - -/** - * @brief Fast IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_FAST_IRQ_HANDLER(id) void id(void) - -/** - * @brief Port-related initialization code. - */ -#define port_init() { \ - _port_irq_nesting = 0; \ - SCB_AIRCR = AIRCR_VECTKEY | AIRCR_PRIGROUP(0); \ - NVICSetSystemHandlerPriority(HANDLER_SYSTICK, \ - CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_SYSTICK)); \ -} - -/** - * @brief Kernel-lock action. - * @details Usually this function just disables interrupts but may perform - * more actions. - */ -#define port_lock() asm volatile ("cpsid i" : : : "memory") - -/** - * @brief Kernel-unlock action. - * @details Usually this function just disables interrupts but may perform - * more actions. - */ -#define port_unlock() asm volatile ("cpsie i" : : : "memory") - -/** - * @brief Kernel-lock action from an interrupt handler. - * @details This function is invoked before invoking I-class APIs from - * interrupt handlers. The implementation is architecture dependent, - * in its simplest form it is void. - * @note Same as @p port_lock() in this port. - */ -#define port_lock_from_isr() port_lock() - -/** - * @brief Kernel-unlock action from an interrupt handler. - * @details This function is invoked after invoking I-class APIs from interrupt - * handlers. The implementation is architecture dependent, in its - * simplest form it is void. - * @note Same as @p port_lock() in this port. - */ -#define port_unlock_from_isr() port_unlock() - -/** - * @brief Disables all the interrupt sources. - */ -#define port_disable() asm volatile ("cpsid i" : : : "memory") - -/** - * @brief Disables the interrupt sources below kernel-level priority. - */ -#define port_suspend() asm volatile ("cpsid i" : : : "memory") - -/** - * @brief Enables all the interrupt sources. - */ -#define port_enable() asm volatile ("cpsie i" : : : "memory") - -/** - * @brief Enters an architecture-dependent IRQ-waiting mode. - * @details The function is meant to return when an interrupt becomes pending. - * The simplest implementation is an empty function or macro but this - * would not take advantage of architecture-specific power saving - * modes. - * @note Implemented as an inlined @p WFI instruction. - */ -#if CORTEX_ENABLE_WFI_IDLE || defined(__DOXYGEN__) -#define port_wait_for_interrupt() asm volatile ("wfi" : : : "memory") -#else -#define port_wait_for_interrupt() -#endif - -#if !defined(__DOXYGEN__) -extern regarm_t _port_saved_pc; -extern unsigned _port_irq_nesting; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void port_halt(void); - void port_switch(Thread *ntp, Thread *otp); - void _port_switch_from_irq(void); - void _port_thread_start(void); -#ifdef __cplusplus -} -#endif - -#endif /* _CHCORE_V6M_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v7m.c b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v7m.c deleted file mode 100644 index 6d5b35e..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v7m.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/chcore_v7m.c - * @brief ARMv7-M architecture port code. - * - * @addtogroup ARMCMx_V7M_CORE - * @{ - */ - -#include "ch.h" - -#if !defined(CH_CURRP_REGISTER_CACHE) || defined(__DOXXYGEN__) -/** - * @brief Internal context stacking. - */ -#define PUSH_CONTEXT() { \ - asm volatile ("push {r4, r5, r6, r7, r8, r9, r10, r11, lr}" \ - : : : "memory"); \ -} - -/** - * @brief Internal context unstacking. - */ -#define POP_CONTEXT() { \ - asm volatile ("pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}" \ - : : : "memory"); \ -} -#else /* defined(CH_CURRP_REGISTER_CACHE) */ -#define PUSH_CONTEXT() { \ - asm volatile ("push {r4, r5, r6, r8, r9, r10, r11, lr}" \ - : : : "memory"); \ -} - -#define POP_CONTEXT() { \ - asm volatile ("pop {r4, r5, r6, r8, r9, r10, r11, pc}" \ - : : : "memory"); \ -} -#endif /* defined(CH_CURRP_REGISTER_CACHE) */ - -#if !CH_OPTIMIZE_SPEED -void _port_lock(void) { - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_KERNEL; - asm volatile ("msr BASEPRI, %0" : : "r" (tmp) : "memory"); -} - -void _port_unlock(void) { - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_DISABLED; - asm volatile ("msr BASEPRI, %0" : : "r" (tmp) : "memory"); -} -#endif - -/** - * @brief System Timer vector. - * @details This interrupt is used as system tick. - * @note The timer must be initialized in the startup code. - */ -CH_IRQ_HANDLER(SysTickVector) { - - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - chSysTimerHandlerI(); - chSysUnlockFromIsr(); - - CH_IRQ_EPILOGUE(); -} - -/** - * @brief SVC vector. - * @details The SVC vector is used for exception mode re-entering after a - * context switch. - */ -void SVCallVector(void) { - register struct extctx *ctxp; - - /* Discarding the current exception context and positioning the stack to - point to the real one.*/ - asm volatile ("mrs %0, PSP" : "=r" (ctxp) : : "memory"); - ctxp++; - asm volatile ("msr PSP, %0" : : "r" (ctxp) : "memory"); - port_unlock_from_isr(); -} - -/** - * @brief Exception exit redirection to _port_switch_from_isr(). - */ -void _port_irq_epilogue(void) { - - port_lock_from_isr(); - if ((SCB_ICSR & ICSR_RETTOBASE)) { - register struct extctx *ctxp; - - /* Adding an artificial exception return context, there is no need to - populate it fully.*/ - asm volatile ("mrs %0, PSP" : "=r" (ctxp) : : "memory"); - ctxp--; - asm volatile ("msr PSP, %0" : : "r" (ctxp) : "memory"); - ctxp->pc = _port_switch_from_isr; - ctxp->xpsr = (regarm_t)0x01000000; - /* Note, returning without unlocking is intentional, this is done in - order to keep the rest of the context switching atomic.*/ - return; - } - port_unlock_from_isr(); -} - -/** - * @brief Post-IRQ switch code. - * @details Exception handlers return here for context switching. - */ -#if !defined(__DOXYGEN__) -__attribute__((naked)) -#endif -void _port_switch_from_isr(void) { - - if (chSchIsRescRequiredExI()) - chSchDoRescheduleI(); - asm volatile ("svc #0"); -} - -/** - * @brief Performs a context switch between two threads. - * @details This is the most critical code in any port, this function - * is responsible for the context switch between 2 threads. - * @note The implementation of this code affects directly the context - * switch performance so optimize here as much as you can. - * - * @param[in] ntp the thread to be switched in - * @param[in] otp the thread to be switched out - */ -#if !defined(__DOXYGEN__) -__attribute__((naked)) -#endif -void port_switch(Thread *ntp, Thread *otp) { - -#if CH_DBG_ENABLE_STACK_CHECK - /* Stack overflow check, if enabled.*/ - register struct intctx *r13 asm ("r13"); - if ((void *)(r13 - 1) < (void *)(otp + 1)) - asm volatile ("movs r0, #0 \n\t" - "b chDbgPanic"); -#endif /* CH_DBG_ENABLE_STACK_CHECK */ - - PUSH_CONTEXT(); - - asm volatile ("str sp, [%1, #12] \n\t" - "ldr sp, [%0, #12]" : : "r" (ntp), "r" (otp)); - - POP_CONTEXT(); -} - -/** - * @brief Start a thread by invoking its work function. - * @details If the work function returns @p chThdExit() is automatically - * invoked. - */ -void _port_thread_start(void) { - - port_unlock(); - asm volatile ("mov r0, r5 \n\t" - "blx r4 \n\t" - "bl chThdExit"); -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v7m.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v7m.h deleted file mode 100644 index 6fcf59a..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chcore_v7m.h +++ /dev/null @@ -1,278 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/chcore_v7m.h - * @brief ARMv7-M architecture port macros and structures. - * - * @addtogroup ARMCMx_V7M_CORE - * @{ - */ - -#ifndef _CHCORE_V7M_H_ -#define _CHCORE_V7M_H_ - -/*===========================================================================*/ -/* Port implementation part. */ -/*===========================================================================*/ - -#if !defined(__DOXYGEN__) -/** - * @brief Interrupt saved context. - * @details This structure represents the stack frame saved during a - * preemption-capable interrupt handler. - * @note It is implemented to match the Cortex-Mx exception context. - */ -struct extctx { - regarm_t r0; - regarm_t r1; - regarm_t r2; - regarm_t r3; - regarm_t r12; - regarm_t lr_thd; - regarm_t pc; - regarm_t xpsr; -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief System saved context. - * @details This structure represents the inner stack frame during a context - * switching. - */ -struct intctx { - regarm_t r4; - regarm_t r5; - regarm_t r6; -#ifndef CH_CURRP_REGISTER_CACHE - regarm_t r7; -#endif - regarm_t r8; - regarm_t r9; - regarm_t r10; - regarm_t r11; - regarm_t lr; -}; -#endif - -/** - * @brief Platform dependent part of the @p chThdInit() API. - * @details This code usually setup the context switching frame represented - * by an @p intctx structure. - */ -#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \ - tp->p_ctx.r13 = (struct intctx *)((uint8_t *)workspace + \ - wsize - \ - sizeof(struct intctx)); \ - tp->p_ctx.r13->r4 = pf; \ - tp->p_ctx.r13->r5 = arg; \ - tp->p_ctx.r13->lr = _port_thread_start; \ -} - -/** - * @brief Stack size for the system idle thread. - * @details This size depends on the idle thread implementation, usually - * the idle thread should take no more space than those reserved - * by @p INT_REQUIRED_STACK. - * @note In this port it is set to 8 because the idle thread does have - * a stack frame when compiling without optimizations. You may - * reduce this value to zero when compiling with optimizations. - */ -#ifndef IDLE_THREAD_STACK_SIZE -#define IDLE_THREAD_STACK_SIZE 8 -#endif - -/** - * @brief Per-thread stack overhead for interrupts servicing. - * @details This constant is used in the calculation of the correct working - * area size. - * This value can be zero on those architecture where there is a - * separate interrupt stack and the stack space between @p intctx and - * @p extctx is known to be zero. - * @note In this port it is conservatively set to 16 because the function - * @p chSchDoRescheduleI() can have a stack frame, expecially with - * compiler optimizations disabled. - */ -#ifndef INT_REQUIRED_STACK -#define INT_REQUIRED_STACK 16 -#endif - -/** - * @brief IRQ prologue code. - * @details This macro must be inserted at the start of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_PROLOGUE() - -/** - * @brief IRQ epilogue code. - * @details This macro must be inserted at the end of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_EPILOGUE() _port_irq_epilogue() - -/** - * @brief IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_IRQ_HANDLER(id) void id(void) - -/** - * @brief Fast IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_FAST_IRQ_HANDLER(id) void id(void) - -/** - * @brief Port-related initialization code. - */ -#define port_init() { \ - SCB_AIRCR = AIRCR_VECTKEY | AIRCR_PRIGROUP(0); \ - NVICSetSystemHandlerPriority(HANDLER_SVCALL, \ - CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_SVCALL)); \ - NVICSetSystemHandlerPriority(HANDLER_SYSTICK, \ - CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_SYSTICK)); \ -} - -/** - * @brief Kernel-lock action. - * @details Usually this function just disables interrupts but may perform - * more actions. - * @note In this port this it raises the base priority to kernel level. - */ -#if CH_OPTIMIZE_SPEED -#define port_lock() { \ - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_KERNEL; \ - asm volatile ("msr BASEPRI, %0" : : "r" (tmp) : "memory"); \ -} -#else -#define port_lock() { \ - asm volatile ("bl _port_lock" : : : "r3", "lr", "memory"); \ -} -#endif - -/** - * @brief Kernel-unlock action. - * @details Usually this function just disables interrupts but may perform - * more actions. - * @note In this port this it lowers the base priority to user level. - */ -#if CH_OPTIMIZE_SPEED -#define port_unlock() { \ - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_DISABLED; \ - asm volatile ("msr BASEPRI, %0" : : "r" (tmp) : "memory"); \ -} -#else -#define port_unlock() { \ - asm volatile ("bl _port_unlock" : : : "r3", "lr", "memory"); \ -} -#endif - -/** - * @brief Kernel-lock action from an interrupt handler. - * @details This function is invoked before invoking I-class APIs from - * interrupt handlers. The implementation is architecture dependent, - * in its simplest form it is void. - * @note Same as @p port_lock() in this port. - */ -#define port_lock_from_isr() port_lock() - -/** - * @brief Kernel-unlock action from an interrupt handler. - * @details This function is invoked after invoking I-class APIs from interrupt - * handlers. The implementation is architecture dependent, in its - * simplest form it is void. - * @note Same as @p port_unlock() in this port. - */ -#define port_unlock_from_isr() port_unlock() - -/** - * @brief Disables all the interrupt sources. - * @note Of course non maskable interrupt sources are not included. - * @note In this port it disables all the interrupt sources by raising - * the priority mask to level 0. - */ -#define port_disable() asm volatile ("cpsid i" : : : "memory") - -/** - * @brief Disables the interrupt sources below kernel-level priority. - * @note Interrupt sources above kernel level remains enabled. - * @note In this port it raises/lowers the base priority to kernel level. - */ -#define port_suspend() { \ - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_KERNEL; \ - asm volatile ("msr BASEPRI, %0 \n\t" \ - "cpsie i" : : "r" (tmp) : "memory"); \ -} - -/** - * @brief Enables all the interrupt sources. - * @note In this port it lowers the base priority to user level. - */ -#define port_enable() { \ - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_DISABLED; \ - asm volatile ("msr BASEPRI, %0 \n\t" \ - "cpsie i" : : "r" (tmp) : "memory"); \ -} - -/** - * @brief Enters an architecture-dependent IRQ-waiting mode. - * @details The function is meant to return when an interrupt becomes pending. - * The simplest implementation is an empty function or macro but this - * would not take advantage of architecture-specific power saving - * modes. - * @note Implemented as an inlined @p WFI instruction. - */ -#if CORTEX_ENABLE_WFI_IDLE || defined(__DOXYGEN__) -#define port_wait_for_interrupt() { \ - asm volatile ("wfi" : : : "memory"); \ -} -#else -#define port_wait_for_interrupt() -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void port_halt(void); - void port_switch(Thread *ntp, Thread *otp); - void _port_irq_epilogue(void); - void _port_switch_from_isr(void); - void _port_thread_start(void); -#if !CH_OPTIMIZE_SPEED - void _port_lock(void); - void _port_unlock(void); -#endif -#ifdef __cplusplus -} -#endif - -#endif /* _CHCORE_V7M_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chtypes.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chtypes.h deleted file mode 100644 index cb1f5db..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/chtypes.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/chtypes.h - * @brief ARM Cortex-Mx port system types. - * - * @addtogroup ARMCMx_CORE - * @{ - */ - -#ifndef _CHTYPES_H_ -#define _CHTYPES_H_ - -#define __need_NULL -#define __need_size_t -#define __need_ptrdiff_t -#include - -#include - -typedef int32_t bool_t; /**< Fast boolean type. */ -typedef uint8_t tmode_t; /**< Thread flags. */ -typedef uint8_t tstate_t; /**< Thread state. */ -typedef uint8_t trefs_t; /**< Thread references counter. */ -typedef uint32_t tprio_t; /**< Thread priority. */ -typedef int32_t msg_t; /**< Inter-thread message. */ -typedef int32_t eventid_t; /**< Event Id. */ -typedef uint32_t eventmask_t; /**< Events mask. */ -typedef uint32_t systime_t; /**< System time. */ -typedef int32_t cnt_t; /**< Resources counter. */ - -/** - * @brief Inline function modifier. - */ -#define INLINE inline - -/** - * @brief ROM constant modifier. - * @note It is set to use the "const" keyword in this port. - */ -#define ROMCONST const - -/** - * @brief Packed structure modifier (within). - * @note It uses the "packed" GCC attribute. - */ -#define PACK_STRUCT_STRUCT __attribute__((packed)) - -/** - * @brief Packed structure modifier (before). - * @note Empty in this port. - */ -#define PACK_STRUCT_BEGIN - -/** - * @brief Packed structure modifier (after). - * @note Empty in this port. - */ -#define PACK_STRUCT_END - -#endif /* _CHTYPES_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm0.c b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm0.c deleted file mode 100644 index d38074f..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm0.c +++ /dev/null @@ -1,455 +0,0 @@ -/**************************************************************************//** - * @file core_cm0.c - * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Source File - * @version V1.30 - * @date 30. October 2009 - * - * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - -#include - -/* define compiler specific symbols */ -#if defined ( __CC_ARM ) - #define __ASM __asm /*!< asm keyword for ARM Compiler */ - #define __INLINE __inline /*!< inline keyword for ARM Compiler */ - -#elif defined ( __ICCARM__ ) - #define __ASM __asm /*!< asm keyword for IAR Compiler */ - #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ - -#elif defined ( __GNUC__ ) - #define __ASM __asm /*!< asm keyword for GNU Compiler */ - #define __INLINE inline /*!< inline keyword for GNU Compiler */ - -#elif defined ( __TASKING__ ) - #define __ASM __asm /*!< asm keyword for TASKING Compiler */ - #define __INLINE inline /*!< inline keyword for TASKING Compiler */ - -#endif - - -/* ################### Compiler specific Intrinsics ########################### */ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -__ASM uint32_t __get_PSP(void) -{ - mrs r0, psp - bx lr -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -__ASM void __set_PSP(uint32_t topOfProcStack) -{ - msr psp, r0 - bx lr -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -__ASM uint32_t __get_MSP(void) -{ - mrs r0, msp - bx lr -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -__ASM void __set_MSP(uint32_t mainStackPointer) -{ - msr msp, r0 - bx lr -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -__ASM uint32_t __REV16(uint16_t value) -{ - rev16 r0, r0 - bx lr -} - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -__ASM int32_t __REVSH(int16_t value) -{ - revsh r0, r0 - bx lr -} - - -#if (__ARMCC_VERSION < 400000) - - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -__ASM uint32_t __get_PRIMASK(void) -{ - mrs r0, primask - bx lr -} - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -__ASM void __set_PRIMASK(uint32_t priMask) -{ - msr primask, r0 - bx lr -} - -/** - * @brief Return the Control Register value - * - * @return Control value - * - * Return the content of the control register - */ -__ASM uint32_t __get_CONTROL(void) -{ - mrs r0, control - bx lr -} - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -__ASM void __set_CONTROL(uint32_t control) -{ - msr control, r0 - bx lr -} - -#endif /* __ARMCC_VERSION */ - - - -#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ -#pragma diag_suppress=Pe940 - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -uint32_t __get_PSP(void) -{ - __ASM("mrs r0, psp"); - __ASM("bx lr"); -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -void __set_PSP(uint32_t topOfProcStack) -{ - __ASM("msr psp, r0"); - __ASM("bx lr"); -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -uint32_t __get_MSP(void) -{ - __ASM("mrs r0, msp"); - __ASM("bx lr"); -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -void __set_MSP(uint32_t topOfMainStack) -{ - __ASM("msr msp, r0"); - __ASM("bx lr"); -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -uint32_t __REV16(uint16_t value) -{ - __ASM("rev16 r0, r0"); - __ASM("bx lr"); -} - - -#pragma diag_default=Pe940 - - -#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -uint32_t __get_PSP(void) __attribute__( ( naked ) ); -uint32_t __get_PSP(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, psp\n\t" - "MOV r0, %0 \n\t" - "BX lr \n\t" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) ); -void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0\n\t" - "BX lr \n\t" : : "r" (topOfProcStack) ); -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -uint32_t __get_MSP(void) __attribute__( ( naked ) ); -uint32_t __get_MSP(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, msp\n\t" - "MOV r0, %0 \n\t" - "BX lr \n\t" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) ); -void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0\n\t" - "BX lr \n\t" : : "r" (topOfMainStack) ); -} - - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -uint32_t __get_PRIMASK(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) ); -} - -/** - * @brief Return the Control Register value -* -* @return Control value - * - * Return the content of the control register - */ -uint32_t __get_CONTROL(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) ); -} - - -/** - * @brief Reverse byte order in integer value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in integer value - */ -uint32_t __REV(uint32_t value) -{ - uint32_t result=0; - - __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -uint32_t __REV16(uint16_t value) -{ - uint32_t result=0; - - __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -int32_t __REVSH(int16_t value) -{ - uint32_t result=0; - - __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - - -#elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/ -/* TASKING carm specific functions */ - -/* - * The CMSIS functions have been implemented as intrinsics in the compiler. - * Please use "carm -?i" to get an up to date list of all instrinsics, - * Including the CMSIS ones. - */ - -#endif diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm0.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm0.h deleted file mode 100644 index e7c37de..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm0.h +++ /dev/null @@ -1,991 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * Parts of this files have been modified in ChibiOS/RT in order to fix - * some code quality issues. - */ - -/**************************************************************************//** - * @file core_cm0.h - * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File - * @version V1.30 - * @date 30. October 2009 - * - * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - -#ifndef __CM0_CORE_H__ -#define __CM0_CORE_H__ - -/** @addtogroup CMSIS_CM0_core_LintCinfiguration CMSIS CM0 Core Lint Configuration - * - * List of Lint messages which will be suppressed and not shown: - * - not yet checked - * . - * Note: To re-enable a Message, insert a space before 'lint' * - * - */ - - -/** @addtogroup CMSIS_CM0_core_definitions CM0 Core Definitions - This file defines all structures and symbols for CMSIS core: - - CMSIS version number - - Cortex-M core registers and bitfields - - Cortex-M core peripheral base address - @{ - */ - -#ifdef __cplusplus - extern "C" { -#endif - -#define __CM0_CMSIS_VERSION_MAIN (0x01) /*!< [31:16] CMSIS HAL main version */ -#define __CM0_CMSIS_VERSION_SUB (0x30) /*!< [15:0] CMSIS HAL sub version */ -#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16) | __CM0_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */ - -#define __CORTEX_M (0x00) /*!< Cortex core */ - -#include /* Include standard types */ - -#if defined (__ICCARM__) - #include /* IAR Intrinsics */ -#endif - - -#ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 2 /*!< standard definition for NVIC Priority Bits */ -#endif - - - - -/** - * IO definitions - * - * define access restrictions to peripheral registers - */ - -#ifdef __cplusplus - #define __I volatile /*!< defines 'read only' permissions */ -#else - #define __I volatile const /*!< defines 'read only' permissions */ -#endif -#define __O volatile /*!< defines 'write only' permissions */ -#define __IO volatile /*!< defines 'read / write' permissions */ - - - -/******************************************************************************* - * Register Abstraction - ******************************************************************************/ -/** @addtogroup CMSIS_CM0_core_register CMSIS CM0 Core Register - @{ -*/ - - -/** @addtogroup CMSIS_CM0_NVIC CMSIS CM0 NVIC - memory mapped structure for Nested Vectored Interrupt Controller (NVIC) - @{ - */ -typedef struct -{ - __IO uint32_t ISER[1]; /*!< (Offset: 0x000) Interrupt Set Enable Register */ - uint32_t RESERVED0[31]; - __IO uint32_t ICER[1]; /*!< (Offset: 0x080) Interrupt Clear Enable Register */ - uint32_t RSERVED1[31]; - __IO uint32_t ISPR[1]; /*!< (Offset: 0x100) Interrupt Set Pending Register */ - uint32_t RESERVED2[31]; - __IO uint32_t ICPR[1]; /*!< (Offset: 0x180) Interrupt Clear Pending Register */ - uint32_t RESERVED3[31]; - uint32_t RESERVED4[64]; - __IO uint32_t IPR[8]; /*!< (Offset: 0x3EC) Interrupt Priority Register */ -} NVIC_Type; -/*@}*/ /* end of group CMSIS_CM0_NVIC */ - - -/** @addtogroup CMSIS_CM0_SCB CMSIS CM0 SCB - memory mapped structure for System Control Block (SCB) - @{ - */ -typedef struct -{ - __I uint32_t CPUID; /*!< Offset: 0x00 CPU ID Base Register */ - __IO uint32_t ICSR; /*!< Offset: 0x04 Interrupt Control State Register */ - uint32_t RESERVED0; - __IO uint32_t AIRCR; /*!< Offset: 0x0C Application Interrupt / Reset Control Register */ - __IO uint32_t SCR; /*!< Offset: 0x10 System Control Register */ - __IO uint32_t CCR; /*!< Offset: 0x14 Configuration Control Register */ - uint32_t RESERVED1; - __IO uint32_t SHP[2]; /*!< Offset: 0x1C System Handlers Priority Registers. [0] is RESERVED */ - __IO uint32_t SHCSR; /*!< Offset: 0x24 System Handler Control and State Register */ - uint32_t RESERVED2[2]; - __IO uint32_t DFSR; /*!< Offset: 0x30 Debug Fault Status Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFul << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFul << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFul << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFul << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFul << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1ul << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1ul << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1ul << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1ul << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1ul << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1ul << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1ul << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFul << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFul << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFul << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFul << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1ul << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1ul << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1ul << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1ul << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1ul << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1ul << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1ul << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1ul << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1ul << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1ul << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1ul << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1ul << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1ul << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1ul << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ -/*@}*/ /* end of group CMSIS_CM0_SCB */ - - -/** @addtogroup CMSIS_CM0_SysTick CMSIS CM0 SysTick - memory mapped structure for SysTick - @{ - */ -typedef struct -{ - __IO uint32_t CTRL; /*!< Offset: 0x00 SysTick Control and Status Register */ - __IO uint32_t LOAD; /*!< Offset: 0x04 SysTick Reload Value Register */ - __IO uint32_t VAL; /*!< Offset: 0x08 SysTick Current Value Register */ - __I uint32_t CALIB; /*!< Offset: 0x0C SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1ul << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1ul << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1ul << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1ul << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFul << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1ul << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1ul << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFul << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ -/*@}*/ /* end of group CMSIS_CM0_SysTick */ - - -/** @addtogroup CMSIS_CM0_CoreDebug CMSIS CM0 Core Debug - memory mapped structure for Core Debug Register - @{ - */ -typedef struct -{ - __IO uint32_t DHCSR; /*!< Offset: 0x00 Debug Halting Control and Status Register */ - __O uint32_t DCRSR; /*!< Offset: 0x04 Debug Core Register Selector Register */ - __IO uint32_t DCRDR; /*!< Offset: 0x08 Debug Core Register Data Register */ - __IO uint32_t DEMCR; /*!< Offset: 0x0C Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFul << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1ul << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1ul << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1ul << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1ul << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1ul << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1ul << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1ul << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1ul << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1ul << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1ul << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register */ -#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1ul << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1Ful << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register */ -#define CoreDebug_DEMCR_DWTENA_Pos 24 /*!< CoreDebug DEMCR: DWTENA Position */ -#define CoreDebug_DEMCR_DWTENA_Msk (1ul << CoreDebug_DEMCR_DWTENA_Pos) /*!< CoreDebug DEMCR: DWTENA Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1ul << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1ul << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ -/*@}*/ /* end of group CMSIS_CM0_CoreDebug */ - - -/* Memory mapping of Cortex-M0 Hardware */ -#define SCS_BASE (0xE000E000) /*!< System Control Space Base Address */ -#define CoreDebug_BASE (0xE000EDF0) /*!< Core Debug Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00) /*!< System Control Block Base Address */ - -#define SCB ((SCB_Type *) SCB_BASE) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE) /*!< NVIC configuration struct */ -#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ - -/*@}*/ /* end of group CMSIS_CM0_core_register */ - - -/******************************************************************************* - * Hardware Abstraction Layer - ******************************************************************************/ - -#if defined ( __CC_ARM ) - #define __ASM __asm /*!< asm keyword for ARM Compiler */ - #define __INLINE __inline /*!< inline keyword for ARM Compiler */ - -#elif defined ( __ICCARM__ ) - #define __ASM __asm /*!< asm keyword for IAR Compiler */ - #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ - -#elif defined ( __GNUC__ ) - #define __ASM __asm /*!< asm keyword for GNU Compiler */ - #define __INLINE inline /*!< inline keyword for GNU Compiler */ - -#elif defined ( __TASKING__ ) - #define __ASM __asm /*!< asm keyword for TASKING Compiler */ - #define __INLINE inline /*!< inline keyword for TASKING Compiler */ - -#endif - - -/* ################### Compiler specific Intrinsics ########################### */ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -#define __enable_fault_irq __enable_fiq -#define __disable_fault_irq __disable_fiq - -#define __NOP __nop -#define __WFI __wfi -#define __WFE __wfe -#define __SEV __sev -#define __ISB() __isb(0) -#define __DSB() __dsb(0) -#define __DMB() __dmb(0) -#define __REV __rev - - -/* intrinsic void __enable_irq(); */ -/* intrinsic void __disable_irq(); */ - - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -extern uint32_t __get_PSP(void); - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -extern void __set_PSP(uint32_t topOfProcStack); - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -extern uint32_t __get_MSP(void); - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -extern void __set_MSP(uint32_t topOfMainStack); - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -extern uint32_t __REV16(uint16_t value); - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -extern int32_t __REVSH(int16_t value); - - -#if (__ARMCC_VERSION < 400000) - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -extern uint32_t __get_PRIMASK(void); - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -extern void __set_PRIMASK(uint32_t priMask); - -/** - * @brief Return the Control Register value - * - * @return Control value - * - * Return the content of the control register - */ -extern uint32_t __get_CONTROL(void); - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -extern void __set_CONTROL(uint32_t control); - -#else /* (__ARMCC_VERSION >= 400000) */ - - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -static __INLINE uint32_t __get_PRIMASK(void) -{ - register uint32_t __regPriMask __ASM("primask"); - return(__regPriMask); -} - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -static __INLINE void __set_PRIMASK(uint32_t priMask) -{ - register uint32_t __regPriMask __ASM("primask"); - __regPriMask = (priMask); -} - -/** - * @brief Return the Control Register value - * - * @return Control value - * - * Return the content of the control register - */ -static __INLINE uint32_t __get_CONTROL(void) -{ - register uint32_t __regControl __ASM("control"); - return(__regControl); -} - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -static __INLINE void __set_CONTROL(uint32_t control) -{ - register uint32_t __regControl __ASM("control"); - __regControl = control; -} - -#endif /* __ARMCC_VERSION */ - - - -#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ - -#define __enable_irq __enable_interrupt /*!< global Interrupt enable */ -#define __disable_irq __disable_interrupt /*!< global Interrupt disable */ - -static __INLINE void __enable_fault_irq() { __ASM ("cpsie f"); } -static __INLINE void __disable_fault_irq() { __ASM ("cpsid f"); } - -#define __NOP __no_operation /*!< no operation intrinsic in IAR Compiler */ -static __INLINE void __WFI() { __ASM ("wfi"); } -static __INLINE void __WFE() { __ASM ("wfe"); } -static __INLINE void __SEV() { __ASM ("sev"); } - -/* intrinsic void __ISB(void) */ -/* intrinsic void __DSB(void) */ -/* intrinsic void __DMB(void) */ -/* intrinsic void __set_PRIMASK(); */ -/* intrinsic void __get_PRIMASK(); */ - - -/* intrinsic uint32_t __REV(uint32_t value); */ -/* intrinsic uint32_t __REVSH(uint32_t value); */ - - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -extern uint32_t __get_PSP(void); - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -extern void __set_PSP(uint32_t topOfProcStack); - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -extern uint32_t __get_MSP(void); - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -extern void __set_MSP(uint32_t topOfMainStack); - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -extern uint32_t __REV16(uint16_t value); - - - - - -#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -static __INLINE void __enable_irq(void) { __ASM volatile ("cpsie i"); } -static __INLINE void __disable_irq(void) { __ASM volatile ("cpsid i"); } - -static __INLINE void __enable_fault_irq(void) { __ASM volatile ("cpsie f"); } -static __INLINE void __disable_fault_irq(void) { __ASM volatile ("cpsid f"); } - -static __INLINE void __NOP(void) { __ASM volatile ("nop"); } -static __INLINE void __WFI(void) { __ASM volatile ("wfi"); } -static __INLINE void __WFE(void) { __ASM volatile ("wfe"); } -static __INLINE void __SEV(void) { __ASM volatile ("sev"); } -static __INLINE void __ISB(void) { __ASM volatile ("isb"); } -static __INLINE void __DSB(void) { __ASM volatile ("dsb"); } -static __INLINE void __DMB(void) { __ASM volatile ("dmb"); } - - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -extern uint32_t __get_PSP(void); - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -extern void __set_PSP(uint32_t topOfProcStack); - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -extern uint32_t __get_MSP(void); - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -extern void __set_MSP(uint32_t topOfMainStack); - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -extern uint32_t __get_PRIMASK(void); - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -extern void __set_PRIMASK(uint32_t priMask); - -/** - * @brief Return the Control Register value -* -* @return Control value - * - * Return the content of the control register - */ -extern uint32_t __get_CONTROL(void); - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -extern void __set_CONTROL(uint32_t control); - -/** - * @brief Reverse byte order in integer value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in integer value - */ -extern uint32_t __REV(uint32_t value); - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -extern uint32_t __REV16(uint16_t value); - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -extern int32_t __REVSH(int16_t value); - - -#elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/ -/* TASKING carm specific functions */ - -/* - * The CMSIS functions have been implemented as intrinsics in the compiler. - * Please use "carm -?i" to get an up to date list of all instrinsics, - * Including the CMSIS ones. - */ - -#endif - - -/** @addtogroup CMSIS_CM0_Core_FunctionInterface CMSIS CM0 Core Function Interface - Core Function Interface containing: - - Core NVIC Functions - - Core SysTick Functions - - Core Reset Functions -*/ -/*@{*/ - -/* ########################## NVIC functions #################################### */ - -/* Interrupt Priorities are WORD accessible only under ARMv6M */ -/* The following MACROS handle generation of the register offset and byte masks */ -#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 ) -#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) ) -#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) ) - - -/** - * @brief Enable Interrupt in NVIC Interrupt Controller - * - * @param IRQn The positive number of the external interrupt to enable - * - * Enable a device specific interupt in the NVIC interrupt controller. - * The interrupt number cannot be a negative value. - */ -static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) -{ - NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ -} - -/** - * @brief Disable the interrupt line for external interrupt specified - * - * @param IRQn The positive number of the external interrupt to disable - * - * Disable a device specific interupt in the NVIC interrupt controller. - * The interrupt number cannot be a negative value. - */ -static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) -{ - NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ -} - -/** - * @brief Read the interrupt pending bit for a device specific interrupt source - * - * @param IRQn The number of the device specifc interrupt - * @return 1 = interrupt pending, 0 = interrupt not pending - * - * Read the pending register in NVIC and return 1 if its status is pending, - * otherwise it returns 0 - */ -static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ -} - -/** - * @brief Set the pending bit for an external interrupt - * - * @param IRQn The number of the interrupt for set pending - * - * Set the pending bit for the specified interrupt. - * The interrupt number cannot be a negative value. - */ -static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ -} - -/** - * @brief Clear the pending bit for an external interrupt - * - * @param IRQn The number of the interrupt for clear pending - * - * Clear the pending bit for the specified interrupt. - * The interrupt number cannot be a negative value. - */ -static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ -} - -/** - * @brief Set the priority for an interrupt - * - * @param IRQn The number of the interrupt for set priority - * @param priority The priority to set - * - * Set the priority for the specified interrupt. The interrupt - * number can be positive to specify an external (device specific) - * interrupt, or negative to specify an internal (core) interrupt. - * - * Note: The priority cannot be set for every core interrupt. - */ -static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if(IRQn < 0) { - SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | - (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } - else { - NVIC->IPR[_IP_IDX(IRQn)] = (NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | - (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } -} - -/** - * @brief Read the priority for an interrupt - * - * @param IRQn The number of the interrupt for get priority - * @return The priority for the interrupt - * - * Read the priority for the specified interrupt. The interrupt - * number can be positive to specify an external (device specific) - * interrupt, or negative to specify an internal (core) interrupt. - * - * The returned priority value is automatically aligned to the implemented - * priority bits of the microcontroller. - * - * Note: The priority cannot be set for every core interrupt. - */ -static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) -{ - - if(IRQn < 0) { - return((uint32_t)((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */ - else { - return((uint32_t)((NVIC->IPR[_IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ -} - - - -/* ################################## SysTick function ############################################ */ - -#if (!defined (__Vendor_SysTickConfig)) || (__Vendor_SysTickConfig == 0) - -/** - * @brief Initialize and start the SysTick counter and its interrupt. - * - * @param ticks number of ticks between two interrupts - * @return 1 = failed, 0 = successful - * - * Initialise the system tick timer and its interrupt and start the - * system tick timer / counter in free running mode to generate - * periodical interrupts. - */ -static __INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ - - SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ - SysTick->VAL = 0; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0); /* Function successful */ -} - -#endif - - - - -/* ################################## Reset function ############################################ */ - -/** - * @brief Initiate a system reset request. - * - * Initiate a system reset request to reset the MCU - */ -static __INLINE void NVIC_SystemReset(void) -{ - SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | - SCB_AIRCR_SYSRESETREQ_Msk); - __DSB(); /* Ensure completion of memory access */ - while(1); /* wait until reset */ -} - -/*@}*/ /* end of group CMSIS_CM0_Core_FunctionInterface */ - -#ifdef __cplusplus -} -#endif - -/*@}*/ /* end of group CMSIS_CM0_core_definitions */ - -#endif /* __CM0_CORE_H__ */ - -/*lint -restore */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm3.c b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm3.c deleted file mode 100644 index fcff0d1..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm3.c +++ /dev/null @@ -1,784 +0,0 @@ -/**************************************************************************//** - * @file core_cm3.c - * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Source File - * @version V1.30 - * @date 30. October 2009 - * - * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - -#include - -/* define compiler specific symbols */ -#if defined ( __CC_ARM ) - #define __ASM __asm /*!< asm keyword for ARM Compiler */ - #define __INLINE __inline /*!< inline keyword for ARM Compiler */ - -#elif defined ( __ICCARM__ ) - #define __ASM __asm /*!< asm keyword for IAR Compiler */ - #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ - -#elif defined ( __GNUC__ ) - #define __ASM __asm /*!< asm keyword for GNU Compiler */ - #define __INLINE inline /*!< inline keyword for GNU Compiler */ - -#elif defined ( __TASKING__ ) - #define __ASM __asm /*!< asm keyword for TASKING Compiler */ - #define __INLINE inline /*!< inline keyword for TASKING Compiler */ - -#endif - - -/* ################### Compiler specific Intrinsics ########################### */ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -__ASM uint32_t __get_PSP(void) -{ - mrs r0, psp - bx lr -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -__ASM void __set_PSP(uint32_t topOfProcStack) -{ - msr psp, r0 - bx lr -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -__ASM uint32_t __get_MSP(void) -{ - mrs r0, msp - bx lr -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -__ASM void __set_MSP(uint32_t mainStackPointer) -{ - msr msp, r0 - bx lr -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -__ASM uint32_t __REV16(uint16_t value) -{ - rev16 r0, r0 - bx lr -} - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -__ASM int32_t __REVSH(int16_t value) -{ - revsh r0, r0 - bx lr -} - - -#if (__ARMCC_VERSION < 400000) - -/** - * @brief Remove the exclusive lock created by ldrex - * - * Removes the exclusive lock which is created by ldrex. - */ -__ASM void __CLREX(void) -{ - clrex -} - -/** - * @brief Return the Base Priority value - * - * @return BasePriority - * - * Return the content of the base priority register - */ -__ASM uint32_t __get_BASEPRI(void) -{ - mrs r0, basepri - bx lr -} - -/** - * @brief Set the Base Priority value - * - * @param basePri BasePriority - * - * Set the base priority register - */ -__ASM void __set_BASEPRI(uint32_t basePri) -{ - msr basepri, r0 - bx lr -} - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -__ASM uint32_t __get_PRIMASK(void) -{ - mrs r0, primask - bx lr -} - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -__ASM void __set_PRIMASK(uint32_t priMask) -{ - msr primask, r0 - bx lr -} - -/** - * @brief Return the Fault Mask value - * - * @return FaultMask - * - * Return the content of the fault mask register - */ -__ASM uint32_t __get_FAULTMASK(void) -{ - mrs r0, faultmask - bx lr -} - -/** - * @brief Set the Fault Mask value - * - * @param faultMask faultMask value - * - * Set the fault mask register - */ -__ASM void __set_FAULTMASK(uint32_t faultMask) -{ - msr faultmask, r0 - bx lr -} - -/** - * @brief Return the Control Register value - * - * @return Control value - * - * Return the content of the control register - */ -__ASM uint32_t __get_CONTROL(void) -{ - mrs r0, control - bx lr -} - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -__ASM void __set_CONTROL(uint32_t control) -{ - msr control, r0 - bx lr -} - -#endif /* __ARMCC_VERSION */ - - - -#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ -#pragma diag_suppress=Pe940 - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -uint32_t __get_PSP(void) -{ - __ASM("mrs r0, psp"); - __ASM("bx lr"); -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -void __set_PSP(uint32_t topOfProcStack) -{ - __ASM("msr psp, r0"); - __ASM("bx lr"); -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -uint32_t __get_MSP(void) -{ - __ASM("mrs r0, msp"); - __ASM("bx lr"); -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -void __set_MSP(uint32_t topOfMainStack) -{ - __ASM("msr msp, r0"); - __ASM("bx lr"); -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -uint32_t __REV16(uint16_t value) -{ - __ASM("rev16 r0, r0"); - __ASM("bx lr"); -} - -/** - * @brief Reverse bit order of value - * - * @param value value to reverse - * @return reversed value - * - * Reverse bit order of value - */ -uint32_t __RBIT(uint32_t value) -{ - __ASM("rbit r0, r0"); - __ASM("bx lr"); -} - -/** - * @brief LDR Exclusive (8 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 8 bit values) - */ -uint8_t __LDREXB(uint8_t *addr) -{ - __ASM("ldrexb r0, [r0]"); - __ASM("bx lr"); -} - -/** - * @brief LDR Exclusive (16 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 16 bit values - */ -uint16_t __LDREXH(uint16_t *addr) -{ - __ASM("ldrexh r0, [r0]"); - __ASM("bx lr"); -} - -/** - * @brief LDR Exclusive (32 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 32 bit values - */ -uint32_t __LDREXW(uint32_t *addr) -{ - __ASM("ldrex r0, [r0]"); - __ASM("bx lr"); -} - -/** - * @brief STR Exclusive (8 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 8 bit values - */ -uint32_t __STREXB(uint8_t value, uint8_t *addr) -{ - __ASM("strexb r0, r0, [r1]"); - __ASM("bx lr"); -} - -/** - * @brief STR Exclusive (16 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 16 bit values - */ -uint32_t __STREXH(uint16_t value, uint16_t *addr) -{ - __ASM("strexh r0, r0, [r1]"); - __ASM("bx lr"); -} - -/** - * @brief STR Exclusive (32 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 32 bit values - */ -uint32_t __STREXW(uint32_t value, uint32_t *addr) -{ - __ASM("strex r0, r0, [r1]"); - __ASM("bx lr"); -} - -#pragma diag_default=Pe940 - - -#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -uint32_t __get_PSP(void) __attribute__( ( naked ) ); -uint32_t __get_PSP(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, psp\n\t" - "MOV r0, %0 \n\t" - "BX lr \n\t" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) ); -void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0\n\t" - "BX lr \n\t" : : "r" (topOfProcStack) ); -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -uint32_t __get_MSP(void) __attribute__( ( naked ) ); -uint32_t __get_MSP(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, msp\n\t" - "MOV r0, %0 \n\t" - "BX lr \n\t" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) ); -void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0\n\t" - "BX lr \n\t" : : "r" (topOfMainStack) ); -} - -/** - * @brief Return the Base Priority value - * - * @return BasePriority - * - * Return the content of the base priority register - */ -uint32_t __get_BASEPRI(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Base Priority value - * - * @param basePri BasePriority - * - * Set the base priority register - */ -void __set_BASEPRI(uint32_t value) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (value) ); -} - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -uint32_t __get_PRIMASK(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) ); -} - -/** - * @brief Return the Fault Mask value - * - * @return FaultMask - * - * Return the content of the fault mask register - */ -uint32_t __get_FAULTMASK(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Fault Mask value - * - * @param faultMask faultMask value - * - * Set the fault mask register - */ -void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) ); -} - -/** - * @brief Return the Control Register value -* -* @return Control value - * - * Return the content of the control register - */ -uint32_t __get_CONTROL(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) ); -} - - -/** - * @brief Reverse byte order in integer value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in integer value - */ -uint32_t __REV(uint32_t value) -{ - uint32_t result=0; - - __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -uint32_t __REV16(uint16_t value) -{ - uint32_t result=0; - - __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -int32_t __REVSH(int16_t value) -{ - uint32_t result=0; - - __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse bit order of value - * - * @param value value to reverse - * @return reversed value - * - * Reverse bit order of value - */ -uint32_t __RBIT(uint32_t value) -{ - uint32_t result=0; - - __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief LDR Exclusive (8 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 8 bit value - */ -uint8_t __LDREXB(uint8_t *addr) -{ - uint8_t result=0; - - __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - -/** - * @brief LDR Exclusive (16 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 16 bit values - */ -uint16_t __LDREXH(uint16_t *addr) -{ - uint16_t result=0; - - __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - -/** - * @brief LDR Exclusive (32 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 32 bit values - */ -uint32_t __LDREXW(uint32_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - -/** - * @brief STR Exclusive (8 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 8 bit values - */ -uint32_t __STREXB(uint8_t value, uint8_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); - return(result); -} - -/** - * @brief STR Exclusive (16 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 16 bit values - */ -uint32_t __STREXH(uint16_t value, uint16_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); - return(result); -} - -/** - * @brief STR Exclusive (32 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 32 bit values - */ -uint32_t __STREXW(uint32_t value, uint32_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("strex %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); - return(result); -} - - -#elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/ -/* TASKING carm specific functions */ - -/* - * The CMSIS functions have been implemented as intrinsics in the compiler. - * Please use "carm -?i" to get an up to date list of all instrinsics, - * Including the CMSIS ones. - */ - -#endif diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm3.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm3.h deleted file mode 100644 index f227545..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/cmsis/core_cm3.h +++ /dev/null @@ -1,1849 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * Parts of this files have been modified in ChibiOS/RT in order to fix - * some code quality issues. - */ - -/**************************************************************************//** - * @file core_cm3.h - * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V1.30 - * @date 30. October 2009 - * - * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - -#ifndef __CM3_CORE_H__ -#define __CM3_CORE_H__ - -/** @addtogroup CMSIS_CM3_core_LintCinfiguration CMSIS CM3 Core Lint Configuration - * - * List of Lint messages which will be suppressed and not shown: - * - Error 10: \n - * register uint32_t __regBasePri __asm("basepri"); \n - * Error 10: Expecting ';' - * . - * - Error 530: \n - * return(__regBasePri); \n - * Warning 530: Symbol '__regBasePri' (line 264) not initialized - * . - * - Error 550: \n - * __regBasePri = (basePri & 0x1ff); \n - * Warning 550: Symbol '__regBasePri' (line 271) not accessed - * . - * - Error 754: \n - * uint32_t RESERVED0[24]; \n - * Info 754: local structure member '' (line 109, file ./cm3_core.h) not referenced - * . - * - Error 750: \n - * #define __CM3_CORE_H__ \n - * Info 750: local macro '__CM3_CORE_H__' (line 43, file./cm3_core.h) not referenced - * . - * - Error 528: \n - * static __INLINE void NVIC_DisableIRQ(uint32_t IRQn) \n - * Warning 528: Symbol 'NVIC_DisableIRQ(unsigned int)' (line 419, file ./cm3_core.h) not referenced - * . - * - Error 751: \n - * } InterruptType_Type; \n - * Info 751: local typedef 'InterruptType_Type' (line 170, file ./cm3_core.h) not referenced - * . - * Note: To re-enable a Message, insert a space before 'lint' * - * - */ - -/*lint -save */ -/*lint -e10 */ -/*lint -e530 */ -/*lint -e550 */ -/*lint -e754 */ -/*lint -e750 */ -/*lint -e528 */ -/*lint -e751 */ - - -/** @addtogroup CMSIS_CM3_core_definitions CM3 Core Definitions - This file defines all structures and symbols for CMSIS core: - - CMSIS version number - - Cortex-M core registers and bitfields - - Cortex-M core peripheral base address - @{ - */ - -#ifdef __cplusplus - extern "C" { -#endif - -#define __CM3_CMSIS_VERSION_MAIN (0x01) /*!< [31:16] CMSIS HAL main version */ -#define __CM3_CMSIS_VERSION_SUB (0x30) /*!< [15:0] CMSIS HAL sub version */ -#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | __CM3_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */ - -#define __CORTEX_M (0x03) /*!< Cortex core */ - -#include /* Include standard types */ - -#if defined (__ICCARM__) - #include /* IAR Intrinsics */ -#endif - - -#ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 4 /*!< standard definition for NVIC Priority Bits */ -#endif - - - - -/** - * IO definitions - * - * define access restrictions to peripheral registers - */ - -#ifdef __cplusplus - #define __I volatile /*!< defines 'read only' permissions */ -#else - #define __I volatile const /*!< defines 'read only' permissions */ -#endif -#define __O volatile /*!< defines 'write only' permissions */ -#define __IO volatile /*!< defines 'read / write' permissions */ - - - -/******************************************************************************* - * Register Abstraction - ******************************************************************************/ -/** @addtogroup CMSIS_CM3_core_register CMSIS CM3 Core Register - @{ -*/ - - -/** @addtogroup CMSIS_CM3_NVIC CMSIS CM3 NVIC - memory mapped structure for Nested Vectored Interrupt Controller (NVIC) - @{ - */ -typedef struct -{ - __IO uint32_t ISER[8]; /*!< Offset: 0x000 Interrupt Set Enable Register */ - uint32_t RESERVED0[24]; - __IO uint32_t ICER[8]; /*!< Offset: 0x080 Interrupt Clear Enable Register */ - uint32_t RSERVED1[24]; - __IO uint32_t ISPR[8]; /*!< Offset: 0x100 Interrupt Set Pending Register */ - uint32_t RESERVED2[24]; - __IO uint32_t ICPR[8]; /*!< Offset: 0x180 Interrupt Clear Pending Register */ - uint32_t RESERVED3[24]; - __IO uint32_t IABR[8]; /*!< Offset: 0x200 Interrupt Active bit Register */ - uint32_t RESERVED4[56]; - __IO uint8_t IP[240]; /*!< Offset: 0x300 Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED5[644]; - __O uint32_t STIR; /*!< Offset: 0xE00 Software Trigger Interrupt Register */ -} NVIC_Type; -/*@}*/ /* end of group CMSIS_CM3_NVIC */ - - -/** @addtogroup CMSIS_CM3_SCB CMSIS CM3 SCB - memory mapped structure for System Control Block (SCB) - @{ - */ -typedef struct -{ - __I uint32_t CPUID; /*!< Offset: 0x00 CPU ID Base Register */ - __IO uint32_t ICSR; /*!< Offset: 0x04 Interrupt Control State Register */ - __IO uint32_t VTOR; /*!< Offset: 0x08 Vector Table Offset Register */ - __IO uint32_t AIRCR; /*!< Offset: 0x0C Application Interrupt / Reset Control Register */ - __IO uint32_t SCR; /*!< Offset: 0x10 System Control Register */ - __IO uint32_t CCR; /*!< Offset: 0x14 Configuration Control Register */ - __IO uint8_t SHP[12]; /*!< Offset: 0x18 System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IO uint32_t SHCSR; /*!< Offset: 0x24 System Handler Control and State Register */ - __IO uint32_t CFSR; /*!< Offset: 0x28 Configurable Fault Status Register */ - __IO uint32_t HFSR; /*!< Offset: 0x2C Hard Fault Status Register */ - __IO uint32_t DFSR; /*!< Offset: 0x30 Debug Fault Status Register */ - __IO uint32_t MMFAR; /*!< Offset: 0x34 Mem Manage Address Register */ - __IO uint32_t BFAR; /*!< Offset: 0x38 Bus Fault Address Register */ - __IO uint32_t AFSR; /*!< Offset: 0x3C Auxiliary Fault Status Register */ - __I uint32_t PFR[2]; /*!< Offset: 0x40 Processor Feature Register */ - __I uint32_t DFR; /*!< Offset: 0x48 Debug Feature Register */ - __I uint32_t ADR; /*!< Offset: 0x4C Auxiliary Feature Register */ - __I uint32_t MMFR[4]; /*!< Offset: 0x50 Memory Model Feature Register */ - __I uint32_t ISAR[5]; /*!< Offset: 0x60 ISA Feature Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFul << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFul << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFul << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFul << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1ul << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1ul << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1ul << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1ul << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1ul << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1ul << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1ul << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFul << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1ul << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFul << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ -#define SCB_VTOR_TBLBASE_Msk (0x1FFul << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ - -#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFul << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFul << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFul << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1ul << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7ul << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1ul << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1ul << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ -#define SCB_AIRCR_VECTRESET_Msk (1ul << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1ul << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1ul << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1ul << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1ul << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1ul << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1ul << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1ul << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1ul << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ -#define SCB_CCR_NONBASETHRDENA_Msk (1ul << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1ul << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1ul << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1ul << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1ul << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1ul << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1ul << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1ul << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1ul << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1ul << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1ul << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1ul << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1ul << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1ul << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1ul << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Registers Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFul << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFul << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFul << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* SCB Hard Fault Status Registers Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1ul << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1ul << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1ul << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1ul << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1ul << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1ul << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1ul << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1ul << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ -/*@}*/ /* end of group CMSIS_CM3_SCB */ - - -/** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick - memory mapped structure for SysTick - @{ - */ -typedef struct -{ - __IO uint32_t CTRL; /*!< Offset: 0x00 SysTick Control and Status Register */ - __IO uint32_t LOAD; /*!< Offset: 0x04 SysTick Reload Value Register */ - __IO uint32_t VAL; /*!< Offset: 0x08 SysTick Current Value Register */ - __I uint32_t CALIB; /*!< Offset: 0x0C SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1ul << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1ul << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1ul << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1ul << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFul << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1ul << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1ul << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFul << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ -/*@}*/ /* end of group CMSIS_CM3_SysTick */ - - -/** @addtogroup CMSIS_CM3_ITM CMSIS CM3 ITM - memory mapped structure for Instrumentation Trace Macrocell (ITM) - @{ - */ -typedef struct -{ - __O union - { - __O uint8_t u8; /*!< Offset: ITM Stimulus Port 8-bit */ - __O uint16_t u16; /*!< Offset: ITM Stimulus Port 16-bit */ - __O uint32_t u32; /*!< Offset: ITM Stimulus Port 32-bit */ - } PORT [32]; /*!< Offset: 0x00 ITM Stimulus Port Registers */ - uint32_t RESERVED0[864]; - __IO uint32_t TER; /*!< Offset: ITM Trace Enable Register */ - uint32_t RESERVED1[15]; - __IO uint32_t TPR; /*!< Offset: ITM Trace Privilege Register */ - uint32_t RESERVED2[15]; - __IO uint32_t TCR; /*!< Offset: ITM Trace Control Register */ - uint32_t RESERVED3[29]; - __IO uint32_t IWR; /*!< Offset: ITM Integration Write Register */ - __IO uint32_t IRR; /*!< Offset: ITM Integration Read Register */ - __IO uint32_t IMCR; /*!< Offset: ITM Integration Mode Control Register */ - uint32_t RESERVED4[43]; - __IO uint32_t LAR; /*!< Offset: ITM Lock Access Register */ - __IO uint32_t LSR; /*!< Offset: ITM Lock Status Register */ - uint32_t RESERVED5[6]; - __I uint32_t PID4; /*!< Offset: ITM Peripheral Identification Register #4 */ - __I uint32_t PID5; /*!< Offset: ITM Peripheral Identification Register #5 */ - __I uint32_t PID6; /*!< Offset: ITM Peripheral Identification Register #6 */ - __I uint32_t PID7; /*!< Offset: ITM Peripheral Identification Register #7 */ - __I uint32_t PID0; /*!< Offset: ITM Peripheral Identification Register #0 */ - __I uint32_t PID1; /*!< Offset: ITM Peripheral Identification Register #1 */ - __I uint32_t PID2; /*!< Offset: ITM Peripheral Identification Register #2 */ - __I uint32_t PID3; /*!< Offset: ITM Peripheral Identification Register #3 */ - __I uint32_t CID0; /*!< Offset: ITM Component Identification Register #0 */ - __I uint32_t CID1; /*!< Offset: ITM Component Identification Register #1 */ - __I uint32_t CID2; /*!< Offset: ITM Component Identification Register #2 */ - __I uint32_t CID3; /*!< Offset: ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFul << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1ul << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_ATBID_Pos 16 /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_ATBID_Msk (0x7Ful << ITM_TCR_ATBID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ -#define ITM_TCR_TSPrescale_Msk (3ul << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ - -#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1ul << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1ul << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1ul << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1ul << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1ul << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Integration Write Register Definitions */ -#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ -#define ITM_IWR_ATVALIDM_Msk (1ul << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ - -/* ITM Integration Read Register Definitions */ -#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ -#define ITM_IRR_ATREADYM_Msk (1ul << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ - -/* ITM Integration Mode Control Register Definitions */ -#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ -#define ITM_IMCR_INTEGRATION_Msk (1ul << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1ul << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1ul << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1ul << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ -/*@}*/ /* end of group CMSIS_CM3_ITM */ - - -/** @addtogroup CMSIS_CM3_InterruptType CMSIS CM3 Interrupt Type - memory mapped structure for Interrupt Type - @{ - */ -typedef struct -{ - uint32_t RESERVED0; - __I uint32_t ICTR; /*!< Offset: 0x04 Interrupt Control Type Register */ -#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) - __IO uint32_t ACTLR; /*!< Offset: 0x08 Auxiliary Control Register */ -#else - uint32_t RESERVED1; -#endif -} InterruptType_Type; - -/* Interrupt Controller Type Register Definitions */ -#define InterruptType_ICTR_INTLINESNUM_Pos 0 /*!< InterruptType ICTR: INTLINESNUM Position */ -#define InterruptType_ICTR_INTLINESNUM_Msk (0x1Ful << InterruptType_ICTR_INTLINESNUM_Pos) /*!< InterruptType ICTR: INTLINESNUM Mask */ - -/* Auxiliary Control Register Definitions */ -#define InterruptType_ACTLR_DISFOLD_Pos 2 /*!< InterruptType ACTLR: DISFOLD Position */ -#define InterruptType_ACTLR_DISFOLD_Msk (1ul << InterruptType_ACTLR_DISFOLD_Pos) /*!< InterruptType ACTLR: DISFOLD Mask */ - -#define InterruptType_ACTLR_DISDEFWBUF_Pos 1 /*!< InterruptType ACTLR: DISDEFWBUF Position */ -#define InterruptType_ACTLR_DISDEFWBUF_Msk (1ul << InterruptType_ACTLR_DISDEFWBUF_Pos) /*!< InterruptType ACTLR: DISDEFWBUF Mask */ - -#define InterruptType_ACTLR_DISMCYCINT_Pos 0 /*!< InterruptType ACTLR: DISMCYCINT Position */ -#define InterruptType_ACTLR_DISMCYCINT_Msk (1ul << InterruptType_ACTLR_DISMCYCINT_Pos) /*!< InterruptType ACTLR: DISMCYCINT Mask */ -/*@}*/ /* end of group CMSIS_CM3_InterruptType */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) -/** @addtogroup CMSIS_CM3_MPU CMSIS CM3 MPU - memory mapped structure for Memory Protection Unit (MPU) - @{ - */ -typedef struct -{ - __I uint32_t TYPE; /*!< Offset: 0x00 MPU Type Register */ - __IO uint32_t CTRL; /*!< Offset: 0x04 MPU Control Register */ - __IO uint32_t RNR; /*!< Offset: 0x08 MPU Region RNRber Register */ - __IO uint32_t RBAR; /*!< Offset: 0x0C MPU Region Base Address Register */ - __IO uint32_t RASR; /*!< Offset: 0x10 MPU Region Attribute and Size Register */ - __IO uint32_t RBAR_A1; /*!< Offset: 0x14 MPU Alias 1 Region Base Address Register */ - __IO uint32_t RASR_A1; /*!< Offset: 0x18 MPU Alias 1 Region Attribute and Size Register */ - __IO uint32_t RBAR_A2; /*!< Offset: 0x1C MPU Alias 2 Region Base Address Register */ - __IO uint32_t RASR_A2; /*!< Offset: 0x20 MPU Alias 2 Region Attribute and Size Register */ - __IO uint32_t RBAR_A3; /*!< Offset: 0x24 MPU Alias 3 Region Base Address Register */ - __IO uint32_t RASR_A3; /*!< Offset: 0x28 MPU Alias 3 Region Attribute and Size Register */ -} MPU_Type; - -/* MPU Type Register */ -#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFul << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFul << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1ul << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register */ -#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1ul << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1ul << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1ul << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register */ -#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFul << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register */ -#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFul << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1ul << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFul << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register */ -#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: XN Position */ -#define MPU_RASR_XN_Msk (1ul << MPU_RASR_XN_Pos) /*!< MPU RASR: XN Mask */ - -#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: AP Position */ -#define MPU_RASR_AP_Msk (7ul << MPU_RASR_AP_Pos) /*!< MPU RASR: AP Mask */ - -#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: TEX Position */ -#define MPU_RASR_TEX_Msk (7ul << MPU_RASR_TEX_Pos) /*!< MPU RASR: TEX Mask */ - -#define MPU_RASR_S_Pos 18 /*!< MPU RASR: Shareable bit Position */ -#define MPU_RASR_S_Msk (1ul << MPU_RASR_S_Pos) /*!< MPU RASR: Shareable bit Mask */ - -#define MPU_RASR_C_Pos 17 /*!< MPU RASR: Cacheable bit Position */ -#define MPU_RASR_C_Msk (1ul << MPU_RASR_C_Pos) /*!< MPU RASR: Cacheable bit Mask */ - -#define MPU_RASR_B_Pos 16 /*!< MPU RASR: Bufferable bit Position */ -#define MPU_RASR_B_Msk (1ul << MPU_RASR_B_Pos) /*!< MPU RASR: Bufferable bit Mask */ - -#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ -#define MPU_RASR_SRD_Msk (0xFFul << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ - -#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ -#define MPU_RASR_SIZE_Msk (0x1Ful << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ - -#define MPU_RASR_ENA_Pos 0 /*!< MPU RASR: Region enable bit Position */ -#define MPU_RASR_ENA_Msk (0x1Ful << MPU_RASR_ENA_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ - -/*@}*/ /* end of group CMSIS_CM3_MPU */ -#endif - - -/** @addtogroup CMSIS_CM3_CoreDebug CMSIS CM3 Core Debug - memory mapped structure for Core Debug Register - @{ - */ -typedef struct -{ - __IO uint32_t DHCSR; /*!< Offset: 0x00 Debug Halting Control and Status Register */ - __O uint32_t DCRSR; /*!< Offset: 0x04 Debug Core Register Selector Register */ - __IO uint32_t DCRDR; /*!< Offset: 0x08 Debug Core Register Data Register */ - __IO uint32_t DEMCR; /*!< Offset: 0x0C Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFul << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1ul << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1ul << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1ul << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1ul << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1ul << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1ul << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1ul << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1ul << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1ul << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1ul << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1ul << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register */ -#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1ul << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1Ful << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register */ -#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1ul << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1ul << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1ul << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1ul << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1ul << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1ul << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1ul << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1ul << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1ul << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1ul << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1ul << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1ul << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1ul << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ -/*@}*/ /* end of group CMSIS_CM3_CoreDebug */ - - -/* Memory mapping of Cortex-M3 Hardware */ -#define SCS_BASE (0xE000E000) /*!< System Control Space Base Address */ -#define ITM_BASE (0xE0000000) /*!< ITM Base Address */ -#define CoreDebug_BASE (0xE000EDF0) /*!< Core Debug Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00) /*!< System Control Block Base Address */ - -#define InterruptType ((InterruptType_Type *) SCS_BASE) /*!< Interrupt Type Register */ -#define SCB ((SCB_Type *) SCB_BASE) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE) /*!< NVIC configuration struct */ -#define ITM ((ITM_Type *) ITM_BASE) /*!< ITM configuration struct */ -#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) - #define MPU_BASE (SCS_BASE + 0x0D90) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type*) MPU_BASE) /*!< Memory Protection Unit */ -#endif - -/*@}*/ /* end of group CMSIS_CM3_core_register */ - - -/******************************************************************************* - * Hardware Abstraction Layer - ******************************************************************************/ - -#if defined ( __CC_ARM ) - #define __ASM __asm /*!< asm keyword for ARM Compiler */ - #define __INLINE __inline /*!< inline keyword for ARM Compiler */ - -#elif defined ( __ICCARM__ ) - #define __ASM __asm /*!< asm keyword for IAR Compiler */ - #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ - -#elif defined ( __GNUC__ ) - #define __ASM __asm /*!< asm keyword for GNU Compiler */ - #define __INLINE inline /*!< inline keyword for GNU Compiler */ - -#elif defined ( __TASKING__ ) - #define __ASM __asm /*!< asm keyword for TASKING Compiler */ - #define __INLINE inline /*!< inline keyword for TASKING Compiler */ - -#endif - - -/* ################### Compiler specific Intrinsics ########################### */ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -#define __enable_fault_irq __enable_fiq -#define __disable_fault_irq __disable_fiq - -#define __NOP __nop -#define __WFI __wfi -#define __WFE __wfe -#define __SEV __sev -#define __ISB() __isb(0) -#define __DSB() __dsb(0) -#define __DMB() __dmb(0) -#define __REV __rev -#define __RBIT __rbit -#define __LDREXB(ptr) ((unsigned char ) __ldrex(ptr)) -#define __LDREXH(ptr) ((unsigned short) __ldrex(ptr)) -#define __LDREXW(ptr) ((unsigned int ) __ldrex(ptr)) -#define __STREXB(value, ptr) __strex(value, ptr) -#define __STREXH(value, ptr) __strex(value, ptr) -#define __STREXW(value, ptr) __strex(value, ptr) - - -/* intrinsic unsigned long long __ldrexd(volatile void *ptr) */ -/* intrinsic int __strexd(unsigned long long val, volatile void *ptr) */ -/* intrinsic void __enable_irq(); */ -/* intrinsic void __disable_irq(); */ - - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -extern uint32_t __get_PSP(void); - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -extern void __set_PSP(uint32_t topOfProcStack); - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -extern uint32_t __get_MSP(void); - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -extern void __set_MSP(uint32_t topOfMainStack); - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -extern uint32_t __REV16(uint16_t value); - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -extern int32_t __REVSH(int16_t value); - - -#if (__ARMCC_VERSION < 400000) - -/** - * @brief Remove the exclusive lock created by ldrex - * - * Removes the exclusive lock which is created by ldrex. - */ -extern void __CLREX(void); - -/** - * @brief Return the Base Priority value - * - * @return BasePriority - * - * Return the content of the base priority register - */ -extern uint32_t __get_BASEPRI(void); - -/** - * @brief Set the Base Priority value - * - * @param basePri BasePriority - * - * Set the base priority register - */ -extern void __set_BASEPRI(uint32_t basePri); - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -extern uint32_t __get_PRIMASK(void); - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -extern void __set_PRIMASK(uint32_t priMask); - -/** - * @brief Return the Fault Mask value - * - * @return FaultMask - * - * Return the content of the fault mask register - */ -extern uint32_t __get_FAULTMASK(void); - -/** - * @brief Set the Fault Mask value - * - * @param faultMask faultMask value - * - * Set the fault mask register - */ -extern void __set_FAULTMASK(uint32_t faultMask); - -/** - * @brief Return the Control Register value - * - * @return Control value - * - * Return the content of the control register - */ -extern uint32_t __get_CONTROL(void); - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -extern void __set_CONTROL(uint32_t control); - -#else /* (__ARMCC_VERSION >= 400000) */ - -/** - * @brief Remove the exclusive lock created by ldrex - * - * Removes the exclusive lock which is created by ldrex. - */ -#define __CLREX __clrex - -/** - * @brief Return the Base Priority value - * - * @return BasePriority - * - * Return the content of the base priority register - */ -static __INLINE uint32_t __get_BASEPRI(void) -{ - register uint32_t __regBasePri __ASM("basepri"); - return(__regBasePri); -} - -/** - * @brief Set the Base Priority value - * - * @param basePri BasePriority - * - * Set the base priority register - */ -static __INLINE void __set_BASEPRI(uint32_t basePri) -{ - register uint32_t __regBasePri __ASM("basepri"); - __regBasePri = (basePri & 0xff); -} - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -static __INLINE uint32_t __get_PRIMASK(void) -{ - register uint32_t __regPriMask __ASM("primask"); - return(__regPriMask); -} - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -static __INLINE void __set_PRIMASK(uint32_t priMask) -{ - register uint32_t __regPriMask __ASM("primask"); - __regPriMask = (priMask); -} - -/** - * @brief Return the Fault Mask value - * - * @return FaultMask - * - * Return the content of the fault mask register - */ -static __INLINE uint32_t __get_FAULTMASK(void) -{ - register uint32_t __regFaultMask __ASM("faultmask"); - return(__regFaultMask); -} - -/** - * @brief Set the Fault Mask value - * - * @param faultMask faultMask value - * - * Set the fault mask register - */ -static __INLINE void __set_FAULTMASK(uint32_t faultMask) -{ - register uint32_t __regFaultMask __ASM("faultmask"); - __regFaultMask = (faultMask & 1); -} - -/** - * @brief Return the Control Register value - * - * @return Control value - * - * Return the content of the control register - */ -static __INLINE uint32_t __get_CONTROL(void) -{ - register uint32_t __regControl __ASM("control"); - return(__regControl); -} - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -static __INLINE void __set_CONTROL(uint32_t control) -{ - register uint32_t __regControl __ASM("control"); - __regControl = control; -} - -#endif /* __ARMCC_VERSION */ - - - -#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ - -#define __enable_irq __enable_interrupt /*!< global Interrupt enable */ -#define __disable_irq __disable_interrupt /*!< global Interrupt disable */ - -static __INLINE void __enable_fault_irq() { __ASM ("cpsie f"); } -static __INLINE void __disable_fault_irq() { __ASM ("cpsid f"); } - -#define __NOP __no_operation /*!< no operation intrinsic in IAR Compiler */ -static __INLINE void __WFI() { __ASM ("wfi"); } -static __INLINE void __WFE() { __ASM ("wfe"); } -static __INLINE void __SEV() { __ASM ("sev"); } -static __INLINE void __CLREX() { __ASM ("clrex"); } - -/* intrinsic void __ISB(void) */ -/* intrinsic void __DSB(void) */ -/* intrinsic void __DMB(void) */ -/* intrinsic void __set_PRIMASK(); */ -/* intrinsic void __get_PRIMASK(); */ -/* intrinsic void __set_FAULTMASK(); */ -/* intrinsic void __get_FAULTMASK(); */ -/* intrinsic uint32_t __REV(uint32_t value); */ -/* intrinsic uint32_t __REVSH(uint32_t value); */ -/* intrinsic unsigned long __STREX(unsigned long, unsigned long); */ -/* intrinsic unsigned long __LDREX(unsigned long *); */ - - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -extern uint32_t __get_PSP(void); - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -extern void __set_PSP(uint32_t topOfProcStack); - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -extern uint32_t __get_MSP(void); - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -extern void __set_MSP(uint32_t topOfMainStack); - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -extern uint32_t __REV16(uint16_t value); - -/** - * @brief Reverse bit order of value - * - * @param value value to reverse - * @return reversed value - * - * Reverse bit order of value - */ -extern uint32_t __RBIT(uint32_t value); - -/** - * @brief LDR Exclusive (8 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 8 bit values) - */ -extern uint8_t __LDREXB(uint8_t *addr); - -/** - * @brief LDR Exclusive (16 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 16 bit values - */ -extern uint16_t __LDREXH(uint16_t *addr); - -/** - * @brief LDR Exclusive (32 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 32 bit values - */ -extern uint32_t __LDREXW(uint32_t *addr); - -/** - * @brief STR Exclusive (8 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 8 bit values - */ -extern uint32_t __STREXB(uint8_t value, uint8_t *addr); - -/** - * @brief STR Exclusive (16 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 16 bit values - */ -extern uint32_t __STREXH(uint16_t value, uint16_t *addr); - -/** - * @brief STR Exclusive (32 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 32 bit values - */ -extern uint32_t __STREXW(uint32_t value, uint32_t *addr); - - - -#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -static __INLINE void __enable_irq(void) { __ASM volatile ("cpsie i"); } -static __INLINE void __disable_irq(void) { __ASM volatile ("cpsid i"); } - -static __INLINE void __enable_fault_irq(void) { __ASM volatile ("cpsie f"); } -static __INLINE void __disable_fault_irq(void) { __ASM volatile ("cpsid f"); } - -static __INLINE void __NOP(void) { __ASM volatile ("nop"); } -static __INLINE void __WFI(void) { __ASM volatile ("wfi"); } -static __INLINE void __WFE(void) { __ASM volatile ("wfe"); } -static __INLINE void __SEV(void) { __ASM volatile ("sev"); } -static __INLINE void __ISB(void) { __ASM volatile ("isb"); } -static __INLINE void __DSB(void) { __ASM volatile ("dsb"); } -static __INLINE void __DMB(void) { __ASM volatile ("dmb"); } -static __INLINE void __CLREX(void) { __ASM volatile ("clrex"); } - - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -extern uint32_t __get_PSP(void); - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -extern void __set_PSP(uint32_t topOfProcStack); - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -extern uint32_t __get_MSP(void); - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -extern void __set_MSP(uint32_t topOfMainStack); - -/** - * @brief Return the Base Priority value - * - * @return BasePriority - * - * Return the content of the base priority register - */ -extern uint32_t __get_BASEPRI(void); - -/** - * @brief Set the Base Priority value - * - * @param basePri BasePriority - * - * Set the base priority register - */ -extern void __set_BASEPRI(uint32_t basePri); - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -extern uint32_t __get_PRIMASK(void); - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -extern void __set_PRIMASK(uint32_t priMask); - -/** - * @brief Return the Fault Mask value - * - * @return FaultMask - * - * Return the content of the fault mask register - */ -extern uint32_t __get_FAULTMASK(void); - -/** - * @brief Set the Fault Mask value - * - * @param faultMask faultMask value - * - * Set the fault mask register - */ -extern void __set_FAULTMASK(uint32_t faultMask); - -/** - * @brief Return the Control Register value -* -* @return Control value - * - * Return the content of the control register - */ -extern uint32_t __get_CONTROL(void); - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -extern void __set_CONTROL(uint32_t control); - -/** - * @brief Reverse byte order in integer value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in integer value - */ -extern uint32_t __REV(uint32_t value); - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -extern uint32_t __REV16(uint16_t value); - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -extern int32_t __REVSH(int16_t value); - -/** - * @brief Reverse bit order of value - * - * @param value value to reverse - * @return reversed value - * - * Reverse bit order of value - */ -extern uint32_t __RBIT(uint32_t value); - -/** - * @brief LDR Exclusive (8 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 8 bit value - */ -extern uint8_t __LDREXB(uint8_t *addr); - -/** - * @brief LDR Exclusive (16 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 16 bit values - */ -extern uint16_t __LDREXH(uint16_t *addr); - -/** - * @brief LDR Exclusive (32 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 32 bit values - */ -extern uint32_t __LDREXW(uint32_t *addr); - -/** - * @brief STR Exclusive (8 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 8 bit values - */ -extern uint32_t __STREXB(uint8_t value, uint8_t *addr); - -/** - * @brief STR Exclusive (16 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 16 bit values - */ -extern uint32_t __STREXH(uint16_t value, uint16_t *addr); - -/** - * @brief STR Exclusive (32 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 32 bit values - */ -extern uint32_t __STREXW(uint32_t value, uint32_t *addr); - - -#elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/ -/* TASKING carm specific functions */ - -/* - * The CMSIS functions have been implemented as intrinsics in the compiler. - * Please use "carm -?i" to get an up to date list of all instrinsics, - * Including the CMSIS ones. - */ - -#endif - - -/** @addtogroup CMSIS_CM3_Core_FunctionInterface CMSIS CM3 Core Function Interface - Core Function Interface containing: - - Core NVIC Functions - - Core SysTick Functions - - Core Reset Functions -*/ -/*@{*/ - -/* ########################## NVIC functions #################################### */ - -/** - * @brief Set the Priority Grouping in NVIC Interrupt Controller - * - * @param PriorityGroup is priority grouping field - * - * Set the priority grouping field using the required unlock sequence. - * The parameter priority_grouping is assigned to the field - * SCB->AIRCR [10:8] PRIGROUP field. Only values from 0..7 are used. - * In case of a conflict between priority grouping and available - * priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - */ -static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ - reg_value = (reg_value | - (0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ - SCB->AIRCR = reg_value; -} - -/** - * @brief Get the Priority Grouping from NVIC Interrupt Controller - * - * @return priority grouping field - * - * Get the priority grouping from NVIC Interrupt Controller. - * priority grouping is SCB->AIRCR [10:8] PRIGROUP field. - */ -static __INLINE uint32_t NVIC_GetPriorityGrouping(void) -{ - return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ -} - -/** - * @brief Enable Interrupt in NVIC Interrupt Controller - * - * @param IRQn The positive number of the external interrupt to enable - * - * Enable a device specific interupt in the NVIC interrupt controller. - * The interrupt number cannot be a negative value. - */ -static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) -{ - NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ -} - -/** - * @brief Disable the interrupt line for external interrupt specified - * - * @param IRQn The positive number of the external interrupt to disable - * - * Disable a device specific interupt in the NVIC interrupt controller. - * The interrupt number cannot be a negative value. - */ -static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) -{ - NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ -} - -/** - * @brief Read the interrupt pending bit for a device specific interrupt source - * - * @param IRQn The number of the device specifc interrupt - * @return 1 = interrupt pending, 0 = interrupt not pending - * - * Read the pending register in NVIC and return 1 if its status is pending, - * otherwise it returns 0 - */ -static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ -} - -/** - * @brief Set the pending bit for an external interrupt - * - * @param IRQn The number of the interrupt for set pending - * - * Set the pending bit for the specified interrupt. - * The interrupt number cannot be a negative value. - */ -static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ -} - -/** - * @brief Clear the pending bit for an external interrupt - * - * @param IRQn The number of the interrupt for clear pending - * - * Clear the pending bit for the specified interrupt. - * The interrupt number cannot be a negative value. - */ -static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ -} - -/** - * @brief Read the active bit for an external interrupt - * - * @param IRQn The number of the interrupt for read active bit - * @return 1 = interrupt active, 0 = interrupt not active - * - * Read the active register in NVIC and returns 1 if its status is active, - * otherwise it returns 0. - */ -static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) -{ - return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ -} - -/** - * @brief Set the priority for an interrupt - * - * @param IRQn The number of the interrupt for set priority - * @param priority The priority to set - * - * Set the priority for the specified interrupt. The interrupt - * number can be positive to specify an external (device specific) - * interrupt, or negative to specify an internal (core) interrupt. - * - * Note: The priority cannot be set for every core interrupt. - */ -static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if(IRQn < 0) { - SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M3 System Interrupts */ - else { - NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ -} - -/** - * @brief Read the priority for an interrupt - * - * @param IRQn The number of the interrupt for get priority - * @return The priority for the interrupt - * - * Read the priority for the specified interrupt. The interrupt - * number can be positive to specify an external (device specific) - * interrupt, or negative to specify an internal (core) interrupt. - * - * The returned priority value is automatically aligned to the implemented - * priority bits of the microcontroller. - * - * Note: The priority cannot be set for every core interrupt. - */ -static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) -{ - - if(IRQn < 0) { - return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M3 system interrupts */ - else { - return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ -} - - -/** - * @brief Encode the priority for an interrupt - * - * @param PriorityGroup The used priority group - * @param PreemptPriority The preemptive priority value (starting from 0) - * @param SubPriority The sub priority value (starting from 0) - * @return The encoded priority for the interrupt - * - * Encode the priority for an interrupt with the given priority group, - * preemptive priority value and sub priority value. - * In case of a conflict between priority grouping and available - * priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. - * - * The returned priority value can be used for NVIC_SetPriority(...) function - */ -static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - return ( - ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | - ((SubPriority & ((1 << (SubPriorityBits )) - 1))) - ); -} - - -/** - * @brief Decode the priority of an interrupt - * - * @param Priority The priority for the interrupt - * @param PriorityGroup The used priority group - * @param pPreemptPriority The preemptive priority value (starting from 0) - * @param pSubPriority The sub priority value (starting from 0) - * - * Decode an interrupt priority value with the given priority group to - * preemptive priority value and sub priority value. - * In case of a conflict between priority grouping and available - * priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. - * - * The priority value can be retrieved with NVIC_GetPriority(...) function - */ -static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); - *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); -} - - - -/* ################################## SysTick function ############################################ */ - -#if (!defined (__Vendor_SysTickConfig)) || (__Vendor_SysTickConfig == 0) - -/** - * @brief Initialize and start the SysTick counter and its interrupt. - * - * @param ticks number of ticks between two interrupts - * @return 1 = failed, 0 = successful - * - * Initialise the system tick timer and its interrupt and start the - * system tick timer / counter in free running mode to generate - * periodical interrupts. - */ -static __INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ - - SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ - SysTick->VAL = 0; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0); /* Function successful */ -} - -#endif - - - - -/* ################################## Reset function ############################################ */ - -/** - * @brief Initiate a system reset request. - * - * Initiate a system reset request to reset the MCU - */ -static __INLINE void NVIC_SystemReset(void) -{ - SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - while(1); /* wait until reset */ -} - -/*@}*/ /* end of group CMSIS_CM3_Core_FunctionInterface */ - - - -/* ##################################### Debug In/Output function ########################################### */ - -/** @addtogroup CMSIS_CM3_CoreDebugInterface CMSIS CM3 Core Debug Interface - Core Debug Interface containing: - - Core Debug Receive / Transmit Functions - - Core Debug Defines - - Core Debug Variables -*/ -/*@{*/ - -extern volatile int ITM_RxBuffer; /*!< variable to receive characters */ -#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< value identifying ITM_RxBuffer is ready for next character */ - - -/** - * @brief Outputs a character via the ITM channel 0 - * - * @param ch character to output - * @return character to output - * - * The function outputs a character via the ITM channel 0. - * The function returns when no debugger is connected that has booked the output. - * It is blocking when a debugger is connected, but the previous character send is not transmitted. - */ -static __INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */ - (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ - (ITM->TER & (1ul << 0) ) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0].u32 == 0); - ITM->PORT[0].u8 = (uint8_t) ch; - } - return (ch); -} - - -/** - * @brief Inputs a character via variable ITM_RxBuffer - * - * @return received character, -1 = no character received - * - * The function inputs a character via variable ITM_RxBuffer. - * The function returns when no debugger is connected that has booked the output. - * It is blocking when a debugger is connected, but the previous character send is not transmitted. - */ -static __INLINE int ITM_ReceiveChar (void) { - int ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** - * @brief Check if a character via variable ITM_RxBuffer is available - * - * @return 1 = character available, 0 = no character available - * - * The function checks variable ITM_RxBuffer whether a character is available or not. - * The function returns '1' if a character is available and '0' if no character is available. - */ -static __INLINE int ITM_CheckChar (void) { - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { - return (0); /* no character available */ - } else { - return (1); /* character available */ - } -} - -/*@}*/ /* end of group CMSIS_CM3_core_DebugInterface */ - - -#ifdef __cplusplus -} -#endif - -/*@}*/ /* end of group CMSIS_CM3_core_definitions */ - -#endif /* __CM3_CORE_H__ */ - -/*lint -restore */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/crt0.s b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/crt0.s deleted file mode 100644 index 3db68e3..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/crt0.s +++ /dev/null @@ -1,169 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/crt0.s - * @brief Generic ARM Cortex-Mx startup file for ChibiOS/RT. - * - * @addtogroup ARMCMx_CORE - * @{ - */ - -#include "cmparams.h" - -#if !defined(__DOXYGEN__) - -.set CONTROL_MODE_PRIVILEGED, 0 -.set CONTROL_MODE_UNPRIVILEGED, 1 -.set CONTROL_USE_MSP, 0 -.set CONTROL_USE_PSP, 2 - -.text -.balign 2 -.syntax unified -.thumb - -/* - * Reset handler. - */ -.thumb_func -.global ResetHandler -.weak ResetHandler -ResetHandler: - /* - * Interrupts are globally masked initially. - */ - cpsid i - /* - * Stack pointers initialization. - */ - ldr r0, =__ram_end__ - ldr r1, =__main_stack_size__ - subs r0, r0, r1 - /* - * Note that r0 is the main stack low boundary address and process - * stack initial top address. - */ - msr PSP, r0 - /* - * Early initialization phase, it is empty by default. - */ - bl hwinit0 - /* - * Data initialization. - * NOTE: It assumes that the DATA size is a multiple of 4. - */ - ldr r1, =_textdata - ldr r2, =_data - ldr r3, =_edata -dloop: - cmp r2, r3 -#if (CORTEX_MODEL == CORTEX_M0) || (CORTEX_MODEL == CORTEX_M1) - bge enddloop - ldr r0, [r1] - str r0, [r2] - adds r1, r1, #4 - adds r2, r2, #4 - b dloop -enddloop: -#else - ittt lo - ldrlo r0, [r1], #4 - strlo r0, [r2], #4 - blo dloop -#endif - /* - * BSS initialization. - * NOTE: It assumes that the BSS size is a multiple of 4. - */ - movs r0, #0 - ldr r1, =_bss_start - ldr r2, =_bss_end -bloop: - cmp r1, r2 -#if (CORTEX_MODEL == CORTEX_M0) || (CORTEX_MODEL == CORTEX_M1) - bge endbloop - str r0, [r1] - adds r1, r1, #4 - b bloop -endbloop: -#else - itt lo - strlo r0, [r1], #4 - blo bloop -#endif - /* - * Switches to the Process Stack and uses a barrier just to be safe. - */ - movs r0, #CONTROL_MODE_PRIVILEGED | CONTROL_USE_PSP - msr CONTROL, r0 - isb - /* - * Late initialization phase, it is empty by default. - */ - bl hwinit1 - movs r0, #0 - mov r1, r0 - bl main - b MainExitHandler - -/* - * Default main exit code, just a loop. - * It is a weak symbol, the application code can redefine the behavior. - */ -.thumb_func -.global MainExitHandler -.weak MainExitHandler -MainExitHandler: -.loop: b .loop - -/* - * Default early initialization code. It is declared weak in order to be - * replaced by the real initialization code. - * Early initialization is performed just after reset before BSS and DATA - * segments initialization. - */ -.thumb_func -.global hwinit0 -.weak hwinit0 -hwinit0: - bx lr - -/* - * Default late initialization code. It is declared weak in order to be - * replaced by the real initialization code. - * Late initialization is performed after BSS and DATA segments initialization - * and before invoking the main() function. - */ -.thumb_func -.global hwinit1 -.weak hwinit1 -hwinit1: - bx lr - -#endif - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/nvic.c b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/nvic.c deleted file mode 100644 index aaa474d..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/nvic.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/nvic.c - * @brief Cortex-Mx NVIC support code. - * - * @addtogroup ARMCMx_NVIC - * @{ - */ - -#include "ch.h" -#include "nvic.h" - -/** - * @brief Sets the priority of an interrupt handler and enables it. - * - * @param n the interrupt number - * @param prio the interrupt priority mask - * - * @note The parameters are not tested for correctness. - */ -void NVICEnableVector(uint32_t n, uint32_t prio) { - unsigned sh = (n & 3) << 3; - - NVIC_IPR(n >> 2) = (NVIC_IPR(n >> 2) & ~(0xFF << sh)) | (prio << sh); - NVIC_ICPR(n >> 5) = 1 << (n & 0x1F); - NVIC_ISER(n >> 5) = 1 << (n & 0x1F); -} - -/** - * @brief Disables an interrupt handler. - * - * @param n the interrupt number - * - * @note The parameters are not tested for correctness. - */ -void NVICDisableVector(uint32_t n) { - unsigned sh = (n & 3) << 3; - - NVIC_ICER(n >> 5) = 1 << (n & 0x1F); - NVIC_IPR(n >> 2) = NVIC_IPR(n >> 2) & ~(0xFF << sh); -} - -/** - * @brief Changes the priority of a system handler. - * - * @param handler the system handler number - * @param prio the system handler priority mask - * @note The parameters are not tested for correctness. - */ -void NVICSetSystemHandlerPriority(uint32_t handler, uint32_t prio) { - unsigned sh = (handler & 3) * 8; - - SCB_SHPR(handler >> 2) = (SCB_SHPR(handler >> 2) & - ~(0xFF << sh)) | (prio << sh); -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/nvic.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/nvic.h deleted file mode 100644 index 9f53856..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/nvic.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/nvic.h - * @brief Cortex-Mx NVIC support macros and structures. - * - * @addtogroup ARMCMx_NVIC - * @{ - */ - -#ifndef _NVIC_H_ -#define _NVIC_H_ - -/* - * System vector constants for @p NVICSetSystemHandlerPriority(). - */ -#define HANDLER_MEM_MANAGE 0 /**< MEM MANAGE vector id. */ -#define HANDLER_BUS_FAULT 1 /**< BUS FAULT vector id. */ -#define HANDLER_USAGE_FAULT 2 /**< USAGE FAULT vector id. */ -#define HANDLER_RESERVED_3 3 -#define HANDLER_RESERVED_4 4 -#define HANDLER_RESERVED_5 5 -#define HANDLER_RESERVED_6 6 -#define HANDLER_SVCALL 7 /**< SVCALL vector id. */ -#define HANDLER_DEBUG_MONITOR 8 /**< DEBUG MONITOR vector id. */ -#define HANDLER_RESERVED_9 9 -#define HANDLER_PENDSV 10 /**< PENDSV vector id. */ -#define HANDLER_SYSTICK 11 /**< SYS TCK vector id. */ - -typedef volatile uint8_t IOREG8; /**< 8 bits I/O register type. */ -typedef volatile uint32_t IOREG32; /**< 32 bits I/O register type. */ - -/** - * @brief NVIC ITCR register. - */ -#define NVIC_ITCR (*((IOREG32 *)0xE000E004)) - -/** - * @brief NVIC STIR register. - */ -#define NVIC_STIR (*((IOREG32 *)0xE000EF00)) - -/** - * @brief Structure representing the SYSTICK I/O space. - */ -typedef struct { - IOREG32 CSR; - IOREG32 RVR; - IOREG32 CVR; - IOREG32 CBVR; -} CM3_ST; - -/** - * @brief SYSTICK peripheral base address. - */ -#define STBase ((CM3_ST *)0xE000E010) -#define ST_CSR (STBase->CSR) -#define ST_RVR (STBase->RVR) -#define ST_CVR (STBase->CVR) -#define ST_CBVR (STBase->CBVR) - -#define CSR_ENABLE_MASK (0x1 << 0) -#define ENABLE_OFF_BITS (0 << 0) -#define ENABLE_ON_BITS (1 << 0) -#define CSR_TICKINT_MASK (0x1 << 1) -#define TICKINT_DISABLED_BITS (0 << 1) -#define TICKINT_ENABLED_BITS (1 << 1) -#define CSR_CLKSOURCE_MASK (0x1 << 2) -#define CLKSOURCE_EXT_BITS (0 << 2) -#define CLKSOURCE_CORE_BITS (1 << 2) -#define CSR_COUNTFLAG_MASK (0x1 << 16) - -#define RVR_RELOAD_MASK (0xFFFFFF << 0) - -#define CVR_CURRENT_MASK (0xFFFFFF << 0) - -#define CBVR_TENMS_MASK (0xFFFFFF << 0) -#define CBVR_SKEW_MASK (0x1 << 30) -#define CBVR_NOREF_MASK (0x1 << 31) - -/** - * @brief Structure representing the NVIC I/O space. - */ -typedef struct { - IOREG32 ISER[8]; - IOREG32 unused1[24]; - IOREG32 ICER[8]; - IOREG32 unused2[24]; - IOREG32 ISPR[8]; - IOREG32 unused3[24]; - IOREG32 ICPR[8]; - IOREG32 unused4[24]; - IOREG32 IABR[8]; - IOREG32 unused5[56]; - IOREG32 IPR[60]; -} CM3_NVIC; - -/** - * @brief NVIC peripheral base address. - */ -#define NVICBase ((CM3_NVIC *)0xE000E100) -#define NVIC_ISER(n) (NVICBase->ISER[n]) -#define NVIC_ICER(n) (NVICBase->ICER[n]) -#define NVIC_ISPR(n) (NVICBase->ISPR[n]) -#define NVIC_ICPR(n) (NVICBase->ICPR[n]) -#define NVIC_IABR(n) (NVICBase->IABR[n]) -#define NVIC_IPR(n) (NVICBase->IPR[n]) - -/** - * @brief Structure representing the System Control Block I/O space. - */ -typedef struct { - IOREG32 CPUID; - IOREG32 ICSR; - IOREG32 VTOR; - IOREG32 AIRCR; - IOREG32 SCR; - IOREG32 CCR; - IOREG32 SHPR[3]; - IOREG32 SHCSR; - IOREG32 CFSR; - IOREG32 HFSR; - IOREG32 DFSR; - IOREG32 MMFAR; - IOREG32 BFAR; - IOREG32 AFSR; -} CM3_SCB; - -/** - * @brief SCB peripheral base address. - */ -#define SCBBase ((CM3_SCB *)0xE000ED00) -#define SCB_CPUID (SCBBase->CPUID) -#define SCB_ICSR (SCBBase->ICSR) -#define SCB_VTOR (SCBBase->VTOR) -#define SCB_AIRCR (SCBBase->AIRCR) -#define SCB_SCR (SCBBase->SCR) -#define SCB_CCR (SCBBase->CCR) -#define SCB_SHPR(n) (SCBBase->SHPR[n]) -#define SCB_SHCSR (SCBBase->SHCSR) -#define SCB_CFSR (SCBBase->CFSR) -#define SCB_HFSR (SCBBase->HFSR) -#define SCB_DFSR (SCBBase->DFSR) -#define SCB_MMFAR (SCBBase->MMFAR) -#define SCB_BFAR (SCBBase->BFAR) -#define SCB_AFSR (SCBBase->AFSR) - -#define ICSR_VECTACTIVE_MASK (0x1FF << 0) -#define ICSR_RETTOBASE (0x1 << 11) -#define ICSR_VECTPENDING_MASK (0x1FF << 12) -#define ICSR_ISRPENDING (0x1 << 22) -#define ICSR_ISRPREEMPT (0x1 << 23) -#define ICSR_PENDSTCLR (0x1 << 25) -#define ICSR_PENDSTSET (0x1 << 26) -#define ICSR_PENDSVCLR (0x1 << 27) -#define ICSR_PENDSVSET (0x1 << 28) -#define ICSR_NMIPENDSET (0x1 << 31) - -#define AIRCR_VECTKEY 0x05FA0000 -#define AIRCR_PRIGROUP_MASK (0x7 << 8) -#define AIRCR_PRIGROUP(n) ((n) << 8) - -#ifdef __cplusplus -extern "C" { -#endif - void NVICEnableVector(uint32_t n, uint32_t prio); - void NVICDisableVector(uint32_t n); - void NVICSetSystemHandlerPriority(uint32_t handler, uint32_t prio); -#ifdef __cplusplus -} -#endif - -#endif /* _NVIC_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/old/chcore_v7m.c b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/old/chcore_v7m.c deleted file mode 100644 index c8b95b1..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/old/chcore_v7m.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/chcore_v7m.c - * @brief ARMv7-M architecture port code. - * - * @addtogroup ARMCMx_V7M_CORE - * @{ - */ - -#include "ch.h" - -#if !CH_OPTIMIZE_SPEED -void _port_lock(void) { - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_KERNEL; - asm volatile ("msr BASEPRI, %0" : : "r" (tmp)); -} - -void _port_unlock(void) { - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_DISABLED; - asm volatile ("msr BASEPRI, %0" : : "r" (tmp)); -} -#endif - -/** - * @brief System Timer vector. - * @details This interrupt is used as system tick. - * @note The timer must be initialized in the startup code. - */ -void SysTickVector(void) { - - chSysLockFromIsr(); - chSysTimerHandlerI(); - if (chSchIsRescRequiredExI()) - SCB_ICSR = ICSR_PENDSVSET; - chSysUnlockFromIsr(); -} - -#if !defined(CH_CURRP_REGISTER_CACHE) -#define PUSH_CONTEXT(sp, prio) { \ - asm volatile ("mrs %0, PSP \n\t" \ - "stmdb %0!, {r3-r11,lr}" : \ - "=r" (sp) : "r" (sp), "r" (prio)); \ -} - -#define POP_CONTEXT(sp) { \ - asm volatile ("ldmia %0!, {r3-r11, lr} \n\t" \ - "msr PSP, %0 \n\t" \ - "msr BASEPRI, r3 \n\t" \ - "bx lr" : "=r" (sp) : "r" (sp)); \ -} -#else /* defined(CH_CURRP_REGISTER_CACHE) */ -#define PUSH_CONTEXT(sp, prio) { \ - asm volatile ("mrs %0, PSP \n\t" \ - "stmdb %0!, {r3-r6,r8-r11, lr}" : \ - "=r" (sp) : "r" (sp), "r" (prio)); \ -} - -#define POP_CONTEXT(sp) { \ - asm volatile ("ldmia %0!, {r3-r6,r8-r11, lr} \n\t" \ - "msr PSP, %0 \n\t" \ - "msr BASEPRI, r3 \n\t" \ - "bx lr" : "=r" (sp) : "r" (sp)); \ -} -#endif /* defined(CH_CURRP_REGISTER_CACHE) */ - -/** - * @brief SVC vector. - * @details The SVC vector is used for commanded context switch. Structures - * @p intctx are saved and restored from the process stacks of the - * switched threads. - * - * @param[in] ntp the thread to be switched it - * @param[in] otp the thread to be switched out - */ -#if !defined(__DOXYGEN__) -__attribute__((naked)) -#endif -void SVCallVector(Thread *ntp, Thread *otp) { - register struct intctx *sp_thd asm("r2"); - register uint32_t prio asm ("r3"); - - asm volatile ("mrs r3, BASEPRI" : "=r" (prio) : ); - PUSH_CONTEXT(sp_thd, prio) - - otp->p_ctx.r13 = sp_thd; - sp_thd = ntp->p_ctx.r13; - - POP_CONTEXT(sp_thd) -} - -/** - * @brief Preemption code. - */ -#if !defined(__DOXYGEN__) -__attribute__((naked)) -#endif -void PendSVVector(void) { - register struct intctx *sp_thd asm("r2"); - register uint32_t prio asm ("r3"); - Thread *otp, *ntp; - - chSysLockFromIsr(); - - prio = CORTEX_BASEPRI_DISABLED; - PUSH_CONTEXT(sp_thd, prio) - - (otp = currp)->p_ctx.r13 = sp_thd; - ntp = fifo_remove(&rlist.r_queue); - setcurrp(ntp); - ntp->p_state = THD_STATE_CURRENT; - chSchReadyI(otp); -#if CH_TIME_QUANTUM > 0 - /* Set the round-robin time quantum.*/ - rlist.r_preempt = CH_TIME_QUANTUM; -#endif - chDbgTrace(otp); - sp_thd = ntp->p_ctx.r13; - - POP_CONTEXT(sp_thd) -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/old/chcore_v7m.h b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/old/chcore_v7m.h deleted file mode 100644 index 0822ff1..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/old/chcore_v7m.h +++ /dev/null @@ -1,305 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ARMCMx/chcore_v7m.h - * @brief ARMv7-M architecture port macros and structures. - * - * @addtogroup ARMCMx_V7M_CORE - * @{ - */ - -#ifndef _CHCORE_V7M_H_ -#define _CHCORE_V7M_H_ - -/*===========================================================================*/ -/* Port implementation part. */ -/*===========================================================================*/ - -#if !defined(__DOXYGEN__) -/** - * @brief Interrupt saved context. - * @details This structure represents the stack frame saved during a - * preemption-capable interrupt handler. - * @note This structure is empty in this port. - */ -struct extctx { -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief System saved context. - * @details This structure represents the inner stack frame during a context - * switching. - */ -struct intctx { - regarm_t basepri; - regarm_t r4; - regarm_t r5; - regarm_t r6; -#ifndef CH_CURRP_REGISTER_CACHE - regarm_t r7; -#endif - regarm_t r8; - regarm_t r9; - regarm_t r10; - regarm_t r11; - regarm_t lr_exc; - /* Start of the hardware saved frame.*/ - regarm_t r0; - regarm_t r1; - regarm_t r2; - regarm_t r3; - regarm_t r12; - regarm_t lr_thd; - regarm_t pc; - regarm_t xpsr; -}; -#endif - -/** - * @brief Platform dependent part of the @p chThdInit() API. - * @details This code usually setup the context switching frame represented - * by an @p intctx structure. - */ -#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \ - tp->p_ctx.r13 = (struct intctx *)((uint8_t *)workspace + \ - wsize - \ - sizeof(struct intctx)); \ - tp->p_ctx.r13->basepri = CORTEX_BASEPRI_DISABLED; \ - tp->p_ctx.r13->lr_exc = (regarm_t)0xFFFFFFFD; \ - tp->p_ctx.r13->r0 = arg; \ - tp->p_ctx.r13->lr_thd = chThdExit; \ - tp->p_ctx.r13->pc = pf; \ - tp->p_ctx.r13->xpsr = (regarm_t)0x01000000; \ -} - -/** - * @brief Stack size for the system idle thread. - * @details This size depends on the idle thread implementation, usually - * the idle thread should take no more space than those reserved - * by @p INT_REQUIRED_STACK. - * @note In this port it is set to 4 because the idle thread does have - * a stack frame when compiling without optimizations. - */ -#ifndef IDLE_THREAD_STACK_SIZE -#define IDLE_THREAD_STACK_SIZE 4 -#endif - -/** - * @brief Per-thread stack overhead for interrupts servicing. - * @details This constant is used in the calculation of the correct working - * area size. - * This value can be zero on those architecture where there is a - * separate interrupt stack and the stack space between @p intctx and - * @p extctx is known to be zero. - * @note This port requires no extra stack space for interrupt handling. - */ -#ifndef INT_REQUIRED_STACK -#define INT_REQUIRED_STACK 0 -#endif - -/** - * @brief IRQ prologue code. - * @details This macro must be inserted at the start of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_PROLOGUE() - -/** - * @brief IRQ epilogue code. - * @details This macro must be inserted at the end of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_EPILOGUE() { \ - chSysLockFromIsr(); \ - if (chSchIsRescRequiredI()) \ - SCB_ICSR = ICSR_PENDSVSET; \ - chSysUnlockFromIsr(); \ -} - -/** - * @brief IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_IRQ_HANDLER(id) void id(void) - -/** - * @brief Port-related initialization code. - */ -#define port_init() { \ - SCB_AIRCR = AIRCR_VECTKEY | AIRCR_PRIGROUP(0); \ - NVICSetSystemHandlerPriority(HANDLER_SVCALL, \ - CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_SVCALL)); \ - NVICSetSystemHandlerPriority(HANDLER_PENDSV, \ - CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_PENDSV)); \ - NVICSetSystemHandlerPriority(HANDLER_SYSTICK, \ - CORTEX_PRIORITY_MASK(CORTEX_PRIORITY_SYSTICK)); \ -} - -/** - * @brief Kernel-lock action. - * @details Usually this function just disables interrupts but may perform - * more actions. - * @note In this port this it raises the base priority to kernel level. - */ -#if CH_OPTIMIZE_SPEED -#define port_lock() { \ - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_KERNEL; \ - asm volatile ("msr BASEPRI, %0" : : "r" (tmp) : "memory"); \ -} -#else -#define port_lock() { \ - asm volatile ("bl _port_lock" : : : "r3", "lr", "memory"); \ -} -#endif - -/** - * @brief Kernel-unlock action. - * @details Usually this function just disables interrupts but may perform - * more actions. - * @note In this port this it lowers the base priority to kernel level. - */ -#if CH_OPTIMIZE_SPEED -#define port_unlock() { \ - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_DISABLED; \ - asm volatile ("msr BASEPRI, %0" : : "r" (tmp) : "memory"); \ -} -#else -#define port_unlock() { \ - asm volatile ("bl _port_unlock" : : : "r3", "lr", "memory"); \ -} -#endif - -/** - * @brief Kernel-lock action from an interrupt handler. - * @details This function is invoked before invoking I-class APIs from - * interrupt handlers. The implementation is architecture dependent, - * in its simplest form it is void. - * @note Same as @p port_lock() in this port. - */ -#define port_lock_from_isr() port_lock() - -/** - * @brief Kernel-unlock action from an interrupt handler. - * @details This function is invoked after invoking I-class APIs from interrupt - * handlers. The implementation is architecture dependent, in its - * simplest form it is void. - * @note Same as @p port_unlock() in this port. - */ -#define port_unlock_from_isr() port_unlock() - -/** - * @brief Disables all the interrupt sources. - * @note Of course non maskable interrupt sources are not included. - * @note In this port it disables all the interrupt sources by raising - * the priority mask to level 0. - */ -#define port_disable() asm volatile ("cpsid i" : : : "memory") - -/** - * @brief Disables the interrupt sources below kernel-level priority. - * @note Interrupt sources above kernel level remains enabled. - * @note In this port it raises/lowers the base priority to kernel level. - */ -#define port_suspend() { \ - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_KERNEL; \ - asm volatile ("msr BASEPRI, %0 \n\t" \ - "cpsie i" : : "r" (tmp) : "memory"); \ -} - -/** - * @brief Enables all the interrupt sources. - * @note In this port it lowers the base priority to user level. - */ -#define port_enable() { \ - register uint32_t tmp asm ("r3") = CORTEX_BASEPRI_DISABLED; \ - asm volatile ("msr BASEPRI, %0 \n\t" \ - "cpsie i" : : "r" (tmp) : "memory"); \ -} - -/** - * @brief Enters an architecture-dependent IRQ-waiting mode. - * @details The function is meant to return when an interrupt becomes pending. - * The simplest implementation is an empty function or macro but this - * would not take advantage of architecture-specific power saving - * modes. - * @note Implemented as an inlined @p WFI instruction. - */ -#if CORTEX_ENABLE_WFI_IDLE || defined(__DOXYGEN__) -#define port_wait_for_interrupt() { \ - asm volatile ("wfi" : : : "memory"); \ -} -#else -#define port_wait_for_interrupt() -#endif - -/** - * @brief Performs a context switch between two threads. - * @details This is the most critical code in any port, this function - * is responsible for the context switch between 2 threads. - * @note The implementation of this code affects directly the context - * switch performance so optimize here as much as you can. - * @note Implemented as inlined code for performance reasons. - * - * @param[in] ntp the thread to be switched in - * @param[in] otp the thread to be switched out - */ -#if !CH_DBG_ENABLE_STACK_CHECK || defined(__DOXYGEN__) -#define port_switch(ntp, otp) { \ - register Thread *_ntp asm ("r0") = (ntp); \ - register Thread *_otp asm ("r1") = (otp); \ - asm volatile ("svc #0" : : "r" (_otp), "r" (_ntp) : "memory"); \ -} -#else /* CH_DBG_ENABLE_STACK_CHECK */ -#define port_switch(ntp, otp) { \ - register Thread *_ntp asm ("r0") = (ntp); \ - register Thread *_otp asm ("r1") = (otp); \ - register struct intctx *r13 asm ("r13"); \ - if ((void *)(r13 - 1) < (void *)(_otp + 1)) \ - asm volatile ("movs r0, #0 \n\t" \ - "b chDbgPanic"); \ - asm volatile ("svc #0" : : "r" (_otp), "r" (_ntp) : "memory"); \ -} -#endif /* CH_DBG_ENABLE_STACK_CHECK */ - -#ifdef __cplusplus -extern "C" { -#endif - void port_halt(void); -#if !CH_OPTIMIZE_SPEED - void _port_lock(void); - void _port_unlock(void); -#endif -#ifdef __cplusplus -} -#endif - -#endif /* _CHCORE_V7M_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/port.dox b/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/port.dox deleted file mode 100644 index 85b14f5..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/ARMCMx/port.dox +++ /dev/null @@ -1,213 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup ARMCMx ARM Cortex-Mx - * @details This port supports the ARMv6-M and ARMv7-M architectures (all the - * Cortex-Mx cores). - * - * @section ARMCMx_STATES_A System logical states in ARMv6-M - * - Init. This state is represented by the startup code and the - * initialization code before @p chSysInit() is executed. It has not a - * special hardware state associated. - * - Normal. This is the state the system has after executing - * @p chSysInit(). In this state interrupts are enabled. The processor - * is running in thread-privileged mode. - * - Suspended. In this state the interrupt sources are globally - * disabled. The processor is running in thread-privileged mode. In this - * mode this state is not different from the Disabled state. - * - Disabled. In this state the interrupt sources are globally - * disabled. The processor is running in thread-privileged mode. In this - * mode this state is not different from the Suspended state. - * - Sleep. This state is entered with the execution of the specific - * instruction @p wfi. - * - S-Locked. In this state the interrupt sources are globally - * disabled. The processor is running in thread-privileged mode. - * - I-Locked. In this state the interrupt sources are globally - * disabled. The processor is running in exception-privileged mode. - * - Serving Regular Interrupt. In this state the interrupt sources are - * not globally masked but only interrupts with higher priority can preempt - * the current handler. The processor is running in exception-privileged - * mode. - * - Serving Fast Interrupt. This state is not implemented in the - * ARMv6-M implementation. - * - Serving Non-Maskable Interrupt. The Cortex-M3 has a specific - * asynchronous NMI vector and several synchronous fault vectors that can - * be considered belonging to this category. - * - Halted. Implemented as an infinite loop after globally masking all - * the maskable interrupt sources. The ARM state is whatever the processor - * was running when @p chSysHalt() was invoked. - * - * @section ARMCMx_STATES_B System logical states in ARMv7-M - * The ChibiOS/RT logical @ref system_states are mapped as follow in the ARM - * Cortex-M3 port: - * - Init. This state is represented by the startup code and the - * initialization code before @p chSysInit() is executed. It has not a - * special hardware state associated. - * - Normal. This is the state the system has after executing - * @p chSysInit(). In this state the ARM Cortex-M3 has the BASEPRI register - * set at @p CORTEX_BASEPRI_USER level, interrupts are not masked. The - * processor is running in thread-privileged mode. - * - Suspended. In this state the interrupt sources are not globally - * masked but the BASEPRI register is set to @p CORTEX_BASEPRI_KERNEL thus - * masking any interrupt source with lower or equal priority. The processor - * is running in thread-privileged mode. - * - Disabled. Interrupt sources are globally masked. The processor - * is running in thread-privileged mode. - * - Sleep. This state is entered with the execution of the specific - * instruction @p wfi. - * - S-Locked. In this state the interrupt sources are not globally - * masked but the BASEPRI register is set to @p CORTEX_BASEPRI_KERNEL thus - * masking any interrupt source with lower or equal priority. The processor - * is running in thread-privileged mode. - * - I-Locked. In this state the interrupt sources are not globally - * masked but the BASEPRI register is set to @p CORTEX_BASEPRI_KERNEL thus - * masking any interrupt source with lower or equal priority. The processor - * is running in exception-privileged mode. - * - Serving Regular Interrupt. In this state the interrupt sources are - * not globally masked but only interrupts with higher priority can preempt - * the current handler. The processor is running in exception-privileged - * mode. - * - Serving Fast Interrupt. It is basically the same of the SRI state - * but it is not possible to switch to the I-Locked state because fast - * interrupts can preempt the kernel critical zone. - * - Serving Non-Maskable Interrupt. The Cortex-M3 has a specific - * asynchronous NMI vector and several synchronous fault vectors that can - * be considered belonging to this category. - * - Halted. Implemented as an infinite loop after globally masking all - * the maskable interrupt sources. The ARM state is whatever the processor - * was running when @p chSysHalt() was invoked. - * . - * @section ARMCMx_NOTES The ARM Cortex-Mx port notes - * The ARM Cortex-Mx port is organized as follow: - * - The @p main() function is invoked in thread-privileged mode. - * - Each thread has a private process stack, the system has a single main - * stack where all the interrupts and exceptions are processed. - * - The threads are started in thread-privileged mode. - * - Interrupt nesting and the other advanced core/NVIC features are supported. - * . - * @ingroup ports - */ - -/** - * @defgroup ARMCMx_CONF Configuration Options - * @brief ARM Cortex-Mx Configuration Options. - * @details The ARMCMx port allows some architecture-specific configurations - * settings that can be overridden by redefining them in @p chconf.h. - * Usually there is no need to change the default values. - * - @p INT_REQUIRED_STACK, this value represent the amount of stack space used - * by an interrupt handler between the @p extctx and @p intctx - * structures.
      - * In the current implementation this value is guaranteed to be zero so - * there is no need to modify this value unless changes are done at the - * interrupts handling code. - * - @p IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE - * thread. Usually there is no need to change this value unless inserting - * code in the IDLE thread hook macro. - * - @p CORTEX_BASEPRI_KERNEL, this is the @p BASEPRI value for the kernel lock - * code. Code running at higher priority levels must not invoke any OS API. - * This setting is specific to the ARMv7-M architecture. - * - @p CORTEX_PRIORITY_SYSTICK, priority of the SYSTICK handler. - * - @p CORTEX_PRIORITY_SVCALL, priority of the SVCALL handler. - * - @p CORTEX_PRIORITY_PENDSV, priority of the PENDSV handler. - * - @p CORTEX_ENABLE_WFI_IDLE, if set to @p TRUE enables the use of the - * @p wfi instruction from within the idle loop. This is defaulted to - * FALSE because it can create problems with some debuggers. Setting this - * option to TRUE reduces the system power requirements. - * . - * @ingroup ARMCMx - */ - -/** - * @defgroup ARMCMx_CORE Core Port Implementation - * @brief ARM Cortex-Mx specific port code, structures and macros. - * - * @ingroup ARMCMx - */ - -/** - * @defgroup ARMCMx_V6M_CORE ARMv6-M Specific Implementation - * @brief ARMv6-M specific port code, structures and macros. - * - * @ingroup ARMCMx_CORE - */ - -/** - * @defgroup ARMCMx_V7M_CORE ARMv7-M Specific Implementation - * @brief ARMv7-M specific port code, structures and macros. - * - * @ingroup ARMCMx_CORE - */ - -/** - * @defgroup ARMCMx_STARTUP Startup Support - * @brief ARM Cortex-Mx startup code support. - * @details ChibiOS/RT provides its own generic startup file for the ARM - * Cortex-Mx port. - * Of course it is not mandatory to use it but care should be taken about the - * startup phase details. - * - *

      Startup Process

      - * The startup process, as implemented, is the following: - * -# Interrupts are masked globally. - * -# The two stacks are initialized by assigning them the sizes defined in the - * linker script (usually named @p ch.ld). Stack areas are allocated from - * the highest RAM location downward. - * -# An early initialization routine @p hwinit0 is invoked, if the symbol is - * not defined then an empty default routine is executed (weak symbol). - * -# DATA and BSS segments are initialized. - * -# The CPU state is switched to Privileged and the PSP stack is used. - * -# A late initialization routine @p hwinit1 is invoked, if the symbol not - * defined then an empty default routine is executed (weak symbol).
      - * This late initialization function is also the proper place for a - * @a bootloader, if your application requires one. - * -# The @p main() function is invoked with the parameters @p argc and @p argv - * set to zero. - * -# Should the @p main() function return a branch is performed to the weak - * symbol MainExitHandler. The default code is an endless empty loop. - * . - *

      Expected linker symbols

      - * The startup code starts at the symbol @p ResetHandler and expects the - * following symbols to be defined in the linker script: - * - @p __ram_end__ RAM end location +1. - * - @p __main_stack_size__ Exception stack size. - * - @p __process_stack_size__ Process stack size. This is the stack area used - * by the @p main() function. - * - @p _textdata address of the data segment source read only data. - * - @p _data data segment start location. - * - @p _edata data segment end location +1. - * - @p _bss_start BSS start location. - * - @p _bss_end BSS end location +1. - * . - * @ingroup ARMCMx - */ - -/** - * @defgroup ARMCMx_NVIC NVIC Support - * @brief ARM Cortex-Mx NVIC support. - * - * @ingroup ARMCMx - */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/AVR/chcore.c b/ChibiOS_2.0.8/os/ports/GCC/AVR/chcore.c deleted file mode 100644 index 5e4fd1c..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/AVR/chcore.c +++ /dev/null @@ -1,143 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AVR/chcore.c - * @brief AVR architecture port code. - * - * @addtogroup AVR_CORE - * @{ - */ - -#include "ch.h" - -/** - * @brief Performs a context switch between two threads. - * @details This is the most critical code in any port, this function - * is responsible for the context switch between 2 threads. - * @note The implementation of this code affects directly the context - * switch performance so optimize here as much as you can. - * @note The function is declared as a weak symbol, it is possible to - * redefine it in your application code. - * - * @param[in] ntp the thread to be switched in - * @param[in] otp the thread to be switched out - */ -#if !defined(__DOXYGEN__) -__attribute__((naked, weak)) -#endif -void port_switch(Thread *ntp, Thread *otp) { - - asm volatile ("push r2"); - asm volatile ("push r3"); - asm volatile ("push r4"); - asm volatile ("push r5"); - asm volatile ("push r6"); - asm volatile ("push r7"); -#ifndef CH_CURRP_REGISTER_CACHE - asm volatile ("push r8"); - asm volatile ("push r9"); -#endif - asm volatile ("push r10"); - asm volatile ("push r11"); - asm volatile ("push r12"); - asm volatile ("push r13"); - asm volatile ("push r14"); - asm volatile ("push r15"); - asm volatile ("push r16"); - asm volatile ("push r17"); - asm volatile ("push r28"); - asm volatile ("push r29"); - - asm volatile ("movw r30, r22"); - asm volatile ("in r0, 0x3d"); - asm volatile ("std Z+5, r0"); - asm volatile ("in r0, 0x3e"); - asm volatile ("std Z+6, r0"); - - asm volatile ("movw r30, r24"); - asm volatile ("ldd r0, Z+5"); - asm volatile ("out 0x3d, r0"); - asm volatile ("ldd r0, Z+6"); - asm volatile ("out 0x3e, r0"); - - asm volatile ("pop r29"); - asm volatile ("pop r28"); - asm volatile ("pop r17"); - asm volatile ("pop r16"); - asm volatile ("pop r15"); - asm volatile ("pop r14"); - asm volatile ("pop r13"); - asm volatile ("pop r12"); - asm volatile ("pop r11"); - asm volatile ("pop r10"); -#ifndef CH_CURRP_REGISTER_CACHE - asm volatile ("pop r9"); - asm volatile ("pop r8"); -#endif - asm volatile ("pop r7"); - asm volatile ("pop r6"); - asm volatile ("pop r5"); - asm volatile ("pop r4"); - asm volatile ("pop r3"); - asm volatile ("pop r2"); - asm volatile ("ret"); -} - -/** - * @brief Halts the system. - * @details This function is invoked by the operating system when an - * unrecoverable error is detected (as example because a programming - * error in the application code that triggers an assertion while in - * debug mode). - * @note The function is declared as a weak symbol, it is possible to - * redefine it in your application code. - */ -#if !defined(__DOXYGEN__) -__attribute__((weak)) -#endif -void port_halt(void) { - - port_disable(); - while (TRUE) { - } -} - -/** - * @brief Start a thread by invoking its work function. - * @details If the work function returns @p chThdExit() is automatically - * invoked. - */ -void _port_thread_start(void) { - - asm volatile ("sei"); - asm volatile ("movw r24, r4"); - asm volatile ("movw r30, r2"); - asm volatile ("icall"); - asm volatile ("call chThdExit"); -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/AVR/chcore.h b/ChibiOS_2.0.8/os/ports/GCC/AVR/chcore.h deleted file mode 100644 index 4a9c04c..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/AVR/chcore.h +++ /dev/null @@ -1,323 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AVR/chcore.h - * @brief AVR architecture port macros and structures. - * - * @addtogroup AVR_CORE - * @{ - */ - -#ifndef _CHCORE_H_ -#define _CHCORE_H_ - -#include -#include - -/** - * @brief If enabled allows the idle thread to enter a low power mode. - */ -#ifndef ENABLE_WFI_IDLE -#define ENABLE_WFI_IDLE 0 -#endif - -/** - * @brief Macro defining the AVR architecture. - */ -#define CH_ARCHITECTURE_AVR - -/** - * @brief Name of the implemented architecture. - */ -#define CH_ARCHITECTURE_NAME "AVR" - -/** - * @brief Name of the architecture variant (optional). - */ -#define CH_CORE_VARIANT_NAME "MegaAVR" - -/** - * @brief 8 bits stack and memory alignment enforcement. - */ -typedef uint8_t stkalign_t; - -#if !defined(__DOXYGEN__) -/** - * @brief Interrupt saved context. - * @details This structure represents the stack frame saved during a - * preemption-capable interrupt handler. - * @note The field @p _next is not part of the context, it represents the - * offset of the structure relative to the stack pointer. - */ -struct extctx { - uint8_t _next; - uint8_t r31; - uint8_t r30; - uint8_t r27; - uint8_t r26; - uint8_t r25; - uint8_t r24; - uint8_t r23; - uint8_t r22; - uint8_t r21; - uint8_t r20; - uint8_t r19; - uint8_t r18; - uint8_t sr; - uint8_t r1; - uint8_t r0; - uint16_t pc; -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief System saved context. - * @details This structure represents the inner stack frame during a context - * switching. - * @note The field @p _next is not part of the context, it represents the - * offset of the structure relative to the stack pointer. - */ -struct intctx { - uint8_t _next; - uint8_t r29; - uint8_t r28; - uint8_t r17; - uint8_t r16; - uint8_t r15; - uint8_t r14; - uint8_t r13; - uint8_t r12; - uint8_t r11; - uint8_t r10; -#ifndef CH_CURRP_REGISTER_CACHE - uint8_t r9; - uint8_t r8; -#endif - uint8_t r7; - uint8_t r6; - uint8_t r5; - uint8_t r4; - uint8_t r3; - uint8_t r2; - uint8_t pcl; - uint8_t pch; -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief Platform dependent part of the @p Thread structure. - * @details In the AVR port this structure just holds a pointer to the - * @p intctx structure representing the stack pointer at the time - * of the context switch. - */ -struct context { - struct intctx *sp; -}; -#endif - -/** - * @brief Platform dependent part of the @p chThdInit() API. - * @details This code usually setup the context switching frame represented - * by an @p intctx structure. - */ -#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \ - tp->p_ctx.sp = (struct intctx*)((uint8_t *)workspace + wsize - \ - sizeof(struct intctx)); \ - tp->p_ctx.sp->r2 = (int)pf; \ - tp->p_ctx.sp->r3 = (int)pf >> 8; \ - tp->p_ctx.sp->r4 = (int)arg; \ - tp->p_ctx.sp->r5 = (int)arg >> 8; \ - tp->p_ctx.sp->pcl = (int)_port_thread_start >> 8; \ - tp->p_ctx.sp->pch = (int)_port_thread_start; \ -} - -/** - * @brief Stack size for the system idle thread. - * @details This size depends on the idle thread implementation, usually - * the idle thread should take no more space than those reserved - * by @p INT_REQUIRED_STACK. - * @note In this port it is set to 8. - */ -#ifndef IDLE_THREAD_STACK_SIZE -#define IDLE_THREAD_STACK_SIZE 8 -#endif - -/** - * @brief Per-thread stack overhead for interrupts servicing. - * @details This constant is used in the calculation of the correct working - * area size. - * This value can be zero on those architecture where there is a - * separate interrupt stack and the stack space between @p intctx and - * @p extctx is known to be zero. - * @note In this port the default is 32 bytes per thread. - */ -#ifndef INT_REQUIRED_STACK -#define INT_REQUIRED_STACK 32 -#endif - -/** - * @brief Enforces a correct alignment for a stack area size value. - */ -#define STACK_ALIGN(n) ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1) - -/** - * @brief Computes the thread working area global size. - */ -#define THD_WA_SIZE(n) STACK_ALIGN(sizeof(Thread) + \ - (sizeof(struct intctx) - 1) + \ - (sizeof(struct extctx) - 1) + \ - (n) + (INT_REQUIRED_STACK)) - -/** - * @brief Static working area allocation. - * @details This macro is used to allocate a static thread working area - * aligned as both position and size. - */ -#define WORKING_AREA(s, n) stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]; - -/** - * @brief IRQ prologue code. - * @details This macro must be inserted at the start of all IRQ handlers - * enabled to invoke system APIs. - * @note This code tricks the compiler to save all the specified registers - * by "touching" them. - */ -#define PORT_IRQ_PROLOGUE() { \ - asm ("" : : : "r18", "r19", "r20", "r21", "r22", "r23", "r24", \ - "r25", "r26", "r27", "r30", "r31"); \ -} - -/** - * @brief IRQ epilogue code. - * @details This macro must be inserted at the end of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_EPILOGUE() { \ - if (chSchIsRescRequiredExI()) \ - chSchDoRescheduleI(); \ -} - -/** - * @brief IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_IRQ_HANDLER(id) ISR(id) - -/** - * @brief Port-related initialization code. - * @note This function is empty in this port. - */ -#define port_init() - -/** - * @brief Kernel-lock action. - * @details Usually this function just disables interrupts but may perform more - * actions. - * @note Implemented as global interrupt disable. - */ -#define port_lock() asm volatile ("cli" : : : "memory") - -/** - * @brief Kernel-unlock action. - * @details Usually this function just disables interrupts but may perform more - * actions. - * @note Implemented as global interrupt enable. - */ -#define port_unlock() asm volatile ("sei" : : : "memory") - -/** - * @brief Kernel-lock action from an interrupt handler. - * @details This function is invoked before invoking I-class APIs from - * interrupt handlers. The implementation is architecture dependent, - * in its simplest form it is void. - * @note This function is empty in this port. - */ -#define port_lock_from_isr() - -/** - * @brief Kernel-unlock action from an interrupt handler. - * @details This function is invoked after invoking I-class APIs from interrupt - * handlers. The implementation is architecture dependent, in its - * simplest form it is void. - * @note This function is empty in this port. - */ -#define port_unlock_from_isr() - -/** - * @brief Disables all the interrupt sources. - * @note Of course non maskable interrupt sources are not included. - * @note Implemented as global interrupt disable. - */ -#define port_disable() asm volatile ("cli" : : : "memory") - -/** - * @brief Disables the interrupt sources below kernel-level priority. - * @note Interrupt sources above kernel level remains enabled. - * @note Same as @p port_disable() in this port, there is no difference - * between the two states. - */ -#define port_suspend() asm volatile ("cli" : : : "memory") - -/** - * @brief Enables all the interrupt sources. - * @note Implemented as global interrupt enable. - */ -#define port_enable() asm volatile ("sei" : : : "memory") - -/** - * @brief Enters an architecture-dependent IRQ-waiting mode. - * @details The function is meant to return when an interrupt becomes pending. - * The simplest implementation is an empty function or macro but this - * would not take advantage of architecture-specific power saving - * modes. - * @note This port function is implemented as inlined code for performance - * reasons. - */ -#if ENABLE_WFI_IDLE != 0 -#define port_wait_for_interrupt() { \ - asm volatile ("sleep" : : : "memory"); \ -} -#else -#define port_wait_for_interrupt() -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void port_switch(Thread *ntp, Thread *otp); - void port_halt(void); - void _port_thread_start(void); -#ifdef __cplusplus -} -#endif - -#endif /* _CHCORE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/AVR/chtypes.h b/ChibiOS_2.0.8/os/ports/GCC/AVR/chtypes.h deleted file mode 100644 index 3fa975e..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/AVR/chtypes.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file AVR/chtypes.h - * @brief AVR architecture port system types. - * - * @addtogroup AVR_CORE - * @{ - */ - -#ifndef _CHTYPES_H_ -#define _CHTYPES_H_ - -#define __need_NULL -#define __need_size_t -#define __need_ptrdiff_t -#include - -#if !defined(_STDINT_H) && !defined(__STDINT_H_) -#include -#endif - -typedef int8_t bool_t; /**< Fast boolean type. */ -typedef uint8_t tmode_t; /**< Thread flags. */ -typedef uint8_t tstate_t; /**< Thread state. */ -typedef uint8_t trefs_t; /**< Thread references counter. */ -typedef uint8_t tprio_t; /**< Thread priority. */ -typedef int16_t msg_t; /**< Inter-thread message. */ -typedef uint8_t eventid_t; /**< Event Id. */ -typedef uint8_t eventmask_t; /**< Events mask. */ -typedef uint16_t systime_t; /**< System time. */ -typedef int8_t cnt_t; /**< Resources counter. */ - -/** - * @brief Inline function modifier. - */ -#define INLINE inline - -/** - * @brief ROM constant modifier. - * @note It is set to use the "const" keyword in this port. - */ -#define ROMCONST const - -/** - * @brief Packed structure modifier (within). - * @note It uses the "packed" GCC attribute. - */ -#define PACK_STRUCT_STRUCT __attribute__((packed)) - -/** - * @brief Packed structure modifier (before). - * @note Empty in this port. - */ -#define PACK_STRUCT_BEGIN - -/** - * @brief Packed structure modifier (after). - * @note Empty in this port. - */ -#define PACK_STRUCT_END - -#endif /* _CHTYPES_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/AVR/port.dox b/ChibiOS_2.0.8/os/ports/GCC/AVR/port.dox deleted file mode 100644 index 7c1816d..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/AVR/port.dox +++ /dev/null @@ -1,89 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup AVR MegaAVR - * @details AVR port details. This section how the ChibiOS/RT features are - * implemented on this architecture. - * - * @section AVR_STATES Mapping of the System States in the AVR port - * The ChibiOS/RT logical @ref system_states are mapped as follow in the AVR - * port: - * - Init. This state is represented by the startup code and the - * initialization code before @p chSysInit() is executed. It has not a - * special hardware state associated. - * - Normal. This is the state the system has after executing - * @p chSysInit(). Interrupts are enabled. - * - Suspended. Interrupts are disabled. - * - Disabled. Interrupts are disabled. This state is equivalent to the - * Suspended state because there are no fast interrupts in this architecture. - * - Sleep. This state is entered with the execution of the specific - * instruction @p sleep. - * - S-Locked. Interrupts are disabled. - * - I-Locked. This state is equivalent to the SRI state, the - * @p chSysLockI() and @p chSysUnlockI() APIs do nothing (still use them in - * order to formally change state because this may change). - * - Serving Regular Interrupt. Normal interrupt service code. - * - Serving Fast Interrupt. Not present in this architecture. - * - Serving Non-Maskable Interrupt. Not present in this architecture. - * - Halted. Implemented as an infinite loop with interrupts disabled. - * . - * @section AVR_NOTES The AVR port notes - * - The AVR does not have a dedicated interrupt stack, make sure to reserve - * enough stack space for interrupts in each thread stack. This can be done - * by modifying the @p INT_REQUIRED_STACK macro into - * ./ports/AVR/chcore.h. - * . - * @ingroup ports - */ - -/** - * @defgroup AVR_CONF Configuration Options - * @brief AVR Configuration Options. - * @details The AVR port allows some architecture-specific configurations - * settings that can be overridden by redefining them in @p chconf.h. - * Usually there is no need to change the default values. - * - @p INT_REQUIRED_STACK, this value represent the amount of stack space - * used by the interrupt handlers.
      - * The default for this value is @p 32, this space is allocated for each - * thread so be careful in order to not waste precious RAM space.
      - * The default value is set into ./os/ports/GCC/AVR/chcore.h. - * - @p IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE - * thread. Usually there is no need to change this value unless inserting - * code in the IDLE thread hook macro. - * . - * @ingroup AVR - */ - -/** - * @defgroup AVR_CORE AVR Core Implementation - * @brief AVR specific port code, structures and macros. - * - * @ingroup AVR - * @file AVR/chtypes.h Port types. - * @file AVR/chcore.h Port related structures and macros. - * @file AVR/chcore.c Port related code. - */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/AVR/port.mk b/ChibiOS_2.0.8/os/ports/GCC/AVR/port.mk deleted file mode 100644 index 5cb2e0d..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/AVR/port.mk +++ /dev/null @@ -1,6 +0,0 @@ -# List of the ChibiOS/RT AVR port files. -PORTSRC = ${CHIBIOS}/os/ports/GCC/AVR/chcore.c - -PORTASM = - -PORTINC = ${CHIBIOS}/os/ports/GCC/AVR diff --git a/ChibiOS_2.0.8/os/ports/GCC/MSP430/chcore.c b/ChibiOS_2.0.8/os/ports/GCC/MSP430/chcore.c deleted file mode 100644 index 0938b8a..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/MSP430/chcore.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file MSP430/chcore.c - * @brief MSP430 architecture port code. - * - * @addtogroup MSP430_CORE - * @{ - */ - -#include "ch.h" - -/** - * @brief Performs a context switch between two threads. - * @details This is the most critical code in any port, this function - * is responsible for the context switch between 2 threads. - * @note The implementation of this code affects directly the context - * switch performance so optimize here as much as you can. - * @note The function is declared as a weak symbol, it is possible to - * redefine it in your application code. - * - * @param[in] ntp the thread to be switched in - * @param[in] otp the thread to be switched out - */ -#if !defined(__DOXYGEN__) -__attribute__((naked, weak)) -#endif -void port_switch(Thread *ntp, Thread *otp) { - register struct intctx *sp asm("r1"); - - asm volatile ("push r11 \n\t" \ - "push r10 \n\t" \ - "push r9 \n\t" \ - "push r8 \n\t" \ - "push r7 \n\t" \ - "push r6 \n\t" \ - "push r5 \n\t" \ - "push r4" : : : "memory"); - otp->p_ctx.sp = sp; - sp = ntp->p_ctx.sp; - asm volatile ("pop r4 \n\t" \ - "pop r5 \n\t" \ - "pop r6 \n\t" \ - "pop r7 \n\t" \ - "pop r8 \n\t" \ - "pop r9 \n\t" \ - "pop r10 \n\t" \ - "pop r11 \n\t" \ - "ret" : : "r" (sp) : "memory"); -} - -/** - * @brief Halts the system. - * @details This function is invoked by the operating system when an - * unrecoverable error is detected (as example because a programming - * error in the application code that triggers an assertion while in - * debug mode). - * @note The function is declared as a weak symbol, it is possible to - * redefine it in your application code. - */ -#if !defined(__DOXYGEN__) -__attribute__((weak)) -#endif -void port_halt(void) { - - port_disable(); - while (TRUE) { - } -} - -/** - * @brief Start a thread by invoking its work function. - * @details If the work function returns @p chThdExit() is automatically - * invoked. - */ -void _port_thread_start(void) { - - asm volatile ("eint \n\t" \ - "mov r11, r15 \n\t" \ - "call r10 \n\t" \ - "call #chThdExit"); -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/MSP430/chcore.h b/ChibiOS_2.0.8/os/ports/GCC/MSP430/chcore.h deleted file mode 100644 index d89d994..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/MSP430/chcore.h +++ /dev/null @@ -1,295 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file MSP430/chcore.h - * @brief MSP430 architecture port macros and structures. - * - * @addtogroup MSP430_CORE - * @{ - */ - -#ifndef _CHCORE_H_ -#define _CHCORE_H_ - -#include -#include - -/** - * @brief Enables the use of a wait state in the idle thread loop. - */ -#ifndef ENABLE_WFI_IDLE -#define ENABLE_WFI_IDLE 0 -#endif - -/** - * @brief Macro defining the MSP430 architecture. - */ -#define CH_ARCHITECTURE_MSP430 - -/** - * @brief Name of the implemented architecture. - */ -#define CH_ARCHITECTURE_NAME "MSP430" - -/** - * @brief Name of the architecture variant (optional). - */ -#define CH_CORE_VARIANT_NAME "MSP430" - -/** - * @brief 16 bits stack and memory alignment enforcement. - */ -typedef uint16_t stkalign_t; - -/** - * @brief Generic MSP430 register. - */ -typedef void *regmsp_t; - -#if !defined(__DOXYGEN__) -/** - * @brief Interrupt saved context. - * @details This structure represents the stack frame saved during a - * preemption-capable interrupt handler. - */ -struct extctx { - regmsp_t r12; - regmsp_t r13; - regmsp_t r14; - regmsp_t r15; - regmsp_t sr; - regmsp_t pc; -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief System saved context. - * @details This structure represents the inner stack frame during a context - * switching. - */ -struct intctx { - regmsp_t r4; - regmsp_t r5; - regmsp_t r6; - regmsp_t r7; - regmsp_t r8; - regmsp_t r9; - regmsp_t r10; - regmsp_t r11; - regmsp_t pc; -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief Platform dependent part of the @p Thread structure. - * @details This structure usually contains just the saved stack pointer - * defined as a pointer to a @p intctx structure. - */ -struct context { - struct intctx *sp; -}; -#endif - -/** - * @brief Platform dependent part of the @p chThdInit() API. - * @details This code usually setup the context switching frame represented - * by an @p intctx structure. - */ -#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \ - tp->p_ctx.sp = (struct intctx *)((uint8_t *)workspace + \ - wsize - \ - sizeof(struct intctx)); \ - tp->p_ctx.sp->r10 = pf; \ - tp->p_ctx.sp->r11 = arg; \ - tp->p_ctx.sp->pc = _port_thread_start; \ -} - -/** - * @brief Stack size for the system idle thread. - * @details This size depends on the idle thread implementation, usually - * the idle thread should take no more space than those reserved - * by @p INT_REQUIRED_STACK. - */ -#ifndef IDLE_THREAD_STACK_SIZE -#define IDLE_THREAD_STACK_SIZE 0 -#endif - -/** - * @brief Per-thread stack overhead for interrupts servicing. - * @details This constant is used in the calculation of the correct working - * area size. - * This value can be zero on those architecture where there is a - * separate interrupt stack and the stack space between @p intctx and - * @p extctx is known to be zero. - * @note In this port the default is 32 bytes per thread. - */ -#ifndef INT_REQUIRED_STACK -#define INT_REQUIRED_STACK 32 -#endif - -/** - * @brief Enforces a correct alignment for a stack area size value. - */ -#define STACK_ALIGN(n) ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1) - -/** - * @brief Computes the thread working area global size. - */ -#define THD_WA_SIZE(n) STACK_ALIGN(sizeof(Thread) + \ - sizeof(struct intctx) + \ - sizeof(struct extctx) + \ - (n) + (INT_REQUIRED_STACK)) - -/** - * @brief Static working area allocation. - * @details This macro is used to allocate a static thread working area - * aligned as both position and size. - */ -#define WORKING_AREA(s, n) stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]; - -/** - * @brief IRQ prologue code. - * @details This macro must be inserted at the start of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_PROLOGUE() - -/** - * @brief IRQ epilogue code. - * @details This macro must be inserted at the end of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_EPILOGUE() { \ - if (chSchIsRescRequiredExI()) \ - chSchDoRescheduleI(); \ -} - -/** - * @brief IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_IRQ_HANDLER(id) interrupt(id) _vect_##id(void) - -/** - * @brief Port-related initialization code. - * @note This function is empty in this port. - */ -#define port_init() - -/** - * @brief Kernel-lock action. - * @details Usually this function just disables interrupts but may perform more - * actions. - * @note Implemented as global interrupt disable. - */ -#define port_lock() asm volatile ("dint" : : : "memory") - -/** - * @brief Kernel-unlock action. - * @details Usually this function just disables interrupts but may perform more - * actions. - * @note Implemented as global interrupt enable. - */ -#define port_unlock() asm volatile ("eint" : : : "memory") - -/** - * @brief Kernel-lock action from an interrupt handler. - * @details This function is invoked before invoking I-class APIs from - * interrupt handlers. The implementation is architecture dependent, - * in its simplest form it is void. - * @note This function is empty in this port. - */ -#define port_lock_from_isr() - -/** - * @brief Kernel-unlock action from an interrupt handler. - * @details This function is invoked after invoking I-class APIs from interrupt - * handlers. The implementation is architecture dependent, in its - * simplest form it is void. - * @note This function is empty in this port. - */ -#define port_unlock_from_isr() - -/** - * @brief Disables all the interrupt sources. - * @note Of course non maskable interrupt sources are not included. - * @note Implemented as global interrupt disable. - */ -#define port_disable() asm volatile ("dint" : : : "memory") - -/** - * @brief Disables the interrupt sources below kernel-level priority. - * @note Interrupt sources above kernel level remains enabled. - * @note Same as @p port_disable() in this port, there is no difference - * between the two states. - */ -#define port_suspend() asm volatile ("dint" : : : "memory") - -/** - * @brief Enables all the interrupt sources. - * @note Implemented as global interrupt enable. - */ -#define port_enable() asm volatile ("eint" : : : "memory") - -/** - * @brief Enters an architecture-dependent IRQ-waiting mode. - * @details The function is meant to return when an interrupt becomes pending. - * The simplest implementation is an empty function or macro but this - * would not take advantage of architecture-specific power saving - * modes. - * @note This port function is implemented as inlined code for performance - * reasons. - * @note The port code does not define a low power mode, this macro has to - * be defined externally. The default implementation is a "nop", not - * a real low power mode. - */ -#if ENABLE_WFI_IDLE != 0 -#ifndef port_wait_for_interrupt -#define port_wait_for_interrupt() { \ - asm volatile ("nop" : : : "memory"); \ -} -#endif -#else -#define port_wait_for_interrupt() -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void port_switch(Thread *ntp, Thread *otp); - void port_halt(void); - void _port_thread_start(void); -#ifdef __cplusplus -} -#endif - -#endif /* _CHCORE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/MSP430/chtypes.h b/ChibiOS_2.0.8/os/ports/GCC/MSP430/chtypes.h deleted file mode 100644 index 6bc72a0..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/MSP430/chtypes.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file MSP430/chtypes.h - * @brief MSP430 architecture port system types. - * - * @addtogroup MSP430_CORE - * @{ - */ - -#ifndef _CHTYPES_H_ -#define _CHTYPES_H_ - -#define __need_NULL -#define __need_size_t -#define __need_ptrdiff_t -#include - -#if !defined(_STDINT_H) && !defined(__STDINT_H_) -#include -#endif - -typedef int16_t bool_t; /**< Fast boolean type. */ -typedef uint8_t tmode_t; /**< Thread flags. */ -typedef uint8_t tstate_t; /**< Thread state. */ -typedef uint8_t trefs_t; /**< Thread references counter. */ -typedef uint16_t tprio_t; /**< Thread priority. */ -typedef int16_t msg_t; /**< Inter-thread message. */ -typedef int16_t eventid_t; /**< Event Id. */ -typedef uint16_t eventmask_t; /**< Events mask. */ -typedef uint16_t systime_t; /**< System time. */ -typedef int16_t cnt_t; /**< Resources counter. */ - -/** - * @brief Inline function modifier. - */ -#define INLINE inline - -/** - * @brief ROM constant modifier. - * @note It is set to use the "const" keyword in this port. - */ -#define ROMCONST const - -/** - * @brief Packed structure modifier (within). - * @note It uses the "packed" GCC attribute. - */ -#define PACK_STRUCT_STRUCT __attribute__((packed)) - -/** - * @brief Packed structure modifier (before). - * @note Empty in this port. - */ -#define PACK_STRUCT_BEGIN - -/** - * @brief Packed structure modifier (after). - * @note Empty in this port. - */ -#define PACK_STRUCT_END - -#endif /* _CHTYPES_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/MSP430/port.dox b/ChibiOS_2.0.8/os/ports/GCC/MSP430/port.dox deleted file mode 100644 index f85cfcb..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/MSP430/port.dox +++ /dev/null @@ -1,95 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup MSP430 MSP430 - * @details MSP430 port details. This section how the ChibiOS/RT features are - * implemented on this architecture. - * - * @section MSP430_STATES Mapping of the System States in the MSP430 port - * The ChibiOS/RT logical @ref system_states are mapped as follow in the MSP430 - * port: - * - Init. This state is represented by the startup code and the - * initialization code before @p chSysInit() is executed. It has not a - * special hardware state associated. - * - Normal. This is the state the system has after executing - * @p chSysInit(). Interrupts are enabled. - * - Suspended. Interrupts are disabled. - * - Disabled. Interrupts are disabled. This state is equivalent to the - * Suspended state because there are no fast interrupts in this architecture. - * - Sleep. Not yet implemented. - * - S-Locked. Interrupts are disabled. - * - I-Locked. This state is equivalent to the SRI state, the - * @p chSysLockI() and @p chSysUnlockI() APIs do nothing (still use them in - * order to formally change state because this may change). - * - Serving Regular Interrupt. Normal interrupt service code. - * - Serving Fast Interrupt. Not present in this architecture. - * - Serving Non-Maskable Interrupt. The MSP430 has several non - * maskable interrupt sources that can be associated to this state. - * - Halted. Implemented as an infinite loop with interrupts disabled. - * . - * @section MSP430_NOTES The MSP430 port notes - * - The MSP430 does not have a dedicated interrupt stack, make sure to reserve - * enough stack space for interrupts in each thread stack. This can be done - * by modifying the @p INT_REQUIRED_STACK macro into - * ./ports/MSP430/chcore.h. - * - The state of the hardware multiplier is not saved in the thread context, - * make sure to use it in Suspended state (interrupts masked). - * - The port code does not define the switch to a low power mode for the - * idle thread because the MSP430 has several low power modes. You can - * select the proper low power mode for you application by defining the - * macro @p port_wait_for_interrupt(). - * . - * @ingroup ports - */ - -/** - * @defgroup MSP430_CONF Configuration Options - * @brief MSP430 Configuration Options. - * @details The MSP430 port allows some architecture-specific configurations - * settings that can be overridden by redefining them in @p chconf.h. - * Usually there is no need to change the default values. - * - @p INT_REQUIRED_STACK, this value represent the amount of stack space - * used by the interrupt handlers.
      - * The default for this value is @p 32, this space is allocated for each - * thread so be careful in order to not waste precious RAM space.
      - * The default value is set into ./os/ports/GCC/MSP430/chcore.h. - * - @p IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE - * thread. Usually there is no need to change this value unless inserting - * code in the IDLE thread hook macro. - * . - * @ingroup MSP430 - */ - -/** - * @defgroup MSP430_CORE Core Port Implementation - * @brief MSP430 specific port code, structures and macros. - * - * @ingroup MSP430 - * @file MSP430/chtypes.h Port types. - * @file MSP430/chcore.h Port related structures and macros. - * @file MSP430/chcore.c Port related code. - */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/MSP430/port.mk b/ChibiOS_2.0.8/os/ports/GCC/MSP430/port.mk deleted file mode 100644 index 88ec642..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/MSP430/port.mk +++ /dev/null @@ -1,6 +0,0 @@ -# List of the ChibiOS/RT MSP430 port files. -PORTSRC = ${CHIBIOS}/os/ports/GCC/MSP430/chcore.c - -PORTASM = - -PORTINC = ${CHIBIOS}/os/ports/GCC/MSP430 diff --git a/ChibiOS_2.0.8/os/ports/GCC/MSP430/rules.mk b/ChibiOS_2.0.8/os/ports/GCC/MSP430/rules.mk deleted file mode 100644 index 393340f..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/MSP430/rules.mk +++ /dev/null @@ -1,87 +0,0 @@ -# MSP430 makefile scripts and rules. - -# Automatic compiler options -OPT = $(USE_OPT) -CPPOPT = $(USE_CPPOPT) -ifeq ($(USE_CURRP_CACHING),yes) - OPT += -ffixed-r7 -DCH_CURRP_REGISTER_CACHE='"r7"' -endif -ifeq ($(USE_LINK_GC),yes) - OPT += -ffunction-sections -fdata-sections -endif - -# Source files groups -SRC = $(CSRC)$(CPPSRC) - -# Object files groups -COBJS = $(CSRC:.c=.o) -CPPOBJS = $(CPPSRC:.cpp=.o) -ASMOBJS = $(ASMSRC:.s=.o) -OBJS = $(ASMOBJS) $(COBJS) $(CPPOBJS) - -# Paths -IINCDIR = $(patsubst %,-I%,$(INCDIR) $(DINCDIR) $(UINCDIR)) -LLIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) - -# Macros -DEFS = $(DDEFS) $(UDEFS) -ADEFS = $(DADEFS) $(UADEFS) - -# Libs -LIBS = $(DLIBS) $(ULIBS) - -MCFLAGS = -mmcu=$(MCU) -ODFLAGS = -x --syms -ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(<:.s=.lst) $(ADEFS) -CPFLAGS = $(MCFLAGS) $(OPT) $(WARN) -Wa,-alms=$(<:.c=.lst) $(DEFS) -ifeq ($(LINK_GC),yes) - LDFLAGS = $(MCFLAGS) -T$(LDSCRIPT) -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch,--gc-sections $(LLIBDIR) -else - LDFLAGS = $(MCFLAGS) -T$(LDSCRIPT) -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch $(LLIBDIR) -endif - -# Generate dependency information -CPFLAGS += -MD -MP -MF .dep/$(@F).d - -# -# Makefile rules -# -all: $(OBJS) $(PROJECT).elf $(PROJECT).hex $(PROJECT).bin $(PROJECT).dmp - -$(CPPOBJS) : %.o : %.cpp - @echo - $(CPPC) -c $(CPPFLAGS) -I . $(IINCDIR) $< -o $@ - -$(COBJS) : %.o : %.c - @echo - $(CC) -c $(CPFLAGS) -I . $(IINCDIR) $< -o $@ - -$(ASMOBJS) : %.o : %.s - @echo - $(AS) -c $(ASFLAGS) -I . $(IINCDIR) $< -o $@ - -%elf: $(OBJS) - @echo - $(LD) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ - -%hex: %elf - $(HEX) $< $@ - -%bin: %elf - $(BIN) $< $@ - -%dmp: %elf - $(OD) $(ODFLAGS) $< > $@ - -clean: - -rm -f $(OBJS) - -rm -f $(CSRC:.c=.lst) $(CPPSRC:.cpp=.lst) $(ASMSRC:.s=.lst) - -rm -f $(PROJECT).elf $(PROJECT).dmp $(PROJECT).map $(PROJECT).hex $(PROJECT).bin - -rm -fR .dep - -# -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - -# *** EOF *** diff --git a/ChibiOS_2.0.8/os/ports/GCC/PPC/SPC56x/ivor.s b/ChibiOS_2.0.8/os/ports/GCC/PPC/SPC56x/ivor.s deleted file mode 100644 index 1caf567..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/PPC/SPC56x/ivor.s +++ /dev/null @@ -1,181 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file PPC/ivor.s - * @brief PowerPC IVORx handlers. - * - * @addtogroup PPC_CORE - * @{ - */ -/** @cond never */ - - /* - * INTC registers address. - */ - .equ INTC_IACKR, 0xfff48010 - .equ INTC_EOIR, 0xfff48018 - - .section .handlers - - /* - * IVOR10 handler (Book-E decrementer). - */ - .align 4 - .globl IVOR10 -IVOR10: - /* Creation of the external stack frame (extctx structure).*/ - stwu %sp, -80(%sp) /* Size of the extctx structure.*/ - stw %r0, 32(%sp) /* Saves GPR0. */ - mfSRR0 %r0 - stw %r0, 8(%sp) /* Saves PC. */ - mfSRR1 %r0 - stw %r0, 12(%sp) /* Saves MSR. */ - mfCR %r0 - stw %r0, 16(%sp) /* Saves CR. */ - mfLR %r0 - stw %r0, 20(%sp) /* Saves LR. */ - mfCTR %r0 - stw %r0, 24(%sp) /* Saves CTR. */ - mfXER %r0 - stw %r0, 28(%sp) /* Saves XER. */ - stw %r3, 36(%sp) /* Saves GPR3...GPR12. */ - stw %r4, 40(%sp) - stw %r5, 44(%sp) - stw %r6, 48(%sp) - stw %r7, 52(%sp) - stw %r8, 56(%sp) - stw %r9, 60(%sp) - stw %r10, 64(%sp) - stw %r11, 68(%sp) - stw %r12, 72(%sp) - - /* Reset DIE bit in TSR register.*/ - lis %r3, 0x0800 /* DIS bit mask. */ - mtspr 336, %r3 /* TSR register. */ - - /* System tick handler invokation.*/ - bl chSysTimerHandlerI - bl chSchIsRescRequiredExI - cmpli cr0, %r3, 0 - beq cr0, .ctxrestore - bl chSchDoRescheduleI - b .ctxrestore - - /* - * IVOR4 handler (Book-E external interrupt). - */ - .align 4 - .globl IVOR4 -IVOR4: - /* Creation of the external stack frame (extctx structure).*/ - stwu %sp, -80(%sp) /* Size of the extctx structure.*/ - stw %r0, 32(%sp) /* Saves GPR0. */ - mfSRR0 %r0 - stw %r0, 8(%sp) /* Saves PC. */ - mfSRR1 %r0 - stw %r0, 12(%sp) /* Saves MSR. */ - mfCR %r0 - stw %r0, 16(%sp) /* Saves CR. */ - mfLR %r0 - stw %r0, 20(%sp) /* Saves LR. */ - mfCTR %r0 - stw %r0, 24(%sp) /* Saves CTR. */ - mfXER %r0 - stw %r0, 28(%sp) /* Saves XER. */ - stw %r3, 36(%sp) /* Saves GPR3...GPR12. */ - stw %r4, 40(%sp) - stw %r5, 44(%sp) - stw %r6, 48(%sp) - stw %r7, 52(%sp) - stw %r8, 56(%sp) - stw %r9, 60(%sp) - stw %r10, 64(%sp) - stw %r11, 68(%sp) - stw %r12, 72(%sp) - - /* Software vector address from the INTC register.*/ - lis %r3, INTC_IACKR@h - ori %r3, %r3, INTC_IACKR@l /* IACKR register address. */ - lwz %r3, 0(%r3) /* IACKR register value. */ - lwz %r3, 0(%r3) - mtCTR %r3 /* Software handler address. */ - -#if PPC_USE_IRQ_PREEMPTION - /* Allows preemption while executing the software handler.*/ - wrteei 1 -#endif - - /* Exectes the software handler.*/ - bctrl - -#if PPC_USE_IRQ_PREEMPTION - /* Prevents preemption again.*/ - wrteei 0 -#endif - - /* Informs the INTC that the interrupt has been served.*/ - mbar 0 - lis %r3, INTC_EOIR@h - ori %r3, %r3, INTC_EOIR@l - stw %r3, 0(%r3) /* Writing any value should do. */ - - /* Verifies if a reschedule is required.*/ - bl chSchIsRescRequiredExI - cmpli cr0, %r3, 0 - beq cr0, .ctxrestore - bl chSchDoRescheduleI - - /* Context restore.*/ -.ctxrestore: - lwz %r3, 36(%sp) /* Restores GPR3...GPR12. */ - lwz %r4, 40(%sp) - lwz %r5, 44(%sp) - lwz %r6, 48(%sp) - lwz %r7, 52(%sp) - lwz %r8, 56(%sp) - lwz %r9, 60(%sp) - lwz %r10, 64(%sp) - lwz %r11, 68(%sp) - lwz %r12, 72(%sp) - lwz %r0, 8(%sp) - mtSRR0 %r0 /* Restores PC. */ - lwz %r0, 12(%sp) - mtSRR1 %r0 /* Restores MSR. */ - lwz %r0, 16(%sp) - mtCR %r0 /* Restores CR. */ - lwz %r0, 20(%sp) - mtLR %r0 /* Restores LR. */ - lwz %r0, 24(%sp) - mtCTR %r0 /* Restores CTR. */ - lwz %r0, 28(%sp) - mtXER %r0 /* Restores XER. */ - lwz %r0, 32(%sp) /* Restores GPR0. */ - addi %sp, %sp, 80 /* Back to the previous frame. */ - rfi - -/** @endcond */ -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/PPC/SPC56x/vectors.s b/ChibiOS_2.0.8/os/ports/GCC/PPC/SPC56x/vectors.s deleted file mode 100644 index 5c9c33a..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/PPC/SPC56x/vectors.s +++ /dev/null @@ -1,1501 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file PPC/SPC56x/vectors.s - * @brief SPC56x vectors table. - * - * @addtogroup PPC_CORE - * @{ - */ -/** @cond never */ - - /* - * BAM info, SWT off, WTE off, VLE off. - */ - .section .bam - .long 0x005A0000 - .long _boot_address - - /* - * Software vectors table. The vectors are accessed from the IVOR4 - * handler only. In order to declare an interrupt handler just create - * a function withe the same name of a vector, the symbol will - * override the weak symbol declared here. - */ - .section .vectors - .align 4 - .globl _vectors -_vectors: - .long vector0 - .long vector1 - .long vector2 - .long vector3 - .long vector4 - .long vector5 - .long vector6 - .long vector7 - .long vector8 - .long vector9 - .long vector10 - .long vector11 - .long vector12 - .long vector13 - .long vector14 - .long vector15 - .long vector16 - .long vector17 - .long vector18 - .long vector19 - .long vector20 - .long vector21 - .long vector22 - .long vector23 - .long vector24 - .long vector25 - .long vector26 - .long vector27 - .long vector28 - .long vector29 - .long vector30 - .long vector31 - .long vector32 - .long vector33 - .long vector34 - .long vector35 - .long vector36 - .long vector37 - .long vector38 - .long vector39 - .long vector40 - .long vector41 - .long vector42 - .long vector43 - .long vector44 - .long vector45 - .long vector46 - .long vector47 - .long vector48 - .long vector49 - .long vector50 - .long vector51 - .long vector52 - .long vector53 - .long vector54 - .long vector55 - .long vector56 - .long vector57 - .long vector58 - .long vector59 - .long vector60 - .long vector61 - .long vector62 - .long vector63 - .long vector64 - .long vector65 - .long vector66 - .long vector67 - .long vector68 - .long vector69 - .long vector70 - .long vector71 - .long vector72 - .long vector73 - .long vector74 - .long vector75 - .long vector76 - .long vector77 - .long vector78 - .long vector79 - .long vector80 - .long vector81 - .long vector82 - .long vector83 - .long vector84 - .long vector85 - .long vector86 - .long vector87 - .long vector88 - .long vector89 - .long vector90 - .long vector91 - .long vector92 - .long vector93 - .long vector94 - .long vector95 - .long vector96 - .long vector97 - .long vector98 - .long vector99 - .long vector100 - .long vector101 - .long vector102 - .long vector103 - .long vector104 - .long vector105 - .long vector106 - .long vector107 - .long vector108 - .long vector109 - .long vector110 - .long vector111 - .long vector112 - .long vector113 - .long vector114 - .long vector115 - .long vector116 - .long vector117 - .long vector118 - .long vector119 - .long vector120 - .long vector121 - .long vector122 - .long vector123 - .long vector124 - .long vector125 - .long vector126 - .long vector127 - .long vector128 - .long vector129 - .long vector130 - .long vector131 - .long vector132 - .long vector133 - .long vector134 - .long vector135 - .long vector136 - .long vector137 - .long vector138 - .long vector139 - .long vector140 - .long vector141 - .long vector142 - .long vector143 - .long vector144 - .long vector145 - .long vector146 - .long vector147 - .long vector148 - .long vector149 - .long vector150 - .long vector151 - .long vector152 - .long vector153 - .long vector154 - .long vector155 - .long vector156 - .long vector157 - .long vector158 - .long vector159 - .long vector160 - .long vector161 - .long vector162 - .long vector163 - .long vector164 - .long vector165 - .long vector166 - .long vector167 - .long vector168 - .long vector169 - .long vector170 - .long vector171 - .long vector172 - .long vector173 - .long vector174 - .long vector175 - .long vector176 - .long vector177 - .long vector178 - .long vector179 - .long vector180 - .long vector181 - .long vector182 - .long vector183 - .long vector184 - .long vector185 - .long vector186 - .long vector187 - .long vector188 - .long vector189 - .long vector190 - .long vector191 - .long vector192 - .long vector193 - .long vector194 - .long vector195 - .long vector196 - .long vector197 - .long vector198 - .long vector199 - .long vector200 - .long vector201 - .long vector202 - .long vector203 - .long vector204 - .long vector205 - .long vector206 - .long vector207 - .long vector208 - .long vector209 - .long vector210 - .long vector211 - .long vector212 - .long vector213 - .long vector214 - .long vector215 - .long vector216 - .long vector217 - .long vector218 - .long vector219 - .long vector220 - .long vector221 - .long vector222 - .long vector223 - .long vector224 - .long vector225 - .long vector226 - .long vector227 - .long vector228 - .long vector229 - .long vector230 - .long vector231 - .long vector232 - .long vector233 - .long vector234 - .long vector235 - .long vector236 - .long vector237 - .long vector238 - .long vector239 - .long vector240 - .long vector241 - .long vector242 - .long vector243 - .long vector244 - .long vector245 - .long vector246 - .long vector247 - .long vector248 - .long vector249 - .long vector250 - .long vector251 - .long vector252 - .long vector253 - .long vector254 - .long vector255 - .long vector256 - .long vector257 - .long vector258 - .long vector259 - .long vector260 - .long vector261 - .long vector262 - .long vector263 - .long vector264 - .long vector265 - .long vector266 - .long vector267 - .long vector268 - .long vector269 - .long vector270 - .long vector271 - .long vector272 - .long vector273 - .long vector274 - .long vector275 - .long vector276 - .long vector277 - .long vector278 - .long vector279 - .long vector280 - .long vector281 - .long vector282 - .long vector283 - .long vector284 - .long vector285 - .long vector286 - .long vector287 - .long vector288 - .long vector289 - .long vector290 - .long vector291 - .long vector292 - .long vector293 - .long vector294 - .long vector295 - .long vector296 - .long vector297 - .long vector298 - .long vector299 - .long vector300 - .long vector301 - .long vector302 - .long vector303 - .long vector304 - .long vector305 - .long vector306 - .long vector307 - .long vector308 - .long vector309 - .long vector310 - .long vector311 - .long vector312 - .long vector313 - .long vector314 - .long vector315 - .long vector316 - .long vector317 - .long vector318 - .long vector319 - .long vector320 - .long vector321 - .long vector322 - .long vector323 - .long vector324 - .long vector325 - .long vector326 - .long vector327 - .long vector328 - .long vector329 - .long vector330 - .long vector331 - .long vector332 - .long vector333 - .long vector334 - .long vector335 - .long vector336 - .long vector337 - .long vector338 - .long vector339 - .long vector340 - .long vector341 - .long vector342 - .long vector343 - .long vector344 - .long vector345 - .long vector346 - .long vector347 - .long vector348 - .long vector349 - .long vector350 - .long vector351 - .long vector352 - .long vector353 - .long vector354 - .long vector355 - .long vector356 - .long vector357 - .long vector358 - .long vector359 - - .text - .align 2 - .weak vector0 -vector0: - - .weak vector1 -vector1: - - .weak vector2 -vector2: - - .weak vector3 -vector3: - - .weak vector4 -vector4: - - .weak vector5 -vector5: - - .weak vector6 -vector6: - - .weak vector7 -vector7: - - .weak vector8 -vector8: - - .weak vector9 -vector9: - - .weak vector10 -vector10: - - .weak vector11 -vector11: - - .weak vector12 -vector12: - - .weak vector13 -vector13: - - .weak vector14 -vector14: - - .weak vector15 -vector15: - - .weak vector16 -vector16: - - .weak vector17 -vector17: - - .weak vector18 -vector18: - - .weak vector19 -vector19: - - .weak vector20 -vector20: - - .weak vector21 -vector21: - - .weak vector22 -vector22: - - .weak vector23 -vector23: - - .weak vector24 -vector24: - - .weak vector25 -vector25: - - .weak vector26 -vector26: - - .weak vector27 -vector27: - - .weak vector28 -vector28: - - .weak vector29 -vector29: - - .weak vector30 -vector30: - - .weak vector31 -vector31: - - .weak vector32 -vector32: - - .weak vector33 -vector33: - - .weak vector34 -vector34: - - .weak vector35 -vector35: - - .weak vector36 -vector36: - - .weak vector37 -vector37: - - .weak vector38 -vector38: - - .weak vector39 -vector39: - - .weak vector40 -vector40: - - .weak vector41 -vector41: - - .weak vector42 -vector42: - - .weak vector43 -vector43: - - .weak vector44 -vector44: - - .weak vector45 -vector45: - - .weak vector46 -vector46: - - .weak vector47 -vector47: - - .weak vector48 -vector48: - - .weak vector49 -vector49: - - .weak vector50 -vector50: - - .weak vector51 -vector51: - - .weak vector52 -vector52: - - .weak vector53 -vector53: - - .weak vector54 -vector54: - - .weak vector55 -vector55: - - .weak vector56 -vector56: - - .weak vector57 -vector57: - - .weak vector58 -vector58: - - .weak vector59 -vector59: - - .weak vector60 -vector60: - - .weak vector61 -vector61: - - .weak vector62 -vector62: - - .weak vector63 -vector63: - - .weak vector64 -vector64: - - .weak vector65 -vector65: - - .weak vector66 -vector66: - - .weak vector67 -vector67: - - .weak vector68 -vector68: - - .weak vector69 -vector69: - - .weak vector70 -vector70: - - .weak vector71 -vector71: - - .weak vector72 -vector72: - - .weak vector73 -vector73: - - .weak vector74 -vector74: - - .weak vector75 -vector75: - - .weak vector76 -vector76: - - .weak vector77 -vector77: - - .weak vector78 -vector78: - - .weak vector79 -vector79: - - .weak vector80 -vector80: - - .weak vector81 -vector81: - - .weak vector82 -vector82: - - .weak vector83 -vector83: - - .weak vector84 -vector84: - - .weak vector85 -vector85: - - .weak vector86 -vector86: - - .weak vector87 -vector87: - - .weak vector88 -vector88: - - .weak vector89 -vector89: - - .weak vector90 -vector90: - - .weak vector91 -vector91: - - .weak vector92 -vector92: - - .weak vector93 -vector93: - - .weak vector94 -vector94: - - .weak vector95 -vector95: - - .weak vector96 -vector96: - - .weak vector97 -vector97: - - .weak vector98 -vector98: - - .weak vector99 -vector99: - - .weak vector100 -vector100: - - .weak vector101 -vector101: - - .weak vector102 -vector102: - - .weak vector103 -vector103: - - .weak vector104 -vector104: - - .weak vector105 -vector105: - - .weak vector106 -vector106: - - .weak vector107 -vector107: - - .weak vector108 -vector108: - - .weak vector109 -vector109: - - .weak vector110 -vector110: - - .weak vector111 -vector111: - - .weak vector112 -vector112: - - .weak vector113 -vector113: - - .weak vector114 -vector114: - - .weak vector115 -vector115: - - .weak vector116 -vector116: - - .weak vector117 -vector117: - - .weak vector118 -vector118: - - .weak vector119 -vector119: - - .weak vector120 -vector120: - - .weak vector121 -vector121: - - .weak vector122 -vector122: - - .weak vector123 -vector123: - - .weak vector124 -vector124: - - .weak vector125 -vector125: - - .weak vector126 -vector126: - - .weak vector127 -vector127: - - .weak vector128 -vector128: - - .weak vector129 -vector129: - - .weak vector130 -vector130: - - .weak vector131 -vector131: - - .weak vector132 -vector132: - - .weak vector133 -vector133: - - .weak vector134 -vector134: - - .weak vector135 -vector135: - - .weak vector136 -vector136: - - .weak vector137 -vector137: - - .weak vector138 -vector138: - - .weak vector139 -vector139: - - .weak vector140 -vector140: - - .weak vector141 -vector141: - - .weak vector142 -vector142: - - .weak vector143 -vector143: - - .weak vector144 -vector144: - - .weak vector145 -vector145: - - .weak vector146 -vector146: - - .weak vector147 -vector147: - - .weak vector148 -vector148: - - .weak vector149 -vector149: - - .weak vector150 -vector150: - - .weak vector151 -vector151: - - .weak vector152 -vector152: - - .weak vector153 -vector153: - - .weak vector154 -vector154: - - .weak vector155 -vector155: - - .weak vector156 -vector156: - - .weak vector157 -vector157: - - .weak vector158 -vector158: - - .weak vector159 -vector159: - - .weak vector160 -vector160: - - .weak vector161 -vector161: - - .weak vector162 -vector162: - - .weak vector163 -vector163: - - .weak vector164 -vector164: - - .weak vector165 -vector165: - - .weak vector166 -vector166: - - .weak vector167 -vector167: - - .weak vector168 -vector168: - - .weak vector169 -vector169: - - .weak vector170 -vector170: - - .weak vector171 -vector171: - - .weak vector172 -vector172: - - .weak vector173 -vector173: - - .weak vector174 -vector174: - - .weak vector175 -vector175: - - .weak vector176 -vector176: - - .weak vector177 -vector177: - - .weak vector178 -vector178: - - .weak vector179 -vector179: - - .weak vector180 -vector180: - - .weak vector181 -vector181: - - .weak vector182 -vector182: - - .weak vector183 -vector183: - - .weak vector184 -vector184: - - .weak vector185 -vector185: - - .weak vector186 -vector186: - - .weak vector187 -vector187: - - .weak vector188 -vector188: - - .weak vector189 -vector189: - - .weak vector190 -vector190: - - .weak vector191 -vector191: - - .weak vector192 -vector192: - - .weak vector193 -vector193: - - .weak vector194 -vector194: - - .weak vector195 -vector195: - - .weak vector196 -vector196: - - .weak vector197 -vector197: - - .weak vector198 -vector198: - - .weak vector199 -vector199: - - .weak vector200 -vector200: - - .weak vector201 -vector201: - - .weak vector202 -vector202: - - .weak vector203 -vector203: - - .weak vector204 -vector204: - - .weak vector205 -vector205: - - .weak vector206 -vector206: - - .weak vector207 -vector207: - - .weak vector208 -vector208: - - .weak vector209 -vector209: - - .weak vector210 -vector210: - - .weak vector211 -vector211: - - .weak vector212 -vector212: - - .weak vector213 -vector213: - - .weak vector214 -vector214: - - .weak vector215 -vector215: - - .weak vector216 -vector216: - - .weak vector217 -vector217: - - .weak vector218 -vector218: - - .weak vector219 -vector219: - - .weak vector220 -vector220: - - .weak vector221 -vector221: - - .weak vector222 -vector222: - - .weak vector223 -vector223: - - .weak vector224 -vector224: - - .weak vector225 -vector225: - - .weak vector226 -vector226: - - .weak vector227 -vector227: - - .weak vector228 -vector228: - - .weak vector229 -vector229: - - .weak vector230 -vector230: - - .weak vector231 -vector231: - - .weak vector232 -vector232: - - .weak vector233 -vector233: - - .weak vector234 -vector234: - - .weak vector235 -vector235: - - .weak vector236 -vector236: - - .weak vector237 -vector237: - - .weak vector238 -vector238: - - .weak vector239 -vector239: - - .weak vector240 -vector240: - - .weak vector241 -vector241: - - .weak vector242 -vector242: - - .weak vector243 -vector243: - - .weak vector244 -vector244: - - .weak vector245 -vector245: - - .weak vector246 -vector246: - - .weak vector247 -vector247: - - .weak vector248 -vector248: - - .weak vector249 -vector249: - - .weak vector250 -vector250: - - .weak vector251 -vector251: - - .weak vector252 -vector252: - - .weak vector253 -vector253: - - .weak vector254 -vector254: - - .weak vector255 -vector255: - - .weak vector256 -vector256: - - .weak vector257 -vector257: - - .weak vector258 -vector258: - - .weak vector259 -vector259: - - .weak vector260 -vector260: - - .weak vector261 -vector261: - - .weak vector262 -vector262: - - .weak vector263 -vector263: - - .weak vector264 -vector264: - - .weak vector265 -vector265: - - .weak vector266 -vector266: - - .weak vector267 -vector267: - - .weak vector268 -vector268: - - .weak vector269 -vector269: - - .weak vector270 -vector270: - - .weak vector271 -vector271: - - .weak vector272 -vector272: - - .weak vector273 -vector273: - - .weak vector274 -vector274: - - .weak vector275 -vector275: - - .weak vector276 -vector276: - - .weak vector277 -vector277: - - .weak vector278 -vector278: - - .weak vector279 -vector279: - - .weak vector280 -vector280: - - .weak vector281 -vector281: - - .weak vector282 -vector282: - - .weak vector283 -vector283: - - .weak vector284 -vector284: - - .weak vector285 -vector285: - - .weak vector286 -vector286: - - .weak vector287 -vector287: - - .weak vector288 -vector288: - - .weak vector289 -vector289: - - .weak vector290 -vector290: - - .weak vector291 -vector291: - - .weak vector292 -vector292: - - .weak vector293 -vector293: - - .weak vector294 -vector294: - - .weak vector295 -vector295: - - .weak vector296 -vector296: - - .weak vector297 -vector297: - - .weak vector298 -vector298: - - .weak vector299 -vector299: - - .weak vector300 -vector300: - - .weak vector301 -vector301: - - .weak vector302 -vector302: - - .weak vector303 -vector303: - - .weak vector304 -vector304: - - .weak vector305 -vector305: - - .weak vector306 -vector306: - - .weak vector307 -vector307: - - .weak vector308 -vector308: - - .weak vector309 -vector309: - - .weak vector310 -vector310: - - .weak vector311 -vector311: - - .weak vector312 -vector312: - - .weak vector313 -vector313: - - .weak vector314 -vector314: - - .weak vector315 -vector315: - - .weak vector316 -vector316: - - .weak vector317 -vector317: - - .weak vector318 -vector318: - - .weak vector319 -vector319: - - .weak vector320 -vector320: - - .weak vector321 -vector321: - - .weak vector322 -vector322: - - .weak vector323 -vector323: - - .weak vector324 -vector324: - - .weak vector325 -vector325: - - .weak vector326 -vector326: - - .weak vector327 -vector327: - - .weak vector328 -vector328: - - .weak vector329 -vector329: - - .weak vector330 -vector330: - - .weak vector331 -vector331: - - .weak vector332 -vector332: - - .weak vector333 -vector333: - - .weak vector334 -vector334: - - .weak vector335 -vector335: - - .weak vector336 -vector336: - - .weak vector337 -vector337: - - .weak vector338 -vector338: - - .weak vector339 -vector339: - - .weak vector340 -vector340: - - .weak vector341 -vector341: - - .weak vector342 -vector342: - - .weak vector343 -vector343: - - .weak vector344 -vector344: - - .weak vector345 -vector345: - - .weak vector346 -vector346: - - .weak vector347 -vector347: - - .weak vector348 -vector348: - - .weak vector349 -vector349: - - .weak vector350 -vector350: - - .weak vector351 -vector351: - - .weak vector352 -vector352: - - .weak vector353 -vector353: - - .weak vector354 -vector354: - - .weak vector355 -vector355: - - .weak vector356 -vector356: - - .weak vector357 -vector357: - - .weak vector358 -vector358: - - .weak vector359 -vector359: - - .globl _unhandled_irq -_unhandled_irq: - b _unhandled_irq - -/** @endcond */ -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/PPC/chcore.c b/ChibiOS_2.0.8/os/ports/GCC/PPC/chcore.c deleted file mode 100644 index 8697d0c..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/PPC/chcore.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file PPC/chcore.c - * @brief PowerPC architecture port code. - * - * @addtogroup PPC_CORE - * @{ - */ - -#include "ch.h" - -/** - * @brief Halts the system. - * @details This function is invoked by the operating system when an - * unrecoverable error is detected (as example because a programming - * error in the application code that triggers an assertion while - * in debug mode). - */ -void port_halt(void) { - - port_disable(); - while (TRUE) { - } -} - -/** - * @brief Performs a context switch between two threads. - * @details This is the most critical code in any port, this function - * is responsible for the context switch between 2 threads. - * @note The implementation of this code affects directly the context - * switch performance so optimize here as much as you can. - * - * @param[in] ntp the thread to be switched in - * @param[in] otp the thread to be switched out - */ -void port_switch(Thread *ntp, Thread *otp) { - - (void)otp; - (void)ntp; - - asm ("subi %sp, %sp, 80"); /* Size of the intctx structure. */ - asm ("mflr %r0"); - asm ("stw %r0, 84(%sp)"); /* LR into the caller frame. */ - asm ("mfcr %r0"); - asm ("stw %r0, 0(%sp)"); /* CR. */ - asm ("stmw %r14, 4(%sp)"); /* GPR14...GPR31. */ - - asm ("stw %sp, 12(%r4)"); /* Store swapped-out stack. */ - asm ("lwz %sp, 12(%r3)"); /* Load swapped-in stack. */ - - asm ("lmw %r14, 4(%sp)"); /* GPR14...GPR31. */ - asm ("lwz %r0, 0(%sp)"); /* CR. */ - asm ("mtcr %r0"); - asm ("lwz %r0, 84(%sp)"); /* LR from the caller frame. */ - asm ("mtlr %r0"); - asm ("addi %sp, %sp, 80"); /* Size of the intctx structure. */ -} - -/** - * @brief Start a thread by invoking its work function. - * @details If the work function returns @p chThdExit() is automatically - * invoked. - */ -void _port_thread_start(void) { - asm ("wrteei 1"); - asm ("mr %r3, %r31"); /* Thread parameter. */ - asm ("mtctr %r30"); - asm ("bctrl"); /* Invoke thread function. */ - asm ("bl chThdExit"); /* Thread termination on exit. */ -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/PPC/chcore.h b/ChibiOS_2.0.8/os/ports/GCC/PPC/chcore.h deleted file mode 100644 index ac349b4..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/PPC/chcore.h +++ /dev/null @@ -1,332 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file PPC/chcore.h - * @brief PowerPC architecture port macros and structures. - * - * @addtogroup PPC_CORE - * @{ - */ - -#ifndef _CHCORE_H_ -#define _CHCORE_H_ - -/* - * Port-related configuration parameters. - */ - -/** - * @brief Enables the use of the @p WFI instruction. - */ -#ifndef ENABLE_WFI_IDLE -#define ENABLE_WFI_IDLE 0 -#endif - -/* Core variants identifiers.*/ -#define PPC_VARIANT_e200z3 3 /**< e200z3 core identifier. */ -#define PPC_VARIANT_e200z4 4 /**< e200z4 core identifier. */ - -/** - * @brief Core variant selector. - * @details This setting affects the predefined architecture strings and - * possibly code paths and structures into the port layer. - */ -#if !defined(PPC_VARIANT) || defined(__DOXYGEN__) -#define PPC_VARIANT PPC_VARIANT_e200z3 -#endif - -/** - * @brief Unique macro for the implemented architecture. - */ -#define CH_ARCHITECTURE_PPC - -/** - * @brief Name of the implemented architecture. - */ -#define CH_ARCHITECTURE_NAME "PowerPC" - -/** - * @brief Name of the architecture variant. - */ -#if (PPC_VARIANT == PPC_VARIANT_e200z3) || defined(__DOXYGEN__) -#define CH_CORE_VARIANT_NAME "e200z3" -#elif PPC_VARIANT == PPC_VARIANT_e200z4 -#define CH_CORE_VARIANT_NAME "e200z4" -#else -#error "unknown or unsupported PowerPC variant specified" -#endif - -/** - * @brief Base type for stack and memory alignment. - */ -typedef struct { - uint8_t a[8]; -} stkalign_t __attribute__((aligned(8))); - -/** - * @brief Generic PPC register. - */ -typedef void *regppc_t; - -/** - * @brief Mandatory part of a stack frame. - */ -struct eabi_frame { - regppc_t slink; /**< Stack back link. */ - regppc_t shole; /**< Stack hole for LR storage. */ -}; - -#if !defined(__DOXYGEN__) -/** - * @brief Interrupt saved context. - * @details This structure represents the stack frame saved during a - * preemption-capable interrupt handler. - * @note R2 and R13 are not saved because those are assumed to be immutable - * during the system life cycle. - */ -struct extctx { - struct eabi_frame frame; - /* Start of the e_stmvsrrw frame (offset 8).*/ - regppc_t pc; - regppc_t msr; - /* Start of the e_stmvsprw frame (offset 16).*/ - regppc_t cr; - regppc_t lr; - regppc_t ctr; - regppc_t xer; - /* Start of the e_stmvgprw frame (offset 32).*/ - regppc_t r0; - regppc_t r3; - regppc_t r4; - regppc_t r5; - regppc_t r6; - regppc_t r7; - regppc_t r8; - regppc_t r9; - regppc_t r10; - regppc_t r11; - regppc_t r12; - regppc_t padding; - }; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief System saved context. - * @details This structure represents the inner stack frame during a context - * switching. - * @note R2 and R13 are not saved because those are assumed to be immutable - * during the system life cycle. - * @note LR is stored in the caller contex so it is not present in this - * structure. - */ -struct intctx { - regppc_t cr; /* Part of it is not volatile... */ - regppc_t r14; - regppc_t r15; - regppc_t r16; - regppc_t r17; - regppc_t r18; - regppc_t r19; - regppc_t r20; - regppc_t r21; - regppc_t r22; - regppc_t r23; - regppc_t r24; - regppc_t r25; - regppc_t r26; - regppc_t r27; - regppc_t r28; - regppc_t r29; - regppc_t r30; - regppc_t r31; - regppc_t padding; -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief Platform dependent part of the @p Thread structure. - * @details This structure usually contains just the saved stack pointer - * defined as a pointer to a @p intctx structure. - */ -struct context { - struct intctx *sp; -}; -#endif - -/** - * @brief Platform dependent part of the @p chThdInit() API. - * @details This code usually setup the context switching frame represented - * by an @p intctx structure. - */ -#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \ - uint8_t *sp = (uint8_t *)workspace + wsize - sizeof(struct eabi_frame); \ - ((struct eabi_frame *)sp)->slink = 0; \ - ((struct eabi_frame *)sp)->shole = _port_thread_start; \ - tp->p_ctx.sp = (struct intctx *)(sp - sizeof(struct intctx)); \ - tp->p_ctx.sp->r31 = arg; \ - tp->p_ctx.sp->r30 = pf; \ -} - -/** - * @brief Stack size for the system idle thread. - * @details This size depends on the idle thread implementation, usually - * the idle thread should take no more space than those reserved - * by @p INT_REQUIRED_STACK. - */ -#ifndef IDLE_THREAD_STACK_SIZE -#define IDLE_THREAD_STACK_SIZE 0 -#endif - -/** - * @brief Per-thread stack overhead for interrupts servicing. - * @details This constant is used in the calculation of the correct working - * area size. - * This value can be zero on those architecture where there is a - * separate interrupt stack and the stack space between @p intctx and - * @p extctx is known to be zero. - */ -#ifndef INT_REQUIRED_STACK -#define INT_REQUIRED_STACK 128 -#endif - -/** - * @brief Enforces a correct alignment for a stack area size value. - */ -#define STACK_ALIGN(n) ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1) - -/** - * @brief Computes the thread working area global size. - */ -#define THD_WA_SIZE(n) STACK_ALIGN(sizeof(Thread) + \ - sizeof(struct intctx) + \ - sizeof(struct extctx) + \ - (n) + (INT_REQUIRED_STACK)) - -/** - * @brief Static working area allocation. - * @details This macro is used to allocate a static thread working area - * aligned as both position and size. - */ -#define WORKING_AREA(s, n) stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]; - -/** - * @brief IRQ prologue code. - * @details This macro must be inserted at the start of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_PROLOGUE() - -/** - * @brief IRQ epilogue code. - * @details This macro must be inserted at the end of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_EPILOGUE() - -/** - * @brief IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_IRQ_HANDLER(id) void id(void) - -/** - * @brief Kernel port layer initialization. - * @details IVPR4 and IVPR10 initialization, INTC_IACKR_PRC0 initialization. - */ -#define port_init() { \ - asm volatile ("li %r3, IVOR4@l \t\n" \ - "mtIVOR4 %r3 \t\n" \ - "li %r3, IVOR10@l \t\n" \ - "mtIVOR10 %r3"); \ -} - -/** - * @details Implemented as global interrupt disable. - */ -#define port_lock() asm volatile ("wrteei 0" : : : "memory") - -/** - * @details Implemented as global interrupt enable. - */ -#define port_unlock() asm volatile("wrteei 1" : : : "memory") - -/** - * @details Implemented as global interrupt disable. - */ -#define port_lock_from_isr() /*asm ("wrteei 0")*/ - -/** - * @details Implemented as global interrupt enable. - */ -#define port_unlock_from_isr() /*asm ("wrteei 1")*/ - -/** - * @details Implemented as global interrupt disable. - */ -#define port_disable() asm volatile ("wrteei 0" : : : "memory") - -/** - * @details Same as @p port_disable() in this port, there is no difference - * between the two states. - */ -#define port_suspend() asm volatile ("wrteei 0" : : : "memory") - -/** - * @details Implemented as global interrupt enable. - */ -#define port_enable() asm volatile ("wrteei 1" : : : "memory") - -/** - * @details This port function is implemented as inlined code for performance - * reasons. - */ -#if ENABLE_WFI_IDLE != 0 -#ifndef port_wait_for_interrupt -#define port_wait_for_interrupt() { \ - asm volatile ("wait" : : : "memory"); \ -} -#endif -#else -#define port_wait_for_interrupt() -#endif - -#ifdef __cplusplus -extern "C" { -#endif - void port_halt(void); - void port_switch(Thread *ntp, Thread *otp); - void _port_thread_start(void); -#ifdef __cplusplus -} -#endif - -#endif /* _CHCORE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/PPC/chtypes.h b/ChibiOS_2.0.8/os/ports/GCC/PPC/chtypes.h deleted file mode 100644 index e892ef4..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/PPC/chtypes.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file PPC/chtypes.h - * @brief PowerPC architecture port system types. - * - * @addtogroup PPC_CORE - * @{ - */ - -#ifndef _CHTYPES_H_ -#define _CHTYPES_H_ - -#define __need_NULL -#define __need_size_t -#include - -#if !defined(_STDINT_H) && !defined(__STDINT_H_) -#include -#endif - -/* - * Derived generic types. - */ -typedef volatile int8_t vint8_t; /**< Volatile signed 8 bits. */ -typedef volatile uint8_t vuint8_t; /**< Volatile unsigned 8 bits. */ -typedef volatile int16_t vint16_t; /**< Volatile signed 16 bits. */ -typedef volatile uint16_t vuint16_t; /**< Volatile unsigned 16 bits. */ -typedef volatile int32_t vint32_t; /**< Volatile signed 32 bits. */ -typedef volatile uint32_t vuint32_t; /**< Volatile unsigned 32 bits. */ - -/* - * Kernel types. - */ -typedef int32_t bool_t; /**< Fast boolean type. */ -typedef uint8_t tmode_t; /**< Thread flags. */ -typedef uint8_t tstate_t; /**< Thread state. */ -typedef uint8_t trefs_t; /**< Thread references counter. */ -typedef uint32_t tprio_t; /**< Thread priority. */ -typedef int32_t msg_t; /**< Inter-thread message. */ -typedef int32_t eventid_t; /**< Event Id. */ -typedef uint32_t eventmask_t; /**< Events mask. */ -typedef uint32_t systime_t; /**< System time. */ -typedef int32_t cnt_t; /**< Resources counter. */ - -/** - * @brief Inline function modifier. - */ -#define INLINE inline - -/** - * @brief ROM constant modifier. - * @note It is set to use the "const" keyword in this port. - */ -#define ROMCONST const - -/** - * @brief Packed structure modifier (within). - * @note It uses the "packed" GCC attribute. - */ -#define PACK_STRUCT_STRUCT __attribute__((packed)) - -/** - * @brief Packed structure modifier (before). - * @note Empty in this port. - */ -#define PACK_STRUCT_BEGIN - -/** - * @brief Packed structure modifier (after). - * @note Empty in this port. - */ -#define PACK_STRUCT_END - -#endif /* _CHTYPES_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/PPC/crt0.s b/ChibiOS_2.0.8/os/ports/GCC/PPC/crt0.s deleted file mode 100644 index 250ce29..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/PPC/crt0.s +++ /dev/null @@ -1,126 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file PPC/crt0.s - * @brief Generic PowerPC startup file for ChibiOS/RT. - * - * @addtogroup PPC_CORE - * @{ - */ -/** @cond never */ - - .section .text - .align 2 - .globl _boot_address -_boot_address: - /* - * Stack setup. - */ - lis %r1, __ram_end__@h - ori %r1, %r1, __ram_end__@l - li %r0, 0 - stwu %r0, -8(%r1) - /* - * IVPR initialization. - */ - lis %r4, __ivpr_base__@h - mtIVPR %r4 - /* - * Small sections registers initialization. - */ - lis %r2, __sdata2_start__@h - ori %r2, %r2, __sdata2_start__@l - lis %r13, __sdata_start__@h - ori %r13, %r13, __sdata_start__@l - /* - * Early initialization. - */ - bl hwinit0 - /* - * BSS clearing. - */ - lis %r4, __bss_start__@h - ori %r4, %r4, __bss_start__@l - lis %r5, __bss_end__@h - ori %r5, %r5, __bss_end__@l - li %r7, 0 -.bssloop: - cmpl cr0, %r4, %r5 - bge cr0, .bssend - stw %r7, 0(%r4) - addi %r4, %r4, 4 - b .bssloop -.bssend: - /* - * DATA initialization. - */ - lis %r4, __romdata_start__@h - ori %r4, %r4, __romdata_start__@l - lis %r5, __data_start__@h - ori %r5, %r5, __data_start__@l - lis %r6, __data_end__@h - ori %r6, %r6, __data_end__@l -.dataloop: - cmpl cr0, %r5, %r6 - bge cr0, .dataend - lwz %r7, 0(%r4) - addi %r4, %r4, 4 - stw %r7, 0(%r5) - addi %r5, %r5, 4 - b .dataloop -.dataend: - /* - * Late initialization. - */ - bl hwinit1 - li %r3, 0 - li %r4, 0 - bl main - b main_exit - - /* - * Default main exit code, infinite loop. - */ - .weak main_exit - .globl main_exit -main_exit: -forever: - b forever - - /* - * Default initialization code, none. - */ - .weak hwinit0 - .globl hwinit0 -hwinit0: - .weak hwinit1 - .globl hwinit1 -hwinit1: - blr - -/** @endcond */ -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/PPC/port.dox b/ChibiOS_2.0.8/os/ports/GCC/PPC/port.dox deleted file mode 100644 index d0ee7e7..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/PPC/port.dox +++ /dev/null @@ -1,138 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup PPC PowerPC - * @details PowerPC port details. This section describes how the ChibiOS/RT - * features are implemented on this architecture. - * - * @section PPC_STATES Mapping of the System States in the PowerPC port - * The ChibiOS/RT logical @ref system_states are mapped as follow in the - * PowerPC port: - * - Init. This state is represented by the startup code and the - * initialization code before @p chSysInit() is executed. It has not a - * special hardware state associated. - * - Normal. This is the state the system has after executing - * @p chSysInit(). Interrupts are enabled. - * - Suspended. Interrupts are disabled. - * - Disabled. Interrupts are disabled. This state is equivalent to the - * Suspended state because there are no fast interrupts in this architecture. - * - Sleep. This state is entered with the execution of the specific - * instruction @p wait. - * - S-Locked. Interrupts are disabled. - * - I-Locked. This state is equivalent to the SRI state, the - * @p chSysLockI() and @p chSysUnlockI() APIs do nothing (still use them in - * order to formally change state because this may change). - * - Serving Regular Interrupt. Normal interrupt service code. - * - Serving Fast Interrupt. Not present in this architecture. - * - Serving Non-Maskable Interrupt. The PowerPC has several non - * maskable interrupt sources that can be associated to this state. - * - Halted. Implemented as an infinite loop with interrupts disabled. - * . - * @section PPC_NOTES The PowerPC port notes - * The PowerPC port is organized as follow: - * - The @p main() function is invoked in privileged mode. - * - Each thread has a private stack with extra storage for interrupts - * servicing. - * - The Book-E Decrementer Timer, mapped on IVOR10, is used for system tick. - * - Interrupt nesting is not currently supported. - * . - * @ingroup ports - */ - -/** - * @defgroup PPC_CONF Configuration Options - * @brief PowerPC Configuration Options. - * @details The PowerPC port allows some architecture-specific configurations - * settings that can be overridden by redefining them in @p chconf.h. - * Usually there is no need to change the default values. - * - @p INT_REQUIRED_STACK, this value represent the amount of stack space used - * by an interrupt handler between the @p extctx and @p intctx - * structures. - * The default for this value is @p 128 bytes, this space is allocated for - * each thread so be careful in order to not waste precious RAM space.
      - * The default value is set into ./os/ports/GCC/PPC/chcore.h. - * - @p IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE - * thread. Usually there is no need to change this value unless inserting - * code in the IDLE thread hook macro. - * - @p ENABLE_WFI_IDLE, if set to @p TRUE enables the use of the @p wait - * instruction from within the idle loop. This is defaulted to 0 because - * it can create problems with some debuggers. Setting this option to 1 - * reduces the system power requirements. - * . - * @ingroup PPC - */ - -/** - * @defgroup PPC_CORE Core Port Implementation - * @brief PowerPC specific port code, structures and macros. - * - * @ingroup PPC - */ - -/** - * @defgroup PPC_STARTUP Startup Support - * @brief PPC startup code support. - * @details ChibiOS/RT provides its own generic startup file for the PowerPC - * port. - * Of course it is not mandatory to use it but care should be taken about the - * startup phase details. - * - *

      Startup Process

      - * The startup process, as implemented, is the following: - * -# The stacks pointer is initialized into the area defined in the linker - * script. - * -# The IVPR register is setup according to the linker script. - * -# The R2 and R13 registers are set to pointer to the SDA areas according - * to the EABI specification. - * -# An early initialization routine @p hwinit0 is invoked, if the symbol is - * not defined then an empty default routine is executed (weak symbol). - * -# DATA and BSS segments are initialized. - * -# A late initialization routine @p hwinit1 is invoked, if the symbol not - * defined then an empty default routine is executed (weak symbol).
      - * This late initialization function is also the proper place for a - * @a bootloader, if your application requires one. - * -# The @p main() function is invoked with the parameters @p argc and @p argv - * set to zero. - * -# Should the @p main() function return a branch is performed to the weak - * symbol @p main_exit. The default code is an endless empty loop. - * . - *

      Expected linker symbols

      - * The startup code starts at the symbol @p _boot_address and expects the - * following symbols to be defined in the linker script: - * - @p __ram_end__ RAM end location +1. - * - @p __sdata2_start__ small constants data area - * - @p __sdata_start__ small variables data area - * - @p __romdata_start__ address of the data segment source read only data. - * - @p __data_start__ data segment start location. - * - @p __data_end__ data segment end location +1. - * - @p __bss_start__ BSS start location. - * - @p __bss_end__ BSS end location +1. - * - @p __ivpr_base__ IVPR register initialization address. - * . - * @ingroup PPC - * @file PPC/crt0.s Startup code. - */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/PPC/port.mk b/ChibiOS_2.0.8/os/ports/GCC/PPC/port.mk deleted file mode 100644 index a6d8e23..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/PPC/port.mk +++ /dev/null @@ -1,6 +0,0 @@ -# List of the ChibiOS/RT PPC port files. -PORTSRC = ${CHIBIOS}/os/ports/GCC/PPC/chcore.c - -PORTASM = ${CHIBIOS}/os/ports/GCC/PPC/crt0.s - -PORTINC = ${CHIBIOS}/os/ports/GCC/PPC diff --git a/ChibiOS_2.0.8/os/ports/GCC/PPC/rules.mk b/ChibiOS_2.0.8/os/ports/GCC/PPC/rules.mk deleted file mode 100644 index ab16e50..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/PPC/rules.mk +++ /dev/null @@ -1,87 +0,0 @@ -# PPC e200Z makefile scripts and rules. - -# Automatic compiler options -OPT = $(USE_OPT) -CPPOPT = $(USE_CPPOPT) -ifeq ($(USE_CURRP_CACHING),yes) - OPT += -ffixed-r7 -DCH_CURRP_REGISTER_CACHE='"r7"' -endif -ifeq ($(USE_LINK_GC),yes) - OPT += -ffunction-sections -fdata-sections -endif - -# Source files groups -SRC = $(CSRC)$(CPPSRC) - -# Object files groups -COBJS = $(CSRC:.c=.o) -CPPOBJS = $(CPPSRC:.cpp=.o) -ASMOBJS = $(ASMSRC:.s=.o) -OBJS = $(ASMOBJS) $(COBJS) $(CPPOBJS) - -# Paths -IINCDIR = $(patsubst %,-I%,$(INCDIR) $(DINCDIR) $(UINCDIR)) -LLIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) - -# Macros -DEFS = $(DDEFS) $(UDEFS) -ADEFS = $(DADEFS) $(UADEFS) - -# Libs -LIBS = $(DLIBS) $(ULIBS) - -MCFLAGS = -mcpu=$(MCU) -ODFLAGS = -x --syms -ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(<:.s=.lst) $(ADEFS) -CPFLAGS = $(MCFLAGS) $(OPT) $(CWARN) -Wa,-alms=$(<:.c=.lst) $(DEFS) -ifeq ($(LINK_GC),yes) - LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch,--gc-sections $(LLIBDIR) -else - LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch $(LLIBDIR) -endif - -# Generate dependency information -CPFLAGS += -MD -MP -MF .dep/$(@F).d - -# -# Makefile rules -# -all: $(OBJS) $(PROJECT).elf $(PROJECT).hex $(PROJECT).bin $(PROJECT).dmp - -$(CPPOBJS) : %.o : %.cpp - @echo - $(CPPC) -c $(CPPFLAGS) -I . $(IINCDIR) $< -o $@ - -$(COBJS) : %.o : %.c - @echo - $(CC) -c $(CPFLAGS) -I . $(IINCDIR) $< -o $@ - -$(ASMOBJS) : %.o : %.s - @echo - $(AS) -c $(ASFLAGS) -I . $(IINCDIR) $< -o $@ - -%elf: $(OBJS) - @echo - $(LD) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ - -%hex: %elf - $(HEX) $< $@ - -%bin: %elf - $(BIN) $< $@ - -%dmp: %elf - $(OD) $(ODFLAGS) $< > $@ - -clean: - -rm -f $(OBJS) - -rm -f $(CSRC:.c=.lst) $(CPPSRC:.cpp=.lst) $(ASMSRC:.s=.lst) - -rm -f $(PROJECT).elf $(PROJECT).dmp $(PROJECT).map $(PROJECT).hex $(PROJECT).bin - -rm -fR .dep - -# -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - -# *** EOF *** diff --git a/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chcore.c b/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chcore.c deleted file mode 100644 index 95b2fe4..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chcore.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @addtogroup SIMIA32_CORE - * @{ - */ - -#include - -#include "ch.h" -#include "hal.h" - -/** - * Performs a context switch between two threads. - * @param otp the thread to be switched out - * @param ntp the thread to be switched in - */ -__attribute__((used)) -static void __dummy(Thread *ntp, Thread *otp) { - (void)ntp; (void)otp; -#if defined(WIN32) - asm volatile (".globl @port_switch@8 \n\t" \ - "@port_switch@8:"); -#elif defined(__APPLE__) - asm volatile (".globl _port_switch \n\t" \ - "_port_switch:"); -#else - asm volatile (".globl port_switch \n\t" \ - "port_switch:"); -#endif - asm volatile ("push %ebp \n\t" \ - "push %esi \n\t" \ - "push %edi \n\t" \ - "push %ebx \n\t" \ - "movl %esp, 12(%edx) \n\t" \ - "movl 12(%ecx), %esp \n\t" \ - "pop %ebx \n\t" \ - "pop %edi \n\t" \ - "pop %esi \n\t" \ - "pop %ebp \n\t" \ - "ret"); -} - -/** - * Halts the system. In this implementation it just exits the simulation. - */ -__attribute__((fastcall)) -void port_halt(void) { - - exit(2); -} - -/** - * Threads return point, it just invokes @p chThdExit(). - */ -void threadexit(void) { - -#if defined(WIN32) || defined (__APPLE__) - asm volatile ("push %eax \n\t" \ - "call _chThdExit"); -#else - asm volatile ("push %eax \n\t" \ - "call chThdExit"); -#endif -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chcore.h b/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chcore.h deleted file mode 100644 index 4154856..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chcore.h +++ /dev/null @@ -1,227 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @addtogroup SIMIA32_CORE - * @{ - */ - -#ifndef _CHCORE_H_ -#define _CHCORE_H_ - -/** - * Macro defining the a simulated architecture into x86. - */ -#define CH_ARCHITECTURE_SIMIA32 - -/** - * Name of the implemented architecture. - */ -#define CH_ARCHITECTURE_NAME "Simulator" - -/** - * @brief Name of the architecture variant (optional). - */ -#define CH_CORE_VARIANT_NAME "x86 (integer only)" - -/** - * 16 bytes stack alignment. - */ -typedef struct { - uint8_t a[16]; -} stkalign_t __attribute__((aligned(16))); - -/** - * Generic x86 register. - */ -typedef void *regx86; - -/** - * Interrupt saved context. - * This structure represents the stack frame saved during a preemption-capable - * interrupt handler. - */ -struct extctx { -}; - -/** - * System saved context. - * @note In this demo the floating point registers are not saved. - */ -struct intctx { - regx86 ebx; - regx86 edi; - regx86 esi; - regx86 ebp; - regx86 eip; -}; - -/** - * Platform dependent part of the @p Thread structure. - * This structure usually contains just the saved stack pointer defined as a - * pointer to a @p intctx structure. - */ -struct context { - struct intctx volatile *esp; -}; - -#define APUSH(p, a) (p) -= sizeof(void *), *(void **)(p) = (void*)(a) - -/** - * Platform dependent part of the @p chThdInit() API. - * This code usually setup the context switching frame represented by a - * @p intctx structure. - */ -#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \ - uint8_t *esp = (uint8_t *)workspace + wsize; \ - APUSH(esp, 0); \ - APUSH(esp, 0); \ - APUSH(esp, 0); \ - APUSH(esp, arg); \ - APUSH(esp, threadexit); \ - esp -= sizeof(struct intctx); \ - ((struct intctx *)esp)->eip = pf; \ - ((struct intctx *)esp)->ebx = 0; \ - ((struct intctx *)esp)->edi = 0; \ - ((struct intctx *)esp)->esi = 0; \ - ((struct intctx *)esp)->ebp = 0; \ - tp->p_ctx.esp = (struct intctx *)esp; \ -} - -/** - * Stack size for the system idle thread. - */ -#ifndef IDLE_THREAD_STACK_SIZE -#define IDLE_THREAD_STACK_SIZE 256 -#endif - -/** - * Per-thread stack overhead for interrupts servicing, it is used in the - * calculation of the correct working area size. - * It requires stack space because the simulated "interrupt handlers" can - * invoke host library functions inside so it better have a lot of space. - */ -#ifndef INT_REQUIRED_STACK -#define INT_REQUIRED_STACK 16384 -#endif - -/** - * Enforces a correct alignment for a stack area size value. - */ -#define STACK_ALIGN(n) ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1) - - /** - * Computes the thread working area global size. - */ -#define THD_WA_SIZE(n) STACK_ALIGN(sizeof(Thread) + \ - sizeof(void *) * 4 + \ - sizeof(struct intctx) + \ - sizeof(struct extctx) + \ - (n) + (INT_REQUIRED_STACK)) - -/** - * Macro used to allocate a thread working area aligned as both position and - * size. - */ -#define WORKING_AREA(s, n) stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]; - -/** - * IRQ prologue code, inserted at the start of all IRQ handlers enabled to - * invoke system APIs. - */ -#define PORT_IRQ_PROLOGUE() - -/** - * IRQ epilogue code, inserted at the end of all IRQ handlers enabled to - * invoke system APIs. - */ -#define PORT_IRQ_EPILOGUE() - -/** - * IRQ handler function declaration. - */ -#define PORT_IRQ_HANDLER(id) void id(void) - -/** - * Simulator initialization. - */ -#define port_init() - -/** - * Does nothing in this simulator. - */ -#define port_lock() asm volatile("nop") - -/** - * Does nothing in this simulator. - */ -#define port_unlock() asm volatile("nop") - -/** - * Does nothing in this simulator. - */ -#define port_lock_from_isr() - -/** - * Does nothing in this simulator. - */ -#define port_unlock_from_isr() - -/** - * Does nothing in this simulator. - */ -#define port_disable() - -/** - * Does nothing in this simulator. - */ -#define port_suspend() - -/** - * Does nothing in this simulator. - */ -#define port_enable() - -/** - * In the simulator this does a polling pass on the simulated interrupt - * sources. - */ -#define port_wait_for_interrupt() ChkIntSources() - -#ifdef __cplusplus -extern "C" { -#endif - __attribute__((fastcall)) void port_switch(Thread *ntp, Thread *otp); - __attribute__((fastcall)) void port_halt(void); - void threadexit(void); - void ChkIntSources(void); -#ifdef __cplusplus -} -#endif - -#endif /* _CHCORE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chtypes.h b/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chtypes.h deleted file mode 100644 index 46b7c3c..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/chtypes.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _CHTYPES_H_ -#define _CHTYPES_H_ - -#define __need_NULL -#define __need_size_t -#define __need_ptrdiff_t -#include - -#if !defined(_STDINT_H) && !defined(__STDINT_H_) -#include -#endif - -typedef int32_t bool_t; /**< Fast boolean type. */ -typedef uint8_t tmode_t; /**< Thread flags. */ -typedef uint8_t tstate_t; /**< Thread state. */ -typedef uint8_t trefs_t; /**< Thread references counter. */ -typedef uint32_t tprio_t; /**< Thread priority. */ -typedef int32_t msg_t; /**< Inter-thread message. */ -typedef int32_t eventid_t; /**< Event Id. */ -typedef uint32_t eventmask_t; /**< Events mask. */ -typedef uint32_t systime_t; /**< System time. */ -typedef int32_t cnt_t; /**< Resources counter. */ - -/** - * @brief Inline function modifier. - */ -#define INLINE inline - -/** - * @brief ROM constant modifier. - * @note It is set to use the "const" keyword in this port. - */ -#define ROMCONST const - -/** - * @brief Packed structure modifier (within). - * @note It uses the "packed" GCC attribute. - */ -#define PACK_STRUCT_STRUCT __attribute__((packed)) - -/** - * @brief Packed structure modifier (before). - * @note Empty in this port. - */ -#define PACK_STRUCT_BEGIN - -/** - * @brief Packed structure modifier (after). - * @note Empty in this port. - */ -#define PACK_STRUCT_END - -#endif /* _CHTYPES_H_ */ diff --git a/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/port.mk b/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/port.mk deleted file mode 100644 index 04b9953..0000000 --- a/ChibiOS_2.0.8/os/ports/GCC/SIMIA32/port.mk +++ /dev/null @@ -1,6 +0,0 @@ -# List of the ChibiOS/RT SIMIA32 port files. -PORTSRC = ${CHIBIOS}/os/ports/GCC/SIMIA32/chcore.c - -PORTASM = - -PORTINC = ${CHIBIOS}/os/ports/GCC/SIMIA32 diff --git a/ChibiOS_2.0.8/os/ports/RC/STM8/chcore.c b/ChibiOS_2.0.8/os/ports/RC/STM8/chcore.c deleted file mode 100644 index 186a9aa..0000000 --- a/ChibiOS_2.0.8/os/ports/RC/STM8/chcore.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file RC/STM8/chcore.c - * @brief STM8 architecture port code. - * - * @addtogroup STM8_CORE - * @{ - */ -#pragma SRC("tmp.asm") - -#include "ch.h" - -page0 ReadyList rlist; - -/** - * @brief Performs a context switch between two threads. - * - * @param otp the thread to be switched out - */ -void _port_switch(Thread *otp) { - - (void)otp; - /* Asm because unoptimal code would generated by using _getSP_().*/ -#pragma ASM - LDW Y,SP ; old context pointer - LDW (5,X),Y ; SP saved in otp->p_ctx.sp - LDW X,rlist + 5 ; r_current (currp) field - LDW X,(5,X) ; currp->p_ctx.sp - LDW SP,X ; new context pointer -#pragma ENDASM -} - -/** - * @brief Thread start code. - */ -void _port_thread_start(void) { - -#pragma ASM - RIM - POPW X -#pragma ENDASM -} - -/** - * @brief Halts the system. - * @details This function is invoked by the operating system when an - * unrecoverable error is detected (as example because a programming - * error in the application code that triggers an assertion while in - * debug mode). - */ -void port_halt(void) { - - port_disable(); - while (TRUE) { - } -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/RC/STM8/chcore.h b/ChibiOS_2.0.8/os/ports/RC/STM8/chcore.h deleted file mode 100644 index bfe3853..0000000 --- a/ChibiOS_2.0.8/os/ports/RC/STM8/chcore.h +++ /dev/null @@ -1,332 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file RC/STM8/chcore.h - * @brief STM8 architecture port macros and structures. - * - * @addtogroup STM8_CORE - * @{ - */ - -#ifndef _CHCORE_H_ -#define _CHCORE_H_ - -#include - -/*===========================================================================*/ -/* Port configurable parameters. */ -/*===========================================================================*/ - -/** - * @brief Enables the use of the WFI instruction in the idle thread loop. - */ -#ifndef STM8_ENABLE_WFI_IDLE -#define STM8_ENABLE_WFI_IDLE FALSE -#endif - -/*===========================================================================*/ -/* Port exported info. */ -/*===========================================================================*/ - -/** - * @brief Unique macro for the implemented architecture. - */ -#define CH_ARCHITECTURE_STM8 - -/** - * @brief Name of the implemented architecture. - */ -#define CH_ARCHITECTURE_NAME "STM8" - -/*===========================================================================*/ -/* Port implementation part. */ -/*===========================================================================*/ - -/** - * @brief Base type for stack alignment. - * @note No alignment constraints so uint8_t. - */ -typedef uint8_t stkalign_t; - -/** - * @brief Generic STM8 function pointer. - * @note It is used to allocate the proper size for return addresses in - * context-related structures. - */ -typedef void (*stm8func_t)(void); - -#if !defined(__DOXYGEN__) -/** - * @brief Interrupt saved context. - * @details This structure represents the stack frame saved during a - * preemption-capable interrupt handler. - * @note The structure requires one dummy field at its start because the - * stack is handled as preincremented/postdecremented. - */ -struct extctx { - uint8_t _next; - uint16_t cx; - uint16_t bx; - uint8_t cc; - uint8_t a; - uint16_t x; - uint16_t y; - uint8_t pce; - uint8_t pch; - uint8_t pcl; -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief System saved context. - * @details This structure represents the inner stack frame during a context - * switching.. - * @note The structure requires one dummy field at its start because the - * stack is handled as preincremented/postdecremented. - */ -struct intctx { - uint8_t _next; - stm8func_t pc; /* Function pointer sized return address. */ -}; -#endif - -#if !defined(__DOXYGEN__) -/** - * @brief Platform dependent part of the @p Thread structure. - * @details This structure usually contains just the saved stack pointer - * defined as a pointer to a @p intctx structure. - */ -struct context { - struct intctx *sp; -}; -#endif - -/** - * @brief Start context. - * @details This context is the stack organization for the trampoline code - * @p _port_thread_start(). - */ -struct stm8_startctx { - uint8_t _next; - stm8func_t ts; /* Trampoline address. */ - void *arg; /* Thread argument. */ - stm8func_t pc; /* Thread function address. */ - stm8func_t ret; /* chThdExit() address. */ -}; - -/** - * @brief Platform dependent part of the @p chThdInit() API. - * @details This code usually setup the context switching frame represented - * by an @p intctx structure. - */ -#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \ - struct stm8_startctx *scp; \ - scp = (struct stm8_startctx *)((uint8_t *)workspace + wsize - \ - sizeof(struct stm8_startctx)); \ - scp->ts = _port_thread_start; \ - scp->arg = arg; \ - scp->pc = (stm8func_t)pf; \ - scp->ret = (stm8func_t)chThdExit; \ - tp->p_ctx.sp = (struct intctx *)scp; \ -} - -/** - * @brief Stack size for the system idle thread. - * @details This size depends on the idle thread implementation, usually - * the idle thread should take no more space than those reserved - * by @p INT_REQUIRED_STACK. - */ -#ifndef IDLE_THREAD_STACK_SIZE -#define IDLE_THREAD_STACK_SIZE 0 -#endif - -/** - * @brief Per-thread stack overhead for interrupts servicing. - * @details This constant is used in the calculation of the correct working - * area size. - * This value can be zero on those architecture where there is a - * separate interrupt stack and the stack space between @p intctx and - * @p extctx is known to be zero. - */ -#ifndef INT_REQUIRED_STACK -#define INT_REQUIRED_STACK 32 -#endif - -/** - * @brief Enforces a correct alignment for a stack area size value. - */ -#define STACK_ALIGN(n) ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1) - -/** - * @brief Computes the thread working area global size. - */ -#define THD_WA_SIZE(n) STACK_ALIGN(sizeof(Thread) + \ - (sizeof(struct intctx) - 1) + \ - (sizeof(struct extctx) - 1) + \ - (n) + (INT_REQUIRED_STACK)) - -/** - * @brief Static working area allocation. - * @details This macro is used to allocate a static thread working area - * aligned as both position and size. - */ -#define WORKING_AREA(s, n) stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)] - -/** - * @brief IRQ prologue code. - * @details This macro must be inserted at the start of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_PROLOGUE() - -/** - * @brief IRQ epilogue code. - * @details This macro must be inserted at the end of all IRQ handlers - * enabled to invoke system APIs. - */ -#define PORT_IRQ_EPILOGUE() { \ - if (chSchIsRescRequiredExI()) \ - chSchDoRescheduleI(); \ -} - -/** - * @brief IRQ handler function declaration. - * @note @p id can be a function name or a vector number depending on the - * port implementation. - */ -#define PORT_IRQ_HANDLER(id) void irq##id(void) interrupt id - -/** - * @brief Port-related initialization code. - * @note None in this port. - */ -#define port_init() - -/** - * @brief Kernel-lock action. - * @note Implemented as global interrupts disable. - */ -#define port_lock() _sim_() - -/** - * @brief Kernel-unlock action. - * @note Implemented as global interrupts enable. - */ -#define port_unlock() _rim_() - -/** - * @brief Kernel-lock action from an interrupt handler. - * @note This function is empty in this port. - */ -#define port_lock_from_isr() - -/** - * @brief Kernel-unlock action from an interrupt handler. - * @note This function is empty in this port. - */ -#define port_unlock_from_isr() - -/** - * @brief Disables all the interrupt sources. - * @note Implemented as global interrupts disable. - * @note Of course non maskable interrupt sources are not included. - */ -#define port_disable() _sim_() - -/** - * @brief Disables the interrupt sources that are not supposed to preempt - * the kernel. - * @note Same as @p port_disable() in this port, there is no difference - * between the two states. - */ -#define port_suspend() _sim_() - -/** - * @brief Enables all the interrupt sources. - * @note Implemented as global interrupt enable. - */ -#define port_enable() _rim_() - -/** - * @brief Enters an architecture-dependent halt mode. - * @note Implemented with the specific "wfi" instruction. - */ -#if STM8_ENABLE_WFI_IDLE || defined(__DOXYGEN__) -#define port_wait_for_interrupt() _wfi_() -#else -#define port_wait_for_interrupt() -#endif - -/** - * @brief Performs a context switch between two threads. - * @details This is the most critical code in any port, this function - * is responsible for the context switch between 2 threads. - * @note Implemented as a call to a low level assembler routine. - * - * @param ntp the thread to be switched in - * @param otp the thread to be switched out - */ -#define port_switch(ntp, otp) _port_switch(otp) - -#ifdef __cplusplus -extern "C" { -#endif - void port_halt(void); - void _port_switch(Thread *otp); - void _port_thread_start(void); -#ifdef __cplusplus -} -#endif - -/*===========================================================================*/ -/* Scheduler captured code. */ -/*===========================================================================*/ - -#define PORT_OPTIMIZED_RLIST_VAR -#define PORT_OPTIMIZED_RLIST_EXT -#define PORT_OPTIMIZED_READYLIST_STRUCT - -typedef struct { - ThreadsQueue r_queue; - tprio_t r_prio; - Thread *r_current; -#if CH_USE_REGISTRY - Thread *r_newer; - Thread *r_older; -#endif - /* End of the fields shared with the Thread structure.*/ -#if CH_TIME_QUANTUM > 0 - cnt_t r_preempt; -#endif -} ReadyList; - -extern page0 ReadyList rlist; - -#endif /* _CHCORE_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/RC/STM8/chtypes.h b/ChibiOS_2.0.8/os/ports/RC/STM8/chtypes.h deleted file mode 100644 index 2897671..0000000 --- a/ChibiOS_2.0.8/os/ports/RC/STM8/chtypes.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file STM8/chtypes.h - * @brief STM8 port system types. - * - * @addtogroup STM8_CORE - * @{ - */ - -#ifndef _CHTYPES_H_ -#define _CHTYPES_H_ - -#define __need_NULL -#define __need_size_t -#include - -//#if !defined(_STDINT_H) && !defined(__STDINT_H_) -//#include -//#endif - -typedef unsigned char uint8_t; /**< C99-style 8 bits unsigned. */ -typedef signed char int8_t; /**< C99-style 8 bits signed. */ -typedef unsigned int uint16_t; /**< C99-style 16 bits unsigned. */ -typedef signed int int16_t; /**< C99-style 16 bits signed. */ -typedef unsigned long uint32_t; /**< C99-style 32 bits unsigned. */ -typedef signed long int32_t; /**< C99-style 32 bits signed. */ -typedef uint8_t uint_fast8_t; /**< C99-style 8 bits unsigned. */ -typedef uint16_t uint_fast16_t; /**< C99-style 16 bits unsigned. */ -typedef uint32_t uint_fast32_t; /**< C99-style 32 bits unsigned. */ - -/** - * @brief Boolean, recommended the fastest signed. - */ -typedef int8_t bool_t; - -/** - * @brief Thread mode flags, uint8_t is ok. - */ -typedef uint8_t tmode_t; - -/** - * @brief Thread state, uint8_t is ok. - */ -typedef uint8_t tstate_t; - -/** - * @brief Thread references counter, uint8_t is ok. - */ -typedef uint8_t trefs_t; - -/** - * @brief Priority, use the fastest unsigned type. - */ -typedef uint8_t tprio_t; - -/** - * @brief Message, use signed pointer equivalent. - */ -typedef int16_t msg_t; - -/** - * @brief Event Id, use fastest signed. - */ -typedef int8_t eventid_t; - -/** - * @brief Event Mask, recommended fastest unsigned. - */ -typedef uint8_t eventmask_t; - -/** - * @brief System Time, recommended fastest unsigned. - */ -typedef uint16_t systime_t; - -/** - * @brief Counter, recommended fastest signed. - */ -typedef int16_t cnt_t; - -/** - * @brief Inline function modifier. - */ -#define INLINE inline - -/** - * @brief ROM constant modifier. - * @note Uses the custom "code" keyword in this port. - */ -#define ROMCONST code - -/** - * @brief Packed structure modifier (within). - * @note Empty in this port. - */ -#define PACK_STRUCT_STRUCT - -/** - * @brief Packed structure modifier (before). - * @note Empty in this port. - */ -#define PACK_STRUCT_BEGIN - -/** - * @brief Packed structure modifier (after). - * @note Empty in this port. - */ -#define PACK_STRUCT_END - -#endif /* _CHTYPES_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/ports/RC/STM8/port.dox b/ChibiOS_2.0.8/os/ports/RC/STM8/port.dox deleted file mode 100644 index 6eea647..0000000 --- a/ChibiOS_2.0.8/os/ports/RC/STM8/port.dox +++ /dev/null @@ -1,94 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup STM8 STM8 - * @details STM8 port details. This section how the ChibiOS/RT features are - * implemented on this architecture. - * - * @section STM8_STATES Mapping of the System States in the STM8 port - * The ChibiOS/RT logical @ref system_states are mapped as follow in the STM8 - * port: - * - Init. This state is represented by the startup code and the - * initialization code before @p chSysInit() is executed. It has not a - * special hardware state associated. - * - Normal. This is the state the system has after executing - * @p chSysInit(). Interrupts are enabled. - * - Suspended. Interrupts are disabled. - * - Disabled. Interrupts are disabled. This state is equivalent to the - * Suspended state because there are no fast interrupts in this architecture. - * - Sleep. Implemented with "wait" instruction insertion in the idle - * loop. - * - S-Locked. Interrupts are disabled. - * - I-Locked. This state is equivalent to the SRI state, the - * @p chSysLockI() and @p chSysUnlockI() APIs do nothing (still use them in - * order to formally change state because this may change). - * - Serving Regular Interrupt. Normal interrupt service code. - * - Serving Fast Interrupt. Not present in this architecture. - * - Serving Non-Maskable Interrupt. The STM8 ha non - * maskable interrupt sources that can be associated to this state. - * - Halted. Implemented as an infinite loop with interrupts disabled. - * . - * @section STM8_NOTES The STM8 port notes - * - The STM8 does not have a dedicated interrupt stack, make sure to reserve - * enough stack space for interrupts in each thread stack. This can be done - * by modifying the @p INT_REQUIRED_STACK macro into - * ./os/ports/RC/STM8/chcore.h. - * - The kernel currently supports only the small memory model so the - * kernel files should be loaded in the first 64K. Note that this is not - * a problem because upper addresses can be used by the user code, the - * kernel can context switch code running there. - * - The configuration option @p CH_OPTIMIZE_SPEED is not currently supported - * because the missing support of the @p inline "C" keyword in the - * compiler. - * . - * @ingroup ports - */ - -/** - * @defgroup STM8_CONF Configuration Options - * @brief STM8 Configuration Options. - * @details The STM8 port allows some architecture-specific configurations - * settings that can be specified externally, as example on the compiler - * command line: - * - @p INT_REQUIRED_STACK, this value represent the amount of stack space - * used by the interrupt handlers.
      - * The default for this value is @p 32, this space is allocated for each - * thread so be careful in order to not waste precious RAM space.
      - * The default value is set into ./os/ports/RC/STM8/chcore.h. - * . - * @ingroup STM8 - */ - -/** - * @defgroup STM8_CORE Core Port Implementation - * @brief STM8 specific port code, structures and macros. - * - * @ingroup STM8 - * @file STM8/chtypes.h Port types. - * @file STM8/chcore.h Port related structures and macros. - * @file STM8/chcore.c Port related code. - */ diff --git a/ChibiOS_2.0.8/os/ports/ports.dox b/ChibiOS_2.0.8/os/ports/ports.dox deleted file mode 100644 index 7fcb103..0000000 --- a/ChibiOS_2.0.8/os/ports/ports.dox +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup ports Ports - * This section describes the technical details of the various supported - * ChibiOS/RT ports. - */ - diff --git a/ChibiOS_2.0.8/os/various/ch.cpp b/ChibiOS_2.0.8/os/various/ch.cpp deleted file mode 100644 index 2e46966..0000000 --- a/ChibiOS_2.0.8/os/various/ch.cpp +++ /dev/null @@ -1,342 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ -/** - * @file ch.cpp - * @brief C++ wrapper code. - * @addtogroup cpp_library - * @{ - */ - -#include "ch.hpp" - -namespace chibios_rt { - - /*------------------------------------------------------------------------* - * chibios_rt::System * - *------------------------------------------------------------------------*/ - void System::Init(void) { - - chSysInit(); - } - - void System::Lock(void) { - - chSysLock(); - } - - void System::Unlock(void) { - - chSysUnlock(); - } - - systime_t System::GetTime(void) { - - return chTimeNow(); - } - - /*------------------------------------------------------------------------* - * chibios_rt::Timer * - *------------------------------------------------------------------------*/ - void Timer::Set(systime_t time, vtfunc_t vtfunc, void *par) { - - chVTSetI(&timer, time, vtfunc, par); - } - - void Timer::Reset() { - - chVTResetI(&timer); - } - - bool Timer::IsArmed(void) { - - return chVTIsArmedI(&timer); - } - - /*------------------------------------------------------------------------* - * chibios_rt::BaseThread * - *------------------------------------------------------------------------*/ - static msg_t thdstart(void *arg) { - - return ((BaseThread *)arg)->Main(); - } - - BaseThread::BaseThread(void *workspace, size_t wsize, tprio_t prio) { - - thread_ref = chThdCreateStatic(workspace, wsize, prio, thdstart, this); - } - - void BaseThread::Exit(msg_t msg) { - - chThdExit(msg); - } - -#if CH_USE_WAITEXIT - msg_t BaseThread::Wait(void) { - - return chThdWait(thread_ref); - } -#endif /* CH_USE_WAITEXIT */ - - void BaseThread::SetPriority(tprio_t newprio) { - - chThdSetPriority(newprio); - } - - void BaseThread::Resume(void) { - - chThdResume(thread_ref); - } - - void BaseThread::Terminate(void) { - - chThdTerminate(thread_ref); - } - - void BaseThread::Sleep(systime_t n) { - - chThdSleep(n); - } - - void BaseThread::SleepUntil(systime_t time) { - - chThdSleepUntil(time); - } - -#if CH_USE_MESSAGES - msg_t BaseThread::SendMessage(::Thread* tp, msg_t msg) { - - return chMsgSend(tp, msg); - } - - msg_t BaseThread::SendMessage(msg_t msg) { - - return chMsgSend(thread_ref, msg); - } - - msg_t BaseThread::WaitMessage(void) { - - return chMsgWait(); - } - - msg_t BaseThread::GetMessage(void) { - - return chMsgGet(); - } - - void BaseThread::ReleaseMessage(msg_t msg) { - - chMsgRelease(msg); - } - - bool BaseThread::IsPendingMessage(void) { - - return chMsgIsPendingI(currp); - } -#endif /* CH_USE_MESSAGES */ - - msg_t BaseThread::Main(void) { - - return 0; - } - -#if CH_USE_SEMAPHORES - /*------------------------------------------------------------------------* - * chibios_rt::Semaphore * - *------------------------------------------------------------------------*/ - Semaphore::Semaphore(cnt_t n) { - - chSemInit(&sem, n); - } - - void Semaphore::Reset(cnt_t n) { - - chSemReset(&sem, n); - } - - msg_t Semaphore::Wait(void) { - - return chSemWait(&sem); - } - - msg_t Semaphore::WaitTimeout(systime_t time) { - - return chSemWaitTimeout(&sem, time); - } - - void Semaphore::Signal(void) { - - chSemSignal(&sem); - } - -#if CH_USE_SEMSW - msg_t Semaphore::SignalWait(Semaphore *ssem, Semaphore *wsem) { - - return chSemSignalWait(&ssem->sem, &wsem->sem); - } -#endif /* CH_USE_SEMSW */ -#endif /* CH_USE_SEMAPHORES */ - -#if CH_USE_MUTEXES - /*------------------------------------------------------------------------* - * chibios_rt::Mutex * - *------------------------------------------------------------------------*/ - Mutex::Mutex(void) { - - chMtxInit(&mutex); - } - - bool Mutex::TryLock(void) { - - return chMtxTryLock(&mutex); - } - - void Mutex::Lock(void) { - - chMtxLock(&mutex); - } - - void Mutex::Unlock(void) { - - chMtxUnlock(); - } - - void UnlockAll(void) { - - chMtxUnlockAll(); - } - -#if CH_USE_CONDVARS - /*------------------------------------------------------------------------* - * chibios_rt::CondVar * - *------------------------------------------------------------------------*/ - CondVar::CondVar(void) { - - chCondInit(&condvar); - } - - void CondVar::Signal(void) { - - chCondSignal(&condvar); - } - - void CondVar::Broadcast(void) { - - chCondBroadcast(&condvar); - } - - msg_t CondVar::Wait(void) { - - return chCondWait(&condvar); - } - -#if CH_USE_CONDVARS_TIMEOUT - msg_t CondVar::WaitTimeout(systime_t time) { - - return chCondWaitTimeout(&condvar, time); - } -#endif /* CH_USE_CONDVARS_TIMEOUT */ -#endif /* CH_USE_CONDVARS */ -#endif /* CH_USE_MUTEXES */ - -#if CH_USE_EVENTS - /*------------------------------------------------------------------------* - * chibios_rt::Event * - *------------------------------------------------------------------------*/ - Event::Event(void) { - - chEvtInit(&event); - } - - void Event::Register(EventListener *elp, eventid_t eid) { - - chEvtRegister(&event,elp, eid); - } - - void Event::RegisterMask(EventListener *elp, eventmask_t emask) { - - chEvtRegisterMask(&event,elp, emask); - } - - void Event::Unregister(EventListener *elp) { - - chEvtUnregister(&event, elp); - } - - void Event::Broadcast(void) { - - chEvtBroadcast(&event); - } - - eventmask_t Event::Clear(eventmask_t mask) { - - return chEvtClear(mask); - } - - eventmask_t Event::Pend(eventmask_t mask) { - - return chEvtPend(mask); - } - - void Event::Dispatch(const evhandler_t handlers[], eventmask_t mask) { - - chEvtDispatch(handlers, mask); - } - - eventmask_t Event::WaitOne(eventmask_t ewmask) { - - return chEvtWaitOne(ewmask); - } - - eventmask_t Event::WaitAny(eventmask_t ewmask) { - - return chEvtWaitAny(ewmask); - } - - eventmask_t Event::WaitAll(eventmask_t ewmask) { - - return chEvtWaitAll(ewmask); - } - -#if CH_USE_EVENTS_TIMEOUT - eventmask_t Event::WaitOneTimeout(eventmask_t ewmask, systime_t time) { - - return chEvtWaitOneTimeout(ewmask, time); - } - - eventmask_t Event::WaitAnyTimeout(eventmask_t ewmask, systime_t time) { - - return chEvtWaitAnyTimeout(ewmask, time); - } - - eventmask_t Event::WaitAllTimeout(eventmask_t ewmask, systime_t time) { - - return chEvtWaitAllTimeout(ewmask, time); - } -#endif /* CH_USE_EVENTS_TIMEOUT */ -#endif /* CH_USE_EVENTS */ -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/various/ch.hpp b/ChibiOS_2.0.8/os/various/ch.hpp deleted file mode 100644 index 15d90de..0000000 --- a/ChibiOS_2.0.8/os/various/ch.hpp +++ /dev/null @@ -1,625 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file ch.hpp - * @brief C++ wrapper classes and definitions. - * @addtogroup cpp_library - * @{ - */ - -#include - -#ifndef _CH_HPP_ -#define _CH_HPP_ - -namespace chibios_rt { - - /** - * @brief Class encapsulating the base system functionalities. - */ - class System { - public: - /** - * @brief ChibiOS/RT initialization. - * @details The system is initialized, the idle thread is spawned and the - * current instruction flow becomes the main thread with priority - * @p NORMALPRIO. - */ - static void Init(void); - - /** - * @brief Kernel lock. - * - * @note On some ports it is faster to invoke chSysLock() directly because - * inlining. - */ - static void Lock(void); - - /** - * @brief Kernel unlock. - * - * @note On some ports it is faster to invoke chSysUnlock() directly - * because inlining. - */ - static void Unlock(void); - - /** - * @brief Returns the system time as system ticks. - * - * @note the system tick time interval is implementation dependent. - */ - static systime_t GetTime(void); - }; - - /** - * @brief Timer class. - */ - class Timer { - public: - /** - * @brief Embedded @p VirtualTimer structure. - */ - struct ::VirtualTimer timer; - - /** - * @brief Starts the timer. - * - * @param time the time in system ticks - * @param vtfunc the timer callback function - * @param par the parameter for the callback function - * @note It must be called with the interrupts disabled. - * @note The associated function is invoked by an interrupt handler. - */ - void Set(systime_t time, vtfunc_t vtfunc, void *par); - - /** - * @brief Resets the timer. - * - * @note It must be called with the interrupts disabled. - * @note The timer MUST be active when this function is invoked. - */ - void Reset(); - - /** - * @brief Returns the timer status. - * - * @retval TRUE The timer is armed. - * @retval FALSE The timer already fired its callback. - */ - bool IsArmed(void); - }; - - /** - * @brief Base class for a ChibiOS/RT thread. - * @details The thread body is the virtual function @p Main(). - */ - class BaseThread { - public: - /** - * @brief Pointer to the system thread. - */ - ::Thread *thread_ref; - - /** - * @brief Thread constructor. - * @details The thread object is initialized and a system thread is - * started. - * - * @param workspace pointer to the workspace area - * @param wsize size of the workspace area - * @param prio thread priority - */ - BaseThread(void *workspace, size_t wsize, tprio_t prio); - - /** - * @brief Thread exit. - * - * @param msg the exit message - */ - static void Exit(msg_t msg); - -#if CH_USE_WAITEXIT - /** - * @brief Synchronization on Thread exit. - * - * @return the exit message from the thread - */ - msg_t Wait(void); -#endif /* CH_USE_WAITEXIT */ - - /** - * @brief Resumes the thread. - * @details The thread encapsulated into the object is resumed. - */ - void Resume(void); - - /** - * @brief Changes the thread priority. - * - * @param newprio the new priority level - */ - static void SetPriority(tprio_t newprio); - - /** - * @brief Requests thread termination. - * @details A termination flag is pended on the thread, it is thread - * responsibility to detect it and exit. - */ - void Terminate(void); - - /** - * @brief Suspends the thread execution for the specified number of - * system ticks. - * - * @param n the number of system ticks - */ - static void Sleep(systime_t n); - - /** - * @brief Suspends the thread execution until the specified time arrives. - * - * @param time the system time - */ - static void SleepUntil(systime_t time); - -#if CH_USE_MESSAGES - /** - * @brief Sends a message to the thread and returns the answer. - * - * @param tp the target thread - * @param msg the sent message - * @return The returned message. - */ - static msg_t SendMessage(::Thread *tp, msg_t msg); - - /** - * @brief Sends a message to the thread and returns the answer. - * - * @param msg the sent message - * @return The returned message. - */ - msg_t SendMessage(msg_t msg); - - /** - * @brief Waits for a message and returns it. - * - * @return The incoming message. - */ - static msg_t WaitMessage(void); - - /** - * @brief Returns an enqueued message or @p NULL. - * - * @return The incoming message. - * @retval NULL No incoming message. - */ - static msg_t GetMessage(void); - - /** - * @brief Releases the next message in queue with a reply. - * - * @param msg the answer message - */ - static void ReleaseMessage(msg_t msg); - - /** - * @brief Returns true if there is at least one message in queue. - * - * @retval TRUE A message is waiting in queue. - * @retval FALSE A message is not waiting in queue. - */ - static bool IsPendingMessage(void); -#endif /* CH_USE_MESSAGES */ - - /** - * @brief Thread body function. - * - * @return The exit message. - */ - virtual msg_t Main(void); - }; - - /** - * @brief Enhanced threads template class. - * @details This class introduces thread names and static working area - * allocation. - * - * @param N the working area size for the thread class - */ - template - class EnhancedThread : public BaseThread { - protected: - WORKING_AREA(wa, N); // Thread working area. - - public: - /** - * @brief The thread name. - */ - const char *name; - - /** - * @brief Full constructor. - * @details This constructor allows to set a priority level for the new - * thread. - * @param tname the name to be assigned to the thread - * @param prio the priority to be assigned to the thread - */ - EnhancedThread(const char *tname, tprio_t prio) : - BaseThread(wa, sizeof wa, prio) { - - name = tname; - } - - /** - * @brief Simplified constructor. - * @details This constructor allows to create a thread by simply - * specifying a name. In is assumed @p NORMALPRIO as initial priority. - * - * @param tname the name to be assigned to the thread - */ - EnhancedThread(const char *tname) : - BaseThread(wa, sizeof wa, NORMALPRIO) { - - name = tname; - } - }; - -#if CH_USE_SEMAPHORES - /** - * @brief Class encapsulating a semaphore. - */ - class Semaphore { - public: - /** - * @brief Embedded @p ::Semaphore structure. - */ - struct ::Semaphore sem; - - /** - * @brief Semaphore constructor. - * @details The embedded @p ::Semaphore structure is initialized. - * - * @param n the semaphore counter value, must be greater or equal to zero - */ - Semaphore(cnt_t n); - - /** - * @brief Resets a semaphore. - * - * @param n the new semaphore counter value, must be greater or equal to zero - */ - void Reset(cnt_t n); - - /** - * @brief Wait operation on the semaphore. - * - * @retval RDY_OK if the semaphore was signaled or not taken. - * @retval RDY_RESET if the semaphore was reset. - */ - msg_t Wait(void); - - /** - * @brief Wait operation on the semaphore with timeout. - * - * @param time the number of ticks before the operation fails - * @retval RDY_OK if the semaphore was signaled or not taken. - * @retval RDY_RESET if the semaphore was reset. - * @retval RDY_TIMEOUT if the semaphore was not signaled or reset within the - * specified timeout. - */ - msg_t WaitTimeout(systime_t time); - - /** - * @brief Signal operation on the semaphore. - * @details The semaphore is signaled, the next thread in queue, if any, - * is awakened. - */ - void Signal(void); - -#if CH_USE_SEMSW - /** - * @brief Atomic signal and wait operations. - * - * @param ssem pointer to a @p Semaphore to be signaled - * @param wsem pointer to a @p Semaphore to be wait on - * @retval RDY_OK if the semaphore was signaled or not taken. - * @retval RDY_RESET if the semaphore was reset. - */ - static msg_t SignalWait(Semaphore *ssem, Semaphore *wsem); -#endif /* CH_USE_SEMSW */ - }; -#endif /* CH_USE_SEMAPHORES */ - -#if CH_USE_MUTEXES - /** - * @brief Class encapsulating a mutex. - */ - class Mutex { - public: - /** - * @brief Embedded @p ::Mutex structure. - */ - struct ::Mutex mutex; - - /** - * @brief Mutex constructor. - * @details The embedded @p ::Mutex structure is initialized. - */ - Mutex(void); - - /** - * @brief Tries a lock operation on the mutex. - * @retval TRUE if the mutex was successfully acquired - * @retval FALSE if the lock attempt failed. - */ - bool TryLock(void); - - /** - * @brief Locks the mutex. - * @details Performs a lock operation on the mutex, if the mutex is - * already locked then the thread enters the mutex priority queue and - * waits. - */ - void Lock(void); - - /** - * @brief Unlocks the mutex. - * @details Performs an unlock operation on the mutex, the next waiting - * thread, if any, is resumed and locks the mutex. - */ - static void Unlock(void); - - /** - * @brief Unlocks all the mutexes owned by the invoking thread. - * @details This operation is MUCH MORE efficient than releasing - * the mutexes one by one and not just because the call overhead, this - * function does not have any overhead related to the priority inheritance - * mechanism. - */ - static void UnlockAll(void); - }; - -#if CH_USE_CONDVARS - /** - * @brief Class encapsulating a conditional variable. - */ - class CondVar { - public: - /** - * @brief Embedded @p ::CondVar structure. - */ - struct ::CondVar condvar; - - /** - * @brief CondVar constructor. - * @details The embedded @p ::CondVar structure is initialized. - */ - CondVar(void); - - /** - * @brief Signals the CondVar. - * @details The next thread waiting on the @p CondVar, if any, is awakened. - */ - void Signal(void); - - /** - * @brief Broadcasts the CondVar. - * @details All the threads waiting on the @p CondVar, if any, are awakened. - */ - void Broadcast(void); - - /** - * @brief Waits on the CondVar while releasing the controlling mutex. - * - * @return The wakep mode. - * @retval RDY_OK if the condvar was signaled using chCondSignal(). - * @retval RDY_RESET if the condvar was signaled using chCondBroadcast(). - */ - msg_t Wait(void); - -#if CH_USE_CONDVARS_TIMEOUT - /** - * @brief Waits on the CondVar while releasing the controlling mutex. - * - * @param time the number of ticks before the operation fails - * @return The wakep mode. - * @retval RDY_OK if the condvar was signaled using chCondSignal(). - * @retval RDY_RESET if the condvar was signaled using chCondBroadcast(). - * @retval RDY_TIMEOUT if the condvar was not signaled within the specified - * timeout. - */ - msg_t WaitTimeout(systime_t time); -#endif /* CH_USE_CONDVARS_TIMEOUT */ - }; -#endif /* CH_USE_CONDVARS */ -#endif /* CH_USE_MUTEXES */ - -#if CH_USE_EVENTS - /** - * @brief Class encapsulating an event source. - */ - class Event { - public: - /** - * @brief Embedded @p ::EventSource structure. - */ - struct ::EventSource event; - - /** - * @brief Event constructor. - * @details The embedded @p ::EventSource structure is initialized. - */ - Event(void); - - /** - * @brief Registers a listener on the event source. - * - * @param elp pointer to the @p EventListener structure - * @param eid numeric identifier assigned to the Event Listener - */ - void Register(EventListener *elp, eventid_t eid); - - /** - * @brief Registers an Event Listener on an Event Source. - * - * @param elp pointer to the @p EventListener structure - * @param emask the mask of event flags to be pended to the thread when the - * event source is broadcasted - * @note Multiple Event Listeners can specify the same bits to be pended. - */ - void RegisterMask(EventListener *elp, eventmask_t emask); - - /** - * @brief Unregisters a listener. - * @details The specified listeners is no more signaled by the event - * source. - * - * @param elp the listener to be unregistered - */ - void Unregister(EventListener *elp); - - /** - * @brief Broadcasts an event. - * @details All the listeners registered on the event source are signaled. - */ - void Broadcast(void); - - /** - * @brief Clears specified events from the pending events mask. - * - * @param mask the events to be cleared - * @return The pending events that were cleared. - */ - static eventmask_t Clear(eventmask_t mask); - - /** - * @brief Makes an events mask pending in the current thread. - * @details This functon is @b much faster than using @p Broadcast(). - * - * @param mask the events to be pended - * @return The current pending events mask. - */ - static eventmask_t Pend(eventmask_t mask); - - /** - * @brief Invokes the event handlers associated with a mask. - * - * @param mask mask of the events to be dispatched - * @param handlers an array of @p evhandler_t. The array must be - * have indexes from zero up the higher registered event - * identifier. - */ - static void Dispatch(const evhandler_t handlers[], eventmask_t mask); - - /** - * @brief Waits for a single event. - * @details A pending event among those specified in @p ewmask is selected, - * cleared and its mask returned. - * - * @param ewmask mask of the events that the function should wait for, - * @p ALL_EVENTS enables all the events - * @return The mask of the lowest id served and cleared event. - * @note One and only one event is served in the function, the one with the - * lowest event id. The function is meant to be invoked into a loop in - * order to serve all the pending events.
      - * This means that Event Listeners with a lower event identifier have - * an higher priority. - */ - static eventmask_t WaitOne(eventmask_t ewmask); - - /** - * @brief Waits for any of the specified events. - * @details The function waits for any event among those specified in - * @p ewmask to become pending then the events are cleared and returned. - * - * @param ewmask mask of the events that the function should wait for, - * @p ALL_EVENTS enables all the events - * @return The mask of the served and cleared events. - */ - static eventmask_t WaitAny(eventmask_t ewmask); - - /** - * @brief Waits for all the specified event flags then clears them. - * @details The function waits for all the events specified in @p ewmask - * to become pending then the events are cleared and returned. - * - * @param ewmask mask of the event ids that the function should wait for - * @return The mask of the served and cleared events. - */ - static eventmask_t WaitAll(eventmask_t ewmask); - -#if CH_USE_EVENTS_TIMEOUT - /** - * @brief Waits for a single event. - * @details A pending event among those specified in @p ewmask is selected, - * cleared and its mask returned. - * @param ewmask mask of the events that the function should wait for, - * @p ALL_EVENTS enables all the events - * @param time the number of ticks before the operation timouts - * @return The mask of the lowest id served and cleared event. - * @retval 0 if the specified timeout expired. - * @note One and only one event is served in the function, the one with the - * lowest event id. The function is meant to be invoked into a loop in - * order to serve all the pending events.
      - * This means that Event Listeners with a lower event identifier have - * an higher priority. - */ - static eventmask_t WaitOneTimeout(eventmask_t ewmask, systime_t time); - - /** - * @brief Waits for any of the specified events. - * @details The function waits for any event among those specified in - * @p ewmask to become pending then the events are cleared and returned. - * - * @param ewmask mask of the events that the function should wait for, - * @p ALL_EVENTS enables all the events - * @param time the number of ticks before the operation timouts - * @return The mask of the served and cleared events. - * @retval 0 if the specified timeout expired. - */ - static eventmask_t WaitAnyTimeout(eventmask_t ewmask, systime_t time); - - /** - * @brief Waits for all the specified event flags then clears them. - * @details The function waits for all the events specified in @p ewmask - * to become pending then the events are cleared and returned. - * - * @param ewmask mask of the event ids that the function should wait for - * @param time the number of ticks before the operation timouts - * @return The mask of the served and cleared events. - * @retval 0 if the specified timeout expired. - */ - static eventmask_t WaitAllTimeout(eventmask_t ewmask, systime_t time); - -#endif /* CH_USE_EVENTS_TIMEOUT */ - }; -#endif /* CH_USE_EVENTS */ -} - -#endif /* _CH_HPP_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/various/evtimer.c b/ChibiOS_2.0.8/os/various/evtimer.c deleted file mode 100644 index 38f57c7..0000000 --- a/ChibiOS_2.0.8/os/various/evtimer.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file evtimer.c - * @brief Events Generator Timer code. - * @addtogroup event_timer - * @{ - */ - -#include "ch.h" -#include "evtimer.h" - -static void tmrcb(void *p) { - EvTimer *etp = p; - - chEvtBroadcastI(&etp->et_es); - chVTSetI(&etp->et_vt, etp->et_interval, tmrcb, etp); -} - -/** - * @brief Starts the timer - * @details If the timer was already running then the function has no effect. - * - * @param etp pointer to an initialized @p EvTimer structure. - */ -void evtStart(EvTimer *etp) { - - chSysLock(); - - if (!chVTIsArmedI(&etp->et_vt)) - chVTSetI(&etp->et_vt, etp->et_interval, tmrcb, etp); - - chSysUnlock(); -} - -/** - * @brief Stops the timer. - * @details If the timer was already stopped then the function has no effect. - * - * @param etp pointer to an initialized @p EvTimer structure. - */ -void evtStop(EvTimer *etp) { - - chSysLock(); - - if (chVTIsArmedI(&etp->et_vt)) - chVTResetI(&etp->et_vt); - - chSysUnlock(); -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/various/evtimer.h b/ChibiOS_2.0.8/os/various/evtimer.h deleted file mode 100644 index 78ba869..0000000 --- a/ChibiOS_2.0.8/os/various/evtimer.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file evtimer.h - * @brief Events Generator Timer structures and macros. - * @addtogroup event_timer - * @{ - */ - -#ifndef _EVTIMER_H_ -#define _EVTIMER_H_ - -/** - * @brief Event timer structure. - */ -typedef struct { - VirtualTimer et_vt; - EventSource et_es; - systime_t et_interval; -} EvTimer; - -#ifdef __cplusplus -extern "C" { -#endif - void evtStart(EvTimer *etp); - void evtStop(EvTimer *etp); -#ifdef __cplusplus -} -#endif - -/** - * @brief Initializes an @p EvTimer structure. - * - * @param etp the EvTimer structure to be initialized - * @param time the interval in system ticks - */ -#define evtInit(etp, time) { \ - chEvtInit(&(etp)->et_es); \ - (etp)->et_vt.vt_func = NULL; \ - (etp)->et_interval = (time); \ -} - -#endif /* _EVTIMER_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/various/memstreams.c b/ChibiOS_2.0.8/os/various/memstreams.c deleted file mode 100644 index f1a7581..0000000 --- a/ChibiOS_2.0.8/os/various/memstreams.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file memstreams.c - * @brief Memory streams code. - * - * @addtogroup memory_streams - * @{ - */ - -#include - -#include "ch.h" -#include "memstreams.h" - -/* - * @brief Write virtual method implementation. - * - * @param[in] ip pointer to a @p MemoryStream object - * @param[in] bp pointer to the data buffer - * @param[in] n the maximum amount of data to be transferred - * @return The number of bytes transferred. The return value can - * be less than the specified number of bytes if the - * stream reaches a physical end of file and cannot be - * extended. - */ -static size_t writes(void *ip, const uint8_t *bp, size_t n) { - MemoryStream *msp = ip; - - if (msp->size - msp->eos < n) - n = msp->size - msp->eos; - memcpy(msp->buffer + msp->eos, bp, n); - msp->eos += n; - return n; -} - -/* - * @brief Read virtual method implementation. - * - * @param[in] ip pointer to a @p MemoryStream object - * @param[out] bp pointer to the data buffer - * @param[in] n the maximum amount of data to be transferred - * @return The number of bytes transferred. The return value can - * be less than the specified number of bytes if the - * stream reaches the end of the available data. - */ -static size_t reads(void *ip, uint8_t *bp, size_t n) { - MemoryStream *msp = ip; - - if (msp->eos - msp->offset < n) - n = msp->eos - msp->offset; - memcpy(bp, msp->buffer + msp->offset, n); - msp->offset += n; - return n; -} - -static const struct MemStreamVMT vmt = {writes, reads}; - -/** - * @brief Memory stream object initialization. - * - * @param[out] msp pointer to the @p MemoryStream object to be initialized - * @param[in] buffer pointer to the memory buffer for the memory stream - * @param[in] size total size of the memory stream buffer - * @param[in] eos initial End Of Stream offset. Normally you need to - * put this to zero for RAM buffers or equal to @p size - * for ROM streams. - */ -void msObjectInit(MemoryStream *msp, uint8_t *buffer, size_t size, size_t eos) { - - msp->vmt = &vmt; - msp->buffer = buffer; - msp->size = size; - msp->eos = eos; - msp->offset = 0; -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/various/memstreams.h b/ChibiOS_2.0.8/os/various/memstreams.h deleted file mode 100644 index 879998f..0000000 --- a/ChibiOS_2.0.8/os/various/memstreams.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file memstreams.h - * @brief Memory streams structures and macros. - - * @addtogroup memory_streams - * @{ - */ - -#ifndef _MEMSTREAMS_H_ -#define _MEMSTREAMS_H_ - -/** - * @brief @p RamStream specific data. - */ -#define _memory_stream_data \ - _base_sequential_stream_data \ - /* Pointer to the stream buffer.*/ \ - uint8_t *buffer; \ - /* Size of the stream.*/ \ - size_t size; \ - /* Current end of stream.*/ \ - size_t eos; \ - /* Current read offset.*/ \ - size_t offset; - -/** - * @brief @p MemStream virtual methods table. - */ -struct MemStreamVMT { - _base_sequential_stream_methods -}; - -/** - * @extends BaseSequentialStream - * - * @brief Memory stream object. - */ -typedef struct { - /** @brief Virtual Methods Table.*/ - const struct MemStreamVMT *vmt; - _memory_stream_data -} MemoryStream; - -#ifdef __cplusplus -extern "C" { -#endif - void msObjectInit(MemoryStream *msp, uint8_t *buffer, size_t size, size_t eos); -#ifdef __cplusplus -} -#endif - -#endif /* _MEMSTREAMS_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/various/shell.c b/ChibiOS_2.0.8/os/various/shell.c deleted file mode 100644 index 35551b4..0000000 --- a/ChibiOS_2.0.8/os/various/shell.c +++ /dev/null @@ -1,306 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file shell.c - * @brief Simple CLI shell code. - * @addtogroup SHELL - * @{ - */ - -#include -#include - -#include "ch.h" -#include "hal.h" -#include "shell.h" - -#if SHELL_USE_IPRINTF -#define sprintf siprintf -#endif - -/** - * @brief Shell termination event source. - */ -EventSource shell_terminated; - -#if defined(WIN32) -/* - * MinGW does not seem to have this function... - */ -static char *strtok_r(char *str, const char *delim, char **saveptr) { - char *token; - if (str) - *saveptr = str; - token = *saveptr; - - if (!token) - return NULL; - - token += strspn(token, delim); - *saveptr = strpbrk(token, delim); - if (*saveptr) - *(*saveptr)++ = '\0'; - - return *token ? token : NULL; -} -#endif - -static void usage(BaseChannel *chp, char *p) { - - shellPrint(chp, "Usage: "); - shellPrintLine(chp, p); -} - -static void list_commands(BaseChannel *chp, const ShellCommand *scp) { - - while (scp->sc_name != NULL) { - shellPrint(chp, scp->sc_name); - shellPrint(chp, " "); - scp++; - } -} - -static void cmd_info(BaseChannel *chp, int argc, char *argv[]) { - - (void)argv; - if (argc > 0) { - usage(chp, "info"); - return; - } - - shellPrint(chp, "Kernel version: "); - shellPrintLine(chp, CH_KERNEL_VERSION); -#ifdef __GNUC__ - shellPrint(chp, "GCC Version: "); - shellPrintLine(chp, __VERSION__); -#endif - shellPrint(chp, "Architecture: "); - shellPrintLine(chp, CH_ARCHITECTURE_NAME); -#ifdef CH_CORE_VARIANT_NAME - shellPrint(chp, "Core Variant: "); - shellPrintLine(chp, CH_CORE_VARIANT_NAME); -#endif -#ifdef PLATFORM_NAME - shellPrint(chp, "Platform: "); - shellPrintLine(chp, PLATFORM_NAME); -#endif -#ifdef BOARD_NAME - shellPrint(chp, "Board: "); - shellPrintLine(chp, BOARD_NAME); -#endif -} - -static void cmd_systime(BaseChannel *chp, int argc, char *argv[]) { - char buf[12]; - - (void)argv; - if (argc > 0) { - usage(chp, "systime"); - return; - } - sprintf(buf, "%lu", (unsigned long)chTimeNow()); - shellPrintLine(chp, buf); -} - -/** - * @brief Array of the default commands. - */ -static ShellCommand local_commands[] = { - {"info", cmd_info}, - {"systime", cmd_systime}, - {NULL, NULL} -}; - -static bool_t cmdexec(const ShellCommand *scp, BaseChannel *chp, - char *name, int argc, char *argv[]) { - - while (scp->sc_name != NULL) { - if (strcasecmp(scp->sc_name, name) == 0) { - scp->sc_function(chp, argc, argv); - return FALSE; - } - scp++; - } - return TRUE; -} - -/** - * @brief Shell thread function. - * - * @param[in] p pointer to a @p BaseChannel object - * @return Termination reason. - * @retval RDY_OK terminated by command. - * @retval RDY_RESET terminated by reset condition on the I/O channel. - */ -static msg_t shell_thread(void *p) { - int n; - msg_t msg = RDY_OK; - BaseChannel *chp = ((ShellConfig *)p)->sc_channel; - const ShellCommand *scp = ((ShellConfig *)p)->sc_commands; - char *lp, *cmd, *tokp, line[SHELL_MAX_LINE_LENGTH]; - char *args[SHELL_MAX_ARGUMENTS + 1]; - - shellPrintLine(chp, ""); - shellPrintLine(chp, "ChibiOS/RT Shell"); - while (TRUE) { - shellPrint(chp, "ch> "); - if (shellGetLine(chp, line, sizeof(line))) { - shellPrint(chp, "\nlogout"); - break; - } - lp = strtok_r(line, " \009", &tokp); - cmd = lp; - n = 0; - while ((lp = strtok_r(NULL, " \009", &tokp)) != NULL) { - if (n >= SHELL_MAX_ARGUMENTS) { - shellPrintLine(chp, "too many arguments"); - cmd = NULL; - break; - } - args[n++] = lp; - } - args[n] = NULL; - if (cmd != NULL) { - if (strcasecmp(cmd, "exit") == 0) { - if (n > 0) - usage(chp, "exit"); - break; - } - else if (strcasecmp(cmd, "help") == 0) { - if (n > 0) - usage(chp, "help"); - shellPrint(chp, "Commands: help exit "); - list_commands(chp, local_commands); - if (scp != NULL) - list_commands(chp, scp); - shellPrintLine(chp, ""); - } - else if (cmdexec(local_commands, chp, cmd, n, args) && - ((scp == NULL) || cmdexec(scp, chp, cmd, n, args))) { - shellPrint(chp, cmd); - shellPrintLine(chp, " ?"); - } - } - } - chSysLock(); - chEvtBroadcastI(&shell_terminated); - return msg; -} - -/** - * @brief Shell manager initialization. - */ -void shellInit(void) { - - chEvtInit(&shell_terminated); -} - -/** - * @brief Spawns a new shell. - * - * @param[in] scp pointer to a @p ShellConfig object - * @param[in] size size of the shell working area to be allocated - * @param[in] prio the priority level for the new shell - * - * @return A pointer to the shell thread. - * @retval NULL thread creation failed because memory allocation. - */ -Thread *shellCreate(const ShellConfig *scp, size_t size, tprio_t prio) { - - return chThdCreateFromHeap(NULL, size, prio, shell_thread, (void *)scp); -} - -/** - * @brief Prints a string. - * - * @param[in] chp pointer to a @p BaseChannel object - * @param[in] msg pointer to the string - */ -void shellPrint(BaseChannel *chp, const char *msg) { - - while (*msg) - chIOPut(chp, *msg++); -} - -/** - * @brief Prints a string with a final newline. - * - * @param[in] chp pointer to a @p BaseChannel object - * @param[in] msg pointer to the string - */ -void shellPrintLine(BaseChannel *chp, const char *msg) { - - shellPrint(chp, msg); - shellPrint(chp, "\r\n"); -} - -/** - * @brief Reads a whole line from the input channel. - * - * @param[in] chp pointer to a @p BaseChannel object - * @param[in] line pointer to the line buffer - * @param[in] size buffer maximum length - * - * @return The operation status. - * @retval TRUE the channel was reset or CTRL-D pressed. - * @retval FALSE operation successful. - */ -bool_t shellGetLine(BaseChannel *chp, char *line, unsigned size) { - char *p = line; - - while (TRUE) { - short c = (short)chIOGet(chp); - if (c < 0) - return TRUE; - if (c == 4) { - shellPrintLine(chp, "^D"); - return TRUE; - } - if (c == 8) { - if (p != line) { - chIOPut(chp, (uint8_t)c); - chIOPut(chp, 0x20); - chIOPut(chp, (uint8_t)c); - p--; - } - continue; - } - if (c == '\r') { - shellPrintLine(chp, ""); - *p = 0; - return FALSE; - } - if (c < 0x20) - continue; - if (p < line + size - 1) { - chIOPut(chp, (uint8_t)c); - *p++ = (char)c; - } - } -} - -/** @} */ diff --git a/ChibiOS_2.0.8/os/various/shell.h b/ChibiOS_2.0.8/os/various/shell.h deleted file mode 100644 index c67d6d5..0000000 --- a/ChibiOS_2.0.8/os/various/shell.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file shell.h - * @brief Simple CLI shell header. - * @addtogroup SHELL - * @{ - */ - -#ifndef _SHELL_H_ -#define _SHELL_H_ - -/** - * @brief Shell maximum input line length. - */ -#if !defined(SHELL_MAX_LINE_LENGTH) || defined(__DOXYGEN__) -#define SHELL_MAX_LINE_LENGTH 64 -#endif - -/** - * @brief Shell maximum arguments per command. - */ -#if !defined(SHELL_MAX_ARGUMENTS) || defined(__DOXYGEN__) -#define SHELL_MAX_ARGUMENTS 4 -#endif - -/** - * @brief Enforces the use of iprintf() on newlib. - */ -#if !defined(SHELL_USE_IPRINTF) || defined(__DOXYGEN__) -#define SHELL_USE_IPRINTF TRUE -#endif - -/** - * @brief Command handler function type. - */ -typedef void (*shellcmd_t)(BaseChannel *chp, int argc, char *argv[]); - -/** - * @brief Custom command entry type. - */ -typedef struct { - const char *sc_name; /**< @brief Command name. */ - shellcmd_t sc_function; /**< @brief Command function. */ -} ShellCommand; - -/** - * @brief Shell descriptor type. - */ -typedef struct { - BaseChannel *sc_channel; /**< @brief I/O channel associated - to the shell. */ - const ShellCommand *sc_commands; /**< @brief Shell extra commands - table. */ -} ShellConfig; - -extern EventSource shell_terminated; - -#ifdef __cplusplus -extern "C" { -#endif - void shellInit(void); - Thread *shellCreate(const ShellConfig *scp, size_t size, tprio_t prio); - void shellPrint(BaseChannel *chp, const char *msg); - void shellPrintLine(BaseChannel *chp, const char *msg); - bool_t shellGetLine(BaseChannel *chp, char *line, unsigned size); -#ifdef __cplusplus -} -#endif - -#endif /* _SHELL_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/os/various/syscalls.c b/ChibiOS_2.0.8/os/various/syscalls.c deleted file mode 100644 index 80510ae..0000000 --- a/ChibiOS_2.0.8/os/various/syscalls.c +++ /dev/null @@ -1,177 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ -/* -* **** This file incorporates work covered by the following copyright and **** -* **** permission notice: **** -* -* Copyright (c) 2009 by Michael Fischer. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* 3. Neither the name of the author nor the names of its contributors may -* be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -* THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -* SUCH DAMAGE. -* -**************************************************************************** -* History: -* -* 28.03.09 mifi First Version, based on the original syscall.c from -* newlib version 1.17.0 -* 17.08.09 gdisirio Modified the file for use under ChibiOS/RT -* 15.11.09 gdisirio Added read and write handling -****************************************************************************/ - -#include -#include -#include -#include -#include - -#include "ch.h" -#if defined(STDOUT_SD) || defined(STDIN_SD) -#include "hal.h" -#endif - -/***************************************************************************/ - -int _read_r(struct _reent *r, int file, char * ptr, int len) -{ - (void)r; -#if defined(STDIN_SD) - if (!len || (file != 0)) { - __errno_r(r) = EINVAL; - return -1; - } - len = sdRead(&STDIN_SD, (uint8_t *)ptr, (size_t)len); - return len; -#else - (void)file; - (void)ptr; - (void)len; - __errno_r(r) = EINVAL; - return -1; -#endif -} - -/***************************************************************************/ - -int _lseek_r(struct _reent *r, int file, int ptr, int dir) -{ - (void)r; - (void)file; - (void)ptr; - (void)dir; - - return 0; -} - -/***************************************************************************/ - -int _write_r(struct _reent *r, int file, char * ptr, int len) -{ - (void)r; - (void)file; - (void)ptr; -#if defined(STDOUT_SD) - if (file != 1) { - __errno_r(r) = EINVAL; - return -1; - } - sdWrite(&STDOUT_SD, (uint8_t *)ptr, (size_t)len); -#endif - return len; -} - -/***************************************************************************/ - -int _close_r(struct _reent *r, int file) -{ - (void)r; - (void)file; - - return 0; -} - -/***************************************************************************/ - -caddr_t _sbrk_r(struct _reent *r, int incr) -{ - void *p; - - chDbgCheck(incr > 0, "_sbrk_r"); - - (void)r; - p = chCoreAlloc((size_t)incr); - if (p == NULL) { - __errno_r(r) = ENOMEM; - return (caddr_t)-1; - } - return (caddr_t)p; -} - -/***************************************************************************/ - -int _fstat_r(struct _reent *r, int file, struct stat * st) -{ - (void)r; - (void)file; - - memset(st, 0, sizeof(*st)); - st->st_mode = S_IFCHR; - return 0; -} - -/***************************************************************************/ - -int _isatty_r(struct _reent *r, int fd) -{ - (void)r; - (void)fd; - - return 1; -} - -/*** EOF ***/ diff --git a/ChibiOS_2.0.8/os/various/various.dox b/ChibiOS_2.0.8/os/various/various.dox deleted file mode 100644 index 61d6f37..0000000 --- a/ChibiOS_2.0.8/os/various/various.dox +++ /dev/null @@ -1,75 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup various Various - * @brief Utilities Library. - * @details This is a collection of useful library code that is not part of - * the base kernel services. - *

      Notes

      - * The library code does not follow the same naming convention of the - * system APIs in order to make very clear that it is not "core" code.
      - * The main difference is that library code is not formally tested in the - * test suite but through usage in the various demo applications. - */ - -/** - * @defgroup cpp_library C++ Wrapper - * @brief C++ wrapper module. - * @details This module allows to use the ChibiOS/RT functionalities - * from C++ as classes and objects rather the traditional "C" APIs. - * - * @ingroup various - */ - -/** - * @defgroup memory_streams Memory Streams - * @brief Memory Streams. - * @details This module allows to use a memory area (RAM or ROM) using a - * @ref data_streams interface. - * - * @ingroup various - */ - -/** - * @defgroup event_timer Periodic Events Timer - * @brief Periodic Event Timer. - * @details This timer generates an event at regular intervals. The - * listening threads can use the event to perform time related activities. - * Multiple threads can listen to the same timer. - * - * @ingroup various - */ - -/** - * @defgroup SHELL Command Shell - * @brief Small extendible command line shell. - * @details This module implements a generic extendible command line interface. - * The CLI just requires an I/O channel (@p BaseChannel), more commands can be - * added to the shell using the configuration structure. - * - * @ingroup various - */ diff --git a/ChibiOS_2.0.8/readme.txt b/ChibiOS_2.0.8/readme.txt deleted file mode 100644 index 78dcf0b..0000000 --- a/ChibiOS_2.0.8/readme.txt +++ /dev/null @@ -1,432 +0,0 @@ -***************************************************************************** -*** Files Organization *** -***************************************************************************** - ---{root} - ChibiOS/RT directory. - +--readme.txt - This file. - +--todo.txt - Current plan (development/unstable versions only). - +--license.txt - GPL license text. - +--exception.txt - GPL exception text (stable releases only). - +--boards/ - Board support files. - +--demos/ - Demo projects. - +--docs/ - Documentation. - | +--html/ - HTML documentation. - | +--reports/ - Test reports. - | +--src/ - Documentation source files (required for rebuild). - | +--rsc/ - Documentation resource files (required for rebuild). - | +--index.html - Documentation access. - +--ext/ - External libraries, not part of ChibiOS/RT. - +--os/ - ChibiOS/RT files. - | +--hal/ - Hardware Abstraction Layer. - | | +--include/ - HAL high level headers. - | | +--src/ - HAL high level source. - | | +--platforms/ - HAL low level drivers implementations. - | | | +--AT91SAM7/ - Drivers for AT91SAM7 platform. - | | | +--AVR/ - Drivers for AVR platform. - | | | +--LPC11xx/ - Drivers for LPC11xx platform. - | | | +--LPC13xx/ - Drivers for LPC13xx platform. - | | | +--LPC214x/ - Drivers for LPC214x platform. - | | | +--MSP430/ - Drivers for MSP430 platform. - | | | +--SPC56x/ - Drivers for SPC56x/MPC563xx platforms. - | | | +--STM32/ - Drivers for STM32 platform. - | | | +--STM8/ - Drivers for STM8 platform. - | | | +--Posix/ - Drivers for x86 Linux/OSX simulator platform. - | | | +--Win32/ - Drivers for x86 Win32 simulator platform. - | | +--templates/ - Driver template files. - | | +--meta/ - Driver meta templates. - | +--ports/ - Port files for the various architectures. - | | +--GCC/ - Ports for the GCC compiler. - | | | +--ARM/ - Port files for generic ARM architecture. - | | | +--ARM7/ - Port files for ARM7 architecture. - | | | +--ARMCM3/ - Port files for ARMCMx architectures (ARMv6/7-M). - | | | +--PPC/ - Port files for PowerPC architecture. - | | | +--AVR/ - Port files for AVR architecture. - | | | +--MSP430/ - Port files for MSP430 architecture. - | | | +--SIMIA32/ - Port files for SIMIA32 simulator architecture. - | | +--RC/ - Ports for the Raisonance compiler. - | | +--STM8/ - Port files for STM8 architecture. - | +--kernel/ - Kernel portable files. - | | +--include/ - Kernel headers. - | | +--src/ - Kernel source. - | | +--templates/ - Kernel port template files. - | +--various/ - Various portable support files. - +--test/ - Kernel test suite source code. - | +--coverage/ - Code coverage project. - +--testhal/ - HAL integration test demos. - -***************************************************************************** -*** Releases *** -***************************************************************************** - -*** 2.0.8 *** -- FIX: Fixed failed memory recovery by registry scan, improved the related - test case (bug 3116888). -- FIX: Fixed PWM channels going to ACTIVE state when the pulse width is - set to zero in the STM32 PWM driver (bug 3114481). -- FIX: Fixed PWM channels return to IDLE state in STM32 PWM driver (bug - 3114467). -- CHANGE: Bugs 3114467 and 3114481 have been fixed by backporting the 2.1.x - PWM driver, there is a difference in the PWM callback parameters. - -*** 2.0.7 *** -- FIX: Fixed typo in board name (bug 3113574). -- FIX: Fixed defective event wait functions with timeout (bug 3113443). - -*** 2.0.6 *** -- FIX: Fixed typo in memstreams.h (bug 3089567). -- FIX: Fixed wrong macro check in LPC214x and AT91SAM7 serial drivers (bug - 3088776). -- FIX: Fixed non functioning option SPI_USE_MUTUAL_EXCLUSION=FALSE (bug - 3084764). -- FIX: Fixed wrong macro check in STM32 serial support (but 3078891). -- FIX: Fixed lwIP demo not working (bug 3076354). -- FIX: Fixed non functioning option CH_USE_NESTED_LOCKS (bug 3075544). -- CHANGE: The API chThdInit() has been renamed to chThdCreateI(). - -*** 2.0.5 *** -- FIX: Incorrect AT91SAM7X initialization, thanks Leszek (bug 3075354). -- FIX: Fixed race condition in function chSchGoSleepTimeoutS, thanks Balázs - (bug 3074984). -- FIX: Fixed race condition in threads creation (bug 3069854). -- FIX: Fixed broken CH_DBG_ENABLE_STACK_CHECK option in legacy CM3 port (bug - 3064274). -- FIX: Fixed CAN_USE_SLEEP_MODE setting (bug 3064204). - -*** 2.0.4 *** -- FIX: Fixed potential issue with GCC reorganizing instructions around "asm - volatile" statements (bug 3058731). -- FIX: Fixed reduced ARM7 performance with GCC 4.5.x (bug 3056866). - -*** 2.0.3 *** -- Tests reports regenerated using GCC 4.5.1, small performance improvements - in all benchmarks. -- FIX: Fixed crash of the Posix simulator under Ubuntu 10.4 (bug 3055329). -- FIX: Fixed incorrect PLL2 setting in STM32 HAL (bug 3044770). -- FIX: Fixed wrong check on STM32_HCLK (bug 3044758). -- FIX: Fixed wrong condition check in STM32 PWM driver (bug 3041414). -- FIX: Corrupted IRQ stack in Cortex-Mx port (bug 3041117). -- FIX: Fixed a documentation error regarding the ADC driver function - adcStartConversion() (bug 3039890). -- FIX: Fixed insufficient stack size for idle thread (bug 3033624). -- FIX: Fixed misspelled word in some chioch.h and chstreams.h macros (bug - 3031534). -- FIX: Fixed wrong macro check in the STM32 SPI driver (bug 3028562). - -*** 2.0.2 *** -- FIX: Fixed invalid context restore in MSP430 port (bug 3027975). -- FIX: Fixed STM32 vectors file (bug 3026528). -- FIX: Fixed race condition in STM32 SPI driver (bug 3025854). -- FIX: Fixed H_LOCK and H_UNLOCK redefined with CH_USE_MALLOC_HEAP (bug - 3025549). -- FIX: Added option to enforce the stack alignment to 32 or 64 bits in the - Cortex-Mx port (bug 3025133). -- NEW: Added friendly interrupt vectors names to the STM32 HAL (change request - 3023944). -- CHANGE: Removed the option -mabi=apcs-gnu from all the Cortex-Mx demos. The - option is not compatible with the 64 bits stack alignment now default in - the Cortex-Mx port. Note that the 64 bits alignment has a cost both as - performance and as space but it is the "standard". - -*** 2.0.1 *** -- FIX: Fixed notification order in input queues (bug 3020708). -- FIX: Fixed non functional CH_CURRP_REGISTER_CACHE option in the Cortex-M3 - port (bug 3020702). -- FIX: Fixed non functional CH_DBG_ENABLE_STACK_CHECK option in the Cortex-M3 - caused by GCC 4.5.0, the fix also improves the context switch performance - because GCC 4.5.0 apparently was generating useless instructions within the - very critical context switch code (bug 3019738). -- FIX: Fixed insufficient stack space assigned to the idle thread in - Cortex-M3 port (bug 3019594). -- FIX: Fixed missing check in chIQReadTimeout() and chIQWriteTimeout() (bug - 3019158). -- FIX: Fixed instability in Mutexes subsystem (bug 3019099). -- NEW: Added timers clock macros to the STM32 clock tree HAL driver. - -*** 2.0.0 *** -- NEW: Implemented the concept of thread references, this mechanism ensures - that a dynamic thread's memory is not freed while some other thread still - owns a reference to the thread. Static threads are not affected by the new - mechanism. Two new APIs have been added: chThdAddRef() and chThdRelease(). -- NEW: Now more than one thread can be waiting in chThdWait() as long they - own a reference. -- NEW: Implemented a new threads registry subsystem, the registry allows to - enumerate the active threads at runtime and/or from a debugger. This is - a preparatory step for a dedicated ChibiOS/RT debugger. -- NEW: New chCoreFree() API that returns the core memory left. -- NEW: Added a PowerPC port and demo targeting the SPC563M/MPC563xM - ST/Freescale automotive SOCs. -- NEW: Added STM8 port and demo targeting the Raisonance REva board - with STM8S208RB piggyback. -- NEW: New unified ARM Cortex-Mx port, this port supports both the ARMv6M - and ARMv7-M architectures (Cortex-M0/M1/M3/M4 so far). The new port also - allow to easily add to new Cortex-M implementations by simply adding a - parameters file (cmparams.h). -- NEW: Improved clock initialization for the STM32, now it is possible to - configure the clock using any clock source and any HSE frequency. -- NEW: The STM32 clock tree parameters and checks are now calculated into - a separate file in order to support multiple clock trees for different - sub-families of the STM32 platform. -- NEW: Added separated clock trees for the STM32 LD/MD/HD sub-family and - the CL sub-family. Now the selection of the sub-family is done in the - board.h file, there is no more the need to put -DSTM32F10X_xx into - the makefile. -- NEW: Added support for STM32/HD/CL UART4 and UART5, thanks Egon for the - patch. -- NEW: Embedded Artists LPCxpresso Base Board support files added. -- NEW: LPC11xx support, drivers (Serial, PAL, HAL) and demo. -- NEW: LPC13xx support, drivers (Serial, PAL, HAL), demo and reports. -- NEW: The port layer now can "capture" the implementation of individual - scheduler API functions in order to provide architecture-optimized - versions. This is done because further scheduler optimizations are - becoming increasingly pointless without considering architecture and - compiler related constraints. -- NEW: Updated the STM32 FW Library files to latest version 3.3.0. -- NEW: AT91SAM7 HAL support for the DGBU UART peripheral, as SD3. -- NEW: Added a demo for the AT91SAM7S256 and board files for the Olimex - SAM7-P256. The demo has been contributed by Alexander Kozaruk. -- NEW: Added core variant name macro in chcore.h and platform name in - hal_lld.h, the info are printed in the test report and from the "info" - shell command. -- NEW: Added BOARD_NAME macro to the various board.h files. -- NEW: Added a MemoryStream class under ./os/various. -- NEW: Added Mac OS-X support for the simulator. The Linux simulator has - been renamed to Posix simulator in order to include this change in a - single project. -- NEW: New articles, sections and various improvements to the documentation. -- NEW: Added to the simulators shell demos two new commands: threads and mem, - that show the currently active threads (using the new registry) and the - memory allocators state. -- NEW: New articles and guides in the documentation. -- OPT: New Cortex-M3 port code, *huge* performance improvements in all the - context switching related benchmarks (up to 18% depending on the benchmark). - The new code does no more require the use of the PendSV vector that is - thus available to the user, it also saves four RAM bytes for each thread - in the system. The old code is still available as a fall back option while - the new one is being hardened by peer review and time, the two ports are - perfectly interchangeable. -- OPT: Speed/size optimization to the events subsystem. -- OPT: Speed/size optimization to the mutexes subsystem. -- OPT: Speed/size optimization to the condvars subsystem. -- OPT: Speed/size optimization to the synchronous messages subsystem. -- OPT: Small size optimization in the semaphores subsystem. -- OPT: Minor optimizations in the "compact" code path. -- OPT: Optimization on the interface between scheduler and port layer, now - the kernel is even smaller and the context switch performance improved - quite a bit on all the supported architectures. -- OPT: Simplified the implementation of chSchYieldS() and made it a macro. - The previous implementation was probably overkill and took too much space - even if a bit faster. -- OPT: Internal optimization in the serial driver, it now is a bit smaller - and uses less RAM (all architectures). - -*** 1.4.3 *** -- FIX: Fixed centralized ARM makefile (bug 2992747). -- FIX: Fixed write problems in MMC_SPI driver (bug 2991714). -- FIX: Fixed wrong macro check in serial.h (bug 2989459). - -*** 1.4.2 *** -- FIX: Fixed missing reschedule in chEvtSignal() (bug 2961208). -- FIX: Removed C99-style variables declarations (bug 2964418). -- Minor documentation fixes. - -*** 1.4.1 *** -- FIX: Fixed wrong UART deinitialization sequence in LPC214x serial driver - (bug 2953985). -- FIX: Fixed wrong PINSEL2 offset into lpc214x.h (bug 2953981). -- FIX: Fixed invalid UART-related macro in the LPC214x HAL (bug 2953195). -- FIX: Wrong prototype in template file chcore.c (bug 2951529). -- FIX: Fixed insufficient stack space for the idle thread in the ARMCM3 port - when compiling without optimizations (bug 2946233). -- FIX: Fixed wrong notes on function chThdResume() (bug 2943160). -- FIX: Fixed missing dependencies check for CH_USE_DYNAMIC (bug 2942757). -- FIX: Fixed swapped thread states descriptions (bug 2938445). -- FIX_ Fixed C99-style variable declaration (bug 2938444). - -*** 1.4.0 *** -- Full test cycle and test reports updated. -- NEW: Reorganized and rationalized the distribution tree and the - documentation. -- NEW: Abstract Streams and I/O Channels mechanisms introduced. -- NEW: Added a new core memory manager. -- NEW: Improved Heap and Pools allocators. -- NEW: The I/O queues code has been improved, now there are 2 separate - structures: InputQueue and OutputQueue. -- NEW: Added timeout specification to the I/O queues read/write primitives. -- NEW: Static initializers macros introduced for most kernel objects. -- NEW: Added new APIs chSchDoYieldS() and chThdYield(). -- NEW: Improved and simplified kernel configuration files. -- MEW: Added new benchmarks and test cases. -- NEW: Added more test cases in order to improve the test suite code coverage - (it was 74% in version 1.2.0, it is now close to 100%). -- NEW: Added a code coverage analysis application under ./tests/coverage. -- NEW: Added the test suite documentation to the general documentation. -- NEW: Linux x86 simulator demo added. -- NEW: Improved the Cortex-M3 preemption code. -- NEW: Added standard CMSIS 1.2.0 support to the Cortex-M3 port. -- NEW: Added support for the ST firmware library to the STM32 port. -- NEW: Added support for HD and CL STM32 devices. -- NEW: Improvements to the AT91SAM7 support. -- NEW: Improved makefiles and makefile fragments, now the paths are not fixed. -- NEW: Unified the initialization of the various drivers from a single HAL - driver. The single drivers can be enabled or disabled from a HAL - configuration file halconf.h. -- NEW: Hardware Abstraction Layer (HAL) with support for PAL, ADC, CAN, MAC, - MMC/SD, PWM, Serial, SPI drivers. Added driver implementations to the - various platforms. -- NEW: Added support for uIP, lwIP, FatFS external libraries, added demos. -- Many many other improvements and minor features. - -*** 1.2.4 *** -- FIX: Fixed GCC 4.4.x aliasing warnings (bug 2846336). -- FIX: Modified linker scripts for GCC 4.4.x (bug 2846302). -- FIX: Fixed the CH_OPTIMIZE_SPEED option in the CM3 port (bug 2846278). -- FIX: Fixed GCC 4.4.x related problems in CM3 port (bug 2846162). -- FIX: Fixed LPC214x UART problem (bug 2841088). - -*** 1.2.3 *** -- FIX: Fixed C99-style variable declarations (bug 2792919). -- FIX: Fixed instance of obsolete CH_USE_TERMINATE option in the C++ wrapper - (bug 2796065). -- FIX: Insufficient stack allocated to the C++ LPC2148 demo (bug 2796069). -- FIX: Fixed errors in events test case (bug 2796081). -- CHANGE: Increased main stack size to 1KiB for all the ARMx demos, 2KiB for - the C++ LPC2148 demo. This should make things easier for unexperienced - users. - -*** 1.2.2 *** -- FIX: Fixed macro in test.h (bug 2781176). -- FIX: Fixed @file tag in sam7x_serial.c (bug 2788573). -- FIX: Fixed sequence assertion in test.c (bug 2789377). -- FIX: Fixed test_cpu_pulse() incorrect behavior (bug 2789383). -- FIX: Fixed missing volatile modifier for p_time field in Thread structure - (bug 2789501). -- CHANGE: Made the option CH_DBG_THREADS_PROFILING default to TRUE because it - is now required in order to execute the whole test suite. Note that this - option is very light so there is no real overhead in the system. -- Added a (harmless) workaround to the Cortex-M3 startup file in order to - make the RIDE7 demo compile on an unmodified distribution. - -*** 1.2.1 *** -- FIX: Fixed regression in MinGW demo (bug 2745153). -- FIX: Fixed problem with the timeout constant TIME_IMMEDIATE (bug 2755170). -- FIX: Fixed a problem in semaphores test case #2 (bug 2755195). -- FIX: Removed unused list functions (bug 2755230). -- FIX: Added the exception notes into the source headers (bug 2772129). -- FIX: Added license notice to several files (bug 2772160). -- FIX: Found new instances of the obsolete function chSysGetTime() in the - C++ wrapper and in the WEB demo (bug 2772237). - -*** 1.2.0 *** -- Full test cycle and test reports updated. -- NEW: Better separation between the port code and the system APIs, now an - architecture-specific "driver" contains all the port related code. - Port functions/macros are no more directly exposed as APIs to the user code. -- NEW: Added a configuration option to enable nested system locks/unlocks. -- NEW: Improved the interrupt handlers related code. Now interrupts are - handled in a very similar way in every architecture. See the "Concepts" - section and the "Writing interrupt handlers under ChibiOS/RT" article in the - documentation. -- NEW: Added the chEvtSignal() and chEvtSignalI() APIs that allows direct - thread signaling, much more efficient that chEvtBroadcast() when the target - is a known single thread. -- NEW: Added a configuration option that enables the priority enqueuing on - semaphores. It is defaulted to off because usually semaphores are used for - I/O related tasks without hard realtime requirements. -- NEW: Now the all the options in chconf.h and the various driver headers - can be overridden externally, as example from within the Makefile. - The options are no mode a simple define but a define with an assigned - TRUE/FALSE value within an #ifndef block. -- NEW: Idle thread hook macro added to the configuration file. -- NEW: Changed the ARM7 and Cortex-M3 startup files, now the action when - the main() function returns can be overridden by redefining the symbol - MainExitHandler. -- NEW: Mailboxes (asynchronous messages) subsystem and test cases added. -- NEW: Most APIs with a timeout specification now accept the constant - TIME_IMMEDIATE (-1) that triggers an immediate timeout when trying to enter - a sleep state. -- NEW: Mode flexible debug configuration options, removed the old CH_USE_DEBUG - and CH_USE_TRACE. Replaced with CH_DBG_ENABLE_CHECKS, SCH_DBG_ENABLE_ASSERTS, - CH_DBG_ENABLE_TRACE and CH_DBG_FILL_THREADS. -- NEW: Added a debug option CH_DBG_THREADS_PROFILING for threads profiling. - A field into the Thread structure counts the consumed time. The information - is not used into the kernel, it is meant for debugging. -- NEW: Added a debug option CH_DBG_ENABLE_STACK_CHECK for stack overflow - checking. The check is not performed in the kernel but in the port code. - Currently only the ARM7 and ARMCM3 ports implements it. -- NEW: Unified makefiles for ARM7, ARMCM3 MSP430 projects, the new makefiles - share a common part making them easier to maintain. Also reorganized the - demo-specific part of the makefile, now it is easier to configure and the - option can be overridden from outside. -- OPT: Improved ARM7 thumb port code, thanks to some GCC tricks involving - registers usage now the kernel is much smaller, faster and most OS APIs - use less RAM in stack frames (note, this is an ARM7 thumb mode specific - optimization). -- OPT: Small optimization to the Cortex-M3 thread startup code, improved thread - related performance scores and smaller code. -- OPT: Alternative, non-inlined and more compact, implementations for - port_lock() and port_unlock() in the Cortex-M3 port when CH_OPTIMIZE_SPEED - is FALSE. -- OPT: Improved ready list and priority ordered lists code, some space saved, - better context switch performance. -- CHANGE: Now the API chThdSetPriority() returns the old priority instead - of void. -- CHANGE: Modified the signature of the chMsgSendWithEvent() API, it now uses - a more efficient event signaling method. -- CHANGE: Removed the field p_tid from the Thread structure and the related - code, this improved the thread creation scores (~2%) and saves some RAM. - The trace buffer field cse_tid is now populated with a simple hash of the - thread pointer as thread identifier. -- CHANGE: Renamed the macros chSysIRQEnter() and chSysIRQExit() in - CH_IRQ_PROLOGUE() and CH_IRQ_EPILOGUE() in order to make very clear that - those are not functions but inlined code. Also introduced a new macro - CH_IRQ_HANDLER that should be used when declaring an interrupt handler. -- CHANGE: Renamed several internal initialization functions by removing the - "ch" prefix because could not be considered system APIs. -- CHANGE: Changed the chSemFastWaitS() macro in chSemFastWaitI() and - chSemGetCounter() in chSemGetCounterI(). -- Improved ARM7 and Cortex-M3 support, new configuration options. -- Introduced the concept of interrupt classes, see the documentation. -- Introduced the concept of system states, see the documentation. -- Huge improvements to the documentation. -- Articles and notes previously in the wiki now merged in the general - documentation and updated, the wiki entries are obsolete and will be removed. -- New application notes and articles added. -- Added kernel size metrics to the test reports. -- Removed the inclusion graph from the documentation because the little - info they add and the size of all the images. It is possible to configure - Doxygen to have them again (and more graph types). -- Improvements to the test suite, added a new level of indirection that allows - to make tests depend on the configuration options without have to put #ifs - into the test main module. New benchmarks about semaphores and mutexes. -- Modified the test thread function to return the global test result flag. -- Removed testcond.c|h and moved the test cases into testmtx.c. Mutexes and - condvars have to be tested together. -- Added architecture diagram to the documentation. - -*** 1.0.2 *** -- FIX: Fixed priority inheritance problem with condvars (bug 2674756). -- FIX: Fixed a problem in time ranges (bug 2680425). -- Replaced ./docs/index.html with a direct shortcut to the documentation. - -*** 1.0.1 *** -- NEW: Added to the STM32 demo makefile an option to build ChibiOS/RT with the - full STM32 FWLib 2.03. - Note that, except for the compile option, the library is not used by the - OS nor supported. -- FIX: Fixed a problem into the STACK_ALIGN() macro. -- FIX: Fixed a problem with a wrong declaration of the PLL structure in the - file lpc214x.h. -- FIX: Modified the default value for the STM32 HSI setup it was 1, it should - be 0x10. -- FIX: Removed an obsolete constant (P_SUSPENDED) from thread.h. -- FIX: Removed unused field mp_grow in the MemoryPool structure. -- FIX: Fixed wrong assertions in chThdWait() and chHeapFree(). -- FIX: Fixed a problem with some event APIs not showing in the documentation. - -*** 1.0.0 *** -- License switch, added GPL exception, see exception.txt. -- Full test cycle and test reports updated. -- Renamed some occurrences of "Conditional Variable" in "Condition Variable" in - the documentation. -- FIX: Fixed some images in the documentation because problems when seen in - Internet Explorer. diff --git a/ChibiOS_2.0.8/test/coverage/Makefile b/ChibiOS_2.0.8/test/coverage/Makefile deleted file mode 100644 index 1866d5a..0000000 --- a/ChibiOS_2.0.8/test/coverage/Makefile +++ /dev/null @@ -1,150 +0,0 @@ -# -# !!!! Do NOT edit this makefile with an editor which replace tabs by spaces !!!! -# -############################################################################################## -# -# On command line: -# -# make all = Create project -# -# make clean = Clean project files. -# -# To rebuild project do "make clean" and "make all". -# - -############################################################################################## -# Start of default section -# - -TRGT = mingw32- -CC = $(TRGT)gcc -AS = $(TRGT)gcc -x assembler-with-cpp -COV = gcov - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = -DSIMULATOR - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = -lws2_32 - -# -# End of default section -############################################################################################## - -############################################################################################## -# Start of user section -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# Imported source files -CHIBIOS = ../.. -include ${CHIBIOS}/os/hal/hal.mk -include ${CHIBIOS}/os/hal/platforms/Win32/platform.mk -include ${CHIBIOS}/os/ports/GCC/SIMIA32/port.mk -include ${CHIBIOS}/os/kernel/kernel.mk -include ${CHIBIOS}/test/test.mk - -# List C source files here -SRC = ${PORTSRC} \ - ${KERNSRC} \ - ${TESTSRC} \ - ${HALSRC} \ - ${PLATFORMSRC} \ - ${CHIBIOS}/os/hal/platforms/Win32/console.c \ - main.c - -# List ASM source files here -ASRC = - -# List all user directories here -UINCDIR = $(PORTINC) $(KERNINC) $(TESTINC) $(HALINC) $(PLATFORMINC) \ - ${CHIBIOS}/os/various - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# Define optimisation level here -OPT = -ggdb -O0 -fomit-frame-pointer -fprofile-arcs -ftest-coverage - -# -# End of user defines -############################################################################################## - - -INCDIR = $(patsubst %,-I%,$(DINCDIR) $(UINCDIR)) -LIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) -DEFS = $(DDEFS) $(UDEFS) -ADEFS = $(DADEFS) $(UADEFS) -OBJS = $(ASRC:.s=.o) $(SRC:.c=.o) -LIBS = $(DLIBS) $(ULIBS) - -LDFLAGS = -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch -lgcov $(LIBDIR) -ASFLAGS = -Wa,-amhls=$(<:.s=.lst) $(ADEFS) -CPFLAGS = $(OPT) -Wall -Wextra -Wstrict-prototypes -fverbose-asm -Wa,-alms=$(<:.c=.lst) $(DEFS) - -# Generate dependency information -CPFLAGS += -MD -MP -MF .dep/$(@F).d - -# -# makefile rules -# - -all: $(OBJS) $(PROJECT).exe - -%o : %c - $(CC) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ - -%o : %s - $(AS) -c $(ASFLAGS) $< -o $@ - -%exe: $(OBJS) - $(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ - -.PHONY: gcov -gcov: - -mkdir gcov - $(COV) -u $(subst /,\,$(KERNSRC)) - -mv -f *.gcov ./gcov - -.PHONY: clean -clean: - -rm -f $(OBJS) - -rm -f $(PROJECT).exe - -rm -f $(PROJECT).map - -rm -f $(SRC:.c=.c.bak) - -rm -f $(SRC:.c=.lst) - -rm -f $(SRC:.c=.gcno) - -rm -f $(SRC:.c=.gcda) - -rm -f $(ASRC:.s=.s.bak) - -rm -f $(ASRC:.s=.lst) - -rm -fR .dep - -# -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - -# *** EOF *** diff --git a/ChibiOS_2.0.8/test/coverage/board.h b/ChibiOS_2.0.8/test/coverage/board.h deleted file mode 100644 index b57abb9..0000000 --- a/ChibiOS_2.0.8/test/coverage/board.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _BOARD_H_ -#define _BOARD_H_ - -#endif /* _BOARD_H_ */ diff --git a/ChibiOS_2.0.8/test/coverage/chconf.h b/ChibiOS_2.0.8/test/coverage/chconf.h deleted file mode 100644 index f70c434..0000000 --- a/ChibiOS_2.0.8/test/coverage/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
      - * For performance and code size reasons the recommended setting - * is to leave this option disabled.
      - * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS TRUE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0x20000 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED FALSE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE TRUE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK TRUE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS TRUE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/test/coverage/halconf.h b/ChibiOS_2.0.8/test/coverage/halconf.h deleted file mode 100644 index fdae565..0000000 --- a/ChibiOS_2.0.8/test/coverage/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -/*#include "mcuconf.h"*/ - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL FALSE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM FALSE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL FALSE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI FALSE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/test/coverage/main.c b/ChibiOS_2.0.8/test/coverage/main.c deleted file mode 100644 index 1f9f9a5..0000000 --- a/ChibiOS_2.0.8/test/coverage/main.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include -#include - -#include "ch.h" -#include "hal.h" -#include "test.h" -#include "console.h" - -/* - * Simulator main. - */ -int main(int argc, char *argv[]) { - msg_t result; - - (void)argc; - (void)argv; - - halInit(); - conInit(); - chSysInit(); - - result = TestThread(&CD1); - if (result) - exit(1); - else - exit(0); -} diff --git a/ChibiOS_2.0.8/test/coverage/readme.txt b/ChibiOS_2.0.8/test/coverage/readme.txt deleted file mode 100644 index 564caa1..0000000 --- a/ChibiOS_2.0.8/test/coverage/readme.txt +++ /dev/null @@ -1,6 +0,0 @@ -In order to compute the code coverage: - -- Build the test application: make -- Run the test suite: ch -- Compute the code coverage: make gcov -- Clear everything: make clean diff --git a/ChibiOS_2.0.8/test/test.c b/ChibiOS_2.0.8/test/test.c deleted file mode 100644 index dec0717..0000000 --- a/ChibiOS_2.0.8/test/test.c +++ /dev/null @@ -1,393 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file test.c - * @brief Tests support code. - * - * @addtogroup test - * @{ - */ - -#include "ch.h" -#include "hal.h" - -#include "test.h" -#include "testthd.h" -#include "testsem.h" -#include "testmtx.h" -#include "testmsg.h" -#include "testmbox.h" -#include "testevt.h" -#include "testheap.h" -#include "testpools.h" -#include "testdyn.h" -#include "testqueues.h" -#include "testbmk.h" - -/* - * Array of all the test patterns. - */ -static const struct testcase **patterns[] = { - patternthd, - patternsem, - patternmtx, - patternmsg, - patternmbox, - patternevt, - patternheap, - patternpools, - patterndyn, - patternqueues, - patternbmk, - NULL -}; - -static bool_t local_fail, global_fail; -static unsigned failpoint; -static char tokens_buffer[MAX_TOKENS]; -static char *tokp; - -/* - * Static working areas, the following areas can be used for threads or - * used as temporary buffers. - */ -union test_buffers test; - -/* - * Pointers to the spawned threads. - */ -Thread *threads[MAX_THREADS]; - -/* - * Pointers to the working areas. - */ -void * const wa[5] = {test.wa.T0, test.wa.T1, test.wa.T2, - test.wa.T3, test.wa.T4}; - -/* - * Console output. - */ -static BaseChannel *chp; - -/** - * @brief Prints a decimal unsigned number. - * - * @param[in] n the number to be printed - */ -void test_printn(uint32_t n) { - char buf[16], *p; - - if (!n) - chIOPut(chp, '0'); - else { - p = buf; - while (n) - *p++ = (n % 10) + '0', n /= 10; - while (p > buf) - chIOPut(chp, *--p); - } -} - -/** - * @brief Prints a line without final end-of-line. - * - * @param[in] msgp the message - */ -void test_print(char *msgp) { - - while (*msgp) - chIOPut(chp, *msgp++); -} - -/** - * @brief Prints a line. - * - * @param[in] msgp the message - */ -void test_println(char *msgp) { - - test_print(msgp); - chIOPut(chp, '\r'); - chIOPut(chp, '\n'); -} - -/* - * Tokens. - */ -static void clear_tokens(void) { - - tokp = tokens_buffer; -} - -static void print_tokens(void) { - char *cp = tokens_buffer; - - while (cp < tokp) - chIOPut(chp, *cp++); -} - -/** - * @brief Emits a token into the tokens buffer. - * - * @param[in] token the token as a char - */ -void test_emit_token(char token) { - - chSysLock(); - *tokp++ = token; - chSysUnlock(); -} - -/* - * Assertions. - */ -bool_t _test_fail(unsigned point) { - - local_fail = TRUE; - global_fail = TRUE; - failpoint = point; - return TRUE; -} - -bool_t _test_assert(unsigned point, bool_t condition) { - - if (!condition) - return _test_fail(point); - return FALSE; -} - -bool_t _test_assert_sequence(unsigned point, char *expected) { - char *cp = tokens_buffer; - while (cp < tokp) { - if (*cp++ != *expected++) - return _test_fail(point); - } - if (*expected) - return _test_fail(point); - clear_tokens(); - return FALSE; -} - -bool_t _test_assert_time_window(unsigned point, systime_t start, systime_t end) { - - return _test_assert(point, chTimeIsWithin(start, end)); -} - -/* - * Threads utils. - */ - -/** - * @brief Pends a termination request in all the test-spawned threads. - */ -void test_terminate_threads(void) { - int i; - - for (i = 0; i < MAX_THREADS; i++) - if (threads[i]) - chThdTerminate(threads[i]); -} - -/** - * @brief Waits for the completion of all the test-spawned threads. - */ -void test_wait_threads(void) { - int i; - - for (i = 0; i < MAX_THREADS; i++) - if (threads[i] != NULL) { - chThdWait(threads[i]); - threads[i] = NULL; - } -} - -#if CH_DBG_THREADS_PROFILING -/** - * @brief CPU pulse. - * @note The current implementation is not totally reliable. - * - * @param[in] duration CPU pulse duration in milliseconds - */ -void test_cpu_pulse(unsigned duration) { - systime_t start, end, now; - - start = chThdSelf()->p_time; - end = start + MS2ST(duration); - do { - now = chThdSelf()->p_time; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } - while (end > start ? (now >= start) && (now < end) : - (now >= start) || (now < end)); -} -#endif - -/** - * @brief Delays execution until next system time tick. - */ -systime_t test_wait_tick(void) { - - chThdSleep(1); - return chTimeNow(); -} - -/* - * Timer utils. - */ - -/** @brief Set to @p TRUE when the test timer reaches its deadline.*/ -bool_t test_timer_done; - -static VirtualTimer vt; -static void tmr(void *p) { - (void)p; - - test_timer_done = TRUE; -} - -/** - * @brief Starts the test timer. - * - * @param[in] ms time in milliseconds - */ -void test_start_timer(unsigned ms) { - - systime_t duration = MS2ST(ms); - test_timer_done = FALSE; - chSysLock(); - chVTSetI(&vt, duration, tmr, NULL); - chSysUnlock(); -} - -/* - * Test suite execution. - */ -static void execute_test(const struct testcase *tcp) { - int i; - - /* Initialization */ - clear_tokens(); - local_fail = FALSE; - for (i = 0; i < MAX_THREADS; i++) - threads[i] = NULL; - - if (tcp->setup != NULL) - tcp->setup(); - tcp->execute(); - if (tcp->teardown != NULL) - tcp->teardown(); - - test_wait_threads(); -} - -static void print_line(void) { - unsigned i; - - for (i = 0; i < 76; i++) - chIOPut(chp, '-'); - chIOPut(chp, '\r'); - chIOPut(chp, '\n'); -} - -/** - * @brief Test execution thread function. - * - * @param[in] p pointer to a @p BaseChannel object for test output - */ -msg_t TestThread(void *p) { - int i, j; - - chp = p; - test_println(""); - test_println("*** ChibiOS/RT test suite"); - test_println("***"); - test_print("*** Kernel: "); - test_println(CH_KERNEL_VERSION); -#ifdef __GNUC__ - test_print("*** GCC Version: "); - test_println(__VERSION__); -#endif - test_print("*** Architecture: "); - test_println(CH_ARCHITECTURE_NAME); -#ifdef CH_CORE_VARIANT_NAME - test_print("*** Core Variant: "); - test_println(CH_CORE_VARIANT_NAME); -#endif -#ifdef PLATFORM_NAME - test_print("*** Platform: "); - test_println(PLATFORM_NAME); -#endif -#ifdef BOARD_NAME - test_print("*** Test Board: "); - test_println(BOARD_NAME); -#endif - test_println(""); - - global_fail = FALSE; - i = 0; - while (patterns[i]) { - j = 0; - while (patterns[i][j]) { - print_line(); - test_print("--- Test Case "); - test_printn(i + 1); - test_print("."); - test_printn(j + 1); - test_print(" ("); - test_print(patterns[i][j]->gettest()); - test_println(")"); -#if DELAY_BETWEEN_TESTS > 0 - chThdSleepMilliseconds(DELAY_BETWEEN_TESTS); -#endif - execute_test(patterns[i][j]); - if (local_fail) { - test_print("--- Result: FAILURE (#"); - test_printn(failpoint); - test_print(" ["); - print_tokens(); - test_println("])"); - } - else - test_println("--- Result: SUCCESS"); - j++; - } - i++; - } - print_line(); - test_println(""); - test_print("Final result: "); - if (global_fail) - test_println("FAILURE"); - else - test_println("SUCCESS"); - - return (msg_t)global_fail; -} - -/** @} */ diff --git a/ChibiOS_2.0.8/test/test.dox b/ChibiOS_2.0.8/test/test.dox deleted file mode 100644 index 094bb45..0000000 --- a/ChibiOS_2.0.8/test/test.dox +++ /dev/null @@ -1,92 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @defgroup test Test Runtime - * @details Runtime code for the test suite execution, this code is not part - * of the OS and should not be included in user applications. - */ - -/** - * @page testsuite Testing Strategy - *

      Description

      - * Most of the ChibiOS/RT demos link a set of software modules (test suite) in - * order to verify the proper working of the kernel, the port and the demo - * itself. - * - *

      Strategy by Component

      - * The OS components are tested in various modes depending on their importance: - * - Kernel. The kernel code is subject to rigorous testing. The test - * suite aims to test all the kernel code and reach a code coverage - * as close to 100% as possible. In addition to the code coverage, the kernel - * code is tested for functionality and benchmarked for speed - * and size before each stable release. In addition to the code - * coverage and functional testing a batch compilation test is - * performed before each release, the kernel is compiled by alternatively - * enabling and disabling all the various configuration options, the - * kernel code is expected to compile without errors nor warnings and - * execute the test suite without failures (a specific simulator is used - * for this execution test, it is done automatically by a script because - * the entire sequence can take hours).
      - * All the tests results are included as reports in the OS distribution - * under @p ./docs/reports. - * - Ports. The port code is tested by executing the kernel test - * suite on the target hardware. A port is validated only if it passes all - * the tests. Speed and size benchmarks for all the supported architectures - * are performed, both size and speed regressions are monitored. - * - HAL. The HAL high level code and device drivers implementations - * are tested by use in the various demos and/or by users. - * - Various. The miscellaneous code is tested by use in the various - * demos and/or by users. - * - External Code. Not tested, external libraries or components are - * used as-is or with minor patching where required, problems are usually - * reported upstream. - * . - *

      Kernel Test Suite

      - * The kernel test suite is divided in modules or test sequences. Each Test - * Module performs a series of tests on a specified kernel subsystem or - * subsystems and can report a failure/success status and/or a performance - * index as the test suite output.
      - * The test suite is usually activated in the demo applications by pressing a - * button on the target board, see the readme into the various demos - * directories. The test suite output is usually sent through a serial port - * and can be examined by using a terminal emulator program. - * - *

      Kernel Test Modules

      - * - * - @subpage test_threads - * - @subpage test_dynamic - * - @subpage test_msg - * - @subpage test_sem - * - @subpage test_mtx - * - @subpage test_events - * - @subpage test_mbox - * - @subpage test_queues - * - @subpage test_heap - * - @subpage test_pools - * - @subpage test_benchmarks - * . - */ diff --git a/ChibiOS_2.0.8/test/test.h b/ChibiOS_2.0.8/test/test.h deleted file mode 100644 index b648e7c..0000000 --- a/ChibiOS_2.0.8/test/test.h +++ /dev/null @@ -1,167 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file test.h - * @brief Tests support header. - * - * @addtogroup test - * @{ - */ - -#ifndef _TEST_H_ -#define _TEST_H_ - -/** - * @brief Delay inserted between test cases. - */ -#if !defined(DELAY_BETWEEN_TESTS) || defined(__DOXYGEN__) -#define DELAY_BETWEEN_TESTS 200 -#endif - -/** - * @brief If @p TRUE then benchmarks are not included. - */ -#if !defined(TEST_NO_BENCHMARKS) || defined(__DOXYGEN__) -#define TEST_NO_BENCHMARKS FALSE -#endif - -#define MAX_THREADS 5 -#define MAX_TOKENS 16 - -#if defined(CH_ARCHITECTURE_AVR) || \ - defined(CH_ARCHITECTURE_MSP430) || \ - defined(CH_ARCHITECTURE_STM8) -#define THREADS_STACK_SIZE 48 -#elif defined(CH_ARCHITECTURE_SIMIA32) -#define THREADS_STACK_SIZE 512 -#else -#define THREADS_STACK_SIZE 128 -#endif -#define WA_SIZE THD_WA_SIZE(THREADS_STACK_SIZE) - -/** - * @brief Structure representing a test case. - */ -struct testcase { - char *(*gettest)(void); /**< @brief Test case name get function. */ - void (*setup)(void); /**< @brief Test case preparation function. */ - void (*teardown)(void); /**< @brief Test case clean up function. */ - void (*execute)(void); /**< @brief Test case execution function. */ -}; - -#ifndef __DOXYGEN__ -union test_buffers { - struct { - WORKING_AREA(T0, THREADS_STACK_SIZE); - WORKING_AREA(T1, THREADS_STACK_SIZE); - WORKING_AREA(T2, THREADS_STACK_SIZE); - WORKING_AREA(T3, THREADS_STACK_SIZE); - WORKING_AREA(T4, THREADS_STACK_SIZE); - } wa; - uint8_t buffer[WA_SIZE * 5]; -}; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - msg_t TestThread(void *p); - void test_printn(uint32_t n); - void test_print(char *msgp); - void test_println(char *msgp); - void test_emit_token(char token); - bool_t _test_fail(unsigned point); - bool_t _test_assert(unsigned point, bool_t condition); - bool_t _test_assert_sequence(unsigned point, char *expected); - bool_t _test_assert_time_window(unsigned point, systime_t start, systime_t end); - void test_terminate_threads(void); - void test_wait_threads(void); - systime_t test_wait_tick(void); - void test_start_timer(unsigned ms); -#if CH_DBG_THREADS_PROFILING - void test_cpu_pulse(unsigned duration); -#endif -#if defined(WIN32) - void ChkIntSources(void); -#endif -#ifdef __cplusplus -} -#endif - -/** - * @brief Test failure enforcement. - */ -#define test_fail(point) { \ - _test_fail(point); \ - return; \ -} - -/** - * @brief Test assertion. - * - * @param[in] point numeric assertion identifier - * @param[in] condition a boolean expression that must be verified to be true - * @param[in] msg failure message - */ -#define test_assert(point, condition, msg) { \ - if (_test_assert(point, condition)) \ - return; \ -} - -/** - * @brief Test sequence assertion. - * - * @param[in] point numeric assertion identifier - * @param[in] expected string to be matched with the tokens buffer - */ -#define test_assert_sequence(point, expected) { \ - if (_test_assert_sequence(point, expected)) \ - return; \ -} - -/** - * @brief Test time window assertion. - * - * @param[in] point numeric assertion identifier - * @param[in] start initial time in the window (included) - * @param[in] end final time in the window (not included) - */ -#define test_assert_time_window(point, start, end) { \ - if (_test_assert_time_window(point, start, end)) \ - return; \ -} - -#if !defined(__DOXYGEN__) -extern Thread *threads[MAX_THREADS]; -extern union test_buffers test; -extern void * const wa[]; -extern bool_t test_timer_done; -#endif - -#endif /* _TEST_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/test/test.mk b/ChibiOS_2.0.8/test/test.mk deleted file mode 100644 index 593cd6e..0000000 --- a/ChibiOS_2.0.8/test/test.mk +++ /dev/null @@ -1,16 +0,0 @@ -# List of all the ChibiOS/RT test files. -TESTSRC = ${CHIBIOS}/test/test.c \ - ${CHIBIOS}/test/testthd.c \ - ${CHIBIOS}/test/testsem.c \ - ${CHIBIOS}/test/testmtx.c \ - ${CHIBIOS}/test/testmsg.c \ - ${CHIBIOS}/test/testmbox.c \ - ${CHIBIOS}/test/testevt.c \ - ${CHIBIOS}/test/testheap.c \ - ${CHIBIOS}/test/testpools.c \ - ${CHIBIOS}/test/testdyn.c \ - ${CHIBIOS}/test/testqueues.c \ - ${CHIBIOS}/test/testbmk.c - -# Required include directories -TESTINC = ${CHIBIOS}/test diff --git a/ChibiOS_2.0.8/test/testbmk.c b/ChibiOS_2.0.8/test/testbmk.c deleted file mode 100644 index e2270d5..0000000 --- a/ChibiOS_2.0.8/test/testbmk.c +++ /dev/null @@ -1,778 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_benchmarks Kernel Benchmarks - * - * File: @ref testbmk.c - * - *

      Description

      - * This module implements a series of system benchmarks. The benchmarks are - * useful as a stress test and as a reference when comparing ChibiOS/RT - * with similar systems. - * - *

      Objective

      - * Objective of the test module is to provide a performance index for the - * most critical system subsystems. The performance numbers allow to - * discover performance regressions between successive ChibiOS/RT releases. - * - *

      Preconditions

      - * None. - * - *

      Test Cases

      - * - @subpage test_benchmarks_001 - * - @subpage test_benchmarks_002 - * - @subpage test_benchmarks_003 - * - @subpage test_benchmarks_004 - * - @subpage test_benchmarks_005 - * - @subpage test_benchmarks_006 - * - @subpage test_benchmarks_007 - * - @subpage test_benchmarks_008 - * - @subpage test_benchmarks_009 - * - @subpage test_benchmarks_010 - * - @subpage test_benchmarks_011 - * - @subpage test_benchmarks_012 - * - @subpage test_benchmarks_013 - * . - * @file testbmk.c Kernel Benchmarks - * @brief Kernel Benchmarks source file - * @file testbmk.h - * @brief Kernel Benchmarks header file - */ - -static Semaphore sem1; -#if CH_USE_MUTEXES -static Mutex mtx1; -#endif - -static msg_t thread1(void *p) { - msg_t msg; - - (void)p; - do { - chMsgRelease(msg = chMsgWait()); - } while (msg); - return 0; -} - -#ifdef __GNUC__ -__attribute__((noinline)) -#endif -static unsigned int msg_loop_test(Thread *tp) { - - uint32_t n = 0; - test_wait_tick(); - test_start_timer(1000); - do { - (void)chMsgSend(tp, 1); - n++; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } while (!test_timer_done); - (void)chMsgSend(tp, 0); - return n; -} - -/** - * @page test_benchmarks_001 Messages performance #1 - * - *

      Description

      - * A message server thread is created with a lower priority than the client - * thread, the messages throughput per second is measured and the result - * printed in the output log. - */ - -static char *bmk1_gettest(void) { - - return "Benchmark, messages #1"; -} - -static void bmk1_execute(void) { - uint32_t n; - - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()-1, thread1, NULL); - n = msg_loop_test(threads[0]); - test_wait_threads(); - test_print("--- Score : "); - test_printn(n); - test_print(" msgs/S, "); - test_printn(n << 1); - test_println(" ctxswc/S"); -} - -const struct testcase testbmk1 = { - bmk1_gettest, - NULL, - NULL, - bmk1_execute -}; - -/** - * @page test_benchmarks_002 Messages performance #2 - * - *

      Description

      - * A message server thread is created with an higher priority than the client - * thread, the messages throughput per second is measured and the result - * printed in the output log. - */ - -static char *bmk2_gettest(void) { - - return "Benchmark, messages #2"; -} - -static void bmk2_execute(void) { - uint32_t n; - - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()+1, thread1, NULL); - n = msg_loop_test(threads[0]); - test_wait_threads(); - test_print("--- Score : "); - test_printn(n); - test_print(" msgs/S, "); - test_printn(n << 1); - test_println(" ctxswc/S"); -} - -const struct testcase testbmk2 = { - bmk2_gettest, - NULL, - NULL, - bmk2_execute -}; - -static msg_t thread2(void *p) { - - return (msg_t)p; -} - -/** - * @page test_benchmarks_003 Messages performance #3 - * - *

      Description

      - * A message server thread is created with an higher priority than the client - * thread, four lower priority threads crowd the ready list, the messages - * throughput per second is measured while the ready list and the result - * printed in the output log. - */ - -static char *bmk3_gettest(void) { - - return "Benchmark, messages #3"; -} - -static void bmk3_execute(void) { - uint32_t n; - - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()+1, thread1, NULL); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, chThdGetPriority()-2, thread2, NULL); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, chThdGetPriority()-3, thread2, NULL); - threads[3] = chThdCreateStatic(wa[3], WA_SIZE, chThdGetPriority()-4, thread2, NULL); - threads[4] = chThdCreateStatic(wa[4], WA_SIZE, chThdGetPriority()-5, thread2, NULL); - n = msg_loop_test(threads[0]); - test_wait_threads(); - test_print("--- Score : "); - test_printn(n); - test_print(" msgs/S, "); - test_printn(n << 1); - test_println(" ctxswc/S"); -} - -const struct testcase testbmk3 = { - bmk3_gettest, - NULL, - NULL, - bmk3_execute -}; - -/** - * @page test_benchmarks_004 Context Switch performance - * - *

      Description

      - * A thread is created that just performs a @p chSchGoSleepS() into a loop, - * the thread is awakened as fast is possible by the tester thread.
      - * The Context Switch performance is calculated by measuring the number of - * iterations after a second of continuous operations. - */ - -static char *bmk4_gettest(void) { - - return "Benchmark, context switch"; -} - -msg_t thread4(void *p) { - msg_t msg; - Thread *self = chThdSelf(); - - (void)p; - chSysLock(); - do { - chSchGoSleepS(THD_STATE_SUSPENDED); - msg = self->p_u.rdymsg; - } while (msg == RDY_OK); - chSysUnlock(); - return 0; -} - -static void bmk4_execute(void) { - Thread *tp; - uint32_t n; - - tp = threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()+1, thread4, NULL); - n = 0; - test_wait_tick(); - test_start_timer(1000); - do { - chSysLock(); - chSchWakeupS(tp, RDY_OK); - chSchWakeupS(tp, RDY_OK); - chSchWakeupS(tp, RDY_OK); - chSchWakeupS(tp, RDY_OK); - chSysUnlock(); - n += 4; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } while (!test_timer_done); - chSysLock(); - chSchWakeupS(tp, RDY_TIMEOUT); - chSysUnlock(); - - test_wait_threads(); - test_print("--- Score : "); - test_printn(n * 2); - test_println(" ctxswc/S"); -} - -const struct testcase testbmk4 = { - bmk4_gettest, - NULL, - NULL, - bmk4_execute -}; - -/** - * @page test_benchmarks_005 Threads performance, full cycle - * - *

      Description

      - * Threads are continuously created and terminated into a loop. A full - * @p chThdCreateStatic() / @p chThdExit() / @p chThdWait() cycle is performed - * in each iteration.
      - * The performance is calculated by measuring the number of iterations after - * a second of continuous operations. - */ - -static char *bmk5_gettest(void) { - - return "Benchmark, threads, full cycle"; -} - -static void bmk5_execute(void) { - - uint32_t n = 0; - void *wap = wa[0]; - tprio_t prio = chThdGetPriority() - 1; - test_wait_tick(); - test_start_timer(1000); - do { - chThdWait(chThdCreateStatic(wap, WA_SIZE, prio, thread2, NULL)); - n++; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } while (!test_timer_done); - test_print("--- Score : "); - test_printn(n); - test_println(" threads/S"); -} - -const struct testcase testbmk5 = { - bmk5_gettest, - NULL, - NULL, - bmk5_execute -}; - -/** - * @page test_benchmarks_006 Threads performance, create/exit only - * - *

      Description

      - * Threads are continuously created and terminated into a loop. A partial - * @p chThdCreateStatic() / @p chThdExit() cycle is performed in each - * iteration, the @p chThdWait() is not necessary because the thread is - * created at an higher priority so there is no need to wait for it to - * terminate.
      - * The performance is calculated by measuring the number of iterations after - * a second of continuous operations. - */ - -static char *bmk6_gettest(void) { - - return "Benchmark, threads, create only"; -} - -static void bmk6_execute(void) { - - uint32_t n = 0; - void *wap = wa[0]; - tprio_t prio = chThdGetPriority() + 1; - test_wait_tick(); - test_start_timer(1000); - do { - chThdCreateStatic(wap, WA_SIZE, prio, thread2, NULL); - n++; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } while (!test_timer_done); - test_print("--- Score : "); - test_printn(n); - test_println(" threads/S"); -} - -const struct testcase testbmk6 = { - bmk6_gettest, - NULL, - NULL, - bmk6_execute -}; - -/** - * @page test_benchmarks_007 Mass reschedule performance - * - *

      Description

      - * Five threads are created and atomically rescheduled by resetting the - * semaphore where they are waiting on. The operation is performed into a - * continuous loop.
      - * The performance is calculated by measuring the number of iterations after - * a second of continuous operations. - */ - -static msg_t thread3(void *p) { - - (void)p; - while (!chThdShouldTerminate()) - chSemWait(&sem1); - return 0; -} - -static char *bmk7_gettest(void) { - - return "Benchmark, mass reschedule, 5 threads"; -} - -static void bmk7_setup(void) { - - chSemInit(&sem1, 0); -} - -static void bmk7_execute(void) { - uint32_t n; - - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()+5, thread3, NULL); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, chThdGetPriority()+4, thread3, NULL); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, chThdGetPriority()+3, thread3, NULL); - threads[3] = chThdCreateStatic(wa[3], WA_SIZE, chThdGetPriority()+2, thread3, NULL); - threads[4] = chThdCreateStatic(wa[4], WA_SIZE, chThdGetPriority()+1, thread3, NULL); - - n = 0; - test_wait_tick(); - test_start_timer(1000); - do { - chSemReset(&sem1, 0); - n++; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } while (!test_timer_done); - test_terminate_threads(); - chSemReset(&sem1, 0); - test_wait_threads(); - - test_print("--- Score : "); - test_printn(n); - test_print(" reschedules/S, "); - test_printn(n * 6); - test_println(" ctxswc/S"); -} - -const struct testcase testbmk7 = { - bmk7_gettest, - bmk7_setup, - NULL, - bmk7_execute -}; - -/** - * @page test_benchmarks_008 I/O Round-Robin voluntary reschedule. - * - *

      Description

      - * Five threads are created at equal priority, each thread just increases a - * variable and yields.
      - * The performance is calculated by measuring the number of iterations after - * a second of continuous operations. - */ - -static msg_t thread8(void *p) { - - do { - chThdYield(); - chThdYield(); - chThdYield(); - chThdYield(); - (*(uint32_t *)p) += 4; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } while(!chThdShouldTerminate()); - return 0; -} - -static char *bmk8_gettest(void) { - - return "Benchmark, round robin context switching"; -} - -static void bmk8_execute(void) { - uint32_t n; - - n = 0; - test_wait_tick(); - - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()-1, thread8, (void *)&n); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, chThdGetPriority()-1, thread8, (void *)&n); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, chThdGetPriority()-1, thread8, (void *)&n); - threads[3] = chThdCreateStatic(wa[3], WA_SIZE, chThdGetPriority()-1, thread8, (void *)&n); - threads[4] = chThdCreateStatic(wa[4], WA_SIZE, chThdGetPriority()-1, thread8, (void *)&n); - - chThdSleepSeconds(1); - test_terminate_threads(); - test_wait_threads(); - - test_print("--- Score : "); - test_printn(n); - test_println(" ctxswc/S"); -} - -const struct testcase testbmk8 = { - bmk8_gettest, - NULL, - NULL, - bmk8_execute -}; - -/** - * @page test_benchmarks_009 I/O Queues throughput - * - *

      Description

      - * Four bytes are written and then read from an @p InputQueue into a continuous - * loop.
      - * The performance is calculated by measuring the number of iterations after - * a second of continuous operations. - */ - -static char *bmk9_gettest(void) { - - return "Benchmark, I/O Queues throughput"; -} - -static void bmk9_execute(void) { - uint32_t n; - static uint8_t ib[16]; - static InputQueue iq; - - chIQInit(&iq, ib, sizeof(ib), NULL); - n = 0; - test_wait_tick(); - test_start_timer(1000); - do { - chIQPutI(&iq, 0); - chIQPutI(&iq, 1); - chIQPutI(&iq, 2); - chIQPutI(&iq, 3); - (void)chIQGet(&iq); - (void)chIQGet(&iq); - (void)chIQGet(&iq); - (void)chIQGet(&iq); - n++; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } while (!test_timer_done); - test_print("--- Score : "); - test_printn(n * 4); - test_println(" bytes/S"); -} - -const struct testcase testbmk9 = { - bmk9_gettest, - NULL, - NULL, - bmk9_execute -}; - -/** - * @page test_benchmarks_010 Virtual Timers set/reset performance - * - *

      Description

      - * A virtual timer is set and immediately reset into a continuous loop.
      - * The performance is calculated by measuring the number of iterations after - * a second of continuous operations. - */ - -static char *bmk10_gettest(void) { - - return "Benchmark, virtual timers set/reset"; -} - -static void tmo(void *param) {(void)param;} - -static void bmk10_execute(void) { - static VirtualTimer vt1, vt2; - uint32_t n = 0; - - test_wait_tick(); - test_start_timer(1000); - do { - chSysLock(); - chVTSetI(&vt1, 1, tmo, NULL); - chVTSetI(&vt2, 10000, tmo, NULL); - chVTResetI(&vt1); - chVTResetI(&vt2); - chSysUnlock(); - n++; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } while (!test_timer_done); - test_print("--- Score : "); - test_printn(n * 2); - test_println(" timers/S"); -} - -const struct testcase testbmk10 = { - bmk10_gettest, - NULL, - NULL, - bmk10_execute -}; - -/** - * @page test_benchmarks_011 Semaphores wait/signal performance - * - *

      Description

      - * A counting semaphore is taken/released into a continuous loop, no Context - * Switch happens because the counter is always non negative.
      - * The performance is calculated by measuring the number of iterations after - * a second of continuous operations. - */ - -static char *bmk11_gettest(void) { - - return "Benchmark, semaphores wait/signal"; -} - -static void bmk11_setup(void) { - - chSemInit(&sem1, 1); -} - -static void bmk11_execute(void) { - uint32_t n = 0; - - test_wait_tick(); - test_start_timer(1000); - do { - chSemWait(&sem1); - chSemSignal(&sem1); - chSemWait(&sem1); - chSemSignal(&sem1); - chSemWait(&sem1); - chSemSignal(&sem1); - chSemWait(&sem1); - chSemSignal(&sem1); - n++; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } while (!test_timer_done); - test_print("--- Score : "); - test_printn(n * 4); - test_println(" wait+signal/S"); -} - -const struct testcase testbmk11 = { - bmk11_gettest, - bmk11_setup, - NULL, - bmk11_execute -}; - -#if CH_USE_MUTEXES -/** - * @page test_benchmarks_012 Mutexes lock/unlock performance - * - *

      Description

      - * A mutex is locked/unlocked into a continuous loop, no Context Switch happens - * because there are no other threads asking for the mutex.
      - * The performance is calculated by measuring the number of iterations after - * a second of continuous operations. - */ - -static char *bmk12_gettest(void) { - - return "Benchmark, mutexes lock/unlock"; -} - -static void bmk12_setup(void) { - - chMtxInit(&mtx1); -} - -static void bmk12_execute(void) { - uint32_t n = 0; - - test_wait_tick(); - test_start_timer(1000); - do { - chMtxLock(&mtx1); - chMtxUnlock(); - chMtxLock(&mtx1); - chMtxUnlock(); - chMtxLock(&mtx1); - chMtxUnlock(); - chMtxLock(&mtx1); - chMtxUnlock(); - n++; -#if defined(SIMULATOR) - ChkIntSources(); -#endif - } while (!test_timer_done); - test_print("--- Score : "); - test_printn(n * 4); - test_println(" lock+unlock/S"); -} - -const struct testcase testbmk12 = { - bmk12_gettest, - bmk12_setup, - NULL, - bmk12_execute -}; -#endif - -/** - * @page test_benchmarks_013 RAM Footprint - * - *

      Description

      - * The memory size of the various kernel objects is printed. - */ - -static char *bmk13_gettest(void) { - - return "Benchmark, RAM footprint"; -} - -static void bmk13_execute(void) { - - test_print("--- System: "); - test_printn(sizeof(ReadyList) + sizeof(VTList) + IDLE_THREAD_STACK_SIZE + - (sizeof(Thread) + sizeof(struct intctx) + sizeof(struct extctx) + - INT_REQUIRED_STACK) * 2); - test_println(" bytes"); - test_print("--- Thread: "); - test_printn(sizeof(Thread)); - test_println(" bytes"); - test_print("--- Timer : "); - test_printn(sizeof(VirtualTimer)); - test_println(" bytes"); - test_print("--- Semaph: "); - test_printn(sizeof(Semaphore)); - test_println(" bytes"); -#if CH_USE_EVENTS - test_print("--- EventS: "); - test_printn(sizeof(EventSource)); - test_println(" bytes"); - test_print("--- EventL: "); - test_printn(sizeof(EventListener)); - test_println(" bytes"); -#endif -#if CH_USE_MUTEXES - test_print("--- Mutex : "); - test_printn(sizeof(Mutex)); - test_println(" bytes"); -#endif -#if CH_USE_CONDVARS - test_print("--- CondV.: "); - test_printn(sizeof(CondVar)); - test_println(" bytes"); -#endif -#if CH_USE_QUEUES - test_print("--- Queue : "); - test_printn(sizeof(GenericQueue)); - test_println(" bytes"); -#endif -#if CH_USE_MAILBOXES - test_print("--- MailB.: "); - test_printn(sizeof(Mailbox)); - test_println(" bytes"); -#endif -} - -const struct testcase testbmk13 = { - bmk13_gettest, - NULL, - NULL, - bmk13_execute -}; - -/** - * @brief Test sequence for benchmarks. - */ -const struct testcase * const patternbmk[] = { -#if !TEST_NO_BENCHMARKS - &testbmk1, - &testbmk2, - &testbmk3, - &testbmk4, - &testbmk5, - &testbmk6, - &testbmk7, - &testbmk8, - &testbmk9, - &testbmk10, - &testbmk11, -#if CH_USE_MUTEXES - &testbmk12, -#endif - &testbmk13, -#endif - NULL -}; diff --git a/ChibiOS_2.0.8/test/testbmk.h b/ChibiOS_2.0.8/test/testbmk.h deleted file mode 100644 index fc9efff..0000000 --- a/ChibiOS_2.0.8/test/testbmk.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTBMK_H_ -#define _TESTBMK_H_ - -extern const struct testcase *patternbmk[]; - -#endif /* _TESTBMK_H_ */ diff --git a/ChibiOS_2.0.8/test/testdyn.c b/ChibiOS_2.0.8/test/testdyn.c deleted file mode 100644 index c456c45..0000000 --- a/ChibiOS_2.0.8/test/testdyn.c +++ /dev/null @@ -1,287 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_dynamic Dynamic APIs test - * - * File: @ref testdyn.c - * - *

      Description

      - * This module implements the test sequence for the dynamic thread creation - * APIs. - * - *

      Objective

      - * Objective of the test module is to cover 100% of the dynamic APIs code. - * - *

      Preconditions

      - * The module requires the following kernel options: - * - @p CH_USE_DYNAMIC - * - @p CH_USE_HEAP - * - @p CH_USE_MEMPOOLS - * . - * In case some of the required options are not enabled then some or all tests - * may be skipped. - * - *

      Test Cases

      - * - @subpage test_dynamic_001 - * - @subpage test_dynamic_002 - * - @subpage test_dynamic_003 - * . - * @file testdyn.c - * @brief Dynamic thread APIs test source file - * @file testdyn.h - * @brief Dynamic thread APIs test header file - */ - -#if CH_USE_DYNAMIC -#if CH_USE_HEAP -static MemoryHeap heap1; -#endif -#if CH_USE_MEMPOOLS -static MemoryPool mp1; -#endif - -/** - * @page test_dynamic_001 Threads creation from Memory Heap - * - *

      Description

      - * Two threads are started by allocating the memory from the Memory Heap then - * the remaining heap space is arbitrarily allocated and a third tread startup - * is attempted.
      - * The test expects the first two threads to successfully start and the last - * one to fail. - */ - -static msg_t thread(void *p) { - - test_emit_token(*(char *)p); - return 0; -} - -#if CH_USE_HEAP -static char *dyn1_gettest(void) { - - return "Dynamic APIs, threads creation from heap"; -} - -static void dyn1_setup(void) { - - chHeapInit(&heap1, test.buffer, sizeof(union test_buffers)); -} - -static void dyn1_execute(void) { - size_t n, sz; - void *p1; - tprio_t prio = chThdGetPriority(); - - (void)chHeapStatus(&heap1, &sz); - /* Starting threads from the heap. */ - threads[0] = chThdCreateFromHeap(&heap1, THD_WA_SIZE(THREADS_STACK_SIZE), - prio-1, thread, "A"); - threads[1] = chThdCreateFromHeap(&heap1, THD_WA_SIZE(THREADS_STACK_SIZE), - prio-2, thread, "B"); - /* Allocating the whole heap in order to make the thread creation fail.*/ - (void)chHeapStatus(&heap1, &n); - p1 = chHeapAlloc(&heap1, n); - threads[2] = chThdCreateFromHeap(&heap1, THD_WA_SIZE(THREADS_STACK_SIZE), - prio-3, thread, "C"); - chHeapFree(p1); - - test_assert(1, (threads[0] != NULL) && - (threads[1] != NULL) && - (threads[2] == NULL) && - (threads[3] == NULL) && - (threads[4] == NULL), - "thread creation failed"); - - /* Claiming the memory from terminated threads. */ - test_wait_threads(); - test_assert_sequence(2, "AB"); - - /* Heap status checked again.*/ - test_assert(3, chHeapStatus(&heap1, &n) == 1, "heap fragmented"); - test_assert(4, n == sz, "heap size changed"); -} - -const struct testcase testdyn1 = { - dyn1_gettest, - dyn1_setup, - NULL, - dyn1_execute -}; -#endif /* CH_USE_HEAP */ - -#if CH_USE_MEMPOOLS -/** - * @page test_dynamic_002 Threads creation from Memory Pool - * - *

      Description

      - * Five thread creation are attempted from a pool containing only four - * elements.
      - * The test expects the first four threads to successfully start and the last - * one to fail. - */ - -static char *dyn2_gettest(void) { - - return "Dynamic APIs, threads creation from memory pool"; -} - -static void dyn2_setup(void) { - - chPoolInit(&mp1, THD_WA_SIZE(THREADS_STACK_SIZE), NULL); -} - -static void dyn2_execute(void) { - int i; - tprio_t prio = chThdGetPriority(); - - /* Adding the WAs to the pool. */ - for (i = 0; i < 4; i++) - chPoolFree(&mp1, wa[i]); - - /* Starting threads from the memory pool. */ - threads[0] = chThdCreateFromMemoryPool(&mp1, prio-1, thread, "A"); - threads[1] = chThdCreateFromMemoryPool(&mp1, prio-2, thread, "B"); - threads[2] = chThdCreateFromMemoryPool(&mp1, prio-3, thread, "C"); - threads[3] = chThdCreateFromMemoryPool(&mp1, prio-4, thread, "D"); - threads[4] = chThdCreateFromMemoryPool(&mp1, prio-5, thread, "E"); - - test_assert(1, (threads[0] != NULL) && - (threads[1] != NULL) && - (threads[2] != NULL) && - (threads[3] != NULL) && - (threads[4] == NULL), - "thread creation failed"); - - /* Claiming the memory from terminated threads. */ - test_wait_threads(); - test_assert_sequence(2, "ABCD"); - - /* Now the pool must be full again. */ - for (i = 0; i < 4; i++) - test_assert(3, chPoolAlloc(&mp1) != NULL, "pool list empty"); - test_assert(4, chPoolAlloc(&mp1) == NULL, "pool list not empty"); -} - -const struct testcase testdyn2 = { - dyn2_gettest, - dyn2_setup, - NULL, - dyn2_execute -}; -#endif /* CH_USE_MEMPOOLS */ - -#if CH_USE_HEAP && CH_USE_REGISTRY -/** - * @page test_dynamic_003 Registry and References test - * - *

      Description

      - * Registry and Thread References APIs are tested for functionality and - * coverage. - */ - -static bool_t regfind(Thread *tp) { - Thread *ftp; - bool_t found = FALSE; - - ftp = chRegFirstThread(); - do { - found |= ftp == tp; - ftp = chRegNextThread(ftp); - } while (ftp != NULL); - return found; -} - -static char *dyn3_gettest(void) { - - return "Dynamic APIs, registry and references"; -} - -static void dyn3_setup(void) { - - chHeapInit(&heap1, test.buffer, sizeof(union test_buffers)); -} - -static void dyn3_execute(void) { - Thread *tp; - tprio_t prio = chThdGetPriority(); - - /* Testing references increase/decrease and final detach.*/ - tp = chThdCreateFromHeap(&heap1, WA_SIZE, prio-1, thread, "A"); - test_assert(1, tp->p_refs == 1, "wrong initial reference counter"); - chThdAddRef(tp); - test_assert(2, tp->p_refs == 2, "references increase failure"); - chThdRelease(tp); - test_assert(3, tp->p_refs == 1, "references decrease failure"); - - /* Verify the new threads count.*/ - test_assert(4, regfind(tp), "thread missing from registry"); - test_assert(5, regfind(tp), "thread disappeared"); - - /* Detach and let the thread execute and terminate.*/ - chThdRelease(tp); - test_assert(6, tp->p_refs == 0, "detach failure"); - test_assert(7, tp->p_state == THD_STATE_READY, "invalid state"); - test_assert(8, regfind(tp), "thread disappeared"); - test_assert(9, regfind(tp), "thread disappeared"); - chThdSleepMilliseconds(50); /* The thread just terminates. */ - test_assert(10, tp->p_state == THD_STATE_FINAL, "invalid state"); - - /* Clearing the zombie by scanning the registry.*/ - test_assert(11, regfind(tp), "thread disappeared"); - test_assert(12, !regfind(tp), "thread still in registry"); -} - -const struct testcase testdyn3 = { - dyn3_gettest, - dyn3_setup, - NULL, - dyn3_execute -}; -#endif /* CH_USE_HEAP && CH_USE_REGISTRY */ -#endif /* CH_USE_DYNAMIC */ - -/** - * @brief Test sequence for dynamic APIs. - */ -const struct testcase * const patterndyn[] = { -#if CH_USE_DYNAMIC -#if CH_USE_HEAP - &testdyn1, -#endif -#if CH_USE_MEMPOOLS - &testdyn2, -#endif -#if CH_USE_HEAP && CH_USE_REGISTRY - &testdyn3, -#endif -#endif - NULL -}; diff --git a/ChibiOS_2.0.8/test/testdyn.h b/ChibiOS_2.0.8/test/testdyn.h deleted file mode 100644 index ed3c7e2..0000000 --- a/ChibiOS_2.0.8/test/testdyn.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTDYN_H_ -#define _TESTDYN_H_ - -extern const struct testcase *patterndyn[]; - -#endif /* _TESTDYN_H_ */ diff --git a/ChibiOS_2.0.8/test/testevt.c b/ChibiOS_2.0.8/test/testevt.c deleted file mode 100644 index a72a4ea..0000000 --- a/ChibiOS_2.0.8/test/testevt.c +++ /dev/null @@ -1,319 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_events Events test - * - * File: @ref testevt.c - * - *

      Description

      - * This module implements the test sequence for the @ref events subsystem. - * - *

      Objective

      - * Objective of the test module is to cover 100% of the @ref events subsystem. - * - *

      Preconditions

      - * The module requires the following kernel options: - * - @p CH_USE_EVENTS - * - @p CH_USE_EVENTS_TIMEOUT - * . - * In case some of the required options are not enabled then some or all tests - * may be skipped. - * - *

      Test Cases

      - * - @subpage test_events_001 - * - @subpage test_events_002 - * - @subpage test_events_003 - * . - * @file testevt.c - * @brief Events test source file - * @file testevt.h - * @brief Events test header file - */ - -#if CH_USE_EVENTS - -#define ALLOWED_DELAY MS2ST(5) - -/* - * Note, the static initializers are not really required because the - * variables are explicitly initialized in each test case. It is done in order - * to test the macros. - */ -static EVENTSOURCE_DECL(es1); -static EVENTSOURCE_DECL(es2); - -/** - * @page test_events_001 Events registration and dispatch - * - *

      Description

      - * Two event listeners are registered on an event source and then unregistered - * in the same order.
      - * The test expects that the even source has listeners after the registrations - * and after the first unregistration, then, after the second unegistration, - * the test expects no more listeners.
      - * In the second part the test dispatches three event flags and verifies that - * the associated event handlers are invoked in LSb-first order. - */ - -static char *evt1_gettest(void) { - - return "Events, registration and dispatch"; -} - -static void evt1_setup(void) { - - chEvtClear(ALL_EVENTS); -} - -static void h1(eventid_t id) {(void)id;test_emit_token('A');} -static void h2(eventid_t id) {(void)id;test_emit_token('B');} -static void h3(eventid_t id) {(void)id;test_emit_token('C');} -static const evhandler_t evhndl[] = {h1, h2, h3}; - -static void evt1_execute(void) { - EventListener el1, el2; - - /* - * Testing chEvtRegisterMask() and chEvtUnregister(). - */ - chEvtInit(&es1); - chEvtRegisterMask(&es1, &el1, 1); - chEvtRegisterMask(&es1, &el2, 2); - test_assert(1, chEvtIsListening(&es1), "no listener"); - chEvtUnregister(&es1, &el1); - test_assert(2, chEvtIsListening(&es1), "no listener"); - chEvtUnregister(&es1, &el2); - test_assert(3, !chEvtIsListening(&es1), "stuck listener"); - - /* - * Testing chEvtDispatch(). - */ - chEvtDispatch(evhndl, 7); - test_assert_sequence(4, "ABC"); -} - -const struct testcase testevt1 = { - evt1_gettest, - evt1_setup, - NULL, - evt1_execute -}; - -/** - * @page test_events_002 Events wait and broadcast - * - *

      Description

      - * In this test the following APIs are indipently tested by starting threads - * that signal/broadcast events after fixed delays: - * - @p chEvtWaitOne() - * - @p chEvtWaitAny() - * - @p chEvtWaitAll() - * . - * After each test phase the test verifies that the events have been served at - * the expected time and that there are no stuck event flags. - */ - -static char *evt2_gettest(void) { - - return "Events, wait and broadcast"; -} - -static void evt2_setup(void) { - - chEvtClear(ALL_EVENTS); -} - -static msg_t thread1(void *p) { - - chThdSleepMilliseconds(50); - chEvtSignal((Thread *)p, 1); - return 0; -} - -static msg_t thread2(void *p) { - - (void)p; - chEvtBroadcast(&es1); - chThdSleepMilliseconds(50); - chEvtBroadcast(&es2); - return 0; -} - -static void evt2_execute(void) { - eventmask_t m; - EventListener el1, el2; - systime_t target_time; - - /* - * Test on chEvtWaitOne() without wait. - */ - chEvtPend(5); - m = chEvtWaitOne(ALL_EVENTS); - test_assert(1, m == 1, "single event error"); - m = chEvtWaitOne(ALL_EVENTS); - test_assert(2, m == 4, "single event error"); - m = chEvtClear(ALL_EVENTS); - test_assert(3, m == 0, "stuck event"); - - /* - * Test on chEvtWaitOne() with wait. - */ - test_wait_tick(); - target_time = chTimeNow() + MS2ST(50); - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority() - 1, - thread1, chThdSelf()); - m = chEvtWaitOne(ALL_EVENTS); - test_assert_time_window(4, target_time, target_time + ALLOWED_DELAY); - test_assert(5, m == 1, "single event error"); - m = chEvtClear(ALL_EVENTS); - test_assert(6, m == 0, "stuck event"); - test_wait_threads(); - - /* - * Test on chEvtWaitAny() without wait. - */ - chEvtPend(5); - m = chEvtWaitAny(ALL_EVENTS); - test_assert(7, m == 5, "unexpected pending bit"); - m = chEvtClear(ALL_EVENTS); - test_assert(8, m == 0, "stuck event"); - - /* - * Test on chEvtWaitAny() with wait. - */ - test_wait_tick(); - target_time = chTimeNow() + MS2ST(50); - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority() - 1, - thread1, chThdSelf()); - m = chEvtWaitAny(ALL_EVENTS); - test_assert_time_window(9, target_time, target_time + ALLOWED_DELAY); - test_assert(10, m == 1, "single event error"); - m = chEvtClear(ALL_EVENTS); - test_assert(11, m == 0, "stuck event"); - test_wait_threads(); - - /* - * Test on chEvtWaitAll(). - */ - chEvtInit(&es1); - chEvtInit(&es2); - chEvtRegisterMask(&es1, &el1, 1); - chEvtRegisterMask(&es2, &el2, 4); - test_wait_tick(); - target_time = chTimeNow() + MS2ST(50); - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority() - 1, - thread2, "A"); - m = chEvtWaitAll(5); - test_assert_time_window(12, target_time, target_time + ALLOWED_DELAY); - m = chEvtClear(ALL_EVENTS); - test_assert(13, m == 0, "stuck event"); - test_wait_threads(); - chEvtUnregister(&es1, &el1); - chEvtUnregister(&es2, &el2); - test_assert(14, !chEvtIsListening(&es1), "stuck listener"); - test_assert(15, !chEvtIsListening(&es2), "stuck listener"); -} - -const struct testcase testevt2 = { - evt2_gettest, - evt2_setup, - NULL, - evt2_execute -}; - -#if CH_USE_EVENTS_TIMEOUT -/** - * @page test_events_003 Events timeout - * - *

      Description

      - * In this test the following APIs are let to timeout twice: immediatly and - * after 10ms: - * In this test the following APIs are indipently tested by starting threads - * that broadcast events after fixed delays: - * - @p chEvtWaitOneTimeout() - * - @p chEvtWaitAnyTimeout() - * - @p chEvtWaitAllTimeout() - * . - * After each test phase the test verifies that there are no stuck event flags. - */ - -static char *evt3_gettest(void) { - - return "Events, timeouts"; -} - -static void evt3_setup(void) { - - chEvtClear(ALL_EVENTS); -} - -static void evt3_execute(void) { - eventmask_t m; - - /* - * Tests various timeout situations. - */ - m = chEvtWaitOneTimeout(ALL_EVENTS, TIME_IMMEDIATE); - test_assert(1, m == 0, "spurious event"); - m = chEvtWaitAnyTimeout(ALL_EVENTS, TIME_IMMEDIATE); - test_assert(2, m == 0, "spurious event"); - m = chEvtWaitAllTimeout(ALL_EVENTS, TIME_IMMEDIATE); - test_assert(3, m == 0, "spurious event"); - m = chEvtWaitOneTimeout(ALL_EVENTS, 10); - test_assert(4, m == 0, "spurious event"); - m = chEvtWaitAnyTimeout(ALL_EVENTS, 10); - test_assert(5, m == 0, "spurious event"); - m = chEvtWaitAllTimeout(ALL_EVENTS, 10); - test_assert(6, m == 0, "spurious event"); -} - -const struct testcase testevt3 = { - evt3_gettest, - evt3_setup, - NULL, - evt3_execute -}; -#endif /* CH_USE_EVENTS_TIMEOUT */ - -/** - * @brief Test sequence for events. - */ -const struct testcase * const patternevt[] = { -#if CH_USE_EVENTS - &testevt1, - &testevt2, -#if CH_USE_EVENTS_TIMEOUT - &testevt3, -#endif -#endif - NULL -}; - -#endif /* CH_USE_EVENTS */ diff --git a/ChibiOS_2.0.8/test/testevt.h b/ChibiOS_2.0.8/test/testevt.h deleted file mode 100644 index 05c4342..0000000 --- a/ChibiOS_2.0.8/test/testevt.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTEVT_H_ -#define _TESTEVT_H_ - -extern const struct testcase *patternevt[]; - -#endif /* _TESTEVT_H_ */ diff --git a/ChibiOS_2.0.8/test/testheap.c b/ChibiOS_2.0.8/test/testheap.c deleted file mode 100644 index d22dbe4..0000000 --- a/ChibiOS_2.0.8/test/testheap.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_heap Memory Heap test - * - * File: @ref testheap.c - * - *

      Description

      - * This module implements the test sequence for the @ref heaps subsystem. - * - *

      Objective

      - * Objective of the test module is to cover 100% of the @ref heaps subsystem. - * - *

      Preconditions

      - * The module requires the following kernel options: - * - @p CH_USE_HEAP - * . - * In case some of the required options are not enabled then some or all tests - * may be skipped. - * - *

      Test Cases

      - * - @subpage test_heap_001 - * . - * @file testheap.c - * @brief Heap test source file - * @file testheap.h - * @brief Heap header file - */ - -#if CH_USE_HEAP - -#define SIZE 16 - -static MemoryHeap test_heap; - -/** - * @page test_heap_001 Allocation and fragmentation test - * - *

      Description

      - * Series of allocations/deallocations are performed in carefully designed - * sequences in order to stimulate all the possible code paths inside the - * allocator.
      - * The test expects to find the heap back to the initial status after each - * sequence. - */ - -static char *heap1_gettest(void) { - - return "Heap, allocation and fragmentation test"; -} - -static void heap1_setup(void) { - - chHeapInit(&test_heap, test.buffer, sizeof(union test_buffers)); -} - -static void heap1_execute(void) { - void *p1, *p2, *p3; - size_t n, sz; - - /* Unrelated, for coverage only.*/ - (void)chCoreStatus(); - - /* - * Test on the default heap in order to cover the core allocator at - * least one time. - */ - (void)chHeapStatus(NULL, &sz); - p1 = chHeapAlloc(NULL, SIZE); - test_assert(1, p1 != NULL, "allocation failed"); - chHeapFree(p1); - p1 = chHeapAlloc(NULL, (size_t)-256); - test_assert(2, p1 == NULL, "allocation not failed"); - - /* Initial local heap state.*/ - (void)chHeapStatus(&test_heap, &sz); - - /* Same order.*/ - p1 = chHeapAlloc(&test_heap, SIZE); - p2 = chHeapAlloc(&test_heap, SIZE); - p3 = chHeapAlloc(&test_heap, SIZE); - chHeapFree(p1); /* Does not merge.*/ - chHeapFree(p2); /* Merges backward.*/ - chHeapFree(p3); /* Merges both sides.*/ - test_assert(3, chHeapStatus(&test_heap, &n) == 1, "heap fragmented"); - - /* Reverse order.*/ - p1 = chHeapAlloc(&test_heap, SIZE); - p2 = chHeapAlloc(&test_heap, SIZE); - p3 = chHeapAlloc(&test_heap, SIZE); - chHeapFree(p3); /* Merges forward.*/ - chHeapFree(p2); /* Merges forward.*/ - chHeapFree(p1); /* Merges forward.*/ - test_assert(4, chHeapStatus(&test_heap, &n) == 1, "heap fragmented"); - - /* Small fragments handling.*/ - p1 = chHeapAlloc(&test_heap, SIZE + 1); - p2 = chHeapAlloc(&test_heap, SIZE); - chHeapFree(p1); - test_assert(5, chHeapStatus(&test_heap, &n) == 2, "invalid state"); - p1 = chHeapAlloc(&test_heap, SIZE); - /* Note, the first situation happens when the alignment size is smaller - than the header size, the second in the other cases.*/ - test_assert(6, (chHeapStatus(&test_heap, &n) == 1) || - (chHeapStatus(&test_heap, &n) == 2), "heap fragmented"); - chHeapFree(p2); - chHeapFree(p1); - test_assert(7, chHeapStatus(&test_heap, &n) == 1, "heap fragmented"); - - /* Skip fragment handling.*/ - p1 = chHeapAlloc(&test_heap, SIZE); - p2 = chHeapAlloc(&test_heap, SIZE); - chHeapFree(p1); - test_assert(8, chHeapStatus(&test_heap, &n) == 2, "invalid state"); - p1 = chHeapAlloc(&test_heap, SIZE * 2); /* Skips first fragment.*/ - chHeapFree(p1); - chHeapFree(p2); - test_assert(9, chHeapStatus(&test_heap, &n) == 1, "heap fragmented"); - - /* Allocate all handling.*/ - (void)chHeapStatus(&test_heap, &n); - p1 = chHeapAlloc(&test_heap, n); - test_assert(10, chHeapStatus(&test_heap, &n) == 0, "not empty"); - chHeapFree(p1); - - test_assert(11, chHeapStatus(&test_heap, &n) == 1, "heap fragmented"); - test_assert(12, n == sz, "size changed"); -} - -const struct testcase testheap1 = { - heap1_gettest, - heap1_setup, - NULL, - heap1_execute -}; - -#endif /* CH_USE_HEAP.*/ - -/** - * @brief Test sequence for heap. - */ -const struct testcase * const patternheap[] = { -#if CH_USE_HEAP - &testheap1, -#endif - NULL -}; diff --git a/ChibiOS_2.0.8/test/testheap.h b/ChibiOS_2.0.8/test/testheap.h deleted file mode 100644 index 2f53f39..0000000 --- a/ChibiOS_2.0.8/test/testheap.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTHEAP_H_ -#define _TESTHEAP_H_ - -extern const struct testcase *patternheap[]; - -#endif /* _TESTHEAP_H_ */ diff --git a/ChibiOS_2.0.8/test/testmbox.c b/ChibiOS_2.0.8/test/testmbox.c deleted file mode 100644 index 113356e..0000000 --- a/ChibiOS_2.0.8/test/testmbox.c +++ /dev/null @@ -1,187 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_mbox Mailboxes test - * - * File: @ref testmbox.c - * - *

      Description

      - * This module implements the test sequence for the @ref mailboxes subsystem. - * - *

      Objective

      - * Objective of the test module is to cover 100% of the @ref mailboxes - * subsystem code.
      - * Note that the @ref mailboxes subsystem depends on the @ref semaphores - * subsystem that has to met its testing objectives as well. - * - *

      Preconditions

      - * The module requires the following kernel options: - * - @p CH_USE_MAILBOXES - * . - * In case some of the required options are not enabled then some or all tests - * may be skipped. - * - *

      Test Cases

      - * - @subpage test_mbox_001 - * . - * @file testmbox.c - * @brief Mailboxes test source file - * @file testmbox.h - * @brief Mailboxes header file - */ - -#if CH_USE_MAILBOXES - -#define ALLOWED_DELAY MS2ST(5) -#define MB_SIZE 5 - -/* - * Note, the static initializers are not really required because the - * variables are explicitly initialized in each test case. It is done in order - * to test the macros. - */ -static MAILBOX_DECL(mb1, test.wa.T0, MB_SIZE); - -/** - * @page test_mbox_001 Queuing and timeouts - * - *

      Description

      - * Messages are posted/fetched from a mailbox in carefully designed sequences - * in order to stimulate all the possible code paths inside the mailbox.
      - * The test expects to find a consistent mailbox status after each operation. - */ - -static char *mbox1_gettest(void) { - - return "Mailboxes, queuing and timeouts"; -} - -static void mbox1_setup(void) { - - chMBInit(&mb1, (msg_t *)test.wa.T0, MB_SIZE); -} - -static void mbox1_execute(void) { - msg_t msg1, msg2; - unsigned i; - - /* - * Testing initial space. - */ - test_assert(1, chMBGetEmpty(&mb1) == MB_SIZE, "wrong size"); - - /* - * Testing enqueuing and backward circularity. - */ - for (i = 0; i < MB_SIZE - 1; i++) { - msg1 = chMBPost(&mb1, 'B' + i, TIME_INFINITE); - test_assert(2, msg1 == RDY_OK, "wrong wake-up message"); - } - msg1 = chMBPostAhead(&mb1, 'A', TIME_INFINITE); - test_assert(3, msg1 == RDY_OK, "wrong wake-up message"); - - /* - * Testing post timeout. - */ - msg1 = chMBPost(&mb1, 'X', 1); - test_assert(4, msg1 == RDY_TIMEOUT, "wrong wake-up message"); - - /* - * Testing final conditions. - */ - test_assert(5, chMBGetEmpty(&mb1) == 0, "still empty"); - test_assert(6, chMBGetFull(&mb1) == MB_SIZE, "not full"); - test_assert(7, mb1.mb_rdptr == mb1.mb_wrptr, "pointers not aligned"); - - /* - * Testing dequeuing. - */ - for (i = 0; i < MB_SIZE; i++) { - msg1 = chMBFetch(&mb1, &msg2, TIME_INFINITE); - test_assert(8, msg1 == RDY_OK, "wrong wake-up message"); - test_emit_token(msg2); - } - test_assert_sequence(9, "ABCDE"); - - /* - * Testing buffer circularity. - */ - msg1 = chMBPost(&mb1, 'B' + i, TIME_INFINITE); - test_assert(10, msg1 == RDY_OK, "wrong wake-up message"); - msg1 = chMBFetch(&mb1, &msg2, TIME_INFINITE); - test_assert(11, msg1 == RDY_OK, "wrong wake-up message"); - test_assert(12, mb1.mb_buffer == mb1.mb_wrptr, "write pointer not aligned to base"); - test_assert(13, mb1.mb_buffer == mb1.mb_rdptr, "read pointer not aligned to base"); - - /* - * Testing fetch timeout. - */ - msg1 = chMBFetch(&mb1, &msg2, 1); - test_assert(14, msg1 == RDY_TIMEOUT, "wrong wake-up message"); - - /* - * Testing final conditions. - */ - test_assert(15, chMBGetEmpty(&mb1) == MB_SIZE, "not empty"); - test_assert(16, chMBGetFull(&mb1) == 0, "still full"); - test_assert(17, mb1.mb_rdptr == mb1.mb_wrptr, "pointers not aligned"); - - /* - * Testing reset. - */ - chMBReset(&mb1); - - /* - * Re-testing final conditions. - */ - test_assert(18, chMBGetEmpty(&mb1) == MB_SIZE, "not empty"); - test_assert(19, chMBGetFull(&mb1) == 0, "still full"); - test_assert(20, mb1.mb_buffer == mb1.mb_wrptr, "write pointer not aligned to base"); - test_assert(21, mb1.mb_buffer == mb1.mb_rdptr, "read pointer not aligned to base"); -} - -const struct testcase testmbox1 = { - mbox1_gettest, - mbox1_setup, - NULL, - mbox1_execute -}; - -#endif /* CH_USE_MAILBOXES */ - -/** - * @brief Test sequence for mailboxes. - */ -const struct testcase * const patternmbox[] = { -#if CH_USE_MAILBOXES - &testmbox1, -#endif - NULL -}; diff --git a/ChibiOS_2.0.8/test/testmbox.h b/ChibiOS_2.0.8/test/testmbox.h deleted file mode 100644 index 2155166..0000000 --- a/ChibiOS_2.0.8/test/testmbox.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTMBOX_H_ -#define _TESTMBOX_H_ - -extern const struct testcase *patternmbox[]; - -#endif /* _TESTMBOX_H_ */ diff --git a/ChibiOS_2.0.8/test/testmsg.c b/ChibiOS_2.0.8/test/testmsg.c deleted file mode 100644 index ea1ca9e..0000000 --- a/ChibiOS_2.0.8/test/testmsg.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_msg Messages test - * - * File: @ref testmsg.c - * - *

      Description

      - * This module implements the test sequence for the @ref messages subsystem. - * - *

      Objective

      - * Objective of the test module is to cover 100% of the @ref messages - * subsystem code. - * - *

      Preconditions

      - * The module requires the following kernel options: - * - @p CH_USE_MESSAGES - * . - * In case some of the required options are not enabled then some or all tests - * may be skipped. - * - *

      Test Cases

      - * - @subpage test_msg_001 - * . - * @file testmsg.c - * @brief Messages test source file - * @file testmsg.h - * @brief Messages header file - */ - -#if CH_USE_MESSAGES - -/** - * @page test_msg_001 Messages Server loop - * - *

      Description

      - * A thread is spawned that sends four messages back to the tester thread.
      - * The test expect to receive the messages in the correct sequence and to - * not find a fifth message waiting. - */ - -static char *msg1_gettest(void) { - - return "Messages, loop"; -} - -static msg_t thread(void *p) { - - chMsgSend(p, 'A'); - chMsgSend(p, 'B'); - chMsgSend(p, 'C'); - chMsgSend(p, 'D'); - return 0; -} - -static void msg1_execute(void) { - msg_t msg; - - /* - * Testing the whole messages loop. - */ - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority() + 1, - thread, chThdSelf()); - chMsgRelease(msg = chMsgWait()); - test_emit_token(msg); - chMsgRelease(msg = chMsgWait()); - test_emit_token(msg); - chMsgRelease(msg = chMsgWait()); - test_emit_token(msg); - test_assert_sequence(1, "ABC"); - - /* - * Testing message fetch using chMsgGet(). - * Note, the following is valid because the sender has higher priority than - * the receiver. - */ - msg = chMsgGet(); - test_assert(1, msg != 0, "no message"); - chMsgRelease(0); - test_assert(2, msg == 'D', "wrong message"); - - /* - * Must not have pending messages. - */ - msg = chMsgGet(); - test_assert(3, msg == 0, "unknown message"); -} - -const struct testcase testmsg1 = { - msg1_gettest, - NULL, - NULL, - msg1_execute -}; - -#endif /* CH_USE_MESSAGES */ - -/** - * @brief Test sequence for messages. - */ -const struct testcase * const patternmsg[] = { -#if CH_USE_MESSAGES - &testmsg1, -#endif - NULL -}; diff --git a/ChibiOS_2.0.8/test/testmsg.h b/ChibiOS_2.0.8/test/testmsg.h deleted file mode 100644 index f2e77a7..0000000 --- a/ChibiOS_2.0.8/test/testmsg.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTMSG_H_ -#define _TESTMSG_H_ - -extern const struct testcase *patternmsg[]; - -#endif /* _TESTMSG_H_ */ diff --git a/ChibiOS_2.0.8/test/testmtx.c b/ChibiOS_2.0.8/test/testmtx.c deleted file mode 100644 index 5b26455..0000000 --- a/ChibiOS_2.0.8/test/testmtx.c +++ /dev/null @@ -1,674 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_mtx Mutexes test - * - * File: @ref testmtx.c - * - *

      Description

      - * This module implements the test sequence for the @ref mutexes and - * @ref condvars subsystems.
      - * Tests on those subsystems are particularly critical because the system-wide - * implications of the Priority Inheritance mechanism. - * - *

      Objective

      - * Objective of the test module is to cover 100% of the subsystems code. - * - *

      Preconditions

      - * The module requires the following kernel options: - * - @p CH_USE_MUTEXES - * - @p CH_USE_CONDVARS - * - @p CH_DBG_THREADS_PROFILING - * . - * In case some of the required options are not enabled then some or all tests - * may be skipped. - * - *

      Test Cases

      - * - @subpage test_mtx_001 - * - @subpage test_mtx_002 - * - @subpage test_mtx_003 - * - @subpage test_mtx_004 - * - @subpage test_mtx_005 - * - @subpage test_mtx_006 - * - @subpage test_mtx_007 - * - @subpage test_mtx_008 - * . - * @file testmtx.c - * @brief Mutexes and CondVars test source file - * @file testmtx.h - * @brief Mutexes and CondVars test header file - */ - -#if CH_USE_MUTEXES - -#define ALLOWED_DELAY 5 - -/* - * Note, the static initializers are not really required because the - * variables are explicitly initialized in each test case. It is done in order - * to test the macros. - */ -static MUTEX_DECL(m1); -static MUTEX_DECL(m2); -#if CH_USE_CONDVARS -static CONDVAR_DECL(c1); -#endif - -/** - * @page test_mtx_001 Priority enqueuing test - * - *

      Description

      - * Five threads, with increasing priority, are enqueued on a locked mutex then - * the mutex is unlocked.
      - * The test expects the threads to perform their operations in increasing - * priority order regardless of the initial order. - */ -static char *mtx1_gettest(void) { - - return "Mutexes, priority enqueuing test"; -} - -static void mtx1_setup(void) { - - chMtxInit(&m1); -} - -static msg_t thread1(void *p) { - - chMtxLock(&m1); - test_emit_token(*(char *)p); - chMtxUnlock(); - return 0; -} - -static void mtx1_execute(void) { - - tprio_t prio = chThdGetPriority(); // Because priority inheritance. - chMtxLock(&m1); - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, prio+1, thread1, "E"); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, prio+2, thread1, "D"); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, prio+3, thread1, "C"); - threads[3] = chThdCreateStatic(wa[3], WA_SIZE, prio+4, thread1, "B"); - threads[4] = chThdCreateStatic(wa[4], WA_SIZE, prio+5, thread1, "A"); - chMtxUnlock(); - test_wait_threads(); - test_assert(1, prio == chThdGetPriority(), "wrong priority level"); - test_assert_sequence(2, "ABCDE"); -} - -const struct testcase testmtx1 = { - mtx1_gettest, - mtx1_setup, - NULL, - mtx1_execute -}; - -#if CH_DBG_THREADS_PROFILING -/** - * @page test_mtx_002 Priority inheritance, simple case - * - *

      Description

      - * Three threads are involved in the classic priority inversion scenario, a - * medium priority thread tries to starve an high priority thread by - * blocking a low priority thread into a mutex lock zone.
      - * The test expects the threads to reach their goal in increasing priority - * order by rearranging their priorities in order to avoid the priority - * inversion trap. - * - *

      Scenario

      - * This weird looking diagram should explain what happens in the test case: - * @code - * Time ----> 0 10 20 30 40 50 60 70 80 90 100 - * 0 ......AL++++++++++............2+++++++++++AU0---------------++++++G... - * 1 ..................++++++++++++------------------++++++++++++G......... - * 2 .............................AL..........++++++AUG................... - * ^ ^ - * Legend: - * 0..2 - Priority levels - * +++ - Running - * --- - Ready - * ... - Waiting or Terminated - * xL - Lock operation on mutex 'x' - * xUn - Unlock operation on mutex 'x' with priority returning to level 'n' - * G - Goal - * ^ - Priority transition (boost or return). - * @endcode - */ - -static char *mtx2_gettest(void) { - - return "Mutexes, priority inheritance, simple case"; -} - -static void mtx2_setup(void) { - - chMtxInit(&m1); -} - -/* Low priority thread */ -static msg_t thread2L(void *p) { - - (void)p; - chMtxLock(&m1); - test_cpu_pulse(40); - chMtxUnlock(); - test_cpu_pulse(10); - test_emit_token('C'); - return 0; -} - -/* Medium priority thread */ -static msg_t thread2M(void *p) { - - (void)p; - chThdSleepMilliseconds(20); - test_cpu_pulse(40); - test_emit_token('B'); - return 0; -} - -/* High priority thread */ -static msg_t thread2H(void *p) { - - (void)p; - chThdSleepMilliseconds(40); - chMtxLock(&m1); - test_cpu_pulse(10); - chMtxUnlock(); - test_emit_token('A'); - return 0; -} - -static void mtx2_execute(void) { - systime_t time; - - test_wait_tick(); - time = chTimeNow(); - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()-1, thread2H, 0); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, chThdGetPriority()-2, thread2M, 0); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, chThdGetPriority()-3, thread2L, 0); - test_wait_threads(); - test_assert_sequence(1, "ABC"); - test_assert_time_window(2, time + MS2ST(100), time + MS2ST(100) + ALLOWED_DELAY); -} - -const struct testcase testmtx2 = { - mtx2_gettest, - mtx2_setup, - NULL, - mtx2_execute -}; - -/** - * @page test_mtx_003 Priority inheritance, complex case - * - *

      Description

      - * Five threads are involved in the complex priority inversion scenario, - * please refer to the diagram below for the complete scenario.
      - * The test expects the threads to perform their operations in increasing - * priority order by rearranging their priorities in order to avoid the - * priority inversion trap. - * - *

      Scenario

      - * This weird looking diagram should explain what happens in the test case: - * @code - * Time ----> 0 10 20 30 40 50 60 70 80 90 100 110 - * 0 ......BL++++------------2+++++------4+++++BU0---------------------------G..... - * 1 ............AL++++2+++++BL----------4-----++++++BU4+++AU1---------------G..... - * 2 ..................AL----------------------------------------------++++++AUG... - * 3 ..............................+++++++-----------------------++++++G........... - * 4 ....................................AL................++++++AUG............... - * ^ ^ ^ ^ ^ ^ - * Legend: - * 0..4 - Priority levels - * +++ - Running - * --- - Ready - * ... - Waiting or Terminated - * xL - Lock operation on mutex 'x' - * xUn - Unlock operation on mutex 'x' with priority returning to level 'n' - * ^ - Priority transition (boost or return). - * @endcode - */ -static char *mtx3_gettest(void) { - - return "Mutexes, priority inheritance, complex case"; -} - -static void mtx3_setup(void) { - - chMtxInit(&m1); // Mutex B - chMtxInit(&m2); // Mutex A -} - -/* Lowest priority thread */ -static msg_t thread3LL(void *p) { - - (void)p; - chMtxLock(&m1); - test_cpu_pulse(30); - chMtxUnlock(); - test_emit_token('E'); - return 0; -} - -/* Low priority thread */ -static msg_t thread3L(void *p) { - - (void)p; - chThdSleepMilliseconds(10); - chMtxLock(&m2); - test_cpu_pulse(20); - chMtxLock(&m1); - test_cpu_pulse(10); - chMtxUnlock(); - test_cpu_pulse(10); - chMtxUnlock(); - test_emit_token('D'); - return 0; -} - -/* Medium priority thread */ -static msg_t thread3M(void *p) { - - (void)p; - chThdSleepMilliseconds(20); - chMtxLock(&m2); - test_cpu_pulse(10); - chMtxUnlock(); - test_emit_token('C'); - return 0; -} - -/* High priority thread */ -static msg_t thread3H(void *p) { - - (void)p; - chThdSleepMilliseconds(40); - test_cpu_pulse(20); - test_emit_token('B'); - return 0; -} - -/* Highest priority thread */ -static msg_t thread3HH(void *p) { - - (void)p; - chThdSleepMilliseconds(50); - chMtxLock(&m2); - test_cpu_pulse(10); - chMtxUnlock(); - test_emit_token('A'); - return 0; -} - -static void mtx3_execute(void) { - systime_t time; - - test_wait_tick(); - time = chTimeNow(); - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()-5, thread3LL, 0); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, chThdGetPriority()-4, thread3L, 0); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, chThdGetPriority()-3, thread3M, 0); - threads[3] = chThdCreateStatic(wa[3], WA_SIZE, chThdGetPriority()-2, thread3H, 0); - threads[4] = chThdCreateStatic(wa[4], WA_SIZE, chThdGetPriority()-1, thread3HH, 0); - test_wait_threads(); - test_assert_sequence(1, "ABCDE"); - test_assert_time_window(2, time + MS2ST(110), time + MS2ST(110) + ALLOWED_DELAY); -} - -const struct testcase testmtx3 = { - mtx3_gettest, - mtx3_setup, - NULL, - mtx3_execute -}; -#endif /* CH_DBG_THREADS_PROFILING */ - -/** - * @page test_mtx_004 Priority return verification - * - *

      Description

      - * Two threads are spawned that try to lock the mutexes locked by the tester - * thread with precise timing.
      - * The test expects that the priority changes caused by the priority - * inheritance algorithm happen at the right moment and with the right values. - */ -static char *mtx4_gettest(void) { - - return "Mutexes, priority return"; -} - -static void mtx4_setup(void) { - - chMtxInit(&m1); - chMtxInit(&m2); -} - -static msg_t thread4a(void *p) { - - (void)p; - chThdSleepMilliseconds(50); - chMtxLock(&m2); - chMtxUnlock(); - return 0; -} - -static msg_t thread4b(void *p) { - - (void)p; - chThdSleepMilliseconds(150); - chMtxLock(&m1); - chMtxUnlock(); - return 0; -} - -static void mtx4_execute(void) { - tprio_t p, p1, p2; - - p = chThdGetPriority(); - p1 = p + 1; - p2 = p + 2; - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, p1, thread4a, "B"); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, p2, thread4b, "A"); - chMtxLock(&m2); - test_assert(1, chThdGetPriority() == p, "wrong priority level"); - chThdSleepMilliseconds(100); - test_assert(2, chThdGetPriority() == p1, "wrong priority level"); - chMtxLock(&m1); - test_assert(3, chThdGetPriority() == p1, "wrong priority level"); - chThdSleepMilliseconds(100); - test_assert(4, chThdGetPriority() == p2, "wrong priority level"); - chMtxUnlock(); - test_assert(5, chThdGetPriority() == p1, "wrong priority level"); - chThdSleepMilliseconds(100); - test_assert(6, chThdGetPriority() == p1, "wrong priority level"); - chMtxUnlockAll(); - test_assert(7, chThdGetPriority() == p, "wrong priority level"); - test_wait_threads(); - - /* Test repeated in order to cover chMtxUnlockS().*/ - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, p1, thread4a, "D"); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, p2, thread4b, "C"); - chMtxLock(&m2); - test_assert(8, chThdGetPriority() == p, "wrong priority level"); - chThdSleepMilliseconds(100); - test_assert(9, chThdGetPriority() == p1, "wrong priority level"); - chMtxLock(&m1); - test_assert(10, chThdGetPriority() == p1, "wrong priority level"); - chThdSleepMilliseconds(100); - test_assert(11, chThdGetPriority() == p2, "wrong priority level"); - chSysLock(); - chMtxUnlockS(); - chSysUnlock(); - test_assert(12, chThdGetPriority() == p1, "wrong priority level"); - chThdSleepMilliseconds(100); - test_assert(13, chThdGetPriority() == p1, "wrong priority level"); - chMtxUnlockAll(); - test_assert(14, chThdGetPriority() == p, "wrong priority level"); - test_wait_threads(); -} - -const struct testcase testmtx4 = { - mtx4_gettest, - mtx4_setup, - NULL, - mtx4_execute -}; - -/** - * @page test_mtx_005 Mutex status - * - *

      Description

      - * Various tests on the mutex structure status after performing some lock and - * unlock operations.
      - * The test expects that the internal mutex status is consistent after each - * operation. - */ -static char *mtx5_gettest(void) { - - return "Mutexes, status"; -} - -static void mtx5_setup(void) { - - chMtxInit(&m1); -} - -static void mtx5_execute(void) { - bool_t b; - tprio_t prio; - - prio = chThdGetPriority(); - - b = chMtxTryLock(&m1); - test_assert(1, b, "already locked"); - - b = chMtxTryLock(&m1); - test_assert(2, !b, "not locked"); - - chSysLock(); - chMtxUnlockS(); - chSysUnlock(); - - test_assert(3, isempty(&m1.m_queue), "queue not empty"); - test_assert(4, m1.m_owner == NULL, "still owned"); - test_assert(5, chThdGetPriority() == prio, "wrong priority level"); -} - -const struct testcase testmtx5 = { - mtx5_gettest, - mtx5_setup, - NULL, - mtx5_execute -}; - -#if CH_USE_CONDVARS -/** - * @page test_mtx_006 Condition Variable signal test - * - *

      Description

      - * Five threads take a mutex and then enter a conditional variable queue, the - * tester thread then proceeds to signal the conditional variable five times - * atomically.
      - * The test expects the threads to reach their goal in increasing priority - * order regardless of the initial order. - */ -static char *mtx6_gettest(void) { - - return "CondVar, signal test"; -} - -static void mtx6_setup(void) { - - chCondInit(&c1); - chMtxInit(&m1); -} - -static msg_t thread10(void *p) { - - chMtxLock(&m1); - chCondWait(&c1); - test_emit_token(*(char *)p); - chMtxUnlock(); - return 0; -} - -static void mtx6_execute(void) { - - tprio_t prio = chThdGetPriority(); - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, prio+1, thread10, "E"); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, prio+2, thread10, "D"); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, prio+3, thread10, "C"); - threads[3] = chThdCreateStatic(wa[3], WA_SIZE, prio+4, thread10, "B"); - threads[4] = chThdCreateStatic(wa[4], WA_SIZE, prio+5, thread10, "A"); - chSysLock(); - chCondSignalI(&c1); - chCondSignalI(&c1); - chCondSignalI(&c1); - chCondSignalI(&c1); - chCondSignalI(&c1); - chSchRescheduleS(); - chSysUnlock(); - test_wait_threads(); - test_assert_sequence(1, "ABCDE"); -} - -const struct testcase testmtx6 = { - mtx6_gettest, - mtx6_setup, - NULL, - mtx6_execute -}; - -/** - * @page test_mtx_007 Condition Variable broadcast test - * - *

      Description

      - * Five threads take a mutex and then enter a conditional variable queue, the - * tester thread then proceeds to broadcast the conditional variable.
      - * The test expects the threads to reach their goal in increasing priority - * order regardless of the initial order. - */ -static char *mtx7_gettest(void) { - - return "CondVar, broadcast test"; -} - -static void mtx7_setup(void) { - - chCondInit(&c1); - chMtxInit(&m1); -} - -static void mtx7_execute(void) { - - // Bacause priority inheritance. - tprio_t prio = chThdGetPriority(); - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, prio+1, thread10, "E"); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, prio+2, thread10, "D"); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, prio+3, thread10, "C"); - threads[3] = chThdCreateStatic(wa[3], WA_SIZE, prio+4, thread10, "B"); - threads[4] = chThdCreateStatic(wa[4], WA_SIZE, prio+5, thread10, "A"); - chCondBroadcast(&c1); - test_wait_threads(); - test_assert_sequence(1, "ABCDE"); -} - -const struct testcase testmtx7 = { - mtx7_gettest, - mtx7_setup, - NULL, - mtx7_execute -}; - -/** - * @page test_mtx_008 Condition Variable priority boost test - * - *

      Description

      - * This test case verifies the priority boost of a thread waiting on a - * conditional variable queue. It tests this very specific situation in order - * to complete the code coverage. - */ -static char *mtx8_gettest(void) { - - return "CondVar, boost test"; -} - -static void mtx8_setup(void) { - - chCondInit(&c1); - chMtxInit(&m1); - chMtxInit(&m2); -} - -static msg_t thread11(void *p) { - - chMtxLock(&m2); - chMtxLock(&m1); -#if CH_USE_CONDVARS_TIMEOUT - chCondWaitTimeout(&c1, TIME_INFINITE); -#else - chCondWait(&c1); -#endif - test_emit_token(*(char *)p); - chMtxUnlock(); - chMtxUnlock(); - return 0; -} - -static msg_t thread12(void *p) { - - chMtxLock(&m2); - test_emit_token(*(char *)p); - chMtxUnlock(); - return 0; -} - -static void mtx8_execute(void) { - - tprio_t prio = chThdGetPriority(); - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, prio+1, thread11, "A"); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, prio+2, thread10, "C"); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, prio+3, thread12, "B"); - chCondSignal(&c1); - chCondSignal(&c1); - test_wait_threads(); - test_assert_sequence(1, "ABC"); -} - -const struct testcase testmtx8 = { - mtx8_gettest, - mtx8_setup, - NULL, - mtx8_execute -}; -#endif /* CH_USE_CONDVARS */ -#endif /* CH_USE_MUTEXES */ - -/** - * @brief Test sequence for mutexes. - */ -const struct testcase * const patternmtx[] = { -#if CH_USE_MUTEXES - &testmtx1, -#if CH_DBG_THREADS_PROFILING - &testmtx2, - &testmtx3, -#endif - &testmtx4, - &testmtx5, -#if CH_USE_CONDVARS - &testmtx6, - &testmtx7, - &testmtx8, -#endif -#endif - NULL -}; diff --git a/ChibiOS_2.0.8/test/testmtx.h b/ChibiOS_2.0.8/test/testmtx.h deleted file mode 100644 index c68a985..0000000 --- a/ChibiOS_2.0.8/test/testmtx.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTMTX_H_ -#define _TESTMTX_H_ - -extern const struct testcase *patternmtx[]; - -#endif /* _TESTMTX_H_ */ diff --git a/ChibiOS_2.0.8/test/testpools.c b/ChibiOS_2.0.8/test/testpools.c deleted file mode 100644 index 14bfca6..0000000 --- a/ChibiOS_2.0.8/test/testpools.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_pools Memory Pools test - * - * File: @ref testpools.c - * - *

      Description

      - * This module implements the test sequence for the @ref pools subsystem. - * - *

      Objective

      - * Objective of the test module is to cover 100% of the @ref pools code. - * - *

      Preconditions

      - * The module requires the following kernel options: - * - @p CH_USE_MEMPOOLS - * . - * In case some of the required options are not enabled then some or all tests - * may be skipped. - * - *

      Test Cases

      - * - @subpage test_pools_001 - * . - * @file testpools.c - * @brief Memory Pools test source file - * @file testpools.h - * @brief Memory Pools test header file - */ - -#if CH_USE_MEMPOOLS - -static MEMORYPOOL_DECL(mp1, THD_WA_SIZE(THREADS_STACK_SIZE), NULL); - -/** - * @page test_pools_001 Allocation and enqueuing test - * - *

      Description

      - * Five memory blocks are added to a memory pool then removed.
      - * The test expects to find the pool queue in the proper status after each - * operation. - */ - -static void *null_provider(size_t size) { - - (void)size; - return NULL; -} - -static char *pools1_gettest(void) { - - return "Memory Pools, queue/dequeue"; -} - -static void pools1_setup(void) { - - chPoolInit(&mp1, THD_WA_SIZE(THREADS_STACK_SIZE), NULL); -} - -static void pools1_execute(void) { - int i; - - /* Adding the WAs to the pool. */ - for (i = 0; i < MAX_THREADS; i++) - chPoolFree(&mp1, wa[i]); - - /* Empting the pool again. */ - for (i = 0; i < MAX_THREADS; i++) - test_assert(1, chPoolAlloc(&mp1) != NULL, "list empty"); - - /* Now must be empty. */ - test_assert(2, chPoolAlloc(&mp1) == NULL, "list not empty"); - - /* Covering the case where a provider is unable to return more memory.*/ - chPoolInit(&mp1, 16, null_provider); - test_assert(3, chPoolAlloc(&mp1) == NULL, "provider returned memory"); -} - -const struct testcase testpools1 = { - pools1_gettest, - pools1_setup, - NULL, - pools1_execute -}; - -#endif /* CH_USE_MEMPOOLS */ - -/* - * @brief Test sequence for pools. - */ -const struct testcase * const patternpools[] = { -#if CH_USE_MEMPOOLS - &testpools1, -#endif - NULL -}; diff --git a/ChibiOS_2.0.8/test/testpools.h b/ChibiOS_2.0.8/test/testpools.h deleted file mode 100644 index 616ed3a..0000000 --- a/ChibiOS_2.0.8/test/testpools.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTPOOLS_H_ -#define _TESTPOOLS_H_ - -extern const struct testcase *patternpools[]; - -#endif /* _TESTPOOLS_H_ */ diff --git a/ChibiOS_2.0.8/test/testqueues.c b/ChibiOS_2.0.8/test/testqueues.c deleted file mode 100644 index 803c74d..0000000 --- a/ChibiOS_2.0.8/test/testqueues.c +++ /dev/null @@ -1,225 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_queues I/O Queues test - * - * File: @ref testqueues.c - * - *

      Description

      - * This module implements the test sequence for the @ref io_queues subsystem. - * The tests are performed by inserting and removing data from queues and by - * checking both the queues status and the correct sequence of the extracted - * data. - * - *

      Objective

      - * Objective of the test module is to cover 100% of the @ref io_queues code.
      - * Note that the @ref io_queues subsystem depends on the @ref semaphores - * subsystem that has to met its testing objectives as well. - * - *

      Preconditions

      - * The module requires the following kernel options: - * - @p CH_USE_QUEUES (and dependent options) - * . - * In case some of the required options are not enabled then some or all tests - * may be skipped. - * - *

      Test Cases

      - * - @subpage test_queues_001 - * - @subpage test_queues_002 - * . - * @file testqueues.c - * @brief I/O Queues test source file - * @file testqueues.h - * @brief I/O Queues test header file - */ - -#if CH_USE_QUEUES - -#define TEST_QUEUES_SIZE 4 - -static void notify(void) {} - -/* - * Note, the static initializers are not really required because the - * variables are explicitly initialized in each test case. It is done in order - * to test the macros. - */ -static INPUTQUEUE_DECL(iq, test.wa.T0, TEST_QUEUES_SIZE, notify); -static OUTPUTQUEUE_DECL(oq, test.wa.T1, TEST_QUEUES_SIZE, notify); - -/** - * @page test_queues_001 Input Queues functionality and APIs - * - *

      Description

      - * This test case tests sysnchronos and asynchronous operations on an - * @p InputQueue object including timeouts. The queue state must remain - * consistent through the whole test. - */ - -static char *queues1_gettest(void) { - - return "Queues, input queues"; -} - -static void queues1_setup(void) { - - chIQInit(&iq, wa[0], TEST_QUEUES_SIZE, notify); -} - -static void queues1_execute(void) { - unsigned i; - size_t n; - - /* Initial empty state */ - test_assert(1, chIQIsEmpty(&iq), "not empty"); - - /* Queue filling */ - for (i = 0; i < TEST_QUEUES_SIZE; i++) - chIQPutI(&iq, 'A' + i); - test_assert(2, chIQIsFull(&iq), "still has space"); - test_assert(3, chIQPutI(&iq, 0) == Q_FULL, "failed to report Q_FULL"); - - /* Queue emptying */ - for (i = 0; i < TEST_QUEUES_SIZE; i++) - test_emit_token(chIQGet(&iq)); - test_assert(4, chIQIsEmpty(&iq), "still full"); - test_assert_sequence(5, "ABCD"); - - /* Queue filling again */ - for (i = 0; i < TEST_QUEUES_SIZE; i++) - chIQPutI(&iq, 'A' + i); - - /* Reading the whole thing */ - n = chIQReadTimeout(&iq, wa[1], TEST_QUEUES_SIZE * 2, TIME_IMMEDIATE); - test_assert(6, n == TEST_QUEUES_SIZE, "wrong returned size"); - test_assert(7, chIQIsEmpty(&iq), "still full"); - - /* Queue filling again */ - for (i = 0; i < TEST_QUEUES_SIZE; i++) - chIQPutI(&iq, 'A' + i); - - /* Partial reads */ - n = chIQReadTimeout(&iq, wa[1], TEST_QUEUES_SIZE / 2, TIME_IMMEDIATE); - test_assert(8, n == TEST_QUEUES_SIZE / 2, "wrong returned size"); - n = chIQReadTimeout(&iq, wa[1], TEST_QUEUES_SIZE / 2, TIME_IMMEDIATE); - test_assert(9, n == TEST_QUEUES_SIZE / 2, "wrong returned size"); - test_assert(10, chIQIsEmpty(&iq), "still full"); - - /* Testing reset */ - chIQPutI(&iq, 0); - chIQResetI(&iq); - test_assert(11, chIQIsEmpty(&iq), "still full"); - - /* Timeout */ - test_assert(12, chIQGetTimeout(&iq, 10) == Q_TIMEOUT, "wrong timeout return"); -} - -const struct testcase testqueues1 = { - queues1_gettest, - queues1_setup, - NULL, - queues1_execute -}; - -/** - * @page test_queues_002 Output Queues functionality and APIs - * - *

      Description

      - * This test case tests sysnchronos and asynchronous operations on an - * @p OutputQueue object including timeouts. The queue state must remain - * consistent through the whole test. - */ -static char *queues2_gettest(void) { - - return "Queues, output queues"; -} - -static void queues2_setup(void) { - - chOQInit(&oq, wa[0], TEST_QUEUES_SIZE, notify); -} - -static void queues2_execute(void) { - unsigned i; - size_t n; - - /* Initial empty state */ - test_assert(1, chOQIsEmpty(&oq), "not empty"); - - /* Queue filling */ - for (i = 0; i < TEST_QUEUES_SIZE; i++) - chOQPut(&oq, 'A' + i); - test_assert(2, chOQIsFull(&oq), "still has space"); - - /* Queue emptying */ - for (i = 0; i < TEST_QUEUES_SIZE; i++) - test_emit_token(chOQGetI(&oq)); - test_assert(3, chOQIsEmpty(&oq), "still full"); - test_assert_sequence(4, "ABCD"); - test_assert(5, chOQGetI(&oq) == Q_EMPTY, "failed to report Q_EMPTY"); - - /* Writing the whole thing */ - n = chOQWriteTimeout(&oq, wa[1], TEST_QUEUES_SIZE * 2, TIME_IMMEDIATE); - test_assert(6, n == TEST_QUEUES_SIZE, "wrong returned size"); - test_assert(7, chOQIsFull(&oq), "not full"); - - /* Testing reset */ - chOQResetI(&oq); - test_assert(8, chOQIsEmpty(&oq), "still full"); - - /* Partial writes */ - n = chOQWriteTimeout(&oq, wa[1], TEST_QUEUES_SIZE / 2, TIME_IMMEDIATE); - test_assert(9, n == TEST_QUEUES_SIZE / 2, "wrong returned size"); - n = chOQWriteTimeout(&oq, wa[1], TEST_QUEUES_SIZE / 2, TIME_IMMEDIATE); - test_assert(10, n == TEST_QUEUES_SIZE / 2, "wrong returned size"); - test_assert(11, chOQIsFull(&oq), "not full"); - - /* Timeout */ - test_assert(12, chOQPutTimeout(&oq, 0, 10) == Q_TIMEOUT, "wrong timeout return"); -} - -const struct testcase testqueues2 = { - queues2_gettest, - queues2_setup, - NULL, - queues2_execute -}; -#endif /* CH_USE_QUEUES */ - -/** - * @brief Test sequence for queues. - */ -const struct testcase * const patternqueues[] = { -#if CH_USE_QUEUES - &testqueues1, - &testqueues2, -#endif - NULL -}; diff --git a/ChibiOS_2.0.8/test/testqueues.h b/ChibiOS_2.0.8/test/testqueues.h deleted file mode 100644 index f5ad2ca..0000000 --- a/ChibiOS_2.0.8/test/testqueues.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTQUEUES_H_ -#define _TESTQUEUES_H_ - -extern const struct testcase *patternqueues[]; - -#endif /* _TESTQUEUES_H_ */ diff --git a/ChibiOS_2.0.8/test/testsem.c b/ChibiOS_2.0.8/test/testsem.c deleted file mode 100644 index 619ed56..0000000 --- a/ChibiOS_2.0.8/test/testsem.c +++ /dev/null @@ -1,266 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_sem Semaphores test - * - * File: @ref testsem.c - * - *

      Description

      - * This module implements the test sequence for the @ref semaphores subsystem. - * - *

      Objective

      - * Objective of the test module is to cover 100% of the @ref semaphores code. - * - *

      Preconditions

      - * The module requires the following kernel options: - * - @p CH_USE_SEMAPHORES - * . - * In case some of the required options are not enabled then some or all tests - * may be skipped. - * - *

      Test Cases

      - * - @subpage test_sem_001 - * - @subpage test_sem_002 - * - @subpage test_sem_003 - * . - * @file testsem.c - * @brief Semaphores test source file - * @file testsem.h - * @brief Semaphores test header file - */ - -#if CH_USE_SEMAPHORES - -#define ALLOWED_DELAY MS2ST(5) - -/* - * Note, the static initializers are not really required because the - * variables are explicitly initialized in each test case. It is done in order - * to test the macros. - */ -static SEMAPHORE_DECL(sem1, 0); - -/** - * @page test_sem_001 Enqueuing test - * - *

      Description

      - * Five threads with randomized priorities are enqueued to a semaphore then - * awakened one at time.
      - * The test expects that the threads reach their goal in FIFO order or - * priority order depending on the CH_USE_SEMAPHORES_PRIORITY configuration - * setting. - */ -static char *sem1_gettest(void) { - - return "Semaphores, enqueuing"; -} - -static void sem1_setup(void) { - - chSemInit(&sem1, 0); -} - -static msg_t thread1(void *p) { - - chSemWait(&sem1); - test_emit_token(*(char *)p); - return 0; -} - -static void sem1_execute(void) { - - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()+5, thread1, "A"); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, chThdGetPriority()+1, thread1, "B"); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, chThdGetPriority()+3, thread1, "C"); - threads[3] = chThdCreateStatic(wa[3], WA_SIZE, chThdGetPriority()+4, thread1, "D"); - threads[4] = chThdCreateStatic(wa[4], WA_SIZE, chThdGetPriority()+2, thread1, "E"); - chSemSignal(&sem1); - chSemSignal(&sem1); - chSemSignal(&sem1); - chSemSignal(&sem1); - chSemSignal(&sem1); - test_wait_threads(); -#if CH_USE_SEMAPHORES_PRIORITY - test_assert_sequence(1, "ADCEB"); -#else - test_assert_sequence(1, "ABCDE"); -#endif -} - -/** - * @page test_sem_002 Timeout test - * - *

      Description

      - * The three possible semaphore waiting modes (do not wait, wait with timeout, - * wait without timeout) are explored.
      - * The test expects that the semaphore wait function returns the correct value - * in each of the above scenario and that the semaphore structure status is - * correct after each operation. - */ -const struct testcase testsem1 = { - sem1_gettest, - sem1_setup, - NULL, - sem1_execute -}; - -static char *sem2_gettest(void) { - - return "Semaphores, timeout"; -} - -static void sem2_setup(void) { - - chSemInit(&sem1, 0); -} - -static msg_t thread2(void *p) { - - (void)p; - chThdSleepMilliseconds(50); - chSysLock(); - chSemSignalI(&sem1); /* For coverage reasons */ - chSchRescheduleS(); - chSysUnlock(); - return 0; -} - -static void sem2_execute(void) { - int i; - systime_t target_time; - msg_t msg; - - /* - * Testing special case TIME_IMMEDIATE. - */ - msg = chSemWaitTimeout(&sem1, TIME_IMMEDIATE); - test_assert(1, msg == RDY_TIMEOUT, "wrong wake-up message"); - test_assert(2, isempty(&sem1.s_queue), "queue not empty"); - test_assert(3, sem1.s_cnt == 0, "counter not zero"); - - /* - * Testing not timeout condition. - */ - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority() - 1, - thread2, 0); - msg = chSemWaitTimeout(&sem1, MS2ST(500)); - test_wait_threads(); - test_assert(4, msg == RDY_OK, "wrong wake-up message"); - test_assert(5, isempty(&sem1.s_queue), "queue not empty"); - test_assert(6, sem1.s_cnt == 0, "counter not zero"); - - /* - * Testing timeout condition. - */ - test_wait_tick(); - target_time = chTimeNow() + MS2ST(5 * 500); - for (i = 0; i < 5; i++) { - test_emit_token('A' + i); - msg = chSemWaitTimeout(&sem1, MS2ST(500)); - test_assert(7, msg == RDY_TIMEOUT, "wrong wake-up message"); - test_assert(8, isempty(&sem1.s_queue), "queue not empty"); - test_assert(9, sem1.s_cnt == 0, "counter not zero"); - } - test_assert_sequence(10, "ABCDE"); - test_assert_time_window(11, target_time, target_time + ALLOWED_DELAY); -} - -const struct testcase testsem2 = { - sem2_gettest, - sem2_setup, - NULL, - sem2_execute -}; - -#if CH_USE_SEMSW -/** - * @page test_sem_003 Atomic signal-wait test - * - *

      Description

      - * This test case explicitly address the @p chSemWaitSignal() function. A - * thread is created that performs a wait and a signal operations. - * The tester thread is awakened from an atomic wait/signal operation.
      - * The test expects that the semaphore wait function returns the correct value - * in each of the above scenario and that the semaphore structure status is - * correct after each operation. - */ - -static char *sem3_gettest(void) { - - return "Semaphores, atomic signal-wait"; -} - -static void sem3_setup(void) { - - chSemInit(&sem1, 0); -} - -static msg_t thread3(void *p) { - - (void)p; - chSemWait(&sem1); - chSemSignal(&sem1); - return 0; -} - -static void sem3_execute(void) { - - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()+1, thread3, 0); - chSemSignalWait(&sem1, &sem1); - test_assert(1, isempty(&sem1.s_queue), "queue not empty"); - test_assert(2, sem1.s_cnt == 0, "counter not zero"); - - chSemSignalWait(&sem1, &sem1); - test_assert(3, isempty(&sem1.s_queue), "queue not empty"); - test_assert(4, sem1.s_cnt == 0, "counter not zero"); -} - -const struct testcase testsem3 = { - sem3_gettest, - sem3_setup, - NULL, - sem3_execute -}; -#endif /* CH_USE_SEMSW */ -#endif /* CH_USE_SEMAPHORES */ - -/** - * @brief Test sequence for semaphores. - */ -const struct testcase * const patternsem[] = { -#if CH_USE_SEMAPHORES - &testsem1, - &testsem2, -#if CH_USE_SEMSW - &testsem3, -#endif -#endif - NULL -}; diff --git a/ChibiOS_2.0.8/test/testsem.h b/ChibiOS_2.0.8/test/testsem.h deleted file mode 100644 index 0e9663d..0000000 --- a/ChibiOS_2.0.8/test/testsem.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTSEM_H_ -#define _TESTSEM_H_ - -extern const struct testcase *patternsem[]; - -#endif /* _TESTSEM_H_ */ diff --git a/ChibiOS_2.0.8/test/testthd.c b/ChibiOS_2.0.8/test/testthd.c deleted file mode 100644 index 38dbff7..0000000 --- a/ChibiOS_2.0.8/test/testthd.c +++ /dev/null @@ -1,257 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "test.h" - -/** - * @page test_threads Threads and Scheduler test - * - * File: @ref testthd.c - * - *

      Description

      - * This module implements the test sequence for the @ref scheduler, - * @ref threads and @ref time subsystems.
      - * Note that the tests on those subsystems are formally required but most of - * their functionality is already demonstrated because the test suite itself - * depends on them, anyway double check is good. - * - *

      Objective

      - * Objective of the test module is to cover 100% of the subsystems code. - * - *

      Preconditions

      - * None. - * - *

      Test Cases

      - * - @subpage test_threads_001 - * - @subpage test_threads_002 - * - @subpage test_threads_003 - * - @subpage test_threads_004 - * . - * @file testthd.c - * @brief Threads and Scheduler test source file - * @file testthd.h - * @brief Threads and Scheduler test header file - */ - -/** - * @page test_threads_001 Ready List functionality #1 - * - *

      Description

      - * Five threads, with increasing priority, are enqueued in the ready list - * and atomically executed.
      - * The test expects the threads to perform their operations in increasing - * priority order regardless of the initial order. - */ - -static msg_t thread(void *p) { - - test_emit_token(*(char *)p); - return 0; -} - -static char *thd1_gettest(void) { - - return "Threads, enqueuing test #1"; -} - -static void thd1_execute(void) { - - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()-5, thread, "E"); - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, chThdGetPriority()-4, thread, "D"); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, chThdGetPriority()-3, thread, "C"); - threads[3] = chThdCreateStatic(wa[3], WA_SIZE, chThdGetPriority()-2, thread, "B"); - threads[4] = chThdCreateStatic(wa[4], WA_SIZE, chThdGetPriority()-1, thread, "A"); - test_wait_threads(); - test_assert_sequence(1, "ABCDE"); -} - -const struct testcase testthd1 = { - thd1_gettest, - NULL, - NULL, - thd1_execute -}; - -/** - * @page test_threads_002 Ready List functionality #2 - * - *

      Description

      - * Five threads, with pseudo-random priority, are enqueued in the ready list - * and atomically executed.
      - * The test expects the threads to perform their operations in increasing - * priority order regardless of the initial order. - */ - -static char *thd2_gettest(void) { - - return "Threads, enqueuing test #2"; -} - -static void thd2_execute(void) { - - threads[1] = chThdCreateStatic(wa[1], WA_SIZE, chThdGetPriority()-4, thread, "D"); - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()-5, thread, "E"); - threads[4] = chThdCreateStatic(wa[4], WA_SIZE, chThdGetPriority()-1, thread, "A"); - threads[3] = chThdCreateStatic(wa[3], WA_SIZE, chThdGetPriority()-2, thread, "B"); - threads[2] = chThdCreateStatic(wa[2], WA_SIZE, chThdGetPriority()-3, thread, "C"); - test_wait_threads(); - test_assert_sequence(1, "ABCDE"); -} - -const struct testcase testthd2 = { - thd2_gettest, - NULL, - NULL, - thd2_execute -}; - -/** - * @page test_threads_003 Threads priority change test - * - *

      Description

      - * A series of priority changes are performed on the current thread in order - * to verify that the priority change happens as expected.
      - * If the @p CH_USE_MUTEXES option is enabled then the priority changes are - * also tested under priority inheritance boosted priority state. - */ - -static char *thd3_gettest(void) { - - return "Threads, priority change"; -} - -static void thd3_execute(void) { - tprio_t prio, p1; - - prio = chThdGetPriority(); - p1 = chThdSetPriority(prio + 1); - test_assert(1, p1 == prio, - "unexpected returned priority level"); - test_assert(2, chThdGetPriority() == prio + 1, - "unexpected priority level"); - p1 = chThdSetPriority(p1); - test_assert(3, p1 == prio + 1, - "unexpected returned priority level"); - test_assert(4, chThdGetPriority() == prio, - "unexpected priority level"); - -#if CH_USE_MUTEXES - /* Simulates a priority boost situation (p_prio > p_realprio).*/ - chSysLock(); - chThdSelf()->p_prio += 2; - chSysUnlock(); - test_assert(5, chThdGetPriority() == prio + 2, - "unexpected priority level"); - - /* Tries to raise but below the boost level. */ - p1 = chThdSetPriority(prio + 1); - test_assert(6, p1 == prio, - "unexpected returned priority level"); - test_assert(7, chThdSelf()->p_prio == prio + 2, - "unexpected priority level"); - test_assert(8, chThdSelf()->p_realprio == prio + 1, - "unexpected returned real priority level"); - - /* Tries to raise above the boost level. */ - p1 = chThdSetPriority(prio + 3); - test_assert(9, p1 == prio + 1, - "unexpected returned priority level"); - test_assert(10, chThdSelf()->p_prio == prio + 3, - "unexpected priority level"); - test_assert(11, chThdSelf()->p_realprio == prio + 3, - "unexpected real priority level"); - - chSysLock(); - chThdSelf()->p_prio = prio; - chThdSelf()->p_realprio = prio; - chSysUnlock(); -#endif -} - -const struct testcase testthd3 = { - thd3_gettest, - NULL, - NULL, - thd3_execute -}; - -/** - * @page test_threads_004 Threads delays test - * - *

      Description

      - * Delay APIs and associated macros are tested, the invoking thread is verified - * to wake up at the exact expected time. - */ - -static char *thd4_gettest(void) { - - return "Threads, delays"; -} - -static void thd4_execute(void) { - systime_t time; - - test_wait_tick(); - - /* Timeouts in microseconds.*/ - time = chTimeNow(); - chThdSleepMicroseconds(100000); - test_assert_time_window(1, time + US2ST(100000), time + US2ST(100000) + 1); - - /* Timeouts in milliseconds.*/ - time = chTimeNow(); - chThdSleepMilliseconds(100); - test_assert_time_window(2, time + MS2ST(100), time + MS2ST(100) + 1); - - /* Timeouts in seconds.*/ - time = chTimeNow(); - chThdSleepSeconds(1); - test_assert_time_window(3, time + S2ST(1), time + S2ST(1) + 1); - - /* Absolute timelines.*/ - time = chTimeNow() + MS2ST(100); - chThdSleepUntil(time); - test_assert_time_window(4, time, time + 1); -} - -const struct testcase testthd4 = { - thd4_gettest, - NULL, - NULL, - thd4_execute -}; - -/** - * @brief Test sequence for threads. - */ -const struct testcase * const patternthd[] = { - &testthd1, - &testthd2, - &testthd3, - &testthd4, - NULL -}; diff --git a/ChibiOS_2.0.8/test/testthd.h b/ChibiOS_2.0.8/test/testthd.h deleted file mode 100644 index 2994c45..0000000 --- a/ChibiOS_2.0.8/test/testthd.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#ifndef _TESTRDY_H_ -#define _TESTRDY_H_ - -extern const struct testcase *patternthd[]; - -#endif /* _TESTRDY_H_ */ diff --git a/ChibiOS_2.0.8/testhal/STM32/Makefile b/ChibiOS_2.0.8/testhal/STM32/Makefile deleted file mode 100644 index 0aa9439..0000000 --- a/ChibiOS_2.0.8/testhal/STM32/Makefile +++ /dev/null @@ -1,204 +0,0 @@ -############################################################################## -# Build global options -# NOTE: Can be overridden externally. -# - -# Compiler options here. -ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu -falign-functions=16 -endif - -# C++ specific options here (added to USE_OPT). -ifeq ($(USE_CPPOPT),) - USE_CPPOPT = -fno-rtti -endif - -# Enable this if you want the linker to remove unused code and data -ifeq ($(USE_LINK_GC),) - USE_LINK_GC = yes -endif - -# If enabled, this option allows to compile the application in THUMB mode. -ifeq ($(USE_THUMB),) - USE_THUMB = yes -endif - -# Enable register caching optimization (read documentation). -ifeq ($(USE_CURRP_CACHING),) - USE_CURRP_CACHING = no -endif - -# -# Build global options -############################################################################## - -############################################################################## -# Architecture or project specific options -# - -# Enable this if you really want to use the STM FWLib. -ifeq ($(USE_FWLIB),) - USE_FWLIB = no -endif - -# -# Architecture or project specific options -############################################################################## - -############################################################################## -# Project, sources and paths -# - -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - -# Imported source files -CHIBIOS = ../.. -include $(CHIBIOS)/boards/OLIMEX_STM32_P103/board.mk -include $(CHIBIOS)/os/hal/platforms/STM32/platform.mk -include $(CHIBIOS)/os/hal/hal.mk -include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/port.mk -include $(CHIBIOS)/os/kernel/kernel.mk -include $(CHIBIOS)/test/test.mk - -# C sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CSRC = $(PORTSRC) \ - $(KERNSRC) \ - $(TESTSRC) \ - $(HALSRC) \ - $(PLATFORMSRC) \ - $(BOARDSRC) \ - $(CHIBIOS)/os/various/evtimer.c \ - $(CHIBIOS)/os/various/syscalls.c \ - settings.c main.c - -# C++ sources that can be compiled in ARM or THUMB mode depending on the global -# setting. -CPPSRC = - -# C sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACSRC = - -# C++ sources to be compiled in ARM mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -ACPPSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCSRC = - -# C sources to be compiled in THUMB mode regardless of the global setting. -# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler -# option that results in lower performance and larger code size. -TCPPSRC = - -# List ASM source files here -ASMSRC = $(PORTASM) \ - $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/vectors.s - -INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) \ - $(CHIBIOS)/os/various - -# -# Project, sources and paths -############################################################################## - -############################################################################## -# Compiler settings -# - -MCU = cortex-m3 - -TRGT = arm-none-eabi- -CC = $(TRGT)gcc -CPPC = $(TRGT)g++ -# Enable loading with g++ only if you need C++ runtime support. -# NOTE: You can use C++ even without C++ support if you are careful. C++ -# runtime support makes code size explode. -LD = $(TRGT)gcc -#LD = $(TRGT)g++ -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -OD = $(TRGT)objdump -HEX = $(CP) -O ihex -BIN = $(CP) -O binary - -# ARM-specific options here -AOPT = - -# THUMB-specific options here -TOPT = -mthumb -DTHUMB - -# Define C warning options here -CWARN = -Wall -Wextra -Wstrict-prototypes - -# Define C++ warning options here -CPPWARN = -Wall -Wextra - -# -# Compiler settings -############################################################################## - -############################################################################## -# Start of default section -# - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = - -# -# End of default section -############################################################################## - -############################################################################## -# Start of user section -# - -# List all user C define here, like -D_DEBUG=1 -UDEFS = - -# Define ASM defines here -UADEFS = - -# List all user directories here -UINCDIR = - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# -# End of user defines -############################################################################## - -ifeq ($(USE_FWLIB),yes) - include $(CHIBIOS)/ext/stm32lib/stm32lib.mk - CSRC += $(STM32SRC) - INCDIR += $(STM32INC) - USE_OPT += -DUSE_STDPERIPH_DRIVER -endif - -include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk diff --git a/ChibiOS_2.0.8/testhal/STM32/ch.ld b/ChibiOS_2.0.8/testhal/STM32/ch.ld deleted file mode 100644 index d64ee32..0000000 --- a/ChibiOS_2.0.8/testhal/STM32/ch.ld +++ /dev/null @@ -1,120 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * ST32F103 memory setup. - */ -__main_stack_size__ = 0x0400; -__process_stack_size__ = 0x0400; -__stacks_total_size__ = __main_stack_size__ + __process_stack_size__; - -MEMORY -{ - flash : org = 0x08000000, len = 128k - ram : org = 0x20000000, len = 20k -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -SECTIONS -{ - . = 0; - - .text : ALIGN(16) SUBALIGN(16) - { - _text = .; - KEEP(*(vectors)) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - } > flash - - .ctors : - { - PROVIDE(_ctors_start_ = .); - KEEP(*(SORT(.ctors.*))) - KEEP(*(.ctors)) - PROVIDE(_ctors_end_ = .); - } > flash - - .dtors : - { - PROVIDE(_dtors_start_ = .); - KEEP(*(SORT(.dtors.*))) - KEEP(*(.dtors)) - PROVIDE(_dtors_end_ = .); - } > flash - - .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} - - __exidx_start = .; - .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash - __exidx_end = .; - - .eh_frame_hdr : {*(.eh_frame_hdr)} - - .eh_frame : ONLY_IF_RO {*(.eh_frame)} - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .data : - { - _data = .; - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - _edata = .; - } > ram AT > flash - - .bss : - { - _bss_start = .; - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - _bss_end = .; - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/ChibiOS_2.0.8/testhal/STM32/chconf.h b/ChibiOS_2.0.8/testhal/STM32/chconf.h deleted file mode 100644 index 65b9045..0000000 --- a/ChibiOS_2.0.8/testhal/STM32/chconf.h +++ /dev/null @@ -1,494 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - -/*===========================================================================*/ -/* Kernel parameters. */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Nested locks. - * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() - * operations is allowed.
      - * For performance and code size reasons the recommended setting - * is to leave this option disabled.
      - * You may use this option if you need to merge ChibiOS/RT with - * external libraries that require nested lock/unlock operations. - * - * @note T he default is @p FALSE. - */ -#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) -#define CH_USE_NESTED_LOCKS FALSE -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_COREMEM. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/*===========================================================================*/ -/* Performance options. */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** - * @brief Exotic optimization. - * @details If defined then a CPU register is used as storage for the global - * @p currp variable. Caching this variable in a register greatly - * improves both space and time OS efficiency. A side effect is that - * one less register has to be saved during the context switch - * resulting in lower RAM usage and faster context switch. - * - * @note This option is only usable with the GCC compiler and is only useful - * on processors with many registers like ARM cores. - * @note If this option is enabled then ALL the libraries linked to the - * ChibiOS/RT code must be recompiled with the GCC option @p - * -ffixed-@. - * @note This option must be enabled in the Makefile, it is listed here for - * documentation only. - */ -#if defined(__DOXYGEN__) -#define CH_CURRP_REGISTER_CACHE "reg" -#endif - -/*===========================================================================*/ -/* Subsystem options. */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/*===========================================================================*/ -/* Debug options. */ -/*===========================================================================*/ - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/*===========================================================================*/ -/* Kernel hooks. */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure hook. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ -struct { \ - /* Add threads custom fields here.*/ \ -}; -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitily from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/testhal/STM32/halconf.h b/ChibiOS_2.0.8/testhal/STM32/halconf.h deleted file mode 100644 index d8c494d..0000000 --- a/ChibiOS_2.0.8/testhal/STM32/halconf.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @addtogroup HAL_CONF - * @{ - */ - -/* - * HAL configuration file, this file allows to enable or disable the various - * device drivers from your application. You may also use this file in order - * to override the device drivers default settings. - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -/* - * Uncomment the following line in order to include a mcu-related - * settings file. This file can be used to include platform specific - * header files or to override the low level drivers settings. - */ -#include "mcuconf.h" - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_PAL TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC TRUE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN TRUE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) -#define CH_HAL_USE_MAC FALSE -#endif - -/*===========================================================================*/ -/* PWM driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__) -#define CH_HAL_USE_PWM TRUE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define CH_HAL_USE_SERIAL TRUE -#endif - -/* - * Default SERIAL settings overrides (uncomment to override). - */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ -/*#define SERIAL_BUFFERS_SIZE 64*/ - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_SPI TRUE -#endif - -/* - * Default SPI settings overrides (uncomment to override). - */ -/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/ - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define CH_HAL_USE_MMC_SPI FALSE -#endif - -/* - * Default MMC_SPI settings overrides (uncomment to override). - */ -/*#define MMC_SECTOR_SIZE 512*/ -/*#define MMC_NICE_WAITING TRUE*/ -/*#define MMC_POLLING_INTERVAL 10*/ -/*#define MMC_POLLING_DELAY 10*/ - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/ChibiOS_2.0.8/testhal/STM32/main.c b/ChibiOS_2.0.8/testhal/STM32/main.c deleted file mode 100644 index 4f69776..0000000 --- a/ChibiOS_2.0.8/testhal/STM32/main.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ -#include - -#include "ch.h" -#include "hal.h" -#include "test.h" -#include "settings.h" - -/* - * LED blinker thread, times are in milliseconds. - */ -static WORKING_AREA(blinker_wa, 128); -static msg_t blinker_thread(void *p) { - - (void)p; - while (TRUE) { - palClearPad(IOPORT3, GPIOC_LED); - chThdSleepMilliseconds(500); - palSetPad(IOPORT3, GPIOC_LED); - chThdSleepMilliseconds(500); - } - return 0; -} - -#if CH_HAL_USE_ADC -static adcsample_t samples[ADC_GRP1_NUM_CHANNELS * ADC_GRP1_BUF_DEPTH]; -static Thread *adctp; - -/* - * ADC continuous conversion thread. - */ -size_t nx = 0, ny = 0; -static void adccallback(adcsample_t *buffer, size_t n) { - - if (samples == buffer) { - nx += n; - } - else { - ny += n; - } -} - -static WORKING_AREA(adc_continuous_wa, 256); -static msg_t adc_continuous_thread(void *p){ - - (void)p; - palSetGroupMode(IOPORT3, - PAL_PORT_BIT(0) | PAL_PORT_BIT(1), - PAL_MODE_INPUT_ANALOG); - adcStart(&ADCD1, &adccfg); - adcStartConversion(&ADCD1, &adcgrpcfg, samples, - ADC_GRP1_BUF_DEPTH, adccallback); - adcWaitConversion(&ADCD1, TIME_INFINITE); - adcStop(&ADCD1); - return 0; -} -#endif /* CH_HAL_USE_ADC */ - -#if CH_HAL_USE_CAN -static Thread *canrtp; -static Thread *canttp; - -static WORKING_AREA(can_rx_wa, 256); -static msg_t can_rx(void *p) { - EventListener el; - CANRxFrame rxmsg; - - (void)p; - chEvtRegister(&CAND1.cd_rxfull_event, &el, 0); - while(!chThdShouldTerminate()) { - if (chEvtWaitAnyTimeout(ALL_EVENTS, MS2ST(100)) == 0) - continue; - while (canReceive(&CAND1, &rxmsg, TIME_IMMEDIATE) == RDY_OK) { - /* Process message.*/ - palTogglePad(IOPORT3, GPIOC_LED); - } - } - chEvtUnregister(&CAND1.cd_rxfull_event, &el); - return 0; -} - -static WORKING_AREA(can_tx_wa, 256); -static msg_t can_tx(void * p) { - CANTxFrame txmsg; - - (void)p; - txmsg.cf_IDE = CAN_IDE_EXT; - txmsg.cf_EID = 0x01234567; - txmsg.cf_RTR = CAN_RTR_DATA; - txmsg.cf_DLC = 8; - txmsg.cf_data32[0] = 0x55AA55AA; - txmsg.cf_data32[1] = 0x00FF00FF; - - while (!chThdShouldTerminate()) { - canTransmit(&CAND1, &txmsg, MS2ST(100)); -/* chThdSleepMilliseconds(5);*/ - } - return 0; -} -#endif /* CH_HAL_USE_CAN */ - -#if CH_HAL_USE_SPI -static uint8_t txbuf[512]; -static uint8_t rxbuf[512]; -static Thread *spitp; - -/* - * Maximum speed SPI continuous loopback thread. - */ -static WORKING_AREA(spi_loopback_wa, 256); -static msg_t spi_loopback_thread(void *p){ - - (void)p; - palSetPadMode(IOPORT1, GPIOA_SPI1NSS, PAL_MODE_OUTPUT_PUSHPULL); - palSetPad(IOPORT1, GPIOA_SPI1NSS); - spiStart(&SPID1, &spicfg); - while (!chThdShouldTerminate()) { - spiSelect(&SPID1); - spiExchange(&SPID1, 512, txbuf, rxbuf); - spiUnselect(&SPID1); - } - spiStop(&SPID1); - return 0; -} -#endif /* CH_HAL_USE_SPI */ - -/* - * Entry point, note, the main() function is already a thread in the system - * on entry. - */ -int main(int argc, char **argv) { - unsigned i; - - (void)argc; - (void)argv; - (void)i; - - /* - * Activates the serial driver 2 using the driver default configuration. - */ - sdStart(&SD2, NULL); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(blinker_wa, sizeof(blinker_wa), - NORMALPRIO + 10, blinker_thread, NULL); - -#if CH_HAL_USE_ADC - /* - * Creates the ADC continuous conversion test thread. - */ - adctp = chThdCreateStatic(adc_continuous_wa, sizeof(adc_continuous_wa), - NORMALPRIO + 9, adc_continuous_thread, NULL); -#endif - -#if CH_HAL_USE_CAN - canStart(&CAND1, &cancfg); - canrtp = chThdCreateStatic(can_rx_wa, sizeof(can_rx_wa), - NORMALPRIO + 7, can_rx, NULL); - canttp = chThdCreateStatic(can_tx_wa, sizeof(can_tx_wa), - NORMALPRIO + 7, can_tx, NULL); -#endif - -#if CH_HAL_USE_SPI - /* - * Creates the SPI loopback test thread. - */ - for (i = 0; i < sizeof(txbuf); i++) - txbuf[i] = (uint8_t)i; - spitp = chThdCreateStatic(spi_loopback_wa, sizeof(spi_loopback_wa), - NORMALPRIO + 8, spi_loopback_thread, NULL); -#endif - - /* - * Normal main() thread activity, in this demo it does nothing except - * sleeping in a loop and check the button state. - */ - while (TRUE) { - if (palReadPad(IOPORT1, GPIOA_BUTTON)) { - TestThread(&SD2); -#if CH_HAL_USE_ADC - adcStopConversion(&ADCD1); - chThdWait(adctp); -#endif -#if CH_HAL_USE_CAN - chThdTerminate(canttp); - chThdWait(canttp); - chThdTerminate(canrtp); - chThdWait(canrtp); -#endif -#if CH_HAL_USE_SPI - chThdTerminate(spitp); - chThdWait(spitp); -#endif - chThdSleepMilliseconds(500); - TestThread(&SD2); - chThdSleepMilliseconds(500); - chSysHalt(); - } - chThdSleepMilliseconds(500); - } - return 0; -} diff --git a/ChibiOS_2.0.8/testhal/STM32/mcuconf.h b/ChibiOS_2.0.8/testhal/STM32/mcuconf.h deleted file mode 100644 index c862cf9..0000000 --- a/ChibiOS_2.0.8/testhal/STM32/mcuconf.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -/* - * STM32 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the driver - * is enabled in halconf.h. - * - * IRQ priorities: - * 15...0 Lowest...Highest. - * - * DMA priorities: - * 0...3 Lowest...Highest. - */ - -/* - * HAL driver system settings. - */ -#define STM32_SW STM32_SW_PLL -#define STM32_PLLSRC STM32_PLLSRC_HSE -#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 -#define STM32_PLLMUL_VALUE 9 -#define STM32_HPRE STM32_HPRE_DIV1 -#define STM32_PPRE1 STM32_PPRE1_DIV2 -#define STM32_PPRE2 STM32_PPRE2_DIV2 -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_MCO STM32_MCO_NOCLOCK - -/* - * ADC driver system settings. - */ -#define USE_STM32_ADC1 TRUE -#define STM32_ADC1_DMA_PRIORITY 3 -#define STM32_ADC1_IRQ_PRIORITY 5 -#define STM32_ADC1_DMA_ERROR_HOOK() chSysHalt() - -/* - * CAN driver system settings. - */ -#define USE_STM32_CAN1 TRUE -#define STM32_CAN1_IRQ_PRIORITY 11 - -/* - * PWM driver system settings. - */ -#define USE_STM32_PWM1 TRUE -#define USE_STM32_PWM2 FALSE -#define USE_STM32_PWM3 FALSE -#define USE_STM32_PWM4 FALSE -#define STM32_PWM1_IRQ_PRIORITY 7 -#define STM32_PWM2_IRQ_PRIORITY 7 -#define STM32_PWM3_IRQ_PRIORITY 7 -#define STM32_PWM4_IRQ_PRIORITY 7 - -/* - * SERIAL driver system settings. - */ -#define USE_STM32_USART1 FALSE -#define USE_STM32_USART2 TRUE -#define USE_STM32_USART3 FALSE -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#define USE_STM32_UART4 FALSE -#define USE_STM32_UART5 FALSE -#endif -#define STM32_USART1_PRIORITY 12 -#define STM32_USART2_PRIORITY 12 -#define STM32_USART3_PRIORITY 12 -#if defined(STM32F10X_HD) || defined(STM32F10X_CL) -#define STM32_UART4_PRIORITY 12 -#define STM32_UART5_PRIORITY 12 -#endif - -/* - * SPI driver system settings. - */ -#define USE_STM32_SPI1 TRUE -#define USE_STM32_SPI2 TRUE -#define STM32_SPI1_DMA_PRIORITY 2 -#define STM32_SPI2_DMA_PRIORITY 2 -#define STM32_SPI1_IRQ_PRIORITY 10 -#define STM32_SPI2_IRQ_PRIORITY 10 -#define STM32_SPI1_DMA_ERROR_HOOK() chSysHalt() diff --git a/ChibiOS_2.0.8/testhal/STM32/readme.txt b/ChibiOS_2.0.8/testhal/STM32/readme.txt deleted file mode 100644 index b7d773d..0000000 --- a/ChibiOS_2.0.8/testhal/STM32/readme.txt +++ /dev/null @@ -1,30 +0,0 @@ -***************************************************************************** -** ChibiOS/RT port for ARM-Cortex-M3 STM32F103. ** -***************************************************************************** - -** TARGET ** - -The demo will on an Olimex STM32-P103 board. - -** The Demo ** - -The demo is a stress test for the STM32 I/O subsystem, simultaneous activity -is performed on a SPI, an ADC, the CAN and a serial port all while executing -the complex test suite. -The demo is DMA and IRQ intensive so the debugging can be difficoult, so be -warned if you see anomalies in your debugger. - -** Build Procedure ** - -The demo has been tested by using the free Codesourcery GCC-based toolchain, -YAGARTO and an experimental WinARM build including GCC 4.3.0. -Just modify the TRGT line in the makefile in order to use different GCC ports. - -** Notes ** - -Some files used by the demo are not part of ChibiOS/RT but are copyright of -ST Microelectronics and are licensed under a different license. -Also note that not all the files present in the ST library are distribited -with ChibiOS/RT, you can find the whole library on the ST web site: - - http://www.st.com diff --git a/ChibiOS_2.0.8/testhal/STM32/settings.c b/ChibiOS_2.0.8/testhal/STM32/settings.c deleted file mode 100644 index f65d220..0000000 --- a/ChibiOS_2.0.8/testhal/STM32/settings.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#include "ch.h" -#include "hal.h" -#include "settings.h" - -#if CH_HAL_USE_ADC -/* - * ADC configuration. - */ -const ADCConfig adccfg = {}; -const ADCConversionGroup adcgrpcfg = { - TRUE, - ADC_GRP1_NUM_CHANNELS, - 0, - ADC_CR2_EXTSEL_SWSTART | ADC_CR2_TSVREFE | ADC_CR2_CONT, - 0, - 0, - ADC_SQR1_NUM_CH(ADC_GRP1_NUM_CHANNELS), - ADC_SQR2_SQ7_N(ADC_CHANNEL_SENSOR) | ADC_SQR2_SQ6_N(ADC_CHANNEL_VREFINT), - ADC_SQR3_SQ5_N(ADC_CHANNEL_IN11) | ADC_SQR3_SQ4_N(ADC_CHANNEL_IN10) | - ADC_SQR3_SQ3_N(ADC_CHANNEL_IN11) | ADC_SQR3_SQ2_N(ADC_CHANNEL_IN10) | - ADC_SQR3_SQ1_N(ADC_CHANNEL_IN11) | ADC_SQR3_SQ0_N(ADC_CHANNEL_IN10) -}; -#endif - -#if CH_HAL_USE_CAN - -#define CAN_BTR_PRESCALER(n) (n) -#undef CAN_BTR_TS1 -#define CAN_BTR_TS1(n) ((n) << 16) -#undef CAN_BTR_TS2 -#define CAN_BTR_TS2(n) ((n) << 20) -#undef CAN_BTR_SJW -#define CAN_BTR_SJW(n) ((n) << 24) - -/* - * Internal loopback mode, 500KBaud, automatic wakeup, automatic recover - * from abort mode. - * See section 22.7.7 on the STM32 reference manual. - */ -const CANConfig cancfg = { - CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, - CAN_BTR_LBKM | CAN_BTR_SJW(0) | CAN_BTR_TS2(1) | - CAN_BTR_TS1(8) | CAN_BTR_PRESCALER(6), - 0, - NULL -}; -#endif /* CH_HAL_USE_CAN */ - -#if CH_HAL_USE_SPI -/* - * SPI configuration, maximum speed. - */ -const SPIConfig spicfg = { - IOPORT1, GPIOA_SPI1NSS, 0 -}; -#endif diff --git a/ChibiOS_2.0.8/testhal/STM32/settings.h b/ChibiOS_2.0.8/testhal/STM32/settings.h deleted file mode 100644 index 530b9a5..0000000 --- a/ChibiOS_2.0.8/testhal/STM32/settings.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - --- - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes ChibiOS/RT, without being obliged to provide - the source code for any proprietary components. See the file exception.txt - for full details of how and when the exception can be applied. -*/ - -#if CH_HAL_USE_ADC -#define ADC_GRP1_NUM_CHANNELS 8 -#define ADC_GRP1_BUF_DEPTH 16 - -extern const ADCConfig adccfg; -extern const ADCConversionGroup adcgrpcfg; -#endif - -#if CH_HAL_USE_CAN -extern const CANConfig cancfg; -#endif /* CH_HAL_USE_CAN */ - -#if CH_HAL_USE_SPI -extern const SPIConfig spicfg; -#endif

      7_Gz&(FV;z}TFfWCzJP2U;ablh+I+G z)G0T7o*DgVEtlLFw?418IplxdRDo+5Ck}+qF3_AVuyVt@n-|)m%%(kd4(wzM-Me{r z*mBX&@ssNfp46pHKdyPSH~K}XztqeF7Uu;P&F(1HVmh@(U{RCJ$py!Rv)n7=yBfFE z6osUhel1fyD!p!=TFv63k4gIrxWw%G9PkJD-O>vvc(;c^0d1v3gI1x1nRNuI6YJ?|CICsdy>zA=Bv=K1?o-5-_yeJRd;T&JSR;lchtNrtLQpT75s z@Ewv|@Na6B{M>+p1~JX@-U|v!9(=y*-3`nK3V8bew;$ExYF$|K zf7|!>j?3TN&xkvGW#NVQaVph9oFa3}ocT7_C+>GCQn_@c|Cy}MZ$_@U&;E4q1WPVx z_;7#yyKnB>_*EHx=T2dGqwaUVG5NnTi_Erq%Mb69|9ibKJSWWY!EtrgidtFW{b&B& z-6CC-;Ky?-oac{;^{<}A?-@$m`k9y;W*G3zsEtqibNY?MY9SGc8i6A+JJ-*%_>g~G zr)qI`H*@;^>sg<*uQD(mGx*Lo=kNdOdv$02$rt~+zfkGV5l4$X>-GPrpSi~0Wckay z?)vrVUiT|R_NBaj@T$eP;NIb5errzFWtnY^KdJD3s()bWnbbAgH?hsE6BTD<%{hG3@HQ;#e%!jSF!reMn`!%%h|Mhp;J72$f|4xaPpPTr629JF8>1#<_ zO|2|@Z0Eg)Q=`O26Ik;C|j{ zu6HwsW%6>DZBNg0u$Ky4(-E#*^YpbQL+GrB%TE9OIIT2OM(fgo*o}QwQYX#MtB0{k z_HHb_TP`|zvysS)Bkm=ULM#q9lsynT@JuQ1F5SC&ld;e5 zh}xz9_slk1q{e%7-?|(7-&VZR)pX5Td*Hb0EVKF#>WA5W|4wu;OPBxSZJxn#a?P6g z1-GZ<+`8}cae`p^MnCOiw~92&Ht*Bg=BR(kF!h&E<>x3>#fK?5!ePt3rBn6&4?SnG zIVBW%jO~0+j8ps{fvvN`{~amr_vxFfQW`z$OowWWLibY1#-m0vId?Svm@jnTkCzHd& z?B^}tn_*I4{Whc~-7s%LTb^|0ueEuVf-`?U6^h$BtyE9y)y9?+<|nsJk>92Ka+>p- zu1}A2Hmvx(D!Z&Ce6{S?4{4nJvDNc#hwpmS_9cnoz}LRegqti$-=~V~F}yL;yJ%N& z)K}M@OPa?wuTB1v>HXl@yy-v71&YouyZq5_>ZKxn(?g*>rxV4uGupiF4%fdu+2V@z z)Hz&BZ6tkbdkmLuHSPMpGV}0m<2e_0xGguC&+z|3*qm~e^5nJBPjdEU-3()9UFn{7 z|5(JcZ>u-1-2AY$BunMI_{Wk-^N*Wxd_F0h_`b6G)8|JOHFgtO^?(1^x;ynt&(lMv z4>BH^x9`@+-bm4%WT}S*2jBp{lO((u@9cS z2tA>Tb_d_GT4 zUF+C9_0!*Fyo)>*Us9A@)|GeS$gNYl;mOth>uW6SfBAJD=)1Ygv-{Ze^6O4bMNzA^ z+?s55w1AnpXm^Te=czk7mzNwZ*lat0U-7O>`w!gMxsoB;WXj@*T2@8o6C6h#_%zuTP?pH6!n5V7~Dms|RZmBs45tjvsg^PVn?yDQPQe|5=HXP)Dy zckbwzyRt^5;=1hhBmB=_X6v`LX7}(+mXG)uyQ*;i1cCg^bviFi3Vb%aNnd1d`u7i) z;B`@s+qV2xzHC)@)x8?e`@OhtxFbO6Z-ml`M^g2xE|p4#dsT8Ty>dq6;6~N5)zJ^* z*4)=IUn}`8pHXnV{s+#An3~|~TU)w9X8E?=Tpg!+%SkG`9xQRZ?{xzhGr9vPj^Q;p@1 zcFnRCo!9wdZtV4%JF7(}U734MGor5GnEjWnXRjT}4te|g<8^6O+nL_F!YfQR6!ae{zJF=og*+vrs?JB@ zwfu6gGjG2T*NPL_zAN&GsEXn3+>Z&Rd6q}^*2mty*_u)IwQK6t%*A#`vv)h+pAuHu zt(Wd@Z)N!X#hR?u^N+s$annLYG;aL>Cokg^4lX^UPeq{a&TJa_w%!GQZ~J@4!w;)36#S4gk%4g)KHOtWdC#z`oZ)`_ zyb>FtD_laXKIP7V|sd#Uh5eSCTR=I(&F9{`2?4g&!7AP&oMF6C0;fxTC#N zbAy3TQb}s*i4*?>fAH6d2&uG5ax>M(Z@kwn%jr7Z`^D+<7dQSh{^G9_2~%NdVL0$0 zz^7VBCbrgD@V+$n1dkF?R^~#(8AJ-+jBMCF$53`fYz9B-`_G zZPTKBbqop2xd0E_fddk6Il34W4$R1t z;9yB!`|J1IY!9B}GCk|+O|FtreN>~= zE~^b^_f9C@b<%RVdWYN3O|z=_SXX+y_-s+>->^lzW%@3u>;XC!{#6t{K@lTh)|?zFyg zU%emVy5DVmCFAQOW|&$0%KcI1lAM(oqjSn&edG4j4K0egzxvD<6rRcoE)CvxC3N+J zmU$i>A2)oOGA(YB=v~Qav5e}j-IK3en6PR6T_>k=ck(Tn*3Z&EvBqrwc4M3W`xci< zSUqdq^4>T6#NDV{KT6c6=4wATy&i1PoK&^w{LPfN37J0+1bn!#_C|^MfsTF+pSQM( zeV3K1pJf;q8BRZNdBZG!$#TCtUvC5%@Xy=g>sjSk_>-sE_jhrA-1&XeOQ+R7Zrr|p z31_@m;K98a+J_5@Os2ny6)bCPd1&mPCUR!3&ym4)9iCfm}*!#!Tge=x+?wfn@<-41^o}T@6r&a&e{$D0t z%F%vjyHibePB^GI|J9brgvYO*te#hUPyF4<$&tH!%G|&BTfK?fEA{fac+Y7q1v7!e zE-Qrkp1Qp~{iwuu_upBn=ZkBDl-tG98CbUadP2{(QkQklv$Ji)j>apcRuol+ zGt54pGWB?sg@ulf?<~Jsxyn`lE2FaBuAK2+=C6d3dH=)IMQkTFTg>0NFul!|caBft z|6_jHZ`0l;v+usQDR%eWkC}Zpjy-!dbyAW24Bay)!MF40|gvt;2s^To{}FI(09U#H7!E)A_=nb*sZeZ^hi`R;q- z$xD9j{2R7b_O3~=%NN5uQ=92rVW02H&b?n=_qpzbX1nd8TgvNKl{_+$eWy0%b+Xa& z#vR#vj|FHIY+Nc@mp6rThE`hk!)F?ouV=oDKcrRLW_7aNE9&jr>yc-#W-G7R)*OA? z`3U!pA5R>Y{fypZqGjTFdEV7Gm&8-E?SH0=rE{J!J1BkH%gD8G?({WhYBJ|UFFRjy=T_O8r_-Km1%B7=`gQK{w|EWvhfB5Ztm~^1yV~Gx>g4IK zbn5EIleguL#!nI3_lQxZ&*$f}Eg~d>+ThN>#4nsuWFK)Mcaqq&sP_I6IY+&QM$+1m-C6G$NhRc(Nzo5 zU7}9k`t{1T)!kjm!K+m3(zP4AEY>QXkGuYedxO%APje?rGwyWeS$yuv)>Av$`uHV3 zzp+t%(s01IYT_P+J!igeXmZ*|$pDw60 zY*=K{xA^F;!X4q4=Xwes`@hF!`SP`ss%QCs`nn*sDdt{A(RS&k2Wpw6rzfvdJiF@N z5g}Ct#!KG6Zl=UP`dGkq`}FB|X->UUukVs}Q|6jJk$H1ck;#Ei-n{ZEZ@;#irdo?` z?bYAHD{+~z`?B-Vc^_JK&6(kHQEFLUDAuGdX6Y&R+^)`%iiP>=#-( zb?sHX-X7mQwP|Nvq8xl~%r^cbw=DJF!*2;L^H?VzTc*9Y^mK`-PGakaly+|I71Pzl z(j7MKe0I@$>Z0Nnp_t^$QcrhI43uR(cxAFh(#ML|mxJf>8?Qe&$z_JkE#IhTrMG`) zdMNX5z0T6?^vTZPrcXp1Z@K8MB~rh8gtwpm=Id$h_wB)v_J1Ge_) z;g`aU;#7BioAm3~={mJFUn5?Ip58cj<7MkhZ)TrfFDNW`e6fH28QyNc?p7PF^4tsj zZ;!ZL`ttdH#>F=aUmPmz@!A`j{PpF@ozE8u^=dQS&_C5VU(UUDrSyhvn|H6Njk>t- z;)6ps*CfB{O?K)#U3_-?5$DBU=8G(mxGLv7PfGdKL2mOtvF~?&ZVA(m{d-UD(f>u_ zmY0L1CRAMdv`Wb$d4~6{o0G4ptl#!->z9+lt0cECQA-zmtgI`8UhGuC_w+-f~2}xqfmhKR3I+jmno$X;CrL58l-domZd!ox1Nt zQHaF!*7f2m^@MgDJ+3+>qBoQ)owMk{`lppnpG&)rUXM|7^5G0ywasTKPyIXlJ~`5xDdG-RTXlg%%!N z#WC~JzA0Nu*pJ0EEqeLwsP~-4g+AxZH?thfU0brku(tl}cNKH3Sk^h>@(+^BJ!j9c zh~B@z@#eyiuQ}xlnHy^)LvE(*^SM>y_Ux$FO8EyCKI$!ntH0G8-?H+^lB-tnyLl_u z?EQ5!Zt9nVn;6#2^Ly$Od7Le9`97zjCCgsOUdhrwn4EpR<=C8YNX>Q#)zbh#A;cL~fIcAo>cP(l*nsL_CtNYc| zjed8dw+Z_jH5Kh>cAgb=x;n7`!C$HpZzH?3{BsG{7329aFSBm5-`f4x{8az%op0MN75dJ27$|j#r@QE+ zy20w&w35$84jFYWk<~ zw7=o(uD+4-L(WWcU%PLc^S8S6{`oxjAFChcf24l+pu5J=g#`)>je^mF3*O(ouV5vy z>p^SN1!Fm(1%J+~2z=P@IKy=Te}lw7-d%c5ju+B-lb`ij^}K#$AL#H;G{;n?gW-UJ z!ioDgY!gHn8d?6^$^L3M(WhjhaIxH;?fp+>BZFV(92NyUaCYCe-;=RUCC`+Lt08%T ze888htqTs^e_OObqEBPlM)n$y&BqT*sU7Nf+V=0=&laY{Gie5VMH0-$790(geizv9 zpMUqzhn+uDfUEsYeegf#jeKmZ42m2t?q5*jVEHxAmgRWm{)loFt?zQTpR7Oe?SM;r zU(WxvRUm;GFWgh?!2kr{Brtl_aNnenuo;` zjeB_>5)5p|GyTte-Ja%$d*irq!BODVaU~BJBT{Y4kO`6JGw`PNXR^haqW_p#~F!QzQS4 zK2G-kyXJnme)3|u{joXU75;r)U!74e#dU1PuO`F4u`jBBIF#1NoBz4K((v?E0iIJY z847=IVETGLz9K8PMO;y3nRxr#uLbEfYeEI>HDi3mnyzvnlSXEra23Uxj3QYZS79oIxV>%E6whj3bO zUCL!qvbba0I)7vS+8a_X0j_aU7X{0&NA7rW?e+Va#kJ`Sd}51rPloRM@^RlLw%0Fs z`HEP$D<-V#Ojz#vW$WEv<}*|RQl|@@XXbwY?(m7nuKZlak2&RAB+k9FaI?{SI#*}U z_ahSbk9`02GURu}`IX&`4s8ic^=WKuMa)%uH|=&17XQk$v8^Jd<*L>a#}>Xy!Cyh{ zH`3q5tttIFbM}q&2JUxP@;aZqKWCrx@dNw3sS~94wfVlAxZ+%&yvqFgZ>RPsUQ%IS z9XaF2k)npe$sfft58iRx`0x7K>01tqGk_9OJT=1$0k|Y zXX)Ds9WL_}%={6g>SvVd*RtRH_@}~kts$9zbJ4><@b$KX>*+T~F)4mg89>i5ItC{lxjZ(fGgDfg>)v8E$^{ z(>dCbx>9d`!j8n+htnkr3vx5wEO?k+X;gOgYlZLhjQ3$T8a{qd)0npPLFVco$3+`N z7X-NloY+@3OU+R8{md<#vZp`vDt#8(9nsr;LwT3}`i~aNKYg)k(>(uypL5rWS5}61 zcbuFQ#1x@duVKlSKhL-$|Eb#Dv(uy$<=>dJ+;0tN=bkhnZCBe*Gw+fp>3|8RR(X9j z=y!DY%}q&vy5m;W4o%;$qW4Y-TkMG|*sG@5T~Z{oO??6?_Dj0 z)VhH|28EjJGP+Ty%dY{C;wyt1R5;rmq>(ozqX;+IqbC zzHK_TGB5F5o_Ad2eD#wiUzgxqz-MQPc z^Rio!S44~7^4^CvS88lECCcY~`&d1BdW<8h;q#lpm(u=nyQZ%4F|o;J-kYFp3Gq;%zn%Y0mxvMt*aa`Il- z?DKKEcK>s!o!a+{*Yfn;6;u3w%Bh5z`#RlBh!hHqwF%n!ajNRpO^oZWE&aVV)^Yc) znklZL+JbTXy>?!UgzN$&G*$K(dEZ|D$y_I zU$kB@R*61|zqooqb(Ls|e|poqmp;`pSwH03rT(e6|C-+aJaAi0!^NZ4T&)Y7)3?1~ z_GxQtN#Ij>Vb4;_;Qpt~`66Q}`&{CYCl)f_o?j}@I*XU>kiqXA4)Z*%PEElq;ad+6D~qR}ot|wVabM@3;(yx( zag*gDcrJMs(n z9uIgMx_^`A`De-pTfgv&Kg`}KeLMT8*WK*kRpA{9RXV1zv!#2#MxNd$KRLpAX3ci# z<7v5-Q+_Sbn&j|xc3k|UQ`)u~KPO*1sUq6F|I-ZzvrBud+DbAfmLFO7J@3Wbk8^i2 zz2*6}VEQzfHsh>0v!*O8`DZD+m?5(K;Z&Ql-Wk$dOl5~3t~|xIr~J|bULi5A;*QG< z_4{8%Jk2rPw#dWE(dg~kZ z=UlU?{+1KBe_q$Ze|hd}HdUUvvomz-uGXXaJ}&03IBL0U)@jb*JK3*pSH#YHudKc1 zgZKjRcwMvWJFd-7k#eu<3{lsqV)=PYYesAL%IV<(-#JCM@5%RfZr1vpCK+ph?H5`08V_G zMKv|`@RB(tCyq_c`+9ZmBhl2FA1l@W6us%Z6&t!#`R-jK-)XNy4@CWDOLzi&i29TKWOJyuU9=@yBk6KeXvmj<{T> z)PnrK0l7l|b7mR-))8wD*m5B4+AMcw{`T-sOLxRPmsC?b7~q%sR>f=4y(#K`)9zdB z;mDUfSNdMVDCMK%&D0Y< z$uv`Mi4Bv>F9S*2dpA$W?TCuGaFcP#_2{(T1zK%|CpZ6act5Mg*R(o3&ur zAr{^9+ApkvgaY@~1T}>JiBQ~MEBdG6fcuv{hf0GT|CfI{HLJ`uzh&3Wh=}KXrd5T) z531+QpRso52A_w4T1(C(wEPQxwvKmAb*Q@SkxPmp*6q0ueE+POcaZ&D;-aLV2VTBQ zce)g@c1E6C#-CRkeINClZF%PMbP>zp=%q2oGeS>#UbWi#VNEh~gr2YU!@bs}nKwFL zxwLHgU)WZ*=It%DXG?|oHS^$fpwNs>@K%1zI^T| zZ&jdZK!N(_tQ)o73%ObsZ4o$WcG|!A*!PlsdDFg~x4HWENYvLAvc5du7 z$>%TbuQgM#WHu`Mm0*1==h;0)n@w%nq21NHKJ=bYy714Z?NHJ4ImrjBuN&+)`_Gwk zXxrKuyNg>hdwH7|Elgl$Xr3yU`1`Ked&a!h+r`VSuR9yadvWb$DedzM^RI+ky^t== z-ShOBMd3x>Yo$(K`cIxeX`iCimNoO|-g21-%a%mfhx~h>ynfT4MK&FouH8&J>-8G4 z)E=yjDf)JJ*TXk?hhsyd+g{tq3pDv_pL}t%zVG=X%Xx83*H*m}omlgARl6$VbtZw3J;pu*`LvnAc~jo-VhLUu*w@vtF|Dk?-SUhjw3gT^oM)d55afmwv@{ zj7MLyZrzyV_&{3N`2Fgl>oyxUUVA0>At!vz^y_NP=e`=T-L<(qdBWsGQ(G|~0SDeB z0slLW=WAzw^8Rz~%VNXH-&wP{o#!Ra7tejP+Gb_`2KHN-b}#0o9M~1sG(VQjqHObi zeV&T-C;!abqOc(3)2fwA1(@TPpHMEWIzL(6>XFU4<@&XTU(fX=a)qyp$({d9>(rxy zK7E~~C)Yig^gYxd`uo)!W{FU*8*^lTKB%v`w~KqW`5rEd^t)b}8~(kyG&l4(+ojLj z%74vZ{kv~j;djwG)tt8TA4An!ssn^f74^=%X|fBn`|)P}>*7TXJ%8u+b**#z&)VoT z^+T7hyDZ0^_qE*@-!WUeTee+P{N4MsK<3gJ{-EjWmPm=MD5<*?;=U}mV1oAakl&oP z`{wO=Ev~!yneC=)1-td4J~Tez-QKsrQ93hy^4)tEpY43HB*-?8*>iRNg^I4GYh9j( z&IcG>C3F5WUD>zj4L|?9`Q4lBd8+t=ryTsRQ1UNi%3I6t2foj#ez0NhT&8LO(z`9>5iY4D!({3 z?KiTRwDU;Zn+@-$$-XENSe&FRnBbEwd~6eQ-HIED0=cEWrVGS^n3*oMC{28kBebgV z%9VzU6^FMhJn=Vs%Z9}vZ1zd*4vYpWyUrY&A=P0fL~UYusT*0d^n!E44PZM&A4N$`cVJ2?E-{<3&x_M29|W<~{vGq3c1 z{b4qgzPGU8M|toXXVJ;8UaS&d(Wlqy=waZ&ykzY<)+-L;Qyf^9eY<4$V2gZe=P&m+ zFRWSl{=Zw=l&Rb7@Nz+d#j=}k%A;fV9q(&eY$AB;)-8b+DXvB*2Z0yW@?6gL+YLB^ zc$co*Y5z@`vF3k|Z153gM+xh9d)-Ah3w1L!^KJdi&T}n{`OriKUSACvCZ|Rd!7PUf z+r)&Hb+#-H`0)32-G{{|eC?CmufG#G!}PKL!a|NO+aC)k#Fo6cbxUei!k1bmr=~3j zva+IXy}G5rBEZI+>0qEe?e|opAAu|@_g*-tVeyNB=U4O_2Ns699n*WnB%11?9R)Sk zzPFCtGV#_ehb6Px#3cIa&StEZ7x)!eX8M;ywv8cSpF(|WU)=$Q7vXmo?s|G5Kl@9z zz@nv$O^g>Avoo_Z6)uP~wqA0`YzTC?@bAX|-u_qLdm|(!iwX#FI4p>tUXoxS#Ly_a z?(+K!lddu@_)SWs6jeBOSt zWj{-N`vL)(3}0;df9w@EF#fTHAtS@;&b9d z$>$TFYPvSX*?iu7?AaOr`-usUZ_S>)s8oze>Lquux9prLEU7#{{)Vo7oSjx`9RK^^ zQ4us;`19hFrPl@4^@X`}Gjl zkHCtTkB(3H@#JZKt?sn#IiDWC$<;a8yZGzmb(&JoOa=V6zYoyJv-U9Ax_ZUSi}%-g z*EyW?P`H#Je0{a7>|JNCv^2$g^SGX#kNh-w&r^kYyS6421TI~=UfSUD1&2HTqE4m- z20yucOxs3Z%B|M^=$owpb8r6<*u3?^$4NE&-Ln_2`ywV4sw%2t22R_lw1)SM; z#Gf5or{6mFDNEd@jcc=acAVdmF#GR?jl1@2xq9}R>v`QBUI)*#pDfy}9vgS6{7lo< z-}i!y_J7RySy_4POnK=y7p{kwv>Ert`lrauzw#{o>MAu+j*>0Gz12@N*Bn33%wm6L z$%D#EQ(O)2H=i;Ndcdw3leSIlkw?v3BSy6fCjTSll+Pcj@O@ zK~q$xFpB$sdf8I2)_dzoc0-wS6*Wdxi!NoeKARqYV#YKt&yC$&f=_~G&71gWiOz(2 z32l=HwlC!r?mD$sFep`C$yYmi{8d2klbdGAhmJ)|alBK{^Ip&Sl$K)O`gKdRYsKyw ze#)|a-}@=~r}l(zQP%U<%iK|X7xqg%@Yk$6QBRDfSAQ1QFL%wED3+QpuuWmcad!2b z{hE58_V3%db)i7-Q?+N$l=8owbKyFc6@1ypR%E`w{nygx<9~S89XM~OxyyO+vh*Og z=PW^t+6%5eepYKHaFN$gVsUJ+aoxpq_C}Gp(uSQpHf|zb`c0v7QT;wYKb)VtXzk^b zdn!+6tzDiI@_+4&!@a(thh5jzt&QIPSoo_)mGVBnJ1;j!znEJQasI2CM#y`T)qjLj(rirE= z%KNyBsc}ij$35-8mUEulduE%{B)%lp-E$|cWBYtHds>=6m+thk=faU~eOp>)?LXa~ z;okIYFKek@VRl4>>W#Ezop-k`ojG&*DXCS@_Z0a!Ck9n7ZVvwyqZu79lAYB*+ed7p z$IqGPL#EGtfByT#r+Z?|KWx#>_R_h1YT_M1zeyT~I~LDbC4b;^>%UmdwVRW)?E|tB zey08DR$|*)7J8`b$hJf3^PBa~&HK+W=fSS*x$ooF8UNKN@iF)$mbYiM-=ys86Uu){ zU3k+h@NlKsk)KaKm#SB)@11G)%tpCx*BQNSHa|AR&lm96Ty}3l&P4Ov!F1WjlXYVAa?2Or_T@L@vL!wf=J1^7fNO7m6GzS5@p% zTESVgI3^-aZRgtEpRTUvF0FE`-f*gGcTVH0;^`XueIlpM`=M0LZ&r6K{7~qVhc&4O zg1?1(Yp<$xnf>F-n=Gflwa+VJ+qTcU`<{2r?AFiy@#d?z#R}L?o!vWA+I#7J&v28} z2YFMoU2MPl+^onv&yh9VUY6(6-8U-xX4L6^<1Ra(wC(Ka^1?5-Hzi3&Y5jTr;Z5(4 z9=1GA{wo}&O~*D!FIeblbzh4icC&R|{yKA;-CO_h9F;lIcsZY*<<>&V* zz3P;Iw&tHeAdgI`CMK3*TU<8;OJle#$&CKU^qZjHRe;b9^YlSzH8HWWwH8?IX}B|7oT1_ z^J$)Z{=AeO{m~QG-}>e>V_v@2`-4UDhu-qpmDm+ED7HoGrbkQt?wWaGZ}h#;npsWT zXL4_9JGJYF+3F*1tM?xAT-H-QW$E=fJ2h_JJG(aXmCxNjJ6@bV9+S9#*`h7kk1rH_ zUQ}Ov;(_7C*fmlYmg=*w*u_30@l9~)cZCb};iVHV)H`2wee1csx+UX>oT60Ut;u=c z11^5B4Kb0~s?PX-=Aj0G`Xu=a>#+{}>g&Pmg-(;L9>&SoDq_A|v?%71Cpal#X5?{BUP)JZ%_K>IWNAb4(dpSx)CP{KIH8=%IT+dcuXmgof zD!?Lec{k%vzlJuY#QpJi{|ie=yt;qmNXtz@j$>cy|5a2OGHCNu|C(>Vw}bga)Bgin z)%r$X{xbypS6Ej&i;1bC<-4pz@&?u;TOPkT+M3zGlCvj&GPmB zRlXK&_jiRrKRyjf`JA@ zi-WAlPdl#P>o*@(xG(wYw<|wO(tMjQm!H_5*^v06nfdI7hb#V<-7?Uy7I^gF^j7~u z%YtwJSrXg-w@k1PdVTJ_r$NX32l4e@1|Al3-j%D)IB5NS$*;yId}|}+7V2%%>@F*_ z)4z5gROOK4-n$*yIUoJZE%jfYe)QHV;@pwT-Z6#}Ydl51PP}zXBE!}_b^5=G8O3fq z0s`9qw%T2){eAD-_P95TxPx!sRNv1e-X=3c>K(`YlpCuidF-sqVL9I1Z}f^KZ0{z6 zNfk|@$Bi83d|h>0xcpY)t`i@{MS5R%qzXpHew%kAB5=>|>;_>^=lAhq=lFY0SwDNj zQxtyXjmPv`J}Wuzth%|cV!M$2j70TKV)lns)Awe7{#SDDXW?=mvyj;jrI+nKD0Wb; zHV^?R=aE-xv!ijARPX? z^qgXo+5U;AuC&^H*s68b^JH}8l%yujsaYv)%O&1Uv9L+j6a3UHx#_mt1&tH@-McQ& zu3ol2Mepu1f19-l3hS>;SktesAQNyx^?Fvk)#dZ|k7fOLRNol%vRR1xV$jaox=y#F zxy{#<^wd84uVdnny880kuOHE=Kh-NXxvtq2=h}ML(zY;l+lseeuA2L=nZN(7W%l&c ze;cMY=$CJ_$ZA;Fs=8_0H%0AhccX93OfsJ_Z_6H!>^I^&?yM5=|KwM%cpp+-9eR3(>;5Zi z_WSwvfB$!}GwW5;uc;0@jX27bZLj{v3<|Qub%tlyF_AZ{iKi!`)f+qwN-q0$-3%De%#jD zX~uh*B5!TIvikGQ9_jEZ=1ZonK}RC)e3Nl68s5eZ+*BBqsUyz1M$y}v?|Tz?c=tewtN^ZAO;M@^4mlaHWG*yM?O!{ZAZZd|eg9d+y&MZpJ(Fm;8&W`1>*9e@um9!-M*TADrF@ z)(ReA{v|Hp&UpXdRn>-bLJkl1&%Ax$fy8$2EAN8^`A$Uro9g@UzCT|jOWte=4AE^_ezUnR^z&RnhezC1274}lGT+g;rR?2Fp;d}mp<7=c zyZLC>j=hK8KJL+%xUt}u)m)*?)^m5gymPeNTxH8s`-wl+O7q7~mu8E7-^!m^oqPXn zd~lUrb4AJfxnVODv%egvx-<7F|4ja)4NCW7MV-Ve?N`dpm;S=Miha(?rWwqVDJ=6$ zs!#Y9`0wxUdwhBE(`nOY?5S4Nl-60naK++qU0R^g4<5UlH>FE*uE&0`k2zrP{eG>- z%SXQJ56l+bZJ`<#cK`E$4BK57#U1Ove6n)F!L+u^`C5(aR~0)M6`I(&O+J7bi*m*H8+cW;6{TGxja8F*j^3pY-PSu@!X^MiM*6nq= zxL3fy?Y_+~v$7vaeyNWNR|>Y;m7V)|DDTkApcih7a}3gR9WT#%plzIVjiq7A-unvI z%M@1>9QAn4d5&kY!-APb_x>E{`g<&I{>v=;b}!b|4n`-7moTotT1OZBgyNKKj1qeSJ;ZBq;yugd<*$AI$1_^(1f0;mJDZ z_hh8=^Eb0G>YVSixmk7k_9F9Ds)-*gcdg#`a+6`4j^shv=*LcT!(~%=-anYkkhfpl zY;|q4r>E8AwJ9?1eVFh4yl8b|@1~0n^8S80@nIgvyo?=!-|YU?bZfTT2hFXl zdtZu8U#9+G+lq<#NeAK{zSY{WZq}k_KLtWum)~W*HtFAWmBq(mKx>RVO`Td2v{uzwBOJ@h3*6ztSh!U-&DEGg=+^%+L7CJR{IvA=ZB1$M%*I*)P59f2A`8 zmlbli{kVMaU3H2?kS!0FZBWYoX{S5vVsmM5B> z3(6N~Iez)@q0n5Ev%lc!skJvI$8Qagju*JHV~PLFd7(2iV}#0%CAMj$eCjk7elh1! zM8wZux|a-UPd>Q&=+vg~ADC|@lzo1-UU;FT%;fX8YD7+`vM!wcvrJ%i_)F=D+s-L% ztlb@079TtBK$rQJxt@EQK4vD*n^0vGaDIbZgZ($pH!XRZ-=9y&4ByHauuk0Kp2cn{ z-(LrotbbO2J~QNI%!|j9yI%L%mhM{(vWub!I)= zD^pIzB)#OF^LUGJe~Sg0yVKy0<$%uV~z$MRLEBJp60W3fr?e@^5atu z>8)UxH!pwBrX7=YuTA1u=ruzl(da6#bL`ZontqYzIgHX<`7Y0YE@;V{SUc5q&L4{_ zyKilp@o7tozvo$pxJTV-m$T!;9vP)>RAyN6M4`yV&J-5|7_Qb@uE&4xm zmbaeaF<>oz&K(sX$a=(m&ifhsN|!`5Mcyvka8q`&>H({H46k)9=0VG~Tu}deiyLtCeb|ocqEypJdZXH9S6vCD_$qQvI$Qxj!vWe#p++ z8K3OBZ;_DhS?8l_{Tt5wUVGg3kqNJB_fj^weaCw3O=lR3{`nKc^>&s2-<85Eqz>xc zZ#Uj&TJu?c-8Z|GzZ2%22s|i$Y5$S)qUFi67*r;{&VFSltSDUazJ)QMV8MbvujXo> z5a5s0O1);BIQg`Uq51kxn?>Ben!hOuFrUfUYdd}M{2LFeYY%_Y=F?Z+9_#O*E?4d~ z^W>s?#_Q)D%+f5r7-#u;vf9PVUmnVwK63w4R8n`Vd#-=@j8A-`yN&tJz1n!c`nQ6L zvBoBW-;);{n4NjOb)P`_<>fhX$??+GEK2gXTln^G>E_X%Hic(L-J`UBz1I}B^1RG) zs6F-jt=#4-U3Xuv(EIv!kHj6_fKd6~(6rP&*KD^jzEj&;d{tKM)F*|$#G}vW7o_fr zsVR_N#W-)}GWmC>*1y`teectzEr}n6g342_oE58{T>WX!bm3oOQ7>nuixw{|>HZQ| zry?JFq{=wbcKgmL$KJ)*30+zJ*!A1iQ>WN}zEay-A5}B;-s5fCV-+{`*M|RcYpZ_a zw>>SqVC~JzWp+n*~)1ug8BfFkk#A z=Y7%cf46e4UMO_@IwvYpKkr|l*T>!Z9*^@(O3RL)DK{w)|4~rn-*G#^oMrxwS(Bqz zeXuyup*O*9^5?^ACrS91gmQMM; zgvWZ{!fmhe*00=nZ$clN*efCKw!1~M4^56;Q?Go{_GMUo<%GAFKVDxEt~%wx)oW%) zMAQFtXuh10CCu&rN!6}8$>WRGPt~gYAG+bwb-%V9kL6b_jSQV3nwmZD?LK+yuOIKZ zzqYu(?z@;=<~IxZRNbRRX{mdJ&F-hIv%Bv*t@2Ed@XejdJC1GGy`^Z)6I02zU*j@& z%idYe$ZgC1B=^DJ)yls=nSJ;tr^E8&{)>Z7e@^EAeY*HlzJTh37tA6&&0)7Un;%p# z2~2qL{*xeI#3h%8@2X}G?%$i&b>n;N|KAZDRSFWDF1$!6WtOL~VC9CoI;J{3s5>1R0CZ2RMH8~%K#y6$mt zZ;0IW2S2`5x0QD?y<9gxX0L7TpIyr?epK6ZEODp1dt*Y|nWbNHC;fWhvwPxRnPB7h z{~y0S{WvSG`Mb|kCwX~r|DEUmUG96_^P2r$`}WtrdwuwCkMaDbCEC^Gc3i`E#)7Y|BJGPr0b#cXhY7`xvCPhfldaZ|>z&JY}=& zFU6MFA7h@CV^?zS&9Tbq&sOPKD8DZB3i8{_Hu>}A@QzBOfWolWdA=X7vz%4B@6$e+ zb(&gs?fy)*d6s*g#J+esTj>wUe{ z=Ej#x3@;aXzX`4re!qM7S|izS8{-t;|9Wcuw|VN+uyv7v#vJ96CIw}mqC53}edo86 zUj4pyO;&wG>C=fdyrR7v-Ab=+eO~N+?(FAot@9QSR!P3g?fB$mbA48O{~7OJNxy%V zUbM`txUguex%ph<-HR8x&z)#(_4=HN>2cH9Y_YjUd`1c}ZKtH)M}5wW+4sn>`)sCZ zP=;I1ve+Lox9@n)i~JD1TITfY+IjC^lxv;xFT1zcI(VP##&fQl`s`-^{q?l><+fy| zJGalp>^gq;_otMc(vzP*PP(Vv*v<%W}`%&m2kHuQ6q! z$$j(i;|^wD#eUzJ?Z|xh+%BIdGp%Rzl{{IV;rc!B_H(O$rE|}{5|jE=DY!U!O>xw} z&PN>TZx6KvcWf*Do4B*lviI66?`_T&x=UAv*XpvRc3Az?4NCzTom0m zv8r09?ff%S8M}{`=`m$*MU(utY`gw$$8+Vpck|{26#QGXJa$F>&C;;fLC=>fU)R4F zoni9fY104c(#`2=8hk&t71-XJHPPa2#6~&oWjcp`&iK4(yWed2s#x=@b3!Zj{=Ids zuVwSz$n_<2y3dK8S@$)5``uq}yZ)VCyvKKb^?QR|%SHP8b$9FPFTJ0)tCApIZ?=a`nfIzKjxTQe#`!AYZ_i9KbYAd%YPw;nzSo^154i}c-YX1n6sx4j!TvfNUxU;b;(>p!x)@4j|^78H`T=%wnelh4!2HkW?6 zw>)~yvcgmA>Y^+kdF|fRlNgfqSkU&Yb@Q*2>|d&;4Y>}Fetvg!OcvP^ zR4o6RCDyOb=G);E%R@72BtmC=Tl4g`PvoP-ck@cku4*4`WnH9dv?!5LS4~IZze_~J zzu1-TT!lA174@t&kEE)%?s&7rBBo5}tzewkK_|%q?>SBp3GT;35@i^rRUAtnr7o1X z`84mz{mdrC>J~$uvI3!F|BqT9O6YXH@?Za6bmn7X2PD(oa|n0y?wj4GWpGfq~fh-Oqa=7ZSPZI+5WyP{Jz}b-J36z z?701`G;hUj>sgDQ8Prs@KHa^qBkRI}RqgL;?cXoBHMcs_-oNQUv56%t?c;LE6co}z2sK-d@t($ zBfYaPYFpRudKRc9RK`*_XHM^zO&P(vMf!5BOni%5Z~ok(Ir)v=4*rwp_HsGs=8;^y0_X`ValCivEFtJwbV%+6omJeWx$5 zbHAm3e&)`zhmSANa|yhC?^kTskrTm{)27eYy;HU|WL3_A&1)}zTlUp*@l(Nz3lzk! z=)Zf~@Kc;Mx^3-jk6o-ic9M%LgOYykczt_YO|?Ocvv1M+zmgj_ZT6G7Qu#Ax=rzSTWHx9;-=t9=J&9Im!HTzj{ou`s3h8`sYAiTYk;CeOC1vG|*2e5r{Fwatru zyH%#T*71}^uWZ>&RikxW)BgM_kNN#t^f^nTds4Ld%T;H#%NHCCe>!>Zw>1lkkKdg) zOJ@W385!&J>mt7HQx9I}Z%gf~HVS;4@jF2_baQX%XSSK=mb?$08S6VEkL@n6#e0*T zx`Ch8{8kQG^~d-2#Kh$9({_s4S$!$WJ#7AXA?IuPbp?fT{l(2Sxog-oEcAN!h5uc# zN6pmW?*$Fz)4N^cf6t0fe_frvcE9cQmz!r_@-zMUXm)Utm6c!Vn{ACbPp_@9cyIo% z_`_Dw<9^pvP2b$OA{963>F0vZ|6JVX7i@FV*?#xor)SGnC1*a4tLc!tDxlWCZq?_g zvd?aJ7w%C_UVAg!StmDY!dcDLCEaV+pO^N?dHtY{bIQc69x*pWqQ1X8-7@3o`<`Zf zUCZ=)S&43U!sIq3Jlf>z`d$32QFSl(I=f$swnP*LZr&X2;`efL$xlza;4SSDuWT;{ zpD)vnC=5!!`256+xr=49O}KZaoh~u+>HRW$(T{aIjy-eu{W3jb@9M*ys*7c-(ocQ$ zYv6t|4UZ;gT{%|SXM_}JDzdq$D!sfId1W&jnQ|v zZb~{Au-0r^`Rv2?=W4fZJrr#{b9-w2nMLJ)&&4VI+H=;fZgDDm`r4n{56XK-KhK$S zDaot1xGQQ`eA|hMl1-|4o5T7v=7*axpBI-9w>FtA;+r5p)B5DA&&v-7Pq+CcQSBLd zyt}m7eNOMY-B*_T&+1FcwD+}Deye}!KHqHh^S>qb&rY8D!!_E9S?l<>IhLQYp0rAug`pS-uZa7zBGf36d2y5ZiC-oovYT9+~zG{E?9t(Xnhj&a1bTrulroFLSpwrpScEagL zgphFC;T;>|pT75t`_RB4f5d@zqOFs=XxVdNo;uE>Q!=@Cf97P{-}27t+y8vlnGya< zritbM?DtF-=vM2@+uV2YwQfR7?;@rS?u#ls%^_`vg%{Y!omAe*)YZM&^?-&)Oh|5> zvc6-Ym=~kwpUKk`IJgxr=$Z5Vop$5sfzndu0P#e%xflLFnwu0*rLpMu9_Rha-{)-+ z`>XMpnUjl;@vb1-cL|?O1`GOZIo^GoS0ZL8td+3fkiCSnrhrqh$gSFQF1v(11W!b6 zT0LR&q5vMHCI6FuF3k8FH{H{fy}IMVArtP!8XLFlPnzjqD0VO=w|k-JN{b(zV(OX+ zJ0E4b3boD8EKGAhaO6@~jAqH)ZQdL9*ftj`{AcD=m+|Cn4q19yd1Y^ncIU#*+|~QC zzBUHy_3Ya!J9GQu`G+*OEIIMwMBUsOXP5t!tXpq?Woyl~YqLx8ziGT)ziOVan@h#I z>HRaRLvH7u;cRrC(5`adTDQOX-ucP*uPt2uZKcBilV5#WHqYBkO|QX1P59hxlQ)x3J1m=`yWofXIo7SW>r2)@ zdv*28sy^9gQoBx-cR$&Zp3j>;&34C|y1f=h?pXgh)cc2htL}Uw?ONs2cGhO|D%-Yr z+ZNScnpbivSk-vLrMrt?z22kWrzZLQ!{PU~`P2L|CrLOvlv~t(3GTM}u_ySIaLH`B z{9kWm^Tdn4e(in}c3ExphTW_}Uaz<1Y|ymKe_Sc&xpQ%aLD`(yo{`HgFWon(f7SWN z?Q8niS>;vk%kSl@NFS{4iQ83xZ_Tj#aYhwAQR;ZpafAKe^)4Vrrl4g`}*S@ND z-ves)7FHT-KV~)^GUDHEBJ%Y?;;uxs-RA2))dwftIbU#Q;`DWa)_FH7MSH@hf3kRZ zHzV5h{H2iKYg1NKO;y@zT$*{Q;okc*ay;`hYqIX%*(<(fZ*6|B#H#fhU;NruE_s}< z{Kwr{mQ`-Mf~Fn0n!RxM!iSbocCY8{nQQPWNGSZ>1p}p`_p$~9{FtBtG&fN{T>G=2J2_^MhCpId^|D7 z!Ytx#=lpHAPM)x9?EAUl)AYkLqknnCaz9yLwWRu$w|CpT*!Sjq?%y`@i}}aC*gW@X z!g96h#$DQ>%gW-jZkq_-yd7im^Tf^<9$u5K?*H<^Y(Bs7vOC7sIm<<5w?58#_V4Li z*PrZjN*)Tb=RH}&_mT6P-5P_(f%jG%Gr8sPv$N*X$&b7CeSi1LJAaGCJn5$^PS5>* z>%hILKhrN8x|grlpK)W#?}u|AS7pyV&oa}2Z|m+AH?n>2{bD-&`u4jQr(LgA{bH~NptJOXH!a{SVMZG+0))js) z^U*VN^JjaHO$)i2`I{}9cTGjjmi4*^ixoCkKfkp7_nzGSYd6O(OFrAt#6Qz~{>nM( zOX7d7NYCy+`F_3T`@(V$-m8~pslO8dvdM139TPp2U!7cLqc3jQo;7AR67zP>io2|O{y^SymTf@~?W~%Ms+Vrj zoq33>v_89Lx3agFZq@mZ(~RAZNxw+7@m03hz5H=fi};dwp4+?bMr?BVKJ8EPX34(f z=U%qoD(9Q5G%(uuLdCG;{O2F19gDBc{Sj1MRs8y!_&)ilO_j>~P2T?t+ZlHGwoPc= zq3H6^R%Kzflk2DNdcXK_EMr|jo|g8N4F@Yu?cMC$bM?#i{D|o@1S>P$Z*S-KKg~1M zw9Woy=o&+{`MXcpoZG(i-BXUG4)(s`$%ki8Ub|ku;{jhypvRs7RbKf{Dma3TgXtH$mboH~(uGD;s-n;wgs{b>dp3j$Rt(zrL^7GU$*400F zC%>Av^S%DwCGNh_cKN;`!T;{QEW7{Y`kuns!S@W_ZfxrRytY{Wc>Jt~QnpWme#O+9 zUfsCdwlS{t(UCGGuN{gBHwO3qz&b9J4JFE-c4o+`6rha;w+-7f6 zn|rGdN7%jnedT56&C@nL{4aC3SDpGHbnUlaU)5jb+C5LJ-|v~lcv&YWV(a@;WvQ+) zWj!1DU1u!~5t#1y{I9%Kz9#>leSd!+do`!E?eE&~lsEOO_PxK^aA)$*m9vigxi~Xl zt$OyIsLL^XUoYgXNnUvORL1W`lF!>kmi&@Q@Sn5u&xZ-#xlM+-W%qb z)^{#{Fk2Otm_7BZ(cVdxyArY=e*UuO>>t(X>9&Cpak@uY7t6E(M< zytSj||7rDq`ueASEcx*ykJsWyXri#uqW-(f{u(dc9+GK25w{*UB+ZEm`a!a1s z?x-_NKb`UaH2aOizhn13U!o~lc0pys9Q&0j2mc+(Tx{97J=pzIe#^VC>Sfn={J63G zX6fte=XOLL>8cTVye{@<5&!X?e z%uQL##Mquh$L1Y#cXiM|Dc2as)$d_2=VYFz(32hsV||veqa0I?hFFyUoa4xHpy7?+ zlBfLV66Ub79Ek~4Tyt(W+nUWM=f1MiSt2p>D+_DX2}x$%?!!K|LWg`5mwHUN{z#$m z&@R50+HPm7F1`5PY`h@7;`!Pvbsh%B)r)vKxEafnZ!G0V|L^$tckDTVSxFOlPAM=k z+a~|gm5hlvkZo>|>uUL1SYRH9-)4=DB?p*|XHFNCb2MysjGdqB)m?OL^5;47a}))- z+h!!5N)XiKP&#n`g3hMb9CABeRQmN_Ft1-QkBRZ32-_Sswv=`z``euly#iz9Q?*~2 zoS66HX8q%hWrvgvE>A67kUe+D0)b0U8zT~)3)nIXTOR)*J$pa*^sWCJ?Zv%++sm7F z%KR*uIYq_gT}S=0)V^6BK{2xGibWf~3F`*0WIWiiqdLxM3ELO-sGgRY-1UWPH~x2& z{%ddb=_miW)(~9>eLVu$RU*Q&ju+;IZw$rEgX9`bT`OEB{>gw6NAKw$t{P!P}-QULKDfI{co@ zdt|Ztz{TR=S?=>bkDVJ+ZU;OrMm-zkq<;pvy zY-&Zbt@BLNZ@t+R{Bwt~+S`_(L!D)JzdaG=`uk$q-R|B#>+Lb>r*Ch$+_l`S?pF8* zw~t>wPx?4%@t(grzdv+eJ1VLk7G`-@t1LJ3@4X!#XCE%9d~Q2`zRml;iWk=1SCx%i zE%38DTil`lIi)HDpUGG-)L{&9ZLl^p25MvLo@aJ!C~=~Cq@X*#9nmVDh- z9${zf9b_l;?ZuYoE7tOH>iYHFep^24Q~awVFJ`~XTJ7B>`=Q9=lejx~j>Wr3QHfra zbM8TTwq+rgvO}U}3O_wwaN&2V=wn|u6V)~MYQH~enYi8Z_WL#6TYe_^uFA>XmU}BJ zXuZIl``e11t~$0aoQ3oArRc@U_v|`ve`x(3D8F+4(&+t#$ChOpuAF`DOV`J3vlc33 zTPn{yayDKn@maq2{9R|JMF##lb98%vd4~5F@1G*m4=qt#o<7a=N#9|cmn*s#PYs{) z{N3vBvHw%r$*&X%Y8qs zFss{9FzL{u4N>32LR*)bpVj*9_FE?6XGziBl5I|N9!wFMa?tYfrF(@Izh9V&7Wuzk z_iWWQ^Y~BqSaRgEYD+yBEti;C9EvUWO^N!}xVLI@kkSd;kNUS(vxM=UHT0dSE3@>X z)=F`=V_OQ!5|Rtv34gC?UAy~n)RuA+f88rHfBl{J>6^|~ho{dB(^nsuZq=k;>Z6wb zrYcipH+Rj;3S4&n6}C72@w9j2^ibX>@2`oe{#@JrOjGZT{?7%=ls>kc zSzc^i+|7cw_Ygx@6u6M$DLDrZqBx_QTZ8G zKXXImrzf?OS6{xqd6CcBijbeLjQ@UF)5LX8cEb&+d28Mo-TL(F_r9&4U$woMTGfBv z{?!Jgu+dFsohUp{ZKuByFjxl`jZV=4KkHWgQ{O`4EyuC;e> z+O_E1YqK`GnH%pt;P7-wX2Ib@tF!ml)xQpz_4~w`+WUJxn#FmHXG}{%v-adX){Uo*1xCem(DH+ohT7E_U|wCO>YTFJb%Z z!JB*jQojt&CuGkm(*GS)w7Pnc*UJOTF3QVH37cZ~r1VlZ#4S#=JM9UDB<_=tM>$39K4ZwQb~oQQh90U%nGKTA?2rZHr%u@eg9~6 zVgD-KoKyL~{1dLvl$Tkh8Nc*XTiWdNJpG#+Q{So7OsooxAl{vfSvCw%a65O%saisSaogI-t|+|R9{HH$WT2iyM9MN=ISSrw?DCZ zt+nRcEcbp+G^bd>joa<-Pa8>f-=4$d_T}cT6Pk$=PR?2Hc1u0U+-=M2`)AIj)Q1(` zKD2ws`t9GhDf^#4)Mh+o*5-5bw!QpsW_eJS+jxTd-($V|W&S&y%ssvCO4R{!$ z=gL3+oYnU$^sQ-E$h?5nH&=Wa}pTk-JGT{Vw-q3g%{{x0f&^r+x` z<70j2U~7Y)v9kA#guc|6-Q9I`;*69XLFWu*7nNN*W?NOYyY^q>M!jEu%}jhuZ|wY& zxn)k?B%yhwh3ix6PtUq!=M|ZAxA)}R`}?=uw!Ce*^|+EC*WxG3X8*{YuwQSg@nPSi zEz8=qlawo8oqGEG&pVzMmrwVex-sFGxO6{*bo5RAAgh}*+<#5mBs+C68{c2=SD%g3 z+vj|o6k{O3U9sn&*4Fa(jt*(d6P!5}HU~STnV#hQD>?J1<&rtFvTN(J0}gbY{H6WW z&ScdSm-TUFe%FuPxF4DI{onD`J+VCpi~`kUz3uuZ$or}LdNZRge^t1=7ATXkF> zp=YfoM*r&Kzfx26ZB;3A*p_3x8YgWxIIu=qZw}X*5M8#wjWxmIx96RI@;sN{9o|-0 zTV}KDij=^-Kc@|It9|3oz1JwX6dUlV!edwA{e4_lXFW8zew_8MfX{iY=_lE;vJS3z zsr|G;DVqKHdFzh8wNrV+r@yz_wM;DH&(1s6 zcFCc4iF0mKkb-XYx9-1-5A?I=zicRZzs=h3g3f$7qfXQG%TA5ubC~&_EEAk5XkYb{ zv)Q+Ia$oe9eWgBCtKR>;sJ+3LKgCZ{$3^$-{O>`tF6}v*kUjDI=g(H(PV?OJTv7CL zWrn@gwf#By{}+3yFY@zz!~Zbx&+(#XD|ZKW&zcmsePPvBXYpw^HWPj>{E?gcI%Mig zMUVNV?CVzSUvHDX;aJwym*>@w9^ls_ddK<`ZuXh=x}Iq@}Bc@vldM^&%3^1 z*OP|N+0Ad}_nc;Z_hjeU30doN&Ck4#dLtw5WtG8fzCvuK$f}~td581nZ`{o^|J(DY zOtWv*J$Wg5!+`U}anS|xTMsNNIJWFn_iUrLcV{1)A-2oo`pc3}wMIo(K9wHdKj&s$ z+7YFSKMyOJmoChC;2b=)I+8*D)wC5tOfrdPk2#j>&HSVFWu`Lq=jze-_?Z{>DBmeu6gd_X67|2D*0~ zQg5_%?TpzzTdRG(*S#k-FP7K5zx(puslR8;{bOI&rKZhm?_IB4|Dh>z<71uU!dv6- zhMkdkd|4#N>Q|iihj|9e+21h+CC9IN^I86kRPMs*YfgUbj}jHX7-pKf{e92v@6y+; zOgYqS{>A;g`nurhqxa?0r%S7D)7i4w?{`go<%R7m%{yP4uM*4LYQALe$~>LhpZ{jR zd3xmMtaFp6wY)C##*_I%|(r!DBvVQ;SrDKF0KIT{Z) zYN*EqGLxw2*Rk(K+i z57c=bsVd?-7*f1YWucdo1h=C^jP|4yL7ouilV{AFJM_#0gBG=Wh4`OSY?&j-axP@g zg1H*|Ex3ZRnp7epu2-`h=`m72su2F4EuG^a6IYi(*11K6O^$0)8#;E^i16-noU&Oi zbkE;`$hX7OifLaor(^38#pgD1UIpk zx+g74_X_dnTU1}*rl9jhUw3h&!R4s#$r{`*`=)iuxdhu9%=;-{~cRVrLG_ ze8_UdX?OC>MeVC>58oF%w?)}QtRTqcxueNJ8PTKzl@nC1d=+-;n0Z`1Az4Iqfd`}G zMovb}12;6{4=nsCaW0+PWv`ci!G`~)-U7^Ow=EA%Oc3;$tLc`I@Lg$lO~}~~eV1bF zIxoq{bt&6S>Q54pXRSZBvqsA4XOh<27xsp+yoUvzxi!6$dEu8lH=g+)+o4_eKCo7Z z2S^-!nk*rn(;(6N!PBg(SWvEMlVOWk$IcHgIj4QI-(!5e!bejt;Muv#4vAAT#)o6= z-=#&g|FD@P^g)16{$PcOTXCh$99@M%yHkz_lK!2sx@vsjmAtYHXWA~|HKz{jVUBk! z?<;T#SQY(sjm1gzikKPg!8ubNH1Zz|G&}WJ(PaARqm4bTmH(BOaV_Mz#=uq49%*8n z#?>6SjCHm3n$3oKZHENpkFyxGCL6FX`e`74Fp+Wo6NQcwUp%>f2~X>~B*4x7>{ewm zv!S5|+mrr@vGY}bY~QxnK=A-a!bX8k0h88ZMIomOnVz)Ei{vIX{cBme$j89dKu)MJ zqUY!$k&eU{?<_r9+KX;Tupg^n;TIIJ@Z`wg>ucnYeZ-Kik+eeOi#m^}s+BtD(W56%c|x?40Mhfh2?YdfpN*`E1NiW2zFsIdwhdbl8mOK7L!(g*g5D|vp1xeAv& zPxDJs`E2?ie}bO4XZa_-M1$GqmnE9be!%?oVc|}e>1SPcTAX=&LB=H|K~t4Y;(a;W zv>=_Hog17C5*GMmn%xL(nErlV`x8NhX^iXG7T#oHWPilC`RI&`CrnftGNgpAO8)4d zq1CL{WMqCh!G6&Uh1rt(xgOsAG9hMG%ICr^mQK|R#XOHcXnHh!-gzLK>19XEk)RLq zhM^Dm1$#bD;J8+q%Db;^<-HfvPH`ycO+V~vDbvE6BlfI#2S;DAC!f}XPmTTJcV|4X zPg-@R?ud_iiqrwagw+p{6~r#}X0D!_*Y@c14H3>lR;DTJk0jPHXz-j>XR$bWtnpyi zhrU0Y!LAL?M^^apb8c?fW{{lk$)>#_T5l3>S)E?1uuPZ2!Mc_QHZ#N;ctwxyu$iTA z^>mukzm}Cs2NWOqtZF!*5SG5I(CDyF!IEmdNlDxd3>7sCzH0P0Pqyi5ZfXc}xFErp zyeQK2s`7;;@_U4Nsu+~>L@G*WB{WP+6l*L!@5*Gn)KbOe!4!rS{PQ0$XMVVuW5#~y zr$kfNE{`YuKH|q_Oq?3AeCZ>f<$}R^PC|D-PsovR-KoL*EtK(xwuqC0jCpW(E6B<$GcxPug=ZWU}_TVI(x8^V}5VZP6^+lj2Y*T|B&g? zU*Os-`K5n`)`xb1<{zC06xv)GI2APxEqa-k$n`u+o^gcP*^%e0V8a3N7d-v^n-%4R z#TycWrhKZHMrkmx_jBJVCY}OeL6oFX{4gF1BHu-n_ApvDcwSB7^6|%!--^ z88=xDKJ8*-v1MHSr4Iv~4%+(3ZGp%YTwtQDQ!~qQ!iL!XDiRfencQ z?TzVNKWYNs_kDYE<^}uviu9YZ0mTBoN<3$Hg45fA?-oz2al4eTmZio{zO6C4F`$dN z$aa|!r%U>xd$B&tOUxadGQ_+Dr)UKTi`_WLDR88rzoB96A&UZ=SoipMPv$xwTJW;e*U`?huA^f>BXjw= zr-sZc6B5=6=qNNCUS6pnE2vwsbc6k)^oH<8t5UWfm5V+{NUJ$KyKX!8VB#e2Neagq z{_F7?skIz$RhY$XB(T6Rrb+kI@A)5$O^kb27Ka~gEKi)UTahhcMfL7g4K5W4@~M** zvfDl6rWa0;(0NcS$me*8BmPT8_!6TDe|GP9cl~J3qRaYq%ThP-Cln-Q{5PHyB%|wQ znBlcV;!4(}f1>CAORx2~{Pz47mC32yu5C+PS4q|{J33P*{EmxGP>R%a4&BR)4jq!L zY#FXxe)Y>-XX^Be1vh#+?w=xhXi4Oww#fk(^iz*M$uiJN`z4`j#rI78);YC;kUI`y zT)(ES31IsXtW%}V`qwK=`J&pFL}KbH>q=wcRoGxyRzpH8wdu-M8v>`>Z=Q z^WNDjF3x{%5^3yR_h0%?=)Ut&vyR_lpR#YwDk+nkA2M^jt;At>Q?fb0ny31{tKVzk7VaD5e`uakv_GE2+b$MB;e!hUowEDOC3-u~rXTNDJ?*H~i z>#An?c`HN%u<#MmuA2J7H4WXZ~w86dB2V(|GqZ==qEM4 zxwB4KZ8?^D`oY${PtLtMt`fV~YWv}Ld9NGS_LZBl-Fu)vYZJ@f4X+M!OPg{(j?6ne z<($6dtFVj;#RpBU(HEW^-Fex4o2q}@nNL$A#lQWz)Z%@3`>*hA87pU1>VBWU{R~H0 zpUwNK6G!)y#>#UZO!iZ|sX+{rlwhDOz{#NGn(GaES~0dYFUt^vV85vzfFu z{aWkQ;d?MTMs8PC|7NwQxVf7)cuOo=eXW64zOMdLM0e23P+v=beZ{&&^^$s2b{e$1I-Xmv@dOF8u(-}E2zJAWVBS+`bRVzsF4 z?WbpWetw@f=k)Sxzti7L2&vv> zoL!QWBWi!@$n2j#k5w}lIXax1XAo_5QUC3wDI50QOV@k%+?Qj{_4hu@V$J?<`DJna zh!5xVXvH@-d{}#RyRJ@-*c|tTYsQa2y#rx|i7$WmAJr|+TCcy)xGeq`PqXUz9QW(_ z+*L-eW6yrwuvYz2*Za3SV*5R2Y}OHZH6cWEbBO!;Gl#!u{E=a2fb=2&)5xs=%TGHPD%oHdV_D-)}oPL~~W+5a|e z{=e`*-o&3F+IJ-^g11dBdHT$8N{&=hOZ2Q;d>+NkVcX+OGWUibc@@$*`-`6{zaz}-j*X}RnQ2PgORs+Mb~%4E3^3v#P4{{_Bi1 zAFsHl+Yj`unzQ!Wu3OEAYQC+^pS?Qi;N|!&Zwqg>O79cAcwX&J**oQr$L_sdXL|JG^$aWLfgJ zFyMzuLU5?VtyA);Va&6m&fW-VtUs4wb*x^mAohK>sZP+{rfbW@=kMEfH+1S6-POEj zOl0>-UVLwVHDTU$=jpkgZ@#RQd0`Ztx!bkY#jE0LN_y8m<5H`&=B>M8O;VCiZ+D68 zTl{w09ajH#al3g1FV051n^rlmEpTd3;4J1J`ODVbGEXRet)Uw^Jv#Bt4XX`RT306r z9V`!Ne!n7hpYz6-_vS5_{oP7NHt&{2(*4`gtK!`DT%1wjoZq@2KSDy_+0q~PGG4tk zWjtoBRDFKlq=KELS1co^iyGgVcWU>6-%A>2zvRBtV^Ux&tRf-5RY`N%r{e#HmXnKD ziD!EG%gH?3=`U-2yJV%q?0wIK=A^#N5;jZdOv*Yjq0rlO{>|z6VSjDf6iJlTI)e4D;+ft_2lPx&$YkqHw$~rdn zWWc)1hSA-b-<#LFSw>vT`*mY=8N-i%SFWvjs(*j`o;TT+wto8`t=%@Q&f(o{57W)7 zXRrCKvv2B?uDabz^fLd+R?K|4GU#n)U!3fL(91R}ckVvhu7#N=~J6>?_L;FIb z)mzQ_cc(-c{oeV{aI43z_{oLMtL+bJNvEfNvn+f0^X#jK*;Tpxecw!0+V7uRW%thG z-P}Lcxw)m%Wy|lZtf>e*z1T8u>8v9wPIj^FQ{MY@k9*sZ%6^~gt=AgoXWwD3d)IrC zYj(-WH_6ZYT)xMCx@GqDtK#m(OQ+WI+&lWL-%Mg#%TL|c7ccBB-F;s+Xa#?dX2r~f zrG-z=WXkxxi@d$(=Uc-kUOyX`_4dxY#rMkFZ1!I7y??UePaOCwHr+3CYhU%ff{dfA zhxf(rUmkgK*MoV@hupvVP7QiBJ9pKU?^{o`J^Z9we0XxhM)7ISt?kxJe|zNk?7)Vd zzu3I*y-rmR^}Ah@5`JjY=4N+)z1s$UR&PA>vcl$f9lPBcr6|__?47)P9al|hg>%Q_ ztL!r#nKxhd7nNNk|Gob8y^=MBl@S4dK7Ba6rnPHU;`47SuTRPGuv{{4$D7CB&8zsd zX1C4c)0ft^e%iULFmGMkk=v4Sdi|y$RnMK_hur-k_xD`g z&f`6MuejtUzCE{%s}t5AsBvwc+y3C5;Wqs^!S$hw-mmD-lwm!ieLDTj$(8E+*M5}Q zwMYI@<*{Ep_DNRuiwZs-S@`>xTCYK= zf=wnF-?=pF$>I&18sd7|)>*=-i+8*%Xt<>IbJ>!sn#tlVrz;+>FSg#d&hMmsU2baI zO8vYNj`}rhq7vU9#n1dX_fK4US^h^^$B55gE?29r`{KM;Ilbz%ZSYyMyBfa>HTOx$ zee#)lG|Vcm_T$>`JNLwKzrQcHFzHd~Zu<=hUu*vTUGwF;xMBU#6&tUePERvk(`C7* zYMN?g((A389GW-|;EQIqk#srRPnv zl+WwuMps3@|G7x}dGzv!u3R%uUz#>CYP)~*?Xn;5cG!Mk*!Jd%!|dYSH>)50J*T34 z>C&=p^;dbv;wpdp?2-$$e_wYrc`MUt&P&o^5p&CY&g~Dat&ZOG`1^xdE7_FGbLQUO zRk7>zxvepKk63!vOum|ayxvy+-^?|=niu_}XKnp*;`pnMNq@GUdd=m1WgFXknaMxa zYVq#2v&!qgvNm7xd*6QJy<2xH{3~6#_4C|E436E4-*rEK=WdlX`*wOw&#v-(+jpz| zUZsD$|8D2YoQImXJRJYBPxG%)J{rICb-lEv#v6Z=pn&?td&}Z-{{3~}l5aW7!lF|n zu+N7hUd-uyfYT94FAfuD&X1`YK|hQ%Yi5e<^Wlsa`&Jxq$c)eH#$HFx*=8D1Ka6y1 zW{U0e;g0|Jdke!d#fTpbT=E4EnKf$`wD3D=MR=&@JYLY6E3>5_O+)w1^98McWlVHb z#Ldbs96H7qb>oJk@*#Oq2v17%---=~o5lFHENGRL+fq=&+WSvI{NIWVSDTNu{O{ZF zy!qG>ho3>VjRJoQBb}5~x|bCGSbvFsjzWm1$RFOOlGR?_XPX09#1dlWw6K`?E{th9 zzC6KhdjF@27?&?bGVeW4ALYN7*yHM$;3&|McF>|iL9pj%{M}svY8EjP4~1eTH48Hd zJ^fTD=eNm{NpAXa)gx26I~)6d@!nHRxN6W+a!pQwXO`W`J35PFkLSMJb7P4i*FsLS z`Mw1le5cY5GfAj>%zBn&)3e02EjD1sivCx2?^#?K@13llY9+|S#oJc?UTOXlLy3JN ziVHODjV#PINffcSDx zJ8?%=jkC`u86152X{SNYf)y)nRI?oV+FZ(%sAW6hTyh?dg-Vl4gbHKn>I?G6SUDIc zGfg_4%4W=+As67p^+NufYJ+Cyv^xUzhk`iS&a=I4x%YE+=^VB-!FN}AJ~4hPB6862 zh78w2kFF<97C*lKkdb)77q1XycSm{08u>MgS-Nj7I+%9+46oY3?E+_V>$dBC)a>$i z$T2%4s-PkNOvs|&LGb}og-pkzNsHDhhV%!luG`SJK<7c`%rr%|4;()vm|P=OuI_bG zUmzyHXu{gg!NTn39c*w$bc5y;mxMXqouBS0e_0{F=db|x4Bj&>OlKM#7Z~|mwYl+m zcew4DV})*(2278+1v=ad6Bhi^P;y`~VC*#0{K9d}^Mv&WZk?`{j{1*$hP!pH>Z&s@ z=1_UyDB!X|knw`(lt%@EAJS($`gr5O>+Vng)ODsZep@^viA{iaV~5|IvROA%Kjs}} zmN@2UX)wE)$)0bajF}VT^^Qk5%SyWSA9RaxPpm%_Qn>6|=+7LFYP@~s?tJdE29vj#S1XeckM|79L={NS`xE!{n*8Y*}~k8*x6 z_xS#5P6E%tN(t#lN(s>kpDkGWHYsk{%4K2TwMjFubosxQm5&}Yrm3xEs%N+|_vN&d zb>9V7RZ9ymXyX()SRk;!@Pi>heno+G*+<#~43BFlB zkxS&3?t4G(8B#@dXPg5z{C!*_cR@tX@i5br(~6cd7j3t?^B%X4NI!KtVa~ffJJ}8@ z2b3?{!}D71eS@#SIY9xp2Nv^rRT@4ybTA|_{gm+Kn!yy-p})XzflkdV70V7$HWW?E++D~rt>rmnt&0u>JyORyhq6b+Q=T6Du?zKHPOOZA6>X8ucB#_1$_ z&_K+Qxzgb8(S*bAt{rP}PlftrZa!HdVJQ!FxINn-pSTTL!|CW{iuEzHW z)vK;zY5IRR{!ZzS3+H^No_77o(ZuwQRUzoOVUxQ;&8*%BBK?Pt9er_TzCkEYbEFAl z2y1JB*uf?85zk9H^UO3ECbKN-Z2GUHP|b8(lSfeG@*gdRG;IOjZ!heVR&gBVIj0;N z_~5SNkFHfo8k^6T?Tr4XFWy<8IE8;>V29>)x6GEb;0X=>A2lY}7A8&%3XuAxyp78& zc#5RoNtK&(cd#WCrzd#tRxJ~Fbx7g#1B2Fo9Q_H*;>?HQ+`A3i1=O^}mM4VGcNF`;3-ilqtvp&K!?oVx;N+9$5! zsWUn(Z zJmX!?HK+d%We;+Sbwsax_eqa!SxZ~h1D6SYNBC#_Xg5B_c**C@H|wCcdE89A|2fs0 zgyxL9d6GM@dnNxsLubs&q;rGY31RJLBwy$vanAMu(v*wEJy`v7Y7i}}y+%x8M zUif!Z(nF77{h0+X?oZ4rH+|G^(!7}C*dYO?|F1=OUmmeb2x3?ieUj^JtA@nm&jwO# zd`#{$))h##?GWe;u$fTb`RSkg9ciA;2FpArSnhH0*kfG5rdYhaNR-2Er-rnW!;j|X zJ2TQI&-L(=Xlq#dKuKvQSML`M2Bip&X3t{{mz^z?%hI-~GbW`^NW17_p7iYgjDFAW zE5zr#d86d|FLCb9=}sT-Kiq4)_vxpf3fhefk8P&3?d)K1Rb-pP{;(*aamD+0k@`CV z-pqZ_ps?eIVp$94%nj?>&+Jz&+oH~RiGL$^TZnaY;etA_F~@Gjoe51F6l@lx}9-2)aO2fbLK9)q-WnlmZ?wnW?ar;Q<>7b;AjpiWQnfG_4n0oLAw|#gZu2 z_W!Uov-E)jF(vcMr&x9-eQumtbkpSM!G?1eY~*+@IZG_rDKXu>bJ=#=R|o$aHnX@& zI4FLZzw)wAxdltpvj5TcmzD1v+rQlJ|KZ&q>XzT$V|`B(a--! zf6kW(I`W|U(vSTmdw2W3*?+XM|3dTsYo&_Md7Si%6aHJj{mwD_xbOmr=}!_ZPPX1u zac!2E)ZdWXr{C~%(e(TOC47}syE*k+HP`>0f8$!d)yr_WboT5KTiP0_qPngB zn|*WTkxNX?%16IXePn;WUu+@k%+lqH1(%A>ocqOC*HPIgaqf%gPRe^b|R$fO2x=&h@t{$uJI4xS`K*+Yw#JkfV;HQ2Cyg2h#ZdQGim zb%KkJZ1tSHUqm$6zT@$uBR>DULU&5>HYzuKOqNo5Ak(nl}+^9qp&c53R({v|!vjYX7hkxbpUP?+Ip1Pl=8Nf@lCmT?ym;DJc|p@j!Ojj{hc_&E7+*s5 z*&)lWm9a5j@}Q=+2N>6m4WYl39n>Q}m183r7kA*kDw z_|aI`$;e~(iXEm-bz9y3OTRs@Af~iM9AO@O*QZ;X{srKW*hpoT6^cugj zYqCz)wg3L|O2qL+cl|%<+4S1aS$g%HE3Yn(Nc>K_?w>KXSzfbSe2;INa(f>mudc`a zZ>#k4Z@s%YDOx_lE$Yb4ei;ds?*SiEW`6BHzGLn68=<%7+|Kddce^e>^5UGgTUXur zdvC^qKi6#fz8#HNe&SDfY3a;^-{T~ftn`uVHjOMlVr}*_UD)$$X!CKk*$;9rP2PIr zX7ACfi;bRH+<2FnRa^Y&<)UrBLz#DKx=%mtTa!O^W5D+*Pd4uD+Oc}6&-&>X)``5k z@^GPAeE#p(y>d&+&9>f1aXY=Td&@!PrL)kjO8Zmpeey2R>k z{q1?vFKycT_OSQswm+v%7ng`QdJ$8ADwDni5Js0Xf z>P|LnO;*!hwA^S5zmCK_gYwmngjU9N|N6DIbN_ttcQ5Z`>|C5t+{#-R^Fby|USwlU zuX^^oB~N~4f7_q^=&fzZhr7qG^nTB?jGu2bt4H9$tsiN*_U{w8_b*_2To}IEX5LDE zt9@z7&c`lAy4IepxjrjL=Jk`;>zCN?T=X^gXv5?u7ndHETXOp(+n1u=^?4QY`q~*4 z`#&D2Zp&IX$$IIIHU5?N{xI_0D`r^|Cc68{-u`1b@Bdnh`CXjys`NqFobPQN zb@K1@T;HvoGP~aD^Q8xpo)4Svl=aMC@#5dFnP-l7Us30;eY%$IzR7YepU729vIHxv zK3Oe`+Ae=i^sZ z<)ls7*524-`0L6ncC%x%i`C-m=0)hwUB9mR&df?>rPB)z>O8Z2xzHrx8Bf`_Gn1CO zZMd?%o2l&G*5lgkKIfd!eyZ)RL*17&cI%xJSr_c9hi7jinbMf)>dinofADf3A>V5QmUMRQj^F+;m#(6by z9Os`daoOHyP<|uVtjEYdOu)9B9Sv!@T}n?aNK4 z-S1^Ro|Fv(Xc>BTlxXq-g?BA@uD6IUqmbrC)@O4hv)$6l&ohrS#?Q&3?>+?g| z)1KEAgqO|wav|vL$93DpZq8o)#jSr{(8WW2uWtlRJ8ms3Yxr~3Ex~OU@4Ek*%$Mo) zobOtl+HHvKtL3A$-~Qe9xUTN^vLhAA$)7W>-aP#EJKvnwHrITmBPDIa9#{U| z@$~PNIL6dS>Fjmd#*YsrYMy-P{%dO1YyVZNwzPz~osX=zzqa&F%5IJIQ~6Ei*{zB; zx%BD|!#mNZ#X={Sp4{6zoil2!^xSn?htC_!S+>qI`emb<`Kr)aB znz2<~@BcevXXVq)e-;^==lR{$|NFmU_q&Q!zrW?Dy0o0?IB~+`_)TYx&IxNgIAo9W zxVqjQzpabpe|cz?Zd;_(TgIT&4VI^-OuKu-Veh)-^W{IO_q8i-)9E?Z z8Z-5DZRPjfZg-x3DL*LAzwMN5t!VM3te2*ZMbGzcS^Z|SnQdnHl|20?vL?S{<{NnL zuYdkBB3{g&EGzwOyQ+xi2m zPVmXBn;h?y6TWVqo%U%KpPQ0-oA~{DFXt>3KmTP@Z|wcTZI`y6GZd&W-;>(9(%Nfc zcjWCY>-u|GuYTs)KDA^~)$jPi?xWl4en0tO^7nJsJ!$Vdl3N~DueCD$y8frk*Aj{tX^#9VSM%YsJoSZMO5^H%Ha{Kda7$5^WEkG$S;d4l)h8EO}I zJH5}*Q5I+07A6|mH`nsy_uSJwx_y;}2FB-6Af$dEnZl-9G3 zeT)m|JQZK4^~`(S@6a>Nv(CKvD|a#H{>`fA62W0*;o-d=cSBh2e)O5rm_EDX#oxu5 z5AQFt)|S5Aw7I?1EkW?q!VYt=Cfeg%YN)kfwScQ(wJu-wuirL_mX{n@AH(p-+L?;285_BSo0#*AW*mw_IVCz+gO8)J0>!~v3T7JQYue!00mWxg-N|Wv??^cgs`n;&+!P=XFoXY0uf^Wp}<*Eb8>s zyy7Ey#d8yF?#)X4k@obrL;YjcdFQA6-hSuqObv^@2TF=}`#<~@Rdk2VWySt$lm3_L z{Y%%i%$vHq_exZe%%q4(f5LZK{b-Ds)T1;_MfmmELXD(UlZ_u_+Lgqtg|#mfY9wtm z-Y6p5uJ+Amjpy-&owmZ=mkTqJ&L7b#m6>(Jcw-DiD*AY0hpjO8jY5f}^GCeOWZG^R zx7|?OxJ0&HvCLyl?(xJ<*`&_D0^N5Ck0_PP1g;ivUsHB`ZKmiyp;Hrzrn~HsJm3)i z-r!%Ec>`m8>w&-diF_JC?21D7!nMZNKBwJzqku`p@|~Ht|7V<;uq0#WvvLtJl|8OX;h_$VJG-Jq`&iiiKg)W$ zkz)tvC5b$qX)_crxMirY<#intKJZC@#Y?w3b=Jj=topYDUd-Rt{F+DT%#!?D-|P=s zPH^I7bZ4kGX8T-zJ1~QTtM?D{{{I(eD0*5>wn&?Bz#u+U!l9W}-XKndi`_AIom+Rq zky#RpeHI=o;9=u4HgrAwkwZ9HL#F?bbaLk+{v%Oxg>9polECb(IlMkx?z5yGK0L6)^k{>fszA?z ziWP>ZPH@ba_oH;{L5rXlW)2auLao1Nzs%5KX=L1*{{O%i-@|(@sN~G#2=Hg^a{04G zmeJ2gCg(Eqqw~uYJwp_a9OSw8n30)vW7PM?=A?s{{4F-zO|Fx_x>v5DO)b;8g{k{? z*2QPDQVTu=iEYh1{LiZW0f&bK57!xX3!&tkE(231hu#e=!4iy~4A(kKTlZT8dH6i= zcri=u4gcjr4vvnjf6BMb?Pqvuu6H<~=<&nLr0{7k>kskrKPIZNB&+aonHnlCNUSgs*dVF=;Mi-?{sM`hG9MnkB`+NRZjt3{nJpplhd<}P z@czjzHO?`+1Qq1OcX3I^b{h#QR0uZyyYDu0#(%ddKQEV=$Vj|*m_K`)?3~pFI|N1M zEIH7{cU+01B49obpI^MPLRRxSeRHMGE$jvYoYM;aY>{PeUUO>ipZ`DRPVxPEJf=0# z;f+mM=rSJeS6WIB6mAt3FR=|sD0NZ%kfCtwxUj*28rIKh8a;+W%&v9GfE(9=4}0u(A~CYs|g2X@6g2#F~|w z1|kjNEat9<5Byi|X|xsQx}-ewz%}v0i7u^Q4zE5S$;$a=vi)AJQ&$xmgtl)9VVc~5*%z40o^|V@|#-CqS{*x?b)K!Si2n~?n`)R)Z(7z-zrK78t=&Y7V zSmR{4Vg9tnLNS>q#kc1q)*I?cEo@L=gjl#VVd^ok7Fz|pN``(=H-Dh$5?s| zRcAEZ;W{8F*{Y_{(=hqfudbf>g`4YRdH?yvGV^`be)9hMwt|9G=lq5jF6*2({JSO6 z=Gc7bjDupYbUmRs*?u`Zk2y=hXo^umDu3!}g42Xxi9%m3?&{KFai zM>j!f!`6SbKb4t;0}pWgi&fOxd#>T`j99(km$xG&Dn8bHpLTD$carhW`z{H}^YspY z{?OS}_A|XWdUlg`r2QA(^q*4c?=OXOy-97#aQ$THD|%t`&m7@@(<=W8K2>JBt-SbY zeApey^WW?Do>f!Z`TS>(?&CkFUi`lGc=8p-8{wPZyFEUCQXy$0vz+E!Z^O6!2|w4a z{~dmd<$Q;iMD@1KvRP3K(7o>OlXJ5T-Yfe$x>m!@XLs(w~n{EkL&C%Ua~IAxx_btgPv@-KCf`>7@?suS-GuFbq-SpNjY>Sf zn>lmp9&w{8c}|l9@%AOMvo=}%|1xX#aJ!qe|1@qt%Avn&g^f2-5xW?Dv0%z}d4XWQC$Ezk5$d3}zT-y!`~tZ&48 zm8iY7*CV&T?!6<~f8x)*?-f64vyaQZy*;1v9_MO}HPR}w_v+VP%6-z~#b^1RxePVc9cba|0YSpVZ79HQlJNZWRnQ|eWzniC8elES# z)-^3_f1Fj?k_!cH2i0d}uXNH~)^{|>@S=tHfosM-8ybTzU3k%0XK?M!sb;TR({-D! zTK%rsb@a@;{ZCD67lfS)IKHRZ&~Wvk>8a=K4t8)o3tqlq+Wa|tbKZ*nmj7}q@2Pn3 z)im?nyC2tVn{mO?e{%CHn?N-&L%Vl*O?H3$kL29Gue*V#hdumJ7aPkHe|N_O-h!iY z!E@KT&0|(F;^ESt@8q)MgIe6pE4>c-53QxFb_y>Lov&Yg^IqT^_x&b9Q^GqgeVF*r zr%xo1<=;8>AG-@4yl0WJl4XmF-6^!!<6)-a?;Fz&9!a!`xR@Ew#;kJr|H?0OQ%hIR z7719|&3|Q&TI?+0n&Q9veJo$CFOjIz{AFZ*UH$2n#eOaCHD|R&&uE)&_+^cZZ|mZe z=U>-8uE~7b^J`j5p(wMr*@N7cf@JBm{B2*>AL))iu9~d4%l#17^GR8g{m%M+6&0`h zy{TsN%KaLDnjU_Nxw^1b>SnW0>5T}zYf{;F7VIos?D11ct?2x|$>Q(K-S!q=d-plp zeAE7}7oXGBZN6&+-S(QhOZCo#1Ittv{WzlM=Xcb$Xa0So#cC5`vPCvO_*0hkYVDth z(7$&+u^;?3HAkz9m0xvMlCRdpxp&?jTvM^W_{^l3lrwD`W5pz1ZQ}o1QSzL#b8*a{ zwNi0arP22{Ywy0MVf?w>%S`^$qwsaSWsCSki;kr3?e%|n>=pk#olUdtLn;~?0|YMK z`@84uHOsBr%ocC!TG4qetzWc z$-lPuo|Q6r1?Ow=O_45|dD7CT+-6xNzoeh#{V!kJ489yFzQq;TRqK6qD*q#aHM}9Y2k1wo}nt7gE^q~}ANWnLY;Qq5QPxh~T+Wr4gkAL&52amq}6f@PA*wLO_ z$;wk&ny^CoY~GTG3%)tMwD>Uhy5GGy6F>bouzhnRDEBLi(k|)zBqqKSv1tz%uD6oi z7U*cC*shRh$mKvq@Kb!W%r6bJn?ZMBPm-dQZ_*3zIrdfyg%ea%TFRvGhiM%t< zEk^#rij~*J4A*MB54?VLx1`I~{ZWh&0tr&-H*>b%4Bt3?^ZT9tejj*Jr`s$4`}612 z(zRdN3%s`RUwI^@bW-%Z+4h>6Yo(bB>m`aGu6HRhMrv_c>S`q(1V4AcT8Ps zmlfRUaZ8T2ZOm@43U55*_vnz`p_fjq7Z>XaOpp1dxbxeb&hGHzGkI^!?YcGVzDP>Q zt9P@{Et#Iaf^7v;24QWY@!{vgs$}B};pk&EL}!yyCJH=TrUl z+*~fPrJ{A_>lD8w+BD3&Rcv6a**-Dq_>9BT+@9A=%;w6iE7sZ6=GVPl=h)Q06ZJwr zU0nM-e~Z+q-%q~2`6+d>AlLDz@tM}NlwU>hmCF<2bJKmgrq$=?dP%cxC`&(kAz-V@ z-pl8|U#q-zMnX?)v502$nyYgb+azyrpOkrEs@re5`p2KUPbBDM{}uJ{ZD06zi|Ed_ z3n!m%eJGjpb7Jpe&F|@ti;HK>o!gyh`G&u4yIo4fqe_q4r@CBjo&7Q4;OV9Q65ow? z{k$7rweRw$ZBI_#T9$cwXI0_9xjwb7htKMiis|tu*Z!Eh@{+%oh4=k}^_TYrCSBa_ zQTyUW+^Rbgs-9miUVgUtu2nzZhnlRG4)^=to=myd>ume@h^IyU+TLy7`_{kex3_%w zTBOqLw5HMZX>WJme^KM~@>1`FRo&t{?zHGVrk{F|wC1k}AD7(ap2A6jC*PdZ+_Ruq>*U0(mwhL!KjXUmvCrMZ z;%;B=O_y0Ox2yVJ^fkGZjq`Ry{;$l-n!Su=m)x-%pC0cNGW#v8xixjie6{V9R^Oer zfWxoE{!QuhfLX*A9ZurB^1uz z>=^ld$HFPCqTvglGq=5Izp&6DdE0H1wTfB4-~DiPcy~-JN?@OP&AerMZwiN8Qs-S= zFi&o~?H*J0M^_$A&al*N`LX=*6XS#D=hbe>yl3=tQ@mgL&*G#%zmxB?%?YeM^=;YOyAFS|nd(XJ{PiaT1^Yt%*4=$KSidcxS zsn#_J+beX)2OQx)^2{LVvuUl!1LlqL78~U)dVVzCcsMJ7>qFxW#W^t4bb}ugJ#x2q zIXvMA-$W47?@%d2K}z46LC7q=+47$d*94)>|5?5rR8;6Uo^jpv@P!khIWi9({Z~v$ z&7JV4kf~~G3eVTeMLaT1ZVwD*Z`&)QiR1-}heTM-T@xo}D4X!{UYa4zxZl`JQDS{^WNfsh$2TiB&K}_ftLMiZU!1%9;{B; zxPMZ{`nBhmI7cj0C^deRUw8a~f`rVUdd|d%+d&@RtS^2GU8a%1{Zshz!+_*q5k_wF z*2jq&He6k*2MW|QG){4(_86Nr{-1R*<~ECGnY9pe<60q?e+AZD+>J_wvxQl1Zn^Eb z%S&n3+>GDnL!a^I-2Y?rIX?1^V1k)U-=Ep{Co1gL`BneAJm`gf{ja$hzxyBlV_%kE zwd4QdN&oxr@*Q@(pkWaD@9cb*=8cGvIJxi5#`y4s!6EjYj_-s&`?!K#@y9v( zeYi32SB#&KqSnWlf0xSy`gvRbHol$x{6cK^dk@yO1py1>l%zfiOEP_8UpVoC@7jjh zE^TXCm#Ez4Yj%9Fz>Slq<8GlwLMqe0<^$&GR&rcArN<5!@wP1W(77Vge?a=+M~#Hn zM;>iBwjth;FWb@NvYa~eE}VU_ z;orpDo?0SGyZ*Mnb;xLOWemKwESEifmEebG0moP@gtB_f4cnXxJ!BZOvUqAtoE90r z4wsyCBBuU_Y$roghRD0;ulTyY9x&YD>sVsGch_W>XI?RP>u>q_?9RFM&Hm)>Kj9~0 zCKf!H)A~dD1a~J(U*!INx2X1yQQl0Gy5=a~`pRsv-E#Lo7W3`XwyH>4^c-~z)4ou* zOXLrqg^Z@1YHQ0^_Plq?Q(f-dQPce`eCJNov*{`8lMZ;P{kZ?|Muf=;k$?Mj9>jQu zP3AeSc8iZMjfJQ6&YrgkJe>~Ag4}E&nvM@SB7%i`1lhQl-ORc2Sl(=WeckLyy>f7? z1M_nGgpNNh*Ax%9@_oC#wB_~0(rnK9ppRYlI=>sk?<`5JZwimuy;$Mq>VgL`U6H!4 z6skm*cpUpvmUyHsPSx{&0`K}ChmDlt3MaSy<%}zQJF7iqxl?1Xy3F_O)zT~iPn85` z3q1NWS((Li4%-psBmTDyB{)P_=NvN6{jC*kJSCya=-47ojWwDAOBn1L6gky2=1kN) zb0wu&*;sSy*VQriR`0oFQBdieT+!&ky(wxsJ8PJ^$(MTR+mnK#`Wf1IF4*Q=y&b_K zbFkZiNo~DXdP9{@$Jx~HX1TxD&smmjesw>iTC4NI75}e@@pb7PzNT#aFhJv*{Z`g{ zG7;x@I^M2-u^{(~n96Fm1qH8v8a)iSQU7aS29MaBjnZ5HPMuy-8*O25d!lqf4O4F6 z|Ao3-jMpS`59o5uN&0`e*zsnthJ?eK{O*?j?b{UI>ui{q`=xKf|C4DfGOUe@%^u8c zb*@(ph`%n@cZ^|q))}`m=RMBUXLYlb-oGf_%X_8%)7AZ%zxgNnO}cRCK>mdT`Tv?& z|EQJxkWb-ud0|kn_f7P`;%XS=R^5UB|L-=lr@Yb&QVE#9k zu5MhyFJx1uzWVxF{byNeNnEo-B6n_?G3PaVTVm!D;fYg=IwMZkRf$D^yzInj{k1Yj zti8NW=84~Itv$z#m);G}x~6h)dE7I*-8Gk9azrkTjQoA)lA_5@|9b})P76P6pxeK& z?{=T_Wai>!=RBF^<8ED7*%)}=KIiM+57oyWors=R_MFwz=;-?7#oN8@t?vDMRur}O z(Z%e;&derFx1X+wDUtp2{(jlK(ix^DTo+7_|9EYF$z!*iQgY-3w+)iacG)~Ag& z8)Va0+GI1W54GDp#?FJJ0`^le;6R+@cZd40YrxA>=RJ6h+QN^J}hy{d6v&-M1I z*=K+0TB%)cEhyUmW%6{L%(t6rEA@U|*?IZl;ylND`wA9wcj@)(SG?KcTVwCFQ2poztLeX7eT@8b`&t=FyoRkKK^QhnFzk~e#zqKvf`?|)G2ka@m! zukHP|=TftE^CNGRfBSwyNqtka-rH}NZC}@Usx`44n$qBVD$$`Os?e|X>ah>p&jnyL?~k1Hd`7 zHf`JU>SAH1WyO15Y31?VGJT)*@W+z$$ZIIj(G=F-d+74lHt(E+o0zalUG!8N=V$v)%2~W zx!H-p)|ALiwGZd06*umxJ9*!2S;YENIkW!#eYc`{VouR@nT&I%b_6YEIoAGUo%JR8 zx>rAi9G`|4hM&BDfA^%5-sg91_tIWxepTyv^;wPn$m7#zzrA~9->du66V-cm)P7KR zF1FN`RWRY1ens!v{NI%Ww4yYtt^N@3EhzYnLmoRzCT8F=KkGW#RD-_!e^cI>mCd@I;txsQ3# z`+IlWzssC>zgs2qPH42pgKIJ`Z%kh#tzYhZr!0N{obHv=f6qQ)9xZg5+vWHJrRhb? zJU5>n6@3xGf8|2v!Jg2{=;$Sl0Nx#pYJ+f6kF&2oEftstbT2N?!_dI>mT1) zSB9VY?mXkxxhtxoucP*hgp02EvFf<5Ue{S`%Rg7PzjU2lo5l8cddk5j;pbVUMKV_x zT~4xRu?fBPt>eMmVykVzMS4j`Iy~i{yVuA6oN+f-v%lTr?sYwr74CkipOsD6KUJ~> zKjA%O`Qv6X-%P_DC+ro9T?2#rW+L_0?Mtp#P44Ob|KdZ~H{FMmePSn8{XU+i zC}ivBs;Ofz(d*-@cW%Y1WqzyuUOupmnXa~a@4n^7=DgdpWM=KzWnud@nv-Xr%k&97 zVEK8)mTlLstIe+}7L`jX$O`ibI(X#i-dBY?+<%LHb^HC~a+9KQvwrKrJXUjW`7<_! zy3sZFKd*W6F`#1ykGSpgx79hVyLs<$m(P~k(H*JFvCrUOy_m`Vc@G`RC$6i$wC2Jm zo$8Eba)*D;jSGEb=5bQH^>Op1ziV4&-sm~9_eag^O_PG%c|$S{EN|z%u6$nWI`7dg z6QOJQHZ{4|{37Z-=e@gAV{kL5>6G`!#ZJ*rjVkyn3(RhpR^K-%O4=upC%iR#!NsQ9 z_#d{f78mWYVY1Dv4t?*rO!w&5<%he^T`TvIUE?TL5-Tuq?`yBhiAUY%?w%WN8ht0_ z(bJRH_KMDY-W}Pb<8FO))?o?7heh2JCrR}>H7oNAZJM?9*MqA^ue>aY`_}UAp!oHd zReGz`ZM3J=)hrN^6fya^uj-_)s`-b2!k3@JrtI5uhVNOepoDX!^;faU0c=`q%gf%H zl`=W+{m8NNLW5s;>*FUWHl;VeHN;N(t@+nt=3Qr@QoiKu7JD|gxBbLtvlK%dM*SG91+1pp+`nu}Vxpz~aDV}vdZL@1; zpYhaACZ*_?y>rF%c2q^|mQCHV)IIp6@~KT*;?GP~afq-FmiL-)dF?6RQ#+o%?D~+9 zb*xBlvVK}o&6U;fn$>?>Y6j|UZriT);>@mJLGmyE?pd?n;JeWO!dJ#;tDm*zPbpu~ z&z-|yd$*x6OZLkbeY0crPX7NN<=kQUBEt9gb;1|^7n-v=?zspDPR~%v5%Oh;UeuZ3 zZ6dg(Q?W_+x`g!q$`Ga2Gwf{a%1#gFurY~DEO=1EqvoEdVe(DCMTzI<{wF>$#fRn9 z=OhU5B)sy!?ReHqMCAAXRBKH`D?XiGmo-i87arV|V`^+lm~cRX;h?j|1K0oSUV5xq zC@Ix`{J}&Ekuz6B_>7$#9y(YwIvwCFn87LWf1P{q1gDwIr@|J7Yd*QK+B5ivRvIIx zSnwi)4WU^p{%1zDi(Hbih%oAAbUWpLyD>qqjV*u4{{!F7@=FHgC3FOrh6+hF|FaAh zG%#W5yT`KUlfRF8YdITVb5pX^$HOHC?LVit{runka*4p!#z{UF8qb!$yb-!F_0IqP zmn%v=+f7eBxbNZdcU981eQ)=NUZKPTcI&Cnx;WqW^iPD`L_HS=JJW(K^VvcxYi}Qi~ zcON`_J*i^9jSQo^!-g5WlPVhaUsvt;cTbGvzM`Y3nv7J+*?8@xMf;x0=}%j~FWWo6sQ1OUpL^ohtn|{Cy^vV( zJ}9WH*xS=(BM+}V_tmF+E|o82<(>TA{od!C$8JY9{PbUu^Iytz;lGO)|8;#xYL{>Sc+`A;IyvRqWckmTmgLeE$m5$*nA*O5Yb;UA(Q<(oJxJ zWAuqnthTI6&wM`f{*RW;q$74r|n{;+Wtb8#eJNn|vAd@*}!q4V$>ujrGpE^_KO8(4h zO^y^UTg%X}iem3)dQnrOtEXBjNwDSnO=q>U-hbQV%|F)S%$;kF{Y~Cj$tPx1R_=TG zF}GKYf4;rZ5(D3#UoEbM30@bvb#bn<=*L90m_z!<&nRmxTCpi4}%oAG-CD|7PtL!O2@rjGJ@Rym6V-Tnsn{k_%|w9aDd zI@6i2%41)z_`F;vT7y61=I5)@fknq(aAg?I=JS%TIB8!ob7j-tT1NNQouZFkTU@<+ zX~!ZD?wx!2m2~#B%dvha$htK1^kms}f0l)^y3Y~)ytY4W=|)EjpAWBOdE{3XX&+(V zHu1M}vCheb%=0EO6@AarS&>)smiNX(0jVl6`Fqv}V`ApypUsr*d}XoU`2A`1lWZ+d zuX8Jz^`6@O^Wz*fk#|#fmrc*mQq|Fm^6lW#im7thyZrABLFJbM<@>tKE#@68*Dv2Y zS3Gb2xv5@ydetQ=4}_Svw=UWKS-rBh`>3t{dh}WP9^}$>O()4rP6^AsZpEfD zKD@VPY4dy&>HNyezxlqm23?BXIHO*uhU4pjHSeT91yB8a`sn6K4?ia6eB0sRyZ@5P z-tTX#BjTjq+p#OYcT8H*xAeP7)GKazuL=EDA2?Q@tNQ-h;nVkn>wn~|lRV|TsJHB> z>gmJl+robN-p<g9IZ@oLia6TO?xcvl#Ho~4}0zwg71mvv8S z<$nI1^&ny7ZgY<0dt7n3JZG)(4g>a|T9b>{_9TbPM?bjIte>y>>YT)+rS~8DYV6x} z``6*G>AN?TOx1sVL00-p#>TME4{jUn)L)cQwDZQdC0hz7^8}yjtMoZ-oYHkDv2ecr zqpeL*-`BjqaL0yk%8-NaFOlYuE2tlkn5yDO=F9xl@bpU$izU zJ9_?SRST1@v#`xB|&$(HB*dtPLgmxdT`?wzwX^W5aAcZ>WAJ2s|#d?acd8#pH|W7_8QS1Iln zrJuw}e!F$hxM+8`T)1!1K}{|0Q*(`Ll777W{Mu4lp{(hQDO)kGXVc`SHRqJ}eY!ZM z+UbzI_J>c|79D(F;}&Z!N_!Sky6v>>&i4w{S!>*9WlQfrwkL18bHql+`1cFro-aRf zeDAw_+5C*`vv*2d@5N?G`wC5(_vxvoRYpqWyQJ^WHe7r6XU~nB)>iMo*cJO`IMl{P znzcVVYyW16r(sgi%8vcUDa*euTm1IWqUt?w7atV<{wS!uKk3dr|I0BC3wK^m)Kh;@ z`p!B2f63B)+mGZVb?@dorB$@>bM)(#MWTP%{;!xRr&;&zklFdzXciG!=6S3)ck0xC z+VJH@<&_T+k2|ic`<4FwQt1Ml<;Hy-RU#rgUwpH@X?*f;P_3}Km>-TMk+zbTaEJ>Dm`<3J$$$-RaZHC26>{>Wy&K7o)WTrzbb3 zpPrubob?$8k4>b_?R)vs;`cu@ZO=J=;s3|H1A2S1mfGe=W%`}-y3ZT?Gyi_RP1Kf| zoF`|AJU?h~_niOC+$HZPFY&$e&D1RUn9+Pqsan>_kGOIheO9iRw;vN~hYjIo8y>E9Co|?N~;+4^j(>8p6?j=cVpOJTG<}R^JhP{baZA^%{GwT@#U{~_|}O8cTaU}m@^@nH`lY01u^Y=rEX#a(ZTC*cTbayKhf6cnd9rG6aW?C89t|rERH`k=rhb?yI;+JP?Z9eeeK=kj- z->a_Z^6ag={a+>G=p=#kW}dkkCPL@B-I`PlEd1k+@1J-NQ^zgp%Nz3R{3w-xAgtrf^)PIta>HOF2ThW~V zFQ3=lVc~&C+<%_LFU$Yuc;S!!CG-Cwod2%xoO3og_n+c6zcWt{JeYmr>5IE^Cz4BY zed-+-Y`Anq{POErnWeifncTb(`MTiT`>GCuMOE|vz9`(>a!GV+-{nfhQ@(B&W+%O3 zDw4A4`u;lceiN5g`k%8Rn^=_e@3?vFs_gqPBUH}A{`Dm_lYFhMCSJ-`XM&`q?2Uh4 zb8CE8`{Fh0@tuZtJG)so#yonvsb^~u5E-Wt>In>qEG*y$>$oR_QpQ<3JNv+SS1^p`Q;%Cj;# zv~_yC;-UL|r9Euls?vFX&HI{O+t}ax z*?+Lr+?uB`(t^?NtV6uTew zHU;TSznk#+`jL>%?C|v~-8aZD+v)WBkd|oKU)9L`>-(Hn{+gc2Sv_sPyS)FlsW;Er z`^kP#s`Z+Xh_h10ykLnWS17A{B?@0H%P`F+Todme8q zW<>vb#WX#s{EFSS^JfiCn-x8c)#b0F5o`7owtG#~k^y=JV}JBkqOEjV8(!&fjOa z>gl`_4kbJ%zsoDWzizqc{^@eIvlU!b>$RO)+&-knc~u5BKZ%@pc+;J8iq*vzc6eN# z^I_V}2`@PP!WcDddVbD6vT@Uqz`M=*Rol59L>60|a8;K7c*pK&$)m`+l~GaOOEZnW z>rX7K+s^)bb&jf%LvzdjV*9?PG$`uftI-k=X^Uj4Db+M6z_8s}{g zlUX>$$w>F=*IUo+-p%}1^*kXuf;paNQ~HXBUpx8dZQbp=yDVTo#}m&$$1Or@G=+qf zkMH~8ZQJqk+~xAx++R_q`x+Pd-CJ!Dv_jq9Zb4+3=Izr@&&^yU9=VgpKX-C)v+Vhp zhcUZ+)oMQ^tUO%uz4_U!{NuUDnf=}+N!*K;EKQDED;gO4U`MF2rMq6$_Fmoipm)K{ z>>c&@9Bc&w-Ye)V^$W>d>kZ|sb8#1<87yR+cr%;dn+Z+~7~Kj-ph>(xfw ze$p$s-8Xt<&)D~|*yEn=s<5=MXU#UDc@8r_E{a+nb<^%KENG?qU8}DZ933U;A>P{kOl4s!H(V^hx|Nb%#{sR=wRnm22zz69*E^ zIEB{fhRJ34JXI^dAD6vHq3Lt#lga5*tb9zBCNoEz9q6C)gLA8 z_9VOVE-i|)J@tIzyr)Iq|4pBsuf0W~XFtpS8+Dwr2|8IP-r32#R#J=(7h~Bw^~a)| zhy&b3i;i#Xe7gACCo`vt1Ba3(I)1->boB&_%1(1>OC zJEn=3=bh2oa;@Jg=Jcn6E0@*NUWIFGw0|;@YKjZ^dEmxh^`_$$@#iG3Z0obzp*6dT z^HE@hrd|HRkB6sf%Lv$g+Q#YfF~@b!Dp~f}McVV~k19y1{;1WyRDb;L$sDe^mwrTh zCviPlUoIh2R9(Sewd1(|H=}vq`VOVIdrtg4(XZ#)Vm|N9?}OUQ%D6LMCnRkC6el|E zpK_Y|_mz&qQ>yvOJ<1nF$ZqDbsQ9wY+-5`J)Y?f0ULOCex^vge{Oftlzg53iRmZ;M zju&6O$@0xQi+v^g+!kKCY`*g4=D)S`cV6p!Y;s}7T$^u=%Wh8zce{Lr*Ue)0{p>zx zuR_i@f2xx$eyFD2uYBoyHGpBY>b?1W0Ydl0?>dPdFG}<03R&a5>Ft;0<+oMl{iwRO zW4A?N?*%r~6ua1niBmYY-8B^#F5Vk?-?ZcS_Aj58UR%sRH|dxCisKTpKh-1(ynbJ~ z9x;1z)br@_t0!VqtdEIAq#AB*s@ z`;vq8@om}f{HAxkW^dLxVfFk_oP2Z`zxTIwX6f2T&x9N9m94%L>rlKT{La^k<@4UN ztX_Wi#by@oF1wY|W_z}nzFerPsd`?8d6wU#fRm^z&p z0>#C2{vQ8Zx2NCG#Mo)(EP)=5j2)dD4SD)n4?SQJwz(qGY3P*r!EHx;>XB<{hv%m? zEU@5^VP_W3>j+Ianx&}t<633oLcYeo`_x1-tmL@&816CTX>Ff$#4QZUL&Q1XySKMZFezlk!Kd5l*MP298D zbN=X__|N=>Ek`-&Uuf#w`#nFpOH1^=>`5r=HEXfFa5BC>UvO3KbK&!IPM_FPGHXWO zOq)*uj-AF%VNYL4d#`HMv=zT?KB&lYa-!wHJ1n=N|xA+XloXM-6mA$L3`~B{%OJG{;G&z(1T=x_GuT7McTU~Q1 zWcJ)M(KpMz%6W92XqsK&QxWmHoBDU#(Azvs+Zwam%r%>S-$d|A~yjr$KD zT`n#cGXDdAZ$(9Pm)~E5b*-(^nT(!GTkF0k?hd%Dy7PD2WU(Ok({ui4O*(UFq5aF1 zeG?OA#{an<#8ba#?%tTEOM3RrS8Yo8KcVV`nXYtg!n(-ol-##$}6gF(KY6<(@Kea@ZJH}Q9t0n3~OktY?&rOm}|FCu$qf9iZGt$S=u-qmxxo(S_<(!2#r$^W2cqX4# z?KA)Ur)ZU%;O3C#Nw%l67QdWhY!&LnbtSc|P4n8kJ?<~{x=(4PD4Q1NEb!l~+MK;f zs;X*>pzK@I_rHI})h*eu@RiQXohJhC{k&H*?a`O*lP+zJu{51N{hpuCygDAvZ}XS@ znIODa<=Lahw&8NcuMY2iyXAeEBd_G!T_Hu!{pM6n^?AHI_58HiMK#N>{+%2w7N5?w z`^B^+B{J4i4jefytz~25#P7dM$Xea~^zxNCQAz=SCdE{XO-m14S-(73MK4xo`{yH( z4_6l#->qfV-Er)*^VuxkDb_j1vzIPr-e)%R(q#M6M+RMUm+svhyzI4a&z>`u^A3v| zUaj>Hc9}7A-oCIM^_Ta^?fTw(sg%oYM(eA?ulNnw<{O+2{m>ciRGYtMhRuyfF4aG0 zHs7CHP?(_`aq-r)ZN5|USzN`lE$7QUSP~L>^7r2P^Zb_BY?%Af?H}t)m!rxuIs0s5 zwlW`mXC<09b7Aed`^)+x<74K$n7lk>hudGB?>q0+rru6`xifXuiT7Wv%%x^*=y_PT z@X~WHkq>5n%gcFOr_P&VY#BWD07ImO5U03~br28#x+VJ8_4D+Wi+y}+ymx1;!qcTI z&N}a!8@~RH+|%_9XA5FJa&4>8<~gm^BgE+`cU@=74dK-<3`N3f%c>9mDF~UC+_r#I zPs!%*s{I{1dA3dsU-m|~Z>iPdcK>a^U)`B^Ogq91rB^SvH^soo^;ddqrW zkLX1QPOH3|^EmGJ8^@U0yZkqwJiXF=_mM^C(5mz_Q0TDdg+Q^t$;{}(xI4Jo{tk{0e~8qV<6yuE+A!I_UM{ma}k(so?6xxGw}_Dh(#r!qe<{;ATM^5xENV>vF)w7CC%=C)J2%dWSG`44A7bqBAmd*x$S&Ao1?P(oy>Y{lg&-OPg#DG#qT@Ox+9 zG5M>@WVYnN(ZIx?GaR&KYQk#OJSHA?OO!i!{g8S2of*c~x8i5+o>v!TYCgG8k5TwS z<+)Fy>es##ZI|OGoL>;6xx?YFUqIRQ4#vo& zFUzyPZS4G|chS1EEKYMv>OYN^owKTTZts2@{BFW|)`yE`tT#PglY9P@-ACVs8!S7H z#y%^#6d5`5?(W+ySzm4x?_xgvWc`-oA74A?+{h2uc-U+~QhV;KuG+-{(r!zV+8yhU zT+HTRm6+Hi%hoJtf1p!d;0V8TK<{CXMN;ku8knVDt)C&i)oXtX`q+wXAHI=%m)i@Q7b0BIV2BG8G=3n+KE3^MB9p;gHar!6n1g@-&|OH?=O-2b&Kos@$LUT6uupA+@ihUw&Nu42i^-D z4Lv4Uvqc1Y%7TAV9Vr^_;TIl_#^TOOK_uH9z1AQ?&b~Pp=O@EU;i)hyT@l8Gp+PO{n+%{n48# zdGi4li5z7ife*{~&s_H6>ehXCd($E{HP=4a=r&95$mXN&%Uh$`$Y=x>imCAnPu#=L9gP}#|>*^*h2a)=I}r6b!*$okZjYgK&L*c-=cc)$7Hn+6>m*D0p;pQ@bw0lK+6dC>Yo)JpY13O2)dAQ`D}V|K<7&f#d+U( zEEicGkN9P9J+|y^=%Kz+U(1loxt2%mSEV~GXGwkRw{v3YyKC3q9()rTG5_#V9g*JK zKebhpS!xU1=83PLnA`m1is(`AS@-SCO+&t(xayU8>{H;XFWkFDe`TGmR=;xg>aPqP zn}uD9Rxw}ZtueZym%jJil#IHV8;-n-uZU0V-0`pI_-<{rKW*{BkyEZ}w^$k^_pdxI ze)-3ZxuO2?d3og`qWSgPw_1gKHD10ht+uW=@ICwF8A~0%FE;LdFSJVXleFI_f0HN6 z_SL@(+aZS~|+teD1LeidjBuov-|z2W4NqoE#pRRmzE;-}c(;^XFwd zRCc{R<7}37{RjW2Yn?_0;;K_MdpG^opZc@ITQ_CZL6cX{{O8>hR6E(WgiQBi8~wTPd%K}Q(g8>^qiVU;_g>AS9>dY>-4_s`oCtnzsxJ*WsC2O zfO`_t_MCS(*T=6MyyxPQ`5mpU=JJ1b1*=ItW83~^N#6U#$zcx?CtO`8`F8gk`HE6S z0p*rsEP^+t7Nu)Fan8CjDOGUcbDcf4Q<>xMu1vSTeCC~W-LD%D{;B-fsBqfk?6ftn zew^S+jBhPI@%b8~>Gakw+heldFS-ySIH8gE)j2ECme#J9y{#0OTu*<~7+th;!c>9dze&73+ZQ-X`^%H%QcP`P3;} zZFMa7p2YkcOFIu%o#)mv(wt&<`pN>CODE%H7JR-IZue5@!>5@$LtjsenRPg}Ir*{m z622)bE4)goRCZ7OZXUe1@?BlZy)NF$_lG_`XS$#AJX`*K=@OPV zf`=cUjz8bhan#;Vcl+tr>+UW)s3>_ey_7p_&+?abd!BvB;aFUICQkA&bKUkYTgv!# z?C#V@*!**JO!jPfv-0t8-Dr_*zHQ%LSud%b_P?sKkkfw0bLV@Le=Xnjo_}^oK(6J} z*l&H_oLzNbvwsr>oLtwGSZ?1M( z&N)BgUBxn+=Z35Hnp#}_log_@^E2dF<&BaL=e9R%-fI+_tj{@p!;9da+i4Z@o;)tG zyfJ~LH{yhsqty`@+aL>6FghrzYJ%d zxjx%wuF;C`5g$|T72kYeZ9KX5a`VBW=r)Ox-u5+j6!l*fdFFj|oxVi!!DriT8@>?+MdEGL;JAU0nVm|l)wo(kuI$N@}3`_DR|G`qUQbD$m}rw%U8F*+gWP7|5)#p$vB)Z}T;Ozn-P zR@c9Ne98KFrTw(yN8W$^Ts+f7e$s=heG|LyF<)FBtee5}{KJl;wdc#yZ+C6^ozL*+ z=WpAYS3G_f=oR(H`1)468ia%j`pkGY`H}K(yZ=Qgs~YWM_nU^E|MO{g=OK-!_b>L&doQ>5URGmuW43|TT=fu-N4G+bp6Na%G}$uW zbqGu&@B^XmPCz9&L_S7d6IqmLC4t za6CPZt9;gc?K8XNj;t)mRz91;_ip+XclB+5d>>C*>$F*&Bum z7~6Mlnqbd=xA)BE2~#eHq>6}Fo|d>b1Bk>-%XPqpIpX~puo}z&5>Q9FAI6k{@XFRHSFo({`K5twYz3)oNStKAj{!dS?BM#V;{DQ zrya|mx-um^V*j_Ew;2ypUKpJD_0dP~^pbT?CwVUviz#`M!{p_&?a$g(AaL;%wyu@}75scRg(oq;{$0im*auFtEvabr|ninb>Z)sN<`)g>QuGl?r%s+mS$y7wmYyf$~7XY*5?QV zzy6*ESHp$?Wd)w5V@tX-wiq6|!NPUOg`X#p$(7;ZjNMiTzAnDd`=-}wTa0|;fh3my zlBFC%EDeVR_N!`tyS=zhWa`Adfya$X6dX3#v&%BMB^WNbuch+yt)u;<6DRJOuqtm{ z_|N&3P-|q;f(W719PR55r*zM0LctBg~E>EON#iuE6PJ~OiYtlj@D`Ih^oZ$EC% zYnglT#&^qYo4G#QB-WqsU+AzublsQTJbnw5GpiFgHw)B%mgQtSU>N?l_WplXXA_Ps z{O6cur%ho0Vt#WsbMAk29^vHO{3m`N6>F2C&DiG5|6)bcyJWq8v)`WY(=telbaLQ(G=t6Y-^t=LZQKlp7JXuO zSm(a@vSm`~wfk56zOCB)z~Mt;;(0sS*x88|XZiEyu0FQq?bP0Ddd<$~{rNVY@77V_ zd^B%=jg@9W(DStZi_!fbRd!AneV!k7FC(CG*0n7AUa9owHU0mTv>!$5Hmb8Th147F zj@DhFk>?S(^Fn~(xvxj}{`&TP^DNFFuB^>Fe_rpD+vF*f`{nqwZPm|q8tt=JbJ4rf z`Yf{UL>aTa{fg$lk5=o8O<8k|e>KzQuIR1P*w(Se&fY(Pe>cYz{de-qw@aFDv;1cm zCy;T(-T0VJQRuV4PZ90Yf4NUPq_%K@i`taPNs@=7G)fEDR)&QCirwAwd4qaP;K_Nb zj!f}K7}%T%w$TyL0qwedveubSpp zn{G>U-)Wk?aZ2gt{?Q73&F7tbHDPFI`?Z8h93!%jG7VZAL z_N%?O)E->5Ytp{TYtED_c@# z^e%gNY=i!fFR?GVnx5IOndW~=YlUpX2W<;a}*1yO*CnKDj3T;P=+WN59-)@jH9GM0@ior{G0PI5R}^FY55xa@ei@ zZE2+ca8a1uf>6`vkK6>_sZV-y>+zC1F9L)=353)~hJVhqKGwf2f2Gm=ZFk@M`c1LW zt?vFYx7k5*=h^G8HwkC%+}^QPZ|&5_M^3rdF>6;J{ovMi(s5UNzj2(>ry%8|RKx#D z7jl2Uy8C3ces0m;w7_|Wb=)$Ro5SC<+}k&+(BysX-n}8qO=4UYo@lLOw>o;P==?Wc zkFrfBm-T;%$jiNnP+a%?W7xZ+`xb4uF5A$pzf;<&=rgD96@`C`;=c0UF`uKlNJ4>i z>t=)6m!~^FJ!JZGUpuo52_)Ga(tBb5>MDD85 z*is~PXXP>B_OufL4+AIed@_HE$YQ-Z`?dKIziu>pxAb!=t}i=usefVAd818*wozwS zsIy4Ku)F-L_$7Ax`02#BE9DO6_SM%4>}Geqlbc#L`+J_e@C)@X)u*0a&{wi%crCU0 zcUyn-dbO=zzpUGBqO&te!T7VF;>?XH?^Bmn^{t)M<)6m2_fX%e`>MU`r9?lL?|6{w zQ#r>y{;H&{U-d@Qr-rV(y_aqd%5_h$=6}+h$No0yz0bqPTl(WaM}BU~`=S^5wk_w% ztLS4!6WTv?Y-`(J!lPtv%w_)k@2AK8-9p;wOlgYAtUh|Q{c3R+apiTP~CKV zInRu6?JNDx+_p1=C$Yz!+rK~m>nrc`-g2+L^{f*l8+B7_PptuX#G!f z(=68fX?Ln(bR(ViYv~kCkD2FRDl%ifnZSlCjgvD^>}EXpP_aU&@`(Sc1*f)O>QX-Z z?m>Tu^L>jSVzTPSZVwi-#_q`dczwqk?uk-|zs9@W+7%!FM~7b|Yf4^$?z#JKB@f>8 zD>M|TmMiv-dK;Wrc+@bmjQ^vT@1BxcHl_RdjBYO<^Bi7sCF*S5`hqv5=kB-9%}um^ z`03ft-`}+Vg=}Nk|9ExbzJ=HFU%f7)#>; ztH}G7iJN?Ny!|(vIgu*(Uuv=C&F8zd?l%dA+WqFa>5$Q*t9PI*W4|QJ@fO9;yM$jv z99{e8D{p*9+|z&$2NIvNJeFaolvR-3#{a45UH%b9$A8kj778!qoLKKVuUN2QFMqX% zc**((j$Q1P2fr!k-;jI4db@c~LiK*;+rMRR+ z-jrlivF3#VPtQkzK8r2Kt~$<>RsDUVdRoAleZqYWPXB7A&5+e*FrLsJE@XFLvvNrN z-}}oFTsNyV=@b6WI5zRg@(r=h8f#8m_dg#Xu;!KcpYOKT31|8al`=Oa zgtzUlU^{l`k;j==A9v4_ZOD>w{r1W~g!wVMOi#m~))Lm%r&sK1PTtsW6=l)&PV`!^ z1&{IRe_v!d+5bFH`I&qFf2))J3x=RS_v3{(w%B^Gi2PFy3lun`!_+wO#-&xx``rV6 zUktessFf5Lz#!5s^ydo?4`WiT>%VpB_HLrBN82w1oH^BM(5if<$2V|>JDZdA!3W0# zlvy(BUH~0v`mSX-Yl{=# zu5a5DpKExXrQyMWzdKIzi+ue5+ER$&(7d^S6`a|c`F8!Pd-HtyYUd4E84(T78LqCX zmADMdav0~+@^yxU6V{MyNID5iZ z&XS_zz}Rb&c6yn1fs<=co5Oeb^zEcIwUJ+?DgU$cA5E_M|6ojdyg) zZto6%uML+z2c%8t`Ndm!KKSbegGu~Pe|4R^8p&(S+jk;5PpsUH$M1&qhF1@dhdp*J zW6wXm<+7Qr^k&YdGb=p*KYi)R${Dx+Y}jS3md8A6S3C@F->n+%Dcsljvvs0=^O`v` zSKqMObV8-|S>!Th>zWMZl2gb0G~F%M+8G6l=H2D2(wSqc&af`;h2h4HQhSXA6xW}a zvHjoFH`{nB4rCpOl+%+@)V4R8dOvm9gNo=s7k|1-)%t9a+AVZ8^~a7%j`SGbYMHHJ z{DGO`H>DW-(&MJfWCxrsYl@uM^L=ZF=g;83iweJrMCbo_JF_Ow@nd6py8PM?%Z`|T zwCU5|nBe(XafQ{qkm$IB@s~}{9K3be`jVH1UfhGQr*#f-toQfV-kctO(DC=@Rq}g2 z?4KIm_%A@_XZ4Ra(Mk^v9B#TfS2uTkr7Op*EYPe)pfCx0hJ1zg{TmnpF7qTjxQ&NHJ64 z`*c@BP}lF;ZN;Yza77;CcW;!<&e0F zIegNgyN^!ac1Eu#F6!qmOPw>*$}QX8woRyhmX;ZI@W7=zBZ>)g5i0-pySfrK@Xt;Bltq z6+5qun>_U2nIGO%s+^ysbhBW#W>fgSTO~iX-YXK9uuD$3Yb=jGpCdW1c!$8MXM zreyyfg&$X5eGRbSeZE+US$uy(=bO8e+j!Tz`}7c@0{h&l4h`yS|2tTZ|;qc`>Q1Ec=fFB>;ETjabvgL7m=E@pb^`6rXjuoiAT+Dsl zvF!)vk@S;5$c2MbqyWob;C zEc0WB+oe*uxwl@kEw|2EI@9%z$X`v~;(q^cH#l~mSExR>?A~LyefzZ!Pdn=9;jrl4 zYEAaJCl)W95^-kg_>CU{CA{y__nB>4mzac@V_8SM-?1a6J@&kL|xi$S55CB`{>JWb}g-b*SkD$ zgF64!?-yP(O*}2spe7~L*|TJ&#!{JbGtE`p$1c5U=DNc(vpl$DYLIGZRm2o||pkn?60#x9&eT>%8~UlYTq%>-hD} z)LeV^=DPYTMUl#t3xf?LAC%7Q-Dd0d!{%bjG3W4Ug_8PamVEZJSsDYR=d`KJ{O}-e zz1yRABC$ukHVI$qj+v0KU|Ub2ZSDN;nr}HX-INYJl$|H+B0*Kd7;X`g?+MClMmg>bDCw=!X{V# zcgIJQm!YdP-`Z@gd6(a@|5J=aw>VV!u%Q@!Y(b!OMQkniW^U%qr@?%qxiL_Lg_ybND93*e%=o_ukW+whOi- zsU0jhS^NA8k?Xhwt((<(Tv%P~q_Fu1V8# z!j(-W_U^o)wt!J8JmqCk_j`Yf%-D&R%im0~t1=EXDBk?oaBf!k`wX+jC10bqM7{UC zl$6bWl}|e|D%4-I*>unPfA`Z|wyx*)IU%@yANSNrtHXAlvsp1sGivwW)Dq@pEBCFu zJ?C27;_s2_+nlwZX+3m*aZR}B&d$i%s2cBo+g=>~GS@4#y<$eD=bIZlmmm2%?cjR0 zHBY%hv}Tre$tqjkc`L3jvfk2ySJU?X!POPdlS5`0&YEF0DLMC3EknMt%I{?tsbe@{75Rw;tFr<)n=7^~fm8fTDHpBXfM@ zQrG_b_I$nPwIBPIKL}=iZ(jP=%02nISoia@aqqXx+Ev}M{Gs4UdzB4JXFZHx*}R*#5n|_^5(?->W0r)1BGb6_&ob>i<{FqTtNs+8gJW z%$e+8kot;``|^aVyThzbIDh`|vby>Gw)pUrb85M}3TrZ}mQK48EBr`#d)%4d`>KC! ze#iSNK<|&p#OtZLCR%^u)^0j;IXB&TX5O*e43?^?Az5Mpr!KUgyR826#@9!3b557s z6PdGE*k5IN#x8eRg>N$rYLd%8T&kI|Yr%nS$DSm(-zi_@w6XEdt7|%}hu@u=GAU>K z%hhp~TXn?W?&MIm@8nURa^_~C*mIxo`OCFMj5o(wd==7Ibo2VtHIfq+nEX+^yyvgA zWA!e>l^YCBKS=OZJouT*L;e2t{_cFa8jnxk>ypfWGc_uICTIy>^>RKqL+Ea)!MT+6;dRbI!(mvE*pRXl#Ie)X^kDBy7yACbA z>n+X2%lx9nJ5GKcgT|wX4Mv^&imonQ5h=k?^G8SRk1hWav9&d>7Zl$wr7p~wE1Y{EcLm?Al6US}-}0><{x+Xm?{W3-Y~Sbc z2mja_?zX*~aHie1LVhFrY2|MTl}F-KwUYSf-(PIR{x)!C^S2de9IHc~EwI%p7ASgO zKB0Pl^R3@TuNX9KF9f=*b4UX05Xtd>aBRc$mza zoCOn%S#C+NwmCGWefV3T{Ah(#{Rw&9HUB@#@*J7u)c9ck```ODL#-ON{Wm|g-{3Q2 z~+J7c`V0|?C#_gN^0vATGFY>)tk%IKHH)9fkyBZMw_G# z<%`=L|1HSBT`U`YiS5`ljlcJMeg&SJzoGm8{D(|!$x5=_$^Y+L)J=K3a{ffVro?9| zX*~aUN)31#nwtKV&tBB8^y5SNivM3^TNw^4D7f(ccVB0z!L1`lc$iGxW;i5rBnwD2 zR_0~2Xr|RTE=yCm{P*Ytcfpz;mhU1~Ir+34_$O2T#!-l+^abLuA zSF4?PZ^efD-(`*8dCU-$N#k-{bdh7lN!Y)%bK~Hq-Gxqa7$A#zRcWrGQfSt>I4M|hW5i7Q%^;Rg=HOJUKcCs(N}3(K;6(EcwFke?{j1y9n%K>_;6bz2biv=}Wa_sby>`Wc z&!*h@opt%|qhd@<%mExX992Y5)P8-rKk>JJKZo`y7Auczv6er}6OYaNap)m?@29$? zKIhs0e1HBnSR-Me@Qvq}yrmIerN<}pTUYn~DqvB&YWGCZb8=r^#Cuk$HF52Ef}thP zHSV;vNtjO#s~4UB!S7GPiOR)aCOuv(_jp1}_gQ8&v76U}&BcTSurJ~iv%<4`cl0v$CD%^>wCLjI_bFd^_$?;glHPO0p2?1VB70}} z+_>sR{D1z~t^1eM-T$B=sYs+-a?Be zyA|&oJ}q_LVq3eq>HLZ2wD9Z(wnu{H1rHpmRJ$+uT={ft#l}MB@VslkUhgiVNu1xBxh5Ys zzwTanML)M#WoKbUZ~)t$Ulom2FGHnI_IK~{`0+Pfx^wlMHLqoIB80=v?^8Lt@ZsUD zJ0tE*TVAa_-~aNHUp8l@>d(#=+in;h_q1=S`LjEEKj&A!NZI3a(=7ON{vB_(<+8ie zk3V)yRrqn?+zHdp(8+Vo%{#d>Gb!N^_ub8)jE)u4#KZF=laL(>&F}h_{okYt5hc>61W#x#!-lwf-NozkJMJ zq7nGCK=AVtgNH@}dC5uXfqUnlf7i0$V^qoW6G|-$baHlo*uTx#r19*Qq}}Q*i*j$y zX{+f_+pM>z>#g6X?38owj&bu$G49+mSDr&k&+fi(v7+tPlgs;WbbFujd-d|Uu}o1= z__f=zLXYj!KXsRvsD*reI!|GpX8p?(<>&638CMHzyt|ZB)=qx=%!RhE*3Vp=%GCd{ z^1#8ixSYQV+v7r5^E1EwS+H{Q#0Z_|O6UCV1?lQ2vPiCYA!3^-oDjk-6Z?wegxud* zTV5-{)^kV*=YQO$p&&v1@njT-X<{x|f z>yN!+zNeipNB1n{xX-dlac0zspn1kZVlkF`U&+@uEme<~@PF^zm-Zx5dfgAP$1Ajh zdw-NZZ%LVQuC>ru?UaUl<+juZPIhz6*t-|L&v^dYaw&I(YvnCB+x^ zndP|lb;{fsUB-f5TX&^pem%zUbF;VaH{s1K^ZkU`_nis3+N$?xZj%49Zvx#@s-(9c z(lID@+JA7z#yL&*=KS1s$6$%qBa_EhJ&yBtRop*m{VC~WdG_)<`}Q3Rj#}|DXEvLo zQFKRKp|#)rQ*udq*OzVG-~7U&cg-Zxy-GSW689M1coXG5>G;0H1)U!K0dYfx-OD9{| zHi}+5+uCW?S0g?3vP#OL%!`{h$!?oD?P2(v=ljpBJHx$OeOKq@9T!!srsh3Zy0n_T z)SlZ+SS)6{S@Ux5{e?U3I6SOZ+mh?-zUA)T;(4{V@0@w6Yx?=D*?0czERiX@!@t~b zy}xU9L$LexX}0>IWv09Zzu$(qZdcnSu;BQ!3hkFlnJ0S>-4%Mk+dS*;lGhHVb6V%l z+0NPNA8mJFZPlXoxPbJ>#~yyXDfaREHWUAf%Dq1h1YL8Nm%8kDrazfs@77B8L(^_M zGOWB-YWQ2E^~JM)8M7~^FP#1STiLwd(iHB>OKNEOy`{L8;vtQC# zRIO4ZnlFSO{*=2;+}A5?Zq4ma3m5xEWEP%yv3Ty2RSWa>D=qBpUYCE`>&$_5ej8Yt z4z^88e6vvI_q%Mx%||!vR%qNU{z7ZYWXqm;wZd3@mJlii7SLnYbSpbu-t4=SAA`n`RzRJZ3|5?vS|B)}`Fp%K5^_$_|Z-%?S8Se9YH1{9z`Y*rD++x}T z9@ry%8?Qr*O^Khfd{+IqT&}Z^#Vx7q$$#^G@=Kk>`gF}$ z{vR#XS;c<*&F6plG4@`ZZ|jxVw57QkogC}kcvz%AJoq1b*Xcuj^A1rS_GD3}|A%rq zY+D`w={vvuZJiVN;jrq88Ts$D5B*yG*1ybY%_J_a*=8~yxPKeXj9y^*lU7c}Q>2dqIjLkgKZI^SquU^}KKsB+d`(DxfD{Fi7 z)Vea8+@x39t({!KW}KFuS#MXma>KRQj$qSBwW!AjCD~>ky5Rpb^z!L9Tx#X&5v3BV zLYCZ+KJ}$Y=<~Gu!MonCVG(nG=3i6m_b>I)<(Q?{q#1)g9G>pG_|ln4Au=|ej#Fj- zt>oXVyLsN#?d#9JR?5sf9UL*a*Y(Ic#vCVJt6JKgjR@i}zcmS_;{}ziuA8%P{nWxxrP= zdb@+yyjEoCe{}f3qVl}i<;9ehjhVs;dm=W+R^GdDPVAZP$5q?+{d}kG_j>l#!_MJ) zSw;JwDm?f$ujc#T&(Z7ZIzI+l9IO=jc;xl9JrkbCtmeA8 zVuf3z(7J>AQ+k{^wR+1=yT)f_a=dvJXjlF8i{iJ=%+3Y--U}c6V*31{d(Je+s<2&m z7VF2|R?T|4?TW;$(AsjYT}Rh>tv{#Nf6BZq`ry53dyciw%sHDi`{=!*GhK=wJED!} zow)o&U!)^9B0~Ro=EmvUBpUZ=d(QbGEG5Fa2m3uqd9M^F%3(3J87=pY(F_J-Z`R@Z&l?2DsulHeW|;6 z_SArVF?G|c4kc}4*Qzw(fBN;vf3?>}dzW=jTPKm~vd^fn!@g62^}49zeD?1%ZtXZ9 zDtG<=v_$Po-Tif6-A-vN=~*ja@ap5F^UNv7BukfdsxP>1*nDC^S*Oae zn-t$2eqBG$V$a-Lc~@`l{c}=NT)#Hgsnu0}nZ3foc|yB9n0_<-E_k1I?Q5FugWDGC z(jHp{Y3cv9IJc_ut3bZRip7)EldgF_+_SAJl0olwYvb+^|Heiirr__HbNUr^MQ^XK zt4&f%o>@ODbo;_+~Oefv@fBR5wXQEk?kJo0onGp;t)F*iIrFUdM&hmG1 z+aWUVrm^=NrS^DGZ9n`r{{#Qi7-NIWZ|29W z74(yMp?!V&9+4PRp3s8P$cGXu)g4u{cC9LY`(wth7Xja;3WTPp{qEYd z`b#(4%q91}gk8Nb!&mk>yJQC6&$THr#~x1mamzA2m+7-K|K~YecM2m|-*~;BvgIo0 z&lejrTsEJc*zqN-(~>`QqMFSft^aDvOr)k~e@VTP{I@~jHLuL6pyN%;cg^5_m83VL zy5`Jcix_#$bpMdG{~L-*Qh&`!FSOklcZ%n!(xK>ifypU?f1l4vPn)@1{JQ=9oo33XrpB{d(7{yO8(ru)G)j1{+CM=4lkeV_-@j((2z4V`~|+Ajwzq}RXX>xxE?9{(X&_a z%C=mOc~ur_$ELk;DJbl_S(5np(xw7a$EmJc|Er|@y%c=vSnt1yXP2osxo>RPU9RLI z_qoD*dEG~|_Zz;~Z`7G>cJu$KTh8bArirqLoYPTwA@axSPt5az+mE82*NSr*-t^xt zsp>A19A4&T-6E4K#+GD0SH*m1gVvQf@^a@_uw3|XXRbvqXSmDi*zZeyW^2E>d9UM@ z*pt&+zrW;h*W^jnvw5*ZV$ZY*N$g*@S0@`7&e6yW`5HT+sj=!<`pn+W_(=*I!vBh@ zMzxiseG7DLbo4%TY+VGxg|^pQ{*`*eE?U&lff>WMFp=_;+VhrISjxg2|pm?`^ z=B_-U%V&2?+-7SKG%@mrkL`^W+9!k0Oug)|teo64{HEvS_~zIauIXm7ipP^Q_J~^p)?$v2?d5MenBggkaQA1b^yNbh`9#LE5YZdv{`sn|8SR>9_SbJu=Ze$Cs@@zk;@y=Rof z<~QZ+o)M{G5%w(6O8t*$n9h4+*AHfUrr+E8y*H^u=5AxaBX7CpnGy^bmmlI+r^ zY`->pXX&oH&DRPN6TE6K-*eu%#O1^3-j^%2691k*#8bCwdfAIl(rT~eCT-^YbY@*= zrn%qBxEb5Hna|!*yZ33e@6UNcp~1KInRW6!-1Fzw`#DK-%s7uTDV?#MY_(7&aE{k9 zooBlxdbb>wy#GEkG2pbq=lnSqn${{s+e7uV`ON2OdDrY_x%9kw{l;}WckX|5TcoG7 za^LOqF<;MAtd5zow_^6zZzm6Nu8z7H()MlA!|i6WRm?7rs&2oo%{v;u{8?|L$5F3K zD@^xy)tfth6OW1*dI#>F&veX zJlHUU-{HZ+&FBBxu1~lyvB+D6f$gAJQR9LcEOKpc&$%!?;P83Yrn|WzQRt6zxy8HJ zm8{KuL3@~583hE^+*4*b-OO^N%pz%?qEKH#bHeWfi6;(Mu{AaFu6OitG_bfK(%Ck9 zhSPxri%TMDNo`Dv6K~8*G`_Nrx$r~a3Wxt+WLvIs9DVjK!GeLaz4@lX43CEY=MwFX zl`9-!VPTymp_m|X-&f(7TAG_%hO&TKr@5(P(!ZPUe+NFh;D3Lk?h_7`X~#sO|F<;! zb+qDWk(bLq@FOpUrCIT;LdF!q6IUcYs|Twbkzi_C)O(>or6AxFP*|2Z1;IV)mGbPieC^~2`CAOHj&2;j4 zsGuyoK{La?UGs-W&Mf=d;SnV+I>IWsE-sBr7Y3@H#JUR8S7?nAmyp-_gGwUnT~qF!Z!I{`>Nm zeO>E;Rjq&4z5n0zN}xui>*V~$e8*b2L^l6Dbg5M-k>dydQel;6fB#uO?lU@^RI@CB zMS!j4z{CO(nU0FK5Ozetq9Ky9c|`mEnm#zeG-JHa7q{(Ulfoy!t*)J%qcNVUv0(No`ni$ zSnlyZbnf4D?#~z5%`+JnZJ2snLm;eC`XpPE(}wcmA6mvaXBZA13ov2nyUCYy&DG+V zxpK0B44d(9$EV!4<&7`=ck5^6Vmgp?=0+g?{`p>hbe__A6l%d?S6Vr)ls+KGq+-tq?+Dvs zc|hx-=h4ia7K`lf`qa5i`Y>b3>+*RDbCVw}DAS*tqE$F)%I)dmpZ2hwzxQ2Z@v2py z?tI9Nmy4add81+L_ImM-h@F9a%Z+9|cs_Se;J?ykE8CLJhCg06dG%%2_l-He9JOgy zmIr4}jC`4OQ7HKD_4~hB+17ly|HAI6jEeShfYSP&kea5;tYsK5oG0yRIe_m=kD7tEkd|d3Z|EBbtE6)DXGOt+o zNWGl@u<-QlQ}Zp4&#E+CRCn*3d(WzdMrZdO9{Fw0*E(Oxef}rsmbGx^V&hEPCfS0- z!;$;bw3n{ik?VUc@&Ec~k6o`NU-qr~k$m}Si_)JtOS@QhifL7Dj_%Fo`dq8^*3-4+ z^^z@HO^^LjyDyY__ssV20IN=!9eqtfWy$5@M>JnEr>Nah<-EMIX+ifr2X=kYJ?U%q ziCy@){VuOu(ah;id%Wih#hdjVi&JU-r5jv0IgGRK-=pzV6I9so;zcJ37@1HaokVb%oVh=$d{k&4~(|# z4+ygkl|9Ov(IGaomixzzHm-#QXTF#eJ>%WlbwT@0jP167fXEN$c{X6yjsz;`OTE0xM zDZXJkgHyhB^Db7aIah0(E`3@&)mf<6WWPJF;_ti^`*nE%u73pj)A!s+zU#(%VX;C? zMDpHsOL!S?6@78t;=AamZZOv$>yYiug7dnjR_th2>3A65t@;uraXa=3?bCk2apiO`qQUd3xECDjRQ@-ledh@+n6Q0s+sT^x@?1lFB&7tP9Z>KA?0<2E>y+7vm^sn?amkvt zxt7MAi`MOzS-AUQ%=GAj^hZ-30mz&G!v>&==?Hm1c z+LGG%2`lVoY6c5hU7Mw;Sm^GmJx^l22LJYVx{A5AlcgpF&%BW@m0A5O=jhJIx88Ub z`}~>Lc)X#uB_A-=*g*5xU}lDcgtb} z4$fsYpT0=PwTl;S!0{^U*;9HAF&kT{`h!b`ri3dx41?cacb$`3Aq_` ze1813=G+~(OFr4gr)1C0+;RKEjHzo>>rSmO{FwN|F!AC&=~qeDjGya0T0P~;t;onb zlJC>@DmbLB|EcSvw##|k_EVn-d_dC5ms}XsV<7zW z4!pm$R6}Ziy3p&zN4Mrx3QSU&m*gAqW&Y{+T&ok-OyS*7tGTb6UqkPf-Gh>M3`zHE zmlt37`$RC|MSZgk)1Kp>c(@>Gh zU~!$j=z@j{51XN>p=*DzmQ5Z#l@Z<{6K`7iJ}vWH!-gdG2;a{v$)T!ka_aa{^lWp z8wm`u7anu8y>(XO%jRx+=N|koi~HcJg5)q|4vFeREcPEB{a(-;ug7y@8+XBh7@$D!eY-IUQ!U(V=VZxj*IUPo=JD-8{bjNm~5Lkk{s~ zHJ91@OSOv!buBi2plEldps_$MPxObzx!hevyDocLM(8`QF@3^Wf5q_B5<%6ZCa&qv z^SX0xrt}|KB=L34W2Mh;)$}*)?O)Z?8(-;IIhFCP$h&p*i!`I))S8=aFLy~h z-*36IF@T%@@!8pTe5_(xYyT?WdOM%Xsj9oQ=(_jR$!1G`oY$MV^X$C2E6bw4l=BpC z-1t(S@7K1AGG*sauDi4LO<%j_mVG{o(`MOa2DltvwMAjy`I~mr(v&+UiBG?@W2&y5 z+vCd5r;a%q@gO3oc#FzS;HO zRViIp=V6+@{q~NC--?g-+Dv}I`bAuDjle>`yX7oKTlfV0xrI${IYi{guAN)>E-8b( z*>8F1edZ0K2lrl_;+}1?p}b^0$DMf{aW59{+<7WRwmj9k?WG9kIo5Cam#(dAD0TkL zzv9>DYs;<6YGw)*vrkt z+?035MK4@x5ATjy!1rs8b@P<3YxZnv%{=|CeDzn|?%QATs;Sn>HR@OO zrps-Z+Vs{w;NJGBznUj}eIKoPBfmRKX3Ny3_qlWaE%^GYRMPU4cHMi^&Y$88tnB}P z&T>icH&Q%scwU>#msu_HOAlq7Hn9Q<)idGNNy~tzl{@^s3fj}_HN?LNC-Km6^~uP?EZ@!El)`;D5t;zlx>9kVv+y>Rhh7g~}tBlpSfRie_*wDwBwzHI1o$!W!llUJly9!P7< z{`T|h@nzp8HlFsE+w@KH*0$9uud;70xV25pzL*nMpa-gvG+ zdvSiq1z~wPzI!iMwoR3}vFFeh}w@+UBW!kOaRSJi1mo75erd_q8 z!YOsmzUOTD=N|I&$K9WkZMfz6wLkL;)_zkFJpH8a$>!Oej+TMz-5O$*i&9iSuX_-* z(Odb-*71ef>?U8jcH;Bq zEy{EM87(ng<|utLDt_tK_>IRr8*X)eZoS5IyK=p;Xim==zmAJHZ`pTuE>KgtUL8HB z;&8-`TmOB3iPlF7&2KoJm(e$Gh0c4{Ju0Dp*F-qp=-z#?SiD$6-T$TWwHFuieooJ* z`nZbKUPn4)#%CE(y(5q7y*%C~UEMEp(_Q_mP`{~q;+LqOmmW=Cw5)sPJkP6vPP2a= zUH6jJss9Go@_l>5jB*~ERo^{svdb@V&QA-6Z4VY6ir)OYZjW%&;TLU=oQ%2~HJmdq zWjC*$(`mi@(*m9NFX|C0rt9ur?_|B{6Wxy ztK4th{e4lVcrAb2#1&mHJNNxI^*`fx{_**TzmyNZceFB_TRczl(}h>pBWxFlZK(Se zka$7-`l<&L6I2hnYL%ET_R8;kz1WX+qh@BL^yw>#<#Ov+H$QhRSoy+lo@H9@?~v~w z_qa%&o%wFdcJU9qn=%{A_ZxQEtczNnsB)I`-;&fT_oc&%>u0T-*B_-Fr~dTvhLaiZ zw&{Ld+jy{u&#W|5uUD{NbtCJHa)~8VZCUQDc^JA};X+xc{M+E?#=jnAtuKvppM4ryj6d`8|A_M?qC@nDd7`vxS+SPc_qKx$y)%pS87%>65_S@AuoBqAt9v zI@Whmcf-v!OFw2_O-_8}6ElbF`n0$c-JcxHjN%T@(0y-SFz2MGoX%Wsy;Z^z>n4~8 z*9Yx)NWU?!HTaj&hm=Pvrii{yy)W^*@X6yt8T`$sZT?)ht4aTR%(m`v@_N@^=YPuI zgzne`6nb5=)PKmZ`sXFyhld2N8R=Ems=S@G^6j^`Z}v4j>^#(ew(@+}9`30}Uo7+S zj&iN+iksOecy<2#nXUZUSEr?KKNG%8ocH*)&GwrLDh@HLof5UIGw%7E*~-Gcds*OY z{gXGm!swg`Ez_Ps+APVGN^xeFDyT0hWpC$oPdj` zjwQ91RH;n4ap=So9`=8c_sn-aG`Vs&>D$RGpCUv4Y?K#oi=F@Sp4=}vtqnUPzq~DZ zl=NFf)c@s9(a#QxEw+VxyQh^YJ2@}%v%t~=RognYG?_eL{nGKZ^2-Z#C8>&nMIu!y zDkVK<%nj#nohkP)WS6Gzl-k?DY0tFeVjT|N{-FMM7H`aS3yoGs&1t)gTNo#C%Y?KE zpI}*-voN~mKx2-om#0?d+T=|;Im~_rY^dp&I)_L8$)<@m*KIyVx~^lb(NjAf=UUpJHvH?O@U<)SCu z`oy?rRUTj6w70u%Z~L*g?5V}Ne2baSc4>%OugzWPWD_}+D|u!UUuI^AaG__Z@K&#~ zEiXDBt$5t@(QB>sf?2mkuRhwE>b=@mm@lV%!H%G>${zfWFNOqJon+{p^yb)f-qOXI zFFz-K^((u(G9f}_-Nf^?PO`jaCzo%3*?oU%al~cwy~<{rR_yZ2d2@41#m~6=Nrw#Q zw(0K)^j&Oh9OiGAUpsI1?_Y+iA70ra6L0a6^J`Oe<5m6zZrn@TV)~tLYYBFa z-f)Ib3lHpWNt-DX#kjKU=AMJvB};c%L@m|ZQKoMH$NttjmUYY4)_PxbC{~(eq8ar3 z&EE4@Y_u*d32e4nEFhS9VM*nJDIr{nnv0y6&oWP)^emE@H^@nK>5~8V?ymn`d;R6^ zaQXk$`rrSYd%tGyy}jR}viHB=JnwtuT1t6l$&n5ePZ92lH#A&7OY4!Kg}k1 zY>(>S_0noqH@0uK;hr?%yjb48cMhxir60UKGxPMjTQlzlZ~8jVC3T@6^NHXhhdHHd z*B7Q_#^`n5?>w?ub?4U!{MBF0*6{|Lze}I`Wy;PQTfa`az4QG3Fw4gmC#5VXGCkeq z-W|B4;q|;jT=C~-E2>(*eP?QU-cuz?HqHNe*35q!{QREZT>0|(>X5%>KDm+U-$Y+5 z%<$X3I`;pX%?JN3{NA2F>$1eQNxG9ZYw>@oiI}f0w$d&mfpdxJx$P6w+z%(;xotV= znb(&7`_KJnqTNvs-9*0stj>_w+`f~s2GSTfgc4C2{LYPE1bBck0)Mf{B$A^p_ z65Z^ATW`%z3%e+u%T%zxA^1?TTJvEAK8r~z{DKp*9&vn^W@_1(p%b*`@A97~yd%F^ zUs7Sgo?KSf{%5@N^v4^|oPHl9-wCgP)PVF+<9M(NT-l zMbJ@%Rblc;?|?`3p3GnTZ!@;+={J}oE^=*x375dUR)t^BZ{FPSmPN)zZGwVOXP4^2 zf)t}!O|1f^j7qEr9tJA>-SK}?-?ROZA335+9jirMvQ!p{XRNM}`Sx7$?}oQ2N;7#D zPUs3VkzsXhb&fT0Xw7Fo#MCiQ`)?$}zwaA1KaBKcNSyreWb+}V(5D6;%o(yGAN#2- zV&rgD5;PRyVsk${xiF=on90FNPU%o_=RchX(@RYLZ;|bFTGewuFj}LTU={D;aKb1}eBo z@G=@z@NChk6lH2B1q>)p*P~*1sybXJX`f8>CfN8ZpL4k-~aVSLTvSp2TQkDEUCM%eW&=E zdCuP4a)s?XIKF)_SBnW@tJ{ztbo=Ah=FFt@y>-(bta+94a_+ag<;^=X->EM8#JM_H zB6Grtdz0tSV7|TelRx`C72{>{oc|JjXTGi!`r-QN^Sg@=rkB^k(iMfRyZ2FtliAetN`dYtEbh)TUZ23Gd(`Qqy)Ngd{3i|ocE9+LL z|DUua;Wc_o(=D!e$7X=ST4gSWNP<((csnOoa?PRVxt5I=d5 zv&l=ud2Mp!_DM^dCBh7NeSa=AU1Ijjs6{4SHfZnF4l({jkNG$MU)z={UU^RQ;iZ>6 zx%ubsJy*9kmw4B^%QnMk$`sXyo8wzIKiKfIm3ddXsQqSM-#WWLd0X_p$mYKitTEW_ z{pq4txPSQfQ_+d*opL69|0eeShR)SLh9%72JLk_1;hbN)ctaCgS8(i?P0K@O&Ztek z9H3q3{5trg(buiQk}Ed#YNwlTS@QhCnO>Pko$Ca<{=WBO|D%;QkdHyE|%LyRa?5>1f-pt?#6(*R$N)F@Le@)XL}! z9oG$SS#~|ITee`X=HnMqidVuePuL@{);V|YlixCbOurin@4EkV@;>C~bbZO!I<+R}5@V*M zW9Fi2>7A#ue}=P*e<+=|>s!>nCw*&eFa4fm$oVqfX*SoHc~eYeKi}JX{DIe}hB;Th zAKseExLa9xuU`CSQRb&*^`5x_S=PT=rINZH8D(3q`2Wrz^mX-yuU))hsbz*I+oH9G(Z;Js%zF^?2QGpyyyB0({gt{ne<5Ft;(fG?rCzj zEBedD#cyj(+Ai$2%jkRA#(>kS&gbby&S(C%eU?_GwP8b1-?X{RliyqGKkNK#dWDrG zDpz!)^yj`Qs_|=2SL_S)cy}^((aFw<7p!X+^KZYblg7@z?ctfi#Q3jl$FuJ|dS5?z zX6G)Ee`TwDV=rfH{=m35H2m}ayq7-4E41zRm2SPgce7XQ8XXx+vD}!+*CXagY?%|m ze0bLz7NHx)s_XJsTj%txDn87y_D<#AsW+XDGsa&JJbET2kf;B>*lzc?!LhHJc1>F7 zceKap^|!h9FRJovet$T3tD~T_Sy`Xie~EETf+=sgjOyvtap_wwP204fHzi7Ysr{Et zd(W4r{GI)t*}akLeE+6zpLluyJ>xk)f9x3uZzJxt|Ed(T=yaSc<5+j`akTO)nX=5Kt-oJxKlbFwmPb{0ES<~qwXOadoQa;p z{vzFf_qnfb+uZcFDNcJlD>U2fMDb#k&dAsA-e25)OQtBs$9MOV=Y5q&mo7hfUq1Z) z@$Y$VD-JJ;Jl(PIWck$V&nymP-92_V$^A@n{^t2#8{DFGrH$WPtiP~z4cD5}Z!E>X zb;W;wY$&;2-M_!L-16y()(s}kdlRLvr~U{#{;gO;Ms zPh_0;_^nqEoBvf!bVD_$8@&czid&xx!xf>S!?m7 zH_xI^ouBt&vGfkN88PSU{y%HkeMC&C-b8%=$)H*L*J=OD@weJ$XBqNrTS0i`&lSx# z|NKpyA3ZC3^1U0y4<$rG*Pf~giC@}RXq&1Lz_qDFJGeG=m5R&}59_P;$}x79DLH3j z_jh|94Et2=k$=hhzp&n}S>`_0UVlnbE{gV8Iet8B8)`9UU&yy*m&1h1_2=r%y)AwA zXW{jaRl>jjg={=qw)mfb^R_t$TSL+oJ-T=Cnd0@nUA$YI-4<&f+LvRa_ie=zGydzv z3tqf#*Ux`!ZNDXI{g&N3zdzo-X49iWIorP_(?YE_E;EiRe&;E+OefoGhKwD{5!+se zhvmj8Y%KdPhQGgi%)=XIoAE>fBd?-;r@S2NB zaMF`cQ$jg4bQljghA7z-XNbtm<9T?|MM;XgF+--+Wr?z5^NRb6E;YHId@!-&jeiH9 z3yX8XjMTG|T3v1GlOJ65I?$M*#Jh5<yDMLeu<5Iry1O3d8|Dp|8*xN5k zxR^6eIjDC+IPqaDWW3tP%xj0z=;Z`UJiTCs*EWP>@I=}<~O@N zyy?cS_VExP`V8*#){-WPEAP|^xU#SL zcR`Hz;Coe;-AnVm_02wB&TZVk!uS7wfd>coXUOR^rF(3hKcDUV8vnAi&lOviU4MIb z(zlz}PR%XXm}jmp!6Wx}h1IJCF?y>eM;5z3?({G=xq54J*7j4SC#Np|b?jVbTgKB+ zegUWOl?+ekZ#iY&_Suc&x{cVBT*1%}U%cO2uCM*19UOINi}}02+KJaow^s{ZJeJ6A zslV1~)sq(4HQR0;JFL6BB6(@u_l+OruDt!Q=i(pni0eBW50)MLI{EzRMNacB>j>XF zy<~6L#2brGm;c;-Nykg?VW*c&-PNPZ>yq=^qpFX^L>#v<7nq;+>B~vE?+@4Yb7zZQ z-MwbV|38Mhsg^%I|0h1{N;Z75xyG$_PoeLQg`11E+3k@^`sdSjD=O>SJRc|PW%Ivy zYZ#y0bJ3%AL1pBcXJvEbuANAat|*@9$?p2br)yJDQ>k|G3X$(ep9H^9nO?Y-ecF!W z`FysU?pR(jpS|<88Pn~{Vx|)3H_yDb;k8zHfJWEy4>uLqSMQpY+iq9>blHqYrcrmA z+v>I*tWf^`eVfo3*S6cm-d>l2b57ds74$FE+-SB`@agYO&uxmoZF)cF#GBoVghQXJ zcN{;O(!QC0TJf~Kio*VT`<*p!Mtq$jAv(|U@sn3oY0S}=SW9BMwgu>ax6^!Y!uxR2 z0k+9+#izz~?66L4NqMo^K7Xc0l}Y6ptB0=Hd%iNhnX0_8GWYMo*yT@Gocqmg3rsc_m`Ra*DcL5 zoG-k0OQQT`<+ik)Yr}QSx()ArRGr`@{PmFKl6afa{=T~MU#}bfS+#LPitDBo&(EcJpWml_{K};u+-nRF{wRf)@|L~zBAH=CXpN4#aVdY z$ES4O5IKG9`%T;B0ru%vo;!SO;9R(EquSX!i@VMJGi%O1JafjB=l$=q-QTX{_1+bY z+4uWSXx+c&lk9>1@o6_gUVN>IDYW{{rT$UjU(AfsuctqJwd_}0*Q7 zxx$?>yXSg;*}LEU!PlgxCU1+k|J>i>bS>m;x!N{SHMerfrQy6%YJ0tNjXZ8k?c1J| zrds^su-YBA+s^)%SGKQ`U8f>jdpcv^MAM0PUWN4i{!#RP;^U%6bsOJT)SSNZe%h;B zVVPdtpFK8q?OSQL=dMqIflP+rk?o^iM($hOF-X#0-qGLhdScWpbh@58!(AFMA4 z`@DG8S@XGh)_QIJ3w=xWcrOzA_GtN$Di?DptvZvdZ#KMCn9!_p{K<_-CeDK*6UFlP z{G56-TQw#)b>8gdHeC|(-z~I$p55nma_&9Lr8Qr7hd%yuJ9(9;W819MgU5rn%v{8i zS9!jFlf>zyoX1Ra--yObd|Sc3%tGKikH3xVLc2OsR+;^VK5uiMobr8G)4g+bY_j=Z zi{6>3yJpXQxTD&C_9DmHEBB`T{T)2{ir)Pd0{3?CRv&$w`+bYd$+MFuU$puD*Qzf5 zdhU^YzdWJUy+`uy*eD%6xL@xUqiT)*iL~Rk6>;eYKF>;JH(I~_?&~@BAD#wiOyvB& z=M86$l(_D%L+bImiQAv^?D?h7bh&LGUu8Pit<(3u7w3L>c(?5S`mG0_Ki+%h-edMX zA#r@a)24raq*u5yBkX*Qp3G|T9os+Fcm|dH6qn>SbCdO{U%S=y%1=S=u=2$14|$vi7;fd6|B$?)!9W@7vR-^KYN5KN0Y7@5?(68SUP!`ZsZk_wAz< zDjw~djpU*=e&wCznlbtGtdA*vC#4GbH)%9)=kC_o8o7RDdHlXDxgM2CAEKo4|Abt$ z-{2J5wR3M$s!e$LnvkQnb&sdma=tw8Z|1T6Sa9tj`?`=_X~nw?3?6^|GxNC5vRj)} zk8Uy%zpeXT=&Ey(kvufcc0Bfe@y^K1*uC@D zt3CU=Y-^cPeiZ+GnFC8%)BO#Ou>QPiFR^p&&ua^}9orI7Uwg*USecVEb@{)wHA-3M zw_cs0CAnPPi}Td3NxTOWCDgwa-(2_X&i73&K2{}aY&rK*_g8#9dhgfoU(Ty@pRKk} zeK&n>pUjGNofD%@hbqiHlDscH=gH@PD`fpES>5G0z4qS;&z7FzqQm8_^(JwGo!5<^ zTLm)rxG%}%-U)AevC(e#4T)X%Pv&0Q+FB9u)+yNF_O^6$msg=t;U8vomS0)DK_p|& z(+jydx8?lwc%C?XpE7UujG)Z2-A`QN^8cA#n6xna!Mn5Caa|i(E35hTm>SwXF=2^F z_3kWI&96CQGE3s$MEiU7cfF@K3G#36ymfh@>TBL4V?Lgmuixavr|g?uzjskW%#qLk zcC@C)UlshRd;Rl7-&Yamz9hV3G&?^zZN}WF_>?Mbxf{|p*DBK{|E`(d?f+)^l*wUA zGB<*c_jA9iu%6nLmAY4=WoGI7jlYh~T2h;&K2zVAc|TX(r<@Oy)0^k-aXi*weOl|u z$=x3v_bfil`tMwnw90qCO?z~|3OY)=tPa^}(voW`vHoV*w*Jlk0~L-(RIiM=*UA6r zP_VSMetDGUDp+jRGHn>jk=Pq?BK7NC~F(D{q(<5_Zz3C zwmmo6Btu?4q|bV@F9J9kIp%FGA1kJ_6SKUlQ? z-}Jcnm8PFQ&gPr{XN||(#5*uXdXzPN-d0!k$K731^6FJjtu?xKS44cW z!TA%p+O`h;mm9q`*8S_a{P!W_U(w~vj92mxygcAKGr1t}nFNcN;C9!&$pS9AbrDA% z9B_S-7sx0X6XL*j@F=&QmtymSN34!awngm!#2yCAa7|(SaKrx6Bn5^jhIb5K&U4Ev z8?s6Dc@?r4O>JSjz@pUX(5%4J#qKocj`(1yDc+QGDk-#J%q{OFKaOitO z>+iU}w=PCqPOb+9m8P{YZIEDUadi|}G`suI!wn%KvW~ngb?z>`2Om!8(!0U>GMFc5 zo?P?slL;KBS8KT(zObTVg3Hl|o*(L2wECF-FI>1%p=HJ2NiUPEKWsm-Ey>}=H`b+* z0-CqF*~E`*G8FjrT$Lf=_D7QruSE}5n&?Qnsvb&qT-v~Klf!-Sq(BxaSx4SK-Sck# z@42IBdT=AhN$! zM|aX@0h#i{8;#Q#|0*qb@RVQiW`ROoWHDQ>V}ibr&B=`#6?)DlI`f>I5<3+5_}42d z#Wv;&{L$^ulsb9)uyTM<6r0PXBZ>)*bE+eY*}9bvZ|o;H1mY7OB2%@f5I@gP;X_3Xi?Z;csTRFXVW1iTqIIc5vCvO8+ca&lg% zC^N5PvHQC^SH17{9(z8pGi@<=!{TyHN^lqZg4Bm)0!s55k52rcAjmD0p`pXKkJ-jy zS;L1d?9(^>*`Bbs;*GrP8G%pQY`>WQuofKHq{h?cvS307gA_xdM#YDf8AekZ6q`k~ zW_BnAc6jF)?Pq<}n&8d(;SRId5<>wlQ?`F>5n_)x4ivYxWeZ+>eeU>S`-TL@8$mJ+@eIEeo@`<14O#1^``(3fpAc8C+k{dn-a7AO4-1)@ zEY=npS}cqrB7gsJ{F#x*^KZ4vG5-fkOLi?P$z^n4Gt1$;B=6y__IIOhkw}MA;&hK< zwuAB?FUjB5oAX9#r>OUr-}B!;{I7oJlm05TdaT>6xvKJ9+7*517JXV=<6E1BVjE-2%CDb(AKZ0F`^FExx39~XE6#tLW>Xpa z?MO6JjCH(bEYGXm9=D?Q?y)>o_13O1?S}p~)1Q~Ws})X{VZGj&y;^>4glObdyMGV1 z8fg26#O{8a@^$r-fW?VM>2FVTJY_R$&DBv>6@906lD{SA7cciY`&)JTK?grYf7|}J z&;Jd(S(;(&l^eF^*X1vNK3R8l1N%OejL^h2?h2nRbJy+qreEi_MVD9nvtCu|&U(J3 zQ)3D~omBAKuwvfRtXCJbHeTv4k1PMc^8IZe!^x=g=^HbZv!;EmW`AmE)L8A^>e0HD zGkE5!>%JX{C)ZqbT;QF)WXk^ZNgETUo?r_;JgMkoPO`Flm~PvPcI#zKzVB{c-?y_Y zM$O6lV&IKc3Dw>Q9xT4nu%xB7Q#7so7+c!Dn)jbx{*^L*ddKR&%R!5VEl=MRlwUEM zQn@tg(yhXe7hi|G=PT`P`(~Z3TFq~8S3f55bzHjHzSC~4e@}a@pXQ<2Kf`z5=L6S| z6+ezDp7u6vvFh7@U+wbu%?iw2bI&&Mn1tqO7R~Cp+_77y3Yi(t?&}N^y3_qB=axrY z_2Qyev!1=xSbAc!McZDh83}U_=!w1Ls^@+jvo+=FH;!_(PA>JD|A~3mWwh0*&rkcV ze>}Z!XH~_vRo*|+d3M&->zrP6?!e#J=WDLC6*hi#J34cU?c#;~&QASqcHUa|{f%za zPd|FA#5{GwE#2i+yvaKsAH7x{s(m2ms&J(hZ?3+|E%mlvH)XDJg==%XxwWC~!TR;p zRclY3V^rIEmj9yT&c267%c3r4JUpA$DY|y)e0J&Cv(>ZDio6Zu+dSh6r{B*t52mf1 z@PN;1pSI=W3!gvroNm6|xaG%BkKcOVQk=Dul{7CI#?SaNckin|7RRioC@d;5sBINB zzkXRkD(&g&jOuyEjZ*LIt(qEnbn(>iaCzg|&-C_XO^BEnY&>^E+=j5q^qicguTxpB z9$!2w?N)I3m;Jw1nezYK*AZx1e)7gkes6Npsj8nnywYkos`b?cU9f=@M9hQA7ZUUUN#ComAyUtkHLC-Ov^)~VYIW@vt{l6P<0c=7BKhw{GltjcK*Lj^^H7T3){Y zS`W3(Uh~4O_iX02#5pSie7A`%{GwZ-Vj}H$f9FkmmT;BC+Kuhhq#=OhR&#zi9{OQ@n6z-@^z-ghegcS`qFEH)~NzqtKS!kK4j zM|T%4?Dwg-5|VlA*w?e`Y(shVf9Q3U^4wimXcqf0e&Q>O?`Nmg|9x`vDzj0djpw$X z?fWz0@`@kd`>iXs{r9BT^ODQA_;B46n)PbN`3a)QDn5EgZBM+rTJ-Ur`lmxvuEor| zKUep!#{69GcFx;s`n?;chh6TEFHOsxc|*^d&#_QiYWC|_X=+TGi_0&Tsm+e6dUkHd zu5M;)YeRgwuAq?Rj+T0Nc`xi9{PHHj#*smPq}3 zR3v+U<>SYalP>A4p82or@pYT$d95zDnbn?u+vCNTSleW3d3AldTIS!V(-D)zXNv!u z-@?LVdQ)iY&X#YFYTvmTF1R0Pdb8$xS6St}gWgX9%$!egsr}h@KJ3-Xh+}orG;33j zKN43gf3~8{mVKu2%)gcXA7g!3vS&m%t@|@^=XJI@QR`N}XTKr!Sb~4uO}iQCXPq;2 z?WII^?K(5}!2fG64d(@}&pV{IKJv%ajOI*-IgT^tru)gINPRBcZMG!1^!8(k|8sR6 z`vc8A?jGV4Em|1=Wwz?Or*+;gFW<><`lRjAmx=!~r}5_97e1G!GcR21qa{9nPst0( zML~8R_V+6uH61-GGShbEk5aF-^S}LkTi+x2^}bnVrOD(eGduRbG5EAW(eT0^53_f{ z3*$tkFYH~O@om;eHCG3xr`92VAN{%6;qh7hd!e6KljHmL_I0JD@!l`0Os}*)6*FHW zWm`FIXLji7iifYnWTv?#;>Rrz4$H#w~{n*a& zAxZdV@$+{T%hWWj*Z!Zg!(Q?4KI_9Sjr(5Rd%0kJ>Fzn3KKytv_iW&|-8=K%+q(7| z8ooJ`u4l5N;EI;!n*HyS9{%I|S-Se`)8D&PH5SL7$ro{5Z~U!(LSxapd7Rg-w(YoS zwq*ax6Ov13wR6R>*nsBoPIh<@Wr`#mU(ac zzitSYjXykHGyUUFE7PZDsb??5mYXMf|NP2yeCyT5ns)`^X4zrF&yGpXp7BFkaqZJ` zzKycndy;+!@;-m|eoE+L6?M+a7q#cRBn#H>UT|sobGbzuw$=zo9j~ppKk;Ux_^S^A z^R5@)S$QjCg4b+AHA$Nt)m6u})_TA0ef(Z#$LFV)w_SK8di$rE*?Jz&wF!?dR(zRI zKD!~PzWC*_!*dQhg={tnn|?U|Qs%0Ab$_?J81JuH)5%?M*{}cdwTH3=Myc!be=7+n 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%0AC|H}Y5wV&X{hX~(}g@j{`O(-pKrMLSngTL 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

      -Generated on $datetime for $projectname by doxygen $doxygenversion