-
Notifications
You must be signed in to change notification settings - Fork 7.8k
Microchip sama7g5 tc driver #93401
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Microchip sama7g5 tc driver #93401
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds Timer Counter (TC) driver support for the Microchip SAMA7G5 SoC. The implementation provides a counter driver with alarm and top value functionality for embedded timer applications.
Key changes include:
- New TC counter driver implementation with alarm channels and top value support
- Device tree bindings and hardware definitions for TC0 and TC1 timer blocks
- PMC clock configuration for TC channels in early SoC initialization
Reviewed Changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.
Show a summary per file
File | Description |
---|---|
drivers/counter/counter_mchp_sam_tc.c | Complete TC driver implementation with counter, alarm, and top value APIs |
dts/bindings/counter/microchip,sam-tc.yaml | Device tree binding specification for TC hardware configuration |
dts/arm/microchip/sam/sama7g5.dtsi | Hardware definitions for TC0/TC1 timer blocks with 6 channels total |
soc/microchip/sam/sama7g5/soc.c | MMU regions and PMC clock initialization for TC peripherals |
drivers/counter/Kconfig.mchp_sam_tc | Kconfig option for enabling the TC driver |
drivers/counter/Kconfig | Integration of TC driver Kconfig |
drivers/counter/CMakeLists.txt | Build system integration for TC driver |
samples/drivers/counter/alarm/src/main.c | Sample application support for TC counter |
boards/microchip/sam/sama7g54_ek/sama7g54_ek.dts | Board-specific TC channel enablement and clock configuration |
USEC_PER_SEC, | ||
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 8, | ||
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 32, | ||
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 128, | ||
DT_PROP(DT_PATH(clocks, slow_xtal), clock_frequency), | ||
USEC_PER_SEC, | ||
USEC_PER_SEC, | ||
USEC_PER_SEC, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The sam_tc_input_freq_table array contains hardcoded frequency values that may not be accurate for all configurations. Consider making this configurable or deriving values from device tree properties to improve maintainability across different board configurations.
USEC_PER_SEC, | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 8, | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 32, | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 128, | |
DT_PROP(DT_PATH(clocks, slow_xtal), clock_frequency), | |
USEC_PER_SEC, | |
USEC_PER_SEC, | |
USEC_PER_SEC, | |
DT_PROP(DT_PATH(clocks, main_clk), clock_frequency), /* Main clock frequency */ | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 8, /* MCK1 divided by 8 */ | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 32, /* MCK1 divided by 32 */ | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 128, /* MCK1 divided by 128 */ | |
DT_PROP(DT_PATH(clocks, slow_xtal), clock_frequency), /* Slow crystal frequency */ | |
DT_PROP(DT_PATH(clocks, main_clk), clock_frequency), /* Main clock frequency (fallback) */ | |
DT_PROP(DT_PATH(clocks, main_clk), clock_frequency), /* Main clock frequency (fallback) */ | |
DT_PROP(DT_PATH(clocks, main_clk), clock_frequency), /* Main clock frequency (fallback) */ |
Copilot uses AI. Check for mistakes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remember that mck1
must be fixed at compile time and can not change during runtime.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Many thanks for review.
Got it, and codes has been updated with the Copilot's comments.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Following @TonyHan11 suggestions, all hard-coded clock frequencies has been removed from the driver file.
Here we use clock_control_get_rate() to get the frequency dynamically.
soc/microchip/sam/sama7g5/soc.c
Outdated
/* Enable Generic clock for TC0 channels, frequency is 66.667MHz */ | ||
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | ||
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | ||
PMC_PCR_PID(ID_TC0_CHANNEL0); | ||
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | ||
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | ||
PMC_PCR_PID(ID_TC0_CHANNEL1); | ||
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | ||
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | ||
PMC_PCR_PID(ID_TC0_CHANNEL2); | ||
|
||
/* Enable Generic clock for TC1 channels, frequency is 66.667MHz */ | ||
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | ||
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | ||
PMC_PCR_PID(ID_TC1_CHANNEL0); | ||
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | ||
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | ||
PMC_PCR_PID(ID_TC1_CHANNEL1); | ||
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | ||
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | ||
PMC_PCR_PID(ID_TC1_CHANNEL2); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The clock configuration code for TC channels contains significant duplication. Consider extracting this into a helper function or loop to reduce code repetition and improve maintainability.
/* Enable Generic clock for TC0 channels, frequency is 66.667MHz */ | |
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | |
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | |
PMC_PCR_PID(ID_TC0_CHANNEL0); | |
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | |
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | |
PMC_PCR_PID(ID_TC0_CHANNEL1); | |
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | |
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | |
PMC_PCR_PID(ID_TC0_CHANNEL2); | |
/* Enable Generic clock for TC1 channels, frequency is 66.667MHz */ | |
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | |
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | |
PMC_PCR_PID(ID_TC1_CHANNEL0); | |
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | |
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | |
PMC_PCR_PID(ID_TC1_CHANNEL1); | |
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | |
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | |
PMC_PCR_PID(ID_TC1_CHANNEL2); | |
/* Helper function to configure TC channels */ | |
static void configure_tc_channel(uint32_t channel_id) { | |
PMC_REGS->PMC_PCR = PMC_PCR_CMD(1) | PMC_PCR_GCLKEN(1) | PMC_PCR_EN(1) | | |
PMC_PCR_GCLKDIV(6 - 1) | PMC_PCR_GCLKCSS_SYSPLL | | |
PMC_PCR_PID(channel_id); | |
} | |
/* Enable Generic clock for TC0 channels, frequency is 66.667MHz */ | |
configure_tc_channel(ID_TC0_CHANNEL0); | |
configure_tc_channel(ID_TC0_CHANNEL1); | |
configure_tc_channel(ID_TC0_CHANNEL2); | |
/* Enable Generic clock for TC1 channels, frequency is 66.667MHz */ | |
configure_tc_channel(ID_TC1_CHANNEL0); | |
configure_tc_channel(ID_TC1_CHANNEL1); | |
configure_tc_channel(ID_TC1_CHANNEL2); |
Copilot uses AI. Check for mistakes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good advice, and codes has been updated.
|
||
config->irq_config_func(dev); | ||
|
||
LOG_INF("Device %s initialized, reg:0x%08x cs:%d freq:%u channels:%u top_alarm:%u\n\r", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The log message contains a Windows-style line ending (\n\r). In embedded systems, typically only \n is used. Consider removing the \r for consistency with standard practices.
LOG_INF("Device %s initialized, reg:0x%08x cs:%d freq:%u channels:%u top_alarm:%u\n\r", | |
LOG_INF("Device %s initialized, reg:0x%08x cs:%d freq:%u channels:%u top_alarm:%u\n", |
Copilot uses AI. Check for mistakes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No need for any line ending, actually
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All LOG_foo already add new line. I recommend you drop all \n
and \r
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Many thanks for review.
Got it, codes has been updated.
USEC_PER_SEC, | ||
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 8, | ||
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 32, | ||
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 128, | ||
DT_PROP(DT_PATH(clocks, slow_xtal), clock_frequency), | ||
USEC_PER_SEC, | ||
USEC_PER_SEC, | ||
USEC_PER_SEC, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
USEC_PER_SEC (1000000) appears to be used as a placeholder frequency value in multiple array positions. This magic number usage makes the code unclear. Consider using a named constant or documenting why this specific value is used for these clock selections.
USEC_PER_SEC, | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 8, | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 32, | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 128, | |
DT_PROP(DT_PATH(clocks, slow_xtal), clock_frequency), | |
USEC_PER_SEC, | |
USEC_PER_SEC, | |
USEC_PER_SEC, | |
TC_INPUT_FREQ_PLACEHOLDER, | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 8, | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 32, | |
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 128, | |
DT_PROP(DT_PATH(clocks, slow_xtal), clock_frequency), | |
TC_INPUT_FREQ_PLACEHOLDER, | |
TC_INPUT_FREQ_PLACEHOLDER, | |
TC_INPUT_FREQ_PLACEHOLDER, |
Copilot uses AI. Check for mistakes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Codes has been updated, and remove these unused array member.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Codes has been updated, and remove all hard-coded clock frequencies.
@@ -29,6 +29,10 @@ | |||
slow_xtal { | |||
clock-frequency = <32768>; | |||
}; | |||
|
|||
mck1 { | |||
clock-frequency = <200000000>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
DT_FREQ_M(200)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Codes has been updated.
dts/arm/microchip/sam/sama7g5.dtsi
Outdated
interrupt-parent = <&gic>; | ||
interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>; | ||
clocks = <&pmc PMC_TYPE_PERIPHERAL 88>; | ||
assigned-clock-rates = <66666666>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The assigned-clock-rates
has a default value, no need to add then here. Same with clock-selection
. If intention is avoid user iteration with this properties this could cause misleading configuration. You can drop the default and use required: true
to force always a definition.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Codes has been updated in dtsi and dts file, delete assignment operations for "assigned-clock-rates" and "clock-selection".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The "assigned-clock-rates" has been removed, and we will get the clock rates from clock_control_get_rate().
|
||
config->irq_config_func(dev); | ||
|
||
LOG_INF("Device %s initialized, reg:0x%08x cs:%d freq:%u channels:%u top_alarm:%u\n\r", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All LOG_foo already add new line. I recommend you drop all \n
and \r
.
USEC_PER_SEC, | ||
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 8, | ||
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 32, | ||
DT_PROP(DT_PATH(clocks, mck1), clock_frequency) / 128, | ||
DT_PROP(DT_PATH(clocks, slow_xtal), clock_frequency), | ||
USEC_PER_SEC, | ||
USEC_PER_SEC, | ||
USEC_PER_SEC, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remember that mck1
must be fixed at compile time and can not change during runtime.
|
||
assigned-clock-rates: | ||
type: int | ||
default: 66666667 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Default value needs to be explained in the description
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added description for this default value in yaml file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The "assigned-clock-rates" has been removed, and we will get the clock rates from clock_control_get_rate().
|
||
config->irq_config_func(dev); | ||
|
||
LOG_INF("Device %s initialized, reg:0x%08x cs:%d freq:%u channels:%u top_alarm:%u\n\r", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No need for any line ending, actually
c7138f0
to
87b6149
Compare
As the TC (Timer Counter) on sama7g54 is quite similar to the one on samx7x, it's better to reuse the driver already existed (drivers/counter/counter_sam_tc.c). |
}; | ||
|
||
tc0_ch1: timer@e2814040 { | ||
compatible = "microchip,sam-tc"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be more reasonable for registering tc0 and tc1 as the Zephyr devices than registering every channels of tc0/1.
The existing driver registers tc0/1/2 as the Zephyr devices and only use the channel 0 for acting as the counter.
It is possible to upgrade the structure to the following:
tc0: timer@e2814000 {
compatible = "microchip,sam-tc";
...
tc0_ch0: tc0_ch0@0 {
compatible = "microchip,sam-tc-channel";
...
};
tc0_ch1: tc0_ch1@40 {
compatible = "microchip,sam-tc-channel";
...
};
tc0_ch2: tc0_ch2@80 {
compatible = "microchip,sam-tc-channel";
...
};
};
tc1: timer@e0800000 {
compatible = "microchip,sam-tc";
...
};
The driver code might be like the following:
struct sam_tc_config {
...
struct sam_tc_channel_data *const *data;
};
/* array for channels */ \
static struct sam_tc_channel_data *const \
sam_tc_##n##_channel_datas \
[DT_INST_FOREACH_CHILD_SEP_VARGS( \
n, DT_NODE_HAS_COMPAT, (+), microchip_sam_tc_channel)] = { \
DT_INST_FOREACH_CHILD_STATUS_OKAY(n, ...) \
}; \
static const struct sam_tc_config sam_tc_##n##_config = { \
... \
.data = sam_tc_##n##_channel_datas, \
}; \
static int sam_tc_start(const struct device *dev)
{
const struct sam_tc_config *config = dev->config;
/* get channel id according to dev->data */
int channel_id = ((struct sam_tc_channel_data *const *)dev->data) - config->data;
/* start tc channel x */
...
}
And operating a dedicated channel in the tc0/1 devices could be:
dev->data = ...
counter_start(dev);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The current implementation from Zephyr may have problems with Alarms. This is an open issue #85018 that has some information. It will be nice if the driver is planned to address the issue and have full capability of usage.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A little updates for the end of above comment on operating a dedicated channel: defined every channel is as a device too and it's no need to change dev->data
before calling counter_start(dev);
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
After discuss with Tony, we will try to register mchp_sam_tc device follow this way in the next stage.
87b6149
to
640f08e
Compare
After discussed with Tony, we will not maintain / reuse the SAM MCU TC driver, SAM MPU has it's own TC driver (mchp_sam_tc). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe look inside tests, like https://github.com/zephyrproject-rtos/zephyr/tree/main/tests/drivers/counter/counter_basic_api and make sure they will run.
BTW, you can add an special entry here if needed
drivers/counter/CMakeLists.txt
Outdated
@@ -26,6 +26,7 @@ zephyr_library_sources_ifdef(CONFIG_COUNTER_RTC_STM32 counter_ll_stm32 | |||
zephyr_library_sources_ifdef(CONFIG_COUNTER_TIMER_STM32 counter_ll_stm32_timer.c) | |||
zephyr_library_sources_ifdef(CONFIG_COUNTER_SAM_TC counter_sam_tc.c) | |||
zephyr_library_sources_ifdef(CONFIG_COUNTER_SAM0_TC32 counter_sam0_tc32.c) | |||
zephyr_library_sources_ifdef(CONFIG_COUNTER_MCHP_SAM_TC counter_mchp_sam_tc.c) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This commit should be after the dtsi inside dts folder.
Try to keep in mind that first came the dependency and then you can use it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Understand, add a new commit for updating CMakelists,txt.
drivers/counter/Kconfig
Outdated
@@ -124,4 +124,6 @@ source "drivers/counter/Kconfig.cc23x0_lgpt" | |||
|
|||
source "drivers/counter/Kconfig.mspm0" | |||
|
|||
source "drivers/counter/Kconfig.mchp_sam_tc" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sort by name
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated.
&tc0_ch0 { | ||
status = "okay"; | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you want to have all the TC enables in the board all the time ?
BTW, what are the speeds ?
Maybe you could keep board clean and setup overlays when appropriated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it's not necessary to enable all TCs in the dts.
Just keep one enabled in the dts.
BTW, what are the speeds ?
--> by default GCLK will be selected as the clock source of TC (clock-selection = 0), and the frequency of source clock will be get via sam_tc_get_freq() function call dynamically, normally it's 200MHz / 3 = 66.667MHz.
Add driver for sama7g5 Timer Counter (TC) Signed-off-by: CHEN Xing <[email protected]>
Add tc0, tc1 devices to sama7g5 Signed-off-by: CHEN Xing <[email protected]>
Add support for mchp_sam_tc driver in counter Signed-off-by: CHEN Xing <[email protected]>
Add tc0, tc1 devices for sama7g5-ek Signed-off-by: CHEN Xing <[email protected]>
Add tc0_ch0 device for sama7g5 in alarm sample Signed-off-by: CHEN Xing <[email protected]>
Enable test support for microchip,sam-tc Signed-off-by: CHEN Xing <[email protected]>
640f08e
to
1f66e3a
Compare
|
Thanks for this suggestion, I have enable microchip,sam-tc support in counter_basic_api test. |
|
@MCHP-MPU-Solutions-SHA Please ensure that the file namings are as per the microchip's RFC here : RFC |
Add tc driver and device for Microchip sama7g5