新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > LM3S9B96 定時器的配置

        LM3S9B96 定時器的配置

        作者: 時間:2016-11-11 來源:網絡 收藏
        定時器是任何一款MCU最重要的一部分。很多初學者認為定時器會占用CPU資源,這是錯誤的。其實,定時器和CPU是分開工作的,誰都不影響誰,只是當定時的時間到了,CPU會按照用戶寫的代碼,做一些事情而已。
        lm3s9b96這款處理器的定時器,使用起來還是比較方便的。
        最重要的就是設對定時器的工作模式(32位工作模式還是16位工作模式),定時周期。
        下面以lm3s9b96的timer0為例,進行定時周期為1s的配置

        #include "inc/lm3s9b96.h"
        #include "inc/hw_memmap.h"
        #include "inc/hw_types.h"
        #include "inc/hw_ints.h"
        #include "driverlib/interrupt.h"
        #include "driverlib/gpio.h"
        #include "driverlib/timer.h"
        #include "driverlib/sysctl.h"


        /* 用于調試 PF1 <-> LED -----------------------------------------------------*/
        #define LED_PERIPH SYSCTL_PERIPH_GPIOF
        #define LED_PORT GPIO_PORTF_BASE
        #define LED_PIN GPIO_PIN_1
        #define LED_OFF 1 << 1
        #define LED_ON ~(1 << 1) // 低電平點亮LED


        //*****************************************************************************
        //
        // 延時函數
        //
        //*****************************************************************************
        void Delay(volatile signed long nCount)
        {
        for(; nCount != 0; nCount--);
        }

        //*****************************************************************************
        //
        // LED初始化函數,用于調試timer, watchdog等
        //
        //*****************************************************************************
        void LED_Init(void)
        {
        // 使能LED所在的GPIO端口
        SysCtlPeripheralEnable(LED_PERIPH);

        // 設置LED所在管腳為輸出
        GPIOPinTypeGPIOOutput(LED_PORT, LED_PIN);

        // 熄滅LED(默認LED是點亮的,低電平點亮LED)
        GPIOPinWrite(LED_PORT, LED_PIN, LED_OFF);
        }

        //*****************************************************************************
        //
        // timer0設置為1s溢出一次; TIMER_A初值:0x00F42400,向下遞減計數
        //
        //*****************************************************************************
        void Timer0_Init(void)
        {
        // 使能Timer0模塊所在的GPIO端口
        SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);

        // 配置Timer0為32位周期定時器
        TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER);

        // 設置計數器為:(16000000 / 1)個時鐘周期,即1s
        TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet() / 1);

        // 使能Timer0的A通道中斷
        IntEnable(INT_TIMER0A);

        // 使能Timer0A超時中斷
        TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);

        // 啟動Timer0計數
        TimerEnable(TIMER0_BASE, TIMER_A);
        }

        //*****************************************************************************
        //
        // 主函數
        //
        //*****************************************************************************
        int main(void)
        {
        // Set the clocking to run directly from the crystal.
        SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

        LED_Init();
        Timer0_Init();
        IntMasterEnable(); // 開總中斷

        while (1)
        {
        }
        }

        //*****************************************************************************
        //
        // 定時器0中斷處理函數. 1s溢出一次
        //
        //*****************************************************************************
        void Timer0AIntHandler(void)
        {
        // 清除中斷狀態,重要!
        TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);

        GPIOPinWrite(LED_PORT, LED_PIN, (GPIOPinRead(LED_PORT, LED_PIN) ^ LED_PIN));
        }

        本文引用地址:http://www.104case.com/article/201611/317009.htm
        按照前面講的中斷映射表的配置,將startup_ewarm.c文件中添加兩處代碼。編譯、運行即可。


        關鍵詞: LM3S9B96定時

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 岗巴县| 上思县| 常德市| 仪征市| 师宗县| 清镇市| 娱乐| 会东县| 巴彦淖尔市| 河间市| 庐江县| 大名县| 榆树市| 襄樊市| 波密县| 古浪县| 海晏县| 淮安市| 上林县| 应城市| 沙洋县| 商河县| 乡城县| 团风县| 长宁区| 台东县| 荥经县| 辽阳市| 余庆县| 兰西县| 儋州市| 九台市| 镇远县| 永春县| 呈贡县| 呼伦贝尔市| 清镇市| 深州市| 连江县| 乐平市| 竹溪县|