hz是什么意思| 现在是吃什么水果的季节| 途明是什么档次的包| 里程是什么意思| 红细胞偏高是什么病| 十月7号是什么星座| 膝盖疼痛什么原因| 维生素b有什么用| 婚检都查什么| 甲状腺结节是什么| 寅木代表什么| 生粉是什么粉| 天五行属性是什么| 潮起潮落是什么意思| 木薯是什么| 最大的动物是什么| 已加一笔是什么字| 走马观花是什么意思| 梦遗太频繁是什么原因造成的| 脂蛋白a高有什么危害| 天时地利人和是什么意思| 刮宫和清宫有什么区别| 八婆是什么意思| ons是什么| 套马的汉子你威武雄壮是什么歌| 维生素B1有什么副作用| 7.6是什么星座| 12月20号是什么星座| 男字五行属什么| 头晕吃什么药| 子宫彩超能检查出什么| 中国是什么人种| 黑鱼是什么鱼| 肺纹理增强是什么意思| 颈椎增生吃什么药| 晚上睡不着白天睡不醒是什么原因| 小腿抽筋什么原因| 急性会厌炎吃什么药| 内膜厚是什么原因| 尾椎骨疼挂什么科| 区委书记属于什么级别| 米字五行属什么| 圈层是什么意思| 中年人喝什么奶粉好| 乳房有硬块是什么原因| 扁桃体发炎了吃什么药| 十二年是什么婚| 什么牌子助听器好| 零和博弈是什么意思| 男生下面叫什么| 什么叫阴吹| 吃什么东西去湿气| 离婚要带什么| spandex是什么面料| 天顶星座是什么意思| 属马的生什么属相的宝宝好| 脸肿是什么原因| 嘴角发麻是什么病前兆| 吃什么保养子宫和卵巢| 二垒是什么意思| 绿壳鸡蛋是什么鸡生的| 坐月子能吃什么零食| 辟谷是什么意思| 先知是什么意思| 甲状腺一般吃什么药| 太是什么意思| 扼腕是什么意思| 派出所长是什么级别| 做爱为什么那么舒服| 破伤风什么情况需要打| quake是什么意思| 副旅长是什么军衔| 胰岛素是干什么用的| 上半身皮肤痒什么原因| 真菌感染是什么意思| 画龙点睛是什么生肖| 胃体隆起是什么意思| 什么样的嘴巴| gift什么意思| 肚子左边是什么器官| 开髓引流是什么| 乳杆菌是什么| 什么叫介入治疗| 电轴右偏是什么意思| 水满则溢月盈则亏是什么意思| 月经来的少是什么原因| 运气是什么意思| 小儿疳积是什么症状| 獭尾肝是什么病| 三月二十三是什么星座| 茯苓什么人不能吃| e m s是什么快递| 血红蛋白偏低吃什么补| 十二朵玫瑰花代表什么意思| 为什么会打呼噜| 喝菊花水有什么好处| 脐橙是什么意思| 太极是什么| 12月7号是什么星座| 从胃到小腹连着疼是什么原因| 榴莲和什么水果相克| 生理期吃什么比较好| 双离合什么意思| 苹果醋有什么功效| 副鼻窦炎是什么意思| 生姜什么时候种植最合适| 家里养什么动物吃蟑螂| gv是什么意思| 欧米茄什么意思| 黄瓜和青瓜有什么区别| 梦见别人穿红衣服是什么意思| 唐氏综合征是什么原因造成的| 大脑供血不足用什么药| 10个油是什么意思| 蔻驰包属于什么档次| 内容是什么意思| 脚没有力气是什么原因| 晚上吃什么好| 三点水山今读什么| 脾不统血吃什么中成药| 小孩血糖高是什么原因引起的| 丝芙兰是什么品牌| 狗有眼屎是什么原因| 腿外侧是什么经络| 火龙果不能和什么一起吃| 什么是t| 2011年是什么生肖| add是什么意思| 骨盆前倾挂什么科| 尿血是什么问题| 十二指肠球部溃疡吃什么药| 电轴左偏是什么原因| 肺燥吃什么中成药| 头皮屑是什么| ect是什么意思| 岳飞属什么生肖| 陈醋和白醋有什么区别| 澳大利亚位于什么板块| 强颜欢笑是什么意思| 最近我和你都有一样的心情什么歌| 女人喜欢什么姿势| 血小板减少是什么原因| 果代表什么生肖| 承认是什么意思| 酸梅汤什么人不能喝| 贪嗔痴什么意思| 讲义气是什么意思| 臭屁多是什么原因| 两个月没来月经是什么原因| 基围虾不能和什么一起吃| 痞闷什么意思| 皮肤起小水泡很痒是什么原因| 喝水多尿少是什么原因| 爵是什么器皿| 甲状腺有什么功能| mers是什么病毒| 激光脱毛挂什么科| 肾挂什么科室| 久而久之下一句是什么| 林黛玉和贾宝玉是什么关系| 肠系膜多发淋巴结是什么意思| 走路不稳是什么原因| 24k黄金是什么意思| 吃饭出汗多是什么原因| 小儿消化不良吃什么药最好| 吃阿莫西林过敏有什么症状| 掉头发吃什么恢复最快| 病毒感染咳嗽吃什么药效果好| 肥肠炖什么好吃| 车水马龙是什么意思| 处大象是什么意思| 手臂内侧是什么经络| 刺梨根泡酒有什么功效| 桥本氏甲状腺炎是什么意思| 口舌生疮吃什么药最好| 台州为什么念第一声| 211大学是什么意思| 鼠妇是什么动物| 春宵一刻值千金是什么意思| 尿路结石有什么症状| 脚痛什么原因引起的| 积液是什么| 神经元是什么| 老年人全身无力是什么原因| 孕妇用什么驱蚊最安全| 处cp是什么意思| 减肥期间早餐应该吃什么| 掌中宝是什么部位| 阿米巴是什么意思| 杨柳木是什么生肖| 法脉是什么意思| 痰多是什么原因| 过会是什么意思| 坐月子吃什么水果好| 闽南语懒觉是什么意思| CRL是胎儿的什么意思| 有编制是什么意思| 心慌吃点什么药| 双肺上叶肺大泡是什么意思| mn是什么单位| 眼睛屈光不正是什么意思| 吃什么可以增加黄体酮| 保家仙是什么| bp是什么意思医学上面| 女性尿频吃什么药| 什么是尿频| 6月份是什么星座| 金风玉露是什么意思| 松绿色是什么颜色| 风油精有什么功效| 18k金是什么意思| 神经电生理检查是什么| ebohr手表什么牌子多少钱| 耳闷耳堵是什么原因引起的| 理工男是什么意思啊| 六月八号什么星座| 什么的藤| 毛鸡蛋是什么| 什么时候普及高中义务教育| 手术后吃什么水果| 一天两包烟会导致什么后果| 踏实是什么意思| 松鼠代表什么生肖| 社保卡属于什么银行| 老专家药膏有什么功效| 五更是什么生肖| 幼儿急疹为什么不能碰水| 肚脐眼发炎是什么原因| 单独是什么意思| 福禄寿是什么意思| 毛躁是什么意思| 壤土适合种植什么植物| 什么心什么肺| 苹果5s什么时候上市的| 丝瓜烧什么好吃| 于文华朱之文什么关系| 失恋什么意思| 为什么会中暑| 腰痛吃什么药| 什么叫负氧离子| 喉咙肿大是什么原因| 减肥晚上适合吃什么水果| 精满自溢是什么意思| 津字五行属什么| 变性乙醇是什么东西| 直博生是什么意思| 性早熟有什么危害| 泪点低什么意思| 螨虫用什么药可以杀死它| 挂妇科门诊都检查什么| 贲门不舒服有什么症状| 沙眼衣原体是什么| 喝水都会胖是什么原因| 泔水是什么意思| 降噪是什么意思| 梦到跟人吵架是什么意思| 十二指肠球部溃疡吃什么药| hcy是什么检查项目| 假性近视是什么意思| 什么食物含胶原蛋白最多| trp是什么氨基酸| 备孕需要检查什么| 七零年属什么生肖| aoa是什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 活动中心 ? 板卡试用 ? 【分享开发笔记,赚取电动螺丝刀】【S32K3】SystemInit 接口代码解析

