首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用定期中断定时器切换LED?

如何使用定期中断定时器切换LED?
EN

Stack Overflow用户
提问于 2021-01-13 21:22:00
回答 1查看 202关注 0票数 0

我是一个新的ARM编程.I使用72 MCU时钟的K20 MK20DX256单片机,每1秒切换一次发光二极管与定期中断定时器0。代码编译良好,但发光二极管不切换.I发现配置计时器和发光二极管一起不能工作,而发光二极管单独工作,我在keil Uvision中编写了以下代码

代码语言:javascript
复制
#include "MK20D7.h"
#include <stdio.h>

int main(void)
{
    SystemInit();
    NVIC_EnableIRQ(PIT0_IRQn);                      //Enable Timer Interrupts
    //Configuring Timer 1
    PIT->MCR=0x00;                              
     
    PIT->CHANNEL[0].LDVAL=13888;
    
    PIT->CHANNEL[0].TCTRL=0x3;
    
    //Configure LED
    SIM->SCGC5   = (1UL << 11);        /* Enable Clock to Port C */     
    PORTC->PCR[5] = (1UL <<  8);        /* Pin is GPIO */
    PTC->PDDR = (1u<<5);
    PTC->PSOR = (1u<<5); //Set PTC5 = 1, turns LED on           
    while(1){
        
        if(PIT->CHANNEL[0].TFLG ==1)
        {
        
        PIT->CHANNEL[0].TFLG =0;
        PIT->CHANNEL[0].LDVAL=13888;    
            if(PTC->PSOR!=(1u<<5))
            {
                
                PTC->PSOR = (1u<<5); //Set PTC5 = 1, turns LED on           
            }
            else
            {
                PTC->PCOR = (1u<<5); //Set PTC5 = 1, turns LED off  
                
            }
        }
    
    }


}

有人能帮我找出这段代码的问题所在吗?我发现在调试enter image description here的过程中,没有一个寄存器改变它们的值

EN

回答 1

Stack Overflow用户

发布于 2021-01-13 21:59:26

有几个选择。

首先,您正在从PIT请求中断,但尚未安装中断处理程序。您确定Keil安装的默认中断处理程序没有副作用,例如停止或重新启动吗?

代码语言:javascript
复制
PIT->CHANNEL[0].TCTRL=0x3;

其次,也是更重要的是,您正在尝试通过向其写入0来清除计时器中断标志。数据手册上说你需要写一个1:

代码语言:javascript
复制
PIT->CHANNEL[0].TFLG =0;

其结果是,在第一次中断触发后,标志将永远保持不变,您将通过向其中写入13888来永远重新启动PIT。它再也没有机会倒计时了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65702846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档