mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 08:36:24 +08:00
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:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -46,12 +46,6 @@
|
||||
* Pre-processor Definitions
|
||||
************************************************************************************/
|
||||
|
||||
/* Physical memory map */
|
||||
# warning "Missing Definitions"
|
||||
|
||||
/* Peripheral Address Map */
|
||||
# warning "Missing Definitions"
|
||||
|
||||
/************************************************************************************
|
||||
* Public Types
|
||||
************************************************************************************/
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
/* Define features for supported chip in the ATMEGA family */
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
#else
|
||||
# error "Unsupported AVR chip"
|
||||
#endif
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -46,12 +46,6 @@
|
||||
* Pre-processor Definitions
|
||||
************************************************************************************/
|
||||
|
||||
/* Physical memory map */
|
||||
# warning "Missing Definitions"
|
||||
|
||||
/* Peripheral Address Map */
|
||||
# warning "Missing Definitions"
|
||||
|
||||
/************************************************************************************
|
||||
* Public Types
|
||||
************************************************************************************/
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
/* Define features for supported chip in the ATMEGA family */
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
#else
|
||||
# error "Unsupported AVR chip"
|
||||
#endif
|
||||
|
||||
@@ -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
@@ -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__ */
|
||||
|
||||
@@ -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
|
||||
****************************************************************************/
|
||||
|
||||
Reference in New Issue
Block a user