Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 33 additions & 13 deletions boards/pic32cz_curiosity_ultra/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ whal_Clock g_whalClock = {
.cfg = &(whal_Pic32czClock_Cfg) {
/* 300MHz clock */
.oscCtrlCfg = &(whal_Pic32czClockPll_OscCtrlCfg) {
.supplyCtrl = &g_whalSupply,
.supply = &(whal_Pic32czSupc_Supply){WHAL_PIC32CZ_SUPPLY_PLL},

.pllInst = WHAL_PIC32CZ_PLL0,
.refSel = WHAL_PIC32CZ_REFSEL_DFLL48M,
.bwSel = WHAL_PIC32CZ_BWSEL_10MHz_TO_20MHz,
Expand Down Expand Up @@ -48,6 +45,18 @@ whal_Clock g_whalClock = {
},
};

/* Peripheral clocks */
static const whal_Pic32czClock_Clk g_peripheralClocks[] = {
{ /* SERCOM 4 (UART) */
.gclkPeriphChannel = 25,
.gclkPeriphSrc = 0, /* GEN 0 */
.mclkEnableInst = 1,
.mclkEnableMask = (1UL << 3),
.mclkEnablePos = 3,
},
};
#define PERIPHERAL_CLOCK_COUNT (sizeof(g_peripheralClocks) / sizeof(g_peripheralClocks[0]))

/* GPIO */
whal_Gpio g_whalGpio = {
WHAL_PIC32CZ_GPIO_DEVICE,
Expand Down Expand Up @@ -78,20 +87,10 @@ whal_Gpio g_whalGpio = {
};

/* UART */
static whal_Pic32czClock_Clk uartClk = {
.gclkPeriphChannel = 25, /* SERCOM 4 */
.gclkPeriphSrc = 0, /* GEN 0 */
.mclkEnableInst = 1, /* Peripheral BUS Clock Enable Mask1 Register */
.mclkEnableMask = (1UL << 3), /* SERCOM 4 enable mask */
.mclkEnablePos = 3,
};

whal_Uart g_whalUart = {
WHAL_PIC32CZ_SERCOM4_UART_DEVICE,

.cfg = &(whal_Pic32czUart_Cfg) {
.clkCtrl = &g_whalClock,
.clk = &uartClk,
.baud = WHAL_PIC32CZ_UART_BAUD(115200, 300000000),
.txPad = WHAL_PIC32CZ_UART_TXPO_PAD0,
.rxPad = WHAL_PIC32CZ_UART_RXPO_PAD1,
Expand Down Expand Up @@ -156,11 +155,25 @@ whal_Error Board_Init(void)
return err;
}

/* Enable PLL power supply before clock init */
err = whal_Supply_Enable(&g_whalSupply,
&(whal_Pic32czSupc_Supply){WHAL_PIC32CZ_SUPPLY_PLL});
if (err) {
return err;
}

err = whal_Clock_Init(&g_whalClock);
if (err) {
return err;
}

/* Enable peripheral clocks */
for (size_t i = 0; i < PERIPHERAL_CLOCK_COUNT; i++) {
err = whal_Clock_Enable(&g_whalClock, &g_peripheralClocks[i]);
if (err)
return err;
}

err = whal_Gpio_Init(&g_whalGpio);
if (err) {
return err;
Expand Down Expand Up @@ -218,6 +231,13 @@ whal_Error Board_Deinit(void)
return err;
}

/* Disable peripheral clocks */
for (size_t i = 0; i < PERIPHERAL_CLOCK_COUNT; i++) {
err = whal_Clock_Disable(&g_whalClock, &g_peripheralClocks[i]);
if (err)
return err;
}

err = whal_Clock_Deinit(&g_whalClock);
if (err) {
return err;
Expand Down
65 changes: 47 additions & 18 deletions boards/stm32wb55xx_nucleo/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,6 @@ whal_Clock g_whalClock = {
WHAL_STM32WB55_RCC_PLL_DEVICE,

.cfg = &(whal_Stm32wbRcc_Cfg) {
.flash = &g_whalFlash,
.flashLatency = WHAL_STM32WB_FLASH_LATENCY_3,

.sysClkSrc = WHAL_STM32WB_RCC_SYSCLK_SRC_PLL,
.sysClkCfg = &(whal_Stm32wbRcc_PllClkCfg)
{
Expand All @@ -51,6 +48,16 @@ whal_Clock g_whalClock = {
},
};

static const whal_Stm32wbRcc_Clk g_flashClock = {WHAL_STM32WB55_FLASH_CLOCK};

static const whal_Stm32wbRcc_Clk g_peripheralClocks[] = {
{WHAL_STM32WB55_GPIOB_CLOCK},
{WHAL_STM32WB55_UART1_CLOCK},
{WHAL_STM32WB55_RNG_CLOCK},
{WHAL_STM32WB55_AES1_CLOCK},
};
#define PERIPHERAL_CLOCK_COUNT (sizeof(g_peripheralClocks) / sizeof(g_peripheralClocks[0]))

/* GPIO */
enum {
LED_PIN,
Expand All @@ -62,12 +69,6 @@ whal_Gpio g_whalGpio = {
WHAL_STM32WB55_GPIO_DEVICE,

.cfg = &(whal_Stm32wbGpio_Cfg) {
.clkCtrl = &g_whalClock,
.clk = (const void *[1]) {
&(whal_Stm32wbRcc_Clk){WHAL_STM32WB55_GPIOB_CLOCK},
},
.clkCount = 1,

.pinCfg = (whal_Stm32wbGpio_PinCfg[3]) {
[LED_PIN] = { /* LED */
.port = WHAL_STM32WB_GPIO_PORT_B,
Expand Down Expand Up @@ -117,11 +118,9 @@ whal_Uart g_whalUart = {
WHAL_STM32WB55_UART1_DEVICE,

.cfg = &(whal_Stm32wbUart_Cfg) {
.clkCtrl = &g_whalClock,
.clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_UART1_CLOCK},
.timeout = &g_whalTimeout,

.baud = 115200,
.brr = WHAL_STM32WB_UART_BRR(64000000, 115200),
},
};

Expand All @@ -130,8 +129,6 @@ whal_Flash g_whalFlash = {
WHAL_STM32WB55_FLASH_DEVICE,

.cfg = &(whal_Stm32wbFlash_Cfg) {
.clkCtrl = &g_whalClock,
.clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_FLASH_CLOCK},
.timeout = &g_whalTimeout,

.startAddr = 0x08000000,
Expand All @@ -144,8 +141,6 @@ whal_Rng g_whalRng = {
WHAL_STM32WB55_RNG_DEVICE,

.cfg = &(whal_Stm32wbRng_Cfg) {
.clkCtrl = &g_whalClock,
.clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_RNG_CLOCK},
.timeout = &g_whalTimeout,
},
};
Expand All @@ -167,8 +162,6 @@ whal_Crypto g_whalCrypto = {
.opsCount = BOARD_CRYPTO_OP_COUNT,

.cfg = &(whal_Stm32wbAes_Cfg) {
.clkCtrl = &g_whalClock,
.clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_AES1_CLOCK},
.timeout = &g_whalTimeout,
},
};
Expand Down Expand Up @@ -196,6 +189,17 @@ whal_Error Board_Init(void)
{
whal_Error err;

/* Enable flash clock and set latency before increasing clock speed */
err = whal_Clock_Enable(&g_whalClock, &g_flashClock);
if (err) {
return err;
}

err = whal_Stm32wbFlash_Ext_SetLatency(&g_whalFlash, WHAL_STM32WB_FLASH_LATENCY_3);
if (err) {
return err;
}

err = whal_Clock_Init(&g_whalClock);
if (err) {
return err;
Expand All @@ -207,6 +211,13 @@ whal_Error Board_Init(void)
return err;
}

/* Enable peripheral clocks */
for (size_t i = 0; i < PERIPHERAL_CLOCK_COUNT; i++) {
err = whal_Clock_Enable(&g_whalClock, &g_peripheralClocks[i]);
if (err)
return err;
}

err = whal_Gpio_Init(&g_whalGpio);
if (err) {
return err;
Expand Down Expand Up @@ -284,6 +295,13 @@ whal_Error Board_Deinit(void)
return err;
}

/* Disable peripheral clocks */
for (size_t i = 0; i < PERIPHERAL_CLOCK_COUNT; i++) {
err = whal_Clock_Disable(&g_whalClock, &g_peripheralClocks[i]);
if (err)
return err;
}

err = whal_Stm32wbRcc_Ext_EnableHsi48(&g_whalClock, 0);
if (err) {
return err;
Expand All @@ -294,5 +312,16 @@ whal_Error Board_Deinit(void)
return err;
}

/* Reduce flash latency then disable flash clock */
err = whal_Stm32wbFlash_Ext_SetLatency(&g_whalFlash, WHAL_STM32WB_FLASH_LATENCY_0);
if (err) {
return err;
}

err = whal_Clock_Disable(&g_whalClock, &g_flashClock);
if (err) {
return err;
}

return WHAL_SUCCESS;
}
38 changes: 32 additions & 6 deletions docs/adding_a_board.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ on failure.
static whal_MyplatformGpio_PinCfg pinCfg[] = { /* ... */ };

static whal_MyplatformGpio_Cfg gpioConfig = {
.clkCtrl = &g_whalClock,
.pinCfg = pinCfg,
.pinCount = sizeof(pinCfg) / sizeof(pinCfg[0]),
};
Expand All @@ -63,34 +62,61 @@ whal_Gpio g_whalGpio = {
.cfg = &gpioConfig,
};

static const MyPlatformClk g_peripheralClocks[] = {
{MY_PLATFORM_GPIO_CLOCK},
{MY_PLATFORM_UART_CLOCK},
};
#define PERIPHERAL_CLOCK_COUNT \
(sizeof(g_peripheralClocks) / sizeof(g_peripheralClocks[0]))

whal_Error Board_Init(void)
{
whal_Error err;

err = whal_Clock_Init(&g_whalClock);
if (err != WHAL_SUCCESS) return err;
if (err)
return err;

for (size_t i = 0; i < PERIPHERAL_CLOCK_COUNT; i++) {
err = whal_Clock_Enable(&g_whalClock, &g_peripheralClocks[i]);
if (err)
return err;
}

err = whal_Gpio_Init(&g_whalGpio);
if (err != WHAL_SUCCESS) return err;
if (err)
return err;

err = whal_Uart_Init(&g_whalUart);
if (err != WHAL_SUCCESS) return err;
if (err)
return err;

err = whal_Timer_Init(&g_whalTimer);
if (err != WHAL_SUCCESS) return err;
if (err)
return err;

err = whal_Timer_Start(&g_whalTimer);
if (err != WHAL_SUCCESS) return err;
if (err)
return err;

return WHAL_SUCCESS;
}

whal_Error Board_Deinit(void)
{
whal_Error err;

whal_Timer_Stop(&g_whalTimer);
whal_Timer_Deinit(&g_whalTimer);
whal_Uart_Deinit(&g_whalUart);
whal_Gpio_Deinit(&g_whalGpio);

for (size_t i = 0; i < PERIPHERAL_CLOCK_COUNT; i++) {
err = whal_Clock_Disable(&g_whalClock, &g_peripheralClocks[i]);
if (err)
return err;
}

whal_Clock_Deinit(&g_whalClock);
return WHAL_SUCCESS;
}
Expand Down
Loading
Loading