C

Qt Quick Ultralite multitask Example

// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial

#include <stdint.h>
#include "bsp_exceptions.h"
#include "R7FA8D1BH.h"
#include "platforminterface/log.h"

#define IO_PORT_04_PIN_14 (0x040E)

#define IO_PRV_PFS_PSEL_OFFSET (24)
#define IO_PRV_8BIT_MASK (0xFF)
#define IO_PWPR_B0WI_OFFSET (7U)
#define IO_PWPR_PFSWE_OFFSET (6U)
#define IO_PFS_PDR_OUTPUT (4U)
#define IO_PRV_PIN_WRITE_MASK (0xFFFE3FFE)

namespace BoardUtils {
void initLED()
{
    //USER_LED3-Green is initialised by platform
}

void toggleLED()
{
    // Enable PinAccess
    R_PMISC->PWPRS = 0;                          ///< Clear BOWI bit - writing to PFSWE bit enabled
    R_PMISC->PWPRS = 1U << IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled

    static uint8_t level = 1;
    /* Clear PMR, ASEL, ISEL and PODR bits. */
    uint32_t pfs_bits = R_PFS->PORT[IO_PORT_04_PIN_14 >> 8].PIN[IO_PORT_04_PIN_14 & IO_PRV_8BIT_MASK].PmnPFS;
    pfs_bits &= IO_PRV_PIN_WRITE_MASK;

    /* Set output level and pin direction to output. */
    uint32_t lvl = ((uint32_t) level | pfs_bits);
    R_PFS->PORT[IO_PORT_04_PIN_14 >> 8].PIN[IO_PORT_04_PIN_14 & IO_PRV_8BIT_MASK].PmnPFS = (IO_PFS_PDR_OUTPUT | lvl);

    // Disable PinAccess
    R_PMISC->PWPRS = 0;                         ///< Clear PFSWE bit - writing to PFS register disabled
    R_PMISC->PWPRS = 1U << IO_PWPR_B0WI_OFFSET; ///< Set BOWI bit - writing to PFSWE bit disabled

    level = 1 - level;
}
} // namespace BoardUtils