PCA模块之捕获功能问题请教各位大师傅
我现在想要PCA模块0捕获功能区抓 脉冲高电平和周期,配置成边沿触发中断,也就是上下均触发,但是在中断里如何判断是上边沿还是下边沿?好像规格书没有相关的demo? void PCA_Isr() interrupt 7 //PCA中断{
if (CF)//PCA计数器溢出标志
{
CF = 0;
cnt++; //PCA计时溢出次数+1
}
if (CCF0)//PCA中断式共享的,要判断来自哪个模块,PCA模块0 的中断一共有3个 CCF0-CCF2
{
}
}
void PCA_INIT(void)
{
CCON = 0x00;
//CMOD = 0x09; //PCA时钟为系统时钟不分频,使能PCA计时中断 0000 100 1
//MCU主频12MHZ/12分频=1MHZ时间分辨率1us
CMOD = 0x01; //PCA时钟为系统时钟/12分频,使能PCA计时中断 0000 000 1
CL = 0x00; //PCA计数器初值设置寄存器清零
CH = 0x00; //PCA计数器初值设置寄存器清零
CCAPM0 = 0x11; //PCA模块0为16位捕获模式(下降沿捕获)
//CCAPM0 = 0x21; //PCA模块0为16位捕获模式(上升沿捕获)
//CCAPM0 = 0x31; //PCA模块0为16位捕获模式(边沿捕获)
CCAP0L = 0x00; //PCA模块捕获值
CCAP0H = 0x00; //PCA模块捕获值
CR = 1; //启动PCA计时器
}
在配置中断机构时,主触发器通常以0为基准。具体来说:
1. 主触发器配置:主触发器0应该被配置为0,即 0x00,这样才能使得主触发器0和中断中断条件机构ID7同时触发中断。
2. 中断中断条件机构ID7的触发条件:在中断中断条件机构ID7的触发事件中,主触发器0的值将决定是下边沿还是上边沿:
如果主触发器0的值为1,表示是下边沿。
如果主触发器0的值为2,表示是上边沿。
因此,如果用户希望主触发器0和中断中断条件机构ID7同时触发中断,主触发器0需要被配置为0。
示例配置:
c
void PCAINIT(void)
{
// 主触发器0配置为0,以使得主触发器0和中断中断条件机构ID7同时触发中断
CCON = 0x00;
CMOD = 0x01;// 主时钟设置为系统时钟/12分频
CL = 0x00;
CH = 0x00;
// 配置中断中断条件机构ID7
CCON = 0x00;
CMOD = 0x01;
CL = 0x00;
CH = 0x00;
// 配置中断机构7,主触发器0和中断中断条件机构ID7同时触发中断
CSI = 0;
CSI = 0x00; // 主触发器0配置为0
CSI = 0x00; //中断中断条件机构ID7的触发器配置为0
// 配置中断机构7的中断中断条件机构ID7
CSI = 0;
CSI = 0x00; // 主触发器0配置为0
CSI = 0x00; //中断中断条件机构ID7的触发器配置为0
if (CF) // 可能需要进一步处理
{
CF = 0;
cnt++;
}
}
需要注意的是,如果用户希望主触发器0和中断中断条件机构ID7同时触发中断,主触发器0应被配置为0。
希望这些建议对你有帮助!
[本文内容由国芯人工智能辅助生成,仅供参考] 具体怎么实现,判断上升沿下降沿触发,请给我一个demo 参考此贴,提到两个办法,一是中断里立即读。二是自己设flag区分上升还是下降:
https://www.stcaimcu.com//forum. ... e=1&extra=#pid79502 ercircle 发表于 2025-5-23 11:37
参考此贴,提到两个办法,一是中断里立即读。二是自己设flag区分上升还是下降:
https://www.stcaimcu.com/ ...
{:baoquan:} 进入中断立即读出输入的电平,高电平则为上升沿,低电平则为下降沿。
PCA中断设置为最高优先级。
注意,如果占空比很小或很大,即两个边沿中断间隔时间太短,则会响应不过来。
解决方法是用两个输入,一个上升不中断,一个下降沿中断,或一个上升中断,一个下降沿并不中断。 梁工 发表于 2025-5-23 21:32
进入中断立即读出输入的电平,高电平则为上升沿,低电平则为下降沿。
PCA中断设置为最高优先级。
注意,如 ...
{:4_201:}{:4_196:}多谢 这个属于单片机的高阶应用了 zengchang 发表于 2025-6-4 22:53
这个属于单片机的高阶应用了
{:ciya:}不是基操吗 基操应该是流水灯,GPIO,ADC,液晶屏,串口之列
页:
[1]