CCU单元的CCPOS0 CCPOS1 CCPOS2 配置输入,当任何一个引脚边沿事件就会启动T13的单次射击模式,刚开始以为是CM_CHE事件触发的额T13单次射击模式,后来发现是CCPOSx(x=0,1,2)引脚的边沿事件触发的

 用P13.0 模拟 CCPOS1外设引脚输入      100Hz的方波

 用P13.1 模拟 CCPOS2 外设引脚输入      悬空

 用P13.2 模拟 CCPOS3 外设引脚输入      悬空 

 

 T12的周期匹配(20kHZ)触发 DTM延时 产生CM_RDY 信号

该信号同步采集三个输入通道CCPOS0  CCPOS1  CCPOS2 的输入信号 并锁存

进入寄存器 CMPSTAT 的第3 第4 第5位阈 (CCPOS60 ; CCPOS61 ;CCPOS62)

 

与此同时 与MCMOUT寄存器的EXPH CURH 进行比较  如果与EXPH 匹配就会产生

CM_CHE 信号 

 

该信号可以硬件触发HP_ST动作。

HP_ST动作 包括两个传送动作  EXPHS 传送到EXPH ; CURHS传送到CURH 

 

该信号可以通过中断节点请求中断 

该信号可以同步启动T13 的单次射击模式  产生一个 可编程的延时 

 

 

用到了两个中断  

T12的周期中断  用来软件更新 EXPH  CURH  

CCPOS0  CCPOS1  CCPOS2 任何一个边沿 产生的 CM_CHE 信号 触发CM_CHE 信号

该信号硬件同步启动定时器T13 , T13的工作模式是单次射击模式。 

在T13的周期匹配的时候,产生中断。 然后T13清零 。停止

 

下一次 CCPOS0  CCPOS1  CCPOS2 下一次任意一个引脚变化,则再次启动T13 单次射击模式

 

以前是用T12的比较匹配事件启动的定时器T13 的单次射击模式 已经测试OK了。

 

现在用CCPOS0  CCPOS1  CCPOS2 同步输入采样  任何一个变化。 就启动T13 计数 

 

T13的同步事件选择 CM_CHE 信号硬件触发

 

 

 

以前用CM_CHE 信号请求中断节点3 来请求中断

 

 

现在改为T13的周期匹配来请求中断 

 

 

 

因为只用到P13.1 模拟ccpos0     ccpos1悬空   ccpos2悬空 

所以我实际上只有EXPH 只有两个状态 

在T12的中断服务程序中做如下处理

 

 

 

 

 

 

 

 

 

 

因为  f(T13) 用的是外设总线时钟        f(SPB)  f(SPB)=100MHz

所以一个PWM周期是0.01us

 

T13单次射击模式的周期寄存器是10000  所以延时就是100us  

实际进行测试:   

试验一

示波器的3号通道  

是在T12的周期(T12的频率是20Khz)匹配的时刻 ,经过DTM延时10个T12时钟周期

以后,产生CM_RDY信号,然后该信号触发Hall Compare Logic单元 进行同步采样 输入

信号CCPOS0  CCPOS1  CCPOS2 的信号  

当CCPOS0  CCPOS1  CCPOS2 有一个引脚发生边沿变化事件,则产生CM_CHE 信号 。

该CM_CHE 信号可以硬件触发一个HP_ST事件

该CM_CHE 信号可以请求中断节点产生中断

该CM_CHE 信号可以同步T13单次射击模式,用于产生精确的延时 

综上3号就是 T12的周期中断,(20kHz)  每次进入中断服务程序中就翻转一次测试引脚

(P22,1)的电平,所以频率是10kHz 

 

示波器的2号通道

就是模拟的CCPOS0 输入一个100Hz 的方波  

 

示波器的1号通道

就是一个测试引脚(P00.1)引脚的电平值

该引脚是 CCPOS0输入引脚边沿的时刻, 实际上可以认为是输入引脚CCPOS0 

输入引脚CCPOS1 ; 输入引脚CCPOS2 任何一个引脚电平变化的时候,被同步采锁存到

寄存器器CMPSTAT的位阈 ,然后与MCMOUT寄存器的EXPH位阈进行比较。

如果发生比较匹配就产生CM_CHE信号 

用该信号去同步启动T13的单次射击模式 

T13计数到周期匹配的时候,就再T13的周期中断中翻转一次P00.1的电平

 

理论上延时10000  理论上延时100us 

波形PM77

1个格子是1ms 

 

 

 

缩放 10us每格  检测CCPOS0的下降边沿  PM78

 

 

缩放10us每格  检测CCPOS的上升边沿   PM79 

 

 

 

试验二

现在试验 精确延时5us 

 

 

试验结果:

2us每格  检测CCPOS0的下降边沿 T13定时5us以后产生中断 

PM80 

 

 

 

 

检测ccpos0 的上升边沿  T13单次射击模式运行500次精确定时 5us

 

 

 

 

试验三:

现在给CCPOS1(P13.2)输入100HZ 的方波   

延时100us波形  一格10us  T13定时器精确延时100us

 

 

试验四:

现在给CCPOS(P13.3)输入100HZ 的方波

延时100us波形 一个10us  T13定时器精确延时100us 

 

 

 

 

综上:CCPOS0 ,CCPOS1,CCPOS2 任何一个引脚的变化,都会硬件触发T13的单次射击运行模式,T13配置为周期匹配以后,该周期可精确延时。周期匹配以后停止,然后等待下一次的触发时刻到来。  

 

   最后 经过测试 发现一个 现象   文档中指出 是在CCPOSx(x=0,1,2)边沿时刻 触发T13  ,但是有的地方却说是 正确的霍尔事件(CM_CHE),在上一个步骤  

用CM_CHE 生成信号请求中断,我成功中断以后,我一直认为是CM_CHE启动的中断,后来才发现是CCPOSx (x=0,1,2)边沿的硬件事件触发的T13  .

有时候 语言的描述有局限性。不清楚的地方还需要你依赖于严谨的 有效的测试手段。很重要。

 

程序以及文档的百度网盘链接 

 

posted @ 2022-01-12 19:37  STEVEN-SUN  阅读(280)  评论(0编辑  收藏  举报