1. 程式人生 > >LED:利用通用定時器定時閃爍

LED:利用通用定時器定時閃爍

F28335有三種32位的I/O口,依次PORTA(GPIO0-GPIO31), PORTB(GPIO32-GPIO63), PORTC(GPIO64-GPIO87),這些口都可以配置為普通的數字IO口同樣也能被配置為外部介面。這樣涉及到了IO的暫存器,IO口共有三類暫存器:控制暫存器、資料暫存器和中斷控制暫存器。

1、 GPIO可以配置為數字I/O或外設I/O口,GPxMUX1(2):‘0’為數字I/O,‘1’為外設I/O口;
2: GPIO可以配置為內部電阻上拉功能,GPxPUD:‘0’為上拉,‘1’為禁止上拉
3: GPIO具有數字濾波功能,GPxQSEL1(2):量化輸入暫存器,可以確定是3週期取樣還是6週期取樣或者不用取樣;GPIO可以配置為內部電阻上拉功能,GPxPUD:‘0’為上拉,‘1’為禁止上拉,
4、 輸入輸出可配置,GPxDIR是控制每個引腳的輸入或是輸出,‘0’是輸入,‘1’是輸出; 當GPIO配置為數字I/O時注意:28335引腳作為輸出時,雖然可以通過設定GPADAT或GPBDAT改變輸出埠的高低電平,但是單獨寫某一位時可能會使其它引腳產生誤操作。為了避免這種現象的產生,改變輸出引腳的高低電平時,應該使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向,可以代替去翻操作)暫存器載入輸出鎖存寄存,GPIOxDIR配置方向,1為輸出,0為輸入.28335引腳作為輸入時,採集外部相應引腳的高低電平,只要讀取GPADAT或GPBDAT的相應位即可。在有些場合高頻干擾會使I/O引腳的讀入產生誤碼。為了避免這種現象,28335引入了取樣時間的概念,取樣時間可以通過GPxCTRL與GPxQSEL1/2設定為systemclock的倍數(100MHz的頻率,最小取樣時間為10ns,最大采樣時間為5.1us.)


#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"

#define   LED4  GpioDataRegs.GPADAT.bit.GPIO0
#define   LED3  GpioDataRegs.GPADAT.bit.GPIO1
#define   LED1  GpioDataRegs.GPADAT.bit.GPIO6
#define   LED2  GpioDataRegs.GPADAT.bit.GPIO7


