GPIO口中断例程_MK20DX128VLH5_K20系列

本文介绍了一个基于MK20D5微控制器的简单程序实例,其中包括GPIO端口配置、LED控制及中断设置。通过具体代码展示了如何配置不同端口用于输出信号和触发中断,并实现LED闪烁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/* cpu:MK20DX128VLH5  */

#include "MK20D5.h"
#include "system_MK20D5.h"

void LEDConfig(void);
void GPIOConfig(void);
void Delay_ms(unsigned int ms);
void InterruptGpioConfig(void);

int main(void)
{   
    LEDConfig();
    InterruptGpioConfig();  
    PTA->PSOR |= (1<<2);
    while(1)
    {
        Delay_ms(10);
        PTA->PTOR |= (1<<13);   //翻转PA13    
    }
}

void LEDConfig(void)    //PA2配置为输出,在中断例程中翻转
{
    SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK;
    PORTA->PCR[2] &= ~PORT_PCR_MUX_MASK;
    PORTA->PCR[2] |= PORT_PCR_MUX(1);
    PTA->PDDR |= (1<<2);
    PTA->PCOR |= (1<<2);
}

//================================================
//  J2_1#: PA13, 主循环中输出周期波形
//================================================
void GPIOConfig(void)
{
    SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK;
    PORTA->PCR[13] &= ~PORT_PCR_MUX_MASK;
    PORTA->PCR[13] |= PORT_PCR_MUX(1);
    PTA->PDDR |= (1<<13);
}

//================================================
//  J2_2#: PA12,配置为下降沿中断
//================================================
void InterruptGpioConfig(void)
{
    SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK;
    PORTA->PCR[12] &= ~PORT_PCR_MUX_MASK;
    PORTA->PCR[12] |= PORT_PCR_MUX(1);
    PORTA->PCR[12] &= ~PORT_PCR_IRQC_MASK;
    PORTA->PCR[12] |= PORT_PCR_IRQC(0x0A); //配置为下降沿中断
    PTA->PDDR &= ~(1<<12); 
    NVIC_EnableIRQ(PORTA_IRQn);
}

void Delay_ms(unsigned int ms)
{
    unsigned int Val;
    Val = SystemCoreClock/1000/4*ms;
    while(--Val != 0);      
}    

void PORTA_IRQHandler(void)
{
    /*进中断后先清楚中断标志位,不然,可能会出问题 */
    PORTA->ISFR |= (1<<12);
    //  PORTA->PCR[12] |= PORT_PCR_ISF_MASK;  //仿真调试显示这一句和上面一句效果一样
    PTA->PTOR |= (1<<2); //翻转PA2 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值