HPM SDK
HPMicro Software Development Kit
hpm_mcan_soc.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 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 (0xF0200000UL)
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 #define MCAN_TSU_TBSEL_MCAN4 (0x04)
50 #define MCAN_TSU_TBSEL_MCAN5 (0x05)
51 #define MCAN_TSU_TBSEL_MCAN6 (0x06)
52 #define MCAN_TSU_TBSEL_MCAN7 (0x07)
53 
54 
55 #ifdef __cpluspus
56 extern "C" {
57 #endif
58 
64 static inline void mcan_set_tsu_ext_timebase_src(MCAN_Type *ptr, uint8_t src)
65 {
66  if (src < HPM_MCAN_EXT_TBSEL_NUM) {
68  }
69 }
70 
78 static inline void mcan_set_tsu_tbsel_option(MCAN_Type *ptr, uint8_t ext_tbsel, uint8_t tbsel_option)
79 {
80  (void) ptr;
81  if (ext_tbsel < HPM_MCAN_EXT_TBSEL_NUM) {
82  uint32_t tbsel_shift = (ext_tbsel * HPM_MCAN_TBSEL_BITWDITH) + HPM_MCAN_TBSEL0_SHIFT;
83  uint32_t tbsel_mask = HPM_MCAN_TBSEL_MASK << tbsel_shift;
84  HPM_MCAN_TBSEL = (HPM_MCAN_TBSEL & ~tbsel_mask) | (((uint32_t)tbsel_option << tbsel_shift) & tbsel_mask);
85  }
86 }
87 
92 static inline void mcan_enable_standby_pin(MCAN_Type *ptr)
93 {
95 }
96 
101 static inline void mcan_disable_standby_pin(MCAN_Type *ptr)
102 {
104 }
105 
111 static inline uint32_t mcan_get_ram_base(MCAN_Type *ptr)
112 {
113  (void) ptr;
114  return MCAN_MSG_BUF_BASE;
115 }
116 
122 static inline uint32_t mcan_get_ram_offset(MCAN_Type *ptr)
123 {
124  uint32_t index = ((uint32_t) ptr - HPM_MCAN0_BASE) / MCAN_IP_SLOT_SIZE;
125 
126  return (index * MCAN_MSG_BUF_SIZE_IN_WORDS * sizeof(uint32_t));
127 }
128 
134 static inline uint32_t mcan_get_ram_size(MCAN_Type *ptr)
135 {
136  (void) ptr;
137  return (MCAN_MSG_BUF_SIZE_IN_WORDS * sizeof(uint32_t));
138 }
139 
140 #ifdef __cpluspus
141 }
142 #endif
143 
144 #endif /* HPM_MCAN_SOC_H */
#define HPM_MCAN0_BASE
Definition: hpm_soc.h:220
#define MCAN_GLB_CTL_M_CAN_STBY_MASK
Definition: hpm_mcan_regs.h:2874
#define MCAN_GLB_CTL_TSU_TBIN_SEL_SET(x)
Definition: hpm_mcan_regs.h:2908
#define MCAN_GLB_CTL_TSU_TBIN_SEL_MASK
Definition: hpm_mcan_regs.h:2906
#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:122
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:78
#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:64
static void mcan_disable_standby_pin(MCAN_Type *ptr)
Disable Standby pin for MCAN.
Definition: hpm_mcan_soc.h:101
#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:92
#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:111
static uint32_t mcan_get_ram_size(MCAN_Type *ptr)
Get MCAN RAM size.
Definition: hpm_mcan_soc.h:134
#define HPM_MCAN_EXT_TBSEL_NUM
Definition: hpm_mcan_soc.h:17
Definition: hpm_mcan_regs.h:12
__RW uint32_t GLB_CTL
Definition: hpm_mcan_regs.h:74