You can manually change the FlexRAM config (in the linker script) to assign some of the 512KB to OCRAM2, which exists in memory directly after regular OCRAM (DMAMEM)... effectively enlarging it.
Made an interesting discovery: it's possible to initialize the SDRAM even before any code gets executed, by filling out a DCD (Device Configuration Data) struct. The ROM processes it and takes care of programming all the SEMC registers when the...
Doesn't the LUT need to be unlocked to modify commands? Or is it just left unlocked forever after startup (which kind of defeats the purpose of it being lockable...)?
The FS class, designed as an interface to be implemented by a derived class, has no virtual destructor. If an address of a derived class object is cast down to FS* and deleted, the destructor of the derived object will not be called. This makes...
GCC has an annoying habit of throwing warnings about ABI changes, e.g. this simple code:
#include <vector>
std::vector<uint64_t> foo;
void setup() {
foo.push_back(42);
}
void loop() {}
will produce these warnings:
In file included from...
I'm not really sure why this is necessary? Both boards have B1_12 & B1_13 and they're not referred to by Teensy pin number (only their pin matrix code and FlexIO ID), so making them dependent on the platform doesn't make much sense to me...
I also tried getting the monitor's EDID info over DDC (which is just I2C), to auto-choose the best resolution... turns out VGA monitors have 5V pull-ups built-in meaning voltage shifters are needed, and mine didn't want to work properly at the...
I ended up just "brute forcing" the pin mux initializations using the IMXRT pin names, so it doesn't matter what their Teensy pin numbers are:
IOMUXC_SW_MUX_CTL_PAD_GPIO_B0_02 = 4; // FLEXIO2_D2 RED
IOMUXC_SW_MUX_CTL_PAD_GPIO_B0_01 = 4; //...
So it's returning a value when the "if" statement is true. But when it's false, all that code gets skipped and the function ends without returning anything. It needs to return something in both cases.
'byte RTC_WriteByte(int, byte)' means the function should be returning a byte value.
There is either no return statement before the end of the function, or there is only "return;" with no value, or the function definition should be changed to not...
Viewable with a third-party program... not exactly web-friendly.
Then something is wrong. Every Teensy 4.x ships with a card that labels VIN as "3.6 to 5.5 Volts". The main voltage regulator is probably underpowering the IMXRT, causing reverse...
My understanding is that it will use DMA by default as long as the source/destination buffers are suitably aligned, which I assume you've taken care of (since otherwise the speed would be reduced/cpu utilization would be increased). I think SdFat...
This sounds all sorts of wrong. VIN is meant to be 5V and it should be the only way the Teensy is powered - do not attempt to feed in 3.3v to the Teensy's 3.3v pins.
(The diagram you have attached is too blurry to be readable.)
That's a little bit concerning because I wonder how you are going to tell the sticks apart (e.g. which one to interpret as "left" and which one as "right") without relying on which ports they are connected to. The obvious way would be if they had...
I didn't realize this was a recent change to Teensy's code, I thought it was a change in compiler behavior (from upgrading gcc) that didn't get picked up until now. I guess reverting to char* would bring the warning back with LTO?
I had a quick look, I think I know what the cause is but I'm not sure of a few details.
If you look at the memory allocated immediately before the ClocklessController there should a 4-byte guard variable. Guards are generally used for local...
Incorrect data being written to PSRAM shouldn't be happening under any circumstances.
The USB Host controller has its own internal buffers and won't initiate read transactions from devices if they're full (due to not being able to flush to RAM...
What about the stack? I'm not familiar with the memory layout on Teensy 3.x so clutching at straws a bit, but consider:
This post says it is possible to call init() but then the call to addLeds never returns, presumably because the call to...
This has come up a few times recently with PlatformIO. It seems the toolchain they include (specifically the libstdc++ library) isn't built properly to work with Teensyduino overriding the default new/delete functions.
Edit: Actually, I remember...
I suspect this sustained speed may simply be too fast for the PSRAM chip to constantly maintain.
At the default clock speed of 88MHz, 30MB/s is the rough upper sustained limit for mixed reads and writes.
There are a couple of simple options for...
I would start by checking what other software is installed on the windows 11 machine - specifically things like virtualization software (e.g. vmware, hyper-v based products), third-party anti-virus or even wireshark, anything that can hook into...
What if you put that same code (to dump the vtable address and init function pointer) in the ClocklessController constructor? Since we've seen that constructor is being executed, and it's where the relevant vtable should be getting assigned to...
Given init() is a virtual function, maybe try printing its address to see where it's pointing (just before calling it) - may require a bit of gcc-specific hackery since taking the address of a virtual function isn't really defined behaviour...
Are you sure this is really done dynamically when multiple sticks are connected? It doesn't seem possible since a device shouldn't be able to know what other devices are connected to the host, especially so if they're connected to different root...
Regardless of fixing the crash in followup_Error() you're still going to be facing the problem that a transfer is failing/stalling when it shouldn't be, which will likely cause the controller to not be recognized. Given that it seems to operate...
PlayMode::myNoteOn is a member function so you can't use it as a callback like that... I'm surprised it even compiles without an error.
Edit: my mistake, didn't see that it was static... you've declared the synth object inside setup(), as soon...
I would strongly recommend reading 5 bytes at a time (one complete packet) rather than reading as much as possible and then parsing it in chunks of 5. Otherwise there's likely to be a split packet due to usb transfer boundaries that will throw...
Wouldn't that be too large for VIN though? The ATP schematic says "VIN Range 2.2-6.0V".
If you were using your own carrier board (with a different voltage reg.), you could just use different divider resistors.
What I'm wondering is why would Sparkfun connect the pin that way (on the micromod) in the first place though? Since it can't be used as a regular IO pin if it's hardwired to a constant voltage... nor can it be used in analog mode to monitor VIN...
Finally got around to sitting down and mapping out all the exposed pins properly and found something odd - there's a pin labelled BATT_VIN/22/A8. My first thought: "how can this pin be both BATT_VIN and an I/O pin?" The answer is it can't/isn't...
You don't need to refill all the registers at the same time. You could keep refilling only the "top" register after every two transfers which would hide any variable latencies.
That's really not a great photo but going by the red wire connected to both pin 18 on the ESP and pin 1 on the Teensy, you've connected Rx to Rx and Tx to Tx again. They have to be connected to their opposites.
attachInterruptVector() simply puts the address of the ISR into the vector table. That is literally the only way interrupts work; the exception handling code saves volatile registers and calls the ISR like a regular C function. The only...
Yeah, that sort of level shifter isn't really suited to this type of situation. They're really only good for open-drain operation (e.g. I2C), but especially in this case the lines on the TB6600 side aren't high impedance (they're connected to...