查看: 2173|回复: 2

[其他] 飞思卡尔四色套件之mdk环境建立工程与周期中断定时器

[复制链接]

该用户从未签到

3

主题

31

帖子

0

注册会员

Rank: 2

积分
141
最后登录
2015-7-29
发表于 2014-12-21 20:12:07 | 显示全部楼层 |阅读模式
最近一直在考试,没时间玩舵主给的四色板套件,今天下午终于有点闲工夫摆弄这个四色套件了
之前看群里大家都用的iar,我这里给大家提供另一种常用MDK环境下建立K64的工程
我的MDK版本是4.74,是keil4,个人觉得keil4比较成熟,喜欢尝鲜的用keil5(去当小白鼠)
建立工程
然后就可以进行编译了 @HC74JI@ZOU3G1LH~LU(TIT.jpg 注意一下,系统不自动生成.c的头文件,具体到官网上找


我之前用过K60,和这款K64同属一个系列的,寄存器大同小异,有些地方不一样而已,四色板第一块是核心板,我刚刚玩,手里没找到原理图,只好先拿核心板玩玩了,好在核心板把所有的PORT口都引出了,方便操作。
大致看了一下数据手册,感慨一下这芯片配置真强大!内置16位AD和12位的DA,256K的RAM,1M的Flash,睡眠状态下耗电5.8uA,5uS唤醒,基本上可以胜任大部分工作了。


强仔介绍了GPIO和时钟输出,我来介绍一下周期中断定时器
周期中断定时器模块是一组可以用来产生中断和触发 DMA 通道的定时器。
下面是PIT结构框图
)BII7[LEYG4%UV0D08Q$U_A.png
该模块的主要特征如下:
1、计时器可以产生 DMA 触发脉冲
2、定时器可以产生中断
3、所有的中断是可屏蔽的
4、每个定时器都有独立的溢出周期

注意一下哦:周期中断定时器模块没有外部引脚。

找了一个K60中文版PIT寄存器说明,是差不多的
预留的寄存器读取都是 0,写入无效。
RAQZOJKAAXQX5%LPOLZB3TS.png 根据芯片的配置信息,决定该芯片使用的周期中断定时器通道的通道号。

PIT 模块控制寄存器(PIT_MCR):这个寄存器控制定时器时钟是否使能和定时器是否运行在调试模式。
定时器加载值寄存器(PIT_LDVALn):这些寄存器选择定时器中断的溢出周期。
当前定时器值寄存器(PIT_CVALn):这些寄存器指示当前定时器的位置。
定时器控制寄存器(PIT_TCTRLn):这些寄存器包括了每个定时器的控制位。
定时器标志寄存器(PIT_TFLGn):这些寄存器占有 PIT 中断标志。

定时器在开启后周期性触发。定时器加载开始值,如它们 LDVAL 寄存器中描述的,然后递减计数直到为 0。然后再加载各自的开始值。每次定时器计数到0 时,将产生一个触发脉冲并且置中断标志。
所有的中断可以开启或屏蔽(通过设置 TCTRL 寄存器中断 TIE 位)。只有在前者被清除后,新中断才会产生。
如果需要,通过 CVAL 寄存器可以读取定时器的当前计数器的值。先关闭定时器,再通过 TEN 位开启定时器来重启计数周期。

LLZWE~`{`Q0@14L$G89ZEQU.png
一个正在运行的定时器的计数周期可以通过先关闭定时器,设置一个新的加载值,然后再开启定时器来修改。



所有的定时器支持中断的产生。定时器中断可以通过设置 TIE 位来使能。定时器中断标志(TIF)在相关的定时器溢出发生时被置 1,通过向 TIF 位写入 1 来清 0。



初始化设置和应用:

PIT 时钟频率可达 50MHz
定时器 1 每隔 5.12ms 产生一次中断
定时器 3 每隔 30ms 产生一次出发事件
首先,必须向 MCR 寄存器中断 MDIS 位写 0 来激活 PIT 模块。 50MHz 的时钟频率相当于每个始终周期为 20ns。定时器 1 需要每隔 5.12ms/20ns=256000 个周期触发,定时器 3 需要 30ms/20ns=1500000 个周期。LDVAL寄存器的触发值计算如下:
LDVAL 触发=(周期/时钟周期)-1
这就是说 LDVAL1 应当写入 0x0003E7FF, LDVAL3 应当写入 0x0016E35F。
通过设置 TCTRL1 寄存器中的 TIE 开启定时器 1 的中断。向 TCTRL1 寄存器的 TEN 位写 1 开始定时器。
定时器 3 仅用来触发。因此定时器 3 通过向 TCTRL3 寄存器的 TEN 位写 1,位 TIE 保持 0 来开启。
下面的示例代码和描述的设置一致:
// 开启 PIT
PIT_MCR = 0x00;
// Timer 1
PIT_LDVAL1 = 0x0003E7FF; // 256000 个周期触发
PIT_TCTRL1 = TIE; // 开启 Timer 1 中断
PIT_TCTRL1 |= TEN; // 开启 Timer 1
// Timer 3
PIT_LDVAL3 = 0x0016E35F; // 1500000 个周期触发
PIT_TCTRL3 |= TEN; // 开启 Timer 3


下周还有考试,下周再见










我知道答案 目前已有2人回答
回复

使用道具 举报

该用户从未签到

22

主题

54

帖子

0

版主

Rank: 7Rank: 7Rank: 7

积分
182
最后登录
2019-6-13
发表于 2014-12-22 08:52:15 | 显示全部楼层
加油。
回复

使用道具 举报

  • TA的每日心情
    难过
    2018-11-2 10:17
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    9

    主题

    360

    帖子

    1

    高级会员

    Rank: 4

    积分
    841
    最后登录
    2022-1-19
    发表于 2015-2-2 15:53:55 | 显示全部楼层
    楼主用过IAR开发这个吗
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 20:54 , Processed in 0.089855 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表