Download as pdf or txt
Download as pdf or txt
You are on page 1of 24

Ti liu ny c bin son khng nhm vo bt k mc ch no mang tnh

thng mi.
Bn c quyn sao chp, sa cha v phn pht bng bt c hnh thc no.
Hy s dng ti liu ny, sa cha, b sung v gi cho nhng ai cn n.
Chng ti khng tn tc gi bin son.
Ti liu ny thuc quyn s hu nhng ai ang dng n.

Pay it forward

General-Purpose
Input/Outputs (GPIOs)
28/10/2014
TIVA ARM Cortex-M4
TM4C123G Tutorial

zz

TNG QUAN GPIO


TH VIN TIVAWARE
CCH CU HNH C BN
THC HIN CC V D TRN KIT

TIVA ARM Cortex-M4 TM4C123G Tutorial

TNG QUAN V GPIO


* Module GPIO bao gm 6 khi, tng ng vi 6 port, t Port A -> Port F.
* Mt s c im ca module GPIO:
C th cu hnh n 43 GPIO.
Mt s GPIO c th cu hnh linh ng vi nhiu chc nng khc,
ngoi chc nng lm Input & Output.
H tr y cc loi ngt: mc cao, mc thp, cnh ln, cnh xung
hay c hai.
H tr mt s cu hnh nh:
in tr ni ko ln/ ko xung (pull-up/pull-down resistor).
C th cu hnh dng li cc i 2mA, 4mA, 8mA. C n 4 pad c
th sink c dng 18mA.
Cu hnh cc thu h, digital input.
Trong cu hnh input c th chu c in p 5V, tr mt s pin ch
mc 3V3

TIVA ARM Cortex-M4 TM4C123G Tutorial

TH VIN TIVAWARE
s dng th vin GPIO, cn #include "driverlib/gpio.h
#include "inc/hw_gpio.h"
Enable module GPIO tng ng vi hm:
SysCtlPeripheralEnable(uint32_t ui32Peripheral)
Cc hm cu hnh:
GPIODirModeSet (uint32_t ui32Port, uint8_t ui8Pins, uint32_t
ui32PinIO)
GPIOPinTypeGPIOInput (uint32_t ui32Port, uint8_t ui8Pins)
GPIOPinTypeGPIOOutput (uint32_t ui32Port, uint8_t ui8Pins)
GPIOPadConfigSet (uint32_t ui32Port, uint8_t ui8Pins, uint32_t
ui32Strength, uint32_t ui32PinType)

Hm xut/c:
void GPIOPinWrite (uint32_t ui32Port, uint8_t ui8Pins, uint8_t ui8Val)
int32_t GPIOPinRead (uint32_t ui32Port, uint8_t ui8Pins)

TIVA ARM Cortex-M4 TM4C123G Tutorial

TH VIN TIVAWARE
Cc hm lin quan ngt GPIO:
( cn #include "driverlib/interrupt.h"
#include "inc/hw_ints.h")
o void GPIOIntTypeSet (uint32_t ui32Port, uint8_t ui8Pins,
uint32_t ui32IntType)
o void GPIOIntRegister (uint32_t ui32Port, void
(pfnIntHandler)(void))
o void GPIOIntEnable (uint32_t ui32Port, uint32_t ui32IntFlags)
o uint32_t GPIOIntStatus (uint32_t ui32Port, bool bMasked)
o void GPIOIntClear (uint32_t ui32Port, uint32_t ui32IntFlags)
o void GPIOIntDisable (uint32_t ui32Port, uint32_t ui32IntFlags)

TIVA ARM Cortex-M4 TM4C123G Tutorial

CCH CU HNH C BN
V d cu hnh Pin PF1 lm output v xut gi tr mc 1:
//PortF Enable
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//Config GPIO PF1 as an Output
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);
//Write value
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);

TIVA ARM Cortex-M4 TM4C123G Tutorial

CCH CU HNH C BN
V d cu hnh Pin PF4 lm input v c gi tr :
//Enable PortF
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//Config Pin PF4 as a digital input, 2mA drive, pull-up resistor
GPIODirModeSet(GPIO_PORTF_BASE, SW1|SW2, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTF_BASE, SW1|SW2, GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD_WPU);
//Read PF4
read=GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4);

TIVA ARM Cortex-M4 TM4C123G Tutorial

CCH CU HNH C BN
V d cu hnh ngt cnh xung cho PF4:
//Enable PortF
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//Config Pin PF4 as a digital input
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_4);
//Read PF4
read=GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4);
//Config GPIO Falling edge interrupt for PF1
GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_FALLING_EDGE);
GPIOIntRegister(GPIO_PORTF_BASE,&ButtonISR);
GPIOIntEnable(GPIO_PORTF_BASE, GPIO_PIN_4);
IntEnable(INT_GPIOF);
IntMasterEnable();

TIVA ARM Cortex-M4 TM4C123G Tutorial

