From 0c36565550f5b81e6b853ebf3e0b323ed4a8f1f2 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 18 Jan 2009 17:09:11 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@637 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- docs/Doxyfile | 2 +- docs/ch.txt | 38 ++---------------------------- ports/AVR/chcore.c | 21 ++++++++--------- ports/AVR/chcore.h | 55 ++++++++++++++++++++++++++----------------- ports/AVR/port.dox | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++ ports/MSP430/chcore.c | 7 ------ 6 files changed, 112 insertions(+), 76 deletions(-) create mode 100644 ports/AVR/port.dox diff --git a/docs/Doxyfile b/docs/Doxyfile index fc3f3f1f6..db3bdba48 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -84,7 +84,7 @@ WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = ../src/include ../src/templates ../src ../docs/ch.txt ../src/lib ../ports/ARM7 ../ports/ARMCM3 ../ports/MSP430 +INPUT = ../src/include ../src/templates ../src ../docs/ch.txt ../src/lib ../ports/ARM7 ../ports/ARMCM3 ../ports/MSP430 ../ports/AVR INPUT_ENCODING = UTF-8 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 RECURSIVE = YES diff --git a/docs/ch.txt b/docs/ch.txt index d61a735ce..196fa94c5 100644 --- a/docs/ch.txt +++ b/docs/ch.txt @@ -294,40 +294,6 @@ */ /** @} */ -/** - * @defgroup AVR MegaAVR - * @{ - *

- * Notes about the AVR port: - *

- * - * @ingroup Ports - */ -/** @} */ - -/** - * @defgroup AVRCONF Configuration Options - * @{ - *

- * The AVR port allows some architecture-specific configurations settings - * that can be specified externally, as example on the compiler command line: - *

- *

- * @ingroup AVR - */ -/** @} */ - /** * @defgroup Kernel Kernel * @{ @@ -345,9 +311,9 @@ /** @} */ /** - * @defgroup Core Core + * @defgroup Core Generic Port Code Templates * @{ - * Non portable code. + * Non portable code templates. * @ingroup Kernel * @file src/templates/chcore.c Non portable code template file. * @file src/templates/chcore.h Non portable macros and structures template file. diff --git a/ports/AVR/chcore.c b/ports/AVR/chcore.c index 9ae0b4c56..ee35f3459 100644 --- a/ports/AVR/chcore.c +++ b/ports/AVR/chcore.c @@ -24,13 +24,6 @@ #include -/* - * 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. - */ - /** * The default implementation of this function is void so no messages are * actually printed. @@ -38,8 +31,10 @@ * it in your application code. * @param msg pointer to the message string */ +/** @cond never */ __attribute__((weak)) -void sys_puts(char *msg) { +/** @endcond */ +void port_puts(char *msg) { } /** @@ -49,8 +44,10 @@ void sys_puts(char *msg) { * @note The function is declared as a weak symbol, it is possible to redefine * it in your application code. */ +/** @cond never */ __attribute__((naked, weak)) -void sys_switch(Thread *otp, Thread *ntp) { +/** @endcond */ +void port_switch(Thread *otp, Thread *ntp) { asm volatile ("push r2"); asm volatile ("push r3"); @@ -113,10 +110,12 @@ void sys_switch(Thread *otp, Thread *ntp) { * @note The function is declared as a weak symbol, it is possible to redefine * it in your application code. */ +/** @cond never */ __attribute__((weak)) -void sys_halt(void) { +/** @endcond */ +void port_halt(void) { - sys_disable(); + port_disable(); while (TRUE) { } } diff --git a/ports/AVR/chcore.h b/ports/AVR/chcore.h index 34eba546c..a03e58acc 100644 --- a/ports/AVR/chcore.h +++ b/ports/AVR/chcore.h @@ -165,10 +165,10 @@ typedef struct { /** * IRQ prologue code, inserted at the start of all IRQ handlers enabled to * invoke system APIs. - * This code tricks the compiler to save the specified registers by "touching" - * them. + * This code tricks the compiler to save all the specified registers by + * "touching" them. */ -#define SYS_IRQ_PROLOGUE() { \ +#define PORT_IRQ_PROLOGUE() { \ asm ("" : : : "r18", "r19", "r20", "r21", "r22", "r23", "r24", \ "r25", "r26", "r27", "r30", "r31"); \ } @@ -177,7 +177,7 @@ asm ("" : : : "r18", "r19", "r20", "r21", "r22", "r23", "r24", \ * IRQ epilogue code, inserted at the end of all IRQ handlers enabled to * invoke system APIs. */ -#define SYS_IRQ_EPILOGUE() { \ +#define PORT_IRQ_EPILOGUE() { \ if (chSchRescRequiredI()) \ chSchDoRescheduleI(); \ } @@ -186,53 +186,66 @@ asm ("" : : : "r18", "r19", "r20", "r21", "r22", "r23", "r24", \ * IRQ handler function modifier. Note, it just aliases the WinAVR "ISR" * macro. */ -#define SYS_IRQ_HANDLER ISR +#define PORT_IRQ_HANDLER ISR /** - * This port function is implemented as inlined code for performance reasons. + * This function is empty in this port. */ -#define sys_disable() asm volatile ("cli") +#define port_init() /** - * This port function is implemented as inlined code for performance reasons. + * Implemented as global interrupt disable. + */ +#define port_lock() asm volatile ("cli") + +/** + * Implemented as global interrupt enable. */ -#define sys_enable() asm volatile ("sei") +#define port_unlock() asm volatile ("sei") /** * This function is empty in this port. */ -#define sys_disable_from_isr() +#define port_lock_from_isr() /** * This function is empty in this port. */ -#define sys_enable_from_isr() +#define port_unlock_from_isr() + +/** + * Implemented as global interrupt disable. + */ +#define port_disable() asm volatile ("cli") + +/** + * Same as @p port_disable() in this port, there is no difference between the + * two states. + */ +#define port_suspend() asm volatile ("cli") /** - * Disables all the interrupt sources, even those having a priority higher - * to the kernel. - * In this port it is no different than sys_disable() because the simple - * interrupt handling + * Implemented as global interrupt enable. */ -#define sys_disable_all() sys_disable() +#define port_enable() asm volatile ("sei") /** * This port function is implemented as inlined code for performance reasons. */ #if ENABLE_WFI_IDLE != 0 -#define sys_wait_for_interrupt() { \ +#define port_wait_for_interrupt() { \ asm volatile ("sleep"); \ } #else -#define sys_wait_for_interrupt() +#define port_wait_for_interrupt() #endif #ifdef __cplusplus extern "C" { #endif - void sys_puts(char *msg); - void sys_switch(Thread *otp, Thread *ntp); - void sys_halt(void); + void port_puts(char *msg); + void port_switch(Thread *otp, Thread *ntp); + void port_halt(void); void threadstart(void); #ifdef __cplusplus } diff --git a/ports/AVR/port.dox b/ports/AVR/port.dox new file mode 100644 index 000000000..2a789c5e4 --- /dev/null +++ b/ports/AVR/port.dox @@ -0,0 +1,65 @@ +/** + * @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: + * - Initialization. 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 enabled. 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. + * The AVR 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 ./ports/AVR/chcore.h. + * + * @ingroup AVR + */ +/** @} */ + +/** + * @defgroup AVR_CORE AVR Core Implementation + * @{ + * @brief AVR specific port code, structures and macros. + * + * @ingroup AVR + * @file ports/AVR/chtypes.h Port types. + * @file ports/AVR/chcore.h Port related structures and macros. + * @file ports/AVR/chcore.c Port related code. + */ +/** @} */ diff --git a/ports/MSP430/chcore.c b/ports/MSP430/chcore.c index cea8d22ed..2f147c2fc 100644 --- a/ports/MSP430/chcore.c +++ b/ports/MSP430/chcore.c @@ -24,13 +24,6 @@ #include -/* - * 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. - */ - /** * The default implementation of this function is void so no messages are * actually printed. -- cgit v1.2.3