📄 systeminit.c
字号:
#include "systemInit.h"
// 定义全局的系统时钟变量
unsigned long TheSysClock = 12000000UL;
// 定义KEY
#define KEY_PERIPH SYSCTL_PERIPH_GPIOG
#define KEY_PORT GPIO_PORTG_BASE
#define KEY_PIN GPIO_PIN_5
// 防止JTAG失效
void jtagWait(void)
{
SysCtlPeriEnable(KEY_PERIPH); // 使能KEY所在的GPIO端口
GPIOPinTypeIn(KEY_PORT, KEY_PIN); // 设置KEY所在管脚为输入
if (GPIOPinRead(KEY_PORT, KEY_PIN) == 0x00) // 若复位时按下KEY,则进入
{
for (;;); // 死循环,以等待JTAG连接
}
SysCtlPeriDisable(KEY_PERIPH); // 禁止KEY所在的GPIO端口
}
// 系统时钟初始化
void clockInit(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_50V); // 设置LDO输出电压
SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置
SYSCTL_OSC_MAIN | // 采用主振荡器
SYSCTL_XTAL_6MHZ | // 外接6MHz晶振
SYSCTL_SYSDIV_1); // 不分频
/*
SysCtlLDOSet(SYSCTL_LDO_2_75V); // 配置PLL前须将LDO设为2.75V
SysCtlClockSet(SYSCTL_USE_PLL | // 系统时钟设置,采用PLL
SYSCTL_OSC_MAIN | // 主振荡器
SYSCTL_XTAL_6MHZ | // 外接6MHz晶振
SYSCTL_SYSDIV_10); // 分频结果为20MHz
*/
TheSysClock = SysCtlClockGet(); // 获取当前的系统时钟频率
}
/***************************************************
函数名:Timer0_Init()
功能: Timer0初始化函数
参数:
说明:
****************************************************/
void Timer0_Init(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0); // 使能定时器模块
TimerConfigure(TIMER0_BASE , // 配置TimerA为16位单次触发
TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_ONE_SHOT);
TimerPrescaleSet(TIMER0_BASE , TIMER_A , 199); // 预先进行200分频 6M/200=
//TimerLoadSet(TIMER0_BASE , TIMER_A , 100000UL); // 设置定时器初值
TimerIntEnable(TIMER0_BASE , TIMER_TIMA_TIMEOUT); // 使能Timer0A超时中断
IntPrioritySet(INT_TIMER0A , 7 << 5); //设置TIMER0A为终端优先级 5
IntEnable(INT_TIMER0A); // 使能Timer0A中断
IntMasterEnable(); // 使能处理器中断
}
/***************************************************
函数名:Timer2_Init()
功能: Timer2初始化函数
参数:
说明:
****************************************************/
void Timer2_Init(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_TIMER2); // 使能定时器模块
TimerConfigure(TIMER2_BASE , // 配置TimerA为16位单次触发
TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_ONE_SHOT);
TimerPrescaleSet(TIMER2_BASE , TIMER_A , 199); // 预先进行200分频 6M/200=
//TimerLoadSet(TIMER2_BASE , TIMER_A , 30000UL); // 设置定时器初值 定时1s
//TimerEnable(TIMER2_BASE , TIMER_A); // 使能Timer2A
TimerIntEnable(TIMER2_BASE , TIMER_TIMA_TIMEOUT); // 使能Timer2A超时中断
IntPrioritySet(INT_TIMER2A , 6 << 5); //设置TIMER2A为终端优先级 6
IntEnable(INT_TIMER2A); // 使能Timer2A中断
IntMasterEnable(); // 使能处理器中断
}
/***************************************************
函数名:Timer3_Init()
功能: Timer3初始化函数
参数:
说明:
****************************************************/
void Timer3_Init(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_TIMER3); // 使能定时器模块
TimerConfigure(TIMER3_BASE , TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PERIODIC); // 配置定时器为32位周期定时器
TimerPrescaleSet(TIMER3_BASE , TIMER_A , 199); // 预先进行200分频
//TimerLoadSet(TIMER3_BASE , TIMER_A , 60000UL); // 设置定时器初值,定时10ms
TimerIntEnable(TIMER3_BASE , TIMER_TIMA_TIMEOUT); // 使能定时器超时中断
IntPrioritySet(INT_TIMER3A , 5 << 5); //设置TIMER3A为终端优先级 4
IntEnable(INT_TIMER3A); // 使能定时器中断
IntMasterEnable(); // 使能处理器中断
//TimerEnable(TIMER3_BASE , TIMER_A); // 使能定时器计数
}
/***************************************************
函数名:GPIOB_IntInit()
功能: GPIOB 0中断初始化
参数:
说明:
****************************************************/
void GPIOB_IntInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB); // 使能GPIOF端口
GPIOPinTypeIn(GPIO_PORTB_BASE , GPIO_PIN_0); // 设置PF1管脚为输入
GPIOIntTypeSet(GPIO_PORTB_BASE , // 设置PF1的中断类型
GPIO_PIN_0 ,
GPIO_LOW_LEVEL);
IntPrioritySet(INT_GPIOB , 2 << 5);
GPIOPinIntEnable(GPIO_PORTB_BASE , GPIO_PIN_0); // 使能PF1管脚中断
IntEnable(INT_GPIOB); // 使能GPIOF端口中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -