文化科技创新企业服务商德必集团完成数亿元C轮融资,获致远资本投资
06-18
MPC82G是台湾胜泉公司生产的8位MCU,兼容。
内置6个PCA功能模块,模块0-5对应P1.2-P1.7,P1.1为输入脉冲源ECI。
本文记录了测试PCA的代码和过程,重点分析了各个寄存器的设置,同时还通过逻辑分析仪记录了相关波形。
STC15F60S2等芯片也内置了PCA功能,不过模块只有3个,但功能更丰富。
设置和编程过程类似,可以参考。
1。
相关寄存器: 寄存器 功能 地址 7 6 5 4 3 2 1 0 描述 CCON 控制 D8 CF CR CCF 5 CCF4 CCF3 CCF2 CCF1 CCF0 CR:启动和停止 PCA 总计数器 CF:PCA 总计数器溢出标志 CCF0-5:各模块中断标志 CMOD 模式 D9 CIDL — — — — CPS1 CPS0 ECF CIDL: I空闲模式 是否计数 CPS1、CPS0:时钟源:12 分钟。
2分钟。
T0.ECI。
选择四个 ECF:PCA 计数溢出中断 AUXIE 中断 AD — — EKB ES2 EBD EPCA EADC ESPI EPCA:PCA 中断开关 CCAPM 0-5 模块模式 DA- DF — ECOM 0-5 CAPP 0-5 CAPN 0-5 MAT 0-5 TOG 0-5 PWM 0-5 ECCF 0-5 ECOMn 允许比较 CAPPn 上升 CAPNn 下降 MATn 与 CCFn 位匹配 TOGn 与翻转引脚电平匹配 PWM 脉宽调制输出 ECCFn 使能中断信号 CCFn CCAPnL 捕获 寄存器 EA-EF 比较:先设置初始值并与 PCA 进行比较 捕获:将 PCA 值捕获到寄存器 CCAPnH FA-FF PCAP WM0-5 PWM 模式 F2- F7 — — — — — — ECA PnH 0-5 ECA PnL 0-5 作为 PWM 期间的第 9 位 用于设置占空比 CL、CH PCA PCA 总计数器 AUXR1 引脚 8E P4KB P4PCA P4SPI P4S2 GF2 —?中断 功能 备注 - 无操作 -x10 只进入中断,相当于添加外部中断功能 -x01 x 10/11 16 位 CEXn 引脚下降沿触发捕获模式 -x11 x 30/31 16 位 CEXn 引脚具有边沿触发捕获模式 -x 48/49 16位软件定时器 需要中断来重置比较值并将中断标志清0。
因此,最小定时值>=5us。
不同的是定时器只使用中断信号,高速输出使用对应引脚电平的翻转 -x 4C/4D 16位高速输出 - 42/ 8 位 PWM 占空比=1-[ECAPnH,CCAPnL]/ 3。
PCA函数使用步骤: 1)确认CCON=0x00;一般清除 0 2) 确认 CMOD= 0x00; 00不开启PCA中断,01开启;脉冲源为 FSOC/12 3) AUXIE = 0x04;打开PCA主中断开关,捕获和定时必须打开,在PWM期间可以关闭 4)设置各个模块工作模式寄存器CCAPMn,见表2 5)设置PCA计数器:CL=0;CH=0 6) 对于定时或高速输出,需要设置CCAPnL和CCAPnH值 7) PWM功能,需要设置CCAPnH(和ECAPnH PCAPWM寄存器中) 8)开始PCA计数:CR=1;如有必要,开启总中断:EA=1 9)编写中断处理函数,MPC82G的PCA中断向量为10(53H),STC15F60S2为7 4。
PCA功能逻辑图: 5。
PCA中断逻辑图: 6。
PCA中断向量 MPC82G的PCA中断号为10。
STC15F60S2的中断向量为7。
测试1:PCA总计数器溢出中断 思路:不使用任何模块,只启动PCA总计数器。
为了方便观察,可以在中断处理程序中使能中断并设置观察变量(P2.1)进行电平翻转,然后用逻辑分析仪观察其变化。
步骤: 1。