共4条 1/1 1 跳转至

【分享开发笔记,赚取电动螺丝刀】【S32K3】SystemInit 接口代码解析 20

高工
2025-08-04 08:45:32     打赏
百度 要以海纳百川的胸怀吸引天下英才,充分激发人才创新创业活力,构筑国际尖端人才集聚高地。

【简介】

SystemInit  函数是ARM-CMSIS 规范中定义的一个接口函数,对该函数的功能描述如下

/**************************************************************************************************/
/** 
    \brief      Function to Initialize the system.
    \details    
    Initializes the microcontroller system. Typically, this function configures the 
                     oscillator (PLL) that is part of the microcontroller device. For systems 
                     with a variable clock speed, it updates the variable \ref SystemCoreClock.
                     SystemInit is called from the file <b>startup<i>_device</i></b>.
*/
void SystemInit (void);

以下为CMSIS 的组件框图

image.png

通常在启动文件中调用该接口初始化系统,在K3 的启动文件中会调用该接口初始化。

image.png

以下是K314 RTD驱动中的SystemInit 函数的实现

/*================================================================================================*/
/*
 * system initialization : system clock, interrupt router ...
 */


void SystemInit(void)
{
    uint32 i;
    uint32 coreMask = 0UL;
    uint8 coreId = OsIf_GetCoreID();
#ifdef MPU_ENABLE
    uint8 index = 0U;
    uint8 regionNum = 0U;
#endif /* MPU_ENABLE */    
    switch(coreId)
    {
        case CM7_0:
            coreMask = (1UL << MSCM_IRSPRC_M7_0_SHIFT);
            break;
        case CM7_1:
#ifdef S32K324
            coreMask = (1UL << MSCM_IRSPRC_M7_1_SHIFT);
#endif
            break;
        default:
            coreMask = 0UL;
            break;
    }

    /* Configure MSCM to enable/disable interrupts routing to Core processor */
    for (i = 0; i < MSCM_IRSPRC_COUNT; i++) 
    {
        IP_MSCM->IRSPRC[i] |= coreMask;
    }
/**************************************************************************/
                      /* FPU ENABLE*/
/**************************************************************************/
#ifdef ENABLE_FPU
    /* Enable CP10 and CP11 coprocessors */
    S32_SCB->CPACR |= (S32_SCB_CPACR_CPx(10U, 3U) | S32_SCB_CPACR_CPx(11U, 3U)); 

    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");
#endif /* ENABLE_FPU */
/**************************************************************************/
                      /* MPU ENABLE*/
/**************************************************************************/  
#ifdef MPU_ENABLE
/**************************************************************************/
                      /* DEFAULT MEMORY ENABLE*/
/**************************************************************************/
    /* Init MPU table for memory layout*/
    /* Cover all memory on device as background set all memory as strong-order and no access*/
    rbar[0]=0x00000000UL;
    rasr[0]=0x1004003FUL;
    
    /* ITCM for cortex M7 if no set it as zero */
    rbar[1]=(uint32)__INT_ITCM_START;
    rasr[1]=0x0104001FUL;
    /*Program flash which would extract from linker symbol*/
    rbar[2]=(uint32)__ROM_CODE_START;
    rasr[2]=0x060B002BUL; 

    /*Data flash which would extract from linker symbol*/
    rbar[3]=(uint32)__ROM_DATA_START;
    rasr[3]=0x16050023UL;  /* Device, Non-cache, Share */
    
    /*DTCM for cortex m7 if no set it as zero*/
    rbar[4]=(uint32)__INT_DTCM_START;
    rasr[4]=0x01040021UL; 
    
    /*Ram unified section  + stack*/
#if !defined(S32K344) && !defined(S32K324)
    rbar[5]=(uint32)__INT_SRAM_START;
    rasr[5]=((uint32)0x030B0001UL)|(((uint32)__RAM_CACHEABLE_SIZE - 1) << 1);   
#else
    rbar[5]=(uint32)__INT_SRAM_START;
    /*disable subregion 7-8*/
    rasr[5]=((uint32)0x030B0001UL)|(((uint32)__RAM_CACHEABLE_SIZE - 1) << 1)|(1<<15)|(1<<14); 
#endif
    
    /*Ram non-cache section plus int result which is using for test report*/
    rbar[6]=(uint32)__RAM_NO_CACHEABLE_START;
    rasr[6]= ((uint32)0x130C0001UL)|(((uint32)__RAM_NO_CACHEABLE_SIZE - 1) << 1);

    /*Ram shareable section*/
    rbar[7]=(uint32)__RAM_SHAREABLE_START;
    rasr[7]=((uint32)0x130C0001UL)|(((uint32)__RAM_SHAREABLE_SIZE - 1) << 1);
    /* Additional configuration for peripheral device*/
    
    /*AIPS_0*/
    rbar[8]=0x40000000UL;
    rasr[8]=0x13050029UL; 
    
    /*AIPS_1*/
    rbar[9]=0x40200000UL;
    rasr[9]=0x13050029UL; 
    
    /*AIPS_2*/
    rbar[10]=0x40400000UL;
    rasr[10]=0x13050029UL; 
    
    /*QSPI Rx*/
    rbar[11]=0x67000000UL;
    rasr[11]=0x13050013UL; 
    
    /*QSPI AHB*/
    rbar[12]=0x68000000UL;
    rasr[12]=0x030B0035UL;
    
    /*QSPI AHB*/
    rbar[13]=0xE0000000UL;
    rasr[13]=0x13040027UL;
    
    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");

    /*Checking if cache is enable before*/
    if (((((uint32)1U << (uint32)17U) & S32_SCB->CCR) != (uint32)0) || ((((uint32)1U << (uint32)16U) & S32_SCB->CCR) != (uint32)0))
    {
 /*synchronize cache before update mpu */
        sys_m7_cache_clean();
        sys_m7_cache_disable();
    }
    /* Set default memory regions */
    for (index = 0U; index < 15; index++)
    {
        if ((rasr[index]&(uint32)0x1) == (uint32)0x1)
        {
            S32_MPU->RNR  = regionNum;
            S32_MPU->RBAR = rbar[index];
            S32_MPU->RASR = rasr[index];
            regionNum++;
        }
    }

    /* Enable MPU */
    S32_MPU->CTRL |= S32_MPU_CTRL_ENABLE_MASK;

    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");

#endif /* MPU_ENABLE */
/**************************************************************************/
            /* ENABLE CACHE */
/**************************************************************************/
#if defined(D_CACHE_ENABLE) || defined(I_CACHE_ENABLE)
    sys_m7_cache_init();
#endif /*defined(D_CACHE_ENABLE) || defined(I_CACHE_ENABLE)*/    
}

