code cho hệ thống nhúng
GPIO
.c
#include "../include.h"
#include "GPIO.h"
static uint2 _t LED _Status=LLED _RD E
static void SWITCH_ISR(vvoid;E
extern void Confi_LED (vvoid;
{
SysCtlPeripheralDnable(vSYSCTLE_PDRIPH_GPIOF;E
GPIOPinTypeGPIOOutput(vLED _PORT, LED _RD |LED _BLEUD;E
GPIOPinWrite(vLED _PORT, LED _RD |LED _BLEUD, 0;E
}
extern void Blinky_LED (vvoid; //PF1 OUTPUT
{
static uint__t i=L0E
if(vi=L=L0;
i=LLED _StatusE
else
i=L0E
GPIOPinWrite(vLED _PORT, LED _RD |LED _BLEUD, i;E
SysCtl elay(vSysCtlClockGet(v;/2;E //delay 1s
}
extern void Confi_SWITCH(vvoid; //PF4 INPPUT
{
SysCtlPeripheralDnable(vSYSCTLE_PDRIPH_GPIOF;E
GPIOPinTypeGPIOInput(vSWITCH_PORT, SWITCH;E
GPIOPadConfiSet(vSWITCH_PORT, SWITCH, GPIO_STRDNPGTH__MA,
GPIO_PINP_TYPD_ST _WPU;E
GPIOIntReiister(vSWITCH_PORT,&SWITCH_ISR;E
GPIOIntDnable(vSWITCH_PORT,GPIO_INPT_PINP_4;E
IntDnable(vINPT_GPIOF;E
IntMasterDnable(v;E
}
static void SWITCH_ISR(vvoid;
{
GPIOIntClear(vGPIO_PORTF_BASD,GPIOIntStatus(vGPIO_PORTF_BASD, true;;E
if(vLED _Status=L=LLED _RD ;
LED _Status=LLED _BLEUDE
else
LED _Status=LLED _RD E
}
.h
/*
* GPIO.h
*
* Created on: Mar 1 , 016
*
*/
Author: Satu
#ifndef GPIO_GPIO_H_
#defne GPIO_GPIO_H_
#defne LED _PORT
GPIO_PORTF_BASD
#defne LED _RD
GPIO_PINP_1
#defne LED _BLEUD
GPIO_PINP_
#defne SWITCH_PORT GPIO_PORTF_BASD
#defne SWITCH
GPIO_PINP_4
extern void Confi_LED (vvoid;E
extern void Blinky_LED (vvoid;E
extern void Confi_SWITCH(vvoid;E
#endif /* GPIO_GPIO_H_ */
Blinky
#define LED_RED
#define LED_GREEN
#define LED_BLUE
GPIO_PIN_1
GPIO_PIN_2
GPIO_PIN_3
/****************************************************************
* IMPORT
****************************************************************/
#include
#include
#include
#include
#include
#include
"inc/hw_memmap.h"
"inc/hw_types.h"
"driverlib/gpio.h"
"driverlib/sysctl.h"
/******************************************************************************
* MAIN
*****************************************************************************/
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);
}
}
/****************************************************************
* END OF main.c
READ BUTTON STATUS
#define
#define
#define
#define
#define
LED_RED
LED_GREEN
LED_BLUE
SW1
SW2
GPIO_PIN_1
GPIO_PIN_2
GPIO_PIN_3
GPIO_PIN_4
GPIO_PIN_0
/****************************************************************
* IMPORT
****************************************************************/
#include
#include
#include
#include
#include
#include
#include
"inc/hw_memmap.h"
"inc/hw_types.h"
"driverlib/gpio.h"
"driverlib/sysctl.h"
"inc/hw_gpio.h"
int read;
/******************************************************************************
* MAIN
*****************************************************************************/
void main (void)
{
// 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);
//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,
LED_RED);
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,
LED_GREEN);
LED_BLUE);
else
GPIOPinWrite(GPIO_PORTF_BASE,
}
}
GPIO INTERRUPT
LED_RED|LED_GREEN|LED_BLUE, 0);
#define
#define
#define
#define
#define
LED_RED
LED_GREEN
LED_BLUE
SW1
SW2
GPIO_PIN_1
GPIO_PIN_2
GPIO_PIN_3
GPIO_PIN_4
GPIO_PIN_0
#define PART_TM4C123GH6PM
/****************************************************************
* IMPORT
****************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
"inc/hw_memmap.h"
"inc/hw_types.h"
"inc/hw_ints.h"
"inc/hw_gpio.h"
"driverlib/gpio.h"
"driverlib/sysctl.h"
"driverlib/interrupt.h"
/******************************************************************************
* SUB ROUTINE
*****************************************************************************/
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);
}
/******************************************************************************
* MAIN
*****************************************************************************/
void main (void)
{
// 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();
//Infinite loop
while(1)
{
}
}
timER
#include
#include
#include
#include
#include
#include
#include
#include
#include
"inc/tm4c123gh6pm.h"
"inc/hw_memmap.h"
"inc/hw_types.h"
"driverlib/sysctl.h"
"driverlib/interrupt.h"
"driverlib/gpio.h"
"driverlib/timer.h"
/****************************************************************
* EXTERN
****************************************************************/
void Timer0IntHandler(void);
/*****************************************************************
GLOBAL VARIABLE
******************************************************************/
/*****************************************************************
* ROUTINES
******************************************************************/
/* -- void Timer0IntHandler(void) -------------------------------------*
* Description
: Timer 0 interrupts handler .
* Parameters: none
* Return
: don't care
*/
void Timer0IntHandler(void)
{
// Clear the timer interrupt
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
// Read the current state of the GPIO pin and
// write back the opposite state
if(GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_2))
{
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
}
else
{
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 4);
}
}
/******************************************************************************
* MAIN
*****************************************************************************/
int main(void)
{
uint32_t ui32Period;
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|
SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
ui32Period = (SysCtlClockGet() / 10) / 2;
TimerLoadSet(TIMER0_BASE, TIMER_A, ui32Period -1);
IntEnable(INT_TIMER0A);
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
IntMasterEnable();
TimerEnable(TIMER0_BASE, TIMER_A);
while(1)
{
}
}
UART_UsingInterrupts
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
"inc/hw_ints.h"
"inc/hw_memmap.h"
"inc/hw_types.h"
"driverlib/gpio.h"
"driverlib/interrupt.h"
"driverlib/pin_map.h"
"driverlib/sysctl.h"
"driverlib/uart.h"
/****************************************************************
* EXTERN
****************************************************************/
void UARTIntHandler(void);
/*****************************************************************
GLOBAL VARIABLE
******************************************************************/
/*****************************************************************
* ROUTINES
******************************************************************/
/* -- void UARTIntHandler(void) ---------------------------------*
* Description
: UART interrupts handler .
* Parameters: none
* Return
: don't care
*/
void UARTIntHandler(void)
{
uint32_t ui32Status;
ui32Status = UARTIntStatus(UART0_BASE, true); //get interrupt status
UARTIntClear(UART0_BASE, ui32Status); //clear the asserted interrupts
while(UARTCharsAvail(UART0_BASE)) //loop while there are chars
{
UARTCharPutNonBlocking(UART0_BASE, UARTCharGetNonBlocking(UART0_BASE));
//echo character
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2); //blink LED
SysCtlDelay(SysCtlClockGet() / (1000 * 3)); //delay ~1 msec
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0); //turn off LED
}
}
/******************************************************************************
* MAIN
*****************************************************************************/
int main(void) {
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //enable GPIO port for LED
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2); //enable pin for LED PF2
UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
IntMasterEnable(); //enable processor interrupts
IntEnable(INT_UART0); //enable the UART interrupt
UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); //only enable RX and TX
interrupts
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
UARTCharPut(UART0_BASE,
'E');
'n');
't');
'e');
'r');
' ');
'T');
'e');
'x');
't');
':');
' ');
while (1) //let interrupt handler do the UART echo function
{
if (UARTCharsAvail(UART0_BASE)) UARTCharPut(UART0_BASE,
UARTCharGet(UART0_BASE));
}
}
tiMDR.C
/*
* Timer.c
*
* Created on: Mar 18, 2016
*
Author: Satu
*/
#include "../include.h"
#include "Timer.h"
static Color_Led Led_Status_Color=Yellow;
static void Timer_ISR(void)
{
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
TimerIntClear(TIMER2_BASE, TIMER_TIMA_TIMEOUT);
if(Led_Status_Color==Yellow)
{
TimerDisable(TIMER0_BASE, TIMER_A);
TimerEnable(TIMER1_BASE, TIMER_A);
GPIOPinWrite(LED_PORT, LED_RED|LED_GREEN|LED_YELLOW, LED_RED);
Led_Status_Color=Red;
}
else if (Led_Status_Color==Red)
{
TimerDisable(TIMER1_BASE, TIMER_A);
TimerEnable(TIMER2_BASE, TIMER_A);
GPIOPinWrite(LED_PORT, LED_RED|LED_GREEN|LED_YELLOW, LED_GREEN);
Led_Status_Color=Green;
}
else
{
TimerDisable(TIMER2_BASE, TIMER_A);
TimerEnable(TIMER0_BASE, TIMER_A);
GPIOPinWrite(LED_PORT, LED_RED|LED_GREEN|LED_YELLOW, LED_YELLOW);
Led_Status_Color=Yellow;
}
}
extern void Config_Timer(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
//VANG
TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
TimerLoadSet(TIMER0_BASE, TIMER_A, 2*SysCtlClockGet()-1);
TimerPrescaleSet(TIMER0_BASE, TIMER_A,200);
TimerIntRegister(TIMER0_BASE, TIMER_A, &Timer_ISR);
IntEnable(INT_TIMER0A);
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);
//DO
TimerConfigure(TIMER1_BASE, TIMER_CFG_PERIODIC);
TimerLoadSet(TIMER1_BASE, TIMER_A, 6*SysCtlClockGet()-1);
TimerPrescaleSet(TIMER1_BASE, TIMER_A,200);
TimerIntRegister(TIMER1_BASE, TIMER_A, &Timer_ISR);
IntEnable(INT_TIMER1A);
TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);
//XANH
TimerConfigure(TIMER2_BASE, TIMER_CFG_PERIODIC);
TimerLoadSet(TIMER2_BASE, TIMER_A, 4*SysCtlClockGet()-1);
TimerPrescaleSet(TIMER2_BASE, TIMER_A,200);
TimerIntRegister(TIMER2_BASE, TIMER_A, &Timer_ISR);
IntEnable(INT_TIMER2A);
TimerIntEnable(TIMER2_BASE, TIMER_TIMA_TIMEOUT);
//uint32_t num = TimerLoadGet(TIMER0_BASE, TIMER_A);
TimerEnable(TIMER0_BASE, TIMER_A);
}
tIMDR.H
/*
* Timer.h
*
* Created on: Mar 18, 2016
*
Author: Satu
*/
#ifndef TIMER_TIMER_H_
#define TIMER_TIMER_H_
typedef enum
{
Yellow=0,
Red,
Green
}Color_Led;
extern void Config_Timer(void);
#endif /* TIMER_TIMER_H_ */
UART.C
/*
* UART.c
*
* Created on: Apr 15, 016
*
*/
Author: Satu
#include "../include.h"
#include "UART.h"
static void UART_ISR(vvoid;
{
UARTIntClear(vUART0_BASD,UARTIntStatus(vUART0_BASD,true;;E
int2 _t kE
k=LUARTCharGet(vUART0_BASD;E
}
void Confi_UART(vvoid;
{
SysCtlPeripheralDnable(vSYSCTLE_PDRIPH_UART0;E
SysCtlPeripheralDnable(vSYSCTLE_PDRIPH_GPIOA;E
GPIOPinConfiure(vGPIO_PA0_U0RX;E
GPIOPinConfiure(vGPIO_PA1_U0TX;E
GPIOPinTypeUART(vGPIO_PORTA_BASD, GPIO_PINP_0 | GPIO_PINP_1;E
UARTClockSourceSet(vUART0_BASD, UART_CLEOCK_SYSTDM;E
UARTConfiSetDxpClk(vUART0_BASD, SysCtlClockGet(v;, 115 00,UART_CONPFIG_WLEDNP__ |
UART_CONPFIG_STOP_ONPD |UART_CONPFIG_PAR_NPONPD;E
UARTIntReiister(vUART0_BASD,&UART_ISR;E
IntDnable(vINPT_UART0;E
UARTIntDnable(vUART0_BASD, UART_INPT_RX | UART_INPT_RT;E
}
UART.H
/*
* UART.h
*
* Created on: Apr 15, 016
*
Author: Satu
*/
#ifndef UART_UART_H_
#defne UART_UART_H_
extern void Confi_UART(vvoid;E
#endif /* UART_UART_H_ */
Khi nhân chư thi k=LUartCharGet(vUART0_BASD;E
Khi truyền chư thi UARTCHARPUT(vUART0_BASD,’D’;
Main.c (vTimer;
/*
* main.c
*/
#include "include.h"
void main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_20 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ); //10Mhz 200/20
Config_LED();
Config_SWITCH();
//Config_ADC();
//Config_TempSensor();
Config_Timer();
IntMasterEnable();
while(1)
{
}
}
- Xem thêm -