瑞萨RH850使用记录(二):时钟、FLASH(开关中断)、RAM、GPIO、AD

一、概述

瑞萨RH850使用记录(一)
瑞萨RH850使用记录(二)
瑞萨RH850使用记录(三)
瑞萨RH850使用记录(四)
瑞萨RH850使用记录(五)

二、时钟

在《RH850/F1K Group User’s Manual: Hardware.pdf》的12章节中,介绍时钟特性:
在这里插入图片描述
五个片上时钟振荡器
–振荡频率为16、20和24 MHz的主振荡器(MainOSC)
–振荡频率为32.768 kHz*1的子振荡器(SubOSC)
–标称频率为8 MHz(典型值)的高速内部振荡器(HS IntOSC)
–标称频率为240 kHz(典型值)的低速内部振荡器(LS IntOSC)
–锁相环

CPU时钟

在12.2.2节中
CPUCLK来源于PLL时钟CPLLOUT、MainOSC和EMCLK
在这里插入图片描述
其中应急时钟EMCLK由 HS IntOSC提供,若 HS IntOSC未激活,则由 LS IntOSC提供。

在这里插入图片描述

锁相环配置

实际应用中,通常是外部晶振,倍频分频后,PLL提供系统时钟。

12.3.5节中,
在这里插入图片描述

PLL有MainOSC or HS IntOSC两个输入

PLL有两个时钟输出:“CPLLOUT”和“PPLLOUT”。CPLLOUT是CPU子系统的时钟源之一,PPLLOUT是外围模块的时钟来源之一。

在12.3.5.1节中,给出计算
在这里插入图片描述
VCOOUT确定后,CPU时钟可配置为1/4、1/5、1/6
外设时钟固定为1/6
在这里插入图片描述

在12.4.2.15节中,寄存器后面有附表
在这里插入图片描述
CPU时钟最高120M,外设时钟最高80M
16M晶振作为PLL时钟输入,经过二分频变为8,再60倍频,变为480M。
实际配置:
在这里插入图片描述

上面只是配置了锁相环的输出,还需要设置CPU时钟:
在这里插入图片描述

疑问

外部晶振必须是16/20/24M????
始终开启区域和隔离区域
时钟频率的计算:关于RH850系统时钟初始化的分析解读

三、FLASH

在这里插入图片描述

12、RH850 F1 FLASH存储器介绍

瑞萨RH850 FCL、FDL和EEL库的配置和使用

瑞萨车规级MCU操作Flash没有直接提供寄存器接口,需要安装官方提供的库文件,有三种形式:
FCL:程序存储区仿真库,可使用此库访问程序存储区,一般用于程序自升级操作;
FDL:数据存储区仿真库,可通过此库操作数据区,需要人为定义地址和数据长度,占用Flash空间比EEL略少,但占用RAM大;
EEL:EEPROM仿真库,可使用此库来访问数据内存区,该方法类似于访问外部EEPROM,使用此库时,不用管理对数据区闪存写和擦除操作,其占用Flash容量大,需配合FDL库来操作。

1. code flash

在这里插入图片描述

FCL

根据连接进入官网,添加链接描述

在这里插入图片描述
下载解压后只有一个RENESAS_FCL_RH850_T01_V2.13.exe。安装后
在这里插入图片描述

开关中断

#define __disable_irq()     DI()
#define __enable_irq()      EI()

参考链接

基于IAR for RH850的瑞萨RH850 FCL库用法介绍
【经验】使用CS+对RH850F1KM-S1的FCL的配置使用以及相关的经验技巧(一)
【经验】使用CS+对瑞萨RH850F1KM-S1的FCL的配置使用及相关经验技巧(二)
RH850 FCL的使用

2. data Flash

在这里插入图片描述
64K

FDL

添加链接描述
在这里插入图片描述

四、RAM

在《RH850/F1K Group User’s Manual: Hardware.pdf》的38章节中,介绍RAM特性:

