Add basic Pi Pico project
This commit is contained in:
		
							
								
								
									
										1
									
								
								mcu/.envrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								mcu/.envrc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
use flake ..#mcu --override-input rootdir "file+file://"<(printf %s "$PWD")
 | 
			
		||||
							
								
								
									
										1
									
								
								mcu/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								mcu/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
/build/
 | 
			
		||||
							
								
								
									
										19
									
								
								mcu/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								mcu/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
cmake_minimum_required(VERSION 3.12)
 | 
			
		||||
 | 
			
		||||
# Pull in SDK (must be before project)
 | 
			
		||||
include(pico_sdk_import.cmake)
 | 
			
		||||
 | 
			
		||||
project(test_project C CXX ASM)
 | 
			
		||||
set(CMAKE_C_STANDARD 11)
 | 
			
		||||
set(CMAKE_CXX_STANDARD 17)
 | 
			
		||||
set(CMAKE_C_COMPILER_WORKS ON)
 | 
			
		||||
set(CMAKE_CXX_COMPILER_WORKS ON)
 | 
			
		||||
pico_sdk_init()
 | 
			
		||||
 | 
			
		||||
add_executable(qclk
 | 
			
		||||
  main.c
 | 
			
		||||
)
 | 
			
		||||
pico_enable_stdio_usb(qclk 1)
 | 
			
		||||
pico_enable_stdio_uart(qclk 1)
 | 
			
		||||
pico_add_extra_outputs(qclk)
 | 
			
		||||