【Step1】共享外设中断配置

该函数首先获取coreid 根据cioreid 来配置MSCM的IPSPRC 寄存器开启中断路由到core

image.png

对应寄存器描述如下,从描述看可已经配置中断是否路由到对应的core,实现中断的分发管理配置实现共享外设中断

image.png

image.png

image.png

【Step2 配置FPU】

配置core 内部的CP10 CP11 协处理器开启FPU 功能

image.png

CPACR(Coprocessor Access Control Register) 寄存器在ARMV7-M 手册中描述如下

image.png

【Step3 MPU 配置】

为了确保MPU配置被正确的写入,需要根据cache 的使能情况先关闭CACHE 在进行MPU 的配置,MPU 的配置在此贴中介绍

【S32K3】MPU 配置代码解析

【Step4 Cache 配置】

初始化好CACHE资源后,就需要根据CACHE 编译开快的配置来决定是否开启CACHE,CACHE 的配置代码的说明在在此帖中介绍

【S32K3】Cache 接口代码解析

从上述 S32K3 的SystemInit  函数配置流程看,S32K3 并没有严格的按照CMSIS的规范初始化时钟配置,时钟配置在进入Main 函数后在统一的进行时钟配置。


        


专家
2025-08-04 13:23:35     打赏
2楼

谢谢分享!