RH850/F1K包括以下RAM:
–本地RAM
本地RAM可以高速访问。在DeepSTOP模式下,本地RAM中的值不会保留。
–保留RAM
保留RAM是本地RAM的一部分,也可以高速访问。保留RAM中的值在DeepSTOP模式下保留。
此外,除了写访问之外,即使电源电压(REGVCC)降至POC电压以下,只要电压不降至RAM保持电压(VVLVI)以下,保持RAM中的数据就会被保留。

在这里插入图片描述
1.是否需要选择用哪个RAM

不管LRAM还是CRAM,在使用前都需要进行初始化,如果使用没有初始化的RAM空间,读数据时可能产生ECC校验错误。
RAM初始化一般在系统启动阶段(跳到main函数之前)通过汇编代码完成。 软件复位(非冷启动,Power On
Reset)系统重启后,没有初始化的RAM中数据还保存上一次的值。
【RH850U2A芯片】RAM and Flash介绍

Self 和 CPU

✅ 一句话结论
Self:当前 CPU “自己访问自己本地 RAM”的地址视图(最快)
CPU:通过系统总线访问该 RAM 的地址视图(可被其他核/模块访问)
👉 本质是同一块 RAM,只是地址映射不同

🔍 详细解释

RH850(尤其 F1K)是支持多核/多总线访问架构的,所以:

1️⃣ Self(本地视图)

例如:

Local RAM (Self)
Retention RAM (Self)
含义:

👉 CPU 自己直接访问自己的 RAM

特点:

访问路径最短(本地)
速度最快
无总线竞争
通常用于:
栈(stack)
中断变量
高频访问数据
2️⃣ CPU(系统视图)

例如:

Local RAM (CPU)
Retention RAM (CPU)
含义:

👉 通过系统总线访问这块 RAM

特点:

可以被其他核 / DMA / 外设访问
走系统总线(有仲裁)
速度略慢
🧠 用一个比喻理解

你可以把 RAM 想成一间房间:

Self 地址 = 房间里的“内部通道”(你自己走)
CPU 地址 = 走走廊/大门(别人也能进来)

👉 房间还是同一间,但入口不同

🔥 为什么会有两套地址?

因为 RH850 支持:

多核(有的型号)
DMA / 外设访问 RAM
实时性要求高(要区分本地 vs 总线访问)

所以:

👉 同一块 RAM 会映射两套地址:

一套给“自己用”(Self)
一套给“系统用”(CPU)

备份RAM

  1. 修改section
    在这里插入图片描述

  2. 修改程序

    #pragma section r0_disp32 "set"
    unsigned char  my_buffer[100]; 
    #pragma section default
    

五、GPIO

《RH850_F1K Group User’s Manual_ Hardware.pdf》
GPIO资源如下:

在这里插入图片描述

普通IO

在这里插入图片描述
Output 1,初始化时直接拉高

在这里插入图片描述

中断

把P8_2管脚设置为中断,查看管脚:
在这里插入图片描述
不需要自己配置寄存器,选择复用功能。
在生成代码时,不需要在Port Function中去选择输入输出,只需要开启对应中断,选择管脚,设置触发和优先级
在这里插入图片描述

生成代码后,需要在主函数内开启中断:
R_INTP9_Start
在r_cg_intc_user.c中找到中断函数,添加需要进行的操作。

注意

1.不是每个IO都能配置中断,需要查看管脚定义确认。
2.RX/INTPx中断,如:
在这里插入图片描述
像这种RX管脚带INTP的,是指RX和INTP绑定了,应用场景如休眠前是RX功能,休眠后是INTP功能,注意,这种不能单独作为INTP使用,必须和RX绑定

复用功能的选择

《RH850_F1K Group User’s Manual_ Hardware.pdf》中可以快速查看管脚支持的复用功能:
在这里插入图片描述
到对应章节,查看
在这里插入图片描述
也可以查阅 《F1x_pinout_v0.30 (internal) - Small V1.3.xlsx》

