pit是定时器中断,每经过一段规定的时间发生中断,其中中断服务函数写在isr.c文件中,中断优先级规定写在isr_config.h中
zf_ccu6_pit.c

//-------------------------------------------------------------------------------------------------------------------
//  @brief      pit初始化
//  @param      ccu6n           选择CCU6模块(CCU6_0、CCU6_1)
//  @param      pit_ch          选择通道(PIT_CH0、PIT_CH1)
//  @param      time            周期时间
//  @return     void
//  @note                      请使用.h文件中 带时间单位的宏定义函数
//  Sample usage:               pit_init(CCU6_0, PIT_CH0, 5000);    //设置周期中断5000us
//-------------------------------------------------------------------------------------------------------------------
void pit_init(CCU6N_enum ccu6n, CCU6_CHN_enum pit_ch, uint32 time)
{uint8 i;volatile Ifx_CCU6 *module;uint64 timer_input_clk;IfxCcu6_Timer g_Ccu6Timer;IfxCcu6_Timer_Config timerConfig;uint32 timer_period;boolean interrupt_state = disableInterrupts();module = IfxCcu6_getAddress((IfxCcu6_Index)ccu6n);IfxCcu6_Timer_initModuleConfig(&timerConfig, module);timer_input_clk = IfxScuCcu_getSpbFrequency();i = 0;while(i<16){timer_period = (uint32)(timer_input_clk * time / 1000000);if(timer_period < 0xffff)    break;timer_input_clk >>= 1;i++;}if(16 <= i)   IFX_ASSERT(IFX_VERBOSE_LEVEL_ERROR, FALSE);switch(ccu6n){case CCU6_0:{if(PIT_CH0 == pit_ch){timerConfig.interrupt1.typeOfService  = CCU6_0_CH0_INT_SERVICE;timerConfig.interrupt1.priority       = CCU6_0_CH0_ISR_PRIORITY;}else{timerConfig.interrupt2.typeOfService  = CCU6_0_CH1_INT_SERVICE;timerConfig.interrupt2.priority       = CCU6_0_CH1_ISR_PRIORITY;}}break;case CCU6_1:{if(PIT_CH0 == pit_ch){timerConfig.interrupt1.typeOfService  = CCU6_1_CH0_INT_SERVICE;timerConfig.interrupt1.priority       = CCU6_1_CH0_ISR_PRIORITY;}else{timerConfig.interrupt2.typeOfService  = CCU6_1_CH1_INT_SERVICE;timerConfig.interrupt2.priority       = CCU6_1_CH1_ISR_PRIORITY;}}break;}if(PIT_CH0 == pit_ch){timerConfig.timer = IfxCcu6_TimerId_t12;timerConfig.interrupt1.source         = IfxCcu6_InterruptSource_t12PeriodMatch;timerConfig.interrupt1.serviceRequest = IfxCcu6_ServiceRequest_1;timerConfig.base.t12Period             = timer_period;timerConfig.base.t12Frequency           = (float)timer_input_clk;timerConfig.clock.t12countingInputMode = IfxCcu6_CountingInputMode_internal;}else{timerConfig.timer = IfxCcu6_TimerId_t13;timerConfig.interrupt2.source         = IfxCcu6_InterruptSource_t13PeriodMatch;timerConfig.interrupt2.serviceRequest = IfxCcu6_ServiceRequest_2;timerConfig.base.t13Period              = timer_period;timerConfig.base.t13Frequency           = (float)timer_input_clk;timerConfig.clock.t13countingInputMode = IfxCcu6_CountingInputMode_internal;}timerConfig.timer12.counterValue = 0;timerConfig.timer13.counterValue = 0;timerConfig.trigger.t13InSyncWithT12 = FALSE;IfxCcu6_Timer_initModule(&g_Ccu6Timer, &timerConfig);restoreInterrupts(interrupt_state);IfxCcu6_setSuspendMode(module, IfxCcu6_SuspendMode_hard);IfxCcu6_Timer_start(&g_Ccu6Timer);
}//-------------------------------------------------------------------------------------------------------------------
//  @brief      pit关闭
//  @param      ccu6n           选择CCU6模块(CCU6_0、CCU6_1)
//  @param      pit_ch          选择通道(PIT_CH0、PIT_CH1)
//  @return     void
//  @note
//  Sample usage:               pit_close(CCU6_0, PIT_CH0); //关闭CCU60 通道0的计时器
//-------------------------------------------------------------------------------------------------------------------
void pit_close(CCU6N_enum ccu6n, CCU6_CHN_enum pit_ch)
{volatile Ifx_CCU6 *module;IfxCcu6_Timer g_Ccu6Timer;module = IfxCcu6_getAddress((IfxCcu6_Index)ccu6n);g_Ccu6Timer.ccu6 = module;g_Ccu6Timer.timer = (IfxCcu6_TimerId)(pit_ch);IfxCcu6_Timer_stop(&g_Ccu6Timer);
}//-------------------------------------------------------------------------------------------------------------------
//  @brief      pit开始
//  @param      ccu6n           选择CCU6模块(CCU6_0、CCU6_1)
//  @param      pit_ch          选择通道(PIT_CH0、PIT_CH1)
//  @return     void
//  @note
//  Sample usage:               pit_start(CCU6_0, PIT_CH0); //打开CCU60 通道0的计时器
//-------------------------------------------------------------------------------------------------------------------
void pit_start(CCU6N_enum ccu6n, CCU6_CHN_enum pit_ch)
{volatile Ifx_CCU6 *module;IfxCcu6_Timer g_Ccu6Timer;module = IfxCcu6_getAddress((IfxCcu6_Index)ccu6n);g_Ccu6Timer.ccu6 = module;g_Ccu6Timer.timer = (IfxCcu6_TimerId)(pit_ch);IfxCcu6_Timer_start(&g_Ccu6Timer);
}//-------------------------------------------------------------------------------------------------------------------
//  @brief      禁止pit中断
//  @param      ccu6n           选择CCU6模块(CCU6_0、CCU6_1)
//  @param      pit_ch          选择通道(PIT_CH0、PIT_CH1)
//  @return     void
//  @note
//  Sample usage:               pit_disable_interrupt(CCU6_0, PIT_CH0); //禁止CCU60 通道0的中断
//-------------------------------------------------------------------------------------------------------------------
void pit_disable_interrupt(CCU6N_enum ccu6n, CCU6_CHN_enum pit_ch)
{volatile Ifx_CCU6 *module;module = IfxCcu6_getAddress((IfxCcu6_Index)ccu6n);IfxCcu6_disableInterrupt(module, pit_ch * 2 + 7);
}//-------------------------------------------------------------------------------------------------------------------
//  @brief      使能pit中断
//  @param      ccu6n           选择CCU6模块(CCU6_0、CCU6_1)
//  @param      pit_ch          选择通道(PIT_CH0、PIT_CH1)
//  @return     void
//  @note
//  Sample usage:               pit_enable_interrupt(CCU6_0, PIT_CH0);  //开启CCU60 通道0的中断
//-------------------------------------------------------------------------------------------------------------------
void pit_enable_interrupt(CCU6N_enum ccu6n, CCU6_CHN_enum pit_ch)
{volatile Ifx_CCU6 *module;module = IfxCcu6_getAddress((IfxCcu6_Index)ccu6n);IfxCcu6_enableInterrupt(module, pit_ch * 2 + 7);
}

