我正在将共阴极七段显示屏与 Tiva C 系列 TM4C123GXL Tiva Launch Pad 连接、以在显示屏上显示中断优先级编号。 按下开关 SW2 (GPIO PF_0)时、它将指示按下1和 SW1 (GPIO_PF_4)、它将指示每个按钮持续5秒。 当没有中断显示时、将指示0。 在本任务中、我使用 GPIO 端口 C 和 D 将七段显示器与 Launchpad 连接。 下面给出了引脚连接。
(PC4 = A、PC5 = B、PC6 = C、PC7 = D、PD0 = E、PD1 = F、PD=G)
我已经为此编写了一些代码行。 此代码将在微控制器上生成中断、但会执行尾更改任务。 我必须在此操作中分配优先级。 当我按下 SW1时、它将立即显示2当我按下 SW1时、显示屏将数字从2更改为1。 完成1后、它将继续显示2并完成5秒显示。
我必须分配此类优先级,但无法使用 IntPrioritySet 设置此优先级。 是否有其他方法可以在 GPIO 端口引脚上设置优先级?
谢谢你
我编写了该代码以更改尾端。
#include
#include
#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
void switch_interrupt (void);
int main (空)
{
SysCtlClockSet (SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOF))
{}
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOD))
{}
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOC))
{}
GPIOPinTypeGPIOOutput (GPIO_PORTC_BASE、GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2);
GPIOIntRegister (GPIO_PORTF_BASE、SWITCH_INTERRUPT);
HWREG (GPIO_PORTF_BASE + 0x520u)= 0x4C4F434BU;
HWREG (GPIO_PORTF_BASE + 0x524u)= 0xFFu;
GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、(GPIO_PIN_0 | GPIO_PIN_4));
GPIOPadConfigSet (GPIO_PORTF_BASE、(GPIO_PIN_0 | GPIO_PIN_4)、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);
GPIOIntTypeSet (GPIO_PORTF_BASE、(GPIO_PIN_0 | GPIO_PIN_4)、GPIO_FALLING_EDGE);
IntEnable (INT_GPIOF);
GPIOIntEnable (GPIO_PORTF_BASE、GPIO_PIN_0|GPIO_PIN_4);
IntMasterEnable();
while (1)
{
GPIOPinWrite (GPIO_PORTC_BASE、GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7、0XF0);/0
GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2、0x03);
SysCtlDelay (6666666);
}
}
void switch_interrupt ()
{
uint32_t interrupt_status;
INTERRUPT_STATUS = GPIOIntStatus (GPIO_PORTF_BASE、1U);
if (interrupt_status =GPIO_PIN_0)
{
GPIOPinWrite (GPIO_PORTC_BASE、GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7、0x60);//1.
GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2、0);
SysCtlDelay (6666666);
}
否则、如果(INTERRUPT_STATUS = GPIO_PIN_4)
{
GPIOPinWrite (GPIO_PORTC_BASE、GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7、0XB0);/2
GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2、0x05);
SysCtlDelay (6666666);
}
GPIOIntClear (GPIO_PORTF_BASE、INTERRUPT_STATUS);
}