V D TRN KIT LAUNCHPAD


Test chc nng Output vi
RGB Led trn kit.
Test chc nng Input vi 2
nt nhn.
Cu hnh ngt cho 2 nt
nhn.

RGB
LED

SW2

SW1

TIVA ARM Cortex-M4 TM4C123G Tutorial

V D TRN KIT LAUNCHPAD


RGB
LED

SW2

SW1

TIVA ARM Cortex-M4 TM4C123G Tutorial

V D TRN KIT LAUNCHPAD

TIVA ARM Cortex-M4 TM4C123G Tutorial

V D 1: CHP TT LED
GPIO Pin

Pin Function

PF1

RGB LED (Red)

PF2

RGB LED (Blue)

PF3

RGB LED (Green)

TIVA ARM Cortex-M4 TM4C123G Tutorial

V D 1: CHP TT LED
void main (void)
{
int tick=LED_RED;
// Configure clock 40 MHz
SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
//PortF Enable
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//Config GPIO that connect to LED - PIN 1,2,3
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, LED_RED|LED_GREEN|GPIO_PIN_3);
//Turn off all LEDs
GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|GPIO_PIN_3, 0);
//Infinite loop
while(1)
{
GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|GPIO_PIN_3, tick);
tick<<=1;
if(tick>GPIO_PIN_3)
tick=LED_RED;
//Delay 1s
//SysCtlDelay(count) delay 3*count cycles
SysCtlDelay(SysCtlClockGet()/3);
}
}

TIVA ARM Cortex-M4 TM4C123G Tutorial

V D 2: C NT NHN
Trong v d ny chng ta s th lp trnh cho cc LED sng
theo tng trng hp: SW1 c nhn/SW2 c nhn/c 2
c nhn.
Ngoi ra chng ta cn th cch m kho Pin PF0 lm
input.
GPIO Pin

Pin Function

PF4

SW1

PF0

SW2

TIVA ARM Cortex-M4 TM4C123G Tutorial

V D 2: C NT NHN
// Configure clock 40 MHz
SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ);
//PortF Enable
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//Config GPIO that connect to LED - PIN 1,2,3
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE);
//Turn off all LEDs
GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE, 0);
//Config Buttons
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0x4C4F434B;//Unlocks the GPIO
Commit (GPIOCR) register for write access PF0
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = SW1;
GPIODirModeSet(GPIO_PORTF_BASE, SW1|SW2, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTF_BASE, SW1|SW2, GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD_WPU);

TIVA ARM Cortex-M4 TM4C123G Tutorial

V D 2: C NT NHN
//Infinite loop
while(1)
{
read=GPIOPinRead(GPIO_PORTF_BASE,SW1|SW2);
if((read&(SW1|SW2))==0)
GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE,
else if((read&SW1 )==0)
GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE,
else if((read&SW2)==0)
GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE,
else
GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE,
}

TIVA ARM Cortex-M4 TM4C123G Tutorial

LED_RED);
LED_GREEN);

LED_BLUE);
0);

V D 3: CU HNH NGT
Mt v d n gin bt tt LED vi SW 1 s dng ngt,

Main
routine

Interrupt
event

TIVA ARM Cortex-M4 TM4C123G Tutorial

Interrupt
sub routine

V D 3: CU HNH NGT
// Configure clock 40 MHz
SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ);
//PortF Enable
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//Config GPIO that connect to LED - PIN 1,2,3
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE);
//Turn off all LEDs
GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE, 0);
//Config Buttons
GPIODirModeSet(GPIO_PORTF_BASE, SW1, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTF_BASE, SW1, GPIO_STRENGTH_8MA,
GPIO_PIN_TYPE_STD_WPU);
//Config GPIO Interrupt for SW1
GPIOIntTypeSet(GPIO_PORTF_BASE,SW1, GPIO_FALLING_EDGE);
GPIOIntRegister(GPIO_PORTF_BASE,&ButtonISR);
GPIOIntEnable(GPIO_PORTF_BASE, SW1);
IntEnable(INT_GPIOF);
IntMasterEnable();

TIVA ARM Cortex-M4 TM4C123G Tutorial

V D 3: CU HNH NGT
void ButtonISR(void)
{
static int tick = LED_RED;
GPIOIntClear(GPIO_PORTF_BASE, SW1);
GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE, tick);
tick<<=1;
if(tick>GPIO_PIN_3)
tick=LED_RED;
//Delay 1s
SysCtlDelay(SysCtlClockGet()/3);
}

TIVA ARM Cortex-M4 TM4C123G Tutorial

Ti liu tham kho


[1] Tiva TM4c123GH6MP Datasheet
[2] TivaWare Peripheral Driver Library User's Guide
[3] Tiva C Series TM4C123G LaunchPad Evaluation Board User's Guide
[4] TM4C123G_LaunchPad_Workshop_Workbook

TIVA ARM Cortex-M4 TM4C123G Tutorial

You might also like