This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Simple GPIO Example - nRF9160 DK-2

Dear, 

I tried the same code on : 

https://devzone.nordicsemi.com/f/nordic-q-a/43774/simple-gpio-example---nrf9160-dk/173275#173275

and my code:

#include <zephyr.h>
#include <device.h>
#include <gpio.h>

/* 1000 msec = 1 sec */
#define SLEEP_TIME 	5000

void main(void)
{
	int cnt = 0;
	struct device *dev;

	dev = device_get_binding("GPIO_0");
	/* Set LED pin as output */
	gpio_pin_configure(dev, 2, GPIO_DIR_OUT); //p0.03 == LED2
	gpio_pin_configure(dev, 3, GPIO_DIR_OUT); //p0.04 == LED3
        gpio_pin_configure(dev, 4, GPIO_DIR_OUT); //p0.03 == LED2
	gpio_pin_configure(dev, 5, GPIO_DIR_OUT); //p0.04 == LED3
	gpio_pin_configure(dev, 17, GPIO_DIR_OUT); //p0.17
        gpio_pin_configure(dev, 18, GPIO_DIR_OUT); //p0.18
        gpio_pin_configure(dev, 19, GPIO_DIR_OUT); //p0.19

	while (1) {
		/* Set pin to HIGH/LOW every 1 second */
		gpio_pin_write(dev, 2, cnt % 2);	//p0.03 == LED2
		gpio_pin_write(dev, 3, cnt % 2);	//p0.04 == LED3
                gpio_pin_write(dev, 4, cnt % 2);	//p0.03 == LED2
		gpio_pin_write(dev, 5, cnt % 2);	//p0.04 == LED3
		gpio_pin_write(dev, 17, cnt % 2);	//p0.17 Toggling pin 17
                gpio_pin_write(dev, 18, cnt % 2);	//18
                gpio_pin_write(dev, 19, cnt % 2);	//19
		cnt++;
		k_sleep(SLEEP_TIME);
	}
}

The Led1,2,3,4 will on/off in 5s, but P0.17 P0.18 P0.19 didnt change !!

Something else do we need to setup? 

I check my dts file: 

/*
 * Copyright (c) 2017 Linaro Limited
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <nordic/nrf9160_xxaa.dtsi>

/ {
	model = "Nordic PCA10090 Dev Kit";
	compatible = "nordic,pca10090-dk", "nordic,nrf9160-xxaa";

	chosen {
		zephyr,console = &uart0;
                zephyr,sram = &sram0;
		zephyr,flash = &flash0;
	};

	aliases {
		led0 = &led0;
		led1 = &led1;
		led2 = &led2;
		led3 = &led3;
		sw0 = &button2;
		sw1 = &button3;
		sw2 = &button0;
		sw3 = &button1;
	};

	leds {
		compatible = "gpio-leds";
		led0: led_0 {
			gpios = <&gpio0 2 GPIO_INT_ACTIVE_LOW>;
			label = "Green LED 0";
		};
		led1: led_1 {
			gpios = <&gpio0 3 GPIO_INT_ACTIVE_LOW>;
			label = "Green LED 1";
		};
		led2: led_2 {
			gpios = <&gpio0 4 GPIO_INT_ACTIVE_LOW>;
			label = "Green LED 2";
		};
		led3: led_3 {
			gpios = <&gpio0 5 GPIO_INT_ACTIVE_LOW>;
			label = "Green LED 3";
		};
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			gpios = <&gpio0 8 GPIO_PUD_PULL_UP>;
			label = "Switch 1";
		};
		button1: button_1 {
			gpios = <&gpio0 9 GPIO_PUD_PULL_UP>;
			label = "Switch 2";
		};
		button2: button_2 {
			gpios = <&gpio0 6 GPIO_PUD_PULL_UP>;
			label = "Push button 1";
		};
		button3: button_3 {
			gpios = <&gpio0 7 GPIO_PUD_PULL_UP>;
			label = "Push button 2";
		};
	};

	sram0_bsd: memory@20010000 {
		device_type = "memory";
		compatible = "mmio-sram";
	};
};

&uart0 {
	status = "ok";
	current-speed = <9600>;
	tx-pin = <10>;
	rx-pin = <11>;
	rts-pin = <27>;
	cts-pin = <26>;
};

&uart1 {
	status = "ok";
	current-speed = <9600>;
	tx-pin = <12>;
	rx-pin = <13>;
	rts-pin = <14>;
	cts-pin = <15>;
};

&gpiote {
	status = "ok";
};

&gpio0 {
	status = "ok";
};

&timer0 {
	status = "ok";
};

&flash0 {
	/*
	 * For more information, see:
	 * http://docs.zephyrproject.org/devices/dts/flash_partitions.html
	 */
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0x10000>;
		};
		slot0_partition: partition@10000 {
			label = "image-0";
		};
