Fix AVR clock setup; add SPI driver

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3721 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo
2011-06-17 22:03:20 +00:00
parent bfe2a9555f
commit 370cbe8195
12 changed files with 696 additions and 14 deletions
+4
View File
@@ -54,6 +54,10 @@ ifeq ($(CONFIG_ARCH_STACKDUMP),y)
CMN_CSRCS += up_dumpstate.c
endif
ifeq ($(CONFIG_AVR_SPI),y)
CMN_CSRCS += up_spi.c
endif
# Required AT90USB files
CHIP_ASRCS = at90usb_exceptions.S
+5
View File
@@ -39,6 +39,7 @@
#include <nuttx/config.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include "at90usb_config.h"
#include "up_internal.h"
@@ -127,6 +128,10 @@ void up_lowinit(void)
up_wdtinit();
/* Set the system clock divider to 1 */
clock_prescale_set(clock_div_1);
/* Initialize a console (probably a serial console) */
up_consoleinit();
-6
View File
@@ -46,12 +46,6 @@
* Pre-processor Definitions
************************************************************************************/
/* Physical memory map */
# warning "Missing Definitions"
/* Peripheral Address Map */
# warning "Missing Definitions"
/************************************************************************************
* Public Types
************************************************************************************/
+1 -1
View File
@@ -48,7 +48,7 @@
/* Define features for supported chip in the ATMEGA family */
#if 0
#if 1
#else
# error "Unsupported AVR chip"
#endif
+4
View File
@@ -54,6 +54,10 @@ ifeq ($(CONFIG_ARCH_STACKDUMP),y)
CMN_CSRCS += up_dumpstate.c
endif
ifeq ($(CONFIG_AVR_SPI),y)
CMN_CSRCS += up_spi.c
endif
# Required ATMEGA files
CHIP_ASRCS = atmega_exceptions.S
+5
View File
@@ -39,6 +39,7 @@
#include <nuttx/config.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include "atmega_config.h"
#include "up_internal.h"
@@ -127,6 +128,10 @@ void up_lowinit(void)
up_wdtinit();
/* Set the system clock divider to 1 */
clock_prescale_set(clock_div_1);
/* Initialize a console (probably a serial console) */
up_consoleinit();
-6
View File
@@ -46,12 +46,6 @@
* Pre-processor Definitions
************************************************************************************/
/* Physical memory map */
# warning "Missing Definitions"
/* Peripheral Address Map */
# warning "Missing Definitions"
/************************************************************************************
* Public Types
************************************************************************************/
+1 -1
View File
@@ -48,7 +48,7 @@
/* Define features for supported chip in the ATMEGA family */
#if 0
#if 1
#else
# error "Unsupported AVR chip"
#endif
+85
View File
@@ -42,6 +42,7 @@
#ifndef __ASSEMBLY__
# include <stdint.h>
# include <stdbool.h>
#endif
/****************************************************************************
@@ -90,12 +91,96 @@ extern uint16_t g_heapbase;
#ifndef __ASSEMBLY__
/************************************************************************************
* Name: up_copystate
*
* Description:
* Copy the contents of a register state save structure from one location to
* another.
*
************************************************************************************/
extern void up_copystate(uint8_t *dest, uint8_t *src);
/************************************************************************************
* Name: up_saveusercontext
*
* Description:
* Save the register context of the currently executing (user) thread.
*
************************************************************************************/
extern int up_saveusercontext(uint8_t *saveregs);
/************************************************************************************
* Name: up_fullcontextrestore
*
* Description:
* Restore the full context of a saved thread/task.
*
************************************************************************************/
extern void up_fullcontextrestore(uint8_t *restoreregs) __attribute__ ((noreturn));
/************************************************************************************
* Name: up_switchcontext
*
* Description:
* Switch from one thread/task context to another.
*
************************************************************************************/
extern void up_switchcontext(uint8_t *saveregs, uint8_t *restoreregs);
/************************************************************************************
* Name: up_doirq
*
* Description:
* Dispatch an interrupt.
*
************************************************************************************/
extern uint8_t *up_doirq(uint8_t irq, uint8_t *regs);
/************************************************************************************
* Name: avr_spiselect, avr_spitatus, and avr_spicmddata
*
* Description:
* These external functions must be provided by board-specific logic. They are
* implementations of the select, status, and cmddata methods of the SPI interface
* defined by struct spi_ops_s (see include/nuttx/spi.h). All other methods
* including up_spiinitialize()) are provided by common LPC17xx logic. To use
* this common SPI logic on your board:
*
* 1. Provide logic in up_boardinitialize() to configure SPI chip select
* pins.
* 2. Provide avr_spiselect() and avr_spistatus() functions in your board-specific
* logic. These functions will perform chip selection and status operations
* using GPIOs in the way your board is configured.
* 2. If CONFIG_SPI_CMDDATA is defined in the NuttX configuration, provide the
* avr_spicmddata() function in your board-specific logic. This functions will
* perform cmd/data selection operations using GPIOs in the way your board is
* configured.
* 3. Add a call to up_spiinitialize() in your low level application
* initialization logic
* 4. The handle returned by up_spiinitialize() may then be used to bind the
* SPI driver to higher level logic (e.g., calling
* mmcsd_spislotinitialize(), for example, will bind the SPI driver to
* the SPI MMC/SD driver).
*
************************************************************************************/
struct spi_dev_s;
enum spi_dev_e;
#ifdef CONFIG_AVR_SPI
extern void avr_spiselect(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool selected);
extern uint8_t avr_spistatus(FAR struct spi_dev_s *dev, enum spi_dev_e devid);
#ifdef CONFIG_SPI_CMDDATA
extern int avr_spicmddata(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool cmd);
#endif
#endif
#endif /* __ASSEMBLY__ */
#endif /* __ARCH_AVR_SRC_AVR_AVR_INTERNAL_H */
File diff suppressed because it is too large Load Diff
+45
View File
@@ -90,10 +90,55 @@ extern uint32_t g_heapbase;
#ifndef __ASSEMBLY__
/************************************************************************************
* Name: up_copystate
*
* Description:
* Copy the contents of a register state save structure from one location to
* another.
*
************************************************************************************/
extern void up_copystate(uint32_t *dest, uint32_t *src);
/************************************************************************************
* Name: up_saveusercontext
*
* Description:
* Save the register context of the currently executing (user) thread.
*
************************************************************************************/
extern int up_saveusercontext(uint32_t *saveregs);
/************************************************************************************
* Name: up_fullcontextrestore
*
* Description:
* Restore the full context of a saved thread/task.
*
************************************************************************************/
extern void up_fullcontextrestore(uint32_t *restoreregs) __attribute__ ((noreturn));
/************************************************************************************
* Name: up_switchcontext
*
* Description:
* Switch from one thread/task context to another.
*
************************************************************************************/
extern void up_switchcontext(uint32_t *saveregs, uint32_t *restoreregs);
/************************************************************************************
* Name: up_doirq
*
* Description:
* Dispatch an interrupt.
*
************************************************************************************/
extern uint32_t *up_doirq(int irq, uint32_t *regs);
#endif /* __ASSEMBLY__ */
+9
View File
@@ -69,6 +69,15 @@
# define CONFIG_PRINT_TASKNAME 1
#endif
/* If there is going to be stackdump output, then we should turn on output
* here unconditionally as well.
*/
#ifdef CONFIG_ARCH_STACKDUMP
# undef lldbg
# define lldbg lib_lowprintf
#endif
/****************************************************************************
* Private Data
****************************************************************************/