Correct last set of changes to configuration logic

git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4237 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
patacongo 2011-12-29 12:52:15 +00:00
parent 67c0262d13
commit e136368c1f
6 changed files with 83 additions and 11 deletions

View File

@ -2302,4 +2302,8 @@
* tools/Makefile.txport, mkexport.sh, and configure.sh. Changes submitted
by Mike Smith to support configuration and 'make export' on MAC OS.
* arch/arm/src/stm32/stm32_gpio.c. Disabled interrupts while configuring
GPIO pins so that we have exclusive access to the GPIO configuration
registers.
* arch/mips/src/pic32mx/pic32mx_usbdev.c. Add a USB device-side driver
for the PIC32MX family.

View File

@ -94,6 +94,23 @@ o Task/Scheduler (sched/)
next interesting event time. That is one way to both reduce the
timer interrupt overhead and also to increase the accuracy of
delays.
Current timer processing is in sched/sched_processtimer.c:
1) Calls clock_timer() which just increments a counter (the system
timer -- basically "up-time"). This is only used when code asks
for the current time. In a tickless OS, some substitute answer
for the question "What time is it?" would need to be developed.
You could use an RTC? Or maybe logic that gets the time until the
next interval expiration and computes the current time. The
solution is not too difficult, but depends on a hardware solution.
2) Calls wd_timer() which handles the link list of ordered events:
Each timer event is saved with the delta time to the next event
in the list. So an interval timer would be perfect to implement this.
3) sched_process_timeslice(). Then there is round-robin time-slicing.
Status: Open
Priority: Low

View File

@ -47,6 +47,8 @@
#include <errno.h>
#include <debug.h>
#include <arch/irq.h>
#include "up_arch.h"
#include "chip.h"
@ -202,7 +204,12 @@ static inline void stm32_gpioremap(void)
* Based on configuration within the .config file, it does:
* - Remaps positions of alternative functions.
*
* Typically called from stm32_start().
* Typically called from stm32_start().
*
* Assumptions:
* This function is called early in the initialization sequence so that
* no mutual exlusion is necessary.
*
****************************************************************************/
void stm32_gpioinit(void)
@ -244,6 +251,7 @@ int stm32_configgpio(uint32_t cfgset)
unsigned int pin;
unsigned int pos;
unsigned int modecnf;
irqstate_t flags;
bool input;
/* Verify that this hardware supports the select GPIO port */
@ -278,6 +286,12 @@ int stm32_configgpio(uint32_t cfgset)
input = ((cfgset & GPIO_INPUT) != 0);
/* Interrupts must be disabled from here on out so that we have mutually
* exclusive access to all of the GPIO configuration registers.
*/
flags = irqsave();
/* Decode the mode and configuration */
regval = getreg32(cr);
@ -316,6 +330,7 @@ int stm32_configgpio(uint32_t cfgset)
{
/* Its an alternate function pin... we can return early */
irqrestore(flags);
return OK;
}
}
@ -342,6 +357,7 @@ int stm32_configgpio(uint32_t cfgset)
{
/* Neither... we can return early */
irqrestore(flags);
return OK;
}
}
@ -367,6 +383,8 @@ int stm32_configgpio(uint32_t cfgset)
regval = getreg32(regaddr);
regval |= (1 << pin);
putreg32(regval, regaddr);
irqrestore(flags);
return OK;
}
#endif
@ -386,6 +404,7 @@ int stm32_configgpio(uint32_t cfgset)
unsigned int pin;
unsigned int pos;
unsigned int pinmode;
irqstate_t flags;
/* Verify that this hardware supports the select GPIO port */
@ -427,6 +446,14 @@ int stm32_configgpio(uint32_t cfgset)
break;
}
/* Interrupts must be disabled from here on out so that we have mutually
* exclusive access to all of the GPIO configuration registers.
*/
flags = irqsave();
/* Now apply the configuration to the mode register */
regval = getreg32(base + STM32_GPIO_MODER_OFFSET);
regval &= ~GPIO_MODER_MASK(pin);
regval |= ((uint32_t)pinmode << GPIO_MODER_SHIFT(pin));
@ -572,6 +599,7 @@ int stm32_configgpio(uint32_t cfgset)
stm32_gpiowrite(cfgset, value);
}
irqrestore(flags);
return OK;
}
#endif