#if defined(CONFIG_ARM_TRUSTZONE_M)
		slot0_ns_partition: partition@40000 {
			label = "image-0-nonsecure";
		};
#endif
		slot1_partition: partition@80000 {
			label = "image-1";
		};
#if defined(CONFIG_ARM_TRUSTZONE_M)
		slot1_ns_partition: partition@b0000 {
			label = "image-1-nonsecure";
		};
#endif
		scratch_partition: partition@f0000 {
			label = "image-scratch";
			reg = <0x000f0000 0xa000>;
		};

		storage_partition: partition@fa000 {
			label = "storage";
			reg = <0x000fa000 0x00006000>;
		};
	};
};

#if defined(CONFIG_ARM_TRUSTZONE_M)
/ {
	sram0_ns: memory@20020000 {
		device_type = "memory";
		compatible = "mmio-sram";
	};
};
#endif

/* Include partition configuration file */
#include "nrf9160_pca10090_partition_conf.dts"

the define for gpio; 

&gpiote {
status = "ok";
};

&gpio0 {
status = "ok";
};

is it correct?

Plz tell me where is wrong on my code

Thanks

Regards,

hng

Parents
  • Hi Hoang,

    Please make sure that you have CONFIG_GPIO=y in your prj.conf file.

    I tested on my side and it works fine. All leds are toggling and the GPIOs P0.17 - P0.18 toggles as well.

  • Dear  Martin, 

    I fixed it, 

    the option:  CONFIG_GPIO=y in your prj.conf file. 

    But, another thing, I want to ask you: 

    on the backside of nRF9160 DK: it has: 

    GPIO  Function
    P0.02 LED 1
    P0.03 LED 2
    P0.04 LED 3
    P0.05 LED 4
    P0.06 Button 1
    P0.07 Button 2
    P0.08 Button 3
    P0.09 Button 4
    P0.26 CTS
    P0.27 RTS
    P0.28 RxD
    P0.29 TxD

    On the schematic, using Switches to select, for example to control LED1

    pin P0.02 (from nRF91) will select LED1 or D2 (P0.02 on the PCB-P14), and the control pin (nRF52_P1.05 - fron nRF52)

    So, we need one program for nRF52 to control for GPIO: 

    nRF9160_DK_board_controller_FW.hex 

    https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF9160-DK/Download

    with LED1234, the default setting (IN 1-2, IN3-4,..) = 0, so P0.02 --> LED1, P0.02-->LED2,..., so pin D2,D3,D4.D5 are floating (NO output signal)

    With the pin P0.17,P0.18, P0.19:

    I dont know the value of nRF52_P0.13 so I dont know pin A3/A4/A5 (P0.17,P0.18,P0.19 ) are connected to nRF91 or FLOATING!

    step1: control SW5 to nRF52, and program it:

      nrfjprog --program nRF9160_DK_board_controller_FW.hex --sectorerase -f nrf52 -r --verify 

       My question: Can you share code of this one

    step2: then, change SW5 to nRF91, and program secure_boot 

       (I am using Segger Embedded Studio) 

            Build and Run

                Sometime, I got error here: after secure_boot program; I used LTE Link Monitor to check the output report: it came with : 

             NUL NUL NUL NUL NUL ........................................... ( nonstop)!!

            zephyr.hex

          What's wrong?

    step3: and program GPIO_code (previous)

            Build and Run

        add:  CONFIG_GPIO=y in your prj.conf file. 

    It worked with the secure_boot.hex from you, but I have problem with my secure boot now

    Thanks, 

    Regards

    hng

  • Hi Hoang,
    I would appreciate if you could please make a new case since this is unrelated to the first post.

Reply Children
No Data
Related