X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Flpc%2Fao_spi_lpc.c;h=010feb63ec3ebc5e2c4c74b165e20dc38a83ad50;hb=cea0f40fff14b9d2085e0026a68b742a4b114cb9;hp=f091c89c570963542f602c0e7f6d8957116895d4;hpb=f9f235bce84df3a6c0261e9d256aac544f87f70f;p=fw%2Faltos diff --git a/src/lpc/ao_spi_lpc.c b/src/lpc/ao_spi_lpc.c index f091c89c..010feb63 100644 --- a/src/lpc/ao_spi_lpc.c +++ b/src/lpc/ao_spi_lpc.c @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -29,7 +30,7 @@ static struct lpc_ssp * const ao_lpc_ssp[LPC_NUM_SPI] = { &lpc_ssp0, &lpc_ssp1 } while ((lpc_ssp->sr & (1 << LPC_SSP_SR_RNE)) == 0) \ ; \ /* receive a byte */ \ - get lpc_ssp->dr; \ + get (uint8_t) lpc_ssp->dr; \ } \ /* Wait for the SSP to go idle (it already should be) */ \ while (lpc_ssp->sr & (1 << LPC_SSP_SR_BSY)); \ @@ -89,7 +90,7 @@ ao_spi_put(uint8_t id) } static void -ao_spi_channel_init(uint8_t id) +ao_spi_channel_init(uint8_t id, uint8_t mode) { struct lpc_ssp *lpc_ssp = ao_lpc_ssp[id]; uint8_t d; @@ -101,8 +102,7 @@ ao_spi_channel_init(uint8_t id) lpc_ssp->cr0 = ((LPC_SSP_CR0_DSS_8 << LPC_SSP_CR0_DSS) | (LPC_SSP_CR0_FRF_SPI << LPC_SSP_CR0_FRF) | - (0 << LPC_SSP_CR0_CPOL) | - (0 << LPC_SSP_CR0_CPHA) | + mode | (0 << LPC_SSP_CR0_SCR)); /* Enable the device */ @@ -120,6 +120,9 @@ void ao_spi_init(void) { #if HAS_SPI_0 +#ifndef SPI_0_MODE +#define SPI_0_MODE 0 +#endif /* Configure pins */ #if SPI_SCK0_P0_6 lpc_ioconf.pio0_6 = ao_lpc_alternate(LPC_IOCONF_FUNC_PIO0_6_SCK0); @@ -146,12 +149,15 @@ ao_spi_init(void) lpc_scb.ssp0clkdiv = 1; /* Reset the device */ - lpc_scb.presetctrl &= ~(1 << LPC_SCB_PRESETCTRL_SSP0_RST_N); + lpc_scb.presetctrl &= ~(1UL << LPC_SCB_PRESETCTRL_SSP0_RST_N); lpc_scb.presetctrl |= (1 << LPC_SCB_PRESETCTRL_SSP0_RST_N); - ao_spi_channel_init(0); + ao_spi_channel_init(0, SPI_0_MODE); #endif #if HAS_SPI_1 +#ifndef SPI_1_MODE +#define SPI_1_MODE 0 +#endif #if SPI_SCK1_P1_15 lpc_ioconf.pio1_15 = ao_lpc_alternate(LPC_IOCONF_FUNC_PIO1_15_SCK1); @@ -196,8 +202,8 @@ ao_spi_init(void) lpc_scb.ssp1clkdiv = 1; /* Reset the device */ - lpc_scb.presetctrl &= ~(1 << LPC_SCB_PRESETCTRL_SSP1_RST_N); + lpc_scb.presetctrl &= ~(1UL << LPC_SCB_PRESETCTRL_SSP1_RST_N); lpc_scb.presetctrl |= (1 << LPC_SCB_PRESETCTRL_SSP1_RST_N); - ao_spi_channel_init(1); + ao_spi_channel_init(1, SPI_1_MODE); #endif /* HAS_SPI_1 */ }