MSP430学习笔记(一)丨GPIO和GPIO中断

本文是关于MSP430F5529单片机的学习笔记,重点介绍了GPIO的基本概念和库函数,包括配置与操作。同时详细讲解了MSP430的中断系统,特别是GPIO中断,包括中断类型和常用库函数。文中提供了一个LED闪烁及按键中断响应的示例代码。
摘要由CSDN通过智能技术生成

​  笔者学习采用单片机型号为MSP430F5529,使用MSP-EXP430F5529LP开发板。


一、MSP430的GPIO

1.1 MSP430的GPIO简介

1.2 MSP430的GPIO库函数

​  GPIO配置与操作:

extern void GPIO_setAsOutputPin(uint8_t selectedPort, uint16_t selectedPins);   	// 设置为GPIO输出
extern void GPIO_setAsInputPin(uint8_t selectedPort, uint16_t selectedPins);		// 设置为GPIO输入

extern void GPIO_setOutputHighOnPin(uint8_t selectedPort, uint16_t selectedPins);	// 高电位输出
extern void GPIO_setOutputLowOnPin(uint8_t selectedPort, uint16_t selectedPins);	// 低电位输出

extern void GPIO_toggleOutputOnPin(uint8_t selectedPort, uint16_t selectedPins);	// 翻转电位

extern void GPIO_setAsInputPinWithPullDownResistor(uint8_t selectedPort, uint16_t selectedPins)	// 下拉电阻输入模式
extern void GPIO_setAsInputPinWithPullUpResistor(uint8_t selectedPort, uint16_t selectedPins);	// 上拉电阻输入模式

extern void GPIO_setAsPeripheralModuleFunctionOutputPin(uint8_t selectedPort, uint16_t selectedPins);	// 配置输出外围模块(例如设置PWM)
extern void GPIO_setAsPeripheralModuleFunctionInputPin (uint8_t selectedPort, uint16_t selectedPins);	// 配置输入外围模块

extern uint8_t GPIO_getInputPinValue(uint8_t selectedPort, uint16_t selectedPins);	// 获取引脚上的输入值

​  GPIO中断配置与操作:

extern void GPIO_enableInterrupt(uint8_t selectedPort, uint16_t selectedPins);		// 启用引脚上的中断
extern void GPIO_disableInterrupt(uint8_t selectedPort, uint16_t selectedPins);		// 禁用中断

extern uint16_t GPIO_getInterruptStatus(uint8_t selectedPort, uint16_t selectedPins);	// 获取引脚中断状态

extern void GPIO_clearInterrupt(uint8_t selectedPort, uint16_t selectedPins);		// 清除中断标志
extern void GPIO_selectInterruptEdge(uint8_t selectedPort, uint16_t selectedPins, uint8_t edgeSelect);		// 设置一个中断标志为转换边缘

extern void GPIO_setDriveStrength(uint8_t selectedPort, uint16_t selectedPins, uint8_t driveStrength);		//设置端口的驱动器强度

二、MSP430的中断系统和GPIO中断

2.1 MSP430的中断系统

  中断分为可屏蔽中断和不可屏蔽中断。MSP430的中断系统包含以下部分:

  • GPIO中断
  • 定时器中断
  • 串口中断
  • 外部中断
  • ADC转换中断
  • 看门狗中断
  • 捕获比较中断

  

2.2 常用库函数

​  GPIO中断配置与操作(与上文相同):

extern void GPIO_enableInterrupt(uint8_t selectedPort, uint16_t selectedPins);		// 启用引脚上的中断
extern void GPIO_disableInterrupt(uint8_t selectedPort, uint16_t selectedPins);		// 禁用中断

extern uint16_t GPIO_getInterruptStatus(uint8_t selectedPort, uint16_t selectedPins);	// 获取引脚中断状态

extern void GPIO_clearInterrupt(uint8_t selectedPort, uint16_t selectedPins);		// 清除中断标志
extern void GPIO_selectInterruptEdge(uint8_t selectedPort, uint16_t selectedPins, uint8_t edgeSelect);		// 设置一个中断标志为转换边缘

extern void GPIO_setDriveStrength(uint8_t selectedPort, uint16_t selectedPins, uint8_t driveStrength);		//设置端口的驱动器强度

三、使用示例

​  下面的程序实现LED1以1Hz的频率闪烁,按下S2可以更改LED2的亮灭状态(按下更改亮灭状态,无消抖)。

#include <driverlib.h>

void Delay_ms(int x_ms)
{
    while (x_ms--)
    {
        __delay_cycles(1000);
    }
}

/**
 * main.c
 */
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer

    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);  // 设置P1.1为上拉输入模式
    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
    GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN7);                   // 设置P4.7为输出模式

    _EINT();    // 开启全局中断使能
    GPIO_selectInterruptEdge(GPIO_PORT_P1, GPIO_PIN1, GPIO_HIGH_TO_LOW_TRANSITION);
    GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);  // 允许P1.1引脚中断

    while (1)
    {
        GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN0);  // 点亮P1.0
        Delay_ms(500);
        GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);  // 熄灭P1.0
        Delay_ms(500);
    }
}

#pragma vector = PORT1_VECTOR;
__interrupt void Port1_interrupt_process(void)
{
    _DINT();    // 关闭全局中断
    if (GPIO_getInterruptStatus(GPIO_PORT_P1, GPIO_PIN1) == GPIO_PIN1);
    {
        GPIO_toggleOutputOnPin(GPIO_PORT_P4, GPIO_PIN7);
    }
    GPIO_clearInterrupt(GPIO_PORT_P1, GPIO_PIN1);
    _EINT();    // 开启全局中断
}



  持续更新完善中……


  原创笔记,码字不易,欢迎点赞,收藏~ 如有谬误敬请在评论区不吝告知,感激不尽!博主将持续更新有关嵌入式开发、机器学习方面的学习笔记~

很高兴您对MSP430F149感兴趣!MSP430F149是德州仪器(Texas Instruments)推出的一款低功耗、高性能的16位微控制器。以下是一些MSP430F149的学习笔记: 1. 架构和特性:MSP430F149采用了精简指令集(RISC)架构,具有低功耗特性和较高的运算性能。它具有16位数据总线和16位地址总线,支持多种外设和通信接口。 2. 开发环境:在开始学习MSP430F149之前,您需要安装MSP430开发环境。您可以使用MSP430 LaunchPad开发板,以及TI的MSP430编译器和调试工具。 3. 编程语言:MSP430F149可以使用C语言或汇编语言进行编程。C语言是更常用的编程语言,可以提高开发效率和可移植性。 4. GPIO控制:MSP430F149具有多个通用输入输出引脚(GPIO),可以用于连接外部设备或传感器。您可以使用编程方法来控制这些引脚的输入和输出。 5. 定时器和计数器:MSP430F149内置了多个定时器和计数器模块,用于定时、计数和产生脉冲。您可以使用这些模块来实现定时任务和测量时间间隔。 6. 串口通信:MSP430F149支持多种串行通信接口,如UART、SPI和I2C。您可以使用这些接口与其他设备进行数据交换和通信。 7. 中断处理:MSP430F149具有强大的中断系统,可以响应外部事件和优先级处理。您可以使用中断来处理实时事件和提高系统的响应性能。 这些是关于MSP430F149的一些学习笔记,希望对您有所帮助!如果您有任何具体的问题,欢迎继续提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Include everything

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值