void delay();
interrupt void cpu_timer0_isr();
void configled();
void main(void) { InitSysCtrl(); DINT; InitPieCtrl(); InitXintf16Gpio(); IER=0x0000; IER=0x0000; EALLOW; PieVectTable.TINT0=&cpu_timer0_isr; //中斷向量指向中斷服務子程式處 EDIS; InitCpuTimers(); ConfigCpuTimer(&CpuTimer0,100,1000000); StartCpuTimer0(); CpuTimer0Regs.TCR
.bit.TIE=1; IER|=M_INT1; //使能CPU級中斷 PieCtrlRegs.PIECTRL.bit.ENPIE=1; //使能PIE模組 PieCtrlRegs.PIEIER1.bit.INTx7=1; //使能第1組的第7位中斷 EINT; //使能全域性中斷 ERTM; configled(); LED1=1; delay(); LED2=1; delay(); LED3=0; delay(); LED4=0; delay(); for(;;); } void delay() { Uint16 i; for(i=0;i<1000;i++) ; } interrupt void cpu_timer0_isr() { PieCtrlRegs.PIEACK.all=PIEACK_GROUP1; //允許繼續響應中斷 CpuTimer0Regs.TCR.bit.TIF=1; //清除中斷標誌位 CpuTimer0Regs.TCR.bit.TRB=1; //定時器自動裝載 LED1=~LED1; LED2=~LED2; LED3=~LED3; LED4=~LED4; } void configled() { EALLOW; //GPIO控制類暫存器 GpioCtrlRegs.GPAMUX1.bit.GPIO0= 0; //GPIO0設定為普通IO口 GpioCtrlRegs.GPADIR.bit.GPIO0=1; //GPIO0設定為輸出 GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; GpioCtrlRegs.GPADIR.bit.GPIO7 = 1; EDIS; }

附:

a.引腳複用

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

b.中斷對映

這裡寫圖片描述

c.片內外設時鐘控制

各片內外設的時鐘可以通過外設時鐘控制器PCLKCR0/1/2獨立使能。

注:復位時,HSCLK的預設頻率為f.SYSCLKOUT/2,而LSPCLK的預設頻率為f.SYSCLKOUT/4.

這裡寫圖片描述

相關推薦

LED利用通用定時定時閃爍

F28335有三種32位的I/O口,依次PORTA(GPIO0-GPIO31), PORTB(GPIO32-GPIO63), PORTC(GPIO64-GPIO87),這些口都可以配置為普通的數字IO口同樣也能被配置為外部介面。這樣涉及到了IO的暫存器,

利用T0定時定時 100ms,每當定時時間到就使 P1.7 求反

一個簡單的微控制器的問題8031 的 P1.7 接一個發光二極體;利用T0定時器定時100ms,每當定時時間到就使 P1.7 求反。也就是使二極體亮100ms,滅100ms,周而復始。請幫忙把程式寫出

這是一個定時,定時執行一次,用在定時發送郵件

mail pri 創建 sendmail public sta 發送 mes times public static void main(String[] args) { //1. 創建計時器類 Timer timer = new Timer(); //2. 創建任

33、生鮮電商平臺-定時,定時任務quartz的設計與架構

說明:任何業務有時候需要系統在某個定點的時刻執行某些任務,比如:凌晨2點統計昨天的報表,早上6點抽取使用者下單的佣金。           對於Java開源生鮮電商平臺而言,有定時推送客戶備貨,定時計算賣家今日的收益,定時提醒每日的提現金額等等  

STM32 定時 定時時間的計算

假設 系統時鐘是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由 PCLK1 得到 關鍵是設定 時鐘預分頻數,自動重灌載暫存器週期的值 /*每1秒發生一次更新事件(進入中斷服務程式)。RCC_Configuration()的SystemInit(

STM32學習---基本定時(定時中斷)

//STM32定時器實驗: /* STM32一共有8個都為16位的定時器。 其中: TIM6,TIM7是基本定時器; TIM2,TIM3,TIM4,TIM5是通用定時器; TIM1 和 TIM8 是高階定時器。 這是定時器的綜合運用使STM32具有定時、訊號的頻率測量、訊號的PWM測量、PWM輸

電商平臺-定時,定時任務quartz的設計與架構

說明:任何業務有時候需要系統在某個定點的時刻執行某些任務,比如:凌晨2點統計昨天的報表,早上6點抽取使用者下單的佣金。           對於Java開源生鮮電商平臺而言,有定時推送客戶備貨,定時計算賣家今日的收益,定時提醒每日的提現金額等等

NRF52832 SAADC定時定時轉換

1.在sdk_config.h中加入巨集 // <e> TIMER_ENABLED - nrf_drv_timer - TIMER periperal driver - legacy layer //===============================

springboot 定時定時任務

專案中經常遇到一些需求就是需要你判斷某個值是否到達要求的值或者某個條件下需要你執行某個動作,但你又不能一直判斷,這時候我們需要使用定時器去設定某個時間去判斷是否達到某個條件. 上乾貨,我使用的是spring中的定時器.我建立的是springboot專案.程式碼

C#定時 定時執行任務 執行緒

http://www.cnblogs.com/linzheng/archive/2011/02/21/1960276.html C#實現Web應用程式定時啟動任務      在業務複雜的應用程式中,有時候會要求一個或者多個任務在一定的時間或者一定的時間間隔內計劃進行,比如

STM32F4定時 -- 定時中斷

1. 定時器簡介 STM32F4的定時器分佈如下: - 其中基本定時器包括TIM6、TIM7,其結構最簡單,也具有最基本的定時功能,一是用於基本定時、產生時基、二是用於驅動DAC數模轉換器。 - 其中通用定時器包括TIME2-TIME5,TIM

mysql資料庫上使用定時定時執行儲存過程建表(月表)

最近有個需求,在mysql資料庫中每個月建自動一個表,把該月的資料儲存到該月對應的表中。 一、建立儲存過程 期望表名: login_history_2017_07(login_history_YYYY_MM) 欄位: id (int(11) pri

使用 Map + 定時 定時存取微信 Token

微信的 Token 可以存放在資料庫裡 , 需要的時候從資料庫讀取 . 但是這樣日積月累 , 資料量會逐漸撐大 , 而且 token 我們用指定時間(兩小時內)就會丟棄 , 以後也不會用到過期的 token , 所以將它儲存在資料庫是很浪費資源的 . 所以我寫了

Mysql定時定時刪除表資料

     由於測試環境有張日誌表沒定時2分鐘程式就狂插資料,導致不到1一個月時間,這張日誌表就佔用了6.7G的空間,但是日誌重新整理較快,有些日誌就沒什麼作用,就寫了個定時器,定期刪除這張表的資料    首先先檢視mysql是否開啟定時任務開關    # SHOW VARIA

STM32定時定時計算公式

Tout = ((arr+1)*(psc+1))/Tclk ; 其中:   Tclk:定時器的輸入時鐘頻率(單位MHZ)  Tout:定時器溢位時間(單位為us)   .TIM_Period = arr;                                  

DSPC54x定時及使用定時產生led的1s週期閃爍

一、C54x的片內定時器是一個可程式設計的定時器,同時可以用於週期性地產生中斷,為16位計數器。定時器主要由定時器暫存器TIM、定時週期暫存器PRD、定時控制暫存器TCR(包括分頻係數TDDR、預標定

利用定時 1和定時0控制led1和led2分別 2hz和0.5hz閃爍

fine blog style 0ms log pre del nbsp efi 1 //利用定時器 1和定時器0控制led1和led2分別 2hz和0.5hz閃爍 2 //利用定時器0 1s,led1取反,利用計數器1,(65535-10)%256,取反 3 #i

STM32cubeMX 基於stm32的定時實現定時1秒LED閃爍

軟體: STM32CubeMX V4.25.0   keil_u5 韌體庫版本: STM32Cube FW_F1 V1.6.1 硬體: OneNet 麒麟座V1.4 在STM32CubeMX中新建專案,選擇正確的MCU型號  

STM32-自學筆記(9.SysTick定時控制LED閃爍,程式用到的庫函式介紹)

1.SysTick_CLKSourceConfig 函式原型:viod SysTick_CLKSourceConfig (u32 SysTick_CLKSource) 功能:選擇SysTick的時鐘源 引數:SysTick_CLKSource:SysTick時鐘源 引數:S

STM32-自學筆記(8.使用STM32的SysTick定時控制LED閃爍

SysTick定時器,被稱為“系統節拍時鐘”。SysTick屬於ARM  Cortex-M3核心的一個內設,STM32也帶有SysTick定時器。 SysTick定時器的基本結構 SysTick工作原理: SysTick從時鐘源介面獲得時鐘驅動 從重灌暫存器將