主函数:

int core0_main(void)
{disableInterrupts();get_clk();//获取时钟频率  务必保留//用户在此处调用各种初始化函数等//使用CCU6_0模块的通道0 产生一个 100ms的周期中断pit_interrupt_ms(CCU6_0, PIT_CH0, 100);//中断函数在isr.c中 函数名称为cc60_pit_ch0_isr//中断相关的配置参数在isr_config.h内//可配置参数有 CCU6_0_CH0_INT_SERVICE 和 CCU6_0_CH0_ISR_PRIORITY//CCU6_0_CH0_INT_SERVICE 中断服务者//CCU6_0_CH0_ISR_PRIORITY 中断优先级 优先级范围1-255 越大优先级越高 与平时使用的单片机不一样//需要特备注意的是  不可以有优先级相同的中断函数 每个中断的优先级都必须是不一样的enableInterrupts();while (TRUE){//程序运行之后 PIT中断每执行一次就会打印一次//将结果通过串口打印,可以先学习printf例程,了解如何使用printf}
}

中断服务函数:

uint16 time;
IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
{enableInterrupts();//开启中断嵌套PIT_CLEAR_FLAG(CCU6_0, PIT_CH0);time++;printf("pit count: %d\n", time);
}

结果是每隔100ms将times(即发生中断的次数)输出