高工
2025-08-04 07:54:32     打赏
3楼

谢谢分享,有些arm 架构的 不开这个保护不让用


院士
2025-08-04 14:17:01     打赏
4楼

之前没有接触过汽车级MCU,也谈不上在其上面开发应用。

从楼主的代码看,汽车级MCU的开发还是要严格的多。


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
什么品种的狗最粘人 什么是宫寒 瓜婆娘四川话是什么意思 痛风在医院挂什么科 手胀是什么原因
中国铁塔是干什么的 芒果吃了有什么好处和坏处 腋毛什么时候开始生长 藏族信仰什么教 鱼肉百姓什么意思
明月照沟渠是什么意思 检查肠胃做什么检查 慢性浅表性胃炎吃什么药好 11年是什么婚 牙髓炎是什么原因引起的
听天的动物是什么生肖 笔名什么意思 上报是什么意思 media是什么意思 什么是基因检测
胃疼应该挂什么科hcv9jop5ns9r.cn 牛奶不能和什么东西一起吃hcv8jop2ns5r.cn 5月9号什么星座hcv9jop7ns0r.cn 海是什么颜色weuuu.com 田螺吃什么jasonfriends.com
梦见自己被绑架了是什么意思hcv8jop4ns5r.cn c1和c2有什么区别hcv9jop3ns1r.cn 泼皮是什么意思xinjiangjialails.com 目赤是什么意思hcv8jop5ns4r.cn 常放屁是什么原因bjhyzcsm.com
做b超前需要注意什么hcv8jop6ns7r.cn 属蛇男和什么属相最配huizhijixie.com 75年属什么的生肖hcv8jop6ns0r.cn 摘帽是什么意思hcv8jop0ns9r.cn 淋巴发炎挂什么科hcv9jop2ns6r.cn
安溪铁观音属于什么茶hcv7jop9ns9r.cn 雪人是什么生肖hcv8jop4ns6r.cn 东华帝君是什么神仙adwl56.com 农历3月3是什么节日hcv7jop9ns1r.cn 七七年属什么生肖gangsutong.com
百度