target_link_libraries(qclk pico_stdlib)
 | 
			
		||||
							
								
								
									
										58
									
								
								mcu/flake.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								mcu/flake.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
{
 | 
			
		||||
  inputs = {
 | 
			
		||||
    flake-parts.url = "github:hercules-ci/flake-parts";
 | 
			
		||||
    devshell.url = "github:numtide/devshell";
 | 
			
		||||
    devshell.inputs.nixpkgs.follows = "nixpkgs";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  outputs = inputs@{ nixpkgs, flake-parts, devshell, ... }:
 | 
			
		||||
    flake-parts.lib.mkFlake { inherit inputs; } {
 | 
			
		||||
      imports = [
 | 
			
		||||
        inputs.flake-parts.flakeModules.easyOverlay
 | 
			
		||||
        devshell.flakeModule
 | 
			
		||||
      ];
 | 
			
		||||
      systems = [ "x86_64-linux" ];
 | 
			
		||||
      perSystem = { inputs', system, pkgs, config, ... }:
 | 
			
		||||
      let
 | 
			
		||||
      in
 | 
			
		||||
      {
 | 
			
		||||
        _module.args.pkgs = import nixpkgs {
 | 
			
		||||
          inherit system;
 | 
			
		||||
          overlays = [
 | 
			
		||||
            devshell.overlays.default
 | 
			
		||||
          ];
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        overlayAttrs = {
 | 
			
		||||
          # inherit (config.packages) quicfs;
 | 
			
		||||
        };
 | 
			
		||||
        packages = rec {
 | 
			
		||||
          # quicfs = (rustPkgs.workspace.quicfs { }).bin;
 | 
			
		||||
          # default = quicfs;
 | 
			
		||||
        };
 | 
			
		||||
        devshells.default = {
 | 
			
		||||
          packagesFrom = [
 | 
			
		||||
            # (rustPkgs.workspaceShell { })
 | 
			
		||||
          ];
 | 
			
		||||
          packages = with pkgs; [
 | 
			
		||||
            gnumake
 | 
			
		||||
            cmake
 | 
			
		||||
            # gcc-arm-embedded-13
 | 
			
		||||
            # coreboot-toolchain.arm
 | 
			
		||||
            python3
 | 
			
		||||
            picotool
 | 
			
		||||
            openocd
 | 
			
		||||
          ];
 | 
			
		||||
 | 
			
		||||
          env = [
 | 
			
		||||
            { name = "PICO_SDK_PATH"; value = "${pkgs.pico-sdk}/lib/pico-sdk"; }
 | 
			
		||||
            # { name = "CC"; value = "${pkgs.coreboot-toolchain.arm}/bin/arm-none-eabi-gcc"; }
 | 
			
		||||
            # { name = "CXX"; value = "${pkgs.coreboot-toolchain.arm}/bin/arm-none-eabi-g++"; }
 | 
			
		||||
            { name = "PICO_TOOLCHAIN_PATH"; value = "/tmp/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi"; }
 | 
			
		||||
            # { name = "CC"; value = "/tmp/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc"; }
 | 
			
		||||
            # { name = "CXX"; value = "/tmp/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-g++"; }
 | 
			
		||||
          ];
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										23
									
								
								mcu/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								mcu/main.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "pico/stdlib.h"
 | 
			
		||||
#include "hardware/gpio.h"
 | 
			
		||||
#include "pico/binary_info.h"
 | 
			
		||||
 | 
			
		||||
const uint LED_PIN = 25;
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
  bi_decl(bi_program_description("This is a test binary."));
 | 
			
		||||
  bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED"));
 | 
			
		||||
 | 
			
		||||
  stdio_init_all();
 | 
			
		||||
 | 
			
		||||
  gpio_init(LED_PIN);
 | 
			
		||||
  gpio_set_dir(LED_PIN, GPIO_OUT);
 | 
			
		||||
  while (1) {
 | 
			
		||||
    gpio_put(LED_PIN, 0);
 | 
			
		||||
    sleep_ms(250);
 | 
			
		||||
    gpio_put(LED_PIN, 1);
 | 
			
		||||
    puts("Hello World\n");
 | 
			
		||||
    sleep_ms(1000);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										73
									
								
								mcu/pico_sdk_import.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								mcu/pico_sdk_import.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
 | 
			
		||||
 | 
			
		||||
# This can be dropped into an external project to help locate this SDK
 | 
			
		||||
# It should be include()ed prior to project()
 | 
			
		||||
 | 
			
		||||
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
 | 
			
		||||
    set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
 | 
			
		||||
    message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
 | 
			
		||||
    set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
 | 
			
		||||
    message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
 | 
			
		||||
    set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
 | 
			
		||||
    message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
 | 
			
		||||
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
 | 
			
		||||
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
 | 
			
		||||
 | 
			
		||||
if (NOT PICO_SDK_PATH)
 | 
			
		||||
    if (PICO_SDK_FETCH_FROM_GIT)
 | 
			
		||||
        include(FetchContent)
 | 
			
		||||
        set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
 | 
			
		||||
        if (PICO_SDK_FETCH_FROM_GIT_PATH)
 | 
			
		||||
            get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
 | 
			
		||||
        endif ()
 | 
			
		||||
        # GIT_SUBMODULES_RECURSE was added in 3.17
 | 
			
		||||
        if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0")
 | 
			
		||||
            FetchContent_Declare(
 | 
			
		||||
                    pico_sdk
 | 
			
		||||
                    GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
 | 
			
		||||
                    GIT_TAG master
 | 
			
		||||
                    GIT_SUBMODULES_RECURSE FALSE
 | 
			
		||||
            )
 | 
			
		||||
        else ()
 | 
			
		||||
            FetchContent_Declare(
 | 
			
		||||
                    pico_sdk
 | 
			
		||||
                    GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
 | 
			
		||||
                    GIT_TAG master
 | 
			
		||||
            )
 | 
			
		||||
        endif ()
 | 
			
		||||
 | 
			
		||||
        if (NOT pico_sdk)
 | 
			
		||||
            message("Downloading Raspberry Pi Pico SDK")
 | 
			
		||||
            FetchContent_Populate(pico_sdk)
 | 
			
		||||
            set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
 | 
			
		||||
        endif ()
 | 
			
		||||
        set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
 | 
			
		||||
    else ()
 | 
			
		||||
        message(FATAL_ERROR
 | 
			
		||||
                "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
 | 
			
		||||
                )
 | 
			
		||||
    endif ()
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
 | 
			
		||||
if (NOT EXISTS ${PICO_SDK_PATH})
 | 
			
		||||
    message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
 | 
			
		||||
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
 | 
			
		||||
    message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
 | 
			
		||||
 | 
			
		||||
include(${PICO_SDK_INIT_CMAKE_FILE})
 | 
			
		||||
		Reference in New Issue
	
	Block a user