10779|10

855

帖子

5

TA的资源

一粒金砂(高级)

楼主
 

【R7F0C809】+AFE4490+DCM03程序调试完整过程 [复制链接]

 
硬件部分确定后,就着手于软件调试了。秉持着先难后易的原则,首先就开始了AFE4490的SPI通信部分的调试。说到此,就不得不提一下R7F0C809的SPI部分,其CSI即串行阵列单元就是常见的SPI协议了,不过CSI与串口是共用一个通道的,即通道0,因此串口和SPI是不可同时使用的,但可以通过更改PIOR寄存器相应位将CSI/UART重映射到其他引脚。由于引脚资源比较有限,我只好利用OLED进行程序的调试了。因此,在进行CSI调试工作之前需要调教好OLED。具体过程可参考本人之前的一片帖子----------àhttps://bbs.eeworld.com.cn/thread-472858-1-1.html。在此不再赘述。
重要的事情首先需要说说:瑞萨的CSI部分中SI、SO引脚并不是我们通常认为的MOSI和MISO,而是Serial  Input、Serial  Output的意思。基于此,在将R7F0C809作为主发送和接收时,SO=MOSI、SI=MISO。在确定好这一点后,就可以按照R7F0C809的DataSheet中CSI部分11.5.3章节去依次配置各个相关寄存器了。主控在单次模式下发送和接收流程图如下图所示:
具体配置过程可参考瑞萨官网给出的基于R7F0C807 CSI主发送和接收Demo----àan_r01an2495cc0100_r7f0c807_serial.zip也即附件中R7F0C807 Serial Master这个文件。现将关键配置代码贴出,并将给出注释如下:
    SAU0EN = 1U;                    /* supply SAU0 clock */
    SPS0 =0x00U;                     //Setclock frq 20Mhz
                                     //clearthe SE00 bit to 0  and stops thecommunication operation
    ST0 |=0x01U;                    /* stop CSI00 */
   
    CSIMK00 =1U;                    /* disable INTCSI00 interrupt */
    CSIIF00 =0U;                    /* clear INTCSI00 interrupt flag */
    /*Set INTCSI00 low priority */
    CSIPR100 = 1U;
    CSIPR000 = 1U;
   
    SIR00 =0x03U;                   /* clear error flag */
   
    SMR00H = 0x00U;//CKS00 = 0 CCS00 = 0 STS00 = 0
    SMR00L = 0x20U;//SIS000 = 0 MD001 = 0 MD000 = 0 transmit endinterrupt
//    SMR00L = 0x21U;//SIS000 = 0 MD001 = 0 MD000= 1 buffer empty interrupt
//    SCR00H = 0xC0U;//TXE00 = 1 RXE00 = 1 DAP00= 0 CKP00 = 0 0 0 0 0
    SCR00H = 0xF0U;//TXE00 = 1 RXE00 = 1 DAP00 = 1 CKP00 = 1 0 00 0
    SCR00L = 0x07U;//no check --MSB --no stop bit --7bits datalength
   
    SDR00H |= 0x00U;//fmclk/2=10mhz 0000000
    SDR00L = 0x00U;//serial data buffer register
   
    CKO0 |=0x01U;                   /* CSI00 clock initial level */
    SO0 &=(uint8_t)~0x01U;          /* CSI00 SO initial level */
    SOE0 |=0x01U;                   /* enable CSI00 output */
    /*SI00*/
    PMC0 &= 0x7FU;
    PM0 |= 0x80U;
    /*SO00*/
    P0 |= 0x40U;
    PM0 &= 0xBFU;
    /*SCK00*/
    PMC1 &= 0xFEU;
    PM1 &= 0xFEU;
    P1 |= 0x01U;
具体完整工程可参考附件AFE4490+DCM03 HWSPI.zip文件。在这里我们重点关注的有这么几个寄存器:SMR00HSMR00LSCR00HSCR00LSDR00H
首先介绍下SMR00HSMR00L寄存器,其具体介绍如下:
     


这两个寄存器确定了串行阵列单元的工作模式以及中断类型。接下来看看SCR00HSCR00L这两个寄存器:
  
TXE00RXE00的组合决定了CSI单元的通信模式,即全双工通信;而DAP00CKP00则决定了SPI通信中最为重要的两个参数:CPOL(时钟极性)和CPHA(时钟相位)。根据CPOLCPHA的不同组合,SPI可细分为4种工作方式。时钟极性(CPOL)对传输协议没有重大影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或者下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或者下降)数据被采样。主控和与之通信的外围设备的时钟相位和极性应该保持一致。
不同时钟相位下的SPI总线数据传输时序如下图所示:
根据AFE4490的DataSheet 52页写时序图和53页读时序图描述,如下图所示:
可以看出,CPOL应该取为0;CPHA应取0,即SPI串行时钟空闲为低,在第一个上升沿取样。因此,DAP00 = 1;CAP00 = 1;TXE00 = 1;RXE = 1。
DIR00置为0,即先发送高字节;DLS000置为1,配置通信数据8位数据长度,即一个字节。
最后,让我们看看SDR00H这个寄存器:
     
