Skip to content

Instantly share code, notes, and snippets.

View wolfmanjm's full-sized avatar

Jim Morris wolfmanjm

View GitHub Profile
@wolfmanjm
wolfmanjm / KeyReasonsfortheFrequencyDifference.md
Last active December 29, 2025 11:10
Key Reasons for the Frequency Difference

Key Reasons for the Frequency Difference Silicon Revision (Die Revision): Earlier revisions of the STM32H7 series, specifically revision "Y" devices, had a maximum qualified frequency of 400 MHz. STMicroelectronics later introduced revision "V" (and subsequent ones, often associated with production codes like 9S or 9T, though the code itself isn't the direct limitation but rather indicates the chip version) that was officially rated and tested for 480 MHz operation. Voltage Scaling (VOS Modes): Reaching 480 MHz requires the lowest voltage scaling mode, VOS0 (or VOS1 in some older documentation that was later updated). The older revision "Y" chips did not have VOS0 mode available, limiting them to 400 MHz. Proper software configuration is required to set the chip to the necessary voltage level for the higher speed. Power Supply Configuration: The STM32H7 line can use either an internal Low-Drop-Out (LDO) regulator or an external Switched-Mode Power Supply (SMPS) for core voltage regulation. Some development bo

@wolfmanjm
wolfmanjm / neopixel.fs
Created July 12, 2025 21:40
neopixel.fs
\ uses 4 bytes at neopixel_address.. pin# r g b
\ this address is monitored and when it changes the rgb is set
#require gpio-pins.fs
\ byte 0 is r, 1 is g, 2 is b, 3 is pin#
0 variable neopixel-address
\ this is launched on core1
\ starts monitoring the address and does not return
@wolfmanjm
wolfmanjm / neopixel.fs
Created July 12, 2025 10:27
neopixel.fs
\ neopixel.fs traffic lights a neopixel on pin 16, done in assembly bit blitting the data
: neopixel
[
$7179 h, \ addi sp,sp,-48
$c006 h, \ sw ra,0(sp)
$c20e h, \ sw gp,4(sp)
$c412 h, \ sw tp,8(sp)
$c616 h, \ sw t0,12(sp)
$c81a h, \ sw t1,16(sp)
@wolfmanjm
wolfmanjm / multicore.s
Created June 19, 2025 18:02
multicore.s
# -----------------------------------------------------------------------------
Definition Flag_visible, "execute-coprocessor"
execute_coprocessor: # ( xt -- ) Entry point for the coprocessor trampoline
# -----------------------------------------------------------------------------
# Store the execution token into a global variable
li x14, trampolineaddr # Note we are using li here as we forcefully circumvent the linker facilities
sw x8, 0(x14)
drop
@wolfmanjm
wolfmanjm / multicore.s
Created June 18, 2025 22:19
multicore
# -----------------------------------------------------------------------------
# Initialize register file
# li x1, 0 # Return address register, holds link back and is also used to compose long calls with auipc and jalr
# laf x2, returnstackanfang # Set return stack pointer (sp)
# li x3, 0 # Loop index
# li x4, 0 # Loop limit
# li x5, 0 # Scratch register, needs to be saved.
# li x6, 0 # Scratch register, needs to be saved.
# li x7, 0 # Scratch register, needs to be saved.
@wolfmanjm
wolfmanjm / upload.py
Created May 30, 2025 09:56
upload for swd2
#! /usr/bin/python3
# this script will concatenate the file specified into the upload.fs
# it strips comments and handles #require
#
import argparse
import os
import re
import sys
File.foreach('RP2350.svd') do |line|
if line.include?('<bitRange>')
# Extract range from <bitRange>[31:0]</bitRange>
range_match = line.match(/\[(\d+):(\d+)\]/)
if range_match
hr = range_match[1].to_i
lr = range_match[2].to_i
puts "<bitOffset>#{lr}</bitOffset>"
puts "<bitWidth>#{(hr - lr) + 1}</bitWidth>"
end
@wolfmanjm
wolfmanjm / startup.s
Last active March 23, 2025 13:19
bare metal riscv on pico2
.section .text
.global _start
.equ SYSCTL_BASE, 0x40000000
.equ CLK_EN_REG, SYSCTL_BASE + 0x100 # Clock enable register
.equ PAD_ISO_REG, 0x40038000 + 0x40 # Pad isolation control register for GPIO15
.equ IOMUX_BASE, 0x40028000
.equ IOMUX_GPIO15, IOMUX_BASE + 0x7C # IOMUX register for GPIO15
@wolfmanjm
wolfmanjm / swd-readline.py
Last active March 12, 2025 20:16
swd2 frontend for line editing and history
#! /usr/bin/python -u
import subprocess
import selectors
import os
import time
import readline
import sys
import atexit
import threading
@wolfmanjm
wolfmanjm / feeders.ini
Created July 30, 2024 11:46
button box ini
[button box]
feeder0.pin = PE8 # button
feeder0.press = echo -1 M700N0 # command to send
feeder1.pin = PJ7 # button
feeder1.press = echo -1 M700N1 # command to send
feeder2.pin = PJ8 # button
feeder2.press = echo -1 M700N2 # command to send