[PIC®/AVR®/dsPIC®产品] PIC33F64MC506芯片,IC模块的配置

[复制链接]
 楼主| galjewf 发表于 2020-7-8 09:56 | 显示全部楼层 |阅读模式
靠自己查找手册写的初始化函数,我只知道需要TIMER2的初始化。有什么地方写错了吗
  1. int Input_caputre(void)
  2. {
  3.         IC1CONbits.ICM = 0b00;
  4.         IC1CONbits.ICTMR = 1;        //Select Timer2 as the IC1 Time base
  5.         IC1CONbits.ICI = 0b01;                // Interrupt on every fourth capture event
  6.         IC1CONbits.ICM = 0b011;                //Capture mode, every 4th rising edge
  7.        
  8.         IPC0bits.IC1IP = 3; // Setup IC1 interrupt priority level
  9.         IFS0bits.IC1IF = 0; // Clear IC1 Interrupt Status Flag
  10.         IEC0bits.IC1IE = 1; // Enable IC1 interrupt
  11.        
  12.         return 1;
  13. }
  14. int timer2_init()
  15. {
  16.     T2CONbits.TON = 0;              // 确保T2关闭,再进行初始化
  17.         T2CONbits.TCKPS = 0;
  18.         T2CONbits.T32 = 0;
  19.     T2CONbits.TCS = 0;
  20.         TMR2 = 0;
  21.         PR2 = 0x0FF;

  22.         IFS0bits.T2IF = 1;
  23.         IEC0bits.T2IE = 1;
  24.         IPC1bits.T2IP = 1;

  25.         T2CONbits.TON = 1;
  26.         return 1;
  27. }
  28. void __attribute__((__interrupt__,no_auto_psv))_IC1Interrupt(void)
  29. {
  30.         unsigned int t1,t2;
  31.         t1=IC1BUF;
  32.         t2=IC1BUF;
  33.         IFS0bits.IC1IF=0;
  34.         LATB=(PORTF ^ 0x01);
  35. }

评论

[url=home.php?mod=space&uid=3052018]@galjewf[/url] :应该没问题,就是捕捉四次中断 ,但是你又才读两次,可能造成输入捕捉溢出,溢出之后就不会产生中断了。  发表于 2020-7-10 08:50
[url=home.php?mod=space&uid=2987718]@zxq1131[/url] :对,是应该仿真的,虽然我又开了一个关于仿真错误的帖子。也就是说我这个软件代码的配置是正确的咯?  发表于 2020-7-9 15:59
你可以软件仿真,看有没有进入中断。而且我看你的备注是每4次捕获中断一次,而且是4次上升沿捕获一次,也就是要16次才能进入中断啊  发表于 2020-7-9 13:04
 楼主| galjewf 发表于 2020-7-9 09:12 | 显示全部楼层
bellstudio 发表于 2020-7-8 20:52
你倒是描述下问题现象啊

抱歉,第一次发帖不懂规矩。这款芯片的IC1-IC4功能的引脚是RD8~RD11。程序原理是利用IC检测按键开关的上升沿电平,进入中断反转io口的输出。烧进芯片后io输出无变化。
 楼主| galjewf 发表于 2020-7-9 09:16 | 显示全部楼层
或者说各位能不能告诉在下,在哪可以找到这款芯片各种外设的官方例程呢。去官网逛了一圈没找到
淘猫汤姆 发表于 2020-7-9 18:43 | 显示全部楼层
手册  http://ww1.microchip.com/downloads/en/DeviceDoc/70198D.pdf


例子
https://www.microchip.com/doclisting/CodeExamplesByFunc.aspx


 楼主| galjewf 发表于 2020-7-10 10:37 | 显示全部楼层
感谢各位的耐心解答,在下已经通过楼上发的网址里找到了官方例程,成功使用IC/输入捕捉模块实现了功能。
下面贴出官方文档编号和在下的代码

官方代码编号CE058

  1. int Input_caputre3(void)
  2. {
  3.         T3CON        = 0x8030;
  4.        
  5.         IC3CON = 0;
  6.         IC3CONbits.ICTMR = 0;        //Select Timer3 as the IC3 Time base
  7.         IC3CONbits.ICSIDL = 0;
  8.         IC3CONbits.ICI = 0b0;                //每个捕捉事件中断一次
  9.         IC3CONbits.ICM = 0b1;                //Capture mode, every edge (rising and falling)
  10.        
  11.         IPC9bits.IC3IP = 3; // Setup IC3 interrupt priority level
  12.         IFS2bits.IC3IF = 0; // Clear IC3 Interrupt Status Flag
  13.         IEC2bits.IC3IE = 1; // Enable IC3 interrupt
  14.        
  15.         return 1;
  16. }
  17. int Input_caputre1(void)
  18. {
  19.         T3CON        = 0x8030;                // 1:256 internal clock, start T3.
  20.         IPC0bits.IC1IP  =  1;                         // Setup Input Capture 1 interrupt for desired priority
  21.         // level (this example assigns level 1 priority)
  22.         IFS0bits.IC1IF                 = 0;                 // Clear the IC1 interrupt status flag
  23.         IEC0bits.IC1IE                 = 1;                 // Enable IC1 interrupts
  24.         IC1CON                         = 0x0000;        // Turn off Input Capture 1 Module
  25.         IC1CONbits.ICSIDL        = 0;                // Input capture module will continue to operate in CPU Idle mode
  26.         IC1CONbits.ICTMR        = 0;                // TMR3 contents are captured on capture event
  27.         IC1CONbits.ICI                = 0;                // Interrupt on every capture event
  28.         IC1CONbits.ICM                = 1;                // Capture mode, every edge (rising and falling)

  29. }
  30. void __attribute__((__interrupt__,no_auto_psv))_IC1Interrupt(void)
  31. {
  32.         unsigned int t1;
  33.         IFS0bits.IC1IF =  0;
  34.         t1=IC1BUF;
  35.         LATF=(PORTF ^ 0xff);
  36.         //IC1flag = 1;
  37. }
  38. void __attribute__((__interrupt__,no_auto_psv))_IC3Interrupt(void)
  39. {
  40.         unsigned int t1;
  41.         IFS2bits.IC3IF = 0;
  42.         t1=IC3BUF;
  43.         LATF=(PORTF ^ 0xff);
  44.        
  45. }
淘猫汤姆 发表于 2020-7-10 17:22 | 显示全部楼层
赞楼主 主动结贴,还发出了代码示例版主呢,来给穿个酷字
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部