这个寄存器的配置决定了SPI工作速度,我们设为最快,在主时钟为20Mhz情况下,SPI通信速度达到了10M
为了验证SPI的参数配置和通信时序,我拿手头的逻辑分析仪(Saleae16 最大3通道100M采样;配套软件为Saleae Logic 1.1.15)进行了波形的抓取,情况如下:
首先是通信速率验证:
然后是R7F0C809向AFE4490写入数据过程时序验证:
最后是AFE4490向R7F0C809返回数据的过程时序验证:
分析仪和硬件平台连接如下图所示:
至此,AFE4490的SPI通信调试告一段落,接下来就开始编写程序来进行血氧数据采集前的准备工作了。由于AFE4490在采集完一次血氧数据后ADC_RDY引脚会变高,等待主控去读取数据。因此我们将与之相连的引脚设置为上升沿触发。相关配置代码如下:
      
PM0 |= 0x02U;
      PMC0 &= 0xFDU;
      
      PMK4 = 1U;//disable intp4
      PIF4 = 0U;//clear intp4 flag
      
      PPR14 = 1U;
      PPR04 = 1U;//
//      EGN0 |= 0x10U;
//      EGP0 &= 0x2FU;//intp4 Falling edgetrig
      EGP0 |= 0x10U;
      EGN0 &= 0x2FU;//intp4 Rising edge trig
      
      PIF4 = 0U;//clear intp4 flag
  PMK4 =0U;//enable intp4
完成这些以后,还需要注意的是保证PDNZ和RST引脚拉高到VCC电位。然后我们就可以利用AFE4490+DCM03正常的采集数据了。
附上2张采集图:
系统上电以后情景:
开始测量时的情景:
OLED前4行代表AFE4490采集到的LED2点亮时采样值、LED2熄灭时环境光的采样值、LED1点亮时采样值、LED1熄灭时环境光的采样值。LED2==RED;LED1==IR。
至此,血氧模块的数据采集就告一段落了,接下来开始其他部分的软件调试!

AFE SPI Write and Read.png (56.72 KB, 下载次数: 9)

AFE SPI Write and Read.png

AFE4490 DCM03 HWSPI.rar

106.06 KB, 下载次数: 249

R7F0C807 Serial Master.rar

1.56 MB, 下载次数: 81

最新回复

谢谢分享。。。   详情 回复 发表于 2020-7-4 12:08

赞赏

1

查看全部赞赏

点赞 关注
个人签名作为一个菜逼,干货并没有多少。唯一会的就是水,所以回帖水分大。望见谅!

回复
举报

1万

帖子

2853

TA的资源

管理员

沙发
 
好厉害~
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

感谢帮顶  详情 回复 发表于 2015-11-18 21:06
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 

回复

855

帖子

5

TA的资源

一粒金砂(高级)

板凳
 

感谢帮顶
 
个人签名作为一个菜逼,干货并没有多少。唯一会的就是水,所以回帖水分大。望见谅!
 
 

回复

139

帖子

0

TA的资源

一粒金砂(初级)

4
 
血氧的算法很复杂的,不知道楼主打算怎么计算血氧值

点评

原先是打算用这个芯片来做,不过初步试了下,这个芯片的各方面都不适合跑算法。so,只显示采集到的值就算啦。  详情 回复 发表于 2015-11-19 09:34
 
 
 

回复

855

帖子

5

TA的资源

一粒金砂(高级)

5
 
拼命三郎V5 发表于 2015-11-19 09:22
血氧的算法很复杂的,不知道楼主打算怎么计算血氧值

原先是打算用这个芯片来做,不过初步试了下,这个芯片的各方面都不适合跑算法。so,只显示采集到的值就算啦。
 
个人签名作为一个菜逼,干货并没有多少。唯一会的就是水,所以回帖水分大。望见谅!
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
最近在做AFE4490测血氧,就是不知道怎么设置AFE的采样率,你知道吗?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
johnnrj 发表于 2016-3-2 16:42 最近在做AFE4490测血氧,就是不知道怎么设置AFE的采样率,你知道吗?

前辈,能不能分享一下与AFE通信的驱动代码?

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
人民币的幻想 发表于 2015-11-19 09:34 原先是打算用这个芯片来做,不过初步试了下,这个芯片的各方面都不适合跑算法。so,只显示采集到的值就算 ...

AFE4490调试不通,灯无法点亮,前辈能指导下吗?

点评

看看时序吧  详情 回复 发表于 2019-11-3 21:37
 
 
 

回复

855

帖子

5

TA的资源

一粒金砂(高级)

9
 
seafish1 发表于 2019-10-8 15:54 AFE4490调试不通,灯无法点亮,前辈能指导下吗?

看看时序吧

 
个人签名作为一个菜逼,干货并没有多少。唯一会的就是水,所以回帖水分大。望见谅!
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

10
 

不错

 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

11
 

谢谢分享。。。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表