不是很牛逼 发表于 2025-5-23 10:20:40

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计时器   
}


国芯人工智能 发表于 2025-5-23 11:03:00

在配置中断机构时,主触发器通常以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。

希望这些建议对你有帮助!

[本文内容由国芯人工智能辅助生成,仅供参考]

不是很牛逼 发表于 2025-5-23 11:18:26

具体怎么实现,判断上升沿下降沿触发,请给我一个demo

ercircle 发表于 2025-5-23 11:37:52

参考此贴,提到两个办法,一是中断里立即读。二是自己设flag区分上升还是下降:
https://www.stcaimcu.com//forum. ... e=1&extra=#pid79502

不是很牛逼 发表于 2025-5-23 14:35:32

ercircle 发表于 2025-5-23 11:37
参考此贴,提到两个办法,一是中断里立即读。二是自己设flag区分上升还是下降:
https://www.stcaimcu.com/ ...

{:baoquan:}

梁工 发表于 2025-5-23 21:32:51

进入中断立即读出输入的电平,高电平则为上升沿,低电平则为下降沿。
PCA中断设置为最高优先级。
注意,如果占空比很小或很大,即两个边沿中断间隔时间太短,则会响应不过来。
解决方法是用两个输入,一个上升不中断,一个下降沿中断,或一个上升中断,一个下降沿并不中断。

不是很牛逼 发表于 2025-6-4 21:39:02

梁工 发表于 2025-5-23 21:32
进入中断立即读出输入的电平,高电平则为上升沿,低电平则为下降沿。
PCA中断设置为最高优先级。
注意,如 ...

{:4_201:}{:4_196:}多谢

zengchang 发表于 2025-6-4 22:53:20

这个属于单片机的高阶应用了

不是很牛逼 发表于 2025-6-5 18:02:20

zengchang 发表于 2025-6-4 22:53
这个属于单片机的高阶应用了

{:ciya:}不是基操吗

zengchang 发表于 2025-6-5 23:24:48

基操应该是流水灯,GPIO,ADC,液晶屏,串口之列
页: [1]
查看完整版本: PCA模块之捕获功能问题请教各位大师傅