analogdevicesinc / msdk

Software Development Kit for Analog Device's MAX-series microcontrollers
Apache License 2.0
60 stars 75 forks source link

feat(PeriphDrivers): Add MAX32657 I3C driver #1026

Open ttmut opened 1 month ago

ttmut commented 1 month ago

Description

Add I3C driver for MAX32657. Basic controller and target APIs are provided.

Note: Will be tested when the test environment is ready.

Checklist Before Requesting Review

sihyung-maxim commented 1 month ago

Please refer to the feat/ME30 branch to keep in sync with all design and user guide changes. All internal teams requiring the bare metal SDK are referencing this branch.

The i3c_regs.h file is scrubbed for the user guide and synced with design's finalization of the IP configuration.

Also, please note that the I3C source drivers will require hardware revision files for easier portability across parts. That means, there will at least be an i3c_me30.c, i3c_reva.c, i3c_reva.h, and i3c_reva_regs.h files.

The i3c_me30.c level only contains code specific to the ME30 (such as pin configuration, enabling I3C peripheral clock, and any peripheral API setup), and it generally does not contain any direct register access to the I3C IP.

The i3c_reva* files contain the pure driver implementation of the IP at the register level. This file contains the functions that the i3c_me30.c file will call. The i3c_reva_regs.h file is the universal, superset register file that i3c_reva.* uses. The i3c_regs.h file contains the register set specific to an MCU, and design could vary the IP configuration/register set depending on customer needs for future MCUs reusing the same IP, so having a "universal" register file prevents build errors resulting from feature differences.

You can reference our other peripheral drivers to see how this is all set up. Let me know if you have any questions.

ttmut commented 1 month ago

I missed the latest register updates so put my own for the work in progress. I will look into adapting into feat/ME30 branch. Thanks for the response.