Fix SAM34 interrupt handling for ports D-F; fix MISO logic in Arduino Due touchscreen driver

This commit is contained in:
Gregory Nutt
2013-07-03 08:12:45 -06:00
parent c8a4f69a69
commit 242b459b05
3 changed files with 57 additions and 35 deletions
+11 -10
View File
@@ -35,11 +35,11 @@ PIO Pin Usage
----- ---------- ---- -------- ----- ------------ ---- ------ ----- ----------- ---- --------- ----- ---------- ---- -------- ----- ------------ ---- ------ ----- ----------- ---- ---------
PA0 CANTX0 ADCH 8 PB0 ETX_CLK ETH 1 PC0 ERASE N/A PA0 CANTX0 ADCH 8 PB0 ETX_CLK ETH 1 PC0 ERASE N/A
PA1 CANRX0 ACDH 7 PB1 ETX_EN ETH 3 PC1 PIN33 XIO 14 PA1 CANRX0 ACDH 7 PB1 ETX_EN ETH 3 PC1 PIN33 XIO 14
PA2 AD7 ADCL 7 PB2 ETXD0 ETH 5 PC2 PIN34 XIO 15 PA2 AD7 ADCL 8 PB2 ETXD0 ETH 5 PC2 PIN34 XIO 15
PA3 AD6 ADCL 6 PB3 ETXD1 ETH 7 PC3 PIN35 XIO 16 PA3 AD6 ADCL 7 PB3 ETXD1 ETH 7 PC3 PIN35 XIO 16
PA4 AD5 ADCL 5 PB4 ERX_DV ETH 10 PC4 PIN36 XIO 17 PA4 AD5 ADCL 6 PB4 ERX_DV ETH 10 PC4 PIN36 XIO 17
PA5 EEXTINT ETH 8 PB5 ERXD0 ETH 9 PC5 PIN37 XIO 18 PA5 EEXTINT ETH 8 PB5 ERXD0 ETH 9 PC5 PIN37 XIO 18
PA6 AD4 ADCL 4 PB6 ERXD1 ETH 11 PC6 PIN38 XIO 19 PA6 AD4 ADCL 5 PB6 ERXD1 ETH 11 PC6 PIN38 XIO 19
PA7 PIN31 XIO 12 PB7 ERX_ER ETH 13 PC7 PIN39 XIO 20 PA7 PIN31 XIO 12 PB7 ERX_ER ETH 13 PC7 PIN39 XIO 20
PA8 [U]RX PWML 1 PB8 EMDC ETH 14 PC8 PIN40 XIO 21 PA8 [U]RX PWML 1 PB8 EMDC ETH 14 PC8 PIN40 XIO 21
PA9 [U]TX PWML 2 PB9 EMDIO ETH 12 PC9 PIN41 XIO 22 PA9 [U]TX PWML 2 PB9 EMDIO ETH 12 PC9 PIN41 XIO 22
@@ -49,15 +49,15 @@ PIO Pin Usage
PA13 TXD1 COMM 3 PB13 SCL0-3 COMM 8 PC13 PIN50 XIO 31 PA13 TXD1 COMM 3 PB13 SCL0-3 COMM 8 PC13 PIN50 XIO 31
PA14 PIN23 XIO 4 PB14 CANTX1/IO XIO 34 PC14 PIN49 XIO 30 PA14 PIN23 XIO 4 PB14 CANTX1/IO XIO 34 PC14 PIN49 XIO 30
PA15 PIN24 XIO 5 PB15 DAC0(CANRX1) ADCH 5 PC15 PIN48 XIO 29 PA15 PIN24 XIO 5 PB15 DAC0(CANRX1) ADCH 5 PC15 PIN48 XIO 29
PA16 AD0 ADCL 0 PB16 DAC1 ADCH 6 PC16 PIN47 XIO 28 PA16 AD0 ADCL 1 PB16 DAC1 ADCH 6 PC16 PIN47 XIO 28
PA17 SDA1 PWMH 9 PB17 AD8 ADCH 1 PC17 PIN46 XIO 27 PA17 SDA1 PWMH 9 PB17 AD8 ADCH 1 PC17 PIN46 XIO 27
PA18 SCL1 PWMH 10 PB18 AD9 ADCH 2 PC18 PIN45 XIO 26 PA18 SCL1 PWMH 10 PB18 AD9 ADCH 2 PC18 PIN45 XIO 26
PA19 PIN42 XIO 23 PB19 AD10 ADCH 3 PC19 PIN44 XIO 25 PA19 PIN42 XIO 23 PB19 AD10 ADCH 3 PC19 PIN44 XIO 25
PA20 PIN43 XIO 24 PB20 AD11(TXD3) ADCH 4 PC20 N/C N/A PA20 PIN43 XIO 24 PB20 AD11(TXD3) ADCH 4 PC20 N/C N/A
PA21 TXL TX YELLOW LED PB21 AD14(RXD3) XIO 33 PC21 PWM9 PWMH 2 PA21 TXL TX YELLOW LED PB21 AD14(RXD3) XIO 33 PC21 PWM9 PWMH 2
PA22 AD3 ADCL 3 PB22 N/C N/A PC22 PWM8 PWMH 1 PA22 AD3 ADCL 4 PB22 N/C N/A PC22 PWM8 PWMH 1
PA23 AD2 ADCL 2 PB23 SS3 ??? PC23 PWM7 PWML 8 PA23 AD2 ADCL 3 PB23 SS3 ??? PC23 PWM7 PWML 8
PA24 AD1 ADCL 1 PB24 N/C N/A PC24 PWM6 PWML 7 PA24 AD1 ADCL 2 PB24 N/C N/A PC24 PWM6 PWML 7
PA25 MISO SPI 1 PB25 PWM2 PWML 3 PC25 PWM5 PWML 6 PA25 MISO SPI 1 PB25 PWM2 PWML 3 PC25 PWM5 PWML 6
PA26 MOSI SPI 4 PB26 PIN22 ??? PC26 SS1/PWM4 PWML 10 (there are two) PA26 MOSI SPI 4 PB26 PIN22 ??? PC26 SS1/PWM4 PWML 10 (there are two)
PA27 SPCK SPI 3 PB27 PWM13 PWMH 6 PC27 N/C N/A PA27 SPCK SPI 3 PB27 PWM13 PWMH 6 PC27 N/C N/A
@@ -178,6 +178,7 @@ ITEAD 2.4" TFT with Touch
NOTES: NOTES:
1. It is not possible to use any of the SPI devices on the Shield unless 1. It is not possible to use any of the SPI devices on the Shield unless
a bit-bang SPI interface is used. This includes the touch controller
a bit-bang SPI interface is used. This includes the touch controller a bit-bang SPI interface is used. This includes the touch controller
and the SD card. and the SD card.
2. UART0 cannot be used. USARTs on the COMM connector should be available. 2. UART0 cannot be used. USARTs on the COMM connector should be available.
@@ -218,8 +219,8 @@ ITEAD 2.4" TFT with Touch
7 IN3 N/C --- --- 8 IN4 N/C --- --- 7 IN3 N/C --- --- 8 IN4 N/C --- ---
9 VREF --- --- --- 10 VCC --- --- --- 9 VREF --- --- --- 10 VCC --- --- ---
11 IRQ J2 pin 2 D9 PC21 12 DOUT J2 pin 1 D8 PC22 11 IRQ J2 pin 2 D9 PC21 12 DOUT J2 pin 1 D8 PC22
13 BUSY N/C --- --- 14 DIN J1 pin 1 D14 PA16 13 BUSY N/C --- --- 14 DIN J1 pin 1 A0/D15 PA16
15 /CS --- --- --- 16 DCLK J1 pin 2 D15 PA24 15 /CS --- --- --- 16 DCLK J1 pin 2 A1/D15 PA24
--- ------- -------- --------- -------- ---- -------- -------- --------- ------- --- ------- -------- --------- -------- ---- -------- -------- --------- -------
NOTES: NOTES:
+2 -2
View File
@@ -232,8 +232,8 @@
* 7 IN3 N/C --- --- 8 IN4 N/C --- --- * 7 IN3 N/C --- --- 8 IN4 N/C --- ---
* 9 VREF --- --- --- 10 VCC --- --- --- * 9 VREF --- --- --- 10 VCC --- --- ---
* 11 IRQ J2 pin 2 D9 PC21 12 DOUT J2 pin 1 D8 PC22 * 11 IRQ J2 pin 2 D9 PC21 12 DOUT J2 pin 1 D8 PC22
* 13 BUSY N/C --- --- 14 DIN J1 pin 1 D14 PA16 * 13 BUSY N/C --- --- 14 DIN J1 pin 1 A0/D14 PA16
* 15 /CS --- --- --- 16 DCLK J1 pin 2 D15 PA24 * 15 /CS --- --- --- 16 DCLK J1 pin 2 A1/D15 PA24
* --- ------- -------- --------- -------- ---- -------- -------- --------- ------- * --- ------- -------- --------- -------- ---- -------- -------- --------- -------
* *
* NOTE: /CS is connected to ground (XPT2046 is always selected) * NOTE: /CS is connected to ground (XPT2046 is always selected)
+44 -23
View File
@@ -91,7 +91,7 @@
#define SPI_CLRSCK putreg32(1 << 24, SAM_PIOA_CODR) #define SPI_CLRSCK putreg32(1 << 24, SAM_PIOA_CODR)
#define SPI_SETMOSI putreg32(1 << 16, SAM_PIOA_SODR) #define SPI_SETMOSI putreg32(1 << 16, SAM_PIOA_SODR)
#define SPI_CLRMOSI putreg32(1 << 16, SAM_PIOA_CODR) #define SPI_CLRMOSI putreg32(1 << 16, SAM_PIOA_CODR)
#define SPI_GETMISO ((getreg32(SAM_PIOC_PDSR) >> 21) & 1) #define SPI_GETMISO ((getreg32(SAM_PIOC_PDSR) >> 22) & 1)
/* Only mode 0 */ /* Only mode 0 */
@@ -174,6 +174,7 @@ static struct ads7843e_config_s g_tscinfo =
/**************************************************************************** /****************************************************************************
* Private Functions * Private Functions
****************************************************************************/ ****************************************************************************/
/**************************************************************************** /****************************************************************************
* Include the bit-band skeleton logic * Include the bit-band skeleton logic
****************************************************************************/ ****************************************************************************/
@@ -354,36 +355,50 @@ static FAR struct spi_dev_s *sam_tsc_spiinitialize(void)
int arch_tcinitialize(int minor) int arch_tcinitialize(int minor)
{ {
FAR struct spi_dev_s *dev; FAR struct spi_dev_s *dev;
static bool initialized = false;
int ret; int ret;
idbg("minor %d\n", minor); idbg("minor %d\n", minor);
DEBUGASSERT(minor == 0); DEBUGASSERT(minor == 0);
/* Configure and enable the XPT2046 interrupt pin as an input */ /* Have we already initialized? Since we never uninitialize we must prevent
* multiple initializations. This is necessary, for example, when the
* touchscreen example is used as a built-in application in NSH and can be
* called numerous time. It will attempt to initialize each time.
*/
(void)sam_configgpio(GPIO_TSC_IRQ); if (!initialized)
/* Configure the PIO interrupt */
sam_gpioirq(SAM_TSC_IRQ);
/* Get an instance of the SPI interface for the touchscreen chip select */
dev = sam_tsc_spiinitialize();
if (!dev)
{ {
idbg("Failed to initialize bit bang SPI\n"); /* Configure and enable the XPT2046 interrupt pin as an input */
return -ENODEV;
}
/* Initialize and register the SPI touschscreen device */ (void)sam_configgpio(GPIO_TSC_IRQ);
ret = ads7843e_register(dev, &g_tscinfo, CONFIG_ADS7843E_DEVMINOR); /* Configure the PIO interrupt */
if (ret < 0)
{ sam_gpioirq(SAM_TSC_IRQ);
idbg("Failed to register touchscreen device\n");
/* up_spiuninitialize(dev); */ /* Get an instance of the SPI interface for the touchscreen chip select */
return -ENODEV;
dev = sam_tsc_spiinitialize();
if (!dev)
{
idbg("Failed to initialize bit bang SPI\n");
return -ENODEV;
}
/* Initialize and register the SPI touschscreen device */
ret = ads7843e_register(dev, &g_tscinfo, CONFIG_ADS7843E_DEVMINOR);
if (ret < 0)
{
idbg("Failed to register touchscreen device\n");
/* up_spiuninitialize(dev); */
return -ENODEV;
}
/* Now we are initialized */
initialized = true;
} }
return OK; return OK;
@@ -407,7 +422,13 @@ int arch_tcinitialize(int minor)
void arch_tcuninitialize(void) void arch_tcuninitialize(void)
{ {
/* No support for un-initializing the touchscreen XPT2046 device yet */ /* No real support for un-initializing the touchscreen XPT2046 device.
* Just make sure that interrupts are disabled and that no handler is
* attached.
*/
sam_gpioirqdisable(SAM_TSC_IRQ);
irq_detach(SAM_TSC_IRQ);
} }
#endif /* CONFIG_ARDUINO_ITHEAD_TFT && CONFIG_SPI_BITBANG && CONFIG_INPUT_ADS7843E */ #endif /* CONFIG_ARDUINO_ITHEAD_TFT && CONFIG_SPI_BITBANG && CONFIG_INPUT_ADS7843E */