将CCON清0,将各中断标志清0,关闭PCA计数 2。
CMOD:设置脉冲源并设置ECF(允许总PCA计数溢出中断) 3。
打开各级中断:在AUXIE中设置EPCA,打开总中断EA 4。
启动PCA:CR=1 65。
在p2.1中可以观察到宽度水平翻转。
程序如下: 程序: #include "REG_MPC82G.H" #include "intrins.h" sbit LED =P2^1;//测试LED void PCA_isr ()中断10 //注意中断向量号为10,STC15F为7 { CF=0; //清除中断 LED=!LED;//LED反转 } void main () { CCON=0; CL=0; CH= 0; CMOD=0x01; //除以12。
使用0x03就是系统时钟除以2 AUXIE=0x04; EA=1; CR=1; while(1); } FOSC/12:PCA 计数每 65.ms 溢出一次(理论值应为 65.ms) 如果脉冲源更改为 FOSC/2:PCA 计数每 10.ms 溢出一次 测试2:PCA模块0作为捕获模式,CEX0触发中断 思路: 模块0设置为捕获模式。
捕捉信号由模块0对应的引脚P1.2输出。
可以是上升沿、下降沿或边沿触发。
这是通过设置 CCAPM0 来实现的,请参见表 2。
下降沿触发捕捉:CCAPM0=0x11(),即CAPN0=1,ECCF0=1可以直接短接CEX0/P1.2与地来获得下降沿; 上升沿触发捕获:CCAPM0=0x21 ( ) 需要先将CEX0/P1.2与地短路,然后释放才能获得上升沿; 注意MCU的四个口复位后都是“准双向口”,开路时有内部弱上拉。
CEX0触发捕捉时,捕捉到的数据不做处理(如果是仿真的话,仿真时可以查看捕捉到的值),所以这个程序相当于给单片机增加了一个外部中断功能。
程序: #include "REG_MPC82G.H" #include "intrins.h" sbit LED =P2^1;//测试LED sbit LED2=P2^2;//连接LED观察 void PCA_isr()中断10 { unsigned charTmpL;//临时变量, 暂存捕获值 unsigned charTmpH; //CF=0; //清除中断(PCA计数溢出,此处无需使用) LED=!LED;//LED反转 if (CCF0)//当CEX0(P1.2)触发捕获时,中断触发CCF0 { TmpL=CCAP0L; TmpH=CCAP0H; CCF0=0;//软件清除中断 //P12=1;//将测试引脚拉高下一个下降沿触发 LED2=!LED2;//可以接一个发光二极管来观察中断的发生 } } void main() { CCON=0; CL=0; CH=0; CMOD=0x00;//模式:FSOC/12,ECF禁用PCA中断(以避免无效中断) AUXIE=0x04 ;//开启PCA总中断 CCAPM0 =0x11;//模块0设置为外部引脚上升沿触发捕获模式,并产生模块0中断信息CCF0 EA=1; CR =1; //P12=1; while(1); } 测试3:PCA模块0和1用作16位定时模式 想法: 如果每个PCA模块用作定时器,由于16位PCA计数器启动后总是从-FFFF开始循环计数,如果比较寄存器[CCAPnH + CCAPnL]加载固定值,则每个PCA计数的每个周期(5 个脉冲)只能生成一次相同的比较输出。
为了实现自定义计数值,必须在每次计数中断后将固定值添加到[CCAPnH + CCAPnL],以便PCA在计数到新值后可以生成另一个输出。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-18
06-08
06-18
06-18
06-18
06-18
06-18
最新文章
使用电子管有哪些注意事项?如何检查电子管之间是否短路?
博通支付1200万美元和解SEC财务欺诈指控
八名运营商高管确认加入虚拟运营商
内蒙古农牧区雷电灾害成因分析及防雷对策
北京联通将5G应用于世园会远程医疗急救
TD-SCDMA最后一轮冲刺测试启动,产业前景更加光明
专访阿里云总裁王健:云计算服务平台梦想成真
USB2.0控制器CY7C68013的接口设计与实现