Skip to content
Snippets Groups Projects
  1. Jul 18, 2018
    • Ayke van Laethem's avatar
      1aa9ff91
    • Ayke van Laethem's avatar
      fb171051
    • Ayke van Laethem's avatar
      nrf/modules/machine/adc: Don't compare -1 to an unsigned number. · 17769452
      Ayke van Laethem authored
      Clang warns about this.
      17769452
    • Ayke van Laethem's avatar
      nrf/Makefile: Refine dead-code elimination parameters. · 4111206b
      Ayke van Laethem authored
      Clang warns about useless -Wl,--gc-sections passed in CFLAGS.
      4111206b
    • Ayke van Laethem's avatar
      nrf/Makefile: Use C11 instead of Gnu99. · ab72b5b6
      Ayke van Laethem authored
      Some constructs require C11 which GCC silently allows.
      ab72b5b6
    • Ayke van Laethem's avatar
      nrf/Makefile: Remove -fstack-usage. · a6ae950b
      Ayke van Laethem authored
      -fstack-usage is not supported by Clang and old GCC versions.
      a6ae950b
    • Ayke van Laethem's avatar
      nrf/Makefile: use "standard" GCC -fshort-enums instead of --short-enums. · 5fdebe62
      Ayke van Laethem authored
      Clang understands only -fshort-enums, not --short-enums. As
      --short-enums isn't even mentioned in the gcc man page, I think this
      alias exists more for backwards compatibility.
      5fdebe62
    • Glenn Ruben Bakke's avatar
      nrf/bluetooth: Fixes for s132 v5 BLE stack · 03da4e33
      Glenn Ruben Bakke authored
      Removing unused nrf52832_512k_64k_s132_5.0.0.ld.
      
      Adding new linker script s132_5.0.0 following new
      linker script scheme.
      
      Updating ble_drv.c to handle de-increment of
      outstanding tx packets on hvx for s132 v5.
      03da4e33
    • Glenn Ruben Bakke's avatar
    • Glenn Ruben Bakke's avatar
      nrf: Return immediatly from mp_hal_delay_us if 0us is given · 24258cf0
      Glenn Ruben Bakke authored
      After nrfx 1.0.0 a new macro was introduced to do a common
      hardware timeout. The macro function triggers a counter of
      retries or a timeout in us. However, in many cases, like in
      nrfx_adc.c the timeout value is set to 0, leading to a infinite
      loop in mp_hal_delay_us. This patch prevents this from happening.
      
      Path of error:
      nrfx_adc.c -> NRFX_WAIT_FOR -> NRFX_DELAY_US -> mp_hal_delay_us.
      24258cf0
    • Glenn Ruben Bakke's avatar
      nrf/spi: Allow for external use of new and transfer function. · 63c748bf
      Glenn Ruben Bakke authored
      This patch also opens up for all arguments to be set as positional
      arguments such that an external user of the make_new function can set
      provide all parameters as positional arguments.
      63c748bf
    • Glenn Ruben Bakke's avatar
    • Glenn Ruben Bakke's avatar
      nrf/modules: Align method to resolve pin object · 3209a13b
      Glenn Ruben Bakke authored
      machine/i2c already uses mp_hal_get_pin_obj which
      points to pin_find function in order to locate correct
      pin object to use.
      
      The pin_find function was recently updated to also
      being able to locate pins based on an integer value,
      such that pin number can be used as argument to object
      constructors.
      
      This patch modfies and uniforms pin object lookup for
      SPI, music and pwm.
      3209a13b
    • Glenn Ruben Bakke's avatar
      nrf/modules/random: Rename port config for RNG · 0f7da42c
      Glenn Ruben Bakke authored
      Renaming config for enabling random module with hw
      random number generator from MICROPY_PY_HW_RNG to
      MICROPY_PY_RANDOM_HW_RNG to indicate which module it
      is configuring.
      
      Also, disabling the config by default in mpconfigport.h.
      
      Adding the enable of RNG in all board configs.
      
      Moving ifdef in modrandom, which test for the config being
      set, earlier in the code. This is to prevent un-necessary
      includes if not needed.
      0f7da42c
    • Glenn Ruben Bakke's avatar
    • Glenn Ruben Bakke's avatar
    • Ayke van Laethem's avatar
      nrf/gccollect: Use the SP register instead of MSP. · 65f8d9a6
      Ayke van Laethem authored
      Using the current stack pointer directly saves 8 bytes of code.
      We need the *current* register anyway for GC (which is always MSP).
      65f8d9a6
    • Ayke van Laethem's avatar
      nrf/drivers/bluetooth/ble_drv: Increase max transfers in progress. · 013c2371
      Ayke van Laethem authored
      Increase the maximum number of queued notifications from 1 to 6. This
      massively speeds up the NUS console - especially when printing large
      amounts of text. The reason is that multiple transfers can be done in a
      single connection event, in ideal cases 6 at a time.
      013c2371
    • Glenn Ruben Bakke's avatar
      nrf/modules/machine/spi: SPIM (EasyDMA) backend for nrf52x · 67fd67f5
      Glenn Ruben Bakke authored
      This patch moves all nrf52 targets to use SPIM backend
      for SPI which features EasyDMA. The main benefit of doing
      this is to utilize the SPIM3 on nrf52840 which is
      EasyDMA only peripheral.
      67fd67f5
    • Glenn Ruben Bakke's avatar
      nrf/modules/machine/pin: Add support for IRQ on Pin's · 6e8a6055
      Glenn Ruben Bakke authored
      This patch ads irq method to the pin object. Handlers
      registered in the irq method will be kept as part of the
      ROOT_POINTERS.
      
      In order to resolve which pin object is the root of the
      IRQ, the pin_find has been extended to also be able to
      search up Pin objects based on mp_int_t pin number.
      This also implies that the Pin.new API is now also supporting
      creation of Pin objects based on the integer value of the
      pin instead of old style mandating string name of the Pin.
      
      All boards have been updated to use real pin number from
      0-48 instead of pin_Pxx for UART/SPI and music module pins.
      
      UART/SPI/modmusic has also been updated to use pin number
      provided directly or look up the Pin object based on the
      integer value of the pin (modmusic).
      
      Pin generation has been updated to create a list of pins, where
      the board/cpu dicts are now refering to an index in this list
      instead of having one const declaration for each pin. This new
      const table makes it possible to iterate through all pins generated
      in order to locate the correct Pin object.
      6e8a6055
    • Glenn Ruben Bakke's avatar
      nrf: Remove port member from Pin object · 864f6717
      Glenn Ruben Bakke authored
      In order to be able to support GPIO1 port on nrf52840
      the port has been removed from the Pin object.
      
      All pins on port1 will now be incrementally on top of
      the pin numbers for gpio0. Hence, Pin 1.00 will become
      P32, and Pin 1.15 will become P47.
      
      The modification is done to address the new gpio HAL
      interface in nrfx, which resolves the port to be
      configured base on a multiple of 32.
      
      The patch also affects the existing devices which does
      not have a second GPIO port in the way that the
      port indication A and B is removed from Pin generation.
      This means that the port which was earlier addressed
      as PA0 is now P0, and PA31 is P31.
      
      Also, this patch removes the gpio member which earlier
      pointed to the perihperal GPIO base address. This is not
      needed anymore, hence removed.
      864f6717
    • Ayke van Laethem's avatar
      nrf: Make linker scripts more modular. · 2de65dda
      Ayke van Laethem authored
      With all the variation in chips and boards it's tedious to copy and
      redefine linker scripts for every option. Making linker scripts more
      modular also opens up more possibilities, like enabling/disabling the
      flash file system from the Makefile - or even defining it's size from a
      Makefile argument (FS_SIZE=12 for a 12kB filesystem if tight on space).
      2de65dda
    • Ayke van Laethem's avatar
      nrf: Enable -g flag by default. · 375bc31f
      Ayke van Laethem authored
      This does not affect binary output, but makes debugging a whole lot
      easier.
      375bc31f
    • Ayke van Laethem's avatar
      nrf/Makefile: Fix .PHONY target. · 1949719e
      Ayke van Laethem authored
      It must be in uppercase.
      1949719e
    • Ayke van Laethem's avatar
    • glennrub's avatar
      nrf: Replace custom-HAL with nrfx-HAL · 002f7d1a
      glennrub authored
      Summarized this squashed PR replaces the hal/ folder in the port. This has been replaced the official
      HAL layer from Nordic Semiconductor; https://github.com/NordicSemiconductor/nrfx.
      
      A Git submodule has been added under lib/nrfx, for the nrfx dependency.
      
      The drivers / modules has been updated to use this new HAL layer; nrfx at v1.0.0.
      
      Also, header files and system files for nrf51/nrf52x chip variants has been deleted from the device/ folder, only keeping back the startup files written in C. All other files are now fetched from nrfx.
      
      3 new header files in the ports/nrf/ folder has been added to configure nrfx (nrfx_config.h), logging (nrfx_log.h) and glue nrfx together with the drivers and modules from micropython (nrfx_glue.h).
      
      The PR has been a joint effort from @aykevl (Ayke van Laethem) and @glennrub.
      
      For reference, the commit log will be kept to get an overview of the changes done:
      
      * ports/nrf: Initial commit for moving hal to Nordic Semiconductor BSD-3 licensed nrfx-hal.
      
      * ports/nrf: Adding nrfx, Nordic Semiconductor BSD-3 hal layer, as git submodule checked out at lib/nrfx.
      
      * ports/nrf/modules/machine/uart: Fixing bug which set hwfc to parity excluded, always resulting in no flow control, hence corrupted output. Also adding an extra loop on uart_tx_char to prevent any tx when any ongoing tx is in progress.
      
      * ports/nrf/i2c: Moving I2C over to nrfx driver.
      
      * ports/nrf/modules/machine/i2c: Alignment. Renaming print function param 'o' to 'self_in'
      
      * ports/nrf/spi: Updating SPI machine module to use nrfx drivers.
      
      * ports/nrf: Renaming modules/machine/rtc.c/.h to rtcounter.c/.h to not confuse the peripheral with Real-Time Clock:
      
      * ports/nrf: Updating various files after renaming machine module RTC to RTCounter.
      
      * ports/nrf: Renaming RTC to RTCounter in modmachine globals dict table. Also updating object type name to reflect new module name.
      
      * ports/nrf: Fixing leftovers after renaming rtc to rtcounter.
      
      * ports/nrf: Early untested adoption of nrfx_rtc in RTCounter. Untested.
      
      * nrf/modules/machine/i2c: Improve keyword argument handling
      
      * ports/nrf/modules/temp: Updating Temp machine module to use nrfx defined hal nrf_temp.h. Moving logic of BLE stack awareness to machine module.
      
      * ports/nrf/boards/pca10040: Enable machine Temp module.
      
      * nrf/modules/machine/rtcounter: Remove magic constants.
      
      * ports/nrf: Adding base support for nrfx module logging. Adding option to disable logging of UART as it might log its own setup over UART while the peripheral is not yet set up. Logging of UART could make sense if other transport of log is used.
      
      * ports/nrf: updating nrfx_log.h with more correct parenthisis on macro grouping.
      
      * ports/nrf: Updating nrfx logging with configuration to disable logging of UART module. The pattern can be used to turn off other modules as well. However, for now UART is the only module locking itself by logging before the peripheral is configured. Logging is turned off by default, can be enabled in nrfx_config.h by setting NRFX_LOG_ENABLED=1.
      
      * ports/nrf/modules/random: Updating modrandom to use nrfx hal for rng. Not using nrfx-driver for this peripheral as its blocking mode would do the trick on RNG. Moving softdevice aware code from legacy hal to modrandom.c.
      
      * nrf: Enable Peripheral Resource Sharing.
      
      This enables TWI and SPI to be enabled at the same time.
      
      * nrf/Makefile: Define MCU sub variant (e.g. NRF51822/NRF51422)
      
      * nrf: Port TIMER peripheral to nrfx HAL.
      
      * nrf/modules/machine/uart: Optimize UART module
      
      For a nRF51, this results in a size reduction of:
      .text: -68 bytes
      .data: -56 bytes
      
      * nrf/modules/machine/uart: Don't use magic index numbers.
      
      * nrf/modules/machine/uart: Fix off-by-one error.
      
      For nrf51:
      .text: -40 bytes
      
      * nrf/modules/machine/rtcounter: Update for nrfx HAL.
      
      * nrf/modules/machine/i2c: Reduce RAM consumption.
      
      Reductions for the nrf51:
      flash: -108 bytes
      RAM:   -72 bytes
      
      * nrf/mpconfigport: Avoid unnecessary root pointers.
      
      This saves 92 bytes of RAM.
      
      * nrf: Support SoftDevice with nrfx HAL.
      
      * nrf: Add NVMC peripheral (microbitfs) support.
      
      There is no support yet for a SoftDevice.
      
      It also fixes a potentially serious bug in start_index generation.
      
      * nrf/modules/machine/spi: Optimize SPI peripheral.
      
      nrf51:
      text: -340 bytes
      data: -72  bytes
      
      nrf52:
      text: -352 bytes
      data: -108 bytes
      
      * nrf/modules/random: Forgot to commit header file.
      
      * nrf: Make nrfx_config.h universal for all boards.
      
      * nrf: Use SoftDevice API for flash access when built for SD
      
      * nrf/drivers/bluetooth: Remove legacy HAL driver includes.
      
      These were not used anymore so can be removed.
      
      * ports/nrf/microbit: Port microbit targets to nrfx HAL
      
      Initial port of microbit modules to use nrfx HAL layer.
      Tested display/image and modmusic on micro:bit to verify that
      softpwm and ticker for nrf51 is working as expected.
      
      Changing IRQ priority on timer to priority 2, as 1 might collide if
      used side by side of SD110 BLE stack.
      
      The patch reserves Timer1 peripheral compile time. This is not ideal
      and should be resolved in seperate task.
      
      * nrf/boards/microbit: Remove custom nrfx_config.h from microbit target, adding disablement of timer1 if softpwm is enabled.
      
      * nrf/adc: Update ADC module to use nrfx
      
      * nrf/modules/machine/pwm: Updating machine PWM module to use nrfx HAL driver.
      
      examples/nrf52_pwm.py and examples/nrf52_servo.py tested on pca10040.
      
      * nrf: Removing hal folder and boards nrf5x_hal_conf.h headers.
      
      * nrf/nrfx_glue: Adding direct NVIC access for S110 BLE stack
      
      If SoftDevice s110 has not yet been initialized, the IRQ will not be forwarded to
      the application using the sd_nvic* function calls. Hence, direct access to cmsi
      nvic functions are used instead if SoftDevice is not enabled.
      
      * nrf/drivers/ticker: Setting IRQ priority 3 on Timer1
      
      SoftDevice fails to initilize if Timer1 has been configured to priority
      level 2 before enabling the SD. The timer is set to priority 1, higher than BLE
      stack in order to provide better quality of music rendering when used with the
      music module. This might be too high, time will show.
      
      * nrf/examples: Updating ubluepy_temp after moving RTCounter to nrfx.
      
      * nrf: delete duplicate files from device folder which can be located in nrfx/mdk.
      
      * nrf/Makefile: Fetch system files from nrfx.
      
      Testing on each device sub-variant to figure out which system file to
      use. Reason for this is that nrf52.c is actually defining nrf52832.
      
      Removing NRF_DEFINES parameter setting the device in use into the
      same sub-variant test, as NRF52 is unique to nrf52832 when using nrfx.
      Without this exclusion of -DNRF52 in compilation for nrf52840, the
      device will be interpreted as a nrf52, hence nrf52832.
      
      Also, changing name on variable SRC_NRF_HAL to SRC_NRFX_HAL to
      explicitly tell the origin of the file.
      
      * nrf: Updating device #ifdefs to be more open to non-nrf51 targets.
      
      * nrf/modules/machine/uart: Removing second instance of UART for nrf52840 as it only has one non-DMA variant.
      
      * nrf/device: Removing system files as these are now used from nrfx/mdk
      
      * nrf: Moving startup files in device one level up as there is no need for deep hierarchy.
      
      * nrf: Use NRF52_SERIES defined in nrfx/mdk/nrf.h as define value when testing for both nrf52(832) and nrf52840 variants.
      
      * nrf/modules/machine/uart: Enable UART RX by default
      
      Enable rx by default after intiialization of the peripheral.
      Else, the nrfx driver will re-enable rx for each byte read
      on uart REPL, clearing the EVENT_RXDRDY before second byte,
      which again will make second byte get lost and read will get stuck.
      
      This happens if the bytes are transmitted nrf(51) while still
      processing the previous byte. Not seen on nrf52, but should
      also become an issue at higher speeds.
      
      This patch sets rx to always be enabled. Hence, not clearing the event
      between read bytes, and it will be able to detect next byte recieved
      upon finishing the first.
      
      * nrf/modules/machine/timer: Fixing defines excluding Timer1 if ticker/softpwm is used.
      
      * nrf: Switching import form mpconfigboard.h to mpconfigport.h in nrfx_config.h as mpconfigboard.h might define default values for defines not set by board specific header.
      
      * nrf/modules/machine/i2c: nrfx integration fixes
      
      Increasing speed to 400K.
      
      Returning Address NACK's as MP error code; MP_ENODEV.
      
      Returning MP_ETIMEOUT on all other error codes from TWI nrfx driver
      except the ANACK.
      
      Enabling and disabling the TWI peripheral before and after each transaction.
      
      * nrf/examples: Updating ssd1306_mod.py to split framebuffer transfer into multiple chunks
      
      * nrf/modules/machine/i2c: Return MP_EIO error if Data NACK occurs.
      
      * nrf: Addressing review comments.
      
      * nrf: Updating git submodule and users to nrfx v1.0.0.
      
      * nrf/modules/machine/adc: Update adc module to follow v1.0.0 nrfx API.
      
      * nrf/modules/machine/spi: Implement init and deinit functions
      
      Extending SPI objects with a config member such that
      configuration can be kept between new() and init().
      
      Moving initialization done in new() to common init
      function shared between the module functions.
      
      If SPI is already configured, the SPI peripheral will
      be uninitialized before initalized again.
      
      Adding logic to handle initialization of polarity and
      phase. As well, updating default speed to 1M from 500K.
      
      * nrf/modules/machine: Removing unused nrfx includes in machine module header files
      002f7d1a
    • Glenn Ruben Bakke's avatar
      nrf/boards/microbit/modules: Initialize variable in microbit_sleep. · 62931398
      Glenn Ruben Bakke authored
      When compiling for microbit with LTO=0, a compiler error occurs due to
      'ms' variable in the microbit_sleep function has not been initialized.
      
      This patch initialize the variable to 0.
      62931398
    • Ayke van Laethem's avatar
      nrf: Make LTO configurable via Makefile flag. · 3cdecf90
      Ayke van Laethem authored
      LTO messes up debuggability and may cause some other issues.
      Additionally, it does not always result in reduced code size.
      3cdecf90
    • Glenn Ruben Bakke's avatar
      nrf: Improve include of boardmodules.mk · c4861273
      Glenn Ruben Bakke authored
      Removing shell commands for checking if boardmodules.mk exists
      under boards/<BOARD>/modules folder before including it.
      
      This patch does the equivalent to previous test without using
      shell commands. Hence, including the .mk if it exists.
      
      Reference:
      https://stackoverflow.com/questions/8346118/check-if-a-makefile-exists-before-including-it
      c4861273
    • Ayke van Laethem's avatar
      nrf: Fix stack size in ld script and enable MICROPY_STACK_CHECK. · 4231d431
      Ayke van Laethem authored
      The nrf51x22_256k_16k_s110_8.0.0.ld had a stack size of only 1kB, which
      is way too low. Additionally, the indicated _minimum_stack_size (set at
      2kB for that chip) isn't respected.
      
      This commit sets the heap end based on the stack size (heap end = RAM
      end - stack size) making it much easier to configure.
      
      Additionally, the stack/heap size of nrf52 chips has been set to a more
      sane value of 8kB.
      4231d431
    • Ayke van Laethem's avatar
      nrf: Make machine.UART optional. · 987381df
      Ayke van Laethem authored
      Leave it enabled by default on all targets.
      
      This is only possible when using UART-over-BLE (NUS) instead of the
      default hardware peripheral. The flash area saved is quite substantial
      (about 2.2KB) so this is useful for custom builds that do not need UART.
      987381df
    • Glenn Ruben Bakke's avatar
      nrf/drivers/ble_drv: Fixing sd_ble_enable bug for SD s132 v.2.0.1 · f679ee20
      Glenn Ruben Bakke authored
      Feather52 target which is using SD s132 v.2.0.1 cannot compile
      due to variable containing RAM start address is not used.
      
      This patch enables the correct sd_ble_enable variant for this SD.
      f679ee20
    • Ayke van Laethem's avatar
      nrf/boards/common.ld: Avoid overflowing the .text region. · f907139f
      Ayke van Laethem authored
      Similar commit to this one:
      https://github.com/tralamazza/micropython/commit/6e56e6269f467e59316b5e4cb04ea37ab6a0dfe3
      
      When .text + .data oveflow available flash, the linker may not show an
      error. This change makes sure .data is included in the size calculation.
      f907139f
    • Ayke van Laethem's avatar
      nrf/modules/machine/pin: Disable pin debug by default. · 4c011e66
      Ayke van Laethem authored
      Saves for the nrf51:
      flash: 336 bytes
      RAM:     4 bytes
      4c011e66
    • Ayke van Laethem's avatar
      nrf/mpconfigport: Reduce GC stack size for nrf51. · 1b988f1e
      Ayke van Laethem authored
      This frees 128 bytes of .bss RAM on the nRF51, at the cost of possibly
      more expensive GC cycles. Leave it as-is on the nRF52 as that chip has a
      lot more RAM.
      
      This is also done in the micro:bit:
      https://github.com/bbcmicrobit/micropython/blob/a7544718a7138a04168e8e6b283e14e500ffbe8b/inc/microbit/mpconfigport.h#L6
      1b988f1e
    • kaasasolut's avatar
    • Glenn Ruben Bakke's avatar
      nrf: Change PYB prefix to MPY · 725267df
      Glenn Ruben Bakke authored
      725267df
    • glennrub's avatar
      nrf: Add support for s132 v5.0.0 bluetooth stack (#139) · f8f14bf0
      glennrub authored
      * ports/nrf/boards: Adding linker script for nrf52832 using BLE stack s132 v.5.0.0.
      
      * ports/nrf/drivers/bluetooth: Updating makefile to add BLE_API_VERSION=4 if s132 v5.0.0 is used.
      
      * ports/nrf/drivers/bluetooth: Updating BLE stack download script to also download S132 v5.0.0.
      
      * ports/nrf/drivers/bluetooth: Updating ble_drv.c to handle BLE_API_VERSION=4 (s132 v5.0.0).
      
      * ports/nrf/boards: Updating linker script for nrf52832 with s132 v.5.0.0 bluetooth stack.
      
      * ports/nrf/drivers/bluetooth: Removing commented out code in ble_drv.c
      
      * ports/nrf/drivers/bluetooth: Updating define of GATT_MTU_SIZE_DEFAULT for SD132v5 to be defined using the new name defined in the SD headers in a more generic way.
      
      * ports/nrf/drivers/bluetooth: Cleaning up use of BLE_API_VERSION in the ble_drv.c. Also considering s140v6 API, so not all has been changed to >= if API version 3 and 4 in combo is used. New s140v6 will differ on these, and add a new API not compatible with the API for 3 and 4.
      f8f14bf0
    • Glenn Ruben Bakke's avatar
      nrf/drivers/bluetooth: Reset evt_len to size of static buffer each iter. · 95bd2052
      Glenn Ruben Bakke authored
      For each iteration of polling BLE events from the Bluetooth LE stack.
      95bd2052
    • Glenn Ruben Bakke's avatar
      nrf/boards/microbit: Enable music, display, image, microbit module. · c8fd7161
      Glenn Ruben Bakke authored
      Enabled by default on microbit targets, with or without BLE stack.  Also
      enable softpwm to make display and music module compile.
      c8fd7161
Loading