View File

@ -5,9 +5,12 @@
* Author: Gregory Nutt <gnutt@nuttx.orgr>
*
* References:
* - This file derives from the STM32 USB device driver
* This file derives from the STM32 USB device driver with modifications
* based on additional information from:
*
* - "USB On-The-Go (OTG)", DS61126E, Microchip Technology Inc., 2009
* - Sample code provided with the Sure Electronics PIC32 board.
* - Sample code provided with the Sure Electronics PIC32 board
* (which seems to have derived from Microchip PICDEM PIC18 code).
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -2010,7 +2013,7 @@ static void pic32mx_ep0transfer(struct pic32mx_usbdev_s *priv, uint16_t status)
/* Check the current EP0 OUT buffer contains a SETUP packet */
if (((bdt->status & USB_BDT_PID_MASK) >> USB_BDT_PID_SHIFT) == USB_SETUP_TOKEN)
if (((bdt->status & USB_BDT_PID_MASK) >> USB_BDT_PID_SHIFT) == USB_PID_SETUP_TOKEN)
{
/* Check if the SETUP transaction data went into the priv->ctrl
* buffer. If not, then we will need to copy it.

View File

@ -47,11 +47,31 @@
/************************************************************************************
* Preprocessor Definitions
************************************************************************************/
/* USB Tokens (See chapter 8 in the USB specification) */
/* A packet identifier (PID) immediately follows the SYNC field of every USB packet.
* A PID consists of a four-bit packet type field followed by a four-bit check field
* USB Tokens (See Table 8-1 in the USB specification)
*/
#define USB_SETUP_TOKEN 0x0d
#define USB_OUT_TOKEN 0x01
#define USB_IN_TOKEN 0x09
#define USB_PID_OUT_TOKEN (0x01) /* Tokens */
#define USB_PID_IN_TOKEN (0x09)
#define USB_PID_SOF_TOKEN (0x05)
#define USB_PID_SETUP_TOKEN (0x0d)
#define USB_PID_DATA0 (0x03) /* Data */
#define USB_PID_DATA1 (0x0b)
#define USB_PID_DATA2 (0x07)
#define USB_PID_MDATA (0x0f)
#define USB_PID_ACK (0x02) /* Handshake */
#define USB_PID_NAK (0x0a)
#define USB_PID_STALL (0x0e)
#define USB_PID_NYET (0x06)
#define USB_PID_PRE_TOKEN (0x0c) /* Special */
#define USB_PID_ERR (0x0c)
#define USB_PID_SPLIT_TOKEN (0x08)
#define USB_PID_PING_TOKEN (0x04)
#define USB_PID_RESERVED (0x00)
/* All 16-bit values must be little-endian */

View File

@ -156,7 +156,7 @@ if [ ! -z "${appdir}" ]; then
if [ ! -r "${configpath}/appconfig" ]; then
echo "NOTE: No readable appconfig file found in ${configpath}"
else
install -C "${configpath}/appconfig" "${TOPDIR}/${appdir}/.configX" || \
install -C "${configpath}/appconfig" "${TOPDIR}/${appdir}/.config" || \
{ echo "Failed to copy ${configpath}/appconfig" ; exit 10 ; }
echo "" >> "${TOPDIR}/.configX"
@ -166,7 +166,7 @@ if [ ! -z "${appdir}" ]; then
fi
fi
# install the final .configX only if it differs from the existing
# install the final .configX only if it differs from any existing
# .config file.
install -C "${TOPDIR}/.configX" "${TOPDIR}/.config"