Учимся программировать nrf52840 - PullRequest
1 голос
/ 11 марта 2019

Я недавно купил USB-ключ nrf52840;Тем не менее, я новичок в программировании без IDE и с нордическими продуктами в целом.Я не получаю ожидаемых результатов от своей программы или вообще никаких результатов, хотя я не уверен, проистекает ли моя проблема из моей программы или сценария компоновщика, который я написал.Буду признателен за любую помощь.

Редактировать: Я отредактировал скрипт компоновщика, чтобы он содержал весь (я надеюсь) необходимый материал.Я также разместил код запуска.

@ Lundin Я использую GCC для компиляции и NRF Connect для программирования микросхемы через USB.В настоящее время я безуспешно экспериментирую с настройками часов, но в таблице данных я заметил, что имеется внутренний генератор на 32 МГц, который предположительно включится, если вызываются высокоскоростные часы, а внешний генератор не включен.

LEDTest.c

// RGB LED at pins G-22,R-23,B-24

#define GPIO_BASE_ADDRESS     0x50000000
#define OUTSET_ADDRESS_OFFSET 0x508  //  1's written to this register set corresponding pins (HIGH). 0's have no effect.
#define DIRSET_ADDRESS_OFFSET 0x518  //  1's written to this register setup corresponding pins as OUTPUT. 0's have no effect.

volatile unsigned long * setupOutputPins = (volatile unsigned long *)GPIO_BASE_ADDRESS + DIRSET_ADDRESS_OFFSET;
volatile unsigned long * ledOn           = (volatile unsigned long *)GPIO_BASE_ADDRESS + OUTSET_ADDRESS_OFFSET;

void main(void){

    *setupOutputPins = 0x01C00000;  //  Make pins 22, 23, and 24 OUTPUT

    for(;;){
        *ledOn           = 0x00400000;  //  Make pin 22 HIGH
    }
}

LEDTest.ld

ENTRY (main)

MEMORY{
  FLASH (rx) : ORIGIN = 0x1000, LENGTH = 0xFF000
  RAM  (rwx) : ORIGIN = 0x20000008, LENGTH = 0x3FFF8
}

SECTIONS{
    . = 0x1000;
    .text : {
        *(vectors);
        *(.text);
    }
    .rodata : {
        *(.rodata);
    }
    flash_sdata = .;

    . = 0x20000008;
    ram_sdata = .;
    .data : AT (flash_sdata){
        *(.data);
    }
    ram_edata = .;
    data_size = ram_edata - ram_sdata;

    sbss = .;
    .bss  : {
        *(.bss)
    }
    ebss = .;
    bss_size = ebss - sbss;
}

startup.s

.section "vectors"

reset:  b   start
undef:  b   undef
swi:    b   swi
pabt:   b   pabt
dabt:   b   dabt
        nop
irq:    b   irq
fiq:    b   fiq

.text

start:
            ldr     r0, =flash_sdata
            ldr     r1, =ram_sdata
            ldr     r2, =data_size

            cmp     r2, #0
            beq     init_bss

copy:
            ldrb    r4, [r0], #1
            strb    r4, [r1], #1
            subs    r2, r2, #1
            bne     copy

init_bss:
            ldr     r0, =sbss
            ldr     r1, =ebss
            ldr     r2, =bss_size

            cmp     r2, #0
            beq     init_stack

            mov     r4, #0

zero:
            strb    r4, [r0], #1
            subs    r2, r2, #1
            bne     zero

init_stack:
            ldr     sp, =0x20040000
            bl      main

stop:   b   stop

1 Ответ

0 голосов
/ 11 марта 2019

Nordic предлагает несколько ресурсов, которые помогут вам начать разработку nRF52840.Пожалуйста, смотрите следующие ссылки: -

Обратите внимание, что вы все еще можете использовать IDE для написания своих приложений, но, как вы, вероятно, уже знаете, вам придется использовать инструменты Nordic для переноса приложения на ключ.Дополнительную информацию об использовании IDE см. Здесь: -

Надеюсь, это поможет.

...