查看: 4284|回复: 7

[分享] 【LPC824lite】SCT状态机输出

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

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16702
    最后登录
    1970-1-1
    发表于 2016-11-26 23:39:30 | 显示全部楼层 |阅读模式
    本帖最后由 lkl0305 于 2016-11-26 23:40 编辑

    STC的最大好处可以使用状态机来完成一些复杂应用,当然新东西,经过持续几天的学习,我也刚刚有点心得,给大家分享一下。
    之前分享过一篇使用SCT中断实现定时方波输出:【LPC824lite】SCT做定时器感兴趣的可以看一看,不过中断的话会占用CPU时间,而在LPC824中SCT有多个输出可实现自动翻转I/O。
    在状态机中,需要注意几个名词:
    状态   
    当前状态和目标状态
    事件
    事件的触发信号
    事件触发时伴随的动作

    我这里准备实现使用SCT触发实现P0.7输出周期1S的方波,驱动LED1灯亮灭反转,下面是状态机的简单分析
    QQ截图20161126231404.jpg

    还是先看一看相关文档:
    SCT有6个输出
    QQ截图20161126225044.jpg
    由于我们只需要驱动一个LED,所以只需要一个输出,这里选择OUT0
    QQ截图20161126225130.jpg
    每个输出驱动有2个状态,置1和清0
    下面的寄存器决定了那个事件发生时会触发OUT0置1动作
    QQ截图20161126225236.jpg
    下面的寄存器决定了那个事件发生时会触发OUT0清0动作
    QQ截图20161126225249.jpg

    QQ截图20161126225308.jpg
    下面是SCT的事件状态寄存器,感觉其实就是当前状态
    QQ截图20161126225504.jpg
    QQ截图20161126225540.jpg
    下面是事件控制寄存器,该寄存器的部分说明
    这个决定了那个改时间与那个匹配寄存器关联

    QQ截图20161126225639.jpg
    下面决定了如何触发该事件、以及动作、还有目的状态
    QQ截图20161126225716.jpg
    其它寄存器就不一一说明了
    来看一下开发板的LED灯链接P0.7引脚
    QQ截图20161126225907.jpg
    可以看到默认与ADC0连接
    QQ截图20161126225945.jpg
    需要使用开关矩阵链接到STC的OUT0
    QQ截图20161126230042.jpg

    下面是我的测试程序
    SCT初始化,与之前的设置差不多,程序仔细分析一下对比参考手册
    QQ截图20161126231442.jpg
    在主函数中只需要调用初始化函数即可
    QQ截图20161126231453.jpg
    系统运行后,可以看到LED0每1秒状态改变一次。

    完整程序:
    1. /*
    2. ===============================================================================
    3. Name        : 007_lpc_sct_state_blinky.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.         Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);
    25.         Chip_SWM_DisableFixedPin(SWM_FIXED_ADC0);
    26.         Chip_SWM_MovablePinAssign(SWM_SCT_OUT0_O, 7);
    27.         Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

    28.         LPC_SCT->STATE_U = 0x00000000;
    29.         LPC_SCT->REGMODE_U = 0x00000000;

    30.         Chip_SCT_SetMatchCount(LPC_SCT, SCT_MATCH_0, SystemCoreClock / 1);
    31.         Chip_SCT_SetMatchReload(LPC_SCT, SCT_MATCH_0, SystemCoreClock / 1);

    32.         LPC_SCT->EV[0].STATE = (1 << 0);
    33.         LPC_SCT->EV[0].CTRL = (0 << 0) | (1 << 12) | (1 << 14) | (1 << 15);
    34.         LPC_SCT->OUT[0].CLR = (1 << 0);
    35.         LPC_SCT->LIMIT_U |= (1 << 0);

    36.         LPC_SCT->EV[1].STATE = (1 << 1);
    37.         LPC_SCT->EV[1].CTRL = (0 << 0) | (1 << 12) | (1 << 14) | (0 << 15);
    38.         LPC_SCT->OUT[0].SET = (1 << 1);
    39.         LPC_SCT->LIMIT_U |= (1 << 1);

    40.         Chip_SCT_ClearControl(LPC_SCT, SCT_CTRL_HALT_L);
    41. }


    42. int main(void) {

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

    54.     // TODO: insert code here
    55.     SCT_Init();
    56.     // Force the counter to be placed into memory
    57.     volatile static int i = 0 ;
    58.     // Enter an infinite loop, just incrementing a counter
    59.     while(1) {
    60.         i++ ;
    61.     }
    62.     return 0 ;
    63. }
    复制代码





    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-29 08:54
  • 签到天数: 2992 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    45

    主题

    5548

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    12035
    最后登录
    2025-5-29
    发表于 2016-11-27 00:13:06 | 显示全部楼层
    赞一个   
    签到签到
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

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

    多谢支持
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-7-5 15:45
  • 签到天数: 664 天

    连续签到: 1 天

    [LV.9]以坛为家II

    42

    主题

    1594

    帖子

    19

    金牌会员

    Rank: 6Rank: 6

    积分
    5618
    最后登录
    2021-12-22
    发表于 2016-11-28 10:51:14 | 显示全部楼层
    SCT是个令人叫绝的功能!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-19 09:35
  • 签到天数: 39 天

    连续签到: 1 天

    [LV.5]常住居民I

    1

    主题

    290

    帖子

    0

    高级会员

    Rank: 4

    积分
    846
    最后登录
    2020-8-23
    发表于 2016-11-28 11:33:21 | 显示全部楼层
    厉害,赞一个
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16702
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-28 13:09:23 | 显示全部楼层
    okwh 发表于 2016-11-28 10:51
    SCT是个令人叫绝的功能!

    也刚刚在学习
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16702
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-28 13:09:28 | 显示全部楼层
    okwh 发表于 2016-11-28 10:51
    SCT是个令人叫绝的功能!

    也刚刚在学习
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16702
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-28 13:09:56 | 显示全部楼层

    多谢支持,也初学
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 16:44 , Processed in 0.110005 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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