RH850 1372/1374 程序跑飞异常分析

前言

最近项目用瑞萨RH850系列的1372/1374开发,官方的MCAL做的不咋地就算了,FAE支持也很少。给的demo问题也很多。本文记录一下开发过程中的问题。

现象描述

MCAL配置完ADC1后,运行ADC1的采样程序就跑飞,不管是SW触发的Group还是HW触发的Group,采用的是Interrupt方式。实际在TargetMap中也加入了对应的中断函数。(demo中ADC1的中断没有map)

原因分析

程序版本回退到不触发ADC1采样时,可以正常运行。所以肯定跟ADC1的中断有关。查看EIIC寄存器的值为0x10AA,对应中断为INTADCF1|3,与我配置的中断一致。实际打断点测试中断没有进,所以在进中断之前就跑飞了。也不知道应该在哪里打断点了。

怀疑是中断没有使能,但在代码中没有看到使能中断的函数

查看初始化的代码,有一个数组,里面应该是地址,查看地址果然是中断控制器寄存器对应的地址。
如下所示:


uint32 RenICR_ADRR[] = {
  0xFFFFB040, 0xFFFFB042, 0xFFFFB044, 0xFFFFB046,
  0xFFFFB048, 0xFFFFB06A, 0xFFFFB06C, 0xFFFFB06E,
  0xFFFFB070, 0xFFFFB072, 0xFFFFB074, 0xFFFFB076,
  0xFFFFB078, 0xFFFFB100, 0xFFFFB102, 0xFFFFB104,
  0xFFFFB106, 0xFFFFB108, 0xFFFFB10A, 0xFFFFB10C,
  0xFFFFB11A, 0xFFFFB11C, 0xFFFFB11E, 0xFFFFB120,
  0xFFFFB122, 0xFFFFB124, 0xFFFFB126, 0xFFFFB128,
  0xFFFFB08A, 0xFFFFB08C, 0xFFFFB08E,
  0xFFFFB092, 0xFFFFB094, 0xFFFFB096, 0xFFFFB098,
  0xFFFFB09A, 0xFFFFB09C, 0xFFFFB09E, 0xFFFFB138,
  0xFFFFB13A, 0xFFFFB13C, 0xFFFFB13E, 0xFFFFB140,
  0xFFFFB142, 0xFFFFB144, 0xFFFFB146, 0xFFFFB148,
  0xFFFFB14A, 0xFFFFB090, 0xFFFFB0A0, 0xFFFFB0A2,
  0xFFFFB0A4, 0xFFFFB0A6, 0xFFFFB0A8, 0xFFFFB0AA,
  0xffffffff
};

实际操作如下:

void Reg_Init(void)
{
  uint16 *ptr;
  uint8 count;
  for (count = 0; RenICR_ADRR[count] != 0xffffffff;  count++)
  {
    ptr = (uint16 *)RenICR_ADRR[count];
    *ptr |= 0x47;
  }
}

之前一直没有注意这个代码是做什么的,只能说太low了,函数名也没有,备注也没有。不查手册根本不知道在干嘛

查看数组中的地址,果然没有ADC1的,所以ADC1的中断会异常。

对应的寄存器描述如下:


CTn:该位表示中断通道类型。这个位是只读的。

0:表示当前选择与边缘同步检测。

1:表示当前已选中高电平检测。

RFn:这是一个中断请求标志。

RFn位可以从程序中写入。将RFn位设置为1会产生一个EI级别的可屏蔽中断n (INTn),就像中断请求被确认时一样。

0:不发出中断请求(复位后的值)。

1:发出中断请求。

当CTn设置为0时,当中断请求被CPU内核确认时,该位自动清除。可通过软件进行设置和清除

当CTn设置为1时,该位不能通过软件设置或清除。当中断请求被CPU内核确认时,该参数不被清除。

MKn:这是中断请求屏蔽位。为1时屏蔽对应中断的请求。

TBn:这个位用来选择确定中断向量的方式。

0:直接跳转到由优先级确定的地址

1:表引用

中断向量的确定方法请参见RH850系列用户手册:软件

P3n to P0n:这些位将中断优先级指定为16个级别之一,其中0为最高,15为最低

当多个EI级中断请求同时发出时,从这些位中具有最高优先级设置的源中断被选择并传送到CPU核心首先进行服务。当P3n到P0n位为同时发生的中断请求指定相同的优先级级别时,通道编号较低的源具有高优先级。这个顺序是固定的。

上面对寄存器的值写的0x47,表示使能中断,使用表引用,中断优先级为7

解决方案

快速解决方案为在数组中增加ADC1的寄存器地址,长期解决方案应该使用规范的接口使能中断配置优先级

uint32 RenICR_ADRR[] = {
  0xFFFFB040, 0xFFFFB042, 0xFFFFB044, 0xFFFFB046,
  0xFFFFB048, 0xFFFFB06A, 0xFFFFB06C, 0xFFFFB06E,
  0xFFFFB070, 0xFFFFB072, 0xFFFFB074, 0xFFFFB076,
  0xFFFFB078, 0xFFFFB100, 0xFFFFB102, 0xFFFFB104,
  0xFFFFB106, 0xFFFFB108, 0xFFFFB10A, 0xFFFFB10C,
  0xFFFFB11A, 0xFFFFB11C, 0xFFFFB11E, 0xFFFFB120,
  0xFFFFB122, 0xFFFFB124, 0xFFFFB126, 0xFFFFB128,
  0xFFFFB08A, 0xFFFFB08C, 0xFFFFB08E,
  0xFFFFB092, 0xFFFFB094, 0xFFFFB096, 0xFFFFB098,
  0xFFFFB09A, 0xFFFFB09C, 0xFFFFB09E, 0xFFFFB138,
  0xFFFFB13A, 0xFFFFB13C, 0xFFFFB13E, 0xFFFFB140,
  0xFFFFB142, 0xFFFFB144, 0xFFFFB146, 0xFFFFB148,
  0xFFFFB14A, 0xFFFFB090, 0xFFFFB0A0, 0xFFFFB0A2,
  0xFFFFB0A4, 0xFFFFB0A6, 0xFFFFB0A8, 0xFFFFB0AA,
  0xFFFFB14C, 0xFFFFB14E, 0xFFFFB150, 0xFFFFB152,0xFFFFB154, 0xFFFFB156, /* Use for adc1 INTADCF1ERR INTADCF1I0 INTADCF1I1 INTADCF1I2 INTADCF1I3 INTADCF1I4 */

  0xffffffff
};

如果遇到其他开中断跑飞的情况,可以参考上述解决方案。

总结

瑞萨的MCAL做的不完善就算了,支持还少,后面可能还会有更多的坑。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赞哥哥s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值