复用功能由PFCAEn_m、PFCEn_m、PFCn_m、PMn_m四个寄存器共同决定:
在这里插入图片描述
CAN0TX四个寄存值分别为:0 0 1 1
CAN0RX四个寄存值分别为:0 0 1 0

以下是一段初始化程序:

    /* Set CAN0RX(P0_1) pin */
    PORT.PIBC0 &= _PORT_CLEAR_BIT1;     // 0: Input buffer disabled
    PORT.PBDC0 &= _PORT_CLEAR_BIT1;     // 0: Bidirectional mode disabled
    PORT.PM0 |= _PORT_SET_BIT1;         // d.限制复用选择input,即CAN0TX
    PORT.PMC0 &= _PORT_CLEAR_BIT1;
    PORT.PFC0 &= _PORT_CLEAR_BIT1;      // c.限制复用选择7
    PORT.PFCE0 |= _PORT_SET_BIT1;       // b.限制复用选择范围7-禁止
    PORT.PFCAE0 |= _PORT_SET_BIT1;      // a.限制复用选择范围5-禁止
    PORT.PMC0 |= _PORT_SET_BIT1;        // 选择为复用模式

    /* Set CAN0TX(P0_0) pin */
    PORT.PIBC0 &= _PORT_CLEAR_BIT0;
    PORT.PBDC0 &= _PORT_CLEAR_BIT0;
    PORT.PM0 |= _PORT_SET_BIT0;         
    PORT.PMC0 &= _PORT_CLEAR_BIT0;
    PORT.PFC0 |= _PORT_SET_BIT0;        // c.限制复用选择2
    PORT.PFCE0 &= _PORT_CLEAR_BIT0;     // b.限制复用选择范围1-2
    PORT.PFCAE0 &= _PORT_CLEAR_BIT0;    // a.限制复用选择范围1-4
    PORT.PMC0 |= _PORT_SET_BIT0;        // 选择为复用模式
    PORT.PM0 &= _PORT_CLEAR_BIT0;       // d.限制复用选择output,即CAN0TX

高阻

休眠时,为了更低功耗
理论上,除了唤醒要用的管脚,其他管脚全部配成Hiz
模式配置成dio,方向选择输入,不勾选input buffer就是高阻状态

PORT.PMC1 &= _PORT_CLEAR_BIT4;	处于端口模式还是处于复用模式
    PORT.PIBC1 &= _PORT_CLEAR_BIT4;   0: Input buffer disabled   1: Input buffer enabled
    PORT.PBDC1 &= _PORT_CLEAR_BIT4;   在输出模式下启用输入缓冲区
    PORT.PFC1 &= _PORT_CLEAR_BIT4;
    PORT.PFCE1 &= _PORT_CLEAR_BIT4;
    PORT.PFCAE1 &= _PORT_CLEAR_BIT4;
    PORT.PM1 |= _PORT_SET_BIT4;

按照手册描述,大部分普通引脚在复位后默认是高阻

六、AD

同样,不需要在Port Function中去选择输入输出,只需要在ADC中,开启
在这里插入图片描述
生成代码后在r_cg_adc.c中有以下接口:

R_ADC0_Create
R_ADC0_Halt
R_ADC0_ScanGroup1_Start
R_ADC0_ScanGroup1_OperationOn
R_ADC0_ScanGroup1_GetResult

需要首先开启AD转换
R_ADC0_ScanGroup1_OperationOn();
R_ADC0_ScanGroup1_Start();
然后通过 R_ADC0_ScanGroup1_GetResult 获取转换结果

ADC1

需要先设置时钟,之后才能开启:
在这里插入图片描述

注意

1.管脚不要悬空,电压会非常不准确
2.通道二者选其一。如选择10bit精度后,就无法选择不带s的那种接口了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值