#include "hw_memmap.h"<br />#include "hw_types.h"<br />#include "ssi.h"<br />#include "gpio.h"<br />#include "sysctl.h"<br />#include "systick.h"<br />#include "timer.h"<br />#include"interrupt.h"<br />#define BitRate 9600 // 设定波特率<br />#define DataWidth 8 // 设定数据宽度<br />#define PINS1 GPIO_PIN_4<br />#define PINS2 GPIO_PIN_5<br />// 此表为7段数码管显示0~F的字模<br />unsigned char DISP_TAB[16] = {<br /> 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,<br /> 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};<br />int i;<br />//------------------------------------------------------------------------------------<br />// 函数名称 Timer0A<br />// 函数功能 定时器0中断处理程序。工作在32位单次触发模式下。<br />// 输入参数 无。<br />// 输出参数 无。<br />//------------------------------------------------------------------------------------<br />void Timer0A(void)<br />{<br /><br /> TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 清除定时器0中断。<br /><br /> TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet()); // 重载定时器的值。<br /><br /> GPIOPinWrite(GPIO_PORTB_BASE, PINS1,GPIOPinRead(GPIO_PORTB_BASE, PINS1) ^ PINS1);<br /> // 翻转GPIO B4 端口。<br /> TimerEnable(TIMER0_BASE, TIMER_A); // 使能定时器0。<br /> // 循环输出 0~F 的字模<br /> <br /> SSIDataPut(SSI_BASE, DISP_TAB);<br /> i=i+1;<br /> if (i==16)i=0;<br /><br />}<br /><br />//------------------------------------------------------------------------------------<br />// 函数名称 Timer1A<br />// 函数功能 定时器1中断处理程序。工作在32位周期触发模式下。<br />// 输入参数 无。<br />// 输出参数 无。<br />//------------------------------------------------------------------------------------<br />void Timer1A(void)<br />{<br /> TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT); // 清除定时器1中断。<br /><br /> GPIOPinWrite(GPIO_PORTB_BASE, PINS2,GPIOPinRead(GPIO_PORTB_BASE, PINS2) ^ PINS2);<br /> // 翻转GPIO B5 端口<br />}<br /><br />//------------------------------------------------------------------------------------<br />//<br />// 该范例程序演示了如何使用定时器产生周期性中断。其中一个定时器被设置为每秒产生一次中<br />// 断,另一个定时器设置为每秒产生两次中断;每个中断处理器在每一次中断时都翻转一次相应<br />// 的GPIO(B4和B5端口);同时,LED指示灯会指示每次中断以及中断的速率。数码管也会在每次<br />//中断时依次从0~F翻数字<br />// 在本范例中,定时器0被设置为32位的可编程单次触发模式,定时器1则设置为32位的可编<br />// 程周期触发模式。<br />//这个程序是在EASYARM101实验板上做的<br />//------------------------------------------------------------------------------------<br />int main(void)<br />{ <br /> SysCtlClockSet( SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |<br /> SYSCTL_XTAL_6MHZ ); // 设定晶振为时钟源。<br /> <br /> SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); // 使能定时器0外设。<br /> SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER1 ); // 使能定时器1外设。<br /><br /> SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOB ); // 使能GPIO B口外设。<br /><br /> IntMasterEnable(); // 处理器使能。<br /> // 使能 SSI<br /> SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI);<br /> // 使能 GPIO A,B 口<br /> SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA|SYSCTL_PERIPH_GPIOB);<br /> //SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);<br /> // 配置 SSI<br /> SSIConfig(SSI_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, BitRate, DataWidth);<br /> // 使能 SSI<br /> SSIEnable(SSI_BASE);<br /> // 设定 GPIO A 2~5 引脚为使用外设功能(管脚由硬件控制)<br /> GPIODirModeSet(GPIO_PORTA_BASE, (GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 |<br /> GPIO_PIN_5), GPIO_DIR_MODE_HW);<br /><br /> GPIODirModeSet(GPIO_PORTB_BASE, PINS1 | PINS2,GPIO_DIR_MODE_OUT);<br /> // 设置 GPIO B4和B5为输出口。<br /> GPIOPinWrite( GPIO_PORTB_BASE, PINS1 | PINS2, 0 ); // 初始化IO口。<br /><br /> TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_OS); // 设置定时器0为单次触发模式。<br /> TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER); // 设置定时器1为周期触发模式。<br /><br /> TimerLoadSet(TIMER0_BASE, TIMER_A, 2*SysCtlClockGet()); // 设置定时器装载值。定时1秒。<br /> TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet()/2); // 设置定时器装载值。定时0.5秒。<br /><br /> TimerIntRegister(TIMER0_BASE,TIMER_A,Timer0A);<br /> TimerIntRegister(TIMER1_BASE,TIMER_A,Timer1A);<br /><br /> TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 使能定时器0为溢出中断。<br /> TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT); // 使能定时器1为溢出中断。<br /><br /> TimerEnable(TIMER0_BASE, TIMER_A); //使能定时器0<br /> TimerEnable(TIMER1_BASE, TIMER_A); //使能定时器1<br /> i=0;<br /><br /> while(1); //循环等待中断<br />}
|