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 .
有时候 语言的描述有局限性。不清楚的地方还需要你依赖于严谨的 有效的测试手段。很重要。