Tivec 마이크로컨트롤러 기본 연습 1.3 소스(인터럽트 실현 버튼)
7213 단어 Tivac 마이크로컨트롤러
시범 코드는 가장 좋은 코드가 아니라 이해하기 쉬운 측면에서 가장 잘 이해할 수 있는 코드를 얻는 것이다.
//******************************************************************************//기초 연습 1.3: 키를 눌러 LED 램프의 밝기를 제어////////이 루틴은 이전 루틴을 바탕으로 키 인식을 중단하는 방식으로 수행한다.프로세스 설명://1.하드웨어 회로에서 알 수 있듯이 버튼을 누르지 않았을 때, 발은 고전평이다.버튼을 눌렀을 때 접지하여 발을 당기는 것은 저전평이다;//사용자가 버튼을 눌렀을 때, 고전평에서 저전평으로의 변화는 하강변이 발생한다.버튼의 가이드를 입력으로 설정하여, 연결을 끊을 수 있도록 합니다.// 2. 트랙을 GPIO, 출력으로 설정합니다.높은 레벨 및 낮은 레벨 출력을 통해 LED의 밝기와 끄기를 제어합니다.// 3. 간단하게 하려면 GPIO 중단 시 LED 램프를 직접 조작할 수 있습니다.후속의 편의를 위해 버튼 값을 저장하는 방식을 채택한다.// 4. K1->D2, K2->D3, K3->D4//하드웨어 설명://LED2(파란색) - PF0//LED3(녹색) - PA4//LED4(빨간색) - PD6//K1 - PD7//K2 - PF4//K3 - PA3//K4 - PA2//K4 - PA2//PFF//주의사항://디딤발돋움과 PD7의 비교는 기본값입니다.다시 프로그래밍을 하려면 먼저 잠금 해제//팁://SysConfig 도구를 통해 발을 끄는 초기 설정을 해야 합니다. 이런 요소를 고려할 필요가 없습니다.//SysConfig 사용 참조 링크:https://www.bilibili.com/read/cv6258251//////*****************************************************************************
#include
#include
#include "inc/hw_gpio.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
// , ; 0000 x x x x
// 4 , , 1;
#define KEY_VALUE_KEY1 0x01
#define KEY_VALUE_KEY2 0x02
#define KEY_VALUE_KEY3 0x04
#define KEY_VALUE_KEY4 0x08
#define KEY_VALUE_NOKEY 0x00
//
uint8_t key_value; //
//*****************************************************************************
//
// --GPIO
//
// Key1 -- PD7
// Key2 -- PF4
// Key3 -- PA3
// Key4 -- PA2
// , 。
// LED, 。
// , 。
//*****************************************************************************
void Key1IntHandler()
{
static uint32_t ui32Status;
// ,
ui32Status = GPIOIntStatus(GPIO_PORTD_BASE,true);
//
GPIOIntClear(GPIO_PORTD_BASE,ui32Status);
//
if(ui32Status & GPIO_INT_PIN_7)
{
key_value |= KEY_VALUE_KEY1;
}
}
void Key2IntHandler()
{
static uint32_t ui32Status;
// ,
ui32Status = GPIOIntStatus(GPIO_PORTF_BASE,true);
//
GPIOIntClear(GPIO_PORTF_BASE,ui32Status);
//
if(ui32Status & GPIO_INT_PIN_4)
{
key_value |= KEY_VALUE_KEY2;
}
}
void Key3and4IntHandler()
{
static uint32_t ui32Status;
// ,
ui32Status = GPIOIntStatus(GPIO_PORTA_BASE,true);
//
GPIOIntClear(GPIO_PORTA_BASE,ui32Status);
//
if(ui32Status & GPIO_INT_PIN_3)
{
key_value |= KEY_VALUE_KEY3;
}
if(ui32Status & GPIO_INT_PIN_2)
{
key_value |= KEY_VALUE_KEY4;
}
}
void main(void)
{
// LED .
//0 ,1 . .
uint8_t led2,led3,led4;
//----------- -------------
// PA , Ready
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOA))
{
}
// PD , Ready
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOD))
{
}
// PF , Ready
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF))
{
}
//----------- -------------
//PA4-> LED, PA4 GPIO,
GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_4);
//PD6-> LED, PD6 GPIO,
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_6);
//PF0-> LED, PF0 GPIO,
HWREG(GPIO_PORTF_BASE+GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTF_BASE+GPIO_O_CR) |= GPIO_PIN_0;
HWREG(GPIO_PORTF_BASE+GPIO_O_LOCK) = 0x0;
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0);
//PD7->K1, PD7 GPIO,
HWREG(GPIO_PORTD_BASE+GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTD_BASE+GPIO_O_CR) |= GPIO_PIN_7;
HWREG(GPIO_PORTD_BASE+GPIO_O_LOCK) = 0x0;
GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_7);
//PF4->K2, PF4 GPIO,
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_4);
//PA3->K3, PA3 GPIO,
GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_3);
//PA2->K4, PA2 GPIO,
GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_2);
//--------- ---------
// , ,
// Key1 -- PD7
GPIOIntTypeSet(GPIO_PORTD_BASE,GPIO_PIN_7,GPIO_FALLING_EDGE);
GPIOIntEnable(GPIO_PORTD_BASE,GPIO_PIN_7);
GPIOIntRegister(GPIO_PORTD_BASE, Key1IntHandler);
// Key2 -- PF4
GPIOIntTypeSet(GPIO_PORTF_BASE,GPIO_PIN_4,GPIO_FALLING_EDGE);
GPIOIntEnable(GPIO_PORTF_BASE,GPIO_PIN_4);
GPIOIntRegister(GPIO_PORTF_BASE, Key2IntHandler);
// Key3 -- PA3
GPIOIntTypeSet(GPIO_PORTA_BASE,GPIO_PIN_3,GPIO_FALLING_EDGE);
GPIOIntEnable(GPIO_PORTA_BASE,GPIO_PIN_3);
GPIOIntRegister(GPIO_PORTA_BASE, Key3and4IntHandler);
// Key4 -- PA2
GPIOIntTypeSet(GPIO_PORTA_BASE,GPIO_PIN_2,GPIO_FALLING_EDGE);
GPIOIntEnable(GPIO_PORTA_BASE,GPIO_PIN_2);
//-----------LED -------------
//PA4 , LED
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,0xFF);
//PD6 , LED
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,0xFF);
//PF0 , LED
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0xFF);
led2 = 0;
led3 = 0;
led4 = 0;
while(1)
{
//
if(key_value & KEY_VALUE_KEY1)
{
//
key_value &= ~(KEY_VALUE_KEY1);
// LED ,
if(0==led2)
{
//PF0 , LED
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0x00);
// ,led
led2 = 1;
}
else
{
//PF0 , LED
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0xFF);
// ,led
led2 = 0;
}
}
if(key_value & KEY_VALUE_KEY2)
{
//
key_value &= ~(KEY_VALUE_KEY2);
// LED ,
if(0==led3)
{
//PA4 , LED
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,0x00);
// ,led
led3 = 1;
}
else
{
//PA4 , LED
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,0xFF);
// ,led
led3 = 0;
}
}
if(key_value & KEY_VALUE_KEY3)
{
//
key_value &= ~(KEY_VALUE_KEY3);
// LED ,
if(0==led4)
{
//PD6 , LED
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,0x00);
// ,led
led4 = 1;
}
else
{
//PD6 , LED
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,0xFF);
// ,led
led4 = 0;
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Tivec 마이크로컨트롤러 기본 연습 1.7 소스이 실험 소스는 참조 코드로서 EK-TM4C123GXL에서 검증할 수 있습니다. 시범 코드는 가장 좋은 코드가 아니라 이해하기 쉬운 측면에서 가장 잘 이해할 수 있는 코드를 얻는 것이다. //*************...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.