LM3S編程起步—點亮LED

來源:互聯網
上載者:User

LM3S用C語言編寫驅動有兩種方式

一,直接操作寄存器

二,使用官方提供的API函數

一般編程時需要考慮的東西

1,引入哪些標頭檔,儲存空間選擇是否正確,時鐘設定,

2,是不是需要中斷,中斷配置

3,模組是否需要使能

4,具體的相關配置

5,正確的使用

以下就兩種方式進行詳述

一,直接操作寄存器

引入標頭檔

1,閱讀資料手冊,查看涉及到的片上資源如何使用--比如使能GPIO

2,配置相關的寄存器--類比數字,輸入輸出,是否上拉等

3,IO資料寫入   讀取

//*****************************************************************************
#include "inc/lm3s9b92.h"
int main(void)
{
    volatile unsigned long ulLoop;

    SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF;
    ulLoop = SYSCTL_RCGC2_R;

    GPIO_PORTF_DIR_R = 0x0C;
    GPIO_PORTF_DEN_R = 0x0C;

    while(1)
    {
        GPIO_PORTF_DATA_R |= 0x0C;

        for(ulLoop = 0; ulLoop < 200000; ulLoop++)
        {
        }

        GPIO_PORTF_DATA_R &= ~(0x0C);

        for(ulLoop = 0; ulLoop < 200000; ulLoop++)
        {
        }
    }
}

二,使用官方提供的API函數

文本

#include   <hw_types.h> 
#include   <hw_memmap.h> 

#include   <hw_ints.h> 
#include   <interrupt.h> 
#include   <sysctl.h> 
#include   <gpio.h> 
//***************************************************************************** 
//通過 key觸發相應管腳中斷 
//進入中斷後,翻轉 LED電平 
// 
//***************************************************************************** 
int main(void) 
{    
       ////   時鐘初始化:晶振,6MHz 
       SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | 
                                SYSCTL_XTAL_6MHZ); 
       //使用者 LED燈所對應的管腳為 PC5 
       //   使能 LED所在的 GPIO連接埠 
       SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); 
       //   設定 LED所在管腳為輸出 
       GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_5);       
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);     
//   使能 KEY所在的 GPIO連接埠 
GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4);  
//   設定 KEY所在管腳為輸入 
GPIOIntTypeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_LOW_LEVEL); 
//   設定 KEY管腳的中斷類型 
GPIOPinIntEnable(GPIO_PORTC_BASE, GPIO_PIN_4);                 
//   使能 KEY所在管腳的中斷 
IntEnable(INT_GPIOC);                                                         
  //   使能 GPIOD連接埠中斷 
IntMasterEnable();                                                                 
//   使能處理器中斷 
       for(; ; ) 
       {        } 

 
//   GPIOD的中斷服務函數 
void GPIO_Port_C_ISR(void) 

       unsigned char ucVal; 
       unsigned long ulStatus; 
       ulStatus = GPIOPinIntStatus(GPIO_PORTC_BASE, true);   //   讀取中斷狀態 
       GPIOPinIntClear(GPIO_PORTC_BASE, ulStatus);           //   清除中斷狀態,重要 
       if (ulStatus & GPIO_PIN_4)                                           //   如果 KEY 的中斷狀態有效 
       { 
             ucVal = GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_5);         / /   翻轉 LED 
             GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5, ~ucVal); 
             SysCtlDelay(300000);                                              
//   延時約 10ms,消除按鍵抖動 
             while (GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4) == 0x00);        
//   等待 KEY抬起 
             SysCtlDelay(300000);                       
//   延時約 10ms,消除松鍵抖動 
       } 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.