一、什么是PCA/CCP/PWM
芯片手册中的这个章节叫“PCA/CCP/PWM”,于是产生第一个疑问,“什么是PCA/CCP/PWM”?
PCA:Programmable Counter Array(可编程计数器阵列)
PCA是STC单片机内部的一个多功能硬件模块,包含一个16位计数器和多个捕获/比较模块,可配置为多种工作模式,如 Capture(捕获)、Compare(比较)、PWM(脉宽调制)输出等。
CCP:Capture / Compare / PWM(捕获/比较/脉宽调制)
CCP是PCA模块的三大核心功能的统称,描述的是PCA模块在具体应用时的三种工作模式,而非独立的模块名称。
PWM:Pulse Width Modulation(脉宽调制)
PWM是一种通过调节方波占空比来控制平均功率或电压的技术,常用于LED调光、电机调速等场景。PCA模块可硬件实现PWM输出,无需CPU干预。
简言之:
PCA是硬件模块的名称
CCP是其功能分类的统称
PWM是PCA的CCP功能之一
======================================================
开始学习的过程中,由于不想搞得太复杂,于是打算用一个STC8G1K08最小系统板和几颗LED,一边学习一边进行实验。
STC8G系列单片机内部集成了3组PCA模块。不同型号和封装,包含的PCA模块数量和引脚的分配会有所不同。比如:
- STC8G1K08,8脚封装的没有PCA模块,16/20脚的则只有两组PCA模块;
- STC8G1K08A,有三组PCA模块,但是分配的引脚跟其它STC8G的不同。
因为使用的是20脚的STC8G1K17,所以使用两组模块中的第一组进行学习。
======================================================
二、PCA用到的寄存器
使用PCA模块,需要通过以下寄存器。
1、P_SW1(PCA功能脚切换)
通过配置 P_SW1 寄存器的Bit_5、Bit_4两个位,进行CCP引脚切换。
CCP_S[1:0]:PCA功能脚选择位
ECI:是 External Capture Input (外部捕获输入)的缩写,主要用于PCA模块的外部脉冲源的输入。
CCP0:第一组CCP模块
CCP1:第二组CCP模块
CCP2:第三组CCP模块
2、PCA控制寄存器(CCON)
CF:PCA计数器溢出中断标志。
当PCA的16位计数器计数发生溢出时,硬件自动将此位置1,并向CPU提出中断请求。
CR:PCA计数器允许控制位。
0:停止PCA计数,
1:启动PCA计数
CCFn(n=0,1,2):PCA计数器溢出中断标志。
当PCA模块发生匹配或者捕获时,硬件自动将此位置1,并向CPU提出中断请求。
注意:CF和CCFn共用一个中断号,所以需要通过CF和CCFn判断是由哪一个中断行为触发的。
四个中断标志位均需要软件清零。
3、PCA模式寄存器(CMOD)
CIDL:空闲模式下是否停止PCA计数。
0:空闲模式下PCA继续计数
1:空闲模式下PCA停止计数
CPS[2:0]:PCA计数脉冲源选择位
ECF:PCA计数器溢出中断允许位。
0:禁止PCA计数器溢出中断
1:使能PCA计数器溢出中断
4、PCA计数器寄存器(CL,CH)
PCA计数器是由CL和CH两个8位寄存器组合成的一个16位计数器,CL为低8位,CH为高8位。
计数器每个PCA时钟自动加1。
5、PCA模块模式控制寄存器(CCAPMn)
ECOMn:允许PCA模块n的比较功能
CCAPPn:允许PCA模块n进行上升沿捕获
CCAPNn:允许PCA模块n进行下降沿捕获
MATn:允许PCA模块n的匹配功能
TOGn:允许PCA模块n的高速脉冲输出功能
PWMn:允许PCA模块n的PWM脉宽调制输出功能
ECCFn:允许PCA模块n的匹配/捕获中断
6、PCA模块模式捕获值/比较值寄存器(CCAPnL,CCAPnH)
- 当PCA模块捕获功能使能时,CCAPnL和CCAPnH用于保存发生捕获时的PCA的计数值(CL和CH);
- 当PCA模块比较功能使能时,PCA控制器会将当前[CH:CL]中的计数值与保存在[CCAPnH:CCAPnL]中的值进行比较,并给出比较结果;
- 当PCA模块匹配功能使能时,PCA控制器会将当前[CH:CL]中的计数值与保存在[CCAPnH:CCAPnL]中的值进行比较,看是否匹配(相等),并给出匹配结果。
7、PCA模块PWM模式控制寄存器(CCA_PWMn)
EBSn[1:0]:PCA模块n的PWM位数选择
XCCAPnH[1:0]:10位PWM的第9位和第10位的重载值
XCCAPnL[1:0]:10位PWM的第9位和第10位的比较值
EPCnH:PWM模式下,重载值的最高位
8位PWM的第9位,7位PWM的第8位,6位PWM的第7位,10位PWM的第11位
EPCnL:PWM模式下,比较值的最高位
8位PWM的第9位,7位PWM的第8位,6位PWM的第7位,10位PWM的第11位
注意:在更新10位PWM的重载值时,必须先写高两位XCCAPnH[1:0],再写低8位CCAPnH[7:0]。