查看: 7986|回复: 17

[分享] 【LPC824lite】SCT做定时器

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15344
    最后登录
    1970-1-1
    发表于 2016-11-25 23:58:49 | 显示全部楼层 |阅读模式
    本帖最后由 lkl0305 于 2016-11-26 00:11 编辑

    SCT 是 NXP MCU 的一款创新型外设,其充分结合了定时器 Timer 和状态机 State Machine 的特点,操作灵活多变,可以实现一系列的硬件定时操作,如实现用于灯光控制或电机控制的 PWM 信号。

    SCT的确是个好东西,不过手册讲的不是很清楚,又没有什么简单完整的文档。学习起来比较费劲,等着听讲座了!!!

    最近也摸索这简单的学了一些,个大家分享一下。

    使用SCT控制LED0灯1秒状态改变一次,没有使用输出控制等,只使用匹配中断反转I/O。以期望一点一点的学习掌握SCT。

    看下参考手册,SCT有8个匹配/捕获寄存器、8个事件、8个状态、4个输入、6个输出。
    QQ截图20161125231140.jpg
    刚看到这个框图,没怎么看弄,有点一头雾水。
    QQ截图20161125231232.jpg

    看到相关寄存器,只能嘿嘿了
    我这次使用的给标了红色,对比了一下库函数,只提供了很少的操作函数,竟然还有很多要求寄存器操作!!!
    QQ截图20161125231323.jpg
    这里配置寄存器和控制寄存器有函数实现,限值寄存器没有库函数
    QQ截图20161125233710.jpg
    这个可以用来清除某位,还有一个置位的
    QQ截图20161125233807.jpg
    然后
    QQ截图20161125231436.jpg
    状态寄存器和匹配捕获模式寄存器也没有库函数
    再看
    QQ截图20161125233042.jpg
    事件中断使能寄存器和事件标志寄存器有函数
    QQ截图20161125233754.jpg

    QQ截图20161125233745.jpg
    匹配捕获寄存器和重载寄存器有相应函数 QQ截图20161125233732.jpg

    下面
    QQ截图20161125233108.jpg
    事件状态寄存器和控制寄存器没有函数,

    还有其他的基本都没有完成。

    下面函数实现初始化时钟等功能。
    QQ截图20161125233818.jpg

    ==========================================
    我自己写的初始化函数,实现匹配寄存器输入1秒定时。
    首先初始化时钟,复位模块
    然后配置寄存器为32位,采用系统总线时钟
    设置匹配寄存器完成定时时间设置
    设置状态0,事件0
    开启事件0触发中断
    启动SCT
    QQ截图20161125233833.jpg
    中断中LED0状态取反,
    清事件0标志
    QQ截图20161125233842.jpg
    主函数只需调用初始化SCT即可
    QQ截图20161125233900.jpg

    =====================================

    最后要说一点,这个库中怎么有很多问题?
    宏定义少括号
    QQ截图20161125233552.jpg
    宏定义标红的也有问题
    QQ截图20161125233619.jpg
    这是什么情况?

    好了,就这么多,准备学习状态机试试。



    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15344
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-26 00:11:04 | 显示全部楼层
    差点忘了最后上程序了

    1. /*
    2. ===============================================================================
    3. Name        : 006_sct_base.c
    4. Author      : $(lkl0305)
    5. Version     : 1.0
    6. Copyright   : $(copyright)
    7. Description : main definition
    8. ===============================================================================
    9. */

    10. #if defined (__USE_LPCOPEN)
    11. #if defined(NO_BOARD_LIB)
    12. #include "chip.h"
    13. #else
    14. #include "board.h"
    15. #endif
    16. #endif

    17. #include <cr_section_macros.h>

    18. // TODO: insert other include files here

    19. // TODO: insert other definitions and declarations here
    20. void SCT_Init(void)
    21. {
    22.         Chip_SCT_Init(LPC_SCT);
    23.         Chip_SCT_Config(LPC_SCT, SCT_CONFIG_32BIT_COUNTER | SCT_CONFIG_CLKMODE_BUSCLK);
    24.         LPC_SCT->STATE_U = 0x00000000;
    25.         LPC_SCT->REGMODE_U = 0x00000000;
    26.         Chip_SCT_SetMatchCount(LPC_SCT, SCT_MATCH_0, SystemCoreClock / 1);
    27.         Chip_SCT_SetMatchReload(LPC_SCT, SCT_MATCH_0, SystemCoreClock / 1);

    28.         LPC_SCT->EV[0].CTRL = (0 << 0) | (1 << 12);
    29.         LPC_SCT->EV[0].STATE = 0x00000001;
    30.         LPC_SCT->LIMIT_U = 0x00000001;

    31.         Chip_SCT_EnableEventInt(LPC_SCT, SCT_EVT_0);
    32.         NVIC_EnableIRQ(SCT_IRQn);

    33.         Chip_SCT_ClearControl(LPC_SCT, SCT_CTRL_HALT_L);
    34. }

    35. void SCT_IRQHandler(void)
    36. {
    37.         if (LPC_SCT->EVFLAG & SCT_EVT_0)
    38.         {
    39.                 Board_LED_Toggle(0);
    40.                 Chip_SCT_ClearEventFlag(LPC_SCT, SCT_EVT_0);
    41.         }
    42. }

    43. int main(void) {

    44. #if defined (__USE_LPCOPEN)
    45.     // Read clock settings and update SystemCoreClock variable
    46.     SystemCoreClockUpdate();
    47. #if !defined(NO_BOARD_LIB)
    48.     // Set up and initialize all required blocks and
    49.     // functions related to the board hardware
    50.     Board_Init();
    51.     // Set the LED to the state of "On"
    52.     Board_LED_Set(0, true);
    53. #endif
    54. #endif

    55.     // TODO: insert code here

    56.     SCT_Init();

    57.     // Force the counter to be placed into memory
    58.     volatile static int i = 0 ;
    59.     // Enter an infinite loop, just incrementing a counter
    60.     while(1) {
    61.         i++ ;
    62.     }
    63.     return 0 ;
    64. }
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-23 10:20
  • 签到天数: 45 天

    [LV.5]常住居民I

    4

    主题

    689

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1346
    最后登录
    2019-2-13
    发表于 2016-11-26 10:24:42 | 显示全部楼层
    学习一下
    dfdfdfdfdfdfdfd dsfa222
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-24 08:30
  • 签到天数: 50 天

    [LV.5]常住居民I

    22

    主题

    817

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1713
    最后登录
    2019-12-7
    发表于 2016-11-26 10:25:13 | 显示全部楼层
    不错哦     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1651
    最后登录
    2020-10-13
    发表于 2016-11-26 12:32:33 | 显示全部楼层
    你好!我这两天也在学习定时器这块。我看介绍说824的定时器有SCT,SYStick,MRT这几个,我想实现简单的秒表记时功能,应该用哪个部分。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1651
    最后登录
    2020-10-13
    发表于 2016-11-26 12:33:45 | 显示全部楼层
    我看了一下SCT好复杂的样子,一整天都没搞出个所以然
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-1-24 08:47
  • 签到天数: 49 天

    [LV.5]常住居民I

    0

    主题

    524

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2017-4-19
    发表于 2016-11-26 12:54:08 | 显示全部楼层
    谢谢分析                           
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15344
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-26 21:31:23 | 显示全部楼层

    嘿嘿,欢迎交流
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15344
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-26 21:31:31 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15344
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-27 23:40:41 | 显示全部楼层
    邹姆斯特朗 发表于 2016-11-26 12:33
    我看了一下SCT好复杂的样子,一整天都没搞出个所以然

    sct复杂一些,其它的简单
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-7 19:27 , Processed in 0.152789 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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