Very good Matias!

Indeed, registers definition is a boring part of creating a new NuttX
port, your tool makes it a breeze!

BR,

Alan

On 7/3/20, Adam Feuer <a...@starcat.io> wrote:
> Matias,
>
> This looks like it would be a lot of help bringing NuttX up on a new
> microprocessor. Thanks!
>
> -adam
>
> On Fri, Jul 3, 2020 at 1:46 PM Matias N. <mat...@imap.cc> wrote:
>
>> Hi,
>> I thought about doing this for a long time and I just did it, wasn't
>> really hard.
>> If you're not aware, CMSIS-SVD file format is an XML based definitions of
>> peripherals and registers available in a given MCU. This is typically
>> used
>> for debugging but it is quite useful for generating header definitions. I
>> wrote a quick python script that is able to generate register definitions
>> and base addresses of peripherals. It is based on
>> https://github.com/posborne/cmsis-svd which includes both the SVD python
>> parser and a really complete database of SVD files.
>> The tool is available here: https://gitlab.com/nuttx_projects/svdgen (be
>> sure to check the README on how to use)
>>
>> Example output (the console output properly tabulates data, format may
>> look broken in the email):
>>
>> Generate memory map:
>> $ ./gen.py -v Nordic -d nrf51 -p map -x NRF51
>>
>> #define NRF51_POWER_BASE 0x40000000 /* Power Control.*/
>> #define NRF51_CLOCK_BASE 0x40000000 /* Clock control.*/
>> #define NRF51_MPU_BASE 0x40000000 /* Memory Protection Unit.*/
>> #define NRF51_AMLI_BASE 0x40000000 /* AHB Multi-Layer Interface.*/
>> ... etc
>>
>> Register definitions:
>> $ ./gen.py -v Nordic -d nrf51 -p RADIO -x NRF51
>>
>> /* Register offsets
>> *********************************************************/
>>
>> #define NRF51_RADIO_TASKS_TXEN_OFFSET 0x000000 /* Enable radio in TX
>> mode.*/
>> #define NRF51_RADIO_TASKS_RXEN_OFFSET 0x000004 /* Enable radio in RX
>> mode.*/
>> #define NRF51_RADIO_TASKS_START_OFFSET 0x000008 /* Start radio.*/
>> #define NRF51_RADIO_TASKS_STOP_OFFSET 0x00000c /* Stop radio.*/
>> #define NRF51_RADIO_TASKS_DISABLE_OFFSET 0x000010 /* Disable radio.*/
>> ... etc
>>
>> /* Register definitions
>> *****************************************************/
>>
>> #define NRF51_RADIO_TASKS_TXEN (NRF51_RADIO_BASE +
>> NRF51_RADIO_TASKS_TXEN_OFFSET)
>> #define NRF51_RADIO_TASKS_RXEN (NRF51_RADIO_BASE +
>> NRF51_RADIO_TASKS_RXEN_OFFSET)
>> #define NRF51_RADIO_TASKS_START (NRF51_RADIO_BASE +
>> NRF51_RADIO_TASKS_START_OFFSET)
>> #define NRF51_RADIO_TASKS_STOP (NRF51_RADIO_BASE +
>> NRF51_RADIO_TASKS_STOP_OFFSET)
>> #define NRF51_RADIO_TASKS_DISABLE (NRF51_RADIO_BASE +
>> NRF51_RADIO_TASKS_DISABLE_OFFSET)
>> #define NRF51_RADIO_TASKS_RSSISTART (NRF51_RADIO_BASE +
>> NRF51_RADIO_TASKS_RSSISTART_OFFSET)
>> #define NRF51_RADIO_TASKS_RSSISTOP (NRF51_RADIO_BASE +
>> NRF51_RADIO_TASKS_RSSISTOP_OFFSET)
>> ... etc
>>
>> Best,
>> Matias
>
>
>
> --
> Adam Feuer <a...@starcat.io>
>

Reply via email to