diff --git a/src/lpc176x/i2c.c b/src/lpc176x/i2c.c index 50081d50..58761aba 100644 --- a/src/lpc176x/i2c.c +++ b/src/lpc176x/i2c.c @@ -29,7 +29,8 @@ i2c_init(void) gpio_peripheral(0, 1, 3, 0); // Set 100Khz frequency - uint32_t PCLK = SystemCoreClock / 4, pulse = PCLK / (100000 * 2); + enable_peripheral_clock(PCLK_I2C1); + uint32_t pclk = SystemCoreClock, pulse = pclk / (100000 * 2); LPC_I2C1->I2SCLL = pulse; LPC_I2C1->I2SCLH = pulse; diff --git a/src/lpc176x/internal.h b/src/lpc176x/internal.h index 1ea07df4..e5b0f5dc 100644 --- a/src/lpc176x/internal.h +++ b/src/lpc176x/internal.h @@ -5,6 +5,8 @@ #define PCLK_TIMER0 1 #define PCLK_UART0 3 #define PCLK_ADC 12 +#define PCLK_I2C1 19 +#define PCLK_SSP0 21 void enable_peripheral_clock(uint32_t pclk); void gpio_peripheral(int bank, int pin, int func, int pullup); diff --git a/src/lpc176x/spi.c b/src/lpc176x/spi.c index 92e303d0..8373a39f 100644 --- a/src/lpc176x/spi.c +++ b/src/lpc176x/spi.c @@ -23,6 +23,9 @@ spi_init(void) gpio_peripheral(0, 17, 2, 0); gpio_peripheral(0, 18, 2, 0); + // Setup clock + enable_peripheral_clock(PCLK_SSP0); + // Set initial registers LPC_SSP0->CR0 = 0x07; LPC_SSP0->CPSR = 254; @@ -40,7 +43,7 @@ spi_setup(uint32_t bus, uint8_t mode, uint32_t rate) // Setup clock rate and mode struct spi_config res = {0, 0}; - uint32_t pclk = SystemCoreClock / 4; + uint32_t pclk = SystemCoreClock; uint32_t div = DIV_ROUND_UP(pclk/2, rate) << 1; res.cpsr = div < 2 ? 2 : (div > 254 ? 254 : div); res.cr0 = 0x07 | (mode << 6);