当前位置:首页 > 单片机 > 单片机
[导读]是两个按键分别控制LED灯的亮和灭。程序很简单,其中LED.C在这里不粘贴了,只把主程序列出来。// 包含必要的头文件 #include "LED.H" #include #include #include #include #include #include #includ

是两个按键分别控制LED灯的亮和灭。程序很简单,其中LED.C在这里不粘贴了,只把主程序列出来。

// 包含必要的头文件
#include "LED.H"
#include
#include
#include
#include
#include
#include
#include
#include


// 将较长的标识符定义成较短的形式
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define SysCtlPeriDisable SysCtlPeripheralDisable
#define GPIOPinTypeIn GPIOPinTypeGPIOInput
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
#define GPIOPinTypeOD GPIOPinTypeGPIOOutputOD


// 定义KEY
#define KEY_PERIPH SYSCTL_PERIPH_GPIOG
#define KEY_PORT GPIO_PORTG_BASE
#define KEY_PIN GPIO_PIN_5


// 防止JTAG失效
void JTAG_Wait(void)
{
SysCtlPeriEnable(KEY_PERIPH); // 使能KEY所在的GPIO端口
GPIOPinTypeIn(KEY_PORT , KEY_PIN); // 设置KEY所在管脚为输入

if ( GPIOPinRead(KEY_PORT , KEY_PIN) == 0x00 ) // 如果复位时按下KEY,则进入
{
for (;;); // 死循环,以等待JTAG连接
}

SysCtlPeriDisable(KEY_PERIPH); // 禁止KEY所在的GPIO端口
}


// GPIOD中断初始化
void GPIOD_IntInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD); // 使能GPIOD端口
GPIOPinTypeIn(GPIO_PORTD_BASE , GPIO_PIN_1); // 设置PD1管脚为输入

GPIOIntTypeSet(GPIO_PORTD_BASE , // 设置PD1的中断类型
GPIO_PIN_1 ,
GPIO_LOW_LEVEL); //低电平触发

GPIOPinIntEnable(GPIO_PORTD_BASE , GPIO_PIN_1); // 使能PD1管脚中断
IntEnable(INT_GPIOD); // 使能GPIOD端口中断
}


// GPIOG中断初始化
void GPIOG_IntInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOG); // 使能GPIOG端口
GPIOPinTypeIn(GPIO_PORTG_BASE , GPIO_PIN_5); // 设置PG5管脚为输入

GPIOIntTypeSet(GPIO_PORTG_BASE , // 设置PG5的中断类型
GPIO_PIN_5 ,
GPIO_LOW_LEVEL); //低电平触发

GPIOPinIntEnable(GPIO_PORTG_BASE , GPIO_PIN_5); // 使能PG5管脚中断
IntEnable(INT_GPIOG); // 使能GPIOG端口中断
}


// 系统初始化
void SystemInit(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_50V); // 设置LDO输出电压

SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置,采用主振荡器
SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ |
SYSCTL_SYSDIV_1);

/*
SysCtlLDOSet(SYSCTL_LDO_2_75V); // 配置PLL前须将LDO电压设置为2.75V

SysCtlClockSet(SYSCTL_USE_PLL | // 系统时钟设置,采用PLL
SYSCTL_OSC_MAIN | // 主振荡器
SYSCTL_XTAL_6MHZ | // 外接6MHz晶振
SYSCTL_SYSDIV_10); // 分频结果为20MHz
*/

LED_Init(LED1); // 初始化LED1和LED2
LED_On(LED1); // 点亮LED1

GPIOD_IntInit(); // GPIOD中断初始化
GPIOG_IntInit(); // GPIOG中断初始化

IntMasterEnable(); // 使能处理器中断(开全局中断)
}


// 主函数(程序入口)
int main(void)
{
JTAG_Wait(); // 防止JTAG失效,重要!

SystemInit(); // 系统初始化

for (;;)
{
}
}


// GPIOD的中断服务函数
void GPIO_Port_D_ISR(void)
{
unsigned long ulStatus;

ulStatus = GPIOPinIntStatus(GPIO_PORTD_BASE , true); // 读取中断状态
GPIOPinIntClear(GPIO_PORTD_BASE , ulStatus); // 清除中断状态,重要(必须软清楚)

if ( ulStatus & GPIO_PIN_1 ) // 如果PD1的中断状态有效
{
LED_On(LED1); // 点亮LED1
}

// 如果有GPIOD端口其它管脚的中断要处理,请并列多个if语句
}


// GPIOG的中断服务函数
void GPIO_Port_G_ISR(void)
{
unsigned long ulStatus;

ulStatus = GPIOPinIntStatus(GPIO_PORTG_BASE , true); // 读取中断状态
GPIOPinIntClear(GPIO_PORTG_BASE , ulStatus); // 清除中断状态,重要

if ( ulStatus & GPIO_PIN_5 ) // 如果PG5的中断状态有效
{
LED_Off(LED1); // 熄灭LED1
}

// 如果有GPIOG端口其它管脚的中断要处理,请并列多个if语句
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

单片机将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对它的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 单片机 中断 boot

在嵌入式系统的开发中,中断机制扮演着至关重要的角色。它允许系统在执行正常程序流程时,响应外部或内部事件,从而确保系统能够及时响应并处理紧急事件。本文将深入探讨嵌入式系统中中断的概念、如何在系统中设置和处理多个中断的优先级...

关键字: 嵌入式系统 中断

中断机制在单片机及嵌入式系统中是重中之重,我们必须深入理解。首先我们要明白一点:CPU执行指令代码,并非一直顺序地逐条执行,而是可能突然跳到某段代码上去的。因为这段代码的优先级更高,或者说它更加紧迫,CPU必须暂时放下手...

关键字: 中断 单片机 嵌入式系统

PIC单片机是基于RISC系统结构的单片机,最初的设计是支持PDP(编程数据处理器)计算机。大量的操作可以用来控制外围设备。PIC单片机比微控制器具有更快的程序执行能力。它是由微芯片技术公司于1889年发明的,是一种8位...

关键字: PIC单片机 定时器 中断

STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等。还支持ISP下载,不用编程器,只要一个MAX2...

关键字: 单片机 看门狗 中断

什么是PIC中断程序呢?形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程...

关键字: PIC 中断 标志位

MCS—51系列单片机内部只需两个外部接中断连源输入端,当外部接连源多于两个时,就必须进行拓宽,下面介绍几种简略的拓宽办法:

关键字: 单片机 软件 中断

最近在浏览星球主题的时候,发现一位球友打卡中断了,就去关心了一下他(瞧我这该死的责任心❤️),结果被他反手就问了下面这个问题。

关键字: 中断 Spring Boot 实战项目

实质上是加一的计数器。外部脉冲让他不断加一,当计数器溢出时,计数器的溢出相应的中断标志位置1,并向CPU发出中断请求。如果定时器/计数器工作为定时模式,则表示时间以到;如果工作于计数模式,则表示计数器、则表示计数值已满。

关键字: 周期 中断

中断的分类和区别

关键字: 轮询 中断
关闭