git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@637 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2009-01-18 17:09:11 +00:00
parent cb692f1c51
commit 0c36565550
6 changed files with 118 additions and 82 deletions

View File

@ -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

View File

@ -294,40 +294,6 @@
*/
/** @} */
/**
* @defgroup AVR MegaAVR
* @{
* <p>
* Notes about the AVR port:
* </p>
* <ul>
* <li>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
* <b>./ports/AVR/chcore.h</b>.</li>
* </ul>
* @ingroup Ports
*/
/** @} */
/**
* @defgroup AVRCONF Configuration Options
* @{
* <p>
* The AVR port allows some architecture-specific configurations settings
* that can be specified externally, as example on the compiler command line:
* <ul>
* <li>@p INT_REQUIRED_STACK, this value represent the amount of stack space
* used by the interrupt handlers.<br>
* 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.<br>
* The default value is set into <b>./ports/AVR/chcore.h</b>.</li>
* </ul>
* </p>
* @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.

View File

@ -24,13 +24,6 @@
#include <ch.h>
/*
* 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) {
}
}

View File

@ -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
/**
* This port function is implemented as inlined code for performance reasons.
*/
#define sys_disable() asm volatile ("cli")
/**
* This port function is implemented as inlined code for performance reasons.
*/
#define sys_enable() asm volatile ("sei")
#define PORT_IRQ_HANDLER ISR
/**
* This function is empty in this port.
*/
#define sys_disable_from_isr()
#define port_init()
/**
* Implemented as global interrupt disable.
*/
#define port_lock() asm volatile ("cli")
/**
* Implemented as global interrupt enable.
*/
#define port_unlock() asm volatile ("sei")
/**
* This function is empty in this port.
*/
#define sys_enable_from_isr()
#define port_lock_from_isr()
/**
* 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
* This function is empty in this port.
*/
#define sys_disable_all() sys_disable()
#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")
/**
* Implemented as global interrupt enable.
*/
#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
}

65
ports/AVR/port.dox Normal file
View File

@ -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:
* - <b>Initialization</b>. 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.
* - <b>Normal</b>. This is the state the system has after executing
* @p chSysInit(). Interrupts are enabled.
* - <b>Suspended</b>. Interrupts are disabled.
* - <b>Disabled</b>. Interrupts are enabled. This state is equivalent to the
* Suspended state because there are no fast interrupts in this architecture.
* - <b>Sleep</b>. This state is entered with the execution of the specific
* instruction @p <b>sleep</b>.
* - <b>S-Locked</b>. Interrupts are disabled.
* - <b>I-Locked</b>. 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).
* - <b>Serving Regular Interrupt</b>. Normal interrupt service code.
* - <b>Serving Fast Interrupt</b>. Not present in this architecture.
* - <b>Serving Non-Maskable Interrupt</b>. Not present in this architecture.
* - <b>Halted</b>. 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
* <b>./ports/AVR/chcore.h</b>.
*
* @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.<br>
* 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.<br>
* The default value is set into <b>./ports/AVR/chcore.h</b>.
*
* @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.
*/
/** @} */

View File

@ -24,13 +24,6 @@
#include <ch.h>
/*
* 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.