HPM SDK
HPMicro Software Development Kit
hpm_mcan_soc.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_MCAN_SOC_H
9 #define HPM_MCAN_SOC_H
10 
11 #include <stdint.h>
12 #include "hpm_mcan_regs.h"
13 #include "hpm_soc.h"
14 
15 #define MCAN_SOC_TSU_SRC_TWO_STAGES (1U)
16 
17 #define HPM_MCAN_EXT_TBSEL_NUM (4U)
18 #define HPM_MCAN_TBSEL_BASE (0xF02FF000UL)
19 #define HPM_MCAN_TBSEL (*(volatile uint32_t *)HPM_MCAN_TBSEL_BASE)
20 #define HPM_MCAN_TBSEL_BITWDITH (6U)
21 #define HPM_MCAN_TBSEL_MASK ((1UL << HPM_MCAN_TBSEL_BITWDITH) - 1UL)
22 #define HPM_MCAN_TBSEL0_SHIFT (8U)
23 
27 #define MCAN_MSG_BUF_BASE (0xF0400000UL)
28 #define MCAN_MSG_BUF_SIZE_IN_WORDS (640U)
29 #define MCAN_IP_SLOT_SIZE (0x4000U)
30 
34 #define MCAN_TSU_EXT_TIMEBASE_SRC_MIN (0U)
35 #define MCAN_TSU_EXT_TIMEBASE_SRC_TBSEL_0 (MCAN_TSU_EXT_TIMEBASE_SRC_MIN)
36 #define MCAN_TSU_EXT_TIMEBASE_SRC_TBSEL_1 (1U)
37 #define MCAN_TSU_EXT_TIMEBASE_SRC_TBSEL_2 (2U)
38 #define MCAN_TSU_EXT_TIMEBASE_SRC_TBSEL_3 (3U)
39 #define MCAN_TSU_EXT_TIMEBASE_SRC_MAX (MCAN_TSU_EXT_TIMEBASE_SRC_TBSEL_3)
40 
44 #define MCAN_TSU_TBSEL_PTPC0 (0x20)
45 #define MCAN_TSU_TBSEL_MCAN0 (0x00)
46 #define MCAN_TSU_TBSEL_MCAN1 (0x01)
47 #define MCAN_TSU_TBSEL_MCAN2 (0x02)
48 #define MCAN_TSU_TBSEL_MCAN3 (0x03)
49 
50 
51 #ifdef __cpluspus
52 extern "C" {
53 #endif
54 
60 static inline void mcan_set_tsu_ext_timebase_src(MCAN_Type *ptr, uint8_t src)
61 {
62  if (src < HPM_MCAN_EXT_TBSEL_NUM) {
64  }
65 }
66 
74 static inline void mcan_set_tsu_tbsel_option(MCAN_Type *ptr, uint8_t ext_tbsel, uint8_t tbsel_option)
75 {
76  (void) ptr;
77  if (ext_tbsel < HPM_MCAN_EXT_TBSEL_NUM) {
78  uint32_t tbsel_shift = (ext_tbsel * HPM_MCAN_TBSEL_BITWDITH) + HPM_MCAN_TBSEL0_SHIFT;
79  uint32_t tbsel_mask = HPM_MCAN_TBSEL_MASK << tbsel_shift;
80  HPM_MCAN_TBSEL = (HPM_MCAN_TBSEL & ~tbsel_mask) | (((uint32_t)tbsel_option << tbsel_shift) & tbsel_mask);
81  }
82 }
83 
88 static inline void mcan_enable_standby_pin(MCAN_Type *ptr)
89 {
91 }
92 
97 static inline void mcan_disable_standby_pin(MCAN_Type *ptr)
98 {
100 }
101 
107 static inline uint32_t mcan_get_ram_base(MCAN_Type *ptr)
108 {
109  (void) ptr;
110  return MCAN_MSG_BUF_BASE;
111 }
112 
118 static inline uint32_t mcan_get_ram_offset(MCAN_Type *ptr)
119 {
120  uint32_t index = ((uint32_t) ptr - HPM_MCAN0_BASE) / MCAN_IP_SLOT_SIZE;
121 
122  return (index * MCAN_MSG_BUF_SIZE_IN_WORDS * sizeof(uint32_t));
123 }
124 
130 static inline uint32_t mcan_get_ram_size(MCAN_Type *ptr)
131 {
132  (void) ptr;
133  return (MCAN_MSG_BUF_SIZE_IN_WORDS * sizeof(uint32_t));
134 }
135 
136 #ifdef __cpluspus
137 }
138 #endif
139 
140 #endif /* HPM_MCAN_SOC_H */
#define HPM_MCAN_TBSEL_BITWDITH
Definition: hpm_mcan_soc.h:20
static uint32_t mcan_get_ram_offset(MCAN_Type *ptr)
Get the MCAN RAM offset in the dedicated/shared RAM for.
Definition: hpm_mcan_soc.h:118
static void mcan_set_tsu_tbsel_option(MCAN_Type *ptr, uint8_t ext_tbsel, uint8_t tbsel_option)
Set the Source for specified external timebase.
Definition: hpm_mcan_soc.h:74
#define HPM_MCAN_TBSEL_MASK
Definition: hpm_mcan_soc.h:21
#define HPM_MCAN_TBSEL
Definition: hpm_mcan_soc.h:19
#define MCAN_IP_SLOT_SIZE
Definition: hpm_mcan_soc.h:29
static void mcan_set_tsu_ext_timebase_src(MCAN_Type *ptr, uint8_t src)
Set External Timebase Source for MCAN TSU.
Definition: hpm_mcan_soc.h:60
static void mcan_disable_standby_pin(MCAN_Type *ptr)
Disable Standby pin for MCAN.
Definition: hpm_mcan_soc.h:97
#define MCAN_MSG_BUF_SIZE_IN_WORDS
Definition: hpm_mcan_soc.h:28
static void mcan_enable_standby_pin(MCAN_Type *ptr)
Enable Standby Pin for MCAN.
Definition: hpm_mcan_soc.h:88
#define HPM_MCAN_TBSEL0_SHIFT
Definition: hpm_mcan_soc.h:22
#define MCAN_MSG_BUF_BASE
MCAN MSG BUF base address (AHB_RAM)
Definition: hpm_mcan_soc.h:27
static uint32_t mcan_get_ram_base(MCAN_Type *ptr)
Get RAM base for MCAN.
Definition: hpm_mcan_soc.h:107
static uint32_t mcan_get_ram_size(MCAN_Type *ptr)
Get MCAN RAM size.
Definition: hpm_mcan_soc.h:130
#define HPM_MCAN_EXT_TBSEL_NUM
Definition: hpm_mcan_soc.h:17
#define HPM_MCAN0_BASE
Definition: hpm_soc.h:289
#define MCAN_GLB_CTL_M_CAN_STBY_MASK
Definition: hpm_mcan_regs.h:2875
#define MCAN_GLB_CTL_TSU_TBIN_SEL_SET(x)
Definition: hpm_mcan_regs.h:2909
#define MCAN_GLB_CTL_TSU_TBIN_SEL_MASK
Definition: hpm_mcan_regs.h:2907
Definition: hpm_mcan_regs.h:12
__RW uint32_t GLB_CTL
Definition: hpm_mcan_regs.h:74