42 Commits (9ccde9ff371b355394f65eacb6b51c5880768505)

Author SHA1 Message Date
Vesim 9ccde9ff37
Update to latest zig with modules (#102) 2 years ago
Marnix Klooster e1c1466d9e
Initial partial SPI support (#97)
* build.zig: Trivial rename around UART test

* mmio: Add writeRaw() to set a full register

* UART: Add TODO for auto baud rate detection

* STM32F30x Initial USART1 output/transmit support

All code assumes default chip clock configuration.
Code assumes STM32F303xB / STM32F3030xC.
Code supports only 8 data bits, 1 stop bit.

* stm32f3discovery @panic() to UART1

This is done by implementing `debugWrite()` for the board,
which only initializes UART1 if that was not yet done,
and flushes afterwards to make sure the host receives all.

* stm32f303: Support UART1 reader

This is done by implementing `rx()` and `canRead()`.

* stm32f303 UART1 correctly support 7 and 8 bits

This includes correctly masking the parity bit
on reads.

* stm32f3 UART1 support 0.5/1.5/2 stop bits

* stm32f303 UART1 simplify parity code

* stm32f303 I2C rough initial code

Allows only writing and reading single bytes.

* stm32f3 i2c: enable debug 'logging'

* Add a few comments

* I2C API changes, STM32F303 I2C multi-byte transfers

Now using controller/device terminology, instead of master/slave.

Now using 'transfer objects' to make STOPs and re-STARTs explicit,
and allow using Writer and Reader APIs.

Added 'register' abstraction.

STM32F303 I2C now supports this new API, and multi-byte transfers.

Now waiting for I2C_ISR.BUSY == 0, after setting I2C_CR2.STOP == 1.
Without this, the sequence write-stop-write caused an additional STOP
to be sent immediately the START and address of the second write.

* Make work with regz-generated registers.zig change

* Updated to match regz-generated update

* After #23 repair Reset on stm32, lpc1768

* Clean-up I2C `readRegisters()`.

* Refactor to separate read/write states

* On STM32F303, make second read call fail

Also doc comments to clarify the new API.

* STM32 I2C: Properly support multiple write calls

* I2C STM32: Fix release mode compile error

...on top of an earlier commit on this branch.

* I2C Add 'write register' shorthand functions

* Make sure vector_table is correctly exported

It needs to be a non-`comptime` `var` for `@export` to work properly.

The only 'documentation' for this behavior currently seems GitHub comment
https://github.com/ziglang/zig/issues/5157#issuecomment-618933196 .

This issue was introduced in 1c17304 for PR #27,
which broke at least ARM-based STM32F303.

* fix missing vector table on ARM

* Revert "Merge branch 'fix-vector_table-export' into marnix-master"

This reverts commit 8ea0a74e1031cd0b88abe0283f179f0cf20f450c, reversing
changes made to 355a3618080d28c5da6e044773e6449989355fe5.

* Temp commit for SPI

* Check new I2C target_speed config setting

* Corrected incorrect doc comment

* Initial SPI transfer support for STM32F303

* SPI device CS pin is now used

* Revert accidentally committed debug flag.

* SPI: Add shorthands for 'register-based' devices.

* Additional fix to remove PE3 pin dependency

* SPI: Renames, comments, extracted device-specific code

Specifically,
top-level `Spi` is now `SpiBus`;
and the internal API has an additional `switchToDevice()`,
and receives `DeviceConfig` in more places.

* SPI device: Add `transceive()` method.

---------

Co-authored-by: Matt Knight <mattnite@protonmail.com>
2 years ago
Aidan Oldershaw 1c3e04baa1
Use `root.std_options` to override log behaviour (#99)
ziglang/zig#14181 changed the interface for overriding the log function.
Previously, you would define a public `root.log` function. Now, you
define a `root.std_options` namespace that has a `logFn` decl.

Signed-off-by: Aidan Oldershaw <aidan.oldershaw@gmail.com>
2 years ago
Matt Knight 4f0d25220e
catchup to self hosted (#96) 2 years ago
Connor Rigby 680b6282f3
stdlib: allow app to override the zig os layer (#93) 2 years ago
Felix Queißner 31070c1530
Makes executable files never stripped, we want that sweet debug info. Makes empty.zig less empty, so the compiler finds the file. (#91)
Co-authored-by: Felix "xq" Queißner <xq@random-projects.net>
2 years ago
Felix Queißner 0d9721d907
Adds microzig.initializeSystemMemories (#87)
Co-authored-by: Felix "xq" Queißner <xq@random-projects.net>
2 years ago
Felix Queißner 15bc1fc06d
Much improves the panic function, now prints a stack trace more often. (#86)
Co-authored-by: Felix "xq" Queißner <xq@random-projects.net>
2 years ago
Matt Knight 681b3b0d7a
added param to panic function (#83) 2 years ago
Marnix Klooster e5b8d57c72
Stm32f303 target speed trivial check (#66)
* Check new I2C target_speed config setting

* Corrected incorrect doc comment
2 years ago
Matt Knight 6bc3fc094b
add hal or app level clock configuration (#62)
* add hal or app level clock configuration

* fix control flow and typo

* use hal.init(), thanks kuon for the improvement
2 years ago
Matt Knight 179047ab65
fix colliding ISRs by making sure they each get memoized (#60)
* fix colliding ISRs by making sure they each get memoized

* add change from regz codegen
2 years ago
Riccardo Binetti a400e36058
I2C improvements (#58)
* i2c: pass a config to init

For now, allow setting the i2c target speed

* i2c: allow selecting the scl/sda pins

Similar to the previous commit for uart, this allows specifying the pins for
microcontrollers that support multiple pins for a single i2c peripheral

* stm32f407: add support for i2c

Supports using all I2C peripherals with all their pins in standard mode (fast
mode support will be added in the future).
2 years ago
Riccardo Binetti e202698a00
pin: remove erroneous access to slice length (#56)
The slice itself has to be used instead
2 years ago
Riccardo Binetti 5cf1a4612d
uart: allow selecting the tx/rx pins (#54)
Some microcontrollers allow routing multiple pins to the same UART peripheral.
This commit allows selecting specific pins on these platforms.
2 years ago
Riccardo Binetti 7cfc924eed
pin: omit board/chip namespace when parsing and saving the pin name (#55)
board: and chip: can be prefixed to the pin to force using a pin defined in the
board or in the chip. Currently though, neither chips or boards are handling
this prefix.
Since this is just used to give priority when parsing the pin, this commit
removes the namespace from the spec passed to parsePin. This isolates the
namespace handling to the Pin type creation, without having to handle it in
chips and boards.
2 years ago
Riccardo Binetti 8720973005
Add support for multiple clock domains (#53)
While this does not automate clock configuration yet, at least it allows using
microzig with applications that configure the clock themselves and then declare
the speeds of the various domains.
Without this, all peripheral depending on different clock domanins (e.g. Uart or
I2C on STM32 devices) could only work with the reset frequency.
2 years ago
Matt Knight d253056c71
cortex-m0plus and fix for missing hal (#49) 2 years ago
Riccardo Binetti b9cd24ae96
Improve STM32F407 Uart and introduce GPIO Alternate Function (#44) 2 years ago
Felix Queißner f317ce0c9f
More improvements (#37)
* Makes AVR UART work.
* Some comment. This is definitly not padding.
* Exports panic, log and log_level from application.
* Implements generic quadrature decoder driver.
* Fixes `@export` bug in AVR interrupt logic. Now we get distinct interrupt vectors.

Co-authored-by: Felix "xq" Queißner <git@masterq32.de>
3 years ago
Marnix Klooster 04bf2c4d4a
Initial I2C support (#26)
* build.zig: Trivial rename around UART test

* mmio: Add writeRaw() to set a full register

* UART: Add TODO for auto baud rate detection

* STM32F30x Initial USART1 output/transmit support

All code assumes default chip clock configuration.
Code assumes STM32F303xB / STM32F3030xC.
Code supports only 8 data bits, 1 stop bit.

* stm32f3discovery @panic() to UART1

This is done by implementing `debugWrite()` for the board,
which only initializes UART1 if that was not yet done,
and flushes afterwards to make sure the host receives all.

* stm32f303: Support UART1 reader

This is done by implementing `rx()` and `canRead()`.

* stm32f303 UART1 correctly support 7 and 8 bits

This includes correctly masking the parity bit
on reads.

* stm32f3 UART1 support 0.5/1.5/2 stop bits

* stm32f303 UART1 simplify parity code

* stm32f303 I2C rough initial code

Allows only writing and reading single bytes.

* stm32f3 i2c: enable debug 'logging'

* Add a few comments

* I2C API changes, STM32F303 I2C multi-byte transfers

Now using controller/device terminology, instead of master/slave.

Now using 'transfer objects' to make STOPs and re-STARTs explicit,
and allow using Writer and Reader APIs.

Added 'register' abstraction.

STM32F303 I2C now supports this new API, and multi-byte transfers.

Now waiting for I2C_ISR.BUSY == 0, after setting I2C_CR2.STOP == 1.
Without this, the sequence write-stop-write caused an additional STOP
to be sent immediately the START and address of the second write.

* Make work with regz-generated registers.zig change

* Updated to match regz-generated update

* After #23 repair Reset on stm32, lpc1768

* Clean-up I2C `readRegisters()`.

* Refactor to separate read/write states

* On STM32F303, make second read call fail

Also doc comments to clarify the new API.

* STM32 I2C: Properly support multiple write calls

* I2C STM32: Fix release mode compile error

...on top of an earlier commit on this branch.

* I2C Add 'write register' shorthand functions
3 years ago
Matt Knight ba8feaed74
fix missing vector table on ARM (#34) 3 years ago
Felix Queißner 823ff6577f
Greatly simplifies the package logic by using a proxy-to-root package. (#28)
* Greatly simplifies the package logic by using a proxy-to-root package.

* Makes startup logic less obscure.

Co-authored-by: Felix "xq" Queißner <git@masterq32.de>
3 years ago
Felix Queißner 1c1730445c
Brings AVR up to date (blink builds and blinks again! (#27)
* Brings AVR up to date (blink builds and blinks again!

* Fixes vector tables and build.

Co-authored-by: Felix "xq" Queißner <git@masterq32.de>
3 years ago
Felix Queißner 5050ce5eb0
Diverse fixes (#25)
* Makes default panic uses logging facilities to print the panic message.

* Makes MMIO functions inline for better codegen

* Brings LPC1768 up to date.

Co-authored-by: Felix "xq" Queißner <git@masterq32.de>
3 years ago
Marnix Klooster 92a2922742
stm32f3discovery/stm32f303 Initial UART1 support, including @panic() (#20)
* build.zig: Trivial rename around UART test

* mmio: Add writeRaw() to set a full register

* UART: Add TODO for auto baud rate detection

* STM32F30x Initial USART1 output/transmit support

All code assumes default chip clock configuration.
Code assumes STM32F303xB / STM32F3030xC.
Code supports only 8 data bits, 1 stop bit.

* stm32f3discovery @panic() to UART1

This is done by implementing `debugWrite()` for the board,
which only initializes UART1 if that was not yet done,
and flushes afterwards to make sure the host receives all.

* stm32f303: Support UART1 reader

This is done by implementing `rx()` and `canRead()`.

* stm32f303 UART1 correctly support 7 and 8 bits

This includes correctly masking the parity bit
on reads.

* stm32f3 UART1 support 0.5/1.5/2 stop bits

* stm32f303 UART1 simplify parity code

* Make work with regz-generated registers.zig change

* After #23 repair Reset on stm32, lpc1768
3 years ago
Marnix Klooster d4120f9c99
After #23 repair Reset on stm32, lpc1768 (#24) 3 years ago
Matt Knight 74e22672d0
use register code generated by regz (#23) 3 years ago
Matt Knight 13f0a1e347
instantiate vector table in start.zig (#22) 3 years ago
Matt Knight 8a5ee67588
register arrays and clusters, nrf52 as well (#19)
* register arrays and clusters, nrf52 as well

* remove TODO comment
3 years ago
Matt Knight f46c2e4ea9
Microzig as pkg (#10)
* works as a package

* run zig fmt on all files
3 years ago
Matt Knight 5a1e72f380
Create LinkerscriptStep (#7)
* create linkerscript step

* catch up to master, do some cleanup

* remove references to micro_linker

* commas

* remove package

* use root path trick for cpus and chips

* remove duped file
3 years ago
Matthew Knight af7aa777f9
Freshen things up (#6)
* catch up to some of master's changes, getting prepped to anchor to 0.9.0

* found fix for lpc board
3 years ago
Vesim eedc689738 Move lpc1768 to new generated SVD 3 years ago
Felix (xq) Queißner 196c4c4d05 mbed LPC1768 only commit. This introduces a working UART abstraction for LPC1768, currently the uart-sync example has chip-related code in it. 3 years ago
Felix (xq) Queißner 294cfebf7a Makes UART compile for LPC1768. 3 years ago
Felix (xq) Queißner deb9c3fe03 Designs the basic uart frontend. 3 years ago
Felix (xq) Queißner f5bc3be1ae Introduces the first SVD generated binding for LPC1768. svd2zig contains a hack for missing register sizes. 3 years ago
Felix (xq) Queißner 26681f7b30 blinky works for lpc1768 3 years ago
Felix (xq) Queißner 6cdf641f32 Continues blinky setup. 3 years ago
Felix (xq) Queißner e68a282981 Implements (untested) startup for AVR and LPC1768. 3 years ago
Felix (xq) Queißner bbfdb421d8 File structure, draft 1 3 years ago