
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

# Package: hw/bsp/rb-blend2

syscfg.defs:
    BSP_NRF52:
        description: 'Set to indicate that BSP has NRF52'
        value: 1

    UART_0:
        description: 'Whether to enable UART0'
        value: 1
    UART_0_PIN_TX:
        description: 'TX pin for UART0'
        value: 6
    UART_0_PIN_RX:
        description: 'RX pin for UART0'
        value: 8
    UART_0_PIN_RTS:
        description: 'RTS pin for UART0'
        value: 7
    UART_0_PIN_CTS:
        description: 'CTS pin for UART0'
        value: 5

    UART_1:
        description: 'Whether to enable bitbanger UART1'
        value: 0
    UART_1_PIN_TX:
        description: 'TX pin for UART1'
        value: 12
    UART_1_PIN_RX:
        description: 'RX pin for UART1'
        value: 11

    SPI_0_MASTER_PIN_SCK:
        description: 'SCK pin for SPI_0_MASTER'
        value:  20
    SPI_0_MASTER_PIN_MOSI:
        description: 'MOSI pin for SPI_0_MASTER'
        value:  23
    SPI_0_MASTER_PIN_MISO:
        description: 'MISO pin for SPI_0_MASTER'
        value:  24

    SPI_0_SLAVE_PIN_SCK:
        description: 'SCK pin for SPI_0_SLAVE'
        value:  20
    SPI_0_SLAVE_PIN_MOSI:
        description: 'MOSI pin for SPI_0_SLAVE'
        value:  23
    SPI_0_SLAVE_PIN_MISO:
        description: 'MISO pin for SPI_0_SLAVE'
        value:  24
    SPI_0_SLAVE_PIN_SS:
        description: 'SS pin for SPI_0_SLAVE'
        value:  22

    I2C_0_PIN_SCL:
        description: 'SCL pin for I2C_0'
        value:  27
    I2C_0_PIN_SDA:
        description: 'SDA pin for I2C_0'
        value:  26
    I2C_0_FREQ_KHZ:
        description: 'Frequency in khz for I2C_0 bus'
        value:  100

    TIMER_0:
        description: 'NRF52 Timer 0'
        value:  1
    TIMER_1:
        description: 'NRF52 Timer 1'
        value:  0
    TIMER_2:
        description: 'NRF52 Timer 2'
        value:  0
    TIMER_3:
        description: 'NRF52 Timer 3'
        value:  0
    TIMER_4:
        description: 'NRF52 Timer 4'
        value:  0
    TIMER_5:
        description: 'NRF52 RTC 0'
        value:  0

syscfg.defs.BLE_LP_CLOCK:
    TIMER_0:
        value: 0
    TIMER_5:
        value: 1

syscfg.vals:
    CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS
    REBOOT_LOG_FLASH_AREA: FLASH_AREA_REBOOT_LOG
    NFFS_FLASH_AREA: FLASH_AREA_NFFS
    COREDUMP_FLASH_AREA: FLASH_AREA_IMAGE_1
    MCU_DCDC_ENABLED: 1
    XTAL_32768: 1

syscfg.vals.BLE_LP_CLOCK:
    OS_CPUTIME_FREQ: 32768
    OS_CPUTIME_TIMER_NUM: 5
    BLE_XTAL_SETTLE_TIME: 1500
