📄 time32os_per.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: time32os_per.c
** Last modified Date: 2008.01.18
** Last Version: v1.0
** Description: Stellaris系列单片机的定时器的库函数操作例程
** 在本范例中,定时器0被设置为32位的可编程周期触发模式。
**
**------------------------------------------------------------------------------------------------------
** Created By: Kang qinhua
** Created date: 2008.01.18
** Version: v1.0
** Descriptions: 定时器被设置为每秒产生2次中断,
** 每个中断处理器在每一次中断时都翻转一次相应的GPIO端口
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#include "hw_memmap.h"
#include "hw_types.h"
#include "hw_ints.h"
#include "gpio.h"
#include "sysctl.h"
#include "timer.h"
#include "interrupt.h"
#define PINS1 GPIO_PIN_7 // 定义LED1
//-----------------------------------------------------------------------------------------------------------------------
// 函数名称 Timer0A_ISR
// 函数功能 定时器0中断处理程序。工作在32位周期触发模式下。
// 说明:用KEIL软件时,在Startup.S中添加该中断函数名
// 输入参数 无。
// 输出参数 无。
//-----------------------------------------------------------------------------------------------------------------------
void Timer0A_ISR (void)
{
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 清除定时器0中断
GPIOPinWrite(GPIO_PORTD_BASE, PINS1,GPIOPinRead(GPIO_PORTD_BASE, PINS1) ^ PINS1);
// 翻转GPIO D7 端口
TimerEnable(TIMER0_BASE, TIMER_A); // 使能定时器0
}
//-----------------------------------------------------------------------------------------------------------------------
// 该范例程序演示了如何使用定时器产生周期性中断。定时器设置为每秒产生两次中断;
// 每个中断处理器在每一次中断时都翻转一次相应的GPIO(D7端口);
// 同时,LED指示灯会指示每次中断以及中断的速率。
// 在本范例中,定时器0被设置为32位的可编程周期触发模式
//-----------------------------------------------------------------------------------------------------------------------
int main(void)
{
SysCtlClockSet( SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ ); // 设定晶振为时钟源
SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); // 使能定时器0外设
SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOD ); // 使能GPIO D口外设
IntMasterEnable(); // 处理器使能。
GPIODirModeSet(GPIO_PORTD_BASE, PINS1,GPIO_DIR_MODE_OUT);
// 设置 GPIO D7为输出口
GPIOPinWrite( GPIO_PORTD_BASE, PINS1, 1 ); // 初始化IO口。
TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER); // 设置定时器0为单次触发模式
TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet()/2); // 设置定时器装载值:定时1/2秒
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 设置定时器为溢出中断
TimerEnable(TIMER0_BASE, TIMER_A); // 使能定时器0
IntEnable(INT_TIMER0A); // 使能定时器0外设
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -