查看: 2307|回复: 2

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

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

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15343
    最后登录
    1970-1-1
    发表于 2016-11-30 22:48:52 | 显示全部楼层 |阅读模式
    继续学习状态可配置定时器SCT。

    之前学习了基本的状态变换实现控制LED闪烁,可见【LPC824lite】SCT状态机输出,虽然不占用CPU,但是闪烁时需要用2个状态,2个事件。
    其实可以只是用一个事件就可以实现,这时就需要冲突解决寄存器的控制。
    在参考手册中有相关寄存器的描述,通过下面描述我们可以看到,可对一个事件设置输出OUT的SET和CLR动作,这样当事件被触发时,必然会冲突,该SET还是CLR呢,这是就由冲突解决寄存器来完成,可以设置SET或CLR起作用,当然也可以设置为TOGGLE,这时就可以自动的将SET和CLR事件交替执行实现引脚翻转了。
    QQ截图20161130222733.jpg

    QQ截图20161130222800.jpg

    发现库中有这个函数,有相应的说明
    QQ截图20161130222603.jpg
    其实到目前为止,感觉LPC824的这个库基本上是可有可无的,因为SCT部分有很多直接寄存器操作了!

    开发板的LED1接到P0.7
    QQ截图20161126225907.jpg
    开关矩阵将SCT的OUT0连接到P0.7上
    QQ截图20161126225945.jpg

    QQ截图20161126230042.jpg

    SCT的初始化函数
    QQ截图20161130222629.jpg
    在主函数中直接调用初始化函数,之后闪烁由系统自动完成
    QQ截图20161130222645.jpg

    QQ截图20161130224612.jpg

    完整程序:
    1. /*
    2. ===============================================================================
    3. Name        : 011_lpc824_sct_conflict.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);
    34.         LPC_SCT->OUT[0].CLR = (1 << 0);
    35.         LPC_SCT->OUT[0].SET = (1 << 0);
    36.         Chip_SCT_SetConflictResolution(LPC_SCT, 0, SCT_RES_TOGGLE_OUTPUT);
    37.         LPC_SCT->LIMIT_U |= (1 << 0);

    38.         Chip_SCT_ClearControl(LPC_SCT, SCT_CTRL_HALT_L);
    39. }

    40. int main(void) {

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

    52.     // TODO: insert code here
    53.     SCT_Init();

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


    文件下载: 011_lpc824_sct_conflict.rar (996 Bytes, 下载次数: 14)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-29 11:48
  • 签到天数: 822 天

    [LV.10]以坛为家III

    71

    主题

    2452

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5531
    最后登录
    2024-5-1
    发表于 2016-12-1 06:12:42 | 显示全部楼层
    楼主分析的很透彻,我昨天研究了一下,这个sct功能挺强大的,4个输入,6个输出,8个事件/状态
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15343
    最后登录
    1970-1-1
     楼主| 发表于 2016-12-1 07:58:05 | 显示全部楼层
    leo121_3006061 发表于 2016-12-1 06:12
    楼主分析的很透彻,我昨天研究了一下,这个sct功能挺强大的,4个输入,6个输出,8个事件/状态 ...

    的确很强大,还在慢慢学习
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-7 16:21 , Processed in 0.110272 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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