1. 程式人生 > >imx6q核心定時器實現led閃爍

imx6q核心定時器實現led閃爍

/*************************************************************************
	> File Name: led_drv.c
	> Author: XXDK
	> Email: [email protected] 
	> Created Time: Sun 12 Mar 2017 07:16:54 AM PDT
 ************************************************************************/

#include<linux/init.h>
#include<linux/module.h>
#include<linux/timer.h>
#include<asm/gpio.h>
#include<mach/iomux-mx6q.h>

#define SABRESD_GPIO_LED4	IMX_GPIO_NR(3, 21)
#define SABRESD_GPIO_LED5	IMX_GPIO_NR(3, 22)
#define SABRESD_GPIO_LED6	IMX_GPIO_NR(3, 23)

// 例項化定時器物件
struct timer_list led_timer;
int test_data = 88;

// 構建led 型別
struct led_resource {
	char *name;
	int gpio;
	int data;
};

// 例項化led物件叢集
struct led_resource led_res[] = {
	[0] = {
		.name = "led4",
		.gpio = SABRESD_GPIO_LED4
	},
	[1] = {
		.name = "led5",
		.gpio = SABRESD_GPIO_LED5
	},
	[2] = {
		.name = "led6",
		.gpio = SABRESD_GPIO_LED6
	}
};
// 定時器超時處理方法
static void Led_timer_expires_handle(unsigned long data)
{
	int i;
	int *pdata = (int *)data;

	printk("data is: %d at %s\n", *pdata, __func__);

	if(gpio_get_value(led_res[0].gpio)) {
		for(i = 0; i < ARRAY_SIZE(led_res); i++) 
			gpio_set_value(led_res[i].gpio, 0);
	}
	else if(!gpio_get_value(led_res[0].gpio)) {
		for(i = 0; i < ARRAY_SIZE(led_res); i++) 
			gpio_set_value(led_res[i].gpio, 1);
	}
	/****************************************************
	 * 修改定時器超時時間
	 * 此函式等價於:
	 * 1. 先刪除定時器 del_timer(&led_timer)
	 * 2. 指定新的超時時間 expires = jiffies + 2*HZ
	 * 3. 添加註冊啟動timer add_timer(&led_timer);
	 ****************************************************/
	mod_timer(&led_timer, jiffies + msecs_to_jiffies(2000)); 
}

static int led_timer_init(void)
{
	int i;
	// 申請 led 的 gpio 資源
	for(i = 0; i < ARRAY_SIZE(led_res); i++) {
		gpio_request(led_res[i].gpio, led_res[i].name);
		gpio_direction_output(led_res[i].gpio, 0);
	}

	// 初始化定時器物件
	init_timer(&led_timer);
	// 指定超時時間
	led_timer.expires = jiffies + 2*HZ;
	// 指定超時處理方法
	led_timer.function = Led_timer_expires_handle;
	// 給超時處理方法傳遞引數
	led_timer.data = (unsigned long)&test_data;
	// 向核心註冊並且啟動定時器,開始倒計時
	add_timer(&led_timer);

	return 0;

}

static void led_timer_exit(void)
{
	int i;

	// 從核心移除定時器物件
	del_timer(&led_timer);
	// 釋放led 的 gpio資源
	for(i = 0; i < ARRAY_SIZE(led_res); i++) {
		gpio_direction_output(led_res[i].gpio, 0);
		gpio_free(led_res[i].gpio);
	}
}

module_init(led_timer_init);
module_exit(led_timer_exit);
MODULE_LICENSE("GPL");


相關推薦

imx6q核心定時實現led閃爍

/************************************************************************* > File Name: led_drv.c > Author: XXDK > Email: [em

51微控制器定時實現LED閃爍

要啟用一個定時器,先要開啟定時器,然後產生中斷 系統中斷: 初始化程式應完成如下工作: 對TMOD賦值,以確定T0和T1的工作方式。 計算初值,並將其寫入TH0、TL0或TH1、TL1。 中斷方式時,則對EA賦值,開放定時器中斷。 使TR0或TR1置位,啟動定時/計數器定時或計數。

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

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

定時查詢法和定時中斷法實現LED閃爍

1、定時器查詢法實現LED閃爍 ;2013/4/23 ;延時1s閃爍 org 0000h ajmp start org 30h

定時中斷實現LED閃爍

#include <reg52.h> typedef unsigned char u8; typedef unsigned int u16; sbit led=P2^0; void T

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從時鐘源介面獲得時鐘驅動 從重灌暫存器將

定時控制Led閃爍

實驗目的 閃燈程式在嵌入式學習中猶如“Hello World!”在C/C++語言學習中一樣經典。它以簡單的方式引導了無數的嵌入式愛好者。通過本節的學習你可以基本瞭解STM32的GPIO以及基本定時器的使用。 硬體說明 本例程需要一個定時器和一個LED,其中LED就是擴充套件板上的紅色LED接在PD3上且正極接

DSP:C54x定時及使用定時產生led的1s週期閃爍

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

定時/中斷/PWM】利用一個定時實現一路PWM波的輸出---點亮LED

------------------------------------------湊熱鬧的分割線------------------------------------------------ /*點亮led0(P1^0)和led7(P1^7) 其中led0以5v電壓正

定時控制LED閃爍定時1)

TIM.c檔案#include "TIM1.h"void TIM1_Init(void){    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  NVIC_InitTypeDef NVIC_InitStructure;  //使

2440裸機程式——定時控制LED閃爍

/********************************************************************************************* * File name:timer.c * Author:ZXL  * Description:通過定時器,讓LED燈每

3. 定時控制 LED閃爍定時 1 )

#include <TIM1.H> void TIM1_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; //使能

STM32實戰3.定時控制LED閃爍定時1)

#include "sys.h" #include "led.h" #include "delay.h" #include "TIM1.h" int main(void) { NVIC_Configuration(); LED_Init(); delay_init

LINUX使用一個定時實現設置任意數量定時

ftw rup () int stdlib.h val span 時鐘 sof 本例子參考 Don Libes的Title: Implementing Software Timers例子改寫 為什麽需要這個功能,因為大多數計算機軟件時鐘系統通常只能有一個時鐘觸發一次

quartz定時實現

quartz總結:要實現定時器quartz,我們註意兩步就行了,一是寫好實現類註意實現類的方法名要和配置中一致,二是做好配置。然後就可以測試了。①定時器實現類HealthRecodersTokenScheduler.javapublic class HealthRecodersTokenScheduler {

Spring自帶定時實現定時任務

str esc exec count nis 開始 針對 exe 結束 在Spring框架中實現定時任務的辦法至少有2種(不包括Java原生的Timer及Executor實現方式),一種是集成第三方定時任務框架,如無處不在的Quartz;另一種便是Spring自帶的定時器(

Spring中定時實現

很多 xmlns ice ... spring3 runtime pack tcl 首字母 在一些工作需要使用到定時器,Spring很好的集成了定時器的功能! 在Spring 中使用Quartz,本文介紹Spring3.0以後自主開發的定時任務工具,spring task

JavaScript定時實現背景顏色交替變換

style doctype .get code c函數 idt 設置 eight remove 原生JavaScript定時器實現背景顏色交替變換 <!DOCTYPE html> <html lang="zh-cn"> <head&g

linux驅動開發學習--對中斷和核心定時的學習筆記

一 中斷理解                             &nb