智能车学习日记(三)PIT_demo相关推荐

  1. 智能车学习日记【五】——————坡道和弯接坡道

    文章目录 前言 一.坡道的判别 二.直道接坡道 1.上坡 2.位于坡道上 3.下坡 三.弯接坡道 总结 前言 这里记录一下坡道的写法和思路.博主的坡道处理是纯图像处理,没有使用陀螺仪等其他硬件设备进行 ...

  2. 智能车学习日记【二】————十字和斜入十字

    智能车学习日记[二]----十字和斜入十字 文章目录 智能车学习日记[二]----十字和斜入十字 前言 一.普通十字补线 二.斜入十字 1.判断是否为斜入十字和斜入十字类型 2.找斜入十字拐点 总结 ...

  3. 智能车学习日记【四】————环岛

    智能车学习日记[四]----环岛 文章目录 智能车学习日记[四]----环岛 前言 一.环岛分状态(以左环岛为例) 二.每个状态思路 状态1和状态2: 状态3: 状态4: 状态5: 状态6: 状态7: ...

  4. 智能车学习日记【一】——让小车跑正方形赛道(摄像头图像处理赛道)

    智能车学习日记[一]--让小车跑正方形赛道 目录 开篇 舵机 赛道图像处理 图像处理 代码![在这里插入图片描述](https://img-blog.csdnimg.cn/9ec0eb76bd8941 ...

  5. 基于ROS+镭神激光雷达+amcl定位、导航的智能车学习记录

    目录 一.背景 二. 难点之避障学习 三.比赛实参 一.背景 背景 目前大火的智能车.机器人.无人驾驶技术,现基于嵌入式系统.人工智能.机器人定位与导航基础 开展了第十四届全国大学生智能汽车竞赛-室外 ...

  6. 【智能车学习】电磁车算法优化总结

    目录 前言 电感排布方案 舵机算法修正 分段式PD算法 使用函数曲线整定PD参数 电机控制 目标速度的确定 差速控制算法 特殊元素处理 环岛处理 防坡道误判 其他辅助结构 屏幕显示 按键控制与拨码开关 ...

  7. 智能车学习(十五)——K60野火2013版例程

    一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,5);//定时中断初始化 set_vector_handler(PIT0 ...

  8. 【智能车学习】电磁循迹中的基本控制算法

    文章目录 前言 采样信号滤波 什么是滤波 常见的软件滤波办法 限幅法 算术平均值滤波 归一化 什么是归一化 归一化的代码实现 PID控制 什么是PID控制 PID算法的代码实现 舵机控制 电机控制 目 ...

  9. 智能车学习笔记(摄像头组)——基础扫线

    今年第一次搞智能车,刚刚上大一,一切都是摸索着来,趁着放假了就把自己学会的东西梳理一下.第一次写的比较乱,欢迎各位一起学习(我亲爱的队友要加倍努力哈,这几天嗓子疼,不能腾讯会议给你讲了,专门给你写的) ...

最新文章

  1. SharePoint使用BCS开发你第一个应用程序(三)
  2. STC8K28步进电机ULC2003触发器
  3. 教程-Delphi调用百度地图API(XE8+WIN7)
  4. Xamarin iOS开发实战上册-----2.2.2 使用代码添加视图
  5. 孙正义太难了:去年亏125亿美元,15家投资公司要破产,二期愿景基金不得不暂停...
  6. Server被UDP流量***
  7. pcb设计单点接地示意图_答案:关于PCB 的EMC设计知识考卷
  8. CentOS7.0安装Nginx 1.7.4
  9. 常用的富文本编辑器推荐
  10. saltstack grains
  11. R2: 已解释和未解释的方差
  12. 考勤系统——代码分析datagrid
  13. java tbase_TBase备份恢复实验
  14. 《非暴力沟通》- 使人情意相通的沟通方式
  15. oceanbase安装
  16. 使用Eclipse编译运行MapReduce程序_Hadoop2.6.0_Ubuntu/CentOS
  17. gethub连接的提示
  18. 不规则图片显示(css实现多边形)
  19. VSCode常用插件和字体设置
  20. 2021年3月最新的山东大学网络认证的网址

热门文章

  1. 当前在线教育行业的市场是怎样的,如何细分,各有何特点?
  2. java三位整数倒序相加_用单向链表实现两数倒序相加(java实现)
  3. Windows性能计数器--磁盘性能分析Disk
  4. 亚马逊云科技Amazon CodePipeline上线
  5. 律师事务所管理系统-JAVA【毕业设计、快速开发、源码、开题报告】
  6. LoDop 使用 or 破解
  7. 【FBI WARNING】对拍
  8. 用D触发器搭建计数器
  9. 政府机构机房环境监控系统解决方案!
  10. CC2530 I/O 配置相关问题 (SEL,DIR,INP)