⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 systeminit.c

📁 基于Cortex-M3的全自动焊接机
💻 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 + -